[automerger skipped] Merge "Import translations. DO NOT MERGE ANYWHERE" into rvc-dev am: 192b2b2883 -s ours am: 746360b7a9 -s ours am: f58075dc4f -s ours am: 0cf8813f8a -s ours
am skip reason: subject contains skip directive
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/services/Car/+/12949933
Change-Id: I56148c339229274022081e2debb34aa4e68cce0d
diff --git a/.clang-format b/.clang-format
index 82e72e7..3380a2a 100644
--- a/.clang-format
+++ b/.clang-format
@@ -17,11 +17,22 @@
ContinuationIndentWidth: 8
ConstructorInitializerIndentWidth: 6
SpacesBeforeTrailingComments: 2
-IncludeBlocks: Preserve
DerivePointerAlignment: false
PointerAlignment: Left
UseTab: Never
BreakInheritanceList: AfterColon
BreakConstructorInitializers: AfterColon
PenaltyBreakBeforeFirstCallParameter: 100000
+IncludeBlocks: Regroup
+IncludeCategories:
+ - Regex: '^<[[:alnum:]_]+\.h>'
+ Priority: 3
+ - Regex: '^<sys/(auxv|cachectl|capability|cdefs|endian|epoll|errno|eventfd|fcntl|file|fsuid|ifunc|inotify|ioctl|ipc|klog|limits|mman|mount|msg|mtio|param|personality|poll|prctl|procfs|ptrace|queue|quota|random|reboot|reg|resource|select|sem|sendfile|shm|signalfd|signal|socket|statfs|stat|statvfs|swap|syscall|sysconf|sysinfo|syslog|sysmacros|_system_properties|system_properties|thread_properties|time|timerfd|times|timex|ttydefaults|types|ucontext|uio|un|unistd|user|utsname|vfs|vt|wait|xattr)\.h>'
+ Priority: 3
+ - Regex: '^<[[:alnum:]_]+>'
+ Priority: 4
+ - Regex: '^<.*/[[:alnum:]_]+\.h>'
+ Priority: 2
+ - Regex: '^".*'
+ Priority: 1
---
diff --git a/EncryptionRunner/AndroidManifest.xml b/EncryptionRunner/AndroidManifest.xml
deleted file mode 100644
index 3ebdf42..0000000
--- a/EncryptionRunner/AndroidManifest.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
- package="android.car.encryptionrunner" >
- <uses-sdk android:minSdkVersion="23" android:targetSdkVersion="23" />
-</manifest>
diff --git a/EncryptionRunner/src/android/car/encryptionrunner/DummyEncryptionRunner.java b/EncryptionRunner/src/android/car/encryptionrunner/DummyEncryptionRunner.java
deleted file mode 100644
index 5b63dbc..0000000
--- a/EncryptionRunner/src/android/car/encryptionrunner/DummyEncryptionRunner.java
+++ /dev/null
@@ -1,199 +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 android.car.encryptionrunner;
-
-import android.annotation.IntDef;
-
-import com.android.internal.annotations.VisibleForTesting;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * An encryption runner that doesn't actually do encryption. Useful for debugging. Do not use in
- * production environments.
- */
-@VisibleForTesting
-public class DummyEncryptionRunner implements EncryptionRunner {
-
- private static final String KEY = "key";
- private static final byte[] DUMMY_MESSAGE = "Dummy Message".getBytes();
- @VisibleForTesting
- public static final String INIT = "init";
- @VisibleForTesting
- public static final String INIT_RESPONSE = "initResponse";
- @VisibleForTesting
- public static final String CLIENT_RESPONSE = "clientResponse";
- public static final String VERIFICATION_CODE = "1234";
-
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({Mode.UNKNOWN, Mode.CLIENT, Mode.SERVER})
- private @interface Mode {
-
- int UNKNOWN = 0;
- int CLIENT = 1;
- int SERVER = 2;
- }
-
- private boolean mIsReconnect;
- private boolean mInitReconnectVerification;
- private Key mCurrentDummyKey;
- @Mode
- private int mMode;
- @HandshakeMessage.HandshakeState
- private int mState;
-
- @Override
- public HandshakeMessage initHandshake() {
- checkRunnerIsNew();
- mMode = Mode.CLIENT;
- mState = HandshakeMessage.HandshakeState.IN_PROGRESS;
- return HandshakeMessage.newBuilder()
- .setHandshakeState(mState)
- .setNextMessage(INIT.getBytes())
- .build();
- }
-
- @Override
- public HandshakeMessage respondToInitRequest(byte[] initializationRequest)
- throws HandshakeException {
- checkRunnerIsNew();
- mMode = Mode.SERVER;
- if (!new String(initializationRequest).equals(INIT)) {
- throw new HandshakeException("Unexpected initialization request");
- }
- mState = HandshakeMessage.HandshakeState.IN_PROGRESS;
- return HandshakeMessage.newBuilder()
- .setHandshakeState(HandshakeMessage.HandshakeState.IN_PROGRESS)
- .setNextMessage(INIT_RESPONSE.getBytes())
- .build();
- }
-
- private void checkRunnerIsNew() {
- if (mState != HandshakeMessage.HandshakeState.UNKNOWN) {
- throw new IllegalStateException("runner already initialized.");
- }
- }
-
- @Override
- public HandshakeMessage continueHandshake(byte[] response) throws HandshakeException {
- if (mState != HandshakeMessage.HandshakeState.IN_PROGRESS) {
- throw new HandshakeException("not waiting for response but got one");
- }
- switch (mMode) {
- case Mode.SERVER:
- if (!CLIENT_RESPONSE.equals(new String(response))) {
- throw new HandshakeException("unexpected response: " + new String(response));
- }
- mState = HandshakeMessage.HandshakeState.VERIFICATION_NEEDED;
- if (mIsReconnect) {
- verifyPin();
- mState = HandshakeMessage.HandshakeState.RESUMING_SESSION;
- }
- return HandshakeMessage.newBuilder()
- .setVerificationCode(VERIFICATION_CODE)
- .setHandshakeState(mState)
- .build();
- case Mode.CLIENT:
- if (!INIT_RESPONSE.equals(new String(response))) {
- throw new HandshakeException("unexpected response: " + new String(response));
- }
- mState = HandshakeMessage.HandshakeState.VERIFICATION_NEEDED;
- if (mIsReconnect) {
- verifyPin();
- mState = HandshakeMessage.HandshakeState.RESUMING_SESSION;
- }
- return HandshakeMessage.newBuilder()
- .setHandshakeState(mState)
- .setNextMessage(CLIENT_RESPONSE.getBytes())
- .setVerificationCode(VERIFICATION_CODE)
- .build();
- default:
- throw new IllegalStateException("unexpected role: " + mMode);
- }
- }
-
- @Override
- public HandshakeMessage authenticateReconnection(byte[] message, byte[] previousKey)
- throws HandshakeException {
- mCurrentDummyKey = new DummyKey();
- // Blindly verify the reconnection because this is a dummy encryption runner.
- return HandshakeMessage.newBuilder()
- .setHandshakeState(HandshakeMessage.HandshakeState.FINISHED)
- .setKey(mCurrentDummyKey)
- .setNextMessage(mInitReconnectVerification ? null : DUMMY_MESSAGE)
- .build();
- }
-
- @Override
- public HandshakeMessage initReconnectAuthentication(byte[] previousKey)
- throws HandshakeException {
- mInitReconnectVerification = true;
- mState = HandshakeMessage.HandshakeState.RESUMING_SESSION;
- return HandshakeMessage.newBuilder()
- .setHandshakeState(mState)
- .setNextMessage(DUMMY_MESSAGE)
- .build();
- }
-
- @Override
- public Key keyOf(byte[] serialized) {
- return new DummyKey();
- }
-
- @Override
- public HandshakeMessage verifyPin() throws HandshakeException {
- if (mState != HandshakeMessage.HandshakeState.VERIFICATION_NEEDED) {
- throw new IllegalStateException("asking to verify pin, state = " + mState);
- }
- mState = HandshakeMessage.HandshakeState.FINISHED;
- return HandshakeMessage.newBuilder().setKey(new DummyKey()).setHandshakeState(
- mState).build();
- }
-
- @Override
- public void invalidPin() {
- mState = HandshakeMessage.HandshakeState.INVALID;
- }
-
- @Override
- public void setIsReconnect(boolean isReconnect) {
- mIsReconnect = isReconnect;
- }
-
- private class DummyKey implements Key {
- @Override
- public byte[] asBytes() {
- return KEY.getBytes();
- }
-
- @Override
- public byte[] encryptData(byte[] data) {
- return data;
- }
-
- @Override
- public byte[] decryptData(byte[] encryptedData) {
- return encryptedData;
- }
-
- @Override
- public byte[] getUniqueSession() {
- return KEY.getBytes();
- }
- }
-}
diff --git a/EncryptionRunner/src/android/car/encryptionrunner/EncryptionRunner.java b/EncryptionRunner/src/android/car/encryptionrunner/EncryptionRunner.java
deleted file mode 100644
index f0a34b2..0000000
--- a/EncryptionRunner/src/android/car/encryptionrunner/EncryptionRunner.java
+++ /dev/null
@@ -1,181 +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 android.car.encryptionrunner;
-
-import android.annotation.NonNull;
-
-/**
- * A generalized interface that allows for generating shared secrets as well as encrypting
- * messages.
- *
- * To use this interface:
- *
- * <p>1. As a client.
- *
- * {@code
- * HandshakeMessage initialClientMessage = clientRunner.initHandshake();
- * sendToServer(initialClientMessage.getNextMessage());
- * byte message = getServerResponse();
- * HandshakeMessage message = clientRunner.continueHandshake(message);
- * }
- *
- * <p>If it is a first-time connection,
- *
- * {@code message.getHandshakeState()} should be VERIFICATION_NEEDED, show user the verification
- * code and ask to verify.
- * After user confirmed, {@code HandshakeMessage lastMessage = clientRunner.verifyPin();} otherwise
- * {@code clientRunner.invalidPin(); }
- *
- * Use {@code lastMessage.getKey()} to get the key for encryption.
- *
- * <p>If it is a reconnection,
- *
- * {@code message.getHandshakeState()} should be RESUMING_SESSION, PIN has been verified blindly,
- * send the authentication message over to server, then authenticate the message from server.
- *
- * {@code
- * clientMessage = clientRunner.initReconnectAuthentication(previousKey)
- * sendToServer(clientMessage.getNextMessage());
- * HandshakeMessage lastMessage = clientRunner.authenticateReconnection(previousKey, message)
- * }
- *
- * {@code lastMessage.getHandshakeState()} should be FINISHED if reconnection handshake is done.
- *
- * <p>2. As a server.
- *
- * {@code
- * byte[] initialMessage = getClientMessageBytes();
- * HandshakeMessage message = serverRunner.respondToInitRequest(initialMessage);
- * sendToClient(message.getNextMessage());
- * byte[] clientMessage = getClientResponse();
- * HandshakeMessage message = serverRunner.continueHandshake(clientMessage);}
- *
- * <p>if it is a first-time connection,
- *
- * {@code message.getHandshakeState()} should be VERIFICATION_NEEDED, show user the verification
- * code and ask to verify.
- * After PIN is confirmed, {@code HandshakeMessage lastMessage = serverRunner.verifyPin}, otherwise
- * {@code clientRunner.invalidPin(); }
- * Use {@code lastMessage.getKey()} to get the key for encryption.
- *
- * <p>If it is a reconnection,
- *
- * {@code message.getHandshakeState()} should be RESUMING_SESSION,PIN has been verified blindly,
- * waiting for client message.
- * After client message been received,
- * {@code serverMessage = serverRunner.authenticateReconnection(previousKey, message);
- * sendToClient(serverMessage.getNextMessage());}
- * {@code serverMessage.getHandshakeState()} should be FINISHED if reconnection handshake is done.
- *
- * Also see {@link EncryptionRunnerTest} for examples.
- */
-public interface EncryptionRunner {
-
- String TAG = "EncryptionRunner";
-
- /**
- * Starts an encryption handshake.
- *
- * @return A handshake message with information about the handshake that is started.
- */
- @NonNull
- HandshakeMessage initHandshake();
-
- /**
- * Starts an encryption handshake where the device that is being communicated with already
- * initiated the request.
- *
- * @param initializationRequest the bytes that the other device sent over.
- * @return a handshake message with information about the handshake.
- * @throws HandshakeException if initialization request is invalid.
- */
- @NonNull
- HandshakeMessage respondToInitRequest(@NonNull byte[] initializationRequest)
- throws HandshakeException;
-
- /**
- * Continues a handshake after receiving another response from the connected device.
- *
- * @param response the response from the other device.
- * @return a message that can be used to continue the handshake.
- * @throws HandshakeException if unexpected bytes in response.
- */
- @NonNull
- HandshakeMessage continueHandshake(@NonNull byte[] response) throws HandshakeException;
-
- /**
- * Verifies the pin shown to the user. The result is the next handshake message and will
- * typically contain an encryption key.
- *
- * @throws HandshakeException if not in state to verify pin.
- */
- @NonNull
- HandshakeMessage verifyPin() throws HandshakeException;
-
- /**
- * Notifies the encryption runner that the user failed to validate the pin. After calling this
- * method the runner should not be used, and will throw exceptions.
- */
- void invalidPin();
-
- /**
- * Verifies the reconnection message.
- *
- * <p>The message passed to this method should have been generated by
- * {@link #initReconnectAuthentication(byte[] previousKey)}.
- *
- * <p>If the message is valid, then a {@link HandshakeMessage} will be returned that contains
- * the encryption key and a handshake message which can be used to verify the other side of the
- * connection.
- *
- * @param previousKey previously stored key.
- * @param message message from the client
- * @return a handshake message with an encryption key if verification succeed.
- * @throws HandshakeException if the message does not match.
- */
- @NonNull
- HandshakeMessage authenticateReconnection(@NonNull byte[] message, @NonNull byte[] previousKey)
- throws HandshakeException;
-
- /**
- * Initiates the reconnection verification by generating a message that should be sent to the
- * device that is being reconnected to.
- *
- * @param previousKey previously stored key.
- * @return a handshake message with client's message which will be sent to server.
- * @throws HandshakeException when get encryption key's unique session fail.
- */
- @NonNull
- HandshakeMessage initReconnectAuthentication(@NonNull byte[] previousKey)
- throws HandshakeException;
-
- /**
- * De-serializes a previously serialized key generated by an instance of this encryption runner.
- *
- * @param serialized the serialized bytes of the key.
- * @return the Key object used for encryption.
- */
- @NonNull
- Key keyOf(@NonNull byte[] serialized);
-
- /**
- * Set the signal if it is a reconnection process.
- *
- * @param isReconnect {@code true} if it is a reconnect.
- */
- void setIsReconnect(boolean isReconnect);
-}
diff --git a/EncryptionRunner/src/android/car/encryptionrunner/EncryptionRunnerFactory.java b/EncryptionRunner/src/android/car/encryptionrunner/EncryptionRunnerFactory.java
deleted file mode 100644
index 5b81c87..0000000
--- a/EncryptionRunner/src/android/car/encryptionrunner/EncryptionRunnerFactory.java
+++ /dev/null
@@ -1,72 +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 android.car.encryptionrunner;
-
-import android.annotation.IntDef;
-
-import com.android.internal.annotations.VisibleForTesting;
-
-/**
- * Factory that creates encryption runner.
- */
-public class EncryptionRunnerFactory {
-
- private EncryptionRunnerFactory() {
- // prevent instantiation.
- }
-
- @IntDef({EncryptionRunnerType.UKEY2, EncryptionRunnerType.OOB_UKEY2})
- public @interface EncryptionRunnerType {
- /** Use Ukey2 as underlying key exchange. */
- int UKEY2 = 0;
- /** Use Ukey2 and an out of band channel as underlying key exchange. */
- int OOB_UKEY2 = 1;
- }
-
- /**
- * Creates a new {@link EncryptionRunner} based on {@param type}.
- */
- public static EncryptionRunner newRunner(@EncryptionRunnerType int type) {
- switch (type) {
- case EncryptionRunnerType.UKEY2:
- return new Ukey2EncryptionRunner();
- case EncryptionRunnerType.OOB_UKEY2:
- return new OobUkey2EncryptionRunner();
- default:
- throw new IllegalArgumentException("Unknown EncryptionRunnerType: " + type);
- }
- }
-
- /**
- * Creates a new {@link EncryptionRunner}.
- *
- * @deprecated Use {@link #newRunner(int)} instead.
- */
- @Deprecated
- public static EncryptionRunner newRunner() {
- return newRunner(EncryptionRunnerType.UKEY2);
- }
-
- /**
- * Creates a new {@link EncryptionRunner} one that doesn't actually do encryption but is useful
- * for testing.
- */
- @VisibleForTesting
- public static EncryptionRunner newDummyRunner() {
- return new DummyEncryptionRunner();
- }
-}
diff --git a/EncryptionRunner/src/android/car/encryptionrunner/HandshakeException.java b/EncryptionRunner/src/android/car/encryptionrunner/HandshakeException.java
deleted file mode 100644
index 185a21c..0000000
--- a/EncryptionRunner/src/android/car/encryptionrunner/HandshakeException.java
+++ /dev/null
@@ -1,31 +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 android.car.encryptionrunner;
-
-/**
- * Exception indicating an error during a Handshake of EncryptionRunner.
- */
-public class HandshakeException extends Exception {
-
- HandshakeException(String message) {
- super(message);
- }
-
- HandshakeException(Exception e) {
- super(e);
- }
-}
diff --git a/EncryptionRunner/src/android/car/encryptionrunner/HandshakeMessage.java b/EncryptionRunner/src/android/car/encryptionrunner/HandshakeMessage.java
deleted file mode 100644
index e88d482..0000000
--- a/EncryptionRunner/src/android/car/encryptionrunner/HandshakeMessage.java
+++ /dev/null
@@ -1,194 +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 android.car.encryptionrunner;
-
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.text.TextUtils;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-
-/**
- * During an {@link EncryptionRunner} handshake process, these are the messages returned as part
- * of each step.
- */
-public class HandshakeMessage {
-
- /**
- * States for handshake progress.
- */
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({HandshakeState.UNKNOWN, HandshakeState.IN_PROGRESS, HandshakeState.VERIFICATION_NEEDED,
- HandshakeState.FINISHED, HandshakeState.INVALID, HandshakeState.RESUMING_SESSION,
- HandshakeState.OOB_VERIFICATION_NEEDED})
- public @interface HandshakeState {
- /**
- * The initial state, this value is not expected to be returned.
- */
- int UNKNOWN = 0;
- /**
- * The handshake is in progress.
- */
- int IN_PROGRESS = 1;
- /**
- * The handshake is complete, but verification of the code is needed.
- */
- int VERIFICATION_NEEDED = 2;
- /**
- * The handshake is complete.
- */
- int FINISHED = 3;
- /**
- * The handshake is complete and not successful.
- */
- int INVALID = 4;
- /**
- * The handshake is complete, but extra verification is needed.
- */
- int RESUMING_SESSION = 5;
- /**
- * The handshake is complete, but out of band verification of the code is needed.
- */
- int OOB_VERIFICATION_NEEDED = 6;
- }
-
- @HandshakeState
- private final int mHandshakeState;
- private final Key mKey;
- private final byte[] mNextMessage;
- private final String mVerificationCode;
- private final byte[] mOobVerificationCode;
-
- /**
- * @return Returns a builder for {@link HandshakeMessage}.
- */
- public static Builder newBuilder() {
- return new Builder();
- }
-
- /**
- * Use the builder;
- */
- private HandshakeMessage(
- @HandshakeState int handshakeState,
- @Nullable Key key,
- @Nullable byte[] nextMessage,
- @Nullable String verificationCode,
- @Nullable byte[] oobVerificationCode) {
- mHandshakeState = handshakeState;
- mKey = key;
- mNextMessage = nextMessage;
- mVerificationCode = verificationCode;
- mOobVerificationCode = oobVerificationCode;
- }
-
- /**
- * Returns the next message to send in a handshake.
- */
- @Nullable
- public byte[] getNextMessage() {
- return mNextMessage == null ? null : mNextMessage.clone();
- }
-
- /**
- * Returns the state of the handshake.
- */
- @HandshakeState
- public int getHandshakeState() {
- return mHandshakeState;
- }
-
- /**
- * Returns the encryption key that can be used to encrypt data.
- */
- @Nullable
- public Key getKey() {
- return mKey;
- }
-
- /**
- * Returns a verification code to show to the user.
- */
- @Nullable
- public String getVerificationCode() {
- return mVerificationCode;
- }
-
- /**
- * Returns a verification code to be encrypted using an out-of-band key and sent to the remote
- * device.
- */
- @Nullable
- public byte[] getOobVerificationCode() {
- return mOobVerificationCode;
- }
-
- static class Builder {
- @HandshakeState
- int mHandshakeState;
- Key mKey;
- byte[] mNextMessage;
- String mVerificationCode;
- byte[] mOobVerificationCode;
-
- Builder setHandshakeState(@HandshakeState int handshakeState) {
- mHandshakeState = handshakeState;
- return this;
- }
-
- Builder setKey(@Nullable Key key) {
- mKey = key;
- return this;
- }
-
- Builder setNextMessage(@Nullable byte[] nextMessage) {
- mNextMessage = nextMessage == null ? null : nextMessage.clone();
- return this;
- }
-
- Builder setVerificationCode(@Nullable String verificationCode) {
- mVerificationCode = verificationCode;
- return this;
- }
-
- Builder setOobVerificationCode(@NonNull byte[] oobVerificationCode) {
- mOobVerificationCode = oobVerificationCode;
- return this;
- }
-
- HandshakeMessage build() {
- if (mHandshakeState == HandshakeState.UNKNOWN) {
- throw new IllegalStateException("must set handshake state before calling build");
- }
- if (mHandshakeState == HandshakeState.VERIFICATION_NEEDED
- && TextUtils.isEmpty(mVerificationCode)) {
- throw new IllegalStateException(
- "State is verification needed, but verification code null.");
- }
- if (mHandshakeState == HandshakeState.OOB_VERIFICATION_NEEDED
- && (mOobVerificationCode == null || mOobVerificationCode.length == 0)) {
- throw new IllegalStateException(
- "State is OOB verification needed, but OOB verification code null.");
- }
- return new HandshakeMessage(mHandshakeState, mKey, mNextMessage, mVerificationCode,
- mOobVerificationCode);
- }
-
- }
-}
diff --git a/EncryptionRunner/src/android/car/encryptionrunner/Key.java b/EncryptionRunner/src/android/car/encryptionrunner/Key.java
deleted file mode 100644
index 2e32858..0000000
--- a/EncryptionRunner/src/android/car/encryptionrunner/Key.java
+++ /dev/null
@@ -1,60 +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 android.car.encryptionrunner;
-
-import android.annotation.NonNull;
-
-import java.security.NoSuchAlgorithmException;
-import java.security.SignatureException;
-
-/**
- * Represents a serializable encryption key.
- */
-public interface Key {
- /**
- * Returns a serialized encryption key.
- */
- @NonNull
- byte[] asBytes();
-
- /**
- * Encrypts data using this key.
- *
- * @param data the data to be encrypted
- * @return the encrypted data.
- */
- @NonNull
- byte[] encryptData(@NonNull byte[] data);
-
- /**
- * Decrypts data using this key.
- *
- * @param encryptedData The encrypted data.
- * @return decrypted data.
- * @throws SignatureException if encrypted data is not properly signed.
- */
- @NonNull
- byte[] decryptData(@NonNull byte[] encryptedData) throws SignatureException;
-
- /**
- * Returns a cryptographic digest of the key.
- *
- * @throws NoSuchAlgorithmException when a unique session can not be created.
- */
- @NonNull
- byte[] getUniqueSession() throws NoSuchAlgorithmException;
-}
diff --git a/EncryptionRunner/src/android/car/encryptionrunner/OobUkey2EncryptionRunner.java b/EncryptionRunner/src/android/car/encryptionrunner/OobUkey2EncryptionRunner.java
deleted file mode 100644
index 9474bd4..0000000
--- a/EncryptionRunner/src/android/car/encryptionrunner/OobUkey2EncryptionRunner.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * Copyright 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.car.encryptionrunner;
-
-import com.google.security.cryptauth.lib.securegcm.Ukey2Handshake;
-
-/**
- * An {@link EncryptionRunner} that uses Ukey2 as the underlying implementation, and generates a
- * longer token for the out of band verification step.
- *
- * <p>To use this class:
- *
- * <p>1. As a client.
- *
- * <p>{@code
- * HandshakeMessage initialClientMessage = clientRunner.initHandshake();
- * sendToServer(initialClientMessage.getNextMessage());
- * byte message = getServerResponse();
- * HandshakeMessage message = clientRunner.continueHandshake(message);
- * }
- *
- * <p>If it is a first-time connection,
- *
- * <p>{@code message.getHandshakeState()} should be OOB_VERIFICATION_NEEDED. Wait for an encrypted
- * message sent from the server, and decrypt that message with an out of band key that was generated
- * before the start of the handshake.
- *
- * <p>After confirming that the decrypted message matches the verification code, send an encrypted
- * message back to the server, and call {@code HandshakeMessage lastMessage =
- * clientRunner.verifyPin();} otherwise {@code clientRunner.invalidPin(); }
- *
- * <p>Use {@code lastMessage.getKey()} to get the key for encryption.
- *
- * <p>If it is a reconnection,
- *
- * <p>{@code message.getHandshakeState()} should be RESUMING_SESSION, PIN has been verified blindly,
- * send the authentication message over to server, then authenticate the message from server.
- *
- * <p>{@code
- * clientMessage = clientRunner.initReconnectAuthentication(previousKey)
- * sendToServer(clientMessage.getNextMessage());
- * HandshakeMessage lastMessage = clientRunner.authenticateReconnection(previousKey, message)
- * }
- *
- * <p>{@code lastMessage.getHandshakeState()} should be FINISHED if reconnection handshake is done.
- *
- * <p>2. As a server.
- *
- * <p>{@code
- * byte[] initialMessage = getClientMessageBytes();
- * HandshakeMessage message = serverRunner.respondToInitRequest(initialMessage);
- * sendToClient(message.getNextMessage());
- * byte[] clientMessage = getClientResponse();
- * HandshakeMessage message = serverRunner.continueHandshake(clientMessage);}
- *
- * <p>if it is a first-time connection,
- *
- * <p>{@code message.getHandshakeState()} should be OOB_VERIFICATION_NEEDED, send the verification
- * code to the client, encrypted using an out of band key generated before the start of the
- * handshake, and wait for a response from the client.
- * If the decrypted message from the client matches the verification code, call {@code
- * HandshakeMessage lastMessage = serverRunner.verifyPin}, otherwise
- * {@code clientRunner.invalidPin(); }
- * Use {@code lastMessage.getKey()} to get the key for encryption.
- *
- * <p>If it is a reconnection,
- *
- * <p>{@code message.getHandshakeState()} should be RESUMING_SESSION,PIN has been verified blindly,
- * waiting for client message.
- * After client message been received,
- * {@code serverMessage = serverRunner.authenticateReconnection(previousKey, message);
- * sendToClient(serverMessage.getNextMessage());}
- * {@code serverMessage.getHandshakeState()} should be FINISHED if reconnection handshake is done.
- *
- * <p>Also see {@link EncryptionRunnerTest} for examples.
- */
-public final class OobUkey2EncryptionRunner extends Ukey2EncryptionRunner {
- // Choose max verification string length supported by Ukey2
- private static final int VERIFICATION_STRING_LENGTH = 32;
-
- @Override
- public HandshakeMessage continueHandshake(byte[] response) throws HandshakeException {
- checkInitialized();
-
- Ukey2Handshake uKey2Client = getUkey2Client();
-
- try {
- if (uKey2Client.getHandshakeState() != Ukey2Handshake.State.IN_PROGRESS) {
- throw new IllegalStateException(
- "handshake is not in progress, state =" + uKey2Client.getHandshakeState());
- }
- uKey2Client.parseHandshakeMessage(response);
-
- // Not obvious from ukey2 api, but getting the next message can change the state.
- // calling getNext message might go from in progress to verification needed, on
- // the assumption that we already send this message to the peer.
- byte[] nextMessage = null;
- if (uKey2Client.getHandshakeState() == Ukey2Handshake.State.IN_PROGRESS) {
- nextMessage = uKey2Client.getNextHandshakeMessage();
- }
-
- byte[] verificationCode = null;
- if (uKey2Client.getHandshakeState() == Ukey2Handshake.State.VERIFICATION_NEEDED) {
- // getVerificationString() needs to be called before notifyPinVerified().
- verificationCode = uKey2Client.getVerificationString(VERIFICATION_STRING_LENGTH);
- if (isReconnect()) {
- HandshakeMessage handshakeMessage = verifyPin();
- return HandshakeMessage.newBuilder()
- .setHandshakeState(handshakeMessage.getHandshakeState())
- .setNextMessage(nextMessage)
- .build();
- }
- }
-
- return HandshakeMessage.newBuilder()
- .setHandshakeState(HandshakeMessage.HandshakeState.OOB_VERIFICATION_NEEDED)
- .setNextMessage(nextMessage)
- .setOobVerificationCode(verificationCode)
- .build();
- } catch (com.google.security.cryptauth.lib.securegcm.HandshakeException
- | Ukey2Handshake.AlertException e) {
- throw new HandshakeException(e);
- }
- }
-}
diff --git a/EncryptionRunner/src/android/car/encryptionrunner/Ukey2EncryptionRunner.java b/EncryptionRunner/src/android/car/encryptionrunner/Ukey2EncryptionRunner.java
deleted file mode 100644
index 454a48b..0000000
--- a/EncryptionRunner/src/android/car/encryptionrunner/Ukey2EncryptionRunner.java
+++ /dev/null
@@ -1,405 +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 android.car.encryptionrunner;
-
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.util.Log;
-
-import com.android.internal.annotations.VisibleForTesting;
-
-import com.google.security.cryptauth.lib.securegcm.D2DConnectionContext;
-import com.google.security.cryptauth.lib.securegcm.Ukey2Handshake;
-import com.google.security.cryptauth.lib.securemessage.CryptoOps;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.security.InvalidKeyException;
-import java.security.MessageDigest;
-import java.security.NoSuchAlgorithmException;
-import java.security.SignatureException;
-
-import javax.crypto.spec.SecretKeySpec;
-
-/**
- * An {@link EncryptionRunner} that uses Ukey2 as the underlying implementation.
- */
-public class Ukey2EncryptionRunner implements EncryptionRunner {
-
- private static final Ukey2Handshake.HandshakeCipher CIPHER =
- Ukey2Handshake.HandshakeCipher.P256_SHA512;
- private static final int RESUME_HMAC_LENGTH = 32;
- private static final byte[] RESUME = "RESUME".getBytes();
- private static final byte[] SERVER = "SERVER".getBytes();
- private static final byte[] CLIENT = "CLIENT".getBytes();
- private static final int AUTH_STRING_LENGTH = 6;
-
- @IntDef({Mode.UNKNOWN, Mode.CLIENT, Mode.SERVER})
- private @interface Mode {
- int UNKNOWN = 0;
- int CLIENT = 1;
- int SERVER = 2;
- }
-
- private Ukey2Handshake mUkey2client;
- private boolean mRunnerIsInvalid;
- private Key mCurrentKey;
- private byte[] mCurrentUniqueSesion;
- private byte[] mPrevUniqueSesion;
- private boolean mIsReconnect;
- private boolean mInitReconnectionVerification;
- @Mode
- private int mMode = Mode.UNKNOWN;
-
- @Override
- public HandshakeMessage initHandshake() {
- checkRunnerIsNew();
- mMode = Mode.CLIENT;
- try {
- mUkey2client = Ukey2Handshake.forInitiator(CIPHER);
- return HandshakeMessage.newBuilder()
- .setHandshakeState(getHandshakeState())
- .setNextMessage(mUkey2client.getNextHandshakeMessage())
- .build();
- } catch (com.google.security.cryptauth.lib.securegcm.HandshakeException e) {
- Log.e(TAG, "unexpected exception", e);
- throw new RuntimeException(e);
- }
-
- }
-
- @Override
- public void setIsReconnect(boolean isReconnect) {
- mIsReconnect = isReconnect;
- }
-
- @Override
- public HandshakeMessage respondToInitRequest(byte[] initializationRequest)
- throws HandshakeException {
- checkRunnerIsNew();
- mMode = Mode.SERVER;
- try {
- if (mUkey2client != null) {
- throw new IllegalStateException("Cannot reuse encryption runners, "
- + "this one is already initialized");
- }
- mUkey2client = Ukey2Handshake.forResponder(CIPHER);
- mUkey2client.parseHandshakeMessage(initializationRequest);
- return HandshakeMessage.newBuilder()
- .setHandshakeState(getHandshakeState())
- .setNextMessage(mUkey2client.getNextHandshakeMessage())
- .build();
-
- } catch (com.google.security.cryptauth.lib.securegcm.HandshakeException
- | Ukey2Handshake.AlertException e) {
- throw new HandshakeException(e);
- }
- }
-
- private void checkRunnerIsNew() {
- if (mUkey2client != null) {
- throw new IllegalStateException("This runner is already initialized.");
- }
- }
-
-
- @Override
- public HandshakeMessage continueHandshake(byte[] response) throws HandshakeException {
- checkInitialized();
- try {
- if (mUkey2client.getHandshakeState() != Ukey2Handshake.State.IN_PROGRESS) {
- throw new IllegalStateException("handshake is not in progress, state ="
- + mUkey2client.getHandshakeState());
- }
- mUkey2client.parseHandshakeMessage(response);
-
- // Not obvious from ukey2 api, but getting the next message can change the state.
- // calling getNext message might go from in progress to verification needed, on
- // the assumption that we already send this message to the peer.
- byte[] nextMessage = null;
- if (mUkey2client.getHandshakeState() == Ukey2Handshake.State.IN_PROGRESS) {
- nextMessage = mUkey2client.getNextHandshakeMessage();
- }
- String verificationCode = null;
- if (mUkey2client.getHandshakeState() == Ukey2Handshake.State.VERIFICATION_NEEDED) {
- // getVerificationString() needs to be called before verifyPin().
- verificationCode = generateReadablePairingCode(
- mUkey2client.getVerificationString(AUTH_STRING_LENGTH));
- if (mIsReconnect) {
- HandshakeMessage handshakeMessage = verifyPin();
- return HandshakeMessage.newBuilder()
- .setHandshakeState(handshakeMessage.getHandshakeState())
- .setNextMessage(nextMessage)
- .build();
- }
- }
- return HandshakeMessage.newBuilder()
- .setHandshakeState(getHandshakeState())
- .setNextMessage(nextMessage)
- .setVerificationCode(verificationCode)
- .build();
- } catch (com.google.security.cryptauth.lib.securegcm.HandshakeException
- | Ukey2Handshake.AlertException e) {
- throw new HandshakeException(e);
- }
- }
-
- /**
- * Returns a human-readable pairing code string generated from the verification bytes. Converts
- * each byte into a digit with a simple modulo.
- *
- * <p>This should match the implementation in the iOS and Android client libraries.
- */
- @VisibleForTesting
- String generateReadablePairingCode(byte[] verificationCode) {
- StringBuilder outString = new StringBuilder();
- for (byte b : verificationCode) {
- int unsignedInt = Byte.toUnsignedInt(b);
- int digit = unsignedInt % 10;
- outString.append(digit);
- }
-
- return outString.toString();
- }
-
- private static class UKey2Key implements Key {
-
- private final D2DConnectionContext mConnectionContext;
-
- UKey2Key(@NonNull D2DConnectionContext connectionContext) {
- this.mConnectionContext = connectionContext;
- }
-
- @Override
- public byte[] asBytes() {
- return mConnectionContext.saveSession();
- }
-
- @Override
- public byte[] encryptData(byte[] data) {
- return mConnectionContext.encodeMessageToPeer(data);
- }
-
- @Override
- public byte[] decryptData(byte[] encryptedData) throws SignatureException {
- return mConnectionContext.decodeMessageFromPeer(encryptedData);
- }
-
- @Override
- public byte[] getUniqueSession() throws NoSuchAlgorithmException {
- return mConnectionContext.getSessionUnique();
- }
- }
-
- @Override
- public HandshakeMessage verifyPin() throws HandshakeException {
- checkInitialized();
- mUkey2client.verifyHandshake();
- int state = getHandshakeState();
- try {
- mCurrentKey = new UKey2Key(mUkey2client.toConnectionContext());
- } catch (com.google.security.cryptauth.lib.securegcm.HandshakeException e) {
- throw new HandshakeException(e);
- }
- return HandshakeMessage.newBuilder()
- .setHandshakeState(state)
- .setKey(mCurrentKey)
- .build();
- }
-
- /**
- * <p>After getting message from the other device, authenticate the message with the previous
- * stored key.
- *
- * If current device inits the reconnection authentication by calling {@code
- * initReconnectAuthentication} and sends the message to the other device, the other device
- * will call {@code authenticateReconnection()} with the received message and send its own
- * message back to the init device. The init device will call {@code
- * authenticateReconnection()} on the received message, but do not need to set the next
- * message.
- */
- @Override
- public HandshakeMessage authenticateReconnection(byte[] message, byte[] previousKey)
- throws HandshakeException {
- if (!mIsReconnect) {
- throw new HandshakeException(
- "Reconnection authentication requires setIsReconnect(true)");
- }
- if (mCurrentKey == null) {
- throw new HandshakeException("Current key is null, make sure verifyPin() is called.");
- }
- if (message.length != RESUME_HMAC_LENGTH) {
- mRunnerIsInvalid = true;
- throw new HandshakeException("Failing because (message.length =" + message.length
- + ") is not equal to " + RESUME_HMAC_LENGTH);
- }
- try {
- mCurrentUniqueSesion = mCurrentKey.getUniqueSession();
- mPrevUniqueSesion = keyOf(previousKey).getUniqueSession();
- } catch (NoSuchAlgorithmException e) {
- throw new HandshakeException(e);
- }
- switch (mMode) {
- case Mode.SERVER:
- if (!MessageDigest.isEqual(
- message, computeMAC(mPrevUniqueSesion, mCurrentUniqueSesion, CLIENT))) {
- mRunnerIsInvalid = true;
- throw new HandshakeException("Reconnection authentication failed.");
- }
- return HandshakeMessage.newBuilder()
- .setHandshakeState(HandshakeMessage.HandshakeState.FINISHED)
- .setKey(mCurrentKey)
- .setNextMessage(mInitReconnectionVerification ? null
- : computeMAC(mPrevUniqueSesion, mCurrentUniqueSesion, SERVER))
- .build();
- case Mode.CLIENT:
- if (!MessageDigest.isEqual(
- message, computeMAC(mPrevUniqueSesion, mCurrentUniqueSesion, SERVER))) {
- mRunnerIsInvalid = true;
- throw new HandshakeException("Reconnection authentication failed.");
- }
- return HandshakeMessage.newBuilder()
- .setHandshakeState(HandshakeMessage.HandshakeState.FINISHED)
- .setKey(mCurrentKey)
- .setNextMessage(mInitReconnectionVerification ? null
- : computeMAC(mPrevUniqueSesion, mCurrentUniqueSesion, CLIENT))
- .build();
- default:
- throw new IllegalStateException(
- "Encountered unexpected role during authenticateReconnection: " + mMode);
- }
- }
-
- /**
- * Both client and server can call this method to send authentication message to the other
- * device.
- */
- @Override
- public HandshakeMessage initReconnectAuthentication(byte[] previousKey)
- throws HandshakeException {
- if (!mIsReconnect) {
- throw new HandshakeException(
- "Reconnection authentication requires setIsReconnect(true).");
- }
- if (mCurrentKey == null) {
- throw new HandshakeException("Current key is null, make sure verifyPin() is called.");
- }
- mInitReconnectionVerification = true;
- try {
- mCurrentUniqueSesion = mCurrentKey.getUniqueSession();
- mPrevUniqueSesion = keyOf(previousKey).getUniqueSession();
- } catch (NoSuchAlgorithmException e) {
- throw new HandshakeException(e);
- }
- switch (mMode) {
- case Mode.SERVER:
- return HandshakeMessage.newBuilder()
- .setHandshakeState(HandshakeMessage.HandshakeState.RESUMING_SESSION)
- .setNextMessage(computeMAC(mPrevUniqueSesion, mCurrentUniqueSesion, SERVER))
- .build();
- case Mode.CLIENT:
- return HandshakeMessage.newBuilder()
- .setHandshakeState(HandshakeMessage.HandshakeState.RESUMING_SESSION)
- .setNextMessage(computeMAC(mPrevUniqueSesion, mCurrentUniqueSesion, CLIENT))
- .build();
- default:
- throw new IllegalStateException(
- "Encountered unexpected role during authenticateReconnection: " + mMode);
- }
- }
-
- protected final Ukey2Handshake getUkey2Client() {
- return mUkey2client;
- }
-
- protected final boolean isReconnect() {
- return mIsReconnect;
- }
-
- @HandshakeMessage.HandshakeState
- private int getHandshakeState() {
- checkInitialized();
- switch (mUkey2client.getHandshakeState()) {
- case ALREADY_USED:
- case ERROR:
- throw new IllegalStateException("unexpected error state");
- case FINISHED:
- if (mIsReconnect) {
- return HandshakeMessage.HandshakeState.RESUMING_SESSION;
- }
- return HandshakeMessage.HandshakeState.FINISHED;
- case IN_PROGRESS:
- return HandshakeMessage.HandshakeState.IN_PROGRESS;
- case VERIFICATION_IN_PROGRESS:
- case VERIFICATION_NEEDED:
- return HandshakeMessage.HandshakeState.VERIFICATION_NEEDED;
- default:
- throw new IllegalStateException("unexpected handshake state");
- }
- }
-
- @Override
- public Key keyOf(byte[] serialized) {
- return new UKey2Key(D2DConnectionContext.fromSavedSession(serialized));
- }
-
- @Override
- public void invalidPin() {
- mRunnerIsInvalid = true;
- }
-
- private UKey2Key checkIsUkey2Key(Key key) {
- if (!(key instanceof UKey2Key)) {
- throw new IllegalArgumentException("wrong key type");
- }
- return (UKey2Key) key;
- }
-
- protected void checkInitialized() {
- if (mUkey2client == null) {
- throw new IllegalStateException("runner not initialized");
- }
- if (mRunnerIsInvalid) {
- throw new IllegalStateException("runner has been invalidated");
- }
- }
-
- @Nullable
- private byte[] computeMAC(byte[] previous, byte[] next, byte[] info) {
- try {
- SecretKeySpec inputKeyMaterial = new SecretKeySpec(
- concatByteArrays(previous, next), "" /* key type is just plain raw bytes */);
- return CryptoOps.hkdf(inputKeyMaterial, RESUME, info);
- } catch (NoSuchAlgorithmException | InvalidKeyException e) {
- // Does not happen in practice
- Log.e(TAG, "Compute MAC failed");
- return null;
- }
- }
-
- private static byte[] concatByteArrays(@NonNull byte[] a, @NonNull byte[] b) {
- ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
- try {
- outputStream.write(a);
- outputStream.write(b);
- } catch (IOException e) {
- return new byte[0];
- }
- return outputStream.toByteArray();
- }
-}
diff --git a/FrameworkPackageStubs/AndroidManifest.xml b/FrameworkPackageStubs/AndroidManifest.xml
index 4e51f13..44a114b 100644
--- a/FrameworkPackageStubs/AndroidManifest.xml
+++ b/FrameworkPackageStubs/AndroidManifest.xml
@@ -1,211 +1,229 @@
<?xml version="1.0" encoding="utf-8"?>
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.car.frameworkpackagestubs"
- android:versionCode="1"
- android:versionName="1.0.1">
+ package="com.android.car.frameworkpackagestubs"
+ android:versionCode="1"
+ android:versionName="1.0.1">
<uses-sdk android:minSdkVersion="28"/>
<application android:label="@string/app_name"
- android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
+ android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
<!-- Dialer stubs -->
<activity android:name=".Stubs$DialerStub"
- android:label="@string/stub_name"
- android:excludeFromRecents="true">
+ android:label="@string/stub_name"
+ android:excludeFromRecents="true"
+ android:exported="true">
<intent-filter android:priority="-1">
- <action android:name="android.intent.action.DIAL" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.intent.action.DIAL"/>
+ <category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="voicemail"/>
</intent-filter>
</activity>
<!-- Music / media stubs. -->
<activity android:name=".Stubs$MediaStub"
- android:label="@string/stub_name"
- android:excludeFromRecents="true">
+ android:label="@string/stub_name"
+ android:excludeFromRecents="true"
+ android:exported="true">
<intent-filter android:priority="-1">
- <action android:name="android.intent.action.VIEW" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.intent.action.VIEW"/>
+ <category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="file"/>
<data android:mimeType="audio/*"/>
<data android:mimeType="application/ogg"/>
<data android:mimeType="application/x-ogg"/>
</intent-filter>
<intent-filter android:priority="-1">
- <action android:name="android.intent.action.VIEW" />
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.BROWSABLE" />
+ <action android:name="android.intent.action.VIEW"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ <category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="http"/>
<data android:mimeType="audio/*"/>
<data android:mimeType="application/ogg"/>
<data android:mimeType="application/x-ogg"/>
</intent-filter>
<intent-filter android:priority="-1">
- <action android:name="android.intent.action.VIEW" />
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.BROWSABLE" />
+ <action android:name="android.intent.action.VIEW"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ <category android:name="android.intent.category.BROWSABLE"/>
<data android:scheme="content"/>
<data android:mimeType="audio/*"/>
<data android:mimeType="application/ogg"/>
<data android:mimeType="application/x-ogg"/>
</intent-filter>
<intent-filter android:priority="-1">
- <action android:name="android.intent.action.PICK" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.intent.action.PICK"/>
+ <category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="vnd.android.cursor.dir/audio"/>
</intent-filter>
<intent-filter android:priority="-1">
- <action android:name="android.intent.action.VIEW" />
- <category android:name="android.intent.category.DEFAULT" />
- <category android:name="android.intent.category.BROWSABLE" />
- <data android:scheme="" />
- <data android:scheme="http" />
- <data android:scheme="https" />
- <data android:scheme="content" />
- <data android:scheme="file" />
- <data android:mimeType="video/*" />
- <data android:mimeType="image/*" />
+ <action android:name="android.intent.action.VIEW"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ <category android:name="android.intent.category.BROWSABLE"/>
+ <data android:scheme=""/>
+ <data android:scheme="http"/>
+ <data android:scheme="https"/>
+ <data android:scheme="content"/>
+ <data android:scheme="file"/>
+ <data android:mimeType="video/*"/>
+ <data android:mimeType="image/*"/>
</intent-filter>
<intent-filter android:priority="-1">
- <action android:name="android.intent.action.PICK" />
- <action android:name="android.intent.action.VIEW" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="vnd.android.cursor.dir/image" />
+ <action android:name="android.intent.action.PICK"/>
+ <action android:name="android.intent.action.VIEW"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ <data android:mimeType="vnd.android.cursor.dir/image"/>
</intent-filter>
<intent-filter android:priority="-1">
- <action android:name="android.intent.action.PICK" />
- <action android:name="android.intent.action.VIEW" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.intent.action.PICK"/>
+ <action android:name="android.intent.action.VIEW"/>
+ <category android:name="android.intent.category.DEFAULT"/>
<data android:mimeType="vnd.android.cursor.dir/video"/>
</intent-filter>
</activity>
<!-- Settings package stubs -->
<activity android:name=".Stubs$SettingsStub"
- android:label="@string/stub_name"
- android:excludeFromRecents="true">
+ android:label="@string/stub_name"
+ android:excludeFromRecents="true"
+ android:exported="true">
<intent-filter android:priority="-1">
- <action android:name="android.app.action.ADD_DEVICE_ADMIN" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- <intent-filter android:priority="-1">
- <action android:name="android.settings.ACCESSIBILITY_SETTINGS" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- <intent-filter android:priority="-1">
- <action android:name="android.settings.LOCATION_SCANNING_SETTINGS" />
+ <action android:name="android.app.action.ADD_DEVICE_ADMIN"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter android:priority="-1">
- <action android:name="android.settings.MANAGE_UNKNOWN_APP_SOURCES" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.settings.ACCESSIBILITY_SETTINGS"/>
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter android:priority="-1">
- <action android:name="android.settings.PROCESS_WIFI_EASY_CONNECT_URI" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.settings.LOCATION_SCANNING_SETTINGS"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ </intent-filter>
+ <intent-filter android:priority="-1">
+ <action android:name="android.settings.MANAGE_UNKNOWN_APP_SOURCES"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ </intent-filter>
+ <intent-filter android:priority="-1">
+ <action android:name="android.settings.PROCESS_WIFI_EASY_CONNECT_URI"/>
+ <category android:name="android.intent.category.DEFAULT"/>
<data android:scheme="DPP"/>
</intent-filter>
<intent-filter android:priority="-1">
- <action android:name="android.settings.USER_DICTIONARY_SETTINGS" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- <intent-filter android:priority="-1">
- <action android:name="android.settings.PICTURE_IN_PICTURE_SETTINGS" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.settings.USER_DICTIONARY_SETTINGS"/>
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<!-- CDD Core Application Intents Stubs -->
<!-- Desk Clock -->
<activity android:name=".Stubs$DeskClockStub"
- android:label="@string/stub_name"
- android:excludeFromRecents="true">
+ android:label="@string/stub_name"
+ android:excludeFromRecents="true"
+ android:exported="true">
<intent-filter android:priority="-1">
- <action android:name="android.intent.action.SET_ALARM" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.intent.action.SET_ALARM"/>
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter android:priority="-1">
- <action android:name="android.intent.action.SET_TIMER" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.intent.action.SET_TIMER"/>
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter android:priority="-1">
- <action android:name="android.intent.action.SHOW_ALARMS" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.intent.action.SHOW_ALARMS"/>
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter android:priority="-1">
- <action android:name="android.intent.action.DISMISS_ALARM" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.intent.action.DISMISS_ALARM"/>
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter android:priority="-1">
- <action android:name="android.intent.action.SHOW_TIMERS" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.intent.action.SHOW_TIMERS"/>
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter android:priority="-1">
- <action android:name="android.intent.action.SNOOZE_ALARM" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.intent.action.SNOOZE_ALARM"/>
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<!-- Calendar -->
<activity android:name=".Stubs$CalendarStub"
- android:label="@string/stub_name"
- android:excludeFromRecents="true">
+ android:label="@string/stub_name"
+ android:excludeFromRecents="true"
+ android:exported="true">
<intent-filter android:priority="-1">
- <action android:name="android.intent.action.EDIT" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:mimeType="vnd.android.cursor.item/event" />
+ <action android:name="android.intent.action.EDIT"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ <data android:mimeType="vnd.android.cursor.item/event"/>
</intent-filter>
</activity>
<!-- Browser -->
<activity android:name=".Stubs$BrowserStub"
- android:label="@string/stub_name"
- android:excludeFromRecents="true">
+ android:label="@string/stub_name"
+ android:excludeFromRecents="true"
+ android:exported="true">
<intent-filter android:priority="-1">
- <action android:name="android.intent.action.WEB_SEARCH" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.intent.action.WEB_SEARCH"/>
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<!-- Ignore Background Data Restriction Setting -->
<activity android:name=".Stubs$IgnoreBackgroundDataRestrictionsSettingsStub"
- android:label="@string/stub_name"
- android:excludeFromRecents="true">
+ android:label="@string/stub_name"
+ android:excludeFromRecents="true"
+ android:exported="true">
<intent-filter android:priority="-1">
- <action android:name="android.settings.IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:scheme="package" />
+ <action android:name="android.settings.IGNORE_BACKGROUND_DATA_RESTRICTIONS_SETTINGS"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ <data android:scheme="package"/>
</intent-filter>
</activity>
<!-- Ignore Battery Optimization Setting -->
<activity android:name=".Stubs$IgnoreBatteryOptimizationSettingsStub"
- android:label="@string/stub_name"
- android:excludeFromRecents="true">
+ android:label="@string/stub_name"
+ android:excludeFromRecents="true"
+ android:exported="true">
<intent-filter android:priority="-1">
- <action android:name="android.settings.IGNORE_BATTERY_OPTIMIZATION_SETTINGS" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.settings.IGNORE_BATTERY_OPTIMIZATION_SETTINGS"/>
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<!-- Request Ignore Battery Optimization Setting -->
<activity android:name=".Stubs$RequestIgnoreBatteryOptimizationsStub"
- android:label="@string/stub_name"
- android:excludeFromRecents="true">
+ android:label="@string/stub_name"
+ android:excludeFromRecents="true"
+ android:exported="true">
<intent-filter android:priority="-1">
- <action android:name="android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
- <category android:name="android.intent.category.DEFAULT" />
- <data android:scheme="package" />
+ <action android:name="android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ <data android:scheme="package"/>
</intent-filter>
</activity>
<!-- WebView Setting -->
<activity android:name=".Stubs$WebViewSettingsStub"
- android:label="@string/stub_name"
- android:excludeFromRecents="true">
+ android:label="@string/stub_name"
+ android:excludeFromRecents="true"
+ android:exported="true">
<intent-filter android:priority="-1">
- <action android:name="android.settings.WEBVIEW_SETTINGS" />
+ <action android:name="android.settings.WEBVIEW_SETTINGS"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ </intent-filter>
+ </activity>
+
+ <!-- Picture in picture settings stub -->
+ <activity android:name=".Stubs$PictureInPictureSettingsStub"
+ android:label="@string/stub_name"
+ android:excludeFromRecents="true"
+ android:exported="true">
+ <intent-filter android:priority="-1">
+ <action android:name="android.settings.PICTURE_IN_PICTURE_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
@@ -214,7 +232,8 @@
<activity
android:name=".Stubs$ContactsStub"
android:label="@string/stub_name"
- android:excludeFromRecents="true">
+ android:excludeFromRecents="true"
+ android:exported="true">
<intent-filter android:priority="-1">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
diff --git a/FrameworkPackageStubs/res/values-af/strings.xml b/FrameworkPackageStubs/res/values-af/strings.xml
index d2a31bc..86dc51b 100644
--- a/FrameworkPackageStubs/res/values-af/strings.xml
+++ b/FrameworkPackageStubs/res/values-af/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"Geen program kan hierdie handeling hanteer nie"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Prent-in-prent word nie op hierdie toestel gesteun nie"</string>
<string name="stub_name" msgid="3987164490218189006">"Geen"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-am/strings.xml b/FrameworkPackageStubs/res/values-am/strings.xml
index df5164a..0bd04f1 100644
--- a/FrameworkPackageStubs/res/values-am/strings.xml
+++ b/FrameworkPackageStubs/res/values-am/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"ይህን ድርጊት ምንም መተግበሪያዎች አያስተናግዱትም"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"ሥዕል-ላይ-ስዕል በዚህ መሣሪያ ላይ አይደገፍም"</string>
<string name="stub_name" msgid="3987164490218189006">"ምንም"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-ar/strings.xml b/FrameworkPackageStubs/res/values-ar/strings.xml
index f061854..f6df120 100644
--- a/FrameworkPackageStubs/res/values-ar/strings.xml
+++ b/FrameworkPackageStubs/res/values-ar/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"يتعذر هذا الإجراء على أي تطبيق."</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"لا تتوفّر ميزة \"نافذة ضمن النافذة\" على هذا الجهاز."</string>
<string name="stub_name" msgid="3987164490218189006">"بدون"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-as/strings.xml b/FrameworkPackageStubs/res/values-as/strings.xml
index 8ef0af1..c9fe57c 100644
--- a/FrameworkPackageStubs/res/values-as/strings.xml
+++ b/FrameworkPackageStubs/res/values-as/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"কাৰ্যকলাপৰ ষ্টাব"</string>
<string name="message_not_supported" msgid="133939962837892495">"এই কাৰ্যটো কৰিবলৈ কোনো এপ্ নাই"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"এই ডিভাইচটোত চিত্ৰৰ ভিতৰত চিত্ৰ সুবিধাটো সমৰ্থিত নহয়"</string>
<string name="stub_name" msgid="3987164490218189006">"নাই"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-az/strings.xml b/FrameworkPackageStubs/res/values-az/strings.xml
index 725a805..e797777 100644
--- a/FrameworkPackageStubs/res/values-az/strings.xml
+++ b/FrameworkPackageStubs/res/values-az/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Fəaliyyət Genişlənməsi"</string>
<string name="message_not_supported" msgid="133939962837892495">"Heç bir tətbiq bunu edə bilmir"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Şəkildə Şəkil bu cihazda dəstəklənmir"</string>
<string name="stub_name" msgid="3987164490218189006">"Yoxdur"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-b+sr+Latn/strings.xml b/FrameworkPackageStubs/res/values-b+sr+Latn/strings.xml
index 93159f7..b3d1d5d 100644
--- a/FrameworkPackageStubs/res/values-b+sr+Latn/strings.xml
+++ b/FrameworkPackageStubs/res/values-b+sr+Latn/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Deo aktivnosti"</string>
<string name="message_not_supported" msgid="133939962837892495">"Nijedna apl. ne može da obradi ovu radnju"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Slika u slici nije podržana na ovom uređaju"</string>
<string name="stub_name" msgid="3987164490218189006">"Nema"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-be/strings.xml b/FrameworkPackageStubs/res/values-be/strings.xml
index 8e9e848..a332bf1 100644
--- a/FrameworkPackageStubs/res/values-be/strings.xml
+++ b/FrameworkPackageStubs/res/values-be/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"Няма праграмы для апрацоўкі дзеяння"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Функцыя \"Відарыс у відарысе\" не падтрымліваецца на гэтай прыладзе"</string>
<string name="stub_name" msgid="3987164490218189006">"Няма"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-bg/strings.xml b/FrameworkPackageStubs/res/values-bg/strings.xml
index 51c28ac..fda7bf7 100644
--- a/FrameworkPackageStubs/res/values-bg/strings.xml
+++ b/FrameworkPackageStubs/res/values-bg/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Модул на активността"</string>
<string name="message_not_supported" msgid="133939962837892495">"Действ. не може да се обраб. от никое прил."</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Функцията „Картина в картината“ не се поддържа на това устройство"</string>
<string name="stub_name" msgid="3987164490218189006">"Без"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-bn/strings.xml b/FrameworkPackageStubs/res/values-bn/strings.xml
index a2cc823..9957d39 100644
--- a/FrameworkPackageStubs/res/values-bn/strings.xml
+++ b/FrameworkPackageStubs/res/values-bn/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"অ্যাক্টিভিটি স্টাব"</string>
<string name="message_not_supported" msgid="133939962837892495">"কোনও অ্যাপ্লিকেশন এই কাজটি করতে পারবে না"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"এই ডিভাইসে ছবির-মধ্যে-ছবি ফিচার ব্যবহার করা যাবে না"</string>
<string name="stub_name" msgid="3987164490218189006">"কিছুই না"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-bs/strings.xml b/FrameworkPackageStubs/res/values-bs/strings.xml
index 1ae99e9..2e43281 100644
--- a/FrameworkPackageStubs/res/values-bs/strings.xml
+++ b/FrameworkPackageStubs/res/values-bs/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Zamjenski kôd aktivnosti"</string>
<string name="message_not_supported" msgid="133939962837892495">"Nijedna apl. ne može obraditi tu radnju"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Funkcija \"Slika u slici\" nije podržana na ovom uređaju"</string>
<string name="stub_name" msgid="3987164490218189006">"Nema"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-ca/strings.xml b/FrameworkPackageStubs/res/values-ca/strings.xml
index 8e1e6f9..a8abcb4 100644
--- a/FrameworkPackageStubs/res/values-ca/strings.xml
+++ b/FrameworkPackageStubs/res/values-ca/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"No hi ha cap app que pugui processar-ho"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"La funció pantalla en pantalla no és compatible amb aquest dispositiu"</string>
<string name="stub_name" msgid="3987164490218189006">"Cap"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-cs/strings.xml b/FrameworkPackageStubs/res/values-cs/strings.xml
index d0706fc..1206796 100644
--- a/FrameworkPackageStubs/res/values-cs/strings.xml
+++ b/FrameworkPackageStubs/res/values-cs/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Testovací kód aktivity"</string>
<string name="message_not_supported" msgid="133939962837892495">"Tuto akci nedokáže provést žádná aplikace"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Režim obraz v obraze v tomto zařízení není podporován"</string>
<string name="stub_name" msgid="3987164490218189006">"Žádné"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-da/strings.xml b/FrameworkPackageStubs/res/values-da/strings.xml
index 546d501..c2f4ff4 100644
--- a/FrameworkPackageStubs/res/values-da/strings.xml
+++ b/FrameworkPackageStubs/res/values-da/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Stub for aktivitet"</string>
<string name="message_not_supported" msgid="133939962837892495">"Ingen app kan håndtere denne handling"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Denne enhed understøtter ikke integreret billede"</string>
<string name="stub_name" msgid="3987164490218189006">"Ingen"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-de/strings.xml b/FrameworkPackageStubs/res/values-de/strings.xml
index 4ac4e10..53cb874 100644
--- a/FrameworkPackageStubs/res/values-de/strings.xml
+++ b/FrameworkPackageStubs/res/values-de/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Aktivitäts-Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"Keine App kann diese Aktion ausführen"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Die Funktion \"Bild im Bild\" wird auf diesem Gerät nicht unterstützt"</string>
<string name="stub_name" msgid="3987164490218189006">"–"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-el/strings.xml b/FrameworkPackageStubs/res/values-el/strings.xml
index 0f260e1..f358b38 100644
--- a/FrameworkPackageStubs/res/values-el/strings.xml
+++ b/FrameworkPackageStubs/res/values-el/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"Καμία εφ. δεν μπορεί να διαχ. την ενέρ."</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Η λειτουργία Picture in Picture δεν υποστηρίζεται σε αυτήν τη συσκευή"</string>
<string name="stub_name" msgid="3987164490218189006">"Καμία"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-en-rAU/strings.xml b/FrameworkPackageStubs/res/values-en-rAU/strings.xml
index 878df40..97c9277 100644
--- a/FrameworkPackageStubs/res/values-en-rAU/strings.xml
+++ b/FrameworkPackageStubs/res/values-en-rAU/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"No application can handle this action"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Picture-in-picture is not supported on this device"</string>
<string name="stub_name" msgid="3987164490218189006">"None"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-en-rCA/strings.xml b/FrameworkPackageStubs/res/values-en-rCA/strings.xml
index 878df40..97c9277 100644
--- a/FrameworkPackageStubs/res/values-en-rCA/strings.xml
+++ b/FrameworkPackageStubs/res/values-en-rCA/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"No application can handle this action"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Picture-in-picture is not supported on this device"</string>
<string name="stub_name" msgid="3987164490218189006">"None"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-en-rGB/strings.xml b/FrameworkPackageStubs/res/values-en-rGB/strings.xml
index 878df40..97c9277 100644
--- a/FrameworkPackageStubs/res/values-en-rGB/strings.xml
+++ b/FrameworkPackageStubs/res/values-en-rGB/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"No application can handle this action"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Picture-in-picture is not supported on this device"</string>
<string name="stub_name" msgid="3987164490218189006">"None"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-en-rIN/strings.xml b/FrameworkPackageStubs/res/values-en-rIN/strings.xml
index 878df40..97c9277 100644
--- a/FrameworkPackageStubs/res/values-en-rIN/strings.xml
+++ b/FrameworkPackageStubs/res/values-en-rIN/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"No application can handle this action"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Picture-in-picture is not supported on this device"</string>
<string name="stub_name" msgid="3987164490218189006">"None"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-en-rXC/strings.xml b/FrameworkPackageStubs/res/values-en-rXC/strings.xml
index 7c3d86d..f73c7e8 100644
--- a/FrameworkPackageStubs/res/values-en-rXC/strings.xml
+++ b/FrameworkPackageStubs/res/values-en-rXC/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"No application can handle this action"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Picture in Picture is not supported on this device"</string>
<string name="stub_name" msgid="3987164490218189006">"None"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-es-rUS/strings.xml b/FrameworkPackageStubs/res/values-es-rUS/strings.xml
index 01bc94d..c2a6954 100644
--- a/FrameworkPackageStubs/res/values-es-rUS/strings.xml
+++ b/FrameworkPackageStubs/res/values-es-rUS/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Código auxiliar de actividad"</string>
<string name="message_not_supported" msgid="133939962837892495">"Ninguna app puede procesar esta acción"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Este dispositivo no admite la función Pantalla en pantalla"</string>
<string name="stub_name" msgid="3987164490218189006">"Ninguno"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-es/strings.xml b/FrameworkPackageStubs/res/values-es/strings.xml
index 7c41d7b..52b5865 100644
--- a/FrameworkPackageStubs/res/values-es/strings.xml
+++ b/FrameworkPackageStubs/res/values-es/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Stub de actividad"</string>
<string name="message_not_supported" msgid="133939962837892495">"Ninguna app puede realizar esta acción"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"La función de imagen en imagen no es compatible con este dispositivo"</string>
<string name="stub_name" msgid="3987164490218189006">"Ninguno"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-et/strings.xml b/FrameworkPackageStubs/res/values-et/strings.xml
index 3caa8c4..2606e1e 100644
--- a/FrameworkPackageStubs/res/values-et/strings.xml
+++ b/FrameworkPackageStubs/res/values-et/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Toimingu emulaator"</string>
<string name="message_not_supported" msgid="133939962837892495">"Ükski rakendus ei saa seda teha"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Funktsiooni Pilt pildis selles seadmes ei toetata"</string>
<string name="stub_name" msgid="3987164490218189006">"Puudub"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-eu/strings.xml b/FrameworkPackageStubs/res/values-eu/strings.xml
index e7dad6c..5d5e542 100644
--- a/FrameworkPackageStubs/res/values-eu/strings.xml
+++ b/FrameworkPackageStubs/res/values-eu/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Jardueren stub-a"</string>
<string name="message_not_supported" msgid="133939962837892495">"Ez dago hori egin dezakeen aplikaziorik"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Gailu honek ez du onartzen pantaila txiki gainjarria"</string>
<string name="stub_name" msgid="3987164490218189006">"Bat ere ez"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-fa/strings.xml b/FrameworkPackageStubs/res/values-fa/strings.xml
index c3d271f..1e91fb0 100644
--- a/FrameworkPackageStubs/res/values-fa/strings.xml
+++ b/FrameworkPackageStubs/res/values-fa/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"الگوی فعالیت"</string>
<string name="message_not_supported" msgid="133939962837892495">"هیچ برنامهای نمیتواند این کنش را انجام دهد"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"تصویر در تصویر در این دستگاه پشتیبانی نمیشود"</string>
<string name="stub_name" msgid="3987164490218189006">"هیچکدام"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-fi/strings.xml b/FrameworkPackageStubs/res/values-fi/strings.xml
index 0cb9fc1..9891040 100644
--- a/FrameworkPackageStubs/res/values-fi/strings.xml
+++ b/FrameworkPackageStubs/res/values-fi/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Lyhyt toiminta"</string>
<string name="message_not_supported" msgid="133939962837892495">"Yksikään sovellus ei voi käsitellä tätä toimintoa."</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Pikkuruutua ei tueta tällä laitteella"</string>
<string name="stub_name" msgid="3987164490218189006">"–"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-fr-rCA/strings.xml b/FrameworkPackageStubs/res/values-fr-rCA/strings.xml
index c90e464..a4d588d 100644
--- a/FrameworkPackageStubs/res/values-fr-rCA/strings.xml
+++ b/FrameworkPackageStubs/res/values-fr-rCA/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Blocage d\'activité"</string>
<string name="message_not_supported" msgid="133939962837892495">"Aucune app ne peut gérer cette action"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Cet appareil ne prend pas en charge la fonctionnalité d\'incrustation d\'image"</string>
<string name="stub_name" msgid="3987164490218189006">"Aucun"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-fr/strings.xml b/FrameworkPackageStubs/res/values-fr/strings.xml
index e2bebe4..496956e 100644
--- a/FrameworkPackageStubs/res/values-fr/strings.xml
+++ b/FrameworkPackageStubs/res/values-fr/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Blocage d\'activité"</string>
<string name="message_not_supported" msgid="133939962837892495">"Aucune appli ne peut gérer cette action"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"La fonctionnalité Picture-in-picture n\'est pas compatible avec cet appareil"</string>
<string name="stub_name" msgid="3987164490218189006">"Aucun"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-gl/strings.xml b/FrameworkPackageStubs/res/values-gl/strings.xml
index 758e3b6..1b84930 100644
--- a/FrameworkPackageStubs/res/values-gl/strings.xml
+++ b/FrameworkPackageStubs/res/values-gl/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Stub de actividade"</string>
<string name="message_not_supported" msgid="133939962837892495">"Ningunha app pode procesar esta acción"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"A función de pantalla superposta non se admite neste dispositivo"</string>
<string name="stub_name" msgid="3987164490218189006">"Ningún"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-gu/strings.xml b/FrameworkPackageStubs/res/values-gu/strings.xml
index e4339f0..6207e05 100644
--- a/FrameworkPackageStubs/res/values-gu/strings.xml
+++ b/FrameworkPackageStubs/res/values-gu/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"પ્રવૃત્તિ સ્ટબ"</string>
<string name="message_not_supported" msgid="133939962837892495">"કોઈ ઍપ આ ક્રિયાને હૅન્ડલ કરી શકશે નહીં"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"આ ડિવાઇસ પર ચિત્ર-માં-ચિત્ર સુવિધા સપોર્ટ કરતી નથી"</string>
<string name="stub_name" msgid="3987164490218189006">"કોઈ નહીં"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-hi/strings.xml b/FrameworkPackageStubs/res/values-hi/strings.xml
index 33aecf1..6ddc7f6 100644
--- a/FrameworkPackageStubs/res/values-hi/strings.xml
+++ b/FrameworkPackageStubs/res/values-hi/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"गतिविधि स्टब"</string>
<string name="message_not_supported" msgid="133939962837892495">"कोई ऐप्लिकेशन यह कार्रवाई नहीं कर सकता"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"इस डिवाइस पर \'पिक्चर में पिक्चर\' सुविधा काम नहीं करती"</string>
<string name="stub_name" msgid="3987164490218189006">"कोई नहीं"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-hr/strings.xml b/FrameworkPackageStubs/res/values-hr/strings.xml
index 3208d0d..8a129be 100644
--- a/FrameworkPackageStubs/res/values-hr/strings.xml
+++ b/FrameworkPackageStubs/res/values-hr/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Zamjenski kôd aktivnosti"</string>
<string name="message_not_supported" msgid="133939962837892495">"Nema aplikacije za obradu te radnje"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Slika u slici nije podržana na ovom uređaju"</string>
<string name="stub_name" msgid="3987164490218189006">"Nijedan"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-hu/strings.xml b/FrameworkPackageStubs/res/values-hu/strings.xml
index a9170f0..07541ab 100644
--- a/FrameworkPackageStubs/res/values-hu/strings.xml
+++ b/FrameworkPackageStubs/res/values-hu/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"Ezt nem tudják elvégezni az alkalmazások"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"A Kép a képben funkció nem támogatott ezen az eszközön"</string>
<string name="stub_name" msgid="3987164490218189006">"Nincs"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-hy/strings.xml b/FrameworkPackageStubs/res/values-hy/strings.xml
index 807772b..9475415 100644
--- a/FrameworkPackageStubs/res/values-hy/strings.xml
+++ b/FrameworkPackageStubs/res/values-hy/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Ակտիվության մոդուլ"</string>
<string name="message_not_supported" msgid="133939962837892495">"Ոչ մի հավելված չի կարող կատարել սա"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"«Նկար նկարի մեջ գործառույթը» չի աջակցվում այս սարքում"</string>
<string name="stub_name" msgid="3987164490218189006">"Չկա"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-in/strings.xml b/FrameworkPackageStubs/res/values-in/strings.xml
index ba9bf3b..f49cb52 100644
--- a/FrameworkPackageStubs/res/values-in/strings.xml
+++ b/FrameworkPackageStubs/res/values-in/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Penghenti Aktivitas"</string>
<string name="message_not_supported" msgid="133939962837892495">"Tidak ada apl yang bisa menangani tindakan ini"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Picture-in-Picture tidak didukung di perangkat ini"</string>
<string name="stub_name" msgid="3987164490218189006">"Tak Ada"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-is/strings.xml b/FrameworkPackageStubs/res/values-is/strings.xml
index 0227669..ac1dee9 100644
--- a/FrameworkPackageStubs/res/values-is/strings.xml
+++ b/FrameworkPackageStubs/res/values-is/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Virknistubbur"</string>
<string name="message_not_supported" msgid="133939962837892495">"Ekkert forrit getur meðhöndlað aðgerðina"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Mynd í mynd er ekki studd í þessu tæki"</string>
<string name="stub_name" msgid="3987164490218189006">"Engin"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-it/strings.xml b/FrameworkPackageStubs/res/values-it/strings.xml
index 512f051..7ddfa3a 100644
--- a/FrameworkPackageStubs/res/values-it/strings.xml
+++ b/FrameworkPackageStubs/res/values-it/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"Nessuna applicazione può gestire l\'azione"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"La funzionalità Picture in picture non è supportata su questo dispositivo"</string>
<string name="stub_name" msgid="3987164490218189006">"Nessuno"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-iw/strings.xml b/FrameworkPackageStubs/res/values-iw/strings.xml
index d46ce45..8815f87 100644
--- a/FrameworkPackageStubs/res/values-iw/strings.xml
+++ b/FrameworkPackageStubs/res/values-iw/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"לשונית פעילות"</string>
<string name="message_not_supported" msgid="133939962837892495">"אין אפליקציה שיכולה לבצע פעולה זו"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"המכשיר הזה לא תומך בתמונה בתוך תמונה"</string>
<string name="stub_name" msgid="3987164490218189006">"ללא"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-ja/strings.xml b/FrameworkPackageStubs/res/values-ja/strings.xml
index e85736e..04b3c78 100644
--- a/FrameworkPackageStubs/res/values-ja/strings.xml
+++ b/FrameworkPackageStubs/res/values-ja/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"アクティビティ スタブ"</string>
<string name="message_not_supported" msgid="133939962837892495">"この操作を実行できるアプリはありません"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"ピクチャー イン ピクチャーはこのデバイスではご利用いただけません"</string>
<string name="stub_name" msgid="3987164490218189006">"なし"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-ka/strings.xml b/FrameworkPackageStubs/res/values-ka/strings.xml
index dae394f..8f16994 100644
--- a/FrameworkPackageStubs/res/values-ka/strings.xml
+++ b/FrameworkPackageStubs/res/values-ka/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"აქტივობის ნარჩენი"</string>
<string name="message_not_supported" msgid="133939962837892495">"ამას ვერცერთი აპლიკაცია ვერ შეასრულებს"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"ეკრანი ეკრანში ამ მოწყობილობაზე მხარდაჭერილი არ არის"</string>
<string name="stub_name" msgid="3987164490218189006">"არცერთი"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-kk/strings.xml b/FrameworkPackageStubs/res/values-kk/strings.xml
index 3ff78fd..b7da39f 100644
--- a/FrameworkPackageStubs/res/values-kk/strings.xml
+++ b/FrameworkPackageStubs/res/values-kk/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"Әрекетті ешбір қолданба орындай алмайды."</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"\"Суреттегі сурет\" режиміне бұл құрылғыда қолдау көрсетілмейді."</string>
<string name="stub_name" msgid="3987164490218189006">"Жоқ"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-km/strings.xml b/FrameworkPackageStubs/res/values-km/strings.xml
index 8896534..5c86d8d 100644
--- a/FrameworkPackageStubs/res/values-km/strings.xml
+++ b/FrameworkPackageStubs/res/values-km/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Stub សកម្មភាព"</string>
<string name="message_not_supported" msgid="133939962837892495">"គ្មានកម្មវិធីអាចគ្រប់គ្រងសកម្មភាពនេះបានទេ"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"មិនអាចប្រើមុខងាររូបក្នុងរូបនៅលើឧបករណ៍នេះបានទេ"</string>
<string name="stub_name" msgid="3987164490218189006">"គ្មាន"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-kn/strings.xml b/FrameworkPackageStubs/res/values-kn/strings.xml
index 49665ea..7b951a9 100644
--- a/FrameworkPackageStubs/res/values-kn/strings.xml
+++ b/FrameworkPackageStubs/res/values-kn/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"ಚಟುವಟಿಕೆಯ ಸ್ಟಬ್"</string>
<string name="message_not_supported" msgid="133939962837892495">"ಯಾವುದೇ ಆ್ಯಪ್ ಈ ಕ್ರಿಯೆ ನಿರ್ವಹಿಸುವುದಿಲ್ಲ"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"ಈ ಸಾಧನದಲ್ಲಿ ಚಿತ್ರದಲ್ಲಿನ ಚಿತ್ರವನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ"</string>
<string name="stub_name" msgid="3987164490218189006">"ಯಾವುದೂ ಬೇಡ"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-ko/strings.xml b/FrameworkPackageStubs/res/values-ko/strings.xml
index 3216a5d..0e06a0d 100644
--- a/FrameworkPackageStubs/res/values-ko/strings.xml
+++ b/FrameworkPackageStubs/res/values-ko/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"활동 스텁"</string>
<string name="message_not_supported" msgid="133939962837892495">"이 작업을 처리할 수 있는 애플리케이션이 없음"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"이 기기에서는 PIP 모드가 지원되지 않습니다."</string>
<string name="stub_name" msgid="3987164490218189006">"없음"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-ky/strings.xml b/FrameworkPackageStubs/res/values-ky/strings.xml
index 268d621..093734d 100644
--- a/FrameworkPackageStubs/res/values-ky/strings.xml
+++ b/FrameworkPackageStubs/res/values-ky/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Аракеттер тилкеси"</string>
<string name="message_not_supported" msgid="133939962837892495">"Бул аракетти бир да колдонмо аткарбайт"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Бул түзмөктө сүрөттөгү сүрөт режими колдоого алынбайт"</string>
<string name="stub_name" msgid="3987164490218189006">"Жок"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-lo/strings.xml b/FrameworkPackageStubs/res/values-lo/strings.xml
index 34878d2..ee43ad5 100644
--- a/FrameworkPackageStubs/res/values-lo/strings.xml
+++ b/FrameworkPackageStubs/res/values-lo/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Stub ການເຄື່ອນໄຫວ"</string>
<string name="message_not_supported" msgid="133939962837892495">"ບໍ່ມີແອັບພລິເຄຊັນໃດສາມາດຈັດການຄຳສັ່ງນີ້ໄດ້"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"ບໍ່ຮອງຮັບການສະແດງຜົນຊ້ອນໃນອຸປະກອນນີ້"</string>
<string name="stub_name" msgid="3987164490218189006">"ບໍ່ມີ"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-lt/strings.xml b/FrameworkPackageStubs/res/values-lt/strings.xml
index 0e2529f..d8351bb 100644
--- a/FrameworkPackageStubs/res/values-lt/strings.xml
+++ b/FrameworkPackageStubs/res/values-lt/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Veiklos šaknelė"</string>
<string name="message_not_supported" msgid="133939962837892495">"Jokia progr. negali apdoroti šio veiksmo"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Vaizdo vaizde funkcija nepalaikoma šiame įrenginyje"</string>
<string name="stub_name" msgid="3987164490218189006">"Nėra"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-lv/strings.xml b/FrameworkPackageStubs/res/values-lv/strings.xml
index 569bc09..25e35f4 100644
--- a/FrameworkPackageStubs/res/values-lv/strings.xml
+++ b/FrameworkPackageStubs/res/values-lv/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Darbību modulis"</string>
<string name="message_not_supported" msgid="133939962837892495">"Šo darbību nevar veikt neviena lietotne."</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Attēls attēlā netiek atbalstīts šajā ierīcē."</string>
<string name="stub_name" msgid="3987164490218189006">"Nav"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-mk/strings.xml b/FrameworkPackageStubs/res/values-mk/strings.xml
index 60d1669..1a312b4 100644
--- a/FrameworkPackageStubs/res/values-mk/strings.xml
+++ b/FrameworkPackageStubs/res/values-mk/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Заменски код за активноста"</string>
<string name="message_not_supported" msgid="133939962837892495">"Нема апликација што ќе го изврши ова"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"„Слика во слика“ не е поддржана на уредов"</string>
<string name="stub_name" msgid="3987164490218189006">"Нема"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-ml/strings.xml b/FrameworkPackageStubs/res/values-ml/strings.xml
index 098db59..bc17ee6 100644
--- a/FrameworkPackageStubs/res/values-ml/strings.xml
+++ b/FrameworkPackageStubs/res/values-ml/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"ആക്റ്റിവിറ്റി സ്റ്റബ്"</string>
<string name="message_not_supported" msgid="133939962837892495">"ഒരു ആപ്പിനും ഈ പ്രവർത്തനം ഹാൻഡിൽ ചെയ്യാനാവില്ല"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"ചിത്രത്തിനുള്ളിലെ ചിത്രത്തിന് ഈ ഉപകരണത്തിൽ പിന്തുണയില്ല"</string>
<string name="stub_name" msgid="3987164490218189006">"ഒന്നുമില്ല"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-mn/strings.xml b/FrameworkPackageStubs/res/values-mn/strings.xml
index e5e065f..3fc3cb8 100644
--- a/FrameworkPackageStubs/res/values-mn/strings.xml
+++ b/FrameworkPackageStubs/res/values-mn/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Үйл ажиллагааны хэсэг"</string>
<string name="message_not_supported" msgid="133939962837892495">"Энэ үйлдлийг хийх боломжтой апп алга"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Дэлгэц доторх дэлгэцийг энэ төхөөрөмж дээр дэмждэггүй"</string>
<string name="stub_name" msgid="3987164490218189006">"Байхгүй"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-mr/strings.xml b/FrameworkPackageStubs/res/values-mr/strings.xml
index 4dfef06..c8e6ab1 100644
--- a/FrameworkPackageStubs/res/values-mr/strings.xml
+++ b/FrameworkPackageStubs/res/values-mr/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"अॅक्टिव्हिटी स्टब"</string>
<string name="message_not_supported" msgid="133939962837892495">"कोणतेही अॅप ही क्रिया हाताळू शकत नाही"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"या डिव्हाइसवर चित्रात-चित्र याला सपोर्ट नाही"</string>
<string name="stub_name" msgid="3987164490218189006">"काहीही नाही"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-ms/strings.xml b/FrameworkPackageStubs/res/values-ms/strings.xml
index 92ed8d6..19d45a5 100644
--- a/FrameworkPackageStubs/res/values-ms/strings.xml
+++ b/FrameworkPackageStubs/res/values-ms/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Keratan Aktiviti"</string>
<string name="message_not_supported" msgid="133939962837892495">"Tiada apl dapat kendalikan tindakan ini"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Gambar dalam Gambar tidak disokong pada peranti ini"</string>
<string name="stub_name" msgid="3987164490218189006">"Tiada"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-my/strings.xml b/FrameworkPackageStubs/res/values-my/strings.xml
index fc13f4a..7becb7d 100644
--- a/FrameworkPackageStubs/res/values-my/strings.xml
+++ b/FrameworkPackageStubs/res/values-my/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"လုပ်ဆောင်ချက် အပိုင်း"</string>
<string name="message_not_supported" msgid="133939962837892495">"ဤအလုပ်ကို မည်သည့်အက်ပ်မျှ မစီမံနိုင်ပါ"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"ဤစက်တွင် \'တစ်ခုပေါ်တစ်ခုထပ်၍ ဖွင့်ခြင်း\' သုံး၍မရပါ"</string>
<string name="stub_name" msgid="3987164490218189006">"မရှိ"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-nb/strings.xml b/FrameworkPackageStubs/res/values-nb/strings.xml
index dbec081..edd33b3 100644
--- a/FrameworkPackageStubs/res/values-nb/strings.xml
+++ b/FrameworkPackageStubs/res/values-nb/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Aktivitetssnutt"</string>
<string name="message_not_supported" msgid="133939962837892495">"Ingen apper kan gjøre dette"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Bilde-i-bilde støttes ikke på denne enheten"</string>
<string name="stub_name" msgid="3987164490218189006">"Ingen"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-ne/strings.xml b/FrameworkPackageStubs/res/values-ne/strings.xml
index 8331b2f..7a02b54 100644
--- a/FrameworkPackageStubs/res/values-ne/strings.xml
+++ b/FrameworkPackageStubs/res/values-ne/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"क्रियाकलापको स्टब"</string>
<string name="message_not_supported" msgid="133939962837892495">"कुनै पनि अनुप्रयोगले यो कारबाही गर्न सक्दैन"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"यो यन्त्रमा Picture in Picture सुविधा प्रयोग गर्न मिल्दैन"</string>
<string name="stub_name" msgid="3987164490218189006">"कुनै पनि होइन"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-nl/strings.xml b/FrameworkPackageStubs/res/values-nl/strings.xml
index 8b41237..cc43dec 100644
--- a/FrameworkPackageStubs/res/values-nl/strings.xml
+++ b/FrameworkPackageStubs/res/values-nl/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activiteitsstub"</string>
<string name="message_not_supported" msgid="133939962837892495">"Geen enkele app kan deze actie verwerken"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Scherm-in-scherm wordt niet ondersteund op dit apparaat"</string>
<string name="stub_name" msgid="3987164490218189006">"Geen"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-or/strings.xml b/FrameworkPackageStubs/res/values-or/strings.xml
index b8e2b60..3b266fc 100644
--- a/FrameworkPackageStubs/res/values-or/strings.xml
+++ b/FrameworkPackageStubs/res/values-or/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"ସକ୍ରିୟ ଷ୍ଟବ୍"</string>
<string name="message_not_supported" msgid="133939962837892495">"କୌଣସି ଆପ୍ ଏହାକୁ ନିୟନ୍ତ୍ରଣ କରିପାରିବେ ନାହିଁ।"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"ଏହି ଡିଭାଇସରେ ପିକଚର୍ ଇନ୍ ପିକଚର୍ ସମର୍ଥିତ ନୁହେଁ"</string>
<string name="stub_name" msgid="3987164490218189006">"କିଛିନାହିଁ"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-pa/strings.xml b/FrameworkPackageStubs/res/values-pa/strings.xml
index c66b4d5..91d7e0d 100644
--- a/FrameworkPackageStubs/res/values-pa/strings.xml
+++ b/FrameworkPackageStubs/res/values-pa/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"ਪ੍ਰਤਿਰੂਪ ਸਰਗਰਮੀ"</string>
<string name="message_not_supported" msgid="133939962837892495">"ਕਾਰਵਾਈ ਨੂੰ ਐਪਲੀਕੇਸ਼ਨ ਹੈਂਡਲ ਨਹੀਂ ਕਰ ਸਕਦੀ"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"ਇਸ ਡੀਵਾਈਸ \'ਤੇ ਤਸਵੀਰ-ਵਿੱਚ-ਤਸਵੀਰ ਦੀ ਸੁਵਿਧਾ ਨਹੀਂ ਹੈ"</string>
<string name="stub_name" msgid="3987164490218189006">"ਕੋਈ ਨਹੀਂ"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-pl/strings.xml b/FrameworkPackageStubs/res/values-pl/strings.xml
index cbb7c20..a318ec8 100644
--- a/FrameworkPackageStubs/res/values-pl/strings.xml
+++ b/FrameworkPackageStubs/res/values-pl/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Szablon aktywności"</string>
<string name="message_not_supported" msgid="133939962837892495">"Aplikacje nie mogą obsłużyć działania"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Obraz w obrazie nie jest obsługiwany na tym urządzeniu"</string>
<string name="stub_name" msgid="3987164490218189006">"Brak"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-pt-rPT/strings.xml b/FrameworkPackageStubs/res/values-pt-rPT/strings.xml
index e68502a..5832cc0 100644
--- a/FrameworkPackageStubs/res/values-pt-rPT/strings.xml
+++ b/FrameworkPackageStubs/res/values-pt-rPT/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Esboço das atividades"</string>
<string name="message_not_supported" msgid="133939962837892495">"Nenhuma aplicação pode efetuar esta ação."</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"A funcionalidade ecrã no ecrã não é suportada neste dispositivo."</string>
<string name="stub_name" msgid="3987164490218189006">"Nenhum"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-pt/strings.xml b/FrameworkPackageStubs/res/values-pt/strings.xml
index f560f2c..558bbbd 100644
--- a/FrameworkPackageStubs/res/values-pt/strings.xml
+++ b/FrameworkPackageStubs/res/values-pt/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Stub de atividade"</string>
<string name="message_not_supported" msgid="133939962837892495">"Nenhum aplicativo pode executar a ação"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"O recurso picture-in-picture não é compatível com este dispositivo."</string>
<string name="stub_name" msgid="3987164490218189006">"Nenhum"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-ro/strings.xml b/FrameworkPackageStubs/res/values-ro/strings.xml
index a64815a..74bfa60 100644
--- a/FrameworkPackageStubs/res/values-ro/strings.xml
+++ b/FrameworkPackageStubs/res/values-ro/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"Aplicațiile nu pot gestiona acțiunea"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Funcția picture-in-picture nu este acceptată pe acest dispozitiv"</string>
<string name="stub_name" msgid="3987164490218189006">"Fără"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-ru/strings.xml b/FrameworkPackageStubs/res/values-ru/strings.xml
index d2abc7b..20fee58 100644
--- a/FrameworkPackageStubs/res/values-ru/strings.xml
+++ b/FrameworkPackageStubs/res/values-ru/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"Нет приложений для этого действия"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Функция \"Картинка в картинке\" не поддерживается на этом устройстве."</string>
<string name="stub_name" msgid="3987164490218189006">"Нет"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-si/strings.xml b/FrameworkPackageStubs/res/values-si/strings.xml
index 306422f..12e6469 100644
--- a/FrameworkPackageStubs/res/values-si/strings.xml
+++ b/FrameworkPackageStubs/res/values-si/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"ක්රියාකාරකම් අක්කඩ"</string>
<string name="message_not_supported" msgid="133939962837892495">"කිසි යෙදුමකට මෙම ක්රියාව හැසිරවිය නොහැක"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"මෙම උපාංගයෙහි පින්තූරය තුළ පින්තූරය සහාය නොදක්වයි"</string>
<string name="stub_name" msgid="3987164490218189006">"කිසිවක් නැත"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-sk/strings.xml b/FrameworkPackageStubs/res/values-sk/strings.xml
index d597d7c..d934c8e 100644
--- a/FrameworkPackageStubs/res/values-sk/strings.xml
+++ b/FrameworkPackageStubs/res/values-sk/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Zástupný kód aktivity"</string>
<string name="message_not_supported" msgid="133939962837892495">"Túto akciu nedokáže spracovať žiadna aplikácia"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Obraz v obraze nie je v tomto zariadení podporovaný"</string>
<string name="stub_name" msgid="3987164490218189006">"Žiadne"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-sl/strings.xml b/FrameworkPackageStubs/res/values-sl/strings.xml
index f1ae1d0..97be666 100644
--- a/FrameworkPackageStubs/res/values-sl/strings.xml
+++ b/FrameworkPackageStubs/res/values-sl/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Slepa procedura dejavnosti"</string>
<string name="message_not_supported" msgid="133939962837892495">"Ni aplikacij za obravnavo tega dejanja"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Način slike v sliki v tej napravi ni podprt."</string>
<string name="stub_name" msgid="3987164490218189006">"Brez"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-sq/strings.xml b/FrameworkPackageStubs/res/values-sq/strings.xml
index 556d52b..66a8bba 100644
--- a/FrameworkPackageStubs/res/values-sq/strings.xml
+++ b/FrameworkPackageStubs/res/values-sq/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Kodi i testimit i aktivitetit"</string>
<string name="message_not_supported" msgid="133939962837892495">"Asnjë aplikacion s\'e menaxhon këtë veprim"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"\"Figura brenda figurës\" nuk mbështetet në këtë pajisje."</string>
<string name="stub_name" msgid="3987164490218189006">"Asnjë"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-sr/strings.xml b/FrameworkPackageStubs/res/values-sr/strings.xml
index da3a4aa..f97a2b5 100644
--- a/FrameworkPackageStubs/res/values-sr/strings.xml
+++ b/FrameworkPackageStubs/res/values-sr/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Део активности"</string>
<string name="message_not_supported" msgid="133939962837892495">"Ниједна апл. не може да обради ову радњу"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Слика у слици није подржана на овом уређају"</string>
<string name="stub_name" msgid="3987164490218189006">"Нема"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-sv/strings.xml b/FrameworkPackageStubs/res/values-sv/strings.xml
index 81eaeed..b7b62bb 100644
--- a/FrameworkPackageStubs/res/values-sv/strings.xml
+++ b/FrameworkPackageStubs/res/values-sv/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"Ingen app kan hantera den här åtgärden"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Bild-i-bild stöds inte på enheten"</string>
<string name="stub_name" msgid="3987164490218189006">"Inga"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-sw/strings.xml b/FrameworkPackageStubs/res/values-sw/strings.xml
index 3493ed7..1ac505c 100644
--- a/FrameworkPackageStubs/res/values-sw/strings.xml
+++ b/FrameworkPackageStubs/res/values-sw/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Kipande cha Shughuli"</string>
<string name="message_not_supported" msgid="133939962837892495">"Hamna programu ya kufanya kitendo hiki"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Mipangilio ya Kupachika Picha Ndani ya Picha Nyingine haitumiki kwenye kifaa hiki"</string>
<string name="stub_name" msgid="3987164490218189006">"Hamna"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-ta/strings.xml b/FrameworkPackageStubs/res/values-ta/strings.xml
index 58ab982..e8db950 100644
--- a/FrameworkPackageStubs/res/values-ta/strings.xml
+++ b/FrameworkPackageStubs/res/values-ta/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"இந்தச் செயல்பாட்டை செய்யும் ஆப்ஸ் இல்லை"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"இந்தச் சாதனத்தில் \'பிக்ச்சர்-இன்-பிக்ச்சர்\' அம்சம் ஆதரிக்கப்படவில்லை"</string>
<string name="stub_name" msgid="3987164490218189006">"எதுவுமில்லை"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-te/strings.xml b/FrameworkPackageStubs/res/values-te/strings.xml
index c87b784..92bdfc9 100644
--- a/FrameworkPackageStubs/res/values-te/strings.xml
+++ b/FrameworkPackageStubs/res/values-te/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"కార్యకలాప స్టబ్"</string>
<string name="message_not_supported" msgid="133939962837892495">"ఈ చర్యను ఏ అప్లికేషన్ నిర్వహించలేదు"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"ఈ పరికరంలో పిక్చర్-ఇన్-పిక్చర్ ఫీచర్కు సపోర్ట్ లేదు"</string>
<string name="stub_name" msgid="3987164490218189006">"ఏదీ లేదు"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-th/strings.xml b/FrameworkPackageStubs/res/values-th/strings.xml
index 9e14513..7f6bb13 100644
--- a/FrameworkPackageStubs/res/values-th/strings.xml
+++ b/FrameworkPackageStubs/res/values-th/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Stub กิจกรรม"</string>
<string name="message_not_supported" msgid="133939962837892495">"ไม่มีแอปพลิเคชันใดทำงานนี้ได้"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"อุปกรณ์นี้ไม่รองรับการแสดงภาพซ้อนภาพ"</string>
<string name="stub_name" msgid="3987164490218189006">"ไม่มี"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-tl/strings.xml b/FrameworkPackageStubs/res/values-tl/strings.xml
index fa88191..2ee288d 100644
--- a/FrameworkPackageStubs/res/values-tl/strings.xml
+++ b/FrameworkPackageStubs/res/values-tl/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Stub ng Aktibidad"</string>
<string name="message_not_supported" msgid="133939962837892495">"Walang app ang makakapangasiwa sa action"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Hindi sinusuportahan sa device na ito ang Picture in Picture"</string>
<string name="stub_name" msgid="3987164490218189006">"Wala"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-tr/strings.xml b/FrameworkPackageStubs/res/values-tr/strings.xml
index 884b31a..36ecb27 100644
--- a/FrameworkPackageStubs/res/values-tr/strings.xml
+++ b/FrameworkPackageStubs/res/values-tr/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"İşlem Saplaması"</string>
<string name="message_not_supported" msgid="133939962837892495">"İşlemi gerçekleştirebilecek uygulama yok"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Pencere içinde pencere işlevi bu cihazda desteklenmiyor"</string>
<string name="stub_name" msgid="3987164490218189006">"Yok"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-uk/strings.xml b/FrameworkPackageStubs/res/values-uk/strings.xml
index 930e010..337150b 100644
--- a/FrameworkPackageStubs/res/values-uk/strings.xml
+++ b/FrameworkPackageStubs/res/values-uk/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Модуль активності"</string>
<string name="message_not_supported" msgid="133939962837892495">"Немає додатка, який може виконати цю дію"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Функція \"Картинка в картинці\" не підтримується на цьому пристрої"</string>
<string name="stub_name" msgid="3987164490218189006">"Немає"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-ur/strings.xml b/FrameworkPackageStubs/res/values-ur/strings.xml
index 63e3eb2..f152fb7 100644
--- a/FrameworkPackageStubs/res/values-ur/strings.xml
+++ b/FrameworkPackageStubs/res/values-ur/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Stub کی سرگرمی"</string>
<string name="message_not_supported" msgid="133939962837892495">"یہ عمل کوئی ایپلیکیشن ہینڈل نہیں کر سکتی"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"تصویر میں تصویر اس آلے پر تعاون یافتہ نہیں ہے"</string>
<string name="stub_name" msgid="3987164490218189006">"کوئی نہیں"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-uz/strings.xml b/FrameworkPackageStubs/res/values-uz/strings.xml
index 06078a6..f42ff10 100644
--- a/FrameworkPackageStubs/res/values-uz/strings.xml
+++ b/FrameworkPackageStubs/res/values-uz/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"Bu amalni bajaradigan ilova mavjud emas"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Tasvir ustida tasvir bu qurilmada ishlamaydi"</string>
<string name="stub_name" msgid="3987164490218189006">"Yoʻq"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-vi/strings.xml b/FrameworkPackageStubs/res/values-vi/strings.xml
index d7485a5..5c91311 100644
--- a/FrameworkPackageStubs/res/values-vi/strings.xml
+++ b/FrameworkPackageStubs/res/values-vi/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"Không ứng dụng nào xử lý được thao tác này"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Thiết bị này không hỗ trợ tính năng Hình trong hình"</string>
<string name="stub_name" msgid="3987164490218189006">"Không"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-zh-rCN/strings.xml b/FrameworkPackageStubs/res/values-zh-rCN/strings.xml
index 4d097b7..6a995aa 100644
--- a/FrameworkPackageStubs/res/values-zh-rCN/strings.xml
+++ b/FrameworkPackageStubs/res/values-zh-rCN/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"没有可处理此操作的应用"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"此设备不支持画中画功能"</string>
<string name="stub_name" msgid="3987164490218189006">"无"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-zh-rHK/strings.xml b/FrameworkPackageStubs/res/values-zh-rHK/strings.xml
index e93b32d..abeba97 100644
--- a/FrameworkPackageStubs/res/values-zh-rHK/strings.xml
+++ b/FrameworkPackageStubs/res/values-zh-rHK/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"活動虛設常式"</string>
<string name="message_not_supported" msgid="133939962837892495">"沒有可處理此操作的應用程式"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"此裝置不支援「畫中畫」功能"</string>
<string name="stub_name" msgid="3987164490218189006">"無"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-zh-rTW/strings.xml b/FrameworkPackageStubs/res/values-zh-rTW/strings.xml
index 453e89c..0a41808 100644
--- a/FrameworkPackageStubs/res/values-zh-rTW/strings.xml
+++ b/FrameworkPackageStubs/res/values-zh-rTW/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"Activity Stub"</string>
<string name="message_not_supported" msgid="133939962837892495">"沒有應用程式能夠處理這項操作"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"這部裝置不支援子母畫面功能"</string>
<string name="stub_name" msgid="3987164490218189006">"無"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values-zu/strings.xml b/FrameworkPackageStubs/res/values-zu/strings.xml
index 6eaff7c..06e570d 100644
--- a/FrameworkPackageStubs/res/values-zu/strings.xml
+++ b/FrameworkPackageStubs/res/values-zu/strings.xml
@@ -3,5 +3,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6179574017413146651">"I-stub somsebenzi"</string>
<string name="message_not_supported" msgid="133939962837892495">"Alukho uhlelo lokusebenza olungaphatha lesi senzo"</string>
+ <string name="pip_not_supported" msgid="8681268258599412706">"Isithombe-esithombeni asisekelwa kule divayisi"</string>
<string name="stub_name" msgid="3987164490218189006">"Lutho"</string>
</resources>
diff --git a/FrameworkPackageStubs/res/values/strings.xml b/FrameworkPackageStubs/res/values/strings.xml
index 1446a89..472c85a 100644
--- a/FrameworkPackageStubs/res/values/strings.xml
+++ b/FrameworkPackageStubs/res/values/strings.xml
@@ -7,6 +7,9 @@
<!-- Toast message displayed when a stub activity is launched. [CHAR LIMIT=NONE] -->
<string name="message_not_supported">No application can handle this action</string>
+ <!-- Toast message displayed for pip settings when pip isn't supported. [CHAR LIMIT=NONE] -->
+ <string name="pip_not_supported">Picture in Picture is not supported on this device</string>
+
<!-- Stub name [CHAR LIMIT=NONE]-->
<string name="stub_name">None</string>
diff --git a/FrameworkPackageStubs/src/com/android/car/frameworkpackagestubs/Stubs.java b/FrameworkPackageStubs/src/com/android/car/frameworkpackagestubs/Stubs.java
index 3787d71..58d0261 100644
--- a/FrameworkPackageStubs/src/com/android/car/frameworkpackagestubs/Stubs.java
+++ b/FrameworkPackageStubs/src/com/android/car/frameworkpackagestubs/Stubs.java
@@ -17,6 +17,7 @@
package com.android.car.frameworkpackagestubs;
import android.app.Activity;
+import android.content.pm.PackageManager;
import android.os.Bundle;
import android.widget.Toast;
@@ -74,6 +75,11 @@
public static class CalendarStub extends BaseActivity { }
/**
+ * Stub activity for Contacts events.
+ */
+ public static class ContactsStub extends BaseActivity { }
+
+ /**
* Stub activity for Desk Clock events.
*/
public static class DeskClockStub extends BaseActivity { }
@@ -112,4 +118,17 @@
* Stub activity for webview setting.
*/
public static class WebViewSettingsStub extends BaseActivity { }
+
+ /**
+ * Stub activity for picture in picture settings.
+ */
+ public static class PictureInPictureSettingsStub extends BaseActivity {
+ @Override
+ protected CharSequence getMessage() {
+ if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)) {
+ return getResources().getString(R.string.pip_not_supported);
+ }
+ return super.getMessage();
+ }
+ }
}
diff --git a/TEST_MAPPING b/TEST_MAPPING
index 6239f78..1b105cc 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -1,4 +1,9 @@
{
+ "auto-service-experimental-code-presubmit": [
+ {
+ "name": "ExperimentalCarServiceTests"
+ }
+ ],
"auto-postsubmit": [
{
"name": "AndroidCarApiTest",
diff --git a/car-bugreportd/main.cpp b/car-bugreportd/main.cpp
index 581bb03..901687a 100644
--- a/car-bugreportd/main.cpp
+++ b/car-bugreportd/main.cpp
@@ -378,7 +378,7 @@
void takeScreenshotForDisplayId(PhysicalDisplayId id, const char* tmp_dir,
std::vector<std::string>* extra_files) {
- std::string id_as_string = std::to_string(id);
+ std::string id_as_string = to_string(id);
std::string filename = std::string(tmp_dir) + kScreenshotPrefix + id_as_string + ".png";
std::vector<const char*> args { "-p", "-d", id_as_string.c_str(), filename.c_str(), nullptr };
ALOGI("capturing screen for display (%s) as %s", id_as_string.c_str(), filename.c_str());
diff --git a/car-default-input-service/Android.mk b/car-default-input-service/Android.mk
deleted file mode 100644
index fc99bfa..0000000
--- a/car-default-input-service/Android.mk
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (C) 2016 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.
-#
-#
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := android.car.input.service
-LOCAL_PRIVATE_PLATFORM_APIS := true
-
-# Each update should be signed by OEMs
-LOCAL_CERTIFICATE := platform
-LOCAL_PRIVILEGED_MODULE := true
-
-LOCAL_PROGUARD_FLAG_FILES := proguard.flags
-LOCAL_PROGUARD_ENABLED := disabled
-
-LOCAL_JAVA_LIBRARIES += android.car
-
-include $(BUILD_PACKAGE)
diff --git a/car-default-input-service/AndroidManifest.xml b/car-default-input-service/AndroidManifest.xml
deleted file mode 100644
index 0e15e7d..0000000
--- a/car-default-input-service/AndroidManifest.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 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.
--->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="android.car.input.service"
- android:versionCode="1"
- android:versionName="1.0">
- <application android:label="@string/app_name" android:icon="@drawable/ic_launcher"
- android:directBootAware="true">
- <service android:name=".DefaultInputService"
- android:permission="android.car.permission.BIND_CAR_INPUT_SERVICE"
- android:exported="false"
- />
- </application>
-</manifest>
diff --git a/car-default-input-service/proguard.flags b/car-default-input-service/proguard.flags
deleted file mode 100644
index 565df26..0000000
--- a/car-default-input-service/proguard.flags
+++ /dev/null
@@ -1,2 +0,0 @@
--verbose
--keep @com.android.internal.annotations.VisibleForTesting class *
diff --git a/car-default-input-service/res/drawable-hdpi/ic_launcher.png b/car-default-input-service/res/drawable-hdpi/ic_launcher.png
deleted file mode 100644
index 96a442e..0000000
--- a/car-default-input-service/res/drawable-hdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/car-default-input-service/res/drawable-ldpi/ic_launcher.png b/car-default-input-service/res/drawable-ldpi/ic_launcher.png
deleted file mode 100644
index 9923872..0000000
--- a/car-default-input-service/res/drawable-ldpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/car-default-input-service/res/drawable-mdpi/ic_launcher.png b/car-default-input-service/res/drawable-mdpi/ic_launcher.png
deleted file mode 100644
index 359047d..0000000
--- a/car-default-input-service/res/drawable-mdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/car-default-input-service/res/drawable-xhdpi/ic_launcher.png b/car-default-input-service/res/drawable-xhdpi/ic_launcher.png
deleted file mode 100644
index 71c6d76..0000000
--- a/car-default-input-service/res/drawable-xhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/car-default-input-service/res/values-af/strings.xml b/car-default-input-service/res/values-af/strings.xml
deleted file mode 100644
index 9e4a530..0000000
--- a/car-default-input-service/res/values-af/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Motorverstekinvoerdiens"</string>
-</resources>
diff --git a/car-default-input-service/res/values-am/strings.xml b/car-default-input-service/res/values-am/strings.xml
deleted file mode 100644
index ae59586..0000000
--- a/car-default-input-service/res/values-am/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"የመኪና ነባሪ ግቤት አገልግሎት"</string>
-</resources>
diff --git a/car-default-input-service/res/values-ar/strings.xml b/car-default-input-service/res/values-ar/strings.xml
deleted file mode 100644
index 68913eb..0000000
--- a/car-default-input-service/res/values-ar/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"جهاز الإدخال التلقائي في السيارة"</string>
-</resources>
diff --git a/car-default-input-service/res/values-as/strings.xml b/car-default-input-service/res/values-as/strings.xml
deleted file mode 100644
index c6f29f6..0000000
--- a/car-default-input-service/res/values-as/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"গাড়ীৰ ডিফ’ল্ট ইনপুট সেৱা"</string>
-</resources>
diff --git a/car-default-input-service/res/values-az/strings.xml b/car-default-input-service/res/values-az/strings.xml
deleted file mode 100644
index e73948d..0000000
--- a/car-default-input-service/res/values-az/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Avtomobilin Defolt Daxiletmə Xidməti"</string>
-</resources>
diff --git a/car-default-input-service/res/values-b+sr+Latn/strings.xml b/car-default-input-service/res/values-b+sr+Latn/strings.xml
deleted file mode 100644
index 2ded12d..0000000
--- a/car-default-input-service/res/values-b+sr+Latn/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Podrazumevana usluga za unos za automobil"</string>
-</resources>
diff --git a/car-default-input-service/res/values-be/strings.xml b/car-default-input-service/res/values-be/strings.xml
deleted file mode 100644
index c746e66..0000000
--- a/car-default-input-service/res/values-be/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Стандартны сэрвіс падачы звестак пра аўтамабіль"</string>
-</resources>
diff --git a/car-default-input-service/res/values-bg/strings.xml b/car-default-input-service/res/values-bg/strings.xml
deleted file mode 100644
index 90a25e9..0000000
--- a/car-default-input-service/res/values-bg/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Стандартна автомобилна услуга за входящи данни"</string>
-</resources>
diff --git a/car-default-input-service/res/values-bn/strings.xml b/car-default-input-service/res/values-bn/strings.xml
deleted file mode 100644
index 57671f3..0000000
--- a/car-default-input-service/res/values-bn/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"গাড়ির ডিফল্ট ইনপুট সার্ভিস"</string>
-</resources>
diff --git a/car-default-input-service/res/values-bs/strings.xml b/car-default-input-service/res/values-bs/strings.xml
deleted file mode 100644
index 9d95f59..0000000
--- a/car-default-input-service/res/values-bs/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Zadana usluga unosa za automobil"</string>
-</resources>
diff --git a/car-default-input-service/res/values-ca/strings.xml b/car-default-input-service/res/values-ca/strings.xml
deleted file mode 100644
index 66e84c7..0000000
--- a/car-default-input-service/res/values-ca/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Servei d\'entrada predeterminat del cotxe"</string>
-</resources>
diff --git a/car-default-input-service/res/values-cs/strings.xml b/car-default-input-service/res/values-cs/strings.xml
deleted file mode 100644
index 36cfaf5..0000000
--- a/car-default-input-service/res/values-cs/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Služba výchozího vstupu auta"</string>
-</resources>
diff --git a/car-default-input-service/res/values-da/strings.xml b/car-default-input-service/res/values-da/strings.xml
deleted file mode 100644
index 4be4f5a..0000000
--- a/car-default-input-service/res/values-da/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Bilens standardtjeneste til input"</string>
-</resources>
diff --git a/car-default-input-service/res/values-de/strings.xml b/car-default-input-service/res/values-de/strings.xml
deleted file mode 100644
index ae1e6b8..0000000
--- a/car-default-input-service/res/values-de/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Standard-Eingabedienst für das Auto"</string>
-</resources>
diff --git a/car-default-input-service/res/values-el/strings.xml b/car-default-input-service/res/values-el/strings.xml
deleted file mode 100644
index 4862a37..0000000
--- a/car-default-input-service/res/values-el/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Προεπιλεγμένη υπηρεσία εισόδου αυτοκινήτου"</string>
-</resources>
diff --git a/car-default-input-service/res/values-en-rAU/strings.xml b/car-default-input-service/res/values-en-rAU/strings.xml
deleted file mode 100644
index af9019f..0000000
--- a/car-default-input-service/res/values-en-rAU/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Car default input service"</string>
-</resources>
diff --git a/car-default-input-service/res/values-en-rCA/strings.xml b/car-default-input-service/res/values-en-rCA/strings.xml
deleted file mode 100644
index af9019f..0000000
--- a/car-default-input-service/res/values-en-rCA/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Car default input service"</string>
-</resources>
diff --git a/car-default-input-service/res/values-en-rGB/strings.xml b/car-default-input-service/res/values-en-rGB/strings.xml
deleted file mode 100644
index af9019f..0000000
--- a/car-default-input-service/res/values-en-rGB/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Car default input service"</string>
-</resources>
diff --git a/car-default-input-service/res/values-en-rIN/strings.xml b/car-default-input-service/res/values-en-rIN/strings.xml
deleted file mode 100644
index af9019f..0000000
--- a/car-default-input-service/res/values-en-rIN/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Car default input service"</string>
-</resources>
diff --git a/car-default-input-service/res/values-en-rXC/strings.xml b/car-default-input-service/res/values-en-rXC/strings.xml
deleted file mode 100644
index 34272f4..0000000
--- a/car-default-input-service/res/values-en-rXC/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Car Default Input Service"</string>
-</resources>
diff --git a/car-default-input-service/res/values-es-rUS/strings.xml b/car-default-input-service/res/values-es-rUS/strings.xml
deleted file mode 100644
index d11e509..0000000
--- a/car-default-input-service/res/values-es-rUS/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Servicio de entrada predeterminado del auto"</string>
-</resources>
diff --git a/car-default-input-service/res/values-es/strings.xml b/car-default-input-service/res/values-es/strings.xml
deleted file mode 100644
index 4aa109a..0000000
--- a/car-default-input-service/res/values-es/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Servicio de entrada predeterminado del coche"</string>
-</resources>
diff --git a/car-default-input-service/res/values-et/strings.xml b/car-default-input-service/res/values-et/strings.xml
deleted file mode 100644
index c60ddc8..0000000
--- a/car-default-input-service/res/values-et/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Auto vaikesisendteenus"</string>
-</resources>
diff --git a/car-default-input-service/res/values-eu/strings.xml b/car-default-input-service/res/values-eu/strings.xml
deleted file mode 100644
index 8825af2..0000000
--- a/car-default-input-service/res/values-eu/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Autoaren sarrerako zerbitzu lehenetsia"</string>
-</resources>
diff --git a/car-default-input-service/res/values-fa/strings.xml b/car-default-input-service/res/values-fa/strings.xml
deleted file mode 100644
index 72dda79..0000000
--- a/car-default-input-service/res/values-fa/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"سرویس ورودی پیشفرض خودرو"</string>
-</resources>
diff --git a/car-default-input-service/res/values-fi/strings.xml b/car-default-input-service/res/values-fi/strings.xml
deleted file mode 100644
index 0b06f9a..0000000
--- a/car-default-input-service/res/values-fi/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Auton oletussyötepalvelu"</string>
-</resources>
diff --git a/car-default-input-service/res/values-fr-rCA/strings.xml b/car-default-input-service/res/values-fr-rCA/strings.xml
deleted file mode 100644
index b8f4d61..0000000
--- a/car-default-input-service/res/values-fr-rCA/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Service d\'entrée par défaut de la voiture"</string>
-</resources>
diff --git a/car-default-input-service/res/values-fr/strings.xml b/car-default-input-service/res/values-fr/strings.xml
deleted file mode 100644
index b8f4d61..0000000
--- a/car-default-input-service/res/values-fr/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Service d\'entrée par défaut de la voiture"</string>
-</resources>
diff --git a/car-default-input-service/res/values-gl/strings.xml b/car-default-input-service/res/values-gl/strings.xml
deleted file mode 100644
index 161e467..0000000
--- a/car-default-input-service/res/values-gl/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Servizo de entrada predeterminado do coche"</string>
-</resources>
diff --git a/car-default-input-service/res/values-gu/strings.xml b/car-default-input-service/res/values-gu/strings.xml
deleted file mode 100644
index 9b92e28..0000000
--- a/car-default-input-service/res/values-gu/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"કારની ડિફૉલ્ટ ઇનપુટ સેવા"</string>
-</resources>
diff --git a/car-default-input-service/res/values-hi/strings.xml b/car-default-input-service/res/values-hi/strings.xml
deleted file mode 100644
index 01ea8b9..0000000
--- a/car-default-input-service/res/values-hi/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"कार की डिफ़ॉल्ट इनपुट सेवा"</string>
-</resources>
diff --git a/car-default-input-service/res/values-hr/strings.xml b/car-default-input-service/res/values-hr/strings.xml
deleted file mode 100644
index 5b1a689..0000000
--- a/car-default-input-service/res/values-hr/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Zadana usluga za unos za automobil"</string>
-</resources>
diff --git a/car-default-input-service/res/values-hu/strings.xml b/car-default-input-service/res/values-hu/strings.xml
deleted file mode 100644
index 0a34bd1..0000000
--- a/car-default-input-service/res/values-hu/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Az autó alapértelmezett beviteli szolgáltatása"</string>
-</resources>
diff --git a/car-default-input-service/res/values-hy/strings.xml b/car-default-input-service/res/values-hy/strings.xml
deleted file mode 100644
index 12ad35f..0000000
--- a/car-default-input-service/res/values-hy/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Կանխադրված ներածման ծառայություն"</string>
-</resources>
diff --git a/car-default-input-service/res/values-in/strings.xml b/car-default-input-service/res/values-in/strings.xml
deleted file mode 100644
index 972b48c..0000000
--- a/car-default-input-service/res/values-in/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Layanan Masukan Default Mobil"</string>
-</resources>
diff --git a/car-default-input-service/res/values-is/strings.xml b/car-default-input-service/res/values-is/strings.xml
deleted file mode 100644
index 016d25d..0000000
--- a/car-default-input-service/res/values-is/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Sjálfgefin inntaksþjónusta bílsins"</string>
-</resources>
diff --git a/car-default-input-service/res/values-it/strings.xml b/car-default-input-service/res/values-it/strings.xml
deleted file mode 100644
index 28f1b85..0000000
--- a/car-default-input-service/res/values-it/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Servizio di input predefinito dell\'automobile"</string>
-</resources>
diff --git a/car-default-input-service/res/values-iw/strings.xml b/car-default-input-service/res/values-iw/strings.xml
deleted file mode 100644
index 003e9e4..0000000
--- a/car-default-input-service/res/values-iw/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"ברירת המחדל של שירות הקלט ברכב"</string>
-</resources>
diff --git a/car-default-input-service/res/values-ja/strings.xml b/car-default-input-service/res/values-ja/strings.xml
deleted file mode 100644
index e5714de..0000000
--- a/car-default-input-service/res/values-ja/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"車のデフォルト入力サービス"</string>
-</resources>
diff --git a/car-default-input-service/res/values-ka/strings.xml b/car-default-input-service/res/values-ka/strings.xml
deleted file mode 100644
index f389138..0000000
--- a/car-default-input-service/res/values-ka/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"მანქანის შეყვანის ნაგულისხმევი სერვისი"</string>
-</resources>
diff --git a/car-default-input-service/res/values-kk/strings.xml b/car-default-input-service/res/values-kk/strings.xml
deleted file mode 100644
index 7812059..0000000
--- a/car-default-input-service/res/values-kk/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Көліктің деректерді енгізуге арналған әдепкі қызметі"</string>
-</resources>
diff --git a/car-default-input-service/res/values-km/strings.xml b/car-default-input-service/res/values-km/strings.xml
deleted file mode 100644
index a90d8d9..0000000
--- a/car-default-input-service/res/values-km/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"សេវាកម្មបញ្ចូលលំនាំដើមរបស់រថយន្ត"</string>
-</resources>
diff --git a/car-default-input-service/res/values-kn/strings.xml b/car-default-input-service/res/values-kn/strings.xml
deleted file mode 100644
index 54d48ac..0000000
--- a/car-default-input-service/res/values-kn/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"ಕಾರಿನ ಪೂರ್ವನಿಯೋಜಿತ ಇನ್ಪುಟ್ ಸೇವೆ"</string>
-</resources>
diff --git a/car-default-input-service/res/values-ko/strings.xml b/car-default-input-service/res/values-ko/strings.xml
deleted file mode 100644
index 83e175a..0000000
--- a/car-default-input-service/res/values-ko/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"차량 기본 입력 서비스"</string>
-</resources>
diff --git a/car-default-input-service/res/values-ky/strings.xml b/car-default-input-service/res/values-ky/strings.xml
deleted file mode 100644
index 6680e95..0000000
--- a/car-default-input-service/res/values-ky/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Унааны демейки киргизүү кызматы"</string>
-</resources>
diff --git a/car-default-input-service/res/values-lo/strings.xml b/car-default-input-service/res/values-lo/strings.xml
deleted file mode 100644
index ac2e6ca..0000000
--- a/car-default-input-service/res/values-lo/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"ການບໍລິການປ້ອນຂໍ້ມູນເລີ່ມຕົ້ນຂອງລົດ"</string>
-</resources>
diff --git a/car-default-input-service/res/values-lt/strings.xml b/car-default-input-service/res/values-lt/strings.xml
deleted file mode 100644
index efe7e70..0000000
--- a/car-default-input-service/res/values-lt/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Numatytoji automobilio įvesties paslauga"</string>
-</resources>
diff --git a/car-default-input-service/res/values-lv/strings.xml b/car-default-input-service/res/values-lv/strings.xml
deleted file mode 100644
index d20025d..0000000
--- a/car-default-input-service/res/values-lv/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Automašīnas noklusējuma ieejas pakalpojums"</string>
-</resources>
diff --git a/car-default-input-service/res/values-mk/strings.xml b/car-default-input-service/res/values-mk/strings.xml
deleted file mode 100644
index 53436c2..0000000
--- a/car-default-input-service/res/values-mk/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Стандардна влезна услуга на автомобилот"</string>
-</resources>
diff --git a/car-default-input-service/res/values-ml/strings.xml b/car-default-input-service/res/values-ml/strings.xml
deleted file mode 100644
index 1b1cc07..0000000
--- a/car-default-input-service/res/values-ml/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"കാറിന്റെ ഡിഫോൾട്ട് ഇൻപുട്ട് സേവനം"</string>
-</resources>
diff --git a/car-default-input-service/res/values-mn/strings.xml b/car-default-input-service/res/values-mn/strings.xml
deleted file mode 100644
index 9ab8342..0000000
--- a/car-default-input-service/res/values-mn/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Машины өгөгдмөл оролтын үйлчилгээ"</string>
-</resources>
diff --git a/car-default-input-service/res/values-mr/strings.xml b/car-default-input-service/res/values-mr/strings.xml
deleted file mode 100644
index 5029612..0000000
--- a/car-default-input-service/res/values-mr/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"कार डीफॉल्ट इनपुट सेवा"</string>
-</resources>
diff --git a/car-default-input-service/res/values-ms/strings.xml b/car-default-input-service/res/values-ms/strings.xml
deleted file mode 100644
index 663d3ce..0000000
--- a/car-default-input-service/res/values-ms/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Perkhidmatan Input Lalai Kereta"</string>
-</resources>
diff --git a/car-default-input-service/res/values-my/strings.xml b/car-default-input-service/res/values-my/strings.xml
deleted file mode 100644
index 86102bd..0000000
--- a/car-default-input-service/res/values-my/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"ကား၏ မူလအချက်အလက်ထည့်သွင်းခြင်း ဝန်ဆောင်မှု"</string>
-</resources>
diff --git a/car-default-input-service/res/values-nb/strings.xml b/car-default-input-service/res/values-nb/strings.xml
deleted file mode 100644
index 293740f..0000000
--- a/car-default-input-service/res/values-nb/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Bilens standard inndatatjeneste"</string>
-</resources>
diff --git a/car-default-input-service/res/values-ne/strings.xml b/car-default-input-service/res/values-ne/strings.xml
deleted file mode 100644
index 3330c5c..0000000
--- a/car-default-input-service/res/values-ne/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"कारको पूर्वनिर्धारित इनपुट सेवा"</string>
-</resources>
diff --git a/car-default-input-service/res/values-nl/strings.xml b/car-default-input-service/res/values-nl/strings.xml
deleted file mode 100644
index 04de244..0000000
--- a/car-default-input-service/res/values-nl/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Standaard invoerservice voor auto"</string>
-</resources>
diff --git a/car-default-input-service/res/values-or/strings.xml b/car-default-input-service/res/values-or/strings.xml
deleted file mode 100644
index cf56e1a..0000000
--- a/car-default-input-service/res/values-or/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"କାର୍ର ଡିଫଲ୍ଟ ଇନ୍ପୁଟ୍ ସେବା"</string>
-</resources>
diff --git a/car-default-input-service/res/values-pa/strings.xml b/car-default-input-service/res/values-pa/strings.xml
deleted file mode 100644
index c4ee5cb..0000000
--- a/car-default-input-service/res/values-pa/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"ਕਾਰ ਦੀ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਇਨਪੁੱਟ ਸੇਵਾ"</string>
-</resources>
diff --git a/car-default-input-service/res/values-pl/strings.xml b/car-default-input-service/res/values-pl/strings.xml
deleted file mode 100644
index 2e80e13..0000000
--- a/car-default-input-service/res/values-pl/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Domyślna usługa wprowadzania danych w samochodzie"</string>
-</resources>
diff --git a/car-default-input-service/res/values-pt-rPT/strings.xml b/car-default-input-service/res/values-pt-rPT/strings.xml
deleted file mode 100644
index 0887bdc..0000000
--- a/car-default-input-service/res/values-pt-rPT/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Serviço de entrada predefinido do automóvel"</string>
-</resources>
diff --git a/car-default-input-service/res/values-pt/strings.xml b/car-default-input-service/res/values-pt/strings.xml
deleted file mode 100644
index 9325384..0000000
--- a/car-default-input-service/res/values-pt/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Serviço de entrada padrão do carro"</string>
-</resources>
diff --git a/car-default-input-service/res/values-ro/strings.xml b/car-default-input-service/res/values-ro/strings.xml
deleted file mode 100644
index 40a0a1d..0000000
--- a/car-default-input-service/res/values-ro/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Serviciul prestabilit de intrare din mașină"</string>
-</resources>
diff --git a/car-default-input-service/res/values-ru/strings.xml b/car-default-input-service/res/values-ru/strings.xml
deleted file mode 100644
index 42aeec3..0000000
--- a/car-default-input-service/res/values-ru/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Служба ввода по умолчанию"</string>
-</resources>
diff --git a/car-default-input-service/res/values-si/strings.xml b/car-default-input-service/res/values-si/strings.xml
deleted file mode 100644
index 53f62e2..0000000
--- a/car-default-input-service/res/values-si/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"මෝටර් රථ පෙරනිමි ආදාන සේවය"</string>
-</resources>
diff --git a/car-default-input-service/res/values-sk/strings.xml b/car-default-input-service/res/values-sk/strings.xml
deleted file mode 100644
index deb945a..0000000
--- a/car-default-input-service/res/values-sk/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Predvolená služba vstupu v aute"</string>
-</resources>
diff --git a/car-default-input-service/res/values-sl/strings.xml b/car-default-input-service/res/values-sl/strings.xml
deleted file mode 100644
index d24431d..0000000
--- a/car-default-input-service/res/values-sl/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Privzeta vhodna storitev avtomobila"</string>
-</resources>
diff --git a/car-default-input-service/res/values-sq/strings.xml b/car-default-input-service/res/values-sq/strings.xml
deleted file mode 100644
index 1b0c1e2..0000000
--- a/car-default-input-service/res/values-sq/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Shërbimi i parazgjedhur i hyrjes për makinën"</string>
-</resources>
diff --git a/car-default-input-service/res/values-sr/strings.xml b/car-default-input-service/res/values-sr/strings.xml
deleted file mode 100644
index 38620a4..0000000
--- a/car-default-input-service/res/values-sr/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Подразумевана услуга за унос за аутомобил"</string>
-</resources>
diff --git a/car-default-input-service/res/values-sv/strings.xml b/car-default-input-service/res/values-sv/strings.xml
deleted file mode 100644
index cde5fba..0000000
--- a/car-default-input-service/res/values-sv/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Bilens standardtjänst för indata"</string>
-</resources>
diff --git a/car-default-input-service/res/values-sw/strings.xml b/car-default-input-service/res/values-sw/strings.xml
deleted file mode 100644
index ce99a71..0000000
--- a/car-default-input-service/res/values-sw/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Huduma Chaguomsingi ya Kuweka Data ya Gari"</string>
-</resources>
diff --git a/car-default-input-service/res/values-ta/strings.xml b/car-default-input-service/res/values-ta/strings.xml
deleted file mode 100644
index c93e2e4..0000000
--- a/car-default-input-service/res/values-ta/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"காருக்கு உற்பத்தியாளர் வழங்கும் சேவை"</string>
-</resources>
diff --git a/car-default-input-service/res/values-te/strings.xml b/car-default-input-service/res/values-te/strings.xml
deleted file mode 100644
index ffd4acf..0000000
--- a/car-default-input-service/res/values-te/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"కారు డిఫాల్ట్ ఇన్పుట్ సేవ"</string>
-</resources>
diff --git a/car-default-input-service/res/values-th/strings.xml b/car-default-input-service/res/values-th/strings.xml
deleted file mode 100644
index c28d29a..0000000
--- a/car-default-input-service/res/values-th/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"บริการป้อนข้อมูลเริ่มต้นของรถ"</string>
-</resources>
diff --git a/car-default-input-service/res/values-tl/strings.xml b/car-default-input-service/res/values-tl/strings.xml
deleted file mode 100644
index b9ae49d..0000000
--- a/car-default-input-service/res/values-tl/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Default na Serbisyo sa Input ng Sasakyan"</string>
-</resources>
diff --git a/car-default-input-service/res/values-tr/strings.xml b/car-default-input-service/res/values-tr/strings.xml
deleted file mode 100644
index 72f7f26..0000000
--- a/car-default-input-service/res/values-tr/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Araç Varsayılan Giriş Hizmeti"</string>
-</resources>
diff --git a/car-default-input-service/res/values-uk/strings.xml b/car-default-input-service/res/values-uk/strings.xml
deleted file mode 100644
index e8d1526..0000000
--- a/car-default-input-service/res/values-uk/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Стандартний сервіс даних про вхідні події автомобіля"</string>
-</resources>
diff --git a/car-default-input-service/res/values-ur/strings.xml b/car-default-input-service/res/values-ur/strings.xml
deleted file mode 100644
index a0e1ac0..0000000
--- a/car-default-input-service/res/values-ur/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"کار کی ڈیفالٹ ان پٹ سروس"</string>
-</resources>
diff --git a/car-default-input-service/res/values-uz/strings.xml b/car-default-input-service/res/values-uz/strings.xml
deleted file mode 100644
index 416cc94..0000000
--- a/car-default-input-service/res/values-uz/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Standart matn kiritish xizmati"</string>
-</resources>
diff --git a/car-default-input-service/res/values-vi/strings.xml b/car-default-input-service/res/values-vi/strings.xml
deleted file mode 100644
index 9c28716..0000000
--- a/car-default-input-service/res/values-vi/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Dịch vụ nhập mặc định trên ô tô"</string>
-</resources>
diff --git a/car-default-input-service/res/values-zh-rCN/strings.xml b/car-default-input-service/res/values-zh-rCN/strings.xml
deleted file mode 100644
index 9c6f615..0000000
--- a/car-default-input-service/res/values-zh-rCN/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"汽车默认输入服务"</string>
-</resources>
diff --git a/car-default-input-service/res/values-zh-rHK/strings.xml b/car-default-input-service/res/values-zh-rHK/strings.xml
deleted file mode 100644
index 7ad2fd3..0000000
--- a/car-default-input-service/res/values-zh-rHK/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"汽車預設輸入服務"</string>
-</resources>
diff --git a/car-default-input-service/res/values-zh-rTW/strings.xml b/car-default-input-service/res/values-zh-rTW/strings.xml
deleted file mode 100644
index df86715..0000000
--- a/car-default-input-service/res/values-zh-rTW/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"車輛預設輸入服務"</string>
-</resources>
diff --git a/car-default-input-service/res/values-zu/strings.xml b/car-default-input-service/res/values-zu/strings.xml
deleted file mode 100644
index 5b5e99e..0000000
--- a/car-default-input-service/res/values-zu/strings.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2732799531977169961">"Isevisi yokufaka ezenzakalelayo yemoto"</string>
-</resources>
diff --git a/car-default-input-service/res/values/strings.xml b/car-default-input-service/res/values/strings.xml
deleted file mode 100644
index c4dbd46..0000000
--- a/car-default-input-service/res/values/strings.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2016 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources>
- <string name="app_name">Car Default Input Service</string>
-</resources>
diff --git a/car-default-input-service/src/android/car/input/service/DefaultInputService.java b/car-default-input-service/src/android/car/input/service/DefaultInputService.java
deleted file mode 100644
index 2502525..0000000
--- a/car-default-input-service/src/android/car/input/service/DefaultInputService.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.car.input.service;
-
-import android.car.input.CarInputHandlingService;
-import android.car.input.CarInputHandlingService.InputFilter;
-import android.util.Log;
-import android.view.KeyEvent;
-
-/**
- * Default implementation of {@link CarInputHandlingService}.
- *
- * This implementation does nothing, just serves as showcase how input service should be
- * implemented.
- */
-public class DefaultInputService extends CarInputHandlingService {
- private static final String TAG = DefaultInputService.class.getSimpleName();
-
- public DefaultInputService() {
- super(new InputFilter[0]);
- }
-
- @Override
- protected void onKeyEvent(KeyEvent event, int targetDisplay) {
- // Implement your handling here
- Log.i(TAG, "onKeyEvent(" + event + ", " + targetDisplay + ")");
- }
-}
diff --git a/car-internal-lib/Android.bp b/car-internal-lib/Android.bp
index cb68c66..5b7a5d9 100644
--- a/car-internal-lib/Android.bp
+++ b/car-internal-lib/Android.bp
@@ -19,8 +19,12 @@
// supported.
java_library {
- name: "android.car.internal.event-log-tags",
+ name: "com.android.car.internal.system",
srcs: [
- "src/com/android/internal/car/EventLogTags.logtags",
+ "src/com/android/car/internal/SystemConstants.java",
+ "src/com/android/car/internal/ICarServiceHelper.aidl",
+ "src/com/android/car/internal/ICarSystemServerClient.aidl",
],
}
+
+
diff --git a/car-internal-lib/src/com/android/car/internal/ICarServiceHelper.aidl b/car-internal-lib/src/com/android/car/internal/ICarServiceHelper.aidl
new file mode 100644
index 0000000..51d28c6
--- /dev/null
+++ b/car-internal-lib/src/com/android/car/internal/ICarServiceHelper.aidl
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2017 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.car.internal;
+
+import android.content.ComponentName;
+
+import java.util.List;
+
+/**
+ * Helper API for car service. Only for interaction between system server and car service.
+ */
+interface ICarServiceHelper {
+ int forceSuspend(int timeoutMs);
+ /**
+ * Check
+ * {@link com.android.server.wm.CarLaunchParamsModifier#setDisplayAllowlistForUser(int, int[]).
+ */
+ void setDisplayAllowlistForUser(int userId, in int[] displayIds);
+
+ /**
+ * Check
+ * {@link com.android.server.wm.CarLaunchParamsModifier#setPassengerDisplays(int[])}.
+ */
+ void setPassengerDisplays(in int[] displayIds);
+
+ /**
+ * Check
+ * {@link com.android.server.wm.CarLaunchParamsModifier#setSourcePreferredComponents(
+ * boolean, List<ComponentName>)}.
+ */
+ void setSourcePreferredComponents(
+ boolean enableSourcePreferred, in List<ComponentName> sourcePreferredComponents);
+}
diff --git a/car-internal-lib/src/com/android/car/internal/ICarSystemServerClient.aidl b/car-internal-lib/src/com/android/car/internal/ICarSystemServerClient.aidl
new file mode 100644
index 0000000..e1a9e68
--- /dev/null
+++ b/car-internal-lib/src/com/android/car/internal/ICarSystemServerClient.aidl
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2020 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.car.internal;
+
+/**
+ * API to communicate from CarServiceHelperService to car service.
+ */
+interface ICarSystemServerClient {
+ /**
+ * Notify of user lifecycle events.
+ *
+ * @param eventType - type as defined by CarUserManager.UserLifecycleEventType
+ * @param fromUserId - user id of previous user when type is SWITCHING (or UserHandle.USER_NULL)
+ * @param toUserId - user id of new user.
+ */
+ oneway void onUserLifecycleEvent(int eventType, int fromUserId, int toUserId);
+
+ /**
+ * Notify to init boot user.
+ */
+ oneway void initBootUser();
+
+ /**
+ * Notify to pre-create users.
+ */
+ oneway void preCreateUsers();
+}
diff --git a/car-internal-lib/src/com/android/car/internal/SystemConstants.java b/car-internal-lib/src/com/android/car/internal/SystemConstants.java
new file mode 100644
index 0000000..0025ea7
--- /dev/null
+++ b/car-internal-lib/src/com/android/car/internal/SystemConstants.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2020 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.car.internal;
+
+/**
+ * Provides common constants for CarService, CarServiceHelperService and other packages.
+ */
+public final class SystemConstants {
+
+ public static final String ICAR_SYSTEM_SERVER_CLIENT = "ICarSystemServerClient";
+
+ private SystemConstants() {
+ throw new UnsupportedOperationException("contains only static constants");
+ }
+}
diff --git a/car-lib/Android.bp b/car-lib/Android.bp
index 1978ba3..843b2e5 100644
--- a/car-lib/Android.bp
+++ b/car-lib/Android.bp
@@ -71,11 +71,21 @@
srcs: ["src/android/car/settings/CarSettings.java"]
}
+// library to access common constants between carlibrary and system server.
+java_library {
+ name: "com.android.car.internal.common",
+ srcs: [
+ "src/com/android/car/internal/common/**/*.java",
+ "src/com/android/car/internal/common/EventLogTags.logtags",
+ ]
+}
+
java_library {
name: "android.car",
srcs: [
"src/**/*.java",
"src/**/I*.aidl",
+ "src/com/android/car/internal/common/EventLogTags.logtags",
],
aidl: {
include_dirs: [
@@ -86,9 +96,6 @@
"src/android/car/storagemonitoring/IoStats.aidl",
"src/android/car/storagemonitoring/IoStatsEntry.aidl",
],
- static_libs: [
- "android.car.internal.event-log-tags",
- ],
product_variables: {
pdk: {
enabled: false,
@@ -226,70 +233,6 @@
},
}
-// Generates stubs for API documentation.
-droidstubs {
- name: "car-doc-stubs",
- srcs: [
- "src/**/*.java"
- ],
- create_doc_stubs: true,
- annotations_enabled: true,
- api_levels_annotations_enabled: true,
- api_levels_jar_filename: "android.car.jar",
- api_levels_annotations_dirs: [
- "sdk-dir",
- "api-versions-jars-dir",
- ],
- previous_api: ":android-car-last-released-api",
- merge_annotations_dirs: [
- "metalava-manual",
- ],
- arg_files: [
- "AndroidManifest.xml",
- ],
- // Add --verbose to print metalava details.
- args: "--manifest $(location AndroidManifest.xml) " +
- "--error UnhiddenSystemApi " +
- "--hide RequiresPermission " +
- "--hide CallbackInterface " +
- "--hide MissingPermission " +
- "--hide HiddenSuperclass --hide DeprecationMismatch --hide UnavailableSymbol " +
- "--hide SdkConstant --hide HiddenTypeParameter --hide Todo --hide Typo " +
- "--hide Todo --hide Typo ",
- write_sdk_values: true,
-}
-
-// Generates API docs for go/devsite.
-droiddoc {
- name: "ds-car-docs",
- srcs: [
- ":car-doc-stubs",
- ],
- libs: [
- "stub-annotations",
- "unsupportedappusage",
- ],
- custom_template: "droiddoc-templates-sdk",
- // These variables that are used in doclava templates.
- hdf: [
- "dac true",
- "sdk.preview 0", // Not a preview version.
- "sdk.version 30",
- "android.whichdoc online",
- "android.hasSamples false",
- ],
- arg_files: [
- "AndroidManifest.xml",
- ],
- proofread_file: "ds-sdk-docs-proofrerad.txt",
- // See doclava docs in https://github.com/tinks/doclava.
- // See error numbers in external/doclava/src/com/google/doclava/Errors.java.
- // TODO: Add -werror -lerror to catch bad javadocs
- args: "-android -manifest $(location AndroidManifest.xml) -toroot / -devsite -yamlV2 -metalavaApiSince " +
- "-hide 111 -hide 113 -hide 125 -hide 126 -hide 127 -hide 128 " +
- "-stubpackages android.car -dac_libraryroot android/car ",
-}
-
java_library {
name: "android.car-stubs",
srcs: [
diff --git a/car-lib/api/current.txt b/car-lib/api/current.txt
index 40b8e57..bada398 100644
--- a/car-lib/api/current.txt
+++ b/car-lib/api/current.txt
@@ -16,7 +16,6 @@
method public boolean isFeatureEnabled(@NonNull String);
field public static final String APP_FOCUS_SERVICE = "app_focus";
field public static final String AUDIO_SERVICE = "audio";
- field public static final String CAR_CONFIGURATION_SERVICE = "configuration";
field public static final String CAR_EXTRA_BROWSE_SERVICE_FOR_SESSION = "android.media.session.BROWSE_SERVICE";
field public static final String CAR_EXTRA_MEDIA_COMPONENT = "android.car.intent.extra.MEDIA_COMPONENT";
field public static final String CAR_INTENT_ACTION_MEDIA_TEMPLATE = "android.car.intent.action.MEDIA_TEMPLATE";
@@ -614,21 +613,3 @@
}
-package android.car.settings {
-
- @Deprecated public class CarConfigurationManager {
- method @Deprecated public android.car.settings.SpeedBumpConfiguration getSpeedBumpConfiguration();
- }
-
- @Deprecated public final class SpeedBumpConfiguration implements android.os.Parcelable {
- ctor @Deprecated public SpeedBumpConfiguration(double, double, long);
- method @Deprecated public int describeContents();
- method @Deprecated public double getAcquiredPermitsPerSecond();
- method @Deprecated public double getMaxPermitPool();
- method @Deprecated public long getPermitFillDelay();
- method @Deprecated public void writeToParcel(android.os.Parcel, int);
- field @Deprecated public static final android.os.Parcelable.Creator<android.car.settings.SpeedBumpConfiguration> CREATOR;
- }
-
-}
-
diff --git a/car-lib/api/system-current.txt b/car-lib/api/system-current.txt
index c404acd..c1a2335 100644
--- a/car-lib/api/system-current.txt
+++ b/car-lib/api/system-current.txt
@@ -21,7 +21,6 @@
field public static final String CAR_DRIVING_STATE_SERVICE = "drivingstate";
field public static final String CAR_EXTRA_CLUSTER_ACTIVITY_STATE = "android.car.cluster.ClusterActivityState";
field public static final String CAR_MEDIA_SERVICE = "car_media";
- field public static final String CAR_TRUST_AGENT_ENROLLMENT_SERVICE = "trust_enroll";
field public static final String CAR_USER_SERVICE = "car_user_service";
field public static final String CAR_WATCHDOG_SERVICE = "car_watchdog";
field public static final String DIAGNOSTIC_SERVICE = "diagnostic";
@@ -37,7 +36,6 @@
field public static final String PERMISSION_CAR_DRIVING_STATE = "android.car.permission.CAR_DRIVING_STATE";
field public static final String PERMISSION_CAR_DYNAMICS_STATE = "android.car.permission.CAR_DYNAMICS_STATE";
field public static final String PERMISSION_CAR_ENGINE_DETAILED = "android.car.permission.CAR_ENGINE_DETAILED";
- field public static final String PERMISSION_CAR_ENROLL_TRUST = "android.car.permission.CAR_ENROLL_TRUST";
field public static final String PERMISSION_CAR_INSTRUMENT_CLUSTER_CONTROL = "android.car.permission.CAR_INSTRUMENT_CLUSTER_CONTROL";
field public static final String PERMISSION_CAR_POWER = "android.car.permission.CAR_POWER";
field public static final String PERMISSION_CAR_PROJECTION = "android.car.permission.CAR_PROJECTION";
@@ -48,7 +46,7 @@
field public static final String PERMISSION_CONTROL_CAR_DOORS = "android.car.permission.CONTROL_CAR_DOORS";
field public static final String PERMISSION_CONTROL_CAR_FEATURES = "android.car.permission.CONTROL_CAR_FEATURES";
field public static final String PERMISSION_CONTROL_CAR_MIRRORS = "android.car.permission.CONTROL_CAR_MIRRORS";
- field public static final String PERMISSION_CONTROL_CAR_OCCUPANT_AWARENESS_SYSTEM = "android.car.permission.CONTROL_CAR_OCCUPANT_AWARENESS_SYSTEM";
+ field @Deprecated public static final String PERMISSION_CONTROL_CAR_OCCUPANT_AWARENESS_SYSTEM = "android.car.permission.CONTROL_CAR_OCCUPANT_AWARENESS_SYSTEM";
field public static final String PERMISSION_CONTROL_CAR_SEATS = "android.car.permission.CONTROL_CAR_SEATS";
field public static final String PERMISSION_CONTROL_CAR_WINDOWS = "android.car.permission.CONTROL_CAR_WINDOWS";
field public static final String PERMISSION_CONTROL_ENERGY_PORTS = "android.car.permission.CONTROL_CAR_ENERGY_PORTS";
@@ -291,10 +289,10 @@
public final class CarPackageManager {
method public boolean isActivityBackedBySafeActivity(android.content.ComponentName);
- method public void setAppBlockingPolicy(String, android.car.content.pm.CarAppBlockingPolicy, int);
- field public static final int FLAG_SET_POLICY_ADD = 2; // 0x2
- field public static final int FLAG_SET_POLICY_REMOVE = 4; // 0x4
- field public static final int FLAG_SET_POLICY_WAIT_FOR_CHANGE = 1; // 0x1
+ method @Deprecated public void setAppBlockingPolicy(String, android.car.content.pm.CarAppBlockingPolicy, int);
+ field @Deprecated public static final int FLAG_SET_POLICY_ADD = 2; // 0x2
+ field @Deprecated public static final int FLAG_SET_POLICY_REMOVE = 4; // 0x4
+ field @Deprecated public static final int FLAG_SET_POLICY_WAIT_FOR_CHANGE = 1; // 0x1
}
}
@@ -797,21 +795,21 @@
package android.car.input {
- public abstract class CarInputHandlingService extends android.app.Service {
- ctor protected CarInputHandlingService(android.car.input.CarInputHandlingService.InputFilter[]);
- method @CallSuper public android.os.IBinder onBind(android.content.Intent);
- method @MainThread protected abstract void onKeyEvent(android.view.KeyEvent, int);
- field public static final int INPUT_CALLBACK_BINDER_CODE = 1; // 0x1
- field public static final String INPUT_CALLBACK_BINDER_KEY = "callback_binder";
+ @Deprecated public abstract class CarInputHandlingService extends android.app.Service {
+ ctor @Deprecated protected CarInputHandlingService(android.car.input.CarInputHandlingService.InputFilter[]);
+ method @Deprecated @CallSuper public android.os.IBinder onBind(android.content.Intent);
+ method @Deprecated @MainThread protected abstract void onKeyEvent(android.view.KeyEvent, int);
+ field @Deprecated public static final int INPUT_CALLBACK_BINDER_CODE = 1; // 0x1
+ field @Deprecated public static final String INPUT_CALLBACK_BINDER_KEY = "callback_binder";
}
- public static final class CarInputHandlingService.InputFilter implements android.os.Parcelable {
- ctor public CarInputHandlingService.InputFilter(int, int);
- method public int describeContents();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator CREATOR;
- field public final int mKeyCode;
- field public final int mTargetDisplay;
+ @Deprecated public static final class CarInputHandlingService.InputFilter implements android.os.Parcelable {
+ ctor @Deprecated public CarInputHandlingService.InputFilter(int, int);
+ method @Deprecated public int describeContents();
+ method @Deprecated public void writeToParcel(android.os.Parcel, int);
+ field @Deprecated public static final android.os.Parcelable.Creator CREATOR;
+ field @Deprecated public final int mKeyCode;
+ field @Deprecated public final int mTargetDisplay;
}
}
@@ -1082,61 +1080,12 @@
}
-package android.car.trust {
-
- @Deprecated public final class CarTrustAgentEnrollmentManager {
- method @Deprecated @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public void enrollmentHandshakeAccepted(android.bluetooth.BluetoothDevice);
- method @Deprecated @NonNull @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public java.util.List<android.car.trust.TrustedDeviceInfo> getEnrolledDeviceInfoForUser(int);
- method @Deprecated @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public boolean isEscrowTokenActive(long, int);
- method @Deprecated @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public void removeAllTrustedDevices(int);
- method @Deprecated @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public void removeEscrowToken(long, int);
- method @Deprecated @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public void setBleCallback(@Nullable android.car.trust.CarTrustAgentEnrollmentManager.CarTrustAgentBleCallback);
- method @Deprecated @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public void setEnrollmentCallback(@Nullable android.car.trust.CarTrustAgentEnrollmentManager.CarTrustAgentEnrollmentCallback);
- method @Deprecated @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public void setTrustedDeviceEnrollmentEnabled(boolean);
- method @Deprecated @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public void setTrustedDeviceUnlockEnabled(boolean);
- method @Deprecated @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public void startEnrollmentAdvertising();
- method @Deprecated @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public void stopEnrollmentAdvertising();
- method @Deprecated @RequiresPermission(android.car.Car.PERMISSION_CAR_ENROLL_TRUST) public void terminateEnrollmentHandshake();
- field @Deprecated public static final int ENROLLMENT_HANDSHAKE_FAILURE = 1; // 0x1
- field @Deprecated public static final int ENROLLMENT_NOT_ALLOWED = 2; // 0x2
- }
-
- @Deprecated public static interface CarTrustAgentEnrollmentManager.CarTrustAgentBleCallback {
- method @Deprecated public void onBleEnrollmentDeviceConnected(android.bluetooth.BluetoothDevice);
- method @Deprecated public void onBleEnrollmentDeviceDisconnected(android.bluetooth.BluetoothDevice);
- method @Deprecated public void onEnrollmentAdvertisingFailed();
- method @Deprecated public void onEnrollmentAdvertisingStarted();
- }
-
- @Deprecated public static interface CarTrustAgentEnrollmentManager.CarTrustAgentEnrollmentCallback {
- method @Deprecated public void onAuthStringAvailable(android.bluetooth.BluetoothDevice, String);
- method @Deprecated public void onEnrollmentHandshakeFailure(@Nullable android.bluetooth.BluetoothDevice, int);
- method @Deprecated public void onEscrowTokenActiveStateChanged(long, boolean);
- method @Deprecated public void onEscrowTokenAdded(long);
- method @Deprecated public void onEscrowTokenRemoved(long);
- }
-
- @Deprecated public final class TrustedDeviceInfo implements android.os.Parcelable {
- ctor @Deprecated public TrustedDeviceInfo(long, @NonNull String, @NonNull String);
- ctor @Deprecated public TrustedDeviceInfo(android.os.Parcel);
- method @Deprecated public int describeContents();
- method @Deprecated public static android.car.trust.TrustedDeviceInfo deserialize(String);
- method @Deprecated @NonNull public String getAddress();
- method @Deprecated public long getHandle();
- method @Deprecated @NonNull public String getName();
- method @Deprecated public String serialize();
- method @Deprecated public void writeToParcel(android.os.Parcel, int);
- field @Deprecated public static final android.os.Parcelable.Creator CREATOR;
- field @Deprecated public static final String DEFAULT_NAME = "Default";
- }
-
-}
-
package android.car.user {
public final class CarUserManager {
method @RequiresPermission(anyOf={android.Manifest.permission.INTERACT_ACROSS_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}) public void addListener(@NonNull java.util.concurrent.Executor, @NonNull android.car.user.CarUserManager.UserLifecycleListener);
method @RequiresPermission(anyOf={android.Manifest.permission.INTERACT_ACROSS_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}) public void removeListener(@NonNull android.car.user.CarUserManager.UserLifecycleListener);
+ method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.car.user.UserRemovalResult removeUser(@NonNull android.os.UserHandle);
field public static final int USER_LIFECYCLE_EVENT_TYPE_STARTING = 1; // 0x1
field public static final int USER_LIFECYCLE_EVENT_TYPE_STOPPED = 6; // 0x6
field public static final int USER_LIFECYCLE_EVENT_TYPE_STOPPING = 5; // 0x5
@@ -1155,6 +1104,19 @@
method public void onEvent(@NonNull android.car.user.CarUserManager.UserLifecycleEvent);
}
+ public final class UserRemovalResult implements android.os.Parcelable {
+ method public int describeContents();
+ method public int getStatus();
+ method public boolean isSuccess();
+ method public void writeToParcel(@NonNull android.os.Parcel, int);
+ field @NonNull public static final android.os.Parcelable.Creator<android.car.user.UserRemovalResult> CREATOR;
+ field public static final int STATUS_ANDROID_FAILURE = 2; // 0x2
+ field public static final int STATUS_SUCCESSFUL = 1; // 0x1
+ field public static final int STATUS_SUCCESSFUL_LAST_ADMIN_REMOVED = 103; // 0x67
+ field public static final int STATUS_TARGET_USER_IS_CURRENT_USER = 101; // 0x65
+ field public static final int STATUS_USER_DOES_NOT_EXIST = 102; // 0x66
+ }
+
}
package android.car.vms {
diff --git a/car-lib/api/test-current.txt b/car-lib/api/test-current.txt
index 49d4bb5..f5572b6 100644
--- a/car-lib/api/test-current.txt
+++ b/car-lib/api/test-current.txt
@@ -55,6 +55,7 @@
method @RequiresPermission(anyOf={android.Manifest.permission.INTERACT_ACROSS_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}) public void addListener(@NonNull java.util.concurrent.Executor, @NonNull android.car.user.CarUserManager.UserLifecycleListener);
method public static String lifecycleEventTypeToString(int);
method @RequiresPermission(anyOf={android.Manifest.permission.INTERACT_ACROSS_USERS, android.Manifest.permission.INTERACT_ACROSS_USERS_FULL}) public void removeListener(@NonNull android.car.user.CarUserManager.UserLifecycleListener);
+ method @NonNull @RequiresPermission(anyOf={android.Manifest.permission.MANAGE_USERS, android.Manifest.permission.CREATE_USERS}) public android.car.user.UserRemovalResult removeUser(@NonNull android.os.UserHandle);
field public static final int USER_LIFECYCLE_EVENT_TYPE_STARTING = 1; // 0x1
field public static final int USER_LIFECYCLE_EVENT_TYPE_STOPPED = 6; // 0x6
field public static final int USER_LIFECYCLE_EVENT_TYPE_STOPPING = 5; // 0x5
@@ -73,5 +74,18 @@
method public void onEvent(@NonNull android.car.user.CarUserManager.UserLifecycleEvent);
}
+ public final class UserRemovalResult implements android.os.Parcelable {
+ method public int describeContents();
+ method public int getStatus();
+ method public boolean isSuccess();
+ method public void writeToParcel(@NonNull android.os.Parcel, int);
+ field @NonNull public static final android.os.Parcelable.Creator<android.car.user.UserRemovalResult> CREATOR;
+ field public static final int STATUS_ANDROID_FAILURE = 2; // 0x2
+ field public static final int STATUS_SUCCESSFUL = 1; // 0x1
+ field public static final int STATUS_SUCCESSFUL_LAST_ADMIN_REMOVED = 103; // 0x67
+ field public static final int STATUS_TARGET_USER_IS_CURRENT_USER = 101; // 0x65
+ field public static final int STATUS_USER_DOES_NOT_EXIST = 102; // 0x66
+ }
+
}
diff --git a/car-lib/src/android/car/Car.java b/car-lib/src/android/car/Car.java
index 099d56a..9d78547 100644
--- a/car-lib/src/android/car/Car.java
+++ b/car-lib/src/android/car/Car.java
@@ -49,10 +49,8 @@
import android.car.media.CarMediaManager;
import android.car.navigation.CarNavigationStatusManager;
import android.car.occupantawareness.OccupantAwarenessManager;
-import android.car.settings.CarConfigurationManager;
import android.car.storagemonitoring.CarStorageMonitoringManager;
import android.car.test.CarTestManagerBinderWrapper;
-import android.car.trust.CarTrustAgentEnrollmentManager;
import android.car.user.CarUserManager;
import android.car.vms.VmsClientManager;
import android.car.vms.VmsSubscriberManager;
@@ -73,6 +71,7 @@
import android.os.UserHandle;
import android.util.Log;
+import com.android.car.internal.common.CommonConstants;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
@@ -293,11 +292,6 @@
public static final String OCCUPANT_AWARENESS_SERVICE = "occupant_awareness";
/**
- * Service name for {@link android.car.settings.CarConfigurationManager}
- */
- public static final String CAR_CONFIGURATION_SERVICE = "configuration";
-
- /**
* Service name for {@link android.car.media.CarMediaManager}
* @hide
*/
@@ -321,13 +315,6 @@
public static final String STORAGE_MONITORING_SERVICE = "storage_monitoring";
/**
- * Service name for {@link android.car.trust.CarTrustAgentEnrollmentManager}
- * @hide
- */
- @SystemApi
- public static final String CAR_TRUST_AGENT_ENROLLMENT_SERVICE = "trust_enroll";
-
- /**
* Service name for {@link android.car.watchdog.CarWatchdogManager}
* @hide
*/
@@ -678,7 +665,7 @@
"android.car.permission.READ_CAR_OCCUPANT_AWARENESS_STATE";
/**
- * Permission necessary to modify occupant awareness graph.
+ * @deprecated This permission is not used by any service.
*
* @hide
*/
@@ -696,15 +683,6 @@
"android.car.permission.STORAGE_MONITORING";
/**
- * Permission necessary to enroll a device as a trusted authenticator device.
- *
- * @hide
- */
- @SystemApi
- public static final String PERMISSION_CAR_ENROLL_TRUST =
- "android.car.permission.CAR_ENROLL_TRUST";
-
- /**
* Permission necessary to dynamically enable / disable optional car features.
*
* @hide
@@ -766,7 +744,7 @@
"android.media.session.BROWSE_SERVICE";
/** @hide */
- public static final String CAR_SERVICE_INTERFACE_NAME = "android.car.ICar";
+ public static final String CAR_SERVICE_INTERFACE_NAME = CommonConstants.CAR_SERVICE_INTERFACE;
private static final String CAR_SERVICE_PACKAGE = "com.android.car";
@@ -1733,12 +1711,6 @@
case OCCUPANT_AWARENESS_SERVICE:
manager = new OccupantAwarenessManager(this, binder);
break;
- case CAR_CONFIGURATION_SERVICE:
- manager = new CarConfigurationManager(this, binder);
- break;
- case CAR_TRUST_AGENT_ENROLLMENT_SERVICE:
- manager = new CarTrustAgentEnrollmentManager(this, binder);
- break;
case CAR_MEDIA_SERVICE:
manager = new CarMediaManager(this, binder);
break;
diff --git a/car-lib/src/android/car/CarOccupantZoneManager.java b/car-lib/src/android/car/CarOccupantZoneManager.java
index 7a00029..17d5177 100644
--- a/car-lib/src/android/car/CarOccupantZoneManager.java
+++ b/car-lib/src/android/car/CarOccupantZoneManager.java
@@ -302,7 +302,7 @@
int[] displayIds = mService.getAllDisplaysForOccupantZone(occupantZone.zoneId);
ArrayList<Display> displays = new ArrayList<>(displayIds.length);
for (int i = 0; i < displayIds.length; i++) {
- // quick sanity check while getDisplay can still handle invalid display
+ // quick confidence check while getDisplay can still handle invalid display
if (displayIds[i] == Display.INVALID_DISPLAY) {
continue;
}
@@ -330,7 +330,7 @@
assertNonNullOccupant(occupantZone);
try {
int displayId = mService.getDisplayForOccupant(occupantZone.zoneId, displayType);
- // quick sanity check while getDisplay can still handle invalid display
+ // quick confidence check while getDisplay can still handle invalid display
if (displayId == Display.INVALID_DISPLAY) {
return null;
}
diff --git a/car-lib/src/android/car/ICar.aidl b/car-lib/src/android/car/ICar.aidl
index 5f548a6..68268e6 100644
--- a/car-lib/src/android/car/ICar.aidl
+++ b/car-lib/src/android/car/ICar.aidl
@@ -18,56 +18,16 @@
/** @hide */
interface ICar {
- // All oneway methods are called from system server and should be placed in top positions.
- // Do not change the number of oneway methods as system server make binder calls based on these
- // numbers - if you change them, you need to change the constants on CarServiceHelperService.
-
/**
- * IBinder is ICarServiceHelper but passed as IBinder due to aidl hidden.
+ * Helper binder is for ICarServiceHelper. It is for the communication from CarService ->
+ * CarServiceHelperService.
+ * Receiver binder is type of IResultReceiver. It would set ICarSystemServerClient binder for
+ * CarServiceHelperService.
+ * DO NOT CHANGE the number.
*/
- oneway void setCarServiceHelper(in IBinder helper) = 0;
+ oneway void setSystemServerConnections(in IBinder helper, in IBinder receiver) = 0;
- /**
- * Notify of user lifecycle events.
- *
- * @param eventType - type as defined by CarUserManager.UserLifecycleEventType
- * @param timestampMs - when the event happened
- * @param fromUserId - user id of previous user when type is SWITCHING (or UserHandle.USER_NULL)
- * @param toUserId - user id of new user.
- */
- oneway void onUserLifecycleEvent(int eventType, long timestampMs, int fromUserId,
- int toUserId) = 1;
-
- /**
- * Notify when first user was unlocked, for metrics (and lifecycle) purposes.
- *
- * @param userId - id of first non-system user locked
- * @param timestampMs - when the user was unlocked
- * @param duration - how long it took to unlock (from SystemServer start)
- * @param halResponseTime - see CarServiceHelperService.mHalResponseTime
- */
- oneway void onFirstUserUnlocked(int userId, long timestampMs, long duration,
- int halResponseTime) = 2;
-
- /**
- * Calls User HAL to get the initial user info.
- *
- * @param requestType - as defined by InitialUserInfoRequestType.
- * @param timeoutMs - how long to wait for HAL's response.
- * @param receiver - a com.android.internal.os.IResultReceiver callback.
- */
- oneway void getInitialUserInfo(int requestType, int timeoutMs, in IBinder receiver) = 3;
-
- /**
- * Sets the initial user after boot.
- *
- * @param userId - the id of the initial user
- */
- // TODO(b/150413515): should pass UserInfo instead, but for some reason passing the whole
- // UserInfo through a raw binder transaction on CarServiceHelper is not working.
- oneway void setInitialUser(int userId) = 4;
-
- // Methods below start on 11 to make it easier to add more oneway methods above
+ // Rest of the calls are used for Apps to CarService communication
IBinder getCarService(in String serviceName) = 11;
int getCarConnectionType() = 12;
boolean isFeatureEnabled(in String featureName) = 13;
diff --git a/car-lib/src/android/car/ICarOccupantZone.aidl b/car-lib/src/android/car/ICarOccupantZone.aidl
index 463517e..d11d9fa 100644
--- a/car-lib/src/android/car/ICarOccupantZone.aidl
+++ b/car-lib/src/android/car/ICarOccupantZone.aidl
@@ -29,7 +29,12 @@
CarOccupantZoneManager.OccupantZoneInfo getOccupantForAudioZoneId(in int audioZoneId);
int getDisplayType(in int displayId);
int getUserForOccupant(in int occupantZoneId);
+
+ // Returns the preferred zone id for the user passed as parameter. Users may be associated
+ // with more than one zone id. In that case, this method will return the first associated zone
+ // (which will be the preferred zone).
int getOccupantZoneIdForUserId(in int userId);
+
void registerCallback(in ICarOccupantZoneCallback callback);
void unregisterCallback(in ICarOccupantZoneCallback callback);
boolean assignProfileUserToOccupantZone(in int occupantZoneId, in int userId);
diff --git a/car-lib/src/android/car/ICarUserService.aidl b/car-lib/src/android/car/ICarUserService.aidl
index 5b58b54..a422003 100644
--- a/car-lib/src/android/car/ICarUserService.aidl
+++ b/car-lib/src/android/car/ICarUserService.aidl
@@ -33,14 +33,14 @@
void setUserSwitchUiCallback(in IResultReceiver callback);
void createUser(@nullable String name, String userType, int flags, int timeoutMs,
in AndroidFuture<UserCreationResult> receiver);
- UserRemovalResult removeUser(int userId);
+ // hasCallerRestrictions is used by public API: it restricts what non-admin can remove
+ UserRemovalResult removeUser(int userId, boolean hasCallerRestrictions);
List<UserInfo> getAllDrivers();
List<UserInfo> getPassengers(int driverId);
boolean startPassenger(int passengerId, int zoneId);
boolean stopPassenger(int passengerId);
void setLifecycleListenerForUid(in IResultReceiver listener);
void resetLifecycleListenerForUid();
- void getInitialUserInfo(int requestType, int timeoutMs, in IResultReceiver receiver);
UserIdentificationAssociationResponse getUserIdentificationAssociation(in int[] types);
void setUserIdentificationAssociation(int timeoutMs, in int[] types, in int[] values,
in AndroidFuture<UserIdentificationAssociationResponse> result);
diff --git a/car-lib/src/android/car/VehiclePropertyIds.java b/car-lib/src/android/car/VehiclePropertyIds.java
index 644ea1e..6e9d0aa 100644
--- a/car-lib/src/android/car/VehiclePropertyIds.java
+++ b/car-lib/src/android/car/VehiclePropertyIds.java
@@ -1060,6 +1060,66 @@
public static final int USER_IDENTIFICATION_ASSOCIATION = 299896587;
/**
+ * Property for VHAL to apply power policy.
+ *
+ * <p>Doesn't require permission because it's not exposed through
+ * {@link android.car.hardware.property.CarPropertyManager}.
+ *
+ * @hide
+ */
+ public static final int POWER_POLICY_REQ = 286265121;
+
+ /**
+ * Property for VHAL to set the default power policies per power status transition.
+ *
+ * <p>Doesn't require permission because it's not exposed through
+ * {@link android.car.hardware.property.CarPropertyManager}.
+ *
+ * @hide
+ */
+ public static final int POWER_POLICY_GROUP_REQ = 286265122;
+
+ /**
+ * Property to report a new current power policy to VHAL.
+ *
+ * <p>Doesn't require permission because it's not exposed through
+ * {@link android.car.hardware.property.CarPropertyManager}.
+ *
+ * @hide
+ */
+ public static final int CURRENT_POWER_POLICY = 286265123;
+
+ /**
+ * Property to report that car watchdog is alive.
+ *
+ * <p>Doesn't require permission because it's not exposed through
+ * {@link android.car.hardware.property.CarPropertyManager}.
+ *
+ * @hide
+ */
+ public static final int WATCHDOG_ALIVE = 290459441;
+
+ /**
+ * Property to report a process terminated by car watchdog.
+ *
+ * <p>Doesn't require permission because it's not exposed through
+ * {@link android.car.hardware.property.CarPropertyManager}.
+ *
+ * @hide
+ */
+ public static final int WATCHDOG_TERMINATED_PROCESS = 299896626;
+
+ /**
+ * Property to signal a heartbeat from VHAL.
+ *
+ * <p>Doesn't require permission because it's not exposed through
+ * {@link android.car.hardware.property.CarPropertyManager}.
+ *
+ * @hide
+ */
+ public static final int VHAL_HEARTBEAT = 290459443;
+
+ /**
* Gets a user-friendly representation of a property.
*/
public static String toString(int property) {
@@ -1338,6 +1398,18 @@
return "REMOVE_USER";
case USER_IDENTIFICATION_ASSOCIATION:
return "USER_IDENTIFICATION_ASSOCIATION";
+ case POWER_POLICY_REQ:
+ return "POWER_POLICY_REQ";
+ case POWER_POLICY_GROUP_REQ:
+ return "POWER_POLICY_GROUP_REQ";
+ case CURRENT_POWER_POLICY:
+ return "CURRENT_POWER_POLICY";
+ case WATCHDOG_ALIVE:
+ return "WATCHDOG_ALIVE";
+ case WATCHDOG_TERMINATED_PROCESS:
+ return "WATCHDOG_TERMINATED_PROCESS";
+ case VHAL_HEARTBEAT:
+ return "VHAL_HEARTBEAT";
default:
return "0x" + Integer.toHexString(property);
}
diff --git a/car-lib/src/android/car/app/CarActivityView.java b/car-lib/src/android/car/app/CarActivityView.java
index a73cf45..89ebf45 100644
--- a/car-lib/src/android/car/app/CarActivityView.java
+++ b/car-lib/src/android/car/app/CarActivityView.java
@@ -53,12 +53,7 @@
}
public CarActivityView(Context context, AttributeSet attrs, int defStyle) {
- this(context, attrs, defStyle, /*singleTaskInstance=*/ false);
- }
-
- public CarActivityView(
- Context context, AttributeSet attrs, int defStyle, boolean singleTaskInstance) {
- super(context, attrs, defStyle, singleTaskInstance, /*usePublicVirtualDisplay=*/ true);
+ super(context, attrs, defStyle, /*usePublicVirtualDisplay=*/ true);
super.setCallback(new CarActivityViewCallback());
}
diff --git a/car-lib/src/android/car/content/pm/CarPackageManager.java b/car-lib/src/android/car/content/pm/CarPackageManager.java
index 6a8c7fb..e66d851 100644
--- a/car-lib/src/android/car/content/pm/CarPackageManager.java
+++ b/car-lib/src/android/car/content/pm/CarPackageManager.java
@@ -41,9 +41,13 @@
* Flag for {@link #setAppBlockingPolicy(String, CarAppBlockingPolicy, int)}. When this
* flag is set, the call will be blocked until policy is set to system. This can take time
* and the flag cannot be used in main thread.
+ *
* @hide
+ * @deprecated see the {@link #setAppBlockingPolicy(String, CarAppBlockingPolicy, int)}
+ * documentation for alternative mechanism.
*/
@SystemApi
+ @Deprecated
public static final int FLAG_SET_POLICY_WAIT_FOR_CHANGE = 0x1;
/**
* Flag for {@link #setAppBlockingPolicy(String, CarAppBlockingPolicy, int)}. When this
@@ -51,18 +55,26 @@
* If none of {@link #FLAG_SET_POLICY_ADD} or {@link #FLAG_SET_POLICY_REMOVE} is set, existing
* policy is replaced. Note that policy per each package is always replaced and will not be
* added.
+ *
* @hide
+ * @deprecated see the {@link #setAppBlockingPolicy(String, CarAppBlockingPolicy, int)}
+ * documentation for alternative mechanism.
*/
@SystemApi
+ @Deprecated
public static final int FLAG_SET_POLICY_ADD = 0x2;
/**
* Flag for {@link #setAppBlockingPolicy(String, CarAppBlockingPolicy, int)}. When this
* flag is set, passed policy is removed from existing policy set from the current package.
* If none of {@link #FLAG_SET_POLICY_ADD} or {@link #FLAG_SET_POLICY_REMOVE} is set, existing
* policy is replaced.
+ *
* @hide
+ * @deprecated see the {@link #setAppBlockingPolicy(String, CarAppBlockingPolicy, int)}
+ * documentation for alternative mechanism.
*/
@SystemApi
+ @Deprecated
public static final int FLAG_SET_POLICY_REMOVE = 0x4;
/** @hide */
@@ -104,8 +116,18 @@
* @throws IllegalStateException If {@link #FLAG_SET_POLICY_WAIT_FOR_CHANGE} is set while
* called from main thread.
* @hide
+ * @deprecated It is no longer possible to change the app blocking policy at runtime. The first
+ * choice to mark an activity as safe for driving should always be to to include
+ * {@code <meta-data android:name="distractionOptimized" android:value="true"/>} in its
+ * manifest. All other activities will be blocked whenever driving restrictions are required. If
+ * an activity's manifest cannot be changed, then you can explicitly make an exception to its
+ * behavior using the build-time XML configuration. Allow or deny specific activities by
+ * changing the appropriate value ({@code R.string.activityAllowlist},
+ * {@code R.string.activityDenylist}) within the
+ * {@code packages/services/Car/service/res/values/config.xml} overlay.
*/
@SystemApi
+ @Deprecated
public void setAppBlockingPolicy(
String packageName, CarAppBlockingPolicy policy, @SetPolicyFlags int flags) {
if ((flags & FLAG_SET_POLICY_WAIT_FOR_CHANGE) != 0
diff --git a/car-lib/src/android/car/drivingstate/CarUxRestrictionsConfiguration.java b/car-lib/src/android/car/drivingstate/CarUxRestrictionsConfiguration.java
index fc367d0..36a0e66 100644
--- a/car-lib/src/android/car/drivingstate/CarUxRestrictionsConfiguration.java
+++ b/car-lib/src/android/car/drivingstate/CarUxRestrictionsConfiguration.java
@@ -79,7 +79,7 @@
// null means the port is not configured. It should apply to default display.
@Nullable
- private final Byte mPhysicalPort;
+ private final Integer mPhysicalPort;
private CarUxRestrictionsConfiguration(CarUxRestrictionsConfiguration.Builder builder) {
mPhysicalPort = builder.mPhysicalPort;
@@ -168,7 +168,7 @@
* to default display {@link android.view.Display#DEFAULT_DISPLAY}.
*/
@Nullable
- public Byte getPhysicalPort() {
+ public Integer getPhysicalPort() {
return mPhysicalPort;
}
@@ -239,7 +239,7 @@
if (mPhysicalPort == null) {
writer.name(JSON_NAME_PHYSICAL_PORT).nullValue();
} else {
- writer.name(JSON_NAME_PHYSICAL_PORT).value((int) mPhysicalPort.byteValue());
+ writer.name(JSON_NAME_PHYSICAL_PORT).value((int) mPhysicalPort);
}
writer.name(JSON_NAME_MAX_CONTENT_DEPTH).value(mMaxContentDepth);
writer.name(JSON_NAME_MAX_CUMULATIVE_CONTENT_ITEMS).value(
@@ -642,7 +642,7 @@
}
boolean nullPhysicalPort = in.readBoolean();
- byte physicalPort = in.readByte();
+ int physicalPort = in.readInt();
mPhysicalPort = nullPhysicalPort ? null : physicalPort;
mMaxContentDepth = in.readInt();
@@ -662,7 +662,7 @@
boolean nullPhysicalPort = mPhysicalPort == null;
dest.writeBoolean(nullPhysicalPort);
// When physical port is null, 0 should be skipped.
- dest.writeByte(nullPhysicalPort ? ((byte) 0) : mPhysicalPort.byteValue());
+ dest.writeInt(nullPhysicalPort ? (0) : mPhysicalPort);
dest.writeInt(mMaxContentDepth);
dest.writeInt(mMaxCumulativeContentItems);
@@ -675,18 +675,18 @@
public static final class Builder {
/**
- * Validates integer value for port is within the value range of a byte.
+ * Validates integer value for port is within the value range [0, 255].
*
* Throws exception if input value is outside the range.
*
- * @return {@code port} as a byte.
+ * @return {@code port} .
*/
- public static byte validatePort(int port) {
- if (Byte.MIN_VALUE <= port && port <= Byte.MAX_VALUE) {
- return (byte) port;
+ public static int validatePort(int port) {
+ if (0 <= port && port <= 255) {
+ return port;
}
throw new IllegalArgumentException(
- "Port value should be within the range of a byte. Input is " + port);
+ "Port value should be within the range [0, 255]. Input is " + port);
}
private static final int UX_RESTRICTIONS_UNKNOWN = -1;
@@ -694,7 +694,7 @@
/**
* {@code null} means port is not set.
*/
- private Byte mPhysicalPort;
+ private Integer mPhysicalPort;
private int mMaxContentDepth = UX_RESTRICTIONS_UNKNOWN;
private int mMaxCumulativeContentItems = UX_RESTRICTIONS_UNKNOWN;
@@ -714,7 +714,7 @@
* @param port Port that is connected to a display.
* See {@link android.view.DisplayAddress.Physical#getPort()}.
*/
- public Builder setPhysicalPort(byte port) {
+ public Builder setPhysicalPort(int port) {
mPhysicalPort = port;
return this;
}
diff --git a/car-lib/src/android/car/drivingstate/CarUxRestrictionsManager.java b/car-lib/src/android/car/drivingstate/CarUxRestrictionsManager.java
index 735e0e3..2ccf76e 100644
--- a/car-lib/src/android/car/drivingstate/CarUxRestrictionsManager.java
+++ b/car-lib/src/android/car/drivingstate/CarUxRestrictionsManager.java
@@ -384,7 +384,7 @@
return mDisplayId;
}
- // Dummy Callback to identify the requester of reportVirtualDisplayToPhysicalDisplay() and
+ // Placeholder Callback to identify the requester of reportVirtualDisplayToPhysicalDisplay() and
// to clean up the internal data when the requester is crashed.
private final IRemoteCallback mRequester = new IRemoteCallback.Stub() {
@Override
diff --git a/car-lib/src/android/car/input/CarInputHandlingService.java b/car-lib/src/android/car/input/CarInputHandlingService.java
index 0ea990f..ed9e798 100644
--- a/car-lib/src/android/car/input/CarInputHandlingService.java
+++ b/car-lib/src/android/car/input/CarInputHandlingService.java
@@ -48,9 +48,12 @@
* <p>Also, you will need to register this service in the following configuration file:
* {@code packages/services/Car/service/res/values/config.xml}
*
+ * @deprecated No longer needed after the new Car Input API was introduced (see
+ * {@link CarInputManager} for more details).
* @hide
*/
@SystemApi
+@Deprecated
public abstract class CarInputHandlingService extends Service {
private static final String TAG = CarLibLog.TAG_INPUT;
private static final boolean DBG = false;
diff --git a/car-lib/src/android/car/input/CarInputManager.java b/car-lib/src/android/car/input/CarInputManager.java
index dbbf18c..84f582f 100644
--- a/car-lib/src/android/car/input/CarInputManager.java
+++ b/car-lib/src/android/car/input/CarInputManager.java
@@ -16,13 +16,17 @@
package android.car.input;
+import static android.car.CarOccupantZoneManager.DisplayTypeEnum;
+
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.RequiresPermission;
import android.car.Car;
import android.car.CarManagerBase;
+import android.car.CarOccupantZoneManager;
import android.os.IBinder;
import android.os.RemoteException;
+import android.util.Slog;
import android.util.SparseArray;
import android.view.KeyEvent;
@@ -42,49 +46,60 @@
*/
public final class CarInputManager extends CarManagerBase {
+ private static final String TAG = CarInputManager.class.getSimpleName();
+
+ private static final boolean DEBUG = false;
+
/**
* Callback for capturing input events.
+ * <p>
+ * Events (key, rotary and custom input events) are associated with display types.
+ * Display types are defined in {@link android.car.CarOccupantZoneManager}. This manager only
+ * accepts the driver display types. Currently it accepts driver's displays only (
+ * ({@link CarOccupantZoneManager#DISPLAY_TYPE_MAIN} and
+ * {@link CarOccupantZoneManager#DISPLAY_TYPE_INSTRUMENT_CLUSTER}).
*/
public interface CarInputCaptureCallback {
/**
* Key events were captured.
+ *
+ * @param targetDisplayType the display type associated with the events passed as parameter
+ * @param keyEvents the key events to process
*/
- void onKeyEvents(int targetDisplayId, @NonNull List<KeyEvent> keyEvents);
+ default void onKeyEvents(@DisplayTypeEnum int targetDisplayType,
+ @NonNull List<KeyEvent> keyEvents) {}
/**
* Rotary events were captured.
+ *
+ * @param targetDisplayType the display type associated with the events passed as parameter
+ * @param events the rotary events to process
*/
- void onRotaryEvents(int targetDisplayId, @NonNull List<RotaryEvent> events);
+ default void onRotaryEvents(@DisplayTypeEnum int targetDisplayType,
+ @NonNull List<RotaryEvent> events) {}
/**
* Capture state for the display has changed due to other client making requests or
* releasing capture. Client should check {@code activeInputTypes} for which input types
* are currently captured.
+ *
+ * @param targetDisplayType the display type associated with the events passed as parameter
+ * @param activeInputTypes the input types to watch
*/
- void onCaptureStateChanged(int targetDisplayId,
- @NonNull @InputTypeEnum int[] activeInputTypes);
+ default void onCaptureStateChanged(@DisplayTypeEnum int targetDisplayType,
+ @NonNull @InputTypeEnum int[] activeInputTypes) {}
+
+ /**
+ * Custom input events were captured.
+ *
+ * @param targetDisplayType the display type associated with the events passed as parameter
+ * @param events the custom input events to process
+ */
+ default void onCustomInputEvents(@DisplayTypeEnum int targetDisplayType,
+ @NonNull List<CustomInputEvent> events) {}
}
/**
- * Represents main display for the system.
- */
- public static final int TARGET_DISPLAY_TYPE_MAIN = 0;
-
- /**
- * Represents cluster display.
- */
- public static final int TARGET_DISPLAY_TYPE_CLUSTER = 1;
-
- /** @hide */
- @Retention(RetentionPolicy.SOURCE)
- @IntDef(prefix = "TARGET_DISPLAY_TYPE_", value = {
- TARGET_DISPLAY_TYPE_MAIN,
- TARGET_DISPLAY_TYPE_CLUSTER,
- })
- @Target({ElementType.TYPE_USE})
- public @interface TargetDisplayTypeEnum {}
-
- /**
* Client will wait for grant if the request is failing due to higher priority client.
*/
public static final int CAPTURE_REQ_FLAGS_ALLOW_DELAYED_GRANT = 0x1;
@@ -137,15 +152,20 @@
public static final int INPUT_TYPE_DPAD_KEYS = 100;
/**
- * This is for all KEYCODE_NAVIGATE_* keys.
+ * This is for all {@code KeyEvent#KEYCODE_NAVIGATE_*} keys.
*/
public static final int INPUT_TYPE_NAVIGATE_KEYS = 101;
/**
- * This is for all KEYCODE_SYSTEM_NAVIGATE_* keys.
+ * This is for all {@code KeyEvent#KEYCODE_SYSTEM_NAVIGATE_*} keys.
*/
public static final int INPUT_TYPE_SYSTEM_NAVIGATE_KEYS = 102;
+ /**
+ * This is for {@code HW_CUSTOM_INPUT} events.
+ */
+ public static final int INPUT_TYPE_CUSTOM_INPUT_EVENT = 200;
+
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef(prefix = "INPUT_TYPE_", value = {
@@ -154,7 +174,8 @@
INPUT_TYPE_ROTARY_VOLUME,
INPUT_TYPE_DPAD_KEYS,
INPUT_TYPE_NAVIGATE_KEYS,
- INPUT_TYPE_SYSTEM_NAVIGATE_KEYS
+ INPUT_TYPE_SYSTEM_NAVIGATE_KEYS,
+ INPUT_TYPE_CUSTOM_INPUT_EVENT,
})
@Target({ElementType.TYPE_USE})
public @interface InputTypeEnum {}
@@ -222,11 +243,15 @@
* <p> After {@link #INPUT_CAPTURE_RESPONSE_DELAYED} is returned, no input types are captured
* until the client receives a {@link CarInputCaptureCallback#onCaptureStateChanged(int, int[])}
* call with valid input types.
+ *
+ * <p> The targetDisplayType parameter must represent a driver display type (
+ * {@link CarOccupantZoneManager#DISPLAY_TYPE_MAIN} or
+ * {@link CarOccupantZoneManager#DISPLAY_TYPE_INSTRUMENT_CLUSTER}.
*/
@RequiresPermission(android.Manifest.permission.MONITOR_INPUT)
@InputCaptureResponseEnum
public int requestInputEventCapture(@NonNull CarInputCaptureCallback callback,
- @TargetDisplayTypeEnum int targetDisplayType,
+ @DisplayTypeEnum int targetDisplayType,
@NonNull @InputTypeEnum int[] inputTypes,
@CaptureRequestFlags int requestFlags) {
synchronized (mLock) {
@@ -243,7 +268,7 @@
/**
* Stops capturing of given display.
*/
- public void releaseInputEventCapture(@TargetDisplayTypeEnum int targetDisplayType) {
+ public void releaseInputEventCapture(@DisplayTypeEnum int targetDisplayType) {
CarInputCaptureCallback callback;
synchronized (mLock) {
callback = mCarInputCaptureCallbacks.removeReturnOld(targetDisplayType);
@@ -258,6 +283,25 @@
}
}
+ /**
+ * Injects the {@link KeyEvent} passed as parameter against Car Input API.
+ * <p>
+ * The event parameter display id will be overridden accordingly to the display type also passed
+ * as parameter.
+ *
+ * @param event the event to inject
+ * @param targetDisplayType the display type associated with the event
+ * @throws RemoteException in case of failure when invoking car input service
+ */
+ @RequiresPermission(android.Manifest.permission.INJECT_EVENTS)
+ public void injectKeyEvent(KeyEvent event, @DisplayTypeEnum int targetDisplayType) {
+ try {
+ mService.injectKeyEvent(event, targetDisplayType);
+ } catch (RemoteException e) {
+ e.rethrowFromSystemServer();
+ }
+ }
+
@Override
protected void onCarDisconnected() {
synchronized (mLock) {
@@ -265,23 +309,24 @@
}
}
- private CarInputCaptureCallback getCallback(int targetDisplayType) {
+ private CarInputCaptureCallback getCallback(@DisplayTypeEnum int targetDisplayType) {
synchronized (mLock) {
return mCarInputCaptureCallbacks.get(targetDisplayType);
}
}
- private void dispatchKeyEvents(int targetDisplayType, List<KeyEvent> keyEvents) {
+ private void dispatchKeyEvents(@DisplayTypeEnum int targetDisplayType,
+ List<KeyEvent> keyEvents) {
getEventHandler().post(() -> {
CarInputCaptureCallback callback = getCallback(targetDisplayType);
if (callback != null) {
callback.onKeyEvents(targetDisplayType, keyEvents);
}
});
-
}
- private void dispatchRotaryEvents(int targetDisplayType, List<RotaryEvent> events) {
+ private void dispatchRotaryEvents(@DisplayTypeEnum int targetDisplayType,
+ List<RotaryEvent> events) {
getEventHandler().post(() -> {
CarInputCaptureCallback callback = getCallback(targetDisplayType);
if (callback != null) {
@@ -290,7 +335,8 @@
});
}
- private void dispatchOnCaptureStateChanged(int targetDisplayType, int[] activeInputTypes) {
+ private void dispatchOnCaptureStateChanged(@DisplayTypeEnum int targetDisplayType,
+ int[] activeInputTypes) {
getEventHandler().post(() -> {
CarInputCaptureCallback callback = getCallback(targetDisplayType);
if (callback != null) {
@@ -299,6 +345,19 @@
});
}
+ private void dispatchCustomInputEvents(@DisplayTypeEnum int targetDisplayType,
+ List<CustomInputEvent> events) {
+ getEventHandler().post(() -> {
+ CarInputCaptureCallback callback = getCallback(targetDisplayType);
+ if (DEBUG) {
+ Slog.d(TAG, "Firing events " + events + " on callback " + callback);
+ }
+ if (callback != null) {
+ callback.onCustomInputEvents(targetDisplayType, events);
+ }
+ });
+ }
+
private static final class ICarInputCallbackImpl extends ICarInputCallback.Stub {
private final WeakReference<CarInputManager> mManager;
@@ -308,7 +367,8 @@
}
@Override
- public void onKeyEvents(int targetDisplayType, List<KeyEvent> keyEvents) {
+ public void onKeyEvents(@DisplayTypeEnum int targetDisplayType,
+ @NonNull List<KeyEvent> keyEvents) {
CarInputManager manager = mManager.get();
if (manager == null) {
return;
@@ -317,7 +377,8 @@
}
@Override
- public void onRotaryEvents(int targetDisplayType, List<RotaryEvent> events) {
+ public void onRotaryEvents(@DisplayTypeEnum int targetDisplayType,
+ @NonNull List<RotaryEvent> events) {
CarInputManager manager = mManager.get();
if (manager == null) {
return;
@@ -326,12 +387,23 @@
}
@Override
- public void onCaptureStateChanged(int targetDisplayType, int[] activeInputTypes) {
+ public void onCaptureStateChanged(@DisplayTypeEnum int targetDisplayType,
+ @NonNull @InputTypeEnum int[] activeInputTypes) {
CarInputManager manager = mManager.get();
if (manager == null) {
return;
}
manager.dispatchOnCaptureStateChanged(targetDisplayType, activeInputTypes);
}
+
+ @Override
+ public void onCustomInputEvents(@DisplayTypeEnum int targetDisplayType,
+ @NonNull List<CustomInputEvent> events) {
+ CarInputManager manager = mManager.get();
+ if (manager == null) {
+ return;
+ }
+ manager.dispatchCustomInputEvents(targetDisplayType, events);
+ }
}
}
diff --git a/car-lib/src/android/car/settings/SpeedBumpConfiguration.aidl b/car-lib/src/android/car/input/CustomInputEvent.aidl
similarity index 81%
rename from car-lib/src/android/car/settings/SpeedBumpConfiguration.aidl
rename to car-lib/src/android/car/input/CustomInputEvent.aidl
index 084fca0..01bb4ec 100644
--- a/car-lib/src/android/car/settings/SpeedBumpConfiguration.aidl
+++ b/car-lib/src/android/car/input/CustomInputEvent.aidl
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2020 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.
@@ -13,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+package android.car.input;
-package android.car.settings;
-
-parcelable SpeedBumpConfiguration;
+parcelable CustomInputEvent;
diff --git a/car-lib/src/android/car/input/CustomInputEvent.java b/car-lib/src/android/car/input/CustomInputEvent.java
new file mode 100644
index 0000000..129d8fa
--- /dev/null
+++ b/car-lib/src/android/car/input/CustomInputEvent.java
@@ -0,0 +1,316 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.car.input;
+
+import android.annotation.NonNull;
+import android.os.Parcel;
+import android.os.Parcelable;
+
+import com.android.internal.util.DataClass;
+
+/**
+ * {@code Parcelable} containing custom input event.
+ *
+ * <p>A custom input event representing HW_CUSTOM_INPUT event defined in
+ * {@code hardware/interfaces/automotive/vehicle/2.0/types.hal}.
+ *
+ * @hide
+ */
+// Note: When re-generating code, make sure inputCodeToString raises an exception in case of invalid
+// input.
+// TODO(b/12219669): Check with INPUT_CODE_Fn constants should move to
+// android/car/Constants/CommonConstants.java. If keeping these constants, than add unit tests.
+@DataClass(
+ genEqualsHashCode = true,
+ genAidl = true)
+public final class CustomInputEvent implements Parcelable {
+
+ // The following constant values must be in sync with the ones defined in
+ // {@code hardware/interfaces/automotive/vehicle/2.0/types.hal}
+ public static final int INPUT_CODE_F1 = 1001;
+ public static final int INPUT_CODE_F2 = 1002;
+ public static final int INPUT_CODE_F3 = 1003;
+ public static final int INPUT_CODE_F4 = 1004;
+ public static final int INPUT_CODE_F5 = 1005;
+ public static final int INPUT_CODE_F6 = 1006;
+ public static final int INPUT_CODE_F7 = 1007;
+ public static final int INPUT_CODE_F8 = 1008;
+ public static final int INPUT_CODE_F9 = 1009;
+ public static final int INPUT_CODE_F10 = 1010;
+
+ @InputCode
+ private final int mInputCode;
+
+ private final int mTargetDisplayType;
+ private final int mRepeatCounter;
+
+
+ // Code below generated by codegen v1.0.15.
+ //
+ // DO NOT MODIFY!
+ // CHECKSTYLE:OFF Generated code
+ //
+ // To regenerate run:
+ // $ codegen --to-string $ANDROID_BUILD_TOP/packages/services/Car/car-lib/src/android/car
+ // /input/CustomInputEvent.java
+ //
+ // To exclude the generated code from IntelliJ auto-formatting enable (one-time):
+ // Settings > Editor > Code Style > Formatter Control
+ //@formatter:off
+
+
+ @android.annotation.IntDef(prefix = "INPUT_CODE_", value = {
+ INPUT_CODE_F1,
+ INPUT_CODE_F2,
+ INPUT_CODE_F3,
+ INPUT_CODE_F4,
+ INPUT_CODE_F5,
+ INPUT_CODE_F6,
+ INPUT_CODE_F7,
+ INPUT_CODE_F8,
+ INPUT_CODE_F9,
+ INPUT_CODE_F10
+ })
+ @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.SOURCE)
+ @DataClass.Generated.Member
+ public @interface InputCode {
+ }
+
+ @DataClass.Generated.Member
+ public static String inputCodeToString(@InputCode int value) {
+ switch (value) {
+ case INPUT_CODE_F1:
+ return "INPUT_CODE_F1";
+ case INPUT_CODE_F2:
+ return "INPUT_CODE_F2";
+ case INPUT_CODE_F3:
+ return "INPUT_CODE_F3";
+ case INPUT_CODE_F4:
+ return "INPUT_CODE_F4";
+ case INPUT_CODE_F5:
+ return "INPUT_CODE_F5";
+ case INPUT_CODE_F6:
+ return "INPUT_CODE_F6";
+ case INPUT_CODE_F7:
+ return "INPUT_CODE_F7";
+ case INPUT_CODE_F8:
+ return "INPUT_CODE_F8";
+ case INPUT_CODE_F9:
+ return "INPUT_CODE_F9";
+ case INPUT_CODE_F10:
+ return "INPUT_CODE_F10";
+ default:
+ throw new java.lang.IllegalArgumentException(
+ "Invalid inputCode {" + value + "}");
+ }
+ }
+
+ @DataClass.Generated.Member
+ public CustomInputEvent(
+ @InputCode int inputCode,
+ int targetDisplayType,
+ int repeatCounter) {
+ this.mInputCode = inputCode;
+
+ if (!(mInputCode == INPUT_CODE_F1)
+ && !(mInputCode == INPUT_CODE_F2)
+ && !(mInputCode == INPUT_CODE_F3)
+ && !(mInputCode == INPUT_CODE_F4)
+ && !(mInputCode == INPUT_CODE_F5)
+ && !(mInputCode == INPUT_CODE_F6)
+ && !(mInputCode == INPUT_CODE_F7)
+ && !(mInputCode == INPUT_CODE_F8)
+ && !(mInputCode == INPUT_CODE_F9)
+ && !(mInputCode == INPUT_CODE_F10)) {
+ throw new java.lang.IllegalArgumentException(
+ "inputCode was " + mInputCode + " but must be one of: "
+ + "INPUT_CODE_F1(" + INPUT_CODE_F1 + "), "
+ + "INPUT_CODE_F2(" + INPUT_CODE_F2 + "), "
+ + "INPUT_CODE_F3(" + INPUT_CODE_F3 + "), "
+ + "INPUT_CODE_F4(" + INPUT_CODE_F4 + "), "
+ + "INPUT_CODE_F5(" + INPUT_CODE_F5 + "), "
+ + "INPUT_CODE_F6(" + INPUT_CODE_F6 + "), "
+ + "INPUT_CODE_F7(" + INPUT_CODE_F7 + "), "
+ + "INPUT_CODE_F8(" + INPUT_CODE_F8 + "), "
+ + "INPUT_CODE_F9(" + INPUT_CODE_F9 + "), "
+ + "INPUT_CODE_F10(" + INPUT_CODE_F10 + ")");
+ }
+
+ this.mTargetDisplayType = targetDisplayType;
+ this.mRepeatCounter = repeatCounter;
+
+ // onConstructed(); // You can define this method to get a callback
+ }
+
+ @DataClass.Generated.Member
+ public @InputCode
+ int getInputCode() {
+ return mInputCode;
+ }
+
+ @DataClass.Generated.Member
+ public int getTargetDisplayType() {
+ return mTargetDisplayType;
+ }
+
+ @DataClass.Generated.Member
+ public int getRepeatCounter() {
+ return mRepeatCounter;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public String toString() {
+ // You can override field toString logic by defining methods like:
+ // String fieldNameToString() { ... }
+
+ return "CustomInputEvent { " +
+ "inputCode = " + inputCodeToString(mInputCode) + ", " +
+ "targetDisplayType = " + mTargetDisplayType + ", " +
+ "repeatCounter = " + mRepeatCounter +
+ " }";
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public boolean equals(@android.annotation.Nullable Object o) {
+ // You can override field equality logic by defining either of the methods like:
+ // boolean fieldNameEquals(CustomInputEvent other) { ... }
+ // boolean fieldNameEquals(FieldType otherValue) { ... }
+
+ if (this == o) return true;
+ if (o == null || getClass() != o.getClass()) return false;
+ @SuppressWarnings("unchecked")
+ CustomInputEvent that = (CustomInputEvent) o;
+ //noinspection PointlessBooleanExpression
+ return true
+ && mInputCode == that.mInputCode
+ && mTargetDisplayType == that.mTargetDisplayType
+ && mRepeatCounter == that.mRepeatCounter;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public int hashCode() {
+ // You can override field hashCode logic by defining methods like:
+ // int fieldNameHashCode() { ... }
+
+ int _hash = 1;
+ _hash = 31 * _hash + mInputCode;
+ _hash = 31 * _hash + mTargetDisplayType;
+ _hash = 31 * _hash + mRepeatCounter;
+ return _hash;
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public void writeToParcel(@NonNull Parcel dest, int flags) {
+ // You can override field parcelling by defining methods like:
+ // void parcelFieldName(Parcel dest, int flags) { ... }
+
+ dest.writeInt(mInputCode);
+ dest.writeInt(mTargetDisplayType);
+ dest.writeInt(mRepeatCounter);
+ }
+
+ @Override
+ @DataClass.Generated.Member
+ public int describeContents() {
+ return 0;
+ }
+
+ /** @hide */
+ @SuppressWarnings({"unchecked", "RedundantCast"})
+ @DataClass.Generated.Member
+ /* package-private */ CustomInputEvent(@NonNull Parcel in) {
+ // You can override field unparcelling by defining methods like:
+ // static FieldType unparcelFieldName(Parcel in) { ... }
+
+ int inputCode = in.readInt();
+ int targetDisplayType = in.readInt();
+ int repeatCounter = in.readInt();
+
+ this.mInputCode = inputCode;
+
+ if (!(mInputCode == INPUT_CODE_F1)
+ && !(mInputCode == INPUT_CODE_F2)
+ && !(mInputCode == INPUT_CODE_F3)
+ && !(mInputCode == INPUT_CODE_F4)
+ && !(mInputCode == INPUT_CODE_F5)
+ && !(mInputCode == INPUT_CODE_F6)
+ && !(mInputCode == INPUT_CODE_F7)
+ && !(mInputCode == INPUT_CODE_F8)
+ && !(mInputCode == INPUT_CODE_F9)
+ && !(mInputCode == INPUT_CODE_F10)) {
+ throw new java.lang.IllegalArgumentException(
+ "inputCode was " + mInputCode + " but must be one of: "
+ + "INPUT_CODE_F1(" + INPUT_CODE_F1 + "), "
+ + "INPUT_CODE_F2(" + INPUT_CODE_F2 + "), "
+ + "INPUT_CODE_F3(" + INPUT_CODE_F3 + "), "
+ + "INPUT_CODE_F4(" + INPUT_CODE_F4 + "), "
+ + "INPUT_CODE_F5(" + INPUT_CODE_F5 + "), "
+ + "INPUT_CODE_F6(" + INPUT_CODE_F6 + "), "
+ + "INPUT_CODE_F7(" + INPUT_CODE_F7 + "), "
+ + "INPUT_CODE_F8(" + INPUT_CODE_F8 + "), "
+ + "INPUT_CODE_F9(" + INPUT_CODE_F9 + "), "
+ + "INPUT_CODE_F10(" + INPUT_CODE_F10 + ")");
+ }
+
+ this.mTargetDisplayType = targetDisplayType;
+ this.mRepeatCounter = repeatCounter;
+
+ // onConstructed(); // You can define this method to get a callback
+ }
+
+ @DataClass.Generated.Member
+ public static final @NonNull
+ Parcelable.Creator<CustomInputEvent> CREATOR
+ = new Parcelable.Creator<CustomInputEvent>() {
+ @Override
+ public CustomInputEvent[] newArray(int size) {
+ return new CustomInputEvent[size];
+ }
+
+ @Override
+ public CustomInputEvent createFromParcel(@NonNull Parcel in) {
+ return new CustomInputEvent(in);
+ }
+ };
+
+ @DataClass.Generated(
+ time = 1600715769152L,
+ codegenVersion = "1.0.15",
+ sourceFile = "packages/services/Car/car-lib/src/android/car/input/CustomInputEvent"
+ + ".java",
+ inputSignatures = "public static final int INPUT_CODE_F1\npublic static final int "
+ + "INPUT_CODE_F2\npublic static final int INPUT_CODE_F3\npublic static final"
+ + " int INPUT_CODE_F4\npublic static final int INPUT_CODE_F5\npublic static"
+ + " final int INPUT_CODE_F6\npublic static final int INPUT_CODE_F7\npublic "
+ + "static final int INPUT_CODE_F8\npublic static final int "
+ + "INPUT_CODE_F9\npublic static final int INPUT_CODE_F10\nprivate final "
+ + "@android.car.input.CustomInputEvent.InputCode int mInputCode\nprivate "
+ + "final int mTargetDisplayType\nprivate final int mRepeatCounter\nclass "
+ + "CustomInputEvent extends java.lang.Object implements [android.os"
+ + ".Parcelable]\n@com.android.internal.util.DataClass(genEqualsHashCode=true,"
+ + " genAidl=true)")
+ @Deprecated
+ private void __metadata() {
+ }
+
+ //@formatter:on
+ // End of generated code
+}
diff --git a/car-lib/src/android/car/input/ICarInput.aidl b/car-lib/src/android/car/input/ICarInput.aidl
index 94c7022..483b0a5 100644
--- a/car-lib/src/android/car/input/ICarInput.aidl
+++ b/car-lib/src/android/car/input/ICarInput.aidl
@@ -29,4 +29,6 @@
in int[] inputTypes, int requestFlags) = 1;
/** See {@code CarInputManager.requestInputEventCapture(...)} */
void releaseInputEventCapture(in ICarInputCallback callback, int targetDisplayType) = 2;
+ /** See {@code CarInputManager.injectKeyEvent(...)} */
+ void injectKeyEvent(in KeyEvent event, int targetDisplayType) = 3;
}
diff --git a/car-lib/src/android/car/input/ICarInputCallback.aidl b/car-lib/src/android/car/input/ICarInputCallback.aidl
index 218ff2c..afe5cec 100644
--- a/car-lib/src/android/car/input/ICarInputCallback.aidl
+++ b/car-lib/src/android/car/input/ICarInputCallback.aidl
@@ -15,6 +15,7 @@
*/
package android.car.input;
+import android.car.input.CustomInputEvent;
import android.car.input.RotaryEvent;
import android.view.KeyEvent;
@@ -27,4 +28,5 @@
void onKeyEvents(int targetDisplayType, in List<KeyEvent> keyEvents) = 1;
void onRotaryEvents(int targetDisplayType, in List<RotaryEvent> events) = 2;
void onCaptureStateChanged(int targetDisplayType, in int[] activeInputTypes) = 3;
+ void onCustomInputEvents(int targetDisplayType, in List<CustomInputEvent> events) = 4;
}
diff --git a/car-lib/src/android/car/navigation/navigation_state.proto b/car-lib/src/android/car/navigation/navigation_state.proto
index 6c4f2bd..b0c9f71 100644
--- a/car-lib/src/android/car/navigation/navigation_state.proto
+++ b/car-lib/src/android/car/navigation/navigation_state.proto
@@ -491,6 +491,9 @@
// instance, the beginning of these instructions must be displayed,
// cutting as much from the end as needed to fit.
Cue cue = 5;
+
+ // Indicates whether this step is about to be executed.
+ bool is_imminent = 6;
}
// An object representing a latitude/longitude pair. This is expressed as a pair
diff --git a/car-lib/src/android/car/settings/CarConfigurationManager.java b/car-lib/src/android/car/settings/CarConfigurationManager.java
deleted file mode 100644
index 45b8767..0000000
--- a/car-lib/src/android/car/settings/CarConfigurationManager.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.car.settings;
-
-import android.car.Car;
-import android.car.CarManagerBase;
-import android.os.IBinder;
-import android.os.RemoteException;
-
-/**
- * Manager that exposes car configuration values that are stored on the system.
- *
- * @deprecated The {@code CarConfigurationManager} is no longer supported and will be removed.
- */
-@Deprecated
-public class CarConfigurationManager extends CarManagerBase {
- private static final String TAG = "CarConfigurationManager";
-
- private final ICarConfigurationManager mConfigurationService;
-
- /** @hide */
- public CarConfigurationManager(Car car, IBinder service) {
- super(car);
- mConfigurationService = ICarConfigurationManager.Stub.asInterface(service);
- }
-
- /**
- * Returns a configuration for Speed Bump that will determine when it kicks in.
- *
- * @return A {@link SpeedBumpConfiguration} that contains the configuration values.
- */
- public SpeedBumpConfiguration getSpeedBumpConfiguration() {
- try {
- return mConfigurationService.getSpeedBumpConfiguration();
- } catch (RemoteException e) {
- return handleRemoteExceptionFromCarService(e, null);
- }
- }
-
- /** @hide */
- @Override
- public void onCarDisconnected() {
- // Nothing to release.
- }
-}
diff --git a/car-lib/src/android/car/settings/ICarConfigurationManager.aidl b/car-lib/src/android/car/settings/ICarConfigurationManager.aidl
deleted file mode 100644
index ea53998..0000000
--- a/car-lib/src/android/car/settings/ICarConfigurationManager.aidl
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.car.settings;
-
-import android.car.settings.SpeedBumpConfiguration;
-
-/**
- * Binder interface for {@link android.car.settings.CarConfigurationManager}.
- *
- * @hide
- * @deprecated Configuration of speed bump is no longer a supported feature.
- */
-interface ICarConfigurationManager {
- /**
- * Returns the configuration for SpeedBump if it exists. If it does not, then a default
- * configuration will be returned.
- */
- SpeedBumpConfiguration getSpeedBumpConfiguration() = 0;
-}
diff --git a/car-lib/src/android/car/settings/SpeedBumpConfiguration.java b/car-lib/src/android/car/settings/SpeedBumpConfiguration.java
deleted file mode 100644
index ee090f5..0000000
--- a/car-lib/src/android/car/settings/SpeedBumpConfiguration.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (C) 2018 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package android.car.settings;
-
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import java.util.Objects;
-
-/**
- * A configuration struct that holds information for tweaking SpeedBump settings.
- *
- * @see androidx.car.moderator.SpeedBumpView
- * @deprecated Speed bump configuration is no longer a support feature.
- */
-@Deprecated
-public final class SpeedBumpConfiguration implements Parcelable {
- private final double mAcquiredPermitsPerSecond;
- private final double mMaxPermitPool;
- private final long mPermitFillDelay;
-
- public SpeedBumpConfiguration(double permitsPerSecond, double maxPermitPool,
- long permitFillDelay) {
- mAcquiredPermitsPerSecond = permitsPerSecond;
- mMaxPermitPool = maxPermitPool;
- mPermitFillDelay = permitFillDelay;
- }
-
- /**
- * Returns the number of permitted actions that are acquired each second that the user has not
- * interacted with the {@code SpeedBumpView}.
- */
- public double getAcquiredPermitsPerSecond() {
- return mAcquiredPermitsPerSecond;
- }
-
- /**
- * Returns the maximum number of permits that can be acquired when the user is idling.
- */
- public double getMaxPermitPool() {
- return mMaxPermitPool;
- }
-
- /**
- * Returns the delay time before when the permit pool has been depleted and when it begins to
- * refill.
- */
- public long getPermitFillDelay() {
- return mPermitFillDelay;
- }
-
- @Override
- public String toString() {
- return String.format(
- "[acquired_permits_per_second: %f, max_permit_pool: %f, permit_fill_delay: %d]",
- mAcquiredPermitsPerSecond,
- mMaxPermitPool,
- mPermitFillDelay);
- }
-
- @Override
- public boolean equals(Object object) {
- if (object == this) {
- return true;
- }
-
- if (!(object instanceof SpeedBumpConfiguration)) {
- return false;
- }
-
- SpeedBumpConfiguration other = (SpeedBumpConfiguration) object;
- return mAcquiredPermitsPerSecond == other.getAcquiredPermitsPerSecond()
- && mMaxPermitPool == other.getMaxPermitPool()
- && mPermitFillDelay == other.getPermitFillDelay();
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(mAcquiredPermitsPerSecond, mMaxPermitPool, mPermitFillDelay);
- }
-
- @Override
- public void writeToParcel(Parcel desk, int flags) {
- desk.writeDouble(mAcquiredPermitsPerSecond);
- desk.writeDouble(mMaxPermitPool);
- desk.writeLong(mPermitFillDelay);
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- private SpeedBumpConfiguration(Parcel in) {
- mAcquiredPermitsPerSecond = in.readDouble();
- mMaxPermitPool = in.readDouble();
- mPermitFillDelay = in.readLong();
- }
-
- public static final Parcelable.Creator<SpeedBumpConfiguration> CREATOR =
- new Parcelable.Creator<SpeedBumpConfiguration>() {
- public SpeedBumpConfiguration createFromParcel(Parcel in) {
- return new SpeedBumpConfiguration(in);
- }
-
- public SpeedBumpConfiguration[] newArray(int size) {
- return new SpeedBumpConfiguration[size];
- }
- };
-}
diff --git a/car-lib/src/android/car/trust/CarTrustAgentEnrollmentManager.java b/car-lib/src/android/car/trust/CarTrustAgentEnrollmentManager.java
deleted file mode 100644
index c4e1989..0000000
--- a/car-lib/src/android/car/trust/CarTrustAgentEnrollmentManager.java
+++ /dev/null
@@ -1,735 +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 android.car.trust;
-
-import static android.car.Car.PERMISSION_CAR_ENROLL_TRUST;
-
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.annotation.RequiresPermission;
-import android.annotation.SystemApi;
-import android.bluetooth.BluetoothDevice;
-import android.car.Car;
-import android.car.CarManagerBase;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.Looper;
-import android.os.Message;
-import android.os.RemoteException;
-import android.util.Log;
-
-import com.android.internal.annotations.GuardedBy;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.ref.WeakReference;
-import java.util.Collections;
-import java.util.List;
-
-
-/**
- * APIs to help enroll a remote device as a trusted device that can be used to authenticate a user
- * in the head unit.
- * <p>
- * The call sequence to add a new trusted device from the client should be as follows:
- * <ol>
- * <li> setEnrollmentCallback()
- * <li> setBleCallback(bleCallback)
- * <li> startEnrollmentAdvertising()
- * <li> wait for onEnrollmentAdvertisingStarted() or
- * <li> wait for onBleEnrollmentDeviceConnected() and check if the device connected is the right
- * one.
- * <li> initiateEnrollmentHandshake()
- * <li> wait for onAuthStringAvailable() to get the pairing code to display to the user
- * <li> enrollmentHandshakeAccepted() after user confirms the pairing code
- * <li> wait for onEscrowTokenAdded()
- * <li> Authenticate user's credentials by showing the lock screen
- * <li> activateToken()
- * <li> wait for onEscrowTokenActiveStateChanged() to add the device as a trusted device and show
- * in the list
- * </ol>
- *
- * @hide
- *
- * @deprecated Enrollment of a trusted device is no longer a supported feature and these APIs will
- * be removed in the next Android release.
- */
-@Deprecated
-@SystemApi
-public final class CarTrustAgentEnrollmentManager extends CarManagerBase {
- private static final String TAG = "CarTrustEnrollMgr";
- private static final String KEY_HANDLE = "handle";
- private static final String KEY_ACTIVE = "active";
- private static final int MSG_ENROLL_ADVERTISING_STARTED = 0;
- private static final int MSG_ENROLL_ADVERTISING_FAILED = 1;
- private static final int MSG_ENROLL_DEVICE_CONNECTED = 2;
- private static final int MSG_ENROLL_DEVICE_DISCONNECTED = 3;
- private static final int MSG_ENROLL_HANDSHAKE_FAILURE = 4;
- private static final int MSG_ENROLL_AUTH_STRING_AVAILABLE = 5;
- private static final int MSG_ENROLL_TOKEN_ADDED = 6;
- private static final int MSG_ENROLL_TOKEN_STATE_CHANGED = 7;
- private static final int MSG_ENROLL_TOKEN_REMOVED = 8;
-
- private final ICarTrustAgentEnrollment mEnrollmentService;
- private Object mListenerLock = new Object();
- @GuardedBy("mListenerLock")
- private CarTrustAgentEnrollmentCallback mEnrollmentCallback;
- @GuardedBy("mListenerLock")
- private CarTrustAgentBleCallback mBleCallback;
- @GuardedBy("mListenerLock")
- private final ListenerToEnrollmentService mListenerToEnrollmentService =
- new ListenerToEnrollmentService(this);
- private final ListenerToBleService mListenerToBleService = new ListenerToBleService(this);
- private final EventCallbackHandler mEventCallbackHandler;
-
- /**
- * Enrollment Handshake failed.
- */
- public static final int ENROLLMENT_HANDSHAKE_FAILURE = 1;
- /**
- * Enrollment of a new device is not allowed. This happens when either the whole feature is
- * disabled or just the enrollment is disabled. Useful when feature needs to be disabled
- * in a lost/stolen phone scenario.
- */
- public static final int ENROLLMENT_NOT_ALLOWED = 2;
-
- /** @hide */
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({ENROLLMENT_HANDSHAKE_FAILURE,
- ENROLLMENT_NOT_ALLOWED})
- public @interface TrustedDeviceEnrollmentError {
- }
-
-
- /** @hide */
- public CarTrustAgentEnrollmentManager(Car car, IBinder service) {
- super(car);
- mEnrollmentService = ICarTrustAgentEnrollment.Stub.asInterface(service);
- mEventCallbackHandler = new EventCallbackHandler(this, getEventHandler().getLooper());
- }
-
- /** @hide */
- @Override
- public synchronized void onCarDisconnected() {
- }
-
- /**
- * Starts broadcasting enrollment UUID on BLE.
- * Phones can scan and connect for the enrollment process to begin.
- */
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public void startEnrollmentAdvertising() {
- try {
- mEnrollmentService.startEnrollmentAdvertising();
- } catch (RemoteException e) {
- handleRemoteExceptionFromCarService(e);
- }
- }
-
- /**
- * Stops Enrollment advertising.
- */
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public void stopEnrollmentAdvertising() {
- try {
- mEnrollmentService.stopEnrollmentAdvertising();
- } catch (RemoteException e) {
- handleRemoteExceptionFromCarService(e);
- }
- }
-
- /**
- * Confirms that the enrollment handshake has been accepted by the user. This should be called
- * after the user has confirmed the verification code displayed on the UI.
- *
- * @param device the remote Bluetooth device that will receive the signal.
- */
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public void enrollmentHandshakeAccepted(BluetoothDevice device) {
- try {
- mEnrollmentService.enrollmentHandshakeAccepted(device);
- } catch (RemoteException e) {
- handleRemoteExceptionFromCarService(e);
- }
- }
-
- /**
- * Provides an option to quit enrollment if the pairing code doesn't match for example.
- */
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public void terminateEnrollmentHandshake() {
- try {
- mEnrollmentService.terminateEnrollmentHandshake();
- } catch (RemoteException e) {
- handleRemoteExceptionFromCarService(e);
- }
- }
-
- /**
- * Returns {@code true} if the escrow token associated with the given handle is active.
- * <p>
- * When a new escrow token has been added as part of the Trusted device enrollment, the client
- * will receive {@link CarTrustAgentEnrollmentCallback#onEscrowTokenAdded(long)} and
- * {@link CarTrustAgentEnrollmentCallback#onEscrowTokenActiveStateChanged(long, boolean)}
- * callbacks. This method provides a way to query for the token state at a later point of time.
- *
- * @param handle the handle corresponding to the escrow token
- * @param uid user id associated with the token
- * @return true if the token is active, false if not
- */
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public boolean isEscrowTokenActive(long handle, int uid) {
- try {
- return mEnrollmentService.isEscrowTokenActive(handle, uid);
- } catch (RemoteException e) {
- return handleRemoteExceptionFromCarService(e, false);
- }
- }
-
- /**
- * Remove the escrow token that is associated with the given handle and uid.
- *
- * @param handle the handle associated with the escrow token
- * @param uid user id associated with the token
- */
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public void removeEscrowToken(long handle, int uid) {
- try {
- mEnrollmentService.removeEscrowToken(handle, uid);
- } catch (RemoteException e) {
- handleRemoteExceptionFromCarService(e);
- }
- }
-
- /**
- * Remove all of the trusted devices associated with the given user.
- *
- * @param uid User id to remove the devices for
- */
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public void removeAllTrustedDevices(int uid) {
- try {
- mEnrollmentService.removeAllTrustedDevices(uid);
- } catch (RemoteException e) {
- handleRemoteExceptionFromCarService(e);
- }
- }
-
- /**
- * Enable or Disable Trusted device enrollment. Once disabled, head unit will not broadcast
- * for enrollment until enabled back.
- *
- * @param isEnabled {@code true} enables enrollment.
- */
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public void setTrustedDeviceEnrollmentEnabled(boolean isEnabled) {
- try {
- mEnrollmentService.setTrustedDeviceEnrollmentEnabled(isEnabled);
- } catch (RemoteException e) {
- handleRemoteExceptionFromCarService(e);
- }
- }
-
- /**
- * Enable or disable Unlocking with a trusted device. Once disabled, head unit will not
- * broadcast until enabled back.
- *
- * @param isEnabled {@code true} enables unlock.
- */
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public void setTrustedDeviceUnlockEnabled(boolean isEnabled) {
- try {
- mEnrollmentService.setTrustedDeviceUnlockEnabled(isEnabled);
- } catch (RemoteException e) {
- handleRemoteExceptionFromCarService(e);
- }
- }
-
- /**
- * Register for enrollment event callbacks.
- *
- * @param callback The callback methods to call, null to unregister
- */
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public void setEnrollmentCallback(@Nullable CarTrustAgentEnrollmentCallback callback) {
- if (callback == null) {
- unregisterEnrollmentCallback();
- } else {
- registerEnrollmentCallback(callback);
- }
- }
-
- private void registerEnrollmentCallback(CarTrustAgentEnrollmentCallback callback) {
- synchronized (mListenerLock) {
- if (callback != null && mEnrollmentCallback == null) {
- try {
- mEnrollmentService.registerEnrollmentCallback(mListenerToEnrollmentService);
- mEnrollmentCallback = callback;
- } catch (RemoteException e) {
- handleRemoteExceptionFromCarService(e);
- }
- }
- }
- }
-
- private void unregisterEnrollmentCallback() {
- synchronized (mListenerLock) {
- if (mEnrollmentCallback != null) {
- try {
- mEnrollmentService.unregisterEnrollmentCallback(mListenerToEnrollmentService);
- } catch (RemoteException e) {
- handleRemoteExceptionFromCarService(e);
- }
- mEnrollmentCallback = null;
- }
- }
- }
-
- /**
- * Register for general BLE callbacks
- *
- * @param callback The callback methods to call, null to unregister
- */
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public void setBleCallback(@Nullable CarTrustAgentBleCallback callback) {
- if (callback == null) {
- unregisterBleCallback();
- } else {
- registerBleCallback(callback);
- }
- }
-
- private void registerBleCallback(CarTrustAgentBleCallback callback) {
- synchronized (mListenerLock) {
- if (callback != null && mBleCallback == null) {
- try {
- mEnrollmentService.registerBleCallback(mListenerToBleService);
- mBleCallback = callback;
- } catch (RemoteException e) {
- handleRemoteExceptionFromCarService(e);
- }
- }
- }
- }
-
- private void unregisterBleCallback() {
- synchronized (mListenerLock) {
- if (mBleCallback != null) {
- try {
- mEnrollmentService.unregisterBleCallback(mListenerToBleService);
- } catch (RemoteException e) {
- handleRemoteExceptionFromCarService(e);
- }
- mBleCallback = null;
- }
- }
- }
-
- /**
- * Provides a list that contains information about the enrolled devices for the given user id.
- * <p>
- * Each enrollment handle corresponds to a trusted device for the given user.
- *
- * @param uid user id.
- * @return list of the Enrollment handles and user names for the user id.
- */
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- @NonNull
- public List<TrustedDeviceInfo> getEnrolledDeviceInfoForUser(int uid) {
- try {
- return mEnrollmentService.getEnrolledDeviceInfosForUser(uid);
- } catch (RemoteException e) {
- return handleRemoteExceptionFromCarService(e, Collections.emptyList());
- }
- }
-
- private Handler getEventCallbackHandler() {
- return mEventCallbackHandler;
- }
-
- /**
- * Callback interface for Trusted device enrollment applications to implement. The applications
- * get notified on various enrollment state change events.
- */
- public interface CarTrustAgentEnrollmentCallback {
- /**
- * Communicate about failure/timeouts in the handshake process. BluetoothDevice will be
- * null when the returned error code is {@link #ENROLLMENT_NOT_ALLOWED}.
- *
- * @param device the remote device trying to enroll
- * @param errorCode information on what failed.
- */
- void onEnrollmentHandshakeFailure(@Nullable BluetoothDevice device,
- @TrustedDeviceEnrollmentError int errorCode);
-
- /**
- * Present the pairing/authentication string to the user.
- *
- * @param device the remote device trying to enroll
- * @param authString the authentication string to show to the user to confirm across
- * both devices
- */
- void onAuthStringAvailable(BluetoothDevice device, String authString);
-
- /**
- * Escrow token was received and the Trust Agent framework has generated a corresponding
- * handle.
- *
- * @param handle the handle associated with the escrow token.
- */
- void onEscrowTokenAdded(long handle);
-
- /**
- * Escrow token was removed as a result of a call to {@link #removeEscrowToken(long handle,
- * int uid)}. The peer device associated with this token is not trusted for authentication
- * anymore.
- *
- * @param handle the handle associated with the escrow token.
- */
- void onEscrowTokenRemoved(long handle);
-
-
- /**
- * Escrow token's active state changed.
- *
- * @param handle the handle associated with the escrow token
- * @param active True if token has been activated, false if not.
- */
- void onEscrowTokenActiveStateChanged(long handle, boolean active);
- }
-
- /**
- * Callback interface for Trusted device enrollment applications to implement. The applications
- * get notified on various BLE state change events that happen during trusted device enrollment.
- */
- public interface CarTrustAgentBleCallback {
- /**
- * Indicates a remote device connected on BLE.
- */
- void onBleEnrollmentDeviceConnected(BluetoothDevice device);
-
- /**
- * Indicates a remote device disconnected on BLE.
- */
- void onBleEnrollmentDeviceDisconnected(BluetoothDevice device);
-
- /**
- * Indicates that the device is broadcasting for trusted device enrollment on BLE.
- */
- void onEnrollmentAdvertisingStarted();
-
- /**
- * Indicates a failure in BLE broadcasting for enrollment.
- */
- void onEnrollmentAdvertisingFailed();
- }
-
- private static final class ListenerToEnrollmentService extends
- ICarTrustAgentEnrollmentCallback.Stub {
- private final WeakReference<CarTrustAgentEnrollmentManager> mMgr;
-
- ListenerToEnrollmentService(CarTrustAgentEnrollmentManager mgr) {
- mMgr = new WeakReference<>(mgr);
- }
-
- /**
- * Communicate about failure/timeouts in the handshake process.
- */
- @Override
- public void onEnrollmentHandshakeFailure(BluetoothDevice device,
- @TrustedDeviceEnrollmentError int errorCode) {
- CarTrustAgentEnrollmentManager enrollmentManager = mMgr.get();
- if (enrollmentManager == null) {
- return;
- }
- enrollmentManager.getEventCallbackHandler().sendMessage(
- enrollmentManager.getEventCallbackHandler().obtainMessage(
- MSG_ENROLL_HANDSHAKE_FAILURE, new AuthInfo(device, null, errorCode)));
- }
-
- /**
- * Present the pairing/authentication string to the user.
- */
- @Override
- public void onAuthStringAvailable(BluetoothDevice device, String authString) {
- CarTrustAgentEnrollmentManager enrollmentManager = mMgr.get();
- if (enrollmentManager == null) {
- return;
- }
- enrollmentManager.getEventCallbackHandler().sendMessage(
- enrollmentManager.getEventCallbackHandler().obtainMessage(
- MSG_ENROLL_AUTH_STRING_AVAILABLE, new AuthInfo(device, authString, 0)));
- }
-
- /**
- * Escrow token was received and the Trust Agent framework has generated a corresponding
- * handle.
- */
- @Override
- public void onEscrowTokenAdded(long handle) {
- CarTrustAgentEnrollmentManager enrollmentManager = mMgr.get();
- if (enrollmentManager == null) {
- return;
- }
- Message message = enrollmentManager.getEventCallbackHandler().obtainMessage(
- MSG_ENROLL_TOKEN_ADDED);
- Bundle data = new Bundle();
- data.putLong(KEY_HANDLE, handle);
- message.setData(data);
- enrollmentManager.getEventCallbackHandler().sendMessage(message);
- }
-
- /**
- * Escrow token was removed.
- */
- @Override
- public void onEscrowTokenRemoved(long handle) {
- CarTrustAgentEnrollmentManager enrollmentManager = mMgr.get();
- if (enrollmentManager == null) {
- return;
- }
- Message message = enrollmentManager.getEventCallbackHandler().obtainMessage(
- MSG_ENROLL_TOKEN_REMOVED);
- Bundle data = new Bundle();
- data.putLong(KEY_HANDLE, handle);
- message.setData(data);
- enrollmentManager.getEventCallbackHandler().sendMessage(message);
- }
-
- /**
- * Escrow token's active state changed.
- */
- @Override
- public void onEscrowTokenActiveStateChanged(long handle, boolean active) {
- CarTrustAgentEnrollmentManager enrollmentManager = mMgr.get();
- if (enrollmentManager == null) {
- return;
- }
- Message message = enrollmentManager.getEventCallbackHandler().obtainMessage(
- MSG_ENROLL_TOKEN_STATE_CHANGED);
- Bundle data = new Bundle();
- data.putLong(KEY_HANDLE, handle);
- data.putBoolean(KEY_ACTIVE, active);
- message.setData(data);
- enrollmentManager.getEventCallbackHandler().sendMessage(message);
- }
- }
-
- private static final class ListenerToBleService extends ICarTrustAgentBleCallback.Stub {
- private final WeakReference<CarTrustAgentEnrollmentManager> mMgr;
-
- ListenerToBleService(CarTrustAgentEnrollmentManager mgr) {
- mMgr = new WeakReference<>(mgr);
- }
-
- /**
- * Called when the GATT server is started and BLE is successfully advertising for
- * enrollment.
- */
- public void onEnrollmentAdvertisingStarted() {
- CarTrustAgentEnrollmentManager enrollmentManager = mMgr.get();
- if (enrollmentManager == null) {
- return;
- }
- enrollmentManager.getEventCallbackHandler().sendMessage(
- enrollmentManager.getEventCallbackHandler().obtainMessage(
- MSG_ENROLL_ADVERTISING_STARTED));
- }
-
- /**
- * Called when the BLE enrollment advertisement fails to start.
- * see AdvertiseCallback#ADVERTISE_FAILED_* for possible error codes.
- */
- public void onEnrollmentAdvertisingFailed() {
- CarTrustAgentEnrollmentManager enrollmentManager = mMgr.get();
- if (enrollmentManager == null) {
- return;
- }
- enrollmentManager.getEventCallbackHandler().sendMessage(
- enrollmentManager.getEventCallbackHandler().obtainMessage(
- MSG_ENROLL_ADVERTISING_FAILED));
- }
-
- /**
- * Called when a remote device is connected on BLE.
- */
- public void onBleEnrollmentDeviceConnected(BluetoothDevice device) {
- CarTrustAgentEnrollmentManager enrollmentManager = mMgr.get();
- if (enrollmentManager == null) {
- return;
- }
- enrollmentManager.getEventCallbackHandler().sendMessage(
- enrollmentManager.getEventCallbackHandler().obtainMessage(
- MSG_ENROLL_DEVICE_CONNECTED, device));
- }
-
- /**
- * Called when a remote device is disconnected on BLE.
- */
- public void onBleEnrollmentDeviceDisconnected(BluetoothDevice device) {
- CarTrustAgentEnrollmentManager enrollmentManager = mMgr.get();
- if (enrollmentManager == null) {
- return;
- }
- enrollmentManager.getEventCallbackHandler().sendMessage(
- enrollmentManager.getEventCallbackHandler().obtainMessage(
- MSG_ENROLL_DEVICE_DISCONNECTED, device));
- }
- }
-
- /**
- * Callback Handler to handle dispatching the enrollment state changes to the corresponding
- * listeners
- */
- private static final class EventCallbackHandler extends Handler {
- private final WeakReference<CarTrustAgentEnrollmentManager> mEnrollmentManager;
-
- EventCallbackHandler(CarTrustAgentEnrollmentManager manager, Looper looper) {
- super(looper);
- mEnrollmentManager = new WeakReference<>(manager);
- }
-
- @Override
- public void handleMessage(Message message) {
- CarTrustAgentEnrollmentManager enrollmentManager = mEnrollmentManager.get();
- if (enrollmentManager == null) {
- return;
- }
- switch (message.what) {
- case MSG_ENROLL_ADVERTISING_STARTED:
- case MSG_ENROLL_ADVERTISING_FAILED:
- case MSG_ENROLL_DEVICE_CONNECTED:
- case MSG_ENROLL_DEVICE_DISCONNECTED:
- enrollmentManager.dispatchBleCallback(message);
- break;
- case MSG_ENROLL_HANDSHAKE_FAILURE:
- case MSG_ENROLL_AUTH_STRING_AVAILABLE:
- case MSG_ENROLL_TOKEN_ADDED:
- case MSG_ENROLL_TOKEN_STATE_CHANGED:
- case MSG_ENROLL_TOKEN_REMOVED:
- enrollmentManager.dispatchEnrollmentCallback(message);
- break;
- default:
- Log.e(TAG, "Unknown message:" + message.what);
- break;
- }
- }
- }
-
- /**
- * Dispatch BLE related state change callbacks
- *
- * @param message Message to handle and dispatch
- */
- private void dispatchBleCallback(Message message) {
- CarTrustAgentBleCallback bleCallback;
- synchronized (mListenerLock) {
- bleCallback = mBleCallback;
- }
- if (bleCallback == null) {
- return;
- }
- switch (message.what) {
- case MSG_ENROLL_ADVERTISING_STARTED:
- bleCallback.onEnrollmentAdvertisingStarted();
- break;
- case MSG_ENROLL_ADVERTISING_FAILED:
- bleCallback.onEnrollmentAdvertisingFailed();
- break;
- case MSG_ENROLL_DEVICE_CONNECTED:
- bleCallback.onBleEnrollmentDeviceConnected((BluetoothDevice) message.obj);
- break;
- case MSG_ENROLL_DEVICE_DISCONNECTED:
- bleCallback.onBleEnrollmentDeviceDisconnected((BluetoothDevice) message.obj);
- break;
- default:
- break;
- }
- }
-
- /**
- * Dispatch Enrollment related state changes to the listener.
- *
- * @param message Message to handle and dispatch
- */
- private void dispatchEnrollmentCallback(Message message) {
- CarTrustAgentEnrollmentCallback enrollmentCallback;
- synchronized (mListenerLock) {
- enrollmentCallback = mEnrollmentCallback;
- }
- if (enrollmentCallback == null) {
- return;
- }
- AuthInfo auth;
- Bundle data;
- switch (message.what) {
- case MSG_ENROLL_HANDSHAKE_FAILURE:
- auth = (AuthInfo) message.obj;
- enrollmentCallback.onEnrollmentHandshakeFailure(auth.mDevice, auth.mErrorCode);
- break;
- case MSG_ENROLL_AUTH_STRING_AVAILABLE:
- auth = (AuthInfo) message.obj;
- if (auth.mDevice != null && auth.mAuthString != null) {
- enrollmentCallback.onAuthStringAvailable(auth.mDevice, auth.mAuthString);
- }
- break;
- case MSG_ENROLL_TOKEN_ADDED:
- data = message.getData();
- if (data == null) {
- break;
- }
- enrollmentCallback.onEscrowTokenAdded(data.getLong(KEY_HANDLE));
- break;
- case MSG_ENROLL_TOKEN_STATE_CHANGED:
- data = message.getData();
- if (data == null) {
- break;
- }
- enrollmentCallback.onEscrowTokenActiveStateChanged(data.getLong(KEY_HANDLE),
- data.getBoolean(KEY_ACTIVE));
- break;
- case MSG_ENROLL_TOKEN_REMOVED:
- data = message.getData();
- if (data == null) {
- break;
- }
- enrollmentCallback.onEscrowTokenRemoved(data.getLong(KEY_HANDLE));
- break;
- default:
- break;
- }
- }
-
- /**
- * Container class to pass information through a Message to the handler.
- */
- private static class AuthInfo {
- final BluetoothDevice mDevice;
- @Nullable
- final String mAuthString;
- final int mErrorCode;
-
- AuthInfo(BluetoothDevice device, @Nullable String authString,
- @TrustedDeviceEnrollmentError int errorCode) {
- mDevice = device;
- mAuthString = authString;
- mErrorCode = errorCode;
- }
- }
-}
diff --git a/car-lib/src/android/car/trust/ICarTrustAgentBleCallback.aidl b/car-lib/src/android/car/trust/ICarTrustAgentBleCallback.aidl
deleted file mode 100644
index 0678db8..0000000
--- a/car-lib/src/android/car/trust/ICarTrustAgentBleCallback.aidl
+++ /dev/null
@@ -1,48 +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 android.car.trust;
-
-import android.bluetooth.BluetoothDevice;
-
-/**
- * Callback interface for BLE connection state changes during trusted device enrollment.
- *
- * @hide
- * @deprecated Adding a trust agent is no longer a supported feature and these APIs will be removed
- * in the next Android release.
- */
-oneway interface ICarTrustAgentBleCallback {
- /**
- * Called when the GATT server is started and BLE is successfully advertising for enrollment.
- */
- void onEnrollmentAdvertisingStarted();
-
- /**
- * Called when the BLE enrollment advertisement fails to start.
- */
- void onEnrollmentAdvertisingFailed();
-
- /**
- * Called when a remote device is connected on BLE.
- */
- void onBleEnrollmentDeviceConnected(in BluetoothDevice device);
-
- /**
- * Called when a remote device is disconnected on BLE.
- */
- void onBleEnrollmentDeviceDisconnected(in BluetoothDevice device);
-}
diff --git a/car-lib/src/android/car/trust/ICarTrustAgentEnrollment.aidl b/car-lib/src/android/car/trust/ICarTrustAgentEnrollment.aidl
deleted file mode 100644
index 485b77e..0000000
--- a/car-lib/src/android/car/trust/ICarTrustAgentEnrollment.aidl
+++ /dev/null
@@ -1,47 +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 android.car.trust;
-
-import android.bluetooth.BluetoothDevice;
-import android.car.trust.ICarTrustAgentBleCallback;
-import android.car.trust.ICarTrustAgentEnrollmentCallback;
-import android.car.trust.TrustedDeviceInfo;
-
-/**
- * Binder interface for CarTrustAgentEnrollmentService. The service implements the functionality
- * to communicate with the remote device securely to enroll the remote device as a trusted device.
- *
- * @hide
- * @deprecated Enrolling a trusted device is no longer a supported feature and these APIs will be
- * removed in the next Android release.
- */
-interface ICarTrustAgentEnrollment {
- void startEnrollmentAdvertising();
- void stopEnrollmentAdvertising();
- void enrollmentHandshakeAccepted(in BluetoothDevice device);
- void terminateEnrollmentHandshake();
- boolean isEscrowTokenActive(in long handle, int uid);
- void removeEscrowToken(in long handle, int uid);
- void removeAllTrustedDevices(int uid);
- void setTrustedDeviceEnrollmentEnabled(boolean enable);
- void setTrustedDeviceUnlockEnabled(boolean enable);
- List<TrustedDeviceInfo> getEnrolledDeviceInfosForUser(in int uid);
- void registerEnrollmentCallback(in ICarTrustAgentEnrollmentCallback callback);
- void unregisterEnrollmentCallback(in ICarTrustAgentEnrollmentCallback callback);
- void registerBleCallback(in ICarTrustAgentBleCallback callback);
- void unregisterBleCallback(in ICarTrustAgentBleCallback callback);
-}
diff --git a/car-lib/src/android/car/trust/ICarTrustAgentEnrollmentCallback.aidl b/car-lib/src/android/car/trust/ICarTrustAgentEnrollmentCallback.aidl
deleted file mode 100644
index b151958..0000000
--- a/car-lib/src/android/car/trust/ICarTrustAgentEnrollmentCallback.aidl
+++ /dev/null
@@ -1,56 +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 android.car.trust;
-
-import android.bluetooth.BluetoothDevice;
-
-/**
- * Callback interface for state changes during Trusted device enrollment.
- *
- * @hide
- * @deprecated Enrolling a trusted device is no longer a supported feature and these APIs will be
- * removed in the next Android release.
- */
-oneway interface ICarTrustAgentEnrollmentCallback {
- /**
- * Communicate about failure/timeouts in the handshake process.
- */
- void onEnrollmentHandshakeFailure(in BluetoothDevice device, in int errorCode);
-
- /**
- * Present the pairing/authentication string to the user.
- */
- void onAuthStringAvailable(in BluetoothDevice device, in String authString);
-
- /**
- * Escrow token was received and the Trust Agent framework has generated a corresponding handle.
- */
- void onEscrowTokenAdded(in long handle);
-
- /**
- * Escrow token was removed as a result of a call to
- * {@link CarTrustAgentEnrollmentManager#removeEscrowToken(long handle, int uid)}. The peer
- * device associated with this token is not trusted for authentication anymore.
- */
- void onEscrowTokenRemoved(in long handle);
-
- /**
- * Escrow token's active state changed.
- */
- void onEscrowTokenActiveStateChanged(in long handle, in boolean active);
-
-}
diff --git a/car-lib/src/android/car/trust/TrustedDeviceInfo.aidl b/car-lib/src/android/car/trust/TrustedDeviceInfo.aidl
deleted file mode 100644
index 8dc558c..0000000
--- a/car-lib/src/android/car/trust/TrustedDeviceInfo.aidl
+++ /dev/null
@@ -1,3 +0,0 @@
-package android.car.trust;
-
-parcelable TrustedDeviceInfo;
diff --git a/car-lib/src/android/car/trust/TrustedDeviceInfo.java b/car-lib/src/android/car/trust/TrustedDeviceInfo.java
deleted file mode 100644
index 1f44a83..0000000
--- a/car-lib/src/android/car/trust/TrustedDeviceInfo.java
+++ /dev/null
@@ -1,150 +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 android.car.trust;
-
-import android.annotation.NonNull;
-import android.annotation.SystemApi;
-import android.os.Parcel;
-import android.os.Parcelable;
-
-import java.util.Objects;
-
-
-/**
- * Contains basic info of a trusted device.
- *
- * @hide
- * @deprecated Adding a trusted device is no longer a supported feature and these APIs will be
- * removed in the next Android release.
- */
-@Deprecated
-@SystemApi
-public final class TrustedDeviceInfo implements Parcelable {
-
- // TODO(b/124052887)
- public static final String DEFAULT_NAME = "Default";
- private static final String DEVICE_INFO_DELIMITER = ",";
- private final long mHandle;
- private final String mAddress;
- private final String mName;
-
- public TrustedDeviceInfo(long handle, @NonNull String address, @NonNull String name) {
- mHandle = handle;
- mAddress = address;
- mName = name;
- }
-
- /**
- * Returns the handle of current device
- *
- * @return handle which is unique for every device
- */
- public long getHandle() {
- return mHandle;
- }
-
- /**
- * Get local device name of current device
- *
- * @return local device name
- */
- @NonNull
- public String getName() {
- return mName;
- }
-
- /**
- * Get MAC address of current device
- *
- * @return MAC address
- */
- @NonNull
- public String getAddress() {
- return mAddress;
- }
-
- public TrustedDeviceInfo(Parcel in) {
- mHandle = in.readLong();
- mName = in.readString();
- mAddress = in.readString();
- }
-
- @Override
- public int describeContents() {
- return 0;
- }
-
- @Override
- public void writeToParcel(Parcel dest, int flags) {
- dest.writeLong(mHandle);
- dest.writeString(mName);
- dest.writeString(mAddress);
- }
-
-
- @Override
- public String toString() {
- return String.format("TrustedDevice{ handle=%d. address=%s, name=%s }", mHandle, mAddress,
- mName);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (!(obj instanceof TrustedDeviceInfo)) {
- return false;
- }
- // If the handles of two devices are the same, then they will be considered as equals.
- TrustedDeviceInfo secondDevice = (TrustedDeviceInfo) obj;
- return mHandle == secondDevice.getHandle();
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(mHandle);
- }
-
- /**
- * Serialize the trusted device info into string
- *
- * @return string contains current trusted device information with certain format
- */
- public String serialize() {
- return String.join(DEVICE_INFO_DELIMITER, String.valueOf(mHandle), mAddress, mName);
- }
-
- /**
- * Deserialize the string to trusted device info
- *
- * @param deviceInfo string which contains trusted device info, should be originally generated
- * by serialize method
- * @return TrustedDeviceInfo object constructed from the trusted device info in the string
- */
- public static TrustedDeviceInfo deserialize(String deviceInfo) {
- String[] res = deviceInfo.split(DEVICE_INFO_DELIMITER);
- return new TrustedDeviceInfo(Long.valueOf(res[0]), res[1], res[2]);
- }
-
- public static final Creator CREATOR = new Creator() {
- public TrustedDeviceInfo createFromParcel(Parcel in) {
- return new TrustedDeviceInfo(in);
- }
-
- public TrustedDeviceInfo[] newArray(int size) {
- return new TrustedDeviceInfo[size];
- }
- };
-}
diff --git a/car-lib/src/android/car/user/CarUserManager.java b/car-lib/src/android/car/user/CarUserManager.java
index 62ae7e0..03c9555 100644
--- a/car-lib/src/android/car/user/CarUserManager.java
+++ b/car-lib/src/android/car/user/CarUserManager.java
@@ -23,7 +23,6 @@
import static com.android.internal.util.FunctionalUtils.getLambdaName;
import android.annotation.CallbackExecutor;
-import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
@@ -33,6 +32,8 @@
import android.car.Car;
import android.car.CarManagerBase;
import android.car.ICarUserService;
+import android.car.util.concurrent.AndroidAsyncFuture;
+import android.car.util.concurrent.AsyncFuture;
import android.content.pm.UserInfo;
import android.content.pm.UserInfo.UserInfoFlag;
import android.os.Bundle;
@@ -46,16 +47,17 @@
import android.util.EventLog;
import android.util.Log;
+import com.android.car.internal.common.CommonConstants;
+import com.android.car.internal.common.CommonConstants.UserLifecycleEventType;
+import com.android.car.internal.common.EventLogTags;
+import com.android.car.internal.common.UserHelperLite;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.car.EventLogTags;
import com.android.internal.infra.AndroidFuture;
import com.android.internal.os.IResultReceiver;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.Preconditions;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
@@ -84,7 +86,8 @@
*/
@SystemApi
@TestApi
- public static final int USER_LIFECYCLE_EVENT_TYPE_STARTING = 1;
+ public static final int USER_LIFECYCLE_EVENT_TYPE_STARTING =
+ CommonConstants.USER_LIFECYCLE_EVENT_TYPE_STARTING;
/**
* {@link UserLifecycleEvent} called when switching to a different foreground user, for
@@ -99,7 +102,8 @@
*/
@SystemApi
@TestApi
- public static final int USER_LIFECYCLE_EVENT_TYPE_SWITCHING = 2;
+ public static final int USER_LIFECYCLE_EVENT_TYPE_SWITCHING =
+ CommonConstants.USER_LIFECYCLE_EVENT_TYPE_SWITCHING;
/**
* {@link UserLifecycleEvent} called when an existing user is in the process of being unlocked.
@@ -114,7 +118,8 @@
*/
@SystemApi
@TestApi
- public static final int USER_LIFECYCLE_EVENT_TYPE_UNLOCKING = 3;
+ public static final int USER_LIFECYCLE_EVENT_TYPE_UNLOCKING =
+ CommonConstants.USER_LIFECYCLE_EVENT_TYPE_UNLOCKING;
/**
* {@link UserLifecycleEvent} called after an existing user is unlocked.
@@ -123,7 +128,8 @@
*/
@SystemApi
@TestApi
- public static final int USER_LIFECYCLE_EVENT_TYPE_UNLOCKED = 4;
+ public static final int USER_LIFECYCLE_EVENT_TYPE_UNLOCKED =
+ CommonConstants.USER_LIFECYCLE_EVENT_TYPE_UNLOCKED;
/**
* {@link UserLifecycleEvent} called when an existing user is stopping, for components to
@@ -140,7 +146,8 @@
*/
@SystemApi
@TestApi
- public static final int USER_LIFECYCLE_EVENT_TYPE_STOPPING = 5;
+ public static final int USER_LIFECYCLE_EVENT_TYPE_STOPPING =
+ CommonConstants.USER_LIFECYCLE_EVENT_TYPE_STOPPING;
/**
* {@link UserLifecycleEvent} called after an existing user is stopped.
@@ -151,19 +158,8 @@
*/
@SystemApi
@TestApi
- public static final int USER_LIFECYCLE_EVENT_TYPE_STOPPED = 6;
-
- /** @hide */
- @IntDef(prefix = { "USER_LIFECYCLE_EVENT_TYPE_" }, value = {
- USER_LIFECYCLE_EVENT_TYPE_STARTING,
- USER_LIFECYCLE_EVENT_TYPE_SWITCHING,
- USER_LIFECYCLE_EVENT_TYPE_UNLOCKING,
- USER_LIFECYCLE_EVENT_TYPE_UNLOCKED,
- USER_LIFECYCLE_EVENT_TYPE_STOPPING,
- USER_LIFECYCLE_EVENT_TYPE_STOPPED,
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface UserLifecycleEventType{}
+ public static final int USER_LIFECYCLE_EVENT_TYPE_STOPPED =
+ CommonConstants.USER_LIFECYCLE_EVENT_TYPE_STOPPED;
/** @hide */
public static final String BUNDLE_PARAM_ACTION = "action";
@@ -205,8 +201,9 @@
*
* @hide
*/
- @RequiresPermission(android.Manifest.permission.MANAGE_USERS)
- public AndroidFuture<UserSwitchResult> switchUser(@UserIdInt int targetUserId) {
+ @RequiresPermission(anyOf = {android.Manifest.permission.MANAGE_USERS,
+ android.Manifest.permission.CREATE_USERS})
+ public AsyncFuture<UserSwitchResult> switchUser(@UserIdInt int targetUserId) {
int uid = myUid();
if (mUserManager.getUserSwitchability() != UserManager.SWITCHABILITY_STATUS_OK) {
@@ -228,19 +225,19 @@
};
EventLog.writeEvent(EventLogTags.CAR_USER_MGR_SWITCH_USER_REQ, uid, targetUserId);
mService.switchUser(targetUserId, HAL_TIMEOUT_MS, future);
- return future;
+ return new AndroidAsyncFuture<>(future);
} catch (RemoteException e) {
- AndroidFuture<UserSwitchResult> future =
+ AsyncFuture<UserSwitchResult> future =
newSwitchResuiltForFailure(UserSwitchResult.STATUS_HAL_INTERNAL_FAILURE);
return handleRemoteExceptionFromCarService(e, future);
}
}
- private AndroidFuture<UserSwitchResult> newSwitchResuiltForFailure(
+ private AndroidAsyncFuture<UserSwitchResult> newSwitchResuiltForFailure(
@UserSwitchResult.Status int status) {
AndroidFuture<UserSwitchResult> future = new AndroidFuture<>();
future.complete(new UserSwitchResult(status, null));
- return future;
+ return new AndroidAsyncFuture<>(future);
}
/**
@@ -249,8 +246,8 @@
* @hide
*/
@RequiresPermission(anyOf = {android.Manifest.permission.MANAGE_USERS,
- android.Manifest.permission.CREATE_USERS})
- public AndroidFuture<UserCreationResult> createUser(@Nullable String name,
+ android.Manifest.permission.CREATE_USERS})
+ public AsyncFuture<UserCreationResult> createUser(@Nullable String name,
@NonNull String userType, @UserInfoFlag int flags) {
int uid = myUid();
try {
@@ -272,14 +269,14 @@
};
};
EventLog.writeEvent(EventLogTags.CAR_USER_MGR_CREATE_USER_REQ, uid,
- safeName(name), userType, flags);
+ UserHelperLite.safeName(name), userType, flags);
mService.createUser(name, userType, flags, HAL_TIMEOUT_MS, future);
- return future;
+ return new AndroidAsyncFuture<>(future);
} catch (RemoteException e) {
AndroidFuture<UserCreationResult> future = new AndroidFuture<>();
future.complete(new UserCreationResult(UserCreationResult.STATUS_HAL_INTERNAL_FAILURE,
null, null));
- return handleRemoteExceptionFromCarService(e, future);
+ return handleRemoteExceptionFromCarService(e, new AndroidAsyncFuture<>(future));
}
}
@@ -290,7 +287,7 @@
*/
@RequiresPermission(anyOf = {android.Manifest.permission.MANAGE_USERS,
android.Manifest.permission.CREATE_USERS})
- public AndroidFuture<UserCreationResult> createGuest(@Nullable String name) {
+ public AsyncFuture<UserCreationResult> createGuest(@Nullable String name) {
return createUser(name, UserManager.USER_TYPE_FULL_GUEST, /* flags= */ 0);
}
@@ -301,7 +298,7 @@
*/
@RequiresPermission(anyOf = {android.Manifest.permission.MANAGE_USERS,
android.Manifest.permission.CREATE_USERS})
- public AndroidFuture<UserCreationResult> createUser(@Nullable String name,
+ public AsyncFuture<UserCreationResult> createUser(@Nullable String name,
@UserInfoFlag int flags) {
return createUser(name, UserManager.USER_TYPE_FULL_SECONDARY, flags);
}
@@ -312,23 +309,47 @@
Settings.Secure.SKIP_FIRST_USE_HINTS, "1", user.id);
}
- /**
- * Removes a user.
+ /**
+ * Removes the given user.
+ *
+ * @param user identification of the user to be removed.
+ *
+ * @return whether the user was successfully removed.
*
* @hide
*/
- @RequiresPermission(android.Manifest.permission.MANAGE_USERS)
+ @SystemApi
+ @TestApi
+ @RequiresPermission(anyOf = {android.Manifest.permission.MANAGE_USERS,
+ android.Manifest.permission.CREATE_USERS})
+ @NonNull
+ public UserRemovalResult removeUser(@NonNull UserHandle user) {
+ Objects.requireNonNull(user, "user cannot be null");
+ return removeUser(user.getIdentifier(), /* hasCallerRestrictions= */ true);
+ }
+
+ // TODO(b/155913815): add proper javadoc / explain difference between 2 methods (but wait until
+ // we're sure the @SystemAPI method won't be moved to CarDevicePolicyManager)
+ /** @hide */
+ @RequiresPermission(anyOf = {android.Manifest.permission.MANAGE_USERS,
+ android.Manifest.permission.CREATE_USERS})
+ @NonNull
public UserRemovalResult removeUser(@UserIdInt int userId) {
+ return removeUser(userId, /* hasCallerRestrictions= */ false);
+ }
+
+ private UserRemovalResult removeUser(@UserIdInt int userId, boolean hasCallerRestrictions) {
int uid = myUid();
- EventLog.writeEvent(EventLogTags.CAR_USER_MGR_REMOVE_USER_REQ, uid, userId);
- int status = UserRemovalResult.STATUS_HAL_INTERNAL_FAILURE;
+ EventLog.writeEvent(EventLogTags.CAR_USER_MGR_REMOVE_USER_REQ, uid, userId,
+ hasCallerRestrictions ? 1 : 0);
+ int status = UserRemovalResult.STATUS_ANDROID_FAILURE;
try {
- UserRemovalResult result = mService.removeUser(userId);
+ UserRemovalResult result = mService.removeUser(userId, hasCallerRestrictions);
status = result.getStatus();
return result;
} catch (RemoteException e) {
return handleRemoteExceptionFromCarService(e,
- new UserRemovalResult(UserRemovalResult.STATUS_HAL_INTERNAL_FAILURE));
+ new UserRemovalResult(UserRemovalResult.STATUS_ANDROID_FAILURE));
} finally {
EventLog.writeEvent(EventLogTags.CAR_USER_MGR_REMOVE_USER_RESP, uid, status);
}
@@ -440,7 +461,8 @@
* @hide
*/
@NonNull
- @RequiresPermission(android.Manifest.permission.MANAGE_USERS)
+ @RequiresPermission(anyOf = {android.Manifest.permission.MANAGE_USERS,
+ android.Manifest.permission.CREATE_USERS})
public UserIdentificationAssociationResponse getUserIdentificationAssociation(
@NonNull int... types) {
Preconditions.checkArgument(!ArrayUtils.isEmpty(types), "must have at least one type");
@@ -465,8 +487,9 @@
* @hide
*/
@NonNull
- @RequiresPermission(android.Manifest.permission.MANAGE_USERS)
- public AndroidFuture<UserIdentificationAssociationResponse> setUserIdentificationAssociation(
+ @RequiresPermission(anyOf = {android.Manifest.permission.MANAGE_USERS,
+ android.Manifest.permission.CREATE_USERS})
+ public AsyncFuture<UserIdentificationAssociationResponse> setUserIdentificationAssociation(
@NonNull int[] types, @NonNull int[] values) {
Preconditions.checkArgument(!ArrayUtils.isEmpty(types), "must have at least one type");
Preconditions.checkArgument(!ArrayUtils.isEmpty(values), "must have at least one value");
@@ -507,11 +530,11 @@
};
};
mService.setUserIdentificationAssociation(HAL_TIMEOUT_MS, types, values, future);
- return future;
+ return new AndroidAsyncFuture<>(future);
} catch (RemoteException e) {
AndroidFuture<UserIdentificationAssociationResponse> future = new AndroidFuture<>();
future.complete(UserIdentificationAssociationResponse.forFailure());
- return handleRemoteExceptionFromCarService(e, future);
+ return handleRemoteExceptionFromCarService(e, new AndroidAsyncFuture<>(future));
}
}
@@ -638,7 +661,7 @@
* @hide
*/
public boolean isValidUser(@UserIdInt int userId) {
- List<UserInfo> allUsers = mUserManager.getUsers(/* excludeDying= */ true);
+ List<UserInfo> allUsers = mUserManager.getAliveUsers();
for (int i = 0; i < allUsers.size(); i++) {
UserInfo user = allUsers.get(i);
if (user.id == userId && (userId != UserHandle.USER_SYSTEM
@@ -649,19 +672,6 @@
return false;
}
- // TODO(b/150413515): use from UserHelper instead (would require a new make target, otherwise it
- // would include the whole car-user-lib)
- private boolean isHeadlessSystemUser(int targetUserId) {
- return targetUserId == UserHandle.USER_SYSTEM && UserManager.isHeadlessSystemUserMode();
- }
-
- // TODO(b/150413515): use from UserHelper instead (would require a new make target, otherwise it
- // would include the whole car-user-lib)
- @Nullable
- private static String safeName(@Nullable String name) {
- return name == null ? name : name.length() + "_chars";
- }
-
/**
* Defines a lifecycle event for an Android user.
*
diff --git a/car-lib/src/android/car/user/CommonResults.java b/car-lib/src/android/car/user/CommonResults.java
index 9238a0b..06244f9 100644
--- a/car-lib/src/android/car/user/CommonResults.java
+++ b/car-lib/src/android/car/user/CommonResults.java
@@ -47,6 +47,11 @@
public static final int STATUS_INVALID_REQUEST = 5;
/**
+ * Operation failed because of driving safety UX restrictions.
+ */
+ public static final int STATUS_UX_RESTRICTION_FAILURE = 6;
+
+ /**
* Reference for common status - anything higher than this can be used for custom status
*/
static final int LAST_COMMON_STATUS = 100;
diff --git a/car-lib/src/android/car/settings/SpeedBumpConfiguration.aidl b/car-lib/src/android/car/user/OperationResult.java
similarity index 66%
copy from car-lib/src/android/car/settings/SpeedBumpConfiguration.aidl
copy to car-lib/src/android/car/user/OperationResult.java
index 084fca0..5b59d9a 100644
--- a/car-lib/src/android/car/settings/SpeedBumpConfiguration.aidl
+++ b/car-lib/src/android/car/user/OperationResult.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2018 The Android Open Source Project
+ * Copyright (C) 2020 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.
@@ -13,7 +13,17 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+package android.car.user;
-package android.car.settings;
+/**
+ * Helper interface for operations that return a result.
+ *
+ * @hide
+ */
+public interface OperationResult {
-parcelable SpeedBumpConfiguration;
+ /**
+ * Checks if this result is successful.
+ */
+ boolean isSuccess();
+}
diff --git a/car-lib/src/android/car/user/UserCreationResult.java b/car-lib/src/android/car/user/UserCreationResult.java
index 328908f..00d3add 100644
--- a/car-lib/src/android/car/user/UserCreationResult.java
+++ b/car-lib/src/android/car/user/UserCreationResult.java
@@ -35,7 +35,7 @@
genToString = true,
genHiddenConstructor = true,
genHiddenConstDefs = true)
-public final class UserCreationResult implements Parcelable {
+public final class UserCreationResult implements Parcelable, OperationResult {
/**
* {@link Status} called when user creation is successful for both HAL and Android.
@@ -97,18 +97,14 @@
@Nullable
private final String mErrorMessage;
- /**
- * Checks if this result is successful.
- */
+ @Override
public boolean isSuccess() {
return mStatus == STATUS_SUCCESSFUL;
}
- // TODO(b/158195639): if you change any status constant, you need to manually assign its values
-
- // Code below generated by codegen v1.0.15.
+ // Code below generated by codegen v1.0.18.
//
// DO NOT MODIFY!
// CHECKSTYLE:OFF Generated code
@@ -306,10 +302,10 @@
};
@DataClass.Generated(
- time = 1591401523007L,
- codegenVersion = "1.0.15",
+ time = 1603921325051L,
+ codegenVersion = "1.0.18",
sourceFile = "packages/services/Car/car-lib/src/android/car/user/UserCreationResult.java",
- inputSignatures = "public static final int STATUS_SUCCESSFUL\npublic static final int STATUS_ANDROID_FAILURE\npublic static final int STATUS_HAL_FAILURE\npublic static final int STATUS_HAL_INTERNAL_FAILURE\npublic static final int STATUS_INVALID_REQUEST\nprivate final @android.car.user.UserCreationResult.Status int mStatus\nprivate final @android.annotation.Nullable android.content.pm.UserInfo mUser\nprivate final @android.annotation.Nullable java.lang.String mErrorMessage\npublic boolean isSuccess()\nclass UserCreationResult extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genToString=true, genHiddenConstructor=true, genHiddenConstDefs=true)")
+ inputSignatures = "public static final int STATUS_SUCCESSFUL\npublic static final int STATUS_ANDROID_FAILURE\npublic static final int STATUS_HAL_FAILURE\npublic static final int STATUS_HAL_INTERNAL_FAILURE\npublic static final int STATUS_INVALID_REQUEST\nprivate final @android.car.user.UserCreationResult.Status int mStatus\nprivate final @android.annotation.Nullable android.content.pm.UserInfo mUser\nprivate final @android.annotation.Nullable java.lang.String mErrorMessage\npublic @java.lang.Override boolean isSuccess()\nclass UserCreationResult extends java.lang.Object implements [android.os.Parcelable, android.car.user.OperationResult]\n@com.android.internal.util.DataClass(genToString=true, genHiddenConstructor=true, genHiddenConstDefs=true)")
@Deprecated
private void __metadata() {}
diff --git a/car-lib/src/android/car/user/UserRemovalResult.java b/car-lib/src/android/car/user/UserRemovalResult.java
index e76528b..c259665 100644
--- a/car-lib/src/android/car/user/UserRemovalResult.java
+++ b/car-lib/src/android/car/user/UserRemovalResult.java
@@ -17,6 +17,8 @@
package android.car.user;
import android.annotation.IntDef;
+import android.annotation.SystemApi;
+import android.annotation.TestApi;
import android.os.Parcelable;
import com.android.internal.util.DataClass;
@@ -33,48 +35,34 @@
genToString = true,
genHiddenConstructor = true,
genHiddenConstDefs = true)
-public final class UserRemovalResult implements Parcelable {
+@SystemApi
+@TestApi
+public final class UserRemovalResult implements Parcelable, OperationResult {
/**
* When user remove is successful.
- *
- * @hide
*/
public static final int STATUS_SUCCESSFUL = CommonResults.STATUS_SUCCESSFUL;
/**
* When user remove fails for android. Hal user is not removed.
- *
- * @hide
*/
public static final int STATUS_ANDROID_FAILURE = CommonResults.STATUS_ANDROID_FAILURE;
- /**
- * When remove user fails for unknown error.
- *
- * @hide
- */
- public static final int STATUS_HAL_INTERNAL_FAILURE = CommonResults.STATUS_HAL_INTERNAL_FAILURE;
-
/**
* When user to remove is same as current user.
- *
- * @hide
*/
public static final int STATUS_TARGET_USER_IS_CURRENT_USER =
CommonResults.LAST_COMMON_STATUS + 1;
/**
* When user to remove doesn't exits.
- *
- * @hide
*/
public static final int STATUS_USER_DOES_NOT_EXIST = CommonResults.LAST_COMMON_STATUS + 2;
/**
* When last admin user successfully removed.
*
- * @hide
*/
public static final int STATUS_SUCCESSFUL_LAST_ADMIN_REMOVED =
CommonResults.LAST_COMMON_STATUS + 3;
@@ -91,15 +79,14 @@
*/
private final @Status int mStatus;
+ @Override
public boolean isSuccess() {
return mStatus == STATUS_SUCCESSFUL || mStatus == STATUS_SUCCESSFUL_LAST_ADMIN_REMOVED;
}
- // TODO(b/158195639): if you change any status constant, you need to manually assign its values
- // (rather than using CommonResults) before running codegen to regenerate the class
- // Code below generated by codegen v1.0.15.
+ // Code below generated by codegen v1.0.18.
//
// DO NOT MODIFY!
// CHECKSTYLE:OFF Generated code
@@ -116,7 +103,6 @@
@IntDef(prefix = "STATUS_", value = {
STATUS_SUCCESSFUL,
STATUS_ANDROID_FAILURE,
- STATUS_HAL_INTERNAL_FAILURE,
STATUS_TARGET_USER_IS_CURRENT_USER,
STATUS_USER_DOES_NOT_EXIST,
STATUS_SUCCESSFUL_LAST_ADMIN_REMOVED
@@ -133,8 +119,6 @@
return "STATUS_SUCCESSFUL";
case STATUS_ANDROID_FAILURE:
return "STATUS_ANDROID_FAILURE";
- case STATUS_HAL_INTERNAL_FAILURE:
- return "STATUS_HAL_INTERNAL_FAILURE";
case STATUS_TARGET_USER_IS_CURRENT_USER:
return "STATUS_TARGET_USER_IS_CURRENT_USER";
case STATUS_USER_DOES_NOT_EXIST:
@@ -166,7 +150,6 @@
if (!(mStatus == STATUS_SUCCESSFUL)
&& !(mStatus == STATUS_ANDROID_FAILURE)
- && !(mStatus == STATUS_HAL_INTERNAL_FAILURE)
&& !(mStatus == STATUS_TARGET_USER_IS_CURRENT_USER)
&& !(mStatus == STATUS_USER_DOES_NOT_EXIST)
&& !(mStatus == STATUS_SUCCESSFUL_LAST_ADMIN_REMOVED)) {
@@ -174,7 +157,6 @@
"status was " + mStatus + " but must be one of: "
+ "STATUS_SUCCESSFUL(" + STATUS_SUCCESSFUL + "), "
+ "STATUS_ANDROID_FAILURE(" + STATUS_ANDROID_FAILURE + "), "
- + "STATUS_HAL_INTERNAL_FAILURE(" + STATUS_HAL_INTERNAL_FAILURE + "), "
+ "STATUS_TARGET_USER_IS_CURRENT_USER(" + STATUS_TARGET_USER_IS_CURRENT_USER + "), "
+ "STATUS_USER_DOES_NOT_EXIST(" + STATUS_USER_DOES_NOT_EXIST + "), "
+ "STATUS_SUCCESSFUL_LAST_ADMIN_REMOVED(" + STATUS_SUCCESSFUL_LAST_ADMIN_REMOVED + ")");
@@ -236,7 +218,6 @@
if (!(mStatus == STATUS_SUCCESSFUL)
&& !(mStatus == STATUS_ANDROID_FAILURE)
- && !(mStatus == STATUS_HAL_INTERNAL_FAILURE)
&& !(mStatus == STATUS_TARGET_USER_IS_CURRENT_USER)
&& !(mStatus == STATUS_USER_DOES_NOT_EXIST)
&& !(mStatus == STATUS_SUCCESSFUL_LAST_ADMIN_REMOVED)) {
@@ -244,7 +225,6 @@
"status was " + mStatus + " but must be one of: "
+ "STATUS_SUCCESSFUL(" + STATUS_SUCCESSFUL + "), "
+ "STATUS_ANDROID_FAILURE(" + STATUS_ANDROID_FAILURE + "), "
- + "STATUS_HAL_INTERNAL_FAILURE(" + STATUS_HAL_INTERNAL_FAILURE + "), "
+ "STATUS_TARGET_USER_IS_CURRENT_USER(" + STATUS_TARGET_USER_IS_CURRENT_USER + "), "
+ "STATUS_USER_DOES_NOT_EXIST(" + STATUS_USER_DOES_NOT_EXIST + "), "
+ "STATUS_SUCCESSFUL_LAST_ADMIN_REMOVED(" + STATUS_SUCCESSFUL_LAST_ADMIN_REMOVED + ")");
@@ -269,10 +249,10 @@
};
@DataClass.Generated(
- time = 1600198487158L,
- codegenVersion = "1.0.15",
+ time = 1603921355849L,
+ codegenVersion = "1.0.18",
sourceFile = "packages/services/Car/car-lib/src/android/car/user/UserRemovalResult.java",
- inputSignatures = "public static final int STATUS_SUCCESSFUL\npublic static final int STATUS_ANDROID_FAILURE\npublic static final int STATUS_HAL_INTERNAL_FAILURE\npublic static final int STATUS_TARGET_USER_IS_CURRENT_USER\npublic static final int STATUS_USER_DOES_NOT_EXIST\npublic static final int STATUS_SUCCESSFUL_LAST_ADMIN_REMOVED\nprivate final @android.car.user.UserRemovalResult.Status int mStatus\npublic boolean isSuccess()\nclass UserRemovalResult extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genToString=true, genHiddenConstructor=true, genHiddenConstDefs=true)")
+ inputSignatures = "public static final int STATUS_SUCCESSFUL\npublic static final int STATUS_ANDROID_FAILURE\npublic static final int STATUS_TARGET_USER_IS_CURRENT_USER\npublic static final int STATUS_USER_DOES_NOT_EXIST\npublic static final int STATUS_SUCCESSFUL_LAST_ADMIN_REMOVED\nprivate final @android.car.user.UserRemovalResult.Status int mStatus\npublic @java.lang.Override boolean isSuccess()\nclass UserRemovalResult extends java.lang.Object implements [android.os.Parcelable, android.car.user.OperationResult]\n@com.android.internal.util.DataClass(genToString=true, genHiddenConstructor=true, genHiddenConstDefs=true)")
@Deprecated
private void __metadata() {}
diff --git a/car-lib/src/android/car/user/UserSwitchResult.java b/car-lib/src/android/car/user/UserSwitchResult.java
index 5c1ca23..695511d 100644
--- a/car-lib/src/android/car/user/UserSwitchResult.java
+++ b/car-lib/src/android/car/user/UserSwitchResult.java
@@ -34,7 +34,7 @@
genToString = true,
genHiddenConstructor = true,
genHiddenConstDefs = true)
-public final class UserSwitchResult implements Parcelable {
+public final class UserSwitchResult implements Parcelable, OperationResult {
/**
* When user switch is successful for both HAL and Android.
@@ -65,6 +65,12 @@
public static final int STATUS_INVALID_REQUEST = CommonResults.STATUS_INVALID_REQUEST;
/**
+ * When user switch fails because of driving safety UX restrictions.
+ */
+ public static final int STATUS_UX_RESTRICTION_FAILURE =
+ CommonResults.STATUS_UX_RESTRICTION_FAILURE;
+
+ /**
* When target user is same as current user.
*/
public static final int STATUS_OK_USER_ALREADY_IN_FOREGROUND =
@@ -97,6 +103,7 @@
* {@link UserSwitchResult#STATUS_HAL_FAILURE},
* {@link UserSwitchResult#STATUS_HAL_INTERNAL_FAILURE},
* {@link UserSwitchResult#STATUS_INVALID_REQUEST},
+ * {@link UserSwitchResult#STATUS_UX_RESTRICTION_FAILURE},
* {@link UserSwitchResult#STATUS_OK_USER_ALREADY_IN_FOREGROUND},
* {@link UserSwitchResult#STATUS_TARGET_USER_ALREADY_BEING_SWITCHED_TO},
* {@link UserSwitchResult#STATUS_TARGET_USER_ABANDONED_DUE_TO_A_NEW_REQUEST}, or
@@ -110,18 +117,15 @@
@Nullable
private final String mErrorMessage;
- /**
- * Check if {@link UserSwitchResult} is successful.
- */
+ @Override
public boolean isSuccess() {
return mStatus == STATUS_SUCCESSFUL || mStatus == STATUS_OK_USER_ALREADY_IN_FOREGROUND;
}
- // TODO(b/158195639): if you change any status constant, you need to manually assign its values
- // (rather than using CommonResults) before running codegen to regenerate the class
- // Code below generated by codegen v1.0.15.
+
+ // Code below generated by codegen v1.0.18.
//
// DO NOT MODIFY!
// CHECKSTYLE:OFF Generated code
@@ -141,6 +145,7 @@
STATUS_HAL_FAILURE,
STATUS_HAL_INTERNAL_FAILURE,
STATUS_INVALID_REQUEST,
+ STATUS_UX_RESTRICTION_FAILURE,
STATUS_OK_USER_ALREADY_IN_FOREGROUND,
STATUS_TARGET_USER_ALREADY_BEING_SWITCHED_TO,
STATUS_TARGET_USER_ABANDONED_DUE_TO_A_NEW_REQUEST,
@@ -164,6 +169,8 @@
return "STATUS_HAL_INTERNAL_FAILURE";
case STATUS_INVALID_REQUEST:
return "STATUS_INVALID_REQUEST";
+ case STATUS_UX_RESTRICTION_FAILURE:
+ return "STATUS_UX_RESTRICTION_FAILURE";
case STATUS_OK_USER_ALREADY_IN_FOREGROUND:
return "STATUS_OK_USER_ALREADY_IN_FOREGROUND";
case STATUS_TARGET_USER_ALREADY_BEING_SWITCHED_TO:
@@ -187,6 +194,7 @@
* {@link UserSwitchResult#STATUS_HAL_FAILURE},
* {@link UserSwitchResult#STATUS_HAL_INTERNAL_FAILURE},
* {@link UserSwitchResult#STATUS_INVALID_REQUEST},
+ * {@link UserSwitchResult#STATUS_UX_RESTRICTION_FAILURE},
* {@link UserSwitchResult#STATUS_OK_USER_ALREADY_IN_FOREGROUND},
* {@link UserSwitchResult#STATUS_TARGET_USER_ALREADY_BEING_SWITCHED_TO},
* {@link UserSwitchResult#STATUS_TARGET_USER_ABANDONED_DUE_TO_A_NEW_REQUEST}, or
@@ -206,6 +214,7 @@
&& !(mStatus == STATUS_HAL_FAILURE)
&& !(mStatus == STATUS_HAL_INTERNAL_FAILURE)
&& !(mStatus == STATUS_INVALID_REQUEST)
+ && !(mStatus == STATUS_UX_RESTRICTION_FAILURE)
&& !(mStatus == STATUS_OK_USER_ALREADY_IN_FOREGROUND)
&& !(mStatus == STATUS_TARGET_USER_ALREADY_BEING_SWITCHED_TO)
&& !(mStatus == STATUS_TARGET_USER_ABANDONED_DUE_TO_A_NEW_REQUEST)
@@ -217,6 +226,7 @@
+ "STATUS_HAL_FAILURE(" + STATUS_HAL_FAILURE + "), "
+ "STATUS_HAL_INTERNAL_FAILURE(" + STATUS_HAL_INTERNAL_FAILURE + "), "
+ "STATUS_INVALID_REQUEST(" + STATUS_INVALID_REQUEST + "), "
+ + "STATUS_UX_RESTRICTION_FAILURE(" + STATUS_UX_RESTRICTION_FAILURE + "), "
+ "STATUS_OK_USER_ALREADY_IN_FOREGROUND(" + STATUS_OK_USER_ALREADY_IN_FOREGROUND + "), "
+ "STATUS_TARGET_USER_ALREADY_BEING_SWITCHED_TO(" + STATUS_TARGET_USER_ALREADY_BEING_SWITCHED_TO + "), "
+ "STATUS_TARGET_USER_ABANDONED_DUE_TO_A_NEW_REQUEST(" + STATUS_TARGET_USER_ABANDONED_DUE_TO_A_NEW_REQUEST + "), "
@@ -236,6 +246,7 @@
* {@link UserSwitchResult#STATUS_HAL_FAILURE},
* {@link UserSwitchResult#STATUS_HAL_INTERNAL_FAILURE},
* {@link UserSwitchResult#STATUS_INVALID_REQUEST},
+ * {@link UserSwitchResult#STATUS_UX_RESTRICTION_FAILURE},
* {@link UserSwitchResult#STATUS_OK_USER_ALREADY_IN_FOREGROUND},
* {@link UserSwitchResult#STATUS_TARGET_USER_ALREADY_BEING_SWITCHED_TO},
* {@link UserSwitchResult#STATUS_TARGET_USER_ABANDONED_DUE_TO_A_NEW_REQUEST}, or
@@ -301,6 +312,7 @@
&& !(mStatus == STATUS_HAL_FAILURE)
&& !(mStatus == STATUS_HAL_INTERNAL_FAILURE)
&& !(mStatus == STATUS_INVALID_REQUEST)
+ && !(mStatus == STATUS_UX_RESTRICTION_FAILURE)
&& !(mStatus == STATUS_OK_USER_ALREADY_IN_FOREGROUND)
&& !(mStatus == STATUS_TARGET_USER_ALREADY_BEING_SWITCHED_TO)
&& !(mStatus == STATUS_TARGET_USER_ABANDONED_DUE_TO_A_NEW_REQUEST)
@@ -312,6 +324,7 @@
+ "STATUS_HAL_FAILURE(" + STATUS_HAL_FAILURE + "), "
+ "STATUS_HAL_INTERNAL_FAILURE(" + STATUS_HAL_INTERNAL_FAILURE + "), "
+ "STATUS_INVALID_REQUEST(" + STATUS_INVALID_REQUEST + "), "
+ + "STATUS_UX_RESTRICTION_FAILURE(" + STATUS_UX_RESTRICTION_FAILURE + "), "
+ "STATUS_OK_USER_ALREADY_IN_FOREGROUND(" + STATUS_OK_USER_ALREADY_IN_FOREGROUND + "), "
+ "STATUS_TARGET_USER_ALREADY_BEING_SWITCHED_TO(" + STATUS_TARGET_USER_ALREADY_BEING_SWITCHED_TO + "), "
+ "STATUS_TARGET_USER_ABANDONED_DUE_TO_A_NEW_REQUEST(" + STATUS_TARGET_USER_ABANDONED_DUE_TO_A_NEW_REQUEST + "), "
@@ -338,14 +351,15 @@
};
@DataClass.Generated(
- time = 1592422606349L,
- codegenVersion = "1.0.15",
+ time = 1603921276651L,
+ codegenVersion = "1.0.18",
sourceFile = "packages/services/Car/car-lib/src/android/car/user/UserSwitchResult.java",
- inputSignatures = "public static final int STATUS_SUCCESSFUL\npublic static final int STATUS_ANDROID_FAILURE\npublic static final int STATUS_HAL_FAILURE\npublic static final int STATUS_HAL_INTERNAL_FAILURE\npublic static final int STATUS_INVALID_REQUEST\npublic static final int STATUS_OK_USER_ALREADY_IN_FOREGROUND\npublic static final int STATUS_TARGET_USER_ALREADY_BEING_SWITCHED_TO\npublic static final int STATUS_TARGET_USER_ABANDONED_DUE_TO_A_NEW_REQUEST\npublic static final int STATUS_NOT_SWITCHABLE\nprivate final @android.car.user.UserSwitchResult.Status int mStatus\nprivate final @android.annotation.Nullable java.lang.String mErrorMessage\npublic boolean isSuccess()\nclass UserSwitchResult extends java.lang.Object implements [android.os.Parcelable]\n@com.android.internal.util.DataClass(genToString=true, genHiddenConstructor=true, genHiddenConstDefs=true)")
+ inputSignatures = "public static final int STATUS_SUCCESSFUL\npublic static final int STATUS_ANDROID_FAILURE\npublic static final int STATUS_HAL_FAILURE\npublic static final int STATUS_HAL_INTERNAL_FAILURE\npublic static final int STATUS_INVALID_REQUEST\npublic static final int STATUS_OK_USER_ALREADY_IN_FOREGROUND\npublic static final int STATUS_TARGET_USER_ALREADY_BEING_SWITCHED_TO\npublic static final int STATUS_TARGET_USER_ABANDONED_DUE_TO_A_NEW_REQUEST\npublic static final int STATUS_NOT_SWITCHABLE\nprivate final @android.car.user.UserSwitchResult.Status int mStatus\nprivate final @android.annotation.Nullable java.lang.String mErrorMessage\npublic @java.lang.Override boolean isSuccess()\nclass UserSwitchResult extends java.lang.Object implements [android.os.Parcelable, android.car.user.OperationResult]\n@com.android.internal.util.DataClass(genToString=true, genHiddenConstructor=true, genHiddenConstDefs=true)")
@Deprecated
private void __metadata() {}
//@formatter:on
// End of generated code
+
}
diff --git a/car-lib/src/android/car/util/concurrent/AndroidAsyncFuture.java b/car-lib/src/android/car/util/concurrent/AndroidAsyncFuture.java
new file mode 100644
index 0000000..a9b5b0e
--- /dev/null
+++ b/car-lib/src/android/car/util/concurrent/AndroidAsyncFuture.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.car.util.concurrent;
+
+import android.annotation.NonNull;
+
+import com.android.internal.infra.AndroidFuture;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.function.BiConsumer;
+
+/**
+ * Implements {@link AsyncFuture} by wrapping a {@link AndroidFuture}.
+ *
+ * @hide
+ */
+public final class AndroidAsyncFuture<T> implements AsyncFuture<T> {
+
+ @NonNull
+ private final AndroidFuture<T> mFuture;
+
+ public AndroidAsyncFuture(@NonNull AndroidFuture<T> future) {
+ mFuture = future;
+ }
+ @Override
+ public T get() throws InterruptedException, ExecutionException {
+ return mFuture.get();
+ }
+
+ @Override
+ public T get(long timeout, TimeUnit unit)
+ throws InterruptedException, ExecutionException, TimeoutException {
+ return mFuture.get(timeout, unit);
+ }
+
+ @Override
+ public AsyncFuture<T> whenCompleteAsync(BiConsumer<? super T, ? super Throwable> action,
+ Executor executor) {
+ mFuture.whenCompleteAsync(action, executor);
+ return this;
+ }
+}
diff --git a/car-lib/src/android/car/util/concurrent/AsyncFuture.java b/car-lib/src/android/car/util/concurrent/AsyncFuture.java
new file mode 100644
index 0000000..0876c58
--- /dev/null
+++ b/car-lib/src/android/car/util/concurrent/AsyncFuture.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package android.car.util.concurrent;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.function.BiConsumer;
+
+/**
+ * Custom {@code Future} that provides a way to be handled asynchronously.
+ *
+ * <p><b>Note: it doesn't extend {@link java.util.concurrent.Future} because it's implemented by
+ * {@code AndroidFuture}, which doesn't propagate
+ * {@link java.util.concurrent.Future#cancel(boolean)} to the remote object.
+ *
+ * @param <T> type returned by the {@code Future}.
+ *
+ * @hide
+ */
+public interface AsyncFuture<T> {
+
+ /**
+ * See {@link java.util.concurrent.Future#get()}.
+ */
+ @Nullable
+ T get() throws InterruptedException, ExecutionException;
+
+ /**
+ * See {@link java.util.concurrent.Future#get(long, TimeUnit).
+ */
+ @Nullable
+ T get(long timeout, @NonNull TimeUnit unit)
+ throws InterruptedException, ExecutionException, TimeoutException;
+
+ /**
+ * See {@link java.util.concurrent.CompletableFuture#whenCompleteAsync(BiConsumer, Executor).
+ */
+ @NonNull
+ AsyncFuture<T> whenCompleteAsync(@NonNull BiConsumer<? super T, ? super Throwable> action,
+ @NonNull Executor executor);
+}
diff --git a/car-lib/src/com/android/car/internal/common/CommonConstants.java b/car-lib/src/com/android/car/internal/common/CommonConstants.java
new file mode 100644
index 0000000..82b158a
--- /dev/null
+++ b/car-lib/src/com/android/car/internal/common/CommonConstants.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright (C) 2020 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.car.internal.common;
+
+import android.annotation.IntDef;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Provides common constants for Car library, Car Service, and System Server.
+ *
+ * @hide
+ */
+public final class CommonConstants {
+
+ private CommonConstants() {
+ throw new UnsupportedOperationException("contains only static constants");
+ }
+
+ // CarUserManagerConstants
+
+ public static final int USER_LIFECYCLE_EVENT_TYPE_STARTING = 1;
+ public static final int USER_LIFECYCLE_EVENT_TYPE_SWITCHING = 2;
+ public static final int USER_LIFECYCLE_EVENT_TYPE_UNLOCKING = 3;
+ public static final int USER_LIFECYCLE_EVENT_TYPE_UNLOCKED = 4;
+ public static final int USER_LIFECYCLE_EVENT_TYPE_STOPPING = 5;
+ public static final int USER_LIFECYCLE_EVENT_TYPE_STOPPED = 6;
+
+ // CarService Constants
+ public static final String CAR_SERVICE_INTERFACE = "android.car.ICar";
+
+ @IntDef(prefix = { "USER_LIFECYCLE_EVENT_TYPE_" }, value = {
+ USER_LIFECYCLE_EVENT_TYPE_STARTING,
+ USER_LIFECYCLE_EVENT_TYPE_SWITCHING,
+ USER_LIFECYCLE_EVENT_TYPE_UNLOCKING,
+ USER_LIFECYCLE_EVENT_TYPE_UNLOCKED,
+ USER_LIFECYCLE_EVENT_TYPE_STOPPING,
+ USER_LIFECYCLE_EVENT_TYPE_STOPPED,
+ })
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface UserLifecycleEventType{}
+}
diff --git a/car-internal-lib/src/com/android/internal/car/EventLogTags.logtags b/car-lib/src/com/android/car/internal/common/EventLogTags.logtags
similarity index 89%
rename from car-internal-lib/src/com/android/internal/car/EventLogTags.logtags
rename to car-lib/src/com/android/car/internal/common/EventLogTags.logtags
index fcca8ae..1fd51b2 100644
--- a/car-internal-lib/src/com/android/internal/car/EventLogTags.logtags
+++ b/car-lib/src/com/android/car/internal/common/EventLogTags.logtags
@@ -15,7 +15,7 @@
# See system/core/logcat/event.logtags for a description of the format of this file.
-option java_package com.android.internal.car
+option java_package com.android.car.internal.common
####
#### Tags used by CarServiceHelperService
@@ -23,7 +23,7 @@
#### It uses the 150000 - 160000 range
####
-150000 car_helper_start (uses_hal|1)
+150000 car_helper_start
150001 car_helper_boot_phase (phase|1)
150002 car_helper_user_starting (user_id|1)
150003 car_helper_user_switching (from_user_id|1),(to_user_id|1)
@@ -37,8 +37,8 @@
150011 car_helper_hal_default_behavior (fallback|1),(user_locales|3)
150012 car_helper_hal_start_user (user_id|1),(user_locales|3)
150013 car_helper_hal_create_user (flags|1),(safe_name|3),(user_locales|3)
-150014 car_helper_pre_creation_requested (number_users|1),(number_guests|1)
-150015 car_helper_pre_creation_status (number_existing_users|1),(number_users_to_add|1),(number_users_to_remove|1),(number_existing_guests|1),(number_guests_to_add|1),(number_guests_to_remove|1),(number_invalid_users_to_remove|1)
+#150014 (Not_used_anymore) car_helper_pre_creation_requested
+#150015 (Not_used_anymore) car_helper_pre_creation_status
####
#### Tags used by ICarImpl / CarService
@@ -70,7 +70,7 @@
150104 car_user_svc_set_lifecycle_listener (uid|1)
150105 car_user_svc_reset_lifecycle_listener (uid|1)
150106 car_user_svc_switch_user_req (user_id|1),(timeout|1)
-150107 car_user_svc_switch_user_resp (status|1),(result|1),(error_message|3)
+150107 car_user_svc_switch_user_resp (hal_callback_status|1),(user_switch_status|1),(error_message|3)
150108 car_user_svc_post_switch_user_req (target_user_id|1),(current_user_id|1)
150109 car_user_svc_get_user_auth_req (uid|1),(user_id|1),(number_types|1)
150110 car_user_svc_get_user_auth_resp (number_values|1)
@@ -86,6 +86,8 @@
150120 car_user_svc_remove_user_resp (user_id|1),(result|1)
150121 car_user_svc_notify_app_lifecycle_listener (uid|1),(event_type|1),(from_user_id|1),(to_user_id|1)
150122 car_user_svc_notify_internal_lifecycle_listener (listener_name|3),(event_type|1),(from_user_id|1),(to_user_id|1)
+150123 car_user_svc_pre_creation_requested (number_users|1),(number_guests|1)
+150124 car_user_svc_pre_creation_status (number_existing_users|1),(number_users_to_add|1),(number_users_to_remove|1),(number_existing_guests|1),(number_guests_to_add|1),(number_guests_to_remove|1),(number_invalid_users_to_remove|1)
150140 car_user_hal_initial_user_info_req (request_id|1),(request_type|1),(timeout|1)
150141 car_user_hal_initial_user_info_resp (request_id|1),(status|1),(action|1),(user_id|1),(flags|1),(safe_name|3),(user_locales|3)
@@ -113,6 +115,6 @@
150179 car_user_mgr_set_user_auth_resp (values|4)
150180 car_user_mgr_create_user_req (uid|1),(safe_name|3),(user_type|3),(flags|1)
150181 car_user_mgr_create_user_resp (uid|1),(status|1),(error_message|3)
-150182 car_user_mgr_remove_user_req (uid|1),(user_id|1)
+150182 car_user_mgr_remove_user_req (uid|1),(user_id|1),(has_caller_restrictions|1)
150183 car_user_mgr_remove_user_resp (uid|1),(status|1)
150184 car_user_mgr_notify_lifecycle_listener (number_listeners|1),(event_type|1),(from_user_id|1),(to_user_id|1)
diff --git a/car-lib/src/com/android/car/internal/common/UserHelperLite.java b/car-lib/src/com/android/car/internal/common/UserHelperLite.java
new file mode 100644
index 0000000..4b43e06
--- /dev/null
+++ b/car-lib/src/com/android/car/internal/common/UserHelperLite.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2020 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.car.internal.common;
+
+import android.annotation.Nullable;
+import android.annotation.UserIdInt;
+import android.os.UserHandle;
+import android.os.UserManager;
+
+/**
+ * Provides user information related helper methods.
+ *
+ * @hide
+ */
+public final class UserHelperLite {
+
+ private UserHelperLite() {
+ throw new UnsupportedOperationException("contains only static methods");
+ }
+
+ /**
+ * Gets a PII-safe representation of the name.
+ */
+ @Nullable
+ public static String safeName(@Nullable String name) {
+ return name == null ? name : name.length() + "_chars";
+ }
+
+ /**
+ * Checks whether the given user is both {@code SYSTEM} and headless.
+ */
+ public static boolean isHeadlessSystemUser(@UserIdInt int userId) {
+ return userId == UserHandle.USER_SYSTEM && UserManager.isHeadlessSystemUserMode();
+ }
+}
diff --git a/car-maps-placeholder/AndroidManifest.xml b/car-maps-placeholder/AndroidManifest.xml
index 8c96130..52634dc 100644
--- a/car-maps-placeholder/AndroidManifest.xml
+++ b/car-maps-placeholder/AndroidManifest.xml
@@ -16,23 +16,23 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.car.mapsplaceholder">
- <uses-sdk
- android:minSdkVersion="23"
- android:targetSdkVersion="23" />
+ package="com.android.car.mapsplaceholder">
+ <uses-sdk android:minSdkVersion="23"
+ android:targetSdkVersion="23"/>
<application android:label="@string/app_name"
- android:icon="@drawable/logo_my_maps" >
+ android:icon="@drawable/logo_my_maps">
<activity android:name=".MapsPlaceholderActivity"
- android:theme="@style/CarMapsTheme"
- android:launchMode="singleTask"
- android:label="@string/app_name"
- android:resizeableActivity="true">
+ android:theme="@style/CarMapsTheme"
+ android:launchMode="singleTask"
+ android:label="@string/app_name"
+ android:resizeableActivity="true"
+ android:exported="true">
<intent-filter>
- <action android:name="android.intent.action.MAIN" />
+ <action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.DEFAULT"/>
- <category android:name="android.intent.category.APP_MAPS" />
+ <category android:name="android.intent.category.APP_MAPS"/>
</intent-filter>
</activity>
</application>
diff --git a/car-maps-placeholder/res/values-bn/strings.xml b/car-maps-placeholder/res/values-bn/strings.xml
index 35be0b5..ab3ccb0 100644
--- a/car-maps-placeholder/res/values-bn/strings.xml
+++ b/car-maps-placeholder/res/values-bn/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="6575346965016311017">"ম্যাপ"</string>
+ <string name="app_name" msgid="6575346965016311017">"Maps"</string>
<string name="error_text" msgid="5575174711944349180">"কোনও ম্যাপ অ্যাপ্লিকেশন ইনস্টল করা নেই। আপনার গাড়ির প্রস্তুতকারকের সাথে যোগাযোগ করুন।"</string>
</resources>
diff --git a/car-maps-placeholder/res/values-gu/strings.xml b/car-maps-placeholder/res/values-gu/strings.xml
index 75e3d1a..45e1af7 100644
--- a/car-maps-placeholder/res/values-gu/strings.xml
+++ b/car-maps-placeholder/res/values-gu/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="6575346965016311017">"નકશા"</string>
+ <string name="app_name" msgid="6575346965016311017">"Maps"</string>
<string name="error_text" msgid="5575174711944349180">"કોઈ નકશા એપ્લિકેશન ઇન્સ્ટૉલ કરેલ નથી. કૃપા કરીને તમારી કારના નિર્માતાનો સંપર્ક કરો."</string>
</resources>
diff --git a/car-maps-placeholder/res/values-hi/strings.xml b/car-maps-placeholder/res/values-hi/strings.xml
index fbb0c4a..f5a252e 100644
--- a/car-maps-placeholder/res/values-hi/strings.xml
+++ b/car-maps-placeholder/res/values-hi/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="6575346965016311017">"मैप"</string>
+ <string name="app_name" msgid="6575346965016311017">"Maps"</string>
<string name="error_text" msgid="5575174711944349180">"कोई मैप ऐप्लिकेशन इंस्टॉल नहीं किया हुआ है. कृपया अपनी कार के निर्माता से संपर्क करें."</string>
</resources>
diff --git a/car-maps-placeholder/res/values-kn/strings.xml b/car-maps-placeholder/res/values-kn/strings.xml
index 4a94e81..fdfd107 100644
--- a/car-maps-placeholder/res/values-kn/strings.xml
+++ b/car-maps-placeholder/res/values-kn/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="6575346965016311017">"ನಕ್ಷೆಗಳು"</string>
+ <string name="app_name" msgid="6575346965016311017">"Maps"</string>
<string name="error_text" msgid="5575174711944349180">"ನಕ್ಷೆಗಳ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಇನ್ಸ್ಟಾಲ್ ಮಾಡಿಲ್ಲ. ನಿಮ್ಮ ಕಾರಿನ ತಯಾರಕರನ್ನು ಸಂಪರ್ಕಿಸಿ."</string>
</resources>
diff --git a/car-maps-placeholder/res/values-ml/strings.xml b/car-maps-placeholder/res/values-ml/strings.xml
index 2581753..a46ff32 100644
--- a/car-maps-placeholder/res/values-ml/strings.xml
+++ b/car-maps-placeholder/res/values-ml/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="6575346965016311017">"മാപ്സ്"</string>
+ <string name="app_name" msgid="6575346965016311017">"Maps"</string>
<string name="error_text" msgid="5575174711944349180">"മാപ്സ് ആപ്പ് ഇൻസ്റ്റാൾ ചെയ്തിട്ടില്ല. നിങ്ങളുടെ കാറിന്റെ നിർമ്മാതാവുമായി ബന്ധപ്പെടുക."</string>
</resources>
diff --git a/car-maps-placeholder/res/values-mr/strings.xml b/car-maps-placeholder/res/values-mr/strings.xml
index 5e1fd78..b279d2f 100644
--- a/car-maps-placeholder/res/values-mr/strings.xml
+++ b/car-maps-placeholder/res/values-mr/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="6575346965016311017">"नकाशे"</string>
+ <string name="app_name" msgid="6575346965016311017">"Maps"</string>
<string name="error_text" msgid="5575174711944349180">"नकाशे अॅप्लिकेशन इंस्टॉल केलेले नाही. कृपया तुमच्या कार उत्पादकाशी संपर्क साधा."</string>
</resources>
diff --git a/car-maps-placeholder/res/values-ne/strings.xml b/car-maps-placeholder/res/values-ne/strings.xml
index a2aef6c..03412e9 100644
--- a/car-maps-placeholder/res/values-ne/strings.xml
+++ b/car-maps-placeholder/res/values-ne/strings.xml
@@ -17,5 +17,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6575346965016311017">"नक्सा"</string>
- <string name="error_text" msgid="5575174711944349180">"नक्सासम्बन्धी कुनै पनि अनुप्रयोगहरू स्थापना गरिएको छैन। कृपया आफ्नो कार निर्मातालाई सम्पर्क गर्नुहोस्।"</string>
+ <string name="error_text" msgid="5575174711944349180">"नक्सासम्बन्धी कुनै पनि एपहरू स्थापना गरिएको छैन। कृपया आफ्नो कार निर्मातालाई सम्पर्क गर्नुहोस्।"</string>
</resources>
diff --git a/car-maps-placeholder/res/values-or/strings.xml b/car-maps-placeholder/res/values-or/strings.xml
index 478cbc0..286fb8a 100644
--- a/car-maps-placeholder/res/values-or/strings.xml
+++ b/car-maps-placeholder/res/values-or/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="6575346965016311017">"ମ୍ୟାପ୍ସ"</string>
+ <string name="app_name" msgid="6575346965016311017">"Maps"</string>
<string name="error_text" msgid="5575174711944349180">"କୌଣସି ମ୍ୟାପ୍ସ ଆପ୍ଲିକେସନ୍ ଇନ୍ଷ୍ଟଲ୍ କରାଯାଇନାହିଁ। ଆପଣଙ୍କ କାର୍ର ଉତ୍ପାଦକଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।"</string>
</resources>
diff --git a/car-maps-placeholder/res/values-pa/strings.xml b/car-maps-placeholder/res/values-pa/strings.xml
index 1b0ef60..850de49 100644
--- a/car-maps-placeholder/res/values-pa/strings.xml
+++ b/car-maps-placeholder/res/values-pa/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="6575346965016311017">"ਨਕਸ਼ੇ"</string>
+ <string name="app_name" msgid="6575346965016311017">"Maps"</string>
<string name="error_text" msgid="5575174711944349180">"ਕੋਈ ਨਕਸ਼ਾ ਐਪਲੀਕੇਸ਼ਨ ਸਥਾਪਤ ਨਹੀਂ ਕੀਤੀ ਗਈ। ਕਿਰਪਾ ਕਰਕੇ ਆਪਣੀ ਕਾਰ ਦੇ ਨਿਰਮਾਤਾ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।"</string>
</resources>
diff --git a/car-maps-placeholder/res/values-ta/strings.xml b/car-maps-placeholder/res/values-ta/strings.xml
index 8d5e354..ed29fee 100644
--- a/car-maps-placeholder/res/values-ta/strings.xml
+++ b/car-maps-placeholder/res/values-ta/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="6575346965016311017">"வரைபடம்"</string>
+ <string name="app_name" msgid="6575346965016311017">"Maps"</string>
<string name="error_text" msgid="5575174711944349180">"வரைபட ஆப்ஸ் எதுவும் நிறுவப்படவில்லை. உங்கள் கார் உற்பத்தியாளரைத் தொடர்புகொள்ளவும்."</string>
</resources>
diff --git a/car-maps-placeholder/res/values-te/strings.xml b/car-maps-placeholder/res/values-te/strings.xml
index 987b654..96c809e 100644
--- a/car-maps-placeholder/res/values-te/strings.xml
+++ b/car-maps-placeholder/res/values-te/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="6575346965016311017">"మ్యాప్స్"</string>
+ <string name="app_name" msgid="6575346965016311017">"Maps"</string>
<string name="error_text" msgid="5575174711944349180">"మ్యాప్స్ అప్లికేషన్ ఇన్స్టాల్ చేయబడలేదు. దయచేసి మీ కారుని తయారు చేసినవారిని సంప్రదించండి"</string>
</resources>
diff --git a/car-test-lib/src/android/car/test/mocks/AbstractExtendedMockitoTestCase.java b/car-test-lib/src/android/car/test/mocks/AbstractExtendedMockitoTestCase.java
index 09d2670..6d44c81 100644
--- a/car-test-lib/src/android/car/test/mocks/AbstractExtendedMockitoTestCase.java
+++ b/car-test-lib/src/android/car/test/mocks/AbstractExtendedMockitoTestCase.java
@@ -31,6 +31,7 @@
import android.annotation.Nullable;
import android.annotation.UserIdInt;
import android.app.ActivityManager;
+import android.os.Binder;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Trace;
@@ -266,6 +267,21 @@
}
/**
+ * Mocks a call to {@link Binder.getCallingUserHandle()}.
+ *
+ * @throws IllegalStateException if class didn't override {@link #newSessionBuilder()} and
+ * called {@code spyStatic(Binder.class)} on the session passed to it.
+ */
+ protected final void mockGetCallingUserHandle(@UserIdInt int userId) {
+ if (VERBOSE) Log.v(TAG, getLogPrefix() + "mockBinderCallingUser(" + userId + ")");
+ assertSpied(Binder.class);
+
+ beginTrace("mockBinderCallingUser");
+ AndroidMockitoHelper.mockBinderGetCallingUserHandle(userId);
+ endTrace();
+ }
+
+ /**
* Starts a tracing message.
*
* <p>MUST be followed by a {@link #endTrace()} calls.
diff --git a/car-test-lib/src/android/car/test/mocks/AndroidMockitoHelper.java b/car-test-lib/src/android/car/test/mocks/AndroidMockitoHelper.java
index f6b15f2..83a023c 100644
--- a/car-test-lib/src/android/car/test/mocks/AndroidMockitoHelper.java
+++ b/car-test-lib/src/android/car/test/mocks/AndroidMockitoHelper.java
@@ -17,7 +17,6 @@
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
-import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.when;
@@ -27,32 +26,29 @@
import android.app.ActivityManager;
import android.car.test.util.UserTestingHelper;
import android.car.test.util.UserTestingHelper.UserInfoBuilder;
+import android.content.BroadcastReceiver;
import android.content.Context;
+import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.content.pm.UserInfo.UserInfoFlag;
+import android.os.Binder;
import android.os.IBinder;
import android.os.IInterface;
import android.os.ServiceManager;
import android.os.UserHandle;
import android.os.UserManager;
+import android.util.Log;
-import com.android.internal.infra.AndroidFuture;
-
-import java.util.Arrays;
import java.util.List;
import java.util.Objects;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.TimeoutException;
-import java.util.stream.Collectors;
/**
* Provides common Mockito calls for core Android classes.
*/
public final class AndroidMockitoHelper {
- private static final long ASYNC_TIMEOUT_MS = 500;
+ private static final String TAG = AndroidMockitoHelper.class.getSimpleName();
/**
* Mocks a call to {@link ActivityManager#getCurrentUser()}.
@@ -112,47 +108,37 @@
}
/**
- * Mocks {@code UserManager#getUsers()}, {@code UserManager#getUsers(excludeDying)}, and
- * {@code UserManager#getUsers(excludePartial, excludeDying, excludeDying)} to return the given
- * users.
+ * Mocks {@code UserManager#getAliveUsers()} to return the given users.
*/
- public static void mockUmGetUsers(@NonNull UserManager um, @NonNull UserInfo... users) {
+ public static void mockUmGetAliveUsers(@NonNull UserManager um, @NonNull UserInfo... users) {
Objects.requireNonNull(um);
- List<UserInfo> testUsers = Arrays.stream(users).collect(Collectors.toList());
- when(um.getUsers()).thenReturn(testUsers);
- when(um.getUsers(anyBoolean())).thenReturn(testUsers);
- when(um.getUsers(anyBoolean(), anyBoolean(), anyBoolean())).thenReturn(testUsers);
+ when(um.getAliveUsers()).thenReturn(UserTestingHelper.toList(users));
}
/**
- * Mocks {@code UserManager#getUsers()}, {@code UserManager#getUsers(excludeDying)}, and
- * {@code UserManager#getUsers(excludePartial, excludeDying, excludeDying)} to return simple
- * users with the given ids.
+ * Mocks {@code UserManager#getAliveUsers()} to return the simple users with the given ids.
*/
- public static void mockUmGetUsers(@NonNull UserManager um, @NonNull @UserIdInt int... userIds) {
+ public static void mockUmGetAliveUsers(@NonNull UserManager um,
+ @NonNull @UserIdInt int... userIds) {
List<UserInfo> users = UserTestingHelper.newUsers(userIds);
- when(um.getUsers()).thenReturn(users);
- when(um.getUsers(anyBoolean())).thenReturn(users);
- when(um.getUsers(anyBoolean(), anyBoolean(), anyBoolean())).thenReturn(users);
+ when(um.getAliveUsers()).thenReturn(users);
+ }
+
+ /**
+ * Mocks {@code UserManager#getUsers(excludePartial, excludeDying, excludeDying)} to return the
+ * given users.
+ */
+ public static void mockUmGetUsers(@NonNull UserManager um, boolean excludePartial,
+ boolean excludeDying, boolean excludePreCreated, @NonNull List<UserInfo> users) {
+ Objects.requireNonNull(um);
+ when(um.getUsers(excludePartial, excludeDying, excludePreCreated)).thenReturn(users);
}
/**
* Mocks a call to {@code UserManager#getUsers()}, which includes dying users.
*/
- public static void mockUmGetAllUsers(@NonNull UserManager um,
- @NonNull List<UserInfo> userInfos) {
- when(um.getUsers()).thenReturn(userInfos);
- }
-
- /**
- * Mocks {@code UserManager#getUsers()}, {@code UserManager#getUsers(excludeDying)}, and
- * {@code UserManager#getUsers(excludePartial, excludeDying, excludeDying)} to return given
- * userInfos.
- */
- public static void mockUmGetUsers(@NonNull UserManager um, @NonNull List<UserInfo> userInfos) {
- when(um.getUsers()).thenReturn(userInfos);
- when(um.getUsers(anyBoolean())).thenReturn(userInfos);
- when(um.getUsers(anyBoolean(), anyBoolean(), anyBoolean())).thenReturn(userInfos);
+ public static void mockUmGetAllUsers(@NonNull UserManager um, @NonNull UserInfo... userInfos) {
+ when(um.getUsers()).thenReturn(UserTestingHelper.toList(userInfos));
}
/**
@@ -190,6 +176,21 @@
}
/**
+ * Mocks a successful call to {@code UserManager#removeUser(int)}, including the respective
+ * {@code receiver} notification.
+ */
+ public static void mockUmRemoveUser(@NonNull Context context, @NonNull UserManager um,
+ @NonNull BroadcastReceiver receiver, @UserIdInt int userId) {
+ when(um.removeUser(userId)).thenAnswer((inv) -> {
+ Intent intent = new Intent(Intent.ACTION_USER_REMOVED);
+ intent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
+ Log.v(TAG, "mockUmRemoveUser(): broadcasting " + intent + " to " + receiver);
+ receiver.onReceive(context, intent);
+ return true;
+ });
+ }
+
+ /**
* Mocks a call to {@link ServiceManager#getService(name)}.
*
* <p><b>Note: </b>it must be made inside a
@@ -221,6 +222,19 @@
}
/**
+ * Mocks a call to {@link Binder.getCallingUserHandle()}.
+ *
+ * <p><b>Note: </b>it must be made inside a
+ * {@link com.android.dx.mockito.inline.extended.StaticMockitoSession} built with
+ * {@code spyStatic(Binder.class)}.
+ *
+ * @param userId identifier of the {@link UserHandle} that will be returned.
+ */
+ public static void mockBinderGetCallingUserHandle(@UserIdInt int userId) {
+ doReturn(UserHandle.of(userId)).when(() -> Binder.getCallingUserHandle());
+ }
+
+ /**
* Mocks a call to {@link Context#getSystemService(Class)}.
*/
public static <T> void mockContextGetService(@NonNull Context context,
@@ -231,29 +245,6 @@
}
}
- /**
- * Gets the result of a future, or throw a {@link IllegalStateException} if it times out after
- * {@value #ASYNC_TIMEOUT_MS} ms.
- */
- @NonNull
- public static <T> T getResult(@NonNull AndroidFuture<T> future)
- throws InterruptedException, ExecutionException {
- return getResult(future, ASYNC_TIMEOUT_MS);
- }
-
- /**
- * Gets the result of a future, or throw a {@link IllegalStateException} if it times out.
- */
- @NonNull
- public static <T> T getResult(@NonNull AndroidFuture<T> future, long timeoutMs)
- throws InterruptedException, ExecutionException {
- try {
- return future.get(timeoutMs, TimeUnit.MILLISECONDS);
- } catch (TimeoutException e) {
- throw new IllegalStateException("not called in " + ASYNC_TIMEOUT_MS + "ms", e);
- }
- }
-
private AndroidMockitoHelper() {
throw new UnsupportedOperationException("contains only static methods");
}
diff --git a/car-test-lib/src/android/car/test/mocks/JavaMockitoHelper.java b/car-test-lib/src/android/car/test/mocks/JavaMockitoHelper.java
index ab772a9..aaf12a7 100644
--- a/car-test-lib/src/android/car/test/mocks/JavaMockitoHelper.java
+++ b/car-test-lib/src/android/car/test/mocks/JavaMockitoHelper.java
@@ -19,14 +19,19 @@
import android.util.Log;
import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Future;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
/**
* Provides common Mockito calls for core Java classes.
*/
public final class JavaMockitoHelper {
+ private static final long ASYNC_TIMEOUT_MS = 500;
+
private static final String TAG = JavaMockitoHelper.class.getSimpleName();
/**
@@ -79,6 +84,33 @@
return called;
}
+ /**
+ * Gets the result of a future, or throw a {@link IllegalStateException} if it times out after
+ * {@value #ASYNC_TIMEOUT_MS} ms.
+ */
+ @NonNull
+ public static <T> T getResult(@NonNull Future<T> future)
+ throws InterruptedException, ExecutionException {
+ return getResult(future, ASYNC_TIMEOUT_MS);
+ }
+
+ /**
+ * Gets the result of a future, or throw a {@link IllegalStateException} if it times out.
+ */
+ @NonNull
+ public static <T> T getResult(@NonNull Future<T> future, long timeoutMs) {
+ try {
+ return future.get(timeoutMs, TimeUnit.MILLISECONDS);
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ throw new IllegalStateException("future interrupted", e);
+ } catch (TimeoutException e) {
+ throw new IllegalStateException("future not called in " + ASYNC_TIMEOUT_MS + "ms", e);
+ } catch (ExecutionException e) {
+ throw new IllegalStateException("failed to get future", e);
+ }
+ }
+
private JavaMockitoHelper() {
throw new UnsupportedOperationException("contains only static methods");
}
diff --git a/car-test-lib/src/android/car/test/util/UserTestingHelper.java b/car-test-lib/src/android/car/test/util/UserTestingHelper.java
index d1c2f13..ae90cbb 100644
--- a/car-test-lib/src/android/car/test/util/UserTestingHelper.java
+++ b/car-test-lib/src/android/car/test/util/UserTestingHelper.java
@@ -54,6 +54,14 @@
}
/**
+ * Creates a list of {@link UserInfo UserInfos}.
+ */
+ @NonNull
+ public static List<UserInfo> toList(@NonNull UserInfo... users) {
+ return Arrays.stream(users).collect(Collectors.toList());
+ }
+
+ /**
* Creates a {@link UserInfo} with the type explicitly set and with the given {@code userId}.
*/
@NonNull
diff --git a/car-test-lib/src/android/car/testapi/BlockingUserLifecycleListener.java b/car-test-lib/src/android/car/testapi/BlockingUserLifecycleListener.java
index 5ed572f..627aa86 100644
--- a/car-test-lib/src/android/car/testapi/BlockingUserLifecycleListener.java
+++ b/car-test-lib/src/android/car/testapi/BlockingUserLifecycleListener.java
@@ -21,10 +21,10 @@
import android.annotation.UserIdInt;
import android.car.user.CarUserManager;
import android.car.user.CarUserManager.UserLifecycleEvent;
-import android.car.user.CarUserManager.UserLifecycleEventType;
import android.car.user.CarUserManager.UserLifecycleListener;
import android.util.Log;
+import com.android.car.internal.common.CommonConstants.UserLifecycleEventType;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.Preconditions;
diff --git a/car-test-lib/src/android/car/testapi/CarTestingHelper.java b/car-test-lib/src/android/car/testapi/CarTestingHelper.java
new file mode 100644
index 0000000..c47e345
--- /dev/null
+++ b/car-test-lib/src/android/car/testapi/CarTestingHelper.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.car.testapi;
+
+import android.annotation.NonNull;
+import android.car.util.concurrent.AsyncFuture;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
+/**
+ * Provides common helpers for generic car-related classes.
+ */
+public final class CarTestingHelper {
+
+ private static final long ASYNC_TIMEOUT_MS = 500;
+
+ /**
+ * Gets the result of a future, or throw a {@link IllegalStateException} if it times out after
+ * {@value #ASYNC_TIMEOUT_MS} ms.
+ */
+ @NonNull
+ public static <T> T getResult(@NonNull AsyncFuture<T> future)
+ throws InterruptedException, ExecutionException {
+ return getResult(future, ASYNC_TIMEOUT_MS);
+ }
+
+ /**
+ * Gets the result of a future, or throw a {@link IllegalStateException} if it times out.
+ */
+ @NonNull
+ public static <T> T getResult(@NonNull AsyncFuture<T> future, long timeoutMs) {
+ try {
+ return future.get(timeoutMs, TimeUnit.MILLISECONDS);
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ throw new IllegalStateException("future interrupted", e);
+ } catch (TimeoutException e) {
+ throw new IllegalStateException("future not called in " + ASYNC_TIMEOUT_MS + "ms", e);
+ } catch (ExecutionException e) {
+ throw new IllegalStateException("failed to get future", e);
+ }
+ }
+
+ private CarTestingHelper() {
+ throw new UnsupportedOperationException("contains only static methods");
+ }
+
+}
diff --git a/car-test-lib/src/android/car/testapi/FakeCar.java b/car-test-lib/src/android/car/testapi/FakeCar.java
index 805359d..4a3a98a 100644
--- a/car-test-lib/src/android/car/testapi/FakeCar.java
+++ b/car-test-lib/src/android/car/testapi/FakeCar.java
@@ -25,7 +25,6 @@
import android.car.drivingstate.ICarDrivingState;
import android.car.hardware.power.ICarPower;
import android.car.media.ICarAudio;
-import android.car.settings.ICarConfigurationManager;
import android.car.storagemonitoring.ICarStorageMonitoring;
import android.content.Context;
import android.os.IBinder;
@@ -138,7 +137,6 @@
@Mock ICarBluetooth.Stub mCarBluetooth;
@Mock ICarStorageMonitoring.Stub mCarStorageMonitoring;
@Mock ICarDrivingState.Stub mCarDrivingState;
- @Mock ICarConfigurationManager.Stub mCarConfigurationManager;
private final FakeAppFocusService mAppFocus;
private final FakeCarPropertyService mCarProperty;
@@ -156,29 +154,8 @@
}
@Override
- public void setCarServiceHelper(IBinder helper) throws RemoteException {
- // Nothing to do yet.
- }
-
- @Override
- public void onUserLifecycleEvent(int eventType, long timestampMs, int fromUserId,
- int toUserId) {
- // Nothing to do yet.
- }
-
- @Override
- public void onFirstUserUnlocked(int userId, long timestampMs, long duration,
- int halResponseTime) {
- // Nothing to do yet.
- }
-
- @Override
- public void getInitialUserInfo(int requestType, int timeoutMs, IBinder binder) {
- // Nothing to do yet.
- }
-
- @Override
- public void setInitialUser(int userId) {
+ public void setSystemServerConnections(IBinder helper, IBinder receiver)
+ throws RemoteException {
// Nothing to do yet.
}
@@ -216,8 +193,6 @@
return mCarDrivingState;
case Car.CAR_UX_RESTRICTION_SERVICE:
return mCarUxRestrictionService;
- case Car.CAR_CONFIGURATION_SERVICE:
- return mCarConfigurationManager;
default:
Log.w(TAG, "getCarService for unknown service:" + serviceName);
return null;
diff --git a/car-usb-handler/Android.mk b/car-usb-handler/Android.mk
index c764897..64399e4 100644
--- a/car-usb-handler/Android.mk
+++ b/car-usb-handler/Android.mk
@@ -35,7 +35,7 @@
LOCAL_JAVA_LIBRARIES += android.car
-LOCAL_REQUIRED_MODULES := privapp_whitelist_android.car.usb.handler
+LOCAL_REQUIRED_MODULES := allowed_privapp_android.car.usb.handler
include $(BUILD_PACKAGE)
diff --git a/car-usb-handler/AndroidManifest.xml b/car-usb-handler/AndroidManifest.xml
index 8eac7a0..75617c9 100644
--- a/car-usb-handler/AndroidManifest.xml
+++ b/car-usb-handler/AndroidManifest.xml
@@ -29,7 +29,7 @@
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
- <!-- "queries" to specify what car-usb-handler will query for due to Android 11's
+ <!-- "queries" to specify what car-usb-handler will query for due to Android 11's
package visibility update. -->
<queries>
<intent>
diff --git a/car-usb-handler/res/values-ky/strings.xml b/car-usb-handler/res/values-ky/strings.xml
index f88d6fe..2dabb58 100644
--- a/car-usb-handler/res/values-ky/strings.xml
+++ b/car-usb-handler/res/values-ky/strings.xml
@@ -19,7 +19,7 @@
<string name="app_name" msgid="6963366455471441257">"USB иштеткичи"</string>
<string name="usb_saved_devices" msgid="2829442070749964872">"Сакталган түзмөктөр"</string>
<string name="usb_pref_delete_title" msgid="3885061814853467483">"USB түзмөгү үчүн иштетилген колдонмону алып салуу"</string>
- <string name="usb_pref_delete_message" msgid="5849493572520646218">"%1$s үчүн демейки колдонмону чын эле жок кылгыңыз келеби?"</string>
+ <string name="usb_pref_delete_message" msgid="5849493572520646218">"%1$s үчүн демейки колдонмону чын эле өчүрөсүзбү?"</string>
<string name="usb_pref_delete_yes" msgid="7803356145103146036">"Ооба"</string>
<string name="usb_pref_delete_cancel" msgid="5999791462730255929">"Жок"</string>
<string name="usb_resolving_handlers" msgid="1943100136172948686">"Колдоого алынган иштеткичтерди алуу"</string>
diff --git a/car-usb-handler/res/values-ne/strings.xml b/car-usb-handler/res/values-ne/strings.xml
index a181597..806be7c 100644
--- a/car-usb-handler/res/values-ne/strings.xml
+++ b/car-usb-handler/res/values-ne/strings.xml
@@ -18,8 +18,8 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_name" msgid="6963366455471441257">"USB ह्यान्ड्लर"</string>
<string name="usb_saved_devices" msgid="2829442070749964872">"सुरक्षित गरिएका यन्त्रहरू"</string>
- <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB यन्त्रको व्यवस्थापन गर्ने अनुप्रयोग हटाउनुहोस्"</string>
- <string name="usb_pref_delete_message" msgid="5849493572520646218">"तपाईंले %1$s को व्यवस्थापन गर्ने पूर्वनिर्धारित अनुप्रयोग मेट्न खोज्नुभएकै हो?"</string>
+ <string name="usb_pref_delete_title" msgid="3885061814853467483">"USB यन्त्रको व्यवस्थापन गर्ने एप हटाउनुहोस्"</string>
+ <string name="usb_pref_delete_message" msgid="5849493572520646218">"तपाईंले %1$s को व्यवस्थापन गर्ने पूर्वनिर्धारित एप मेट्न खोज्नुभएकै हो?"</string>
<string name="usb_pref_delete_yes" msgid="7803356145103146036">"हो"</string>
<string name="usb_pref_delete_cancel" msgid="5999791462730255929">"रद्द गर्नुहोस्"</string>
<string name="usb_resolving_handlers" msgid="1943100136172948686">"समर्थित ह्यान्ड्लरहरू प्राप्त गर्दै"</string>
diff --git a/car-usb-handler/res/values-te/strings.xml b/car-usb-handler/res/values-te/strings.xml
index a8dd520..25cd088 100644
--- a/car-usb-handler/res/values-te/strings.xml
+++ b/car-usb-handler/res/values-te/strings.xml
@@ -19,9 +19,7 @@
<string name="app_name" msgid="6963366455471441257">"USB హ్యాండ్లర్"</string>
<string name="usb_saved_devices" msgid="2829442070749964872">"సేవ్ చేసిన పరికరాలు"</string>
<string name="usb_pref_delete_title" msgid="3885061814853467483">"USB పరికర కొరకు హాండీలింగ్ యాప్ని తొలగించండి"</string>
- <!-- String.format failed for translation -->
- <!-- no translation found for usb_pref_delete_message (5849493572520646218) -->
- <skip />
+ <string name="usb_pref_delete_message" msgid="5849493572520646218">"%1$sను ఆటోమేటిక్గా హ్యాండిల్ చేసే యాప్ను ఖచ్చితంగా తొలగించాలని మీరు అనుకుంటున్నారా?"</string>
<string name="usb_pref_delete_yes" msgid="7803356145103146036">"అవును"</string>
<string name="usb_pref_delete_cancel" msgid="5999791462730255929">"రద్దు చేయి"</string>
<string name="usb_resolving_handlers" msgid="1943100136172948686">"మద్దతుగల హ్యాండ్లర్లను పొందడం"</string>
diff --git a/car-usb-handler/res/values-ur/strings.xml b/car-usb-handler/res/values-ur/strings.xml
index 0fe5553..109dd4c 100644
--- a/car-usb-handler/res/values-ur/strings.xml
+++ b/car-usb-handler/res/values-ur/strings.xml
@@ -19,9 +19,7 @@
<string name="app_name" msgid="6963366455471441257">"USB ہینڈلر"</string>
<string name="usb_saved_devices" msgid="2829442070749964872">"محفوظ کردہ آلات"</string>
<string name="usb_pref_delete_title" msgid="3885061814853467483">"USB آلہ کو ہینڈل کرنے والی اپپ کو ہٹائیں"</string>
- <!-- String.format failed for translation -->
- <!-- no translation found for usb_pref_delete_message (5849493572520646218) -->
- <skip />
+ <string name="usb_pref_delete_message" msgid="5849493572520646218">"کیا آپ واقعی %1$s اپپ کی ڈیفالٹ ہینڈلنگ کو حذف کرنا چاہتے ہیں؟"</string>
<string name="usb_pref_delete_yes" msgid="7803356145103146036">"ہاں"</string>
<string name="usb_pref_delete_cancel" msgid="5999791462730255929">"منسوخ کریں"</string>
<string name="usb_resolving_handlers" msgid="1943100136172948686">"تعاون یافتہ ہینڈلرز حاصل کر رہے ہیں"</string>
diff --git a/car-usb-handler/src/android/car/usb/handler/AoapInterface.java b/car-usb-handler/src/android/car/usb/handler/AoapInterface.java
index 7587392..b17fe28 100644
--- a/car-usb-handler/src/android/car/usb/handler/AoapInterface.java
+++ b/car-usb-handler/src/android/car/usb/handler/AoapInterface.java
@@ -105,9 +105,9 @@
/**
* Set of VID:PID pairs denylisted through config_AoapIncompatibleDeviceIds. Only
- * isDeviceBlacklisted() should ever access this variable.
+ * isDeviceDenylisted() should ever access this variable.
*/
- private static Set<Pair<Integer, Integer>> sBlacklistedVidPidPairs;
+ private static Set<Pair<Integer, Integer>> sDenylistedVidPidPairs;
private static final String TAG = AoapInterface.class.getSimpleName();
@@ -139,7 +139,7 @@
}
public static boolean isSupported(Context context, UsbDevice device, UsbDeviceConnection conn) {
- return !isDeviceBlacklisted(context, device) && getProtocol(conn) >= 1;
+ return !isDeviceDenylisted(context, device) && getProtocol(conn) >= 1;
}
public static void sendString(UsbDeviceConnection conn, int index, String string)
@@ -166,9 +166,9 @@
}
}
- public static synchronized boolean isDeviceBlacklisted(Context context, UsbDevice device) {
- if (sBlacklistedVidPidPairs == null) {
- sBlacklistedVidPidPairs = new HashSet<>();
+ public static synchronized boolean isDeviceDenylisted(Context context, UsbDevice device) {
+ if (sDenylistedVidPidPairs == null) {
+ sDenylistedVidPidPairs = new HashSet<>();
String[] idPairs =
context.getResources().getStringArray(R.array.config_AoapIncompatibleDeviceIds);
for (String idPair : idPairs) {
@@ -176,7 +176,7 @@
String[] tokens = idPair.split(":");
if (tokens.length == 2) {
try {
- sBlacklistedVidPidPairs.add(Pair.create(Integer.parseInt(tokens[0], 16),
+ sDenylistedVidPidPairs.add(Pair.create(Integer.parseInt(tokens[0], 16),
Integer.parseInt(tokens[1], 16)));
success = true;
} catch (NumberFormatException e) {
@@ -189,7 +189,7 @@
}
}
- return sBlacklistedVidPidPairs.contains(Pair.create(device.getVendorId(),
+ return sDenylistedVidPidPairs.contains(Pair.create(device.getVendorId(),
device.getProductId()));
}
diff --git a/car_product/build/car.mk b/car_product/build/car.mk
index 7a68a66..3f62c4c 100644
--- a/car_product/build/car.mk
+++ b/car_product/build/car.mk
@@ -21,10 +21,10 @@
PRODUCT_PACKAGES += \
Bluetooth \
- CarDeveloperOptions \
+ CarDeveloperOptions2 \
CompanionDeviceSupport \
OneTimeInitializer \
- Provision \
+ CarProvision \
StatementService \
SystemUpdater
@@ -56,9 +56,23 @@
ro.carrier=unknown
PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
- ro.fw.mu.headless_system_user=true \
config.disable_systemtextclassifier=true
+###
+### Suggested values for multi-user properties - can be overridden
+###
+
+# Enable headless system user mode
+PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
+ ro.fw.mu.headless_system_user?=true
+
+# Enable user pre-creation
+PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
+ android.car.number_pre_created_users?=1 \
+ android.car.number_pre_created_guests?=1
+
+### end of multi-user properties ###
+
# Overlay for Google network and fused location providers
$(call inherit-product, device/sample/products/location_overlay.mk)
$(call inherit-product-if-exists, frameworks/webview/chromium/chromium.mk)
@@ -103,6 +117,10 @@
com.android.car.procfsinspector \
libcar-framework-service-jni \
+# RROs
+PRODUCT_PACKAGES += \
+ CarPermissionControllerRRO \
+
# System Server components
# Order is important: if X depends on Y, then Y should precede X on the list.
PRODUCT_SYSTEM_SERVER_JARS += car-frameworks-service
diff --git a/car_product/build/car_base.mk b/car_product/build/car_base.mk
index 531aa1e..53cbb52 100644
--- a/car_product/build/car_base.mk
+++ b/car_product/build/car_base.mk
@@ -64,17 +64,28 @@
PackageInstaller \
car-bugreportd \
-# EVS resources
-PRODUCT_PACKAGES += android.automotive.evs.manager@1.1
-# The following packages, or their vendor specific equivalents should be include in the device.mk
-#PRODUCT_PACKAGES += evs_app
-#PRODUCT_PACKAGES += evs_app_default_resources
-#PRODUCT_PACKAGES += android.hardware.automotive.evs@1.0-service
+# EVS service
+include packages/services/Car/cpp/evs/manager/evsmanager.mk
# EVS manager overrides cameraserver on automotive implementations so
# we need to configure Camera API to not connect to it
PRODUCT_PROPERTY_OVERRIDES += config.disable_cameraservice=true
+ifeq ($(ENABLE_EVS_SAMPLE), true)
+# ENABLE_EVS_SAMPLE should set be true or their vendor specific equivalents should be included in
+# the device.mk with the corresponding selinux policies
+PRODUCT_PRODUCT_PROPERTIES += persist.automotive.evs.mode=0
+PRODUCT_PACKAGES += evs_app \
+ android.hardware.automotive.evs@1.1-sample \
+ android.frameworks.automotive.display@1.0-service
+include packages/services/Car/cpp/evs/apps/sepolicy/evsapp.mk
+include packages/services/Car/cpp/evs/sampleDriver/sepolicy/evsdriver.mk
+endif
+ifeq ($(ENABLE_REAR_VIEW_CAMERA_SAMPLE), true)
+PRODUCT_PACKAGES += SampleRearViewCamera
+PRODUCT_PACKAGE_OVERLAYS += packages/services/Car/tests/SampleRearViewCamera/overlay
+endif
+
# Device running Android is a car
PRODUCT_COPY_FILES += \
frameworks/native/data/etc/android.hardware.type.automotive.xml:system/etc/permissions/android.hardware.type.automotive.xml
@@ -96,4 +107,7 @@
packages/services/Car/car_product/init/init.car.rc:system/etc/init/init.car.rc
# Enable car watchdog
-include packages/services/Car/watchdog/product/carwatchdog.mk
+include packages/services/Car/cpp/watchdog/product/carwatchdog.mk
+
+# Enable car power policy
+include packages/services/Car/cpp/powerpolicy/product/carpowerpolicy.mk
diff --git a/car_product/build/default-car-permissions.xml b/car_product/build/default-car-permissions.xml
index c36f78c..6e1a8c3 100644
--- a/car_product/build/default-car-permissions.xml
+++ b/car_product/build/default-car-permissions.xml
@@ -42,13 +42,9 @@
-->
<exception
- package="com.android.car.messenger">
- <!-- Contacts -->
- <permission name="android.permission.READ_CONTACTS" fixed="false"/>
-
- <!-- SMS -->
- <permission name="android.permission.SEND_SMS" fixed="false"/>
- <permission name="android.permission.READ_SMS" fixed="false"/>
+ package="android.car.cluster">
+ <permission name="android.car.permission.CAR_ENERGY" fixed="false"/>
+ <permission name="android.car.permission.CAR_SPEED" fixed="false"/>
</exception>
</exceptions>
diff --git a/car_product/build/preinstalled-packages-product-car-base.xml b/car_product/build/preinstalled-packages-product-car-base.xml
index bf62fa1..3523228 100644
--- a/car_product/build/preinstalled-packages-product-car-base.xml
+++ b/car_product/build/preinstalled-packages-product-car-base.xml
@@ -188,6 +188,12 @@
<install-in user-type="SYSTEM" />
</install-in-user-type>
+ <!-- Needed for new developer options module (under settings package) -->
+ <install-in-user-type package="com.android.settings">
+ <install-in user-type="FULL" />
+ <install-in user-type="SYSTEM" />
+ </install-in-user-type>
+
<!--
Apps that do need to run on SYSTEM and evaluated by package owner.
Here the apps will have FULL only.
@@ -243,12 +249,6 @@
<install-in-user-type package="com.android.statementservice">
<install-in user-type="FULL" />
</install-in-user-type>
- <install-in-user-type package="com.android.backupconfirm">
- <install-in user-type="FULL" />
- </install-in-user-type>
- <install-in-user-type package="com.android.calllogbackup">
- <install-in user-type="FULL" />
- </install-in-user-type>
<install-in-user-type package="com.android.providers.blockednumber">
<install-in user-type="FULL" />
</install-in-user-type>
@@ -267,18 +267,6 @@
<install-in-user-type package="com.android.voicetrigger">
<install-in user-type="FULL" />
</install-in-user-type>
- <install-in-user-type package="com.android.internal.display.cutout.emulation.hole">
- <install-in user-type="FULL" />
- </install-in-user-type>
- <install-in-user-type package="com.android.internal.display.cutout.emulation.waterfall">
- <install-in user-type="FULL" />
- </install-in-user-type>
- <install-in-user-type package="android.auto_generated_rro_product__">
- <install-in user-type="FULL" />
- </install-in-user-type>
- <install-in-user-type package="android.auto_generated_rro_vendor__">
- <install-in user-type="FULL" />
- </install-in-user-type>
<install-in-user-type package="com.android.car.calendar">
<install-in user-type="FULL" />
</install-in-user-type>
@@ -309,13 +297,13 @@
<install-in-user-type package="com.android.vpndialogs">
<install-in user-type="FULL" />
</install-in-user-type>
- <install-in-user-type package="com.android.sharedstoragebackup">
- <install-in user-type="FULL" />
- </install-in-user-type>
<install-in-user-type package="com.android.externalstorage">
<install-in user-type="FULL" />
</install-in-user-type>
<install-in-user-type package="com.android.hotspot2.osulogin">
<install-in user-type="FULL" />
</install-in-user-type>
+ <install-in-user-type package="com.android.permissioncontroller.car.rro">
+ <install-in user-type="FULL" />
+ </install-in-user-type>
</config>
diff --git a/car_product/overlay-visual/frameworks/base/core/res/res/values/dimens.xml b/car_product/overlay-visual/frameworks/base/core/res/res/values/dimens.xml
index c1ab046..cc7dab4 100644
--- a/car_product/overlay-visual/frameworks/base/core/res/res/values/dimens.xml
+++ b/car_product/overlay-visual/frameworks/base/core/res/res/values/dimens.xml
@@ -17,12 +17,12 @@
*/
-->
<resources>
- <dimen name="status_bar_height">76dp</dimen>
- <dimen name="status_bar_height_landscape">76dp</dimen>
- <dimen name="status_bar_height_portrait">76dp</dimen>
- <dimen name="car_qs_header_system_icons_area_height">76dp</dimen>
- <dimen name="navigation_bar_height">112dp</dimen>
- <dimen name="navigation_bar_height_landscape">112dp</dimen>
+ <dimen name="status_bar_height">68dp</dimen>
+ <dimen name="status_bar_height_landscape">68dp</dimen>
+ <dimen name="status_bar_height_portrait">68dp</dimen>
+ <dimen name="car_qs_header_system_icons_area_height">68dp</dimen>
+ <dimen name="navigation_bar_height">96dp</dimen>
+ <dimen name="navigation_bar_height_landscape">96dp</dimen>
<!-- Notification icon size in the status bar. -->
<dimen name="status_bar_icon_size">32dp</dimen>
diff --git a/car_product/overlay-visual/frameworks/base/core/res/res/values/themes_device_defaults.xml b/car_product/overlay-visual/frameworks/base/core/res/res/values/themes_device_defaults.xml
index 5796cff..61262a1 100644
--- a/car_product/overlay-visual/frameworks/base/core/res/res/values/themes_device_defaults.xml
+++ b/car_product/overlay-visual/frameworks/base/core/res/res/values/themes_device_defaults.xml
@@ -35,6 +35,7 @@
<item name="android:editTextColor">@*android:color/car_body1</item>
<item name="android:listPreferredItemHeightSmall">@*android:dimen/car_single_line_list_item_height</item>
<item name="android:selectableItemBackground">@*android:drawable/item_background</item>
+ <item name="android:statusBarColor">@android:color/black</item>
<item name="android:textColorHint">@*android:color/car_body2</item>
<item name="android:textColorPrimary">@*android:color/text_color_primary</item>
<item name="android:textColorSecondary">@*android:color/car_body2</item>
diff --git a/car_product/overlay/frameworks/base/core/res/res/values/config.xml b/car_product/overlay/frameworks/base/core/res/res/values/config.xml
index 4538e60..e16ae72 100644
--- a/car_product/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/car_product/overlay/frameworks/base/core/res/res/values/config.xml
@@ -107,18 +107,18 @@
<!-- Turn off Wallpaper service -->
<bool name="config_enableWallpaperService">false</bool>
- <!-- Whether to only install system packages on a user if they're whitelisted for that user
+ <!-- Whether to only install system packages on a user if they're allowlisted for that user
type. Override the default value in framework config file.
- 0 - disable whitelist (install all system packages; no logging)
- 1 - enforce (only install system packages if they are whitelisted)
- 2 - log (log when a non-whitelisted package is run)
- 4 - any package not mentioned in the whitelist file is implicitly whitelisted on all users
+ 0 - disable allowlist (install all system packages; no logging)
+ 1 - enforce (only install system packages if they are allowlisted)
+ 2 - log (log when a non-allowlisted package is run)
+ 4 - any package not mentioned in the allowlist file is implicitly allowlisted on all users
8 - same as 4, but just for the SYSTEM user
16 - ignore OTAs (don't install system packages during OTAs)
Common scenarios for auto:
- - to enable feature (fully enforced) for a complete whitelist: 1
- - to enable feature for an incomplete whitelist (so use implicit whitelist mode): 5 -->
+ - to enable feature (fully enforced) for a complete allowlist: 1
+ - to enable feature for an incomplete allowlist (so use implicit allowlist mode): 5 -->
<integer name="config_userTypePackageWhitelistMode">5</integer> <!-- 1+4 -->
<!-- Default user restrictions for system user 0. -->
diff --git a/car_product/overlay/packages/apps/PackageInstaller/res/drawable/dialog_button_background.xml b/car_product/overlay/packages/apps/PackageInstaller/res/drawable/dialog_button_background.xml
deleted file mode 100644
index c4c91c5..0000000
--- a/car_product/overlay/packages/apps/PackageInstaller/res/drawable/dialog_button_background.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (C) 2017 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.
- -->
-<ripple xmlns:android="http://schemas.android.com/apk/res/android"
- android:color="@*android:color/car_card_ripple_background">
- <item android:id="@android:id/mask">
- <color android:color="@*android:color/car_white_1000" />
- </item>
-</ripple>
diff --git a/car_product/overlay/packages/apps/PackageInstaller/res/drawable/ic_check_box.xml b/car_product/overlay/packages/apps/PackageInstaller/res/drawable/ic_check_box.xml
deleted file mode 100644
index e985f39..0000000
--- a/car_product/overlay/packages/apps/PackageInstaller/res/drawable/ic_check_box.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (C) 2018 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
- -->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android" >
- <item android:drawable="@drawable/ic_check_box_unchecked"
- android:state_checked="false"/>
- <item android:drawable="@drawable/ic_check_box_checked"
- android:state_checked="true"/>
- <item android:drawable="@drawable/ic_check_box_unchecked"/>
-</selector>
diff --git a/car_product/overlay/packages/apps/PackageInstaller/res/drawable/ic_check_box_checked.xml b/car_product/overlay/packages/apps/PackageInstaller/res/drawable/ic_check_box_checked.xml
deleted file mode 100644
index 8e9369a..0000000
--- a/car_product/overlay/packages/apps/PackageInstaller/res/drawable/ic_check_box_checked.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (C) 2018 The Android Open Source Project
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License
- -->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="@dimen/checkbox_size"
- android:height="@dimen/checkbox_size"
- android:tint="@color/checkbox_color_checked"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path
- android:pathData="M19,3L5,3c-1.11,0 -2,0.9 -2,2v14c0,1.1 0.89,2 2,2h14c1.11,0 2,-0.9 2,-2L21,5c0,-1.1 -0.89,-2 -2,-2zM10,17l-5,-5 1.41,-1.41L10,14.17l7.59,-7.59L19,8l-9,9z"
- android:fillColor="#000000"/>
-</vector>
diff --git a/car_product/overlay/packages/apps/PackageInstaller/res/drawable/ic_check_box_unchecked.xml b/car_product/overlay/packages/apps/PackageInstaller/res/drawable/ic_check_box_unchecked.xml
deleted file mode 100644
index c4916ee..0000000
--- a/car_product/overlay/packages/apps/PackageInstaller/res/drawable/ic_check_box_unchecked.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (C) 2018 The Android Open Source Project
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License
- -->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="@dimen/checkbox_size"
- android:height="@dimen/checkbox_size"
- android:tint="@color/checkbox_color_unchecked"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path
- android:pathData="M19,5v14H5V5h14m0,-2H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V5c0,-1.1 -0.9,-2 -2,-2z"
- android:fillColor="#000000"/>
-</vector>
diff --git a/car_product/overlay/packages/apps/PackageInstaller/res/layout/grant_permissions.xml b/car_product/overlay/packages/apps/PackageInstaller/res/layout/grant_permissions.xml
deleted file mode 100644
index b9874a5..0000000
--- a/car_product/overlay/packages/apps/PackageInstaller/res/layout/grant_permissions.xml
+++ /dev/null
@@ -1,113 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2017 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!-- This layout mirrors grant_permissions.xml in PackageInstaller. The difference between the
- two is text sizes and spacing. -->
-<com.android.packageinstaller.permission.ui.ManualLayoutFrame
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:clipChildren="false">
-
- <LinearLayout
- android:id="@+id/dialog_container"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:background="@drawable/background_round_corners"
- android:orientation="vertical">
-
- <FrameLayout
- android:id="@+id/desc_container"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/permission_description_top_margin"
- android:layout_marginStart="@dimen/permission_description_start_margin"
- android:layout_marginBottom="@dimen/permission_description_bottom_margin"
- android:layout_marginEnd="@dimen/permission_description_end_margin">
-
- <include
- layout="@layout/permission_description" />
- </FrameLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
-
- <CheckBox
- android:id="@+id/do_not_ask_checkbox"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginStart="@dimen/checkbox_start_margin"
- android:layout_marginEnd="@dimen/checkbox_end_margin"
- android:gravity="center_vertical"
- android:paddingLeft="@dimen/checkbox_left_padding"
- android:button="@drawable/ic_check_box"
- android:textAppearance="@style/PermissionDialogCheckboxText"
- android:text="@string/never_ask_again"
- android:visibility="gone">
- </CheckBox>
-
- <com.android.packageinstaller.permission.ui.ButtonBarLayout
- android:id="@+id/button_group"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/permission_dialog_button_margin_top"
- android:layoutDirection="locale"
- android:gravity="center_vertical"
- android:orientation="horizontal">
-
- <Button
- android:id="@+id/permission_deny_button"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:text="@string/grant_dialog_button_deny"
- style="?android:attr/buttonBarButtonStyle">
- </Button>
-
- <Button
- android:id="@+id/permission_allow_button"
- android:layout_width="wrap_content"
- android:layout_height="@dimen/permission_dialog_allow_button_height"
- android:text="@string/grant_dialog_button_allow"
- style="?android:attr/buttonBarButtonStyle">
- </Button>
-
- <Space
- android:id="@*android:id/spacer"
- android:layout_width="0dp"
- android:layout_height="0dp"
- android:layout_weight="1"
- android:visibility="invisible">
- </Space>
-
- <TextView
- android:id="@+id/current_page_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingEnd="@dimen/permission_dialog_appearance_padding_end"
- android:maxLines="1"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:visibility="invisible">
- </TextView>
-
- </com.android.packageinstaller.permission.ui.ButtonBarLayout>
-
- </LinearLayout>
-
- </LinearLayout>
-
-</com.android.packageinstaller.permission.ui.ManualLayoutFrame>
diff --git a/car_product/overlay/packages/apps/PackageInstaller/res/layout/permission_description.xml b/car_product/overlay/packages/apps/PackageInstaller/res/layout/permission_description.xml
deleted file mode 100644
index 4ab185a..0000000
--- a/car_product/overlay/packages/apps/PackageInstaller/res/layout/permission_description.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2017 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!-- This file matches permission_description.xml in PakcageInstaller, except with adjusted font
- sizes. -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/perm_desc_root"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:gravity="left|center_vertical">
-
- <!-- No icon for Android Auto Embedded, so this visibility is GONE. The view remains so that
- no code change needs to occur in the GrantPermissionsViewHandlerImpl. -->
- <ImageView
- android:id="@+id/permission_icon"
- android:visibility="gone"
- android:layout_width="0dp"
- android:layout_height="0dp" >
- </ImageView>
-
- <TextView
- android:id="@+id/permission_message"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceLarge"
- />
-
-</LinearLayout>
diff --git a/car_product/overlay/packages/apps/PackageInstaller/res/values/colors.xml b/car_product/overlay/packages/apps/PackageInstaller/res/values/colors.xml
deleted file mode 100644
index c3f7b7b..0000000
--- a/car_product/overlay/packages/apps/PackageInstaller/res/values/colors.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2017 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources>
- <color name="checkbox_color_unchecked">@*android:color/car_tint</color>
- <color name="checkbox_color_checked">@*android:color/accent_device_default_light</color>
-</resources>
\ No newline at end of file
diff --git a/car_product/overlay/packages/apps/PackageInstaller/res/values/dimens.xml b/car_product/overlay/packages/apps/PackageInstaller/res/values/dimens.xml
deleted file mode 100644
index 078ad7f..0000000
--- a/car_product/overlay/packages/apps/PackageInstaller/res/values/dimens.xml
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (C) 2018 The Android Open Source Project
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License
- -->
-<resources>
-
- <!-- Margin between description text and the top-->
- <dimen name="permission_description_top_margin">@*android:dimen/car_padding_4</dimen>
- <!-- Margin between description text and the bottom-->
- <dimen name="permission_description_bottom_margin">@*android:dimen/car_padding_2</dimen>
- <!-- Margin between description text and the start-->
- <dimen name="permission_description_start_margin">@*android:dimen/car_keyline_1</dimen>
- <!-- Margin between description text and the end-->
- <dimen name="permission_description_end_margin">@*android:dimen/car_keyline_1</dimen>
- <!-- Margin between checkbox and the start-->
- <dimen name="checkbox_start_margin">@*android:dimen/car_keyline_1</dimen>
- <!-- Margin between checkbox and the end-->
- <dimen name="checkbox_end_margin">@*android:dimen/car_keyline_1</dimen>
-
- <dimen name="checkbox_left_padding">@*android:dimen/car_keyline_1_keyline_3_diff</dimen>
- <dimen name="checkbox_text_size">@*android:dimen/car_label1_size</dimen>
- <dimen name="checkbox_text_height">@*android:dimen/car_single_line_list_item_height</dimen>
-
- <dimen name="permission_dialog_button_margin_top">@*android:dimen/car_padding_2</dimen>
- <dimen name="permission_dialog_allow_button_height">@*android:dimen/car_dialog_action_bar_height</dimen>
-
- <dimen name="permission_dialog_appearance_padding_end">@*android:dimen/car_keyline_1</dimen>
-
- <dimen name="checkbox_size">@*android:dimen/car_primary_icon_size</dimen>
-</resources>
\ No newline at end of file
diff --git a/car_product/overlay/packages/apps/PackageInstaller/res/values/styles.xml b/car_product/overlay/packages/apps/PackageInstaller/res/values/styles.xml
deleted file mode 100644
index 6f045bf..0000000
--- a/car_product/overlay/packages/apps/PackageInstaller/res/values/styles.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2018 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<resources>
-
- <style name="PermissionDialogCheckboxText" parent="@android:TextAppearance.DeviceDefault">
- <item name="android:textColor">?android:attr/textColorSecondary</item>
- <item name="android:textSize">@dimen/checkbox_text_size</item>
- </style>
-
-</resources>
diff --git a/car_product/rro/PermissionControllerRRO/Android.bp b/car_product/rro/PermissionControllerRRO/Android.bp
new file mode 100644
index 0000000..a3aecd1
--- /dev/null
+++ b/car_product/rro/PermissionControllerRRO/Android.bp
@@ -0,0 +1,9 @@
+android_app {
+ name: "CarPermissionControllerRRO",
+ resource_dirs: ["res"],
+ platform_apis: true,
+ aaptflags: [
+ "--no-resource-deduping",
+ "--no-resource-removal"
+ ],
+}
\ No newline at end of file
diff --git a/car_product/rro/PermissionControllerRRO/AndroidManifest.xml b/car_product/rro/PermissionControllerRRO/AndroidManifest.xml
new file mode 100644
index 0000000..fd467a2
--- /dev/null
+++ b/car_product/rro/PermissionControllerRRO/AndroidManifest.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2020 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.
+ -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.permissioncontroller.car.rro">
+ <application android:hasCode="false"/>
+ <overlay android:priority="10"
+ android:targetPackage="com.android.permissioncontroller"
+ android:targetName="PermissionControllerStyles"
+ android:resourcesMap="@xml/overlays"
+ android:isStatic="true" />
+</manifest>
\ No newline at end of file
diff --git a/car_product/rro/PermissionControllerRRO/res/xml/overlays.xml b/car_product/rro/PermissionControllerRRO/res/xml/overlays.xml
new file mode 100644
index 0000000..99ab63f
--- /dev/null
+++ b/car_product/rro/PermissionControllerRRO/res/xml/overlays.xml
@@ -0,0 +1,29 @@
+<!--
+ ~ Copyright (C) 2020 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.
+ -->
+
+<overlay>
+ <item target="dimen/car_action_bar_height" value="@*android:dimen/car_app_bar_height" />
+ <item target="dimen/car_margin" value="@*android:dimen/car_margin" />
+ <item target="dimen/car_icon_size" value="@*android:dimen/car_primary_icon_size" />
+ <item target="dimen/car_preference_icon_size" value="@*android:dimen/car_preference_icon_size" />
+ <item target="dimen/car_radius_1" value="@*android:dimen/car_radius_1" />
+ <item target="dimen/car_preference_row_vertical_margin" value="@*android:dimen/car_preference_row_vertical_margin" />
+
+ <item target="color/car_tint" value="@*android:color/car_tint" />
+ <item target="color/car_card_ripple_background" value="@*android:color/car_card_ripple_background" />
+ <item target="color/car_accent" value="@*android:color/car_accent" />
+ <item target="color/car_divider_color" value="@*android:color/car_list_divider" />
+</overlay>
\ No newline at end of file
diff --git a/car_product/sepolicy/private/carservice_app.te b/car_product/sepolicy/private/carservice_app.te
index 2fd2095..766e28b 100644
--- a/car_product/sepolicy/private/carservice_app.te
+++ b/car_product/sepolicy/private/carservice_app.te
@@ -70,6 +70,12 @@
allow carservice_app sysfs_fs_ext4_features:dir { open read search};
allow carservice_app sysfs_fs_f2fs:dir { open read search };
+# Allow reading and writing /sys/power/
+allow carservice_app sysfs_power:file rw_file_perms;
+
+# Allow reading system property sys.boot.reason
+allow carservice_app system_boot_reason_prop:file { getattr open read map };
+
set_prop(carservice_app, ctl_start_prop)
set_prop(carservice_app, ctl_stop_prop)
unix_socket_connect(carservice_app, dumpstate, dumpstate)
@@ -77,8 +83,12 @@
# Allow reading vehicle-specific configuration
get_prop(carservice_app, vehicle_hal_prop)
+# Allow CarWatchdogService to access car watchdog daemon
carwatchdog_client_domain(carservice_app)
+# Allow CarPowerManagementService to access car power policy daemon
+allow carservice_app carpowerpolicyd_service:service_manager find;
+
# For ActivityBlockingActiviy
allow carservice_app gpu_device:chr_file rw_file_perms;
allow carservice_app gpu_device:dir r_dir_perms;
diff --git a/computepipe/runner/input_manager/Factory.cpp b/computepipe/runner/input_manager/Factory.cpp
deleted file mode 100644
index fe62e60..0000000
--- a/computepipe/runner/input_manager/Factory.cpp
+++ /dev/null
@@ -1,55 +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.
-
-#include "EvsInputManager.h"
-#include "InputManager.h"
-
-namespace android {
-namespace automotive {
-namespace computepipe {
-namespace runner {
-namespace input_manager {
-namespace {
-
-enum InputManagerType {
- EVS = 0,
- IMAGES,
- VIDEO,
-};
-
-// Helper function to determine the type of input manager to be created from the
-// input config.
-// TODO(b/147803315): Implement the actual algorithm to determine the input manager to be
-// used. Right now, only EVS manager is enabled, so that is used.
-InputManagerType getInputManagerType(const proto::InputConfig& /* inputConfig */) {
- return InputManagerType::EVS;
-}
-
-} // namespace
-std::unique_ptr<InputManager> InputManagerFactory::createInputManager(
- const proto::InputConfig& config, std::shared_ptr<InputEngineInterface> inputEngineInterface) {
- InputManagerType inputManagerType = getInputManagerType(config);
- switch (inputManagerType) {
- case InputManagerType::EVS:
- return EvsInputManager::createEvsInputManager(config, inputEngineInterface);
- default:
- return nullptr;
- }
-}
-
-} // namespace input_manager
-} // namespace runner
-} // namespace computepipe
-} // namespace automotive
-} // namespace android
diff --git a/computepipe/Android.mk b/cpp/computepipe/Android.mk
similarity index 100%
rename from computepipe/Android.mk
rename to cpp/computepipe/Android.mk
diff --git a/computepipe/OWNERS b/cpp/computepipe/OWNERS
similarity index 77%
rename from computepipe/OWNERS
rename to cpp/computepipe/OWNERS
index 284dba0..138a2f6 100644
--- a/computepipe/OWNERS
+++ b/cpp/computepipe/OWNERS
@@ -2,4 +2,3 @@
ankitarora@google.com
kathan@google.com
nyogeshwar@google.com
-michaelkeller@google.com
diff --git a/computepipe/aidl/Android.bp b/cpp/computepipe/aidl/Android.bp
similarity index 100%
rename from computepipe/aidl/Android.bp
rename to cpp/computepipe/aidl/Android.bp
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.registry/1/.hash b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.registry/1/.hash
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.registry/1/.hash
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.registry/1/.hash
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.registry/1/android/automotive/computepipe/registry/IClientInfo.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.registry/1/android/automotive/computepipe/registry/IClientInfo.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.registry/1/android/automotive/computepipe/registry/IClientInfo.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.registry/1/android/automotive/computepipe/registry/IClientInfo.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.registry/1/android/automotive/computepipe/registry/IPipeQuery.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.registry/1/android/automotive/computepipe/registry/IPipeQuery.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.registry/1/android/automotive/computepipe/registry/IPipeQuery.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.registry/1/android/automotive/computepipe/registry/IPipeQuery.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.registry/1/android/automotive/computepipe/registry/IPipeRegistration.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.registry/1/android/automotive/computepipe/registry/IPipeRegistration.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.registry/1/android/automotive/computepipe/registry/IPipeRegistration.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.registry/1/android/automotive/computepipe/registry/IPipeRegistration.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.registry/current/android/automotive/computepipe/registry/IClientInfo.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.registry/current/android/automotive/computepipe/registry/IClientInfo.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.registry/current/android/automotive/computepipe/registry/IClientInfo.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.registry/current/android/automotive/computepipe/registry/IClientInfo.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.registry/current/android/automotive/computepipe/registry/IPipeQuery.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.registry/current/android/automotive/computepipe/registry/IPipeQuery.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.registry/current/android/automotive/computepipe/registry/IPipeQuery.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.registry/current/android/automotive/computepipe/registry/IPipeQuery.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.registry/current/android/automotive/computepipe/registry/IPipeRegistration.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.registry/current/android/automotive/computepipe/registry/IPipeRegistration.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.registry/current/android/automotive/computepipe/registry/IPipeRegistration.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.registry/current/android/automotive/computepipe/registry/IPipeRegistration.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/.hash b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/.hash
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/.hash
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/.hash
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/IPipeDebugger.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/IPipeDebugger.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/IPipeDebugger.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/IPipeDebugger.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/IPipeRunner.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/IPipeRunner.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/IPipeRunner.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/IPipeRunner.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/IPipeStateCallback.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/IPipeStateCallback.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/IPipeStateCallback.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/IPipeStateCallback.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/IPipeStream.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/IPipeStream.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/IPipeStream.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/IPipeStream.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PacketDescriptor.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PacketDescriptor.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PacketDescriptor.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PacketDescriptor.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PacketDescriptorPacketType.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PacketDescriptorPacketType.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PacketDescriptorPacketType.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PacketDescriptorPacketType.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeDescriptor.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeDescriptor.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeDescriptor.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeDescriptor.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfig.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfig.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfig.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfig.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigCameraDesc.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigCameraDesc.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigCameraDesc.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigCameraDesc.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigCameraType.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigCameraType.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigCameraType.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigCameraType.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigFormatType.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigFormatType.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigFormatType.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigFormatType.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigImageFileDesc.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigImageFileDesc.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigImageFileDesc.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigImageFileDesc.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigImageFileType.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigImageFileType.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigImageFileType.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigImageFileType.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigInputSourceDesc.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigInputSourceDesc.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigInputSourceDesc.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigInputSourceDesc.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigInputType.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigInputType.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigInputType.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigInputType.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigVideoFileDesc.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigVideoFileDesc.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigVideoFileDesc.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigVideoFileDesc.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigVideoFileType.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigVideoFileType.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigVideoFileType.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeInputConfigVideoFileType.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOffloadConfig.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOffloadConfig.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOffloadConfig.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOffloadConfig.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOffloadConfigOffloadDesc.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOffloadConfigOffloadDesc.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOffloadConfigOffloadDesc.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOffloadConfigOffloadDesc.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOffloadConfigOffloadType.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOffloadConfigOffloadType.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOffloadConfigOffloadType.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOffloadConfigOffloadType.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOutputConfig.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOutputConfig.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOutputConfig.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOutputConfig.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOutputConfigOutputDesc.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOutputConfigOutputDesc.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOutputConfigOutputDesc.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOutputConfigOutputDesc.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOutputConfigPacketType.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOutputConfigPacketType.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOutputConfigPacketType.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeOutputConfigPacketType.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeProfilingType.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeProfilingType.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeProfilingType.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeProfilingType.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeState.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeState.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeState.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeState.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeTerminationConfig.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeTerminationConfig.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeTerminationConfig.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeTerminationConfig.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeTerminationConfigTerminationDesc.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeTerminationConfigTerminationDesc.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeTerminationConfigTerminationDesc.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeTerminationConfigTerminationDesc.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeTerminationConfigTerminationType.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeTerminationConfigTerminationType.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeTerminationConfigTerminationType.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/PipeTerminationConfigTerminationType.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/ProfilingData.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/ProfilingData.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/ProfilingData.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/1/android/automotive/computepipe/runner/ProfilingData.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/IPipeDebugger.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/IPipeDebugger.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/IPipeDebugger.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/IPipeDebugger.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/IPipeRunner.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/IPipeRunner.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/IPipeRunner.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/IPipeRunner.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/IPipeStateCallback.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/IPipeStateCallback.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/IPipeStateCallback.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/IPipeStateCallback.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/IPipeStream.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/IPipeStream.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/IPipeStream.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/IPipeStream.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PacketDescriptor.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PacketDescriptor.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PacketDescriptor.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PacketDescriptor.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PacketDescriptorPacketType.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PacketDescriptorPacketType.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PacketDescriptorPacketType.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PacketDescriptorPacketType.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeDescriptor.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeDescriptor.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeDescriptor.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeDescriptor.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfig.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfig.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfig.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfig.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigCameraDesc.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigCameraDesc.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigCameraDesc.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigCameraDesc.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigCameraType.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigCameraType.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigCameraType.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigCameraType.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigFormatType.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigFormatType.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigFormatType.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigFormatType.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigImageFileDesc.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigImageFileDesc.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigImageFileDesc.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigImageFileDesc.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigImageFileType.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigImageFileType.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigImageFileType.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigImageFileType.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigInputSourceDesc.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigInputSourceDesc.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigInputSourceDesc.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigInputSourceDesc.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigInputType.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigInputType.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigInputType.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigInputType.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigVideoFileDesc.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigVideoFileDesc.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigVideoFileDesc.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigVideoFileDesc.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigVideoFileType.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigVideoFileType.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigVideoFileType.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeInputConfigVideoFileType.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOffloadConfig.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOffloadConfig.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOffloadConfig.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOffloadConfig.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOffloadConfigOffloadDesc.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOffloadConfigOffloadDesc.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOffloadConfigOffloadDesc.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOffloadConfigOffloadDesc.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOffloadConfigOffloadType.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOffloadConfigOffloadType.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOffloadConfigOffloadType.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOffloadConfigOffloadType.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOutputConfig.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOutputConfig.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOutputConfig.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOutputConfig.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOutputConfigOutputDesc.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOutputConfigOutputDesc.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOutputConfigOutputDesc.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOutputConfigOutputDesc.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOutputConfigPacketType.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOutputConfigPacketType.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOutputConfigPacketType.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeOutputConfigPacketType.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeProfilingType.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeProfilingType.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeProfilingType.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeProfilingType.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeState.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeState.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeState.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeState.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeTerminationConfig.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeTerminationConfig.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeTerminationConfig.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeTerminationConfig.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeTerminationConfigTerminationDesc.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeTerminationConfigTerminationDesc.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeTerminationConfigTerminationDesc.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeTerminationConfigTerminationDesc.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeTerminationConfigTerminationType.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeTerminationConfigTerminationType.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeTerminationConfigTerminationType.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/PipeTerminationConfigTerminationType.aidl
diff --git a/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/ProfilingData.aidl b/cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/ProfilingData.aidl
similarity index 100%
rename from computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/ProfilingData.aidl
rename to cpp/computepipe/aidl/aidl_api/android.automotive.computepipe.runner/current/android/automotive/computepipe/runner/ProfilingData.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/registry/IClientInfo.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/registry/IClientInfo.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/registry/IClientInfo.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/registry/IClientInfo.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/registry/IPipeQuery.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/registry/IPipeQuery.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/registry/IPipeQuery.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/registry/IPipeQuery.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/registry/IPipeRegistration.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/registry/IPipeRegistration.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/registry/IPipeRegistration.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/registry/IPipeRegistration.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/IPipeDebugger.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/IPipeDebugger.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/IPipeDebugger.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/IPipeDebugger.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/IPipeRunner.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/IPipeRunner.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/IPipeRunner.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/IPipeRunner.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/IPipeStateCallback.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/IPipeStateCallback.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/IPipeStateCallback.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/IPipeStateCallback.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/IPipeStream.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/IPipeStream.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/IPipeStream.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/IPipeStream.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PacketDescriptor.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PacketDescriptor.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PacketDescriptor.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PacketDescriptor.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PacketDescriptorPacketType.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PacketDescriptorPacketType.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PacketDescriptorPacketType.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PacketDescriptorPacketType.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeDescriptor.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeDescriptor.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeDescriptor.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeDescriptor.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfig.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfig.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfig.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfig.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigCameraDesc.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigCameraDesc.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigCameraDesc.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigCameraDesc.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigCameraType.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigCameraType.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigCameraType.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigCameraType.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigFormatType.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigFormatType.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigFormatType.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigFormatType.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigImageFileDesc.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigImageFileDesc.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigImageFileDesc.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigImageFileDesc.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigImageFileType.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigImageFileType.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigImageFileType.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigImageFileType.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigInputSourceDesc.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigInputSourceDesc.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigInputSourceDesc.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigInputSourceDesc.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigInputType.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigInputType.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigInputType.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigInputType.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigVideoFileDesc.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigVideoFileDesc.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigVideoFileDesc.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigVideoFileDesc.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigVideoFileType.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigVideoFileType.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigVideoFileType.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeInputConfigVideoFileType.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeOffloadConfig.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeOffloadConfig.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeOffloadConfig.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeOffloadConfig.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeOffloadConfigOffloadDesc.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeOffloadConfigOffloadDesc.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeOffloadConfigOffloadDesc.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeOffloadConfigOffloadDesc.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeOffloadConfigOffloadType.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeOffloadConfigOffloadType.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeOffloadConfigOffloadType.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeOffloadConfigOffloadType.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeOutputConfig.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeOutputConfig.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeOutputConfig.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeOutputConfig.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeOutputConfigOutputDesc.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeOutputConfigOutputDesc.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeOutputConfigOutputDesc.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeOutputConfigOutputDesc.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeOutputConfigPacketType.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeOutputConfigPacketType.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeOutputConfigPacketType.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeOutputConfigPacketType.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeProfilingType.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeProfilingType.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeProfilingType.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeProfilingType.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeState.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeState.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeState.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeState.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeTerminationConfig.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeTerminationConfig.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeTerminationConfig.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeTerminationConfig.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeTerminationConfigTerminationDesc.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeTerminationConfigTerminationDesc.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeTerminationConfigTerminationDesc.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeTerminationConfigTerminationDesc.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/PipeTerminationConfigTerminationType.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeTerminationConfigTerminationType.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/PipeTerminationConfigTerminationType.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/PipeTerminationConfigTerminationType.aidl
diff --git a/computepipe/aidl/android/automotive/computepipe/runner/ProfilingData.aidl b/cpp/computepipe/aidl/android/automotive/computepipe/runner/ProfilingData.aidl
similarity index 100%
rename from computepipe/aidl/android/automotive/computepipe/runner/ProfilingData.aidl
rename to cpp/computepipe/aidl/android/automotive/computepipe/runner/ProfilingData.aidl
diff --git a/computepipe/example/Android.bp b/cpp/computepipe/example/Android.bp
similarity index 98%
rename from computepipe/example/Android.bp
rename to cpp/computepipe/example/Android.bp
index effd440..f4cee39 100644
--- a/computepipe/example/Android.bp
+++ b/cpp/computepipe/example/Android.bp
@@ -47,7 +47,7 @@
"computepipe_runner_includes",
],
include_dirs: [
- "packages/services/Car/computepipe",
+ "packages/services/Car/cpp/computepipe",
],
}
diff --git a/computepipe/example/ClientSvc.cpp b/cpp/computepipe/example/ClientSvc.cpp
similarity index 100%
rename from computepipe/example/ClientSvc.cpp
rename to cpp/computepipe/example/ClientSvc.cpp
diff --git a/computepipe/example/FaceOutput.proto b/cpp/computepipe/example/FaceOutput.proto
similarity index 100%
rename from computepipe/example/FaceOutput.proto
rename to cpp/computepipe/example/FaceOutput.proto
diff --git a/computepipe/example/FaceTracker.cpp b/cpp/computepipe/example/FaceTracker.cpp
similarity index 100%
rename from computepipe/example/FaceTracker.cpp
rename to cpp/computepipe/example/FaceTracker.cpp
diff --git a/computepipe/example/FaceTracker.h b/cpp/computepipe/example/FaceTracker.h
similarity index 100%
rename from computepipe/example/FaceTracker.h
rename to cpp/computepipe/example/FaceTracker.h
diff --git a/computepipe/example/Runner.cpp b/cpp/computepipe/example/Runner.cpp
similarity index 100%
rename from computepipe/example/Runner.cpp
rename to cpp/computepipe/example/Runner.cpp
diff --git a/computepipe/example/lib_arm/libfacegraph.so b/cpp/computepipe/example/lib_arm/libfacegraph.so
similarity index 100%
rename from computepipe/example/lib_arm/libfacegraph.so
rename to cpp/computepipe/example/lib_arm/libfacegraph.so
Binary files differ
diff --git a/computepipe/example/lib_arm64/libfacegraph.so b/cpp/computepipe/example/lib_arm64/libfacegraph.so
similarity index 100%
rename from computepipe/example/lib_arm64/libfacegraph.so
rename to cpp/computepipe/example/lib_arm64/libfacegraph.so
Binary files differ
diff --git a/computepipe/example/lib_x86/libfacegraph.so b/cpp/computepipe/example/lib_x86/libfacegraph.so
similarity index 100%
rename from computepipe/example/lib_x86/libfacegraph.so
rename to cpp/computepipe/example/lib_x86/libfacegraph.so
Binary files differ
diff --git a/computepipe/example/lib_x86_64/libfacegraph.so b/cpp/computepipe/example/lib_x86_64/libfacegraph.so
similarity index 100%
rename from computepipe/example/lib_x86_64/libfacegraph.so
rename to cpp/computepipe/example/lib_x86_64/libfacegraph.so
Binary files differ
diff --git a/computepipe/products/computepipe.mk b/cpp/computepipe/products/computepipe.mk
similarity index 87%
rename from computepipe/products/computepipe.mk
rename to cpp/computepipe/products/computepipe.mk
index 44c93f9..b9382de 100644
--- a/computepipe/products/computepipe.mk
+++ b/cpp/computepipe/products/computepipe.mk
@@ -29,7 +29,7 @@
# Selinux public policies for computepipe services
-PRODUCT_PUBLIC_SEPOLICY_DIRS += packages/services/Car/computepipe/sepolicy/public
+PRODUCT_PUBLIC_SEPOLICY_DIRS += packages/services/Car/cpp/computepipe/sepolicy/public
# Selinux private policies for computepipe services
-PRODUCT_PRIVATE_SEPOLICY_DIRS += packages/services/Car/computepipe/sepolicy/private
+PRODUCT_PRIVATE_SEPOLICY_DIRS += packages/services/Car/cpp/computepipe/sepolicy/private
diff --git a/computepipe/products/init.computepipe.rc b/cpp/computepipe/products/init.computepipe.rc
similarity index 100%
rename from computepipe/products/init.computepipe.rc
rename to cpp/computepipe/products/init.computepipe.rc
diff --git a/computepipe/proto/Android.bp b/cpp/computepipe/proto/Android.bp
similarity index 100%
rename from computepipe/proto/Android.bp
rename to cpp/computepipe/proto/Android.bp
diff --git a/computepipe/proto/ClientConfig.proto b/cpp/computepipe/proto/ClientConfig.proto
similarity index 79%
rename from computepipe/proto/ClientConfig.proto
rename to cpp/computepipe/proto/ClientConfig.proto
index 9678ac3..b565d44 100644
--- a/computepipe/proto/ClientConfig.proto
+++ b/cpp/computepipe/proto/ClientConfig.proto
@@ -2,7 +2,7 @@
package android.automotive.computepipe.proto;
-import "packages/services/Car/computepipe/proto/ProfilingType.proto";
+import "packages/services/Car/cpp/computepipe/proto/ProfilingType.proto";
message ClientConfig {
optional int32 input_config_id = 1;
diff --git a/computepipe/proto/ConfigurationCommand.proto b/cpp/computepipe/proto/ConfigurationCommand.proto
similarity index 90%
rename from computepipe/proto/ConfigurationCommand.proto
rename to cpp/computepipe/proto/ConfigurationCommand.proto
index 46839d2..837248d 100644
--- a/computepipe/proto/ConfigurationCommand.proto
+++ b/cpp/computepipe/proto/ConfigurationCommand.proto
@@ -2,7 +2,7 @@
package android.automotive.computepipe.proto;
-import "packages/services/Car/computepipe/proto/ProfilingType.proto";
+import "packages/services/Car/cpp/computepipe/proto/ProfilingType.proto";
message SetInputSource {
optional int32 source_id = 1;
diff --git a/computepipe/proto/ControlCommand.proto b/cpp/computepipe/proto/ControlCommand.proto
similarity index 100%
rename from computepipe/proto/ControlCommand.proto
rename to cpp/computepipe/proto/ControlCommand.proto
diff --git a/computepipe/proto/InputConfig.proto b/cpp/computepipe/proto/InputConfig.proto
similarity index 100%
rename from computepipe/proto/InputConfig.proto
rename to cpp/computepipe/proto/InputConfig.proto
diff --git a/computepipe/proto/OffloadConfig.proto b/cpp/computepipe/proto/OffloadConfig.proto
similarity index 100%
rename from computepipe/proto/OffloadConfig.proto
rename to cpp/computepipe/proto/OffloadConfig.proto
diff --git a/computepipe/proto/Options.proto b/cpp/computepipe/proto/Options.proto
similarity index 67%
rename from computepipe/proto/Options.proto
rename to cpp/computepipe/proto/Options.proto
index 14d130d..5416c4c 100644
--- a/computepipe/proto/Options.proto
+++ b/cpp/computepipe/proto/Options.proto
@@ -2,10 +2,10 @@
package android.automotive.computepipe.proto;
-import "packages/services/Car/computepipe/proto/InputConfig.proto";
-import "packages/services/Car/computepipe/proto/OffloadConfig.proto";
-import "packages/services/Car/computepipe/proto/OutputConfig.proto";
-import "packages/services/Car/computepipe/proto/TerminationConfig.proto";
+import "packages/services/Car/cpp/computepipe/proto/InputConfig.proto";
+import "packages/services/Car/cpp/computepipe/proto/OffloadConfig.proto";
+import "packages/services/Car/cpp/computepipe/proto/OutputConfig.proto";
+import "packages/services/Car/cpp/computepipe/proto/TerminationConfig.proto";
message Options {
/**
diff --git a/computepipe/proto/OutputConfig.proto b/cpp/computepipe/proto/OutputConfig.proto
similarity index 100%
rename from computepipe/proto/OutputConfig.proto
rename to cpp/computepipe/proto/OutputConfig.proto
diff --git a/computepipe/proto/PacketDescriptor.proto b/cpp/computepipe/proto/PacketDescriptor.proto
similarity index 85%
rename from computepipe/proto/PacketDescriptor.proto
rename to cpp/computepipe/proto/PacketDescriptor.proto
index 8014141..6e6c2da 100644
--- a/computepipe/proto/PacketDescriptor.proto
+++ b/cpp/computepipe/proto/PacketDescriptor.proto
@@ -1,7 +1,7 @@
syntax = "proto2";
package android.automotive.computepipe.proto;
-import "packages/services/Car/computepipe/proto/OutputConfig.proto";
+import "packages/services/Car/cpp/computepipe/proto/OutputConfig.proto";
message NativeHandles {
// File descriptors
diff --git a/computepipe/proto/ProfilingType.proto b/cpp/computepipe/proto/ProfilingType.proto
similarity index 100%
rename from computepipe/proto/ProfilingType.proto
rename to cpp/computepipe/proto/ProfilingType.proto
diff --git a/computepipe/proto/TerminationConfig.proto b/cpp/computepipe/proto/TerminationConfig.proto
similarity index 88%
rename from computepipe/proto/TerminationConfig.proto
rename to cpp/computepipe/proto/TerminationConfig.proto
index aea1c4f..2010b9d 100644
--- a/computepipe/proto/TerminationConfig.proto
+++ b/cpp/computepipe/proto/TerminationConfig.proto
@@ -2,7 +2,7 @@
package android.automotive.computepipe.proto;
-import "packages/services/Car/computepipe/proto/OutputConfig.proto";
+import "packages/services/Car/cpp/computepipe/proto/OutputConfig.proto";
message TerminationOption {
enum TerminationType {
diff --git a/computepipe/router/1.0/Android.bp b/cpp/computepipe/router/1.0/Android.bp
similarity index 100%
rename from computepipe/router/1.0/Android.bp
rename to cpp/computepipe/router/1.0/Android.bp
diff --git a/computepipe/router/1.0/PipeClient.cpp b/cpp/computepipe/router/1.0/PipeClient.cpp
similarity index 100%
rename from computepipe/router/1.0/PipeClient.cpp
rename to cpp/computepipe/router/1.0/PipeClient.cpp
diff --git a/computepipe/router/1.0/PipeQuery.cpp b/cpp/computepipe/router/1.0/PipeQuery.cpp
similarity index 100%
rename from computepipe/router/1.0/PipeQuery.cpp
rename to cpp/computepipe/router/1.0/PipeQuery.cpp
diff --git a/computepipe/router/1.0/PipeRegistration.cpp b/cpp/computepipe/router/1.0/PipeRegistration.cpp
similarity index 100%
rename from computepipe/router/1.0/PipeRegistration.cpp
rename to cpp/computepipe/router/1.0/PipeRegistration.cpp
diff --git a/computepipe/router/1.0/PipeRunner.cpp b/cpp/computepipe/router/1.0/PipeRunner.cpp
similarity index 100%
rename from computepipe/router/1.0/PipeRunner.cpp
rename to cpp/computepipe/router/1.0/PipeRunner.cpp
diff --git a/computepipe/router/1.0/RemoteState.cpp b/cpp/computepipe/router/1.0/RemoteState.cpp
similarity index 100%
rename from computepipe/router/1.0/RemoteState.cpp
rename to cpp/computepipe/router/1.0/RemoteState.cpp
diff --git a/computepipe/router/1.0/RouterSvc.cpp b/cpp/computepipe/router/1.0/RouterSvc.cpp
similarity index 100%
rename from computepipe/router/1.0/RouterSvc.cpp
rename to cpp/computepipe/router/1.0/RouterSvc.cpp
diff --git a/computepipe/router/1.0/RouterSvc.h b/cpp/computepipe/router/1.0/RouterSvc.h
similarity index 100%
rename from computepipe/router/1.0/RouterSvc.h
rename to cpp/computepipe/router/1.0/RouterSvc.h
diff --git a/computepipe/router/1.0/android.automotive.computepipe.router@1.0.rc b/cpp/computepipe/router/1.0/android.automotive.computepipe.router@1.0.rc
similarity index 100%
rename from computepipe/router/1.0/android.automotive.computepipe.router@1.0.rc
rename to cpp/computepipe/router/1.0/android.automotive.computepipe.router@1.0.rc
diff --git a/computepipe/router/1.0/include/PipeClient.h b/cpp/computepipe/router/1.0/include/PipeClient.h
similarity index 100%
rename from computepipe/router/1.0/include/PipeClient.h
rename to cpp/computepipe/router/1.0/include/PipeClient.h
diff --git a/computepipe/router/1.0/include/PipeQuery.h b/cpp/computepipe/router/1.0/include/PipeQuery.h
similarity index 100%
rename from computepipe/router/1.0/include/PipeQuery.h
rename to cpp/computepipe/router/1.0/include/PipeQuery.h
diff --git a/computepipe/router/1.0/include/PipeRegistration.h b/cpp/computepipe/router/1.0/include/PipeRegistration.h
similarity index 100%
rename from computepipe/router/1.0/include/PipeRegistration.h
rename to cpp/computepipe/router/1.0/include/PipeRegistration.h
diff --git a/computepipe/router/1.0/include/PipeRunner.h b/cpp/computepipe/router/1.0/include/PipeRunner.h
similarity index 100%
rename from computepipe/router/1.0/include/PipeRunner.h
rename to cpp/computepipe/router/1.0/include/PipeRunner.h
diff --git a/computepipe/router/1.0/include/RemoteState.h b/cpp/computepipe/router/1.0/include/RemoteState.h
similarity index 100%
rename from computepipe/router/1.0/include/RemoteState.h
rename to cpp/computepipe/router/1.0/include/RemoteState.h
diff --git a/computepipe/router/1.0/service.cpp b/cpp/computepipe/router/1.0/service.cpp
similarity index 100%
rename from computepipe/router/1.0/service.cpp
rename to cpp/computepipe/router/1.0/service.cpp
diff --git a/computepipe/router/Android.bp b/cpp/computepipe/router/Android.bp
similarity index 100%
rename from computepipe/router/Android.bp
rename to cpp/computepipe/router/Android.bp
diff --git a/computepipe/router/include/ClientHandle.h b/cpp/computepipe/router/include/ClientHandle.h
similarity index 100%
rename from computepipe/router/include/ClientHandle.h
rename to cpp/computepipe/router/include/ClientHandle.h
diff --git a/computepipe/router/include/PipeContext.h b/cpp/computepipe/router/include/PipeContext.h
similarity index 100%
rename from computepipe/router/include/PipeContext.h
rename to cpp/computepipe/router/include/PipeContext.h
diff --git a/computepipe/router/include/PipeHandle.h b/cpp/computepipe/router/include/PipeHandle.h
similarity index 100%
rename from computepipe/router/include/PipeHandle.h
rename to cpp/computepipe/router/include/PipeHandle.h
diff --git a/computepipe/router/include/Registry.h b/cpp/computepipe/router/include/Registry.h
similarity index 100%
rename from computepipe/router/include/Registry.h
rename to cpp/computepipe/router/include/Registry.h
diff --git a/computepipe/runner/Android.bp b/cpp/computepipe/runner/Android.bp
similarity index 95%
rename from computepipe/runner/Android.bp
rename to cpp/computepipe/runner/Android.bp
index 1445087..a5cf130 100644
--- a/computepipe/runner/Android.bp
+++ b/cpp/computepipe/runner/Android.bp
@@ -39,6 +39,6 @@
"libprotobuf-cpp-lite",
],
include_dirs: [
- "packages/services/Car/computepipe",
+ "packages/services/Car/cpp/computepipe",
],
}
diff --git a/computepipe/runner/EventGenerator.cpp b/cpp/computepipe/runner/EventGenerator.cpp
similarity index 100%
rename from computepipe/runner/EventGenerator.cpp
rename to cpp/computepipe/runner/EventGenerator.cpp
diff --git a/computepipe/runner/PixelFormatUtils.cpp b/cpp/computepipe/runner/PixelFormatUtils.cpp
similarity index 100%
rename from computepipe/runner/PixelFormatUtils.cpp
rename to cpp/computepipe/runner/PixelFormatUtils.cpp
diff --git a/computepipe/runner/RunnerComponent.cpp b/cpp/computepipe/runner/RunnerComponent.cpp
similarity index 100%
rename from computepipe/runner/RunnerComponent.cpp
rename to cpp/computepipe/runner/RunnerComponent.cpp
diff --git a/computepipe/runner/client_interface/AidlClient.cpp b/cpp/computepipe/runner/client_interface/AidlClient.cpp
similarity index 100%
rename from computepipe/runner/client_interface/AidlClient.cpp
rename to cpp/computepipe/runner/client_interface/AidlClient.cpp
diff --git a/computepipe/runner/client_interface/AidlClient.h b/cpp/computepipe/runner/client_interface/AidlClient.h
similarity index 100%
rename from computepipe/runner/client_interface/AidlClient.h
rename to cpp/computepipe/runner/client_interface/AidlClient.h
diff --git a/computepipe/runner/client_interface/AidlClientImpl.cpp b/cpp/computepipe/runner/client_interface/AidlClientImpl.cpp
similarity index 100%
rename from computepipe/runner/client_interface/AidlClientImpl.cpp
rename to cpp/computepipe/runner/client_interface/AidlClientImpl.cpp
diff --git a/computepipe/runner/client_interface/AidlClientImpl.h b/cpp/computepipe/runner/client_interface/AidlClientImpl.h
similarity index 100%
rename from computepipe/runner/client_interface/AidlClientImpl.h
rename to cpp/computepipe/runner/client_interface/AidlClientImpl.h
diff --git a/computepipe/runner/client_interface/Android.bp b/cpp/computepipe/runner/client_interface/Android.bp
similarity index 96%
rename from computepipe/runner/client_interface/Android.bp
rename to cpp/computepipe/runner/client_interface/Android.bp
index d218285..da8ce33 100644
--- a/computepipe/runner/client_interface/Android.bp
+++ b/cpp/computepipe/runner/client_interface/Android.bp
@@ -41,7 +41,7 @@
"libprotobuf-cpp-lite",
],
include_dirs: [
- "packages/services/Car/computepipe",
+ "packages/services/Car/cpp/computepipe",
],
cflags: ["-DLOG_TAG=\"RunnerIpcInterface\""],
}
diff --git a/computepipe/runner/client_interface/DebuggerImpl.cpp b/cpp/computepipe/runner/client_interface/DebuggerImpl.cpp
similarity index 100%
rename from computepipe/runner/client_interface/DebuggerImpl.cpp
rename to cpp/computepipe/runner/client_interface/DebuggerImpl.cpp
diff --git a/computepipe/runner/client_interface/DebuggerImpl.h b/cpp/computepipe/runner/client_interface/DebuggerImpl.h
similarity index 100%
rename from computepipe/runner/client_interface/DebuggerImpl.h
rename to cpp/computepipe/runner/client_interface/DebuggerImpl.h
diff --git a/computepipe/runner/client_interface/Factory.cpp b/cpp/computepipe/runner/client_interface/Factory.cpp
similarity index 100%
rename from computepipe/runner/client_interface/Factory.cpp
rename to cpp/computepipe/runner/client_interface/Factory.cpp
diff --git a/computepipe/runner/client_interface/PipeOptionsConverter.cpp b/cpp/computepipe/runner/client_interface/PipeOptionsConverter.cpp
similarity index 100%
rename from computepipe/runner/client_interface/PipeOptionsConverter.cpp
rename to cpp/computepipe/runner/client_interface/PipeOptionsConverter.cpp
diff --git a/computepipe/runner/client_interface/PipeOptionsConverter.h b/cpp/computepipe/runner/client_interface/PipeOptionsConverter.h
similarity index 100%
rename from computepipe/runner/client_interface/PipeOptionsConverter.h
rename to cpp/computepipe/runner/client_interface/PipeOptionsConverter.h
diff --git a/computepipe/runner/client_interface/StatusUtil.cpp b/cpp/computepipe/runner/client_interface/StatusUtil.cpp
similarity index 100%
rename from computepipe/runner/client_interface/StatusUtil.cpp
rename to cpp/computepipe/runner/client_interface/StatusUtil.cpp
diff --git a/computepipe/runner/client_interface/StatusUtil.h b/cpp/computepipe/runner/client_interface/StatusUtil.h
similarity index 100%
rename from computepipe/runner/client_interface/StatusUtil.h
rename to cpp/computepipe/runner/client_interface/StatusUtil.h
diff --git a/computepipe/runner/client_interface/include/ClientEngineInterface.h b/cpp/computepipe/runner/client_interface/include/ClientEngineInterface.h
similarity index 100%
rename from computepipe/runner/client_interface/include/ClientEngineInterface.h
rename to cpp/computepipe/runner/client_interface/include/ClientEngineInterface.h
diff --git a/computepipe/runner/client_interface/include/ClientInterface.h b/cpp/computepipe/runner/client_interface/include/ClientInterface.h
similarity index 100%
rename from computepipe/runner/client_interface/include/ClientInterface.h
rename to cpp/computepipe/runner/client_interface/include/ClientInterface.h
diff --git a/computepipe/runner/debug_display_manager/Android.bp b/cpp/computepipe/runner/debug_display_manager/Android.bp
similarity index 92%
rename from computepipe/runner/debug_display_manager/Android.bp
rename to cpp/computepipe/runner/debug_display_manager/Android.bp
index 43c4994..466d3d0 100644
--- a/computepipe/runner/debug_display_manager/Android.bp
+++ b/cpp/computepipe/runner/debug_display_manager/Android.bp
@@ -42,7 +42,7 @@
"libutils",
],
include_dirs: [
- "packages/services/Car/computepipe",
- "packages/services/Car/evs/support_library",
+ "packages/services/Car/cpp/computepipe",
+ "packages/services/Car/cpp/evs/support_library",
],
}
diff --git a/computepipe/runner/debug_display_manager/EvsDisplayManager.cpp b/cpp/computepipe/runner/debug_display_manager/EvsDisplayManager.cpp
similarity index 100%
rename from computepipe/runner/debug_display_manager/EvsDisplayManager.cpp
rename to cpp/computepipe/runner/debug_display_manager/EvsDisplayManager.cpp
diff --git a/computepipe/runner/debug_display_manager/include/DebugDisplayManager.h b/cpp/computepipe/runner/debug_display_manager/include/DebugDisplayManager.h
similarity index 100%
rename from computepipe/runner/debug_display_manager/include/DebugDisplayManager.h
rename to cpp/computepipe/runner/debug_display_manager/include/DebugDisplayManager.h
diff --git a/computepipe/runner/debug_display_manager/include/EvsDisplayManager.h b/cpp/computepipe/runner/debug_display_manager/include/EvsDisplayManager.h
similarity index 100%
rename from computepipe/runner/debug_display_manager/include/EvsDisplayManager.h
rename to cpp/computepipe/runner/debug_display_manager/include/EvsDisplayManager.h
diff --git a/computepipe/runner/engine/Android.bp b/cpp/computepipe/runner/engine/Android.bp
similarity index 95%
rename from computepipe/runner/engine/Android.bp
rename to cpp/computepipe/runner/engine/Android.bp
index 8e5c21a..9842af7 100644
--- a/computepipe/runner/engine/Android.bp
+++ b/cpp/computepipe/runner/engine/Android.bp
@@ -41,6 +41,7 @@
"libhardware",
"libhidlbase",
"liblog",
+ "libmediandk",
"libnativewindow",
"libpng",
"libprotobuf-cpp-lite",
@@ -58,6 +59,6 @@
"-Wthread-safety",
],
include_dirs: [
- "packages/services/Car/computepipe",
+ "packages/services/Car/cpp/computepipe",
],
}
diff --git a/computepipe/runner/engine/ConfigBuilder.cpp b/cpp/computepipe/runner/engine/ConfigBuilder.cpp
similarity index 100%
rename from computepipe/runner/engine/ConfigBuilder.cpp
rename to cpp/computepipe/runner/engine/ConfigBuilder.cpp
diff --git a/computepipe/runner/engine/ConfigBuilder.h b/cpp/computepipe/runner/engine/ConfigBuilder.h
similarity index 100%
rename from computepipe/runner/engine/ConfigBuilder.h
rename to cpp/computepipe/runner/engine/ConfigBuilder.h
diff --git a/computepipe/runner/engine/DefaultEngine.cpp b/cpp/computepipe/runner/engine/DefaultEngine.cpp
similarity index 97%
rename from computepipe/runner/engine/DefaultEngine.cpp
rename to cpp/computepipe/runner/engine/DefaultEngine.cpp
index ab812d2..7d46273 100644
--- a/computepipe/runner/engine/DefaultEngine.cpp
+++ b/cpp/computepipe/runner/engine/DefaultEngine.cpp
@@ -63,19 +63,19 @@
}
}
-Status DefaultEngine::setArgs(std::string engine_args) {
- auto pos = engine_args.find(kNoInputManager);
+Status DefaultEngine::setArgs(std::string engineArgs) {
+ mEngineArgs = engineArgs;
+ auto pos = engineArgs.find(kNoInputManager);
if (pos != std::string::npos) {
mIgnoreInputManager = true;
}
- pos = engine_args.find(kDisplayStreamId);
- if (pos == std::string::npos) {
- return Status::SUCCESS;
+ pos = engineArgs.find(kDisplayStreamId);
+ if (pos != std::string::npos) {
+ mDisplayStream = std::stoi(engineArgs.substr(pos + strlen(kDisplayStreamId)));
+ mConfigBuilder.setDebugDisplayStream(mDisplayStream);
+ mDebugDisplayManager = std::make_unique<debug_display_manager::EvsDisplayManager>();
+ mDebugDisplayManager->setArgs(engineArgs);
}
- mDisplayStream = std::stoi(engine_args.substr(pos + strlen(kDisplayStreamId)));
- mConfigBuilder.setDebugDisplayStream(mDisplayStream);
- mDebugDisplayManager = std::make_unique<debug_display_manager::EvsDisplayManager>();
- mDebugDisplayManager->setArgs(engine_args);
return Status::SUCCESS;
}
@@ -598,8 +598,10 @@
[this](int streamId, int64_t timestamp, const InputFrame& frame) {
return this->mGraph->SetInputStreamPixelData(streamId, timestamp, frame);
});
+ proto::InputConfig overrideConfig;
mInputManagers.emplace(selectedId,
- mInputFactory.createInputManager(inputDescriptor, cb));
+ mInputFactory.createInputManager(
+ inputDescriptor, overrideConfig, cb));
if (mInputManagers[selectedId] == nullptr) {
LOG(ERROR) << "unable to create input manager for stream " << selectedId;
// TODO: Add print
diff --git a/computepipe/runner/engine/DefaultEngine.h b/cpp/computepipe/runner/engine/DefaultEngine.h
similarity index 98%
rename from computepipe/runner/engine/DefaultEngine.h
rename to cpp/computepipe/runner/engine/DefaultEngine.h
index d4eaa5e..84e7474 100644
--- a/computepipe/runner/engine/DefaultEngine.h
+++ b/cpp/computepipe/runner/engine/DefaultEngine.h
@@ -90,7 +90,7 @@
/**
* Methods from Runner Engine to override
*/
- Status setArgs(std::string engine_args) override;
+ Status setArgs(std::string engineArgs) override;
void setClientInterface(std::unique_ptr<client_interface::ClientInterface>&& client) override;
void setPrebuiltGraph(std::unique_ptr<graph::PrebuiltGraph>&& graph) override;
Status activate() override;
@@ -286,6 +286,10 @@
* ignore input manager allocation
*/
bool mIgnoreInputManager = false;
+ /**
+ * Arguments set by setArgs().
+ */
+ std::string mEngineArgs;
};
/**
diff --git a/computepipe/runner/engine/Factory.cpp b/cpp/computepipe/runner/engine/Factory.cpp
similarity index 100%
rename from computepipe/runner/engine/Factory.cpp
rename to cpp/computepipe/runner/engine/Factory.cpp
diff --git a/computepipe/runner/engine/include/RunnerEngine.h b/cpp/computepipe/runner/engine/include/RunnerEngine.h
similarity index 100%
rename from computepipe/runner/engine/include/RunnerEngine.h
rename to cpp/computepipe/runner/engine/include/RunnerEngine.h
diff --git a/computepipe/runner/graph/Android.bp b/cpp/computepipe/runner/graph/Android.bp
similarity index 88%
rename from computepipe/runner/graph/Android.bp
rename to cpp/computepipe/runner/graph/Android.bp
index 614eabc..b23726b 100644
--- a/computepipe/runner/graph/Android.bp
+++ b/cpp/computepipe/runner/graph/Android.bp
@@ -29,8 +29,8 @@
header_libs: ["computepipe_runner_includes"],
include_dirs: [
- "packages/services/Car/computepipe",
- "packages/services/Car/computepipe/runner/graph",
+ "packages/services/Car/cpp/computepipe",
+ "packages/services/Car/cpp/computepipe/runner/graph",
],
shared_libs: [
@@ -64,8 +64,8 @@
header_libs: ["computepipe_runner_includes"],
include_dirs: [
- "packages/services/Car/computepipe",
- "packages/services/Car/computepipe/runner/graph",
+ "packages/services/Car/cpp/computepipe",
+ "packages/services/Car/cpp/computepipe/runner/graph",
],
shared_libs: [
diff --git a/computepipe/runner/graph/GrpcGraph.cpp b/cpp/computepipe/runner/graph/GrpcGraph.cpp
similarity index 99%
rename from computepipe/runner/graph/GrpcGraph.cpp
rename to cpp/computepipe/runner/graph/GrpcGraph.cpp
index 6967230..efd56c9 100644
--- a/computepipe/runner/graph/GrpcGraph.cpp
+++ b/cpp/computepipe/runner/graph/GrpcGraph.cpp
@@ -65,6 +65,10 @@
} // namespace
+GrpcGraph::~GrpcGraph() {
+ mStreamSetObserver.reset();
+}
+
PrebuiltGraphState GrpcGraph::GetGraphState() const {
std::lock_guard lock(mLock);
return mGraphState;
diff --git a/computepipe/runner/graph/GrpcGraph.h b/cpp/computepipe/runner/graph/GrpcGraph.h
similarity index 99%
rename from computepipe/runner/graph/GrpcGraph.h
rename to cpp/computepipe/runner/graph/GrpcGraph.h
index d833dd2..0805e35 100644
--- a/computepipe/runner/graph/GrpcGraph.h
+++ b/cpp/computepipe/runner/graph/GrpcGraph.h
@@ -45,7 +45,7 @@
public:
GrpcGraph() {}
- virtual ~GrpcGraph() {}
+ virtual ~GrpcGraph();
Status initialize(const std::string& address,
std::weak_ptr<PrebuiltEngineInterface> engineInterface);
diff --git a/computepipe/runner/graph/LocalPrebuiltGraph.cpp b/cpp/computepipe/runner/graph/LocalPrebuiltGraph.cpp
similarity index 99%
rename from computepipe/runner/graph/LocalPrebuiltGraph.cpp
rename to cpp/computepipe/runner/graph/LocalPrebuiltGraph.cpp
index ae4cc8c..821e549 100644
--- a/computepipe/runner/graph/LocalPrebuiltGraph.cpp
+++ b/cpp/computepipe/runner/graph/LocalPrebuiltGraph.cpp
@@ -179,7 +179,7 @@
const std::string& prebuilt_library,
std::weak_ptr<PrebuiltEngineInterface> engineInterface) {
std::unique_lock<std::mutex> lock(LocalPrebuiltGraph::mCreationMutex);
- if (mPrebuiltGraphInstance != nullptr) {
+ if (mPrebuiltGraphInstance == nullptr) {
mPrebuiltGraphInstance = new LocalPrebuiltGraph();
}
if (mPrebuiltGraphInstance->mGraphState.load() != PrebuiltGraphState::UNINITIALIZED) {
diff --git a/computepipe/runner/graph/LocalPrebuiltGraph.h b/cpp/computepipe/runner/graph/LocalPrebuiltGraph.h
similarity index 100%
rename from computepipe/runner/graph/LocalPrebuiltGraph.h
rename to cpp/computepipe/runner/graph/LocalPrebuiltGraph.h
diff --git a/computepipe/runner/graph/StreamSetObserver.cpp b/cpp/computepipe/runner/graph/StreamSetObserver.cpp
similarity index 95%
rename from computepipe/runner/graph/StreamSetObserver.cpp
rename to cpp/computepipe/runner/graph/StreamSetObserver.cpp
index 30e3b54..02c77a6 100644
--- a/computepipe/runner/graph/StreamSetObserver.cpp
+++ b/cpp/computepipe/runner/graph/StreamSetObserver.cpp
@@ -157,10 +157,9 @@
std::unique_lock lock(mLock);
if (mStopped) {
// Separate thread is necessary here to avoid recursive locking.
- std::thread t([streamGraphInterface(mStreamGraphInterface)]() {
+ mGraphTerminationThread = std::thread([streamGraphInterface(mStreamGraphInterface)]() {
streamGraphInterface->dispatchGraphTerminationMessage(Status::SUCCESS, "");
});
- t.detach();
return;
}
@@ -184,10 +183,15 @@
if (mStreamObservers.empty()) {
mStopped = true;
mStoppedCv.notify_one();
- std::thread t([streamGraphInterface(mStreamGraphInterface)]() {
+ mGraphTerminationThread = std::thread([streamGraphInterface(mStreamGraphInterface)]() {
streamGraphInterface->dispatchGraphTerminationMessage(Status::SUCCESS, "");
});
- t.detach();
+ }
+}
+
+StreamSetObserver::~StreamSetObserver() {
+ if (mGraphTerminationThread.joinable()) {
+ mGraphTerminationThread.join();
}
}
diff --git a/computepipe/runner/graph/StreamSetObserver.h b/cpp/computepipe/runner/graph/StreamSetObserver.h
similarity index 97%
rename from computepipe/runner/graph/StreamSetObserver.h
rename to cpp/computepipe/runner/graph/StreamSetObserver.h
index 7999f18..fe3f40f 100644
--- a/computepipe/runner/graph/StreamSetObserver.h
+++ b/cpp/computepipe/runner/graph/StreamSetObserver.h
@@ -78,6 +78,8 @@
class StreamSetObserver : public EndOfStreamReporter {
public:
+ virtual ~StreamSetObserver();
+
StreamSetObserver(const runner::ClientConfig& clientConfig,
StreamGraphInterface* streamGraphInterface);
@@ -92,6 +94,7 @@
std::map<int, std::unique_ptr<SingleStreamObserver>> mStreamObservers;
std::mutex mLock;
std::condition_variable mStoppedCv;
+ std::thread mGraphTerminationThread;
bool mStopped = true;
};
diff --git a/computepipe/runner/graph/include/PrebuiltEngineInterface.h b/cpp/computepipe/runner/graph/include/PrebuiltEngineInterface.h
similarity index 100%
rename from computepipe/runner/graph/include/PrebuiltEngineInterface.h
rename to cpp/computepipe/runner/graph/include/PrebuiltEngineInterface.h
diff --git a/computepipe/runner/graph/include/PrebuiltGraph.h b/cpp/computepipe/runner/graph/include/PrebuiltGraph.h
similarity index 100%
rename from computepipe/runner/graph/include/PrebuiltGraph.h
rename to cpp/computepipe/runner/graph/include/PrebuiltGraph.h
diff --git a/computepipe/runner/graph/proto/Android.bp b/cpp/computepipe/runner/graph/proto/Android.bp
similarity index 100%
rename from computepipe/runner/graph/proto/Android.bp
rename to cpp/computepipe/runner/graph/proto/Android.bp
diff --git a/computepipe/runner/graph/proto/GrpcPrebuiltGraphService.proto b/cpp/computepipe/runner/graph/proto/GrpcPrebuiltGraphService.proto
similarity index 100%
rename from computepipe/runner/graph/proto/GrpcPrebuiltGraphService.proto
rename to cpp/computepipe/runner/graph/proto/GrpcPrebuiltGraphService.proto
diff --git a/computepipe/runner/include/EventGenerator.h b/cpp/computepipe/runner/include/EventGenerator.h
similarity index 100%
rename from computepipe/runner/include/EventGenerator.h
rename to cpp/computepipe/runner/include/EventGenerator.h
diff --git a/computepipe/runner/include/InputFrame.h b/cpp/computepipe/runner/include/InputFrame.h
similarity index 100%
rename from computepipe/runner/include/InputFrame.h
rename to cpp/computepipe/runner/include/InputFrame.h
diff --git a/computepipe/runner/include/MemHandle.h b/cpp/computepipe/runner/include/MemHandle.h
similarity index 100%
rename from computepipe/runner/include/MemHandle.h
rename to cpp/computepipe/runner/include/MemHandle.h
diff --git a/computepipe/runner/include/PixelFormatUtils.h b/cpp/computepipe/runner/include/PixelFormatUtils.h
similarity index 100%
rename from computepipe/runner/include/PixelFormatUtils.h
rename to cpp/computepipe/runner/include/PixelFormatUtils.h
diff --git a/computepipe/runner/include/RunnerComponent.h b/cpp/computepipe/runner/include/RunnerComponent.h
similarity index 100%
rename from computepipe/runner/include/RunnerComponent.h
rename to cpp/computepipe/runner/include/RunnerComponent.h
diff --git a/computepipe/runner/include/prebuilt_interface.h b/cpp/computepipe/runner/include/prebuilt_interface.h
similarity index 97%
rename from computepipe/runner/include/prebuilt_interface.h
rename to cpp/computepipe/runner/include/prebuilt_interface.h
index 3985c53..758b7cd 100644
--- a/computepipe/runner/include/prebuilt_interface.h
+++ b/cpp/computepipe/runner/include/prebuilt_interface.h
@@ -39,9 +39,12 @@
RGB = 0,
RGBA = 1,
GRAY = 2,
- PIXEL_DATA_FORMAT_MAX = 3,
+ YUV_420 = 3,
+ PIXEL_DATA_FORMAT_MAX = 4,
};
+const char kEndOfInputStreamFlag[] = "**********EOF***********";
+
// Gets the version of the library. The runner should check if the version of
// the prebuilt matches the version of android runner for which it was built
// and fail out if needed.
diff --git a/computepipe/runner/input_manager/Android.bp b/cpp/computepipe/runner/input_manager/Android.bp
similarity index 85%
rename from computepipe/runner/input_manager/Android.bp
rename to cpp/computepipe/runner/input_manager/Android.bp
index fd17e45..fa5d17a 100644
--- a/computepipe/runner/input_manager/Android.bp
+++ b/cpp/computepipe/runner/input_manager/Android.bp
@@ -17,10 +17,13 @@
srcs: [
"Factory.cpp",
"EvsInputManager.cpp",
+ "VideoDecoder.cpp",
+ "VideoInputManager.cpp",
],
export_include_dirs: ["include"],
header_libs: [
"computepipe_runner_includes",
+ "libstagefright_headers",
],
static_libs: [
"libcomputepipeprotos",
@@ -35,6 +38,7 @@
"libhardware",
"libhidlbase",
"liblog",
+ "libmediandk",
"libpng",
"libprotobuf-cpp-lite",
"libui",
@@ -43,7 +47,7 @@
"libGLESv2",
],
include_dirs: [
- "packages/services/Car/computepipe",
- "packages/services/Car/evs/support_library",
+ "packages/services/Car/cpp/computepipe",
+ "packages/services/Car/cpp/evs/support_library",
],
}
diff --git a/computepipe/runner/input_manager/EvsInputManager.cpp b/cpp/computepipe/runner/input_manager/EvsInputManager.cpp
similarity index 94%
rename from computepipe/runner/input_manager/EvsInputManager.cpp
rename to cpp/computepipe/runner/input_manager/EvsInputManager.cpp
index 92cdf49..eff7409 100644
--- a/computepipe/runner/input_manager/EvsInputManager.cpp
+++ b/cpp/computepipe/runner/input_manager/EvsInputManager.cpp
@@ -50,19 +50,20 @@
}
}
-void AnalyzeCallback::setEngineInterface(std::shared_ptr<InputEngineInterface> inputEngineInterface) {
+void AnalyzeCallback::setEngineInterface(
+ std::shared_ptr<InputEngineInterface> inputEngineInterface) {
std::lock_guard lock(mEngineInterfaceLock);
mInputEngineInterface = inputEngineInterface;
}
EvsInputManager::EvsInputManager(const proto::InputConfig& inputConfig,
- std::shared_ptr<InputEngineInterface> inputEngineInterface)
- : mInputEngineInterface(inputEngineInterface), mInputConfig(inputConfig) {
-}
+ std::shared_ptr<InputEngineInterface> inputEngineInterface) :
+ mInputEngineInterface(inputEngineInterface),
+ mInputConfig(inputConfig) {}
std::unique_ptr<EvsInputManager> EvsInputManager::createEvsInputManager(
- const proto::InputConfig& inputConfig,
- std::shared_ptr<InputEngineInterface> inputEngineInterface) {
+ const proto::InputConfig& inputConfig, const proto::InputConfig& /*overrideConfig*/,
+ std::shared_ptr<InputEngineInterface> inputEngineInterface) {
auto evsManager = std::make_unique<EvsInputManager>(inputConfig, inputEngineInterface);
if (evsManager->initializeCameras() == Status::SUCCESS) {
return evsManager;
diff --git a/cpp/computepipe/runner/input_manager/Factory.cpp b/cpp/computepipe/runner/input_manager/Factory.cpp
new file mode 100644
index 0000000..3b2d8bb
--- /dev/null
+++ b/cpp/computepipe/runner/input_manager/Factory.cpp
@@ -0,0 +1,82 @@
+// 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.
+
+#include <android-base/logging.h>
+
+#include "EvsInputManager.h"
+#include "InputManager.h"
+#include "VideoInputManager.h"
+
+namespace android {
+namespace automotive {
+namespace computepipe {
+namespace runner {
+namespace input_manager {
+namespace {
+
+enum InputManagerType {
+ EVS = 0,
+ IMAGES,
+ VIDEO,
+};
+
+// Helper function to determine the type of input manager to be created from the
+// input config.
+// TODO(b/147803315): Implement the actual algorithm to determine the input manager to be
+// used. Right now, only EVS manager is enabled, so that is used.
+InputManagerType getInputManagerType(const proto::InputStreamConfig& streamConfig) {
+ switch (streamConfig.type()) {
+ case proto::InputStreamConfig::CAMERA:
+ return InputManagerType::EVS;
+ case proto::InputStreamConfig::IMAGE_FILES:
+ return InputManagerType::IMAGES;
+ case proto::InputStreamConfig::VIDEO_FILE:
+ return InputManagerType::VIDEO;
+ }
+}
+
+} // namespace
+std::unique_ptr<InputManager> InputManagerFactory::createInputManager(
+ const proto::InputConfig& config, const proto::InputConfig& overrideConfig,
+ std::shared_ptr<InputEngineInterface> inputEngineInterface) {
+ // Check that all streams in the config have same type.
+ for (int i = 1; i < config.input_stream_size(); i++) {
+ if (config.input_stream(i).type() != config.input_stream(0).type()) {
+ LOG(ERROR) << "Invalid input configuration with config id " << config.config_id()
+ << ". All streams must have same type.";
+ return nullptr;
+ }
+ }
+ InputManagerType inputManagerType = getInputManagerType(config.input_stream(0));
+ std::unique_ptr<InputManager> inputManager = nullptr;
+ switch (inputManagerType) {
+ case InputManagerType::EVS:
+ inputManager = EvsInputManager::createEvsInputManager(config, overrideConfig,
+ inputEngineInterface);
+ break;
+ case InputManagerType::VIDEO:
+ inputManager = VideoInputManager::createVideoInputManager(config, overrideConfig,
+ inputEngineInterface);
+ break;
+ default:
+ return nullptr;
+ }
+ return inputManager;
+}
+
+} // namespace input_manager
+} // namespace runner
+} // namespace computepipe
+} // namespace automotive
+} // namespace android
diff --git a/cpp/computepipe/runner/input_manager/VideoDecoder.cpp b/cpp/computepipe/runner/input_manager/VideoDecoder.cpp
new file mode 100644
index 0000000..cd035fe
--- /dev/null
+++ b/cpp/computepipe/runner/input_manager/VideoDecoder.cpp
@@ -0,0 +1,349 @@
+// Copyright 2020 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.
+#include <android-base/logging.h>
+#include <android-base/strings.h>
+#include <media/stagefright/MediaCodecConstants.h>
+
+#include <fcntl.h>
+#include <chrono>
+
+#include "VideoDecoder.h"
+#include "prebuilt_interface.h"
+
+namespace android {
+namespace automotive {
+namespace computepipe {
+namespace runner {
+namespace input_manager {
+namespace {
+
+const int64_t kMicrosPerSecond = 1000 * 1000;
+const int64_t kMediaCodecNonBlockingTimeoutUs = 5000; // 5ms.
+int kMaxInUseBuffers = 50;
+
+int64_t getCurrentTime() {
+ auto timePoint = std::chrono::system_clock::now();
+ return std::chrono::time_point_cast<std::chrono::microseconds>(timePoint)
+ .time_since_epoch()
+ .count();
+}
+
+PixelFormat toPixelFormat(int mediaFormat) {
+ switch (mediaFormat) {
+ case COLOR_FormatYUV420SemiPlanar:
+ return YUV_420;
+ default:
+ LOG(ERROR) << "Unsupported output format - " << mediaFormat;
+ return PIXELFORMAT_MAX;
+ }
+}
+
+} // namespace
+
+VideoDecoder::VideoDecoder(const proto::InputStreamConfig& config,
+ std::shared_ptr<InputEngineInterface> engineInterface) :
+ mEngine(engineInterface),
+ mConfig(config) {
+ if (config.has_video_config() && config.video_config().has_file_path()) {
+ mVideoPath = config.video_config().file_path();
+ }
+}
+
+VideoDecoder::~VideoDecoder() {
+ stopDecoding();
+}
+
+float VideoDecoder::getPlaybackFrameRate() {
+ if (!mExtractor) {
+ if (initializeMediaExtractor() != Status::SUCCESS) {
+ LOG(ERROR) << "VideoDecoder: Received error initializing media extractor.";
+ return 0;
+ }
+ }
+ if (!mCodec) {
+ if (initializeMediaDecoder() != Status::SUCCESS) {
+ LOG(ERROR) << "VideoDecoder: Received error initializing media codec.";
+ return 0;
+ }
+ }
+ return mPlaybackFrameRate;
+}
+
+void VideoDecoder::setInitialTimestamp(int64_t timestampMicros) {
+ mStartTimeMicros = timestampMicros;
+}
+
+Status VideoDecoder::startDecoding() {
+ mStopThread = false;
+ mDecoderThead = std::make_unique<std::thread>(&VideoDecoder::decoderThreadFunction, this);
+ return Status::SUCCESS;
+}
+
+void VideoDecoder::stopDecoding() {
+ mStopThread = true;
+ if (mDecoderThead && mDecoderThead->joinable()) {
+ mDecoderThead->join();
+ mDecoderThead = nullptr;
+ }
+ releaseResources();
+}
+
+Status VideoDecoder::initializeMediaExtractor() {
+ if (!mIsFdOpen) {
+ mFd = open(mVideoPath.c_str(), 0, O_RDONLY);
+ mIsFdOpen = true;
+ }
+ if (!mExtractor) {
+ mExtractor = AMediaExtractor_new();
+ int size = lseek(mFd, 0, SEEK_END);
+ // Reset the offset.
+ lseek(mFd, 0, SEEK_SET);
+ media_status_t status = AMediaExtractor_setDataSourceFd(mExtractor, mFd, 0, size);
+ if (status != AMEDIA_OK) {
+ LOG(ERROR) << "VideoDecoder: Received error when initializing media extractor.";
+ stopDecoding();
+ return Status::INTERNAL_ERROR;
+ }
+ }
+ return Status::SUCCESS;
+}
+
+Status VideoDecoder::initializeMediaDecoder() {
+ int numTracks = AMediaExtractor_getTrackCount(mExtractor);
+ AMediaFormat* format;
+ const char* mime;
+ int i;
+ for (i = 0; i < numTracks; i++) {
+ format = AMediaExtractor_getTrackFormat(mExtractor, i);
+ if (!AMediaFormat_getString(format, AMEDIAFORMAT_KEY_MIME, &mime)) {
+ LOG(ERROR) << "VideoDecoder: Error in fetching format string";
+ }
+
+ if (android::base::StartsWith(mime, "video/")) {
+ media_status_t status = AMediaExtractor_selectTrack(mExtractor, i);
+ if (status != AMEDIA_OK) {
+ LOG(ERROR) << "VideoDecoder: Media extractor returned error to select track.";
+ return Status::INTERNAL_ERROR;
+ }
+ break;
+ }
+ AMediaFormat_delete(format);
+ }
+ if (i == numTracks) {
+ LOG(ERROR) << "VideoDecoder: No video track in " << mVideoPath;
+ return Status::INTERNAL_ERROR;
+ }
+
+ int frameRate;
+ AMediaFormat_getInt32(format, AMEDIAFORMAT_KEY_FRAME_RATE, &frameRate);
+ // TODO(b/156102135) - parse multiplier from input proto.
+ float playbackRateMultiplier = 1.0;
+ mPlaybackFrameRate = frameRate * playbackRateMultiplier;
+
+ mCodec = AMediaCodec_createDecoderByType(mime);
+ if (!mCodec) {
+ LOG(ERROR) << "VideoDecoder: Unable to create decoder.";
+ AMediaFormat_delete(format);
+ releaseResources();
+ return Status::INTERNAL_ERROR;
+ }
+
+ media_status_t status = AMediaCodec_configure(mCodec, format, nullptr, nullptr, 0);
+ if (status != AMEDIA_OK) {
+ LOG(ERROR) << "VideoDecoder: Received error in configuring mCodec.";
+ AMediaFormat_delete(format);
+ releaseResources();
+ return Status::INTERNAL_ERROR;
+ }
+ return Status::SUCCESS;
+}
+
+void VideoDecoder::releaseResources() {
+ if (mExtractor) {
+ (void)AMediaExtractor_delete(mExtractor);
+ mExtractor = nullptr;
+ }
+ if (mCodec) {
+ while (mDecodedBuffers.size()) {
+ std::pair<int, AMediaCodecBufferInfo> buffer = mDecodedBuffers.front();
+ AMediaCodec_releaseOutputBuffer(mCodec, buffer.first, false);
+ mDecodedBuffers.pop();
+ }
+ AMediaFormat* format = AMediaCodec_getOutputFormat(mCodec);
+ AMediaFormat_delete(format);
+ (void)AMediaCodec_delete(mCodec);
+ mCodec = nullptr;
+ }
+ if (mIsFdOpen) {
+ close(mFd);
+ mIsFdOpen = false;
+ }
+}
+
+void VideoDecoder::decoderThreadFunction() {
+ if (!mExtractor || !mCodec) {
+ CHECK(initializeMediaExtractor() == Status::SUCCESS);
+ CHECK(initializeMediaDecoder() == Status::SUCCESS);
+ }
+
+ media_status_t status = AMediaCodec_start(mCodec);
+ if (status != AMEDIA_OK) {
+ LOG(ERROR) << "VideoDecoder: Received error in starting decoder.";
+ mEngine->notifyInputError();
+ return;
+ }
+
+ int frameIx = 0;
+ int loopbackCount = mLoopbackCount;
+ if (loopbackCount == 0) {
+ sendEosFlag();
+ return;
+ }
+ while (!mStopThread) {
+ // Force 64bit integer arithmetic operations.
+ int64_t frameIntervalMicros = kMicrosPerSecond / mPlaybackFrameRate;
+ int64_t frameTimeMicros = frameIx * frameIntervalMicros + mStartTimeMicros;
+
+ if (getCurrentTime() > frameTimeMicros) {
+ if (readDecodedFrame(frameTimeMicros)) {
+ frameIx++;
+ }
+ }
+ addFramesToCodec();
+ popFramesFromCodec();
+ if (mExtractorFinished && (mCountQueuedBuffers == 0) && mDecodedBuffers.empty()) {
+ --loopbackCount;
+ if (loopbackCount == 0) {
+ sendEosFlag();
+ break;
+ }
+ LOG(ERROR) << "Remaining loopback count - " << loopbackCount;
+
+ AMediaExtractor_seekTo(mExtractor, 0, AMEDIAEXTRACTOR_SEEK_CLOSEST_SYNC);
+ AMediaCodec_flush(mCodec);
+
+ mStartTimeMicros = frameTimeMicros + frameIntervalMicros;
+ frameIx = 0;
+ mExtractorFinished = false;
+ }
+ std::this_thread::sleep_for(std::chrono::milliseconds(1));
+ }
+ releaseResources();
+}
+
+void VideoDecoder::addFramesToCodec() {
+ if (mExtractorFinished) {
+ return;
+ }
+ while ((mCountQueuedBuffers + mDecodedBuffers.size()) <= kMaxInUseBuffers) {
+ size_t sampleSize = AMediaExtractor_getSampleSize(mExtractor);
+ int64_t presentationTime = AMediaExtractor_getSampleTime(mExtractor);
+ int bufferIx = AMediaCodec_dequeueInputBuffer(mCodec, kMediaCodecNonBlockingTimeoutUs);
+ if (bufferIx < 0) {
+ if (bufferIx != AMEDIACODEC_INFO_TRY_AGAIN_LATER) {
+ LOG(ERROR) << "VideoDecoder: Received error in AMediaCodec_dequeueInputBuffer";
+ }
+ return;
+ }
+ size_t bufferSize;
+ uint8_t* buffer = AMediaCodec_getInputBuffer(mCodec, bufferIx, &bufferSize);
+ if (sampleSize > bufferSize) {
+ LOG(ERROR) << "VideoDecoder: Buffer is not large enough.";
+ }
+ if (presentationTime < 0) {
+ AMediaCodec_queueInputBuffer(mCodec, bufferIx, 0 /*offset*/, 0 /*size*/,
+ presentationTime, AMEDIACODEC_BUFFER_FLAG_END_OF_STREAM);
+ mExtractorFinished = true;
+ return;
+ }
+ size_t read = AMediaExtractor_readSampleData(mExtractor, buffer, sampleSize);
+ media_status_t status = AMediaCodec_queueInputBuffer(mCodec, bufferIx, 0 /*offset*/, read,
+ presentationTime, 0 /*flags*/);
+ if (status != AMEDIA_OK) {
+ LOG(ERROR) << "VideoDecoder: Received error in queueing input buffer.";
+ }
+ mCountQueuedBuffers++;
+ AMediaExtractor_advance(mExtractor);
+ }
+}
+
+void VideoDecoder::popFramesFromCodec() {
+ while (mCountQueuedBuffers) {
+ AMediaCodecBufferInfo info;
+ int bufferIx = AMediaCodec_dequeueOutputBuffer(
+ mCodec, &info, kMediaCodecNonBlockingTimeoutUs);
+ if (bufferIx < 0) {
+ if (bufferIx != AMEDIACODEC_INFO_TRY_AGAIN_LATER) {
+ LOG(ERROR) << "VideoDecoder: Received error in AMediaCodec_dequeueOutputBuffer";
+ }
+ return;
+ }
+ mDecodedBuffers.push(std::pair<int, AMediaCodecBufferInfo>(bufferIx, info));
+ mCountQueuedBuffers--;
+ }
+}
+
+bool VideoDecoder::readDecodedFrame(int64_t frameTimeMicros) {
+ if (mDecodedBuffers.empty()) {
+ return false;
+ }
+
+ AMediaFormat* format = AMediaCodec_getOutputFormat(mCodec);
+
+ int width, height, stride, outputFormat;
+ bool success = AMediaFormat_getInt32(format, AMEDIAFORMAT_KEY_WIDTH, &width);
+ success = success && AMediaFormat_getInt32(format, AMEDIAFORMAT_KEY_HEIGHT, &height);
+ success = success && AMediaFormat_getInt32(format, AMEDIAFORMAT_KEY_STRIDE, &stride);
+ success =
+ success && AMediaFormat_getInt32(format, AMEDIAFORMAT_KEY_COLOR_FORMAT, &outputFormat);
+ if (!success) {
+ LOG(ERROR) << "Failure to find frame parameters, exiting.";
+ mEngine->notifyInputError();
+ return false;
+ }
+ PixelFormat prebuiltFormat = toPixelFormat(outputFormat);
+
+ std::pair<int, AMediaCodecBufferInfo> buffer = mDecodedBuffers.front();
+ size_t decodedOutSize;
+ uint8_t* outputBuffer = AMediaCodec_getOutputBuffer(mCodec, buffer.first, &decodedOutSize);
+
+ // Inject data to engine.
+ InputFrame inputFrame(height, width, prebuiltFormat, stride,
+ outputBuffer + buffer.second.offset);
+ mEngine->dispatchInputFrame(mConfig.stream_id(), frameTimeMicros, inputFrame);
+
+ media_status_t status = AMediaCodec_releaseOutputBuffer(mCodec, buffer.first, false);
+ if (status != AMEDIA_OK) {
+ LOG(ERROR) << "VideoDecoder: received error in releasing output buffer.";
+ }
+ mDecodedBuffers.pop();
+ return true;
+}
+
+void VideoDecoder::sendEosFlag() {
+ AMediaFormat* format = AMediaCodec_getOutputFormat(mCodec);
+ int outputFormat;
+ AMediaFormat_getInt32(format, AMEDIAFORMAT_KEY_COLOR_FORMAT, &outputFormat);
+ PixelFormat prebuiltFormat = toPixelFormat(outputFormat);
+ InputFrame inputFrame(5, 5, prebuiltFormat, 5,
+ reinterpret_cast<unsigned char*>(
+ const_cast<char*>(kEndOfInputStreamFlag)));
+ mEngine->dispatchInputFrame(mConfig.stream_id(), 0, inputFrame);
+}
+
+} // namespace input_manager
+} // namespace runner
+} // namespace computepipe
+} // namespace automotive
+} // namespace android
diff --git a/cpp/computepipe/runner/input_manager/VideoDecoder.h b/cpp/computepipe/runner/input_manager/VideoDecoder.h
new file mode 100644
index 0000000..4e31619
--- /dev/null
+++ b/cpp/computepipe/runner/input_manager/VideoDecoder.h
@@ -0,0 +1,105 @@
+// Copyright 2020 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.
+#ifndef COMPUTEPIPE_RUNNER_INPUT_MANAGER_VIDEODECODER_H_
+#define COMPUTEPIPE_RUNNER_INPUT_MANAGER_VIDEODECODER_H_
+
+#include <media/NdkMediaExtractor.h>
+
+#include <atomic>
+#include <memory>
+#include <queue>
+#include <string>
+#include <thread>
+
+#include "InputManager.h"
+#include "types/Status.h"
+
+namespace android {
+namespace automotive {
+namespace computepipe {
+namespace runner {
+namespace input_manager {
+
+class VideoDecoder {
+ public:
+ explicit VideoDecoder(const proto::InputStreamConfig& config,
+ std::shared_ptr<InputEngineInterface> engineInterface);
+
+ ~VideoDecoder();
+ /**
+ * Get the platback frame rate (frame rate at source * speed multiplier).
+ */
+ float getPlaybackFrameRate();
+ /**
+ * Set the timestamp in micros since epoch, at which first frame must be generated.
+ * All subsequest frames must be generated at timestampMicros +
+ * (fraeIndex / framesPerMicrosecond). This ensures that frames generated by multiple
+ * VideoDecoder follow same timestamp when they have same initial timestamp and frame rate.
+ */
+ void setInitialTimestamp(int64_t timestampMicros);
+
+ /**
+ * Starts video decoding.
+ */
+ Status startDecoding();
+ /**
+ * Blocking call to stop video decoding and release all resources.
+ */
+ void stopDecoding();
+
+ private:
+ Status initializeMediaExtractor();
+ Status initializeMediaDecoder();
+ void releaseResources();
+ void sendEosFlag();
+
+ void addFramesToCodec();
+ void popFramesFromCodec();
+ bool readDecodedFrame(int64_t frameTimeMicros);
+
+ void decoderThreadFunction();
+
+ std::shared_ptr<InputEngineInterface> mEngine;
+ proto::InputStreamConfig mConfig;
+ std::string mVideoPath;
+ int64_t mStartTimeMicros;
+
+ // Thread to perform video decoding.
+ std::unique_ptr<std::thread> mDecoderThead;
+
+ std::atomic<bool> mStopThread = false;
+
+ // Media decoder resources - Owned by mDecoderThead when thread is running.
+ AMediaExtractor* mExtractor = nullptr;
+ AMediaCodec* mCodec = nullptr;
+ int mFd;
+ int mIsFdOpen = false;
+ bool mExtractorFinished = false;
+
+ // Count of buffers queued to decoder.
+ int mCountQueuedBuffers = 0;
+ // Stores pair of decoded buffer ix, and buffer info.
+ std::queue<std::pair<int, AMediaCodecBufferInfo>> mDecodedBuffers;
+
+ float mPlaybackFrameRate = 0;
+ int mLoopbackCount = 1;
+};
+
+} // namespace input_manager
+} // namespace runner
+} // namespace computepipe
+} // namespace automotive
+} // namespace android
+
+#endif // COMPUTEPIPE_RUNNER_INPUT_MANAGER_VIDEODECODER_H_
diff --git a/cpp/computepipe/runner/input_manager/VideoInputManager.cpp b/cpp/computepipe/runner/input_manager/VideoInputManager.cpp
new file mode 100644
index 0000000..ddd0942
--- /dev/null
+++ b/cpp/computepipe/runner/input_manager/VideoInputManager.cpp
@@ -0,0 +1,130 @@
+// Copyright 2020 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.
+#include <android-base/logging.h>
+
+#include <fcntl.h>
+#include <chrono>
+
+#include "VideoInputManager.h"
+
+namespace android {
+namespace automotive {
+namespace computepipe {
+namespace runner {
+namespace input_manager {
+
+VideoInputManager::VideoInputManager(const proto::InputConfig& inputConfig,
+ const proto::InputConfig& /*overrideConfig*/,
+ std::shared_ptr<InputEngineInterface> inputEngineInterface) :
+ mEngine(inputEngineInterface),
+ mInputConfig(inputConfig) {}
+
+VideoInputManager::~VideoInputManager() {}
+
+std::unique_ptr<VideoInputManager> VideoInputManager::createVideoInputManager(
+ const proto::InputConfig& inputConfig, const proto::InputConfig& overrideConfig,
+ std::shared_ptr<InputEngineInterface> inputEngineInterface) {
+ return std::make_unique<VideoInputManager>(inputConfig, overrideConfig, inputEngineInterface);
+}
+
+Status VideoInputManager::handleExecutionPhase(const RunnerEvent& e) {
+ if (e.isTransitionComplete()) {
+ return Status::SUCCESS;
+ }
+
+ if (e.isPhaseEntry()) {
+ populateDecoders();
+
+ if (mVideoDecoders.empty() || mVideoDecoders.size() != mInputConfig.input_stream_size()) {
+ resetDecoders();
+ LOG(ERROR) << "Created " << mVideoDecoders.size() << " video decoders, while expecting "
+ << mInputConfig.input_stream_size() << " video decoders.";
+ return Status::INTERNAL_ERROR;
+ }
+ Status status = startDecoders();
+ if (status != Status::SUCCESS) {
+ resetDecoders();
+ }
+ return status;
+ }
+ // e.isPhaseAborted();
+ resetDecoders();
+ return Status::SUCCESS;
+}
+
+Status VideoInputManager::handleStopImmediatePhase(const RunnerEvent& /*e*/) {
+ resetDecoders();
+ return Status::SUCCESS;
+}
+
+Status VideoInputManager::handleStopWithFlushPhase(const RunnerEvent& /*e*/) {
+ resetDecoders();
+ return Status::SUCCESS;
+}
+
+Status VideoInputManager::handleResetPhase(const RunnerEvent& /*e*/) {
+ resetDecoders();
+ return Status::SUCCESS;
+}
+
+void VideoInputManager::populateDecoders() {
+ for (const auto& config : mInputConfig.input_stream()) {
+ if (config.has_video_config() && config.video_config().has_file_path() &&
+ !config.video_config().file_path().empty()) {
+ mVideoDecoders.emplace_back(std::make_unique<VideoDecoder>(config, mEngine));
+ }
+ }
+}
+
+Status VideoInputManager::startDecoders() {
+ if (mVideoDecoders.empty()) {
+ return Status::INTERNAL_ERROR;
+ }
+
+ float decoder0Rate = mVideoDecoders[0]->getPlaybackFrameRate();
+ for (int i = 1; i < mVideoDecoders.size(); i++) {
+ float currentDecoderRate = mVideoDecoders[i]->getPlaybackFrameRate();
+ if (std::fabs(decoder0Rate - currentDecoderRate) > std::numeric_limits<float>::epsilon()) {
+ LOG(ERROR) << "Different playback frame rate between streams (0, " << i
+ << "), frame rates - " << decoder0Rate << ", " << currentDecoderRate;
+ return Status::INTERNAL_ERROR;
+ }
+ }
+ auto timePoint = std::chrono::system_clock::now();
+ int64_t timestamp = std::chrono::time_point_cast<std::chrono::microseconds>(timePoint)
+ .time_since_epoch()
+ .count();
+ LOG(ERROR) << "Initial time is " << timestamp;
+ for (int i = 0; i < mVideoDecoders.size(); i++) {
+ mVideoDecoders[i]->setInitialTimestamp(timestamp);
+ Status status = mVideoDecoders[i]->startDecoding();
+ if (status != Status::SUCCESS) {
+ return status;
+ }
+ }
+ return Status::SUCCESS;
+}
+
+void VideoInputManager::resetDecoders() {
+ for (int i = 0; i < mVideoDecoders.size(); i++) {
+ mVideoDecoders[i]->stopDecoding();
+ }
+ mVideoDecoders.clear();
+}
+
+} // namespace input_manager
+} // namespace runner
+} // namespace computepipe
+} // namespace automotive
+} // namespace android
diff --git a/computepipe/runner/input_manager/include/EvsInputManager.h b/cpp/computepipe/runner/input_manager/include/EvsInputManager.h
similarity index 94%
rename from computepipe/runner/input_manager/include/EvsInputManager.h
rename to cpp/computepipe/runner/input_manager/include/EvsInputManager.h
index 899593a..b465f89 100644
--- a/computepipe/runner/input_manager/include/EvsInputManager.h
+++ b/cpp/computepipe/runner/input_manager/include/EvsInputManager.h
@@ -57,8 +57,8 @@
std::shared_ptr<InputEngineInterface> inputEngineInterface);
static std::unique_ptr<EvsInputManager> createEvsInputManager(
- const proto::InputConfig& inputConfig,
- std::shared_ptr<InputEngineInterface> inputEngineInterface);
+ const proto::InputConfig& inputConfig, const proto::InputConfig& overrideConfig,
+ std::shared_ptr<InputEngineInterface> inputEngineInterface);
Status initializeCameras();
diff --git a/computepipe/runner/input_manager/include/InputEngineInterface.h b/cpp/computepipe/runner/input_manager/include/InputEngineInterface.h
similarity index 100%
rename from computepipe/runner/input_manager/include/InputEngineInterface.h
rename to cpp/computepipe/runner/input_manager/include/InputEngineInterface.h
diff --git a/computepipe/runner/input_manager/include/InputManager.h b/cpp/computepipe/runner/input_manager/include/InputManager.h
similarity index 89%
rename from computepipe/runner/input_manager/include/InputManager.h
rename to cpp/computepipe/runner/input_manager/include/InputManager.h
index 9b12414..979cdd5 100644
--- a/computepipe/runner/input_manager/include/InputManager.h
+++ b/cpp/computepipe/runner/input_manager/include/InputManager.h
@@ -40,8 +40,9 @@
*/
class InputManagerFactory {
public:
- std::unique_ptr<InputManager> createInputManager(const proto::InputConfig& config,
- std::shared_ptr<InputEngineInterface> engine);
+ std::unique_ptr<InputManager> createInputManager(
+ const proto::InputConfig& config, const proto::InputConfig& overrideConfig,
+ std::shared_ptr<InputEngineInterface> engine);
InputManagerFactory() = default;
InputManagerFactory(const InputManagerFactory&) = delete;
InputManagerFactory& operator=(const InputManagerFactory&) = delete;
diff --git a/cpp/computepipe/runner/input_manager/include/VideoInputManager.h b/cpp/computepipe/runner/input_manager/include/VideoInputManager.h
new file mode 100644
index 0000000..0687ba8
--- /dev/null
+++ b/cpp/computepipe/runner/input_manager/include/VideoInputManager.h
@@ -0,0 +1,67 @@
+// Copyright 2020 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.
+#ifndef COMPUTEPIPE_RUNNER_INPUT_MANAGER_INCLUDE_VIDEOINPUTMANAGER_H_
+#define COMPUTEPIPE_RUNNER_INPUT_MANAGER_INCLUDE_VIDEOINPUTMANAGER_H_
+
+#include <android-base/logging.h>
+
+#include <vector>
+
+#include "InputManager.h"
+#include "VideoDecoder.h"
+#include "types/Status.h"
+
+namespace android {
+namespace automotive {
+namespace computepipe {
+namespace runner {
+namespace input_manager {
+
+class VideoInputManager : public InputManager {
+public:
+ explicit VideoInputManager(const proto::InputConfig& inputConfig,
+ const proto::InputConfig& overrideConfig,
+ std::shared_ptr<InputEngineInterface> inputEngineInterface);
+
+ ~VideoInputManager();
+
+ static std::unique_ptr<VideoInputManager> createVideoInputManager(
+ const proto::InputConfig& inputConfig, const proto::InputConfig& overrideConfig,
+ std::shared_ptr<InputEngineInterface> inputEngineInterface);
+
+ Status handleExecutionPhase(const RunnerEvent& e) override;
+
+ Status handleStopImmediatePhase(const RunnerEvent& e) override;
+
+ Status handleStopWithFlushPhase(const RunnerEvent& e) override;
+
+ Status handleResetPhase(const RunnerEvent& e) override;
+
+private:
+ void populateDecoders();
+ Status startDecoders();
+ void resetDecoders();
+ std::shared_ptr<InputEngineInterface> mEngine;
+
+ proto::InputConfig mInputConfig;
+ std::vector<std::unique_ptr<VideoDecoder>> mVideoDecoders;
+};
+
+} // namespace input_manager
+} // namespace runner
+} // namespace computepipe
+} // namespace automotive
+} // namespace android
+
+#endif // COMPUTEPIPE_RUNNER_INPUT_MANAGER_INCLUDE_VIDEOINPUTMANAGER_H_
diff --git a/computepipe/runner/stream_manager/Android.bp b/cpp/computepipe/runner/stream_manager/Android.bp
similarity index 80%
rename from computepipe/runner/stream_manager/Android.bp
rename to cpp/computepipe/runner/stream_manager/Android.bp
index 7a5cd5a..e1bead3 100644
--- a/computepipe/runner/stream_manager/Android.bp
+++ b/cpp/computepipe/runner/stream_manager/Android.bp
@@ -21,8 +21,8 @@
],
export_include_dirs: ["include"],
visibility: [
- "//packages/services/Car/computepipe/runner:__subpackages__",
- "//packages/services/Car/computepipe/tests:__subpackages__",
+ "//packages/services/Car/cpp/computepipe/runner:__subpackages__",
+ "//packages/services/Car/cpp/computepipe/tests:__subpackages__",
],
header_libs: [
"computepipe_runner_includes",
@@ -37,7 +37,7 @@
"libnativewindow",
],
include_dirs: [
- "packages/services/Car/computepipe",
+ "packages/services/Car/cpp/computepipe",
],
}
@@ -47,8 +47,8 @@
"MockEngine.cpp",
],
visibility: [
- "//packages/services/Car/computepipe/runner:__subpackages__",
- "//packages/services/Car/computepipe/tests:__subpackages__",
+ "//packages/services/Car/cpp/computepipe/runner:__subpackages__",
+ "//packages/services/Car/cpp/computepipe/tests:__subpackages__",
],
header_libs: [
"computepipe_runner_includes",
@@ -65,6 +65,6 @@
"libnativewindow",
],
include_dirs: [
- "packages/services/Car/computepipe",
+ "packages/services/Car/cpp/computepipe",
],
}
diff --git a/computepipe/runner/stream_manager/Factory.cpp b/cpp/computepipe/runner/stream_manager/Factory.cpp
similarity index 100%
rename from computepipe/runner/stream_manager/Factory.cpp
rename to cpp/computepipe/runner/stream_manager/Factory.cpp
diff --git a/computepipe/runner/stream_manager/MockEngine.cpp b/cpp/computepipe/runner/stream_manager/MockEngine.cpp
similarity index 100%
rename from computepipe/runner/stream_manager/MockEngine.cpp
rename to cpp/computepipe/runner/stream_manager/MockEngine.cpp
diff --git a/computepipe/runner/stream_manager/MockEngine.h b/cpp/computepipe/runner/stream_manager/MockEngine.h
similarity index 100%
rename from computepipe/runner/stream_manager/MockEngine.h
rename to cpp/computepipe/runner/stream_manager/MockEngine.h
diff --git a/computepipe/runner/stream_manager/PixelStreamManager.cpp b/cpp/computepipe/runner/stream_manager/PixelStreamManager.cpp
similarity index 100%
rename from computepipe/runner/stream_manager/PixelStreamManager.cpp
rename to cpp/computepipe/runner/stream_manager/PixelStreamManager.cpp
diff --git a/computepipe/runner/stream_manager/PixelStreamManager.h b/cpp/computepipe/runner/stream_manager/PixelStreamManager.h
similarity index 100%
rename from computepipe/runner/stream_manager/PixelStreamManager.h
rename to cpp/computepipe/runner/stream_manager/PixelStreamManager.h
diff --git a/computepipe/runner/stream_manager/SemanticManager.cpp b/cpp/computepipe/runner/stream_manager/SemanticManager.cpp
similarity index 100%
rename from computepipe/runner/stream_manager/SemanticManager.cpp
rename to cpp/computepipe/runner/stream_manager/SemanticManager.cpp
diff --git a/computepipe/runner/stream_manager/SemanticManager.h b/cpp/computepipe/runner/stream_manager/SemanticManager.h
similarity index 100%
rename from computepipe/runner/stream_manager/SemanticManager.h
rename to cpp/computepipe/runner/stream_manager/SemanticManager.h
diff --git a/computepipe/runner/stream_manager/StreamManagerInit.h b/cpp/computepipe/runner/stream_manager/StreamManagerInit.h
similarity index 100%
rename from computepipe/runner/stream_manager/StreamManagerInit.h
rename to cpp/computepipe/runner/stream_manager/StreamManagerInit.h
diff --git a/computepipe/runner/stream_manager/include/StreamEngineInterface.h b/cpp/computepipe/runner/stream_manager/include/StreamEngineInterface.h
similarity index 100%
rename from computepipe/runner/stream_manager/include/StreamEngineInterface.h
rename to cpp/computepipe/runner/stream_manager/include/StreamEngineInterface.h
diff --git a/computepipe/runner/stream_manager/include/StreamManager.h b/cpp/computepipe/runner/stream_manager/include/StreamManager.h
similarity index 100%
rename from computepipe/runner/stream_manager/include/StreamManager.h
rename to cpp/computepipe/runner/stream_manager/include/StreamManager.h
diff --git a/computepipe/sepolicy/private/computepipe_router.te b/cpp/computepipe/sepolicy/private/computepipe_router.te
similarity index 100%
rename from computepipe/sepolicy/private/computepipe_router.te
rename to cpp/computepipe/sepolicy/private/computepipe_router.te
diff --git a/computepipe/sepolicy/private/computepipeclientdomain.te b/cpp/computepipe/sepolicy/private/computepipeclientdomain.te
similarity index 100%
rename from computepipe/sepolicy/private/computepipeclientdomain.te
rename to cpp/computepipe/sepolicy/private/computepipeclientdomain.te
diff --git a/computepipe/sepolicy/private/computepiperunnerdomain.te b/cpp/computepipe/sepolicy/private/computepiperunnerdomain.te
similarity index 100%
rename from computepipe/sepolicy/private/computepiperunnerdomain.te
rename to cpp/computepipe/sepolicy/private/computepiperunnerdomain.te
diff --git a/computepipe/sepolicy/private/file_contexts b/cpp/computepipe/sepolicy/private/file_contexts
similarity index 100%
rename from computepipe/sepolicy/private/file_contexts
rename to cpp/computepipe/sepolicy/private/file_contexts
diff --git a/computepipe/sepolicy/private/service_contexts b/cpp/computepipe/sepolicy/private/service_contexts
similarity index 100%
rename from computepipe/sepolicy/private/service_contexts
rename to cpp/computepipe/sepolicy/private/service_contexts
diff --git a/computepipe/sepolicy/public/attributes b/cpp/computepipe/sepolicy/public/attributes
similarity index 100%
rename from computepipe/sepolicy/public/attributes
rename to cpp/computepipe/sepolicy/public/attributes
diff --git a/computepipe/sepolicy/public/computepipe_router.te b/cpp/computepipe/sepolicy/public/computepipe_router.te
similarity index 100%
rename from computepipe/sepolicy/public/computepipe_router.te
rename to cpp/computepipe/sepolicy/public/computepipe_router.te
diff --git a/computepipe/sepolicy/public/service.te b/cpp/computepipe/sepolicy/public/service.te
similarity index 100%
rename from computepipe/sepolicy/public/service.te
rename to cpp/computepipe/sepolicy/public/service.te
diff --git a/computepipe/tests/Android.bp b/cpp/computepipe/tests/Android.bp
similarity index 100%
rename from computepipe/tests/Android.bp
rename to cpp/computepipe/tests/Android.bp
diff --git a/computepipe/tests/FakeRunner.cpp b/cpp/computepipe/tests/FakeRunner.cpp
similarity index 100%
rename from computepipe/tests/FakeRunner.cpp
rename to cpp/computepipe/tests/FakeRunner.cpp
diff --git a/computepipe/tests/FakeRunner.h b/cpp/computepipe/tests/FakeRunner.h
similarity index 100%
rename from computepipe/tests/FakeRunner.h
rename to cpp/computepipe/tests/FakeRunner.h
diff --git a/computepipe/tests/PipeQueryTest.cpp b/cpp/computepipe/tests/PipeQueryTest.cpp
similarity index 100%
rename from computepipe/tests/PipeQueryTest.cpp
rename to cpp/computepipe/tests/PipeQueryTest.cpp
diff --git a/computepipe/tests/PipeRegistrationTest.cpp b/cpp/computepipe/tests/PipeRegistrationTest.cpp
similarity index 100%
rename from computepipe/tests/PipeRegistrationTest.cpp
rename to cpp/computepipe/tests/PipeRegistrationTest.cpp
diff --git a/cpp/computepipe/tests/fuzz/Android.bp b/cpp/computepipe/tests/fuzz/Android.bp
new file mode 100644
index 0000000..e8628b2
--- /dev/null
+++ b/cpp/computepipe/tests/fuzz/Android.bp
@@ -0,0 +1,177 @@
+// Copyright 2020 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.
+
+cc_library_static {
+ name: "libcomputepipeprotosfuzz",
+ proto: {
+ export_proto_headers: true,
+ },
+ shared_libs: ["libprotobuf-cpp-full"],
+ cflags: [
+ "-Wall",
+ "-Werror",
+ "-Wno-unused-parameter",
+ ],
+ srcs: [
+ "Fuzz.proto",
+ ],
+}
+
+cc_defaults {
+ name: "libcomputepipefuzz-defaults",
+ cflags: [
+ "-Wall",
+ "-Werror",
+ "-Wno-unused-parameter",
+ "-Wno-unused-variable",
+ ],
+ static_libs: [
+ "computepipe_runner_component",
+ "computepipe_runner_engine",
+ "computepipe_stream_manager",
+ "computepipe_input_manager",
+ "libcomputepipeprotos",
+ "libgtest",
+ "libgmock",
+ "mock_stream_engine_interface",
+ ],
+ shared_libs: [
+ "libbase",
+ "liblog",
+ "libnativewindow",
+ "libmediandk",
+ "libprotobuf-cpp-lite",
+ ],
+ header_libs: [
+ "computepipe_runner_includes",
+ "graph_test_headers",
+ ],
+ include_dirs: [
+ "packages/services/Car/cpp/computepipe",
+ "packages/services/Car/cpp/computepipe/runner/stream_manager",
+ "packages/services/Car/cpp/computepipe/runner/input_manager",
+ "packages/services/Car/cpp/computepipe/runner/input_manager/include",
+ "packages/services/Car/cpp/computepipe/runner/engine",
+ "packages/services/Car/cpp/computepipe/runner/debug_display_manager/include",
+ "packages/services/Car/cpp/computepipe/runner/client_interface/include/",
+ "packages/services/Car/cpp/computepipe/runner/graph/include/",
+ ],
+
+ fuzz_config: {
+ cc: [
+ "guodonghu@google.com",
+ "hanumantsingh@google.com",
+ "kathan@google.com",
+ "smara@google.com",
+ "zhaomingyin@google.com",
+ ],
+ },
+}
+
+cc_fuzz {
+ name: "computepipe_pixel_mem_handle_fuzzer",
+ defaults: ["libcomputepipefuzz-defaults"],
+ srcs: [
+ "PixelMemHandleFuzzer.cpp",
+ ],
+ shared_libs: [
+ "libprotobuf-cpp-full",
+ ],
+ static_libs: [
+ "libcomputepipeprotosfuzz",
+ "libprotobuf-mutator",
+ ],
+}
+
+cc_fuzz {
+ name: "computepipe_pixel_stream_manager_fuzzer",
+ defaults: ["libcomputepipefuzz-defaults"],
+ srcs: [
+ "PixelStreamManagerFuzzer.cpp",
+ ],
+ shared_libs: [
+ "libprotobuf-cpp-full",
+ ],
+ static_libs: [
+ "libcomputepipeprotosfuzz",
+ "libprotobuf-mutator",
+ ],
+}
+
+cc_fuzz {
+ name: "computepipe_semantic_manager_fuzzer",
+ defaults: ["libcomputepipefuzz-defaults"],
+ srcs: [
+ "SemanticManagerFuzzer.cpp",
+ ],
+}
+
+cc_fuzz {
+ name: "video_input_manager_fuzzer",
+ defaults: ["libcomputepipefuzz-defaults"],
+ cppflags:[
+ "-fexceptions",
+ ],
+ srcs: [
+ "VideoInputManagerFuzzer.cpp",
+ ],
+ data: [
+ "corpus/video_input_manager/*"
+ ],
+}
+
+cc_fuzz {
+ name: "local_prebuild_graph_fuzzer",
+ defaults: ["libcomputepipefuzz-defaults"],
+ cppflags:[
+ "-fexceptions",
+ ],
+ static_libs: [
+ "computepipe_prebuilt_graph",
+ ],
+ shared_libs: [
+ "libstubgraphimpl",
+ ],
+ include_dirs: [
+ "packages/services/Car/cpp/computepipe",
+ "packages/services/Car/cpp/computepipe/runner/graph",
+ ],
+ srcs: [
+ "LocalPrebuildGraphFuzzer.cpp",
+ ],
+}
+
+cc_fuzz {
+ name: "grpc_graph_fuzzer",
+ defaults: ["libcomputepipefuzz-defaults"],
+ cppflags:[
+ "-fexceptions",
+ ],
+ static_libs: [
+ "computepipe_grpc_graph_proto",
+ ],
+ shared_libs: [
+ "computepipe_grpc_graph",
+ "libcomputepipeprotos",
+ "libgrpc++",
+ "libprotobuf-cpp-full",
+ ],
+ include_dirs: [
+ "packages/services/Car/cpp/computepipe",
+ "packages/services/Car/cpp/computepipe/runner/graph",
+ ],
+ srcs: [
+ "GrpcGraphFuzzer.cpp",
+ ],
+}
diff --git a/cpp/computepipe/tests/fuzz/Common.h b/cpp/computepipe/tests/fuzz/Common.h
new file mode 100644
index 0000000..9934b61
--- /dev/null
+++ b/cpp/computepipe/tests/fuzz/Common.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2020 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.
+ */
+
+#ifndef CPP_COMPUTEPIPE_TESTS_FUZZ_COMMON_H_
+#define CPP_COMPUTEPIPE_TESTS_FUZZ_COMMON_H_
+
+namespace android {
+namespace automotive {
+namespace computepipe {
+namespace runner {
+namespace test {
+
+const int kMaxFuzzerConsumedBytes = 12;
+
+#define RUNNER_COMP_BASE_ENUM \
+ HANDLE_CONFIG_PHASE, /* verify handleConfigPhase */ \
+ HANDLE_EXECUTION_PHASE, /* verify handleExecutionPhase */ \
+ HANDLE_STOP_IMMEDIATE_PHASE, /* verify handleStopImmediatePhase */ \
+ HANDLE_STOP_WITH_FLUSH_PHASE, /* verify handleStopWithFlushPhase */ \
+ HANDLE_RESET_PHASE, /* verify handleResetPhase */ \
+ API_SUM
+
+#define GRAPH_RUNNER_BASE_ENUM \
+ GET_GRAPH_TYPE, /* verify GetGraphType */ \
+ GET_GRAPH_STATE, /* verify GetGraphState */ \
+ GET_STATUS, /* verify GetStatus */ \
+ GET_ERROR_MESSAGE, /* verify GetErrorMessage */ \
+ GET_SUPPORTED_GRAPH_CONFIGS, /* verify GetSupportedGraphConfigs */ \
+ SET_INPUT_STREAM_DATA, /* verify SetInputStreamData */ \
+ SET_INPUT_STREAM_PIXEL_DATA, /* verify SetInputStreamPixelData */ \
+ START_GRAPH_PROFILING, /* verify StartGraphProfiling */ \
+ STOP_GRAPH_PROFILING /* verify StopGraphProfiling */
+
+const char kAddress[16] = "[::]:10000";
+
+} // namespace test
+} // namespace runner
+} // namespace computepipe
+} // namespace automotive
+} // namespace android
+
+#endif // CPP_COMPUTEPIPE_TESTS_FUZZ_COMMON_H_
diff --git a/cpp/computepipe/tests/fuzz/Fuzz.proto b/cpp/computepipe/tests/fuzz/Fuzz.proto
new file mode 100644
index 0000000..31495d8
--- /dev/null
+++ b/cpp/computepipe/tests/fuzz/Fuzz.proto
@@ -0,0 +1,21 @@
+syntax = "proto2";
+
+package android.automotive.computepipe.fuzz.proto;
+
+enum PixelFormat {
+ RGB = 0;
+ RGBA = 1;
+ GRAY = 2;
+}
+
+message Frame {
+ required uint32 height = 1;
+ required uint32 width = 2;
+ required PixelFormat format = 3;
+ required uint32 stride = 4;
+ required string buffer = 5;
+}
+
+message PixelMemHandleFuzzerInput {
+ repeated Frame frames = 1;
+}
\ No newline at end of file
diff --git a/cpp/computepipe/tests/fuzz/GrpcGraphFuzzer.cpp b/cpp/computepipe/tests/fuzz/GrpcGraphFuzzer.cpp
new file mode 100644
index 0000000..0f93aac
--- /dev/null
+++ b/cpp/computepipe/tests/fuzz/GrpcGraphFuzzer.cpp
@@ -0,0 +1,167 @@
+/*
+ * Copyright 2020 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.
+ */
+
+#include <android-base/logging.h>
+#include <fuzzer/FuzzedDataProvider.h>
+#include <gmock/gmock.h>
+#include "ClientConfig.pb.h"
+#include "Common.h"
+#include "GrpcGraph.h"
+#include "GrpcGraphServerImpl.h"
+
+using ::android::automotive::computepipe::runner::ClientConfig;
+
+namespace android {
+namespace automotive {
+namespace computepipe {
+namespace graph {
+
+namespace {
+
+enum GRPC_GRAPH_FUZZ_FUNCS {
+ GRAPH_RUNNER_BASE_ENUM,
+ DISPATCH_PIXEL_DATA, /* verify dispatchPixelData */
+ DISPATCH_SERIALIZED_DATA, /* dispatchSerializedData */
+ DISPATCH_GRAPH_TERMINATION_MSG, /* dispatchGraphTerminationMessage */
+ RUNNER_COMP_BASE_ENUM
+};
+
+bool DoInitialization() {
+ // Initialization goes here
+ std::shared_ptr<GrpcGraphServerImpl> server;
+ server = std::make_shared<GrpcGraphServerImpl>(runner::test::kAddress);
+ std::thread t = std::thread([server]() { server->startServer(); });
+ t.detach();
+ std::this_thread::sleep_for(std::chrono::seconds(1));
+ return true;
+}
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+ static bool initialized = DoInitialization();
+ std::shared_ptr<PrebuiltEngineInterfaceImpl> engine;
+ std::unique_ptr<GrpcGraph> graph = std::make_unique<GrpcGraph>();
+ engine = std::make_shared<PrebuiltEngineInterfaceImpl>();
+ Status status = graph->initialize(runner::test::kAddress, engine);
+ if (status != Status::SUCCESS) {
+ LOG(ERROR) << "Initialization of GrpcGraph failed, aborting...";
+ exit(1);
+ }
+
+ // Fuzz goes here
+ FuzzedDataProvider fdp(data, size);
+ while (fdp.remaining_bytes() > runner::test::kMaxFuzzerConsumedBytes) {
+ switch (fdp.ConsumeIntegralInRange<uint32_t>(0, API_SUM - 1)) {
+ case GET_GRAPH_TYPE: {
+ graph->GetGraphType();
+ break;
+ }
+ case GET_GRAPH_STATE: {
+ graph->GetGraphState();
+ break;
+ }
+ case GET_STATUS: {
+ graph->GetStatus();
+ break;
+ }
+ case GET_ERROR_MESSAGE: {
+ graph->GetErrorMessage();
+ break;
+ }
+ case GET_SUPPORTED_GRAPH_CONFIGS: {
+ graph->GetSupportedGraphConfigs();
+ break;
+ }
+ case SET_INPUT_STREAM_DATA: {
+ graph->SetInputStreamData(/*streamIndex =*/2, /* timestamp =*/0, /* data =*/"");
+ break;
+ }
+ case SET_INPUT_STREAM_PIXEL_DATA: {
+ runner::InputFrame inputFrame(0, 0, PixelFormat::RGB, 0, nullptr);
+ graph->SetInputStreamPixelData(/*streamIndex =*/1, /*timestamp =*/0,
+ /*inputFrame =*/inputFrame);
+ break;
+ }
+ case START_GRAPH_PROFILING: {
+ graph->StartGraphProfiling();
+ break;
+ }
+ case STOP_GRAPH_PROFILING: {
+ graph->StopGraphProfiling();
+ break;
+ }
+ case HANDLE_CONFIG_PHASE: {
+ std::map<int, int> maxOutputPacketsPerStream;
+ ClientConfig e(0, 0, 0, maxOutputPacketsPerStream, proto::ProfilingType::DISABLED);
+ e.setPhaseState(runner::PhaseState::ENTRY);
+ graph->handleConfigPhase(e);
+ break;
+ }
+ case HANDLE_EXECUTION_PHASE: {
+ std::map<int, int> maxOutputPacketsPerStream;
+ ClientConfig e(0, 0, 0, maxOutputPacketsPerStream, proto::ProfilingType::DISABLED);
+ e.setPhaseState(runner::PhaseState::ENTRY);
+ graph->handleExecutionPhase(e);
+ break;
+ }
+ case HANDLE_STOP_IMMEDIATE_PHASE: {
+ std::map<int, int> maxOutputPacketsPerStream;
+ ClientConfig e(0, 0, 0, maxOutputPacketsPerStream, proto::ProfilingType::DISABLED);
+ e.setPhaseState(runner::PhaseState::ENTRY);
+ graph->handleStopImmediatePhase(e);
+ break;
+ }
+ case HANDLE_STOP_WITH_FLUSH_PHASE: {
+ std::map<int, int> maxOutputPacketsPerStream;
+ ClientConfig e(0, 0, 0, maxOutputPacketsPerStream, proto::ProfilingType::DISABLED);
+ e.setPhaseState(runner::PhaseState::ENTRY);
+ graph->handleStopWithFlushPhase(e);
+ break;
+ }
+ case HANDLE_RESET_PHASE: {
+ std::map<int, int> maxOutputPacketsPerStream;
+ ClientConfig e(0, 0, 0, maxOutputPacketsPerStream, proto::ProfilingType::DISABLED);
+ e.setPhaseState(runner::PhaseState::ENTRY);
+ graph->handleResetPhase(e);
+ break;
+ }
+ case DISPATCH_PIXEL_DATA: {
+ runner::InputFrame inputFrame(0, 0, PixelFormat::RGB, 0, nullptr);
+ graph->dispatchPixelData(/*streamIndex =*/2, /*timestamp =*/0,
+ /*inputFrame =*/inputFrame);
+ break;
+ }
+ case DISPATCH_SERIALIZED_DATA: {
+ graph->dispatchSerializedData(/*streamIndex =*/1, /* timestamp =*/0, /* data =*/"");
+ break;
+ }
+ case DISPATCH_GRAPH_TERMINATION_MSG: {
+ uint8_t status = fdp.ConsumeIntegralInRange<uint8_t>(0, Status::STATUS_MAX - 1);
+ graph->dispatchGraphTerminationMessage(static_cast<Status>(status), "");
+ break;
+ }
+ default:
+ LOG(ERROR) << "Unexpected option aborting...";
+ break;
+ }
+ }
+ return 0;
+}
+
+} // namespace
+} // namespace graph
+} // namespace computepipe
+} // namespace automotive
+} // namespace android
diff --git a/cpp/computepipe/tests/fuzz/LocalPrebuildGraphFuzzer.cpp b/cpp/computepipe/tests/fuzz/LocalPrebuildGraphFuzzer.cpp
new file mode 100644
index 0000000..c7398e4
--- /dev/null
+++ b/cpp/computepipe/tests/fuzz/LocalPrebuildGraphFuzzer.cpp
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2020 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.
+ */
+
+#include <android-base/logging.h>
+#include <fuzzer/FuzzedDataProvider.h>
+#include <gmock/gmock.h>
+#include "ClientConfig.pb.h"
+#include "Common.h"
+#include "LocalPrebuiltGraph.h"
+#include "PrebuiltEngineInterfaceImpl.h"
+
+using ::android::automotive::computepipe::runner::ClientConfig;
+
+namespace android {
+namespace automotive {
+namespace computepipe {
+namespace graph {
+
+namespace {
+
+enum LOCAL_PREBUILD_GRAPH_FUZZ_FUNCS { GRAPH_RUNNER_BASE_ENUM, RUNNER_COMP_BASE_ENUM };
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+ // Initialization goes here
+ bool graphHasTerminated = false;
+ int numOutputStreamCallbacksReceived[4] = {0, 0, 0, 0};
+
+ PrebuiltEngineInterfaceImpl callback;
+ callback.SetGraphTerminationCallback(
+ [&graphHasTerminated](Status, std::string) { graphHasTerminated = true; });
+
+ // Add multiple pixel stream callback functions to see if all of them register.
+ callback.SetPixelCallback([&numOutputStreamCallbacksReceived](int streamIndex, int64_t,
+ const runner::InputFrame&) {
+ ASSERT_TRUE(streamIndex == 0 || streamIndex == 1);
+ numOutputStreamCallbacksReceived[streamIndex]++;
+ });
+
+ // Add multiple stream callback functions to see if all of them register.
+ callback.SetSerializedStreamCallback(
+ [&numOutputStreamCallbacksReceived](int streamIndex, int64_t, std::string&&) {
+ ASSERT_TRUE(streamIndex == 2 || streamIndex == 3);
+ numOutputStreamCallbacksReceived[streamIndex]++;
+ });
+
+ std::shared_ptr<PrebuiltEngineInterface> engineInterface =
+ std::static_pointer_cast<PrebuiltEngineInterface, PrebuiltEngineInterfaceImpl>(
+ std::make_shared<PrebuiltEngineInterfaceImpl>(callback));
+ PrebuiltGraph* graph = GetLocalGraphFromLibrary("libstubgraphimpl.so", engineInterface);
+
+ // Fuzz goes here
+ FuzzedDataProvider fdp(data, size);
+ while (fdp.remaining_bytes() > runner::test::kMaxFuzzerConsumedBytes) {
+ switch (fdp.ConsumeIntegralInRange<uint32_t>(0, API_SUM - 1)) {
+ case GET_GRAPH_TYPE: {
+ graph->GetGraphType();
+ break;
+ }
+ case GET_GRAPH_STATE: {
+ graph->GetGraphState();
+ break;
+ }
+ case GET_STATUS: {
+ graph->GetStatus();
+ break;
+ }
+ case GET_ERROR_MESSAGE: {
+ graph->GetErrorMessage();
+ break;
+ }
+ case GET_SUPPORTED_GRAPH_CONFIGS: {
+ graph->GetSupportedGraphConfigs();
+ break;
+ }
+ case SET_INPUT_STREAM_DATA: {
+ graph->SetInputStreamData(/*streamIndex =*/2, /* timestamp =*/0, /* data =*/"");
+ break;
+ }
+ case SET_INPUT_STREAM_PIXEL_DATA: {
+ runner::InputFrame inputFrame(0, 0, PixelFormat::RGB, 0, nullptr);
+ graph->SetInputStreamPixelData(/*streamIndex =*/1, /*timestamp =*/0,
+ /*inputFrame =*/inputFrame);
+ break;
+ }
+ case START_GRAPH_PROFILING: {
+ graph->StartGraphProfiling();
+ break;
+ }
+ case STOP_GRAPH_PROFILING: {
+ graph->StopGraphProfiling();
+ break;
+ }
+ case HANDLE_CONFIG_PHASE: {
+ std::map<int, int> maxOutputPacketsPerStream;
+ ClientConfig e(0, 0, 0, maxOutputPacketsPerStream, proto::ProfilingType::DISABLED);
+ e.setPhaseState(runner::PhaseState::ENTRY);
+ graph->handleConfigPhase(e);
+ break;
+ }
+ case HANDLE_EXECUTION_PHASE: {
+ std::map<int, int> maxOutputPacketsPerStream;
+ ClientConfig e(0, 0, 0, maxOutputPacketsPerStream, proto::ProfilingType::DISABLED);
+ e.setPhaseState(runner::PhaseState::ENTRY);
+ graph->handleExecutionPhase(e);
+ break;
+ }
+ case HANDLE_STOP_IMMEDIATE_PHASE: {
+ std::map<int, int> maxOutputPacketsPerStream;
+ ClientConfig e(0, 0, 0, maxOutputPacketsPerStream, proto::ProfilingType::DISABLED);
+ e.setPhaseState(runner::PhaseState::ENTRY);
+ graph->handleStopImmediatePhase(e);
+ break;
+ }
+ case HANDLE_STOP_WITH_FLUSH_PHASE: {
+ std::map<int, int> maxOutputPacketsPerStream;
+ ClientConfig e(0, 0, 0, maxOutputPacketsPerStream, proto::ProfilingType::DISABLED);
+ e.setPhaseState(runner::PhaseState::ENTRY);
+ graph->handleStopWithFlushPhase(e);
+ break;
+ }
+ case HANDLE_RESET_PHASE: {
+ std::map<int, int> maxOutputPacketsPerStream;
+ ClientConfig e(0, 0, 0, maxOutputPacketsPerStream, proto::ProfilingType::DISABLED);
+ e.setPhaseState(runner::PhaseState::ENTRY);
+ graph->handleResetPhase(e);
+ break;
+ }
+ default:
+ LOG(ERROR) << "Unexpected option aborting...";
+ break;
+ }
+ }
+ return 0;
+}
+
+} // namespace
+} // namespace graph
+} // namespace computepipe
+} // namespace automotive
+} // namespace android
diff --git a/cpp/computepipe/tests/fuzz/PixelMemHandleFuzzer.cpp b/cpp/computepipe/tests/fuzz/PixelMemHandleFuzzer.cpp
new file mode 100644
index 0000000..3e98e2a
--- /dev/null
+++ b/cpp/computepipe/tests/fuzz/PixelMemHandleFuzzer.cpp
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2020 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.
+ */
+
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+#include <vndk/hardware_buffer.h>
+
+#include "InputFrame.h"
+#include "PixelFormatUtils.h"
+#include "PixelStreamManager.h"
+#include "gmock/gmock-matchers.h"
+#include "Fuzz.pb.h"
+#include "src/libfuzzer/libfuzzer_macro.h"
+
+namespace android {
+namespace automotive {
+namespace computepipe {
+namespace runner {
+namespace stream_manager {
+namespace {
+
+InputFrame convertToInputFrame(const fuzz::proto::Frame frame) {
+ uint32_t height = frame.height();
+ uint32_t width = frame.width();
+ uint32_t stride = frame.stride();
+ PixelFormat pixelFormat = static_cast<PixelFormat>(frame.format());
+ const uint8_t* data = reinterpret_cast<const uint8_t*>(frame.buffer().c_str());
+ return InputFrame(height, width, pixelFormat, stride, data);
+}
+
+int setFrameDataTest(const fuzz::proto::PixelMemHandleFuzzerInput& input) {
+ int bufferId = 10;
+ int streamId = 1;
+ uint64_t timestamp = 100;
+
+ PixelMemHandle memHandle(bufferId, streamId, AHARDWAREBUFFER_USAGE_CPU_READ_OFTEN);
+ InputFrame oldInputFrame = convertToInputFrame(input.frames().Get(0));
+ memHandle.setFrameData(timestamp, oldInputFrame);
+
+ // overwrite frame data with different format and dimensions
+ InputFrame newInputFrame = convertToInputFrame(input.frames().Get(1));
+ memHandle.setFrameData(timestamp, newInputFrame);
+
+ AHardwareBuffer_Desc desc;
+ AHardwareBuffer* buffer = memHandle.getHardwareBuffer();
+ AHardwareBuffer_describe(buffer, &desc);
+ return 0;
+}
+
+bool isValid(const fuzz::proto::PixelMemHandleFuzzerInput& input) {
+ for (auto& frame : input.frames()) {
+ uint64_t height = frame.height();
+ uint64_t width = frame.width();
+ uint64_t stride = frame.stride();
+ uint64_t size = frame.buffer().size();
+ if (stride > width * height) {
+ return false;
+ }
+
+ if (height * width != size) {
+ return false;
+ }
+
+ if (height * width == 0) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+// generate guided and mutated frame data for fuzzing
+DEFINE_PROTO_FUZZER(const fuzz::proto::PixelMemHandleFuzzerInput& input) {
+ static PostProcessorRegistration reg = {
+ [](const fuzz::proto::PixelMemHandleFuzzerInput* input, unsigned int seed) {
+ if (input->frames().size() < 2) {
+ return;
+ }
+
+ if (!isValid(*input)) {
+ return;
+ }
+
+ setFrameDataTest(*input);
+ }
+ };
+}
+
+} // namespace
+} // namespace stream_manager
+} // namespace runner
+} // namespace computepipe
+} // namespace automotive
+} // namespace android
diff --git a/cpp/computepipe/tests/fuzz/PixelStreamManagerFuzzer.cpp b/cpp/computepipe/tests/fuzz/PixelStreamManagerFuzzer.cpp
new file mode 100644
index 0000000..1a8c83e
--- /dev/null
+++ b/cpp/computepipe/tests/fuzz/PixelStreamManagerFuzzer.cpp
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2020 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.
+ */
+
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+#include <vndk/hardware_buffer.h>
+
+#include <fuzzer/FuzzedDataProvider.h>
+#include "EventGenerator.h"
+#include "InputFrame.h"
+#include "MockEngine.h"
+#include "OutputConfig.pb.h"
+#include "PixelFormatUtils.h"
+#include "PixelStreamManager.h"
+#include "RunnerComponent.h"
+#include "StreamEngineInterface.h"
+#include "StreamManager.h"
+#include "src/libfuzzer/libfuzzer_macro.h"
+#include "types/Status.h"
+
+using ::android::automotive::computepipe::runner::generator::DefaultEvent;
+using ::testing::Return;
+
+namespace android {
+namespace automotive {
+namespace computepipe {
+namespace runner {
+namespace stream_manager {
+namespace {
+
+enum State {
+ RESET = 0,
+ RUN,
+ STOP_WITH_FLUSH,
+ STOP_IMMEDIATE,
+ QUEUE_PACKET,
+ FREE_PACKET,
+ CLONE_PACKET
+};
+
+std::pair<std::shared_ptr<MockEngine>, std::unique_ptr<StreamManager>> CreateStreamManagerAndEngine(
+ int maxInFlightPackets) {
+ StreamManagerFactory factory;
+ proto::OutputConfig outputConfig;
+ outputConfig.set_type(proto::PacketType::PIXEL_DATA);
+ outputConfig.set_stream_name("pixel_stream");
+ std::shared_ptr<MockEngine> mockEngine = std::make_shared<MockEngine>();
+ std::unique_ptr<StreamManager> manager =
+ factory.getStreamManager(outputConfig, mockEngine, maxInFlightPackets);
+
+ return std::pair(mockEngine, std::move(manager));
+}
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+ if (size < sizeof(uint32_t)) {
+ return 0;
+ }
+
+ FuzzedDataProvider fdp(data, size);
+ int maxInFlightPackets = fdp.ConsumeIntegral<uint32_t>();
+ auto [mockEngine, manager] = CreateStreamManagerAndEngine(maxInFlightPackets);
+ std::vector<uint8_t> pixelData(16 * 16 * 3, 100);
+ InputFrame frame(16, 16, PixelFormat::RGB, 16 * 3, &pixelData[0]);
+ std::shared_ptr<MemHandle> memHandle;
+ EXPECT_CALL((*mockEngine), dispatchPacket)
+ .Times(testing::AnyNumber())
+ .WillRepeatedly(
+ testing::DoAll(testing::SaveArg<0>(&memHandle), (Return(Status::SUCCESS))));
+
+ while (fdp.remaining_bytes() > 0) {
+ uint8_t state = fdp.ConsumeIntegralInRange<uint8_t>(RESET, CLONE_PACKET);
+ DefaultEvent e = DefaultEvent::generateEntryEvent(static_cast<DefaultEvent::Phase>(state));
+
+ switch (state) {
+ case RESET:
+ case RUN: {
+ manager->handleExecutionPhase(e);
+ break;
+ }
+ case STOP_WITH_FLUSH: {
+ EXPECT_CALL((*mockEngine), notifyEndOfStream).Times(testing::AtMost(1));
+ manager->handleStopWithFlushPhase(e);
+ sleep(1);
+ break;
+ }
+ case STOP_IMMEDIATE: {
+ EXPECT_CALL((*mockEngine), notifyEndOfStream).Times(testing::AtMost(1));
+ manager->handleStopImmediatePhase(e);
+ sleep(1);
+ break;
+ }
+ case QUEUE_PACKET: {
+ manager->queuePacket(frame, rand());
+ sleep(1);
+ break;
+ }
+ case FREE_PACKET: {
+ if (memHandle != nullptr) {
+ manager->freePacket(memHandle->getBufferId());
+ }
+ break;
+ }
+ case CLONE_PACKET: {
+ manager->clonePacket(memHandle);
+ break;
+ }
+ }
+ }
+
+ return 0;
+}
+
+} // namespace
+} // namespace stream_manager
+} // namespace runner
+} // namespace computepipe
+} // namespace automotive
+} // namespace android
diff --git a/cpp/computepipe/tests/fuzz/SemanticManagerFuzzer.cpp b/cpp/computepipe/tests/fuzz/SemanticManagerFuzzer.cpp
new file mode 100644
index 0000000..dcae8ab
--- /dev/null
+++ b/cpp/computepipe/tests/fuzz/SemanticManagerFuzzer.cpp
@@ -0,0 +1,74 @@
+/*
+ * Copyright 2020 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.
+ */
+
+#include <fuzzer/FuzzedDataProvider.h>
+#include <gmock/gmock.h>
+#include "EventGenerator.h"
+#include "MockEngine.h"
+#include "StreamManager.h"
+
+namespace android {
+namespace automotive {
+namespace computepipe {
+namespace runner {
+namespace stream_manager {
+
+using android::automotive::computepipe::runner::generator::DefaultEvent;
+using ::testing::Return;
+
+namespace {
+
+std::unique_ptr<StreamManager> SetupStreamManager(const std::shared_ptr<MockEngine>& engine) {
+ StreamManagerFactory factory;
+ proto::OutputConfig config;
+ config.set_type(proto::PacketType::SEMANTIC_DATA);
+ config.set_stream_name("semantic_stream");
+ return factory.getStreamManager(config, engine, 0);
+}
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+ // Set up process
+ char* fakeData = reinterpret_cast<char*>(malloc(sizeof(char) * size));
+ memcpy(fakeData, data, size * sizeof(char));
+
+ std::shared_ptr<MemHandle> currentPacket;
+ DefaultEvent e = DefaultEvent::generateEntryEvent(DefaultEvent::Phase::RUN);
+ std::shared_ptr<MockEngine> mockEngine = std::make_shared<MockEngine>();
+ std::unique_ptr<StreamManager> manager = SetupStreamManager(mockEngine);
+ manager->handleExecutionPhase(e);
+
+ // Probably not called
+ ON_CALL((*mockEngine), dispatchPacket)
+ .WillByDefault(
+ testing::DoAll(testing::SaveArg<0>(¤tPacket), (Return(Status::SUCCESS))));
+
+ manager->queuePacket(fakeData, size, 0);
+
+ if (currentPacket) {
+ EXPECT_EQ(std::memcmp(currentPacket->getData(), fakeData, size), 0);
+ currentPacket = nullptr;
+ }
+
+ free(fakeData);
+ return 0;
+}
+
+} // namespace
+} // namespace stream_manager
+} // namespace runner
+} // namespace computepipe
+} // namespace automotive
+} // namespace android
diff --git a/cpp/computepipe/tests/fuzz/VideoInputManagerFuzzer.cpp b/cpp/computepipe/tests/fuzz/VideoInputManagerFuzzer.cpp
new file mode 100644
index 0000000..649716b
--- /dev/null
+++ b/cpp/computepipe/tests/fuzz/VideoInputManagerFuzzer.cpp
@@ -0,0 +1,140 @@
+/*
+ * Copyright 2020 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.
+ */
+
+#include "Common.h"
+#include "DefaultEngine.h"
+#include "VideoInputManager.h"
+
+#include <android-base/file.h>
+#include <fuzzer/FuzzedDataProvider.h>
+#include <gmock/gmock.h>
+
+#include <stdio.h>
+#include <unistd.h>
+
+namespace android {
+namespace automotive {
+namespace computepipe {
+namespace runner {
+namespace input_manager {
+
+using android::base::Dirname;
+
+namespace {
+
+class MockRunnerEvent : public RunnerEvent {
+public:
+ MOCK_CONST_METHOD0(isPhaseEntry, bool());
+ MOCK_CONST_METHOD0(isTransitionComplete, bool());
+ MOCK_CONST_METHOD0(isAborted, bool());
+ MOCK_METHOD1(dispatchToComponent,
+ Status(const std::shared_ptr<RunnerComponentInterface>& iface));
+};
+
+enum INPUT_MGR_FUZZ_FUNCS { RUNNER_COMP_BASE_ENUM };
+
+static std::shared_ptr<VideoInputManager> manager;
+
+extern "C" int LLVMFuzzerInitialize(int* argc, char*** argv) {
+ const std::string kFilename =
+ Dirname(*argv[0]) + "/data/corpus/video_input_manager/centaur_1.mpg";
+ if (access(kFilename.c_str(), F_OK) == -1) {
+ std::cerr << "Video file does not exist!" << std::endl;
+ exit(1);
+ }
+
+ // Initialize input config
+ proto::InputConfig inputConf;
+ proto::InputStreamConfig* streamConfig = inputConf.add_input_stream();
+ proto::VideoFileConfig* videoConfig = streamConfig->mutable_video_config();
+ videoConfig->set_file_path(kFilename);
+
+ // Initialize callBack, which does nothing
+ std::shared_ptr<InputEngineInterface> callBack = std::make_shared<engine::InputCallback>(
+ 0, [](int i) {},
+ [](int i, int64_t j, const InputFrame& frame) { return Status::SUCCESS; });
+
+ // Initialize manager
+ manager = std::make_shared<VideoInputManager>(inputConf, inputConf /* redundant */, callBack);
+ return 0;
+}
+
+// TODO(b/163138279, b/163138595) verify the fix for these two bugs
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+ FuzzedDataProvider fdp(data, size);
+ while (fdp.remaining_bytes() > test::kMaxFuzzerConsumedBytes) {
+ switch (fdp.ConsumeIntegralInRange<uint32_t>(0, API_SUM - 1)) {
+ case HANDLE_CONFIG_PHASE: {
+ break;
+ }
+ case HANDLE_EXECUTION_PHASE: {
+ testing::NiceMock<MockRunnerEvent> e;
+ bool isTransitionComplete = fdp.ConsumeBool();
+ bool isPhaseEntry = fdp.ConsumeBool();
+ if (isTransitionComplete != isPhaseEntry) {
+ if (isTransitionComplete) {
+ EXPECT_CALL((e), isTransitionComplete()).WillOnce([isTransitionComplete]() {
+ return isTransitionComplete;
+ });
+ ON_CALL((e), isPhaseEntry()).WillByDefault([isPhaseEntry]() {
+ return isPhaseEntry;
+ });
+ } else if (isPhaseEntry) {
+ ON_CALL((e), isTransitionComplete())
+ .WillByDefault(
+ [isTransitionComplete]() { return isTransitionComplete; });
+ EXPECT_CALL((e), isPhaseEntry()).WillOnce([isPhaseEntry]() {
+ return isPhaseEntry;
+ });
+ }
+ Status res = manager->handleExecutionPhase(e);
+ if (res == Status::SUCCESS && !isTransitionComplete && isPhaseEntry) {
+ sleep(3); // waiting for resource to be released
+ } else {
+ usleep(10);
+ }
+ }
+ break;
+ }
+ case HANDLE_STOP_IMMEDIATE_PHASE: {
+ testing::NiceMock<MockRunnerEvent> e;
+ manager->handleStopImmediatePhase(e);
+ break;
+ }
+ case HANDLE_STOP_WITH_FLUSH_PHASE: {
+ testing::NiceMock<MockRunnerEvent> e;
+ manager->handleStopWithFlushPhase(e);
+ break;
+ }
+ case HANDLE_RESET_PHASE: {
+ testing::NiceMock<MockRunnerEvent> e;
+ manager->handleResetPhase(e);
+ break;
+ }
+ default:
+ LOG(ERROR) << "Unexpected option aborting...";
+ break;
+ }
+ }
+ return 0;
+}
+
+} // namespace
+} // namespace input_manager
+} // namespace runner
+} // namespace computepipe
+} // namespace automotive
+} // namespace android
diff --git a/cpp/computepipe/tests/fuzz/corpus/video_input_manager/centaur_1.mpg b/cpp/computepipe/tests/fuzz/corpus/video_input_manager/centaur_1.mpg
new file mode 100644
index 0000000..ef7e1b7
--- /dev/null
+++ b/cpp/computepipe/tests/fuzz/corpus/video_input_manager/centaur_1.mpg
Binary files differ
diff --git a/computepipe/tests/runner/client_interface/Android.bp b/cpp/computepipe/tests/runner/client_interface/Android.bp
similarity index 95%
rename from computepipe/tests/runner/client_interface/Android.bp
rename to cpp/computepipe/tests/runner/client_interface/Android.bp
index 9a17425..dac0200 100644
--- a/computepipe/tests/runner/client_interface/Android.bp
+++ b/cpp/computepipe/tests/runner/client_interface/Android.bp
@@ -28,7 +28,7 @@
"computepipe_router_headers",
"computepipe_runner_includes",
],
- include_dirs: ["packages/services/Car/computepipe"],
+ include_dirs: ["packages/services/Car/cpp/computepipe"],
shared_libs: [
"libbinder_ndk",
"libutils",
diff --git a/computepipe/tests/runner/client_interface/ClientInterfaceTest.cc b/cpp/computepipe/tests/runner/client_interface/ClientInterfaceTest.cc
similarity index 100%
rename from computepipe/tests/runner/client_interface/ClientInterfaceTest.cc
rename to cpp/computepipe/tests/runner/client_interface/ClientInterfaceTest.cc
diff --git a/computepipe/tests/runner/client_interface/MockEngine.h b/cpp/computepipe/tests/runner/client_interface/MockEngine.h
similarity index 100%
rename from computepipe/tests/runner/client_interface/MockEngine.h
rename to cpp/computepipe/tests/runner/client_interface/MockEngine.h
diff --git a/computepipe/tests/runner/client_interface/MockMemHandle.h b/cpp/computepipe/tests/runner/client_interface/MockMemHandle.h
similarity index 100%
rename from computepipe/tests/runner/client_interface/MockMemHandle.h
rename to cpp/computepipe/tests/runner/client_interface/MockMemHandle.h
diff --git a/computepipe/tests/runner/client_interface/MockRunnerEvent.h b/cpp/computepipe/tests/runner/client_interface/MockRunnerEvent.h
similarity index 100%
rename from computepipe/tests/runner/client_interface/MockRunnerEvent.h
rename to cpp/computepipe/tests/runner/client_interface/MockRunnerEvent.h
diff --git a/computepipe/tests/runner/client_interface/PipeOptionsConverterTest.cpp b/cpp/computepipe/tests/runner/client_interface/PipeOptionsConverterTest.cpp
similarity index 100%
rename from computepipe/tests/runner/client_interface/PipeOptionsConverterTest.cpp
rename to cpp/computepipe/tests/runner/client_interface/PipeOptionsConverterTest.cpp
diff --git a/computepipe/tests/runner/graph/Android.bp b/cpp/computepipe/tests/runner/graph/Android.bp
similarity index 80%
rename from computepipe/tests/runner/graph/Android.bp
rename to cpp/computepipe/tests/runner/graph/Android.bp
index 14271dd..60864c2 100644
--- a/computepipe/tests/runner/graph/Android.bp
+++ b/cpp/computepipe/tests/runner/graph/Android.bp
@@ -12,6 +12,11 @@
// See the License for the specific language governing permissions and
// limitations under the License.
+cc_library_headers {
+ name: "graph_test_headers",
+ export_include_dirs: ["./includes"],
+}
+
cc_test {
name: "computepipe_prebuilt_graph_test",
test_suites: ["device-tests"],
@@ -24,7 +29,7 @@
"computepipe_runner_component",
"libgtest",
"libgmock",
- "libcomputepipeprotos",
+ "libcomputepipeprotos",
],
shared_libs: [
"libstubgraphimpl",
@@ -35,10 +40,11 @@
],
header_libs: [
"computepipe_runner_includes",
+ "graph_test_headers",
],
include_dirs: [
- "packages/services/Car/computepipe",
- "packages/services/Car/computepipe/runner/graph",
+ "packages/services/Car/cpp/computepipe",
+ "packages/services/Car/cpp/computepipe/runner/graph",
],
}
@@ -63,7 +69,7 @@
shared_libs: [
"computepipe_grpc_graph",
"libbase",
- "libcomputepipeprotos",
+ "libcomputepipeprotos",
"libgrpc++",
"libdl",
"liblog",
@@ -71,9 +77,10 @@
],
header_libs: [
"computepipe_runner_includes",
+ "graph_test_headers",
],
include_dirs: [
- "packages/services/Car/computepipe",
- "packages/services/Car/computepipe/runner/graph",
+ "packages/services/Car/cpp/computepipe",
+ "packages/services/Car/cpp/computepipe/runner/graph",
],
}
diff --git a/computepipe/tests/runner/graph/EnumConversionTest.cpp b/cpp/computepipe/tests/runner/graph/EnumConversionTest.cpp
similarity index 100%
rename from computepipe/tests/runner/graph/EnumConversionTest.cpp
rename to cpp/computepipe/tests/runner/graph/EnumConversionTest.cpp
diff --git a/cpp/computepipe/tests/runner/graph/GrpcGraphTest.cpp b/cpp/computepipe/tests/runner/graph/GrpcGraphTest.cpp
new file mode 100644
index 0000000..8a0ddc9
--- /dev/null
+++ b/cpp/computepipe/tests/runner/graph/GrpcGraphTest.cpp
@@ -0,0 +1,161 @@
+/*
+ * Copyright 2020 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.
+ */
+#include <map>
+#include <memory>
+#include <string>
+#include <thread>
+
+#include <android-base/logging.h>
+#include <grpc++/grpc++.h>
+
+#include "ClientConfig.pb.h"
+#include "GrpcGraphServerImpl.h"
+#include "GrpcPrebuiltGraphService.grpc.pb.h"
+#include "GrpcPrebuiltGraphService.pb.h"
+#include "Options.pb.h"
+#include "PrebuiltEngineInterface.h"
+#include "PrebuiltGraph.h"
+#include "RunnerComponent.h"
+#include "gmock/gmock-matchers.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+#include "types/Status.h"
+
+using ::android::automotive::computepipe::runner::ClientConfig;
+using ::android::automotive::computepipe::runner::RunnerComponentInterface;
+using ::android::automotive::computepipe::runner::RunnerEvent;
+using ::testing::HasSubstr;
+
+namespace android {
+namespace automotive {
+namespace computepipe {
+namespace graph {
+namespace {
+
+class GrpcGraphTest : public ::testing::Test {
+private:
+ std::unique_ptr<GrpcGraphServerImpl> mServer;
+ std::shared_ptr<PrebuiltEngineInterfaceImpl> mEngine;
+ std::string mAddress = "[::]:10000";
+
+public:
+ std::unique_ptr<PrebuiltGraph> mGrpcGraph;
+
+ void SetUp() override {
+ mServer = std::make_unique<GrpcGraphServerImpl>(mAddress);
+ std::thread t = std::thread([this]() { mServer->startServer(); });
+ t.detach();
+ std::this_thread::sleep_for(std::chrono::seconds(1));
+
+ mEngine = std::make_shared<PrebuiltEngineInterfaceImpl>();
+ mGrpcGraph = GetRemoteGraphFromAddress(mAddress, mEngine);
+ ASSERT_TRUE(mGrpcGraph != nullptr);
+ EXPECT_EQ(mGrpcGraph->GetSupportedGraphConfigs().graph_name(), kGraphName);
+ EXPECT_EQ(mGrpcGraph->GetGraphType(), PrebuiltGraphType::REMOTE);
+ }
+
+ void TearDown() override { mServer.reset(); }
+
+ bool waitForTermination() { return mEngine->waitForTermination(); }
+
+ int numPacketsForStream(int streamId) { return mEngine->numPacketsForStream(streamId); }
+};
+
+class TestRunnerEvent : public runner::RunnerEvent {
+ bool isPhaseEntry() const override { return true; }
+ bool isTransitionComplete() const override { return false; }
+ bool isAborted() const override { return false; }
+ Status dispatchToComponent(const std::shared_ptr<runner::RunnerComponentInterface>&) override {
+ return Status::SUCCESS;
+ };
+};
+
+// Test to see if stop with flush produces exactly as many packets as expected. The number
+// of packets produced by stopImmediate is variable as the number of packets already dispatched
+// when stop is called is variable.
+TEST_F(GrpcGraphTest, EndToEndTestOnStopWithFlush) {
+ std::map<int, int> outputConfigs = {{5, 1}, {6, 1}};
+ runner::ClientConfig clientConfig(0, 0, 0, outputConfigs, proto::ProfilingType::DISABLED);
+
+ EXPECT_EQ(mGrpcGraph->handleConfigPhase(clientConfig), Status::SUCCESS);
+ EXPECT_EQ(mGrpcGraph->GetGraphState(), PrebuiltGraphState::STOPPED);
+ EXPECT_EQ(mGrpcGraph->GetStatus(), Status::SUCCESS);
+
+ TestRunnerEvent e;
+ EXPECT_EQ(mGrpcGraph->handleExecutionPhase(e), Status::SUCCESS);
+ EXPECT_EQ(mGrpcGraph->GetGraphState(), PrebuiltGraphState::RUNNING);
+ EXPECT_EQ(mGrpcGraph->GetStatus(), Status::SUCCESS);
+
+ EXPECT_EQ(mGrpcGraph->handleStopWithFlushPhase(e), Status::SUCCESS);
+ EXPECT_EQ(mGrpcGraph->GetGraphState(), PrebuiltGraphState::FLUSHING);
+ EXPECT_EQ(mGrpcGraph->GetStatus(), Status::SUCCESS);
+
+ EXPECT_TRUE(waitForTermination());
+ EXPECT_EQ(mGrpcGraph->GetGraphState(), PrebuiltGraphState::STOPPED);
+ EXPECT_EQ(mGrpcGraph->GetStatus(), Status::SUCCESS);
+ EXPECT_EQ(numPacketsForStream(5), 5);
+ EXPECT_EQ(numPacketsForStream(6), 6);
+}
+
+TEST_F(GrpcGraphTest, GraphStopCallbackProducedOnImmediateStop) {
+ std::map<int, int> outputConfigs = {{5, 1}, {6, 1}};
+ runner::ClientConfig clientConfig(0, 0, 0, outputConfigs, proto::ProfilingType::DISABLED);
+
+ EXPECT_EQ(mGrpcGraph->handleConfigPhase(clientConfig), Status::SUCCESS);
+ EXPECT_EQ(mGrpcGraph->GetGraphState(), PrebuiltGraphState::STOPPED);
+ EXPECT_EQ(mGrpcGraph->GetStatus(), Status::SUCCESS);
+
+ TestRunnerEvent e;
+ EXPECT_EQ(mGrpcGraph->handleExecutionPhase(e), Status::SUCCESS);
+ EXPECT_EQ(mGrpcGraph->GetGraphState(), PrebuiltGraphState::RUNNING);
+ EXPECT_EQ(mGrpcGraph->GetStatus(), Status::SUCCESS);
+
+ EXPECT_EQ(mGrpcGraph->handleStopImmediatePhase(e), Status::SUCCESS);
+ EXPECT_EQ(mGrpcGraph->GetGraphState(), PrebuiltGraphState::STOPPED);
+ EXPECT_EQ(mGrpcGraph->GetStatus(), Status::SUCCESS);
+
+ EXPECT_TRUE(waitForTermination());
+}
+
+TEST_F(GrpcGraphTest, GraphStopCallbackProducedOnFlushedStopWithNoOutputStreams) {
+ std::map<int, int> outputConfigs = {};
+ runner::ClientConfig clientConfig(0, 0, 0, outputConfigs, proto::ProfilingType::DISABLED);
+ EXPECT_EQ(mGrpcGraph->handleConfigPhase(clientConfig), Status::SUCCESS);
+ EXPECT_EQ(mGrpcGraph->GetGraphState(), PrebuiltGraphState::STOPPED);
+ EXPECT_EQ(mGrpcGraph->GetStatus(), Status::SUCCESS);
+
+ TestRunnerEvent e;
+ EXPECT_EQ(mGrpcGraph->handleExecutionPhase(e), Status::SUCCESS);
+ EXPECT_EQ(mGrpcGraph->GetGraphState(), PrebuiltGraphState::RUNNING);
+ EXPECT_EQ(mGrpcGraph->GetStatus(), Status::SUCCESS);
+
+ EXPECT_EQ(mGrpcGraph->handleStopWithFlushPhase(e), Status::SUCCESS);
+ EXPECT_EQ(mGrpcGraph->GetStatus(), Status::SUCCESS);
+
+ EXPECT_TRUE(waitForTermination());
+}
+
+TEST_F(GrpcGraphTest, SetInputStreamsFailAsExpected) {
+ runner::InputFrame frame(0, 0, static_cast<PixelFormat>(0), 0, nullptr);
+ EXPECT_EQ(mGrpcGraph->SetInputStreamData(0, 0, ""), Status::FATAL_ERROR);
+ EXPECT_EQ(mGrpcGraph->SetInputStreamPixelData(0, 0, frame), Status::FATAL_ERROR);
+}
+
+} // namespace
+} // namespace graph
+} // namespace computepipe
+} // namespace automotive
+} // namespace android
diff --git a/computepipe/tests/runner/graph/LocalPrebuiltGraphTest.cpp b/cpp/computepipe/tests/runner/graph/LocalPrebuiltGraphTest.cpp
similarity index 84%
rename from computepipe/tests/runner/graph/LocalPrebuiltGraphTest.cpp
rename to cpp/computepipe/tests/runner/graph/LocalPrebuiltGraphTest.cpp
index d63ec51..ddc3aee 100644
--- a/computepipe/tests/runner/graph/LocalPrebuiltGraphTest.cpp
+++ b/cpp/computepipe/tests/runner/graph/LocalPrebuiltGraphTest.cpp
@@ -18,6 +18,7 @@
#include "ClientConfig.pb.h"
#include "LocalPrebuiltGraph.h"
#include "PrebuiltEngineInterface.h"
+#include "PrebuiltEngineInterfaceImpl.h"
#include "ProfilingType.pb.h"
#include "RunnerComponent.h"
#include "gmock/gmock-matchers.h"
@@ -36,44 +37,6 @@
namespace graph {
namespace {
-// Barebones implementation of the PrebuiltEngineInterface. This implementation should suffice for
-// basic cases. More complicated use cases might need their own implementation of it.
-typedef std::function<void(int, int64_t, const runner::InputFrame&)> PixelCallback;
-typedef std::function<void(int, int64_t, std::string&&)> SerializedStreamCallback;
-typedef std::function<void(Status, std::string&&)> GraphTerminationCallback;
-class PrebuiltEngineInterfaceImpl : public PrebuiltEngineInterface {
-private:
- PixelCallback mPixelCallbackFn;
- SerializedStreamCallback mSerializedStreamCallbackFn;
- GraphTerminationCallback mGraphTerminationCallbackFn;
-
-public:
- virtual ~PrebuiltEngineInterfaceImpl() = default;
-
- void DispatchPixelData(int streamId, int64_t timestamp,
- const runner::InputFrame& frame) override {
- mPixelCallbackFn(streamId, timestamp, frame);
- }
-
- void DispatchSerializedData(int streamId, int64_t timestamp, std::string&& data) override {
- mSerializedStreamCallbackFn(streamId, timestamp, std::move(data));
- }
-
- void DispatchGraphTerminationMessage(Status status, std::string&& msg) override {
- mGraphTerminationCallbackFn(status, std::move(msg));
- }
-
- void SetPixelCallback(PixelCallback callback) { mPixelCallbackFn = callback; }
-
- void SetSerializedStreamCallback(SerializedStreamCallback callback) {
- mSerializedStreamCallbackFn = callback;
- }
-
- void SetGraphTerminationCallback(GraphTerminationCallback callback) {
- mGraphTerminationCallbackFn = callback;
- }
-};
-
// The stub graph implementation is a passthrough implementation that does not run
// any graph and returns success for all implementations. The only useful things that
// it does for the tests are
diff --git a/computepipe/tests/runner/graph/GrpcGraphTest.cpp b/cpp/computepipe/tests/runner/graph/includes/GrpcGraphServerImpl.h
similarity index 63%
rename from computepipe/tests/runner/graph/GrpcGraphTest.cpp
rename to cpp/computepipe/tests/runner/graph/includes/GrpcGraphServerImpl.h
index 2effb00..a168728 100644
--- a/computepipe/tests/runner/graph/GrpcGraphTest.cpp
+++ b/cpp/computepipe/tests/runner/graph/includes/GrpcGraphServerImpl.h
@@ -13,6 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+
+#ifndef CPP_COMPUTEPIPE_TESTS_RUNNER_GRAPH_INCLUDES_GRPCGRAPHSERVERIMPL_H_
+#define CPP_COMPUTEPIPE_TESTS_RUNNER_GRAPH_INCLUDES_GRPCGRAPHSERVERIMPL_H_
+
#include <map>
#include <memory>
#include <string>
@@ -21,7 +25,6 @@
#include <android-base/logging.h>
#include <grpc++/grpc++.h>
-#include "ClientConfig.pb.h"
#include "GrpcPrebuiltGraphService.grpc.pb.h"
#include "GrpcPrebuiltGraphService.pb.h"
#include "Options.pb.h"
@@ -33,16 +36,10 @@
#include "gtest/gtest.h"
#include "types/Status.h"
-using ::android::automotive::computepipe::runner::ClientConfig;
-using ::android::automotive::computepipe::runner::RunnerComponentInterface;
-using ::android::automotive::computepipe::runner::RunnerEvent;
-using ::testing::HasSubstr;
-
namespace android {
namespace automotive {
namespace computepipe {
namespace graph {
-namespace {
constexpr char kGraphName[] = "Stub graph name";
constexpr char kSetGraphConfigMessage[] = "Stub set config message";
@@ -228,117 +225,9 @@
}
};
-class GrpcGraphTest : public ::testing::Test {
-private:
- std::unique_ptr<GrpcGraphServerImpl> mServer;
- std::shared_ptr<PrebuiltEngineInterfaceImpl> mEngine;
- std::string mAddress = "[::]:10000";
-
-public:
- std::unique_ptr<PrebuiltGraph> mGrpcGraph;
-
- void SetUp() override {
- mServer = std::make_unique<GrpcGraphServerImpl>(mAddress);
- std::thread t = std::thread([this]() { mServer->startServer(); });
- t.detach();
- std::this_thread::sleep_for(std::chrono::seconds(1));
-
- mEngine = std::make_shared<PrebuiltEngineInterfaceImpl>();
- mGrpcGraph = GetRemoteGraphFromAddress(mAddress, mEngine);
- ASSERT_TRUE(mGrpcGraph != nullptr);
- EXPECT_EQ(mGrpcGraph->GetSupportedGraphConfigs().graph_name(), kGraphName);
- EXPECT_EQ(mGrpcGraph->GetGraphType(), PrebuiltGraphType::REMOTE);
- }
-
- void TearDown() override { mServer.reset(); }
-
- bool waitForTermination() { return mEngine->waitForTermination(); }
-
- int numPacketsForStream(int streamId) { return mEngine->numPacketsForStream(streamId); }
-};
-
-class TestRunnerEvent : public runner::RunnerEvent {
- bool isPhaseEntry() const override { return true; }
- bool isTransitionComplete() const override { return false; }
- bool isAborted() const override { return false; }
- Status dispatchToComponent(const std::shared_ptr<runner::RunnerComponentInterface>&) override {
- return Status::SUCCESS;
- };
-};
-
-// Test to see if stop with flush produces exactly as many packets as expected. The number
-// of packets produced by stopImmediate is variable as the number of packets already dispatched
-// when stop is called is variable.
-TEST_F(GrpcGraphTest, EndToEndTestOnStopWithFlush) {
- std::map<int, int> outputConfigs = {{5, 1}, {6, 1}};
- runner::ClientConfig clientConfig(0, 0, 0, outputConfigs, proto::ProfilingType::DISABLED);
-
- EXPECT_EQ(mGrpcGraph->handleConfigPhase(clientConfig), Status::SUCCESS);
- EXPECT_EQ(mGrpcGraph->GetGraphState(), PrebuiltGraphState::STOPPED);
- EXPECT_EQ(mGrpcGraph->GetStatus(), Status::SUCCESS);
-
- TestRunnerEvent e;
- EXPECT_EQ(mGrpcGraph->handleExecutionPhase(e), Status::SUCCESS);
- EXPECT_EQ(mGrpcGraph->GetGraphState(), PrebuiltGraphState::RUNNING);
- EXPECT_EQ(mGrpcGraph->GetStatus(), Status::SUCCESS);
-
- EXPECT_EQ(mGrpcGraph->handleStopWithFlushPhase(e), Status::SUCCESS);
- EXPECT_EQ(mGrpcGraph->GetGraphState(), PrebuiltGraphState::FLUSHING);
- EXPECT_EQ(mGrpcGraph->GetStatus(), Status::SUCCESS);
-
- EXPECT_TRUE(waitForTermination());
- EXPECT_EQ(mGrpcGraph->GetGraphState(), PrebuiltGraphState::STOPPED);
- EXPECT_EQ(mGrpcGraph->GetStatus(), Status::SUCCESS);
- EXPECT_EQ(numPacketsForStream(5), 5);
- EXPECT_EQ(numPacketsForStream(6), 6);
-}
-
-TEST_F(GrpcGraphTest, GraphStopCallbackProducedOnImmediateStop) {
- std::map<int, int> outputConfigs = {{5, 1}, {6, 1}};
- runner::ClientConfig clientConfig(0, 0, 0, outputConfigs, proto::ProfilingType::DISABLED);
-
- EXPECT_EQ(mGrpcGraph->handleConfigPhase(clientConfig), Status::SUCCESS);
- EXPECT_EQ(mGrpcGraph->GetGraphState(), PrebuiltGraphState::STOPPED);
- EXPECT_EQ(mGrpcGraph->GetStatus(), Status::SUCCESS);
-
- TestRunnerEvent e;
- EXPECT_EQ(mGrpcGraph->handleExecutionPhase(e), Status::SUCCESS);
- EXPECT_EQ(mGrpcGraph->GetGraphState(), PrebuiltGraphState::RUNNING);
- EXPECT_EQ(mGrpcGraph->GetStatus(), Status::SUCCESS);
-
- EXPECT_EQ(mGrpcGraph->handleStopImmediatePhase(e), Status::SUCCESS);
- EXPECT_EQ(mGrpcGraph->GetGraphState(), PrebuiltGraphState::STOPPED);
- EXPECT_EQ(mGrpcGraph->GetStatus(), Status::SUCCESS);
-
- EXPECT_TRUE(waitForTermination());
-}
-
-TEST_F(GrpcGraphTest, GraphStopCallbackProducedOnFlushedStopWithNoOutputStreams) {
- std::map<int, int> outputConfigs = {};
- runner::ClientConfig clientConfig(0, 0, 0, outputConfigs, proto::ProfilingType::DISABLED);
- EXPECT_EQ(mGrpcGraph->handleConfigPhase(clientConfig), Status::SUCCESS);
- EXPECT_EQ(mGrpcGraph->GetGraphState(), PrebuiltGraphState::STOPPED);
- EXPECT_EQ(mGrpcGraph->GetStatus(), Status::SUCCESS);
-
- TestRunnerEvent e;
- EXPECT_EQ(mGrpcGraph->handleExecutionPhase(e), Status::SUCCESS);
- EXPECT_EQ(mGrpcGraph->GetGraphState(), PrebuiltGraphState::RUNNING);
- EXPECT_EQ(mGrpcGraph->GetStatus(), Status::SUCCESS);
-
- EXPECT_EQ(mGrpcGraph->handleStopWithFlushPhase(e), Status::SUCCESS);
- EXPECT_EQ(mGrpcGraph->GetStatus(), Status::SUCCESS);
-
- EXPECT_TRUE(waitForTermination());
-}
-
-TEST_F(GrpcGraphTest, SetInputStreamsFailAsExpected) {
- runner::InputFrame frame(0, 0, static_cast<PixelFormat>(0), 0, nullptr);
- EXPECT_EQ(mGrpcGraph->SetInputStreamData(0, 0, ""), Status::FATAL_ERROR);
- EXPECT_EQ(mGrpcGraph->SetInputStreamPixelData(0, 0, frame), Status::FATAL_ERROR);
-}
-
-} // namespace
} // namespace graph
} // namespace computepipe
} // namespace automotive
} // namespace android
+
+#endif // CPP_COMPUTEPIPE_TESTS_RUNNER_GRAPH_INCLUDES_GRPCGRAPHSERVERIMPL_H_
diff --git a/cpp/computepipe/tests/runner/graph/includes/PrebuiltEngineInterfaceImpl.h b/cpp/computepipe/tests/runner/graph/includes/PrebuiltEngineInterfaceImpl.h
new file mode 100644
index 0000000..70326ab
--- /dev/null
+++ b/cpp/computepipe/tests/runner/graph/includes/PrebuiltEngineInterfaceImpl.h
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2020 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.
+ */
+
+#ifndef CPP_COMPUTEPIPE_TESTS_RUNNER_GRAPH_INCLUDES_PREBUILTENGINEINTERFACEIMPL_H_
+#define CPP_COMPUTEPIPE_TESTS_RUNNER_GRAPH_INCLUDES_PREBUILTENGINEINTERFACEIMPL_H_
+
+#include <string>
+
+#include "ClientConfig.pb.h"
+#include "LocalPrebuiltGraph.h"
+#include "PrebuiltEngineInterface.h"
+#include "ProfilingType.pb.h"
+#include "RunnerComponent.h"
+#include "gmock/gmock-matchers.h"
+#include "gmock/gmock.h"
+#include "gtest/gtest.h"
+#include "types/Status.h"
+
+namespace android {
+namespace automotive {
+namespace computepipe {
+namespace graph {
+
+// Barebones implementation of the PrebuiltEngineInterface. This implementation should suffice for
+// basic cases. More complicated use cases might need their own implementation of it.
+typedef std::function<void(int, int64_t, const runner::InputFrame&)> PixelCallback;
+typedef std::function<void(int, int64_t, std::string&&)> SerializedStreamCallback;
+typedef std::function<void(Status, std::string&&)> GraphTerminationCallback;
+class PrebuiltEngineInterfaceImpl : public PrebuiltEngineInterface {
+private:
+ PixelCallback mPixelCallbackFn;
+ SerializedStreamCallback mSerializedStreamCallbackFn;
+ GraphTerminationCallback mGraphTerminationCallbackFn;
+
+public:
+ virtual ~PrebuiltEngineInterfaceImpl() = default;
+
+ void DispatchPixelData(int streamId, int64_t timestamp,
+ const runner::InputFrame& frame) override {
+ mPixelCallbackFn(streamId, timestamp, frame);
+ }
+
+ void DispatchSerializedData(int streamId, int64_t timestamp, std::string&& data) override {
+ mSerializedStreamCallbackFn(streamId, timestamp, std::move(data));
+ }
+
+ void DispatchGraphTerminationMessage(Status status, std::string&& msg) override {
+ mGraphTerminationCallbackFn(status, std::move(msg));
+ }
+
+ void SetPixelCallback(PixelCallback callback) { mPixelCallbackFn = callback; }
+
+ void SetSerializedStreamCallback(SerializedStreamCallback callback) {
+ mSerializedStreamCallbackFn = callback;
+ }
+
+ void SetGraphTerminationCallback(GraphTerminationCallback callback) {
+ mGraphTerminationCallbackFn = callback;
+ }
+};
+
+} // namespace graph
+} // namespace computepipe
+} // namespace automotive
+} // namespace android
+
+#endif // CPP_COMPUTEPIPE_TESTS_RUNNER_GRAPH_INCLUDES_PREBUILTENGINEINTERFACEIMPL_H_
diff --git a/computepipe/tests/runner/graph/stubgraph/Android.bp b/cpp/computepipe/tests/runner/graph/stubgraph/Android.bp
similarity index 100%
rename from computepipe/tests/runner/graph/stubgraph/Android.bp
rename to cpp/computepipe/tests/runner/graph/stubgraph/Android.bp
diff --git a/computepipe/tests/runner/graph/stubgraph/arm/libstubgraphimpl.so b/cpp/computepipe/tests/runner/graph/stubgraph/arm/libstubgraphimpl.so
similarity index 100%
rename from computepipe/tests/runner/graph/stubgraph/arm/libstubgraphimpl.so
rename to cpp/computepipe/tests/runner/graph/stubgraph/arm/libstubgraphimpl.so
Binary files differ
diff --git a/computepipe/tests/runner/graph/stubgraph/arm64/libstubgraphimpl.so b/cpp/computepipe/tests/runner/graph/stubgraph/arm64/libstubgraphimpl.so
similarity index 100%
rename from computepipe/tests/runner/graph/stubgraph/arm64/libstubgraphimpl.so
rename to cpp/computepipe/tests/runner/graph/stubgraph/arm64/libstubgraphimpl.so
Binary files differ
diff --git a/computepipe/tests/runner/graph/stubgraph/x86/libstubgraphimpl.so b/cpp/computepipe/tests/runner/graph/stubgraph/x86/libstubgraphimpl.so
similarity index 100%
rename from computepipe/tests/runner/graph/stubgraph/x86/libstubgraphimpl.so
rename to cpp/computepipe/tests/runner/graph/stubgraph/x86/libstubgraphimpl.so
Binary files differ
diff --git a/computepipe/tests/runner/graph/stubgraph/x86_64/libstubgraphimpl.so b/cpp/computepipe/tests/runner/graph/stubgraph/x86_64/libstubgraphimpl.so
similarity index 100%
rename from computepipe/tests/runner/graph/stubgraph/x86_64/libstubgraphimpl.so
rename to cpp/computepipe/tests/runner/graph/stubgraph/x86_64/libstubgraphimpl.so
Binary files differ
diff --git a/computepipe/tests/runner/stream_manager/Android.bp b/cpp/computepipe/tests/runner/stream_manager/Android.bp
similarity index 87%
rename from computepipe/tests/runner/stream_manager/Android.bp
rename to cpp/computepipe/tests/runner/stream_manager/Android.bp
index d5543c6..5772ec8 100644
--- a/computepipe/tests/runner/stream_manager/Android.bp
+++ b/cpp/computepipe/tests/runner/stream_manager/Android.bp
@@ -36,8 +36,8 @@
"computepipe_runner_includes",
],
include_dirs: [
- "packages/services/Car/computepipe",
- "packages/services/Car/computepipe/runner/stream_manager",
+ "packages/services/Car/cpp/computepipe",
+ "packages/services/Car/cpp/computepipe/runner/stream_manager",
],
}
@@ -65,7 +65,7 @@
"computepipe_runner_includes",
],
include_dirs: [
- "packages/services/Car/computepipe",
- "packages/services/Car/computepipe/runner/stream_manager",
+ "packages/services/Car/cpp/computepipe",
+ "packages/services/Car/cpp/computepipe/runner/stream_manager",
],
}
diff --git a/computepipe/tests/runner/stream_manager/PixelStreamManagerTest.cpp b/cpp/computepipe/tests/runner/stream_manager/PixelStreamManagerTest.cpp
similarity index 100%
rename from computepipe/tests/runner/stream_manager/PixelStreamManagerTest.cpp
rename to cpp/computepipe/tests/runner/stream_manager/PixelStreamManagerTest.cpp
diff --git a/computepipe/tests/runner/stream_manager/SemanticManagerTest.cpp b/cpp/computepipe/tests/runner/stream_manager/SemanticManagerTest.cpp
similarity index 100%
rename from computepipe/tests/runner/stream_manager/SemanticManagerTest.cpp
rename to cpp/computepipe/tests/runner/stream_manager/SemanticManagerTest.cpp
diff --git a/computepipe/types/GraphState.h b/cpp/computepipe/types/GraphState.h
similarity index 100%
rename from computepipe/types/GraphState.h
rename to cpp/computepipe/types/GraphState.h
diff --git a/computepipe/types/Status.h b/cpp/computepipe/types/Status.h
similarity index 98%
rename from computepipe/types/Status.h
rename to cpp/computepipe/types/Status.h
index af05c6a..24b616b 100644
--- a/computepipe/types/Status.h
+++ b/cpp/computepipe/types/Status.h
@@ -33,6 +33,7 @@
RGB = 0,
RGBA,
GRAY,
+ YUV_420,
PIXELFORMAT_MAX,
};
diff --git a/evs/Android.bp b/cpp/evs/Android.bp
similarity index 100%
rename from evs/Android.bp
rename to cpp/evs/Android.bp
diff --git a/evs/OWNERS b/cpp/evs/OWNERS
similarity index 100%
rename from evs/OWNERS
rename to cpp/evs/OWNERS
diff --git a/evs/apps/default/Android.bp b/cpp/evs/apps/default/Android.bp
similarity index 100%
rename from evs/apps/default/Android.bp
rename to cpp/evs/apps/default/Android.bp
diff --git a/evs/apps/default/CarFromTop.png b/cpp/evs/apps/default/CarFromTop.png
similarity index 100%
rename from evs/apps/default/CarFromTop.png
rename to cpp/evs/apps/default/CarFromTop.png
Binary files differ
diff --git a/evs/apps/default/ConfigManager.cpp b/cpp/evs/apps/default/ConfigManager.cpp
similarity index 100%
rename from evs/apps/default/ConfigManager.cpp
rename to cpp/evs/apps/default/ConfigManager.cpp
diff --git a/evs/apps/default/ConfigManager.h b/cpp/evs/apps/default/ConfigManager.h
similarity index 100%
rename from evs/apps/default/ConfigManager.h
rename to cpp/evs/apps/default/ConfigManager.h
diff --git a/evs/apps/default/EvsStateControl.cpp b/cpp/evs/apps/default/EvsStateControl.cpp
similarity index 97%
rename from evs/apps/default/EvsStateControl.cpp
rename to cpp/evs/apps/default/EvsStateControl.cpp
index 5e81022..6359c81 100644
--- a/evs/apps/default/EvsStateControl.cpp
+++ b/cpp/evs/apps/default/EvsStateControl.cpp
@@ -219,8 +219,8 @@
bool EvsStateControl::selectStateForCurrentConditions() {
- static int32_t sDummyGear = mConfig.getMockGearSignal();
- static int32_t sDummySignal = int32_t(VehicleTurnSignal::NONE);
+ static int32_t sMockGear = mConfig.getMockGearSignal();
+ static int32_t sMockSignal = int32_t(VehicleTurnSignal::NONE);
if (mVehicle != nullptr) {
// Query the car state
@@ -230,7 +230,7 @@
}
if ((mTurnSignalValue.prop == 0) || (invokeGet(&mTurnSignalValue) != StatusCode::OK)) {
// Silently treat missing turn signal state as no turn signal active
- mTurnSignalValue.value.int32Values.setToExternal(&sDummySignal, 1);
+ mTurnSignalValue.value.int32Values.setToExternal(&sMockSignal, 1);
mTurnSignalValue.prop = 0;
}
} else {
@@ -242,12 +242,12 @@
std::chrono::steady_clock::time_point now = std::chrono::steady_clock::now();
if (std::chrono::duration_cast<std::chrono::seconds>(now - start).count() > kShowTime) {
// Switch to drive (which should turn off the reverse camera)
- sDummyGear = int32_t(VehicleGear::GEAR_DRIVE);
+ sMockGear = int32_t(VehicleGear::GEAR_DRIVE);
}
// Build the placeholder vehicle state values (treating single values as 1 element vectors)
- mGearValue.value.int32Values.setToExternal(&sDummyGear, 1);
- mTurnSignalValue.value.int32Values.setToExternal(&sDummySignal, 1);
+ mGearValue.value.int32Values.setToExternal(&sMockGear, 1);
+ mTurnSignalValue.value.int32Values.setToExternal(&sMockSignal, 1);
}
// Choose our desired EVS state based on the current car state
diff --git a/evs/apps/default/EvsStateControl.h b/cpp/evs/apps/default/EvsStateControl.h
similarity index 100%
rename from evs/apps/default/EvsStateControl.h
rename to cpp/evs/apps/default/EvsStateControl.h
diff --git a/evs/apps/default/EvsVehicleListener.h b/cpp/evs/apps/default/EvsVehicleListener.h
similarity index 100%
rename from evs/apps/default/EvsVehicleListener.h
rename to cpp/evs/apps/default/EvsVehicleListener.h
diff --git a/evs/apps/default/FormatConvert.cpp b/cpp/evs/apps/default/FormatConvert.cpp
similarity index 100%
rename from evs/apps/default/FormatConvert.cpp
rename to cpp/evs/apps/default/FormatConvert.cpp
diff --git a/evs/apps/default/FormatConvert.h b/cpp/evs/apps/default/FormatConvert.h
similarity index 100%
rename from evs/apps/default/FormatConvert.h
rename to cpp/evs/apps/default/FormatConvert.h
diff --git a/evs/apps/default/LabeledChecker.png b/cpp/evs/apps/default/LabeledChecker.png
similarity index 100%
rename from evs/apps/default/LabeledChecker.png
rename to cpp/evs/apps/default/LabeledChecker.png
Binary files differ
diff --git a/evs/apps/default/RenderBase.cpp b/cpp/evs/apps/default/RenderBase.cpp
similarity index 93%
rename from evs/apps/default/RenderBase.cpp
rename to cpp/evs/apps/default/RenderBase.cpp
index 0db7c9d..d91f324 100644
--- a/evs/apps/default/RenderBase.cpp
+++ b/cpp/evs/apps/default/RenderBase.cpp
@@ -29,7 +29,7 @@
// OpenGL state shared among all renderers
EGLDisplay RenderBase::sDisplay = EGL_NO_DISPLAY;
EGLContext RenderBase::sContext = EGL_NO_CONTEXT;
-EGLSurface RenderBase::sDummySurface = EGL_NO_SURFACE;
+EGLSurface RenderBase::sMockSurface = EGL_NO_SURFACE;
GLuint RenderBase::sFrameBuffer = -1;
GLuint RenderBase::sColorBuffer = -1;
GLuint RenderBase::sDepthBuffer = -1;
@@ -85,15 +85,15 @@
}
- // Create a dummy pbuffer so we have a surface to bind -- we never intend to draw to this
+ // Create a temporary pbuffer so we have a surface to bind -- we never intend to draw to this
// because attachRenderTarget will be called first.
EGLint surface_attribs[] = { EGL_WIDTH, 1, EGL_HEIGHT, 1, EGL_NONE };
- sDummySurface = eglCreatePbufferSurface(display, egl_config, surface_attribs);
- if (sDummySurface == EGL_NO_SURFACE) {
- LOG(ERROR) << "Failed to create OpenGL ES Dummy surface: " << getEGLError();
+ sMockSurface = eglCreatePbufferSurface(display, egl_config, surface_attribs);
+ if (sMockSurface == EGL_NO_SURFACE) {
+ LOG(ERROR) << "Failed to create OpenGL ES Mock surface: " << getEGLError();
return false;
} else {
- LOG(INFO) << "Dummy surface looks good! :)";
+ LOG(INFO) << "Mock surface looks good! :)";
}
@@ -108,7 +108,7 @@
// Activate our render target for drawing
- if (!eglMakeCurrent(display, sDummySurface, sDummySurface, context)) {
+ if (!eglMakeCurrent(display, sMockSurface, sMockSurface, context)) {
LOG(ERROR) << "Failed to make the OpenGL ES Context current: " << getEGLError();
return false;
} else {
diff --git a/evs/apps/default/RenderBase.h b/cpp/evs/apps/default/RenderBase.h
similarity index 97%
rename from evs/apps/default/RenderBase.h
rename to cpp/evs/apps/default/RenderBase.h
index 1226931..6adab07 100644
--- a/evs/apps/default/RenderBase.h
+++ b/cpp/evs/apps/default/RenderBase.h
@@ -52,7 +52,7 @@
// OpenGL state shared among all renderers
static EGLDisplay sDisplay;
static EGLContext sContext;
- static EGLSurface sDummySurface;
+ static EGLSurface sMockSurface;
static GLuint sFrameBuffer;
static GLuint sColorBuffer;
static GLuint sDepthBuffer;
diff --git a/evs/apps/default/RenderDirectView.cpp b/cpp/evs/apps/default/RenderDirectView.cpp
similarity index 100%
rename from evs/apps/default/RenderDirectView.cpp
rename to cpp/evs/apps/default/RenderDirectView.cpp
diff --git a/evs/apps/default/RenderDirectView.h b/cpp/evs/apps/default/RenderDirectView.h
similarity index 100%
rename from evs/apps/default/RenderDirectView.h
rename to cpp/evs/apps/default/RenderDirectView.h
diff --git a/evs/apps/default/RenderPixelCopy.cpp b/cpp/evs/apps/default/RenderPixelCopy.cpp
similarity index 100%
rename from evs/apps/default/RenderPixelCopy.cpp
rename to cpp/evs/apps/default/RenderPixelCopy.cpp
diff --git a/evs/apps/default/RenderPixelCopy.h b/cpp/evs/apps/default/RenderPixelCopy.h
similarity index 100%
rename from evs/apps/default/RenderPixelCopy.h
rename to cpp/evs/apps/default/RenderPixelCopy.h
diff --git a/evs/apps/default/RenderTopView.cpp b/cpp/evs/apps/default/RenderTopView.cpp
similarity index 100%
rename from evs/apps/default/RenderTopView.cpp
rename to cpp/evs/apps/default/RenderTopView.cpp
diff --git a/evs/apps/default/RenderTopView.h b/cpp/evs/apps/default/RenderTopView.h
similarity index 100%
rename from evs/apps/default/RenderTopView.h
rename to cpp/evs/apps/default/RenderTopView.h
diff --git a/evs/apps/default/StreamHandler.cpp b/cpp/evs/apps/default/StreamHandler.cpp
similarity index 100%
rename from evs/apps/default/StreamHandler.cpp
rename to cpp/evs/apps/default/StreamHandler.cpp
diff --git a/evs/apps/default/StreamHandler.h b/cpp/evs/apps/default/StreamHandler.h
similarity index 100%
rename from evs/apps/default/StreamHandler.h
rename to cpp/evs/apps/default/StreamHandler.h
diff --git a/evs/apps/default/TexWrapper.cpp b/cpp/evs/apps/default/TexWrapper.cpp
similarity index 100%
rename from evs/apps/default/TexWrapper.cpp
rename to cpp/evs/apps/default/TexWrapper.cpp
diff --git a/evs/apps/default/TexWrapper.h b/cpp/evs/apps/default/TexWrapper.h
similarity index 100%
rename from evs/apps/default/TexWrapper.h
rename to cpp/evs/apps/default/TexWrapper.h
diff --git a/evs/apps/default/VideoTex.cpp b/cpp/evs/apps/default/VideoTex.cpp
similarity index 100%
rename from evs/apps/default/VideoTex.cpp
rename to cpp/evs/apps/default/VideoTex.cpp
diff --git a/evs/apps/default/VideoTex.h b/cpp/evs/apps/default/VideoTex.h
similarity index 100%
rename from evs/apps/default/VideoTex.h
rename to cpp/evs/apps/default/VideoTex.h
diff --git a/evs/apps/default/config.json b/cpp/evs/apps/default/config.json
similarity index 100%
rename from evs/apps/default/config.json
rename to cpp/evs/apps/default/config.json
diff --git a/evs/apps/default/config.json.readme b/cpp/evs/apps/default/config.json.readme
similarity index 100%
rename from evs/apps/default/config.json.readme
rename to cpp/evs/apps/default/config.json.readme
diff --git a/evs/apps/default/evs_app.cpp b/cpp/evs/apps/default/evs_app.cpp
similarity index 100%
rename from evs/apps/default/evs_app.cpp
rename to cpp/evs/apps/default/evs_app.cpp
diff --git a/evs/apps/default/evs_app.rc b/cpp/evs/apps/default/evs_app.rc
similarity index 100%
rename from evs/apps/default/evs_app.rc
rename to cpp/evs/apps/default/evs_app.rc
diff --git a/evs/apps/default/glError.cpp b/cpp/evs/apps/default/glError.cpp
similarity index 100%
rename from evs/apps/default/glError.cpp
rename to cpp/evs/apps/default/glError.cpp
diff --git a/evs/apps/default/glError.h b/cpp/evs/apps/default/glError.h
similarity index 100%
rename from evs/apps/default/glError.h
rename to cpp/evs/apps/default/glError.h
diff --git a/evs/apps/default/shader.cpp b/cpp/evs/apps/default/shader.cpp
similarity index 100%
rename from evs/apps/default/shader.cpp
rename to cpp/evs/apps/default/shader.cpp
diff --git a/evs/apps/default/shader.h b/cpp/evs/apps/default/shader.h
similarity index 100%
rename from evs/apps/default/shader.h
rename to cpp/evs/apps/default/shader.h
diff --git a/evs/apps/default/shader_projectedTex.h b/cpp/evs/apps/default/shader_projectedTex.h
similarity index 100%
rename from evs/apps/default/shader_projectedTex.h
rename to cpp/evs/apps/default/shader_projectedTex.h
diff --git a/evs/apps/default/shader_simpleTex.h b/cpp/evs/apps/default/shader_simpleTex.h
similarity index 100%
rename from evs/apps/default/shader_simpleTex.h
rename to cpp/evs/apps/default/shader_simpleTex.h
diff --git a/evs/apps/demo_app_evs_support_lib/Android.bp b/cpp/evs/apps/demo_app_evs_support_lib/Android.bp
similarity index 94%
rename from evs/apps/demo_app_evs_support_lib/Android.bp
rename to cpp/evs/apps/demo_app_evs_support_lib/Android.bp
index ae0073a..adbe45e 100644
--- a/evs/apps/demo_app_evs_support_lib/Android.bp
+++ b/cpp/evs/apps/demo_app_evs_support_lib/Android.bp
@@ -28,7 +28,7 @@
"libevssupport",
],
- include_dirs: ["packages/services/Car/evs/support_library"],
+ include_dirs: ["packages/services/Car/cpp/evs/support_library"],
init_rc: ["evs_app_support_lib.rc"],
diff --git a/evs/apps/demo_app_evs_support_lib/evs_app_support_lib.cpp b/cpp/evs/apps/demo_app_evs_support_lib/evs_app_support_lib.cpp
similarity index 100%
rename from evs/apps/demo_app_evs_support_lib/evs_app_support_lib.cpp
rename to cpp/evs/apps/demo_app_evs_support_lib/evs_app_support_lib.cpp
diff --git a/evs/apps/demo_app_evs_support_lib/evs_app_support_lib.rc b/cpp/evs/apps/demo_app_evs_support_lib/evs_app_support_lib.rc
similarity index 100%
rename from evs/apps/demo_app_evs_support_lib/evs_app_support_lib.rc
rename to cpp/evs/apps/demo_app_evs_support_lib/evs_app_support_lib.rc
diff --git a/cpp/evs/apps/sepolicy/evsapp.mk b/cpp/evs/apps/sepolicy/evsapp.mk
new file mode 100644
index 0000000..495b3ab
--- /dev/null
+++ b/cpp/evs/apps/sepolicy/evsapp.mk
@@ -0,0 +1,3 @@
+# Selinux policies for the sample EVS application
+#PRODUCT_PUBLIC_SEPOLICY_DIRS += packages/services/Car/cpp/evs/apps/default/sepolicy/public
+PRODUCT_PRIVATE_SEPOLICY_DIRS += packages/services/Car/cpp/evs/apps/sepolicy/private
diff --git a/evs/sepolicy/private/evs_app.te b/cpp/evs/apps/sepolicy/private/evs_app.te
similarity index 100%
copy from evs/sepolicy/private/evs_app.te
copy to cpp/evs/apps/sepolicy/private/evs_app.te
diff --git a/cpp/evs/apps/sepolicy/private/file_contexts b/cpp/evs/apps/sepolicy/private/file_contexts
new file mode 100644
index 0000000..cd89c03
--- /dev/null
+++ b/cpp/evs/apps/sepolicy/private/file_contexts
@@ -0,0 +1,9 @@
+###################################
+# Binaries associated with evs_app and
+# the directory which contains the configuration for the evs_app
+#
+/system/bin/evs_app u:object_r:evs_app_exec:s0
+/system/bin/evs_app_support_lib u:object_r:evs_app_exec:s0
+/system/etc/automotive/evs(/.*)? u:object_r:evs_app_files:s0
+
+###################################
diff --git a/cpp/evs/apps/sepolicy/private/servicemanager.te b/cpp/evs/apps/sepolicy/private/servicemanager.te
new file mode 100644
index 0000000..da102a8
--- /dev/null
+++ b/cpp/evs/apps/sepolicy/private/servicemanager.te
@@ -0,0 +1,2 @@
+# Allow evs_app to use Binder IPC
+binder_use(evs_app)
diff --git a/evs/manager/1.0/Android.bp b/cpp/evs/manager/1.0/Android.bp
similarity index 100%
rename from evs/manager/1.0/Android.bp
rename to cpp/evs/manager/1.0/Android.bp
diff --git a/evs/manager/1.0/Enumerator.cpp b/cpp/evs/manager/1.0/Enumerator.cpp
similarity index 100%
rename from evs/manager/1.0/Enumerator.cpp
rename to cpp/evs/manager/1.0/Enumerator.cpp
diff --git a/evs/manager/1.0/Enumerator.h b/cpp/evs/manager/1.0/Enumerator.h
similarity index 100%
rename from evs/manager/1.0/Enumerator.h
rename to cpp/evs/manager/1.0/Enumerator.h
diff --git a/evs/manager/1.0/HalCamera.cpp b/cpp/evs/manager/1.0/HalCamera.cpp
similarity index 100%
rename from evs/manager/1.0/HalCamera.cpp
rename to cpp/evs/manager/1.0/HalCamera.cpp
diff --git a/evs/manager/1.0/HalCamera.h b/cpp/evs/manager/1.0/HalCamera.h
similarity index 100%
rename from evs/manager/1.0/HalCamera.h
rename to cpp/evs/manager/1.0/HalCamera.h
diff --git a/evs/manager/1.0/HalDisplay.cpp b/cpp/evs/manager/1.0/HalDisplay.cpp
similarity index 100%
rename from evs/manager/1.0/HalDisplay.cpp
rename to cpp/evs/manager/1.0/HalDisplay.cpp
diff --git a/evs/manager/1.0/HalDisplay.h b/cpp/evs/manager/1.0/HalDisplay.h
similarity index 100%
rename from evs/manager/1.0/HalDisplay.h
rename to cpp/evs/manager/1.0/HalDisplay.h
diff --git a/evs/manager/1.0/ServiceNames.h b/cpp/evs/manager/1.0/ServiceNames.h
similarity index 100%
rename from evs/manager/1.0/ServiceNames.h
rename to cpp/evs/manager/1.0/ServiceNames.h
diff --git a/evs/manager/1.0/VirtualCamera.cpp b/cpp/evs/manager/1.0/VirtualCamera.cpp
similarity index 100%
rename from evs/manager/1.0/VirtualCamera.cpp
rename to cpp/evs/manager/1.0/VirtualCamera.cpp
diff --git a/evs/manager/1.0/VirtualCamera.h b/cpp/evs/manager/1.0/VirtualCamera.h
similarity index 100%
rename from evs/manager/1.0/VirtualCamera.h
rename to cpp/evs/manager/1.0/VirtualCamera.h
diff --git a/evs/manager/1.0/android.automotive.evs.manager@1.0.rc b/cpp/evs/manager/1.0/android.automotive.evs.manager@1.0.rc
similarity index 100%
rename from evs/manager/1.0/android.automotive.evs.manager@1.0.rc
rename to cpp/evs/manager/1.0/android.automotive.evs.manager@1.0.rc
diff --git a/evs/manager/1.0/service.cpp b/cpp/evs/manager/1.0/service.cpp
similarity index 100%
rename from evs/manager/1.0/service.cpp
rename to cpp/evs/manager/1.0/service.cpp
diff --git a/cpp/evs/manager/1.1/Android.bp b/cpp/evs/manager/1.1/Android.bp
new file mode 100644
index 0000000..6c3d7af
--- /dev/null
+++ b/cpp/evs/manager/1.1/Android.bp
@@ -0,0 +1,114 @@
+// 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.
+//
+//
+
+cc_defaults {
+ name: "android.automotive.evs.manager_defaults",
+
+ shared_libs: [
+ "android.hardware.automotive.evs@1.0",
+ "android.hardware.automotive.evs@1.1",
+ "libbase",
+ "libcamera_metadata",
+ "libcutils",
+ "libhardware",
+ "libhidlbase",
+ "libpng",
+ "libprocessgroup",
+ "libstatslog",
+ "libsync",
+ "libui",
+ "libutils",
+ ],
+
+ static_libs: ["libc++fs"],
+
+ cflags: [
+ "-DLOG_TAG=\"EvsManagerV1_1\"",
+ "-DGL_GLEXT_PROTOTYPES",
+ "-DEGL_EGLEXT_PROTOTYPES",
+ "-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS",
+ "-Wall",
+ "-Werror",
+ "-Wunused",
+ "-Wunreachable-code",
+ "-Wthread-safety",
+ ],
+
+ include_dirs: [
+ "system/core/libsync",
+ ],
+
+ export_include_dirs: [
+ "./",
+ "stats/",
+ "sync/",
+ ],
+
+ product_variables: {
+ debuggable: {
+ cflags: [
+ "-DEVS_DEBUG",
+ ]
+ }
+ },
+}
+
+filegroup {
+ name: "android.automotive.evs.manager_sources",
+
+ srcs: [
+ "Enumerator.cpp",
+ "HalCamera.cpp",
+ "HalDisplay.cpp",
+ "VirtualCamera.cpp",
+ "emul/EvsEmulatedCamera.cpp",
+ "emul/VideoCapture.cpp",
+ "stats/CameraUsageStats.cpp",
+ "stats/LooperWrapper.cpp",
+ "stats/StatsCollector.cpp",
+ "sync/unique_fd.cpp",
+ "sync/unique_fence.cpp",
+ "sync/unique_timeline.cpp",
+ ],
+}
+
+
+cc_library_static {
+ name: "libevsmanager_static",
+
+ defaults: ["android.automotive.evs.manager_defaults"],
+
+ srcs: [":android.automotive.evs.manager_sources"],
+
+ export_include_dirs: ["."],
+
+}
+
+
+cc_binary {
+ name: "android.automotive.evs.manager@1.1",
+
+ defaults: ["android.automotive.evs.manager_defaults"],
+
+ srcs: [
+ ":android.automotive.evs.manager_sources",
+ "service.cpp"
+ ],
+
+ init_rc: ["android.automotive.evs.manager@1.1.rc"],
+
+ vintf_fragments: ["manifest_android.automotive.evs.manager@1.1.xml"],
+}
diff --git a/evs/manager/1.1/Enumerator.cpp b/cpp/evs/manager/1.1/Enumerator.cpp
similarity index 88%
rename from evs/manager/1.1/Enumerator.cpp
rename to cpp/evs/manager/1.1/Enumerator.cpp
index 61cfec9..997a21a 100644
--- a/evs/manager/1.1/Enumerator.cpp
+++ b/cpp/evs/manager/1.1/Enumerator.cpp
@@ -16,6 +16,9 @@
#include "Enumerator.h"
#include "HalDisplay.h"
+#include "emul/EvsEmulatedCamera.h"
+
+#include <regex>
#include <android-base/chrono_utils.h>
#include <android-base/file.h>
@@ -45,6 +48,7 @@
const int kOptionDumpCameraCommandIndex = 3;
const int kOptionDumpCameraArgsStartIndex = 4;
+ const std::regex kEmulatedCameraNamePattern("emulated/[0-9]+", std::regex_constants::icase);
}
namespace android {
@@ -233,9 +237,18 @@
hwCamera = mActiveCameras[cameraId];
} else {
// Is the hardware camera available?
- sp<IEvsCamera_1_1> device =
- IEvsCamera_1_1::castFrom(mHwEnumerator->openCamera(cameraId))
- .withDefault(nullptr);
+ sp<IEvsCamera_1_1> device;
+ if (std::regex_match(cameraId.c_str(), kEmulatedCameraNamePattern)) {
+ if (mEmulatedCameraDevices.find(cameraId) == mEmulatedCameraDevices.end()) {
+ LOG(ERROR) << cameraId << " is not available";
+ } else {
+ device = EvsEmulatedCamera::Create(cameraId.c_str(),
+ mEmulatedCameraDevices[cameraId]);
+ }
+ } else {
+ device = IEvsCamera_1_1::castFrom(mHwEnumerator->openCamera(cameraId))
+ .withDefault(nullptr);
+ }
if (device == nullptr) {
LOG(ERROR) << "Failed to open hardware camera " << cameraId;
} else {
@@ -325,10 +338,19 @@
for (auto&& id : physicalCameras) {
auto it = mActiveCameras.find(id);
if (it == mActiveCameras.end()) {
- // Try to open a hardware camera.
- sp<IEvsCamera_1_1> device =
- IEvsCamera_1_1::castFrom(mHwEnumerator->openCamera_1_1(id, streamCfg))
- .withDefault(nullptr);
+ sp<IEvsCamera_1_1> device;
+ if (std::regex_match(cameraId.c_str(), kEmulatedCameraNamePattern)) {
+ if (mEmulatedCameraDevices.find(id) == mEmulatedCameraDevices.end()) {
+ LOG(ERROR) << cameraId << " is not available";
+ } else {
+ device = EvsEmulatedCamera::Create(id.c_str(),
+ mEmulatedCameraDevices[id]);
+ }
+ } else {
+ device = IEvsCamera_1_1::castFrom(mHwEnumerator->openCamera_1_1(id, streamCfg))
+ .withDefault(nullptr);
+ }
+
if (device == nullptr) {
LOG(ERROR) << "Failed to open hardware camera " << cameraId;
success = false;
@@ -426,6 +448,15 @@
mCameraDevices.insert_or_assign(desc.v1.cameraId, desc);
}
+ // Add emulated devices if there is any
+ if (mEmulatedCameraDevices.size() > 0) {
+ int index = hidlCameras.size();
+ hidlCameras.resize(hidlCameras.size() + mEmulatedCameraDevices.size());
+ for (auto&& [id, desc] : mEmulatedCameraDevices) {
+ hidlCameras[index++].v1.cameraId = id;
+ }
+ }
+
list_cb(hidlCameras);
return Void();
}
@@ -594,6 +625,8 @@
cmdList(fd, options);
} else if (EqualsIgnoreCase(option, "--dump")) {
cmdDumpDevice(fd, options);
+ } else if (EqualsIgnoreCase(option, "--configure-emulated-camera")) {
+ cmdConfigureEmulatedCamera(fd, options);
} else {
WriteStringToFd(StringPrintf("Invalid option: %s\n", option.c_str()),
fd);
@@ -614,7 +647,13 @@
"at every [interval] during [duration]. Interval and duration are in "
"milliseconds.\n"
"\t\tstop: stops collecting usage statistics and shows collected records.\n"
- "--dump display: shows current status of the display\n", fd);
+ "--dump display: shows current status of the display\n"
+ "--configure-emulated-camera [id] [path] [width] [height] [interval]\n"
+ "\tid: emulated device id to use; emulated/[0-9]+\n"
+ "\tpath: a path to the directory where source files are stored\n"
+ "\twidth: image width in pixels\n"
+ "\theight: image height in pixels\n"
+ "\tinterval: interval between consecutive frames in milliseconds.\n", fd);
}
@@ -857,6 +896,45 @@
}
}
+
+void Enumerator::cmdConfigureEmulatedCamera(int fd, const hidl_vec<hidl_string>& options) {
+ if (options.size() < 6) {
+ WriteStringToFd(StringPrintf("Necessary arguments are missing.\n"), fd);
+ cmdHelp(fd);
+ return;
+ }
+
+ // --configure-emulated-camera [id] [path] [width] [height] [interval]
+ const std::string id = options[1];
+ if (!std::regex_match(id.c_str(), kEmulatedCameraNamePattern)) {
+ WriteStringToFd(StringPrintf("%s does not match to the pattern.\n", id.c_str()), fd);
+ return;
+ }
+
+ if (mCameraDevices.find(id) != mCameraDevices.end()) {
+ WriteStringToFd(
+ StringPrintf("Updating %s's configuration. "
+ "This will get effective when currently active stream is closed.\n",
+ id.c_str()), fd);
+ }
+
+ std::string sourceDir = options[2];
+ int width = std::stoi(options[3]);
+ int height = std::stoi(options[4]);
+ std::chrono::nanoseconds interval = std::chrono::duration_cast<std::chrono::nanoseconds>(
+ std::chrono::milliseconds(std::stoi(options[5]))
+ );
+ WriteStringToFd(StringPrintf("Configuring %s as:\n"
+ "\tResolution: %dx%d\n"
+ "\tInterval: %f ms\n",
+ id.c_str(), width, height,
+ interval.count() / 1000000.), fd);
+
+ EmulatedCameraDesc desc = {width, height, sourceDir, interval};
+ mEmulatedCameraDevices.insert_or_assign(id, std::move(desc));
+}
+
+
} // namespace implementation
} // namespace V1_1
} // namespace evs
diff --git a/evs/manager/1.1/Enumerator.h b/cpp/evs/manager/1.1/Enumerator.h
similarity index 94%
rename from evs/manager/1.1/Enumerator.h
rename to cpp/evs/manager/1.1/Enumerator.h
index 3d3a253..9e27cd3 100644
--- a/evs/manager/1.1/Enumerator.h
+++ b/cpp/evs/manager/1.1/Enumerator.h
@@ -19,6 +19,7 @@
#include "HalCamera.h"
#include "VirtualCamera.h"
+#include "emul/EvsEmulatedCamera.h"
#include "stats/StatsCollector.h"
#include <list>
@@ -114,6 +115,13 @@
void cmdHelp(int fd);
void cmdList(int fd, const hidl_vec<hidl_string>& options);
void cmdDumpDevice(int fd, const hidl_vec<hidl_string>& options);
+
+ // List of emulated camera devices
+ std::unordered_map<std::string,
+ EmulatedCameraDesc> mEmulatedCameraDevices;
+
+ // LSHAL command to use emulated camera device
+ void cmdConfigureEmulatedCamera(int fd, const hidl_vec<hidl_string>& options);
};
} // namespace implementation
diff --git a/evs/manager/1.1/HalCamera.cpp b/cpp/evs/manager/1.1/HalCamera.cpp
similarity index 94%
rename from evs/manager/1.1/HalCamera.cpp
rename to cpp/evs/manager/1.1/HalCamera.cpp
index f4d2c49..47cabe1 100644
--- a/evs/manager/1.1/HalCamera.cpp
+++ b/cpp/evs/manager/1.1/HalCamera.cpp
@@ -498,34 +498,34 @@
Return<EvsResult> HalCamera::setMaster(sp<VirtualCamera> virtualCamera) {
- if (mMaster == nullptr) {
+ if (mPrimaryClient == nullptr) {
LOG(DEBUG) << __FUNCTION__
- << ": " << virtualCamera.get() << " becomes a master.";
- mMaster = virtualCamera;
+ << ": " << virtualCamera.get() << " becomes a primary client.";
+ mPrimaryClient = virtualCamera;
return EvsResult::OK;
} else {
- LOG(INFO) << "This camera already has a master client.";
+ LOG(INFO) << "This camera already has a primary client.";
return EvsResult::OWNERSHIP_LOST;
}
}
Return<EvsResult> HalCamera::forceMaster(sp<VirtualCamera> virtualCamera) {
- sp<VirtualCamera> prevMaster = mMaster.promote();
- if (prevMaster == virtualCamera) {
+ sp<VirtualCamera> prevPrimary = mPrimaryClient.promote();
+ if (prevPrimary == virtualCamera) {
LOG(DEBUG) << "Client " << virtualCamera.get()
- << " is already a master client";
+ << " is already a primary client";
} else {
- mMaster = virtualCamera;
- if (prevMaster != nullptr) {
+ mPrimaryClient = virtualCamera;
+ if (prevPrimary != nullptr) {
LOG(INFO) << "High priority client " << virtualCamera.get()
- << " steals a master role from " << prevMaster.get();
+ << " steals a primary role from " << prevPrimary.get();
- /* Notify a previous master client the loss of a master role */
+ /* Notify a previous primary client the loss of a primary role */
EvsEventDesc event;
event.aType = EvsEventType::MASTER_RELEASED;
- if (!prevMaster->notify(event)) {
- LOG(ERROR) << "Fail to deliver a master role lost notification";
+ if (!prevPrimary->notify(event)) {
+ LOG(ERROR) << "Fail to deliver a primary role lost notification";
}
}
}
@@ -535,13 +535,13 @@
Return<EvsResult> HalCamera::unsetMaster(sp<VirtualCamera> virtualCamera) {
- if (mMaster.promote() != virtualCamera) {
+ if (mPrimaryClient.promote() != virtualCamera) {
return EvsResult::INVALID_ARG;
} else {
- LOG(INFO) << "Unset a master camera client";
- mMaster = nullptr;
+ LOG(INFO) << "Unset a primary camera client";
+ mPrimaryClient = nullptr;
- /* Notify other clients that a master role becomes available. */
+ /* Notify other clients that a primary role becomes available. */
EvsEventDesc event;
event.aType = EvsEventType::MASTER_RELEASED;
auto cbResult = this->notify(event);
@@ -557,7 +557,7 @@
Return<EvsResult> HalCamera::setParameter(sp<VirtualCamera> virtualCamera,
CameraParam id, int32_t& value) {
EvsResult result = EvsResult::INVALID_ARG;
- if (virtualCamera == mMaster.promote()) {
+ if (virtualCamera == mPrimaryClient.promote()) {
mHwCamera->setIntParameter(id, value,
[&result, &value](auto status, auto readValue) {
result = status;
@@ -576,7 +576,7 @@
}
}
} else {
- LOG(WARNING) << "A parameter change request from a non-master client is declined.";
+ LOG(WARNING) << "A parameter change request from the non-primary client is declined.";
/* Read a current value of a requested camera parameter */
getParameter(id, value);
@@ -630,9 +630,9 @@
buffer += handle->toString(double_indent.c_str());
}
- StringAppendF(&buffer, "%sMaster client: %p\n"
+ StringAppendF(&buffer, "%sPrimary client: %p\n"
"%sSynchronization support: %s\n",
- indent, mMaster.promote().get(),
+ indent, mPrimaryClient.promote().get(),
indent, mSyncSupported ? "T":"F");
buffer += HalCamera::toString(mStreamConfig, indent);
diff --git a/evs/manager/1.1/HalCamera.h b/cpp/evs/manager/1.1/HalCamera.h
similarity index 98%
rename from evs/manager/1.1/HalCamera.h
rename to cpp/evs/manager/1.1/HalCamera.h
index efc5c25..5679bc9 100644
--- a/evs/manager/1.1/HalCamera.h
+++ b/cpp/evs/manager/1.1/HalCamera.h
@@ -140,7 +140,7 @@
FrameRecord(uint32_t id) : frameId(id), refCount(0) {};
};
std::vector<FrameRecord> mFrames;
- wp<VirtualCamera> mMaster = nullptr;
+ wp<VirtualCamera> mPrimaryClient = nullptr;
std::string mId;
Stream mStreamConfig;
diff --git a/evs/manager/1.1/HalDisplay.cpp b/cpp/evs/manager/1.1/HalDisplay.cpp
similarity index 100%
rename from evs/manager/1.1/HalDisplay.cpp
rename to cpp/evs/manager/1.1/HalDisplay.cpp
diff --git a/evs/manager/1.1/HalDisplay.h b/cpp/evs/manager/1.1/HalDisplay.h
similarity index 100%
rename from evs/manager/1.1/HalDisplay.h
rename to cpp/evs/manager/1.1/HalDisplay.h
diff --git a/evs/manager/1.1/ServiceNames.h b/cpp/evs/manager/1.1/ServiceNames.h
similarity index 100%
rename from evs/manager/1.1/ServiceNames.h
rename to cpp/evs/manager/1.1/ServiceNames.h
diff --git a/evs/manager/1.1/VirtualCamera.cpp b/cpp/evs/manager/1.1/VirtualCamera.cpp
similarity index 99%
rename from evs/manager/1.1/VirtualCamera.cpp
rename to cpp/evs/manager/1.1/VirtualCamera.cpp
index fda58d1..1f2f1f3 100644
--- a/evs/manager/1.1/VirtualCamera.cpp
+++ b/cpp/evs/manager/1.1/VirtualCamera.cpp
@@ -77,7 +77,7 @@
mFramesHeld[key].clear();
}
- // Retire from a master client
+ // Retire from a primary client
pHwCamera->unsetMaster(this);
// Give the underlying hardware camera the heads up that it might be time to stop
@@ -204,7 +204,7 @@
break;
case EvsEventType::MASTER_RELEASED:
- LOG(DEBUG) << "The master client has been released";
+ LOG(DEBUG) << "The primary client has been released";
break;
default:
diff --git a/evs/manager/1.1/VirtualCamera.h b/cpp/evs/manager/1.1/VirtualCamera.h
similarity index 100%
rename from evs/manager/1.1/VirtualCamera.h
rename to cpp/evs/manager/1.1/VirtualCamera.h
diff --git a/evs/manager/1.1/android.automotive.evs.manager@1.1.rc b/cpp/evs/manager/1.1/android.automotive.evs.manager@1.1.rc
similarity index 100%
rename from evs/manager/1.1/android.automotive.evs.manager@1.1.rc
rename to cpp/evs/manager/1.1/android.automotive.evs.manager@1.1.rc
diff --git a/cpp/evs/manager/1.1/emul/EvsEmulatedCamera.cpp b/cpp/evs/manager/1.1/emul/EvsEmulatedCamera.cpp
new file mode 100644
index 0000000..75ed0f3
--- /dev/null
+++ b/cpp/evs/manager/1.1/emul/EvsEmulatedCamera.cpp
@@ -0,0 +1,847 @@
+/*
+ * Copyright 2020 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.
+ */
+
+#include "EvsEmulatedCamera.h"
+
+#include <filesystem>
+
+#include <android/hardware_buffer.h>
+#include <android-base/logging.h>
+#include <ui/GraphicBufferAllocator.h>
+#include <ui/GraphicBufferMapper.h>
+#include <utils/SystemClock.h>
+
+using BufferDesc_1_0 = ::android::hardware::automotive::evs::V1_0::BufferDesc;
+using BufferDesc_1_1 = ::android::hardware::automotive::evs::V1_1::BufferDesc;
+
+namespace {
+ // Arbitrary limit on number of graphics buffers allowed to be allocated
+ // Safeguards against unreasonable resource consumption and provides a testable limit
+ const unsigned MAX_BUFFERS_IN_FLIGHT = 100;
+
+ uint32_t yuvToRgbx(const unsigned char Y, const unsigned char Uin, const unsigned char Vin) {
+ const float U = Uin - 128.0f;
+ const float V = Vin - 128.0f;
+
+ const float Rf = Y + 1.140f*V;
+ const float Gf = Y - 0.395f*U - 0.581f*V;
+ const float Bf = Y + 2.032f*U;
+ const unsigned char R = static_cast<unsigned char>(std::clamp(Rf, 0.0f, 255.0f));
+ const unsigned char G = static_cast<unsigned char>(std::clamp(Gf, 0.0f, 255.0f));
+ const unsigned char B = static_cast<unsigned char>(std::clamp(Bf, 0.0f, 255.0f));
+
+ return ((R & 0xFF)) |
+ ((G & 0xFF) << 8) |
+ ((B & 0xFF) << 16) |
+ 0xFF000000; // Fill the alpha channel with ones
+ }
+
+
+ void fillRGBAFromYUYV(const BufferDesc& dstBuff,
+ uint8_t* dstData,
+ void* srcData,
+ unsigned srcStride,
+ unsigned srcHeight) {
+ const AHardwareBuffer_Desc* pDesc =
+ reinterpret_cast<const AHardwareBuffer_Desc*>(&dstBuff.buffer.description);
+ unsigned width = pDesc->width;
+ uint32_t* src = reinterpret_cast<uint32_t*>(srcData);
+ uint32_t* dst = reinterpret_cast<uint32_t*>(dstData);
+ unsigned srcStridePixels = srcStride / 2;
+ unsigned dstStridePixels = pDesc->stride;
+
+ const int srcRowPadding32 =
+ srcStridePixels / 2 - width / 2; // 2 bytes per pixel, 4 bytes per word
+ const int dstRowPadding32 =
+ dstStridePixels - width; // 4 bytes per pixel, 4 bytes per word
+
+ const unsigned numRows = std::min(srcHeight, pDesc->height);
+ for (unsigned r = 0; r < numRows; ++r) {
+ for (unsigned c = 0; c < width/2; c++) {
+ // Note: we're walking two pixels at a time here (even/odd)
+ uint32_t srcPixel = *src++;
+
+ uint8_t Y1 = (srcPixel) & 0xFF;
+ uint8_t U = (srcPixel >> 8) & 0xFF;
+ uint8_t Y2 = (srcPixel >> 16) & 0xFF;
+ uint8_t V = (srcPixel >> 24) & 0xFF;
+
+ // On the RGB output, we're writing one pixel at a time
+ *(dst+0) = yuvToRgbx(Y1, U, V);
+ *(dst+1) = yuvToRgbx(Y2, U, V);
+ dst += 2;
+ }
+
+ // Skip over any extra data or end of row alignment padding
+ src += srcRowPadding32;
+ dst += dstRowPadding32;
+ }
+ }
+
+
+ void fillBufferCopy(const BufferDesc& dstBuff,
+ uint8_t* dst,
+ void* srcData,
+ unsigned srcStride,
+ unsigned srcHeight) {
+ const AHardwareBuffer_Desc* pDesc =
+ reinterpret_cast<const AHardwareBuffer_Desc*>(&dstBuff.buffer.description);
+
+ // HAL_PIXEL_FORMAT_RGBA_8888 default output format
+ const unsigned bytesPerPixel = 4;
+ const unsigned dstStride = pDesc->stride * bytesPerPixel;
+
+ // Simply copy the data, row by row, without the scaling.
+ const unsigned copyStride = std::min(srcStride, dstStride);
+ const unsigned numRows = std::min(srcHeight, pDesc->height);
+ uint8_t* src = reinterpret_cast<uint8_t*>(srcData);
+ for (auto r = 0; r < numRows; ++r) {
+ memcpy(dst, src, copyStride);
+
+ // Moves to the next row
+ src += srcStride;
+ dst += dstStride;
+ }
+ }
+} // namespace
+
+
+namespace android {
+namespace automotive {
+namespace evs {
+namespace V1_1 {
+namespace implementation {
+
+EvsEmulatedCamera::EvsEmulatedCamera(const char *deviceName,
+ const EmulatedCameraDesc& desc) :
+ mFramesAllowed(0),
+ mFramesInUse(0),
+ mCaptureDeviceDesc(desc) {
+ LOG(INFO) << "EvsEmulatedCamera instantiated";
+ mDescription.v1.cameraId = deviceName;
+
+ mVideo = new VideoCapture();
+
+ // Default output buffer format.
+ mFormat = HAL_PIXEL_FORMAT_RGBA_8888;
+
+ // How we expect to use the gralloc buffers we'll exchange with our client
+ mUsage = GRALLOC_USAGE_HW_TEXTURE |
+ GRALLOC_USAGE_SW_READ_RARELY |
+ GRALLOC_USAGE_SW_WRITE_OFTEN;
+
+ mDescription.v1.cameraId = deviceName;
+}
+
+
+EvsEmulatedCamera::~EvsEmulatedCamera() {
+ LOG(INFO) << "EvsEmulatedCamera being destroyed";
+ shutdown();
+}
+
+
+bool EvsEmulatedCamera::openDevice() {
+ bool opened = false;
+ if (mVideo) {
+ opened = mVideo->open(mCaptureDeviceDesc.path,
+ mCaptureDeviceDesc.interval);
+ }
+
+ return opened;
+}
+
+
+void EvsEmulatedCamera::shutdown()
+{
+ LOG(INFO) << "EvsEmulatedCamera shutdown";
+
+ // Make sure our output stream is cleaned up
+ // (It really should be already)
+ stopVideoStream();
+
+ // Note: Since stopVideoStream is blocking, no other threads can now be running
+
+ // Close our video capture device
+ mVideo->close();
+
+ // Drop all the graphics buffers we've been using
+ if (mBuffers.size() > 0) {
+ GraphicBufferAllocator& alloc(GraphicBufferAllocator::get());
+ for (auto&& rec : mBuffers) {
+ if (rec.inUse) {
+ LOG(WARNING) << "Releasing buffer despite remote ownership";
+ }
+ alloc.free(rec.handle);
+ rec.handle = nullptr;
+ }
+ mBuffers.clear();
+ }
+}
+
+
+// Methods from ::android::hardware::automotive::evs::V1_0::IEvsCamera follow.
+Return<void> EvsEmulatedCamera::getCameraInfo(getCameraInfo_cb _hidl_cb) {
+ LOG(DEBUG) << __FUNCTION__;
+
+ // Send back our self description
+ _hidl_cb(mDescription.v1);
+ return {};
+}
+
+
+Return<EvsResult> EvsEmulatedCamera::setMaxFramesInFlight(uint32_t bufferCount) {
+ LOG(DEBUG) << __FUNCTION__;
+ std::scoped_lock<std::mutex> lock(mAccessLock);
+
+ // Check whether underlying device is still open
+ if (!mVideo->isOpen()) {
+ LOG(WARNING) << "Ignoring startVideoStream call when camera has been lost.";
+ return EvsResult::OWNERSHIP_LOST;
+ }
+
+ // We cannot function without at least one video buffer to send data
+ if (bufferCount < 1) {
+ LOG(ERROR) << "Ignoring setMaxFramesInFlight with less than one buffer requested";
+ return EvsResult::INVALID_ARG;
+ }
+
+ // Update our internal state
+ if (setAvailableFrames_Locked(bufferCount)) {
+ return EvsResult::OK;
+ } else {
+ return EvsResult::BUFFER_NOT_AVAILABLE;
+ }
+}
+
+
+Return<EvsResult> EvsEmulatedCamera::startVideoStream(const sp<IEvsCameraStream_1_0>& stream) {
+ LOG(DEBUG) << __FUNCTION__;
+ std::scoped_lock<std::mutex> lock(mAccessLock);
+
+ // Check whether underlying device is still open
+ if (!mVideo->isOpen()) {
+ LOG(WARNING) << "Ignoring startVideoStream call when camera has been lost.";
+ return EvsResult::OWNERSHIP_LOST;
+ }
+
+ if (mStream != nullptr) {
+ LOG(ERROR) << "Ignoring startVideoStream call when a stream is already running.";
+ return EvsResult::STREAM_ALREADY_RUNNING;
+ }
+
+ mStream = IEvsCameraStream_1_1::castFrom(stream).withDefault(nullptr);
+ if (mStream == nullptr) {
+ LOG(ERROR) << "A given IEvsCameraStream does not supoprt v1.1 interface.";
+ return EvsResult::INVALID_ARG;
+ }
+
+ // If the client never indicated otherwise, configure ourselves for a single streaming buffer
+ if (mFramesAllowed < 1) {
+ if (!setAvailableFrames_Locked(1)) {
+ LOG(ERROR) << "Failed to start stream because we couldn't get a graphics buffer";
+ return EvsResult::BUFFER_NOT_AVAILABLE;
+ }
+ }
+
+ if (!mVideo->startStream([this](VideoCapture*, imageBufferDesc* tgt, void* data) {
+ this->forwardFrame(tgt, data);
+ })
+ ) {
+ // No need to hold onto this if we failed to start
+ mStream = nullptr;
+ LOG(ERROR) << "Underlying camera start stream failed";
+ return EvsResult::UNDERLYING_SERVICE_ERROR;
+ }
+
+ return EvsResult::OK;
+}
+
+
+Return<void> EvsEmulatedCamera::doneWithFrame(const BufferDesc_1_0& buffer) {
+ LOG(DEBUG) << __FUNCTION__;
+ doneWithFrame_impl(buffer.bufferId, buffer.memHandle);
+
+ return {};
+}
+
+
+Return<void> EvsEmulatedCamera::stopVideoStream() {
+ LOG(DEBUG) << __FUNCTION__;
+
+ // Tells the capture device to stop (and block until it does)
+ mVideo->stopStream();
+
+ if (mStream != nullptr) {
+ // V1.1 client is waiting on STREAM_STOPPED event.
+ std::scoped_lock<std::mutex> lock(mAccessLock);
+
+ EvsEventDesc event;
+ event.aType = EvsEventType::STREAM_STOPPED;
+ auto result = mStream->notify(event);
+ if (!result.isOk()) {
+ LOG(ERROR) << "Error delivering end of stream event";
+ }
+
+ // Drop our reference to the client's stream receiver
+ mStream = nullptr;
+ }
+
+ return {};
+}
+
+
+Return<int32_t> EvsEmulatedCamera::getExtendedInfo(uint32_t /*opaqueIdentifier*/) {
+ LOG(DEBUG) << __FUNCTION__;
+ // Return zero by default as required by the spec
+ return 0;
+}
+
+
+Return<EvsResult> EvsEmulatedCamera::setExtendedInfo(uint32_t /*opaqueIdentifier*/,
+ int32_t /*opaqueValue*/) {
+ LOG(DEBUG) << __FUNCTION__;
+ std::scoped_lock<std::mutex> lock(mAccessLock);
+
+ // If we've been displaced by another owner of the camera, then we can't do anything else
+ if (!mVideo->isOpen()) {
+ LOG(WARNING) << "Ignoring setExtendedInfo call when camera has been lost.";
+ return EvsResult::OWNERSHIP_LOST;
+ }
+
+ // We don't store any device specific information in this implementation
+ return EvsResult::INVALID_ARG;
+}
+
+
+// Methods from ::android::hardware::automotive::evs::V1_1::IEvsCamera follow.
+Return<void> EvsEmulatedCamera::getCameraInfo_1_1(getCameraInfo_1_1_cb _hidl_cb) {
+ LOG(DEBUG) << __FUNCTION__;
+
+ // Send back our self description
+ _hidl_cb(mDescription);
+ return {};
+}
+
+
+Return<void> EvsEmulatedCamera::getPhysicalCameraInfo(const hidl_string& /*id*/,
+ getPhysicalCameraInfo_cb _hidl_cb) {
+ LOG(DEBUG) << __FUNCTION__;
+
+ // This method works exactly the same as getCameraInfo_1_1() in EVS HW module.
+ _hidl_cb(mDescription);
+ return {};
+}
+
+
+Return<EvsResult> EvsEmulatedCamera::doneWithFrame_1_1(const hidl_vec<BufferDesc_1_1>& buffers) {
+ LOG(DEBUG) << __FUNCTION__;
+
+ for (auto&& buffer : buffers) {
+ doneWithFrame_impl(buffer.bufferId, buffer.buffer.nativeHandle);
+ }
+
+ return EvsResult::OK;
+}
+
+
+Return<EvsResult> EvsEmulatedCamera::pauseVideoStream() {
+ return EvsResult::UNDERLYING_SERVICE_ERROR;
+}
+
+
+Return<EvsResult> EvsEmulatedCamera::resumeVideoStream() {
+ return EvsResult::UNDERLYING_SERVICE_ERROR;
+}
+
+
+Return<EvsResult> EvsEmulatedCamera::setMaster() {
+ // TODO(b/162946784): Implement this operation
+ return EvsResult::OK;
+}
+
+
+Return<EvsResult> EvsEmulatedCamera::forceMaster(const sp<IEvsDisplay_1_0>&) {
+ // TODO(b/162946784): Implement this operation
+ return EvsResult::OK;
+}
+
+
+Return<EvsResult> EvsEmulatedCamera::unsetMaster() {
+ // TODO(b/162946784): Implement this operation
+ return EvsResult::OK;
+}
+
+
+Return<void> EvsEmulatedCamera::getParameterList(getParameterList_cb _hidl_cb) {
+ // TODO(b/162946784): reads emulated controls from the configuration and
+ // returns.
+ hidl_vec<CameraParam> hidlCtrls;
+ _hidl_cb(hidlCtrls);
+ return {};
+}
+
+
+Return<void> EvsEmulatedCamera::getIntParameterRange(CameraParam /*id*/,
+ getIntParameterRange_cb _hidl_cb) {
+ // TODO(b/162946784): reads emulated controls from the configuration and
+ // returns.
+ _hidl_cb(0, 0, 0);
+ return {};
+}
+
+
+Return<void> EvsEmulatedCamera::setIntParameter(CameraParam /*id*/,
+ int32_t /*value*/,
+ setIntParameter_cb _hidl_cb) {
+ // TODO(b/162946784): Implement this operation
+ hidl_vec<int32_t> values;
+ values.resize(1);
+ _hidl_cb(EvsResult::INVALID_ARG, values);
+ return {};
+}
+
+
+Return<void> EvsEmulatedCamera::getIntParameter(CameraParam /*id*/,
+ getIntParameter_cb _hidl_cb) {
+ // TODO(b/162946784): Implement this operation
+ hidl_vec<int32_t> values;
+ values.resize(1);
+ _hidl_cb(EvsResult::INVALID_ARG, values);
+ return {};
+}
+
+
+Return<EvsResult> EvsEmulatedCamera::setExtendedInfo_1_1(uint32_t opaqueIdentifier,
+ const hidl_vec<uint8_t>& opaqueValue) {
+ mExtInfo.insert_or_assign(opaqueIdentifier, opaqueValue);
+ return EvsResult::OK;
+}
+
+
+Return<void> EvsEmulatedCamera::getExtendedInfo_1_1(uint32_t opaqueIdentifier,
+ getExtendedInfo_1_1_cb _hidl_cb) {
+ const auto it = mExtInfo.find(opaqueIdentifier);
+ hidl_vec<uint8_t> value;
+ auto status = EvsResult::OK;
+ if (it == mExtInfo.end()) {
+ status = EvsResult::INVALID_ARG;
+ } else {
+ value = mExtInfo[opaqueIdentifier];
+ }
+
+ _hidl_cb(status, value);
+ return {};
+}
+
+
+Return<void> EvsEmulatedCamera::importExternalBuffers(const hidl_vec<BufferDesc_1_1>& buffers,
+ importExternalBuffers_cb _hidl_cb) {
+ LOG(DEBUG) << __FUNCTION__;
+
+ // If we've been displaced by another owner of the camera, then we can't do anything else
+ if (!mVideo->isOpen()) {
+ LOG(WARNING) << "Ignoring a request add external buffers "
+ << "when camera has been lost.";
+ _hidl_cb(EvsResult::UNDERLYING_SERVICE_ERROR, mFramesAllowed);
+ return {};
+ }
+
+ auto numBuffersToAdd = buffers.size();
+ if (numBuffersToAdd < 1) {
+ LOG(DEBUG) << "No buffers to add.";
+ _hidl_cb(EvsResult::OK, mFramesAllowed);
+ return {};
+ }
+
+ {
+ std::scoped_lock<std::mutex> lock(mAccessLock);
+
+ if (numBuffersToAdd > (MAX_BUFFERS_IN_FLIGHT - mFramesAllowed)) {
+ numBuffersToAdd -= (MAX_BUFFERS_IN_FLIGHT - mFramesAllowed);
+ LOG(WARNING) << "Exceed the limit on number of buffers. "
+ << numBuffersToAdd << " buffers will be added only.";
+ }
+
+ GraphicBufferMapper& mapper = GraphicBufferMapper::get();
+ const auto before = mFramesAllowed;
+ for (auto i = 0; i < numBuffersToAdd; ++i) {
+ auto& b = buffers[i];
+ const AHardwareBuffer_Desc* pDesc =
+ reinterpret_cast<const AHardwareBuffer_Desc *>(&b.buffer.description);
+
+ // Import a buffer to add
+ buffer_handle_t memHandle = nullptr;
+ status_t result = mapper.importBuffer(b.buffer.nativeHandle,
+ pDesc->width,
+ pDesc->height,
+ pDesc->layers,
+ pDesc->format,
+ pDesc->usage,
+ pDesc->stride,
+ &memHandle);
+ if (result != android::NO_ERROR || !memHandle) {
+ LOG(WARNING) << "Failed to import a buffer " << b.bufferId;
+ continue;
+ }
+
+ auto stored = false;
+ for (auto&& rec : mBuffers) {
+ if (rec.handle == nullptr) {
+ // Use this existing entry
+ rec.handle = memHandle;
+ rec.inUse = false;
+
+ stored = true;
+ break;
+ }
+ }
+
+ if (!stored) {
+ // Add a BufferRecord wrapping this handle to our set of available buffers
+ mBuffers.emplace_back(memHandle);
+ }
+
+ ++mFramesAllowed;
+ }
+
+ _hidl_cb(EvsResult::OK, mFramesAllowed - before);
+ return {};
+ }
+}
+
+
+EvsResult EvsEmulatedCamera::doneWithFrame_impl(const uint32_t bufferId,
+ const buffer_handle_t memHandle) {
+ std::scoped_lock <std::mutex> lock(mAccessLock);
+
+ // If we've been displaced by another owner of the camera, then we can't do anything else
+ if (!mVideo->isOpen()) {
+ LOG(WARNING) << "Ignoring doneWithFrame call when camera has been lost.";
+ } else {
+ if (memHandle == nullptr) {
+ LOG(ERROR) << "Ignoring doneWithFrame called with null handle";
+ } else if (bufferId >= mBuffers.size()) {
+ LOG(ERROR) << "Ignoring doneWithFrame called with invalid bufferId " << bufferId
+ << " (max is " << mBuffers.size() - 1 << ")";
+ } else if (!mBuffers[bufferId].inUse) {
+ LOG(ERROR) << "Ignoring doneWithFrame called on frame " << bufferId
+ << " which is already free";
+ } else {
+ // Mark the frame as available
+ mBuffers[bufferId].inUse = false;
+ --mFramesInUse;
+
+ // If this frame's index is high in the array, try to move it down
+ // to improve locality after mFramesAllowed has been reduced.
+ if (bufferId >= mFramesAllowed) {
+ // Find an empty slot lower in the array (which should always exist in this case)
+ for (auto&& rec : mBuffers) {
+ if (rec.handle == nullptr) {
+ rec.handle = mBuffers[bufferId].handle;
+ mBuffers[bufferId].handle = nullptr;
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ return EvsResult::OK;
+}
+
+
+bool EvsEmulatedCamera::setAvailableFrames_Locked(unsigned bufferCount) {
+ if (bufferCount < 1) {
+ LOG(ERROR) << "Rejecting a buffer request to set buffer count to zero";
+ return false;
+ }
+
+ if (bufferCount > MAX_BUFFERS_IN_FLIGHT) {
+ LOG(ERROR) << "Rejecting a buffer request in excess of internal limit";
+ return false;
+ }
+
+ // Is an increase required?
+ if (mFramesAllowed < bufferCount) {
+ // An increase is required
+ unsigned needed = bufferCount - mFramesAllowed;
+ LOG(INFO) << "Allocating " << needed << " buffers for camera frames";
+
+ unsigned added = increaseAvailableFrames_Locked(needed);
+ if (added != needed) {
+ // If we didn't add all the frames we needed, then roll back to the previous state
+ LOG(ERROR) << "Rolling back to previous frame queue size";
+ decreaseAvailableFrames_Locked(added);
+ return false;
+ }
+ } else if (mFramesAllowed > bufferCount) {
+ // A decrease is required
+ unsigned framesToRelease = mFramesAllowed - bufferCount;
+ LOG(INFO) << "Returning " << framesToRelease << " camera frame buffers";
+
+ unsigned released = decreaseAvailableFrames_Locked(framesToRelease);
+ if (released != framesToRelease) {
+ // This shouldn't happen with a properly behaving client because the client
+ // should only make this call after returning sufficient outstanding buffers
+ // to allow a clean resize.
+ LOG(ERROR) << "Buffer queue shrink failed -- too many buffers currently in use?";
+ }
+ }
+
+ return true;
+}
+
+
+unsigned EvsEmulatedCamera::increaseAvailableFrames_Locked(unsigned numToAdd) {
+ // Acquire the graphics buffer allocator
+ GraphicBufferAllocator &alloc(GraphicBufferAllocator::get());
+
+ unsigned added = 0;
+
+ while (added < numToAdd) {
+ unsigned pixelsPerLine;
+ buffer_handle_t memHandle = nullptr;
+ status_t result = alloc.allocate(mCaptureDeviceDesc.width, mCaptureDeviceDesc.height,
+ mFormat, 1 /* layers */, mUsage,
+ &memHandle, &pixelsPerLine, 0, "EvsEmulatedCamera");
+ if (result != NO_ERROR) {
+ LOG(ERROR) << "Error " << result << " allocating "
+ << mCaptureDeviceDesc.width << " x " << mCaptureDeviceDesc.height
+ << " graphics buffer";
+ break;
+ }
+
+ if (!memHandle) {
+ LOG(ERROR) << "We didn't get a buffer handle back from the allocator";
+ break;
+ }
+
+ if (mStride) {
+ if (mStride != pixelsPerLine) {
+ LOG(ERROR) << "We did not expect to get buffers with different strides!";
+ }
+ } else {
+ // Gralloc defines stride in terms of pixels per line
+ mStride = pixelsPerLine;
+ }
+
+ // Find a place to store the new buffer
+ bool stored = false;
+ for (auto&& rec : mBuffers) {
+ if (rec.handle == nullptr) {
+ // Use this existing entry
+ rec.handle = memHandle;
+ rec.inUse = false;
+ stored = true;
+ break;
+ }
+ }
+
+ if (!stored) {
+ // Add a BufferRecord wrapping this handle to our set of available buffers
+ mBuffers.emplace_back(memHandle);
+ }
+
+ mFramesAllowed++;
+ added++;
+ }
+
+ return added;
+}
+
+
+unsigned EvsEmulatedCamera::decreaseAvailableFrames_Locked(unsigned numToRemove) {
+ // Acquire the graphics buffer allocator
+ GraphicBufferAllocator &alloc(GraphicBufferAllocator::get());
+
+ unsigned removed = 0;
+
+ for (auto&& rec : mBuffers) {
+ // Is this record not in use, but holding a buffer that we can free?
+ if ((rec.inUse == false) && (rec.handle != nullptr)) {
+ // Release buffer and update the record so we can recognize it as "empty"
+ alloc.free(rec.handle);
+ rec.handle = nullptr;
+
+ mFramesAllowed--;
+ removed++;
+
+ if (removed == numToRemove) {
+ break;
+ }
+ }
+ }
+
+ return removed;
+}
+
+
+// This is the async callback from the video camera that tells us a frame is ready
+void EvsEmulatedCamera::forwardFrame(imageBufferDesc* pBufferInfo, void* pData) {
+ bool readyForFrame = false;
+ size_t idx = 0;
+
+ // Lock scope for updating shared state
+ {
+ std::scoped_lock<std::mutex> lock(mAccessLock);
+
+ // Are we allowed to issue another buffer?
+ if (mFramesInUse >= mFramesAllowed) {
+ // Can't do anything right now -- skip this frame
+ LOG(WARNING) << "Skipped a frame because too many are in flight";
+ } else {
+ // Identify an available buffer to fill
+ for (idx = 0; idx < mBuffers.size(); idx++) {
+ if (!mBuffers[idx].inUse) {
+ if (mBuffers[idx].handle != nullptr) {
+ // Found an available record, so stop looking
+ break;
+ }
+ }
+ }
+
+ if (idx >= mBuffers.size()) {
+ // This shouldn't happen since we already checked mFramesInUse vs mFramesAllowed
+ LOG(ERROR) << "Failed to find an available buffer slot";
+ } else {
+ // We're going to make the frame busy
+ mBuffers[idx].inUse = true;
+ readyForFrame = true;
+ ++mFramesInUse;
+ }
+ }
+ }
+
+ if (!readyForFrame) {
+ // We need to return the video buffer so it can capture a new frame
+ mVideo->markFrameConsumed();
+ } else {
+ // Assemble the buffer description we'll transmit below
+ BufferDesc_1_1 bufDesc_1_1 = {};
+ AHardwareBuffer_Desc* pDesc =
+ reinterpret_cast<AHardwareBuffer_Desc *>(&bufDesc_1_1.buffer.description);
+
+ pDesc->width = mCaptureDeviceDesc.width;
+ pDesc->height = mCaptureDeviceDesc.height;
+ pDesc->layers = 1;
+ pDesc->format = mFormat;
+ pDesc->usage = mUsage;
+ pDesc->stride = mStride;
+ bufDesc_1_1.buffer.nativeHandle = mBuffers[idx].handle;
+ bufDesc_1_1.bufferId = idx;
+ bufDesc_1_1.deviceId = mDescription.v1.cameraId;
+ // timestamp in microseconds.
+ bufDesc_1_1.timestamp = systemTime(SYSTEM_TIME_MONOTONIC);
+
+ // Lock our output buffer for writing
+ void *targetPixels = nullptr;
+ GraphicBufferMapper &mapper = GraphicBufferMapper::get();
+ status_t result =
+ mapper.lock(bufDesc_1_1.buffer.nativeHandle,
+ GRALLOC_USAGE_SW_WRITE_OFTEN | GRALLOC_USAGE_SW_READ_NEVER,
+ android::Rect(pDesc->width, pDesc->height),
+ (void **)&targetPixels);
+
+ // If we failed to lock the pixel buffer, we're about to crash, but log it first
+ if (!targetPixels) {
+ LOG(ERROR) << "Camera failed to gain access to image buffer for writing - "
+ << " status: " << statusToString(result)
+ << " , error: " << strerror(errno);
+ }
+
+ // Transfer the video image into the output buffer, making any needed
+ // format conversion along the way
+ switch (pBufferInfo->info.format) {
+ case V4L2_PIX_FMT_YUYV:
+ fillRGBAFromYUYV(bufDesc_1_1,
+ reinterpret_cast<uint8_t*>(targetPixels),
+ pData,
+ mVideo->getStride(),
+ mVideo->getHeight());
+ break;
+
+ case V4L2_PIX_FMT_XBGR32:
+ [[fallthrough]];
+ case V4L2_PIX_FMT_ABGR32:
+ fillBufferCopy(bufDesc_1_1,
+ reinterpret_cast<uint8_t*>(targetPixels),
+ pData,
+ mVideo->getStride(),
+ mVideo->getHeight());
+ break;
+
+ default:
+ LOG(ERROR) << "Source data is in unsupported format";
+ break;
+ }
+
+ // Unlock the output buffer
+ mapper.unlock(bufDesc_1_1.buffer.nativeHandle);
+
+ // Give the video frame back to the underlying device for reuse
+ // Note that we do this before making the client callback to give the
+ // underlying camera more time to capture the next frame
+ mVideo->markFrameConsumed();
+
+ // Issue the (asynchronous) callback to the client -- can't be holding
+ // the lock
+ bool flag = false;
+ {
+ hidl_vec<BufferDesc_1_1> frames;
+ frames.resize(1);
+ frames[0] = bufDesc_1_1;
+ auto result = mStream->deliverFrame_1_1(frames);
+ flag = result.isOk();
+ }
+
+ if (flag) {
+ LOG(DEBUG) << "Delivered " << bufDesc_1_1.buffer.nativeHandle.getNativeHandle()
+ << " as id " << bufDesc_1_1.bufferId;
+ } else {
+ // This can happen if the client dies and is likely unrecoverable.
+ // To avoid consuming resources generating failing calls, we stop sending
+ // frames. Note, however, that the stream remains in the "STREAMING" state
+ // until cleaned up on the main thread.
+ LOG(ERROR) << "Frame delivery call failed in the transport layer.";
+
+ // Since we didn't actually deliver it, mark the frame as available
+ std::scoped_lock<std::mutex> lock(mAccessLock);
+ mBuffers[idx].inUse = false;
+
+ --mFramesInUse;
+ }
+ }
+}
+
+
+sp<EvsEmulatedCamera> EvsEmulatedCamera::Create(const char *deviceName,
+ const EmulatedCameraDesc& desc) {
+ LOG(INFO) << "Create " << deviceName;
+ sp<EvsEmulatedCamera> pCamera = new EvsEmulatedCamera(deviceName, desc);
+ if (pCamera->openDevice()) {
+ return pCamera;
+ } else {
+ LOG(ERROR) << "Failed to open a video device.";
+ return nullptr;
+ }
+}
+
+
+} // namespace implementation
+} // namespace V1_1
+} // namespace evs
+} // namespace automotive
+} // namespace android
diff --git a/evs/sampleDriver/EvsV4lCamera.h b/cpp/evs/manager/1.1/emul/EvsEmulatedCamera.h
similarity index 69%
copy from evs/sampleDriver/EvsV4lCamera.h
copy to cpp/evs/manager/1.1/emul/EvsEmulatedCamera.h
index 90cde57..ea233cd 100644
--- a/evs/sampleDriver/EvsV4lCamera.h
+++ b/cpp/evs/manager/1.1/emul/EvsEmulatedCamera.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2016 The Android Open Source Project
+ * Copyright 2020 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.
@@ -14,8 +14,13 @@
* limitations under the License.
*/
-#ifndef ANDROID_HARDWARE_AUTOMOTIVE_EVS_V1_1_EVSV4LCAMERA_H
-#define ANDROID_HARDWARE_AUTOMOTIVE_EVS_V1_1_EVSV4LCAMERA_H
+#ifndef ANDROID_HARDWARE_AUTOMOTIVE_EVS_V1_1_EVSEMULATEDCAMERA_H
+#define ANDROID_HARDWARE_AUTOMOTIVE_EVS_V1_1_EVSEMULATEDCAMERA_H
+
+#include "VideoCapture.h"
+
+#include <functional>
+#include <unordered_map>
#include <android/hardware/automotive/evs/1.1/types.h>
#include <android/hardware/automotive/evs/1.1/IEvsCamera.h>
@@ -24,37 +29,39 @@
#include <android/hardware/camera/device/3.2/ICameraDevice.h>
#include <ui/GraphicBuffer.h>
-#include <functional>
-#include <thread>
-#include <set>
-
-#include "VideoCapture.h"
-#include "ConfigManager.h"
-
using ::android::hardware::hidl_string;
using ::android::hardware::camera::device::V3_2::Stream;
using ::android::hardware::automotive::evs::V1_0::EvsResult;
-using ::android::hardware::automotive::evs::V1_0::CameraDesc;
+using ::android::hardware::automotive::evs::V1_1::CameraDesc;
+
using IEvsDisplay_1_0 = ::android::hardware::automotive::evs::V1_0::IEvsDisplay;
using IEvsDisplay_1_1 = ::android::hardware::automotive::evs::V1_1::IEvsDisplay;
using BufferDesc_1_0 = ::android::hardware::automotive::evs::V1_0::BufferDesc;
using BufferDesc_1_1 = ::android::hardware::automotive::evs::V1_1::BufferDesc;
+using IEvsCamera_1_1 = ::android::hardware::automotive::evs::V1_1::IEvsCamera;
using IEvsCameraStream_1_0 = ::android::hardware::automotive::evs::V1_0::IEvsCameraStream;
using IEvsCameraStream_1_1 = ::android::hardware::automotive::evs::V1_1::IEvsCameraStream;
+using ::android::hardware::Return;
+using ::android::hardware::hidl_vec;
+using namespace ::android::hardware::automotive::evs::V1_1;
+
namespace android {
-namespace hardware {
namespace automotive {
namespace evs {
namespace V1_1 {
namespace implementation {
-
-// From EvsEnumerator.h
-class EvsEnumerator;
+struct EmulatedCameraDesc {
+ int width; // Camera output width in pixels
+ int height; // Camera output height in pixels
+ std::string path; // Path to the directory where source files are stored
+ std::chrono::nanoseconds interval; // Interval between two consecutive frames; this is
+ // a reciprocal of the framerate
+};
-class EvsV4lCamera : public IEvsCamera {
+class EvsEmulatedCamera : public IEvsCamera_1_1 {
public:
// Methods from ::android::hardware::automotive::evs::V1_0::IEvsCamera follow.
Return<void> getCameraInfo(getCameraInfo_cb _hidl_cb) override;
@@ -89,40 +96,39 @@
Return<void> importExternalBuffers(const hidl_vec<BufferDesc_1_1>& buffers,
importExternalBuffers_cb _hidl_cb) override;
- static sp<EvsV4lCamera> Create(const char *deviceName);
- static sp<EvsV4lCamera> Create(const char *deviceName,
- unique_ptr<ConfigManager::CameraInfo> &camInfo,
- const Stream *streamCfg = nullptr);
- EvsV4lCamera(const EvsV4lCamera&) = delete;
- EvsV4lCamera& operator=(const EvsV4lCamera&) = delete;
+ static sp<EvsEmulatedCamera> Create(const char *deviceName,
+ const EmulatedCameraDesc& desc);
+ EvsEmulatedCamera(const EvsEmulatedCamera&) = delete;
+ EvsEmulatedCamera& operator=(const EvsEmulatedCamera&) = delete;
- virtual ~EvsV4lCamera() override;
+ virtual ~EvsEmulatedCamera() override;
void shutdown();
const CameraDesc& getDesc() { return mDescription; };
+ bool openDevice();
+
private:
// Constructors
- EvsV4lCamera(const char *deviceName,
- unique_ptr<ConfigManager::CameraInfo> &camInfo);
+ EvsEmulatedCamera(const char *deviceName,
+ const EmulatedCameraDesc& desc);
// These three functions are expected to be called while mAccessLock is held
bool setAvailableFrames_Locked(unsigned bufferCount);
unsigned increaseAvailableFrames_Locked(unsigned numToAdd);
unsigned decreaseAvailableFrames_Locked(unsigned numToRemove);
- void forwardFrame(imageBuffer* tgt, void* data);
- inline bool convertToV4l2CID(CameraParam id, uint32_t& v4l2cid);
+ void forwardFrame(imageBufferDesc* tgt, void* data);
- sp <IEvsCameraStream_1_0> mStream = nullptr; // The callback used to deliver each frame
- sp <IEvsCameraStream_1_1> mStream_1_1 = nullptr; // The callback used to deliver each frame
+ sp<IEvsCameraStream_1_1> mStream = nullptr; // The callback used to deliver each frame
- VideoCapture mVideo; // Interface to the v4l device
- CameraDesc mDescription = {}; // The properties of this camera
+ sp<VideoCapture> mVideo; // Virtual video device
+ CameraDesc mDescription; // The properties of this camera
uint32_t mFormat = 0; // Values from android_pixel_format_t
uint32_t mUsage = 0; // Values from from Gralloc.h
- uint32_t mStride = 0; // Pixels per row (may be greater than image width)
+ uint32_t mStride = 0; // Number of bytes from one row of pixels in memory
+ // to the next
struct BufferRecord {
buffer_handle_t handle;
@@ -131,15 +137,9 @@
explicit BufferRecord(buffer_handle_t h) : handle(h), inUse(false) {};
};
- std::vector <BufferRecord> mBuffers; // Graphics buffers to transfer images
- unsigned mFramesAllowed; // How many buffers are we currently using
- unsigned mFramesInUse; // How many buffers are currently outstanding
-
- std::set<uint32_t> mCameraControls; // Available camera controls
-
- // Which format specific function we need to use to move camera imagery into our output buffers
- void(*mFillBufferFromVideo)(const BufferDesc& tgtBuff, uint8_t* tgt,
- void* imgData, unsigned imgStride);
+ std::vector <BufferRecord> mBuffers; // Graphics buffers to transfer images
+ unsigned mFramesAllowed; // How many buffers are we currently using
+ unsigned mFramesInUse; // How many buffers are currently outstanding
EvsResult doneWithFrame_impl(const uint32_t id, const buffer_handle_t handle);
@@ -148,18 +148,17 @@
// Note that the service interface remains single threaded (ie: not reentrant)
std::mutex mAccessLock;
- // Static camera module information
- unique_ptr<ConfigManager::CameraInfo> &mCameraInfo;
-
// Extended information
std::unordered_map<uint32_t, std::vector<uint8_t>> mExtInfo;
+
+ // Emulated device description
+ EmulatedCameraDesc mCaptureDeviceDesc;
};
} // namespace implementation
} // namespace V1_1
} // namespace evs
} // namespace automotive
-} // namespace hardware
} // namespace android
-#endif // ANDROID_HARDWARE_AUTOMOTIVE_EVS_V1_1_EVSV4LCAMERA_H
+#endif // ANDROID_HARDWARE_AUTOMOTIVE_EVS_V1_1_EVSEMULATEDCAMERA_H
diff --git a/cpp/evs/manager/1.1/emul/VideoCapture.cpp b/cpp/evs/manager/1.1/emul/VideoCapture.cpp
new file mode 100644
index 0000000..5720e3d
--- /dev/null
+++ b/cpp/evs/manager/1.1/emul/VideoCapture.cpp
@@ -0,0 +1,450 @@
+/*
+ * Copyright 2020 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.
+ */
+
+#include "emul/VideoCapture.h"
+
+#include <assert.h>
+#include <errno.h>
+#include <error.h>
+#include <fcntl.h>
+#include <memory.h>
+#include <processgroup/sched_policy.h>
+#include <pthread.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/ioctl.h>
+#include <sys/mman.h>
+#include <unistd.h>
+
+#include <fstream>
+#include <iomanip>
+
+#include <android-base/logging.h>
+#include <png.h>
+
+using namespace std;
+
+namespace {
+ const char* kPngFileExtension = ".png";
+ const char* kDumpFileExtension = ".bin";
+
+ bool validatePng(std::ifstream& source) {
+ const int kSigSize = 8;
+ png_byte header[kSigSize] = {0};
+ source.read((char*)header, kSigSize);
+
+ return source.good() &&
+ (png_sig_cmp(header, 0, kSigSize) == 0);
+ }
+
+
+ void readPngDataFromStream(png_structp pngPtr,
+ png_bytep data,
+ png_size_t length) {
+ png_voidp p = png_get_io_ptr(pngPtr);
+ ((std::ifstream*)p)->read((char*)data, length);
+ }
+
+
+ char* fillBufferFromPng(const string& filename,
+ imageMetadata& info) {
+ // Open a PNG file
+ std::ifstream source(filename, ios::in | ios::binary);
+ if (!source.is_open()) {
+ LOG(ERROR) << "Failed to open " << filename;
+ return nullptr;
+ }
+
+ // Validate an input PNG file
+ if (!validatePng(source)) {
+ LOG(ERROR) << filename << " is not a valid PNG file";
+ source.close();
+ return nullptr;
+ }
+
+ // Prepare a control structure
+ png_structp pngPtr = png_create_read_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
+ if (!pngPtr) {
+ LOG(ERROR) << "Failed to create a control structure";
+ source.close();
+ return nullptr;
+ }
+
+ // Set up an image info
+ png_infop infoPtr = png_create_info_struct(pngPtr);
+ if (!infoPtr) {
+ LOG(ERROR) << " Failed to initialize a png_info";
+ png_destroy_read_struct(&pngPtr, nullptr, nullptr);
+ source.close();
+ return nullptr;
+ }
+
+ // Set up an error handler
+ if (setjmp(png_jmpbuf(pngPtr))) {
+ png_destroy_read_struct(&pngPtr, &infoPtr, nullptr);
+ source.close();
+ return nullptr;
+ }
+
+ // Set up PNG reader and fetch the remaining header bytes
+ png_set_read_fn(pngPtr, (png_voidp)&source, readPngDataFromStream);
+ const int kSigSize = 8;
+ png_set_sig_bytes(pngPtr, kSigSize);
+ png_read_info(pngPtr, infoPtr);
+
+ // Get basic image information
+ png_uint_32 width = png_get_image_width(pngPtr, infoPtr);
+ png_uint_32 height = png_get_image_height(pngPtr, infoPtr);
+ png_uint_32 bitdepth = png_get_bit_depth(pngPtr, infoPtr);
+ png_uint_32 channels = png_get_channels(pngPtr, infoPtr);
+ png_uint_32 colorType = png_get_color_type(pngPtr, infoPtr);
+
+ // Record video device info
+ info.width = width;
+ info.height = height;
+ switch(colorType) {
+ case PNG_COLOR_TYPE_GRAY:
+ png_set_expand_gray_1_2_4_to_8(pngPtr);
+ bitdepth = 8;
+ info.format = V4L2_PIX_FMT_GREY;
+ break;
+
+ case PNG_COLOR_TYPE_RGB:
+ info.format = V4L2_PIX_FMT_XBGR32;
+ break;
+
+ case PNG_COLOR_TYPE_RGB_ALPHA:
+ info.format = V4L2_PIX_FMT_ABGR32;
+ break;
+
+ default:
+ LOG(INFO) << "Unsupported PNG color type: " << colorType;
+ return nullptr;
+ }
+
+ // If the image has a transparancy set, convert it to a full Alpha channel
+ if (png_get_valid(pngPtr, infoPtr, PNG_INFO_tRNS)) {
+ png_set_tRNS_to_alpha(pngPtr);
+ channels += 1;
+ info.format = V4L2_PIX_FMT_ABGR32;
+ }
+
+ // Refresh PNG info
+ png_read_update_info(pngPtr, infoPtr);
+
+ // Allocate a buffer to contain pixel data. This buffer will be managed
+ // by the caller.
+ const int stride = png_get_rowbytes(pngPtr, infoPtr);
+ info.stride = stride;
+ LOG(DEBUG) << "width = " << width
+ << ", height = " << height
+ << ", bitdepth = " << bitdepth
+ << ", channels = " << channels
+ << ", colorType = " << colorType
+ << ", stride = " << stride;
+
+ char* buffer = new char[info.stride * height];
+ png_bytep* rowPtrs = new png_bytep[height];
+ for (int r = 0; r < height; ++r) {
+ rowPtrs[r] = reinterpret_cast<unsigned char*>(buffer) + r * stride;
+ }
+
+ // Read the image
+ png_read_image(pngPtr, rowPtrs);
+ png_read_end(pngPtr, nullptr);
+
+ // Clean up
+ png_destroy_read_struct(&pngPtr, &infoPtr, nullptr);
+ delete[] rowPtrs;
+ source.close();
+
+ return buffer;
+ }
+} // namespace
+
+
+namespace android {
+namespace automotive {
+namespace evs {
+namespace V1_1 {
+namespace implementation {
+
+VideoCapture::~VideoCapture() {
+ // Stop active stream
+ stopStream();
+
+ // Close the device
+ close();
+}
+
+
+bool VideoCapture::open(const std::string& path,
+ const std::chrono::nanoseconds interval) {
+ // Report device properties
+ LOG(INFO) << "Open a virtual video stream with data from " << path;
+
+ // Store the source location
+ if (!filesystem::exists(path) || !filesystem::is_directory(path)) {
+ LOG(INFO) << path << " does not exist or is not a directory.";
+ return false;
+ }
+
+ // Sets a directory iterator
+ LOG(INFO) << "directory_iterator is set to " << path;
+ mSrcIter = filesystem::directory_iterator(path);
+ mSourceDir = path;
+
+ // Set a frame rate
+ mDesiredFrameInterval = interval;
+
+ // Make sure we're initialized to the STOPPED state
+ mRunMode = STOPPED;
+ mFrameReady = false;
+ mVideoReady = true;
+
+ // Ready to go!
+ return true;
+}
+
+
+void VideoCapture::close() {
+ LOG(DEBUG) << __FUNCTION__;
+
+ // Stream must be stopped first!
+ assert(mRunMode == STOPPED);
+
+ // Tell this is now closed
+ mVideoReady = false;
+
+ // Free allocated resources
+ delete[] mPixelBuffer;
+}
+
+
+bool VideoCapture::startStream(
+ std::function<void(VideoCapture*, imageBufferDesc*, void*)> callback) {
+ // Set the state of our background thread
+ int prevRunMode = mRunMode.fetch_or(RUN);
+ if (prevRunMode & RUN) {
+ // The background thread is already running, so we can't start a new stream
+ LOG(ERROR) << "Already in RUN state, so we can't start a new streaming thread";
+ return false;
+ }
+
+ // Remembers who to tell about new frames as they arrive
+ mCallback = callback;
+
+ // Fires up a thread to generate and dispatch the video frames
+ mCaptureThread = std::thread([&](){
+ if (mCurrentStreamEvent != StreamEvent::INIT) {
+ LOG(ERROR) << "Not in the right state to start a video stream. Current state is "
+ << mCurrentStreamEvent;
+ return;
+ }
+
+ // We'll periodically send a new frame
+ mCurrentStreamEvent = StreamEvent::PERIODIC;
+
+ // Sets a background priority
+ if (set_sched_policy(0, SP_BACKGROUND) != 0) {
+ PLOG(WARNING) << "Failed to set background scheduling priority";
+ }
+
+ // Sets a looper for the communication
+ if (android::Looper::getForThread() != nullptr) {
+ LOG(DEBUG) << "Use existing looper thread";
+ }
+
+ mLooper = android::Looper::prepare(/*opts=*/0);
+ if (mLooper == nullptr) {
+ LOG(ERROR) << "Failed to initialize the looper. Exiting the thread.";
+ return;
+ }
+
+ // Requests to start generating frames periodically
+ mLooper->sendMessage(this, StreamEvent::PERIODIC);
+
+ // Polling the messages until the stream stops
+ while (mRunMode == RUN) {
+ mLooper->pollAll(/*timeoutMillis=*/-1);
+ }
+
+ LOG(INFO) << "Capture thread is exiting!!!";
+ });
+
+ LOG(DEBUG) << "Stream started.";
+ return true;
+}
+
+
+void VideoCapture::stopStream() {
+ // Tell the background thread to stop
+ int prevRunMode = mRunMode.fetch_or(STOPPING);
+ if (prevRunMode == STOPPED) {
+ // The background thread wasn't running, so set the flag back to STOPPED
+ mRunMode = STOPPED;
+ } else if (prevRunMode & STOPPING) {
+ LOG(ERROR) << "stopStream called while stream is already stopping. "
+ << "Reentrancy is not supported!";
+ return;
+ } else {
+ // Block until the background thread is stopped
+ if (mCaptureThread.joinable()) {
+ // Removes all pending messages and awake the looper
+ mLooper->removeMessages(this, StreamEvent::PERIODIC);
+ mLooper->wake();
+ mCaptureThread.join();
+ } else {
+ LOG(ERROR) << "Capture thread is not joinable";
+ }
+
+ mRunMode = STOPPED;
+ LOG(DEBUG) << "Capture thread stopped.";
+ }
+
+ // Drop our reference to the frame delivery callback interface
+ mCallback = nullptr;
+}
+
+
+void VideoCapture::markFrameReady() {
+ mFrameReady = true;
+}
+
+
+bool VideoCapture::returnFrame() {
+ // We're using a single buffer synchronousely so just need to set
+ // mFrameReady as false.
+ mFrameReady = false;
+
+ return true;
+}
+
+
+// This runs on a background thread to receive and dispatch video frames
+void VideoCapture::collectFrames() {
+ const filesystem::directory_iterator end_iter;
+ imageMetadata header = {};
+ static uint64_t sequence = 0; // counting frames
+
+ while (mPixelBuffer == nullptr && mSrcIter != end_iter) {
+ LOG(INFO) << "Synthesizing a frame from " << mSrcIter->path();
+ auto ext = mSrcIter->path().extension();
+ if (ext == kPngFileExtension) {
+ // Read PNG image; a buffer will be allocated inside
+ mPixelBuffer =
+ fillBufferFromPng(mSrcIter->path(), header);
+
+ // Update frame info
+ mPixelBufferSize = header.stride * header.height;
+ } else if (ext == kDumpFileExtension) {
+ // Read files dumped by the reference EVS HAL implementation
+ std::ifstream fin(mSrcIter->path(), ios::in | ios::binary);
+ if (fin.is_open()) {
+ // Read a header
+ fin.read((char*)&header, sizeof(header));
+ const size_t length = header.stride * header.height;
+
+ // Allocate memory for pixel data
+ mPixelBuffer = new char[length];
+ mPixelBufferSize = length;
+
+ // Read pixels
+ fin.read(mPixelBuffer, length);
+ if (fin.gcount() != length) {
+ LOG(WARNING) << mSrcIter->path() << " contains less than expected.";
+ }
+ fin.close();
+ } else {
+ PLOG(ERROR) << "Failed to open " << mSrcIter->path();
+ }
+ } else {
+ LOG(DEBUG) << "Unsupported file extension. Ignores "
+ << mSrcIter->path().filename();
+ }
+
+ // Moves to next file
+ ++mSrcIter;
+ }
+
+ // Fill the buffer metadata
+ mBufferInfo.info = header;
+ mBufferInfo.sequence = sequence++;
+
+ int64_t now = nanoseconds_to_milliseconds(systemTime(SYSTEM_TIME_MONOTONIC));
+ mBufferInfo.timestamp.tv_sec = (time_t)(now / 1000LL);
+ mBufferInfo.timestamp.tv_usec = (suseconds_t)((now % 1000LL) * 1000LL);
+
+ if (mCallback != nullptr) {
+ mCallback(this, &mBufferInfo, mPixelBuffer);
+ }
+
+ // Delete a consumed pixel buffer
+ delete[] mPixelBuffer;
+ mPixelBuffer = nullptr;
+ mPixelBufferSize = 0;
+
+ // If the last file is processed, reset the iterator to the first file.
+ if (mSrcIter == end_iter) {
+ LOG(DEBUG) << "Rewinds the iterator to the beginning.";
+ mSrcIter = filesystem::directory_iterator(mSourceDir);
+ }
+}
+
+
+int VideoCapture::setParameter(v4l2_control& /*control*/) {
+ // Not implemented yet.
+ return -ENOSYS;
+}
+
+
+int VideoCapture::getParameter(v4l2_control& /*control*/) {
+ // Not implemented yet.
+ return -ENOSYS;
+}
+
+
+void VideoCapture::handleMessage(const android::Message& message) {
+ const auto received = static_cast<StreamEvent>(message.what);
+ switch (received) {
+ case StreamEvent::PERIODIC: {
+ // Generates a new frame and send
+ collectFrames();
+
+ // Updates a timestamp and arms a message for next frame
+ mLastTimeFrameSent = systemTime(SYSTEM_TIME_MONOTONIC);
+ const auto next = mLastTimeFrameSent + mDesiredFrameInterval.count();
+ mLooper->sendMessageAtTime(next, this, received);
+ break;
+ }
+
+ case StreamEvent::STOP: {
+ // Stopping a frame generation
+ LOG(INFO) << "Stop generating frames";
+ break;
+ }
+
+ default:
+ LOG(WARNING) << "Unknown event is received: " << received;
+ break;
+ }
+}
+
+} // namespace implementation
+} // namespace V1_1
+} // namespace evs
+} // namespace automotive
+} // namespace android
diff --git a/cpp/evs/manager/1.1/emul/VideoCapture.h b/cpp/evs/manager/1.1/emul/VideoCapture.h
new file mode 100644
index 0000000..44967f2
--- /dev/null
+++ b/cpp/evs/manager/1.1/emul/VideoCapture.h
@@ -0,0 +1,150 @@
+/*
+ * Copyright 2020 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.
+ */
+#ifndef ANDROID_HARDWARE_AUTOMOTIVE_EVS_V1_1_EMULVIDEOCAPTURE_H
+#define ANDROID_HARDWARE_AUTOMOTIVE_EVS_V1_1_EMULVIDEOCAPTURE_H
+
+#include <atomic>
+#include <filesystem>
+#include <functional>
+#include <thread>
+
+#include <android-base/chrono_utils.h>
+#include <linux/videodev2.h>
+#include <utils/Looper.h>
+#include <utils/Mutex.h>
+#include <utils/Timers.h>
+
+namespace {
+
+ // Careful changing these -- we're using bit-wise ops to manipulate these
+ enum RunModes {
+ STOPPED = 0,
+ RUN = 1,
+ STOPPING = 2,
+ };
+
+ enum StreamEvent {
+ INIT = 0,
+ PERIODIC,
+ STOP,
+ TERMINATED,
+ };
+
+ struct imageMetadata {
+ uint32_t width; // Image width in pixels
+ uint32_t height; // Image height in pixels
+ uint32_t stride; // Number of bytes from one row in memory
+ uint32_t format; // Image format
+ };
+}
+
+
+typedef struct {
+ struct imageMetadata info;
+ uint32_t sequence; // Counting frames in sequence
+ struct timeval timestamp; // Tells when this frame is generated
+} imageBufferDesc;
+
+
+namespace android {
+namespace automotive {
+namespace evs {
+namespace V1_1 {
+namespace implementation {
+
+class VideoCapture : public MessageHandler {
+public:
+ explicit VideoCapture() {};
+ virtual ~VideoCapture();
+ bool open(const std::string& path,
+ const std::chrono::nanoseconds interval);
+ void close();
+
+ bool startStream(
+ std::function<void(VideoCapture*, imageBufferDesc*, void*)> callback = nullptr);
+ void stopStream();
+
+ // Valid only after open()
+ __u32 getWidth() { return mBufferInfo.info.width; }
+ __u32 getHeight() { return mBufferInfo.info.height; }
+ __u32 getStride() { return mBufferInfo.info.stride; }
+ __u32 getV4LFormat() { return mBufferInfo.info.format; }
+
+ // NULL until stream is started
+ void* getLatestData() { return mPixelBuffer; }
+ bool isFrameReady() { return mFrameReady; }
+ void markFrameConsumed() { returnFrame(); }
+ bool isOpen() { return mVideoReady; }
+
+ int setParameter(struct v4l2_control& control);
+ int getParameter(struct v4l2_control& control);
+
+private:
+ void collectFrames();
+ void markFrameReady();
+ bool returnFrame();
+
+ // Handles the message from the looper
+ void handleMessage(const android::Message& message) override;
+
+ // Looper to message the frame generator thread
+ android::sp<android::Looper> mLooper;
+
+ // Background thread to dispatch generated frames
+ std::thread mCaptureThread;
+
+ // Stream event to control the looper
+ StreamEvent mCurrentStreamEvent = StreamEvent::INIT;
+
+ // Directory where source files exist
+ std::filesystem::path mSourceDir;
+ std::filesystem::directory_iterator mSrcIter;
+
+ // Last time the frame was generated and sent
+ nsecs_t mLastTimeFrameSent;
+
+ // Desired interval to generate and send a frame
+ std::chrono::nanoseconds mDesiredFrameInterval = 1000ms;
+
+ // Source image descriptor
+ imageBufferDesc mBufferInfo = {};
+
+ // Buffer to store the source pixel data
+ char* mPixelBuffer = nullptr;
+
+ // Current pixel buffer size
+ size_t mPixelBufferSize = 0;
+
+ // Callback to tell about new frames
+ std::function<void(VideoCapture*, imageBufferDesc*, void*)> mCallback;
+
+ // Used to signal the frame loop (see RunModes below)
+ std::atomic<int> mRunMode;
+
+ // Set when a frame has been delivered
+ std::atomic<bool> mFrameReady;
+
+ // flag to tell whether it is ready to start a stream
+ bool mVideoReady = false;
+};
+
+} // namespace implementation
+} // namespace V1_1
+} // namespace evs
+} // namespace automotive
+} // namespace android
+
+#endif // ANDROID_HARDWARE_AUTOMOTIVE_EVS_V1_1_EMULVIDEOCAPTURE_
diff --git a/evs/manager/1.1/manifest_android.automotive.evs.manager@1.1.xml b/cpp/evs/manager/1.1/manifest_android.automotive.evs.manager@1.1.xml
similarity index 100%
rename from evs/manager/1.1/manifest_android.automotive.evs.manager@1.1.xml
rename to cpp/evs/manager/1.1/manifest_android.automotive.evs.manager@1.1.xml
diff --git a/evs/manager/1.1/service.cpp b/cpp/evs/manager/1.1/service.cpp
similarity index 100%
rename from evs/manager/1.1/service.cpp
rename to cpp/evs/manager/1.1/service.cpp
diff --git a/evs/manager/1.1/stats/CameraUsageStats.cpp b/cpp/evs/manager/1.1/stats/CameraUsageStats.cpp
similarity index 100%
rename from evs/manager/1.1/stats/CameraUsageStats.cpp
rename to cpp/evs/manager/1.1/stats/CameraUsageStats.cpp
diff --git a/evs/manager/1.1/stats/CameraUsageStats.h b/cpp/evs/manager/1.1/stats/CameraUsageStats.h
similarity index 100%
rename from evs/manager/1.1/stats/CameraUsageStats.h
rename to cpp/evs/manager/1.1/stats/CameraUsageStats.h
diff --git a/evs/manager/1.1/stats/LooperWrapper.cpp b/cpp/evs/manager/1.1/stats/LooperWrapper.cpp
similarity index 100%
rename from evs/manager/1.1/stats/LooperWrapper.cpp
rename to cpp/evs/manager/1.1/stats/LooperWrapper.cpp
diff --git a/evs/manager/1.1/stats/LooperWrapper.h b/cpp/evs/manager/1.1/stats/LooperWrapper.h
similarity index 100%
rename from evs/manager/1.1/stats/LooperWrapper.h
rename to cpp/evs/manager/1.1/stats/LooperWrapper.h
diff --git a/evs/manager/1.1/stats/StatsCollector.cpp b/cpp/evs/manager/1.1/stats/StatsCollector.cpp
similarity index 100%
rename from evs/manager/1.1/stats/StatsCollector.cpp
rename to cpp/evs/manager/1.1/stats/StatsCollector.cpp
diff --git a/evs/manager/1.1/stats/StatsCollector.h b/cpp/evs/manager/1.1/stats/StatsCollector.h
similarity index 100%
rename from evs/manager/1.1/stats/StatsCollector.h
rename to cpp/evs/manager/1.1/stats/StatsCollector.h
diff --git a/evs/manager/1.1/sync/unique_fd.cpp b/cpp/evs/manager/1.1/sync/unique_fd.cpp
similarity index 100%
rename from evs/manager/1.1/sync/unique_fd.cpp
rename to cpp/evs/manager/1.1/sync/unique_fd.cpp
diff --git a/evs/manager/1.1/sync/unique_fd.h b/cpp/evs/manager/1.1/sync/unique_fd.h
similarity index 100%
rename from evs/manager/1.1/sync/unique_fd.h
rename to cpp/evs/manager/1.1/sync/unique_fd.h
diff --git a/evs/manager/1.1/sync/unique_fence.cpp b/cpp/evs/manager/1.1/sync/unique_fence.cpp
similarity index 100%
rename from evs/manager/1.1/sync/unique_fence.cpp
rename to cpp/evs/manager/1.1/sync/unique_fence.cpp
diff --git a/evs/manager/1.1/sync/unique_fence.h b/cpp/evs/manager/1.1/sync/unique_fence.h
similarity index 100%
rename from evs/manager/1.1/sync/unique_fence.h
rename to cpp/evs/manager/1.1/sync/unique_fence.h
diff --git a/evs/manager/1.1/sync/unique_timeline.cpp b/cpp/evs/manager/1.1/sync/unique_timeline.cpp
similarity index 100%
rename from evs/manager/1.1/sync/unique_timeline.cpp
rename to cpp/evs/manager/1.1/sync/unique_timeline.cpp
diff --git a/evs/manager/1.1/sync/unique_timeline.h b/cpp/evs/manager/1.1/sync/unique_timeline.h
similarity index 100%
rename from evs/manager/1.1/sync/unique_timeline.h
rename to cpp/evs/manager/1.1/sync/unique_timeline.h
diff --git a/evs/manager/1.1/test/fuzzer/Android.bp b/cpp/evs/manager/1.1/test/fuzzer/Android.bp
similarity index 85%
rename from evs/manager/1.1/test/fuzzer/Android.bp
rename to cpp/evs/manager/1.1/test/fuzzer/Android.bp
index b2ca44c..02cac9d 100644
--- a/evs/manager/1.1/test/fuzzer/Android.bp
+++ b/cpp/evs/manager/1.1/test/fuzzer/Android.bp
@@ -14,13 +14,16 @@
cc_defaults {
name: "evs_fuzz_default",
+
+ defaults: ["android.automotive.evs.manager_defaults"],
+
static_libs: [
+ "libevsmanager_static",
"libgmock",
"libgtest",
],
shared_libs: [
- "android.automotive.evs.manager.fuzzlib",
"android.hardware.automotive.evs@1.0",
"android.hardware.automotive.evs@1.1",
"libbase",
@@ -39,9 +42,14 @@
"-Wno-unused-parameter",
],
- include_dirs: [
- "system/core/libsync",
- ],
+ fuzz_config: {
+ cc: [
+ "changyeon@google.com",
+ "guodonghu@google.com",
+ "smara@google.com",
+ "zhaomingyin@google.com",
+ ],
+ },
}
cc_fuzz {
diff --git a/evs/manager/1.1/test/fuzzer/Common.h b/cpp/evs/manager/1.1/test/fuzzer/Common.h
similarity index 100%
rename from evs/manager/1.1/test/fuzzer/Common.h
rename to cpp/evs/manager/1.1/test/fuzzer/Common.h
diff --git a/evs/manager/1.1/test/fuzzer/EnumeratorFuzzer.cpp b/cpp/evs/manager/1.1/test/fuzzer/EnumeratorFuzzer.cpp
similarity index 85%
rename from evs/manager/1.1/test/fuzzer/EnumeratorFuzzer.cpp
rename to cpp/evs/manager/1.1/test/fuzzer/EnumeratorFuzzer.cpp
index d0bfebf..389b7d8 100644
--- a/evs/manager/1.1/test/fuzzer/EnumeratorFuzzer.cpp
+++ b/cpp/evs/manager/1.1/test/fuzzer/EnumeratorFuzzer.cpp
@@ -62,8 +62,8 @@
static vector<sp<IEvsCamera_1_0>> sVirtualCameras;
static vector<sp<IEvsDisplay_1_0>> sDisplays;
-extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) {
- setenv("TREBLE_TESTING_OVERRIDE", "true", true);
+bool DoInitialization() {
+ android::hardware::details::setTrebleTestingOverride(true);
configureRpcThreadpool(2, false /* callerWillNotJoin */);
// Prepare for the HWEnumerator service
@@ -76,33 +76,34 @@
exit(2);
}
- // Inititialize the enumerator that we are going to test
- // TODO(b/162631113) if we place the initialization of enumerator inside
- // LLVMFuzzerTestOneInput, there will be issues in destruction.
- sEnumerator = new Enumerator();
- if (!sEnumerator->init(kMockHWEnumeratorName)) {
- std::cerr << "Failed to connect to hardware service"
- << "- quitting from LLVMFuzzerInitialize" << std::endl;
- exit(1);
- }
-
- return 0;
+ return true;
}
extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
FuzzedDataProvider fdp(data, size);
+ // Inititialize the enumerator that we are going to test
+ static bool initialized = DoInitialization();
+ sEnumerator = new Enumerator();
+ if (!initialized || !sEnumerator->init(kMockHWEnumeratorName)) {
+ std::cerr << "Failed to connect to hardware service"
+ << "- quitting from LLVMFuzzerInitialize" << std::endl;
+ exit(1);
+ }
+
while (fdp.remaining_bytes() > kMaxFuzzerConsumedBytes) {
switch (fdp.ConsumeIntegralInRange<uint32_t>(0, EVS_FUZZ_API_SUM)) {
case EVS_FUZZ_GET_CAMERA_LIST: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_CAMERA_LIST";
sEnumerator->getCameraList([](auto list){});
break;
}
case EVS_FUZZ_OPEN_CAMERA: {
+ LOG(DEBUG) << "EVS_FUZZ_OPEN_CAMERA";
uint64_t whichCam =
fdp.ConsumeIntegralInRange<uint64_t>(startMockHWCameraId,
endMockHWCameraId-1);
- hidl_string camStr = to_string(whichCam);
+ hidl_string camStr = std::to_string(whichCam);
sp<IEvsCamera_1_0> virtualCam = sEnumerator->openCamera(camStr);
if (virtualCam != nullptr) {
sVirtualCameras.emplace_back(virtualCam);
@@ -110,6 +111,7 @@
break;
}
case EVS_FUZZ_CLOSE_CAMERA: {
+ LOG(DEBUG) << "EVS_FUZZ_CLOSE_CAMERA";
if (!sVirtualCameras.empty()) {
sp<IEvsCamera_1_0> cam = sVirtualCameras.back();
sEnumerator->closeCamera(cam);
@@ -118,6 +120,7 @@
break;
}
case EVS_FUZZ_OPEN_DISPLAY: {
+ LOG(DEBUG) << "EVS_FUZZ_OPEN_DISPLAY";
sp<IEvsDisplay_1_0> display = sEnumerator->openDisplay();
if (display != nullptr) {
sDisplays.emplace_back(display);
@@ -125,6 +128,7 @@
break;
}
case EVS_FUZZ_CLOSE_DISPLAY: {
+ LOG(DEBUG) << "EVS_FUZZ_CLOSE_DISPLAY";
if (!sDisplays.empty()) {
sp<IEvsDisplay_1_0> display = sDisplays.back();
sEnumerator->closeDisplay(display);
@@ -133,18 +137,21 @@
break;
}
case EVS_FUZZ_GET_DISPLAY_STATE: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_DISPLAY_STATE";
sEnumerator->getDisplayState();
break;
}
case EVS_FUZZ_GET_CAMERA_LIST_1_1: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_CAMERA_LIST_1_1";
sEnumerator->getCameraList_1_1([](auto cams){});
break;
}
case EVS_FUZZ_OPEN_CAMERA_1_1: {
+ LOG(DEBUG) << "EVS_FUZZ_OPEN_CAMERA_1_1";
uint64_t whichCam =
fdp.ConsumeIntegralInRange<uint64_t>(startMockHWCameraId,
endMockHWCameraId-1);
- hidl_string camStr = to_string(whichCam);
+ hidl_string camStr = std::to_string(whichCam);
Stream streamCfg = {};
sp<IEvsCamera_1_1> virtualCam = sEnumerator->openCamera_1_1(camStr, streamCfg);
if (virtualCam != nullptr) {
@@ -153,14 +160,17 @@
break;
}
case EVS_FUZZ_IS_HARDWARE: {
+ LOG(DEBUG) << "EVS_FUZZ_IS_HARDWARE";
sEnumerator->isHardware();
break;
}
case EVS_FUZZ_GET_DISPLAY_LIST: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_DISPLAY_LIST";
sEnumerator->getDisplayIdList([](auto list){});
break;
}
case EVS_FUZZ_OPEN_DISPLAY_1_1: {
+ LOG(DEBUG) << "EVS_FUZZ_OPEN_DISPLAY_1_1";
uint64_t whichDisp =
fdp.ConsumeIntegralInRange<uint64_t>(startMockHWDisplayId,
endMockHWDisplayId-1);
@@ -173,15 +183,18 @@
break;
}
case EVS_FUZZ_GET_ULTRASONICS_ARRAY_LIST: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_ULTRASONICS_ARRAY_LIST";
sEnumerator->getUltrasonicsArrayList([](auto list) {});
break;
}
case EVS_FUZZ_OPEN_ULTRASONICS_ARRAY: {
+ LOG(DEBUG) << "EVS_FUZZ_OPEN_ULTRASONICS_ARRAY";
// TODO(b/162465548) replace this once implementation is ready
sEnumerator->openUltrasonicsArray("");
break;
}
case EVS_FUZZ_CLOSE_ULTRASONICS_ARRAY: {
+ LOG(DEBUG) << "EVS_FUZZ_CLOSE_ULTRASONICS_ARRAY";
// TODO(b/162465548) replace this once implementation is ready
sEnumerator->closeUltrasonicsArray(nullptr);
break;
@@ -191,6 +204,9 @@
break;
}
}
+
+ // Explicitly destroy the Enumerator
+ sEnumerator = nullptr;
return 0;
}
diff --git a/cpp/evs/manager/1.1/test/fuzzer/HalCameraFuzzer.cpp b/cpp/evs/manager/1.1/test/fuzzer/HalCameraFuzzer.cpp
new file mode 100644
index 0000000..a528ff7
--- /dev/null
+++ b/cpp/evs/manager/1.1/test/fuzzer/HalCameraFuzzer.cpp
@@ -0,0 +1,274 @@
+/*
+ * Copyright 2020 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.
+ */
+
+#include <fuzzer/FuzzedDataProvider.h>
+#include <sys/time.h>
+#include <iostream>
+#include "Common.h"
+#include "Enumerator.h"
+#include "HalCamera.h"
+#include "MockHWCamera.h"
+
+namespace android {
+namespace automotive {
+namespace evs {
+namespace V1_1 {
+namespace implementation {
+
+namespace {
+
+enum EvsFuzzFuncs {
+ EVS_FUZZ_MAKE_VIRTUAL_CAMERA = 0, // verify makeVirtualCamera
+ EVS_FUZZ_OWN_VIRTUAL_CAMERA, // verify ownVirtualCamera
+ EVS_FUZZ_DISOWN_VIRTUAL_CAMERA, // verify disownVirtualCamera
+ EVS_FUZZ_GET_CLIENT_COUNT, // verify getClientCount
+ EVS_FUZZ_GET_ID, // verify getId
+ EVS_FUZZ_GET_STREAM_CONFIG, // verify getStreamConfig
+ EVS_FUZZ_CHANGE_FRAMES_IN_FLIGHT, // verify changeFramesInFlight
+ EVS_FUZZ_CHANGE_FRAMES_IN_FLIGHT_1, // verify overloaded changeFramesInFlight
+ EVS_FUZZ_REQUEST_NEW_FRAME, // verify requestNewFrame
+ EVS_FUZZ_CLIENT_STREAM_STARTING, // verify clientStreamStarting
+ EVS_FUZZ_CLIENT_STREAM_ENDING, // verify clientStreamEnding
+ EVS_FUZZ_GET_STATS, // verify getStats
+ EVS_FUZZ_GET_STREAM_CONFIGURATION, // verify getStreamConfiguration
+ EVS_FUZZ_DELIVER_FRAME_1_1, // verify deliverFrame_1_1
+ EVS_FUZZ_BASE_ENUM // verify common functions
+};
+
+int64_t getCurrentTimeStamp() {
+ struct timeval tp;
+ gettimeofday(&tp, NULL);
+ int64_t ms = tp.tv_sec * 1000 + tp.tv_usec / 1000;
+ return ms;
+}
+
+const int kMaxFuzzerConsumedBytes = 12;
+
+extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
+ FuzzedDataProvider fdp(data, size);
+ sp<IEvsCamera_1_1> mockHWCamera = new MockHWCamera();
+ sp<HalCamera> halCamera = new HalCamera(mockHWCamera);
+ std::vector<sp<VirtualCamera>> virtualCameras;
+ std::vector<BufferDesc_1_0> vBufferDesc_1_0;
+ std::vector<BufferDesc_1_1> vBufferDesc_1_1;
+
+ while (fdp.remaining_bytes() > kMaxFuzzerConsumedBytes) {
+ switch (fdp.ConsumeIntegralInRange<uint32_t>(0, EVS_FUZZ_API_SUM)) {
+ case EVS_FUZZ_MAKE_VIRTUAL_CAMERA: {
+ LOG(DEBUG) << "EVS_FUZZ_MAKE_VIRTUAL_CAMERA";
+ sp<VirtualCamera> virtualCamera = halCamera->makeVirtualCamera();
+ virtualCameras.emplace_back(virtualCamera);
+ break;
+ }
+ case EVS_FUZZ_OWN_VIRTUAL_CAMERA: {
+ LOG(DEBUG) << "EVS_FUZZ_OWN_VIRTUAL_CAMERA";
+ if (!virtualCameras.empty()) {
+ uint32_t whichCam =
+ fdp.ConsumeIntegralInRange<uint32_t>(0, virtualCameras.size() - 1);
+ halCamera->ownVirtualCamera(virtualCameras[whichCam]);
+ }
+ break;
+ }
+ case EVS_FUZZ_DISOWN_VIRTUAL_CAMERA: {
+ LOG(DEBUG) << "EVS_FUZZ_DISOWN_VIRTUAL_CAMERA";
+ if (!virtualCameras.empty()) {
+ uint32_t whichCam =
+ fdp.ConsumeIntegralInRange<uint32_t>(0, virtualCameras.size() - 1);
+ halCamera->disownVirtualCamera(virtualCameras[whichCam]);
+ }
+ break;
+ }
+ case EVS_FUZZ_GET_HW_CAMERA: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_HW_CAMERA";
+ halCamera->getHwCamera();
+ break;
+ }
+ case EVS_FUZZ_GET_CLIENT_COUNT: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_CLIENT_COUNT";
+ halCamera->getClientCount();
+ break;
+ }
+ case EVS_FUZZ_GET_ID: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_ID";
+ halCamera->getId();
+ break;
+ }
+ case EVS_FUZZ_GET_STREAM_CONFIG: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_STREAM_CONFIG";
+ halCamera->getStreamConfig();
+ break;
+ }
+ case EVS_FUZZ_CHANGE_FRAMES_IN_FLIGHT: {
+ LOG(DEBUG) << "EVS_FUZZ_CHANGE_FRAMES_IN_FLIGHT";
+ uint32_t delta = fdp.ConsumeIntegral<int32_t>();
+ halCamera->changeFramesInFlight(delta);
+ break;
+ }
+ case EVS_FUZZ_CHANGE_FRAMES_IN_FLIGHT_1: {
+ LOG(DEBUG) << "EVS_FUZZ_CHANGE_FRAMES_IN_FLIGHT_1";
+ hidl_vec<BufferDesc_1_1> buffers;
+ int32_t delta = 0;
+ halCamera->changeFramesInFlight(buffers, &delta);
+ break;
+ }
+ case EVS_FUZZ_REQUEST_NEW_FRAME: {
+ LOG(DEBUG) << "EVS_FUZZ_REQUEST_NEW_FRAME";
+ if (!virtualCameras.empty()) {
+ uint32_t whichCam =
+ fdp.ConsumeIntegralInRange<uint32_t>(0, virtualCameras.size() - 1);
+ halCamera->requestNewFrame(virtualCameras[whichCam], getCurrentTimeStamp());
+ }
+ break;
+ }
+ case EVS_FUZZ_CLIENT_STREAM_STARTING: {
+ LOG(DEBUG) << "EVS_FUZZ_CLIENT_STREAM_STARTING";
+ halCamera->clientStreamStarting();
+ break;
+ }
+ case EVS_FUZZ_CLIENT_STREAM_ENDING: {
+ LOG(DEBUG) << "EVS_FUZZ_CLIENT_STREAM_ENDING";
+ if (!virtualCameras.empty()) {
+ uint32_t whichCam =
+ fdp.ConsumeIntegralInRange<uint32_t>(0, virtualCameras.size() - 1);
+ halCamera->clientStreamEnding(virtualCameras[whichCam].get());
+ }
+ break;
+ }
+ case EVS_FUZZ_DONE_WITH_FRAME_1_0: {
+ LOG(DEBUG) << "EVS_FUZZ_DONE_WITH_FRAME_1_0";
+ if (!vBufferDesc_1_0.empty()) {
+ uint32_t whichBuffer =
+ fdp.ConsumeIntegralInRange<uint32_t>(0, vBufferDesc_1_0.size() - 1);
+ halCamera->doneWithFrame(vBufferDesc_1_0[whichBuffer]);
+ }
+ break;
+ }
+ case EVS_FUZZ_DONE_WITH_FRAME_1_1: {
+ LOG(DEBUG) << "EVS_FUZZ_DONE_WITH_FRAME_1_1";
+ if (!vBufferDesc_1_1.empty()) {
+ uint32_t whichBuffer =
+ fdp.ConsumeIntegralInRange<uint32_t>(0, vBufferDesc_1_1.size() - 1);
+ halCamera->doneWithFrame(vBufferDesc_1_1[whichBuffer]);
+ }
+ break;
+ }
+ case EVS_FUZZ_SET_PRIMARY: {
+ LOG(DEBUG) << "EVS_FUZZ_SET_PRIMARY";
+ if (!virtualCameras.empty()) {
+ uint32_t whichCam =
+ fdp.ConsumeIntegralInRange<uint32_t>(0, virtualCameras.size() - 1);
+ halCamera->setMaster(virtualCameras[whichCam]);
+ }
+ break;
+ }
+ case EVS_FUZZ_FORCE_PRIMARY: {
+ LOG(DEBUG) << "EVS_FUZZ_FORCE_PRIMARY";
+ if (!virtualCameras.empty()) {
+ uint32_t whichCam =
+ fdp.ConsumeIntegralInRange<uint32_t>(0, virtualCameras.size() - 1);
+ halCamera->forceMaster(virtualCameras[whichCam]);
+ }
+ break;
+ }
+ case EVS_FUZZ_UNSET_PRIMARY: {
+ LOG(DEBUG) << "EVS_FUZZ_UNSET_PRIMARY";
+ if (!virtualCameras.empty()) {
+ uint32_t whichCam =
+ fdp.ConsumeIntegralInRange<uint32_t>(0, virtualCameras.size() - 1);
+ halCamera->unsetMaster(virtualCameras[whichCam]);
+ }
+ break;
+ }
+ case EVS_FUZZ_SET_PARAMETER: {
+ LOG(DEBUG) << "EVS_FUZZ_SET_PARAMETER";
+ if (!virtualCameras.empty()) {
+ uint32_t whichCam =
+ fdp.ConsumeIntegralInRange<uint32_t>(0, virtualCameras.size() - 1);
+ uint32_t whichParam = fdp.ConsumeIntegralInRange<
+ uint32_t>(0, static_cast<uint32_t>(CameraParam::ABSOLUTE_ZOOM));
+ int32_t value = fdp.ConsumeIntegral<int32_t>();
+ halCamera->setParameter(virtualCameras[whichCam],
+ static_cast<CameraParam>(whichParam), value);
+ }
+ break;
+ }
+ case EVS_FUZZ_GET_PARAMETER: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_PARAMETER";
+ uint32_t whichParam =
+ fdp.ConsumeIntegralInRange<uint32_t>(0,
+ static_cast<uint32_t>(
+ CameraParam::ABSOLUTE_ZOOM));
+ int32_t value = fdp.ConsumeIntegral<int32_t>();
+ halCamera->getParameter(static_cast<CameraParam>(whichParam), value);
+ break;
+ }
+ case EVS_FUZZ_GET_STATS: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_STATS";
+ halCamera->getStats();
+ break;
+ }
+ case EVS_FUZZ_GET_STREAM_CONFIGURATION: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_STREAM_CONFIGURATION";
+ halCamera->getStreamConfiguration();
+ break;
+ }
+ case EVS_FUZZ_DELIVER_FRAME: {
+ LOG(DEBUG) << "EVS_FUZZ_DELIVER_FRAME";
+ BufferDesc_1_0 buffer;
+ buffer.bufferId = fdp.ConsumeIntegral<int32_t>();
+ halCamera->deliverFrame(buffer);
+ vBufferDesc_1_0.emplace_back(buffer);
+ break;
+ }
+ case EVS_FUZZ_DELIVER_FRAME_1_1: {
+ LOG(DEBUG) << "EVS_FUZZ_DELIVER_FRAME_1_1";
+ std::vector<BufferDesc_1_1> vec;
+ BufferDesc_1_1 buffer;
+ buffer.bufferId = fdp.ConsumeIntegral<int32_t>();
+ vec.push_back(buffer);
+ hardware::hidl_vec<BufferDesc_1_1> hidl_vec(vec);
+ halCamera->deliverFrame_1_1(hidl_vec);
+ vBufferDesc_1_1.emplace_back(buffer);
+ break;
+ }
+ case EVS_FUZZ_NOTIFY: {
+ LOG(DEBUG) << "EVS_FUZZ_NOTIFY";
+ EvsEventDesc event;
+ uint32_t type =
+ fdp.ConsumeIntegralInRange<uint32_t>(0,
+ static_cast<uint32_t>(
+ EvsEventType::STREAM_ERROR));
+ event.aType = static_cast<EvsEventType>(type);
+ // TODO(b/160824438) let's comment this for now because of the failure.
+ // If virtualCamera does not call startVideoStream, and notify(1) is called
+ // it will fail.
+ // halCamera->notify(event);
+ break;
+ }
+ default:
+ LOG(ERROR) << "Unexpected option, aborting...";
+ break;
+ }
+ }
+ return 0;
+}
+
+} // namespace
+} // namespace implementation
+} // namespace V1_1
+} // namespace evs
+} // namespace automotive
+} // namespace android
diff --git a/evs/manager/1.1/test/fuzzer/HalDisplayFuzzer.cpp b/cpp/evs/manager/1.1/test/fuzzer/HalDisplayFuzzer.cpp
similarity index 89%
rename from evs/manager/1.1/test/fuzzer/HalDisplayFuzzer.cpp
rename to cpp/evs/manager/1.1/test/fuzzer/HalDisplayFuzzer.cpp
index 8ccc057..ff47298 100644
--- a/evs/manager/1.1/test/fuzzer/HalDisplayFuzzer.cpp
+++ b/cpp/evs/manager/1.1/test/fuzzer/HalDisplayFuzzer.cpp
@@ -54,14 +54,17 @@
while (fdp.remaining_bytes() > kMaxFuzzerConsumedBytes) {
switch (fdp.ConsumeIntegralInRange<uint32_t>(0, EVS_FUZZ_API_SUM)) {
case EVS_FUZZ_GET_HW_DISPLAY: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_HW_DISPLAY";
halDisplay->getHwDisplay();
break;
}
case EVS_FUZZ_GET_DISPLAY_INFO: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_DISPLAY_INFO";
halDisplay->getDisplayInfo([](DisplayDesc desc) {});
break;
}
case EVS_FUZZ_SET_DISPLAY_STATE: {
+ LOG(DEBUG) << "EVS_FUZZ_SET_DISPLAY_STATE";
uint32_t state =
fdp.ConsumeIntegralInRange<uint32_t>(0,
static_cast<uint32_t>(
@@ -71,24 +74,29 @@
break;
}
case EVS_FUZZ_GET_DISPLAY_STATE: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_DISPLAY_STATE";
halDisplay->getDisplayState();
break;
}
case EVS_FUZZ_GET_TARGET_BUFFER: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_TARGET_BUFFER";
halDisplay->getTargetBuffer([](const BufferDesc_1_0& buff) {});
break;
}
case EVS_FUZZ_RTN_TGT_BUF_FOR_DISPLAY: {
+ LOG(DEBUG) << "EVS_FUZZ_RTN_TGT_BUF_FOR_DISPLAY";
BufferDesc_1_0 buffer;
buffer.bufferId = fdp.ConsumeIntegral<int32_t>();
halDisplay->returnTargetBufferForDisplay(buffer);
break;
}
case EVS_FUZZ_GET_DISPLAY_INFO_1_1: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_DISPLAY_INFO_1_1";
halDisplay->getDisplayInfo_1_1([](const auto& config, const auto& state) {});
break;
}
case EVS_FUZZ_TO_STRING: {
+ LOG(DEBUG) << "EVS_FUZZ_TO_STRING";
std::string indent = fdp.ConsumeRandomLengthString(kMaxFuzzerConsumedBytes);
halDisplay->toString(indent.c_str());
break;
diff --git a/evs/manager/1.1/test/fuzzer/MockHWCamera.h b/cpp/evs/manager/1.1/test/fuzzer/MockHWCamera.h
similarity index 96%
rename from evs/manager/1.1/test/fuzzer/MockHWCamera.h
rename to cpp/evs/manager/1.1/test/fuzzer/MockHWCamera.h
index a4e0638..4be393d 100644
--- a/evs/manager/1.1/test/fuzzer/MockHWCamera.h
+++ b/cpp/evs/manager/1.1/test/fuzzer/MockHWCamera.h
@@ -58,8 +58,9 @@
(const hidl_string& deviceId, getPhysicalCameraInfo_cb _hidl_cb), (override));
MOCK_METHOD(Return<EvsResult>, pauseVideoStream, (), (override));
MOCK_METHOD(Return<EvsResult>, resumeVideoStream, (), (override));
- MOCK_METHOD(Return<EvsResult>, doneWithFrame_1_1,
- (const hardware::hidl_vec<BufferDesc_1_1>& buffer), (override));
+ Return<EvsResult> doneWithFrame_1_1(const hardware::hidl_vec<BufferDesc_1_1>& buffer) override {
+ return EvsResult::OK;
+ }
MOCK_METHOD(Return<EvsResult>, setMaster, (), (override));
MOCK_METHOD(Return<EvsResult>, forceMaster, (const sp<IEvsDisplay_1_0>& display), (override));
MOCK_METHOD(Return<EvsResult>, unsetMaster, (), (override));
diff --git a/evs/manager/1.1/test/fuzzer/MockHWDisplay.h b/cpp/evs/manager/1.1/test/fuzzer/MockHWDisplay.h
similarity index 100%
rename from evs/manager/1.1/test/fuzzer/MockHWDisplay.h
rename to cpp/evs/manager/1.1/test/fuzzer/MockHWDisplay.h
diff --git a/evs/manager/1.1/test/fuzzer/MockHWEnumerator.h b/cpp/evs/manager/1.1/test/fuzzer/MockHWEnumerator.h
similarity index 100%
rename from evs/manager/1.1/test/fuzzer/MockHWEnumerator.h
rename to cpp/evs/manager/1.1/test/fuzzer/MockHWEnumerator.h
diff --git a/evs/manager/1.1/test/fuzzer/VirtualCameraFuzzer.cpp b/cpp/evs/manager/1.1/test/fuzzer/VirtualCameraFuzzer.cpp
similarity index 86%
rename from evs/manager/1.1/test/fuzzer/VirtualCameraFuzzer.cpp
rename to cpp/evs/manager/1.1/test/fuzzer/VirtualCameraFuzzer.cpp
index 3776f4b..2f3da27 100644
--- a/evs/manager/1.1/test/fuzzer/VirtualCameraFuzzer.cpp
+++ b/cpp/evs/manager/1.1/test/fuzzer/VirtualCameraFuzzer.cpp
@@ -70,27 +70,33 @@
while (fdp.remaining_bytes() > kMaxFuzzerConsumedBytes) {
switch (fdp.ConsumeIntegralInRange<uint32_t>(0, EVS_FUZZ_API_SUM)) {
case EVS_FUZZ_GET_ALLOWED_BUFFERS: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_ALLOWED_BUFFERS";
virtualCamera->getAllowedBuffers();
break;
}
case EVS_FUZZ_IS_STREAMING: {
+ LOG(DEBUG) << "EVS_FUZZ_IS_STREAMING";
virtualCamera->isStreaming();
break;
}
case EVS_FUZZ_GET_VERSION: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_VERSION";
virtualCamera->getVersion();
break;
}
case EVS_FUZZ_GET_HW_CAMERA: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_HW_CAMERA";
virtualCamera->getHalCameras();
break;
}
case EVS_FUZZ_SET_DESCRIPTOR: {
+ LOG(DEBUG) << "EVS_FUZZ_SET_DESCRIPTOR";
CameraDesc* desc = new CameraDesc();
virtualCamera->setDescriptor(desc);
break;
}
case EVS_FUZZ_NOTIFY: {
+ LOG(DEBUG) << "EVS_FUZZ_NOTIFY";
if (videoStarted) {
EvsEventDesc event;
uint32_t type = fdp.ConsumeIntegralInRange<
@@ -101,6 +107,7 @@
break;
}
case EVS_FUZZ_DELIVER_FRAME: {
+ LOG(DEBUG) << "EVS_FUZZ_DELIVER_FRAME";
BufferDesc buffer;
buffer.bufferId = fdp.ConsumeIntegral<int32_t>();
virtualCamera->deliverFrame(buffer);
@@ -108,15 +115,18 @@
break;
}
case EVS_FUZZ_GET_CAMERA_INFO: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_CAMERA_INFO";
virtualCamera->getCameraInfo([](CameraDesc_1_0 desc) {});
break;
}
case EVS_FUZZ_SETMAX_FRAMES_IN_FLIGHT: {
+ LOG(DEBUG) << "EVS_FUZZ_SETMAX_FRAMES_IN_FLIGHT";
uint32_t delta = fdp.ConsumeIntegral<uint32_t>();
virtualCamera->setMaxFramesInFlight(delta);
break;
}
case EVS_FUZZ_START_VIDEO_STREAM: {
+ LOG(DEBUG) << "EVS_FUZZ_START_VIDEO_STREAM";
if (!videoStarted) {
sp<IEvsCamera_1_1> mockHWCamera1 = new MockHWCamera();
sp<HalCamera> halCamera1 = new HalCamera(mockHWCamera1);
@@ -126,6 +136,7 @@
break;
}
case EVS_FUZZ_DONE_WITH_FRAME_1_0: {
+ LOG(DEBUG) << "EVS_FUZZ_DONE_WITH_FRAME_1_0";
if (!vBufferDesc_1_0.empty()) {
uint32_t whichBuffer =
fdp.ConsumeIntegralInRange<uint32_t>(0, vBufferDesc_1_0.size() - 1);
@@ -134,31 +145,37 @@
break;
}
case EVS_FUZZ_STOP_VIDEO_STREAM: {
+ LOG(DEBUG) << "EVS_FUZZ_STOP_VIDEO_STREAM";
virtualCamera->stopVideoStream();
videoStarted = false;
break;
}
case EVS_FUZZ_GET_EXTENDED_INFO: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_EXTENDED_INFO";
uint32_t opaqueIdentifier = fdp.ConsumeIntegral<uint32_t>();
virtualCamera->getExtendedInfo(opaqueIdentifier);
break;
}
case EVS_FUZZ_SET_EXTENDED_INFO: {
+ LOG(DEBUG) << "EVS_FUZZ_SET_EXTENDED_INFO";
uint32_t opaqueIdentifier = fdp.ConsumeIntegral<uint32_t>();
int32_t opaqueValue = fdp.ConsumeIntegral<int32_t>();
virtualCamera->setExtendedInfo(opaqueIdentifier, opaqueValue);
break;
}
case EVS_FUZZ_GET_CAMERA_INFO_1_1: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_CAMERA_INFO_1_1";
virtualCamera->getCameraInfo_1_1([](CameraDesc desc) {});
break;
}
case EVS_FUZZ_GET_PHYSICAL_CAMERA_INFO: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_PHYSICAL_CAMERA_INFO";
hidl_string deviceId("");
virtualCamera->getPhysicalCameraInfo(deviceId, [](const CameraDesc& info) {});
break;
}
case EVS_FUZZ_DONE_WITH_FRAME_1_1: {
+ LOG(DEBUG) << "EVS_FUZZ_DONE_WITH_FRAME_1_1";
if (!vBufferDesc_1_1.empty()) {
hidl_vec<BufferDesc_1_1> buffers(vBufferDesc_1_1);
virtualCamera->doneWithFrame_1_1(buffers);
@@ -166,30 +183,37 @@
break;
}
case EVS_FUZZ_PAUSE_VIDEO_STREAM: {
+ LOG(DEBUG) << "EVS_FUZZ_PAUSE_VIDEO_STREAM";
virtualCamera->pauseVideoStream();
break;
}
case EVS_FUZZ_RESUME_VIDEO_STREAM: {
+ LOG(DEBUG) << "EVS_FUZZ_RESUME_VIDEO_STREAM";
virtualCamera->resumeVideoStream();
break;
}
case EVS_FUZZ_SET_PRIMARY: {
+ LOG(DEBUG) << "EVS_FUZZ_SET_PRIMARY";
virtualCamera->setMaster();
break;
}
case EVS_FUZZ_FORCE_PRIMARY: {
+ LOG(DEBUG) << "EVS_FUZZ_FORCE_PRIMARY";
// TODO(161388489) skip this until we finished fuzzing evs display
break;
}
case EVS_FUZZ_UNSET_PRIMARY: {
+ LOG(DEBUG) << "EVS_FUZZ_UNSET_PRIMARY";
virtualCamera->unsetMaster();
break;
}
case EVS_FUZZ_GET_PARAMETER_LIST: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_PARAMETER_LIST";
virtualCamera->getParameterList([](hidl_vec<CameraParam> cmdList) {});
break;
}
case EVS_FUZZ_GET_INT_PARAMETER_RANGE: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_INT_PARAMETER_RANGE";
uint32_t whichParam =
fdp.ConsumeIntegralInRange<uint32_t>(0,
static_cast<uint32_t>(
@@ -200,6 +224,7 @@
break;
}
case EVS_FUZZ_SET_PARAMETER: {
+ LOG(DEBUG) << "EVS_FUZZ_SET_PARAMETER";
uint32_t whichParam =
fdp.ConsumeIntegralInRange<uint32_t>(0,
static_cast<uint32_t>(
@@ -210,6 +235,7 @@
break;
}
case EVS_FUZZ_GET_PARAMETER: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_PARAMETER";
uint32_t whichParam =
fdp.ConsumeIntegralInRange<uint32_t>(0,
static_cast<uint32_t>(
@@ -219,6 +245,7 @@
break;
}
case EVS_FUZZ_SET_EXTENDED_INFO_1_1: {
+ LOG(DEBUG) << "EVS_FUZZ_SET_EXTENDED_INFO_1_1";
uint32_t opaqueIdentifier = fdp.ConsumeIntegral<uint32_t>();
uint8_t opaqueValue = fdp.ConsumeIntegral<uint8_t>();
vector<uint8_t> v;
@@ -228,12 +255,14 @@
break;
}
case EVS_FUZZ_GET_EXTENDED_INFO_1_1: {
+ LOG(DEBUG) << "EVS_FUZZ_GET_EXTENDED_INFO_1_1";
uint32_t opaqueIdentifier = fdp.ConsumeIntegral<uint32_t>();
virtualCamera->getExtendedInfo_1_1(opaqueIdentifier,
[](const auto& result, const auto& data) {});
break;
}
case EVS_FUZZ_IMPORT_EXTERNAL_BUFFERS: {
+ LOG(DEBUG) << "EVS_FUZZ_IMPORT_EXTERNAL_BUFFERS";
if (!vBufferDesc_1_1.empty()) {
hidl_vec<BufferDesc_1_1> buffers(vBufferDesc_1_1);
virtualCamera->importExternalBuffers(buffers, [](auto _result, auto _delta) {});
diff --git a/cpp/evs/manager/evsmanager.mk b/cpp/evs/manager/evsmanager.mk
new file mode 100644
index 0000000..a263231
--- /dev/null
+++ b/cpp/evs/manager/evsmanager.mk
@@ -0,0 +1,6 @@
+# Extended View System Manager
+PRODUCT_PACKAGES += android.automotive.evs.manager@1.1
+
+# EVS manager selinux policies
+PRODUCT_PUBLIC_SEPOLICY_DIRS += packages/services/Car/cpp/evs/manager/sepolicy/public
+PRODUCT_PRIVATE_SEPOLICY_DIRS += packages/services/Car/cpp/evs/manager/sepolicy/private
diff --git a/evs/sepolicy/private/evs_manager.te b/cpp/evs/manager/sepolicy/private/evs_manager.te
similarity index 100%
rename from evs/sepolicy/private/evs_manager.te
rename to cpp/evs/manager/sepolicy/private/evs_manager.te
diff --git a/cpp/evs/manager/sepolicy/private/file_contexts b/cpp/evs/manager/sepolicy/private/file_contexts
new file mode 100644
index 0000000..5e49d5c
--- /dev/null
+++ b/cpp/evs/manager/sepolicy/private/file_contexts
@@ -0,0 +1,6 @@
+###################################
+# Binaries associated with EVS manager
+#
+/system/bin/android\.automotive\.evs\.manager@1\.[0-9]+ u:object_r:evs_manager_exec:s0
+
+###################################
diff --git a/evs/sepolicy/public/evs_manager.te b/cpp/evs/manager/sepolicy/public/evs_manager.te
similarity index 100%
rename from evs/sepolicy/public/evs_manager.te
rename to cpp/evs/manager/sepolicy/public/evs_manager.te
diff --git a/evs/sampleDriver/Android.bp b/cpp/evs/sampleDriver/Android.bp
similarity index 100%
rename from evs/sampleDriver/Android.bp
rename to cpp/evs/sampleDriver/Android.bp
diff --git a/evs/sampleDriver/ConfigManager.cpp b/cpp/evs/sampleDriver/ConfigManager.cpp
similarity index 100%
rename from evs/sampleDriver/ConfigManager.cpp
rename to cpp/evs/sampleDriver/ConfigManager.cpp
diff --git a/evs/sampleDriver/ConfigManager.h b/cpp/evs/sampleDriver/ConfigManager.h
similarity index 99%
rename from evs/sampleDriver/ConfigManager.h
rename to cpp/evs/sampleDriver/ConfigManager.h
index 97e609a..32a426a 100644
--- a/evs/sampleDriver/ConfigManager.h
+++ b/cpp/evs/sampleDriver/ConfigManager.h
@@ -74,7 +74,7 @@
}
/*
- * List of supported controls that the master client can program.
+ * List of supported controls that the primary client can program.
* Paraemters are stored with its valid range
*/
unordered_map<CameraParam,
diff --git a/evs/sampleDriver/ConfigManagerUtil.cpp b/cpp/evs/sampleDriver/ConfigManagerUtil.cpp
similarity index 100%
rename from evs/sampleDriver/ConfigManagerUtil.cpp
rename to cpp/evs/sampleDriver/ConfigManagerUtil.cpp
diff --git a/evs/sampleDriver/ConfigManagerUtil.h b/cpp/evs/sampleDriver/ConfigManagerUtil.h
similarity index 100%
rename from evs/sampleDriver/ConfigManagerUtil.h
rename to cpp/evs/sampleDriver/ConfigManagerUtil.h
diff --git a/evs/sampleDriver/EvsEnumerator.cpp b/cpp/evs/sampleDriver/EvsEnumerator.cpp
similarity index 88%
rename from evs/sampleDriver/EvsEnumerator.cpp
rename to cpp/evs/sampleDriver/EvsEnumerator.cpp
index 731d14b..662b3fc 100644
--- a/evs/sampleDriver/EvsEnumerator.cpp
+++ b/cpp/evs/sampleDriver/EvsEnumerator.cpp
@@ -20,11 +20,14 @@
#include "ConfigManager.h"
#include <dirent.h>
+
+#include <android-base/file.h>
+#include <android-base/strings.h>
+#include <android-base/stringprintf.h>
#include <hardware_legacy/uevent.h>
#include <hwbinder/IPCThreadState.h>
#include <cutils/android_filesystem_config.h>
-
using namespace std::chrono_literals;
using CameraDesc_1_0 = ::android::hardware::automotive::evs::V1_0::CameraDesc;
using CameraDesc_1_1 = ::android::hardware::automotive::evs::V1_1::CameraDesc;
@@ -681,6 +684,98 @@
return Void();
}
+
+using android::base::Result;
+using android::base::EqualsIgnoreCase;
+using android::base::StringPrintf;
+using android::base::WriteStringToFd;
+Return<void> EvsEnumerator::debug(const hidl_handle& fd,
+ const hidl_vec<hidl_string>& options) {
+ if (fd.getNativeHandle() != nullptr && fd->numFds > 0) {
+ parseCommand(fd->data[0], options);
+ } else {
+ LOG(ERROR) << "Given file descriptor is not valid.";
+ }
+
+ return {};
+}
+
+
+void EvsEnumerator::parseCommand(int fd, const hidl_vec<hidl_string>& options) {
+ if (options.size() < 1) {
+ WriteStringToFd("No option is given.\n", fd);
+ cmdHelp(fd);
+ return;
+ }
+
+ const std::string command = options[0];
+ if (EqualsIgnoreCase(command, "--help")) {
+ cmdHelp(fd);
+ } else if (EqualsIgnoreCase(command, "--dump")) {
+ cmdDump(fd, options);
+ } else {
+ WriteStringToFd(StringPrintf("Invalid option: %s\n", command.c_str()), fd);
+ }
+}
+
+
+void EvsEnumerator::cmdHelp(int fd) {
+ WriteStringToFd("--help: shows this help.\n"
+ "--dump [id] [start|stop] [directory]\n"
+ "\tDump camera frames to a target directory\n", fd);
+}
+
+
+void EvsEnumerator::cmdDump(int fd, const hidl_vec<hidl_string>& options) {
+ if (options.size() < 3) {
+ WriteStringToFd("Necessary argument is missing\n", fd);
+ cmdHelp(fd);
+ return;
+ }
+
+ EvsEnumerator::CameraRecord *pRecord = findCameraById(options[1]);
+ if (pRecord == nullptr) {
+ WriteStringToFd(StringPrintf("%s is not active\n", options[1].c_str()), fd);
+ return;
+ }
+
+ auto device = pRecord->activeInstance.promote();
+ if (device == nullptr) {
+ WriteStringToFd(StringPrintf("%s seems dead\n", options[1].c_str()), fd);
+ return;
+ }
+
+ const std::string command = options[2];
+ if (EqualsIgnoreCase(command, "start")) {
+ // --dump [device id] start [path]
+ if (options.size() < 4) {
+ WriteStringToFd("Necessary argument is missing\n", fd);
+ cmdHelp(fd);
+ return;
+ }
+
+ const std::string path = options[3];
+ auto ret = device->startDumpFrames(path);
+ if (!ret.ok()) {
+ WriteStringToFd(StringPrintf("Failed to start storing frames: %s\n",
+ ret.error().message().c_str()), fd);
+ }
+ } else if (EqualsIgnoreCase(command, "stop")) {
+ // --dump [device id] stop
+ auto ret = device->stopDumpFrames();
+ if (!ret.ok()) {
+ WriteStringToFd(StringPrintf("Failed to stop storing frames: %s\n",
+ ret.error().message().c_str()), fd);
+ }
+ } else {
+ WriteStringToFd(StringPrintf("Unknown command: %s", command.c_str()), fd);
+ cmdHelp(fd);
+ }
+
+ return;
+}
+
+
} // namespace implementation
} // namespace V1_1
} // namespace evs
diff --git a/evs/sampleDriver/EvsEnumerator.h b/cpp/evs/sampleDriver/EvsEnumerator.h
similarity index 93%
rename from evs/sampleDriver/EvsEnumerator.h
rename to cpp/evs/sampleDriver/EvsEnumerator.h
index 33b497e..3f54096 100644
--- a/evs/sampleDriver/EvsEnumerator.h
+++ b/cpp/evs/sampleDriver/EvsEnumerator.h
@@ -76,6 +76,9 @@
// Listen to video device uevents
static void EvsUeventThread(std::atomic<bool>& running);
+ // Methods from ::android.hidl.base::V1_0::IBase follow.
+ Return<void> debug(const hidl_handle& fd, const hidl_vec<hidl_string>& options) override;
+
private:
struct CameraRecord {
CameraDesc desc;
@@ -114,6 +117,11 @@
static std::unordered_map<uint8_t,
uint64_t> sDisplayPortList;
static uint64_t sInternalDisplayId;
+
+ // LSHAL debug command implementations
+ void parseCommand(int fd, const hidl_vec<hidl_string>& options);
+ void cmdHelp(int fd);
+ void cmdDump(int fd, const hidl_vec<hidl_string>& options);
};
} // namespace implementation
diff --git a/evs/sampleDriver/EvsGlDisplay.cpp b/cpp/evs/sampleDriver/EvsGlDisplay.cpp
similarity index 100%
rename from evs/sampleDriver/EvsGlDisplay.cpp
rename to cpp/evs/sampleDriver/EvsGlDisplay.cpp
diff --git a/evs/sampleDriver/EvsGlDisplay.h b/cpp/evs/sampleDriver/EvsGlDisplay.h
similarity index 100%
rename from evs/sampleDriver/EvsGlDisplay.h
rename to cpp/evs/sampleDriver/EvsGlDisplay.h
diff --git a/evs/sampleDriver/EvsV4lCamera.cpp b/cpp/evs/sampleDriver/EvsV4lCamera.cpp
similarity index 94%
rename from evs/sampleDriver/EvsV4lCamera.cpp
rename to cpp/evs/sampleDriver/EvsV4lCamera.cpp
index a46a80b..db6e4ee 100644
--- a/evs/sampleDriver/EvsV4lCamera.cpp
+++ b/cpp/evs/sampleDriver/EvsV4lCamera.cpp
@@ -18,8 +18,12 @@
#include "EvsEnumerator.h"
#include "bufferCopy.h"
+#include <sys/types.h>
+#include <sys/stat.h>
+
#include <android/hardware_buffer.h>
#include <android-base/logging.h>
+#include <android-base/unique_fd.h>
#include <ui/GraphicBufferAllocator.h>
#include <ui/GraphicBufferMapper.h>
#include <utils/SystemClock.h>
@@ -345,7 +349,7 @@
Return<EvsResult> EvsV4lCamera::unsetMaster() {
/* Because EVS HW module reference implementation expects a single client at
- * a time, there is no chance that this is called by a non-master client and
+ * a time, there is no chance that this is called by the secondary client and
* therefore returns a success code always.
*/
return EvsResult::OK;
@@ -726,6 +730,30 @@
}
}
+ if (mDumpFrame) {
+ // Construct a target filename with the device identifier
+ std::string filename = std::string(mDescription.v1.cameraId);
+ std::replace(filename.begin(), filename.end(), '/', '_');
+ filename = mDumpPath + filename + "_" + std::to_string(mFrameCounter) + ".bin";
+
+ android::base::unique_fd fd(open(filename.c_str(),
+ O_WRONLY | O_CREAT,
+ S_IRUSR | S_IWUSR | S_IRGRP));
+ LOG(ERROR) << filename << ", " << fd;
+ if (fd == -1) {
+ PLOG(ERROR) << "Failed to open a file, " << filename;
+ } else {
+ auto width = mVideo.getWidth();
+ auto height = mVideo.getHeight();
+ auto len = write(fd.get(), &width, sizeof(width));
+ len += write(fd.get(), &height, sizeof(height));
+ len += write(fd.get(), &mStride, sizeof(mStride));
+ len += write(fd.get(), &mFormat, sizeof(mFormat));
+ len += write(fd.get(), pData, pV4lBuff->length);
+ LOG(INFO) << len << " bytes are written to " << filename;
+ }
+ }
+
if (!readyForFrame) {
// We need to return the video buffer so it can capture a new frame
mVideo.markFrameConsumed(pV4lBuff->index);
@@ -823,6 +851,9 @@
mFramesInUse--;
}
}
+
+ // Increse a frame counter
+ ++mFrameCounter;
}
@@ -948,6 +979,32 @@
}
+using android::base::Result;
+using android::base::Error;
+Result<void> EvsV4lCamera::startDumpFrames(const std::string& path) {
+ struct stat info;
+ if (stat(path.c_str(), &info) != 0) {
+ return Error(BAD_VALUE) << "Cannot access " << path;
+ } else if (!(info.st_mode & S_IFDIR)) {
+ return Error(BAD_VALUE) << path << " is not a directory";
+ }
+
+ mDumpPath = path;
+ mDumpFrame = true;
+
+ return {};
+}
+
+
+Result<void> EvsV4lCamera::stopDumpFrames() {
+ if (!mDumpFrame) {
+ return Error(INVALID_OPERATION) << "Device is not dumping frames";
+ }
+
+ mDumpFrame = false;
+ return {};
+}
+
} // namespace implementation
} // namespace V1_1
} // namespace evs
diff --git a/evs/sampleDriver/EvsV4lCamera.h b/cpp/evs/sampleDriver/EvsV4lCamera.h
similarity index 94%
rename from evs/sampleDriver/EvsV4lCamera.h
rename to cpp/evs/sampleDriver/EvsV4lCamera.h
index 90cde57..4aa8bc7 100644
--- a/evs/sampleDriver/EvsV4lCamera.h
+++ b/cpp/evs/sampleDriver/EvsV4lCamera.h
@@ -17,20 +17,20 @@
#ifndef ANDROID_HARDWARE_AUTOMOTIVE_EVS_V1_1_EVSV4LCAMERA_H
#define ANDROID_HARDWARE_AUTOMOTIVE_EVS_V1_1_EVSV4LCAMERA_H
+#include "VideoCapture.h"
+#include "ConfigManager.h"
+
+#include <functional>
+#include <thread>
+
#include <android/hardware/automotive/evs/1.1/types.h>
#include <android/hardware/automotive/evs/1.1/IEvsCamera.h>
#include <android/hardware/automotive/evs/1.1/IEvsCameraStream.h>
#include <android/hardware/automotive/evs/1.1/IEvsDisplay.h>
#include <android/hardware/camera/device/3.2/ICameraDevice.h>
+#include <android-base/result.h>
#include <ui/GraphicBuffer.h>
-#include <functional>
-#include <thread>
-#include <set>
-
-#include "VideoCapture.h"
-#include "ConfigManager.h"
-
using ::android::hardware::hidl_string;
using ::android::hardware::camera::device::V3_2::Stream;
using ::android::hardware::automotive::evs::V1_0::EvsResult;
@@ -101,6 +101,10 @@
const CameraDesc& getDesc() { return mDescription; };
+ // Dump captured frames to the filesystem
+ android::base::Result<void> startDumpFrames(const std::string& path);
+ android::base::Result<void> stopDumpFrames();
+
private:
// Constructors
EvsV4lCamera(const char *deviceName,
@@ -153,6 +157,15 @@
// Extended information
std::unordered_map<uint32_t, std::vector<uint8_t>> mExtInfo;
+
+ // Dump captured frames
+ std::atomic<bool> mDumpFrame = false;
+
+ // Path to store captured frames
+ std::string mDumpPath;
+
+ // Frame counter
+ uint64_t mFrameCounter = 0;
};
} // namespace implementation
diff --git a/evs/sampleDriver/GlWrapper.cpp b/cpp/evs/sampleDriver/GlWrapper.cpp
similarity index 100%
rename from evs/sampleDriver/GlWrapper.cpp
rename to cpp/evs/sampleDriver/GlWrapper.cpp
diff --git a/evs/sampleDriver/GlWrapper.h b/cpp/evs/sampleDriver/GlWrapper.h
similarity index 100%
rename from evs/sampleDriver/GlWrapper.h
rename to cpp/evs/sampleDriver/GlWrapper.h
diff --git a/evs/sampleDriver/ServiceNames.h b/cpp/evs/sampleDriver/ServiceNames.h
similarity index 100%
rename from evs/sampleDriver/ServiceNames.h
rename to cpp/evs/sampleDriver/ServiceNames.h
diff --git a/evs/sampleDriver/VideoCapture.cpp b/cpp/evs/sampleDriver/VideoCapture.cpp
similarity index 100%
rename from evs/sampleDriver/VideoCapture.cpp
rename to cpp/evs/sampleDriver/VideoCapture.cpp
diff --git a/evs/sampleDriver/VideoCapture.h b/cpp/evs/sampleDriver/VideoCapture.h
similarity index 100%
rename from evs/sampleDriver/VideoCapture.h
rename to cpp/evs/sampleDriver/VideoCapture.h
diff --git a/evs/sampleDriver/android.hardware.automotive.evs@1.1-sample.rc b/cpp/evs/sampleDriver/android.hardware.automotive.evs@1.1-sample.rc
similarity index 100%
rename from evs/sampleDriver/android.hardware.automotive.evs@1.1-sample.rc
rename to cpp/evs/sampleDriver/android.hardware.automotive.evs@1.1-sample.rc
diff --git a/evs/sampleDriver/bufferCopy.cpp b/cpp/evs/sampleDriver/bufferCopy.cpp
similarity index 100%
rename from evs/sampleDriver/bufferCopy.cpp
rename to cpp/evs/sampleDriver/bufferCopy.cpp
diff --git a/evs/sampleDriver/bufferCopy.h b/cpp/evs/sampleDriver/bufferCopy.h
similarity index 100%
rename from evs/sampleDriver/bufferCopy.h
rename to cpp/evs/sampleDriver/bufferCopy.h
diff --git a/evs/sampleDriver/manifest_android.hardware.automotive.evs@1.1.xml b/cpp/evs/sampleDriver/manifest_android.hardware.automotive.evs@1.1.xml
similarity index 100%
rename from evs/sampleDriver/manifest_android.hardware.automotive.evs@1.1.xml
rename to cpp/evs/sampleDriver/manifest_android.hardware.automotive.evs@1.1.xml
diff --git a/evs/sampleDriver/resources/evs_configuration.dtd b/cpp/evs/sampleDriver/resources/evs_configuration.dtd
similarity index 100%
rename from evs/sampleDriver/resources/evs_configuration.dtd
rename to cpp/evs/sampleDriver/resources/evs_configuration.dtd
diff --git a/evs/sampleDriver/resources/evs_sample_configuration.xml b/cpp/evs/sampleDriver/resources/evs_sample_configuration.xml
similarity index 100%
rename from evs/sampleDriver/resources/evs_sample_configuration.xml
rename to cpp/evs/sampleDriver/resources/evs_sample_configuration.xml
diff --git a/cpp/evs/sampleDriver/sepolicy/evsdriver.mk b/cpp/evs/sampleDriver/sepolicy/evsdriver.mk
new file mode 100644
index 0000000..d6caaf7
--- /dev/null
+++ b/cpp/evs/sampleDriver/sepolicy/evsdriver.mk
@@ -0,0 +1,3 @@
+# Selinux policies for the reference EVS HAL implementation
+PRODUCT_PUBLIC_SEPOLICY_DIRS += packages/services/Car/cpp/evs/sampleDriver/sepolicy/public
+PRODUCT_PRIVATE_SEPOLICY_DIRS += packages/services/Car/cpp/evs/sampleDriver/sepolicy/private
diff --git a/cpp/evs/sampleDriver/sepolicy/private/automotive_display_service.te b/cpp/evs/sampleDriver/sepolicy/private/automotive_display_service.te
new file mode 100644
index 0000000..f365aca
--- /dev/null
+++ b/cpp/evs/sampleDriver/sepolicy/private/automotive_display_service.te
@@ -0,0 +1,2 @@
+# Allow automotive_display_service to perform binder IPC to hal_evs_driver
+binder_call(automotive_display_service, hal_evs_driver)
diff --git a/evs/sepolicy/private/evs_driver.te b/cpp/evs/sampleDriver/sepolicy/private/evs_driver.te
similarity index 100%
rename from evs/sepolicy/private/evs_driver.te
rename to cpp/evs/sampleDriver/sepolicy/private/evs_driver.te
diff --git a/cpp/evs/sampleDriver/sepolicy/private/file_contexts b/cpp/evs/sampleDriver/sepolicy/private/file_contexts
new file mode 100644
index 0000000..2a3f808
--- /dev/null
+++ b/cpp/evs/sampleDriver/sepolicy/private/file_contexts
@@ -0,0 +1,6 @@
+###################################
+# Binaries associated with the reference EVS HAL implementation
+#
+/vendor/bin/android\.hardware\.automotive\.evs@1\.[0-9]+-sample u:object_r:hal_evs_driver_exec:s0
+
+###################################
diff --git a/cpp/evs/sampleDriver/sepolicy/private/surfaceflinger.te b/cpp/evs/sampleDriver/sepolicy/private/surfaceflinger.te
new file mode 100644
index 0000000..ce51a0d
--- /dev/null
+++ b/cpp/evs/sampleDriver/sepolicy/private/surfaceflinger.te
@@ -0,0 +1,2 @@
+# Allow surfaceflinger to perform binder IPC to hal_evs_driver
+binder_call(surfaceflinger, hal_evs_driver)
diff --git a/evs/sepolicy/public/evs_driver.te b/cpp/evs/sampleDriver/sepolicy/public/evs_driver.te
similarity index 100%
rename from evs/sepolicy/public/evs_driver.te
rename to cpp/evs/sampleDriver/sepolicy/public/evs_driver.te
diff --git a/evs/sampleDriver/service.cpp b/cpp/evs/sampleDriver/service.cpp
similarity index 100%
rename from evs/sampleDriver/service.cpp
rename to cpp/evs/sampleDriver/service.cpp
diff --git a/evs/support_library/AnalyzeUseCase.cpp b/cpp/evs/support_library/AnalyzeUseCase.cpp
similarity index 100%
rename from evs/support_library/AnalyzeUseCase.cpp
rename to cpp/evs/support_library/AnalyzeUseCase.cpp
diff --git a/evs/support_library/AnalyzeUseCase.h b/cpp/evs/support_library/AnalyzeUseCase.h
similarity index 100%
rename from evs/support_library/AnalyzeUseCase.h
rename to cpp/evs/support_library/AnalyzeUseCase.h
diff --git a/evs/support_library/Android.bp b/cpp/evs/support_library/Android.bp
similarity index 100%
rename from evs/support_library/Android.bp
rename to cpp/evs/support_library/Android.bp
diff --git a/evs/support_library/BaseAnalyzeCallback.h b/cpp/evs/support_library/BaseAnalyzeCallback.h
similarity index 100%
rename from evs/support_library/BaseAnalyzeCallback.h
rename to cpp/evs/support_library/BaseAnalyzeCallback.h
diff --git a/evs/support_library/BaseRenderCallback.h b/cpp/evs/support_library/BaseRenderCallback.h
similarity index 100%
rename from evs/support_library/BaseRenderCallback.h
rename to cpp/evs/support_library/BaseRenderCallback.h
diff --git a/evs/support_library/BaseUseCase.h b/cpp/evs/support_library/BaseUseCase.h
similarity index 100%
rename from evs/support_library/BaseUseCase.h
rename to cpp/evs/support_library/BaseUseCase.h
diff --git a/evs/support_library/ConfigManager.cpp b/cpp/evs/support_library/ConfigManager.cpp
similarity index 100%
rename from evs/support_library/ConfigManager.cpp
rename to cpp/evs/support_library/ConfigManager.cpp
diff --git a/evs/support_library/ConfigManager.h b/cpp/evs/support_library/ConfigManager.h
similarity index 100%
rename from evs/support_library/ConfigManager.h
rename to cpp/evs/support_library/ConfigManager.h
diff --git a/evs/support_library/DisplayUseCase.cpp b/cpp/evs/support_library/DisplayUseCase.cpp
similarity index 100%
rename from evs/support_library/DisplayUseCase.cpp
rename to cpp/evs/support_library/DisplayUseCase.cpp
diff --git a/evs/support_library/DisplayUseCase.h b/cpp/evs/support_library/DisplayUseCase.h
similarity index 100%
rename from evs/support_library/DisplayUseCase.h
rename to cpp/evs/support_library/DisplayUseCase.h
diff --git a/evs/support_library/FormatConvert.cpp b/cpp/evs/support_library/FormatConvert.cpp
similarity index 100%
rename from evs/support_library/FormatConvert.cpp
rename to cpp/evs/support_library/FormatConvert.cpp
diff --git a/evs/support_library/FormatConvert.h b/cpp/evs/support_library/FormatConvert.h
similarity index 100%
rename from evs/support_library/FormatConvert.h
rename to cpp/evs/support_library/FormatConvert.h
diff --git a/evs/support_library/Frame.h b/cpp/evs/support_library/Frame.h
similarity index 100%
rename from evs/support_library/Frame.h
rename to cpp/evs/support_library/Frame.h
diff --git a/evs/support_library/RenderBase.cpp b/cpp/evs/support_library/RenderBase.cpp
similarity index 94%
rename from evs/support_library/RenderBase.cpp
rename to cpp/evs/support_library/RenderBase.cpp
index 705afe7..9701364 100644
--- a/evs/support_library/RenderBase.cpp
+++ b/cpp/evs/support_library/RenderBase.cpp
@@ -34,7 +34,7 @@
// OpenGL state shared among all renderers
EGLDisplay RenderBase::sDisplay = EGL_NO_DISPLAY;
EGLContext RenderBase::sContext = EGL_NO_CONTEXT;
-EGLSurface RenderBase::sDummySurface = EGL_NO_SURFACE;
+EGLSurface RenderBase::sMockSurface = EGL_NO_SURFACE;
GLuint RenderBase::sFrameBuffer = -1;
GLuint RenderBase::sColorBuffer = -1;
GLuint RenderBase::sDepthBuffer = -1;
@@ -93,12 +93,12 @@
// Create a placeholder pbuffer so we have a surface to bind -- we never intend to draw to this
// because attachRenderTarget will be called first.
EGLint surface_attribs[] = { EGL_WIDTH, 1, EGL_HEIGHT, 1, EGL_NONE };
- sDummySurface = eglCreatePbufferSurface(display, egl_config, surface_attribs);
- if (sDummySurface == EGL_NO_SURFACE) {
- ALOGE("Failed to create OpenGL ES Dummy surface: %s", getEGLError());
+ sMockSurface = eglCreatePbufferSurface(display, egl_config, surface_attribs);
+ if (sMockSurface == EGL_NO_SURFACE) {
+ ALOGE("Failed to create OpenGL ES Mock surface: %s", getEGLError());
return false;
} else {
- ALOGI("Dummy surface looks good! :)");
+ ALOGI("Mock surface looks good! :)");
}
@@ -113,7 +113,7 @@
// Activate our render target for drawing
- if (!eglMakeCurrent(display, sDummySurface, sDummySurface, context)) {
+ if (!eglMakeCurrent(display, sMockSurface, sMockSurface, context)) {
ALOGE("Failed to make the OpenGL ES Context current: %s", getEGLError());
return false;
} else {
diff --git a/evs/support_library/RenderBase.h b/cpp/evs/support_library/RenderBase.h
similarity index 97%
rename from evs/support_library/RenderBase.h
rename to cpp/evs/support_library/RenderBase.h
index 0a9be51..206eb9d 100644
--- a/evs/support_library/RenderBase.h
+++ b/cpp/evs/support_library/RenderBase.h
@@ -59,7 +59,7 @@
// OpenGL state shared among all renderers
static EGLDisplay sDisplay;
static EGLContext sContext;
- static EGLSurface sDummySurface;
+ static EGLSurface sMockSurface;
static GLuint sFrameBuffer;
static GLuint sColorBuffer;
static GLuint sDepthBuffer;
diff --git a/evs/support_library/RenderDirectView.cpp b/cpp/evs/support_library/RenderDirectView.cpp
similarity index 100%
rename from evs/support_library/RenderDirectView.cpp
rename to cpp/evs/support_library/RenderDirectView.cpp
diff --git a/evs/support_library/RenderDirectView.h b/cpp/evs/support_library/RenderDirectView.h
similarity index 100%
rename from evs/support_library/RenderDirectView.h
rename to cpp/evs/support_library/RenderDirectView.h
diff --git a/evs/support_library/ResourceManager.cpp b/cpp/evs/support_library/ResourceManager.cpp
similarity index 100%
rename from evs/support_library/ResourceManager.cpp
rename to cpp/evs/support_library/ResourceManager.cpp
diff --git a/evs/support_library/ResourceManager.h b/cpp/evs/support_library/ResourceManager.h
similarity index 100%
rename from evs/support_library/ResourceManager.h
rename to cpp/evs/support_library/ResourceManager.h
diff --git a/evs/support_library/StreamHandler.cpp b/cpp/evs/support_library/StreamHandler.cpp
similarity index 100%
rename from evs/support_library/StreamHandler.cpp
rename to cpp/evs/support_library/StreamHandler.cpp
diff --git a/evs/support_library/StreamHandler.h b/cpp/evs/support_library/StreamHandler.h
similarity index 100%
rename from evs/support_library/StreamHandler.h
rename to cpp/evs/support_library/StreamHandler.h
diff --git a/evs/support_library/TexWrapper.cpp b/cpp/evs/support_library/TexWrapper.cpp
similarity index 100%
rename from evs/support_library/TexWrapper.cpp
rename to cpp/evs/support_library/TexWrapper.cpp
diff --git a/evs/support_library/TexWrapper.h b/cpp/evs/support_library/TexWrapper.h
similarity index 100%
rename from evs/support_library/TexWrapper.h
rename to cpp/evs/support_library/TexWrapper.h
diff --git a/evs/support_library/Utils.cpp b/cpp/evs/support_library/Utils.cpp
similarity index 100%
rename from evs/support_library/Utils.cpp
rename to cpp/evs/support_library/Utils.cpp
diff --git a/evs/support_library/Utils.h b/cpp/evs/support_library/Utils.h
similarity index 100%
rename from evs/support_library/Utils.h
rename to cpp/evs/support_library/Utils.h
diff --git a/evs/support_library/VideoTex.cpp b/cpp/evs/support_library/VideoTex.cpp
similarity index 100%
rename from evs/support_library/VideoTex.cpp
rename to cpp/evs/support_library/VideoTex.cpp
diff --git a/evs/support_library/VideoTex.h b/cpp/evs/support_library/VideoTex.h
similarity index 100%
rename from evs/support_library/VideoTex.h
rename to cpp/evs/support_library/VideoTex.h
diff --git a/evs/support_library/config.json b/cpp/evs/support_library/config.json
similarity index 100%
rename from evs/support_library/config.json
rename to cpp/evs/support_library/config.json
diff --git a/evs/support_library/glError.cpp b/cpp/evs/support_library/glError.cpp
similarity index 100%
rename from evs/support_library/glError.cpp
rename to cpp/evs/support_library/glError.cpp
diff --git a/evs/support_library/glError.h b/cpp/evs/support_library/glError.h
similarity index 100%
rename from evs/support_library/glError.h
rename to cpp/evs/support_library/glError.h
diff --git a/evs/support_library/shader.cpp b/cpp/evs/support_library/shader.cpp
similarity index 100%
rename from evs/support_library/shader.cpp
rename to cpp/evs/support_library/shader.cpp
diff --git a/evs/support_library/shader.h b/cpp/evs/support_library/shader.h
similarity index 100%
rename from evs/support_library/shader.h
rename to cpp/evs/support_library/shader.h
diff --git a/evs/support_library/shader_projectedTex.h b/cpp/evs/support_library/shader_projectedTex.h
similarity index 100%
rename from evs/support_library/shader_projectedTex.h
rename to cpp/evs/support_library/shader_projectedTex.h
diff --git a/evs/support_library/shader_simpleTex.h b/cpp/evs/support_library/shader_simpleTex.h
similarity index 100%
rename from evs/support_library/shader_simpleTex.h
rename to cpp/evs/support_library/shader_simpleTex.h
diff --git a/cpp/powerpolicy/Android.bp b/cpp/powerpolicy/Android.bp
new file mode 100644
index 0000000..1de2a8a
--- /dev/null
+++ b/cpp/powerpolicy/Android.bp
@@ -0,0 +1,85 @@
+// Copyright (C) 2020 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.
+
+cc_defaults {
+ name: "carpowerpolicyserver_defaults",
+ cflags: [
+ "-Wall",
+ "-Wno-missing-field-initializers",
+ "-Werror",
+ "-Wno-unused-variable",
+ "-Wunused-parameter",
+ ],
+ shared_libs: [
+ "android.frameworks.automotive.powerpolicy-cpp",
+ "android.hardware.automotive.vehicle@2.0",
+ "carpowerpolicy_system_notification-cpp",
+ "libbase",
+ "libbinder",
+ "libhidlbase",
+ "liblog",
+ "libtinyxml2",
+ "libutils",
+ ],
+}
+
+cc_library {
+ name: "lib_carpowerpolicyserver",
+ srcs: [
+ "src/CarPowerPolicyServer.cpp",
+ "src/PolicyManager.cpp",
+ "src/PowerComponentHandler.cpp",
+ ],
+ defaults: [
+ "carpowerpolicyserver_defaults",
+ ],
+ export_include_dirs: [
+ "src",
+ ],
+}
+
+cc_test {
+ name: "carpowerpolicyserver_test",
+ defaults: [
+ "carpowerpolicyserver_defaults",
+ ],
+ test_suites: ["general-tests"],
+ srcs: [
+ "tests/CarPowerPolicyServerTest.cpp",
+ "tests/PolicyManagerTest.cpp",
+ ],
+ static_libs: [
+ "libgmock",
+ "libgtest",
+ "lib_carpowerpolicyserver",
+ ],
+ data: [
+ "tests/data/*.xml",
+ ],
+}
+
+cc_binary {
+ name: "carpowerpolicyd",
+ defaults: [
+ "carpowerpolicyserver_defaults",
+ ],
+ srcs: [
+ "src/main.cpp",
+ ],
+ static_libs: [
+ "lib_carpowerpolicyserver",
+ ],
+ init_rc: ["carpowerpolicyd.rc"],
+ vintf_fragments: ["carpowerpolicyd.xml"],
+}
diff --git a/cpp/powerpolicy/carpowerpolicyd.rc b/cpp/powerpolicy/carpowerpolicyd.rc
new file mode 100644
index 0000000..65d9f55
--- /dev/null
+++ b/cpp/powerpolicy/carpowerpolicyd.rc
@@ -0,0 +1,18 @@
+# Copyright (C) 2020 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.
+
+service carpowerpolicyd /system/bin/carpowerpolicyd
+ class early_hal
+ user system
+ group system
diff --git a/car_product/overlay/packages/apps/PackageInstaller/res/drawable/background_round_corners.xml b/cpp/powerpolicy/carpowerpolicyd.xml
similarity index 62%
rename from car_product/overlay/packages/apps/PackageInstaller/res/drawable/background_round_corners.xml
rename to cpp/powerpolicy/carpowerpolicyd.xml
index 1b71555..e8df893 100644
--- a/car_product/overlay/packages/apps/PackageInstaller/res/drawable/background_round_corners.xml
+++ b/cpp/powerpolicy/carpowerpolicyd.xml
@@ -1,6 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2017 The Android Open Source Project
+<!-- Copyright (C) 2020 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.
@@ -14,7 +12,13 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<shape xmlns:android="http://schemas.android.com/apk/res/android" >
- <solid android:color="?android:attr/colorBackgroundFloating" />
- <corners android:radius="@*android:dimen/car_radius_3" />
-</shape>
+
+<manifest version="1.0" type="framework">
+ <hal format="aidl">
+ <name>android.frameworks.automotive.powerpolicy</name>
+ <interface>
+ <name>ICarPowerPolicyServer</name>
+ <instance>default</instance>
+ </interface>
+ </hal>
+</manifest>
diff --git a/cpp/powerpolicy/product/carpowerpolicy.mk b/cpp/powerpolicy/product/carpowerpolicy.mk
new file mode 100644
index 0000000..772c3ce
--- /dev/null
+++ b/cpp/powerpolicy/product/carpowerpolicy.mk
@@ -0,0 +1,22 @@
+# Copyright (C) 2020 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.
+
+# Add carpowerpolicyd to product package
+PRODUCT_PACKAGES += carpowerpolicyd
+
+# SELinux public policies for car power policy server
+PRODUCT_PUBLIC_SEPOLICY_DIRS += packages/services/Car/cpp/powerpolicy/sepolicy/public
+
+# SELinux private policies for car power policy server
+PRODUCT_PRIVATE_SEPOLICY_DIRS += packages/services/Car/cpp/powerpolicy/sepolicy/private
diff --git a/cpp/powerpolicy/product/sample_power_policy.xml b/cpp/powerpolicy/product/sample_power_policy.xml
new file mode 100644
index 0000000..c21a6ca
--- /dev/null
+++ b/cpp/powerpolicy/product/sample_power_policy.xml
@@ -0,0 +1,78 @@
+<?xml version='1.0' encoding='utf-8'?>
+
+<!-- Sample power policy XML configuration
+
+ Power policy XML configuration should be copied to /vendor/etc/power_policy.xml.
+ Use power_policy_configuration.dtd with xmllint tool, to validate XML configuration file
+-->
+
+<powerPolicy version="1.0">
+ <!-- version section contains a “version" tag in the form “major.minor" e.g version="1.0" -->
+
+ <policyGroups>
+ <policyGroup id="basic_policy_group">
+ <defaultPolicy state="WaitForVHAL" id="sample_policy_01"/>
+ <defaultPolicy state="On" id="sample_policy_02"/>
+ <defaultPolicy state="DeepSleepEntry" id="sample_policy_03"/>
+ <defaultPolicy state="ShutdownStart" id="sample_policy_04"/>
+ </policyGroup>
+ <policyGroup id="no_default_policy">
+ <noDefaultPolicy state="WaitForVHAL"/>
+ <noDefaultPolicy state="On"/>
+ <noDefaultPolicy state="DeepSleepEntry"/>
+ <noDefaultPolicy state="ShutdownStart"/>
+ </policyGroup>
+ <policyGroup id="mixed_default_policy">
+ <defaultPolicy state="WaitForVHAL" id="sample_policy_01"/>
+ <defaultPolicy state="On" id="sample_policy_02"/>
+ <noDefaultPolicy state="DeepSleepEntry"/>
+ <noDefaultPolicy state="ShutdownStart"/>
+ </policyGroup>
+ </policyGroups>
+
+ <policies>
+ <policy id="sample_policy_01">
+ <otherComponents behavior="off"/>
+ <component id="POWER_COMPONENT_AUDIO">on</component>
+ <component id="POWER_COMPONENT_DISPLAY_MAIN">on</component>
+ <component id="POWER_COMPONENT_WIFI">on</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">on</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">on</component>
+ </policy>
+ <policy id="sample_policy_02">
+ <otherComponents behavior="untouched"/>
+ <component id="POWER_COMPONENT_AUDIO">on</component>
+ <component id="POWER_COMPONENT_DISPLAY_MAIN">on</component>
+ <component id="POWER_COMPONENT_BLUETOOTH">off</component>
+ <component id="POWER_COMPONENT_WIFI">off</component>
+ <component id="POWER_COMPONENT_VOICE_INTERACTION">on</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">on</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">on</component>
+ </policy>
+ <policy id="sample_policy_03">
+ <otherComponents behavior="on"/>
+ <component id="POWER_COMPONENT_AUDIO">off</component>
+ <component id="POWER_COMPONENT_DISPLAY_CLUSTER">off</component>
+ <component id="POWER_COMPONENT_VOICE_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ <policy id="sample_policy_04">
+ <component id="POWER_COMPONENT_AUDIO">off</component>
+ <component id="POWER_COMPONENT_DISPLAY_FRONT_PASSENGER">off</component>
+ <component id="POWER_COMPONENT_WIFI">on</component>
+ <component id="POWER_COMPONENT_VOICE_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ </policies>
+
+ <systemPolicyOverrides>
+ <policy id="system_power_policy_no_user_interaction">
+ <component id="POWER_COMPONENT_BLUETOOTH">on</component>
+ <component id="POWER_COMPONENT_NFC">on</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ </systemPolicyOverrides>
+
+</powerPolicy>
diff --git a/cpp/powerpolicy/sepolicy/private/carpowerpolicy.te b/cpp/powerpolicy/sepolicy/private/carpowerpolicy.te
new file mode 100644
index 0000000..f69f558
--- /dev/null
+++ b/cpp/powerpolicy/sepolicy/private/carpowerpolicy.te
@@ -0,0 +1,14 @@
+# Car power policy server
+typeattribute carpowerpolicyd coredomain;
+typeattribute carpowerpolicyd mlstrustedsubject;
+
+type carpowerpolicyd_exec, exec_type, file_type, system_file_type;
+
+init_daemon_domain(carpowerpolicyd)
+add_service(carpowerpolicyd, carpowerpolicyd_service)
+binder_use(carpowerpolicyd)
+binder_service(carpowerpolicyd)
+
+hwbinder_use(carpowerpolicyd)
+get_prop(carpowerpolicyd, hwservicemanager_prop)
+hal_client_domain(carpowerpolicyd, hal_vehicle)
diff --git a/cpp/powerpolicy/sepolicy/private/carpowerpolicycallbackdomain.te b/cpp/powerpolicy/sepolicy/private/carpowerpolicycallbackdomain.te
new file mode 100644
index 0000000..e2c515c
--- /dev/null
+++ b/cpp/powerpolicy/sepolicy/private/carpowerpolicycallbackdomain.te
@@ -0,0 +1,4 @@
+# Car power policy callback domain
+binder_use(carpowerpolicycallback_domain)
+
+allow carpowerpolicycallback_domain carpowerpolicyd_service:service_manager find;
diff --git a/cpp/powerpolicy/sepolicy/private/file_contexts b/cpp/powerpolicy/sepolicy/private/file_contexts
new file mode 100644
index 0000000..fdc12ae
--- /dev/null
+++ b/cpp/powerpolicy/sepolicy/private/file_contexts
@@ -0,0 +1,2 @@
+# Car power policy server
+/system/bin/carpowerpolicyd u:object_r:carpowerpolicyd_exec:s0
diff --git a/cpp/powerpolicy/sepolicy/private/service_contexts b/cpp/powerpolicy/sepolicy/private/service_contexts
new file mode 100644
index 0000000..39f340c
--- /dev/null
+++ b/cpp/powerpolicy/sepolicy/private/service_contexts
@@ -0,0 +1,3 @@
+# Car power policy server
+android.frameworks.automotive.powerpolicy.ICarPowerPolicyServer/default u:object_r:carpowerpolicyd_service:s0
+carpowerpolicy_system_notification u:object_r:carpowerpolicyd_service:s0
diff --git a/cpp/powerpolicy/sepolicy/public/attributes b/cpp/powerpolicy/sepolicy/public/attributes
new file mode 100644
index 0000000..b2e8d76
--- /dev/null
+++ b/cpp/powerpolicy/sepolicy/public/attributes
@@ -0,0 +1,3 @@
+# All car power policy callbacks
+attribute carpowerpolicycallback_domain;
+expandattribute carpowerpolicycallback_domain true;
diff --git a/cpp/powerpolicy/sepolicy/public/carpowerpolicy.te b/cpp/powerpolicy/sepolicy/public/carpowerpolicy.te
new file mode 100644
index 0000000..cce3749
--- /dev/null
+++ b/cpp/powerpolicy/sepolicy/public/carpowerpolicy.te
@@ -0,0 +1,7 @@
+# Car power policy server
+type carpowerpolicyd, domain;
+
+binder_call(carpowerpolicycallback_domain, carpowerpolicyd)
+
+# Configuration for system_server
+allow system_server carpowerpolicyd_service:service_manager find;
diff --git a/cpp/powerpolicy/sepolicy/public/service.te b/cpp/powerpolicy/sepolicy/public/service.te
new file mode 100644
index 0000000..2f2455a
--- /dev/null
+++ b/cpp/powerpolicy/sepolicy/public/service.te
@@ -0,0 +1,2 @@
+# Car power policy server
+type carpowerpolicyd_service, service_manager_type;
diff --git a/cpp/powerpolicy/sepolicy/public/te_macros b/cpp/powerpolicy/sepolicy/public/te_macros
new file mode 100644
index 0000000..a572dd1
--- /dev/null
+++ b/cpp/powerpolicy/sepolicy/public/te_macros
@@ -0,0 +1,11 @@
+#####################################
+# carpowerpolicy_callback_domain(domain)
+# Allow a base set of permissions required for a domain to be a
+# callback of a carpowerpolicyd.
+#
+# For example, make some_domain a car power policy callback:
+# carpowerpolicy_callback_domain(some_domain)
+#
+define(`carpowerpolicy_callback_domain', `
+typeattribute $1 carpowerpolicycallback_domain;
+')
diff --git a/cpp/powerpolicy/src/CarPowerPolicyServer.cpp b/cpp/powerpolicy/src/CarPowerPolicyServer.cpp
new file mode 100644
index 0000000..0636078
--- /dev/null
+++ b/cpp/powerpolicy/src/CarPowerPolicyServer.cpp
@@ -0,0 +1,640 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#define LOG_TAG "carpowerpolicyd"
+#define DEBUG false // STOPSHIP if true.
+
+#include "CarPowerPolicyServer.h"
+
+#include <android-base/file.h>
+#include <android-base/stringprintf.h>
+#include <android/frameworks/automotive/powerpolicy/BnCarPowerPolicyChangeCallback.h>
+#include <binder/IPCThreadState.h>
+#include <binder/IServiceManager.h>
+#include <hidl/HidlTransportSupport.h>
+#include <private/android_filesystem_config.h>
+#include <utils/String8.h>
+#include <utils/Timers.h>
+
+#include <inttypes.h>
+
+namespace android {
+namespace frameworks {
+namespace automotive {
+namespace powerpolicy {
+
+using android::defaultServiceManager;
+using android::base::Error;
+using android::base::Result;
+using android::base::StringAppendF;
+using android::base::StringPrintf;
+using android::base::WriteStringToFd;
+using android::binder::Status;
+using android::hardware::hidl_vec;
+using android::hardware::interfacesEqual;
+using android::hardware::Return;
+using android::hardware::automotive::vehicle::V2_0::IVehicle;
+using android::hardware::automotive::vehicle::V2_0::StatusCode;
+using android::hardware::automotive::vehicle::V2_0::SubscribeFlags;
+using android::hardware::automotive::vehicle::V2_0::SubscribeOptions;
+using android::hardware::automotive::vehicle::V2_0::VehicleApPowerStateReport;
+using android::hardware::automotive::vehicle::V2_0::VehiclePropConfig;
+using android::hardware::automotive::vehicle::V2_0::VehicleProperty;
+using android::hardware::automotive::vehicle::V2_0::VehiclePropValue;
+using android::hidl::base::V1_0::IBase;
+
+namespace {
+
+const int32_t MSG_CONNECT_TO_VHAL = 1; // Message to request of connecting to VHAL.
+
+const nsecs_t kConnectionRetryIntervalNs = 200000000; // 200 milliseconds.
+const int32_t kMaxConnectionRetry = 25; // Retry up to 5 seconds.
+
+constexpr const char* kCarPowerPolicyServerInterface =
+ "android.frameworks.automotive.powerpolicy.ICarPowerPolicyServer/default";
+constexpr const char* kCarPowerPolicySystemNotificationInterface =
+ "carpowerpolicy_system_notification";
+
+std::string toString(const CallbackInfo& callback) {
+ return StringPrintf("callback(pid %d, filter: %s)", callback.pid,
+ toString(callback.filter.components).c_str());
+}
+
+std::vector<CallbackInfo>::const_iterator lookupPowerPolicyChangeCallback(
+ const std::vector<CallbackInfo>& callbacks, const sp<IBinder>& binder) {
+ for (auto it = callbacks.begin(); it != callbacks.end(); it++) {
+ if (BnCarPowerPolicyChangeCallback::asBinder(it->callback) == binder) {
+ return it;
+ }
+ }
+ return callbacks.end();
+}
+
+Status checkSystemPermission() {
+ if (IPCThreadState::self()->getCallingUid() != AID_SYSTEM) {
+ return Status::fromExceptionCode(Status::EX_SECURITY,
+ "Calling process does not have proper privilege");
+ }
+ return Status::ok();
+}
+
+} // namespace
+
+sp<CarPowerPolicyServer> CarPowerPolicyServer::sCarPowerPolicyServer = nullptr;
+
+BinderDeathRecipient::BinderDeathRecipient(const sp<CarPowerPolicyServer>& service) :
+ mService(service) {}
+
+void BinderDeathRecipient::binderDied(const wp<IBinder>& who) {
+ mService->handleBinderDeath(who);
+}
+
+HidlDeathRecipient::HidlDeathRecipient(const sp<CarPowerPolicyServer>& service) :
+ mService(service) {}
+
+void HidlDeathRecipient::serviceDied(uint64_t /*cookie*/, const wp<IBase>& who) {
+ mService->handleHidlDeath(who);
+}
+
+PropertyChangeListener::PropertyChangeListener(const sp<CarPowerPolicyServer>& service) :
+ mService(service) {}
+
+Return<void> PropertyChangeListener::onPropertyEvent(const hidl_vec<VehiclePropValue>& propValues) {
+ for (const auto& value : propValues) {
+ if (value.prop == static_cast<int32_t>(VehicleProperty::POWER_POLICY_GROUP_REQ)) {
+ const auto& ret = mService->setPowerPolicyGroup(value.value.stringValue);
+ if (!ret.ok()) {
+ ALOGW("Failed to set power policy group(%s): %s", value.value.stringValue.c_str(),
+ ret.error().message().c_str());
+ }
+ } else if (value.prop == static_cast<int32_t>(VehicleProperty::POWER_POLICY_REQ)) {
+ const auto& ret = mService->applyPowerPolicy(value.value.stringValue, false, false);
+ if (!ret.ok()) {
+ ALOGW("Failed to apply power policy(%s): %s", value.value.stringValue.c_str(),
+ ret.error().message().c_str());
+ }
+ }
+ }
+ return Return<void>();
+}
+
+Return<void> PropertyChangeListener::onPropertySet(const VehiclePropValue& /*propValue*/) {
+ return Return<void>();
+}
+
+Return<void> PropertyChangeListener::onPropertySetError(StatusCode /*status*/, int32_t /*propId*/,
+ int32_t /*areaId*/) {
+ return Return<void>();
+}
+
+MessageHandlerImpl::MessageHandlerImpl(const sp<CarPowerPolicyServer>& service) :
+ mService(service) {}
+
+void MessageHandlerImpl::handleMessage(const Message& message) {
+ switch (message.what) {
+ case MSG_CONNECT_TO_VHAL:
+ mService->connectToVhalHelper();
+ break;
+ default:
+ ALOGW("Unknown message: %d", message.what);
+ }
+}
+
+CarServiceNotificationHandler::CarServiceNotificationHandler(
+ const sp<CarPowerPolicyServer>& service) :
+ mService(service) {}
+
+status_t CarServiceNotificationHandler::dump(int fd, const Vector<String16>& args) {
+ return mService->dump(fd, args);
+}
+
+Status CarServiceNotificationHandler::notifyCarServiceReady(PolicyState* policyState) {
+ return mService->notifyCarServiceReady(policyState);
+}
+
+Status CarServiceNotificationHandler::notifyPowerPolicyChange(const std::string& policyId) {
+ return mService->notifyPowerPolicyChange(policyId);
+}
+
+Result<sp<CarPowerPolicyServer>> CarPowerPolicyServer::startService(const sp<Looper>& looper) {
+ if (sCarPowerPolicyServer != nullptr) {
+ return Error(INVALID_OPERATION) << "Cannot start service more than once";
+ }
+ sp<CarPowerPolicyServer> server = new CarPowerPolicyServer();
+ const auto& ret = server->init(looper);
+ if (!ret.ok()) {
+ return Error(ret.error().code())
+ << "Failed to start car power policy server: " << ret.error();
+ }
+ sCarPowerPolicyServer = server;
+
+ return sCarPowerPolicyServer;
+}
+
+void CarPowerPolicyServer::terminateService() {
+ if (sCarPowerPolicyServer != nullptr) {
+ sCarPowerPolicyServer->terminate();
+ sCarPowerPolicyServer = nullptr;
+ }
+}
+
+CarPowerPolicyServer::CarPowerPolicyServer() :
+ mCurrentPowerPolicy(nullptr),
+ mLastApplyPowerPolicy(-1),
+ mLastSetDefaultPowerPolicyGroup(-1),
+ mCarServiceInOperation(false) {
+ mMessageHandler = new MessageHandlerImpl(this);
+ mBinderDeathRecipient = new BinderDeathRecipient(this);
+ mHidlDeathRecipient = new HidlDeathRecipient(this);
+ mPropertyChangeListener = new PropertyChangeListener(this);
+ mCarServiceNotificationHandler = new CarServiceNotificationHandler(this);
+}
+
+Status CarPowerPolicyServer::getCurrentPowerPolicy(CarPowerPolicy* aidlReturn) {
+ Mutex::Autolock lock(mMutex);
+ if (mCurrentPowerPolicy == nullptr) {
+ return Status::fromExceptionCode(Status::EX_ILLEGAL_STATE,
+ "The current power policy is not set");
+ }
+ *aidlReturn = *mCurrentPowerPolicy;
+ return Status::ok();
+}
+
+Status CarPowerPolicyServer::getPowerComponentState(PowerComponent componentId, bool* aidlReturn) {
+ const auto& ret = mComponentHandler.getPowerComponentState(componentId);
+ if (!ret.ok()) {
+ std::string errorMsg = ret.error().message();
+ ALOGW("getPowerComponentState(%s) failed: %s", toString(componentId).c_str(),
+ errorMsg.c_str());
+ return Status::fromExceptionCode(Status::EX_ILLEGAL_ARGUMENT, errorMsg.c_str());
+ }
+ *aidlReturn = *ret;
+ return Status::ok();
+}
+
+Status CarPowerPolicyServer::registerPowerPolicyChangeCallback(
+ const sp<ICarPowerPolicyChangeCallback>& callback, const CarPowerPolicyFilter& filter) {
+ Mutex::Autolock lock(mMutex);
+ pid_t callingPid = IPCThreadState::self()->getCallingPid();
+ uid_t callingUid = IPCThreadState::self()->getCallingUid();
+ if (isRegisteredLocked(callback)) {
+ std::string errorStr = StringPrintf("The callback(pid: %d, uid: %d) is already registered.",
+ callingPid, callingUid);
+ const char* errorCause = errorStr.c_str();
+ ALOGW("Cannot register a callback: %s", errorCause);
+ return Status::fromExceptionCode(Status::EX_ILLEGAL_ARGUMENT, errorCause);
+ }
+ sp<IBinder> binder = BnCarPowerPolicyChangeCallback::asBinder(callback);
+ status_t status = binder->linkToDeath(mBinderDeathRecipient);
+ if (status != OK) {
+ std::string errorStr = StringPrintf("The given callback(pid: %d, uid: %d) is dead",
+ callingPid, callingUid);
+ const char* errorCause = errorStr.c_str();
+ ALOGW("Cannot register a callback: %s", errorCause);
+ return Status::fromExceptionCode(Status::EX_ILLEGAL_STATE, errorCause);
+ }
+ mPolicyChangeCallbacks.emplace_back(callback, filter, callingPid);
+
+ if (DEBUG) {
+ ALOGD("Power policy change callback(pid: %d, filter: %s) is registered", callingPid,
+ toString(filter.components).c_str());
+ }
+ return Status::ok();
+}
+
+Status CarPowerPolicyServer::unregisterPowerPolicyChangeCallback(
+ const sp<ICarPowerPolicyChangeCallback>& callback) {
+ Mutex::Autolock lock(mMutex);
+ pid_t callingPid = IPCThreadState::self()->getCallingPid();
+ uid_t callingUid = IPCThreadState::self()->getCallingUid();
+ sp<IBinder> binder = BnCarPowerPolicyChangeCallback::asBinder(callback);
+ auto it = lookupPowerPolicyChangeCallback(mPolicyChangeCallbacks, binder);
+ if (it == mPolicyChangeCallbacks.end()) {
+ std::string errorStr =
+ StringPrintf("The callback(pid: %d, uid: %d) has not been registered", callingPid,
+ callingUid);
+ const char* errorCause = errorStr.c_str();
+ ALOGW("Cannot unregister a callback: %s", errorCause);
+ return Status::fromExceptionCode(Status::EX_ILLEGAL_ARGUMENT, errorCause);
+ }
+ binder->unlinkToDeath(mBinderDeathRecipient);
+ mPolicyChangeCallbacks.erase(it);
+ if (DEBUG) {
+ ALOGD("Power policy change callback(pid: %d, uid: %d) is unregistered", callingPid,
+ callingUid);
+ }
+ return Status::ok();
+}
+
+Status CarPowerPolicyServer::notifyCarServiceReady(PolicyState* policyState) {
+ Status status = checkSystemPermission();
+ if (!status.isOk()) {
+ return status;
+ }
+ Mutex::Autolock lock(mMutex);
+ policyState->policyId = mCurrentPowerPolicy.get() ? mCurrentPowerPolicy->policyId : "";
+ policyState->policyGroupId = mCurrentPolicyGroupId;
+ mCarServiceInOperation = true;
+ ALOGI("CarService is now responsible for power policy management");
+ return Status::ok();
+}
+
+Status CarPowerPolicyServer::notifyPowerPolicyChange(const std::string& policyId) {
+ Status status = checkSystemPermission();
+ if (!status.isOk()) {
+ return status;
+ }
+ const auto& ret = applyPowerPolicy(policyId, true, true);
+ if (!ret.ok()) {
+ return Status::fromExceptionCode(Status::EX_ILLEGAL_STATE,
+ StringPrintf("Failed to notify power policy change: %s",
+ ret.error().message().c_str())
+ .c_str());
+ }
+ return Status::ok();
+}
+
+status_t CarPowerPolicyServer::dump(int fd, const Vector<String16>& args) {
+ {
+ Mutex::Autolock lock(mMutex);
+ const char* indent = " ";
+ const char* doubleIndent = " ";
+ WriteStringToFd("CAR POWER POLICY DAEMON\n", fd);
+ WriteStringToFd(StringPrintf("%sCarService is in operation: %s\n", indent,
+ mCarServiceInOperation ? "true" : "false"),
+ fd);
+ WriteStringToFd(StringPrintf("%sConnection to VHAL: %s\n", indent,
+ mVhalService.get() ? "connected" : "disconnected"),
+ fd);
+ WriteStringToFd(StringPrintf("%sCurrent power policy: %s\n", indent,
+ mCurrentPowerPolicy ? mCurrentPowerPolicy->policyId.c_str()
+ : "not set"),
+ fd);
+ WriteStringToFd(StringPrintf("%sLast timestamp of applying power policy: %" PRId64 "\n",
+ indent, mLastApplyPowerPolicy),
+ fd);
+ WriteStringToFd(StringPrintf("%sCurrent power policy group ID: %s\n", indent,
+ mCurrentPolicyGroupId.empty() ? "not set"
+ : mCurrentPolicyGroupId.c_str()),
+ fd);
+ WriteStringToFd(StringPrintf("%sLast timestamp of setting default power policy group: "
+ "%" PRId64 "\n",
+ indent, mLastSetDefaultPowerPolicyGroup),
+ fd);
+ WriteStringToFd(StringPrintf("%sPolicy change callbacks:%s\n", indent,
+ mPolicyChangeCallbacks.size() ? "" : " none"),
+ fd);
+ for (auto& callback : mPolicyChangeCallbacks) {
+ WriteStringToFd(StringPrintf("%s- %s\n", doubleIndent, toString(callback).c_str()), fd);
+ }
+ }
+ auto ret = mPolicyManager.dump(fd, args);
+ if (!ret.ok()) {
+ ALOGW("Failed to dump power policy handler: %s", ret.error().message().c_str());
+ return ret.error().code();
+ }
+ ret = mComponentHandler.dump(fd, args);
+ if (!ret.ok()) {
+ ALOGW("Failed to dump power component handler: %s", ret.error().message().c_str());
+ return ret.error().code();
+ }
+ return OK;
+}
+
+Result<void> CarPowerPolicyServer::init(const sp<Looper>& looper) {
+ mHandlerLooper = looper;
+ mPolicyManager.init();
+ mComponentHandler.init();
+ checkSilentModeFromKernel();
+
+ status_t status =
+ defaultServiceManager()->addService(String16(kCarPowerPolicyServerInterface), this);
+ if (status != OK) {
+ return Error(status) << "Failed to add carpowerpolicyd to ServiceManager";
+ }
+ status =
+ defaultServiceManager()->addService(String16(
+ kCarPowerPolicySystemNotificationInterface),
+ mCarServiceNotificationHandler);
+ if (status != OK) {
+ return Error(status)
+ << "Failed to add car power policy system notification to ServiceManager";
+ }
+
+ connectToVhal();
+ return {};
+}
+
+void CarPowerPolicyServer::terminate() {
+ {
+ Mutex::Autolock lock(mMutex);
+ for (auto it = mPolicyChangeCallbacks.begin(); it != mPolicyChangeCallbacks.end(); it++) {
+ sp<IBinder> binder = BnCarPowerPolicyChangeCallback::asBinder(it->callback);
+ binder->unlinkToDeath(mBinderDeathRecipient);
+ }
+ mPolicyChangeCallbacks.clear();
+ }
+ mComponentHandler.finalize();
+}
+
+void CarPowerPolicyServer::handleBinderDeath(const wp<IBinder>& who) {
+ Mutex::Autolock lock(mMutex);
+ IBinder* binder = who.unsafe_get();
+ auto it = lookupPowerPolicyChangeCallback(mPolicyChangeCallbacks, binder);
+ if (it != mPolicyChangeCallbacks.end()) {
+ ALOGW("Power policy callback(pid: %d) died", it->pid);
+ binder->unlinkToDeath(mBinderDeathRecipient);
+ mPolicyChangeCallbacks.erase(it);
+ }
+}
+
+void CarPowerPolicyServer::handleHidlDeath(const wp<IBase>& who) {
+ {
+ Mutex::Autolock lock(mMutex);
+ if (!interfacesEqual(mVhalService, who.promote())) {
+ return;
+ }
+ ALOGW("VHAL has died.");
+ mVhalService->unlinkToDeath(mHidlDeathRecipient);
+ mVhalService = nullptr;
+ }
+ connectToVhal();
+}
+
+Result<void> CarPowerPolicyServer::applyPowerPolicy(const std::string& policyId,
+ bool carServiceInOperation,
+ bool notifyClients) {
+ CarPowerPolicyPtr policy = mPolicyManager.getPowerPolicy(policyId);
+ if (policy == nullptr) {
+ return Error()
+ << StringPrintf("Failed to get power policy(%s): The policy is not registered.",
+ policyId.c_str());
+ }
+
+ std::vector<CallbackInfo> clients;
+ {
+ Mutex::Autolock lock(mMutex);
+ if (mCarServiceInOperation != carServiceInOperation) {
+ return Error() << (mCarServiceInOperation
+ ? "After CarService starts serving, power policy cannot be "
+ "managed in car power policy daemon"
+ : "Before CarService starts serving, power policy cannot be "
+ "applied from CarService");
+ }
+ mCurrentPowerPolicy = policy;
+ clients = mPolicyChangeCallbacks;
+ }
+
+ const auto& retApply = mComponentHandler.applyPowerPolicy(policy);
+ if (!retApply.ok()) {
+ ALOGW("Failed to apply power policy(%s): %s", policyId.c_str(),
+ retApply.error().message().c_str());
+ }
+ const auto& retNotify = notifyVhalNewPowerPolicy(policyId);
+ if (!retNotify.ok()) {
+ ALOGW("Failed to tell VHAL the new power policy(%s): %s", policyId.c_str(),
+ retNotify.error().message().c_str());
+ }
+ if (notifyClients) {
+ for (auto client : clients) {
+ client.callback->onPolicyChanged(*policy);
+ }
+ }
+ ALOGI("The current power policy is %s", policyId.c_str());
+ return {};
+}
+
+Result<void> CarPowerPolicyServer::setPowerPolicyGroup(const std::string& groupId) {
+ if (!mPolicyManager.isPowerPolicyGroupAvailable(groupId)) {
+ return Error() << StringPrintf("Power policy group(%s) is not available", groupId.c_str());
+ }
+ Mutex::Autolock lock(mMutex);
+ if (mCarServiceInOperation) {
+ return Error() << "After CarService starts serving, power policy group cannot be set in "
+ "car power policy daemon";
+ }
+ mCurrentPolicyGroupId = groupId;
+ ALOGI("The current power policy group is |%s|", groupId.c_str());
+ return {};
+}
+
+bool CarPowerPolicyServer::isRegisteredLocked(const sp<ICarPowerPolicyChangeCallback>& callback) {
+ sp<IBinder> binder = BnCarPowerPolicyChangeCallback::asBinder(callback);
+ return lookupPowerPolicyChangeCallback(mPolicyChangeCallbacks, binder) !=
+ mPolicyChangeCallbacks.end();
+}
+
+void CarPowerPolicyServer::checkSilentModeFromKernel() {
+ // TODO(b/162599168): check if silent mode is set by kernel.
+}
+
+// This method ensures that the attempt to connect to VHAL occurs in the main thread.
+void CarPowerPolicyServer::connectToVhal() {
+ mRemainingConnectionRetryCount = kMaxConnectionRetry;
+ mHandlerLooper->sendMessage(mMessageHandler, MSG_CONNECT_TO_VHAL);
+}
+
+// connectToVhalHelper is always executed in the main thread.
+void CarPowerPolicyServer::connectToVhalHelper() {
+ {
+ Mutex::Autolock lock(mMutex);
+ if (mVhalService.get() != nullptr) {
+ return;
+ }
+ }
+ sp<IVehicle> vhalService = IVehicle::tryGetService();
+ if (vhalService.get() == nullptr) {
+ ALOGW("Failed to connect to VHAL. Retrying in %" PRId64 " ms.",
+ nanoseconds_to_milliseconds(kConnectionRetryIntervalNs));
+ mRemainingConnectionRetryCount--;
+ if (mRemainingConnectionRetryCount <= 0) {
+ ALOGE("Failed to connect to VHAL after %d attempt%s. Gave up.", kMaxConnectionRetry,
+ kMaxConnectionRetry > 1 ? "s" : "");
+ return;
+ }
+ mHandlerLooper->sendMessageDelayed(kConnectionRetryIntervalNs, mMessageHandler,
+ MSG_CONNECT_TO_VHAL);
+ return;
+ }
+ auto ret = vhalService->linkToDeath(mHidlDeathRecipient, /*cookie=*/0);
+ if (!ret.isOk() || ret == false) {
+ connectToVhal();
+ ALOGW("Failed to connect to VHAL. VHAL is dead. Retrying...");
+ return;
+ }
+ {
+ Mutex::Autolock lock(mMutex);
+ mVhalService = vhalService;
+ }
+ ALOGI("Connected to VHAL");
+ subscribeToVhal();
+ return;
+}
+
+void CarPowerPolicyServer::subscribeToVhal() {
+ subscribeToProperty(static_cast<int32_t>(VehicleProperty::POWER_POLICY_REQ),
+ [this](const VehiclePropValue& value) {
+ if (value.value.stringValue.size() > 0) {
+ const auto& ret =
+ applyPowerPolicy(value.value.stringValue, false, false);
+ if (ret.ok()) {
+ Mutex::Autolock lock(mMutex);
+ mLastApplyPowerPolicy = value.timestamp;
+ } else {
+ ALOGW("Failed to apply power policy(%s): %s",
+ value.value.stringValue.c_str(),
+ ret.error().message().c_str());
+ }
+ }
+ });
+ subscribeToProperty(static_cast<int32_t>(VehicleProperty::POWER_POLICY_GROUP_REQ),
+ [this](const VehiclePropValue& value) {
+ if (value.value.stringValue.size() > 0) {
+ const auto& ret = setPowerPolicyGroup(value.value.stringValue);
+ if (ret.ok()) {
+ Mutex::Autolock lock(mMutex);
+ mLastSetDefaultPowerPolicyGroup = value.timestamp;
+ } else {
+ ALOGW("Failed to set power policy group(%s): %s",
+ value.value.stringValue.c_str(),
+ ret.error().message().c_str());
+ }
+ }
+ });
+}
+
+void CarPowerPolicyServer::subscribeToProperty(
+ int32_t prop, std::function<void(const VehiclePropValue&)> processor) {
+ if (!isPropertySupported(prop)) {
+ ALOGW("Vehicle property(%d) is not supported by VHAL.", prop);
+ return;
+ }
+ VehiclePropValue propValue{
+ .prop = prop,
+ };
+ sp<IVehicle> vhalService;
+ {
+ Mutex::Autolock lock(mMutex);
+ vhalService = mVhalService;
+ }
+ StatusCode status;
+ vhalService->get(propValue, [&status, &propValue](StatusCode s, const VehiclePropValue& value) {
+ status = s;
+ propValue = value;
+ });
+ if (status != StatusCode::OK) {
+ ALOGW("Failed to get vehicle property(%d) value.", prop);
+ return;
+ }
+ processor(propValue);
+ SubscribeOptions reqVhalProperties[] = {
+ {.propId = prop, .flags = SubscribeFlags::EVENTS_FROM_CAR},
+ };
+ hidl_vec<SubscribeOptions> options;
+ options.setToExternal(reqVhalProperties, arraysize(reqVhalProperties));
+ status = vhalService->subscribe(mPropertyChangeListener, options);
+ if (status != StatusCode::OK) {
+ ALOGW("Failed to subscribe to vehicle property(%d).", prop);
+ }
+}
+
+Result<void> CarPowerPolicyServer::notifyVhalNewPowerPolicy(const std::string& policyId) {
+ int32_t prop = static_cast<int32_t>(VehicleProperty::CURRENT_POWER_POLICY);
+ if (!isPropertySupported(prop)) {
+ return Error() << StringPrintf("Vehicle property(%d) is not supported by VHAL.", prop);
+ }
+ VehiclePropValue propValue{
+ .prop = prop,
+ .value = {
+ .stringValue = policyId,
+ },
+ };
+ sp<IVehicle> vhalService;
+ {
+ Mutex::Autolock lock(mMutex);
+ vhalService = mVhalService;
+ }
+ auto ret = vhalService->set(propValue);
+ if (!ret.isOk() || ret != StatusCode::OK) {
+ return Error() << "Failed to set CURRENT_POWER_POLICY property";
+ }
+ return {};
+}
+
+bool CarPowerPolicyServer::isPropertySupported(int32_t prop) {
+ if (mSupportedProperties.count(prop) > 0) {
+ return mSupportedProperties[prop];
+ }
+ StatusCode status;
+ hidl_vec<int32_t> props = {prop};
+ sp<IVehicle> vhalService;
+ {
+ Mutex::Autolock lock(mMutex);
+ vhalService = mVhalService;
+ }
+ vhalService->getPropConfigs(props,
+ [&status](StatusCode s,
+ hidl_vec<VehiclePropConfig> /*propConfigs*/) {
+ status = s;
+ });
+ mSupportedProperties[prop] = status == StatusCode::OK;
+ return mSupportedProperties[prop];
+}
+
+} // namespace powerpolicy
+} // namespace automotive
+} // namespace frameworks
+} // namespace android
diff --git a/cpp/powerpolicy/src/CarPowerPolicyServer.h b/cpp/powerpolicy/src/CarPowerPolicyServer.h
new file mode 100644
index 0000000..b483e8a
--- /dev/null
+++ b/cpp/powerpolicy/src/CarPowerPolicyServer.h
@@ -0,0 +1,192 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#ifndef CPP_POWERPOLICY_SRC_CARPOWERPOLICYSERVER_H_
+#define CPP_POWERPOLICY_SRC_CARPOWERPOLICYSERVER_H_
+
+#include "PolicyManager.h"
+#include "PowerComponentHandler.h"
+
+#include <android-base/result.h>
+#include <android/frameworks/automotive/powerpolicy/BnCarPowerPolicyServer.h>
+#include <android/frameworks/automotive/powerpolicy/BnCarPowerPolicySystemNotification.h>
+#include <android/hardware/automotive/vehicle/2.0/IVehicle.h>
+#include <binder/IBinder.h>
+#include <binder/Status.h>
+#include <utils/Looper.h>
+#include <utils/Mutex.h>
+#include <utils/String16.h>
+#include <utils/StrongPointer.h>
+#include <utils/Vector.h>
+
+#include <unordered_set>
+
+namespace android {
+namespace frameworks {
+namespace automotive {
+namespace powerpolicy {
+
+struct CallbackInfo {
+ CallbackInfo(const sp<ICarPowerPolicyChangeCallback>& callback,
+ const CarPowerPolicyFilter& filter, int32_t pid) :
+ callback(callback),
+ filter(filter),
+ pid(pid) {}
+
+ sp<ICarPowerPolicyChangeCallback> callback;
+ CarPowerPolicyFilter filter;
+ pid_t pid;
+};
+
+// Forward declaration for testing use only.
+namespace internal {
+
+class CarPowerPolicyServerPeer;
+
+} // namespace internal
+
+// Forward declaration for defining binder death handler and property change listener.
+class CarPowerPolicyServer;
+
+class BinderDeathRecipient : public IBinder::DeathRecipient {
+public:
+ explicit BinderDeathRecipient(const sp<CarPowerPolicyServer>& service);
+
+ void binderDied(const wp<IBinder>& who) override;
+
+private:
+ sp<CarPowerPolicyServer> mService;
+};
+
+class HidlDeathRecipient : public hardware::hidl_death_recipient {
+public:
+ explicit HidlDeathRecipient(const sp<CarPowerPolicyServer>& service);
+
+ void serviceDied(uint64_t cookie, const wp<hidl::base::V1_0::IBase>& who) override;
+
+private:
+ sp<CarPowerPolicyServer> mService;
+};
+
+class PropertyChangeListener : public hardware::automotive::vehicle::V2_0::IVehicleCallback {
+public:
+ explicit PropertyChangeListener(const sp<CarPowerPolicyServer>& service);
+
+ hardware::Return<void> onPropertyEvent(
+ const hardware::hidl_vec<hardware::automotive::vehicle::V2_0::VehiclePropValue>&
+ propValues) override;
+ hardware::Return<void> onPropertySet(
+ const hardware::automotive::vehicle::V2_0::VehiclePropValue& propValue);
+ hardware::Return<void> onPropertySetError(
+ hardware::automotive::vehicle::V2_0::StatusCode status, int32_t propId, int32_t areaId);
+
+private:
+ sp<CarPowerPolicyServer> mService;
+};
+
+class MessageHandlerImpl : public MessageHandler {
+public:
+ explicit MessageHandlerImpl(const sp<CarPowerPolicyServer>& service);
+
+ void handleMessage(const Message& message) override;
+
+private:
+ sp<CarPowerPolicyServer> mService;
+};
+
+class CarServiceNotificationHandler : public BnCarPowerPolicySystemNotification {
+public:
+ explicit CarServiceNotificationHandler(const sp<CarPowerPolicyServer>& server);
+
+ status_t dump(int fd, const Vector<String16>& args) override;
+ binder::Status notifyCarServiceReady(PolicyState* policyState) override;
+ binder::Status notifyPowerPolicyChange(const std::string& policyId) override;
+
+private:
+ sp<CarPowerPolicyServer> mService;
+};
+
+class CarPowerPolicyServer : public BnCarPowerPolicyServer {
+public:
+ static base::Result<sp<CarPowerPolicyServer>> startService(const sp<Looper>& looper);
+ static void terminateService();
+
+ status_t dump(int fd, const Vector<String16>& args) override;
+ binder::Status getCurrentPowerPolicy(CarPowerPolicy* aidlReturn) override;
+ binder::Status getPowerComponentState(PowerComponent componentId, bool* aidlReturn) override;
+ binder::Status registerPowerPolicyChangeCallback(
+ const sp<ICarPowerPolicyChangeCallback>& callback,
+ const CarPowerPolicyFilter& filter) override;
+ binder::Status unregisterPowerPolicyChangeCallback(
+ const sp<ICarPowerPolicyChangeCallback>& callback) override;
+
+ void connectToVhalHelper();
+ void handleBinderDeath(const wp<IBinder>& who);
+ void handleHidlDeath(const wp<hidl::base::V1_0::IBase>& who);
+ binder::Status notifyCarServiceReady(PolicyState* policyState);
+ binder::Status notifyPowerPolicyChange(const std::string& policyId);
+ base::Result<void> applyPowerPolicy(const std::string& policyId, bool carServiceInOperation,
+ bool notifyClients);
+ base::Result<void> setPowerPolicyGroup(const std::string& groupId);
+
+private:
+ CarPowerPolicyServer();
+
+ base::Result<void> init(const sp<Looper>& looper);
+ void terminate();
+ bool isRegisteredLocked(const sp<ICarPowerPolicyChangeCallback>& callback);
+ void checkSilentModeFromKernel();
+ void connectToVhal();
+ void subscribeToVhal();
+ void subscribeToProperty(
+ int32_t prop,
+ std::function<void(const hardware::automotive::vehicle::V2_0::VehiclePropValue&)>
+ processor);
+ base::Result<void> notifyVhalNewPowerPolicy(const std::string& policyId);
+ bool isPropertySupported(int32_t prop);
+
+private:
+ static sp<CarPowerPolicyServer> sCarPowerPolicyServer;
+
+ sp<Looper> mHandlerLooper;
+ sp<MessageHandlerImpl> mMessageHandler;
+ PowerComponentHandler mComponentHandler;
+ PolicyManager mPolicyManager;
+ Mutex mMutex;
+ CarPowerPolicyPtr mCurrentPowerPolicy GUARDED_BY(mMutex);
+ std::string mCurrentPolicyGroupId GUARDED_BY(mMutex);
+ std::vector<CallbackInfo> mPolicyChangeCallbacks GUARDED_BY(mMutex);
+ sp<hardware::automotive::vehicle::V2_0::IVehicle> mVhalService GUARDED_BY(mMutex);
+ int64_t mLastApplyPowerPolicy GUARDED_BY(mMutex);
+ int64_t mLastSetDefaultPowerPolicyGroup GUARDED_BY(mMutex);
+ bool mCarServiceInOperation GUARDED_BY(mMutex);
+ std::unordered_map<int32_t, bool> mSupportedProperties;
+ sp<BinderDeathRecipient> mBinderDeathRecipient;
+ sp<HidlDeathRecipient> mHidlDeathRecipient;
+ sp<PropertyChangeListener> mPropertyChangeListener;
+ sp<CarServiceNotificationHandler> mCarServiceNotificationHandler;
+ int32_t mRemainingConnectionRetryCount;
+
+ // For unit tests.
+ friend class internal::CarPowerPolicyServerPeer;
+};
+
+} // namespace powerpolicy
+} // namespace automotive
+} // namespace frameworks
+} // namespace android
+
+#endif // CPP_POWERPOLICY_SRC_CARPOWERPOLICYSERVER_H_
diff --git a/cpp/powerpolicy/src/PolicyManager.cpp b/cpp/powerpolicy/src/PolicyManager.cpp
new file mode 100644
index 0000000..e4d6fc4
--- /dev/null
+++ b/cpp/powerpolicy/src/PolicyManager.cpp
@@ -0,0 +1,537 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#define LOG_TAG "carpowerpolicyd"
+
+#include "PolicyManager.h"
+
+#include <android-base/file.h>
+#include <android-base/stringprintf.h>
+#include <binder/Enums.h>
+
+#include <tinyxml2.h>
+
+#include <cstring>
+#include <unordered_set>
+#include <vector>
+
+namespace android {
+namespace frameworks {
+namespace automotive {
+namespace powerpolicy {
+
+using android::base::Error;
+using android::base::Result;
+using android::base::StringAppendF;
+using android::base::StringPrintf;
+using android::base::WriteStringToFd;
+using android::hardware::automotive::vehicle::V2_0::VehicleApPowerStateReport;
+using tinyxml2::XML_SUCCESS;
+using tinyxml2::XMLDocument;
+using tinyxml2::XMLElement;
+
+namespace {
+
+// Vendor power policy filename.
+constexpr const char* kVendorPolicyFile = "/vendor/etc/power_policy.xml";
+
+// Tags and attributes in vendor power policy XML file.
+constexpr const char* kTagRoot = "powerPolicy";
+constexpr const char* kTagPolicyGroups = "policyGroups";
+constexpr const char* kTagPolicyGroup = "policyGroup";
+constexpr const char* kTagDefaultPolicy = "defaultPolicy";
+constexpr const char* kTagNoDefaultPolicy = "noDefaultPolicy";
+constexpr const char* kTagPolicies = "policies";
+constexpr const char* kTagPolicy = "policy";
+constexpr const char* kTagOtherComponents = "otherComponents";
+constexpr const char* kTagComponent = "component";
+constexpr const char* kTagSystemPolicyOverrides = "systemPolicyOverrides";
+constexpr const char* kAttrBehavior = "behavior";
+constexpr const char* kAttrId = "id";
+constexpr const char* kAttrState = "state";
+
+// Power states.
+constexpr const char* kPowerStateOn = "on";
+constexpr const char* kPowerStateOff = "off";
+constexpr const char* kPowerStateUntouched = "untouched";
+
+// Power transitions that a power policy can be applied with.
+constexpr const char* kPowerTransitionWaitForVhal = "WaitForVHAL";
+constexpr const char* kPowerTransitionOn = "On";
+constexpr const char* kPowerTransitionShutdownStart = "ShutdownStart";
+constexpr const char* kPowerTransitionDeepSleepEntry = "DeepSleepEntry";
+
+const PowerComponent INVALID_POWER_COMPONENT = static_cast<PowerComponent>(-1);
+const int32_t INVALID_VEHICLE_POWER_STATE = -1;
+
+constexpr const char* kPowerComponentPrefix = "POWER_COMPONENT_";
+
+// System power policy definition: ID, enabled components, and disabled components.
+constexpr const char* kSystemPolicyId = "system_power_policy_no_user_interaction";
+const std::vector<PowerComponent> kSystemPolicyEnabledComponents =
+ {PowerComponent::WIFI, PowerComponent::CELLULAR, PowerComponent::ETHERNET,
+ PowerComponent::TRUSTED_DEVICE_DETECTION};
+const std::vector<PowerComponent> kSystemPolicyDisabledComponents =
+ {PowerComponent::AUDIO,
+ PowerComponent::MEDIA,
+ PowerComponent::DISPLAY_MAIN,
+ PowerComponent::DISPLAY_CLUSTER,
+ PowerComponent::DISPLAY_FRONT_PASSENGER,
+ PowerComponent::DISPLAY_REAR_PASSENGER,
+ PowerComponent::BLUETOOTH,
+ PowerComponent::PROJECTION,
+ PowerComponent::NFC,
+ PowerComponent::INPUT,
+ PowerComponent::VOICE_INTERACTION,
+ PowerComponent::VISUAL_INTERACTION};
+const std::unordered_set<PowerComponent> kSystemPolicyConfigurableComponents =
+ {PowerComponent::BLUETOOTH, PowerComponent::NFC, PowerComponent::TRUSTED_DEVICE_DETECTION};
+
+void iterateAllPowerComponents(const std::function<bool(PowerComponent)>& processor) {
+ for (const auto component : enum_range<PowerComponent>()) {
+ if (!processor(component)) {
+ break;
+ }
+ }
+}
+
+PowerComponent toPowerComponent(const char* id) {
+ std::string componentId = id;
+ size_t lenPrefix = strlen(kPowerComponentPrefix);
+ if (componentId.substr(0, lenPrefix) != kPowerComponentPrefix) {
+ return INVALID_POWER_COMPONENT;
+ }
+ componentId = componentId.substr(lenPrefix, std::string::npos);
+ PowerComponent matchedComponent = INVALID_POWER_COMPONENT;
+ iterateAllPowerComponents([componentId, &matchedComponent](PowerComponent component) {
+ if (componentId == toString(component)) {
+ matchedComponent = component;
+ return false;
+ }
+ return true;
+ });
+ return matchedComponent;
+}
+
+const char* safePtrPrint(const char* ptr) {
+ return ptr == nullptr ? "nullptr" : ptr;
+}
+
+int32_t toVehiclePowerState(const char* state) {
+ if (!strcmp(state, kPowerTransitionWaitForVhal)) {
+ return static_cast<int32_t>(VehicleApPowerStateReport::WAIT_FOR_VHAL);
+ }
+ if (!strcmp(state, kPowerTransitionOn)) {
+ return static_cast<int32_t>(VehicleApPowerStateReport::ON);
+ }
+ if (!strcmp(state, kPowerTransitionDeepSleepEntry)) {
+ return static_cast<int32_t>(VehicleApPowerStateReport::DEEP_SLEEP_ENTRY);
+ }
+ if (!strcmp(state, kPowerTransitionShutdownStart)) {
+ return static_cast<int32_t>(VehicleApPowerStateReport::SHUTDOWN_START);
+ }
+ return INVALID_VEHICLE_POWER_STATE;
+}
+
+bool isValidPowerState(int32_t state) {
+ return state != INVALID_VEHICLE_POWER_STATE;
+}
+
+void logXmlError(const std::string& errMsg) {
+ ALOGW("Proceed without registered policies: %s", errMsg.c_str());
+}
+
+Result<void> readComponents(const XMLElement* pPolicy, CarPowerPolicyPtr policy,
+ std::unordered_set<PowerComponent>* visited) {
+ for (const XMLElement* pComponent = pPolicy->FirstChildElement(kTagComponent);
+ pComponent != nullptr; pComponent = pComponent->NextSiblingElement(kTagComponent)) {
+ const char* id;
+ if (pComponent->QueryStringAttribute(kAttrId, &id) != XML_SUCCESS) {
+ return Error() << StringPrintf("Failed to read |%s| attribute in |%s| tag", kAttrId,
+ kTagComponent);
+ }
+ PowerComponent componentId = toPowerComponent(id);
+ if (componentId == INVALID_POWER_COMPONENT) {
+ return Error() << StringPrintf("XML configuration has invalid value(%s) in |%s| "
+ "attribute of |%s| tag",
+ safePtrPrint(id), kAttrId, kTagComponent);
+ }
+ if (visited->count(componentId) > 0) {
+ return Error() << StringPrintf("XML configuration has duplicated component(%s) in |%s| "
+ "attribute of |%s| tag",
+ toString(componentId).c_str(), kAttrId, kTagComponent);
+ }
+ visited->insert(componentId);
+ const char* powerState = pComponent->GetText();
+ if (!strcmp(powerState, kPowerStateOn)) {
+ policy->enabledComponents.push_back(componentId);
+ } else if (!strcmp(powerState, kPowerStateOff)) {
+ policy->disabledComponents.push_back(componentId);
+ } else {
+ return Error() << StringPrintf("XML configuration has invalid value(%s) in |%s| tag",
+ safePtrPrint(powerState), kTagComponent);
+ }
+ }
+ return {};
+}
+
+Result<void> readOtherComponents(const XMLElement* pPolicy, CarPowerPolicyPtr policy,
+ const std::unordered_set<PowerComponent>& visited) {
+ const char* otherComponentBehavior = kPowerStateUntouched;
+ const XMLElement* pElement = pPolicy->FirstChildElement(kTagOtherComponents);
+ if (pElement != nullptr) {
+ if (pElement->QueryStringAttribute(kAttrBehavior, &otherComponentBehavior) != XML_SUCCESS) {
+ return Error() << StringPrintf("Failed to read |%s| attribute in |%s| tag",
+ kAttrBehavior, kTagOtherComponents);
+ }
+ }
+ if (!strcmp(otherComponentBehavior, kPowerStateOn)) {
+ iterateAllPowerComponents([&visited, &policy](PowerComponent component) {
+ if (visited.count(component) == 0) {
+ policy->enabledComponents.push_back(component);
+ }
+ return true;
+ });
+ } else if (!strcmp(otherComponentBehavior, kPowerStateOff)) {
+ iterateAllPowerComponents([&visited, &policy](PowerComponent component) {
+ if (visited.count(component) == 0) {
+ policy->disabledComponents.push_back(component);
+ }
+ return true;
+ });
+ } else if (!strcmp(otherComponentBehavior, kPowerStateUntouched)) {
+ // Do nothing
+ } else {
+ return Error() << StringPrintf("XML configuration has invalid value(%s) in |%s| attribute "
+ "of |%s| tag",
+ safePtrPrint(otherComponentBehavior), kAttrBehavior,
+ kTagOtherComponents);
+ }
+ return {};
+}
+
+Result<std::vector<CarPowerPolicyPtr>> readPolicies(const XMLElement* pRoot, const char* tag,
+ bool includeOtherComponents) {
+ std::vector<CarPowerPolicyPtr> policies;
+ const XMLElement* pPolicies = pRoot->FirstChildElement(tag);
+ if (pPolicies == nullptr) {
+ return std::vector<CarPowerPolicyPtr>();
+ }
+ for (const XMLElement* pPolicy = pPolicies->FirstChildElement(kTagPolicy); pPolicy != nullptr;
+ pPolicy = pPolicy->NextSiblingElement(kTagPolicy)) {
+ std::unordered_set<PowerComponent> visited;
+ const char* policyId;
+ if (pPolicy->QueryStringAttribute(kAttrId, &policyId) != XML_SUCCESS) {
+ return Error() << StringPrintf("Failed to read |%s| attribute in |%s| tag", kAttrId,
+ kTagPolicy);
+ }
+ auto policy = std::make_shared<CarPowerPolicy>();
+ policy->policyId = policyId;
+
+ auto ret = readComponents(pPolicy, policy, &visited);
+ if (!ret.ok()) {
+ return ret.error();
+ }
+ if (includeOtherComponents) {
+ ret = readOtherComponents(pPolicy, policy, visited);
+ if (!ret.ok()) {
+ return ret.error();
+ }
+ }
+ policies.push_back(policy);
+ }
+ return policies;
+}
+
+Result<PolicyGroup> readPolicyGroup(
+ const XMLElement* pPolicyGroup,
+ const std::unordered_map<std::string, CarPowerPolicyPtr>& registeredPowerPolicies) {
+ PolicyGroup policyGroup;
+ for (const XMLElement* pDefaultPolicy = pPolicyGroup->FirstChildElement(kTagDefaultPolicy);
+ pDefaultPolicy != nullptr;
+ pDefaultPolicy = pDefaultPolicy->NextSiblingElement(kTagDefaultPolicy)) {
+ const char* state;
+ if (pDefaultPolicy->QueryStringAttribute(kAttrState, &state) != XML_SUCCESS) {
+ return Error() << StringPrintf("Failed to read |%s| attribute in |%s| tag", kAttrState,
+ kTagDefaultPolicy);
+ }
+ int32_t powerState = toVehiclePowerState(state);
+ if (!isValidPowerState(powerState)) {
+ return Error() << StringPrintf("Target state(%s) is not valid", state);
+ }
+ const char* policyId;
+ if (pDefaultPolicy->QueryStringAttribute(kAttrId, &policyId) != XML_SUCCESS) {
+ return Error() << StringPrintf("Failed to read |%s| attribute in |%s| tag", kAttrId,
+ kTagDefaultPolicy);
+ }
+ if (registeredPowerPolicies.count(policyId) == 0) {
+ return Error() << StringPrintf("Policy(id: %s) is not registered", policyId);
+ }
+ policyGroup.emplace(powerState, policyId);
+ }
+ for (const XMLElement* pNoPolicy = pPolicyGroup->FirstChildElement(kTagNoDefaultPolicy);
+ pNoPolicy != nullptr; pNoPolicy = pNoPolicy->NextSiblingElement(kTagNoDefaultPolicy)) {
+ const char* state;
+ if (pNoPolicy->QueryStringAttribute(kAttrState, &state) != XML_SUCCESS) {
+ return Error() << StringPrintf("Failed to read |%s| attribute in |%s| tag", kAttrState,
+ kTagNoDefaultPolicy);
+ }
+ int32_t powerState = toVehiclePowerState(state);
+ if (!isValidPowerState(powerState)) {
+ return Error() << StringPrintf("Target state(%s) is not valid", state);
+ }
+ if (policyGroup.count(powerState) > 0) {
+ return Error()
+ << StringPrintf("Target state(%s) is specified both in |%s| and |%s| tags",
+ state, kTagDefaultPolicy, kTagNoDefaultPolicy);
+ }
+ }
+ return policyGroup;
+}
+
+Result<std::unordered_map<std::string, PolicyGroup>> readPolicyGroups(
+ const XMLElement* pRoot,
+ const std::unordered_map<std::string, CarPowerPolicyPtr>& registeredPowerPolicies) {
+ const XMLElement* pPolicyGroups = pRoot->FirstChildElement(kTagPolicyGroups);
+ if (pPolicyGroups == nullptr) {
+ return std::unordered_map<std::string, PolicyGroup>();
+ }
+ std::unordered_map<std::string, PolicyGroup> policyGroups;
+
+ for (const XMLElement* pPolicyGroup = pPolicyGroups->FirstChildElement(kTagPolicyGroup);
+ pPolicyGroup != nullptr;
+ pPolicyGroup = pPolicyGroup->NextSiblingElement(kTagPolicyGroup)) {
+ const char* policyGroupId;
+ if (pPolicyGroup->QueryStringAttribute(kAttrId, &policyGroupId) != XML_SUCCESS) {
+ return Error() << StringPrintf("Failed to read |%s| attribute in |%s| tag", kAttrId,
+ kTagPolicyGroup);
+ }
+ const auto& policyGroup = readPolicyGroup(pPolicyGroup, registeredPowerPolicies);
+ if (!policyGroup.ok()) {
+ return Error() << policyGroup.error();
+ }
+ policyGroups.emplace(policyGroupId, *policyGroup);
+ }
+ return policyGroups;
+}
+
+bool isConfigurableComponent(PowerComponent component) {
+ return kSystemPolicyConfigurableComponents.count(component) > 0;
+}
+
+Result<void> checkConfigurableComponents(const std::vector<PowerComponent>& components) {
+ for (auto component : components) {
+ if (!isConfigurableComponent(component)) {
+ return Error()
+ << StringPrintf("Component(%s) is not configurable in system power policy.",
+ toString(component).c_str());
+ }
+ }
+ return {};
+}
+
+Result<std::vector<CarPowerPolicyPtr>> readSystemPolicyOverrides(const XMLElement* pRoot) {
+ const auto& systemPolicyOverrides = readPolicies(pRoot, kTagSystemPolicyOverrides, false);
+ if (!systemPolicyOverrides.ok()) {
+ return Error() << systemPolicyOverrides.error().message();
+ }
+ for (auto policy : *systemPolicyOverrides) {
+ if (policy->policyId != kSystemPolicyId) {
+ return Error() << StringPrintf("System power policy(%s) is not supported.",
+ policy->policyId.c_str());
+ }
+ auto ret = checkConfigurableComponents(policy->enabledComponents);
+ if (!ret.ok()) {
+ return ret.error();
+ }
+ ret = checkConfigurableComponents(policy->disabledComponents);
+ if (!ret.ok()) {
+ return ret.error();
+ }
+ }
+ return systemPolicyOverrides;
+}
+
+// configureComponents assumes that previously validated components are passed.
+void configureComponents(const std::vector<PowerComponent>& configComponents,
+ std::vector<PowerComponent>* componentsAddedTo,
+ std::vector<PowerComponent>* componentsRemovedFrom) {
+ for (const auto component : configComponents) {
+ auto it = std::find(componentsAddedTo->begin(), componentsAddedTo->end(), component);
+ if (it == componentsAddedTo->end()) {
+ componentsAddedTo->push_back(component);
+ }
+ it = std::find(componentsRemovedFrom->begin(), componentsRemovedFrom->end(), component);
+ if (it != componentsRemovedFrom->end()) {
+ componentsRemovedFrom->erase(it);
+ }
+ }
+}
+
+} // namespace
+
+std::string toString(const std::vector<PowerComponent>& components) {
+ size_t size = components.size();
+ if (size == 0) {
+ return "none";
+ }
+ std::string filterStr = toString(components[0]);
+ for (int i = 1; i < size; i++) {
+ StringAppendF(&filterStr, ", %s", toString(components[i]).c_str());
+ }
+ return filterStr;
+}
+
+std::string toString(const CarPowerPolicy& policy) {
+ return StringPrintf("%s(enabledComponents: %s, disabledComponents: %s)",
+ policy.policyId.c_str(), toString(policy.enabledComponents).c_str(),
+ toString(policy.disabledComponents).c_str());
+}
+
+void PolicyManager::init() {
+ mRegisteredPowerPolicies.clear();
+ mPolicyGroups.clear();
+ initSystemPowerPolicy();
+ readPowerPolicyConfiguration();
+}
+
+CarPowerPolicyPtr PolicyManager::getPowerPolicy(const std::string& policyId) const {
+ if (mRegisteredPowerPolicies.count(policyId) == 0) {
+ ALOGW("Policy(id: %s) is not found", policyId.c_str());
+ return nullptr;
+ }
+ return mRegisteredPowerPolicies.at(policyId);
+}
+
+CarPowerPolicyPtr PolicyManager::getDefaultPowerPolicyForState(
+ const std::string& groupId, VehicleApPowerStateReport state) const {
+ if (mPolicyGroups.count(groupId) == 0) {
+ ALOGW("Power policy group(%s) is not available", groupId.c_str());
+ return nullptr;
+ }
+ PolicyGroup policyGroup = mPolicyGroups.at(groupId);
+ int32_t key = static_cast<int32_t>(state);
+ if (policyGroup.count(key) == 0) {
+ ALOGW("Policy for %s is not found", toString(state).c_str());
+ return nullptr;
+ }
+ return mRegisteredPowerPolicies.at(policyGroup.at(key));
+}
+
+CarPowerPolicyPtr PolicyManager::getSystemPowerPolicy() const {
+ return mSystemPowerPolicy;
+}
+
+bool PolicyManager::isPowerPolicyGroupAvailable(const std::string& groupId) const {
+ return mPolicyGroups.count(groupId) > 0;
+}
+
+Result<void> PolicyManager::dump(int fd, const Vector<String16>& /*args*/) {
+ const char* indent = " ";
+ const char* doubleIndent = " ";
+ const char* tripleIndent = " ";
+
+ WriteStringToFd(StringPrintf("%sRegistered power policies:%s\n", indent,
+ mRegisteredPowerPolicies.size() ? "" : " none"),
+ fd);
+ for (auto& it : mRegisteredPowerPolicies) {
+ WriteStringToFd(StringPrintf("%s- %s\n", doubleIndent, toString(*it.second).c_str()), fd);
+ }
+ WriteStringToFd(StringPrintf("%sPower policy groups:%s\n", indent,
+ mPolicyGroups.size() ? "" : " none"),
+ fd);
+ for (auto& itGroup : mPolicyGroups) {
+ WriteStringToFd(StringPrintf("%s%s\n", doubleIndent, itGroup.first.c_str()), fd);
+ for (auto& itMapping : itGroup.second) {
+ VehicleApPowerStateReport state =
+ static_cast<VehicleApPowerStateReport>(itMapping.first);
+ WriteStringToFd(StringPrintf("%s- %s --> %s\n", tripleIndent, toString(state).c_str(),
+ itMapping.second.c_str()),
+ fd);
+ }
+ }
+ WriteStringToFd(StringPrintf("%sSystem power policy: %s\n", indent,
+ toString(*mSystemPowerPolicy).c_str()),
+ fd);
+ return {};
+}
+
+void PolicyManager::readPowerPolicyConfiguration() {
+ XMLDocument xmlDoc;
+ xmlDoc.LoadFile(kVendorPolicyFile);
+ if (xmlDoc.ErrorID() != XML_SUCCESS) {
+ logXmlError(StringPrintf("Failed to read and/or parse %s", kVendorPolicyFile));
+ return;
+ }
+ readPowerPolicyFromXml(xmlDoc);
+}
+
+void PolicyManager::readPowerPolicyFromXml(const XMLDocument& xmlDoc) {
+ const XMLElement* pRootElement = xmlDoc.RootElement();
+ if (!pRootElement || strcmp(pRootElement->Name(), kTagRoot)) {
+ logXmlError(StringPrintf("XML file is not in the required format"));
+ return;
+ }
+ const auto& registeredPolicies = readPolicies(pRootElement, kTagPolicies, true);
+ if (!registeredPolicies.ok()) {
+ logXmlError(StringPrintf("Reading policies failed: %s",
+ registeredPolicies.error().message().c_str()));
+ return;
+ }
+ std::unordered_map<std::string, CarPowerPolicyPtr> registeredPoliciesMap;
+ for (auto policy : *registeredPolicies) {
+ registeredPoliciesMap.emplace(policy->policyId, policy);
+ }
+ const auto& policyGroups = readPolicyGroups(pRootElement, registeredPoliciesMap);
+ if (!policyGroups.ok()) {
+ logXmlError(StringPrintf("Reading power policy groups for power state failed: %s",
+ policyGroups.error().message().c_str()));
+ return;
+ }
+ const auto& systemPolicyOverrides = readSystemPolicyOverrides(pRootElement);
+ if (!systemPolicyOverrides.ok()) {
+ logXmlError(StringPrintf("Reading system power policy overrides failed: %s",
+ systemPolicyOverrides.error().message().c_str()));
+ return;
+ }
+
+ mRegisteredPowerPolicies = registeredPoliciesMap;
+ mPolicyGroups = *policyGroups;
+ reconstructSystemPolicies(*systemPolicyOverrides);
+}
+
+void PolicyManager::reconstructSystemPolicies(
+ const std::vector<CarPowerPolicyPtr>& policyOverrides) {
+ for (auto policy : policyOverrides) {
+ configureComponents(policy->enabledComponents, &mSystemPowerPolicy->enabledComponents,
+ &mSystemPowerPolicy->disabledComponents);
+ configureComponents(policy->disabledComponents, &mSystemPowerPolicy->disabledComponents,
+ &mSystemPowerPolicy->enabledComponents);
+ }
+}
+
+void PolicyManager::initSystemPowerPolicy() {
+ CarPowerPolicyPtr systemPolicy = std::make_shared<CarPowerPolicy>();
+ systemPolicy->policyId = kSystemPolicyId;
+ systemPolicy->enabledComponents = kSystemPolicyEnabledComponents;
+ systemPolicy->disabledComponents = kSystemPolicyDisabledComponents;
+ mSystemPowerPolicy = std::move(systemPolicy);
+}
+
+} // namespace powerpolicy
+} // namespace automotive
+} // namespace frameworks
+} // namespace android
diff --git a/cpp/powerpolicy/src/PolicyManager.h b/cpp/powerpolicy/src/PolicyManager.h
new file mode 100644
index 0000000..ec5babe
--- /dev/null
+++ b/cpp/powerpolicy/src/PolicyManager.h
@@ -0,0 +1,85 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#ifndef CPP_POWERPOLICY_SRC_POLICYMANAGER_H_
+#define CPP_POWERPOLICY_SRC_POLICYMANAGER_H_
+
+#include <android-base/result.h>
+#include <android/frameworks/automotive/powerpolicy/CarPowerPolicy.h>
+#include <android/hardware/automotive/vehicle/2.0/IVehicle.h>
+
+#include <tinyxml2.h>
+
+#include <memory>
+#include <string>
+#include <unordered_map>
+
+namespace android {
+namespace frameworks {
+namespace automotive {
+namespace powerpolicy {
+
+std::string toString(const CarPowerPolicy& policy);
+std::string toString(const std::vector<PowerComponent>& components);
+
+using CarPowerPolicyPtr = std::shared_ptr<CarPowerPolicy>;
+using PolicyGroup = std::unordered_map<int32_t, std::string>;
+
+// Forward declaration for testing use only.
+namespace internal {
+
+class PolicyManagerPeer;
+
+} // namespace internal
+
+/**
+ * PolicyManager manages power policies, power policy mapping to power transision, and system power
+ * policy.
+ * It reads vendor policy information from /vendor/etc/power_policy.xml. If the XML file is invalid,
+ * no power policy is registered and the system power policy is set to default.
+ */
+class PolicyManager {
+public:
+ void init();
+ CarPowerPolicyPtr getPowerPolicy(const std::string& policyId) const;
+ CarPowerPolicyPtr getDefaultPowerPolicyForState(
+ const std::string& groupId,
+ hardware::automotive::vehicle::V2_0::VehicleApPowerStateReport state) const;
+ CarPowerPolicyPtr getSystemPowerPolicy() const;
+ bool isPowerPolicyGroupAvailable(const std::string& groupId) const;
+ base::Result<void> dump(int fd, const Vector<String16>& args);
+
+private:
+ void initSystemPowerPolicy();
+ void readPowerPolicyConfiguration();
+ void readPowerPolicyFromXml(const tinyxml2::XMLDocument& xmlDoc);
+ void reconstructSystemPolicies(const std::vector<CarPowerPolicyPtr>& policyOverrides);
+
+private:
+ std::unordered_map<std::string, CarPowerPolicyPtr> mRegisteredPowerPolicies;
+ CarPowerPolicyPtr mSystemPowerPolicy;
+ std::unordered_map<std::string, PolicyGroup> mPolicyGroups;
+
+ // For unit tests.
+ friend class internal::PolicyManagerPeer;
+};
+
+} // namespace powerpolicy
+} // namespace automotive
+} // namespace frameworks
+} // namespace android
+
+#endif // CPP_POWERPOLICY_SRC_POLICYMANAGER_H_
diff --git a/cpp/powerpolicy/src/PowerComponentHandler.cpp b/cpp/powerpolicy/src/PowerComponentHandler.cpp
new file mode 100644
index 0000000..da29a71
--- /dev/null
+++ b/cpp/powerpolicy/src/PowerComponentHandler.cpp
@@ -0,0 +1,52 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#define LOG_TAG "carpowerpolicyd"
+#define DEBUG false // STOPSHIP if true.
+
+#include "PowerComponentHandler.h"
+
+namespace android {
+namespace frameworks {
+namespace automotive {
+namespace powerpolicy {
+
+using android::base::Error;
+using android::base::Result;
+
+void PowerComponentHandler::init() {
+}
+
+void PowerComponentHandler::finalize() {
+}
+
+Result<void> PowerComponentHandler::applyPowerPolicy(CarPowerPolicyPtr /*powerPolicy*/) {
+ // TODO(b/162600133): change power states of components according to the power policy.
+ return Error(-1) << "Not implemented";
+}
+
+Result<bool> PowerComponentHandler::getPowerComponentState(PowerComponent /*componentId*/) {
+ return Error(-1) << "Not implemented";
+}
+
+Result<void> PowerComponentHandler::dump(int /*fd*/, const Vector<String16>& /*args*/) {
+ return {};
+}
+
+} // namespace powerpolicy
+} // namespace automotive
+} // namespace frameworks
+} // namespace android
diff --git a/cpp/powerpolicy/src/PowerComponentHandler.h b/cpp/powerpolicy/src/PowerComponentHandler.h
new file mode 100644
index 0000000..f55d813
--- /dev/null
+++ b/cpp/powerpolicy/src/PowerComponentHandler.h
@@ -0,0 +1,54 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#ifndef CPP_POWERPOLICY_SRC_POWERCOMPONENTHANDLER_H_
+#define CPP_POWERPOLICY_SRC_POWERCOMPONENTHANDLER_H_
+
+#include "PowerComponentMediator.h"
+
+#include <android-base/result.h>
+#include <android/frameworks/automotive/powerpolicy/CarPowerPolicy.h>
+
+#include <memory>
+#include <unordered_map>
+
+namespace android {
+namespace frameworks {
+namespace automotive {
+namespace powerpolicy {
+
+using CarPowerPolicyPtr = std::shared_ptr<CarPowerPolicy>;
+
+class PowerComponentHandler final {
+public:
+ PowerComponentHandler() {}
+
+ void init();
+ void finalize();
+ base::Result<void> applyPowerPolicy(CarPowerPolicyPtr powerPolicy);
+ base::Result<bool> getPowerComponentState(PowerComponent componentId);
+ base::Result<void> dump(int fd, const Vector<String16>& args);
+
+private:
+ std::unordered_map<PowerComponent, PowerComponentMediator*> mComponentMediators;
+};
+
+} // namespace powerpolicy
+} // namespace automotive
+} // namespace frameworks
+} // namespace android
+
+#endif // CPP_POWERPOLICY_SRC_POWERCOMPONENTHANDLER_H_
diff --git a/cpp/powerpolicy/src/PowerComponentMediator.h b/cpp/powerpolicy/src/PowerComponentMediator.h
new file mode 100644
index 0000000..f3335cf
--- /dev/null
+++ b/cpp/powerpolicy/src/PowerComponentMediator.h
@@ -0,0 +1,49 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#ifndef CPP_POWERPOLICY_SRC_POWERCOMPONENTMEDIATOR_H_
+#define CPP_POWERPOLICY_SRC_POWERCOMPONENTMEDIATOR_H_
+
+#include <android-base/result.h>
+#include <utils/RefBase.h>
+
+#include <functional>
+#include <string>
+
+namespace android {
+namespace frameworks {
+namespace automotive {
+namespace powerpolicy {
+
+using powerStateChangeCallback = std::function<void(bool, std::string)>;
+
+class PowerComponentMediator : public RefBase {
+public:
+ // Changes the power state and the result is delivered back through callback function.
+ virtual base::Result<void> changePowerState(bool powerOn,
+ powerStateChangeCallback callback) = 0;
+ // Returns the current power state.
+ virtual bool getPowerState() = 0;
+ // Returns whether the power is supported by the device.
+ virtual bool isSupported() = 0;
+};
+
+} // namespace powerpolicy
+} // namespace automotive
+} // namespace frameworks
+} // namespace android
+
+#endif // CPP_POWERPOLICY_SRC_POWERCOMPONENTMEDIATOR_H_
diff --git a/cpp/powerpolicy/src/main.cpp b/cpp/powerpolicy/src/main.cpp
new file mode 100644
index 0000000..3a74aa0
--- /dev/null
+++ b/cpp/powerpolicy/src/main.cpp
@@ -0,0 +1,84 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#define LOG_TAG "carpowerpolicyd"
+
+#include "CarPowerPolicyServer.h"
+
+#include <android-base/result.h>
+#include <binder/IPCThreadState.h>
+#include <binder/ProcessState.h>
+#include <log/log.h>
+#include <signal.h>
+#include <utils/Looper.h>
+#include <utils/StrongPointer.h>
+
+using android::IPCThreadState;
+using android::Looper;
+using android::ProcessState;
+using android::sp;
+using android::frameworks::automotive::powerpolicy::CarPowerPolicyServer;
+
+namespace {
+
+const size_t kMaxBinderThreadCount = 2;
+
+void sigHandler(int sig) {
+ IPCThreadState::self()->stopProcess();
+ CarPowerPolicyServer::terminateService();
+ ALOGW("powerpolicy daemon terminated on receiving signal %d.", sig);
+ exit(1);
+}
+
+void registerSigHandler() {
+ struct sigaction sa;
+ sigemptyset(&sa.sa_mask);
+ sa.sa_flags = 0;
+ sa.sa_handler = sigHandler;
+ sigaction(SIGQUIT, &sa, nullptr);
+ sigaction(SIGTERM, &sa, nullptr);
+}
+
+} // namespace
+
+int main(int /*argc*/, char** /*argv*/) {
+ registerSigHandler();
+
+ // Set up the binder
+ sp<ProcessState> ps(ProcessState::self());
+ ps->setThreadPoolMaxThreadCount(kMaxBinderThreadCount);
+ ps->startThreadPool();
+ ps->giveThreadPoolName();
+ IPCThreadState::self()->disableBackgroundScheduling(true);
+
+ // Set up the looper
+ sp<Looper> looper(Looper::prepare(/*opts=*/0));
+
+ // Start the services
+ auto result = CarPowerPolicyServer::startService(looper);
+ if (!result.ok()) {
+ ALOGE("Failed to start service: %s", result.error().message().c_str());
+ CarPowerPolicyServer::terminateService();
+ exit(result.error().code());
+ }
+
+ while (true) {
+ looper->pollAll(/*timeoutMillis=*/-1);
+ }
+ ALOGW("Car power policy server escaped from its loop.");
+
+ return 0;
+}
diff --git a/cpp/powerpolicy/tests/CarPowerPolicyServerTest.cpp b/cpp/powerpolicy/tests/CarPowerPolicyServerTest.cpp
new file mode 100644
index 0000000..f254527
--- /dev/null
+++ b/cpp/powerpolicy/tests/CarPowerPolicyServerTest.cpp
@@ -0,0 +1,142 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#include "CarPowerPolicyServer.h"
+
+#include <gmock/gmock.h>
+#include <utils/Looper.h>
+#include <utils/StrongPointer.h>
+
+namespace android {
+namespace frameworks {
+namespace automotive {
+namespace powerpolicy {
+
+using binder::Status;
+using ::testing::_;
+using ::testing::Return;
+
+namespace {
+
+class MockBinder : public BBinder {
+public:
+ MOCK_METHOD(status_t, linkToDeath,
+ (const sp<DeathRecipient>& recipient, void* cookie, uint32_t flags), (override));
+ MOCK_METHOD(status_t, unlinkToDeath,
+ (const wp<DeathRecipient>& recipient, void* cookie, uint32_t flags,
+ wp<DeathRecipient>* outRecipient),
+ (override));
+};
+
+class MockPowerPolicyChangeCallback : public ICarPowerPolicyChangeCallbackDefault {
+public:
+ MockPowerPolicyChangeCallback() { mBinder = new MockBinder(); }
+
+ MOCK_METHOD(IBinder*, onAsBinder, (), (override));
+
+ void expectLinkToDeathStatus(status_t linkToDeathResult) {
+ EXPECT_CALL(*mBinder, linkToDeath(_, nullptr, 0)).WillRepeatedly(Return(linkToDeathResult));
+ EXPECT_CALL(*mBinder, unlinkToDeath(_, nullptr, 0, nullptr)).WillRepeatedly(Return(OK));
+ EXPECT_CALL(*this, onAsBinder()).WillRepeatedly(Return(mBinder.get()));
+ }
+
+private:
+ sp<MockBinder> mBinder;
+};
+
+} // namespace
+
+namespace internal {
+
+class CarPowerPolicyServerPeer : public RefBase {
+public:
+ CarPowerPolicyServerPeer() { server = new CarPowerPolicyServer(); }
+
+ Status getCurrentPowerPolicy(CarPowerPolicy* aidlReturn) {
+ return server->getCurrentPowerPolicy(aidlReturn);
+ }
+ Status registerPowerPolicyChangeCallback(const sp<ICarPowerPolicyChangeCallback>& callback,
+ const CarPowerPolicyFilter& filter) {
+ return server->registerPowerPolicyChangeCallback(callback, filter);
+ }
+ Status unregisterPowerPolicyChangeCallback(const sp<ICarPowerPolicyChangeCallback>& callback) {
+ return server->unregisterPowerPolicyChangeCallback(callback);
+ }
+
+ sp<CarPowerPolicyServer> server;
+};
+
+} // namespace internal
+
+class CarPowerPolicyServerTest : public ::testing::Test {};
+
+TEST_F(CarPowerPolicyServerTest, TestRegisterCallback) {
+ sp<internal::CarPowerPolicyServerPeer> server = new internal::CarPowerPolicyServerPeer();
+ sp<MockPowerPolicyChangeCallback> callbackOne = new MockPowerPolicyChangeCallback();
+ callbackOne->expectLinkToDeathStatus(OK);
+
+ CarPowerPolicyFilter filter;
+ Status status = server->registerPowerPolicyChangeCallback(callbackOne, filter);
+ ASSERT_TRUE(status.isOk()) << status;
+ status = server->registerPowerPolicyChangeCallback(callbackOne, filter);
+ ASSERT_FALSE(status.isOk()) << "Duplicated registration is not allowed";
+ filter.components = {PowerComponent::BLUETOOTH, PowerComponent::AUDIO};
+ status = server->registerPowerPolicyChangeCallback(callbackOne, filter);
+ ASSERT_FALSE(status.isOk()) << "Duplicated registration is not allowed";
+
+ sp<MockPowerPolicyChangeCallback> callbackTwo = new MockPowerPolicyChangeCallback();
+ callbackTwo->expectLinkToDeathStatus(OK);
+
+ status = server->registerPowerPolicyChangeCallback(callbackTwo, filter);
+ ASSERT_TRUE(status.isOk()) << status;
+}
+
+TEST_F(CarPowerPolicyServerTest, TestRegisterCallback_BinderDied) {
+ sp<internal::CarPowerPolicyServerPeer> server = new internal::CarPowerPolicyServerPeer();
+ sp<MockPowerPolicyChangeCallback> callback = new MockPowerPolicyChangeCallback();
+ callback->expectLinkToDeathStatus(DEAD_OBJECT);
+ CarPowerPolicyFilter filter;
+
+ ASSERT_FALSE(server->registerPowerPolicyChangeCallback(callback, filter).isOk())
+ << "When linkToDeath fails, registerPowerPolicyChangeCallback should return an error";
+}
+
+TEST_F(CarPowerPolicyServerTest, TestUnregisterCallback) {
+ sp<internal::CarPowerPolicyServerPeer> server = new internal::CarPowerPolicyServerPeer();
+ sp<MockPowerPolicyChangeCallback> callback = new MockPowerPolicyChangeCallback();
+ callback->expectLinkToDeathStatus(OK);
+ CarPowerPolicyFilter filter;
+
+ server->registerPowerPolicyChangeCallback(callback, filter);
+ Status status = server->unregisterPowerPolicyChangeCallback(callback);
+ ASSERT_TRUE(status.isOk()) << status;
+ ASSERT_FALSE(server->unregisterPowerPolicyChangeCallback(callback).isOk())
+ << "Unregistering an unregistered powerpolicy change callback should return an error";
+}
+
+TEST_F(CarPowerPolicyServerTest, TestGetCurrentPowerPolicy) {
+ sp<internal::CarPowerPolicyServerPeer> server = new internal::CarPowerPolicyServerPeer();
+ CarPowerPolicy currentPolicy;
+
+ Status status = server->getCurrentPowerPolicy(¤tPolicy);
+ ASSERT_FALSE(status.isOk()) << "The current policy at creation should be null";
+ // TODO(b/168545262): Add more test cases after VHAL integration is complete.
+}
+
+} // namespace powerpolicy
+} // namespace automotive
+} // namespace frameworks
+} // namespace android
diff --git a/cpp/powerpolicy/tests/PolicyManagerTest.cpp b/cpp/powerpolicy/tests/PolicyManagerTest.cpp
new file mode 100644
index 0000000..d5c53eb
--- /dev/null
+++ b/cpp/powerpolicy/tests/PolicyManagerTest.cpp
@@ -0,0 +1,383 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#include "PolicyManager.h"
+
+#include <android-base/file.h>
+#include <android/hardware/automotive/vehicle/2.0/IVehicle.h>
+#include <gmock/gmock.h>
+
+#include <unordered_set>
+
+namespace android {
+namespace frameworks {
+namespace automotive {
+namespace powerpolicy {
+
+using android::hardware::automotive::vehicle::V2_0::VehicleApPowerStateReport;
+using tinyxml2::XML_SUCCESS;
+using tinyxml2::XMLDocument;
+
+namespace {
+
+constexpr const char* kDirPrefix = "/tests/data/";
+
+constexpr const char* kValidPowerPolicyXmlFile = "valid_power_policy.xml";
+constexpr const char* kValidPowerPolicyNoPowerPolicyGroupsXmlFile =
+ "valid_power_policy_no_power_policy_groups.xml";
+constexpr const char* kValidPowerPolicyNoSystemPowerPolicyXmlFile =
+ "valid_power_policy_no_system_power_policy.xml";
+constexpr const char* kValidPowerPolicyPowerPoliciesOnlyXmlFile =
+ "valid_power_policy_policies_only.xml";
+constexpr const char* kValidPowerPolicySystemPowerPolicyOnlyXmlFile =
+ "valid_power_policy_system_power_policy_only.xml";
+const std::vector<const char*> kInvalidPowerPolicyXmlFiles =
+ {"invalid_power_policy_incorrect_othercomponent.xml",
+ "invalid_power_policy_incorrect_value.xml", "invalid_power_policy_unknown_component.xml"};
+const std::vector<const char*> kInvalidPowerPolicyGroupXmlFiles =
+ {"invalid_power_policy_group_incorrect_state.xml",
+ "invalid_power_policy_group_missing_policy.xml"};
+const std::vector<const char*> kInvalidSystemPowerPolicyXmlFiles =
+ {"invalid_system_power_policy_incorrect_component.xml",
+ "invalid_system_power_policy_incorrect_id.xml"};
+
+constexpr const char* kExistingPowerPolicyId = "expected_to_be_registered";
+constexpr const char* kExistingPowerPolicyId_OtherOff = "policy_id_other_off";
+constexpr const char* kExistingPowerPolicyId_OtherOn = "policy_id_other_on";
+constexpr const char* kExistingPowerPolicyId_OtherUntouched = "policy_id_other_untouched";
+constexpr const char* kExistingPowerPolicyId_OtherNone = "policy_id_other_none";
+constexpr const char* kNonExistingPowerPolicyId = "non_existing_power_poicy_id";
+constexpr const char* kValidPowerPolicyGroupId = "mixed_policy_group";
+constexpr const char* kInvalidPowerPolicyGroupId = "invalid_policy_group";
+
+const VehicleApPowerStateReport kExistingTransition = VehicleApPowerStateReport::WAIT_FOR_VHAL;
+const VehicleApPowerStateReport kNonExistingTransition = static_cast<VehicleApPowerStateReport>(-1);
+
+CarPowerPolicy createCarPowerPolicy(const std::string& id,
+ const std::vector<PowerComponent>& enabledComponents,
+ const std::vector<PowerComponent>& disabledComponents) {
+ CarPowerPolicy policy;
+ policy.policyId = id;
+ policy.enabledComponents = enabledComponents;
+ policy.disabledComponents = disabledComponents;
+ return policy;
+}
+
+const CarPowerPolicy kExistingPowerPolicy_OtherOff =
+ createCarPowerPolicy("policy_id_other_off", {PowerComponent::WIFI},
+ {PowerComponent::AUDIO, PowerComponent::MEDIA,
+ PowerComponent::DISPLAY_MAIN, PowerComponent::DISPLAY_CLUSTER,
+ PowerComponent::DISPLAY_FRONT_PASSENGER,
+ PowerComponent::DISPLAY_REAR_PASSENGER, PowerComponent::BLUETOOTH,
+ PowerComponent::CELLULAR, PowerComponent::ETHERNET,
+ PowerComponent::PROJECTION, PowerComponent::NFC,
+ PowerComponent::INPUT, PowerComponent::VOICE_INTERACTION,
+ PowerComponent::VISUAL_INTERACTION,
+ PowerComponent::TRUSTED_DEVICE_DETECTION});
+const CarPowerPolicy kExistingPowerPolicy_OtherOn =
+ createCarPowerPolicy("policy_id_other_on",
+ {PowerComponent::MEDIA, PowerComponent::DISPLAY_MAIN,
+ PowerComponent::DISPLAY_FRONT_PASSENGER,
+ PowerComponent::DISPLAY_REAR_PASSENGER, PowerComponent::BLUETOOTH,
+ PowerComponent::WIFI, PowerComponent::CELLULAR,
+ PowerComponent::ETHERNET, PowerComponent::PROJECTION,
+ PowerComponent::NFC, PowerComponent::INPUT},
+ {PowerComponent::AUDIO, PowerComponent::DISPLAY_CLUSTER,
+ PowerComponent::VOICE_INTERACTION, PowerComponent::VISUAL_INTERACTION,
+ PowerComponent::TRUSTED_DEVICE_DETECTION});
+const CarPowerPolicy kExistingPowerPolicy_OtherUntouched =
+ createCarPowerPolicy("policy_id_other_untouched",
+ {PowerComponent::AUDIO, PowerComponent::DISPLAY_MAIN,
+ PowerComponent::BLUETOOTH, PowerComponent::WIFI,
+ PowerComponent::VOICE_INTERACTION, PowerComponent::VISUAL_INTERACTION,
+ PowerComponent::TRUSTED_DEVICE_DETECTION},
+ {});
+const CarPowerPolicy kExistingPowerPolicy_OtherNone =
+ createCarPowerPolicy("policy_id_other_none", {PowerComponent::WIFI},
+ {PowerComponent::AUDIO, PowerComponent::DISPLAY_FRONT_PASSENGER,
+ PowerComponent::VOICE_INTERACTION, PowerComponent::VISUAL_INTERACTION,
+ PowerComponent::TRUSTED_DEVICE_DETECTION});
+const CarPowerPolicy& kExistingTransitionPolicy = kExistingPowerPolicy_OtherOn;
+const CarPowerPolicy kDefaultSystemPowerPolicy =
+ createCarPowerPolicy("system_power_policy_no_user_interaction",
+ {PowerComponent::WIFI, PowerComponent::CELLULAR,
+ PowerComponent::ETHERNET, PowerComponent::TRUSTED_DEVICE_DETECTION},
+ {PowerComponent::AUDIO, PowerComponent::MEDIA,
+ PowerComponent::DISPLAY_MAIN, PowerComponent::DISPLAY_CLUSTER,
+ PowerComponent::DISPLAY_FRONT_PASSENGER,
+ PowerComponent::DISPLAY_REAR_PASSENGER, PowerComponent::BLUETOOTH,
+ PowerComponent::PROJECTION, PowerComponent::NFC,
+ PowerComponent::INPUT, PowerComponent::VOICE_INTERACTION,
+ PowerComponent::VISUAL_INTERACTION});
+const CarPowerPolicy kModifiedSystemPowerPolicy =
+ createCarPowerPolicy("system_power_policy_no_user_interaction",
+ {PowerComponent::BLUETOOTH, PowerComponent::WIFI,
+ PowerComponent::CELLULAR, PowerComponent::ETHERNET,
+ PowerComponent::NFC},
+ {PowerComponent::AUDIO, PowerComponent::MEDIA,
+ PowerComponent::DISPLAY_MAIN, PowerComponent::DISPLAY_CLUSTER,
+ PowerComponent::DISPLAY_FRONT_PASSENGER,
+ PowerComponent::DISPLAY_REAR_PASSENGER, PowerComponent::PROJECTION,
+ PowerComponent::INPUT, PowerComponent::VOICE_INTERACTION,
+ PowerComponent::VISUAL_INTERACTION,
+ PowerComponent::TRUSTED_DEVICE_DETECTION});
+
+std::string getTestDataPath(const char* filename) {
+ static std::string baseDir = android::base::GetExecutableDirectory();
+ return baseDir + kDirPrefix + filename;
+}
+
+bool compareComponents(const std::vector<PowerComponent>& a, const std::vector<PowerComponent>& b) {
+ int lenA = a.size();
+ int lenB = b.size();
+ if (lenA != lenB) {
+ return false;
+ }
+ std::unordered_set<PowerComponent> componentSet;
+ for (const auto component : a) {
+ componentSet.insert(component);
+ }
+ for (const auto component : b) {
+ if (componentSet.count(component) == 0) {
+ return false;
+ }
+ componentSet.erase(component);
+ }
+ return componentSet.size() == 0;
+}
+
+bool isEqual(const CarPowerPolicy& a, const CarPowerPolicy& b) {
+ return a.policyId == a.policyId &&
+ compareComponents(a.enabledComponents, b.enabledComponents) &&
+ compareComponents(a.disabledComponents, b.disabledComponents);
+}
+
+void checkPolicies(const PolicyManager& policyManager) {
+ ASSERT_TRUE(policyManager.getPowerPolicy(kNonExistingPowerPolicyId).get() == nullptr);
+
+ // otherComponents behavior = off
+ CarPowerPolicyPtr policy = policyManager.getPowerPolicy(kExistingPowerPolicyId_OtherOff);
+ ASSERT_TRUE(policy.get() != nullptr);
+ ASSERT_TRUE(isEqual(*policy, kExistingPowerPolicy_OtherOff));
+ // otherComponents behavior = on
+ policy = policyManager.getPowerPolicy(kExistingPowerPolicyId_OtherOn);
+ ASSERT_TRUE(policy.get() != nullptr);
+ ASSERT_TRUE(isEqual(*policy, kExistingPowerPolicy_OtherOn));
+ // otherComponents behavior = untouched
+ policy = policyManager.getPowerPolicy(kExistingPowerPolicyId_OtherUntouched);
+ ASSERT_TRUE(policy.get() != nullptr);
+ ASSERT_TRUE(isEqual(*policy, kExistingPowerPolicy_OtherUntouched));
+ // otherComponents behavior = none
+ policy = policyManager.getPowerPolicy(kExistingPowerPolicyId_OtherNone);
+ ASSERT_TRUE(policy.get() != nullptr);
+ ASSERT_TRUE(isEqual(*policy, kExistingPowerPolicy_OtherNone));
+}
+
+void checkPowerPolicyGroups(const PolicyManager& policyManager) {
+ CarPowerPolicyPtr policy = policyManager.getDefaultPowerPolicyForState(kValidPowerPolicyGroupId,
+ kExistingTransition);
+ ASSERT_TRUE(policy.get() != nullptr);
+ ASSERT_TRUE(isEqual(*policy, kExistingTransitionPolicy));
+ ASSERT_TRUE(
+ policyManager
+ .getDefaultPowerPolicyForState(kValidPowerPolicyGroupId, kNonExistingTransition)
+ .get() == nullptr);
+}
+
+void checkSystemPowerPolicy(const PolicyManager& policyManager,
+ const CarPowerPolicy& expectedPolicy) {
+ CarPowerPolicyPtr policy = policyManager.getSystemPowerPolicy();
+ ASSERT_TRUE(isEqual(*policy, expectedPolicy));
+}
+
+void checkInvalidPolicies(const PolicyManager& policyManager) {
+ ASSERT_EQ(policyManager.getPowerPolicy(kExistingPowerPolicyId).get(), nullptr);
+ ASSERT_EQ(policyManager.getPowerPolicy(kNonExistingPowerPolicyId).get(), nullptr);
+ ASSERT_EQ(policyManager
+ .getDefaultPowerPolicyForState(kValidPowerPolicyGroupId, kExistingTransition)
+ .get(),
+ nullptr);
+ ASSERT_EQ(policyManager
+ .getDefaultPowerPolicyForState(kValidPowerPolicyGroupId,
+ kNonExistingTransition)
+ .get(),
+ nullptr);
+ CarPowerPolicyPtr policy = policyManager.getSystemPowerPolicy();
+ ASSERT_TRUE(isEqual(*policy, kDefaultSystemPowerPolicy));
+}
+
+} // namespace
+
+namespace internal {
+
+class PolicyManagerPeer {
+public:
+ explicit PolicyManagerPeer(PolicyManager* manager) : mManager(manager) {
+ manager->initSystemPowerPolicy();
+ }
+
+ void expectValidPowerPolicyXML(const char* filename) { readXmlFile(filename); }
+ void expectInvalidPowerPolicyXML(const char* filename) { readXmlFile(filename); }
+
+private:
+ void readXmlFile(const char* filename) {
+ XMLDocument xmlDoc;
+ std::string path = getTestDataPath(filename);
+ xmlDoc.LoadFile(path.c_str());
+ ASSERT_TRUE(xmlDoc.ErrorID() == XML_SUCCESS);
+ mManager->readPowerPolicyFromXml(xmlDoc);
+ }
+
+private:
+ PolicyManager* mManager;
+};
+
+} // namespace internal
+
+class PolicyManagerTest : public ::testing::Test {};
+
+TEST_F(PolicyManagerTest, TestValidXml_PowerPolicy) {
+ PolicyManager policyManager;
+ internal::PolicyManagerPeer policyManagerPeer(&policyManager);
+ policyManagerPeer.expectValidPowerPolicyXML(kValidPowerPolicyXmlFile);
+
+ checkPolicies(policyManager);
+}
+
+TEST_F(PolicyManagerTest, TestValidXml_PowerPolicyGroup) {
+ PolicyManager policyManager;
+ internal::PolicyManagerPeer policyManagerPeer(&policyManager);
+ policyManagerPeer.expectValidPowerPolicyXML(kValidPowerPolicyXmlFile);
+
+ checkPowerPolicyGroups(policyManager);
+}
+
+TEST_F(PolicyManagerTest, TestValidXml_SystemPowerPolicy) {
+ PolicyManager policyManager;
+ internal::PolicyManagerPeer policyManagerPeer(&policyManager);
+ policyManagerPeer.expectValidPowerPolicyXML(kValidPowerPolicyXmlFile);
+
+ checkSystemPowerPolicy(policyManager, kModifiedSystemPowerPolicy);
+}
+
+TEST_F(PolicyManagerTest, TestValidXml_NoPowerPolicyGroups) {
+ PolicyManager policyManager;
+ internal::PolicyManagerPeer policyManagerPeer(&policyManager);
+ policyManagerPeer.expectValidPowerPolicyXML(kValidPowerPolicyNoPowerPolicyGroupsXmlFile);
+
+ checkPolicies(policyManager);
+ ASSERT_EQ(policyManager
+ .getDefaultPowerPolicyForState(kValidPowerPolicyGroupId, kExistingTransition)
+ .get(),
+ nullptr);
+ ASSERT_EQ(policyManager
+ .getDefaultPowerPolicyForState(kValidPowerPolicyGroupId,
+ kNonExistingTransition)
+ .get(),
+ nullptr);
+ checkSystemPowerPolicy(policyManager, kModifiedSystemPowerPolicy);
+}
+
+TEST_F(PolicyManagerTest, TestValidXml_NoSystemPowerPolicy) {
+ PolicyManager policyManager;
+ internal::PolicyManagerPeer policyManagerPeer(&policyManager);
+ policyManagerPeer.expectValidPowerPolicyXML(kValidPowerPolicyNoSystemPowerPolicyXmlFile);
+
+ checkPolicies(policyManager);
+ checkPowerPolicyGroups(policyManager);
+ checkSystemPowerPolicy(policyManager, kDefaultSystemPowerPolicy);
+}
+
+TEST_F(PolicyManagerTest, TestValidXml_PoliciesOnly) {
+ PolicyManager policyManager;
+ internal::PolicyManagerPeer policyManagerPeer(&policyManager);
+ policyManagerPeer.expectValidPowerPolicyXML(kValidPowerPolicyPowerPoliciesOnlyXmlFile);
+
+ checkPolicies(policyManager);
+ ASSERT_EQ(policyManager
+ .getDefaultPowerPolicyForState(kValidPowerPolicyGroupId, kExistingTransition)
+ .get(),
+ nullptr);
+ ASSERT_EQ(policyManager
+ .getDefaultPowerPolicyForState(kValidPowerPolicyGroupId,
+ kNonExistingTransition)
+ .get(),
+ nullptr);
+ checkSystemPowerPolicy(policyManager, kDefaultSystemPowerPolicy);
+}
+
+TEST_F(PolicyManagerTest, TestValidXml_SystemPowerPolicyOnly) {
+ PolicyManager policyManager;
+ internal::PolicyManagerPeer policyManagerPeer(&policyManager);
+ policyManagerPeer.expectValidPowerPolicyXML(kValidPowerPolicySystemPowerPolicyOnlyXmlFile);
+
+ ASSERT_EQ(policyManager.getPowerPolicy(kExistingPowerPolicyId).get(), nullptr);
+ ASSERT_EQ(policyManager.getPowerPolicy(kNonExistingPowerPolicyId).get(), nullptr);
+ ASSERT_EQ(policyManager
+ .getDefaultPowerPolicyForState(kValidPowerPolicyGroupId, kExistingTransition)
+ .get(),
+ nullptr);
+ ASSERT_EQ(policyManager
+ .getDefaultPowerPolicyForState(kValidPowerPolicyGroupId,
+ kNonExistingTransition)
+ .get(),
+ nullptr);
+ checkSystemPowerPolicy(policyManager, kModifiedSystemPowerPolicy);
+}
+
+TEST_F(PolicyManagerTest, TestInvalidPowerPolicyXml) {
+ for (const auto& filename : kInvalidPowerPolicyXmlFiles) {
+ PolicyManager policyManager;
+ internal::PolicyManagerPeer policyManagerPeer(&policyManager);
+ policyManagerPeer.expectInvalidPowerPolicyXML(filename);
+
+ checkInvalidPolicies(policyManager);
+ }
+}
+
+TEST_F(PolicyManagerTest, TestInvalidPowerPolicyGroupXml) {
+ for (const auto& filename : kInvalidPowerPolicyGroupXmlFiles) {
+ PolicyManager policyManager;
+ internal::PolicyManagerPeer policyManagerPeer(&policyManager);
+ policyManagerPeer.expectInvalidPowerPolicyXML(filename);
+
+ checkInvalidPolicies(policyManager);
+ }
+}
+
+TEST_F(PolicyManagerTest, TestInvalidSystemPowerPolicyXml) {
+ for (const auto& filename : kInvalidSystemPowerPolicyXmlFiles) {
+ PolicyManager policyManager;
+ internal::PolicyManagerPeer policyManagerPeer(&policyManager);
+ policyManagerPeer.expectInvalidPowerPolicyXML(filename);
+
+ checkInvalidPolicies(policyManager);
+ }
+}
+
+TEST_F(PolicyManagerTest, TestValidXml_PowerPolicyGroupAvailable) {
+ PolicyManager policyManager;
+ internal::PolicyManagerPeer policyManagerPeer(&policyManager);
+ policyManagerPeer.expectValidPowerPolicyXML(kValidPowerPolicyXmlFile);
+
+ ASSERT_TRUE(policyManager.isPowerPolicyGroupAvailable(kValidPowerPolicyGroupId));
+ ASSERT_FALSE(policyManager.isPowerPolicyGroupAvailable(kInvalidPowerPolicyGroupId));
+}
+
+} // namespace powerpolicy
+} // namespace automotive
+} // namespace frameworks
+} // namespace android
diff --git a/cpp/powerpolicy/tests/data/invalid_power_policy_group_incorrect_state.xml b/cpp/powerpolicy/tests/data/invalid_power_policy_group_incorrect_state.xml
new file mode 100644
index 0000000..e88bb03
--- /dev/null
+++ b/cpp/powerpolicy/tests/data/invalid_power_policy_group_incorrect_state.xml
@@ -0,0 +1,41 @@
+<?xml version='1.0' encoding='utf-8'?>
+
+<powerPolicy version="1.0">
+
+ <policyGroups>
+ <policyGroup id="mixed_policy_group">
+ <defaultPolicy state="WaitForVHAL" id="policy_id_other_on"/>
+ <defaultPolicy state="IncorrectState" id="expected_to_be_registered"/>
+ <noDefaultPolicy state="DeepSleepEntry"/>
+ <noDefaultPolicy state="ShutdownStart"/>
+ </policyGroup>
+ </policyGroups>
+
+ <policies>
+ <policy id="expected_to_be_registered">
+ <otherComponents behavior="off"/>
+ <component id="POWER_COMPONENT_DISPLAY_MAIN">off</component>
+ <component id="POWER_COMPONENT_UNKNOWN">on</component>
+ <component id="POWER_COMPONENT_WIFI">off</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ <policy id="policy_id_other_on">
+ <otherComponents behavior="on"/>
+ <component id="POWER_COMPONENT_AUDIO">off</component>
+ <component id="POWER_COMPONENT_DISPLAY_CLUSTER">off</component>
+ <component id="POWER_COMPONENT_VOICE_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ </policies>
+
+ <systemPolicyOverrides>
+ <policy id="system_power_policy_no_user_interaction">
+ <component id="POWER_COMPONENT_BLUETOOTH">on</component>
+ <component id="POWER_COMPONENT_NFC">on</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ </systemPolicyOverrides>
+
+</powerPolicy>
diff --git a/cpp/powerpolicy/tests/data/invalid_power_policy_group_missing_policy.xml b/cpp/powerpolicy/tests/data/invalid_power_policy_group_missing_policy.xml
new file mode 100644
index 0000000..83d82bb
--- /dev/null
+++ b/cpp/powerpolicy/tests/data/invalid_power_policy_group_missing_policy.xml
@@ -0,0 +1,33 @@
+<?xml version='1.0' encoding='utf-8'?>
+
+<powerPolicy version="1.0">
+
+ <policyGroups>
+ <policyGroup id="mixed_policy_group">
+ <defaultPolicy state="WaitForVHAL" id="expected_to_be_registered"/>
+ <defaultPolicy state="On" id="incorrect_policy_id"/>
+ <noDefaultPolicy state="DeepSleepEntry"/>
+ <noDefaultPolicy state="ShutdownStart"/>
+ </policyGroup>
+ </policyGroups>
+
+ <policies>
+ <policy id="expected_to_be_registered">
+ <otherComponents behavior="off"/>
+ <component id="POWER_COMPONENT_DISPLAY_MAIN">off</component>
+ <component id="POWER_COMPONENT_UNKNOWN">on</component>
+ <component id="POWER_COMPONENT_WIFI">off</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ </policies>
+
+ <systemPolicyOverrides>
+ <policy id="system_power_policy_no_user_interaction">
+ <component id="POWER_COMPONENT_BLUETOOTH">on</component>
+ <component id="POWER_COMPONENT_NFC">on</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ </systemPolicyOverrides>
+
+</powerPolicy>
diff --git a/cpp/powerpolicy/tests/data/invalid_power_policy_incorrect_othercomponent.xml b/cpp/powerpolicy/tests/data/invalid_power_policy_incorrect_othercomponent.xml
new file mode 100644
index 0000000..706a20d
--- /dev/null
+++ b/cpp/powerpolicy/tests/data/invalid_power_policy_incorrect_othercomponent.xml
@@ -0,0 +1,29 @@
+<?xml version='1.0' encoding='utf-8'?>
+
+<powerPolicy version="1.0">
+
+ <policyGroups>
+ <policyGroup id="mixed_policy_group">
+ <defaultPolicy state="WaitForVHAL" id="expected_to_be_registered"/>
+ </policyGroup>
+ </policyGroups>
+
+ <policies>
+ <policy id="expected_to_be_registered">
+ <otherComponents behavior="incorrect"/>
+ <component id="POWER_COMPONENT_DISPLAY_MAIN">off</component>
+ <component id="POWER_COMPONENT_WIFI">off</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ </policies>
+
+ <systemPolicyOverrides>
+ <policy id="system_power_policy_no_user_interaction">
+ <component id="POWER_COMPONENT_BLUETOOTH">on</component>
+ <component id="POWER_COMPONENT_NFC">on</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ </systemPolicyOverrides>
+
+</powerPolicy>
diff --git a/cpp/powerpolicy/tests/data/invalid_power_policy_incorrect_value.xml b/cpp/powerpolicy/tests/data/invalid_power_policy_incorrect_value.xml
new file mode 100644
index 0000000..b19b872
--- /dev/null
+++ b/cpp/powerpolicy/tests/data/invalid_power_policy_incorrect_value.xml
@@ -0,0 +1,29 @@
+<?xml version='1.0' encoding='utf-8'?>
+
+<powerPolicy version="1.0">
+
+ <policyGroups>
+ <policyGroup id="mixed_policy_group">
+ <defaultPolicy state="WaitForVHAL" id="expected_to_be_registered"/>
+ </policyGroup>
+ </policyGroups>
+
+ <policies>
+ <policy id="expected_to_be_registered">
+ <otherComponents behavior="off"/>
+ <component id="POWER_COMPONENT_DISPLAY_MAIN">off</component>
+ <component id="POWER_COMPONENT_WIFI">incorrect</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ </policies>
+
+ <systemPolicyOverrides>
+ <policy id="system_power_policy_no_user_interaction">
+ <component id="POWER_COMPONENT_BLUETOOTH">on</component>
+ <component id="POWER_COMPONENT_NFC">on</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ </systemPolicyOverrides>
+
+</powerPolicy>
diff --git a/cpp/powerpolicy/tests/data/invalid_power_policy_unknown_component.xml b/cpp/powerpolicy/tests/data/invalid_power_policy_unknown_component.xml
new file mode 100644
index 0000000..da59ead
--- /dev/null
+++ b/cpp/powerpolicy/tests/data/invalid_power_policy_unknown_component.xml
@@ -0,0 +1,30 @@
+<?xml version='1.0' encoding='utf-8'?>
+
+<powerPolicy version="1.0">
+
+ <policyGroups>
+ <policyGroup id="mixed_policy_group">
+ <defaultPolicy state="WaitForVHAL" id="expected_to_be_registered"/>
+ </policyGroup>
+ </policyGroups>
+
+ <policies>
+ <policy id="expected_to_be_registered">
+ <otherComponents behavior="off"/>
+ <component id="POWER_COMPONENT_DISPLAY_MAIN">off</component>
+ <component id="POWER_COMPONENT_UNKNOWN">on</component>
+ <component id="POWER_COMPONENT_WIFI">off</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ </policies>
+
+ <systemPolicyOverrides>
+ <policy id="system_power_policy_no_user_interaction">
+ <component id="POWER_COMPONENT_BLUETOOTH">on</component>
+ <component id="POWER_COMPONENT_NFC">on</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ </systemPolicyOverrides>
+
+</powerPolicy>
diff --git a/cpp/powerpolicy/tests/data/invalid_system_power_policy_incorrect_component.xml b/cpp/powerpolicy/tests/data/invalid_system_power_policy_incorrect_component.xml
new file mode 100644
index 0000000..5e60ba4
--- /dev/null
+++ b/cpp/powerpolicy/tests/data/invalid_system_power_policy_incorrect_component.xml
@@ -0,0 +1,25 @@
+<?xml version='1.0' encoding='utf-8'?>
+
+<powerPolicy version="1.0">
+
+ <policyGroups>
+ <policyGroup id="mixed_policy_group">
+ <defaultPolicy state="WaitForVHAL" id="expected_to_be_registered"/>
+ </policyGroup>
+ </policyGroups>
+
+ <policies>
+ <policy id="expected_to_be_registered">
+ <otherComponents behavior="on"/>
+ </policy>
+ </policies>
+
+ <systemPolicyOverrides>
+ <policy id="system_power_policy_no_user_interaction">
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">on</component>
+ <component id="POWER_COMPONENT_NFC">on</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ </systemPolicyOverrides>
+
+</powerPolicy>
diff --git a/cpp/powerpolicy/tests/data/invalid_system_power_policy_incorrect_id.xml b/cpp/powerpolicy/tests/data/invalid_system_power_policy_incorrect_id.xml
new file mode 100644
index 0000000..a0a273c
--- /dev/null
+++ b/cpp/powerpolicy/tests/data/invalid_system_power_policy_incorrect_id.xml
@@ -0,0 +1,24 @@
+<?xml version='1.0' encoding='utf-8'?>
+
+<powerPolicy version="1.0">
+
+ <policyGroups>
+ <policyGroup id="mixed_policy_group">
+ <defaultPolicy state="WaitForVHAL" id="expected_to_be_registered"/>
+ </policyGroup>
+ </policyGroups>
+
+ <policies>
+ <policy id="expected_to_be_registered">
+ <otherComponents behavior="on"/>
+ </policy>
+ </policies>
+
+ <systemPolicyOverrides>
+ <policy id="system_power_policy_incorrect_id">
+ <component id="POWER_COMPONENT_NFC">on</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ </systemPolicyOverrides>
+
+</powerPolicy>
diff --git a/cpp/powerpolicy/tests/data/valid_power_policy.xml b/cpp/powerpolicy/tests/data/valid_power_policy.xml
new file mode 100644
index 0000000..dac5f33
--- /dev/null
+++ b/cpp/powerpolicy/tests/data/valid_power_policy.xml
@@ -0,0 +1,74 @@
+<?xml version='1.0' encoding='utf-8'?>
+
+<powerPolicy version="1.0">
+
+ <policyGroups>
+ <policyGroup id="basic_policy_group">
+ <defaultPolicy state="WaitForVHAL" id="policy_id_other_on"/>
+ <defaultPolicy state="On" id="policy_id_other_untouched"/>
+ <defaultPolicy state="DeepSleepEntry" id="policy_id_other_off"/>
+ <defaultPolicy state="ShutdownStart" id="policy_id_other_none"/>
+ </policyGroup>
+ <policyGroup id="no_default_policy_group">
+ <noDefaultPolicy state="WaitForVHAL"/>
+ <noDefaultPolicy state="On"/>
+ <noDefaultPolicy state="DeepSleepEntry"/>
+ <noDefaultPolicy state="ShutdownStart"/>
+ </policyGroup>
+ <policyGroup id="mixed_policy_group">
+ <defaultPolicy state="WaitForVHAL" id="policy_id_other_on"/>
+ <defaultPolicy state="On" id="policy_id_other_untouched"/>
+ <noDefaultPolicy state="DeepSleepEntry"/>
+ <noDefaultPolicy state="ShutdownStart"/>
+ </policyGroup>
+ </policyGroups>
+
+ <policies>
+ <policy id="expected_to_be_registered">
+ <otherComponents behavior="on"/>
+ </policy>
+ <policy id="policy_id_other_off">
+ <otherComponents behavior="off"/>
+ <component id="POWER_COMPONENT_AUDIO">off</component>
+ <component id="POWER_COMPONENT_DISPLAY_MAIN">off</component>
+ <component id="POWER_COMPONENT_WIFI">on</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ <policy id="policy_id_other_untouched">
+ <otherComponents behavior="untouched"/>
+ <component id="POWER_COMPONENT_AUDIO">on</component>
+ <component id="POWER_COMPONENT_DISPLAY_MAIN">on</component>
+ <component id="POWER_COMPONENT_BLUETOOTH">on</component>
+ <component id="POWER_COMPONENT_WIFI">on</component>
+ <component id="POWER_COMPONENT_VOICE_INTERACTION">on</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">on</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">on</component>
+ </policy>
+ <policy id="policy_id_other_on">
+ <otherComponents behavior="on"/>
+ <component id="POWER_COMPONENT_AUDIO">off</component>
+ <component id="POWER_COMPONENT_DISPLAY_CLUSTER">off</component>
+ <component id="POWER_COMPONENT_VOICE_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ <policy id="policy_id_other_none">
+ <component id="POWER_COMPONENT_AUDIO">off</component>
+ <component id="POWER_COMPONENT_DISPLAY_FRONT_PASSENGER">off</component>
+ <component id="POWER_COMPONENT_WIFI">on</component>
+ <component id="POWER_COMPONENT_VOICE_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ </policies>
+
+ <systemPolicyOverrides>
+ <policy id="system_power_policy_no_user_interaction">
+ <component id="POWER_COMPONENT_BLUETOOTH">on</component>
+ <component id="POWER_COMPONENT_NFC">on</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ </systemPolicyOverrides>
+
+</powerPolicy>
diff --git a/cpp/powerpolicy/tests/data/valid_power_policy_no_power_policy_groups.xml b/cpp/powerpolicy/tests/data/valid_power_policy_no_power_policy_groups.xml
new file mode 100644
index 0000000..8860487
--- /dev/null
+++ b/cpp/powerpolicy/tests/data/valid_power_policy_no_power_policy_groups.xml
@@ -0,0 +1,53 @@
+<?xml version='1.0' encoding='utf-8'?>
+
+<powerPolicy version="1.0">
+
+ <policies>
+ <policy id="expected_to_be_registered">
+ <otherComponents behavior="on"/>
+ </policy>
+ <policy id="policy_id_other_off">
+ <otherComponents behavior="off"/>
+ <component id="POWER_COMPONENT_AUDIO">off</component>
+ <component id="POWER_COMPONENT_DISPLAY_MAIN">off</component>
+ <component id="POWER_COMPONENT_WIFI">on</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ <policy id="policy_id_other_untouched">
+ <otherComponents behavior="untouched"/>
+ <component id="POWER_COMPONENT_AUDIO">on</component>
+ <component id="POWER_COMPONENT_DISPLAY_MAIN">on</component>
+ <component id="POWER_COMPONENT_BLUETOOTH">on</component>
+ <component id="POWER_COMPONENT_WIFI">on</component>
+ <component id="POWER_COMPONENT_VOICE_INTERACTION">on</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">on</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">on</component>
+ </policy>
+ <policy id="policy_id_other_on">
+ <otherComponents behavior="on"/>
+ <component id="POWER_COMPONENT_AUDIO">off</component>
+ <component id="POWER_COMPONENT_DISPLAY_CLUSTER">off</component>
+ <component id="POWER_COMPONENT_VOICE_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ <policy id="policy_id_other_none">
+ <component id="POWER_COMPONENT_AUDIO">off</component>
+ <component id="POWER_COMPONENT_DISPLAY_FRONT_PASSENGER">off</component>
+ <component id="POWER_COMPONENT_WIFI">on</component>
+ <component id="POWER_COMPONENT_VOICE_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ </policies>
+
+ <systemPolicyOverrides>
+ <policy id="system_power_policy_no_user_interaction">
+ <component id="POWER_COMPONENT_BLUETOOTH">on</component>
+ <component id="POWER_COMPONENT_NFC">on</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ </systemPolicyOverrides>
+
+</powerPolicy>
diff --git a/cpp/powerpolicy/tests/data/valid_power_policy_no_system_power_policy.xml b/cpp/powerpolicy/tests/data/valid_power_policy_no_system_power_policy.xml
new file mode 100644
index 0000000..feb12b7
--- /dev/null
+++ b/cpp/powerpolicy/tests/data/valid_power_policy_no_system_power_policy.xml
@@ -0,0 +1,54 @@
+<?xml version='1.0' encoding='utf-8'?>
+
+<powerPolicy version="1.0">
+
+ <policyGroups>
+ <policyGroup id="mixed_policy_group">
+ <defaultPolicy state="WaitForVHAL" id="policy_id_other_on"/>
+ <defaultPolicy state="On" id="policy_id_other_untouched"/>
+ <noDefaultPolicy state="DeepSleepEntry"/>
+ <noDefaultPolicy state="ShutdownStart"/>
+ </policyGroup>
+ </policyGroups>
+
+ <policies>
+ <policy id="expected_to_be_registered">
+ <otherComponents behavior="on"/>
+ </policy>
+ <policy id="policy_id_other_off">
+ <otherComponents behavior="off"/>
+ <component id="POWER_COMPONENT_AUDIO">off</component>
+ <component id="POWER_COMPONENT_DISPLAY_MAIN">off</component>
+ <component id="POWER_COMPONENT_WIFI">on</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ <policy id="policy_id_other_untouched">
+ <otherComponents behavior="untouched"/>
+ <component id="POWER_COMPONENT_AUDIO">on</component>
+ <component id="POWER_COMPONENT_DISPLAY_MAIN">on</component>
+ <component id="POWER_COMPONENT_BLUETOOTH">on</component>
+ <component id="POWER_COMPONENT_WIFI">on</component>
+ <component id="POWER_COMPONENT_VOICE_INTERACTION">on</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">on</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">on</component>
+ </policy>
+ <policy id="policy_id_other_on">
+ <otherComponents behavior="on"/>
+ <component id="POWER_COMPONENT_AUDIO">off</component>
+ <component id="POWER_COMPONENT_DISPLAY_CLUSTER">off</component>
+ <component id="POWER_COMPONENT_VOICE_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ <policy id="policy_id_other_none">
+ <component id="POWER_COMPONENT_AUDIO">off</component>
+ <component id="POWER_COMPONENT_DISPLAY_FRONT_PASSENGER">off</component>
+ <component id="POWER_COMPONENT_WIFI">on</component>
+ <component id="POWER_COMPONENT_VOICE_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ </policies>
+
+</powerPolicy>
diff --git a/cpp/powerpolicy/tests/data/valid_power_policy_policies_only.xml b/cpp/powerpolicy/tests/data/valid_power_policy_policies_only.xml
new file mode 100644
index 0000000..16e4eae
--- /dev/null
+++ b/cpp/powerpolicy/tests/data/valid_power_policy_policies_only.xml
@@ -0,0 +1,45 @@
+<?xml version='1.0' encoding='utf-8'?>
+
+<powerPolicy version="1.0">
+
+ <policies>
+ <policy id="expected_to_be_registered">
+ <otherComponents behavior="on"/>
+ </policy>
+ <policy id="policy_id_other_off">
+ <otherComponents behavior="off"/>
+ <component id="POWER_COMPONENT_AUDIO">off</component>
+ <component id="POWER_COMPONENT_DISPLAY_MAIN">off</component>
+ <component id="POWER_COMPONENT_WIFI">on</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ <policy id="policy_id_other_untouched">
+ <otherComponents behavior="untouched"/>
+ <component id="POWER_COMPONENT_AUDIO">on</component>
+ <component id="POWER_COMPONENT_DISPLAY_MAIN">on</component>
+ <component id="POWER_COMPONENT_BLUETOOTH">on</component>
+ <component id="POWER_COMPONENT_WIFI">on</component>
+ <component id="POWER_COMPONENT_VOICE_INTERACTION">on</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">on</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">on</component>
+ </policy>
+ <policy id="policy_id_other_on">
+ <otherComponents behavior="on"/>
+ <component id="POWER_COMPONENT_AUDIO">off</component>
+ <component id="POWER_COMPONENT_DISPLAY_CLUSTER">off</component>
+ <component id="POWER_COMPONENT_VOICE_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ <policy id="policy_id_other_none">
+ <component id="POWER_COMPONENT_AUDIO">off</component>
+ <component id="POWER_COMPONENT_DISPLAY_FRONT_PASSENGER">off</component>
+ <component id="POWER_COMPONENT_WIFI">on</component>
+ <component id="POWER_COMPONENT_VOICE_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_VISUAL_INTERACTION">off</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ </policies>
+
+</powerPolicy>
diff --git a/cpp/powerpolicy/tests/data/valid_power_policy_system_power_policy_only.xml b/cpp/powerpolicy/tests/data/valid_power_policy_system_power_policy_only.xml
new file mode 100644
index 0000000..d49acb6
--- /dev/null
+++ b/cpp/powerpolicy/tests/data/valid_power_policy_system_power_policy_only.xml
@@ -0,0 +1,13 @@
+<?xml version='1.0' encoding='utf-8'?>
+
+<powerPolicy version="1.0">
+
+ <systemPolicyOverrides>
+ <policy id="system_power_policy_no_user_interaction">
+ <component id="POWER_COMPONENT_BLUETOOTH">on</component>
+ <component id="POWER_COMPONENT_NFC">on</component>
+ <component id="POWER_COMPONENT_TRUSTED_DEVICE_DETECTION">off</component>
+ </policy>
+ </systemPolicyOverrides>
+
+</powerPolicy>
diff --git a/surround_view/OWNERS b/cpp/surround_view/OWNERS
similarity index 100%
rename from surround_view/OWNERS
rename to cpp/surround_view/OWNERS
diff --git a/surround_view/app/Android.bp b/cpp/surround_view/app/Android.bp
similarity index 100%
rename from surround_view/app/Android.bp
rename to cpp/surround_view/app/Android.bp
diff --git a/surround_view/app/SurroundViewServiceCallback.cpp b/cpp/surround_view/app/SurroundViewServiceCallback.cpp
similarity index 97%
rename from surround_view/app/SurroundViewServiceCallback.cpp
rename to cpp/surround_view/app/SurroundViewServiceCallback.cpp
index 05a598f..12dba98 100644
--- a/surround_view/app/SurroundViewServiceCallback.cpp
+++ b/cpp/surround_view/app/SurroundViewServiceCallback.cpp
@@ -144,17 +144,15 @@
return false;
}
- // Create a dummy pbuffer so we have a surface to bind -- we never intend
+ // Create a placeholder pbuffer so we have a surface to bind -- we never intend
// to draw to this because attachRenderTarget will be called first.
EGLint surface_attribs[] = { EGL_WIDTH, 1, EGL_HEIGHT, 1, EGL_NONE };
- EGLSurface sDummySurface = eglCreatePbufferSurface(display, egl_config,
- surface_attribs);
- if (sDummySurface == EGL_NO_SURFACE) {
- LOG(ERROR) << "Failed to create OpenGL ES Dummy surface: "
- << getEGLError();
+ EGLSurface sPlaceholderSurface = eglCreatePbufferSurface(display, egl_config, surface_attribs);
+ if (sPlaceholderSurface == EGL_NO_SURFACE) {
+ LOG(ERROR) << "Failed to create OpenGL ES Placeholder surface: " << getEGLError();
return false;
} else {
- LOG(INFO) << "Dummy surface looks good! :)";
+ LOG(INFO) << "Placeholder surface looks good! :)";
}
//
@@ -169,7 +167,7 @@
}
// Activate our render target for drawing
- if (!eglMakeCurrent(display, sDummySurface, sDummySurface, context)) {
+ if (!eglMakeCurrent(display, sPlaceholderSurface, sPlaceholderSurface, context)) {
LOG(ERROR) << "Failed to make the OpenGL ES Context current: "
<< getEGLError();
return false;
diff --git a/surround_view/app/SurroundViewServiceCallback.h b/cpp/surround_view/app/SurroundViewServiceCallback.h
similarity index 100%
rename from surround_view/app/SurroundViewServiceCallback.h
rename to cpp/surround_view/app/SurroundViewServiceCallback.h
diff --git a/surround_view/app/shader.cpp b/cpp/surround_view/app/shader.cpp
similarity index 100%
rename from surround_view/app/shader.cpp
rename to cpp/surround_view/app/shader.cpp
diff --git a/surround_view/app/shader.h b/cpp/surround_view/app/shader.h
similarity index 100%
rename from surround_view/app/shader.h
rename to cpp/surround_view/app/shader.h
diff --git a/surround_view/app/shader_simpleTex.h b/cpp/surround_view/app/shader_simpleTex.h
similarity index 100%
rename from surround_view/app/shader_simpleTex.h
rename to cpp/surround_view/app/shader_simpleTex.h
diff --git a/surround_view/app/sv_app.cpp b/cpp/surround_view/app/sv_app.cpp
similarity index 100%
rename from surround_view/app/sv_app.cpp
rename to cpp/surround_view/app/sv_app.cpp
diff --git a/surround_view/app/sv_app.rc b/cpp/surround_view/app/sv_app.rc
similarity index 100%
rename from surround_view/app/sv_app.rc
rename to cpp/surround_view/app/sv_app.rc
diff --git a/surround_view/sepolicy/file_contexts b/cpp/surround_view/sepolicy/file_contexts
similarity index 100%
rename from surround_view/sepolicy/file_contexts
rename to cpp/surround_view/sepolicy/file_contexts
diff --git a/surround_view/sepolicy/sv_app.te b/cpp/surround_view/sepolicy/sv_app.te
similarity index 100%
rename from surround_view/sepolicy/sv_app.te
rename to cpp/surround_view/sepolicy/sv_app.te
diff --git a/surround_view/sepolicy/sv_service_impl.te b/cpp/surround_view/sepolicy/sv_service_impl.te
similarity index 100%
rename from surround_view/sepolicy/sv_service_impl.te
rename to cpp/surround_view/sepolicy/sv_service_impl.te
diff --git a/surround_view/service-impl/Android.bp b/cpp/surround_view/service-impl/Android.bp
similarity index 83%
rename from surround_view/service-impl/Android.bp
rename to cpp/surround_view/service-impl/Android.bp
index d05c4d8..13bba8c 100644
--- a/surround_view/service-impl/Android.bp
+++ b/cpp/surround_view/service-impl/Android.bp
@@ -205,17 +205,17 @@
}
cc_test{
- name : "sv_session_tests",
+ name : "sv_2d_session_tests",
test_suites : ["device-tests"],
vendor : true,
srcs : [
- "SurroundViewSessionTests.cpp",
+ "SurroundView2dSessionTests.cpp",
"mock-evs/MockEvsCamera.cpp",
"mock-evs/MockEvsEnumerator.cpp",
"mock-evs/MockSurroundViewCallback.cpp",
],
include_dirs: [
- "packages/services/Car/evs/sampleDriver",
+ "packages/services/Car/cpp/evs/sampleDriver",
],
shared_libs : [
"android.hardware.automotive.evs@1.0",
@@ -253,6 +253,70 @@
enabled : true,
},
},
+ required : [
+ "sample_car.obj",
+ "sample_car_material.mtl",
+ "sv_sample_config.xml",
+ "sv_sample_car_model_config.xml",
+ ],
+}
+
+cc_test{
+ name : "sv_3d_session_tests",
+ test_suites : ["device-tests"],
+ vendor : true,
+ srcs : [
+ "SurroundView3dSessionTests.cpp",
+ "mock-evs/MockEvsCamera.cpp",
+ "mock-evs/MockEvsEnumerator.cpp",
+ "mock-evs/MockSurroundViewCallback.cpp",
+ ],
+ include_dirs: [
+ "packages/services/Car/cpp/evs/sampleDriver",
+ ],
+ shared_libs : [
+ "android.hardware.automotive.evs@1.0",
+ "android.hardware.automotive.evs@1.1",
+ "android.hardware.automotive.sv@1.0",
+ "android.hardware.automotive.vehicle@2.0",
+ "android.hidl.memory@1.0",
+ "android.hidl.allocator@1.0",
+ "libanimation_module",
+ "libbase",
+ "libbinder",
+ "libcamera_metadata",
+ "libcore_lib_shared",
+ "libcutils",
+ "libevsconfigmanager",
+ "libhardware",
+ "libhidlbase",
+ "libhidlmemory",
+ "libio_module",
+ "libsvsession",
+ "libtinyxml2",
+ "libui",
+ "libutils",
+ "libvhal_handler",
+ ],
+ // Disable builds except for arm64 and emulator devices
+ enabled : false,
+ arch : {
+ arm64 : {
+ enabled : true,
+ },
+ x86 : {
+ enabled : true,
+ },
+ x86_64 : {
+ enabled : true,
+ },
+ },
+ required : [
+ "sample_car.obj",
+ "sample_car_material.mtl",
+ "sv_sample_config.xml",
+ "sv_sample_car_model_config.xml",
+ ],
}
cc_binary{
diff --git a/surround_view/service-impl/AnimationModule.cpp b/cpp/surround_view/service-impl/AnimationModule.cpp
similarity index 100%
rename from surround_view/service-impl/AnimationModule.cpp
rename to cpp/surround_view/service-impl/AnimationModule.cpp
diff --git a/surround_view/service-impl/AnimationModule.h b/cpp/surround_view/service-impl/AnimationModule.h
similarity index 100%
rename from surround_view/service-impl/AnimationModule.h
rename to cpp/surround_view/service-impl/AnimationModule.h
diff --git a/surround_view/service-impl/AnimationModuleTests.cpp b/cpp/surround_view/service-impl/AnimationModuleTests.cpp
similarity index 100%
rename from surround_view/service-impl/AnimationModuleTests.cpp
rename to cpp/surround_view/service-impl/AnimationModuleTests.cpp
diff --git a/surround_view/service-impl/CameraUtils.cpp b/cpp/surround_view/service-impl/CameraUtils.cpp
similarity index 100%
rename from surround_view/service-impl/CameraUtils.cpp
rename to cpp/surround_view/service-impl/CameraUtils.cpp
diff --git a/surround_view/service-impl/CameraUtils.h b/cpp/surround_view/service-impl/CameraUtils.h
similarity index 100%
rename from surround_view/service-impl/CameraUtils.h
rename to cpp/surround_view/service-impl/CameraUtils.h
diff --git a/surround_view/service-impl/CarModelConfigReader.cpp b/cpp/surround_view/service-impl/CarModelConfigReader.cpp
similarity index 100%
rename from surround_view/service-impl/CarModelConfigReader.cpp
rename to cpp/surround_view/service-impl/CarModelConfigReader.cpp
diff --git a/surround_view/service-impl/CarModelConfigReader.h b/cpp/surround_view/service-impl/CarModelConfigReader.h
similarity index 100%
rename from surround_view/service-impl/CarModelConfigReader.h
rename to cpp/surround_view/service-impl/CarModelConfigReader.h
diff --git a/surround_view/service-impl/CarModelConfigReaderTests.cpp b/cpp/surround_view/service-impl/CarModelConfigReaderTests.cpp
similarity index 95%
rename from surround_view/service-impl/CarModelConfigReaderTests.cpp
rename to cpp/surround_view/service-impl/CarModelConfigReaderTests.cpp
index 916002b..81f8192 100644
--- a/surround_view/service-impl/CarModelConfigReaderTests.cpp
+++ b/cpp/surround_view/service-impl/CarModelConfigReaderTests.cpp
@@ -34,7 +34,7 @@
TEST(CarModelConfigReaderTests, CarModelReadConfigSuccess) {
AnimationConfig animationConfig;
- EXPECT_EQ(ReadCarModelConfig("/vendor/automotive/sv/sv_sample_car_model_config.xml",
+ EXPECT_EQ(ReadCarModelConfig("/vendor/etc/automotive/sv/sv_sample_car_model_config.xml",
&animationConfig),
IOStatus::OK);
@@ -45,7 +45,7 @@
{
AnimationInfo doorAnimation = animationConfig.animations.at(0);
EXPECT_EQ(doorAnimation.partId, "door");
- EXPECT_EQ(doorAnimation.childIds.size(), 2);
+ EXPECT_EQ(doorAnimation.childIds.size(), 1);
EXPECT_EQ(doorAnimation.pose, gMat4Identity);
EXPECT_EQ(doorAnimation.rotationOpsMap.size(), 1);
diff --git a/surround_view/service-impl/ConfigReader.cpp b/cpp/surround_view/service-impl/ConfigReader.cpp
similarity index 100%
rename from surround_view/service-impl/ConfigReader.cpp
rename to cpp/surround_view/service-impl/ConfigReader.cpp
diff --git a/surround_view/service-impl/ConfigReader.h b/cpp/surround_view/service-impl/ConfigReader.h
similarity index 100%
rename from surround_view/service-impl/ConfigReader.h
rename to cpp/surround_view/service-impl/ConfigReader.h
diff --git a/surround_view/service-impl/ConfigReaderTests.cpp b/cpp/surround_view/service-impl/ConfigReaderTests.cpp
similarity index 78%
rename from surround_view/service-impl/ConfigReaderTests.cpp
rename to cpp/surround_view/service-impl/ConfigReaderTests.cpp
index ef51a5f..ce4a699 100644
--- a/surround_view/service-impl/ConfigReaderTests.cpp
+++ b/cpp/surround_view/service-impl/ConfigReaderTests.cpp
@@ -36,7 +36,7 @@
TEST(ConfigReaderTests, ReadConfigSuccess) {
SurroundViewConfig svConfig;
- EXPECT_EQ(ReadSurroundViewConfig("/vendor/automotive/sv/sv_sample_config.xml", &svConfig),
+ EXPECT_EQ(ReadSurroundViewConfig("/vendor/etc/automotive/sv/sv_sample_config.xml", &svConfig),
IOStatus::OK);
EXPECT_EQ(svConfig.version, "1.0");
@@ -45,24 +45,24 @@
EXPECT_EQ(svConfig.cameraConfig.evsGroupId, "v4l2loopback_group0");
// Camera Ids
- EXPECT_EQ(svConfig.cameraConfig.evsCameraIds[0], "/dev/video90");
- EXPECT_EQ(svConfig.cameraConfig.evsCameraIds[1], "/dev/video91");
- EXPECT_EQ(svConfig.cameraConfig.evsCameraIds[2], "/dev/video92");
- EXPECT_EQ(svConfig.cameraConfig.evsCameraIds[3], "/dev/video93");
+ EXPECT_EQ(svConfig.cameraConfig.evsCameraIds[0], "/dev/video60");
+ EXPECT_EQ(svConfig.cameraConfig.evsCameraIds[1], "/dev/video61");
+ EXPECT_EQ(svConfig.cameraConfig.evsCameraIds[2], "/dev/video62");
+ EXPECT_EQ(svConfig.cameraConfig.evsCameraIds[3], "/dev/video63");
// Masks
EXPECT_EQ(svConfig.cameraConfig.maskFilenames.size(), 4);
- EXPECT_EQ(svConfig.cameraConfig.maskFilenames[0], "/vendor/mask_front.png");
- EXPECT_EQ(svConfig.cameraConfig.maskFilenames[1], "/vendor/mask_right.png");
- EXPECT_EQ(svConfig.cameraConfig.maskFilenames[2], "/vendor/mask_rear.png");
- EXPECT_EQ(svConfig.cameraConfig.maskFilenames[3], "/vendor/mask_left.png");
+ EXPECT_EQ(svConfig.cameraConfig.maskFilenames[0], "/vendor/etc/automotive/sv/mask_front.png");
+ EXPECT_EQ(svConfig.cameraConfig.maskFilenames[1], "/vendor/etc/automotive/sv/mask_right.png");
+ EXPECT_EQ(svConfig.cameraConfig.maskFilenames[2], "/vendor/etc/automotive/sv/mask_rear.png");
+ EXPECT_EQ(svConfig.cameraConfig.maskFilenames[3], "/vendor/etc/automotive/sv/mask_left.png");
// Surround view 2D
EXPECT_EQ(svConfig.sv2dConfig.sv2dEnabled, true);
- EXPECT_EQ(svConfig.sv2dConfig.sv2dParams.resolution.width, 600);
- EXPECT_EQ(svConfig.sv2dConfig.sv2dParams.resolution.height, 900);
- EXPECT_EQ(svConfig.sv2dConfig.sv2dParams.physical_size.width, 6.0);
- EXPECT_EQ(svConfig.sv2dConfig.sv2dParams.physical_size.height, 9.0);
+ EXPECT_EQ(svConfig.sv2dConfig.sv2dParams.resolution.width, 768);
+ EXPECT_EQ(svConfig.sv2dConfig.sv2dParams.resolution.height, 1024);
+ EXPECT_EQ(svConfig.sv2dConfig.sv2dParams.physical_size.width, 9.0);
+ EXPECT_EQ(svConfig.sv2dConfig.sv2dParams.physical_size.height, 12.0);
EXPECT_EQ(svConfig.sv2dConfig.sv2dParams.physical_center.x, 0.0);
EXPECT_EQ(svConfig.sv2dConfig.sv2dParams.physical_center.y, 0.0);
EXPECT_EQ(svConfig.sv2dConfig.carBoundingBox.width, 2.0);
@@ -78,12 +78,12 @@
EXPECT_EQ(svConfig.sv3dConfig.sv3dEnabled, true);
EXPECT_NE(svConfig.sv3dConfig.carModelConfigFile, "");
EXPECT_NE(svConfig.sv3dConfig.carModelObjFile, "");
- EXPECT_EQ(svConfig.sv3dConfig.sv3dParams.plane_radius, 6.0);
- EXPECT_EQ(svConfig.sv3dConfig.sv3dParams.plane_divisions, 20);
- EXPECT_EQ(svConfig.sv3dConfig.sv3dParams.curve_height, 5.0);
- EXPECT_EQ(svConfig.sv3dConfig.sv3dParams.curve_divisions, 30);
- EXPECT_EQ(svConfig.sv3dConfig.sv3dParams.angular_divisions, 50);
- EXPECT_EQ(svConfig.sv3dConfig.sv3dParams.curve_coefficient, 2.0);
+ EXPECT_EQ(svConfig.sv3dConfig.sv3dParams.plane_radius, 8.0);
+ EXPECT_EQ(svConfig.sv3dConfig.sv3dParams.plane_divisions, 50);
+ EXPECT_EQ(svConfig.sv3dConfig.sv3dParams.curve_height, 6.0);
+ EXPECT_EQ(svConfig.sv3dConfig.sv3dParams.curve_divisions, 50);
+ EXPECT_EQ(svConfig.sv3dConfig.sv3dParams.angular_divisions, 90);
+ EXPECT_EQ(svConfig.sv3dConfig.sv3dParams.curve_coefficient, 3.0);
EXPECT_EQ(svConfig.sv3dConfig.sv3dParams.high_details_shadows, true);
EXPECT_EQ(svConfig.sv3dConfig.sv3dParams.high_details_reflections, true);
}
diff --git a/surround_view/service-impl/ConfigReaderUtil.cpp b/cpp/surround_view/service-impl/ConfigReaderUtil.cpp
similarity index 100%
rename from surround_view/service-impl/ConfigReaderUtil.cpp
rename to cpp/surround_view/service-impl/ConfigReaderUtil.cpp
diff --git a/surround_view/service-impl/ConfigReaderUtil.h b/cpp/surround_view/service-impl/ConfigReaderUtil.h
similarity index 100%
rename from surround_view/service-impl/ConfigReaderUtil.h
rename to cpp/surround_view/service-impl/ConfigReaderUtil.h
diff --git a/surround_view/service-impl/IOModule.cpp b/cpp/surround_view/service-impl/IOModule.cpp
similarity index 100%
rename from surround_view/service-impl/IOModule.cpp
rename to cpp/surround_view/service-impl/IOModule.cpp
diff --git a/surround_view/service-impl/IOModule.h b/cpp/surround_view/service-impl/IOModule.h
similarity index 100%
rename from surround_view/service-impl/IOModule.h
rename to cpp/surround_view/service-impl/IOModule.h
diff --git a/surround_view/service-impl/IOModuleCommon.h b/cpp/surround_view/service-impl/IOModuleCommon.h
similarity index 100%
rename from surround_view/service-impl/IOModuleCommon.h
rename to cpp/surround_view/service-impl/IOModuleCommon.h
diff --git a/surround_view/service-impl/MathHelp.h b/cpp/surround_view/service-impl/MathHelp.h
similarity index 100%
rename from surround_view/service-impl/MathHelp.h
rename to cpp/surround_view/service-impl/MathHelp.h
diff --git a/surround_view/service-impl/Matrix4x4.h b/cpp/surround_view/service-impl/Matrix4x4.h
similarity index 100%
rename from surround_view/service-impl/Matrix4x4.h
rename to cpp/surround_view/service-impl/Matrix4x4.h
diff --git a/surround_view/service-impl/MtlReader.cpp b/cpp/surround_view/service-impl/MtlReader.cpp
similarity index 100%
rename from surround_view/service-impl/MtlReader.cpp
rename to cpp/surround_view/service-impl/MtlReader.cpp
diff --git a/surround_view/service-impl/MtlReader.h b/cpp/surround_view/service-impl/MtlReader.h
similarity index 100%
rename from surround_view/service-impl/MtlReader.h
rename to cpp/surround_view/service-impl/MtlReader.h
diff --git a/surround_view/service-impl/ObjReader.cpp b/cpp/surround_view/service-impl/ObjReader.cpp
similarity index 100%
rename from surround_view/service-impl/ObjReader.cpp
rename to cpp/surround_view/service-impl/ObjReader.cpp
diff --git a/surround_view/service-impl/ObjReader.h b/cpp/surround_view/service-impl/ObjReader.h
similarity index 100%
rename from surround_view/service-impl/ObjReader.h
rename to cpp/surround_view/service-impl/ObjReader.h
diff --git a/surround_view/service-impl/ObjReaderTests.cpp b/cpp/surround_view/service-impl/ObjReaderTests.cpp
similarity index 89%
rename from surround_view/service-impl/ObjReaderTests.cpp
rename to cpp/surround_view/service-impl/ObjReaderTests.cpp
index 9dae171..1c86737 100644
--- a/surround_view/service-impl/ObjReaderTests.cpp
+++ b/cpp/surround_view/service-impl/ObjReaderTests.cpp
@@ -33,9 +33,9 @@
namespace implementation {
namespace {
-TEST(ObjParserTests, ReadCubeSuccess) {
+TEST(ObjParserTests, ReadObjFileSuccess) {
std::map<std::string, CarPart> carPartsMap;
- EXPECT_TRUE(ReadObjFromFile("/etc/automotive/sv/cube.obj", &carPartsMap));
+ EXPECT_TRUE(ReadObjFromFile("vendor/etc/automotive/sv/sample_car.obj", &carPartsMap));
EXPECT_NE(carPartsMap.size(), 0);
}
diff --git a/surround_view/service-impl/SurroundView2dSession.cpp b/cpp/surround_view/service-impl/SurroundView2dSession.cpp
similarity index 93%
rename from surround_view/service-impl/SurroundView2dSession.cpp
rename to cpp/surround_view/service-impl/SurroundView2dSession.cpp
index c2cc185..1d1b3a9 100644
--- a/surround_view/service-impl/SurroundView2dSession.cpp
+++ b/cpp/surround_view/service-impl/SurroundView2dSession.cpp
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+#define ATRACE_TAG ATRACE_TAG_CAMERA
#include "SurroundView2dSession.h"
@@ -20,6 +21,7 @@
#include <android/hardware_buffer.h>
#include <system/camera_metadata.h>
#include <utils/SystemClock.h>
+#include <utils/Trace.h>
#include <thread>
@@ -62,7 +64,7 @@
int32_t framerate;
} RawStreamConfig;
-static const size_t kStreamCfgSz = sizeof(RawStreamConfig);
+static const size_t kStreamCfgSz = sizeof(RawStreamConfig) / sizeof(int32_t);
static const uint8_t kGrayColor = 128;
static const int kInputNumChannels = 4;
static const int kOutputNumChannels = 3;
@@ -85,6 +87,8 @@
Return<void> SurroundView2dSession::FramesHandler::deliverFrame_1_1(
const hidl_vec<BufferDesc_1_1>& buffers) {
+ ATRACE_BEGIN(__PRETTY_FUNCTION__);
+
LOG(INFO) << "Received " << buffers.size() << " frames from the camera";
mSession->mSequenceId++;
@@ -146,6 +150,8 @@
// Notify the session that a new set of frames is ready
mSession->mFramesSignal.notify_all();
+ ATRACE_END();
+
return {};
}
@@ -182,10 +188,12 @@
bool SurroundView2dSession::copyFromBufferToPointers(
BufferDesc_1_1 buffer, SurroundViewInputBufferPointers pointers) {
+ ATRACE_BEGIN(__PRETTY_FUNCTION__);
AHardwareBuffer_Desc* pDesc =
reinterpret_cast<AHardwareBuffer_Desc *>(&buffer.buffer.description);
+ ATRACE_BEGIN("Create Graphic Buffer");
// create a GraphicBuffer from the existing handle
sp<GraphicBuffer> inputBuffer = new GraphicBuffer(
buffer.buffer.nativeHandle, GraphicBuffer::CLONE_HANDLE, pDesc->width,
@@ -205,7 +213,9 @@
<< " format: " << pDesc->format
<< " stride: " << pDesc->stride;
}
+ ATRACE_END();
+ ATRACE_BEGIN("Lock input buffer (gpu to cpu)");
// Lock the input GraphicBuffer and map it to a pointer. If we failed to
// lock, return false.
void* inputDataPtr;
@@ -219,16 +229,28 @@
} else {
LOG(INFO) << "Managed to get read access to GraphicBuffer";
}
+ ATRACE_END();
+ ATRACE_BEGIN("Copy input data");
// Both source and destination are with 4 channels
memcpy(pointers.cpu_data_pointer, inputDataPtr,
pDesc->height * pDesc->width * kInputNumChannels);
LOG(DEBUG) << "Buffer copying finished";
+ ATRACE_END();
+
+ ATRACE_BEGIN("Unlock input buffer (cpu to gpu)");
+ inputBuffer->unlock();
+ ATRACE_END();
+
+ // Paired with ATRACE_BEGIN in the beginning of the method.
+ ATRACE_END();
return true;
}
void SurroundView2dSession::processFrames() {
+ ATRACE_BEGIN(__PRETTY_FUNCTION__);
+
while (true) {
{
unique_lock<mutex> lock(mAccessLock);
@@ -259,15 +281,15 @@
mStream = nullptr;
LOG(DEBUG) << "Stream marked STOPPED.";
}
+
+ ATRACE_END();
}
SurroundView2dSession::SurroundView2dSession(sp<IEvsEnumerator> pEvs,
IOModuleConfig* pConfig)
: mEvs(pEvs),
mIOModuleConfig(pConfig),
- mStreamState(STOPPED) {
- mEvsCameraIds = {"0", "1", "2", "3"};
-}
+ mStreamState(STOPPED) {}
SurroundView2dSession::~SurroundView2dSession() {
// In case the client did not call stopStream properly, we should stop the
@@ -450,6 +472,8 @@
bool SurroundView2dSession::handleFrames(int sequenceId) {
LOG(INFO) << __FUNCTION__ << "Handling sequenceId " << sequenceId << ".";
+ ATRACE_BEGIN(__PRETTY_FUNCTION__);
+
// TODO(b/157498592): Now only one sets of EVS input frames and one SV
// output frame is supported. Implement buffer queue for both of them.
{
@@ -502,8 +526,9 @@
return false;
}
}
-
LOG(INFO) << "Output Pointer data format: " << mOutputPointer.format;
+
+ ATRACE_BEGIN("SV core lib method: Get2dSurroundView");
if (mSurroundView->Get2dSurroundView(mInputPointers, &mOutputPointer)) {
LOG(INFO) << "Get2dSurroundView succeeded";
} else {
@@ -512,16 +537,21 @@
memset(mOutputPointer.data_pointer, kGrayColor,
mOutputHeight * mOutputWidth * kOutputNumChannels);
}
+ ATRACE_END();
+ ATRACE_BEGIN("Lock output texture (gpu to cpu)");
void* textureDataPtr = nullptr;
mSvTexture->lock(GRALLOC_USAGE_SW_WRITE_OFTEN
| GRALLOC_USAGE_SW_READ_NEVER,
&textureDataPtr);
+ ATRACE_END();
+
if (!textureDataPtr) {
LOG(ERROR) << "Failed to gain write access to GraphicBuffer!";
return false;
}
+ ATRACE_BEGIN("Copy output result");
// Note: there is a chance that the stride of the texture is not the same
// as the width. For example, when the input frame is 1920 * 1080, the
// width is 1080, but the stride is 2048. So we'd better copy the data line
@@ -540,7 +570,11 @@
}
}
LOG(DEBUG) << "memcpy finished";
+ ATRACE_END();
+
+ ATRACE_BEGIN("Unlock output texture (cpu to gpu)");
mSvTexture->unlock();
+ ATRACE_END();
ANativeWindowBuffer* buffer = mSvTexture->getNativeBuffer();
LOG(DEBUG) << "ANativeWindowBuffer->handle: "
@@ -569,12 +603,16 @@
mStream->receiveFrames(mFramesRecord.frames);
}
+ ATRACE_END();
+
return true;
}
bool SurroundView2dSession::initialize() {
lock_guard<mutex> lock(mAccessLock, adopt_lock);
+ ATRACE_BEGIN(__PRETTY_FUNCTION__);
+
if (!setupEvs()) {
LOG(ERROR) << "Failed to setup EVS components for 2d session";
return false;
@@ -596,14 +634,21 @@
mIOModuleConfig->sv2dConfig.carBoundingBox,
mIOModuleConfig->carModelConfig.carModel.texturesMap,
mIOModuleConfig->carModelConfig.carModel.partsMap);
+
+ ATRACE_BEGIN("SV core lib method: SetStaticData");
mSurroundView->SetStaticData(params);
+ ATRACE_END();
+
+ ATRACE_BEGIN("SV core lib method: Start2dPipeline");
if (mSurroundView->Start2dPipeline()) {
LOG(INFO) << "Start2dPipeline succeeded";
} else {
LOG(ERROR) << "Start2dPipeline failed";
return false;
}
+ ATRACE_END();
+ ATRACE_BEGIN("Allocate cpu buffers");
mInputPointers.resize(kNumFrames);
for (int i = 0; i < kNumFrames; i++) {
mInputPointers[i].width = mCameraParams[i].size.width;
@@ -633,7 +678,9 @@
LOG(ERROR) << "Memory allocation failed. Exiting.";
return false;
}
+ ATRACE_END();
+ ATRACE_BEGIN("Allocate output texture");
mSvTexture = new GraphicBuffer(mOutputWidth,
mOutputHeight,
HAL_PIXEL_FORMAT_RGB_888,
@@ -656,10 +703,15 @@
}
mIsInitialized = true;
+
+ ATRACE_END();
+
return true;
}
bool SurroundView2dSession::setupEvs() {
+ ATRACE_BEGIN(__PRETTY_FUNCTION__);
+
// Reads the camera related information from the config object
const string evsGroupId = mIOModuleConfig->cameraConfig.evsGroupId;
@@ -729,11 +781,17 @@
LOG(ERROR) << "Failed to allocate EVS Camera interface for " << camId;
return false;
} else {
- LOG(INFO) << "Camera " << camId << " is opened successfully";
+ LOG(INFO) << "Logical camera " << camId << " is opened successfully";
+ }
+
+ mEvsCameraIds = mIOModuleConfig->cameraConfig.evsCameraIds;
+ if (mEvsCameraIds.size() < kNumFrames) {
+ LOG(ERROR) << "Incorrect camera info is stored in the camera config";
+ return false;
}
map<string, AndroidCameraParams> cameraIdToAndroidParameters;
- for (const auto& id : mIOModuleConfig->cameraConfig.evsCameraIds) {
+ for (const auto& id : mEvsCameraIds) {
AndroidCameraParams params;
if (getAndroidCameraParams(mCamera, id, params)) {
cameraIdToAndroidParameters.emplace(id, params);
@@ -755,10 +813,14 @@
camera.circular_fov = 179;
}
+ ATRACE_END();
+
return true;
}
bool SurroundView2dSession::startEvs() {
+ ATRACE_BEGIN(__PRETTY_FUNCTION__);
+
mFramesHandler = new FramesHandler(mCamera, this);
Return<EvsResult> result = mCamera->startVideoStream(mFramesHandler);
if (result != EvsResult::OK) {
@@ -768,6 +830,8 @@
LOG(INFO) << "Video stream was started successfully";
}
+ ATRACE_END();
+
return true;
}
diff --git a/surround_view/service-impl/SurroundView2dSession.h b/cpp/surround_view/service-impl/SurroundView2dSession.h
similarity index 100%
rename from surround_view/service-impl/SurroundView2dSession.h
rename to cpp/surround_view/service-impl/SurroundView2dSession.h
diff --git a/cpp/surround_view/service-impl/SurroundView2dSessionTests.cpp b/cpp/surround_view/service-impl/SurroundView2dSessionTests.cpp
new file mode 100644
index 0000000..a452ddf
--- /dev/null
+++ b/cpp/surround_view/service-impl/SurroundView2dSessionTests.cpp
@@ -0,0 +1,142 @@
+/*
+ * Copyright 2020 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.
+ */
+
+#define LOG_TAG "SurroundView2dSessionTests"
+
+#include "mock-evs/MockEvsEnumerator.h"
+#include "mock-evs/MockSurroundViewCallback.h"
+
+#include "IOModule.h"
+#include "SurroundView2dSession.h"
+
+#include <android/hardware/automotive/vehicle/2.0/IVehicle.h>
+
+#include <android-base/logging.h>
+
+#include <gtest/gtest.h>
+#include <time.h>
+
+namespace android {
+namespace hardware {
+namespace automotive {
+namespace sv {
+namespace V1_0 {
+namespace implementation {
+namespace {
+
+const char* kSvConfigFilename = "vendor/etc/automotive/sv/sv_sample_config.xml";
+
+using android::hardware::automotive::sv::V1_0::Sv2dMappingInfo;
+using android::hardware::automotive::sv::V1_0::SvQuality;
+
+// Sv 2D output height and width set by the config file.
+const int kSv2dWidth = 768;
+const int kSv2dHeight = 1024;
+
+class SurroundView2dSessionTests : public ::testing::Test {
+protected:
+ void SetUp() override {
+ sp<IEvsEnumerator> fakeEvs = new MockEvsEnumerator();
+ mIoModule = new IOModule(kSvConfigFilename);
+ EXPECT_EQ(mIoModule->initialize(), IOStatus::OK);
+
+ mIoModule->getConfig(&mIoModuleConfig);
+
+ mSv2dSession = new SurroundView2dSession(fakeEvs, &mIoModuleConfig);
+ EXPECT_TRUE(mSv2dSession->initialize());
+ }
+
+ IOModule* mIoModule;
+ IOModuleConfig mIoModuleConfig;
+ sp<SurroundView2dSession> mSv2dSession;
+};
+
+TEST_F(SurroundView2dSessionTests, startAndStopSurroundView2dSession) {
+ sp<MockSurroundViewCallback> sv2dCallback =
+ new MockSurroundViewCallback(mSv2dSession);
+
+ EXPECT_EQ(mSv2dSession->startStream(sv2dCallback), SvResult::OK);
+
+ sleep(5);
+
+ mSv2dSession->stopStream();
+}
+
+TEST_F(SurroundView2dSessionTests, get2dMappingInfoSuccess) {
+ Sv2dMappingInfo sv2dMappingInfo;
+ mSv2dSession->get2dMappingInfo(
+ [&sv2dMappingInfo](const Sv2dMappingInfo& mappingInfo) {
+ sv2dMappingInfo = mappingInfo;
+ });
+
+ EXPECT_NE(sv2dMappingInfo.width, 0);
+ EXPECT_NE(sv2dMappingInfo.height, 0);
+ EXPECT_EQ(sv2dMappingInfo.center.x, 0.0f);
+ EXPECT_EQ(sv2dMappingInfo.center.y, 0.0f);
+}
+
+TEST_F(SurroundView2dSessionTests, get2dConfigSuccess) {
+ Sv2dConfig sv2dConfig;
+ mSv2dSession->get2dConfig(
+ [&sv2dConfig](const Sv2dConfig& config) {
+ sv2dConfig = config;
+ });
+
+ EXPECT_EQ(sv2dConfig.width, kSv2dWidth);
+ EXPECT_EQ(sv2dConfig.blending, SvQuality::HIGH);
+}
+
+// Sets a different config and checks of the received config matches.
+TEST_F(SurroundView2dSessionTests, setAndGet2dConfigSuccess) {
+ // Set config.
+ Sv2dConfig sv2dConfigSet = {kSv2dWidth / 2, SvQuality::LOW};
+ EXPECT_EQ(mSv2dSession->set2dConfig(sv2dConfigSet), SvResult::OK);
+
+ // Get config.
+ Sv2dConfig sv2dConfigReceived;
+ mSv2dSession->get2dConfig(
+ [&sv2dConfigReceived](const Sv2dConfig& config) {
+ sv2dConfigReceived = config;
+ });
+
+ EXPECT_EQ(sv2dConfigReceived.width, sv2dConfigSet.width);
+ EXPECT_EQ(sv2dConfigReceived.blending, sv2dConfigSet.blending);
+}
+
+// Projects center of each cameras and checks if valid projected point is received.
+TEST_F(SurroundView2dSessionTests, projectPoints2dSuccess) {
+ hidl_vec<Point2dInt> points2dCamera = {
+ /*Center point*/{.x = kSv2dWidth / 2, .y = kSv2dHeight /2}
+ };
+
+ std::vector<hidl_string> cameraIds = {"/dev/video60", "/dev/video61", "/dev/video62" ,
+ "/dev/video63"};
+
+ for (int i = 0; i < cameraIds.size(); i++) {
+ mSv2dSession->projectCameraPoints(points2dCamera, cameraIds[i],
+ [](const hidl_vec<Point2dFloat>& projectedPoints) {
+ EXPECT_TRUE(projectedPoints[0].isValid);
+ });
+ }
+}
+
+} // namespace
+} // namespace implementation
+} // namespace V1_0
+} // namespace sv
+} // namespace automotive
+} // namespace hardware
+} // namespace android
diff --git a/surround_view/service-impl/SurroundView3dSession.cpp b/cpp/surround_view/service-impl/SurroundView3dSession.cpp
similarity index 93%
rename from surround_view/service-impl/SurroundView3dSession.cpp
rename to cpp/surround_view/service-impl/SurroundView3dSession.cpp
index 18d7d4f..67ba284 100644
--- a/surround_view/service-impl/SurroundView3dSession.cpp
+++ b/cpp/surround_view/service-impl/SurroundView3dSession.cpp
@@ -13,6 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+#define ATRACE_TAG ATRACE_TAG_CAMERA
#include "SurroundView3dSession.h"
@@ -22,6 +23,7 @@
#include <hidlmemory/mapping.h>
#include <system/camera_metadata.h>
#include <utils/SystemClock.h>
+#include <utils/Trace.h>
#include <array>
#include <thread>
@@ -69,7 +71,7 @@
int32_t framerate;
} RawStreamConfig;
-static const size_t kStreamCfgSz = sizeof(RawStreamConfig);
+static const size_t kStreamCfgSz = sizeof(RawStreamConfig) / sizeof(int32_t);
static const uint8_t kGrayColor = 128;
static const int kNumFrames = 4;
static const int kInputNumChannels = 4;
@@ -91,6 +93,8 @@
Return<void> SurroundView3dSession::FramesHandler::deliverFrame_1_1(
const hidl_vec<BufferDesc_1_1>& buffers) {
+ ATRACE_BEGIN(__PRETTY_FUNCTION__);
+
LOG(INFO) << "Received " << buffers.size() << " frames from the camera";
mSession->mSequenceId++;
@@ -159,6 +163,8 @@
// Notify the session that a new set of frames is ready
mSession->mFramesSignal.notify_all();
+ ATRACE_END();
+
return {};
}
@@ -196,9 +202,12 @@
bool SurroundView3dSession::copyFromBufferToPointers(
BufferDesc_1_1 buffer, SurroundViewInputBufferPointers pointers) {
+ ATRACE_BEGIN(__PRETTY_FUNCTION__);
+
AHardwareBuffer_Desc* pDesc =
reinterpret_cast<AHardwareBuffer_Desc *>(&buffer.buffer.description);
+ ATRACE_BEGIN("Create Graphic Buffer");
// create a GraphicBuffer from the existing handle
sp<GraphicBuffer> inputBuffer = new GraphicBuffer(
buffer.buffer.nativeHandle, GraphicBuffer::CLONE_HANDLE, pDesc->width,
@@ -218,7 +227,9 @@
<< " format: " << pDesc->format
<< " stride: " << pDesc->stride;
}
+ ATRACE_END();
+ ATRACE_BEGIN("Lock input buffer (gpu to cpu)");
// Lock the input GraphicBuffer and map it to a pointer. If we failed to
// lock, return false.
void* inputDataPtr;
@@ -232,22 +243,36 @@
} else {
LOG(INFO) << "Managed to get read access to GraphicBuffer";
}
+ ATRACE_END();
+ ATRACE_BEGIN("Copy input data");
// Both source and destination are with 4 channels
memcpy(pointers.cpu_data_pointer, inputDataPtr,
pDesc->height * pDesc->width * kInputNumChannels);
LOG(INFO) << "Buffer copying finished";
+ ATRACE_END();
+
+ ATRACE_BEGIN("Unlock input buffer (cpu to gpu)");
+ inputBuffer->unlock();
+ ATRACE_END();
+
+ // Paired with ATRACE_BEGIN in the beginning of the method.
+ ATRACE_END();
return true;
}
void SurroundView3dSession::processFrames() {
+ ATRACE_BEGIN(__PRETTY_FUNCTION__);
+
+ ATRACE_BEGIN("SV core lib method: Start3dPipeline");
if (mSurroundView->Start3dPipeline()) {
LOG(INFO) << "Start3dPipeline succeeded";
} else {
LOG(ERROR) << "Start3dPipeline failed";
return;
}
+ ATRACE_END();
while (true) {
{
@@ -279,6 +304,8 @@
mStream = nullptr;
LOG(DEBUG) << "Stream marked STOPPED.";
}
+
+ ATRACE_END();
}
SurroundView3dSession::SurroundView3dSession(sp<IEvsEnumerator> pEvs,
@@ -289,9 +316,7 @@
mStreamState(STOPPED),
mVhalHandler(vhalHandler),
mAnimationModule(animationModule),
- mIOModuleConfig(pConfig) {
- mEvsCameraIds = {"0" , "1", "2", "3"};
-}
+ mIOModuleConfig(pConfig) {}
SurroundView3dSession::~SurroundView3dSession() {
// In case the client did not call stopStream properly, we should stop the
@@ -602,6 +627,8 @@
bool SurroundView3dSession::handleFrames(int sequenceId) {
LOG(INFO) << __FUNCTION__ << "Handling sequenceId " << sequenceId << ".";
+ ATRACE_BEGIN(__PRETTY_FUNCTION__);
+
// TODO(b/157498592): Now only one sets of EVS input frames and one SV
// output frame is supported. Implement buffer queue for both of them.
{
@@ -657,6 +684,7 @@
}
}
+ ATRACE_BEGIN("SV core lib method: Set3dOverlay");
// Set 3d overlays.
{
scoped_lock<mutex> lock(mAccessLock);
@@ -667,7 +695,9 @@
mOverlayIsUpdated = false;
}
}
+ ATRACE_END();
+ ATRACE_BEGIN("VhalHandler method: getPropertyValues");
// Get the latest VHal property values
if (mVhalHandler != nullptr) {
if (!mVhalHandler->getPropertyValues(&mPropertyValues)) {
@@ -676,19 +706,24 @@
} else {
LOG(WARNING) << "VhalHandler is null. Ignored";
}
+ ATRACE_END();
+ ATRACE_BEGIN("AnimationModule method: getUpdatedAnimationParams");
vector<AnimationParam> params;
if (mAnimationModule != nullptr) {
params = mAnimationModule->getUpdatedAnimationParams(mPropertyValues);
} else {
LOG(WARNING) << "AnimationModule is null. Ignored";
}
+ ATRACE_END();
+ ATRACE_BEGIN("SV core lib method: SetAnimations");
if (!params.empty()) {
mSurroundView->SetAnimations(params);
} else {
LOG(INFO) << "AnimationParams is empty. Ignored";
}
+ ATRACE_END();
// Get the view.
// TODO(161399517): Only single view is currently supported, add support for multiple views.
@@ -698,6 +733,7 @@
const std::array<float, 4> viewQuaternion = {quat.x, quat.y, quat.z, quat.w};
const std::array<float, 3> viewTranslation = {trans.x, trans.y, trans.z};
+ ATRACE_BEGIN("SV core lib method: Get3dSurroundView");
if (mSurroundView->Get3dSurroundView(
mInputPointers, viewQuaternion, viewTranslation, &mOutputPointer)) {
LOG(INFO) << "Get3dSurroundView succeeded";
@@ -707,16 +743,21 @@
memset(mOutputPointer.data_pointer, kGrayColor,
mOutputHeight * mOutputWidth * kOutputNumChannels);
}
+ ATRACE_END();
+ ATRACE_BEGIN("Lock output texture (gpu to cpu)");
void* textureDataPtr = nullptr;
mSvTexture->lock(GRALLOC_USAGE_SW_WRITE_OFTEN
| GRALLOC_USAGE_SW_READ_NEVER,
&textureDataPtr);
+ ATRACE_END();
+
if (!textureDataPtr) {
LOG(ERROR) << "Failed to gain write access to GraphicBuffer!";
return false;
}
+ ATRACE_BEGIN("Copy output result");
// Note: there is a chance that the stride of the texture is not the
// same as the width. For example, when the input frame is 1920 * 1080,
// the width is 1080, but the stride is 2048. So we'd better copy the
@@ -735,7 +776,11 @@
}
}
LOG(INFO) << "memcpy finished!";
+ ATRACE_END();
+
+ ATRACE_BEGIN("Unlock output texture (cpu to gpu)");
mSvTexture->unlock();
+ ATRACE_END();
ANativeWindowBuffer* buffer = mSvTexture->getNativeBuffer();
LOG(DEBUG) << "ANativeWindowBuffer->handle: " << buffer->handle;
@@ -763,12 +808,16 @@
mStream->receiveFrames(mFramesRecord.frames);
}
+ ATRACE_END();
+
return true;
}
bool SurroundView3dSession::initialize() {
lock_guard<mutex> lock(mAccessLock, adopt_lock);
+ ATRACE_BEGIN(__PRETTY_FUNCTION__);
+
if (!setupEvs()) {
LOG(ERROR) << "Failed to setup EVS components for 3d session";
return false;
@@ -790,8 +839,11 @@
mIOModuleConfig->sv2dConfig.carBoundingBox,
mIOModuleConfig->carModelConfig.carModel.texturesMap,
mIOModuleConfig->carModelConfig.carModel.partsMap);
+ ATRACE_BEGIN("SV core lib method: SetStaticData");
mSurroundView->SetStaticData(params);
+ ATRACE_END();
+ ATRACE_BEGIN("Allocate cpu buffers");
mInputPointers.resize(kNumFrames);
for (int i = 0; i < kNumFrames; i++) {
mInputPointers[i].width = mCameraParams[i].size.width;
@@ -821,7 +873,9 @@
LOG(ERROR) << "Memory allocation failed. Exiting.";
return false;
}
+ ATRACE_END();
+ ATRACE_BEGIN("Allocate output texture");
mSvTexture = new GraphicBuffer(mOutputWidth,
mOutputHeight,
HAL_PIXEL_FORMAT_RGBA_8888,
@@ -835,13 +889,18 @@
LOG(ERROR) << "Failed to allocate Graphic Buffer";
return false;
}
-
+ ATRACE_END();
mIsInitialized = true;
+
+ ATRACE_END();
+
return true;
}
bool SurroundView3dSession::setupEvs() {
+ ATRACE_BEGIN(__PRETTY_FUNCTION__);
+
// Reads the camera related information from the config object
const string evsGroupId = mIOModuleConfig->cameraConfig.evsGroupId;
@@ -911,11 +970,17 @@
LOG(ERROR) << "Failed to allocate EVS Camera interface for " << camId;
return false;
} else {
- LOG(INFO) << "Camera " << camId << " is opened successfully";
+ LOG(INFO) << "Logical camera " << camId << " is opened successfully";
+ }
+
+ mEvsCameraIds = mIOModuleConfig->cameraConfig.evsCameraIds;
+ if (mEvsCameraIds.size() < kNumFrames) {
+ LOG(ERROR) << "Incorrect camera info is stored in the camera config";
+ return false;
}
map<string, AndroidCameraParams> cameraIdToAndroidParameters;
- for (const auto& id : mIOModuleConfig->cameraConfig.evsCameraIds) {
+ for (const auto& id : mEvsCameraIds) {
AndroidCameraParams params;
if (getAndroidCameraParams(mCamera, id, params)) {
cameraIdToAndroidParameters.emplace(id, params);
@@ -937,10 +1002,14 @@
camera.circular_fov = 179;
}
+ ATRACE_END();
+
return true;
}
bool SurroundView3dSession::startEvs() {
+ ATRACE_BEGIN(__PRETTY_FUNCTION__);
+
mFramesHandler = new FramesHandler(mCamera, this);
Return<EvsResult> result = mCamera->startVideoStream(mFramesHandler);
if (result != EvsResult::OK) {
@@ -950,6 +1019,8 @@
LOG(INFO) << "Video stream was started successfully";
}
+ ATRACE_END();
+
return true;
}
diff --git a/surround_view/service-impl/SurroundView3dSession.h b/cpp/surround_view/service-impl/SurroundView3dSession.h
similarity index 100%
rename from surround_view/service-impl/SurroundView3dSession.h
rename to cpp/surround_view/service-impl/SurroundView3dSession.h
diff --git a/cpp/surround_view/service-impl/SurroundView3dSessionTests.cpp b/cpp/surround_view/service-impl/SurroundView3dSessionTests.cpp
new file mode 100644
index 0000000..afe8f07
--- /dev/null
+++ b/cpp/surround_view/service-impl/SurroundView3dSessionTests.cpp
@@ -0,0 +1,350 @@
+/*
+ * Copyright 2020 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.
+ */
+
+#define LOG_TAG "SurroundView3dSessionTests"
+
+#include "AnimationModule.h"
+#include "IOModule.h"
+#include "SurroundView3dSession.h"
+#include "VhalHandler.h"
+#include "mock-evs/MockEvsEnumerator.h"
+#include "mock-evs/MockSurroundViewCallback.h"
+
+#include <android-base/logging.h>
+#include <android/hardware/automotive/vehicle/2.0/IVehicle.h>
+#include <android/hidl/allocator/1.0/IAllocator.h>
+#include <android/hidl/memory/1.0/IMemory.h>
+#include <gtest/gtest.h>
+#include <hidlmemory/mapping.h>
+
+#include <time.h>
+
+namespace android {
+namespace hardware {
+namespace automotive {
+namespace sv {
+namespace V1_0 {
+namespace implementation {
+namespace {
+
+using ::android::sp;
+using ::android::hardware::hidl_memory;
+using ::android::hardware::hidl_string;
+using ::android::hardware::hidl_vec;
+using ::android::hardware::automotive::sv::V1_0::OverlayMemoryDesc;
+using ::android::hidl::allocator::V1_0::IAllocator;
+using ::android::hidl::memory::V1_0::IMemory;
+
+const char* kSvConfigFilename = "vendor/etc/automotive/sv/sv_sample_config.xml";
+
+// Sv 3D output height and width set by the config file.
+const int kSv3dWidth = 1920;
+const int kSv3dHeight = 1080;
+
+// Constants for overlays.
+const int kVertexByteSize = (3 * sizeof(float)) + 4;
+const int kIdByteSize = 2;
+
+class SurroundView3dSessionTests : public ::testing::Test {
+protected:
+ // Setup sv3d session without vhal and animations.
+ void SetupSv3dSession() {
+ mFakeEvs = new MockEvsEnumerator();
+ mIoModule = new IOModule(kSvConfigFilename);
+ EXPECT_EQ(mIoModule->initialize(), IOStatus::OK);
+
+ mIoModule->getConfig(&mIoModuleConfig);
+
+ mSv3dSession = new SurroundView3dSession(mFakeEvs, nullptr,
+ nullptr,
+ &mIoModuleConfig);
+
+ EXPECT_TRUE(mSv3dSession->initialize());
+ mSv3dCallback = new MockSurroundViewCallback(mSv3dSession);
+ vector<View3d> views = {
+ {
+ .viewId = 0,
+ .pose = {
+ .rotation = {.x = 0, .y = 0, .z = 0, .w = 1.0f},
+ .translation = {.x = 0, .y = 0, .z = 0},
+ },
+ .horizontalFov = 90,
+ }};
+ mSv3dSession->setViews(views);
+ }
+
+ // Setup sv3d session with vhal and animations.
+ void SetupSv3dSessionVhalAnimation() {
+ mFakeEvs = new MockEvsEnumerator();
+ mIoModule = new IOModule(kSvConfigFilename);
+ EXPECT_EQ(mIoModule->initialize(), IOStatus::OK);
+
+ mIoModule->getConfig(&mIoModuleConfig);
+
+ mVhalHandler = new VhalHandler();
+ ASSERT_TRUE(mVhalHandler->initialize(VhalHandler::UpdateMethod::GET, 10));
+
+ mAnimationModule = new AnimationModule(mIoModuleConfig.carModelConfig.carModel.partsMap,
+ mIoModuleConfig.carModelConfig.carModel.texturesMap,
+ mIoModuleConfig.carModelConfig.animationConfig.animations);
+
+ const std::vector<uint64_t> animationPropertiesToRead =
+ getAnimationPropertiesToRead(mIoModuleConfig.carModelConfig.animationConfig);
+ ASSERT_TRUE(mVhalHandler->setPropertiesToRead(animationPropertiesToRead));
+
+ mSv3dSessionAnimations = new SurroundView3dSession(mFakeEvs, mVhalHandler,
+ mAnimationModule,
+ &mIoModuleConfig);
+
+ EXPECT_TRUE(mSv3dSessionAnimations->initialize());
+
+ mSv3dCallbackAnimations = new MockSurroundViewCallback(mSv3dSessionAnimations);
+ vector<View3d> views = {
+ // View 0
+ {
+ .viewId = 0,
+ .pose = {
+ .rotation = {.x = 0, .y = 0, .z = 0, .w = 1.0f},
+ .translation = {.x = 0, .y = 0, .z = 0},
+ },
+ .horizontalFov = 90,
+ }};
+
+ mSv3dSessionAnimations->setViews(views);
+ }
+
+ // Helper function to get list of vhal properties to read from car config file for animations.
+ std::vector<uint64_t> getAnimationPropertiesToRead(const AnimationConfig& animationConfig) {
+ std::set<uint64_t> propertiesSet;
+ for (const auto& animation : animationConfig.animations) {
+ for (const auto& opPair : animation.gammaOpsMap) {
+ propertiesSet.insert(opPair.first);
+ }
+
+ for (const auto& opPair : animation.textureOpsMap) {
+ propertiesSet.insert(opPair.first);
+ }
+
+ for (const auto& opPair : animation.rotationOpsMap) {
+ propertiesSet.insert(opPair.first);
+ }
+
+ for (const auto& opPair : animation.translationOpsMap) {
+ propertiesSet.insert(opPair.first);
+ }
+ }
+ std::vector<uint64_t> propertiesToRead;
+ propertiesToRead.assign(propertiesSet.begin(), propertiesSet.end());
+ return propertiesToRead;
+ }
+
+ void TearDown() override {
+ mSv3dSession = nullptr;
+ mFakeEvs = nullptr;
+ mSv3dCallback = nullptr;
+ delete mVhalHandler;
+ delete mAnimationModule;
+ delete mIoModule;
+ }
+
+ sp<IEvsEnumerator> mFakeEvs;
+ IOModule* mIoModule;
+ IOModuleConfig mIoModuleConfig;
+ sp<SurroundView3dSession> mSv3dSession;
+ sp<MockSurroundViewCallback> mSv3dCallback;
+
+ VhalHandler* mVhalHandler;
+ AnimationModule* mAnimationModule;
+ sp<SurroundView3dSession> mSv3dSessionAnimations;
+ sp<MockSurroundViewCallback> mSv3dCallbackAnimations;
+};
+
+TEST_F(SurroundView3dSessionTests, startAndStop3dSession) {
+ SetupSv3dSession();
+ EXPECT_EQ(mSv3dSession->startStream(mSv3dCallback), SvResult::OK);
+ sleep(5);
+ mSv3dSession->stopStream();
+ EXPECT_GT(mSv3dCallback->getReceivedFramesCount(), 0);
+}
+
+TEST_F(SurroundView3dSessionTests, get3dConfigSuccess) {
+ SetupSv3dSession();
+ Sv3dConfig sv3dConfig;
+ mSv3dSession->get3dConfig([&sv3dConfig](const Sv3dConfig& config) { sv3dConfig = config; });
+
+ EXPECT_EQ(sv3dConfig.width, kSv3dWidth);
+ EXPECT_EQ(sv3dConfig.height, kSv3dHeight);
+ EXPECT_EQ(sv3dConfig.carDetails, SvQuality::HIGH);
+}
+
+// Sets a different config and checks of the received config matches.
+TEST_F(SurroundView3dSessionTests, setAndGet3dConfigSuccess) {
+ SetupSv3dSession();
+ Sv3dConfig sv3dConfigSet = {kSv3dWidth / 2, kSv3dHeight / 2, SvQuality::LOW};
+
+ EXPECT_EQ(mSv3dSession->set3dConfig(sv3dConfigSet), SvResult::OK);
+
+ Sv3dConfig sv3dConfigReceived;
+ mSv3dSession->get3dConfig(
+ [&sv3dConfigReceived](const Sv3dConfig& config) { sv3dConfigReceived = config; });
+
+ EXPECT_EQ(sv3dConfigReceived.width, sv3dConfigSet.width);
+ EXPECT_EQ(sv3dConfigReceived.height, sv3dConfigSet.height);
+ EXPECT_EQ(sv3dConfigReceived.carDetails, sv3dConfigSet.carDetails);
+}
+
+// Projects center of each cameras and checks if valid projected point is received.
+TEST_F(SurroundView3dSessionTests, projectPoints3dSuccess) {
+ SetupSv3dSession();
+ hidl_vec<Point2dInt> points2dCamera = {
+ /*Center point*/ {.x = kSv3dWidth / 2, .y = kSv3dHeight / 2}};
+
+ std::vector<hidl_string> cameraIds = {"/dev/video60", "/dev/video61", "/dev/video62",
+ "/dev/video63"};
+
+ for (int i = 0; i < cameraIds.size(); i++) {
+ mSv3dSession
+ ->projectCameraPointsTo3dSurface(points2dCamera, cameraIds[i],
+ [](const hidl_vec<Point3dFloat>& projectedPoints) {
+ EXPECT_TRUE(projectedPoints[0].isValid);
+ });
+ }
+}
+
+std::pair<hidl_memory, sp<IMemory>> GetMappedSharedMemory(int bytesSize) {
+ const auto nullResult = std::make_pair(hidl_memory(), nullptr);
+
+ sp<IAllocator> ashmemAllocator = IAllocator::getService("ashmem");
+ if (ashmemAllocator.get() == nullptr) {
+ return nullResult;
+ }
+
+ // Allocate shared memory.
+ hidl_memory hidlMemory;
+ bool allocateSuccess = false;
+ Return<void> result =
+ ashmemAllocator->allocate(bytesSize, [&](bool success, const hidl_memory& hidlMem) {
+ if (!success) {
+ return;
+ }
+ allocateSuccess = success;
+ hidlMemory = hidlMem;
+ });
+
+ // Check result of allocated memory.
+ if (!result.isOk() || !allocateSuccess) {
+ return nullResult;
+ }
+
+ // Map shared memory.
+ sp<IMemory> pIMemory = mapMemory(hidlMemory);
+ if (pIMemory.get() == nullptr) {
+ return nullResult;
+ }
+
+ return std::make_pair(hidlMemory, pIMemory);
+}
+
+void SetIndexOfOverlaysMemory(const std::vector<OverlayMemoryDesc>& overlaysMemDesc,
+ sp<IMemory> pIMemory, int indexPosition, uint16_t indexValue) {
+ // Count the number of vertices until the index.
+ int totalVerticesCount = 0;
+ for (int i = 0; i < indexPosition; i++) {
+ totalVerticesCount += overlaysMemDesc[i].verticesCount;
+ }
+
+ const int indexBytePosition =
+ (indexPosition * kIdByteSize) + (kVertexByteSize * totalVerticesCount);
+
+ uint8_t* pSharedMemoryData = reinterpret_cast<uint8_t*>((void*)pIMemory->getPointer());
+ pSharedMemoryData += indexBytePosition;
+ uint16_t* pIndex16bit = reinterpret_cast<uint16_t*>(pSharedMemoryData);
+
+ // Modify shared memory.
+ pIMemory->update();
+ *pIndex16bit = indexValue;
+ pIMemory->commit();
+}
+
+std::pair<OverlaysData, sp<IMemory>> GetSampleOverlaysData() {
+ OverlaysData overlaysData;
+ overlaysData.overlaysMemoryDesc.resize(2);
+
+ int sharedMemBytesSize = 0;
+ OverlayMemoryDesc overlayMemDesc1, overlayMemDesc2;
+ overlayMemDesc1.id = 0;
+ overlayMemDesc1.verticesCount = 6;
+ overlayMemDesc1.overlayPrimitive = OverlayPrimitive::TRIANGLES;
+ overlaysData.overlaysMemoryDesc[0] = overlayMemDesc1;
+ sharedMemBytesSize += kIdByteSize + kVertexByteSize * overlayMemDesc1.verticesCount;
+
+ overlayMemDesc2.id = 1;
+ overlayMemDesc2.verticesCount = 4;
+ overlayMemDesc2.overlayPrimitive = OverlayPrimitive::TRIANGLES_STRIP;
+ overlaysData.overlaysMemoryDesc[1] = overlayMemDesc2;
+ sharedMemBytesSize += kIdByteSize + kVertexByteSize * overlayMemDesc2.verticesCount;
+
+ std::pair<hidl_memory, sp<IMemory>> sharedMem = GetMappedSharedMemory(sharedMemBytesSize);
+ sp<IMemory> pIMemory = sharedMem.second;
+ if (pIMemory.get() == nullptr) {
+ return std::make_pair(OverlaysData(), nullptr);
+ }
+
+ // Get pointer to shared memory data and set all bytes to 0.
+ uint8_t* pSharedMemoryData = reinterpret_cast<uint8_t*>((void*)pIMemory->getPointer());
+ pIMemory->update();
+ memset(pSharedMemoryData, 0, sharedMemBytesSize);
+ pIMemory->commit();
+
+ std::vector<OverlayMemoryDesc> overlaysDesc = {overlayMemDesc1, overlayMemDesc2};
+
+ // Set indexes in shared memory.
+ SetIndexOfOverlaysMemory(overlaysDesc, pIMemory, 0, overlayMemDesc1.id);
+ SetIndexOfOverlaysMemory(overlaysDesc, pIMemory, 1, overlayMemDesc2.id);
+
+ overlaysData.overlaysMemoryDesc = overlaysDesc;
+ overlaysData.overlaysMemory = sharedMem.first;
+
+ return std::make_pair(overlaysData, pIMemory);
+}
+
+// Verifies a valid overlay can be updated while streaming.
+TEST_F(SurroundView3dSessionTests, updateOverlaysSuccess) {
+ SetupSv3dSession();
+ std::pair<OverlaysData, sp<IMemory>> overlaysData = GetSampleOverlaysData();
+ ASSERT_NE(overlaysData.second, nullptr);
+ EXPECT_EQ(mSv3dSession->startStream(mSv3dCallback), SvResult::OK);
+ SvResult result = mSv3dSession->updateOverlays(overlaysData.first);
+ mSv3dSession->stopStream();
+ EXPECT_EQ(result, SvResult::OK);
+}
+
+// Setup sv 3d sessin with vhal and animations and verify frames are received successfully.
+TEST_F(SurroundView3dSessionTests, vhalAnimationSuccess) {
+ SetupSv3dSessionVhalAnimation();
+ EXPECT_EQ(mSv3dSessionAnimations->startStream(mSv3dCallbackAnimations), SvResult::OK);
+ sleep(5);
+ mSv3dSessionAnimations->stopStream();
+ EXPECT_GT(mSv3dCallbackAnimations->getReceivedFramesCount(), 0);
+}
+
+} // namespace
+} // namespace implementation
+} // namespace V1_0
+} // namespace sv
+} // namespace automotive
+} // namespace hardware
+} // namespace android
diff --git a/surround_view/service-impl/SurroundViewService.cpp b/cpp/surround_view/service-impl/SurroundViewService.cpp
similarity index 100%
rename from surround_view/service-impl/SurroundViewService.cpp
rename to cpp/surround_view/service-impl/SurroundViewService.cpp
diff --git a/surround_view/service-impl/SurroundViewService.h b/cpp/surround_view/service-impl/SurroundViewService.h
similarity index 100%
rename from surround_view/service-impl/SurroundViewService.h
rename to cpp/surround_view/service-impl/SurroundViewService.h
diff --git a/surround_view/service-impl/VhalHandler.cpp b/cpp/surround_view/service-impl/VhalHandler.cpp
similarity index 100%
rename from surround_view/service-impl/VhalHandler.cpp
rename to cpp/surround_view/service-impl/VhalHandler.cpp
diff --git a/surround_view/service-impl/VhalHandler.h b/cpp/surround_view/service-impl/VhalHandler.h
similarity index 100%
rename from surround_view/service-impl/VhalHandler.h
rename to cpp/surround_view/service-impl/VhalHandler.h
diff --git a/surround_view/service-impl/VhalHandlerTests.cpp b/cpp/surround_view/service-impl/VhalHandlerTests.cpp
similarity index 100%
rename from surround_view/service-impl/VhalHandlerTests.cpp
rename to cpp/surround_view/service-impl/VhalHandlerTests.cpp
diff --git a/surround_view/service-impl/android.automotive.sv.service@1.0-impl.rc b/cpp/surround_view/service-impl/android.automotive.sv.service@1.0-impl.rc
similarity index 100%
rename from surround_view/service-impl/android.automotive.sv.service@1.0-impl.rc
rename to cpp/surround_view/service-impl/android.automotive.sv.service@1.0-impl.rc
diff --git a/surround_view/service-impl/core_lib.h b/cpp/surround_view/service-impl/core_lib.h
similarity index 100%
rename from surround_view/service-impl/core_lib.h
rename to cpp/surround_view/service-impl/core_lib.h
diff --git a/surround_view/service-impl/lib/arm64/libcore_lib_shared.so b/cpp/surround_view/service-impl/lib/arm64/libcore_lib_shared.so
similarity index 100%
rename from surround_view/service-impl/lib/arm64/libcore_lib_shared.so
rename to cpp/surround_view/service-impl/lib/arm64/libcore_lib_shared.so
Binary files differ
diff --git a/surround_view/service-impl/lib/x86-64/libcore_lib_shared.so b/cpp/surround_view/service-impl/lib/x86-64/libcore_lib_shared.so
similarity index 100%
rename from surround_view/service-impl/lib/x86-64/libcore_lib_shared.so
rename to cpp/surround_view/service-impl/lib/x86-64/libcore_lib_shared.so
Binary files differ
diff --git a/surround_view/service-impl/lib/x86/libcore_lib_shared.so b/cpp/surround_view/service-impl/lib/x86/libcore_lib_shared.so
similarity index 100%
rename from surround_view/service-impl/lib/x86/libcore_lib_shared.so
rename to cpp/surround_view/service-impl/lib/x86/libcore_lib_shared.so
Binary files differ
diff --git a/surround_view/service-impl/manifest_android.hardware.automotive.sv@1.0.xml b/cpp/surround_view/service-impl/manifest_android.hardware.automotive.sv@1.0.xml
similarity index 100%
rename from surround_view/service-impl/manifest_android.hardware.automotive.sv@1.0.xml
rename to cpp/surround_view/service-impl/manifest_android.hardware.automotive.sv@1.0.xml
diff --git a/surround_view/service-impl/mock-evs/MockEvsCamera.cpp b/cpp/surround_view/service-impl/mock-evs/MockEvsCamera.cpp
similarity index 97%
rename from surround_view/service-impl/mock-evs/MockEvsCamera.cpp
rename to cpp/surround_view/service-impl/mock-evs/MockEvsCamera.cpp
index dcd7405..14be890 100644
--- a/surround_view/service-impl/mock-evs/MockEvsCamera.cpp
+++ b/cpp/surround_view/service-impl/mock-evs/MockEvsCamera.cpp
@@ -31,6 +31,12 @@
const char kConfigFilePath[] =
"/vendor/etc/automotive/evs/evs_sample_configuration.xml";
+// Evs Camera Id names defined in sv_sample_config.xml.
+const char kEvsCameraDeviceIdNames[4][20] = {
+ "/dev/video60", "/dev/video61", "/dev/video62", "/dev/video63"
+};
+
+
MockEvsCamera::MockEvsCamera(const string& cameraId, const Stream& streamCfg) {
mConfigManager = ConfigManager::Create(kConfigFilePath);
@@ -255,6 +261,7 @@
label + (char)(i + 48));
mBufferDescs[i].buffer.nativeHandle =
mGraphicBuffers[i]->getNativeBuffer()->handle;
+ mBufferDescs[i].deviceId = kEvsCameraDeviceIdNames[i];
AHardwareBuffer_Desc* pDesc =
reinterpret_cast<AHardwareBuffer_Desc*>(
&mBufferDescs[i].buffer.description);
diff --git a/surround_view/service-impl/mock-evs/MockEvsCamera.h b/cpp/surround_view/service-impl/mock-evs/MockEvsCamera.h
similarity index 100%
rename from surround_view/service-impl/mock-evs/MockEvsCamera.h
rename to cpp/surround_view/service-impl/mock-evs/MockEvsCamera.h
diff --git a/surround_view/service-impl/mock-evs/MockEvsEnumerator.cpp b/cpp/surround_view/service-impl/mock-evs/MockEvsEnumerator.cpp
similarity index 100%
rename from surround_view/service-impl/mock-evs/MockEvsEnumerator.cpp
rename to cpp/surround_view/service-impl/mock-evs/MockEvsEnumerator.cpp
diff --git a/surround_view/service-impl/mock-evs/MockEvsEnumerator.h b/cpp/surround_view/service-impl/mock-evs/MockEvsEnumerator.h
similarity index 100%
rename from surround_view/service-impl/mock-evs/MockEvsEnumerator.h
rename to cpp/surround_view/service-impl/mock-evs/MockEvsEnumerator.h
diff --git a/surround_view/service-impl/mock-evs/MockSurroundViewCallback.cpp b/cpp/surround_view/service-impl/mock-evs/MockSurroundViewCallback.cpp
similarity index 79%
rename from surround_view/service-impl/mock-evs/MockSurroundViewCallback.cpp
rename to cpp/surround_view/service-impl/mock-evs/MockSurroundViewCallback.cpp
index 03f9594..60108e6 100644
--- a/surround_view/service-impl/mock-evs/MockSurroundViewCallback.cpp
+++ b/cpp/surround_view/service-impl/mock-evs/MockSurroundViewCallback.cpp
@@ -46,6 +46,12 @@
LOG(INFO) << __FUNCTION__ << svFramesDesc.svBuffers.size()
<< " frames are received";
+ // Increment the count of received frames.
+ {
+ std::scoped_lock<std::mutex> lock(mAccessLock);
+ mReceivedFramesCount++;
+ }
+
// Create a separate thread to return the frames to the session. This
// simulates the behavior of oneway HIDL method call.
thread mockHidlThread([this, &svFramesDesc]() {
@@ -55,6 +61,20 @@
return {};
}
+int MockSurroundViewCallback::getReceivedFramesCount() {
+ {
+ std::scoped_lock<std::mutex> lock(mAccessLock);
+ return mReceivedFramesCount;
+ }
+}
+
+void MockSurroundViewCallback::clearReceivedFramesCount() {
+ {
+ std::scoped_lock<std::mutex> lock(mAccessLock);
+ mReceivedFramesCount = 0;
+ }
+}
+
} // namespace implementation
} // namespace V1_0
} // namespace sv
diff --git a/surround_view/service-impl/mock-evs/MockSurroundViewCallback.h b/cpp/surround_view/service-impl/mock-evs/MockSurroundViewCallback.h
similarity index 81%
rename from surround_view/service-impl/mock-evs/MockSurroundViewCallback.h
rename to cpp/surround_view/service-impl/mock-evs/MockSurroundViewCallback.h
index eeabc98..238e41a 100644
--- a/surround_view/service-impl/mock-evs/MockSurroundViewCallback.h
+++ b/cpp/surround_view/service-impl/mock-evs/MockSurroundViewCallback.h
@@ -19,6 +19,11 @@
#include <android/hardware/automotive/sv/1.0/ISurroundViewService.h>
#include <android/hardware/automotive/sv/1.0/ISurroundViewStream.h>
+#include <ui/GraphicBuffer.h>
+
+#include <mutex>
+#include <thread>
+
using namespace android::hardware::automotive::sv::V1_0;
namespace android {
@@ -36,8 +41,15 @@
android::hardware::Return<void> notify(SvEvent svEvent) override;
android::hardware::Return<void> receiveFrames(const SvFramesDesc& svFramesDesc) override;
+ // Methods to get and clear the mReceivedFramesCount.
+ int getReceivedFramesCount();
+ void clearReceivedFramesCount();
private:
+ std::mutex mAccessLock;
android::sp<ISurroundViewSession> mSession;
+
+ // Keeps a count of the number of calls made to receiveFrames().
+ int mReceivedFramesCount GUARDED_BY(mAccessLock) = 0;
};
} // namespace implementation
diff --git a/surround_view/service-impl/service.cpp b/cpp/surround_view/service-impl/service.cpp
similarity index 92%
rename from surround_view/service-impl/service.cpp
rename to cpp/surround_view/service-impl/service.cpp
index 3ccc68f..b7d82f7 100644
--- a/surround_view/service-impl/service.cpp
+++ b/cpp/surround_view/service-impl/service.cpp
@@ -14,6 +14,8 @@
* limitations under the License.
*/
+#define ATRACE_TAG ATRACE_TAG_CAMERA
+
#include <android-base/logging.h>
#include <android/hardware/automotive/sv/1.0/ISurroundViewStream.h>
#include <android/hardware_buffer.h>
@@ -23,6 +25,7 @@
#include <utils/Errors.h>
#include <utils/StrongPointer.h>
#include <utils/SystemClock.h>
+#include <utils/Trace.h>
#include "SurroundViewService.h"
@@ -39,6 +42,8 @@
configureRpcThreadpool(1, true /* callerWillJoin */);
+ ATRACE_BEGIN("SurroundViewServiceImpl: registerAsService");
+
// Register our service -- if somebody is already registered by our name,
// they will be killed (their thread pool will throw an exception).
android::status_t status = service->registerAsService();
@@ -48,6 +53,8 @@
<< status;
}
+ ATRACE_END();
+
joinRpcThreadpool();
// In normal operation, we don't expect the thread pool to exit
diff --git a/surround_view/service-impl/sv_3d_params.h b/cpp/surround_view/service-impl/sv_3d_params.h
similarity index 100%
rename from surround_view/service-impl/sv_3d_params.h
rename to cpp/surround_view/service-impl/sv_3d_params.h
diff --git a/surround_view/service-impl/test_data/0.png b/cpp/surround_view/service-impl/test_data/0.png
similarity index 100%
rename from surround_view/service-impl/test_data/0.png
rename to cpp/surround_view/service-impl/test_data/0.png
Binary files differ
diff --git a/surround_view/service-impl/test_data/1.png b/cpp/surround_view/service-impl/test_data/1.png
similarity index 100%
rename from surround_view/service-impl/test_data/1.png
rename to cpp/surround_view/service-impl/test_data/1.png
Binary files differ
diff --git a/surround_view/service-impl/test_data/2.png b/cpp/surround_view/service-impl/test_data/2.png
similarity index 100%
rename from surround_view/service-impl/test_data/2.png
rename to cpp/surround_view/service-impl/test_data/2.png
Binary files differ
diff --git a/surround_view/service-impl/test_data/3.png b/cpp/surround_view/service-impl/test_data/3.png
similarity index 100%
rename from surround_view/service-impl/test_data/3.png
rename to cpp/surround_view/service-impl/test_data/3.png
Binary files differ
diff --git a/surround_view/service-impl/test_data/sample_car.obj b/cpp/surround_view/service-impl/test_data/sample_car.obj
similarity index 100%
rename from surround_view/service-impl/test_data/sample_car.obj
rename to cpp/surround_view/service-impl/test_data/sample_car.obj
diff --git a/surround_view/service-impl/test_data/sample_car_material.mtl b/cpp/surround_view/service-impl/test_data/sample_car_material.mtl
similarity index 100%
rename from surround_view/service-impl/test_data/sample_car_material.mtl
rename to cpp/surround_view/service-impl/test_data/sample_car_material.mtl
diff --git a/surround_view/service-impl/test_data/sv_sample_car_model_config.xml b/cpp/surround_view/service-impl/test_data/sv_sample_car_model_config.xml
similarity index 100%
rename from surround_view/service-impl/test_data/sv_sample_car_model_config.xml
rename to cpp/surround_view/service-impl/test_data/sv_sample_car_model_config.xml
diff --git a/surround_view/service-impl/test_data/sv_sample_config.xml b/cpp/surround_view/service-impl/test_data/sv_sample_config.xml
similarity index 80%
rename from surround_view/service-impl/test_data/sv_sample_config.xml
rename to cpp/surround_view/service-impl/test_data/sv_sample_config.xml
index 88a5413..a170c03 100644
--- a/surround_view/service-impl/test_data/sv_sample_config.xml
+++ b/cpp/surround_view/service-impl/test_data/sv_sample_config.xml
@@ -11,22 +11,22 @@
<Left>/dev/video63</Left>
</EvsCameraIds>
<Masks>
- <Front>/vendor/mask_front.png</Front>
- <Right>/vendor/mask_right.png</Right>
- <Rear>/vendor/mask_rear.png</Rear>
- <Left>/vendor/mask_left.png</Left>
+ <Front>/vendor/etc/automotive/sv/mask_front.png</Front>
+ <Right>/vendor/etc/automotive/sv/mask_right.png</Right>
+ <Rear>/vendor/etc/automotive/sv/mask_rear.png</Rear>
+ <Left>/vendor/etc/automotive/sv/mask_left.png</Left>
</Masks>
</CameraConfig>
<Sv2dEnabled>true</Sv2dEnabled>
<Sv2dParams>
<OutputResolution>
- <Width>1024</Width>
- <Height>768</Height>
+ <Width>768</Width>
+ <Height>1024</Height>
</OutputResolution>
<GroundMapping>
- <Width>8.0</Width>
- <Height>6.0</Height>
+ <Width>9.0</Width>
+ <Height>12.0</Height>
<Center>
<X>0.0</X>
<Y>0.0</Y>
@@ -52,8 +52,8 @@
<CarModelObjFile>/vendor/etc/automotive/sv/sample_car.obj</CarModelObjFile>
<Sv3dParams>
<OutputResolution>
- <Width>1024</Width>
- <Height>768</Height>
+ <Width>1920</Width>
+ <Height>1080</Height>
</OutputResolution>
<BowlParams>
<PlaneRadius>8.0</PlaneRadius>
diff --git a/watchdog/Android.mk b/cpp/watchdog/Android.mk
similarity index 100%
rename from watchdog/Android.mk
rename to cpp/watchdog/Android.mk
diff --git a/watchdog/aidl/Android.bp b/cpp/watchdog/aidl/Android.bp
similarity index 100%
rename from watchdog/aidl/Android.bp
rename to cpp/watchdog/aidl/Android.bp
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/.hash b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/.hash
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/.hash
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/.hash
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/BootPhase.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/BootPhase.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/BootPhase.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/BootPhase.aidl
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/ICarWatchdog.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/ICarWatchdog.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/ICarWatchdog.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/ICarWatchdog.aidl
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/ICarWatchdogClient.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/ICarWatchdogClient.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/ICarWatchdogClient.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/ICarWatchdogClient.aidl
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/ICarWatchdogMonitor.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/ICarWatchdogMonitor.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/ICarWatchdogMonitor.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/ICarWatchdogMonitor.aidl
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/PowerCycle.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/PowerCycle.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/PowerCycle.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/PowerCycle.aidl
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/StateType.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/StateType.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/StateType.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/StateType.aidl
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/TimeoutLength.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/TimeoutLength.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/TimeoutLength.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/TimeoutLength.aidl
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/UserState.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/UserState.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/UserState.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/1/android/automotive/watchdog/UserState.aidl
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/.hash b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/.hash
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/.hash
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/.hash
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/BootPhase.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/BootPhase.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/BootPhase.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/BootPhase.aidl
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/ICarWatchdog.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/ICarWatchdog.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/ICarWatchdog.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/ICarWatchdog.aidl
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/ICarWatchdogClient.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/ICarWatchdogClient.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/ICarWatchdogClient.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/ICarWatchdogClient.aidl
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/ICarWatchdogMonitor.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/ICarWatchdogMonitor.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/ICarWatchdogMonitor.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/ICarWatchdogMonitor.aidl
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/PowerCycle.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/PowerCycle.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/PowerCycle.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/PowerCycle.aidl
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/StateType.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/StateType.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/StateType.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/StateType.aidl
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/TimeoutLength.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/TimeoutLength.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/TimeoutLength.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/TimeoutLength.aidl
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/UserState.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/UserState.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/UserState.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/2/android/automotive/watchdog/UserState.aidl
diff --git a/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/ApplicationCategoryType.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/ApplicationCategoryType.aidl
new file mode 100644
index 0000000..6753e93
--- /dev/null
+++ b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/ApplicationCategoryType.aidl
@@ -0,0 +1,24 @@
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL interface (or parcelable). Do not try to
+// edit this file. It looks like you are doing that because you have modified
+// an AIDL interface in a backward-incompatible way, e.g., deleting a function
+// from an interface or a field from a parcelable and it broke the build. That
+// breakage is intended.
+//
+// You must not make a backward incompatible changes to the AIDL files built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package android.automotive.watchdog;
+@Backing(type="int") @VintfStability
+enum ApplicationCategoryType {
+ MAPS = 0,
+ MEDIA = 1,
+ OTHERS = 2,
+}
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/BootPhase.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/BootPhase.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/BootPhase.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/BootPhase.aidl
diff --git a/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/ComponentType.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/ComponentType.aidl
new file mode 100644
index 0000000..1a779ce
--- /dev/null
+++ b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/ComponentType.aidl
@@ -0,0 +1,24 @@
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL interface (or parcelable). Do not try to
+// edit this file. It looks like you are doing that because you have modified
+// an AIDL interface in a backward-incompatible way, e.g., deleting a function
+// from an interface or a field from a parcelable and it broke the build. That
+// breakage is intended.
+//
+// You must not make a backward incompatible changes to the AIDL files built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package android.automotive.watchdog;
+@Backing(type="int") @VintfStability
+enum ComponentType {
+ SYSTEM = 0,
+ VENDOR = 1,
+ THIRD_PARTY = 2,
+}
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/ICarWatchdog.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/ICarWatchdog.aidl
similarity index 93%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/ICarWatchdog.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/ICarWatchdog.aidl
index 61d4f32..105bf09 100644
--- a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/ICarWatchdog.aidl
+++ b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/ICarWatchdog.aidl
@@ -28,4 +28,5 @@
void tellMediatorAlive(in android.automotive.watchdog.ICarWatchdogClient mediator, in int[] clientsNotResponding, in int sessionId);
void tellDumpFinished(in android.automotive.watchdog.ICarWatchdogMonitor monitor, in int pid);
void notifySystemStateChange(in android.automotive.watchdog.StateType type, in int arg1, in int arg2);
+ void updateIoOveruseConfiguration(in android.automotive.watchdog.ComponentType type, in android.automotive.watchdog.IoOveruseConfiguration config);
}
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/ICarWatchdogClient.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/ICarWatchdogClient.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/ICarWatchdogClient.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/ICarWatchdogClient.aidl
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/ICarWatchdogMonitor.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/ICarWatchdogMonitor.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/ICarWatchdogMonitor.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/ICarWatchdogMonitor.aidl
diff --git a/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/IoOveruseAlertThreshold.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/IoOveruseAlertThreshold.aidl
new file mode 100644
index 0000000..f71955d
--- /dev/null
+++ b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/IoOveruseAlertThreshold.aidl
@@ -0,0 +1,24 @@
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL interface (or parcelable). Do not try to
+// edit this file. It looks like you are doing that because you have modified
+// an AIDL interface in a backward-incompatible way, e.g., deleting a function
+// from an interface or a field from a parcelable and it broke the build. That
+// breakage is intended.
+//
+// You must not make a backward incompatible changes to the AIDL files built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package android.automotive.watchdog;
+@VintfStability
+parcelable IoOveruseAlertThreshold {
+ long aggregateDurationSecs;
+ long triggerDurationSecs;
+ long writtenBytes;
+}
diff --git a/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/IoOveruseConfiguration.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/IoOveruseConfiguration.aidl
new file mode 100644
index 0000000..6df8e80
--- /dev/null
+++ b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/IoOveruseConfiguration.aidl
@@ -0,0 +1,27 @@
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL interface (or parcelable). Do not try to
+// edit this file. It looks like you are doing that because you have modified
+// an AIDL interface in a backward-incompatible way, e.g., deleting a function
+// from an interface or a field from a parcelable and it broke the build. That
+// breakage is intended.
+//
+// You must not make a backward incompatible changes to the AIDL files built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package android.automotive.watchdog;
+@VintfStability
+parcelable IoOveruseConfiguration {
+ android.automotive.watchdog.PerStateIoOveruseThreshold componentLevelThresholds;
+ android.automotive.watchdog.PerStateIoOveruseThreshold[] packageSpecificThresholds;
+ android.automotive.watchdog.PerStateIoOveruseThreshold[] categorySpecificThresholds;
+ List<String> safeToKillPackages;
+ android.automotive.watchdog.IoOveruseAlertThreshold[] systemWideThresholds;
+ String[] vendorPackagePrefixes;
+}
diff --git a/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/PerStateBytes.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/PerStateBytes.aidl
new file mode 100644
index 0000000..b4ae43b
--- /dev/null
+++ b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/PerStateBytes.aidl
@@ -0,0 +1,24 @@
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL interface (or parcelable). Do not try to
+// edit this file. It looks like you are doing that because you have modified
+// an AIDL interface in a backward-incompatible way, e.g., deleting a function
+// from an interface or a field from a parcelable and it broke the build. That
+// breakage is intended.
+//
+// You must not make a backward incompatible changes to the AIDL files built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package android.automotive.watchdog;
+@VintfStability
+parcelable PerStateBytes {
+ long applicationForegroundBytes;
+ long applicationBackgroundBytes;
+ long systemGarageModeBytes;
+}
diff --git a/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/PerStateIoOveruseThreshold.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/PerStateIoOveruseThreshold.aidl
new file mode 100644
index 0000000..ed68b4b
--- /dev/null
+++ b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/PerStateIoOveruseThreshold.aidl
@@ -0,0 +1,23 @@
+///////////////////////////////////////////////////////////////////////////////
+// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE. //
+///////////////////////////////////////////////////////////////////////////////
+
+// This file is a snapshot of an AIDL interface (or parcelable). Do not try to
+// edit this file. It looks like you are doing that because you have modified
+// an AIDL interface in a backward-incompatible way, e.g., deleting a function
+// from an interface or a field from a parcelable and it broke the build. That
+// breakage is intended.
+//
+// You must not make a backward incompatible changes to the AIDL files built
+// with the aidl_interface module type with versions property set. The module
+// type is used to build AIDL files in a way that they can be used across
+// independently updatable components of the system. If a device is shipped
+// with such a backward incompatible change, it has a high risk of breaking
+// later when a module using the interface is updated, e.g., Mainline modules.
+
+package android.automotive.watchdog;
+@VintfStability
+parcelable PerStateIoOveruseThreshold {
+ String name;
+ android.automotive.watchdog.PerStateBytes perStateWriteBytes;
+}
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/PowerCycle.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/PowerCycle.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/PowerCycle.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/PowerCycle.aidl
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/StateType.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/StateType.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/StateType.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/StateType.aidl
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/TimeoutLength.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/TimeoutLength.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/TimeoutLength.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/TimeoutLength.aidl
diff --git a/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/UserState.aidl b/cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/UserState.aidl
similarity index 100%
rename from watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/UserState.aidl
rename to cpp/watchdog/aidl/aidl_api/carwatchdog_aidl_interface/current/android/automotive/watchdog/UserState.aidl
diff --git a/cpp/watchdog/aidl/android/automotive/watchdog/ApplicationCategoryType.aidl b/cpp/watchdog/aidl/android/automotive/watchdog/ApplicationCategoryType.aidl
new file mode 100644
index 0000000..514cf2b
--- /dev/null
+++ b/cpp/watchdog/aidl/android/automotive/watchdog/ApplicationCategoryType.aidl
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.automotive.watchdog;
+
+/**
+ * Describes the category type of an application.
+ */
+@VintfStability
+@Backing(type="int")
+enum ApplicationCategoryType {
+ /**
+ * Maps application.
+ */
+ MAPS,
+
+ /**
+ * Audio or Video application.
+ */
+ MEDIA,
+
+ /**
+ * Applications that don't fall under the above categories.
+ */
+ OTHERS,
+}
diff --git a/watchdog/aidl/android/automotive/watchdog/BootPhase.aidl b/cpp/watchdog/aidl/android/automotive/watchdog/BootPhase.aidl
similarity index 100%
rename from watchdog/aidl/android/automotive/watchdog/BootPhase.aidl
rename to cpp/watchdog/aidl/android/automotive/watchdog/BootPhase.aidl
diff --git a/cpp/watchdog/aidl/android/automotive/watchdog/ComponentType.aidl b/cpp/watchdog/aidl/android/automotive/watchdog/ComponentType.aidl
new file mode 100644
index 0000000..99ce6a6
--- /dev/null
+++ b/cpp/watchdog/aidl/android/automotive/watchdog/ComponentType.aidl
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.automotive.watchdog;
+
+/**
+ * Describes the component for which the I/O overuse configuration update was received by
+ * ICarWatchdog or the component a package belongs to.
+ */
+@VintfStability
+@Backing(type="int")
+enum ComponentType {
+ /**
+ * System component.
+ */
+ SYSTEM,
+
+ /**
+ * Vendor component.
+ */
+ VENDOR,
+
+ /**
+ * Third-party component.
+ */
+ THIRD_PARTY,
+}
diff --git a/watchdog/aidl/android/automotive/watchdog/ICarWatchdog.aidl b/cpp/watchdog/aidl/android/automotive/watchdog/ICarWatchdog.aidl
similarity index 79%
rename from watchdog/aidl/android/automotive/watchdog/ICarWatchdog.aidl
rename to cpp/watchdog/aidl/android/automotive/watchdog/ICarWatchdog.aidl
index 8368a81..f4d6f39 100644
--- a/watchdog/aidl/android/automotive/watchdog/ICarWatchdog.aidl
+++ b/cpp/watchdog/aidl/android/automotive/watchdog/ICarWatchdog.aidl
@@ -16,8 +16,10 @@
package android.automotive.watchdog;
+import android.automotive.watchdog.ComponentType;
import android.automotive.watchdog.ICarWatchdogClient;
import android.automotive.watchdog.ICarWatchdogMonitor;
+import android.automotive.watchdog.IoOveruseConfiguration;
import android.automotive.watchdog.StateType;
import android.automotive.watchdog.TimeoutLength;
@@ -53,7 +55,7 @@
/**
* Register the mediator to the watchdog server.
* Note that watchdog mediator is also a watchdog client.
- * The caller should have system UID.
+ * The caller should have system UID. Otherwise, returns security exception binder error.
*
* @param mediator Watchdog mediator to register.
*/
@@ -70,7 +72,7 @@
/**
* Register the monitor to the watchdog server.
- * The caller should have system UID.
+ * The caller should have system UID. Otherwise, returns security exception binder error.
*
* @param monitor Watchdog monitor to register.
*/
@@ -78,7 +80,7 @@
/**
* Unregister the monitor from the watchdog server.
- * The caller should have system UID.
+ * The caller should have system UID. Otherwise, returns security exception binder error.
*
* @param monitor Watchdog monitor to unregister.
*/
@@ -95,7 +97,7 @@
/**
* Tell watchdog server that the mediator is alive together with the status of clients under
* the mediator.
- * The caller should have system UID.
+ * The caller should have system UID. Otherwise, returns security exception binder error.
*
* @param mediator Watchdog mediator that is responding.
* @param clientsNotResponding Array of process id of clients which haven't responded to the
@@ -107,7 +109,7 @@
/**
* Tell watchdog server that the monitor has finished dumping process information.
- * The caller should have system UID.
+ * The caller should have system UID. Otherwise, returns security exception binder error.
*
* @param monitor Watchdog monitor that is registered to watchdog server.
* @param pid Process id that has been dumped.
@@ -116,7 +118,7 @@
/**
* Notify watchdog server about the system state change.
- * The caller should have system UID.
+ * The caller should have system UID. Otherwise, returns security exception binder error.
*
* @param type One of the change types defined in the StateType enum.
* @param arg1 First state change information for the specified type.
@@ -127,4 +129,15 @@
* When type is BOOT_PHASE, arg1 should contain the current boot phase.
*/
void notifySystemStateChange(in StateType type, in int arg1, in int arg2);
+
+ /**
+ * CarWatchdogService uses this API to forward the I/O overuse configuration update received from
+ * the system or OEM applications.
+ * The caller should have system UID. Otherwise, returns security exception binder error.
+ *
+ * @param type Component type for which the I/O overuse configuration update was
+ * received.
+ * @param config I/O overuse configuration.
+ */
+ void updateIoOveruseConfiguration(in ComponentType type, in IoOveruseConfiguration config);
}
diff --git a/watchdog/aidl/android/automotive/watchdog/ICarWatchdogClient.aidl b/cpp/watchdog/aidl/android/automotive/watchdog/ICarWatchdogClient.aidl
similarity index 100%
rename from watchdog/aidl/android/automotive/watchdog/ICarWatchdogClient.aidl
rename to cpp/watchdog/aidl/android/automotive/watchdog/ICarWatchdogClient.aidl
diff --git a/watchdog/aidl/android/automotive/watchdog/ICarWatchdogMonitor.aidl b/cpp/watchdog/aidl/android/automotive/watchdog/ICarWatchdogMonitor.aidl
similarity index 100%
rename from watchdog/aidl/android/automotive/watchdog/ICarWatchdogMonitor.aidl
rename to cpp/watchdog/aidl/android/automotive/watchdog/ICarWatchdogMonitor.aidl
diff --git a/cpp/watchdog/aidl/android/automotive/watchdog/IoOveruseAlertThreshold.aidl b/cpp/watchdog/aidl/android/automotive/watchdog/IoOveruseAlertThreshold.aidl
new file mode 100644
index 0000000..719dc8f
--- /dev/null
+++ b/cpp/watchdog/aidl/android/automotive/watchdog/IoOveruseAlertThreshold.aidl
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.automotive.watchdog;
+
+/**
+ * Structure that describes the system-wide disk I/O overuse threshold that triggers I/O overuse
+ * alert.
+ */
+@VintfStability
+parcelable IoOveruseAlertThreshold {
+ /**
+ * Duration to aggregate the system-wide disk I/O usage and compare the usage against the given
+ * written bytes threshold.
+ */
+ long aggregateDurationSecs;
+
+ /**
+ * Duration to wait before triggering the disk I/O overuse alert. Disk I/O overuse should be
+ * detected for the trigger duration before triggering the alert.
+ */
+ long triggerDurationSecs;
+
+ /**
+ * Defines the system-wide disk I/O overuse threshold in terms of number of bytes written to
+ * all disks on the device by all packages.
+ */
+ long writtenBytes;
+}
diff --git a/cpp/watchdog/aidl/android/automotive/watchdog/IoOveruseConfiguration.aidl b/cpp/watchdog/aidl/android/automotive/watchdog/IoOveruseConfiguration.aidl
new file mode 100644
index 0000000..5f42fc1
--- /dev/null
+++ b/cpp/watchdog/aidl/android/automotive/watchdog/IoOveruseConfiguration.aidl
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.automotive.watchdog;
+
+import android.automotive.watchdog.PerStateIoOveruseThreshold;
+import android.automotive.watchdog.IoOveruseAlertThreshold;
+
+/**
+ * Structure that describes the disk I/O overuse configuration defined for system, vendor, or
+ * third-party packages.
+ */
+@VintfStability
+parcelable IoOveruseConfiguration {
+ /**
+ * Component-level I/O overuse thresholds. These thresholds are used when a package isn't
+ * covered by the category specific and package specific thresholds.
+ */
+ PerStateIoOveruseThreshold componentLevelThresholds;
+
+ /**
+ * Package specific I/O overuse thresholds for system and vendor packages. Each component must
+ * provide package specific thresholds only for the packages in the current component.
+ * Third-party component must define only component-level thresholds.
+ */
+ PerStateIoOveruseThreshold[] packageSpecificThresholds;
+
+ /**
+ * Category specific I/O overuse thresholds for vendor and third-party packages. This field
+ * must be defined only by the vendor component and the category specific thresholds are applied
+ * to both vendor and third-party packages that fall under the defined categories.
+ * The categories must match the categories defined in the PackageManager's ApplicationInfo
+ * class.
+ */
+ PerStateIoOveruseThreshold[] categorySpecificThresholds;
+
+ /**
+ * List of only non-critical system and vendor packages that are safe to kill on disk I/O
+ * overuse. All third-party packages are considered safe to kill.
+ */
+ List<String> safeToKillPackages;
+
+ /**
+ * Array of system-wide I/O overuse thresholds that triggers the system-wide disk I/O overuse
+ * alert. This must be defined only by the system component.
+ */
+ IoOveruseAlertThreshold[] systemWideThresholds;
+
+ /**
+ * Defines list of vendor package prefixes. Any package name starting with any of these prefixes
+ * will be recognized as a vendor package. This must be defined only by the vendor component.
+ */
+ String[] vendorPackagePrefixes;
+}
diff --git a/cpp/watchdog/aidl/android/automotive/watchdog/PerStateBytes.aidl b/cpp/watchdog/aidl/android/automotive/watchdog/PerStateBytes.aidl
new file mode 100644
index 0000000..7f7d4cf
--- /dev/null
+++ b/cpp/watchdog/aidl/android/automotive/watchdog/PerStateBytes.aidl
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.automotive.watchdog;
+
+/**
+ * Structure that describes the number of bytes attribute to each state of the application and
+ * system.
+ */
+@VintfStability
+parcelable PerStateBytes {
+ /**
+ * Number of bytes attributed to the application foreground mode.
+ */
+ long applicationForegroundBytes;
+
+ /**
+ * Number of bytes attributed to the application background mode.
+ */
+ long applicationBackgroundBytes;
+
+ /**
+ * Number of bytes attributed to the system garage mode.
+ */
+ long systemGarageModeBytes;
+}
diff --git a/cpp/watchdog/aidl/android/automotive/watchdog/PerStateIoOveruseThreshold.aidl b/cpp/watchdog/aidl/android/automotive/watchdog/PerStateIoOveruseThreshold.aidl
new file mode 100644
index 0000000..5db3433
--- /dev/null
+++ b/cpp/watchdog/aidl/android/automotive/watchdog/PerStateIoOveruseThreshold.aidl
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.automotive.watchdog;
+
+import android.automotive.watchdog.PerStateBytes;
+
+/**
+ * Structure that describes the disk I/O overuse threshold for each application and system state of
+ * a package or packages that fall under a component or category.
+ */
+@VintfStability
+parcelable PerStateIoOveruseThreshold {
+ /**
+ * Contains
+ * 1. string equivalent of ComponentType enum for component-level thresholds.
+ * 2. package name for package specific thresholds.
+ * 3. string equivalent of ApplicationCategoryType enum for category specific thresholds.
+ */
+ String name;
+
+ /**
+ * Defines the I/O overuse thresholds for a package. The thresholds are defined in terms of
+ * the number of bytes written to disk during each application and system states.
+ */
+ PerStateBytes perStateWriteBytes;
+}
diff --git a/watchdog/aidl/android/automotive/watchdog/PowerCycle.aidl b/cpp/watchdog/aidl/android/automotive/watchdog/PowerCycle.aidl
similarity index 100%
rename from watchdog/aidl/android/automotive/watchdog/PowerCycle.aidl
rename to cpp/watchdog/aidl/android/automotive/watchdog/PowerCycle.aidl
diff --git a/watchdog/aidl/android/automotive/watchdog/StateType.aidl b/cpp/watchdog/aidl/android/automotive/watchdog/StateType.aidl
similarity index 100%
rename from watchdog/aidl/android/automotive/watchdog/StateType.aidl
rename to cpp/watchdog/aidl/android/automotive/watchdog/StateType.aidl
diff --git a/watchdog/aidl/android/automotive/watchdog/TimeoutLength.aidl b/cpp/watchdog/aidl/android/automotive/watchdog/TimeoutLength.aidl
similarity index 100%
rename from watchdog/aidl/android/automotive/watchdog/TimeoutLength.aidl
rename to cpp/watchdog/aidl/android/automotive/watchdog/TimeoutLength.aidl
diff --git a/watchdog/aidl/android/automotive/watchdog/UserState.aidl b/cpp/watchdog/aidl/android/automotive/watchdog/UserState.aidl
similarity index 100%
rename from watchdog/aidl/android/automotive/watchdog/UserState.aidl
rename to cpp/watchdog/aidl/android/automotive/watchdog/UserState.aidl
diff --git a/watchdog/car-watchdog-lib/Android.bp b/cpp/watchdog/car-watchdog-lib/Android.bp
similarity index 100%
rename from watchdog/car-watchdog-lib/Android.bp
rename to cpp/watchdog/car-watchdog-lib/Android.bp
diff --git a/watchdog/car-watchdog-lib/src/android/car/watchdoglib/CarWatchdogDaemonHelper.java b/cpp/watchdog/car-watchdog-lib/src/android/car/watchdoglib/CarWatchdogDaemonHelper.java
similarity index 100%
rename from watchdog/car-watchdog-lib/src/android/car/watchdoglib/CarWatchdogDaemonHelper.java
rename to cpp/watchdog/car-watchdog-lib/src/android/car/watchdoglib/CarWatchdogDaemonHelper.java
diff --git a/watchdog/product/carwatchdog.mk b/cpp/watchdog/product/carwatchdog.mk
similarity index 79%
rename from watchdog/product/carwatchdog.mk
rename to cpp/watchdog/product/carwatchdog.mk
index 028f67b..4646076 100644
--- a/watchdog/product/carwatchdog.mk
+++ b/cpp/watchdog/product/carwatchdog.mk
@@ -16,13 +16,13 @@
PRODUCT_PACKAGES += carwatchdogd
# SELinux public policies for car watchdog services
-PRODUCT_PUBLIC_SEPOLICY_DIRS += packages/services/Car/watchdog/sepolicy/public
+PRODUCT_PUBLIC_SEPOLICY_DIRS += packages/services/Car/cpp/watchdog/sepolicy/public
# SELinux private policies for car watchdog services
-PRODUCT_PRIVATE_SEPOLICY_DIRS += packages/services/Car/watchdog/sepolicy/private
+PRODUCT_PRIVATE_SEPOLICY_DIRS += packages/services/Car/cpp/watchdog/sepolicy/private
# Include carwatchdog testclient if the build is userdebug or eng
ifneq (,$(filter userdebug eng, $(TARGET_BUILD_VARIANT)))
PRODUCT_PACKAGES += carwatchdog_testclient
- BOARD_SEPOLICY_DIRS += packages/services/Car/watchdog/testclient/sepolicy
+ BOARD_SEPOLICY_DIRS += packages/services/Car/cpp/watchdog/testclient/sepolicy
endif
diff --git a/watchdog/sepolicy/private/carwatchdog.te b/cpp/watchdog/sepolicy/private/carwatchdog.te
similarity index 71%
rename from watchdog/sepolicy/private/carwatchdog.te
rename to cpp/watchdog/sepolicy/private/carwatchdog.te
index 28473b0..87f9bac 100644
--- a/watchdog/sepolicy/private/carwatchdog.te
+++ b/cpp/watchdog/sepolicy/private/carwatchdog.te
@@ -9,6 +9,11 @@
binder_use(carwatchdogd)
binder_service(carwatchdogd)
+# Configration to communicate with VHAL
+hwbinder_use(carwatchdogd)
+get_prop(carwatchdogd, hwservicemanager_prop)
+hal_client_domain(carwatchdogd, hal_vehicle)
+
# Scan through /proc/pid for all processes
r_dir_file(carwatchdogd, domain)
@@ -20,3 +25,6 @@
# Find package_native to get uid to package name mapping.
allow carwatchdogd package_native_service:service_manager find;
+
+# List HALs to get pid of vehicle HAL.
+allow carwatchdogd hwservicemanager:hwservice_manager list;
diff --git a/watchdog/sepolicy/private/carwatchdogclientdomain.te b/cpp/watchdog/sepolicy/private/carwatchdogclientdomain.te
similarity index 100%
rename from watchdog/sepolicy/private/carwatchdogclientdomain.te
rename to cpp/watchdog/sepolicy/private/carwatchdogclientdomain.te
diff --git a/watchdog/sepolicy/private/file_contexts b/cpp/watchdog/sepolicy/private/file_contexts
similarity index 100%
rename from watchdog/sepolicy/private/file_contexts
rename to cpp/watchdog/sepolicy/private/file_contexts
diff --git a/watchdog/sepolicy/private/service_contexts b/cpp/watchdog/sepolicy/private/service_contexts
similarity index 100%
rename from watchdog/sepolicy/private/service_contexts
rename to cpp/watchdog/sepolicy/private/service_contexts
diff --git a/watchdog/sepolicy/public/attributes b/cpp/watchdog/sepolicy/public/attributes
similarity index 100%
rename from watchdog/sepolicy/public/attributes
rename to cpp/watchdog/sepolicy/public/attributes
diff --git a/watchdog/sepolicy/public/carwatchdog.te b/cpp/watchdog/sepolicy/public/carwatchdog.te
similarity index 100%
rename from watchdog/sepolicy/public/carwatchdog.te
rename to cpp/watchdog/sepolicy/public/carwatchdog.te
diff --git a/watchdog/sepolicy/public/service.te b/cpp/watchdog/sepolicy/public/service.te
similarity index 100%
rename from watchdog/sepolicy/public/service.te
rename to cpp/watchdog/sepolicy/public/service.te
diff --git a/watchdog/sepolicy/public/te_macros b/cpp/watchdog/sepolicy/public/te_macros
similarity index 100%
rename from watchdog/sepolicy/public/te_macros
rename to cpp/watchdog/sepolicy/public/te_macros
diff --git a/watchdog/server/Android.bp b/cpp/watchdog/server/Android.bp
similarity index 74%
rename from watchdog/server/Android.bp
rename to cpp/watchdog/server/Android.bp
index 18957df..85801fa 100644
--- a/watchdog/server/Android.bp
+++ b/cpp/watchdog/server/Android.bp
@@ -25,6 +25,7 @@
"system/libbase/include",
],
shared_libs: [
+ "carwatchdog_aidl_interface-unstable-cpp",
"libbase",
"libbinder",
"liblog",
@@ -32,11 +33,31 @@
],
}
+cc_library {
+ name: "libwatchdog_utils",
+ srcs: [
+ "src/utils/PackageNameResolver.cpp",
+ ],
+ defaults: [
+ "carwatchdogd_defaults",
+ ],
+ shared_libs: [
+ "libcutils",
+ ],
+ static_libs: [
+ "libgtest_prod",
+ ],
+ export_include_dirs: [
+ "src/utils",
+ ],
+}
+
cc_defaults {
- name: "libwatchdog_ioperfcollection_defaults",
+ name: "libwatchdog_perf_service_defaults",
shared_libs: [
"libcutils",
"libprocessgroup",
+ "libwatchdog_utils",
],
static_libs: [
"libgtest_prod",
@@ -44,12 +65,15 @@
}
cc_library {
- name: "libwatchdog_ioperfcollection",
+ name: "libwatchdog_perf_service",
defaults: [
"carwatchdogd_defaults",
- "libwatchdog_ioperfcollection_defaults",
+ "libwatchdog_perf_service_defaults",
],
srcs: [
+ "src/WatchdogPerfService.cpp",
+ "src/IoOveruseConfigs.cpp",
+ "src/IoOveruseMonitor.cpp",
"src/IoPerfCollection.cpp",
"src/LooperWrapper.cpp",
"src/ProcPidStat.cpp",
@@ -68,32 +92,37 @@
name: "libwatchdog_test",
defaults: [
"carwatchdogd_defaults",
- "libwatchdog_ioperfcollection_defaults",
+ "libwatchdog_perf_service_defaults",
"libwatchdog_process_service_defaults",
],
test_suites: ["general-tests"],
srcs: [
+ "tests/IoOveruseConfigsTest.cpp",
"tests/IoPerfCollectionTest.cpp",
"tests/LooperStub.cpp",
+ "tests/PackageNameResolverTest.cpp",
"tests/ProcPidDir.cpp",
"tests/ProcPidStatTest.cpp",
"tests/ProcStatTest.cpp",
"tests/UidIoStatsTest.cpp",
"tests/WatchdogBinderMediatorTest.cpp",
+ "tests/WatchdogPerfServiceTest.cpp",
"tests/WatchdogProcessServiceTest.cpp",
],
static_libs: [
"libgmock",
"libgtest",
"libwatchdog_binder_mediator",
- "libwatchdog_ioperfcollection",
+ "libwatchdog_perf_service",
+ "libwatchdog_utils",
],
}
cc_defaults {
name: "libwatchdog_process_service_defaults",
shared_libs: [
- "carwatchdog_aidl_interface-cpp",
+ "android.hardware.automotive.vehicle@2.0",
+ "libhidlbase",
],
}
@@ -112,7 +141,7 @@
name: "libwatchdog_binder_mediator",
defaults: [
"carwatchdogd_defaults",
- "libwatchdog_ioperfcollection_defaults",
+ "libwatchdog_perf_service_defaults",
"libwatchdog_process_service_defaults",
],
srcs: [
@@ -121,7 +150,7 @@
"src/IoPerfCollection.cpp",
],
shared_libs: [
- "libwatchdog_ioperfcollection",
+ "libwatchdog_perf_service",
"libwatchdog_process_service",
],
export_include_dirs: [
@@ -133,7 +162,7 @@
name: "carwatchdogd",
defaults: [
"carwatchdogd_defaults",
- "libwatchdog_ioperfcollection_defaults",
+ "libwatchdog_perf_service_defaults",
"libwatchdog_process_service_defaults",
],
srcs: [
@@ -143,8 +172,9 @@
init_rc: ["carwatchdogd.rc"],
shared_libs: [
"libwatchdog_binder_mediator",
- "libwatchdog_ioperfcollection",
+ "libwatchdog_perf_service",
"libwatchdog_process_service",
+ "libwatchdog_utils",
],
vintf_fragments: ["carwatchdogd.xml"],
}
diff --git a/watchdog/server/carwatchdogd.rc b/cpp/watchdog/server/carwatchdogd.rc
similarity index 100%
rename from watchdog/server/carwatchdogd.rc
rename to cpp/watchdog/server/carwatchdogd.rc
diff --git a/watchdog/server/carwatchdogd.xml b/cpp/watchdog/server/carwatchdogd.xml
similarity index 100%
rename from watchdog/server/carwatchdogd.xml
rename to cpp/watchdog/server/carwatchdogd.xml
diff --git a/cpp/watchdog/server/src/IoOveruseConfigs.cpp b/cpp/watchdog/server/src/IoOveruseConfigs.cpp
new file mode 100644
index 0000000..b85e2f7
--- /dev/null
+++ b/cpp/watchdog/server/src/IoOveruseConfigs.cpp
@@ -0,0 +1,346 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#define LOG_TAG "carwatchdogd"
+
+#include "IoOveruseConfigs.h"
+
+#include <android-base/strings.h>
+
+#include <inttypes.h>
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+namespace {
+
+using android::base::Error;
+using android::base::Result;
+using android::base::StartsWith;
+using android::base::StringAppendF;
+using android::base::StringPrintf;
+using android::binder::Status;
+
+// Enum to filter the updatable I/O overuse configs by each component.
+enum IoOveruseConfigEnum {
+ COMPONENT_SPECIFIC_GENERIC_THRESHOLDS = 1 << 0,
+ COMPONENT_SPECIFIC_PER_PACKAGE_THRESHOLDS = 1 << 1,
+ COMPONENT_SPECIFIC_SAFE_TO_KILL_PACKAGES = 1 << 2,
+ PER_CATEGORY_THRESHOLDS = 1 << 3,
+ VENDOR_PACKAGES_REGEX = 1 << 4,
+ SYSTEM_WIDE_ALERT_THRESHOLDS = 1 << 5,
+};
+
+const int32_t kSystemComponentUpdatableConfigs = COMPONENT_SPECIFIC_GENERIC_THRESHOLDS |
+ COMPONENT_SPECIFIC_PER_PACKAGE_THRESHOLDS | COMPONENT_SPECIFIC_SAFE_TO_KILL_PACKAGES |
+ SYSTEM_WIDE_ALERT_THRESHOLDS;
+const int32_t kVendorComponentUpdatableConfigs = COMPONENT_SPECIFIC_GENERIC_THRESHOLDS |
+ COMPONENT_SPECIFIC_PER_PACKAGE_THRESHOLDS | COMPONENT_SPECIFIC_SAFE_TO_KILL_PACKAGES |
+ PER_CATEGORY_THRESHOLDS | VENDOR_PACKAGES_REGEX;
+const int32_t kThirdPartyComponentUpdatableConfigs = COMPONENT_SPECIFIC_GENERIC_THRESHOLDS;
+
+bool isZeroValueThresholds(const PerStateIoOveruseThreshold& thresholds) {
+ return thresholds.perStateWriteBytes.applicationForegroundBytes == 0 &&
+ thresholds.perStateWriteBytes.applicationBackgroundBytes == 0 &&
+ thresholds.perStateWriteBytes.systemGarageModeBytes == 0;
+}
+
+Result<void> containsValidThresholds(const PerStateIoOveruseThreshold& thresholds) {
+ if (thresholds.name.size() == 0) {
+ return Error() << "Doesn't contain threshold name";
+ }
+
+ if (isZeroValueThresholds(thresholds)) {
+ return Error() << "Zero value thresholds for " << thresholds.name;
+ }
+
+ if (thresholds.perStateWriteBytes.applicationForegroundBytes == 0 ||
+ thresholds.perStateWriteBytes.applicationBackgroundBytes == 0 ||
+ thresholds.perStateWriteBytes.systemGarageModeBytes == 0) {
+ return Error() << "Some thresholds are zero: " << toString(thresholds);
+ }
+ return {};
+}
+
+Result<void> containsValidThreshold(const IoOveruseAlertThreshold& threshold) {
+ if (threshold.aggregateDurationSecs == 0) {
+ return Error() << "Aggregate duration must be greater than zero";
+ }
+ if (threshold.writtenBytes == 0) {
+ return Error() << "Written bytes must be greater than zero";
+ }
+ return {};
+}
+
+ApplicationCategoryType toApplicationCategoryType(const std::string& value) {
+ if (value == "MAPS") {
+ return ApplicationCategoryType::MAPS;
+ }
+ if (value == "MEDIA") {
+ return ApplicationCategoryType::MEDIA;
+ }
+ return ApplicationCategoryType::OTHERS;
+}
+
+std::string uniqueStr(const IoOveruseAlertThreshold& threshold) {
+ return StringPrintf("ad_%" PRId64 "s_td_%" PRId64 "s_wr_%" PRId64 "b",
+ threshold.aggregateDurationSecs, threshold.triggerDurationSecs,
+ threshold.writtenBytes);
+}
+
+Result<void> filterThresholdsByPackageName(const std::unordered_set<std::string>& prefixes,
+ std::vector<PerStateIoOveruseThreshold>* thresholds) {
+ std::string errorMsgs;
+ for (auto it = thresholds->begin(); it != thresholds->end();) {
+ std::string packageName(String8(it->name));
+ bool isVendor = false;
+ for (const auto& prefix : prefixes) {
+ if (StartsWith(packageName, prefix)) {
+ ++it;
+ isVendor = true;
+ break;
+ }
+ }
+ if (!isVendor) {
+ StringAppendF(&errorMsgs, "\t\t%s\n", packageName.c_str());
+ it = thresholds->erase(it);
+ }
+ }
+ if (!errorMsgs.empty()) {
+ return Error() << "Thresholds that don't match packages prefixes:\n" << errorMsgs;
+ }
+ return {};
+}
+
+Result<void> filterPackageNames(const std::unordered_set<std::string>& prefixes,
+ std::vector<std::string>* packageNames) {
+ std::string errorMsgs;
+ for (auto it = packageNames->begin(); it != packageNames->end();) {
+ bool isVendor = false;
+ for (const auto& prefix : prefixes) {
+ if (StartsWith(*it, prefix)) {
+ ++it;
+ isVendor = true;
+ break;
+ }
+ }
+ if (!isVendor) {
+ StringAppendF(&errorMsgs, "\t\t%s\n", it->c_str());
+ it = packageNames->erase(it);
+ }
+ }
+ if (!errorMsgs.empty()) {
+ return Error() << "Packages that don't match packages regex:\n" << errorMsgs;
+ }
+ return {};
+}
+
+} // namespace
+
+Result<void> ComponentSpecificConfig::updatePerPackageThresholds(
+ const std::vector<PerStateIoOveruseThreshold>& thresholds) {
+ std::string errorMsgs;
+ for (const auto& packageThreshold : thresholds) {
+ auto result = containsValidThresholds(packageThreshold);
+ if (!result.ok()) {
+ StringAppendF(&errorMsgs, "\tInvalid package specific thresholds: %s\n",
+ result.error().message().c_str());
+ continue;
+ }
+ perPackageThresholds[std::string(String8(packageThreshold.name))] = packageThreshold;
+ }
+ return errorMsgs.empty() ? Result<void>{} : Error() << errorMsgs;
+}
+
+size_t IoOveruseConfigs::IoOveruseAlertThresholdHash::operator()(
+ const IoOveruseAlertThreshold& threshold) const {
+ return std::hash<std::string>{}(uniqueStr(threshold));
+}
+
+bool IoOveruseConfigs::IoOveruseAlertThresholdEqual::operator()(
+ const IoOveruseAlertThreshold& l, const IoOveruseAlertThreshold& r) const {
+ return l.aggregateDurationSecs == r.aggregateDurationSecs &&
+ l.triggerDurationSecs == r.triggerDurationSecs && l.writtenBytes == r.writtenBytes;
+}
+
+Result<void> IoOveruseConfigs::updatePerCategoryThresholds(
+ const std::vector<PerStateIoOveruseThreshold>& thresholds) {
+ std::string errorMsgs;
+ for (const auto& categoryThreshold : thresholds) {
+ auto result = containsValidThresholds(categoryThreshold);
+ if (!result.ok()) {
+ StringAppendF(&errorMsgs, "\tInvalid category specific thresholds: %s\n",
+ result.error().message().c_str());
+ continue;
+ }
+ std::string name = std::string(String8(categoryThreshold.name));
+ ApplicationCategoryType category = toApplicationCategoryType(name);
+ if (category == ApplicationCategoryType::OTHERS) {
+ StringAppendF(&errorMsgs, "\tInvalid application category %s\n", name.c_str());
+ continue;
+ }
+ perCategoryThresholds[category] = categoryThreshold;
+ }
+ return errorMsgs.empty() ? Result<void>{} : Error() << errorMsgs;
+}
+
+Result<void> IoOveruseConfigs::updateAlertThresholds(
+ const std::vector<IoOveruseAlertThreshold>& thresholds) {
+ std::string errorMsgs;
+ for (const auto& alertThreshold : thresholds) {
+ auto result = containsValidThreshold(alertThreshold);
+ if (!result.ok()) {
+ StringAppendF(&errorMsgs, "\tInvalid system-wide alert threshold: %s\n",
+ result.error().message().c_str());
+ continue;
+ }
+ alertThresholds.emplace(alertThreshold);
+ }
+ return errorMsgs.empty() ? Result<void>{} : Error() << errorMsgs;
+}
+
+Result<void> IoOveruseConfigs::update(ComponentType type,
+ const IoOveruseConfiguration& updateConfig) {
+ if (String8(updateConfig.componentLevelThresholds.name).string() != toString(type)) {
+ return Error(Status::EX_ILLEGAL_ARGUMENT)
+ << "Invalid config. Config's component name "
+ << updateConfig.componentLevelThresholds.name << " != " << toString(type);
+ }
+ ComponentSpecificConfig* targetComponentConfig;
+ int32_t updatableConfigsFilter = 0;
+ switch (type) {
+ case ComponentType::SYSTEM:
+ targetComponentConfig = &systemConfig;
+ updatableConfigsFilter = kSystemComponentUpdatableConfigs;
+ break;
+ case ComponentType::VENDOR:
+ targetComponentConfig = &vendorConfig;
+ updatableConfigsFilter = kVendorComponentUpdatableConfigs;
+ break;
+ case ComponentType::THIRD_PARTY:
+ targetComponentConfig = &thirdPartyConfig;
+ updatableConfigsFilter = kThirdPartyComponentUpdatableConfigs;
+ break;
+ default:
+ return Error(Status::EX_ILLEGAL_ARGUMENT)
+ << "Invalid component type " << static_cast<int32_t>(type);
+ }
+
+ std::string nonUpdatableConfigMsgs;
+ std::string errorMsgs;
+
+ if ((updatableConfigsFilter & IoOveruseConfigEnum::COMPONENT_SPECIFIC_GENERIC_THRESHOLDS) &&
+ !isZeroValueThresholds(updateConfig.componentLevelThresholds)) {
+ auto result = containsValidThresholds(updateConfig.componentLevelThresholds);
+ if (!result.ok()) {
+ StringAppendF(&errorMsgs, "\tInvalid '%s' component level thresholds: %s\n",
+ toString(type).c_str(), result.error().message().c_str());
+ } else {
+ targetComponentConfig->generic = updateConfig.componentLevelThresholds;
+ }
+ }
+
+ if (updatableConfigsFilter & IoOveruseConfigEnum::VENDOR_PACKAGES_REGEX) {
+ for (const auto& prefix : updateConfig.vendorPackagePrefixes) {
+ vendorPackagePrefixes.insert(std::string(String8(prefix)));
+ }
+ } else if (!updateConfig.vendorPackagePrefixes.empty()) {
+ StringAppendF(&nonUpdatableConfigMsgs, "%svendor packages prefixes",
+ !nonUpdatableConfigMsgs.empty() ? ", " : "");
+ }
+
+ std::vector<PerStateIoOveruseThreshold> packageSpecificThresholds =
+ updateConfig.packageSpecificThresholds;
+ std::vector<std::string> safeToKillPackages;
+ for (const auto& package : updateConfig.safeToKillPackages) {
+ safeToKillPackages.emplace_back(std::string(String8(package)));
+ }
+ if (type == ComponentType::VENDOR) {
+ auto result =
+ filterThresholdsByPackageName(vendorPackagePrefixes, &packageSpecificThresholds);
+ if (!result.ok()) {
+ StringAppendF(&errorMsgs, "\tVendor per-package threshold filtering error: %s",
+ result.error().message().c_str());
+ }
+ result = filterPackageNames(vendorPackagePrefixes, &safeToKillPackages);
+ if (!result.ok()) {
+ StringAppendF(&errorMsgs, "\tVendor safe-to-kill package filtering error: %s",
+ result.error().message().c_str());
+ }
+ }
+
+ if (updatableConfigsFilter & IoOveruseConfigEnum::COMPONENT_SPECIFIC_PER_PACKAGE_THRESHOLDS) {
+ auto result = targetComponentConfig->updatePerPackageThresholds(packageSpecificThresholds);
+ if (!result.ok()) {
+ StringAppendF(&errorMsgs, "%s", result.error().message().c_str());
+ }
+ } else if (!updateConfig.packageSpecificThresholds.empty()) {
+ StringAppendF(&nonUpdatableConfigMsgs, "%sper-package thresholds",
+ !nonUpdatableConfigMsgs.empty() ? ", " : "");
+ }
+
+ if (updatableConfigsFilter & IoOveruseConfigEnum::COMPONENT_SPECIFIC_SAFE_TO_KILL_PACKAGES) {
+ targetComponentConfig->safeToKillPackages.insert(safeToKillPackages.begin(),
+ safeToKillPackages.end());
+ } else if (!updateConfig.safeToKillPackages.empty()) {
+ StringAppendF(&nonUpdatableConfigMsgs, "%ssafe-to-kill list",
+ !nonUpdatableConfigMsgs.empty() ? ", " : "");
+ }
+
+ if (updatableConfigsFilter & IoOveruseConfigEnum::PER_CATEGORY_THRESHOLDS) {
+ auto result = updatePerCategoryThresholds(updateConfig.categorySpecificThresholds);
+ if (!result.ok()) {
+ StringAppendF(&errorMsgs, "%s", result.error().message().c_str());
+ }
+ } else if (!updateConfig.categorySpecificThresholds.empty()) {
+ StringAppendF(&nonUpdatableConfigMsgs, "%scategory specific thresholds",
+ !nonUpdatableConfigMsgs.empty() ? ", " : "");
+ }
+
+ if (updatableConfigsFilter & IoOveruseConfigEnum::SYSTEM_WIDE_ALERT_THRESHOLDS) {
+ auto result = updateAlertThresholds(updateConfig.systemWideThresholds);
+ if (!result.ok()) {
+ StringAppendF(&errorMsgs, "%s", result.error().message().c_str());
+ }
+ } else if (!updateConfig.systemWideThresholds.empty()) {
+ StringAppendF(&nonUpdatableConfigMsgs, "%ssystem-wide alert thresholds",
+ !nonUpdatableConfigMsgs.empty() ? ", " : "");
+ }
+
+ if (!nonUpdatableConfigMsgs.empty()) {
+ StringAppendF(&errorMsgs, "\tReceived values for non-updatable configs: %s\n",
+ nonUpdatableConfigMsgs.c_str());
+ }
+ if (!errorMsgs.empty()) {
+ ALOGE("Invalid I/O overuse configs received for %s component:\n%s", toString(type).c_str(),
+ errorMsgs.c_str());
+ }
+ return {};
+}
+
+std::string toString(const PerStateIoOveruseThreshold& thresholds) {
+ return StringPrintf("name=%s, foregroundBytes=%" PRId64 ", backgroundBytes=%" PRId64
+ ", garageModeBytes=%" PRId64,
+ String8(thresholds.name).c_str(),
+ thresholds.perStateWriteBytes.applicationForegroundBytes,
+ thresholds.perStateWriteBytes.applicationBackgroundBytes,
+ thresholds.perStateWriteBytes.systemGarageModeBytes);
+}
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
diff --git a/cpp/watchdog/server/src/IoOveruseConfigs.h b/cpp/watchdog/server/src/IoOveruseConfigs.h
new file mode 100644
index 0000000..76b8e0f
--- /dev/null
+++ b/cpp/watchdog/server/src/IoOveruseConfigs.h
@@ -0,0 +1,83 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#ifndef CPP_WATCHDOG_SERVER_SRC_IOOVERUSECONFIGS_H_
+#define CPP_WATCHDOG_SERVER_SRC_IOOVERUSECONFIGS_H_
+
+#include <android-base/result.h>
+#include <android-base/stringprintf.h>
+#include <android/automotive/watchdog/ApplicationCategoryType.h>
+#include <android/automotive/watchdog/ComponentType.h>
+#include <android/automotive/watchdog/IoOveruseAlertThreshold.h>
+#include <android/automotive/watchdog/IoOveruseConfiguration.h>
+#include <android/automotive/watchdog/PerStateIoOveruseThreshold.h>
+
+#include <regex> // NOLINT
+#include <string>
+#include <unordered_map>
+#include <unordered_set>
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+struct ComponentSpecificConfig {
+ PerStateIoOveruseThreshold generic;
+ std::unordered_map<std::string, PerStateIoOveruseThreshold> perPackageThresholds;
+ std::unordered_set<std::string> safeToKillPackages;
+
+ android::base::Result<void> updatePerPackageThresholds(
+ const std::vector<PerStateIoOveruseThreshold>& thresholds);
+};
+
+struct IoOveruseConfigs {
+ android::base::Result<void> update(ComponentType type, const IoOveruseConfiguration& config);
+
+private:
+ struct IoOveruseAlertThresholdHash {
+ public:
+ size_t operator()(const IoOveruseAlertThreshold& threshold) const;
+ };
+
+ struct IoOveruseAlertThresholdEqual {
+ public:
+ bool operator()(const IoOveruseAlertThreshold& l, const IoOveruseAlertThreshold& r) const;
+ };
+
+public:
+ ComponentSpecificConfig systemConfig;
+ ComponentSpecificConfig vendorConfig;
+ ComponentSpecificConfig thirdPartyConfig;
+ std::unordered_map<ApplicationCategoryType, PerStateIoOveruseThreshold> perCategoryThresholds;
+ std::unordered_set<std::string> vendorPackagePrefixes;
+ std::unordered_set<IoOveruseAlertThreshold, IoOveruseAlertThresholdHash,
+ IoOveruseAlertThresholdEqual>
+ alertThresholds;
+
+private:
+ android::base::Result<void> updatePerCategoryThresholds(
+ const std::vector<PerStateIoOveruseThreshold>& thresholds);
+ android::base::Result<void> updateAlertThresholds(
+ const std::vector<IoOveruseAlertThreshold>& thresholds);
+};
+
+std::string toString(const PerStateIoOveruseThreshold& thresholds);
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
+
+#endif // CPP_WATCHDOG_SERVER_SRC_IOOVERUSECONFIGS_H_
diff --git a/cpp/watchdog/server/src/IoOveruseMonitor.cpp b/cpp/watchdog/server/src/IoOveruseMonitor.cpp
new file mode 100644
index 0000000..a798e61
--- /dev/null
+++ b/cpp/watchdog/server/src/IoOveruseMonitor.cpp
@@ -0,0 +1,113 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#define LOG_TAG "carwatchdogd"
+
+#include "IoOveruseMonitor.h"
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+using android::base::Error;
+using android::base::Result;
+
+Result<void> IoOveruseMonitor::start() {
+ // TODO(b/167240592): Read the latest I/O overuse config, last per-package I/O usage, and
+ // last N days per-package I/O overuse stats.
+ // The latest I/O overuse config is read in this order:
+ // 1. From /data partition as this contains the latest config and any updates received from OEM
+ // and system applications.
+ // 2. From /system and /vendor partitions as this contains the default configs shipped with the
+ // the image.
+ return {};
+}
+
+void IoOveruseMonitor::terminate() {
+ // TODO(b/167240592): Clear the in-memory cache.
+ return;
+}
+
+Result<void> IoOveruseMonitor::onPeriodicCollection(
+ time_t /*time*/, const android::wp<UidIoStats>& uidIoStats,
+ const android::wp<ProcStat>& /*procStat*/,
+ const android::wp<ProcPidStat>& /*procPidStat*/) {
+ if (uidIoStats == nullptr) {
+ return Error() << "Per-UID I/O stats collector must not be empty";
+ }
+ // TODO(b/167240592): Aggregate per-package I/O usage and compare against the daily thresholds.
+ // When the date hasn't changed, add the polled data to the in-memory stats.
+ // When the date has changed,
+ // 1. Notify CarWatchdogService to re-enable daily disabled apps.
+ // 2. Erase the in-memory per-package I/O usage cache as it from the previous day.
+ // 3. Use the delta stats to initialize the current day's per-package I/O usage.
+ // On identifying packages that exceed the daily threshold, report and take action.
+ return {};
+}
+
+Result<void> IoOveruseMonitor::onCustomCollection(
+ time_t /*time*/, const std::unordered_set<std::string>& /*filterPackages*/,
+ const android::wp<UidIoStats>& uidIoStats, const android::wp<ProcStat>& /*procStat*/,
+ const android::wp<ProcPidStat>& /*procPidStat*/) {
+ if (uidIoStats == nullptr) {
+ return Error() << "Per-UID I/O stats collector must not be empty";
+ }
+ // TODO(b/167240592): Same as |onPeriodicCollection| because IoOveruseMonitor doesn't do
+ // anything special for custom collection.
+
+ return {};
+}
+
+Result<void> IoOveruseMonitor::onGarageModeCollection(
+ time_t /*time*/, const android::wp<UidIoStats>& uidIoStats,
+ const android::wp<ProcStat>& /*procStat*/,
+ const android::wp<ProcPidStat>& /*procPidStat*/) {
+ if (uidIoStats == nullptr) {
+ return Error() << "Per-UID I/O stats collector must not be empty";
+ }
+ // TODO(b/167240592): Perform garage mode monitoring.
+ // When this method is called for the first time, the delta stats represents the last I/O usage
+ // stats from the normal mode (aka user interaction mode). Thus add the stats to the in-memory
+ // cache and check for any violation. Then move the normal mode's I/O stats to a separate
+ // cache, which will be written to disk on |onShutdownPrepareComplete|. Then clear the I/O
+ // usage cache so the next call will be initialized fresh.
+ // When the method is called on >= 2nd time, perform the same as |onPeriodicCollection|.
+ // Confirm whether the package_manager service can be used to enable or disable packages in
+ // this mode.
+
+ return {};
+}
+
+Result<void> IoOveruseMonitor::onShutdownPrepareComplete() {
+ // TODO(b/167240592): Flush in-memory stats to disk.
+ return {};
+}
+
+Result<void> IoOveruseMonitor::onDump(int /*fd*/) {
+ // TODO(b/167240592): Dump the list of killed/disabled packages. Dump the list of packages that
+ // exceed xx% of their threshold.
+ return {};
+}
+
+Result<void> IoOveruseMonitor::updateIoOveruseConfiguration(ComponentType type,
+ const IoOveruseConfiguration& config) {
+ Mutex::Autolock lock(mMutex);
+ return mIoOveruseConfigs.update(type, config);
+}
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
diff --git a/cpp/watchdog/server/src/IoOveruseMonitor.h b/cpp/watchdog/server/src/IoOveruseMonitor.h
new file mode 100644
index 0000000..817b23e
--- /dev/null
+++ b/cpp/watchdog/server/src/IoOveruseMonitor.h
@@ -0,0 +1,107 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#ifndef CPP_WATCHDOG_SERVER_SRC_IOOVERUSEMONITOR_H_
+#define CPP_WATCHDOG_SERVER_SRC_IOOVERUSEMONITOR_H_
+
+#include "IoOveruseConfigs.h"
+#include "ProcPidStat.h"
+#include "ProcStat.h"
+#include "UidIoStats.h"
+#include "WatchdogPerfService.h"
+
+#include <android-base/result.h>
+#include <android/automotive/watchdog/ComponentType.h>
+#include <android/automotive/watchdog/IoOveruseConfiguration.h>
+#include <utils/Mutex.h>
+
+#include <string>
+#include <unordered_set>
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+// IoOveruseMonitor implements the I/O overuse monitoring module.
+class IoOveruseMonitor : public DataProcessor {
+public:
+ IoOveruseMonitor() : mIoOveruseConfigs({}) {}
+
+ ~IoOveruseMonitor() { terminate(); }
+
+ std::string name() { return "IoOveruseMonitor"; }
+
+ // WatchdogBinderMediator API implementation.
+ virtual android::base::Result<void> updateIoOveruseConfiguration(
+ ComponentType type, const IoOveruseConfiguration& config);
+
+ // DataProcessor interface implementation.
+ android::base::Result<void> start();
+
+ void terminate();
+
+ android::base::Result<void> onBoottimeCollection(
+ time_t /*time*/, const android::wp<UidIoStats>& /*uidIoStats*/,
+ const android::wp<ProcStat>& /*procStat*/,
+ const android::wp<ProcPidStat>& /*procPidStat*/) {
+ // No I/O overuse monitoring during boot-time.
+ return {};
+ }
+
+ android::base::Result<void> onPeriodicCollection(time_t time,
+ const android::wp<UidIoStats>& uidIoStats,
+ const android::wp<ProcStat>& procStat,
+ const android::wp<ProcPidStat>& procPidStat);
+
+ android::base::Result<void> onCustomCollection(
+ time_t time, const std::unordered_set<std::string>& filterPackages,
+ const android::wp<UidIoStats>& uidIoStats, const android::wp<ProcStat>& procStat,
+ const android::wp<ProcPidStat>& procPidStat);
+
+ // TODO(b/167240592): Forward WatchdogBinderMediator's notifySystemStateChange call to
+ // WatchdogProcessService. On POWER_CYCLE_SHUTDOWN_PREPARE, switch to garage mode collection
+ // and call this method via the DataProcessor interface.
+ android::base::Result<void> onGarageModeCollection(time_t time,
+ const android::wp<UidIoStats>& uidIoStats,
+ const android::wp<ProcStat>& procStat,
+ const android::wp<ProcPidStat>& procPidStat);
+
+ // TODO(b/167240592): Forward WatchdogBinderMediator's notifySystemStateChange call to
+ // WatchdogProcessService. On POWER_CYCLE_SHUTDOWN_PREPARE_COMPLETE, call this method via
+ // the DataProcessor interface. onShutdownPrepareComplete, IoOveruseMonitor will flush
+ // in-memory stats to disk.
+ android::base::Result<void> onShutdownPrepareComplete();
+
+ android::base::Result<void> onDump(int fd);
+
+ android::base::Result<void> onCustomCollectionDump(int /*fd*/) {
+ // No special processing for custom collection. Thus no custom collection dump.
+ return {};
+ }
+
+private:
+ // Makes sure only one collection is running at any given time.
+ Mutex mMutex;
+
+ // Summary of configs available for all the components and system-wide overuse alert thresholds.
+ IoOveruseConfigs mIoOveruseConfigs GUARDED_BY(mMutex);
+};
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
+
+#endif // CPP_WATCHDOG_SERVER_SRC_IOOVERUSEMONITOR_H_
diff --git a/cpp/watchdog/server/src/IoPerfCollection.cpp b/cpp/watchdog/server/src/IoPerfCollection.cpp
new file mode 100644
index 0000000..47433fa
--- /dev/null
+++ b/cpp/watchdog/server/src/IoPerfCollection.cpp
@@ -0,0 +1,631 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#define LOG_TAG "carwatchdogd"
+
+#include "IoPerfCollection.h"
+
+#include "utils/PackageNameResolver.h"
+
+#include <WatchdogProperties.sysprop.h>
+#include <android-base/file.h>
+#include <android-base/stringprintf.h>
+#include <inttypes.h>
+#include <log/log.h>
+
+#include <iomanip>
+#include <limits>
+#include <string>
+#include <unordered_map>
+#include <unordered_set>
+#include <vector>
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+using android::wp;
+using android::base::Error;
+using android::base::Result;
+using android::base::StringAppendF;
+using android::base::StringPrintf;
+using android::base::WriteStringToFd;
+
+namespace {
+
+const int32_t kDefaultTopNStatsPerCategory = 10;
+const int32_t kDefaultTopNStatsPerSubcategory = 5;
+
+double percentage(uint64_t numer, uint64_t denom) {
+ return denom == 0 ? 0.0 : (static_cast<double>(numer) / static_cast<double>(denom)) * 100.0;
+}
+
+struct UidProcessStats {
+ struct ProcessInfo {
+ std::string comm = "";
+ uint64_t count = 0;
+ };
+ uint64_t uid = 0;
+ uint32_t ioBlockedTasksCnt = 0;
+ uint32_t totalTasksCnt = 0;
+ uint64_t majorFaults = 0;
+ std::vector<ProcessInfo> topNIoBlockedProcesses = {};
+ std::vector<ProcessInfo> topNMajorFaultProcesses = {};
+};
+
+std::unique_ptr<std::unordered_map<uid_t, UidProcessStats>> getUidProcessStats(
+ const std::vector<ProcessStats>& processStats, int topNStatsPerSubCategory) {
+ std::unique_ptr<std::unordered_map<uid_t, UidProcessStats>> uidProcessStats(
+ new std::unordered_map<uid_t, UidProcessStats>());
+ for (const auto& stats : processStats) {
+ if (stats.uid < 0) {
+ continue;
+ }
+ uid_t uid = static_cast<uid_t>(stats.uid);
+ if (uidProcessStats->find(uid) == uidProcessStats->end()) {
+ (*uidProcessStats)[uid] = UidProcessStats{
+ .uid = uid,
+ .topNIoBlockedProcesses = std::vector<
+ UidProcessStats::ProcessInfo>(topNStatsPerSubCategory,
+ UidProcessStats::ProcessInfo{}),
+ .topNMajorFaultProcesses = std::vector<
+ UidProcessStats::ProcessInfo>(topNStatsPerSubCategory,
+ UidProcessStats::ProcessInfo{}),
+ };
+ }
+ auto& curUidProcessStats = (*uidProcessStats)[uid];
+ // Top-level process stats has the aggregated major page faults count and this should be
+ // persistent across thread creation/termination. Thus use the value from this field.
+ curUidProcessStats.majorFaults += stats.process.majorFaults;
+ curUidProcessStats.totalTasksCnt += stats.threads.size();
+ // The process state is the same as the main thread state. Thus to avoid double counting
+ // ignore the process state.
+ uint32_t ioBlockedTasksCnt = 0;
+ for (const auto& threadStat : stats.threads) {
+ ioBlockedTasksCnt += threadStat.second.state == "D" ? 1 : 0;
+ }
+ curUidProcessStats.ioBlockedTasksCnt += ioBlockedTasksCnt;
+ for (auto it = curUidProcessStats.topNIoBlockedProcesses.begin();
+ it != curUidProcessStats.topNIoBlockedProcesses.end(); ++it) {
+ if (it->count < ioBlockedTasksCnt) {
+ curUidProcessStats.topNIoBlockedProcesses
+ .emplace(it,
+ UidProcessStats::ProcessInfo{
+ .comm = stats.process.comm,
+ .count = ioBlockedTasksCnt,
+ });
+ curUidProcessStats.topNIoBlockedProcesses.pop_back();
+ break;
+ }
+ }
+ for (auto it = curUidProcessStats.topNMajorFaultProcesses.begin();
+ it != curUidProcessStats.topNMajorFaultProcesses.end(); ++it) {
+ if (it->count < stats.process.majorFaults) {
+ curUidProcessStats.topNMajorFaultProcesses
+ .emplace(it,
+ UidProcessStats::ProcessInfo{
+ .comm = stats.process.comm,
+ .count = stats.process.majorFaults,
+ });
+ curUidProcessStats.topNMajorFaultProcesses.pop_back();
+ break;
+ }
+ }
+ }
+ return uidProcessStats;
+}
+
+Result<void> checkDataCollectors(const wp<UidIoStats>& uidIoStats, const wp<ProcStat>& procStat,
+ const wp<ProcPidStat>& procPidStat) {
+ if (uidIoStats != nullptr && procStat != nullptr && procPidStat != nullptr) {
+ return {};
+ }
+ std::string error;
+ if (uidIoStats == nullptr) {
+ error = "Per-UID I/O stats collector must not be empty";
+ }
+ if (procStat == nullptr) {
+ StringAppendF(&error, "%s%s", error.empty() ? "" : ", ",
+ "Proc stats collector must not be empty");
+ }
+ if (procPidStat == nullptr) {
+ StringAppendF(&error, "%s%s", error.empty() ? "" : ", ",
+ "Per-process stats collector must not be empty");
+ }
+
+ return Error() << "Invalid data collectors: " << error;
+}
+
+} // namespace
+
+std::string toString(const UidIoPerfData& data) {
+ std::string buffer;
+ if (data.topNReads.size() > 0) {
+ StringAppendF(&buffer, "\nTop N Reads:\n%s\n", std::string(12, '-').c_str());
+ StringAppendF(&buffer,
+ "Android User ID, Package Name, Foreground Bytes, Foreground Bytes %%, "
+ "Foreground Fsync, Foreground Fsync %%, Background Bytes, "
+ "Background Bytes %%, Background Fsync, Background Fsync %%\n");
+ }
+ for (const auto& stat : data.topNReads) {
+ StringAppendF(&buffer, "%" PRIu32 ", %s", stat.userId, stat.packageName.c_str());
+ for (int i = 0; i < UID_STATES; ++i) {
+ StringAppendF(&buffer, ", %" PRIu64 ", %.2f%%, %" PRIu64 ", %.2f%%", stat.bytes[i],
+ percentage(stat.bytes[i], data.total[READ_BYTES][i]), stat.fsync[i],
+ percentage(stat.fsync[i], data.total[FSYNC_COUNT][i]));
+ }
+ StringAppendF(&buffer, "\n");
+ }
+ if (data.topNWrites.size() > 0) {
+ StringAppendF(&buffer, "\nTop N Writes:\n%s\n", std::string(13, '-').c_str());
+ StringAppendF(&buffer,
+ "Android User ID, Package Name, Foreground Bytes, Foreground Bytes %%, "
+ "Foreground Fsync, Foreground Fsync %%, Background Bytes, "
+ "Background Bytes %%, Background Fsync, Background Fsync %%\n");
+ }
+ for (const auto& stat : data.topNWrites) {
+ StringAppendF(&buffer, "%" PRIu32 ", %s", stat.userId, stat.packageName.c_str());
+ for (int i = 0; i < UID_STATES; ++i) {
+ StringAppendF(&buffer, ", %" PRIu64 ", %.2f%%, %" PRIu64 ", %.2f%%", stat.bytes[i],
+ percentage(stat.bytes[i], data.total[WRITE_BYTES][i]), stat.fsync[i],
+ percentage(stat.fsync[i], data.total[FSYNC_COUNT][i]));
+ }
+ StringAppendF(&buffer, "\n");
+ }
+ return buffer;
+}
+
+std::string toString(const SystemIoPerfData& data) {
+ std::string buffer;
+ StringAppendF(&buffer, "CPU I/O wait time/percent: %" PRIu64 " / %.2f%%\n", data.cpuIoWaitTime,
+ percentage(data.cpuIoWaitTime, data.totalCpuTime));
+ StringAppendF(&buffer, "Number of I/O blocked processes/percent: %" PRIu32 " / %.2f%%\n",
+ data.ioBlockedProcessesCnt,
+ percentage(data.ioBlockedProcessesCnt, data.totalProcessesCnt));
+ return buffer;
+}
+
+std::string toString(const ProcessIoPerfData& data) {
+ std::string buffer;
+ StringAppendF(&buffer, "Number of major page faults since last collection: %" PRIu64 "\n",
+ data.totalMajorFaults);
+ StringAppendF(&buffer,
+ "Percentage of change in major page faults since last collection: %.2f%%\n",
+ data.majorFaultsPercentChange);
+ if (data.topNMajorFaultUids.size() > 0) {
+ StringAppendF(&buffer, "\nTop N major page faults:\n%s\n", std::string(24, '-').c_str());
+ StringAppendF(&buffer,
+ "Android User ID, Package Name, Number of major page faults, "
+ "Percentage of total major page faults\n");
+ StringAppendF(&buffer,
+ "\tCommand, Number of major page faults, Percentage of UID's major page "
+ "faults\n");
+ }
+ for (const auto& uidStats : data.topNMajorFaultUids) {
+ StringAppendF(&buffer, "%" PRIu32 ", %s, %" PRIu64 ", %.2f%%\n", uidStats.userId,
+ uidStats.packageName.c_str(), uidStats.count,
+ percentage(uidStats.count, data.totalMajorFaults));
+ for (const auto& procStats : uidStats.topNProcesses) {
+ StringAppendF(&buffer, "\t%s, %" PRIu64 ", %.2f%%\n", procStats.comm.c_str(),
+ procStats.count, percentage(procStats.count, uidStats.count));
+ }
+ }
+ if (data.topNIoBlockedUids.size() > 0) {
+ StringAppendF(&buffer, "\nTop N I/O waiting UIDs:\n%s\n", std::string(23, '-').c_str());
+ StringAppendF(&buffer,
+ "Android User ID, Package Name, Number of owned tasks waiting for I/O, "
+ "Percentage of owned tasks waiting for I/O\n");
+ StringAppendF(&buffer,
+ "\tCommand, Number of I/O waiting tasks, Percentage of UID's tasks waiting "
+ "for I/O\n");
+ }
+ for (size_t i = 0; i < data.topNIoBlockedUids.size(); ++i) {
+ const auto& uidStats = data.topNIoBlockedUids[i];
+ StringAppendF(&buffer, "%" PRIu32 ", %s, %" PRIu64 ", %.2f%%\n", uidStats.userId,
+ uidStats.packageName.c_str(), uidStats.count,
+ percentage(uidStats.count, data.topNIoBlockedUidsTotalTaskCnt[i]));
+ for (const auto& procStats : uidStats.topNProcesses) {
+ StringAppendF(&buffer, "\t%s, %" PRIu64 ", %.2f%%\n", procStats.comm.c_str(),
+ procStats.count, percentage(procStats.count, uidStats.count));
+ }
+ }
+ return buffer;
+}
+
+std::string toString(const IoPerfRecord& record) {
+ std::string buffer;
+ StringAppendF(&buffer, "%s%s%s", toString(record.systemIoPerfData).c_str(),
+ toString(record.processIoPerfData).c_str(),
+ toString(record.uidIoPerfData).c_str());
+ return buffer;
+}
+
+std::string toString(const CollectionInfo& collectionInfo) {
+ if (collectionInfo.records.empty()) {
+ return kEmptyCollectionMessage;
+ }
+ std::string buffer;
+ double duration =
+ difftime(collectionInfo.records.back().time, collectionInfo.records.front().time);
+ StringAppendF(&buffer, "Collection duration: %.f seconds\nNumber of collections: %zu\n",
+ duration, collectionInfo.records.size());
+
+ for (size_t i = 0; i < collectionInfo.records.size(); ++i) {
+ const auto& record = collectionInfo.records[i];
+ std::stringstream timestamp;
+ timestamp << std::put_time(std::localtime(&record.time), "%c %Z");
+ StringAppendF(&buffer, "\nCollection %zu: <%s>\n%s\n%s", i, timestamp.str().c_str(),
+ std::string(45, '=').c_str(), toString(record).c_str());
+ }
+ return buffer;
+}
+
+Result<void> IoPerfCollection::start() {
+ Mutex::Autolock lock(mMutex);
+ mTopNStatsPerCategory = static_cast<int>(
+ sysprop::topNStatsPerCategory().value_or(kDefaultTopNStatsPerCategory));
+ mTopNStatsPerSubcategory = static_cast<int>(
+ sysprop::topNStatsPerSubcategory().value_or(kDefaultTopNStatsPerSubcategory));
+ size_t periodicCollectionBufferSize = static_cast<size_t>(
+ sysprop::periodicCollectionBufferSize().value_or(kDefaultPeriodicCollectionBufferSize));
+ mBoottimeCollection = {
+ .maxCacheSize = std::numeric_limits<std::size_t>::max(),
+ .records = {},
+ };
+ mPeriodicCollection = {
+ .maxCacheSize = periodicCollectionBufferSize,
+ .records = {},
+ };
+ mCustomCollection = {
+ .maxCacheSize = std::numeric_limits<std::size_t>::max(),
+ .records = {},
+ };
+ return {};
+}
+
+void IoPerfCollection::terminate() {
+ Mutex::Autolock lock(mMutex);
+
+ ALOGW("Terminating %s", name().c_str());
+
+ mBoottimeCollection.records.clear();
+ mBoottimeCollection = {};
+
+ mPeriodicCollection.records.clear();
+ mPeriodicCollection = {};
+
+ mCustomCollection.records.clear();
+ mCustomCollection = {};
+}
+
+Result<void> IoPerfCollection::onDump(int fd) {
+ Mutex::Autolock lock(mMutex);
+ if (!WriteStringToFd(StringPrintf("%s\nBoot-time I/O performance report:\n%s\n",
+ std::string(75, '-').c_str(), std::string(33, '=').c_str()),
+ fd) ||
+ !WriteStringToFd(toString(mBoottimeCollection), fd) ||
+ !WriteStringToFd(StringPrintf("%s\nLast N minutes I/O performance report:\n%s\n",
+ std::string(75, '-').c_str(), std::string(38, '=').c_str()),
+ fd) ||
+ !WriteStringToFd(toString(mPeriodicCollection), fd)) {
+ return Error(FAILED_TRANSACTION)
+ << "Failed to dump the boot-time and periodic collection reports.";
+ }
+ return {};
+}
+
+Result<void> IoPerfCollection::onCustomCollectionDump(int fd) {
+ if (fd == -1) {
+ // Custom collection ends so clear the cache.
+ mCustomCollection.records.clear();
+ mCustomCollection = {
+ .maxCacheSize = std::numeric_limits<std::size_t>::max(),
+ .records = {},
+ };
+ return {};
+ }
+
+ if (!WriteStringToFd(StringPrintf("%s\nCustom I/O performance data report:\n%s\n",
+ std::string(75, '-').c_str(), std::string(75, '-').c_str()),
+ fd) ||
+ !WriteStringToFd(toString(mCustomCollection), fd)) {
+ return Error(FAILED_TRANSACTION) << "Failed to write custom I/O collection report.";
+ }
+
+ return {};
+}
+
+Result<void> IoPerfCollection::onBoottimeCollection(time_t time, const wp<UidIoStats>& uidIoStats,
+ const wp<ProcStat>& procStat,
+ const wp<ProcPidStat>& procPidStat) {
+ auto result = checkDataCollectors(uidIoStats, procStat, procPidStat);
+ if (!result.ok()) {
+ return result;
+ }
+ Mutex::Autolock lock(mMutex);
+ return processLocked(time, std::unordered_set<std::string>(), uidIoStats, procStat, procPidStat,
+ &mBoottimeCollection);
+}
+
+Result<void> IoPerfCollection::onPeriodicCollection(time_t time, const wp<UidIoStats>& uidIoStats,
+ const wp<ProcStat>& procStat,
+ const wp<ProcPidStat>& procPidStat) {
+ auto result = checkDataCollectors(uidIoStats, procStat, procPidStat);
+ if (!result.ok()) {
+ return result;
+ }
+ Mutex::Autolock lock(mMutex);
+ return processLocked(time, std::unordered_set<std::string>(), uidIoStats, procStat, procPidStat,
+ &mPeriodicCollection);
+}
+
+Result<void> IoPerfCollection::onCustomCollection(
+ time_t time, const std::unordered_set<std::string>& filterPackages,
+ const wp<UidIoStats>& uidIoStats, const wp<ProcStat>& procStat,
+ const wp<ProcPidStat>& procPidStat) {
+ auto result = checkDataCollectors(uidIoStats, procStat, procPidStat);
+ if (!result.ok()) {
+ return result;
+ }
+ Mutex::Autolock lock(mMutex);
+ return processLocked(time, filterPackages, uidIoStats, procStat, procPidStat,
+ &mCustomCollection);
+}
+
+Result<void> IoPerfCollection::processLocked(time_t time,
+ const std::unordered_set<std::string>& filterPackages,
+ const wp<UidIoStats>& uidIoStats,
+ const wp<ProcStat>& procStat,
+ const wp<ProcPidStat>& procPidStat,
+ CollectionInfo* collectionInfo) {
+ if (collectionInfo->maxCacheSize == 0) {
+ return Error() << "Maximum cache size cannot be 0";
+ }
+ IoPerfRecord record{
+ .time = time,
+ };
+ processSystemIoPerfData(procStat, &record.systemIoPerfData);
+ processProcessIoPerfDataLocked(filterPackages, procPidStat, &record.processIoPerfData);
+ processUidIoPerfData(filterPackages, uidIoStats, &record.uidIoPerfData);
+ if (collectionInfo->records.size() > collectionInfo->maxCacheSize) {
+ collectionInfo->records.erase(collectionInfo->records.begin()); // Erase the oldest record.
+ }
+ collectionInfo->records.emplace_back(record);
+ return {};
+}
+
+void IoPerfCollection::processUidIoPerfData(const std::unordered_set<std::string>& filterPackages,
+ const wp<UidIoStats>& uidIoStats,
+ UidIoPerfData* uidIoPerfData) const {
+ const std::unordered_map<uid_t, UidIoUsage>& usages = uidIoStats.promote()->deltaStats();
+
+ // Fetch only the top N reads and writes from the usage records.
+ UidIoUsage tempUsage = {};
+ std::vector<const UidIoUsage*> topNReads(mTopNStatsPerCategory, &tempUsage);
+ std::vector<const UidIoUsage*> topNWrites(mTopNStatsPerCategory, &tempUsage);
+ std::unordered_set<uid_t> uids;
+
+ for (const auto& uIt : usages) {
+ const UidIoUsage& curUsage = uIt.second;
+ if (curUsage.ios.isZero()) {
+ continue;
+ }
+ uids.insert(curUsage.uid);
+ uidIoPerfData->total[READ_BYTES][FOREGROUND] +=
+ curUsage.ios.metrics[READ_BYTES][FOREGROUND];
+ uidIoPerfData->total[READ_BYTES][BACKGROUND] +=
+ curUsage.ios.metrics[READ_BYTES][BACKGROUND];
+ uidIoPerfData->total[WRITE_BYTES][FOREGROUND] +=
+ curUsage.ios.metrics[WRITE_BYTES][FOREGROUND];
+ uidIoPerfData->total[WRITE_BYTES][BACKGROUND] +=
+ curUsage.ios.metrics[WRITE_BYTES][BACKGROUND];
+ uidIoPerfData->total[FSYNC_COUNT][FOREGROUND] +=
+ curUsage.ios.metrics[FSYNC_COUNT][FOREGROUND];
+ uidIoPerfData->total[FSYNC_COUNT][BACKGROUND] +=
+ curUsage.ios.metrics[FSYNC_COUNT][BACKGROUND];
+
+ for (auto it = topNReads.begin(); it != topNReads.end(); ++it) {
+ const UidIoUsage* curRead = *it;
+ if (curRead->ios.sumReadBytes() < curUsage.ios.sumReadBytes()) {
+ topNReads.emplace(it, &curUsage);
+ if (filterPackages.empty()) {
+ topNReads.pop_back();
+ }
+ break;
+ }
+ }
+ for (auto it = topNWrites.begin(); it != topNWrites.end(); ++it) {
+ const UidIoUsage* curWrite = *it;
+ if (curWrite->ios.sumWriteBytes() < curUsage.ios.sumWriteBytes()) {
+ topNWrites.emplace(it, &curUsage);
+ if (filterPackages.empty()) {
+ topNWrites.pop_back();
+ }
+ break;
+ }
+ }
+ }
+
+ const auto& uidToPackageNameMapping = PackageNameResolver::getInstance()->resolveUids(uids);
+
+ // Convert the top N I/O usage to UidIoPerfData.
+ for (const auto& usage : topNReads) {
+ if (usage->ios.isZero()) {
+ // End of non-zero usage records. This case occurs when the number of UIDs with active
+ // I/O operations is < |ro.carwatchdog.top_n_stats_per_category|.
+ break;
+ }
+ UidIoPerfData::Stats stats = {
+ .userId = multiuser_get_user_id(usage->uid),
+ .packageName = std::to_string(usage->uid),
+ .bytes = {usage->ios.metrics[READ_BYTES][FOREGROUND],
+ usage->ios.metrics[READ_BYTES][BACKGROUND]},
+ .fsync = {usage->ios.metrics[FSYNC_COUNT][FOREGROUND],
+ usage->ios.metrics[FSYNC_COUNT][BACKGROUND]},
+ };
+ if (uidToPackageNameMapping.find(usage->uid) != uidToPackageNameMapping.end()) {
+ stats.packageName = uidToPackageNameMapping.at(usage->uid);
+ }
+ if (!filterPackages.empty() &&
+ filterPackages.find(stats.packageName) == filterPackages.end()) {
+ continue;
+ }
+ uidIoPerfData->topNReads.emplace_back(stats);
+ }
+
+ for (const auto& usage : topNWrites) {
+ if (usage->ios.isZero()) {
+ // End of non-zero usage records. This case occurs when the number of UIDs with active
+ // I/O operations is < |ro.carwatchdog.top_n_stats_per_category|.
+ break;
+ }
+ UidIoPerfData::Stats stats = {
+ .userId = multiuser_get_user_id(usage->uid),
+ .packageName = std::to_string(usage->uid),
+ .bytes = {usage->ios.metrics[WRITE_BYTES][FOREGROUND],
+ usage->ios.metrics[WRITE_BYTES][BACKGROUND]},
+ .fsync = {usage->ios.metrics[FSYNC_COUNT][FOREGROUND],
+ usage->ios.metrics[FSYNC_COUNT][BACKGROUND]},
+ };
+ if (uidToPackageNameMapping.find(usage->uid) != uidToPackageNameMapping.end()) {
+ stats.packageName = uidToPackageNameMapping.at(usage->uid);
+ }
+ if (!filterPackages.empty() &&
+ filterPackages.find(stats.packageName) == filterPackages.end()) {
+ continue;
+ }
+ uidIoPerfData->topNWrites.emplace_back(stats);
+ }
+}
+
+void IoPerfCollection::processSystemIoPerfData(const wp<ProcStat>& procStat,
+ SystemIoPerfData* systemIoPerfData) const {
+ const ProcStatInfo& procStatInfo = procStat.promote()->deltaStats();
+ systemIoPerfData->cpuIoWaitTime = procStatInfo.cpuStats.ioWaitTime;
+ systemIoPerfData->totalCpuTime = procStatInfo.totalCpuTime();
+ systemIoPerfData->ioBlockedProcessesCnt = procStatInfo.ioBlockedProcessesCnt;
+ systemIoPerfData->totalProcessesCnt = procStatInfo.totalProcessesCnt();
+}
+
+void IoPerfCollection::processProcessIoPerfDataLocked(
+ const std::unordered_set<std::string>& filterPackages, const wp<ProcPidStat>& procPidStat,
+ ProcessIoPerfData* processIoPerfData) {
+ const std::vector<ProcessStats>& processStats = procPidStat.promote()->deltaStats();
+
+ const auto& uidProcessStats = getUidProcessStats(processStats, mTopNStatsPerSubcategory);
+ std::unordered_set<uid_t> uids;
+ // Fetch only the top N I/O blocked UIDs and UIDs with most major page faults.
+ UidProcessStats temp = {};
+ std::vector<const UidProcessStats*> topNIoBlockedUids(mTopNStatsPerCategory, &temp);
+ std::vector<const UidProcessStats*> topNMajorFaultUids(mTopNStatsPerCategory, &temp);
+ processIoPerfData->totalMajorFaults = 0;
+ for (const auto& it : *uidProcessStats) {
+ const UidProcessStats& curStats = it.second;
+ uids.insert(curStats.uid);
+ processIoPerfData->totalMajorFaults += curStats.majorFaults;
+ for (auto it = topNIoBlockedUids.begin(); it != topNIoBlockedUids.end(); ++it) {
+ const UidProcessStats* topStats = *it;
+ if (topStats->ioBlockedTasksCnt < curStats.ioBlockedTasksCnt) {
+ topNIoBlockedUids.emplace(it, &curStats);
+ if (filterPackages.empty()) {
+ topNIoBlockedUids.pop_back();
+ }
+ break;
+ }
+ }
+ for (auto it = topNMajorFaultUids.begin(); it != topNMajorFaultUids.end(); ++it) {
+ const UidProcessStats* topStats = *it;
+ if (topStats->majorFaults < curStats.majorFaults) {
+ topNMajorFaultUids.emplace(it, &curStats);
+ if (filterPackages.empty()) {
+ topNMajorFaultUids.pop_back();
+ }
+ break;
+ }
+ }
+ }
+
+ const auto& uidToPackageNameMapping = PackageNameResolver::getInstance()->resolveUids(uids);
+
+ // Convert the top N uid process stats to ProcessIoPerfData.
+ for (const auto& it : topNIoBlockedUids) {
+ if (it->ioBlockedTasksCnt == 0) {
+ // End of non-zero elements. This case occurs when the number of UIDs with I/O blocked
+ // processes is < |ro.carwatchdog.top_n_stats_per_category|.
+ break;
+ }
+ ProcessIoPerfData::UidStats stats = {
+ .userId = multiuser_get_user_id(it->uid),
+ .packageName = std::to_string(it->uid),
+ .count = it->ioBlockedTasksCnt,
+ };
+ if (uidToPackageNameMapping.find(it->uid) != uidToPackageNameMapping.end()) {
+ stats.packageName = uidToPackageNameMapping.at(it->uid);
+ }
+ if (!filterPackages.empty() &&
+ filterPackages.find(stats.packageName) == filterPackages.end()) {
+ continue;
+ }
+ for (const auto& pIt : it->topNIoBlockedProcesses) {
+ if (pIt.count == 0) {
+ break;
+ }
+ stats.topNProcesses.emplace_back(
+ ProcessIoPerfData::UidStats::ProcessStats{pIt.comm, pIt.count});
+ }
+ processIoPerfData->topNIoBlockedUids.emplace_back(stats);
+ processIoPerfData->topNIoBlockedUidsTotalTaskCnt.emplace_back(it->totalTasksCnt);
+ }
+ for (const auto& it : topNMajorFaultUids) {
+ if (it->majorFaults == 0) {
+ // End of non-zero elements. This case occurs when the number of UIDs with major faults
+ // is < |ro.carwatchdog.top_n_stats_per_category|.
+ break;
+ }
+ ProcessIoPerfData::UidStats stats = {
+ .userId = multiuser_get_user_id(it->uid),
+ .packageName = std::to_string(it->uid),
+ .count = it->majorFaults,
+ };
+ if (uidToPackageNameMapping.find(it->uid) != uidToPackageNameMapping.end()) {
+ stats.packageName = uidToPackageNameMapping.at(it->uid);
+ }
+ if (!filterPackages.empty() &&
+ filterPackages.find(stats.packageName) == filterPackages.end()) {
+ continue;
+ }
+ for (const auto& pIt : it->topNMajorFaultProcesses) {
+ if (pIt.count == 0) {
+ break;
+ }
+ stats.topNProcesses.emplace_back(
+ ProcessIoPerfData::UidStats::ProcessStats{pIt.comm, pIt.count});
+ }
+ processIoPerfData->topNMajorFaultUids.emplace_back(stats);
+ }
+ if (mLastMajorFaults == 0) {
+ processIoPerfData->majorFaultsPercentChange = 0;
+ } else {
+ int64_t increase = processIoPerfData->totalMajorFaults - mLastMajorFaults;
+ processIoPerfData->majorFaultsPercentChange =
+ (static_cast<double>(increase) / static_cast<double>(mLastMajorFaults)) * 100.0;
+ }
+ mLastMajorFaults = processIoPerfData->totalMajorFaults;
+}
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
diff --git a/cpp/watchdog/server/src/IoPerfCollection.h b/cpp/watchdog/server/src/IoPerfCollection.h
new file mode 100644
index 0000000..83f57e6
--- /dev/null
+++ b/cpp/watchdog/server/src/IoPerfCollection.h
@@ -0,0 +1,215 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#ifndef CPP_WATCHDOG_SERVER_SRC_IOPERFCOLLECTION_H_
+#define CPP_WATCHDOG_SERVER_SRC_IOPERFCOLLECTION_H_
+
+#include "ProcPidStat.h"
+#include "ProcStat.h"
+#include "UidIoStats.h"
+#include "WatchdogPerfService.h"
+
+#include <android-base/result.h>
+#include <cutils/multiuser.h>
+#include <gtest/gtest_prod.h>
+#include <utils/Errors.h>
+#include <utils/Mutex.h>
+#include <utils/RefBase.h>
+
+#include <ctime>
+#include <string>
+#include <unordered_set>
+#include <vector>
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+// Number of periodic collection perf data snapshots to cache in memory.
+const int32_t kDefaultPeriodicCollectionBufferSize = 180;
+constexpr const char* kEmptyCollectionMessage = "No collection recorded\n";
+
+// Performance data collected from the `/proc/uid_io/stats` file.
+struct UidIoPerfData {
+ struct Stats {
+ userid_t userId = 0;
+ std::string packageName;
+ uint64_t bytes[UID_STATES];
+ uint64_t fsync[UID_STATES];
+ };
+ std::vector<Stats> topNReads = {};
+ std::vector<Stats> topNWrites = {};
+ uint64_t total[METRIC_TYPES][UID_STATES] = {{0}};
+};
+
+std::string toString(const UidIoPerfData& perfData);
+
+// Performance data collected from the `/proc/stats` file.
+struct SystemIoPerfData {
+ uint64_t cpuIoWaitTime = 0;
+ uint64_t totalCpuTime = 0;
+ uint32_t ioBlockedProcessesCnt = 0;
+ uint32_t totalProcessesCnt = 0;
+};
+
+std::string toString(const SystemIoPerfData& perfData);
+
+// Performance data collected from the `/proc/[pid]/stat` and `/proc/[pid]/task/[tid]/stat` files.
+struct ProcessIoPerfData {
+ struct UidStats {
+ userid_t userId = 0;
+ std::string packageName;
+ uint64_t count = 0;
+ struct ProcessStats {
+ std::string comm = "";
+ uint64_t count = 0;
+ };
+ std::vector<ProcessStats> topNProcesses = {};
+ };
+ std::vector<UidStats> topNIoBlockedUids = {};
+ // Total # of tasks owned by each UID in |topNIoBlockedUids|.
+ std::vector<uint64_t> topNIoBlockedUidsTotalTaskCnt = {};
+ std::vector<UidStats> topNMajorFaultUids = {};
+ uint64_t totalMajorFaults = 0;
+ // Percentage of increase/decrease in the major page faults since last collection.
+ double majorFaultsPercentChange = 0.0;
+};
+
+std::string toString(const ProcessIoPerfData& data);
+
+struct IoPerfRecord {
+ time_t time; // Collection time.
+ UidIoPerfData uidIoPerfData;
+ SystemIoPerfData systemIoPerfData;
+ ProcessIoPerfData processIoPerfData;
+};
+
+std::string toString(const IoPerfRecord& record);
+
+struct CollectionInfo {
+ size_t maxCacheSize = 0; // Maximum cache size for the collection.
+ std::vector<IoPerfRecord> records; // Cache of collected performance records.
+};
+
+std::string toString(const CollectionInfo& collectionInfo);
+
+// Forward declaration for testing use only.
+namespace internal {
+
+class IoPerfCollectionPeer;
+
+} // namespace internal
+
+// IoPerfCollection implements the I/O performance data collection module.
+class IoPerfCollection : public DataProcessor {
+public:
+ IoPerfCollection() :
+ mBoottimeCollection({}),
+ mPeriodicCollection({}),
+ mCustomCollection({}),
+ mLastMajorFaults(0) {}
+
+ ~IoPerfCollection() { terminate(); }
+
+ std::string name() { return "IoPerfCollection"; }
+
+ // Implements DataProcessor interface.
+ android::base::Result<void> start();
+
+ // Clears in-memory cache.
+ void terminate();
+
+ android::base::Result<void> onBoottimeCollection(time_t time,
+ const android::wp<UidIoStats>& uidIoStats,
+ const android::wp<ProcStat>& procStat,
+ const android::wp<ProcPidStat>& procPidStat);
+
+ android::base::Result<void> onPeriodicCollection(time_t time,
+ const android::wp<UidIoStats>& uidIoStats,
+ const android::wp<ProcStat>& procStat,
+ const android::wp<ProcPidStat>& procPidStat);
+
+ android::base::Result<void> onCustomCollection(
+ time_t time, const std::unordered_set<std::string>& filterPackages,
+ const android::wp<UidIoStats>& uidIoStats, const android::wp<ProcStat>& procStat,
+ const android::wp<ProcPidStat>& procPidStat);
+
+ android::base::Result<void> onDump(int fd);
+
+ android::base::Result<void> onCustomCollectionDump(int fd);
+
+private:
+ // Processes the collected data.
+ android::base::Result<void> processLocked(time_t time,
+ const std::unordered_set<std::string>& filterPackages,
+ const android::wp<UidIoStats>& uidIoStats,
+ const android::wp<ProcStat>& procStat,
+ const android::wp<ProcPidStat>& procPidStat,
+ CollectionInfo* collectionInfo);
+
+ // Processes performance data from the `/proc/uid_io/stats` file.
+ void processUidIoPerfData(const std::unordered_set<std::string>& filterPackages,
+ const android::wp<UidIoStats>& uidIoStats,
+ UidIoPerfData* uidIoPerfData) const;
+
+ // Processes performance data from the `/proc/stats` file.
+ void processSystemIoPerfData(const android::wp<ProcStat>& procStat,
+ SystemIoPerfData* systemIoPerfData) const;
+
+ // Processes performance data from the `/proc/[pid]/stat` and `/proc/[pid]/task/[tid]/stat`
+ // files.
+ void processProcessIoPerfDataLocked(const std::unordered_set<std::string>& filterPackages,
+ const android::wp<ProcPidStat>& procPidStat,
+ ProcessIoPerfData* processIoPerfData);
+
+ // Top N per-UID stats per category.
+ int mTopNStatsPerCategory;
+
+ // Top N per-process stats per subcategory.
+ int mTopNStatsPerSubcategory;
+
+ // Makes sure only one collection is running at any given time.
+ Mutex mMutex;
+
+ // Info for the boot-time collection event. The cache is persisted until system shutdown/reboot.
+ CollectionInfo mBoottimeCollection GUARDED_BY(mMutex);
+
+ // Info for the periodic collection event. The cache size is limited by
+ // |ro.carwatchdog.periodic_collection_buffer_size|.
+ CollectionInfo mPeriodicCollection GUARDED_BY(mMutex);
+
+ // Info for the custom collection event. The info is cleared at the end of every custom
+ // collection.
+ CollectionInfo mCustomCollection GUARDED_BY(mMutex);
+
+ // Major faults delta from last collection. Useful when calculating the percentage change in
+ // major faults since last collection.
+ uint64_t mLastMajorFaults GUARDED_BY(mMutex);
+
+ // For unit tests.
+ friend class internal::IoPerfCollectionPeer;
+ FRIEND_TEST(IoPerfCollectionTest, TestUidIoStatsGreaterThanTopNStatsLimit);
+ FRIEND_TEST(IoPerfCollectionTest, TestUidIOStatsLessThanTopNStatsLimit);
+ FRIEND_TEST(IoPerfCollectionTest, TestProcessSystemIoPerfData);
+ FRIEND_TEST(IoPerfCollectionTest, TestProcPidContentsGreaterThanTopNStatsLimit);
+ FRIEND_TEST(IoPerfCollectionTest, TestProcPidContentsLessThanTopNStatsLimit);
+};
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
+
+#endif // CPP_WATCHDOG_SERVER_SRC_IOPERFCOLLECTION_H_
diff --git a/watchdog/server/src/LooperWrapper.cpp b/cpp/watchdog/server/src/LooperWrapper.cpp
similarity index 100%
rename from watchdog/server/src/LooperWrapper.cpp
rename to cpp/watchdog/server/src/LooperWrapper.cpp
diff --git a/watchdog/server/src/LooperWrapper.h b/cpp/watchdog/server/src/LooperWrapper.h
similarity index 91%
rename from watchdog/server/src/LooperWrapper.h
rename to cpp/watchdog/server/src/LooperWrapper.h
index d6e31df..809075e 100644
--- a/watchdog/server/src/LooperWrapper.h
+++ b/cpp/watchdog/server/src/LooperWrapper.h
@@ -14,8 +14,8 @@
* limitations under the License.
*/
-#ifndef WATCHDOG_SERVER_SRC_LOOPERWRAPPER_H_
-#define WATCHDOG_SERVER_SRC_LOOPERWRAPPER_H_
+#ifndef CPP_WATCHDOG_SERVER_SRC_LOOPERWRAPPER_H_
+#define CPP_WATCHDOG_SERVER_SRC_LOOPERWRAPPER_H_
#include <utils/Looper.h>
#include <utils/RefBase.h>
@@ -50,4 +50,4 @@
} // namespace automotive
} // namespace android
-#endif // WATCHDOG_SERVER_SRC_LOOPERWRAPPER_H_
+#endif // CPP_WATCHDOG_SERVER_SRC_LOOPERWRAPPER_H_
diff --git a/watchdog/server/src/ProcPidStat.cpp b/cpp/watchdog/server/src/ProcPidStat.cpp
similarity index 66%
rename from watchdog/server/src/ProcPidStat.cpp
rename to cpp/watchdog/server/src/ProcPidStat.cpp
index b92c739..506bc58 100644
--- a/watchdog/server/src/ProcPidStat.cpp
+++ b/cpp/watchdog/server/src/ProcPidStat.cpp
@@ -39,6 +39,7 @@
using android::base::ReadFileToString;
using android::base::Result;
using android::base::Split;
+using android::base::Trim;
namespace {
@@ -86,8 +87,8 @@
// The required data is in the first 22 + |commEndOffset| fields so make sure there are at least
// these many fields in the file.
- if (fields.size() < 22 + commEndOffset || !ParseUint(fields[0], &pidStat->pid) ||
- !ParseUint(fields[3 + commEndOffset], &pidStat->ppid) ||
+ if (fields.size() < 22 + commEndOffset || !ParseInt(fields[0], &pidStat->pid) ||
+ !ParseInt(fields[3 + commEndOffset], &pidStat->ppid) ||
!ParseUint(fields[11 + commEndOffset], &pidStat->majorFaults) ||
!ParseUint(fields[19 + commEndOffset], &pidStat->numThreads) ||
!ParseUint(fields[21 + commEndOffset], &pidStat->startTime)) {
@@ -113,27 +114,102 @@
return {};
}
+Result<std::unordered_map<std::string, std::string>> readKeyValueFile(
+ const std::string& path, const std::string& delimiter) {
+ std::string buffer;
+ if (!ReadFileToString(path, &buffer)) {
+ return Error(ERR_FILE_OPEN_READ) << "ReadFileToString failed for " << path;
+ }
+ std::unordered_map<std::string, std::string> contents;
+ std::vector<std::string> lines = Split(std::move(buffer), "\n");
+ for (size_t i = 0; i < lines.size(); ++i) {
+ if (lines[i].empty()) {
+ continue;
+ }
+ std::vector<std::string> elements = Split(lines[i], delimiter);
+ if (elements.size() < 2) {
+ return Error(ERR_INVALID_FILE)
+ << "Line \"" << lines[i] << "\" doesn't contain the delimiter \"" << delimiter
+ << "\" in file " << path;
+ }
+ std::string key = elements[0];
+ std::string value = Trim(lines[i].substr(key.length() + delimiter.length()));
+ if (contents.find(key) != contents.end()) {
+ return Error(ERR_INVALID_FILE)
+ << "Duplicate " << key << " line: \"" << lines[i] << "\" in file " << path;
+ }
+ contents[key] = value;
+ }
+ return contents;
+}
+
+// /proc/PID/status file format(*):
+// Tgid: <Thread group ID of the process>
+// Uid: <Read UID> <Effective UID> <Saved set UID> <Filesystem UID>
+// VmPeak: <Peak virtual memory size> kB
+// VmSize: <Virtual memory size> kB
+// VmHWM: <Peak resident set size> kB
+// VmRSS: <Resident set size> kB
+//
+// (*) - Included only the fields that are parsed from the file.
+Result<void> readPidStatusFile(const std::string& path, ProcessStats* processStats) {
+ auto ret = readKeyValueFile(path, ":\t");
+ if (!ret.ok()) {
+ return Error(ret.error().code()) << ret.error();
+ }
+ auto contents = ret.value();
+ if (contents.empty()) {
+ return Error(ERR_INVALID_FILE) << "Empty file " << path;
+ }
+ if (contents.find("Uid") == contents.end() ||
+ !ParseInt(Split(contents["Uid"], "\t")[0], &processStats->uid)) {
+ return Error(ERR_INVALID_FILE) << "Failed to read 'UIDs' from file " << path;
+ }
+ if (contents.find("Tgid") == contents.end() ||
+ !ParseInt(contents["Tgid"], &processStats->tgid)) {
+ return Error(ERR_INVALID_FILE) << "Failed to read 'Tgid' from file " << path;
+ }
+ // Below Vm* fields may not be present for some processes so don't fail when they are missing.
+ if (contents.find("VmPeak") != contents.end() &&
+ !ParseUint(Split(contents["VmPeak"], " ")[0], &processStats->vmPeakKb)) {
+ return Error(ERR_INVALID_FILE) << "Failed to parse 'VmPeak' from file " << path;
+ }
+ if (contents.find("VmSize") != contents.end() &&
+ !ParseUint(Split(contents["VmSize"], " ")[0], &processStats->vmSizeKb)) {
+ return Error(ERR_INVALID_FILE) << "Failed to parse 'VmSize' from file " << path;
+ }
+ if (contents.find("VmHWM") != contents.end() &&
+ !ParseUint(Split(contents["VmHWM"], " ")[0], &processStats->vmHwmKb)) {
+ return Error(ERR_INVALID_FILE) << "Failed to parse 'VmHWM' from file " << path;
+ }
+ if (contents.find("VmRSS") != contents.end() &&
+ !ParseUint(Split(contents["VmRSS"], " ")[0], &processStats->vmRssKb)) {
+ return Error(ERR_INVALID_FILE) << "Failed to parse 'VmRSS' from file " << path;
+ }
+ return {};
+}
+
} // namespace
-Result<std::vector<ProcessStats>> ProcPidStat::collect() {
+Result<void> ProcPidStat::collect() {
if (!mEnabled) {
return Error() << "Can not access PID stat files under " << kProcDirPath;
}
Mutex::Autolock lock(mMutex);
const auto& processStats = getProcessStatsLocked();
- if (!processStats) {
+ if (!processStats.ok()) {
return Error() << processStats.error();
}
- std::vector<ProcessStats> delta;
+ mDeltaProcessStats.clear();
for (const auto& it : *processStats) {
const ProcessStats& curStats = it.second;
- const auto& cachedIt = mLastProcessStats.find(it.first);
- if (cachedIt == mLastProcessStats.end() ||
+ const auto& cachedIt = mLatestProcessStats.find(it.first);
+ if (cachedIt == mLatestProcessStats.end() ||
cachedIt->second.process.startTime != curStats.process.startTime) {
// New/reused PID so don't calculate the delta.
- delta.emplace_back(curStats);
+ mDeltaProcessStats.emplace_back(curStats);
continue;
}
@@ -149,14 +225,14 @@
}
deltaThread.second.majorFaults -= cachedThread->second.majorFaults;
}
- delta.emplace_back(deltaStats);
+ mDeltaProcessStats.emplace_back(deltaStats);
}
- mLastProcessStats = *processStats;
- return delta;
+ mLatestProcessStats = *processStats;
+ return {};
}
-Result<std::unordered_map<uint32_t, ProcessStats>> ProcPidStat::getProcessStatsLocked() const {
- std::unordered_map<uint32_t, ProcessStats> processStats;
+Result<std::unordered_map<pid_t, ProcessStats>> ProcPidStat::getProcessStatsLocked() const {
+ std::unordered_map<pid_t, ProcessStats> processStats;
auto procDirp = std::unique_ptr<DIR, int (*)(DIR*)>(opendir(mPath.c_str()), closedir);
if (!procDirp) {
return Error() << "Failed to open " << mPath << " directory";
@@ -164,14 +240,14 @@
dirent* pidDir = nullptr;
while ((pidDir = readdir(procDirp.get())) != nullptr) {
// 1. Read top-level pid stats.
- uint32_t pid = 0;
- if (pidDir->d_type != DT_DIR || !ParseUint(pidDir->d_name, &pid)) {
+ pid_t pid = 0;
+ if (pidDir->d_type != DT_DIR || !ParseInt(pidDir->d_name, &pid)) {
continue;
}
ProcessStats curStats;
std::string path = StringPrintf((mPath + kStatFileFormat).c_str(), pid);
- const auto& ret = readPidStatFile(path, &curStats.process);
- if (!ret) {
+ auto ret = readPidStatFile(path, &curStats.process);
+ if (!ret.ok()) {
// PID may disappear between scanning the directory and parsing the stat file.
// Thus treat ERR_FILE_OPEN_READ errors as soft errors.
if (ret.error().code() != ERR_FILE_OPEN_READ) {
@@ -183,26 +259,26 @@
continue;
}
- // 2. When not found in the cache, fetch tgid/UID as soon as possible because processes
- // may terminate during scanning.
- const auto& it = mLastProcessStats.find(curStats.process.pid);
- if (it == mLastProcessStats.end() ||
- it->second.process.startTime != curStats.process.startTime || it->second.tgid == -1 ||
- it->second.uid == -1) {
- const auto& ret = getPidStatusLocked(&curStats);
- if (!ret) {
- if (ret.error().code() != ERR_FILE_OPEN_READ) {
- return Error() << "Failed to read pid status for pid " << curStats.process.pid
- << ": " << ret.error().message().c_str();
- }
- ALOGW("Failed to read pid status for pid %" PRIu32 ": %s", curStats.process.pid,
- ret.error().message().c_str());
- // Default tgid and uid values are -1 (aka unknown).
+ // 2. Read aggregated process status.
+ path = StringPrintf((mPath + kStatusFileFormat).c_str(), curStats.process.pid);
+ ret = readPidStatusFile(path, &curStats);
+ if (!ret.ok()) {
+ if (ret.error().code() != ERR_FILE_OPEN_READ) {
+ return Error() << "Failed to read pid status for pid " << curStats.process.pid
+ << ": " << ret.error().message().c_str();
}
- } else {
- // Fetch from cache.
- curStats.tgid = it->second.tgid;
- curStats.uid = it->second.uid;
+ ALOGW("Failed to read pid status for pid %" PRIu32 ": %s", curStats.process.pid,
+ ret.error().message().c_str());
+ }
+
+ // 3. When failed to read tgid or uid, copy these from the previous collection.
+ if (curStats.tgid == -1 || curStats.uid == -1) {
+ const auto& it = mLatestProcessStats.find(curStats.process.pid);
+ if (it != mLatestProcessStats.end() &&
+ it->second.process.startTime == curStats.process.startTime) {
+ curStats.tgid = it->second.tgid;
+ curStats.uid = it->second.uid;
+ }
}
if (curStats.tgid != -1 && curStats.tgid != curStats.process.pid) {
@@ -221,8 +297,8 @@
dirent* tidDir = nullptr;
bool didReadMainThread = false;
while (taskDirp != nullptr && (tidDir = readdir(taskDirp.get())) != nullptr) {
- uint32_t tid = 0;
- if (tidDir->d_type != DT_DIR || !ParseUint(tidDir->d_name, &tid)) {
+ pid_t tid = 0;
+ if (tidDir->d_type != DT_DIR || !ParseInt(tidDir->d_name, &tid)) {
continue;
}
if (processStats.find(tid) != processStats.end()) {
@@ -233,7 +309,7 @@
PidStat curThreadStat = {};
path = StringPrintf((taskDir + kStatFileFormat).c_str(), tid);
const auto& ret = readPidStatFile(path, &curThreadStat);
- if (!ret) {
+ if (!ret.ok()) {
if (ret.error().code() != ERR_FILE_OPEN_READ) {
return Error() << "Failed to read per-thread stat file: "
<< ret.error().message().c_str();
@@ -267,49 +343,6 @@
return processStats;
}
-Result<void> ProcPidStat::getPidStatusLocked(ProcessStats* processStats) const {
- std::string buffer;
- std::string path = StringPrintf((mPath + kStatusFileFormat).c_str(), processStats->process.pid);
- if (!ReadFileToString(path, &buffer)) {
- return Error(ERR_FILE_OPEN_READ) << "ReadFileToString failed for " << path;
- }
- std::vector<std::string> lines = Split(std::move(buffer), "\n");
- bool didReadUid = false;
- bool didReadTgid = false;
- for (size_t i = 0; i < lines.size(); ++i) {
- if (lines[i].empty()) {
- continue;
- }
- if (!lines[i].compare(0, 4, "Uid:")) {
- if (didReadUid) {
- return Error(ERR_INVALID_FILE)
- << "Duplicate UID line: \"" << lines[i] << "\" in file " << path;
- }
- std::vector<std::string> fields = Split(lines[i], "\t");
- if (fields.size() < 2 || !ParseInt(fields[1], &processStats->uid)) {
- return Error(ERR_INVALID_FILE)
- << "Invalid UID line: \"" << lines[i] << "\" in file " << path;
- }
- didReadUid = true;
- } else if (!lines[i].compare(0, 5, "Tgid:")) {
- if (didReadTgid) {
- return Error(ERR_INVALID_FILE)
- << "Duplicate Tgid line: \"" << lines[i] << "\" in file" << path;
- }
- std::vector<std::string> fields = Split(lines[i], "\t");
- if (fields.size() != 2 || !ParseInt(fields[1], &processStats->tgid)) {
- return Error(ERR_INVALID_FILE)
- << "Invalid tgid line: \"" << lines[i] << "\" in file" << path;
- }
- didReadTgid = true;
- }
- }
- if (!didReadUid || !didReadTgid) {
- return Error(ERR_INVALID_FILE) << "Incomplete file " << mPath + kStatusFileFormat;
- }
- return {};
-}
-
} // namespace watchdog
} // namespace automotive
} // namespace android
diff --git a/watchdog/server/src/ProcPidStat.h b/cpp/watchdog/server/src/ProcPidStat.h
similarity index 70%
rename from watchdog/server/src/ProcPidStat.h
rename to cpp/watchdog/server/src/ProcPidStat.h
index c520cb6..f3ae957 100644
--- a/watchdog/server/src/ProcPidStat.h
+++ b/cpp/watchdog/server/src/ProcPidStat.h
@@ -14,8 +14,8 @@
* limitations under the License.
*/
-#ifndef WATCHDOG_SERVER_SRC_PROCPIDSTAT_H_
-#define WATCHDOG_SERVER_SRC_PROCPIDSTAT_H_
+#ifndef CPP_WATCHDOG_SERVER_SRC_PROCPIDSTAT_H_
+#define CPP_WATCHDOG_SERVER_SRC_PROCPIDSTAT_H_
#include <android-base/result.h>
#include <android-base/stringprintf.h>
@@ -43,10 +43,10 @@
constexpr const char* kStatusFileFormat = "/%" PRIu32 "/status";
struct PidStat {
- uint32_t pid = 0;
+ pid_t pid = 0;
std::string comm = "";
std::string state = "";
- uint32_t ppid = 0;
+ pid_t ppid = 0;
uint64_t majorFaults = 0;
uint32_t numThreads = 0;
uint64_t startTime = 0; // Useful when identifying PID/TID reuse
@@ -55,8 +55,12 @@
struct ProcessStats {
int64_t tgid = -1; // -1 indicates a failure to read this value
int64_t uid = -1; // -1 indicates a failure to read this value
+ uint64_t vmPeakKb = 0;
+ uint64_t vmSizeKb = 0;
+ uint64_t vmHwmKb = 0;
+ uint64_t vmRssKb = 0;
PidStat process = {}; // Aggregated stats across all the threads
- std::unordered_map<uint32_t, PidStat> threads; // Per-thread stat including the main thread
+ std::unordered_map<pid_t, PidStat> threads; // Per-thread stat including the main thread
};
// Collector/parser for `/proc/[pid]/stat`, `/proc/[pid]/task/[tid]/stat` and /proc/[pid]/status`
@@ -64,7 +68,8 @@
class ProcPidStat : public RefBase {
public:
explicit ProcPidStat(const std::string& path = kProcDirPath) :
- mLastProcessStats({}), mPath(path) {
+ mLatestProcessStats({}),
+ mPath(path) {
std::string pidStatPath = StringPrintf((mPath + kStatFileFormat).c_str(), PID_FOR_INIT);
std::string tidStatPath = StringPrintf((mPath + kTaskDirFormat + kStatFileFormat).c_str(),
PID_FOR_INIT, PID_FOR_INIT);
@@ -76,10 +81,22 @@
virtual ~ProcPidStat() {}
- // Collects pid info delta since the last collection.
- virtual android::base::Result<std::vector<ProcessStats>> collect();
+ // Collects per-process stats.
+ virtual android::base::Result<void> collect();
- // Called by IoPerfCollection and tests.
+ // Returns the latest per-process stats collected.
+ virtual const std::unordered_map<pid_t, ProcessStats> latestStats() const {
+ Mutex::Autolock lock(mMutex);
+ return mLatestProcessStats;
+ }
+
+ // Returns the delta of per-process stats since the last before collection.
+ virtual const std::vector<ProcessStats> deltaStats() const {
+ Mutex::Autolock lock(mMutex);
+ return mDeltaProcessStats;
+ }
+
+ // Called by WatchdogPerfService and tests.
virtual bool enabled() { return mEnabled; }
virtual std::string dirPath() { return mPath; }
@@ -87,18 +104,19 @@
private:
// Reads the contents of the below files:
// 1. Pid stat file at |mPath| + |kStatFileFormat|
- // 2. Tid stat file at |mPath| + |kTaskDirFormat| + |kStatFileFormat|
- android::base::Result<std::unordered_map<uint32_t, ProcessStats>> getProcessStatsLocked() const;
-
- // Reads the tgid and real UID for the given PID from |mPath| + |kStatusFileFormat|.
- android::base::Result<void> getPidStatusLocked(ProcessStats* processStats) const;
+ // 2. Aggregated per-process status at |mPath| + |kStatusFileFormat|
+ // 3. Tid stat file at |mPath| + |kTaskDirFormat| + |kStatFileFormat|
+ android::base::Result<std::unordered_map<pid_t, ProcessStats>> getProcessStatsLocked() const;
// Makes sure only one collection is running at any given time.
- Mutex mMutex;
+ mutable Mutex mMutex;
- // Last dump of per-process stats. Useful for calculating the delta and identifying PID/TID
+ // Latest dump of per-process stats. Useful for calculating the delta and identifying PID/TID
// reuse.
- std::unordered_map<uint32_t, ProcessStats> mLastProcessStats GUARDED_BY(mMutex);
+ std::unordered_map<pid_t, ProcessStats> mLatestProcessStats GUARDED_BY(mMutex);
+
+ // Latest delta of per-process stats.
+ std::vector<ProcessStats> mDeltaProcessStats GUARDED_BY(mMutex);
// True if the below files are accessible:
// 1. Pid stat file at |mPath| + |kTaskStatFileFormat|
@@ -121,4 +139,4 @@
} // namespace automotive
} // namespace android
-#endif // WATCHDOG_SERVER_SRC_PROCPIDSTAT_H_
+#endif // CPP_WATCHDOG_SERVER_SRC_PROCPIDSTAT_H_
diff --git a/watchdog/server/src/ProcStat.cpp b/cpp/watchdog/server/src/ProcStat.cpp
similarity index 80%
rename from watchdog/server/src/ProcStat.cpp
rename to cpp/watchdog/server/src/ProcStat.cpp
index 34b847f..3cc126c 100644
--- a/watchdog/server/src/ProcStat.cpp
+++ b/cpp/watchdog/server/src/ProcStat.cpp
@@ -71,37 +71,22 @@
} // namespace
-Result<ProcStatInfo> ProcStat::collect() {
+Result<void> ProcStat::collect() {
if (!kEnabled) {
return Error() << "Can not access " << kPath;
}
Mutex::Autolock lock(mMutex);
const auto& info = getProcStatLocked();
- if (!info) {
+ if (!info.ok()) {
return Error() << "Failed to get proc stat contents: " << info.error();
}
- ProcStatInfo delta;
+ mDeltaStats = *info;
+ mDeltaStats -= mLatestStats;
+ mLatestStats = *info;
- delta.cpuStats.userTime = info->cpuStats.userTime - mLastCpuStats.userTime;
- delta.cpuStats.niceTime = info->cpuStats.niceTime - mLastCpuStats.niceTime;
- delta.cpuStats.sysTime = info->cpuStats.sysTime - mLastCpuStats.sysTime;
- delta.cpuStats.idleTime = info->cpuStats.idleTime - mLastCpuStats.idleTime;
- delta.cpuStats.ioWaitTime = info->cpuStats.ioWaitTime - mLastCpuStats.ioWaitTime;
- delta.cpuStats.irqTime = info->cpuStats.irqTime - mLastCpuStats.irqTime;
- delta.cpuStats.softIrqTime = info->cpuStats.softIrqTime - mLastCpuStats.softIrqTime;
- delta.cpuStats.stealTime = info->cpuStats.stealTime - mLastCpuStats.stealTime;
- delta.cpuStats.guestTime = info->cpuStats.guestTime - mLastCpuStats.guestTime;
- delta.cpuStats.guestNiceTime = info->cpuStats.guestNiceTime - mLastCpuStats.guestNiceTime;
-
- // Process counts are real-time values. Thus they should be reported as-is and not their deltas.
- delta.runnableProcessesCnt = info->runnableProcessesCnt;
- delta.ioBlockedProcessesCnt = info->ioBlockedProcessesCnt;
-
- mLastCpuStats = info->cpuStats;
-
- return delta;
+ return {};
}
Result<ProcStatInfo> ProcStat::getProcStatLocked() const {
diff --git a/watchdog/server/src/ProcStat.h b/cpp/watchdog/server/src/ProcStat.h
similarity index 68%
rename from watchdog/server/src/ProcStat.h
rename to cpp/watchdog/server/src/ProcStat.h
index 00df4c8..2e660a1 100644
--- a/watchdog/server/src/ProcStat.h
+++ b/cpp/watchdog/server/src/ProcStat.h
@@ -14,8 +14,8 @@
* limitations under the License.
*/
-#ifndef WATCHDOG_SERVER_SRC_PROCSTAT_H_
-#define WATCHDOG_SERVER_SRC_PROCSTAT_H_
+#ifndef CPP_WATCHDOG_SERVER_SRC_PROCSTAT_H_
+#define CPP_WATCHDOG_SERVER_SRC_PROCSTAT_H_
#include <android-base/result.h>
#include <stdint.h>
@@ -39,6 +39,20 @@
uint64_t stealTime = 0; // Stolen time (Time spent in other OS in a virtualized env).
uint64_t guestTime = 0; // Time spent running a virtual CPU for guest OS.
uint64_t guestNiceTime = 0; // Time spent running a niced virtual CPU for guest OS.
+
+ CpuStats& operator-=(const CpuStats& rhs) {
+ userTime -= rhs.userTime;
+ niceTime -= rhs.niceTime;
+ sysTime -= rhs.sysTime;
+ idleTime -= rhs.idleTime;
+ ioWaitTime -= rhs.ioWaitTime;
+ irqTime -= rhs.irqTime;
+ softIrqTime -= rhs.softIrqTime;
+ stealTime -= rhs.stealTime;
+ guestTime -= rhs.guestTime;
+ guestNiceTime -= rhs.guestNiceTime;
+ return *this;
+ }
};
class ProcStatInfo {
@@ -61,34 +75,57 @@
runnableProcessesCnt == info.runnableProcessesCnt &&
ioBlockedProcessesCnt == info.ioBlockedProcessesCnt;
}
+ ProcStatInfo& operator-=(const ProcStatInfo& rhs) {
+ cpuStats -= rhs.cpuStats;
+ // Don't diff *ProcessesCnt as they are real-time values unlike |cpuStats|, which are
+ // aggregated values since system startup.
+ return *this;
+ }
};
// Collector/parser for `/proc/stat` file.
class ProcStat : public RefBase {
public:
explicit ProcStat(const std::string& path = kProcStatPath) :
- mLastCpuStats({}), kEnabled(!access(path.c_str(), R_OK)), kPath(path) {}
+ mLatestStats({}),
+ kEnabled(!access(path.c_str(), R_OK)),
+ kPath(path) {}
virtual ~ProcStat() {}
// Collects proc stat delta since the last collection.
- virtual android::base::Result<ProcStatInfo> collect();
+ virtual android::base::Result<void> collect();
// Returns true when the proc stat file is accessible. Otherwise, returns false.
- // Called by IoPerfCollection and tests.
+ // Called by WatchdogPerfService and tests.
virtual bool enabled() { return kEnabled; }
virtual std::string filePath() { return kProcStatPath; }
+ // Returns the latest stats.
+ virtual const ProcStatInfo latestStats() const {
+ Mutex::Autolock lock(mMutex);
+ return mLatestStats;
+ }
+
+ // Returns the delta of stats from the latest collection.
+ virtual const ProcStatInfo deltaStats() const {
+ Mutex::Autolock lock(mMutex);
+ return mDeltaStats;
+ }
+
private:
// Reads the contents of |kPath|.
android::base::Result<ProcStatInfo> getProcStatLocked() const;
// Makes sure only one collection is running at any given time.
- Mutex mMutex;
+ mutable Mutex mMutex;
- // Last dump of cpu stats from the file at |kPath|.
- CpuStats mLastCpuStats GUARDED_BY(mMutex);
+ // Latest dump of CPU stats from the file at |kPath|.
+ ProcStatInfo mLatestStats GUARDED_BY(mMutex);
+
+ // Delta of CPU stats from the latest collection.
+ ProcStatInfo mDeltaStats GUARDED_BY(mMutex);
// True if |kPath| is accessible.
const bool kEnabled;
@@ -101,4 +138,4 @@
} // namespace automotive
} // namespace android
-#endif // WATCHDOG_SERVER_SRC_PROCSTAT_H_
+#endif // CPP_WATCHDOG_SERVER_SRC_PROCSTAT_H_
diff --git a/cpp/watchdog/server/src/ServiceManager.cpp b/cpp/watchdog/server/src/ServiceManager.cpp
new file mode 100644
index 0000000..c1cfb4b
--- /dev/null
+++ b/cpp/watchdog/server/src/ServiceManager.cpp
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2020 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.
+ */
+
+#define LOG_TAG "carwatchdogd"
+
+#include "ServiceManager.h"
+
+#include "IoPerfCollection.h"
+#include "utils/PackageNameResolver.h"
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+using android::sp;
+using android::String16;
+using android::automotive::watchdog::WatchdogPerfService;
+using android::automotive::watchdog::WatchdogProcessService;
+using android::base::Error;
+using android::base::Result;
+
+sp<WatchdogProcessService> ServiceManager::sWatchdogProcessService = nullptr;
+sp<WatchdogPerfService> ServiceManager::sWatchdogPerfService = nullptr;
+sp<WatchdogBinderMediator> ServiceManager::sWatchdogBinderMediator = nullptr;
+sp<IoOveruseMonitor> ServiceManager::sIoOveruseMonitor = nullptr;
+
+Result<void> ServiceManager::startServices(const sp<Looper>& looper) {
+ if (sWatchdogProcessService != nullptr || sWatchdogPerfService != nullptr ||
+ sWatchdogBinderMediator != nullptr || sIoOveruseMonitor != nullptr) {
+ return Error(INVALID_OPERATION) << "Cannot start services more than once";
+ }
+ PackageNameResolver::getInstance();
+ auto result = startProcessAnrMonitor(looper);
+ if (!result.ok()) {
+ return result;
+ }
+ result = startPerfService();
+ if (!result.ok()) {
+ return result;
+ }
+ return {};
+}
+
+void ServiceManager::terminateServices() {
+ PackageNameResolver::terminate();
+ if (sWatchdogProcessService != nullptr) {
+ sWatchdogProcessService->terminate();
+ sWatchdogProcessService.clear();
+ }
+ if (sIoOveruseMonitor != nullptr) {
+ sIoOveruseMonitor.clear();
+ }
+ if (sWatchdogPerfService != nullptr) {
+ sWatchdogPerfService->terminate();
+ sWatchdogPerfService.clear();
+ }
+ if (sWatchdogBinderMediator != nullptr) {
+ sWatchdogBinderMediator->terminate();
+ sWatchdogBinderMediator.clear();
+ }
+}
+
+Result<void> ServiceManager::startProcessAnrMonitor(const sp<Looper>& looper) {
+ sp<WatchdogProcessService> service = new WatchdogProcessService(looper);
+ const auto& result = service->start();
+ if (!result.ok()) {
+ return Error(result.error().code())
+ << "Failed to start process monitoring: " << result.error();
+ }
+ sWatchdogProcessService = service;
+ return {};
+}
+
+Result<void> ServiceManager::startPerfService() {
+ sp<WatchdogPerfService> service = new WatchdogPerfService();
+ sp<IoOveruseMonitor> ioOveruseMonitor = new IoOveruseMonitor();
+ auto result = service->registerDataProcessor(new IoPerfCollection());
+ if (!result.ok()) {
+ return Error() << "Failed to register I/O perf collection: " << result.error();
+ }
+ // TODO(b/167240592): Register I/O overuse monitor after it is completely implemented.
+ // Caveat: I/O overuse monitor reads from /data partition when initialized so initializing here
+ // would cause the read to happen during early-init when the /data partition is not available.
+ // Thus delay the initialization/registration until the /data partition is available.
+ result = service->start();
+ if (!result.ok()) {
+ return Error(result.error().code())
+ << "Failed to start performance service: " << result.error();
+ }
+ sWatchdogPerfService = service;
+ sIoOveruseMonitor = ioOveruseMonitor;
+ return {};
+}
+
+Result<void> ServiceManager::startBinderMediator() {
+ sWatchdogBinderMediator = new WatchdogBinderMediator();
+ const auto& result = sWatchdogBinderMediator->init(sWatchdogProcessService,
+ sWatchdogPerfService, sIoOveruseMonitor);
+ if (!result.ok()) {
+ return Error(result.error().code())
+ << "Failed to start binder mediator: " << result.error();
+ }
+ return {};
+}
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
diff --git a/watchdog/server/src/ServiceManager.h b/cpp/watchdog/server/src/ServiceManager.h
similarity index 79%
rename from watchdog/server/src/ServiceManager.h
rename to cpp/watchdog/server/src/ServiceManager.h
index 3abc660..e634d03 100644
--- a/watchdog/server/src/ServiceManager.h
+++ b/cpp/watchdog/server/src/ServiceManager.h
@@ -14,17 +14,17 @@
* limitations under the License.
*/
-#ifndef WATCHDOG_SERVER_SRC_SERVICEMANAGER_H_
-#define WATCHDOG_SERVER_SRC_SERVICEMANAGER_H_
+#ifndef CPP_WATCHDOG_SERVER_SRC_SERVICEMANAGER_H_
+#define CPP_WATCHDOG_SERVER_SRC_SERVICEMANAGER_H_
+
+#include "IoOveruseMonitor.h"
+#include "WatchdogBinderMediator.h"
+#include "WatchdogProcessService.h"
#include <android-base/result.h>
#include <utils/Looper.h>
#include <utils/StrongPointer.h>
-#include "IoPerfCollection.h"
-#include "WatchdogBinderMediator.h"
-#include "WatchdogProcessService.h"
-
namespace android {
namespace automotive {
namespace watchdog {
@@ -37,15 +37,16 @@
private:
static android::base::Result<void> startProcessAnrMonitor(const android::sp<Looper>& looper);
- static android::base::Result<void> startIoPerfCollection();
+ static android::base::Result<void> startPerfService();
static android::sp<WatchdogProcessService> sWatchdogProcessService;
- static android::sp<IoPerfCollection> sIoPerfCollection;
+ static android::sp<WatchdogPerfService> sWatchdogPerfService;
static android::sp<WatchdogBinderMediator> sWatchdogBinderMediator;
+ static android::sp<IoOveruseMonitor> sIoOveruseMonitor;
};
} // namespace watchdog
} // namespace automotive
} // namespace android
-#endif // WATCHDOG_SERVER_SRC_SERVICEMANAGER_H_
+#endif // CPP_WATCHDOG_SERVER_SRC_SERVICEMANAGER_H_
diff --git a/cpp/watchdog/server/src/UidIoStats.cpp b/cpp/watchdog/server/src/UidIoStats.cpp
new file mode 100644
index 0000000..29b000d
--- /dev/null
+++ b/cpp/watchdog/server/src/UidIoStats.cpp
@@ -0,0 +1,151 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#define LOG_TAG "carwatchdogd"
+#define DEBUG false
+
+#include "UidIoStats.h"
+
+#include <android-base/file.h>
+#include <android-base/parseint.h>
+#include <android-base/stringprintf.h>
+#include <android-base/strings.h>
+#include <inttypes.h>
+#include <log/log.h>
+
+#include <string>
+#include <unordered_map>
+#include <vector>
+#include <utility>
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+using android::base::Error;
+using android::base::ParseUint;
+using android::base::ReadFileToString;
+using android::base::Result;
+using android::base::Split;
+using android::base::StringPrintf;
+
+namespace {
+
+bool parseUidIoStats(const std::string& data, UidIoUsage* usage) {
+ std::vector<std::string> fields = Split(data, " ");
+ if (fields.size() < 11 || !ParseUint(fields[0], &usage->uid) ||
+ !ParseUint(fields[3], &usage->ios.metrics[READ_BYTES][FOREGROUND]) ||
+ !ParseUint(fields[4], &usage->ios.metrics[WRITE_BYTES][FOREGROUND]) ||
+ !ParseUint(fields[7], &usage->ios.metrics[READ_BYTES][BACKGROUND]) ||
+ !ParseUint(fields[8], &usage->ios.metrics[WRITE_BYTES][BACKGROUND]) ||
+ !ParseUint(fields[9], &usage->ios.metrics[FSYNC_COUNT][FOREGROUND]) ||
+ !ParseUint(fields[10], &usage->ios.metrics[FSYNC_COUNT][BACKGROUND])) {
+ ALOGW("Invalid uid I/O stats: \"%s\"", data.c_str());
+ return false;
+ }
+ return true;
+}
+
+uint64_t maybeDiff(uint64_t lhs, uint64_t rhs) {
+ return lhs > rhs ? lhs - rhs : 0;
+}
+
+} // namespace
+
+IoUsage& IoUsage::operator-=(const IoUsage& rhs) {
+ metrics[READ_BYTES][FOREGROUND] =
+ maybeDiff(metrics[READ_BYTES][FOREGROUND], rhs.metrics[READ_BYTES][FOREGROUND]);
+ metrics[READ_BYTES][BACKGROUND] =
+ maybeDiff(metrics[READ_BYTES][BACKGROUND], rhs.metrics[READ_BYTES][BACKGROUND]);
+ metrics[WRITE_BYTES][FOREGROUND] =
+ maybeDiff(metrics[WRITE_BYTES][FOREGROUND], rhs.metrics[WRITE_BYTES][FOREGROUND]);
+ metrics[WRITE_BYTES][BACKGROUND] =
+ maybeDiff(metrics[WRITE_BYTES][BACKGROUND], rhs.metrics[WRITE_BYTES][BACKGROUND]);
+ metrics[FSYNC_COUNT][FOREGROUND] =
+ maybeDiff(metrics[FSYNC_COUNT][FOREGROUND], rhs.metrics[FSYNC_COUNT][FOREGROUND]);
+ metrics[FSYNC_COUNT][BACKGROUND] =
+ maybeDiff(metrics[FSYNC_COUNT][BACKGROUND], rhs.metrics[FSYNC_COUNT][BACKGROUND]);
+ return *this;
+}
+
+bool IoUsage::isZero() const {
+ for (int i = 0; i < METRIC_TYPES; i++) {
+ for (int j = 0; j < UID_STATES; j++) {
+ if (metrics[i][j]) {
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+std::string IoUsage::toString() const {
+ return StringPrintf("FgRdBytes:%" PRIu64 " BgRdBytes:%" PRIu64 " FgWrBytes:%" PRIu64
+ " BgWrBytes:%" PRIu64 " FgFsync:%" PRIu64 " BgFsync:%" PRIu64,
+ metrics[READ_BYTES][FOREGROUND], metrics[READ_BYTES][BACKGROUND],
+ metrics[WRITE_BYTES][FOREGROUND], metrics[WRITE_BYTES][BACKGROUND],
+ metrics[FSYNC_COUNT][FOREGROUND], metrics[FSYNC_COUNT][BACKGROUND]);
+}
+
+Result<void> UidIoStats::collect() {
+ if (!kEnabled) {
+ return Error() << "Can not access " << kPath;
+ }
+
+ Mutex::Autolock lock(mMutex);
+ const auto& uidIoUsages = getUidIoUsagesLocked();
+ if (!uidIoUsages.ok() || uidIoUsages->empty()) {
+ return Error() << "Failed to get UID IO stats: " << uidIoUsages.error();
+ }
+
+ mDeltaUidIoUsages.clear();
+ for (const auto& it : *uidIoUsages) {
+ const UidIoUsage& curUsage = it.second;
+ mDeltaUidIoUsages[it.first] = curUsage;
+ if (mLatestUidIoUsages.find(it.first) != mLatestUidIoUsages.end()) {
+ mDeltaUidIoUsages[it.first] -= mLatestUidIoUsages[it.first];
+ }
+ }
+ mLatestUidIoUsages = *uidIoUsages;
+ return {};
+}
+
+Result<std::unordered_map<uid_t, UidIoUsage>> UidIoStats::getUidIoUsagesLocked() const {
+ std::string buffer;
+ if (!ReadFileToString(kPath, &buffer)) {
+ return Error() << "ReadFileToString failed for " << kPath;
+ }
+
+ std::vector<std::string> ioStats = Split(std::move(buffer), "\n");
+ std::unordered_map<uid_t, UidIoUsage> uidIoUsages;
+ UidIoUsage usage;
+ for (size_t i = 0; i < ioStats.size(); i++) {
+ if (ioStats[i].empty() || !ioStats[i].compare(0, 4, "task")) {
+ // Skip per-task stats as CONFIG_UID_SYS_STATS_DEBUG is not set in the kernel and
+ // the collected data is aggregated only per-UID.
+ continue;
+ }
+ if (!parseUidIoStats(std::move(ioStats[i]), &usage)) {
+ return Error() << "Failed to parse the contents of " << kPath;
+ }
+ uidIoUsages[usage.uid] = usage;
+ }
+ return uidIoUsages;
+}
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
diff --git a/watchdog/server/src/UidIoStats.h b/cpp/watchdog/server/src/UidIoStats.h
similarity index 69%
rename from watchdog/server/src/UidIoStats.h
rename to cpp/watchdog/server/src/UidIoStats.h
index 20258ca..c671222 100644
--- a/watchdog/server/src/UidIoStats.h
+++ b/cpp/watchdog/server/src/UidIoStats.h
@@ -14,8 +14,8 @@
* limitations under the License.
*/
-#ifndef WATCHDOG_SERVER_SRC_UIDIOSTATS_H_
-#define WATCHDOG_SERVER_SRC_UIDIOSTATS_H_
+#ifndef CPP_WATCHDOG_SERVER_SRC_UIDIOSTATS_H_
+#define CPP_WATCHDOG_SERVER_SRC_UIDIOSTATS_H_
#include <android-base/result.h>
#include <stdint.h>
@@ -38,25 +38,12 @@
};
enum MetricType {
- READ_BYTES = 0,
- WRITE_BYTES,
- FSYNC_COUNT,
+ READ_BYTES = 0, // bytes read (from storage layer)
+ WRITE_BYTES, // bytes written (to storage layer)
+ FSYNC_COUNT, // number of fsync syscalls
METRIC_TYPES,
};
-struct IoStat {
- uint64_t rchar = 0; // characters read
- uint64_t wchar = 0; // characters written
- uint64_t readBytes = 0; // bytes read (from storage layer)
- uint64_t writeBytes = 0; // bytes written (to storage layer)
- uint64_t fsync = 0; // number of fsync syscalls
-};
-
-struct UidIoStat {
- uint32_t uid = 0; // linux user id
- IoStat io[UID_STATES] = {{}};
-};
-
class IoUsage {
public:
IoUsage() : metrics{{0}} {};
@@ -69,6 +56,7 @@
metrics[FSYNC_COUNT][FOREGROUND] = fgFsync;
metrics[FSYNC_COUNT][BACKGROUND] = bgFsync;
}
+ IoUsage& operator-=(const IoUsage& rhs);
bool operator==(const IoUsage& usage) const {
return memcmp(&metrics, &usage.metrics, sizeof(metrics)) == 0;
}
@@ -84,8 +72,12 @@
};
struct UidIoUsage {
- uint32_t uid = 0;
+ uid_t uid = 0; // Linux user id.
IoUsage ios = {};
+ UidIoUsage& operator-=(const UidIoUsage& rhs) {
+ ios -= rhs.ios;
+ return *this;
+ }
};
class UidIoStats : public RefBase {
@@ -95,8 +87,18 @@
virtual ~UidIoStats() {}
- // Collects the I/O usage since the last collection.
- virtual android::base::Result<std::unordered_map<uint32_t, UidIoUsage>> collect();
+ // Collects the per-UID I/O usage.
+ virtual android::base::Result<void> collect();
+
+ virtual const std::unordered_map<uid_t, UidIoUsage> latestStats() const {
+ Mutex::Autolock lock(mMutex);
+ return mLatestUidIoUsages;
+ }
+
+ virtual const std::unordered_map<uid_t, UidIoUsage> deltaStats() const {
+ Mutex::Autolock lock(mMutex);
+ return mDeltaUidIoUsages;
+ }
// Returns true when the uid_io stats file is accessible. Otherwise, returns false.
// Called by IoPerfCollection and tests.
@@ -106,13 +108,16 @@
private:
// Reads the contents of |kPath|.
- android::base::Result<std::unordered_map<uint32_t, UidIoStat>> getUidIoStatsLocked() const;
+ android::base::Result<std::unordered_map<uid_t, UidIoUsage>> getUidIoUsagesLocked() const;
// Makes sure only one collection is running at any given time.
- Mutex mMutex;
+ mutable Mutex mMutex;
- // Last dump from the file at |kPath|.
- std::unordered_map<uint32_t, UidIoStat> mLastUidIoStats GUARDED_BY(mMutex);
+ // Latest dump from the file at |kPath|.
+ std::unordered_map<uid_t, UidIoUsage> mLatestUidIoUsages GUARDED_BY(mMutex);
+
+ // Delta of per-UID I/O usage since last before collection.
+ std::unordered_map<uid_t, UidIoUsage> mDeltaUidIoUsages GUARDED_BY(mMutex);
// True if kPath is accessible.
const bool kEnabled;
@@ -125,4 +130,4 @@
} // namespace automotive
} // namespace android
-#endif // WATCHDOG_SERVER_SRC_UIDIOSTATS_H_
+#endif // CPP_WATCHDOG_SERVER_SRC_UIDIOSTATS_H_
diff --git a/watchdog/server/src/WatchdogBinderMediator.cpp b/cpp/watchdog/server/src/WatchdogBinderMediator.cpp
similarity index 81%
rename from watchdog/server/src/WatchdogBinderMediator.cpp
rename to cpp/watchdog/server/src/WatchdogBinderMediator.cpp
index fd0dd8e..ac193ea 100644
--- a/watchdog/server/src/WatchdogBinderMediator.cpp
+++ b/cpp/watchdog/server/src/WatchdogBinderMediator.cpp
@@ -54,7 +54,7 @@
"%s or %s: Displays this help text.\n"
"When no options are specified, carwatchdog report is generated.\n";
-Status checkSystemUser() {
+Status checkSystemPermission() {
if (IPCThreadState::self()->getCallingUid() != AID_SYSTEM) {
return Status::fromExceptionCode(Status::EX_SECURITY,
"Calling process does not have proper privilege");
@@ -70,18 +70,22 @@
} // namespace
Result<void> WatchdogBinderMediator::init(sp<WatchdogProcessService> watchdogProcessService,
- sp<IoPerfCollection> ioPerfCollection) {
- if (watchdogProcessService == nullptr || ioPerfCollection == nullptr) {
- return Error(INVALID_OPERATION)
- << "Must initialize both process and I/O perf collection service before starting "
- << "carwatchdog binder mediator";
+ sp<WatchdogPerfService> watchdogPerfService,
+ sp<IoOveruseMonitor> ioOveruseMonitor) {
+ if (watchdogProcessService == nullptr || watchdogPerfService == nullptr ||
+ ioOveruseMonitor == nullptr) {
+ return Error(INVALID_OPERATION) << "Must initialize process service, performance service, "
+ << "I/O overuse monitoring service before starting "
+ << "carwatchdog binder mediator";
}
- if (mWatchdogProcessService != nullptr || mIoPerfCollection != nullptr) {
+ if (mWatchdogProcessService != nullptr || mWatchdogPerfService != nullptr ||
+ mIoOveruseMonitor != nullptr) {
return Error(INVALID_OPERATION)
<< "Cannot initialize carwatchdog binder mediator more than once";
}
mWatchdogProcessService = watchdogProcessService;
- mIoPerfCollection = ioPerfCollection;
+ mWatchdogPerfService = watchdogPerfService;
+ mIoOveruseMonitor = ioOveruseMonitor;
status_t status =
defaultServiceManager()
->addService(String16("android.automotive.watchdog.ICarWatchdog/default"),
@@ -104,7 +108,7 @@
if (numArgs >= 1 &&
(args[0] == String16(kStartCustomCollectionFlag) ||
args[0] == String16(kEndCustomCollectionFlag))) {
- auto ret = mIoPerfCollection->onCustomCollection(fd, args);
+ auto ret = mWatchdogPerfService->onCustomCollection(fd, args);
if (!ret.ok()) {
std::string mode = args[0] == String16(kStartCustomCollectionFlag) ? "start" : "end";
std::string errorMsg = StringPrintf("Failed to %s custom I/O perf collection: %s",
@@ -129,7 +133,7 @@
ALOGW("Failed to dump carwatchdog process service: %s", ret.error().message().c_str());
return ret.error().code();
}
- ret = mIoPerfCollection->onDump(fd);
+ ret = mWatchdogPerfService->onDump(fd);
if (!ret.ok()) {
ALOGW("Failed to dump I/O perf collection: %s", ret.error().message().c_str());
return ret.error().code();
@@ -147,11 +151,11 @@
}
return WriteStringToFd(StringPrintf(kHelpText, kHelpFlag, kHelpShortFlag), fd) &&
- mIoPerfCollection->dumpHelpText(fd);
+ mWatchdogPerfService->dumpHelpText(fd);
}
Status WatchdogBinderMediator::registerMediator(const sp<ICarWatchdogClient>& mediator) {
- Status status = checkSystemUser();
+ Status status = checkSystemPermission();
if (!status.isOk()) {
return status;
}
@@ -159,47 +163,29 @@
}
Status WatchdogBinderMediator::unregisterMediator(const sp<ICarWatchdogClient>& mediator) {
- Status status = checkSystemUser();
+ Status status = checkSystemPermission();
if (!status.isOk()) {
return status;
}
return mWatchdogProcessService->unregisterMediator(mediator);
}
Status WatchdogBinderMediator::registerMonitor(const sp<ICarWatchdogMonitor>& monitor) {
- Status status = checkSystemUser();
+ Status status = checkSystemPermission();
if (!status.isOk()) {
return status;
}
return mWatchdogProcessService->registerMonitor(monitor);
}
Status WatchdogBinderMediator::unregisterMonitor(const sp<ICarWatchdogMonitor>& monitor) {
- Status status = checkSystemUser();
+ Status status = checkSystemPermission();
if (!status.isOk()) {
return status;
}
return mWatchdogProcessService->unregisterMonitor(monitor);
}
-Status WatchdogBinderMediator::tellMediatorAlive(const sp<ICarWatchdogClient>& mediator,
- const std::vector<int32_t>& clientsNotResponding,
- int32_t sessionId) {
- Status status = checkSystemUser();
- if (!status.isOk()) {
- return status;
- }
- return mWatchdogProcessService->tellMediatorAlive(mediator, clientsNotResponding, sessionId);
-}
-Status WatchdogBinderMediator::tellDumpFinished(const android::sp<ICarWatchdogMonitor>& monitor,
- int32_t pid) {
- Status status = checkSystemUser();
- if (!status.isOk()) {
- return status;
- }
- return mWatchdogProcessService->tellDumpFinished(monitor, pid);
-}
-
Status WatchdogBinderMediator::notifySystemStateChange(StateType type, int32_t arg1, int32_t arg2) {
- Status status = checkSystemUser();
+ Status status = checkSystemPermission();
if (!status.isOk()) {
return status;
}
@@ -224,7 +210,7 @@
case StateType::BOOT_PHASE: {
BootPhase phase = static_cast<BootPhase>(static_cast<uint32_t>(arg1));
if (phase >= BootPhase::BOOT_COMPLETED) {
- auto ret = mIoPerfCollection->onBootFinished();
+ auto ret = mWatchdogPerfService->onBootFinished();
if (!ret.ok()) {
return fromExceptionCode(ret.error().code(), ret.error().message());
}
@@ -236,6 +222,19 @@
StringPrintf("Invalid state change type %d", type));
}
+Status WatchdogBinderMediator::updateIoOveruseConfiguration(ComponentType type,
+ const IoOveruseConfiguration& config) {
+ Status status = checkSystemPermission();
+ if (!status.isOk()) {
+ return status;
+ }
+ auto result = mIoOveruseMonitor->updateIoOveruseConfiguration(type, config);
+ if (!result.ok()) {
+ return fromExceptionCode(result.error().code(), result.error().message());
+ }
+ return Status::ok();
+}
+
} // namespace watchdog
} // namespace automotive
} // namespace android
diff --git a/watchdog/server/src/WatchdogBinderMediator.h b/cpp/watchdog/server/src/WatchdogBinderMediator.h
similarity index 68%
rename from watchdog/server/src/WatchdogBinderMediator.h
rename to cpp/watchdog/server/src/WatchdogBinderMediator.h
index dbc26a3..63bc84b 100644
--- a/watchdog/server/src/WatchdogBinderMediator.h
+++ b/cpp/watchdog/server/src/WatchdogBinderMediator.h
@@ -14,11 +14,17 @@
* limitations under the License.
*/
-#ifndef WATCHDOG_SERVER_SRC_WATCHDOGBINDERMEDIATOR_H_
-#define WATCHDOG_SERVER_SRC_WATCHDOGBINDERMEDIATOR_H_
+#ifndef CPP_WATCHDOG_SERVER_SRC_WATCHDOGBINDERMEDIATOR_H_
+#define CPP_WATCHDOG_SERVER_SRC_WATCHDOGBINDERMEDIATOR_H_
+
+#include "IoOveruseMonitor.h"
+#include "WatchdogPerfService.h"
+#include "WatchdogProcessService.h"
#include <android-base/result.h>
#include <android/automotive/watchdog/BnCarWatchdog.h>
+#include <android/automotive/watchdog/ComponentType.h>
+#include <android/automotive/watchdog/IoOveruseConfiguration.h>
#include <android/automotive/watchdog/StateType.h>
#include <binder/IBinder.h>
#include <binder/Status.h>
@@ -28,9 +34,6 @@
#include <utils/StrongPointer.h>
#include <utils/Vector.h>
-#include "IoPerfCollection.h"
-#include "WatchdogProcessService.h"
-
namespace android {
namespace automotive {
namespace watchdog {
@@ -38,10 +41,13 @@
class ServiceManager;
// WatchdogBinderMediator implements the carwatchdog binder APIs such that it forwards the calls
-// either to process ANR service or I/O performance data collection.
-class WatchdogBinderMediator : public BnCarWatchdog, public IBinder::DeathRecipient {
+// either to process ANR or performance services.
+class WatchdogBinderMediator : public BnCarWatchdog {
public:
- WatchdogBinderMediator() : mWatchdogProcessService(nullptr), mIoPerfCollection(nullptr) {}
+ WatchdogBinderMediator() :
+ mWatchdogProcessService(nullptr),
+ mWatchdogPerfService(nullptr),
+ mIoOveruseMonitor(nullptr) {}
status_t dump(int fd, const Vector<String16>& args) override;
binder::Status registerClient(const sp<ICarWatchdogClient>& client,
@@ -61,27 +67,35 @@
}
binder::Status tellMediatorAlive(const sp<ICarWatchdogClient>& mediator,
const std::vector<int32_t>& clientsNotResponding,
- int32_t sessionId) override;
+ int32_t sessionId) override {
+ return mWatchdogProcessService->tellMediatorAlive(mediator, clientsNotResponding,
+ sessionId);
+ }
binder::Status tellDumpFinished(const android::sp<ICarWatchdogMonitor>& monitor,
- int32_t pid) override;
+ int32_t pid) override {
+ return mWatchdogProcessService->tellDumpFinished(monitor, pid);
+ }
binder::Status notifySystemStateChange(StateType type, int32_t arg1, int32_t arg2) override;
+ binder::Status updateIoOveruseConfiguration(ComponentType type,
+ const IoOveruseConfiguration& config) override;
+
protected:
android::base::Result<void> init(android::sp<WatchdogProcessService> watchdogProcessService,
- android::sp<IoPerfCollection> ioPerfCollection);
+ android::sp<WatchdogPerfService> watchdogPerfService,
+ android::sp<IoOveruseMonitor> ioOveruseMonitor);
void terminate() {
- mWatchdogProcessService = nullptr;
- mIoPerfCollection = nullptr;
+ mWatchdogProcessService.clear();
+ mWatchdogPerfService.clear();
+ mIoOveruseMonitor.clear();
}
private:
- void binderDied(const android::wp<IBinder>& who) override {
- return mWatchdogProcessService->binderDied(who);
- }
bool dumpHelpText(int fd, std::string errorMsg);
android::sp<WatchdogProcessService> mWatchdogProcessService;
- android::sp<IoPerfCollection> mIoPerfCollection;
+ android::sp<WatchdogPerfService> mWatchdogPerfService;
+ android::sp<IoOveruseMonitor> mIoOveruseMonitor;
friend class ServiceManager;
friend class WatchdogBinderMediatorTest;
@@ -93,4 +107,4 @@
} // namespace automotive
} // namespace android
-#endif // WATCHDOG_SERVER_SRC_WATCHDOGBINDERMEDIATOR_H_
+#endif // CPP_WATCHDOG_SERVER_SRC_WATCHDOGBINDERMEDIATOR_H_
diff --git a/cpp/watchdog/server/src/WatchdogPerfService.cpp b/cpp/watchdog/server/src/WatchdogPerfService.cpp
new file mode 100644
index 0000000..013ca0c
--- /dev/null
+++ b/cpp/watchdog/server/src/WatchdogPerfService.cpp
@@ -0,0 +1,578 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#define LOG_TAG "carwatchdogd"
+
+#include "WatchdogPerfService.h"
+
+#include "utils/PackageNameResolver.h"
+
+#include <WatchdogProperties.sysprop.h>
+#include <android-base/file.h>
+#include <android-base/parseint.h>
+#include <android-base/stringprintf.h>
+#include <android-base/strings.h>
+#include <log/log.h>
+#include <processgroup/sched_policy.h>
+#include <pthread.h>
+
+#include <iterator>
+#include <vector>
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+using android::String16;
+using android::base::Error;
+using android::base::Join;
+using android::base::ParseUint;
+using android::base::Result;
+using android::base::Split;
+using android::base::StringAppendF;
+using android::base::StringPrintf;
+using android::base::WriteStringToFd;
+
+namespace {
+
+// Minimum required collection interval between subsequent collections.
+const std::chrono::nanoseconds kMinCollectionInterval = 1s;
+const std::chrono::seconds kDefaultBoottimeCollectionInterval = 1s;
+const std::chrono::seconds kDefaultPeriodicCollectionInterval = 10s;
+const std::chrono::nanoseconds kCustomCollectionInterval = 10s;
+const std::chrono::nanoseconds kCustomCollectionDuration = 30min;
+
+constexpr const char* kServiceName = "WatchdogPerfService";
+static const std::string kDumpMajorDelimiter = std::string(100, '-') + "\n"; // NOLINT
+constexpr const char* kHelpText =
+ "\n%s dump options:\n"
+ "%s: Starts custom performance data collection. Customize the collection behavior with "
+ "the following optional arguments:\n"
+ "\t%s <seconds>: Modifies the collection interval. Default behavior is to collect once "
+ "every %lld seconds.\n"
+ "\t%s <seconds>: Modifies the maximum collection duration. Default behavior is to collect "
+ "until %ld minutes before automatically stopping the custom collection and discarding "
+ "the collected data.\n"
+ "\t%s <package name>,<package, name>,...: Comma-separated value containing package names. "
+ "When provided, the results are filtered only to the provided package names. Default "
+ "behavior is to list the results for the top N packages.\n"
+ "%s: Stops custom performance data collection and generates a dump of "
+ "the collection report.\n\n"
+ "When no options are specified, the carwatchdog report contains the performance data "
+ "collected during boot-time and over the last few minutes before the report generation.\n";
+
+Result<std::chrono::seconds> parseSecondsFlag(const Vector<String16>& args, size_t pos) {
+ if (args.size() <= pos) {
+ return Error() << "Value not provided";
+ }
+
+ uint64_t value;
+ std::string strValue = std::string(String8(args[pos]).string());
+ if (!ParseUint(strValue, &value)) {
+ return Error() << "Invalid value " << strValue << ", must be an integer";
+ }
+ return std::chrono::seconds(value);
+}
+
+} // namespace
+
+std::string toString(const CollectionMetadata& metadata) {
+ std::string buffer;
+ auto interval = std::chrono::duration_cast<std::chrono::seconds>(metadata.interval).count();
+ StringAppendF(&buffer, "Collection interval: %lld second%s\n", interval,
+ ((interval > 1) ? "s" : ""));
+ if (!metadata.filterPackages.empty()) {
+ std::vector<std::string> packages(metadata.filterPackages.begin(),
+ metadata.filterPackages.end());
+ StringAppendF(&buffer, "Filtered results to packages: %s\n", Join(packages, ", ").c_str());
+ }
+ return buffer;
+}
+
+Result<void> WatchdogPerfService::start() {
+ {
+ Mutex::Autolock lock(mMutex);
+ if (mCurrCollectionEvent != CollectionEvent::INIT || mCollectionThread.joinable()) {
+ return Error(INVALID_OPERATION) << "Cannot start " << kServiceName << " more than once";
+ }
+ std::chrono::nanoseconds boottimeCollectionInterval =
+ std::chrono::duration_cast<std::chrono::nanoseconds>(
+ std::chrono::seconds(sysprop::boottimeCollectionInterval().value_or(
+ kDefaultBoottimeCollectionInterval.count())));
+ std::chrono::nanoseconds periodicCollectionInterval =
+ std::chrono::duration_cast<std::chrono::nanoseconds>(
+ std::chrono::seconds(sysprop::periodicCollectionInterval().value_or(
+ kDefaultPeriodicCollectionInterval.count())));
+ mBoottimeCollection = {
+ .interval = boottimeCollectionInterval,
+ .lastCollectionUptime = 0,
+ };
+ mPeriodicCollection = {
+ .interval = periodicCollectionInterval,
+ .lastCollectionUptime = 0,
+ };
+ for (const auto& processor : mDataProcessors) {
+ const auto& result = processor->start();
+ if (!result.ok()) {
+ std::string errorMsg =
+ StringPrintf("Failed to start %s: %s", processor->name().c_str(),
+ result.error().message().c_str());
+ ALOGE("Terminating %s: %s", kServiceName, errorMsg.c_str());
+ mCurrCollectionEvent = CollectionEvent::TERMINATED;
+ return Error() << errorMsg;
+ }
+ }
+ }
+
+ mCollectionThread = std::thread([&]() {
+ {
+ Mutex::Autolock lock(mMutex);
+ if (mCurrCollectionEvent != CollectionEvent::INIT) {
+ ALOGE("Skipping performance data collection as the current collection event "
+ "%s != %s",
+ toString(mCurrCollectionEvent).c_str(),
+ toString(CollectionEvent::INIT).c_str());
+ return;
+ }
+ mCurrCollectionEvent = CollectionEvent::BOOT_TIME;
+ mBoottimeCollection.lastCollectionUptime = mHandlerLooper->now();
+ mHandlerLooper->setLooper(Looper::prepare(/*opts=*/0));
+ mHandlerLooper->sendMessage(this, CollectionEvent::BOOT_TIME);
+ }
+ if (set_sched_policy(0, SP_BACKGROUND) != 0) {
+ ALOGW("Failed to set background scheduling priority to %s thread", kServiceName);
+ }
+ int result = pthread_setname_np(pthread_self(), "WatchdogPerfSvc");
+ if (result != 0) {
+ ALOGE("Failed to set %s thread name: %d", kServiceName, result);
+ }
+ ALOGI("Starting %s performance data collection", toString(mCurrCollectionEvent).c_str());
+ bool isCollectionActive = true;
+ // Loop until the collection is not active -- performance collection runs on this thread in
+ // a handler.
+ while (isCollectionActive) {
+ mHandlerLooper->pollAll(/*timeoutMillis=*/-1);
+ Mutex::Autolock lock(mMutex);
+ isCollectionActive = mCurrCollectionEvent != CollectionEvent::TERMINATED;
+ }
+ });
+ return {};
+}
+
+void WatchdogPerfService::terminate() {
+ {
+ Mutex::Autolock lock(mMutex);
+ if (mCurrCollectionEvent == CollectionEvent::TERMINATED) {
+ ALOGE("%s was terminated already", kServiceName);
+ return;
+ }
+ ALOGE("Terminating %s as carwatchdog is terminating", kServiceName);
+ if (mCurrCollectionEvent != CollectionEvent::INIT) {
+ // Looper runs only after the INIT collection has completed so remove looper messages
+ // and wake the looper only when the current collection has changed from INIT.
+ mHandlerLooper->removeMessages(this);
+ mHandlerLooper->wake();
+ }
+ for (const auto& processor : mDataProcessors) {
+ processor->terminate();
+ }
+ mCurrCollectionEvent = CollectionEvent::TERMINATED;
+ }
+ if (mCollectionThread.joinable()) {
+ mCollectionThread.join();
+ }
+}
+
+Result<void> WatchdogPerfService::onBootFinished() {
+ Mutex::Autolock lock(mMutex);
+ if (mCurrCollectionEvent != CollectionEvent::BOOT_TIME) {
+ // This case happens when either the WatchdogPerfService has prematurely terminated before
+ // boot complete notification is received or multiple boot complete notifications are
+ // received. In either case don't return error as this will lead to runtime exception and
+ // cause system to boot loop.
+ ALOGE("Current performance data collection event %s != %s",
+ toString(mCurrCollectionEvent).c_str(), toString(CollectionEvent::BOOT_TIME).c_str());
+ return {};
+ }
+ mBoottimeCollection.lastCollectionUptime = mHandlerLooper->now();
+ mHandlerLooper->removeMessages(this);
+ mHandlerLooper->sendMessage(this, SwitchEvent::END_BOOTTIME_COLLECTION);
+ return {};
+}
+
+Result<void> WatchdogPerfService::onCustomCollection(int fd, const Vector<String16>& args) {
+ if (args.empty()) {
+ return Error(BAD_VALUE) << "No custom collection dump arguments";
+ }
+
+ if (args[0] == String16(kStartCustomCollectionFlag)) {
+ if (args.size() > 7) {
+ return Error(BAD_VALUE) << "Number of arguments to start custom performance data "
+ << "collection cannot exceed 7";
+ }
+ std::chrono::nanoseconds interval = kCustomCollectionInterval;
+ std::chrono::nanoseconds maxDuration = kCustomCollectionDuration;
+ std::unordered_set<std::string> filterPackages;
+ for (size_t i = 1; i < args.size(); ++i) {
+ if (args[i] == String16(kIntervalFlag)) {
+ const auto& result = parseSecondsFlag(args, i + 1);
+ if (!result.ok()) {
+ return Error(BAD_VALUE)
+ << "Failed to parse " << kIntervalFlag << ": " << result.error();
+ }
+ interval = std::chrono::duration_cast<std::chrono::nanoseconds>(*result);
+ ++i;
+ continue;
+ }
+ if (args[i] == String16(kMaxDurationFlag)) {
+ const auto& result = parseSecondsFlag(args, i + 1);
+ if (!result.ok()) {
+ return Error(BAD_VALUE)
+ << "Failed to parse " << kMaxDurationFlag << ": " << result.error();
+ }
+ maxDuration = std::chrono::duration_cast<std::chrono::nanoseconds>(*result);
+ ++i;
+ continue;
+ }
+ if (args[i] == String16(kFilterPackagesFlag)) {
+ if (args.size() < i + 1) {
+ return Error(BAD_VALUE)
+ << "Must provide value for '" << kFilterPackagesFlag << "' flag";
+ }
+ std::vector<std::string> packages =
+ Split(std::string(String8(args[i + 1]).string()), ",");
+ std::copy(packages.begin(), packages.end(),
+ std::inserter(filterPackages, filterPackages.end()));
+ ++i;
+ continue;
+ }
+ ALOGW("Unknown flag %s provided to start custom performance data collection",
+ String8(args[i]).string());
+ return Error(BAD_VALUE) << "Unknown flag " << String8(args[i]).string()
+ << " provided to start custom performance data collection";
+ }
+ const auto& result = startCustomCollection(interval, maxDuration, filterPackages);
+ if (!result.ok()) {
+ WriteStringToFd(result.error().message(), fd);
+ return result;
+ }
+ return {};
+ }
+
+ if (args[0] == String16(kEndCustomCollectionFlag)) {
+ if (args.size() != 1) {
+ ALOGW("Number of arguments to stop custom performance data collection cannot exceed 1. "
+ "Stopping the data collection.");
+ WriteStringToFd("Number of arguments to stop custom performance data collection "
+ "cannot exceed 1. Stopping the data collection.",
+ fd);
+ }
+ return endCustomCollection(fd);
+ }
+
+ return Error(BAD_VALUE) << "Custom perf collection dump arguments start neither with "
+ << kStartCustomCollectionFlag << " nor with "
+ << kEndCustomCollectionFlag << " flags";
+}
+
+Result<void> WatchdogPerfService::onDump(int fd) {
+ Mutex::Autolock lock(mMutex);
+ if (mCurrCollectionEvent == CollectionEvent::TERMINATED) {
+ ALOGW("%s not active. Dumping cached data", kServiceName);
+ if (!WriteStringToFd(StringPrintf("%s not active. Dumping cached data.", kServiceName),
+ fd)) {
+ return Error(FAILED_TRANSACTION) << "Failed to write " << kServiceName << " status";
+ }
+ }
+
+ const auto& result = dumpCollectorsStatusLocked(fd);
+ if (!result.ok()) {
+ return Error(FAILED_TRANSACTION) << result.error();
+ }
+
+ if (!WriteStringToFd(StringPrintf("\n%s%s report:\n%sBoot-time collection information:\n%s\n",
+ kDumpMajorDelimiter.c_str(), kServiceName,
+ kDumpMajorDelimiter.c_str(), std::string(33, '=').c_str()),
+ fd) ||
+ !WriteStringToFd(toString(mBoottimeCollection), fd) ||
+ !WriteStringToFd(StringPrintf("\nPeriodic collection information:\n%s\n",
+ std::string(32, '=').c_str()),
+ fd) ||
+ !WriteStringToFd(toString(mPeriodicCollection), fd)) {
+ return Error(FAILED_TRANSACTION)
+ << "Failed to dump the boot-time and periodic collection reports.";
+ }
+
+ for (const auto& processor : mDataProcessors) {
+ auto result = processor->onDump(fd);
+ if (!result.ok()) {
+ return result;
+ }
+ }
+
+ WriteStringToFd(kDumpMajorDelimiter, fd);
+ return {};
+}
+
+bool WatchdogPerfService::dumpHelpText(int fd) {
+ return WriteStringToFd(StringPrintf(kHelpText, kServiceName, kStartCustomCollectionFlag,
+ kIntervalFlag,
+ std::chrono::duration_cast<std::chrono::seconds>(
+ kCustomCollectionInterval)
+ .count(),
+ kMaxDurationFlag,
+ std::chrono::duration_cast<std::chrono::minutes>(
+ kCustomCollectionDuration)
+ .count(),
+ kFilterPackagesFlag, kEndCustomCollectionFlag),
+ fd);
+}
+
+Result<void> WatchdogPerfService::dumpCollectorsStatusLocked(int fd) {
+ if (!mUidIoStats->enabled() &&
+ !WriteStringToFd(StringPrintf("UidIoStats collector failed to access the file %s",
+ mUidIoStats->filePath().c_str()),
+ fd)) {
+ return Error() << "Failed to write UidIoStats collector status";
+ }
+ if (!mProcStat->enabled() &&
+ !WriteStringToFd(StringPrintf("ProcStat collector failed to access the file %s",
+ mProcStat->filePath().c_str()),
+ fd)) {
+ return Error() << "Failed to write ProcStat collector status";
+ }
+ if (!mProcPidStat->enabled() &&
+ !WriteStringToFd(StringPrintf("ProcPidStat collector failed to access the directory %s",
+ mProcPidStat->dirPath().c_str()),
+ fd)) {
+ return Error() << "Failed to write ProcPidStat collector status";
+ }
+ return {};
+}
+
+Result<void> WatchdogPerfService::startCustomCollection(
+ std::chrono::nanoseconds interval, std::chrono::nanoseconds maxDuration,
+ const std::unordered_set<std::string>& filterPackages) {
+ if (interval < kMinCollectionInterval || maxDuration < kMinCollectionInterval) {
+ return Error(INVALID_OPERATION)
+ << "Collection interval and maximum duration must be >= "
+ << std::chrono::duration_cast<std::chrono::milliseconds>(kMinCollectionInterval)
+ .count()
+ << " milliseconds.";
+ }
+ Mutex::Autolock lock(mMutex);
+ if (mCurrCollectionEvent != CollectionEvent::PERIODIC) {
+ return Error(INVALID_OPERATION)
+ << "Cannot start a custom collection when the current collection event "
+ << toString(mCurrCollectionEvent) << " != " << toString(CollectionEvent::PERIODIC)
+ << " collection event";
+ }
+
+ mCustomCollection = {
+ .interval = interval,
+ .lastCollectionUptime = mHandlerLooper->now(),
+ .filterPackages = filterPackages,
+ };
+
+ mHandlerLooper->removeMessages(this);
+ nsecs_t uptime = mHandlerLooper->now() + maxDuration.count();
+ mHandlerLooper->sendMessageAtTime(uptime, this, SwitchEvent::END_CUSTOM_COLLECTION);
+ mCurrCollectionEvent = CollectionEvent::CUSTOM;
+ mHandlerLooper->sendMessage(this, CollectionEvent::CUSTOM);
+ ALOGI("Starting %s performance data collection", toString(mCurrCollectionEvent).c_str());
+ return {};
+}
+
+Result<void> WatchdogPerfService::endCustomCollection(int fd) {
+ Mutex::Autolock lock(mMutex);
+ if (mCurrCollectionEvent != CollectionEvent::CUSTOM) {
+ return Error(INVALID_OPERATION) << "No custom collection is running";
+ }
+
+ mHandlerLooper->removeMessages(this);
+ mHandlerLooper->sendMessage(this, SwitchEvent::END_CUSTOM_COLLECTION);
+
+ const auto& result = dumpCollectorsStatusLocked(fd);
+ if (!result) {
+ return Error(FAILED_TRANSACTION) << result.error();
+ }
+
+ if (!WriteStringToFd(StringPrintf("%sPerformance data report for custom collection:\n%s",
+ kDumpMajorDelimiter.c_str(), kDumpMajorDelimiter.c_str()),
+ fd) ||
+ !WriteStringToFd(toString(mCustomCollection), fd)) {
+ return Error(FAILED_TRANSACTION) << "Failed to write custom collection report.";
+ }
+
+ for (const auto& processor : mDataProcessors) {
+ auto result = processor->onCustomCollectionDump(fd);
+ if (!result.ok()) {
+ return Error() << processor->name() << " failed on " << toString(mCurrCollectionEvent)
+ << " collection: " << result.error();
+ }
+ }
+
+ WriteStringToFd(kDumpMajorDelimiter, fd);
+ return {};
+}
+
+void WatchdogPerfService::handleMessage(const Message& message) {
+ Result<void> result;
+
+ switch (message.what) {
+ case static_cast<int>(CollectionEvent::BOOT_TIME):
+ result = processCollectionEvent(CollectionEvent::BOOT_TIME, &mBoottimeCollection);
+ break;
+ case static_cast<int>(SwitchEvent::END_BOOTTIME_COLLECTION):
+ result = processCollectionEvent(CollectionEvent::BOOT_TIME, &mBoottimeCollection);
+ if (result.ok()) {
+ mHandlerLooper->removeMessages(this);
+ mCurrCollectionEvent = CollectionEvent::PERIODIC;
+ mPeriodicCollection.lastCollectionUptime =
+ mHandlerLooper->now() + mPeriodicCollection.interval.count();
+ mHandlerLooper->sendMessageAtTime(mPeriodicCollection.lastCollectionUptime, this,
+ CollectionEvent::PERIODIC);
+ ALOGI("Switching to %s performance data collection",
+ toString(mCurrCollectionEvent).c_str());
+ }
+ break;
+ case static_cast<int>(CollectionEvent::PERIODIC):
+ result = processCollectionEvent(CollectionEvent::PERIODIC, &mPeriodicCollection);
+ break;
+ case static_cast<int>(CollectionEvent::CUSTOM):
+ result = processCollectionEvent(CollectionEvent::CUSTOM, &mCustomCollection);
+ break;
+ case static_cast<int>(SwitchEvent::END_CUSTOM_COLLECTION): {
+ Mutex::Autolock lock(mMutex);
+ if (mCurrCollectionEvent != CollectionEvent::CUSTOM) {
+ ALOGW("Skipping END_CUSTOM_COLLECTION message as the current collection %s != %s",
+ toString(mCurrCollectionEvent).c_str(),
+ toString(CollectionEvent::CUSTOM).c_str());
+ return;
+ }
+ mCustomCollection = {};
+ for (const auto& processor : mDataProcessors) {
+ // Clear custom collection cache on the data processors when the custom collection
+ // auto-terminates.
+ processor->onCustomCollectionDump(-1);
+ }
+ mHandlerLooper->removeMessages(this);
+ mCurrCollectionEvent = CollectionEvent::PERIODIC;
+ mPeriodicCollection.lastCollectionUptime = mHandlerLooper->now();
+ mHandlerLooper->sendMessage(this, CollectionEvent::PERIODIC);
+ ALOGI("Switching to %s performance data collection",
+ toString(mCurrCollectionEvent).c_str());
+ return;
+ }
+ default:
+ result = Error() << "Unknown message: " << message.what;
+ }
+
+ if (!result.ok()) {
+ Mutex::Autolock lock(mMutex);
+ ALOGE("Terminating %s: %s", kServiceName, result.error().message().c_str());
+ // DO NOT CALL terminate() as it tries to join the collection thread but this code is
+ // executed on the collection thread. Thus it will result in a deadlock.
+ mCurrCollectionEvent = CollectionEvent::TERMINATED;
+ mHandlerLooper->removeMessages(this);
+ mHandlerLooper->wake();
+ }
+}
+
+Result<void> WatchdogPerfService::processCollectionEvent(CollectionEvent event,
+ CollectionMetadata* metadata) {
+ Mutex::Autolock lock(mMutex);
+ // Messages sent to the looper are intrinsically racy such that a message from the previous
+ // collection event may land in the looper after the current collection has already begun. Thus
+ // verify the current collection event before starting the collection.
+ if (mCurrCollectionEvent != event) {
+ ALOGW("Skipping %s collection message on collection event %s", toString(event).c_str(),
+ toString(mCurrCollectionEvent).c_str());
+ return {};
+ }
+ if (metadata->interval < kMinCollectionInterval) {
+ return Error()
+ << "Collection interval of "
+ << std::chrono::duration_cast<std::chrono::seconds>(metadata->interval).count()
+ << " seconds for " << toString(event) << " collection cannot be less than "
+ << std::chrono::duration_cast<std::chrono::seconds>(kMinCollectionInterval).count()
+ << " seconds";
+ }
+ auto result = collectLocked(metadata);
+ if (!result.ok()) {
+ return Error() << toString(event) << " collection failed: " << result.error();
+ }
+ metadata->lastCollectionUptime += metadata->interval.count();
+ mHandlerLooper->sendMessageAtTime(metadata->lastCollectionUptime, this, event);
+ return {};
+}
+
+Result<void> WatchdogPerfService::collectLocked(CollectionMetadata* metadata) {
+ if (!mUidIoStats->enabled() && !mProcStat->enabled() && !mProcPidStat->enabled()) {
+ return Error() << "No collectors enabled";
+ }
+
+ time_t now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
+
+ if (mUidIoStats->enabled()) {
+ const auto result = mUidIoStats->collect();
+ if (!result.ok()) {
+ return Error() << "Failed to collect per-uid I/O usage: " << result.error();
+ }
+ }
+
+ if (mProcStat->enabled()) {
+ const auto result = mProcStat->collect();
+ if (!result.ok()) {
+ return Error() << "Failed to collect proc stats: " << result.error();
+ }
+ }
+
+ if (mProcPidStat->enabled()) {
+ const auto result = mProcPidStat->collect();
+ if (!result.ok()) {
+ return Error() << "Failed to collect process stats: " << result.error();
+ }
+ }
+
+ for (const auto& processor : mDataProcessors) {
+ Result<void> result;
+ switch (mCurrCollectionEvent) {
+ case CollectionEvent::BOOT_TIME:
+ result = processor->onBoottimeCollection(now, mUidIoStats, mProcStat, mProcPidStat);
+ break;
+ case CollectionEvent::PERIODIC:
+ result = processor->onPeriodicCollection(now, mUidIoStats, mProcStat, mProcPidStat);
+ break;
+ case CollectionEvent::CUSTOM:
+ result = processor->onCustomCollection(now, metadata->filterPackages, mUidIoStats,
+ mProcStat, mProcPidStat);
+ break;
+ default:
+ result = Error() << "Invalid collection event " << toString(mCurrCollectionEvent);
+ }
+ if (!result.ok()) {
+ return Error() << processor->name() << " failed on " << toString(mCurrCollectionEvent)
+ << " collection: " << result.error();
+ }
+ }
+
+ return {};
+}
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
diff --git a/cpp/watchdog/server/src/WatchdogPerfService.h b/cpp/watchdog/server/src/WatchdogPerfService.h
new file mode 100644
index 0000000..d42f1ec
--- /dev/null
+++ b/cpp/watchdog/server/src/WatchdogPerfService.h
@@ -0,0 +1,247 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#ifndef CPP_WATCHDOG_SERVER_SRC_WATCHDOGPERFSERVICE_H_
+#define CPP_WATCHDOG_SERVER_SRC_WATCHDOGPERFSERVICE_H_
+
+#include "LooperWrapper.h"
+#include "ProcPidStat.h"
+#include "ProcStat.h"
+#include "UidIoStats.h"
+
+#include <android-base/chrono_utils.h>
+#include <android-base/result.h>
+#include <cutils/multiuser.h>
+#include <gtest/gtest_prod.h>
+#include <time.h>
+#include <utils/Errors.h>
+#include <utils/Looper.h>
+#include <utils/Mutex.h>
+#include <utils/RefBase.h>
+#include <utils/String16.h>
+#include <utils/StrongPointer.h>
+#include <utils/Vector.h>
+
+#include <string>
+#include <thread> // NOLINT(build/c++11)
+#include <unordered_set>
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+// Forward declaration for testing use only.
+namespace internal {
+
+class WatchdogPerfServicePeer;
+
+} // namespace internal
+
+constexpr const char* kStartCustomCollectionFlag = "--start_perf";
+constexpr const char* kEndCustomCollectionFlag = "--stop_perf";
+constexpr const char* kIntervalFlag = "--interval";
+constexpr const char* kMaxDurationFlag = "--max_duration";
+constexpr const char* kFilterPackagesFlag = "--filter_packages";
+
+class DataProcessor : public RefBase {
+public:
+ DataProcessor() {}
+ virtual ~DataProcessor() {}
+ virtual std::string name() = 0;
+ virtual android::base::Result<void> start() = 0;
+ virtual void terminate() = 0;
+ virtual android::base::Result<void> onBoottimeCollection(
+ time_t time, const android::wp<UidIoStats>& uidIoStats,
+ const android::wp<ProcStat>& procStat, const android::wp<ProcPidStat>& procPidStat) = 0;
+ virtual android::base::Result<void> onPeriodicCollection(
+ time_t time, const android::wp<UidIoStats>& uidIoStats,
+ const android::wp<ProcStat>& procStat, const android::wp<ProcPidStat>& procPidStat) = 0;
+ virtual android::base::Result<void> onCustomCollection(
+ time_t time, const std::unordered_set<std::string>& filterPackages,
+ const android::wp<UidIoStats>& uidIoStats, const android::wp<ProcStat>& procStat,
+ const android::wp<ProcPidStat>& procPidStat) = 0;
+ virtual android::base::Result<void> onDump(int fd) = 0;
+ virtual android::base::Result<void> onCustomCollectionDump(int fd) = 0;
+};
+
+struct CollectionMetadata {
+ std::chrono::nanoseconds interval = 0ns; // Collection interval between subsequent collections.
+ nsecs_t lastCollectionUptime = 0; // Used to calculate the uptime for next collection.
+ // Filter the results only to the specified packages.
+ std::unordered_set<std::string> filterPackages;
+};
+
+std::string toString(const CollectionMetadata& metadata);
+
+enum CollectionEvent {
+ INIT = 0,
+ BOOT_TIME,
+ PERIODIC,
+ CUSTOM,
+ TERMINATED,
+ LAST_EVENT,
+};
+
+enum SwitchEvent {
+ // Ends boot-time collection by collecting the last boot-time record and switching the
+ // collection event to periodic collection.
+ END_BOOTTIME_COLLECTION = CollectionEvent::LAST_EVENT + 1,
+ // Ends custom collection, discards collected data and starts periodic collection.
+ END_CUSTOM_COLLECTION
+};
+
+static inline std::string toString(CollectionEvent event) {
+ switch (event) {
+ case CollectionEvent::INIT:
+ return "INIT";
+ case CollectionEvent::BOOT_TIME:
+ return "BOOT_TIME";
+ case CollectionEvent::PERIODIC:
+ return "PERIODIC";
+ case CollectionEvent::CUSTOM:
+ return "CUSTOM";
+ case CollectionEvent::TERMINATED:
+ return "TERMINATED";
+ default:
+ return "INVALID";
+ }
+}
+
+// WatchdogPerfService collects performance data during boot-time and periodically post boot
+// complete. It exposes APIs that the main thread and binder service can call to start a collection,
+// switch the collection type, and generate collection dumps.
+class WatchdogPerfService : public MessageHandler {
+public:
+ WatchdogPerfService() :
+ mHandlerLooper(new LooperWrapper()),
+ mBoottimeCollection({}),
+ mPeriodicCollection({}),
+ mCustomCollection({}),
+ mCurrCollectionEvent(CollectionEvent::INIT),
+ mUidIoStats(new UidIoStats()),
+ mProcStat(new ProcStat()),
+ mProcPidStat(new ProcPidStat()),
+ mDataProcessors({}) {}
+
+ ~WatchdogPerfService() { terminate(); }
+
+ android::base::Result<void> registerDataProcessor(android::sp<DataProcessor> processor) {
+ if (processor == nullptr) {
+ return android::base::Error() << "Must provide a valid data processor";
+ }
+ mDataProcessors.emplace_back(processor);
+ return {};
+ }
+
+ // Starts the boot-time collection in the looper handler on a new thread and returns
+ // immediately. Must be called only once. Otherwise, returns an error.
+ virtual android::base::Result<void> start();
+
+ // Terminates the collection thread and returns.
+ virtual void terminate();
+
+ // Ends the boot-time collection by switching to periodic collection and returns immediately.
+ virtual android::base::Result<void> onBootFinished();
+
+ // Depending on the arguments, it either:
+ // 1. Starts a custom collection.
+ // 2. Or ends the current custom collection and dumps the collected data.
+ // Returns any error observed during the dump generation.
+ virtual android::base::Result<void> onCustomCollection(int fd, const Vector<String16>& args);
+
+ // Generates a dump from the boot-time and periodic collection events.
+ virtual android::base::Result<void> onDump(int fd);
+
+ // Dumps the help text.
+ bool dumpHelpText(int fd);
+
+private:
+ // Dumps the collectors' status when they are disabled.
+ android::base::Result<void> dumpCollectorsStatusLocked(int fd);
+
+ // Starts a custom collection on the looper handler, temporarily stops the periodic collection
+ // (won't discard the collected data), and returns immediately. Returns any error observed
+ // during this process.
+ // The custom collection happens once every |interval| seconds. When the |maxDuration| is
+ // reached, the looper receives a message to end the collection, discards the collected data,
+ // and starts the periodic collection. This is needed to ensure the custom collection doesn't
+ // run forever when a subsequent |endCustomCollection| call is not received.
+ // When |kFilterPackagesFlag| value specified, the results are filtered only to the specified
+ // package names.
+ android::base::Result<void> startCustomCollection(
+ std::chrono::nanoseconds interval, std::chrono::nanoseconds maxDuration,
+ const std::unordered_set<std::string>& filterPackages);
+
+ // Ends the current custom collection, generates a dump, sends a looper message to start the
+ // periodic collection, and returns immediately. Returns an error when there is no custom
+ // collection running or when a dump couldn't be generated from the custom collection.
+ android::base::Result<void> endCustomCollection(int fd);
+
+ // Handles the messages received by the lopper.
+ void handleMessage(const Message& message) override;
+
+ // Processes the events received by |handleMessage|.
+ android::base::Result<void> processCollectionEvent(CollectionEvent event,
+ CollectionMetadata* metadata);
+
+ // Collects/processes the performance data for the current collection event.
+ android::base::Result<void> collectLocked(CollectionMetadata* metadata);
+
+ // Thread on which the actual collection happens.
+ std::thread mCollectionThread;
+
+ // Makes sure only one collection is running at any given time.
+ Mutex mMutex;
+
+ // Handler lopper to execute different collection events on the collection thread.
+ android::sp<LooperWrapper> mHandlerLooper GUARDED_BY(mMutex);
+
+ // Info for the |CollectionEvent::BOOT_TIME| collection event.
+ CollectionMetadata mBoottimeCollection GUARDED_BY(mMutex);
+
+ // Info for the |CollectionEvent::PERIODIC| collection event.
+ CollectionMetadata mPeriodicCollection GUARDED_BY(mMutex);
+
+ // Info for the |CollectionEvent::CUSTOM| collection event. The info is cleared at the end of
+ // every custom collection.
+ CollectionMetadata mCustomCollection GUARDED_BY(mMutex);
+
+ // Tracks the current collection event. Updated on |start|, |onBootComplete|,
+ // |startCustomCollection|, |endCustomCollection|, and |terminate|.
+ CollectionEvent mCurrCollectionEvent GUARDED_BY(mMutex);
+
+ // Collector/parser for `/proc/uid_io/stats`.
+ android::sp<UidIoStats> mUidIoStats GUARDED_BY(mMutex);
+
+ // Collector/parser for `/proc/stat`.
+ android::sp<ProcStat> mProcStat GUARDED_BY(mMutex);
+
+ // Collector/parser for `/proc/PID/*` stat files.
+ android::sp<ProcPidStat> mProcPidStat GUARDED_BY(mMutex);
+
+ // Data processors for the collected performance data.
+ std::vector<android::sp<DataProcessor>> mDataProcessors GUARDED_BY(mMutex);
+
+ // For unit tests.
+ friend class internal::WatchdogPerfServicePeer;
+ FRIEND_TEST(WatchdogPerfServiceTest, TestServiceStartAndTerminate);
+};
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
+
+#endif // CPP_WATCHDOG_SERVER_SRC_WATCHDOGPERFSERVICE_H_
diff --git a/cpp/watchdog/server/src/WatchdogProcessService.cpp b/cpp/watchdog/server/src/WatchdogProcessService.cpp
new file mode 100644
index 0000000..556b081
--- /dev/null
+++ b/cpp/watchdog/server/src/WatchdogProcessService.cpp
@@ -0,0 +1,891 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#define LOG_TAG "carwatchdogd"
+#define DEBUG false // STOPSHIP if true.
+
+#include "WatchdogProcessService.h"
+
+#include <android-base/chrono_utils.h>
+#include <android-base/file.h>
+#include <android-base/macros.h>
+#include <android-base/properties.h>
+#include <android-base/stringprintf.h>
+#include <android-base/strings.h>
+#include <android/automotive/watchdog/BnCarWatchdogClient.h>
+#include <android/automotive/watchdog/BnCarWatchdogMonitor.h>
+#include <android/hardware/automotive/vehicle/2.0/types.h>
+#include <android/hidl/manager/1.0/IServiceManager.h>
+#include <binder/IPCThreadState.h>
+#include <hidl/HidlTransportSupport.h>
+#include <utils/SystemClock.h>
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+using android::base::Error;
+using android::base::GetProperty;
+using android::base::ReadFileToString;
+using android::base::Result;
+using android::base::StringAppendF;
+using android::base::StringPrintf;
+using android::base::Trim;
+using android::base::WriteStringToFd;
+using android::binder::Status;
+using android::hardware::hidl_vec;
+using android::hardware::interfacesEqual;
+using android::hardware::Return;
+using android::hardware::automotive::vehicle::V2_0::IVehicle;
+using android::hardware::automotive::vehicle::V2_0::ProcessTerminationReason;
+using android::hardware::automotive::vehicle::V2_0::StatusCode;
+using android::hardware::automotive::vehicle::V2_0::SubscribeFlags;
+using android::hardware::automotive::vehicle::V2_0::SubscribeOptions;
+using android::hardware::automotive::vehicle::V2_0::VehiclePropConfig;
+using android::hardware::automotive::vehicle::V2_0::VehicleProperty;
+using android::hardware::automotive::vehicle::V2_0::VehiclePropertyStatus;
+using android::hardware::automotive::vehicle::V2_0::VehiclePropValue;
+using android::hidl::base::V1_0::IBase;
+
+namespace {
+
+const std::vector<TimeoutLength> kTimeouts = {TimeoutLength::TIMEOUT_CRITICAL,
+ TimeoutLength::TIMEOUT_MODERATE,
+ TimeoutLength::TIMEOUT_NORMAL};
+
+// TimeoutLength is also used as a message ID. Other message IDs should start next to
+// TimeoutLength::TIMEOUT_NORMAL.
+const int32_t MSG_VHAL_WATCHDOG_ALIVE = static_cast<int>(TimeoutLength::TIMEOUT_NORMAL) + 1;
+const int32_t MSG_VHAL_HEALTH_CHECK = MSG_VHAL_WATCHDOG_ALIVE + 1;
+
+// VHAL sends heart beat every 3s. Car watchdog checks if there is the latest heart beat from VHAL
+// with 1s marginal time.
+constexpr std::chrono::nanoseconds kVhalHealthCheckDelayNs = 4s;
+constexpr int64_t kVhalHeartBeatIntervalMs = 3000;
+
+constexpr const char* kVhalInterfaceName = "android.hardware.automotive.vehicle@2.0::IVehicle";
+
+std::chrono::nanoseconds timeoutToDurationNs(const TimeoutLength& timeout) {
+ switch (timeout) {
+ case TimeoutLength::TIMEOUT_CRITICAL:
+ return 3s; // 3s and no buffer time.
+ case TimeoutLength::TIMEOUT_MODERATE:
+ return 6s; // 5s + 1s as buffer time.
+ case TimeoutLength::TIMEOUT_NORMAL:
+ return 12s; // 10s + 2s as buffer time.
+ }
+}
+
+std::string pidArrayToString(const std::vector<int32_t>& pids) {
+ size_t size = pids.size();
+ if (size == 0) {
+ return "";
+ }
+ std::string buffer;
+ StringAppendF(&buffer, "%d", pids[0]);
+ for (int i = 1; i < size; i++) {
+ int pid = pids[i];
+ StringAppendF(&buffer, ", %d", pid);
+ }
+ return buffer;
+}
+
+bool isSystemShuttingDown() {
+ std::string sysPowerCtl;
+ std::istringstream tokenStream(GetProperty("sys.powerctl", ""));
+ std::getline(tokenStream, sysPowerCtl, ',');
+ return sysPowerCtl == "reboot" || sysPowerCtl == "shutdown";
+}
+
+} // namespace
+
+WatchdogProcessService::WatchdogProcessService(const sp<Looper>& handlerLooper) :
+ mHandlerLooper(handlerLooper),
+ mLastSessionId(0),
+ mServiceStarted(false),
+ mVhalService(nullptr) {
+ mMessageHandler = new MessageHandlerImpl(this);
+ mWatchdogEnabled = true;
+ mBinderDeathRecipient = new BinderDeathRecipient(this);
+ mHidlDeathRecipient = new HidlDeathRecipient(this);
+ mPropertyChangeListener = new PropertyChangeListener(this);
+ for (const auto& timeout : kTimeouts) {
+ mClients.insert(std::make_pair(timeout, std::vector<ClientInfo>()));
+ mPingedClients.insert(std::make_pair(timeout, PingedClientMap()));
+ }
+}
+
+Status WatchdogProcessService::registerClient(const sp<ICarWatchdogClient>& client,
+ TimeoutLength timeout) {
+ Mutex::Autolock lock(mMutex);
+ return registerClientLocked(client, timeout, ClientType::Regular);
+}
+
+Status WatchdogProcessService::unregisterClient(const sp<ICarWatchdogClient>& client) {
+ Mutex::Autolock lock(mMutex);
+ sp<IBinder> binder = BnCarWatchdogClient::asBinder(client);
+ // kTimeouts is declared as global static constant to cover all kinds of timeout (CRITICAL,
+ // MODERATE, NORMAL).
+ return unregisterClientLocked(kTimeouts, binder, ClientType::Regular);
+}
+
+Status WatchdogProcessService::registerMediator(const sp<ICarWatchdogClient>& mediator) {
+ Mutex::Autolock lock(mMutex);
+ // Mediator's timeout is always TIMEOUT_CRITICAL.
+ return registerClientLocked(mediator, TimeoutLength::TIMEOUT_CRITICAL, ClientType::Mediator);
+}
+
+Status WatchdogProcessService::unregisterMediator(const sp<ICarWatchdogClient>& mediator) {
+ std::vector<TimeoutLength> timeouts = {TimeoutLength::TIMEOUT_CRITICAL};
+ sp<IBinder> binder = BnCarWatchdogClient::asBinder(mediator);
+ Mutex::Autolock lock(mMutex);
+ return unregisterClientLocked(timeouts, binder, ClientType::Mediator);
+}
+
+Status WatchdogProcessService::registerMonitor(const sp<ICarWatchdogMonitor>& monitor) {
+ Mutex::Autolock lock(mMutex);
+ sp<IBinder> binder = BnCarWatchdogMonitor::asBinder(monitor);
+ if (mMonitor != nullptr && binder == BnCarWatchdogMonitor::asBinder(mMonitor)) {
+ return Status::ok();
+ }
+ status_t ret = binder->linkToDeath(mBinderDeathRecipient);
+ if (ret != OK) {
+ ALOGW("Cannot register the monitor. The monitor is dead.");
+ return Status::fromExceptionCode(Status::EX_ILLEGAL_STATE, "The monitor is dead.");
+ }
+ mMonitor = monitor;
+ if (DEBUG) {
+ ALOGD("Car watchdog monitor is registered");
+ }
+ return Status::ok();
+}
+
+Status WatchdogProcessService::unregisterMonitor(const sp<ICarWatchdogMonitor>& monitor) {
+ Mutex::Autolock lock(mMutex);
+ if (mMonitor != monitor) {
+ ALOGW("Cannot unregister the monitor. The monitor has not been registered.");
+ return Status::fromExceptionCode(Status::EX_ILLEGAL_ARGUMENT,
+ "The monitor has not been registered.");
+ }
+ sp<IBinder> binder = BnCarWatchdogMonitor::asBinder(monitor);
+ binder->unlinkToDeath(mBinderDeathRecipient);
+ mMonitor = nullptr;
+ if (DEBUG) {
+ ALOGD("Car watchdog monitor is unregistered");
+ }
+ return Status::ok();
+}
+
+Status WatchdogProcessService::tellClientAlive(const sp<ICarWatchdogClient>& client,
+ int32_t sessionId) {
+ Mutex::Autolock lock(mMutex);
+ return tellClientAliveLocked(client, sessionId);
+}
+
+Status WatchdogProcessService::tellMediatorAlive(const sp<ICarWatchdogClient>& mediator,
+ const std::vector<int32_t>& clientsNotResponding,
+ int32_t sessionId) {
+ Status status;
+ {
+ Mutex::Autolock lock(mMutex);
+ if (DEBUG) {
+ std::string buffer;
+ int size = clientsNotResponding.size();
+ if (size != 0) {
+ StringAppendF(&buffer, "%d", clientsNotResponding[0]);
+ for (int i = 1; i < clientsNotResponding.size(); i++) {
+ StringAppendF(&buffer, ", %d", clientsNotResponding[i]);
+ }
+ ALOGD("Mediator(session: %d) responded with non-responding clients: %s", sessionId,
+ buffer.c_str());
+ }
+ }
+ status = tellClientAliveLocked(mediator, sessionId);
+ }
+ if (status.isOk()) {
+ dumpAndKillAllProcesses(clientsNotResponding, true);
+ }
+ return status;
+}
+
+Status WatchdogProcessService::tellDumpFinished(const sp<ICarWatchdogMonitor>& monitor,
+ int32_t pid) {
+ Mutex::Autolock lock(mMutex);
+ if (mMonitor == nullptr || monitor == nullptr ||
+ BnCarWatchdogMonitor::asBinder(monitor) != BnCarWatchdogMonitor::asBinder(mMonitor)) {
+ return Status::
+ fromExceptionCode(Status::EX_ILLEGAL_ARGUMENT,
+ "The monitor is not registered or an invalid monitor is given");
+ }
+ ALOGI("Process(pid: %d) has been dumped and killed", pid);
+ return Status::ok();
+}
+
+Status WatchdogProcessService::notifyPowerCycleChange(PowerCycle cycle) {
+ std::string buffer;
+ Mutex::Autolock lock(mMutex);
+ bool oldStatus = mWatchdogEnabled;
+ switch (cycle) {
+ case PowerCycle::POWER_CYCLE_SHUTDOWN:
+ mWatchdogEnabled = false;
+ buffer = "SHUTDOWN power cycle";
+ break;
+ case PowerCycle::POWER_CYCLE_SUSPEND:
+ mWatchdogEnabled = false;
+ buffer = "SUSPEND power cycle";
+ break;
+ case PowerCycle::POWER_CYCLE_RESUME:
+ mWatchdogEnabled = true;
+ for (const auto& timeout : kTimeouts) {
+ startHealthCheckingLocked(timeout);
+ }
+ buffer = "RESUME power cycle";
+ break;
+ default:
+ ALOGW("Unsupported power cycle: %d", cycle);
+ return Status::fromExceptionCode(Status::EX_ILLEGAL_ARGUMENT,
+ "Unsupported power cycle");
+ }
+ ALOGI("Received %s", buffer.c_str());
+ if (oldStatus != mWatchdogEnabled) {
+ ALOGI("Car watchdog is %s", mWatchdogEnabled ? "enabled" : "disabled");
+ }
+ return Status::ok();
+}
+
+Status WatchdogProcessService::notifyUserStateChange(userid_t userId, UserState state) {
+ std::string buffer;
+ Mutex::Autolock lock(mMutex);
+ switch (state) {
+ case UserState::USER_STATE_STARTED:
+ mStoppedUserIds.erase(userId);
+ buffer = StringPrintf("user(%d) is started", userId);
+ break;
+ case UserState::USER_STATE_STOPPED:
+ mStoppedUserIds.insert(userId);
+ buffer = StringPrintf("user(%d) is stopped", userId);
+ break;
+ default:
+ ALOGW("Unsupported user state: %d", state);
+ return Status::fromExceptionCode(Status::EX_ILLEGAL_ARGUMENT, "Unsupported user state");
+ }
+ ALOGI("Received user state change: %s", buffer.c_str());
+ return Status::ok();
+}
+
+Result<void> WatchdogProcessService::dump(int fd, const Vector<String16>& /*args*/) {
+ Mutex::Autolock lock(mMutex);
+ const char* indent = " ";
+ const char* doubleIndent = " ";
+ std::string buffer;
+ WriteStringToFd("CAR WATCHDOG PROCESS SERVICE\n", fd);
+ WriteStringToFd(StringPrintf("%sWatchdog enabled: %s\n", indent,
+ mWatchdogEnabled ? "true" : "false"),
+ fd);
+ WriteStringToFd(StringPrintf("%sRegistered clients\n", indent), fd);
+ int count = 1;
+ for (const auto& timeout : kTimeouts) {
+ std::vector<ClientInfo>& clients = mClients[timeout];
+ for (auto it = clients.begin(); it != clients.end(); it++, count++) {
+ WriteStringToFd(StringPrintf("%sClient #%d: %s\n", doubleIndent, count,
+ it->toString().c_str()),
+ fd);
+ }
+ }
+ WriteStringToFd(StringPrintf("%sMonitor registered: %s\n", indent,
+ mMonitor == nullptr ? "false" : "true"),
+ fd);
+ WriteStringToFd(StringPrintf("%sisSystemShuttingDown: %s\n", indent,
+ isSystemShuttingDown() ? "true" : "false"),
+ fd);
+ buffer = "none";
+ bool first = true;
+ for (const auto& userId : mStoppedUserIds) {
+ if (first) {
+ buffer = StringPrintf("%d", userId);
+ first = false;
+ } else {
+ StringAppendF(&buffer, ", %d", userId);
+ }
+ }
+ WriteStringToFd(StringPrintf("%sStopped users: %s\n", indent, buffer.c_str()), fd);
+ return {};
+}
+
+void WatchdogProcessService::doHealthCheck(int what) {
+ mHandlerLooper->removeMessages(mMessageHandler, what);
+ if (!isWatchdogEnabled()) {
+ return;
+ }
+ const TimeoutLength timeout = static_cast<TimeoutLength>(what);
+ dumpAndKillClientsIfNotResponding(timeout);
+
+ /* Generates a temporary/local vector containing clients.
+ * Using a local copy may send unnecessary ping messages to clients after they are unregistered.
+ * Clients should be able to handle them.
+ */
+ std::vector<ClientInfo> clientsToCheck;
+ PingedClientMap& pingedClients = mPingedClients[timeout];
+ {
+ Mutex::Autolock lock(mMutex);
+ pingedClients.clear();
+ clientsToCheck = mClients[timeout];
+ for (auto& clientInfo : clientsToCheck) {
+ if (mStoppedUserIds.count(clientInfo.userId) > 0) {
+ continue;
+ }
+ int sessionId = getNewSessionId();
+ clientInfo.sessionId = sessionId;
+ pingedClients.insert(std::make_pair(sessionId, clientInfo));
+ }
+ }
+
+ for (const auto& clientInfo : clientsToCheck) {
+ Status status = clientInfo.client->checkIfAlive(clientInfo.sessionId, timeout);
+ if (!status.isOk()) {
+ ALOGW("Sending a ping message to client(pid: %d) failed: %s", clientInfo.pid,
+ status.exceptionMessage().c_str());
+ {
+ Mutex::Autolock lock(mMutex);
+ pingedClients.erase(clientInfo.sessionId);
+ }
+ }
+ }
+ // Though the size of pingedClients is a more specific measure, clientsToCheck is used as a
+ // conservative approach.
+ if (clientsToCheck.size() > 0) {
+ auto durationNs = timeoutToDurationNs(timeout);
+ mHandlerLooper->sendMessageDelayed(durationNs.count(), mMessageHandler, Message(what));
+ }
+}
+
+Result<void> WatchdogProcessService::start() {
+ if (mServiceStarted) {
+ return Error(INVALID_OPERATION) << "Cannot start process monitoring more than once";
+ }
+ mServiceStarted = true;
+ reportWatchdogAliveToVhal();
+ return {};
+}
+
+void WatchdogProcessService::terminate() {
+ Mutex::Autolock lock(mMutex);
+ for (const auto& timeout : kTimeouts) {
+ std::vector<ClientInfo>& clients = mClients[timeout];
+ for (auto it = clients.begin(); it != clients.end();) {
+ sp<IBinder> binder = BnCarWatchdogClient::asBinder((*it).client);
+ binder->unlinkToDeath(mBinderDeathRecipient);
+ it = clients.erase(it);
+ }
+ }
+ if (mMonitor != nullptr) {
+ sp<IBinder> binder = BnCarWatchdogMonitor::asBinder(mMonitor);
+ binder->unlinkToDeath(mBinderDeathRecipient);
+ }
+ if (mVhalService != nullptr) {
+ mVhalService->unlinkToDeath(mHidlDeathRecipient);
+ }
+ mServiceStarted = false;
+}
+
+bool WatchdogProcessService::isRegisteredLocked(const sp<ICarWatchdogClient>& client) {
+ sp<IBinder> binder = BnCarWatchdogClient::asBinder(client);
+ return findClientAndProcessLocked(kTimeouts, binder, nullptr);
+}
+
+Status WatchdogProcessService::registerClientLocked(const sp<ICarWatchdogClient>& client,
+ TimeoutLength timeout, ClientType clientType) {
+ const char* clientName = clientType == ClientType::Regular ? "client" : "mediator";
+ if (isRegisteredLocked(client)) {
+ ALOGW("Cannot register the %s: the %s is already registered.", clientName, clientName);
+ return Status::ok();
+ }
+ sp<IBinder> binder = BnCarWatchdogClient::asBinder(client);
+ status_t status = binder->linkToDeath(mBinderDeathRecipient);
+ if (status != OK) {
+ std::string errorStr = StringPrintf("The %s is dead", clientName);
+ const char* errorCause = errorStr.c_str();
+ ALOGW("Cannot register the %s: %s", clientName, errorCause);
+ return Status::fromExceptionCode(Status::EX_ILLEGAL_STATE, errorCause);
+ }
+ std::vector<ClientInfo>& clients = mClients[timeout];
+ pid_t callingPid = IPCThreadState::self()->getCallingPid();
+ uid_t callingUid = IPCThreadState::self()->getCallingUid();
+ clients.push_back(ClientInfo(client, callingPid, callingUid, clientType));
+
+ // If the client array becomes non-empty, start health checking.
+ if (clients.size() == 1) {
+ startHealthCheckingLocked(timeout);
+ }
+ if (DEBUG) {
+ ALOGD("Car watchdog %s(pid: %d, timeout: %d) is registered", clientName, callingPid,
+ timeout);
+ }
+ return Status::ok();
+}
+
+Status WatchdogProcessService::unregisterClientLocked(const std::vector<TimeoutLength>& timeouts,
+ sp<IBinder> binder, ClientType clientType) {
+ const char* clientName = clientType == ClientType::Regular ? "client" : "mediator";
+ bool result = findClientAndProcessLocked(timeouts, binder,
+ [&](std::vector<ClientInfo>& clients,
+ std::vector<ClientInfo>::const_iterator it) {
+ binder->unlinkToDeath(mBinderDeathRecipient);
+ clients.erase(it);
+ });
+ if (!result) {
+ std::string errorStr = StringPrintf("The %s has not been registered", clientName);
+ const char* errorCause = errorStr.c_str();
+ ALOGW("Cannot unregister the %s: %s", clientName, errorCause);
+ return Status::fromExceptionCode(Status::EX_ILLEGAL_ARGUMENT, errorCause);
+ }
+ if (DEBUG) {
+ ALOGD("Car watchdog %s is unregistered", clientName);
+ }
+ return Status::ok();
+}
+
+Status WatchdogProcessService::tellClientAliveLocked(const sp<ICarWatchdogClient>& client,
+ int32_t sessionId) {
+ const sp<IBinder> binder = BnCarWatchdogClient::asBinder(client);
+ for (const auto& timeout : kTimeouts) {
+ PingedClientMap& clients = mPingedClients[timeout];
+ PingedClientMap::const_iterator it = clients.find(sessionId);
+ if (it == clients.cend() || binder != BnCarWatchdogClient::asBinder(it->second.client)) {
+ continue;
+ }
+ clients.erase(it);
+ return Status::ok();
+ }
+ return Status::fromExceptionCode(Status::EX_ILLEGAL_ARGUMENT,
+ "The client is not registered or the session ID is not found");
+}
+
+bool WatchdogProcessService::findClientAndProcessLocked(const std::vector<TimeoutLength> timeouts,
+ const sp<IBinder> binder,
+ const Processor& processor) {
+ for (const auto& timeout : timeouts) {
+ std::vector<ClientInfo>& clients = mClients[timeout];
+ for (auto it = clients.begin(); it != clients.end(); it++) {
+ if (BnCarWatchdogClient::asBinder((*it).client) != binder) {
+ continue;
+ }
+ if (processor != nullptr) {
+ processor(clients, it);
+ }
+ return true;
+ }
+ }
+ return false;
+}
+
+Result<void> WatchdogProcessService::startHealthCheckingLocked(TimeoutLength timeout) {
+ PingedClientMap& clients = mPingedClients[timeout];
+ clients.clear();
+ int what = static_cast<int>(timeout);
+ auto durationNs = timeoutToDurationNs(timeout);
+ mHandlerLooper->sendMessageDelayed(durationNs.count(), mMessageHandler, Message(what));
+ return {};
+}
+
+Result<void> WatchdogProcessService::dumpAndKillClientsIfNotResponding(TimeoutLength timeout) {
+ std::vector<int32_t> processIds;
+ std::vector<sp<ICarWatchdogClient>> clientsToNotify;
+ {
+ Mutex::Autolock lock(mMutex);
+ PingedClientMap& clients = mPingedClients[timeout];
+ for (PingedClientMap::const_iterator it = clients.cbegin(); it != clients.cend(); it++) {
+ pid_t pid = -1;
+ userid_t userId = -1;
+ sp<ICarWatchdogClient> client = it->second.client;
+ sp<IBinder> binder = BnCarWatchdogClient::asBinder(client);
+ std::vector<TimeoutLength> timeouts = {timeout};
+ findClientAndProcessLocked(timeouts, binder,
+ [&](std::vector<ClientInfo>& clients,
+ std::vector<ClientInfo>::const_iterator it) {
+ pid = (*it).pid;
+ userId = (*it).userId;
+ clients.erase(it);
+ });
+ if (pid != -1 && mStoppedUserIds.count(userId) == 0) {
+ clientsToNotify.push_back(client);
+ processIds.push_back(pid);
+ }
+ }
+ }
+ for (auto&& client : clientsToNotify) {
+ client->prepareProcessTermination();
+ }
+ return dumpAndKillAllProcesses(processIds, true);
+}
+
+Result<void> WatchdogProcessService::dumpAndKillAllProcesses(
+ const std::vector<int32_t>& processesNotResponding, bool reportToVhal) {
+ size_t size = processesNotResponding.size();
+ if (size == 0) {
+ return {};
+ }
+ std::string pidString = pidArrayToString(processesNotResponding);
+ sp<ICarWatchdogMonitor> monitor;
+ {
+ Mutex::Autolock lock(mMutex);
+ if (mMonitor == nullptr) {
+ std::string errorMsg =
+ StringPrintf("Cannot dump and kill processes(pid = %s): Monitor is not set",
+ pidString.c_str());
+ ALOGW("%s", errorMsg.c_str());
+ return Error() << errorMsg;
+ }
+ monitor = mMonitor;
+ }
+ if (isSystemShuttingDown()) {
+ ALOGI("Skip dumping and killing processes(%s): The system is shutting down",
+ pidString.c_str());
+ return {};
+ }
+ if (reportToVhal) {
+ reportTerminatedProcessToVhal(processesNotResponding);
+ }
+ monitor->onClientsNotResponding(processesNotResponding);
+ if (DEBUG) {
+ ALOGD("Dumping and killing processes is requested: %s", pidString.c_str());
+ }
+ return {};
+}
+
+// Handle when car watchdog clients die.
+void WatchdogProcessService::handleBinderDeath(const wp<IBinder>& who) {
+ Mutex::Autolock lock(mMutex);
+ IBinder* binder = who.unsafe_get();
+ // Check if dead binder is monitor.
+ sp<IBinder> monitor = BnCarWatchdogMonitor::asBinder(mMonitor);
+ if (monitor == binder) {
+ mMonitor = nullptr;
+ ALOGW("The monitor has died.");
+ return;
+ }
+ findClientAndProcessLocked(kTimeouts, binder,
+ [&](std::vector<ClientInfo>& clients,
+ std::vector<ClientInfo>::const_iterator it) {
+ ALOGW("Client(pid: %d) died", it->pid);
+ clients.erase(it);
+ });
+}
+
+// Handle when VHAL dies.
+void WatchdogProcessService::handleHidlDeath(const wp<IBase>& who) {
+ Mutex::Autolock lock(mMutex);
+ if (!interfacesEqual(mVhalService, who.promote())) {
+ return;
+ }
+ ALOGW("VHAL has died.");
+ mVhalService->unlinkToDeath(mHidlDeathRecipient);
+ mVhalService = nullptr;
+}
+
+void WatchdogProcessService::reportWatchdogAliveToVhal() {
+ if (mNotSupportedVhalProperties.count(VehicleProperty::WATCHDOG_ALIVE) > 0) {
+ ALOGW("VHAL doesn't support WATCHDOG_ALIVE. Car watchdog will not update WATCHDOG_ALIVE.");
+ return;
+ }
+ int64_t systemUptime = uptimeMillis();
+ VehiclePropValue propValue{
+ .prop = static_cast<int32_t>(VehicleProperty::WATCHDOG_ALIVE),
+ .status = VehiclePropertyStatus::AVAILABLE,
+ .value = {.int64Values = {systemUptime}},
+ };
+ const auto& ret = updateVhal(propValue);
+ if (!ret.ok()) {
+ ALOGW("Failed to update WATCHDOG_ALIVE VHAL property. Will try again in 3s");
+ }
+ // Update VHAL with the interval of TIMEOUT_CRITICAL(3s).
+ auto durationNs = timeoutToDurationNs(TimeoutLength::TIMEOUT_CRITICAL);
+ mHandlerLooper->removeMessages(mMessageHandler, MSG_VHAL_WATCHDOG_ALIVE);
+ mHandlerLooper->sendMessageDelayed(durationNs.count(), mMessageHandler,
+ Message(MSG_VHAL_WATCHDOG_ALIVE));
+}
+
+void WatchdogProcessService::reportTerminatedProcessToVhal(
+ const std::vector<int32_t>& processesNotResponding) {
+ if (mNotSupportedVhalProperties.count(VehicleProperty::WATCHDOG_TERMINATED_PROCESS) > 0) {
+ ALOGW("VHAL doesn't support WATCHDOG_TERMINATED_PROCESS. Terminated process is not "
+ "reported to VHAL.");
+ return;
+ }
+ for (auto&& pid : processesNotResponding) {
+ const auto& retCmdLine = readProcCmdLine(pid);
+ if (!retCmdLine.ok()) {
+ ALOGW("Failed to get process command line for pid(%d): %s", pid,
+ retCmdLine.error().message().c_str());
+ continue;
+ }
+ std::string procCmdLine = retCmdLine.value();
+ VehiclePropValue propValue{
+ .prop = static_cast<int32_t>(VehicleProperty::WATCHDOG_TERMINATED_PROCESS),
+ .status = VehiclePropertyStatus::AVAILABLE,
+ .value = {
+ .int32Values = {static_cast<int32_t>(
+ ProcessTerminationReason::NOT_RESPONDING)},
+ .stringValue = procCmdLine,
+ },
+ };
+ const auto& retUpdate = updateVhal(propValue);
+ if (!retUpdate.ok()) {
+ ALOGW("Failed to update WATCHDOG_TERMINATED_PROCESS VHAL property(command line: %s)",
+ procCmdLine.c_str());
+ }
+ }
+}
+
+Result<void> WatchdogProcessService::updateVhal(const VehiclePropValue& value) {
+ Mutex::Autolock lock(mMutex);
+ const auto& connectRet = connectToVhalLocked();
+ if (!connectRet.ok()) {
+ std::string errorMsg = "VHAL is not connected: " + connectRet.error().message();
+ ALOGW("%s", errorMsg.c_str());
+ return Error() << errorMsg;
+ }
+ if (mNotSupportedVhalProperties.count(static_cast<VehicleProperty>(value.prop)) > 0) {
+ std::string errorMsg = StringPrintf("VHAL doesn't support property(id: %d)", value.prop);
+ ALOGW("%s", errorMsg.c_str());
+ return Error() << errorMsg;
+ }
+ const auto& updateRet = mVhalService->set(value);
+ if (updateRet.isOk() && updateRet == StatusCode::OK) {
+ return {};
+ }
+ return Error() << "Failed to set propValue(" << value.prop << ") to VHAL";
+}
+
+Result<std::string> WatchdogProcessService::readProcCmdLine(int32_t pid) {
+ std::string cmdLinePath = StringPrintf("/proc/%d/cmdline", pid);
+ std::string procCmdLine;
+ if (ReadFileToString(cmdLinePath, &procCmdLine)) {
+ std::replace(procCmdLine.begin(), procCmdLine.end(), '\0', ' ');
+ procCmdLine = Trim(procCmdLine);
+ return procCmdLine;
+ }
+ return Error() << "Failed to read " << cmdLinePath;
+}
+
+Result<void> WatchdogProcessService::connectToVhalLocked() {
+ if (mVhalService.get() != nullptr) {
+ return {};
+ }
+ mVhalService = IVehicle::tryGetService();
+ if (mVhalService.get() == nullptr) {
+ return Error() << "Failed to connect to VHAL.";
+ }
+ mVhalService->linkToDeath(mHidlDeathRecipient, /*cookie=*/0);
+ queryVhalPropertiesLocked();
+ subscribeToVhalHeartBeatLocked();
+ ALOGI("Successfully connected to VHAL.");
+ return {};
+}
+
+void WatchdogProcessService::queryVhalPropertiesLocked() {
+ mNotSupportedVhalProperties.clear();
+ std::vector<VehicleProperty> propIds = {VehicleProperty::WATCHDOG_ALIVE,
+ VehicleProperty::WATCHDOG_TERMINATED_PROCESS,
+ VehicleProperty::VHAL_HEARTBEAT};
+ for (const auto& propId : propIds) {
+ if (!isVhalPropertySupportedLocked(propId)) {
+ mNotSupportedVhalProperties.insert(propId);
+ }
+ }
+}
+
+bool WatchdogProcessService::isVhalPropertySupportedLocked(VehicleProperty propId) {
+ StatusCode status;
+ hidl_vec<int32_t> props = {static_cast<int32_t>(propId)};
+ mVhalService->getPropConfigs(props,
+ [&status](StatusCode s,
+ hidl_vec<VehiclePropConfig> /*propConfigs*/) {
+ status = s;
+ });
+ return status == StatusCode::OK;
+}
+
+void WatchdogProcessService::subscribeToVhalHeartBeatLocked() {
+ if (mNotSupportedVhalProperties.count(VehicleProperty::VHAL_HEARTBEAT) > 0) {
+ ALOGW("VHAL doesn't support VHAL_HEARTBEAT. Checking VHAL health is disabled.");
+ return;
+ }
+
+ mVhalHeartBeat = {
+ .eventTime = 0,
+ .value = 0,
+ };
+
+ SubscribeOptions reqVhalProperties[] = {
+ {.propId = static_cast<int32_t>(VehicleProperty::VHAL_HEARTBEAT),
+ .flags = SubscribeFlags::EVENTS_FROM_CAR},
+ };
+ hidl_vec<SubscribeOptions> options;
+ options.setToExternal(reqVhalProperties, arraysize(reqVhalProperties));
+ StatusCode status = mVhalService->subscribe(mPropertyChangeListener, options);
+ if (status != StatusCode::OK) {
+ ALOGW("Failed to subscribe to VHAL_HEARTBEAT. Checking VHAL health is disabled.");
+ return;
+ }
+ mHandlerLooper->sendMessageDelayed(kVhalHealthCheckDelayNs.count(), mMessageHandler,
+ Message(MSG_VHAL_HEALTH_CHECK));
+}
+
+int32_t WatchdogProcessService::getNewSessionId() {
+ // Make sure that session id is always positive number.
+ if (++mLastSessionId <= 0) {
+ mLastSessionId = 1;
+ }
+ return mLastSessionId;
+}
+
+bool WatchdogProcessService::isWatchdogEnabled() {
+ Mutex::Autolock lock(mMutex);
+ return mWatchdogEnabled;
+}
+
+void WatchdogProcessService::updateVhalHeartBeat(int64_t value) {
+ bool wrongHeartBeat;
+ {
+ Mutex::Autolock lock(mMutex);
+ wrongHeartBeat = value <= mVhalHeartBeat.value;
+ mVhalHeartBeat.eventTime = uptimeMillis();
+ mVhalHeartBeat.value = value;
+ }
+ if (wrongHeartBeat) {
+ ALOGW("VHAL updated heart beat with a wrong value. Terminating VHAL...");
+ terminateVhal();
+ return;
+ }
+ mHandlerLooper->sendMessageDelayed(kVhalHealthCheckDelayNs.count(), mMessageHandler,
+ Message(MSG_VHAL_HEALTH_CHECK));
+}
+
+void WatchdogProcessService::checkVhalHealth() {
+ int64_t lastEventTime;
+ int64_t currentUptime = uptimeMillis();
+ {
+ Mutex::Autolock lock(mMutex);
+ lastEventTime = mVhalHeartBeat.eventTime;
+ }
+ if (currentUptime > lastEventTime + kVhalHeartBeatIntervalMs) {
+ ALOGW("VHAL failed to update heart beat within timeout. Terminating VHAL...");
+ terminateVhal();
+ }
+}
+
+void WatchdogProcessService::terminateVhal() {
+ using android::hidl::manager::V1_0::IServiceManager;
+
+ std::vector<int32_t> processIds;
+ sp<IServiceManager> manager = IServiceManager::getService();
+ Return<void> ret = manager->debugDump([&](auto& hals) {
+ for (const auto& info : hals) {
+ if (info.pid == static_cast<int>(IServiceManager::PidConstant::NO_PID)) {
+ continue;
+ }
+ if (info.interfaceName == kVhalInterfaceName) {
+ processIds.push_back(info.pid);
+ break;
+ }
+ }
+ });
+
+ if (!ret.isOk()) {
+ ALOGE("Failed to terminate VHAL: could not get VHAL process id");
+ return;
+ } else if (processIds.empty()) {
+ ALOGE("Failed to terminate VHAL: VHAL is not running");
+ return;
+ }
+ dumpAndKillAllProcesses(processIds, false);
+}
+
+std::string WatchdogProcessService::ClientInfo::toString() {
+ std::string buffer;
+ StringAppendF(&buffer, "pid = %d, userId = %d, type = %s", pid, userId,
+ type == Regular ? "Regular" : "Mediator");
+ return buffer;
+}
+
+WatchdogProcessService::BinderDeathRecipient::BinderDeathRecipient(
+ const sp<WatchdogProcessService>& service) :
+ mService(service) {}
+
+void WatchdogProcessService::BinderDeathRecipient::binderDied(const wp<IBinder>& who) {
+ mService->handleBinderDeath(who);
+}
+
+WatchdogProcessService::HidlDeathRecipient::HidlDeathRecipient(
+ const sp<WatchdogProcessService>& service) :
+ mService(service) {}
+
+void WatchdogProcessService::HidlDeathRecipient::serviceDied(uint64_t /*cookie*/,
+ const wp<IBase>& who) {
+ mService->handleHidlDeath(who);
+}
+
+WatchdogProcessService::PropertyChangeListener::PropertyChangeListener(
+ const sp<WatchdogProcessService>& service) :
+ mService(service) {}
+
+Return<void> WatchdogProcessService::PropertyChangeListener::onPropertyEvent(
+ const hidl_vec<VehiclePropValue>& propValues) {
+ for (const auto& value : propValues) {
+ if (value.prop == static_cast<int32_t>(VehicleProperty::VHAL_HEARTBEAT)) {
+ mService->updateVhalHeartBeat(value.value.int64Values[0]);
+ break;
+ }
+ }
+ return Return<void>();
+}
+
+Return<void> WatchdogProcessService::PropertyChangeListener::onPropertySet(
+ const VehiclePropValue& /*propValue*/) {
+ return Return<void>();
+}
+
+Return<void> WatchdogProcessService::PropertyChangeListener::onPropertySetError(
+ StatusCode /*status*/, int32_t /*propId*/, int32_t /*areaId*/) {
+ return Return<void>();
+}
+
+WatchdogProcessService::MessageHandlerImpl::MessageHandlerImpl(
+ const sp<WatchdogProcessService>& service) :
+ mService(service) {}
+
+void WatchdogProcessService::MessageHandlerImpl::handleMessage(const Message& message) {
+ switch (message.what) {
+ case static_cast<int>(TimeoutLength::TIMEOUT_CRITICAL):
+ case static_cast<int>(TimeoutLength::TIMEOUT_MODERATE):
+ case static_cast<int>(TimeoutLength::TIMEOUT_NORMAL):
+ mService->doHealthCheck(message.what);
+ break;
+ case MSG_VHAL_WATCHDOG_ALIVE:
+ mService->reportWatchdogAliveToVhal();
+ break;
+ case MSG_VHAL_HEALTH_CHECK:
+ mService->checkVhalHealth();
+ break;
+ default:
+ ALOGW("Unknown message: %d", message.what);
+ }
+}
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
diff --git a/cpp/watchdog/server/src/WatchdogProcessService.h b/cpp/watchdog/server/src/WatchdogProcessService.h
new file mode 100644
index 0000000..52e439a
--- /dev/null
+++ b/cpp/watchdog/server/src/WatchdogProcessService.h
@@ -0,0 +1,210 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#ifndef CPP_WATCHDOG_SERVER_SRC_WATCHDOGPROCESSSERVICE_H_
+#define CPP_WATCHDOG_SERVER_SRC_WATCHDOGPROCESSSERVICE_H_
+
+#include <android-base/result.h>
+#include <android/automotive/watchdog/BnCarWatchdog.h>
+#include <android/automotive/watchdog/PowerCycle.h>
+#include <android/automotive/watchdog/UserState.h>
+#include <android/hardware/automotive/vehicle/2.0/IVehicle.h>
+#include <binder/IBinder.h>
+#include <binder/Status.h>
+#include <cutils/multiuser.h>
+#include <utils/Looper.h>
+#include <utils/Mutex.h>
+#include <utils/String16.h>
+#include <utils/StrongPointer.h>
+#include <utils/Vector.h>
+
+#include <unordered_map>
+#include <unordered_set>
+#include <vector>
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+class WatchdogProcessService : public android::RefBase {
+public:
+ explicit WatchdogProcessService(const android::sp<Looper>& handlerLooper);
+
+ virtual android::base::Result<void> dump(int fd, const android::Vector<String16>& args);
+
+ virtual binder::Status registerClient(const android::sp<ICarWatchdogClient>& client,
+ TimeoutLength timeout);
+ virtual binder::Status unregisterClient(const sp<ICarWatchdogClient>& client);
+ virtual binder::Status registerMediator(const sp<ICarWatchdogClient>& mediator);
+ virtual binder::Status unregisterMediator(const sp<ICarWatchdogClient>& mediator);
+ virtual binder::Status registerMonitor(const sp<ICarWatchdogMonitor>& monitor);
+ virtual binder::Status unregisterMonitor(const sp<ICarWatchdogMonitor>& monitor);
+ virtual binder::Status tellClientAlive(const sp<ICarWatchdogClient>& client, int32_t sessionId);
+ virtual binder::Status tellMediatorAlive(const sp<ICarWatchdogClient>& mediator,
+ const std::vector<int32_t>& clientsNotResponding,
+ int32_t sessionId);
+ virtual binder::Status tellDumpFinished(const android::sp<ICarWatchdogMonitor>& monitor,
+ int32_t pid);
+ virtual binder::Status notifyPowerCycleChange(PowerCycle cycle);
+ virtual binder::Status notifyUserStateChange(userid_t userId, UserState state);
+
+ android::base::Result<void> start();
+ void terminate();
+ void doHealthCheck(int what);
+
+private:
+ enum ClientType {
+ Regular,
+ Mediator,
+ };
+
+ struct ClientInfo {
+ ClientInfo(const android::sp<ICarWatchdogClient>& client, pid_t pid, userid_t userId,
+ ClientType type) :
+ client(client),
+ pid(pid),
+ userId(userId),
+ type(type) {}
+ std::string toString();
+
+ android::sp<ICarWatchdogClient> client;
+ pid_t pid;
+ userid_t userId;
+ int sessionId;
+ ClientType type;
+ };
+
+ struct HeartBeat {
+ int64_t eventTime;
+ int64_t value;
+ };
+
+ typedef std::unordered_map<int, ClientInfo> PingedClientMap;
+
+ class BinderDeathRecipient : public android::IBinder::DeathRecipient {
+ public:
+ explicit BinderDeathRecipient(const android::sp<WatchdogProcessService>& service);
+
+ void binderDied(const android::wp<android::IBinder>& who) override;
+
+ private:
+ android::sp<WatchdogProcessService> mService;
+ };
+
+ class HidlDeathRecipient : public android::hardware::hidl_death_recipient {
+ public:
+ explicit HidlDeathRecipient(const android::sp<WatchdogProcessService>& service);
+
+ void serviceDied(uint64_t cookie,
+ const android::wp<android::hidl::base::V1_0::IBase>& who) override;
+
+ private:
+ android::sp<WatchdogProcessService> mService;
+ };
+
+ class PropertyChangeListener :
+ public android::hardware::automotive::vehicle::V2_0::IVehicleCallback {
+ public:
+ explicit PropertyChangeListener(const android::sp<WatchdogProcessService>& service);
+
+ android::hardware::Return<void> onPropertyEvent(
+ const android::hardware::hidl_vec<
+ android::hardware::automotive::vehicle::V2_0::VehiclePropValue>& propValues)
+ override;
+ android::hardware::Return<void> onPropertySet(
+ const android::hardware::automotive::vehicle::V2_0::VehiclePropValue& propValue)
+ override;
+ android::hardware::Return<void> onPropertySetError(
+ android::hardware::automotive::vehicle::V2_0::StatusCode errorCode, int32_t propId,
+ int32_t areaId) override;
+
+ private:
+ android::sp<WatchdogProcessService> mService;
+ };
+
+ class MessageHandlerImpl : public MessageHandler {
+ public:
+ explicit MessageHandlerImpl(const android::sp<WatchdogProcessService>& service);
+
+ void handleMessage(const Message& message) override;
+
+ private:
+ android::sp<WatchdogProcessService> mService;
+ };
+
+private:
+ binder::Status registerClientLocked(const android::sp<ICarWatchdogClient>& client,
+ TimeoutLength timeout, ClientType clientType);
+ binder::Status unregisterClientLocked(const std::vector<TimeoutLength>& timeouts,
+ android::sp<IBinder> binder, ClientType clientType);
+ bool isRegisteredLocked(const android::sp<ICarWatchdogClient>& client);
+ binder::Status tellClientAliveLocked(const android::sp<ICarWatchdogClient>& client,
+ int32_t sessionId);
+ android::base::Result<void> startHealthCheckingLocked(TimeoutLength timeout);
+ android::base::Result<void> dumpAndKillClientsIfNotResponding(TimeoutLength timeout);
+ android::base::Result<void> dumpAndKillAllProcesses(
+ const std::vector<int32_t>& processesNotResponding, bool reportToVhal);
+ int32_t getNewSessionId();
+ bool isWatchdogEnabled();
+ android::base::Result<void> updateVhal(
+ const android::hardware::automotive::vehicle::V2_0::VehiclePropValue& value);
+ android::base::Result<void> connectToVhalLocked();
+ void subscribeToVhalHeartBeatLocked();
+ void reportWatchdogAliveToVhal();
+ void reportTerminatedProcessToVhal(const std::vector<int32_t>& processesNotResponding);
+ android::base::Result<std::string> readProcCmdLine(int32_t pid);
+ void handleBinderDeath(const android::wp<android::IBinder>& who);
+ void handleHidlDeath(const android::wp<android::hidl::base::V1_0::IBase>& who);
+ void queryVhalPropertiesLocked();
+ bool isVhalPropertySupportedLocked(
+ android::hardware::automotive::vehicle::V2_0::VehicleProperty propId);
+ void updateVhalHeartBeat(int64_t value);
+ void checkVhalHealth();
+ void terminateVhal();
+
+ using Processor =
+ std::function<void(std::vector<ClientInfo>&, std::vector<ClientInfo>::const_iterator)>;
+ bool findClientAndProcessLocked(const std::vector<TimeoutLength> timeouts,
+ const android::sp<android::IBinder> binder,
+ const Processor& processor);
+
+private:
+ android::sp<Looper> mHandlerLooper;
+ android::sp<MessageHandlerImpl> mMessageHandler;
+ android::Mutex mMutex;
+ std::unordered_map<TimeoutLength, std::vector<ClientInfo>> mClients GUARDED_BY(mMutex);
+ std::unordered_map<TimeoutLength, PingedClientMap> mPingedClients GUARDED_BY(mMutex);
+ std::unordered_set<userid_t> mStoppedUserIds GUARDED_BY(mMutex);
+ android::sp<ICarWatchdogMonitor> mMonitor GUARDED_BY(mMutex);
+ bool mWatchdogEnabled GUARDED_BY(mMutex);
+ // mLastSessionId is accessed only within main thread. No need for mutual-exclusion.
+ int32_t mLastSessionId;
+ bool mServiceStarted;
+ android::sp<android::hardware::automotive::vehicle::V2_0::IVehicle> mVhalService
+ GUARDED_BY(mMutex);
+ android::sp<BinderDeathRecipient> mBinderDeathRecipient;
+ android::sp<HidlDeathRecipient> mHidlDeathRecipient;
+ std::unordered_set<android::hardware::automotive::vehicle::V2_0::VehicleProperty>
+ mNotSupportedVhalProperties;
+ android::sp<PropertyChangeListener> mPropertyChangeListener;
+ HeartBeat mVhalHeartBeat GUARDED_BY(mMutex);
+};
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
+
+#endif // CPP_WATCHDOG_SERVER_SRC_WATCHDOGPROCESSSERVICE_H_
diff --git a/watchdog/server/src/main.cpp b/cpp/watchdog/server/src/main.cpp
similarity index 100%
rename from watchdog/server/src/main.cpp
rename to cpp/watchdog/server/src/main.cpp
diff --git a/cpp/watchdog/server/src/utils/PackageNameResolver.cpp b/cpp/watchdog/server/src/utils/PackageNameResolver.cpp
new file mode 100644
index 0000000..f4e4980
--- /dev/null
+++ b/cpp/watchdog/server/src/utils/PackageNameResolver.cpp
@@ -0,0 +1,155 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#define LOG_TAG "carwatchdogd"
+
+#include "PackageNameResolver.h"
+
+#include <binder/IServiceManager.h>
+#include <cutils/android_filesystem_config.h>
+#include <pwd.h>
+
+#include <inttypes.h>
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+using android::defaultServiceManager;
+using android::IBinder;
+using android::IServiceManager;
+using android::sp;
+using android::base::Error;
+using android::base::Result;
+using android::content::pm::IPackageManagerNative;
+
+static constexpr const char* kPackageNativeManager = "package_native";
+
+sp<PackageNameResolver> PackageNameResolver::sInstance = nullptr;
+
+sp<PackageNameResolver> PackageNameResolver::getInstance() {
+ if (sInstance == nullptr) {
+ sInstance = new PackageNameResolver();
+ }
+ return sInstance;
+}
+
+void PackageNameResolver::terminate() {
+ sInstance.clear();
+}
+
+PackageNameResolver::~PackageNameResolver() {
+ if (mPackageManager != nullptr) {
+ IInterface::asBinder(mPackageManager)
+ ->unlinkToDeath(static_cast<IBinder::DeathRecipient*>(this));
+ }
+}
+
+void PackageNameResolver::binderDied(const android::wp<IBinder>& /*who*/) {
+ ALOGI("%s binder died", kPackageNativeManager);
+ std::unique_lock write_lock(mRWMutex);
+ IInterface::asBinder(mPackageManager)
+ ->unlinkToDeath(static_cast<IBinder::DeathRecipient*>(this));
+ mPackageManager = nullptr;
+}
+
+std::unordered_map<uid_t, std::string> PackageNameResolver::resolveUids(
+ const std::unordered_set<uid_t>& uids) {
+ std::unordered_map<uid_t, std::string> uidToPackageNameMapping;
+ std::vector<int32_t> missingAppUids;
+ std::vector<uid_t> missingNativeUids;
+ {
+ std::shared_lock read_lock(mRWMutex);
+ for (const auto& uid : uids) {
+ if (mUidToPackageNameMapping.find(uid) != mUidToPackageNameMapping.end()) {
+ uidToPackageNameMapping[uid] = mUidToPackageNameMapping.at(uid);
+ } else if (uid >= AID_APP_START) {
+ missingAppUids.emplace_back(static_cast<int32_t>(uid));
+ } else {
+ missingNativeUids.emplace_back(uid);
+ }
+ }
+ }
+
+ if (missingAppUids.empty() && missingNativeUids.empty()) {
+ return uidToPackageNameMapping;
+ }
+
+ std::unique_lock write_lock(mRWMutex);
+ for (const auto& uid : missingNativeUids) {
+ // System/native UIDs.
+ passwd* usrpwd = getpwuid(uid);
+ if (!usrpwd) {
+ continue;
+ }
+ uidToPackageNameMapping[uid] = std::string(usrpwd->pw_name);
+ mUidToPackageNameMapping[uid] = std::string(usrpwd->pw_name);
+ }
+
+ if (missingAppUids.empty()) {
+ return uidToPackageNameMapping;
+ }
+
+ // Fetch package native manager binder instance only on noticing missing application UIDs as
+ // this indicates the package manager binder is already initialized. Thus the CarWatchdog daemon
+ // doesn't have to wait for the package manager binder during boot up.
+ auto ret = initializePackageManagerLocked();
+ if (!ret.ok()) {
+ ALOGE("Failed to initialize %s binder instance: %s", kPackageNativeManager,
+ ret.error().message().c_str());
+ return uidToPackageNameMapping;
+ }
+
+ std::vector<std::string> packageNames;
+ const binder::Status& status = mPackageManager->getNamesForUids(missingAppUids, &packageNames);
+ if (!status.isOk()) {
+ ALOGE("Failed to get package name mapping from %s: %s", kPackageNativeManager,
+ status.exceptionMessage().c_str());
+ return uidToPackageNameMapping;
+ }
+
+ for (size_t i = 0; i < missingAppUids.size(); i++) {
+ const int32_t uid = missingAppUids[i];
+ const std::string& packageName = packageNames[i];
+ if (!packageName.empty()) {
+ uidToPackageNameMapping[static_cast<uid_t>(uid)] = packageName;
+ mUidToPackageNameMapping[static_cast<uid_t>(uid)] = packageName;
+ }
+ }
+ return uidToPackageNameMapping;
+}
+
+Result<void> PackageNameResolver::initializePackageManagerLocked() {
+ if (mPackageManager != nullptr) {
+ return {};
+ }
+ const sp<IServiceManager> sm = defaultServiceManager();
+ if (sm == nullptr) {
+ return Error() << "Failed to retrieve defaultServiceManager";
+ }
+ sp<IBinder> binder = sm->checkService(String16(kPackageNativeManager));
+ if (binder == nullptr) {
+ return Error() << "Failed to retrieve " << kPackageNativeManager << " service";
+ }
+ ALOGI("Initialized %s binder", kPackageNativeManager);
+ mPackageManager = interface_cast<IPackageManagerNative>(binder);
+ binder->linkToDeath(static_cast<IBinder::DeathRecipient*>(this));
+ return {};
+}
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
diff --git a/cpp/watchdog/server/src/utils/PackageNameResolver.h b/cpp/watchdog/server/src/utils/PackageNameResolver.h
new file mode 100644
index 0000000..98948a1
--- /dev/null
+++ b/cpp/watchdog/server/src/utils/PackageNameResolver.h
@@ -0,0 +1,95 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#ifndef CPP_WATCHDOG_SERVER_SRC_UTILS_PACKAGENAMERESOLVER_H_
+#define CPP_WATCHDOG_SERVER_SRC_UTILS_PACKAGENAMERESOLVER_H_
+
+#include <android-base/result.h>
+#include <android/content/pm/IPackageManagerNative.h>
+#include <binder/IBinder.h>
+#include <gtest/gtest_prod.h>
+#include <utils/Mutex.h>
+#include <utils/StrongPointer.h>
+
+#include <shared_mutex>
+#include <unordered_map>
+#include <unordered_set>
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+// Forward declaration for testing use only.
+namespace internal {
+
+class PackageNameResolverPeer;
+
+} // namespace internal
+
+// PackageNameResolver maintains a cache of the UID to PackageName mapping in the CarWatchdog
+// daemon. PackageNameResolver is a singleton and must be accessed only via the public static
+// methods.
+// TODO(b/158131194): Extend IUidObserver in WatchdogBinderMediator and use the onUidGone API to
+// keep the local mapping cache up-to-date.
+class PackageNameResolver : public IBinder::DeathRecipient {
+public:
+ // Initializes the PackageNameResolver's singleton instance only on the first call. Main thread
+ // should make the first call as this method doesn't offer multi-threading protection.
+ static sp<PackageNameResolver> getInstance();
+
+ static void terminate();
+
+ // Resolves the given |uids| and returns a mapping of uids to package names. If the mapping
+ // doesn't exist in the local cache, queries the package manager for application uids and
+ // getpwuid for native uids. Logs any error observed during this process.
+ // TODO(b/168155311): For shared UIDs, fetch the package names using PackageManager's java API
+ // getPackagesForUid with the help of CarWatchdogService.
+ std::unordered_map<uid_t, std::string> resolveUids(const std::unordered_set<uid_t>& uids);
+
+ // If the local copy of the package manager binder instance is initialized, un-links itself from
+ // the binder death notification.
+ ~PackageNameResolver();
+
+ // DeathRecipient interface.
+ void binderDied(const android::wp<IBinder>& who) override;
+
+private:
+ // PackageNameResolver instance can only be obtained via |getInstance|.
+ PackageNameResolver() {}
+
+ // Initializes the local copy of package manager binder instance and links itself to the binder
+ // death.
+ android::base::Result<void> initializePackageManagerLocked();
+
+ // Singleton instance.
+ static android::sp<PackageNameResolver> sInstance;
+
+ mutable std::shared_mutex mRWMutex;
+ android::sp<android::content::pm::IPackageManagerNative> mPackageManager GUARDED_BY(mRWMutex);
+ std::unordered_map<uid_t, std::string> mUidToPackageNameMapping GUARDED_BY(mRWMutex);
+
+ // For unit tests.
+ friend class internal::PackageNameResolverPeer;
+ FRIEND_TEST(PackageNameResolverTest, TestResolvesNativeUid);
+ FRIEND_TEST(PackageNameResolverTest, TestResolvesApplicationUidFromPackageManager);
+ FRIEND_TEST(PackageNameResolverTest, TestResolvesApplicationUidFromLocalCache);
+};
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
+
+#endif // CPP_WATCHDOG_SERVER_SRC_UTILS_PACKAGENAMERESOLVER_H_
diff --git a/watchdog/server/sysprop/Android.bp b/cpp/watchdog/server/sysprop/Android.bp
similarity index 100%
rename from watchdog/server/sysprop/Android.bp
rename to cpp/watchdog/server/sysprop/Android.bp
diff --git a/watchdog/server/sysprop/WatchdogProperties.sysprop b/cpp/watchdog/server/sysprop/WatchdogProperties.sysprop
similarity index 100%
rename from watchdog/server/sysprop/WatchdogProperties.sysprop
rename to cpp/watchdog/server/sysprop/WatchdogProperties.sysprop
diff --git a/watchdog/server/sysprop/api/libwatchdog_properties-current.txt b/cpp/watchdog/server/sysprop/api/libwatchdog_properties-current.txt
similarity index 100%
rename from watchdog/server/sysprop/api/libwatchdog_properties-current.txt
rename to cpp/watchdog/server/sysprop/api/libwatchdog_properties-current.txt
diff --git a/watchdog/server/sysprop/api/libwatchdog_properties-latest.txt b/cpp/watchdog/server/sysprop/api/libwatchdog_properties-latest.txt
similarity index 100%
rename from watchdog/server/sysprop/api/libwatchdog_properties-latest.txt
rename to cpp/watchdog/server/sysprop/api/libwatchdog_properties-latest.txt
diff --git a/cpp/watchdog/server/tests/IoOveruseConfigsTest.cpp b/cpp/watchdog/server/tests/IoOveruseConfigsTest.cpp
new file mode 100644
index 0000000..9b03e1e
--- /dev/null
+++ b/cpp/watchdog/server/tests/IoOveruseConfigsTest.cpp
@@ -0,0 +1,307 @@
+/*
+ * Copyright 2020 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.
+ */
+
+#include "IoOveruseConfigs.h"
+
+#include <android-base/strings.h>
+#include <gmock/gmock.h>
+
+#include <inttypes.h>
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+namespace {
+
+using android::base::Join;
+using android::base::Result;
+using android::base::StringAppendF;
+using android::base::StringPrintf;
+
+bool isEqual(const ComponentSpecificConfig& l, const ComponentSpecificConfig& r) {
+ return l.generic == r.generic && l.perPackageThresholds == r.perPackageThresholds &&
+ l.safeToKillPackages == r.safeToKillPackages;
+}
+
+bool isEqual(const IoOveruseConfigs& l, const IoOveruseConfigs& r) {
+ return isEqual(l.systemConfig, r.systemConfig) && isEqual(l.vendorConfig, r.vendorConfig) &&
+ isEqual(l.thirdPartyConfig, r.thirdPartyConfig) &&
+ l.perCategoryThresholds == r.perCategoryThresholds &&
+ l.vendorPackagePrefixes == r.vendorPackagePrefixes &&
+ l.alertThresholds == r.alertThresholds;
+}
+
+std::string toString(const ComponentSpecificConfig& config) {
+ std::string output;
+ StringAppendF(&output, "\tComponent-level threshold: {%s}\n", toString(config.generic).c_str());
+ StringAppendF(&output, "\tPackage specific thresholds:\n");
+ for (const auto& it : config.perPackageThresholds) {
+ StringAppendF(&output, "\t%s\n", toString(it.second).c_str());
+ }
+ StringAppendF(&output, "\tSafe-to-kill packages: '%s'",
+ Join(config.safeToKillPackages, ",").c_str());
+ return output;
+}
+
+std::string toString(const IoOveruseAlertThreshold& threshold) {
+ return StringPrintf("aggregateDurationSecs=%" PRId64 ", triggerDurationSecs=%" PRId64
+ ", writtenBytes=%" PRId64,
+ threshold.aggregateDurationSecs, threshold.triggerDurationSecs,
+ threshold.writtenBytes);
+}
+
+std::string toString(const IoOveruseConfigs& configs) {
+ std::string output;
+ StringAppendF(&output, "System component config:\n%s\n",
+ toString(configs.systemConfig).c_str());
+ StringAppendF(&output, "Vendor component config:\n%s\n",
+ toString(configs.vendorConfig).c_str());
+ StringAppendF(&output, "Third-party component config:\n%s\n",
+ toString(configs.thirdPartyConfig).c_str());
+ StringAppendF(&output, "Category specific thresholds:\n");
+ for (const auto& it : configs.perCategoryThresholds) {
+ StringAppendF(&output, "\t%s\n", toString(it.second).c_str());
+ }
+ StringAppendF(&output, "Vendor package regex: '%s'\n",
+ Join(configs.vendorPackagePrefixes, ",").c_str());
+ StringAppendF(&output, "System-wide I/O overuse alert thresholds:\n");
+ for (const auto& it : configs.alertThresholds) {
+ StringAppendF(&output, "\t%s\n", toString(it).c_str());
+ }
+ return output;
+}
+
+PerStateIoOveruseThreshold toPerStateIoOveruseThreshold(std::string name, int64_t fgBytes,
+ int64_t bgBytes, int64_t garageModeBytes) {
+ PerStateIoOveruseThreshold threshold;
+ threshold.name = String16(String8(name.c_str()));
+ threshold.perStateWriteBytes.applicationForegroundBytes = fgBytes;
+ threshold.perStateWriteBytes.applicationBackgroundBytes = bgBytes;
+ threshold.perStateWriteBytes.systemGarageModeBytes = garageModeBytes;
+ return threshold;
+}
+
+PerStateIoOveruseThreshold toPerStateIoOveruseThreshold(ComponentType type, int64_t fgBytes,
+ int64_t bgBytes, int64_t garageModeBytes) {
+ return toPerStateIoOveruseThreshold(toString(type), fgBytes, bgBytes, garageModeBytes);
+}
+
+IoOveruseAlertThreshold toIoOveruseAlertThreshold(int64_t aggregateDurationSecs,
+ int64_t triggerDurationSecs,
+ int64_t writtenBytes) {
+ IoOveruseAlertThreshold threshold;
+ threshold.aggregateDurationSecs = aggregateDurationSecs;
+ threshold.triggerDurationSecs = triggerDurationSecs;
+ threshold.writtenBytes = writtenBytes;
+ return threshold;
+}
+
+std::vector<android::String16> toString16Vector(std::vector<std::string> values) {
+ std::vector<android::String16> output;
+ for (const auto v : values) {
+ output.emplace_back(String16(String8(v.c_str())));
+ }
+ return output;
+}
+
+} // namespace
+
+TEST(IoOveruseConfigsTest, TestUpdateWithValidConfigs) {
+ IoOveruseConfiguration systemComponentConfig;
+ systemComponentConfig.componentLevelThresholds =
+ toPerStateIoOveruseThreshold(ComponentType::SYSTEM, 200, 100, 500);
+ systemComponentConfig.packageSpecificThresholds =
+ {toPerStateIoOveruseThreshold("systemPackageA", 600, 400, 1000),
+ toPerStateIoOveruseThreshold("systemPackageB", 1200, 800, 1500)};
+ systemComponentConfig.safeToKillPackages = toString16Vector({"systemPackageA"});
+ systemComponentConfig.systemWideThresholds = {toIoOveruseAlertThreshold(5, 20, 200),
+ toIoOveruseAlertThreshold(30, 600, 40000)};
+
+ IoOveruseConfiguration vendorComponentConfig;
+ vendorComponentConfig.componentLevelThresholds =
+ toPerStateIoOveruseThreshold(ComponentType::VENDOR, 100, 50, 900);
+ vendorComponentConfig.packageSpecificThresholds =
+ {toPerStateIoOveruseThreshold("vendorPackageA", 800, 300, 500),
+ toPerStateIoOveruseThreshold("vendorPkgB", 1600, 600, 1000)};
+ vendorComponentConfig.safeToKillPackages = toString16Vector({"vendorPackageA"});
+ vendorComponentConfig.vendorPackagePrefixes = toString16Vector({"vendorPackage", "vendorPkg"});
+ vendorComponentConfig.categorySpecificThresholds = {toPerStateIoOveruseThreshold("MAPS", 600,
+ 400, 1000),
+ toPerStateIoOveruseThreshold("MEDIA", 1200,
+ 800, 1500)};
+
+ IoOveruseConfiguration thirdPartyComponentConfig;
+ thirdPartyComponentConfig.componentLevelThresholds =
+ toPerStateIoOveruseThreshold(ComponentType::THIRD_PARTY, 300, 150, 1900);
+
+ const IoOveruseConfigs expected = {
+ .systemConfig =
+ {.generic = systemComponentConfig.componentLevelThresholds,
+ .perPackageThresholds =
+ {{"systemPackageA",
+ toPerStateIoOveruseThreshold("systemPackageA", 600, 400, 1000)},
+ {"systemPackageB",
+ toPerStateIoOveruseThreshold("systemPackageB", 1200, 800, 1500)}},
+ .safeToKillPackages = {"systemPackageA"}},
+ .vendorConfig =
+ {.generic = vendorComponentConfig.componentLevelThresholds,
+ .perPackageThresholds =
+ {{"vendorPackageA",
+ toPerStateIoOveruseThreshold("vendorPackageA", 800, 300, 500)},
+ {"vendorPkgB",
+ toPerStateIoOveruseThreshold("vendorPkgB", 1600, 600, 1000)}},
+ .safeToKillPackages = {"vendorPackageA"}},
+ .thirdPartyConfig = {.generic = thirdPartyComponentConfig.componentLevelThresholds},
+ .perCategoryThresholds = {{ApplicationCategoryType::MAPS,
+ toPerStateIoOveruseThreshold("MAPS", 600, 400, 1000)},
+ {ApplicationCategoryType::MEDIA,
+ toPerStateIoOveruseThreshold("MEDIA", 1200, 800, 1500)}},
+ .vendorPackagePrefixes = {"vendorPackage", "vendorPkg"},
+ .alertThresholds = {toIoOveruseAlertThreshold(5, 20, 200),
+ toIoOveruseAlertThreshold(30, 600, 40000)},
+ };
+
+ IoOveruseConfigs actual;
+ ASSERT_RESULT_OK(actual.update(ComponentType::SYSTEM, systemComponentConfig));
+ ASSERT_RESULT_OK(actual.update(ComponentType::VENDOR, vendorComponentConfig));
+ ASSERT_RESULT_OK(actual.update(ComponentType::THIRD_PARTY, thirdPartyComponentConfig));
+ ASSERT_TRUE(isEqual(actual, expected)) << "Expected:\n"
+ << toString(expected) << "\nActual:\n"
+ << toString(actual);
+}
+
+TEST(IoOveruseConfigsTest, TestFailsUpdateOnInvalidComponentName) {
+ IoOveruseConfiguration config;
+ config.componentLevelThresholds = toPerStateIoOveruseThreshold("random name", 200, 100, 500);
+ const IoOveruseConfigs expected = {};
+
+ IoOveruseConfigs actual;
+ ASSERT_FALSE(actual.update(ComponentType::SYSTEM, config).ok());
+
+ ASSERT_TRUE(isEqual(actual, expected)) << "Expected:\n"
+ << toString(expected) << "\nActual:\n"
+ << toString(actual);
+
+ ASSERT_FALSE(actual.update(ComponentType::VENDOR, config).ok());
+
+ ASSERT_TRUE(isEqual(actual, expected)) << "Expected:\n"
+ << toString(expected) << "\nActual:\n"
+ << toString(actual);
+
+ ASSERT_FALSE(actual.update(ComponentType::THIRD_PARTY, config).ok());
+
+ ASSERT_TRUE(isEqual(actual, expected)) << "Expected:\n"
+ << toString(expected) << "\nActual:\n"
+ << toString(actual);
+}
+
+TEST(IoOveruseConfigsTest, TestIgnoresNonUpdatableConfigsBySystemComponent) {
+ IoOveruseConfiguration config;
+ config.componentLevelThresholds =
+ toPerStateIoOveruseThreshold(ComponentType::SYSTEM, 200, 100, 500);
+ config.packageSpecificThresholds = {toPerStateIoOveruseThreshold("systemPackageA", 600, 400,
+ 1000),
+ toPerStateIoOveruseThreshold("systemPackageB", 1200, 800,
+ 1500)};
+ config.safeToKillPackages = toString16Vector({"systemPackageA"});
+ config.vendorPackagePrefixes = toString16Vector({"vendorPackage"});
+ config.categorySpecificThresholds = {toPerStateIoOveruseThreshold("MAPS", 600, 400, 1000),
+ toPerStateIoOveruseThreshold("MEDIA", 1200, 800, 1500)};
+ config.systemWideThresholds = {toIoOveruseAlertThreshold(5, 20, 200),
+ toIoOveruseAlertThreshold(30, 600, 40000)};
+ const IoOveruseConfigs expected = {
+ .systemConfig =
+ {.generic = config.componentLevelThresholds,
+ .perPackageThresholds =
+ {{"systemPackageA",
+ toPerStateIoOveruseThreshold("systemPackageA", 600, 400, 1000)},
+ {"systemPackageB",
+ toPerStateIoOveruseThreshold("systemPackageB", 1200, 800, 1500)}},
+ .safeToKillPackages = {"systemPackageA"}},
+ .alertThresholds = {toIoOveruseAlertThreshold(5, 20, 200),
+ toIoOveruseAlertThreshold(30, 600, 40000)},
+ };
+ IoOveruseConfigs actual;
+ ASSERT_RESULT_OK(actual.update(ComponentType::SYSTEM, config));
+ ASSERT_TRUE(isEqual(actual, expected)) << "Expected:\n"
+ << toString(expected) << "\nActual:\n"
+ << toString(actual);
+}
+
+TEST(IoOveruseConfigsTest, TestIgnoresNonUpdatableConfigsByVendorComponent) {
+ IoOveruseConfiguration config;
+ config.componentLevelThresholds =
+ toPerStateIoOveruseThreshold(ComponentType::VENDOR, 100, 50, 900);
+ config.packageSpecificThresholds =
+ {toPerStateIoOveruseThreshold("vendorPackageA", 800, 300, 500),
+ toPerStateIoOveruseThreshold("systemPackageB", 1600, 600, 1000),
+ toPerStateIoOveruseThreshold("vendorPackageC", 2000, 700, 1100)};
+ config.safeToKillPackages = toString16Vector({"vendorPackageA"});
+ config.vendorPackagePrefixes = toString16Vector({"vendorPackage"});
+ config.categorySpecificThresholds = {toPerStateIoOveruseThreshold("MAPS", 600, 400, 1000),
+ toPerStateIoOveruseThreshold("MEDIA", 1200, 800, 1500)};
+ config.systemWideThresholds = {toIoOveruseAlertThreshold(5, 20, 200),
+ toIoOveruseAlertThreshold(30, 600, 40000)};
+ const IoOveruseConfigs expected = {
+ .vendorConfig =
+ {.generic = config.componentLevelThresholds,
+ .perPackageThresholds =
+ {{"vendorPackageA",
+ toPerStateIoOveruseThreshold("vendorPackageA", 800, 300, 500)},
+ {"vendorPackageC",
+ toPerStateIoOveruseThreshold("vendorPackageC", 2000, 700, 1100)}},
+ .safeToKillPackages = {"vendorPackageA"}},
+ .perCategoryThresholds = {{ApplicationCategoryType::MAPS,
+ toPerStateIoOveruseThreshold("MAPS", 600, 400, 1000)},
+ {ApplicationCategoryType::MEDIA,
+ toPerStateIoOveruseThreshold("MEDIA", 1200, 800, 1500)}},
+ .vendorPackagePrefixes = {"vendorPackage"},
+ };
+ IoOveruseConfigs actual;
+ ASSERT_RESULT_OK(actual.update(ComponentType::VENDOR, config));
+ ASSERT_TRUE(isEqual(actual, expected)) << "Expected:\n"
+ << toString(expected) << "\nActual:\n"
+ << toString(actual);
+}
+
+TEST(IoOveruseConfigsTest, TestIgnoresNonUpdatableConfigsByThirdPartyComponent) {
+ IoOveruseConfiguration config;
+ config.componentLevelThresholds =
+ toPerStateIoOveruseThreshold(ComponentType::THIRD_PARTY, 300, 150, 1900);
+ config.packageSpecificThresholds = {toPerStateIoOveruseThreshold("vendorPackageA", 800, 300,
+ 500),
+ toPerStateIoOveruseThreshold("systemPackageB", 1600, 600,
+ 1000)};
+ config.safeToKillPackages = toString16Vector({"vendorPackageA", "systemPackageC"});
+ config.vendorPackagePrefixes = toString16Vector({"vendorPackage"});
+ config.categorySpecificThresholds = {toPerStateIoOveruseThreshold("MAPS", 600, 400, 1000),
+ toPerStateIoOveruseThreshold("MEDIA", 1200, 800, 1500)};
+ config.systemWideThresholds = {toIoOveruseAlertThreshold(5, 20, 200),
+ toIoOveruseAlertThreshold(30, 600, 40000)};
+ const IoOveruseConfigs expected = {
+ .thirdPartyConfig = {.generic = config.componentLevelThresholds},
+ };
+ IoOveruseConfigs actual;
+ ASSERT_RESULT_OK(actual.update(ComponentType::THIRD_PARTY, config));
+ ASSERT_TRUE(isEqual(actual, expected)) << "Expected:\n"
+ << toString(expected) << "\nActual:\n"
+ << toString(actual);
+}
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
diff --git a/cpp/watchdog/server/tests/IoPerfCollectionTest.cpp b/cpp/watchdog/server/tests/IoPerfCollectionTest.cpp
new file mode 100644
index 0000000..fafcbba
--- /dev/null
+++ b/cpp/watchdog/server/tests/IoPerfCollectionTest.cpp
@@ -0,0 +1,703 @@
+/*
+ * Copyright 2020 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.
+ */
+
+#include "IoPerfCollection.h"
+
+#include "MockProcPidStat.h"
+#include "MockProcStat.h"
+#include "MockUidIoStats.h"
+#include "utils/PackageNameResolver.h"
+
+#include <WatchdogProperties.sysprop.h>
+#include <android-base/file.h>
+#include <gmock/gmock.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <string>
+#include <vector>
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+using android::base::Error;
+using android::base::ReadFdToString;
+using android::base::Result;
+using ::testing::Return;
+
+namespace {
+
+bool isEqual(const UidIoPerfData& lhs, const UidIoPerfData& rhs) {
+ if (lhs.topNReads.size() != rhs.topNReads.size() ||
+ lhs.topNWrites.size() != rhs.topNWrites.size()) {
+ return false;
+ }
+ for (int i = 0; i < METRIC_TYPES; ++i) {
+ for (int j = 0; j < UID_STATES; ++j) {
+ if (lhs.total[i][j] != rhs.total[i][j]) {
+ return false;
+ }
+ }
+ }
+ auto comp = [&](const UidIoPerfData::Stats& l, const UidIoPerfData::Stats& r) -> bool {
+ bool isEqual = l.userId == r.userId && l.packageName == r.packageName;
+ for (int i = 0; i < UID_STATES; ++i) {
+ isEqual &= l.bytes[i] == r.bytes[i] && l.fsync[i] == r.fsync[i];
+ }
+ return isEqual;
+ };
+ return lhs.topNReads.size() == rhs.topNReads.size() &&
+ std::equal(lhs.topNReads.begin(), lhs.topNReads.end(), rhs.topNReads.begin(), comp) &&
+ lhs.topNWrites.size() == rhs.topNWrites.size() &&
+ std::equal(lhs.topNWrites.begin(), lhs.topNWrites.end(), rhs.topNWrites.begin(), comp);
+}
+
+bool isEqual(const SystemIoPerfData& lhs, const SystemIoPerfData& rhs) {
+ return lhs.cpuIoWaitTime == rhs.cpuIoWaitTime && lhs.totalCpuTime == rhs.totalCpuTime &&
+ lhs.ioBlockedProcessesCnt == rhs.ioBlockedProcessesCnt &&
+ lhs.totalProcessesCnt == rhs.totalProcessesCnt;
+}
+
+bool isEqual(const ProcessIoPerfData& lhs, const ProcessIoPerfData& rhs) {
+ if (lhs.topNIoBlockedUids.size() != rhs.topNIoBlockedUids.size() ||
+ lhs.topNMajorFaultUids.size() != rhs.topNMajorFaultUids.size() ||
+ lhs.totalMajorFaults != rhs.totalMajorFaults ||
+ lhs.majorFaultsPercentChange != rhs.majorFaultsPercentChange) {
+ return false;
+ }
+ auto comp = [&](const ProcessIoPerfData::UidStats& l,
+ const ProcessIoPerfData::UidStats& r) -> bool {
+ auto comp = [&](const ProcessIoPerfData::UidStats::ProcessStats& l,
+ const ProcessIoPerfData::UidStats::ProcessStats& r) -> bool {
+ return l.comm == r.comm && l.count == r.count;
+ };
+ return l.userId == r.userId && l.packageName == r.packageName && l.count == r.count &&
+ l.topNProcesses.size() == r.topNProcesses.size() &&
+ std::equal(l.topNProcesses.begin(), l.topNProcesses.end(), r.topNProcesses.begin(),
+ comp);
+ };
+ return lhs.topNIoBlockedUids.size() == lhs.topNIoBlockedUids.size() &&
+ std::equal(lhs.topNIoBlockedUids.begin(), lhs.topNIoBlockedUids.end(),
+ rhs.topNIoBlockedUids.begin(), comp) &&
+ lhs.topNIoBlockedUidsTotalTaskCnt.size() == rhs.topNIoBlockedUidsTotalTaskCnt.size() &&
+ std::equal(lhs.topNIoBlockedUidsTotalTaskCnt.begin(),
+ lhs.topNIoBlockedUidsTotalTaskCnt.end(),
+ rhs.topNIoBlockedUidsTotalTaskCnt.begin()) &&
+ lhs.topNMajorFaultUids.size() == rhs.topNMajorFaultUids.size() &&
+ std::equal(lhs.topNMajorFaultUids.begin(), lhs.topNMajorFaultUids.end(),
+ rhs.topNMajorFaultUids.begin(), comp);
+}
+
+bool isEqual(const IoPerfRecord& lhs, const IoPerfRecord& rhs) {
+ return isEqual(lhs.uidIoPerfData, rhs.uidIoPerfData) &&
+ isEqual(lhs.systemIoPerfData, rhs.systemIoPerfData) &&
+ isEqual(lhs.processIoPerfData, rhs.processIoPerfData);
+}
+
+int countOccurrences(std::string str, std::string subStr) {
+ size_t pos = 0;
+ int occurrences = 0;
+ while ((pos = str.find(subStr, pos)) != std::string::npos) {
+ ++occurrences;
+ pos += subStr.length();
+ }
+ return occurrences;
+}
+
+} // namespace
+
+namespace internal {
+
+class IoPerfCollectionPeer {
+public:
+ explicit IoPerfCollectionPeer(sp<IoPerfCollection> collector) : collector(collector) {}
+ IoPerfCollectionPeer() = delete;
+ ~IoPerfCollectionPeer() { collector->terminate(); }
+
+ void setTopNStatsPerCategory(int value) { collector->mTopNStatsPerCategory = value; }
+
+ void setTopNStatsPerSubcategory(int value) { collector->mTopNStatsPerSubcategory = value; }
+
+ const CollectionInfo& getBoottimeCollectionInfo() {
+ Mutex::Autolock lock(collector->mMutex);
+ return collector->mBoottimeCollection;
+ }
+
+ const CollectionInfo& getPeriodicCollectionInfo() {
+ Mutex::Autolock lock(collector->mMutex);
+ return collector->mPeriodicCollection;
+ }
+
+ const CollectionInfo& getCustomCollectionInfo() {
+ Mutex::Autolock lock(collector->mMutex);
+ return collector->mCustomCollection;
+ }
+
+ sp<IoPerfCollection> collector;
+};
+
+class PackageNameResolverPeer {
+public:
+ explicit PackageNameResolverPeer(const std::unordered_map<uid_t, std::string>& mapping) {
+ PackageNameResolver::sInstance.clear();
+ PackageNameResolver::getInstance();
+ PackageNameResolver::sInstance->mUidToPackageNameMapping = mapping;
+ }
+};
+
+} // namespace internal
+
+TEST(IoPerfCollectionTest, TestBoottimeCollection) {
+ sp<MockUidIoStats> mockUidIoStats = new MockUidIoStats();
+ sp<MockProcStat> mockProcStat = new MockProcStat();
+ sp<MockProcPidStat> mockProcPidStat = new MockProcPidStat();
+
+ sp<IoPerfCollection> collector = new IoPerfCollection();
+
+ ASSERT_RESULT_OK(collector->start());
+
+ internal::IoPerfCollectionPeer collectorPeer(collector);
+
+ const std::unordered_map<uid_t, UidIoUsage> uidIoUsages({
+ {1009, {.uid = 1009, .ios = {0, 14000, 0, 16000, 0, 100}}},
+ });
+ const ProcStatInfo procStatInfo{
+ /*stats=*/{2900, 7900, 4900, 8900, /*ioWaitTime=*/5900, 6966, 7980, 0, 0, 2930},
+ /*runnableCnt=*/100,
+ /*ioBlockedCnt=*/57,
+ };
+ const std::vector<ProcessStats> processStats({
+ {.tgid = 100,
+ .uid = 1009,
+ .process = {100, "disk I/O", "D", 1, 11000, 1, 234},
+ .threads = {{100, {100, "mount", "D", 1, 11000, 1, 234}}}},
+ });
+
+ EXPECT_CALL(*mockUidIoStats, deltaStats()).WillOnce(Return(uidIoUsages));
+ EXPECT_CALL(*mockProcStat, deltaStats()).WillOnce(Return(procStatInfo));
+ EXPECT_CALL(*mockProcPidStat, deltaStats()).WillOnce(Return(processStats));
+
+ const IoPerfRecord expected = {
+ .uidIoPerfData = {.topNReads = {{0, "mount", {0, 14000}, {0, 100}}},
+ .topNWrites = {{0, "mount", {0, 16000}, {0, 100}}},
+ .total = {{0, 14000}, {0, 16000}, {0, 100}}},
+ .systemIoPerfData = {5900, 48376, 57, 157},
+ .processIoPerfData =
+ {.topNIoBlockedUids = {{0, "mount", 1, {{"disk I/O", 1}}}},
+ .topNIoBlockedUidsTotalTaskCnt = {1},
+ .topNMajorFaultUids = {{0, "mount", 11000, {{"disk I/O", 11000}}}},
+ .totalMajorFaults = 11000,
+ .majorFaultsPercentChange = 0},
+ };
+ internal::PackageNameResolverPeer peer({{1009, "mount"}});
+
+ time_t now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
+ ASSERT_RESULT_OK(
+ collector->onBoottimeCollection(now, mockUidIoStats, mockProcStat, mockProcPidStat));
+
+ const CollectionInfo& collectionInfo = collectorPeer.getBoottimeCollectionInfo();
+
+ ASSERT_EQ(collectionInfo.maxCacheSize, std::numeric_limits<std::size_t>::max());
+ ASSERT_EQ(collectionInfo.records.size(), 1);
+ ASSERT_TRUE(isEqual(collectionInfo.records[0], expected))
+ << "Boottime collection record doesn't match.\nExpected:\n"
+ << toString(expected) << "\nActual:\n"
+ << toString(collectionInfo.records[0]);
+
+ TemporaryFile dump;
+ ASSERT_RESULT_OK(collector->onDump(dump.fd));
+
+ lseek(dump.fd, 0, SEEK_SET);
+ std::string dumpContents;
+ ASSERT_TRUE(ReadFdToString(dump.fd, &dumpContents));
+ ASSERT_FALSE(dumpContents.empty());
+
+ ASSERT_EQ(countOccurrences(dumpContents, kEmptyCollectionMessage), 1)
+ << "Only periodic collection should be not collected. Dump contents: " << dumpContents;
+}
+
+TEST(IoPerfCollectionTest, TestPeriodicCollection) {
+ sp<MockUidIoStats> mockUidIoStats = new MockUidIoStats();
+ sp<MockProcStat> mockProcStat = new MockProcStat();
+ sp<MockProcPidStat> mockProcPidStat = new MockProcPidStat();
+
+ sp<IoPerfCollection> collector = new IoPerfCollection();
+
+ ASSERT_RESULT_OK(collector->start());
+
+ internal::IoPerfCollectionPeer collectorPeer(collector);
+
+ const std::unordered_map<uid_t, UidIoUsage> uidIoUsages({
+ {1009, {.uid = 1009, .ios = {0, 14000, 0, 16000, 0, 100}}},
+ });
+ const ProcStatInfo procStatInfo{
+ /*stats=*/{2900, 7900, 4900, 8900, /*ioWaitTime=*/5900, 6966, 7980, 0, 0, 2930},
+ /*runnableCnt=*/100,
+ /*ioBlockedCnt=*/57,
+ };
+ const std::vector<ProcessStats> processStats({
+ {.tgid = 100,
+ .uid = 1009,
+ .process = {100, "disk I/O", "D", 1, 11000, 1, 234},
+ .threads = {{100, {100, "mount", "D", 1, 11000, 1, 234}}}},
+ });
+
+ EXPECT_CALL(*mockUidIoStats, deltaStats()).WillOnce(Return(uidIoUsages));
+ EXPECT_CALL(*mockProcStat, deltaStats()).WillOnce(Return(procStatInfo));
+ EXPECT_CALL(*mockProcPidStat, deltaStats()).WillOnce(Return(processStats));
+
+ const IoPerfRecord expected = {
+ .uidIoPerfData = {.topNReads = {{0, "mount", {0, 14000}, {0, 100}}},
+ .topNWrites = {{0, "mount", {0, 16000}, {0, 100}}},
+ .total = {{0, 14000}, {0, 16000}, {0, 100}}},
+ .systemIoPerfData = {5900, 48376, 57, 157},
+ .processIoPerfData =
+ {.topNIoBlockedUids = {{0, "mount", 1, {{"disk I/O", 1}}}},
+ .topNIoBlockedUidsTotalTaskCnt = {1},
+ .topNMajorFaultUids = {{0, "mount", 11000, {{"disk I/O", 11000}}}},
+ .totalMajorFaults = 11000,
+ .majorFaultsPercentChange = 0},
+ };
+ internal::PackageNameResolverPeer peer({{1009, "mount"}});
+
+ time_t now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
+ ASSERT_RESULT_OK(
+ collector->onPeriodicCollection(now, mockUidIoStats, mockProcStat, mockProcPidStat));
+
+ const CollectionInfo& collectionInfo = collectorPeer.getPeriodicCollectionInfo();
+
+ ASSERT_EQ(collectionInfo.maxCacheSize,
+ static_cast<size_t>(sysprop::periodicCollectionBufferSize().value_or(
+ kDefaultPeriodicCollectionBufferSize)));
+ ASSERT_EQ(collectionInfo.records.size(), 1);
+ ASSERT_TRUE(isEqual(collectionInfo.records[0], expected))
+ << "Periodic collection record doesn't match.\nExpected:\n"
+ << toString(expected) << "\nActual:\n"
+ << toString(collectionInfo.records[0]);
+
+ TemporaryFile dump;
+ ASSERT_RESULT_OK(collector->onDump(dump.fd));
+
+ lseek(dump.fd, 0, SEEK_SET);
+ std::string dumpContents;
+ ASSERT_TRUE(ReadFdToString(dump.fd, &dumpContents));
+ ASSERT_FALSE(dumpContents.empty());
+
+ ASSERT_EQ(countOccurrences(dumpContents, kEmptyCollectionMessage), 1)
+ << "Only boot-time collection should be not collected. Dump contents: " << dumpContents;
+}
+
+TEST(IoPerfCollectionTest, TestCustomCollection) {
+ sp<MockUidIoStats> mockUidIoStats = new MockUidIoStats();
+ sp<MockProcStat> mockProcStat = new MockProcStat();
+ sp<MockProcPidStat> mockProcPidStat = new MockProcPidStat();
+
+ sp<IoPerfCollection> collector = new IoPerfCollection();
+
+ ASSERT_RESULT_OK(collector->start());
+
+ internal::IoPerfCollectionPeer collectorPeer(collector);
+ // Filter by package name should ignore this limit.
+ collectorPeer.setTopNStatsPerCategory(1);
+
+ const std::unordered_map<uid_t, UidIoUsage> uidIoUsages({
+ {1009, {.uid = 1009, .ios = {0, 14000, 0, 16000, 0, 100}}},
+ {2001, {.uid = 2001, .ios = {0, 3400, 0, 6700, 0, 200}}},
+ {3456, {.uid = 3456, .ios = {0, 4200, 0, 5600, 0, 300}}},
+ });
+ const ProcStatInfo procStatInfo{
+ /*stats=*/{2900, 7900, 4900, 8900, /*ioWaitTime=*/5900, 6966, 7980, 0, 0, 2930},
+ /*runnableCnt=*/100,
+ /*ioBlockedCnt=*/57,
+ };
+ const std::vector<ProcessStats> processStats({
+ {.tgid = 100,
+ .uid = 1009,
+ .process = {100, "cts_test", "D", 1, 50900, 2, 234},
+ .threads = {{100, {100, "cts_test", "D", 1, 50900, 1, 234}},
+ {200, {200, "cts_test_2", "D", 1, 0, 1, 290}}}},
+ {.tgid = 1000,
+ .uid = 2001,
+ .process = {1000, "system_server", "D", 1, 1234, 1, 345},
+ .threads = {{1000, {1000, "system_server", "D", 1, 1234, 1, 345}}}},
+ {.tgid = 4000,
+ .uid = 3456,
+ .process = {4000, "random_process", "D", 1, 3456, 1, 890},
+ .threads = {{4000, {4000, "random_process", "D", 1, 50900, 1, 890}}}},
+ });
+
+ EXPECT_CALL(*mockUidIoStats, deltaStats()).WillOnce(Return(uidIoUsages));
+ EXPECT_CALL(*mockProcStat, deltaStats()).WillOnce(Return(procStatInfo));
+ EXPECT_CALL(*mockProcPidStat, deltaStats()).WillOnce(Return(processStats));
+ const IoPerfRecord expected = {
+ .uidIoPerfData = {.topNReads = {{.userId = 0,
+ .packageName = "android.car.cts",
+ .bytes = {0, 14000},
+ .fsync = {0, 100}},
+ {.userId = 0,
+ .packageName = "system_server",
+ .bytes = {0, 3400},
+ .fsync = {0, 200}}},
+ .topNWrites = {{.userId = 0,
+ .packageName = "android.car.cts",
+ .bytes = {0, 16000},
+ .fsync = {0, 100}},
+ {.userId = 0,
+ .packageName = "system_server",
+ .bytes = {0, 6700},
+ .fsync = {0, 200}}},
+ .total = {{0, 21600}, {0, 28300}, {0, 600}}},
+ .systemIoPerfData = {.cpuIoWaitTime = 5900,
+ .totalCpuTime = 48376,
+ .ioBlockedProcessesCnt = 57,
+ .totalProcessesCnt = 157},
+ .processIoPerfData =
+ {.topNIoBlockedUids = {{0, "android.car.cts", 2, {{"cts_test", 2}}},
+ {0, "system_server", 1, {{"system_server", 1}}}},
+ .topNIoBlockedUidsTotalTaskCnt = {2, 1},
+ .topNMajorFaultUids = {{0, "android.car.cts", 50900, {{"cts_test", 50900}}},
+ {0, "system_server", 1234, {{"system_server", 1234}}}},
+ .totalMajorFaults = 55590,
+ .majorFaultsPercentChange = 0},
+ };
+ internal::PackageNameResolverPeer peer({
+ {1009, "android.car.cts"},
+ {2001, "system_server"},
+ {3456, "random_process"},
+ });
+
+ time_t now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());
+ ASSERT_RESULT_OK(collector->onCustomCollection(now, {"android.car.cts", "system_server"},
+ mockUidIoStats, mockProcStat, mockProcPidStat));
+
+ const CollectionInfo& collectionInfo = collectorPeer.getCustomCollectionInfo();
+
+ EXPECT_EQ(collectionInfo.maxCacheSize, std::numeric_limits<std::size_t>::max());
+ ASSERT_EQ(collectionInfo.records.size(), 1);
+ ASSERT_TRUE(isEqual(collectionInfo.records[0], expected))
+ << "Custom collection record doesn't match.\nExpected:\n"
+ << toString(expected) << "\nActual:\n"
+ << toString(collectionInfo.records[0]);
+
+ TemporaryFile customDump;
+ ASSERT_RESULT_OK(collector->onCustomCollectionDump(customDump.fd));
+
+ lseek(customDump.fd, 0, SEEK_SET);
+ std::string customDumpContents;
+ ASSERT_TRUE(ReadFdToString(customDump.fd, &customDumpContents));
+ ASSERT_FALSE(customDumpContents.empty());
+ ASSERT_EQ(countOccurrences(customDumpContents, kEmptyCollectionMessage), 0)
+ << "Custom collection should be reported. Dump contents: " << customDumpContents;
+
+ // Should clear the cache.
+ ASSERT_RESULT_OK(collector->onCustomCollectionDump(-1));
+
+ const CollectionInfo& emptyCollectionInfo = collectorPeer.getCustomCollectionInfo();
+ EXPECT_TRUE(emptyCollectionInfo.records.empty());
+ EXPECT_EQ(emptyCollectionInfo.maxCacheSize, std::numeric_limits<std::size_t>::max());
+}
+
+TEST(IoPerfCollectionTest, TestUidIoStatsGreaterThanTopNStatsLimit) {
+ std::unordered_map<uid_t, UidIoUsage> uidIoUsages({
+ {1001234, {.uid = 1001234, .ios = {3000, 0, 500, 0, 20, 0}}},
+ {1005678, {.uid = 1005678, .ios = {30, 100, 50, 200, 45, 60}}},
+ {1009, {.uid = 1009, .ios = {0, 20000, 0, 30000, 0, 300}}},
+ {1001000, {.uid = 1001000, .ios = {2000, 200, 1000, 100, 50, 10}}},
+ });
+ sp<MockUidIoStats> mockUidIoStats = new MockUidIoStats();
+ EXPECT_CALL(*mockUidIoStats, deltaStats()).WillOnce(Return(uidIoUsages));
+
+ struct UidIoPerfData expectedUidIoPerfData = {
+ .topNReads = {{.userId = 0, // uid: 1009
+ .packageName = "mount",
+ .bytes = {0, 20000},
+ .fsync = {0, 300}},
+ {.userId = 10, // uid: 1001234
+ .packageName = "1001234",
+ .bytes = {3000, 0},
+ .fsync = {20, 0}}},
+ .topNWrites = {{.userId = 0, // uid: 1009
+ .packageName = "mount",
+ .bytes = {0, 30000},
+ .fsync = {0, 300}},
+ {.userId = 10, // uid: 1001000
+ .packageName = "shared:android.uid.system",
+ .bytes = {1000, 100},
+ .fsync = {50, 10}}},
+ .total = {{5030, 20300}, {1550, 30300}, {115, 370}},
+ };
+
+ internal::PackageNameResolverPeer peer({
+ {1009, "mount"},
+ {1001000, "shared:android.uid.system"},
+ });
+
+ IoPerfCollection collector;
+ collector.mTopNStatsPerCategory = 2;
+
+ struct UidIoPerfData actualUidIoPerfData = {};
+ collector.processUidIoPerfData({}, mockUidIoStats, &actualUidIoPerfData);
+
+ EXPECT_TRUE(isEqual(expectedUidIoPerfData, actualUidIoPerfData))
+ << "First snapshot doesn't match.\nExpected:\n"
+ << toString(expectedUidIoPerfData) << "\nActual:\n"
+ << toString(actualUidIoPerfData);
+
+ uidIoUsages = {
+ {1001234, {.uid = 1001234, .ios = {4000, 0, 450, 0, 25, 0}}},
+ {1005678, {.uid = 1005678, .ios = {10, 900, 0, 400, 5, 10}}},
+ {1003456, {.uid = 1003456, .ios = {200, 0, 300, 0, 50, 0}}},
+ {1001000, {.uid = 1001000, .ios = {0, 0, 0, 0, 0, 0}}},
+ };
+ EXPECT_CALL(*mockUidIoStats, deltaStats()).WillOnce(Return(uidIoUsages));
+
+ expectedUidIoPerfData = {
+ .topNReads = {{.userId = 10, // uid: 1001234
+ .packageName = "1001234",
+ .bytes = {4000, 0},
+ .fsync = {25, 0}},
+ {.userId = 10, // uid: 1005678
+ .packageName = "1005678",
+ .bytes = {10, 900},
+ .fsync = {5, 10}}},
+ .topNWrites = {{.userId = 10, // uid: 1001234
+ .packageName = "1001234",
+ .bytes = {450, 0},
+ .fsync = {25, 0}},
+ {.userId = 10, // uid: 1005678
+ .packageName = "1005678",
+ .bytes = {0, 400},
+ .fsync = {5, 10}}},
+ .total = {{4210, 900}, {750, 400}, {80, 10}},
+ };
+ actualUidIoPerfData = {};
+ collector.processUidIoPerfData({}, mockUidIoStats, &actualUidIoPerfData);
+
+ EXPECT_TRUE(isEqual(expectedUidIoPerfData, actualUidIoPerfData))
+ << "Second snapshot doesn't match.\nExpected:\n"
+ << toString(expectedUidIoPerfData) << "\nActual:\n"
+ << toString(actualUidIoPerfData);
+}
+
+TEST(IoPerfCollectionTest, TestUidIOStatsLessThanTopNStatsLimit) {
+ const std::unordered_map<uid_t, UidIoUsage> uidIoUsages(
+ {{1001234, {.uid = 1001234, .ios = {3000, 0, 500, 0, 20, 0}}}});
+
+ const struct UidIoPerfData expectedUidIoPerfData = {
+ .topNReads = {{.userId = 10,
+ .packageName = "1001234",
+ .bytes = {3000, 0},
+ .fsync = {20, 0}}},
+ .topNWrites =
+ {{.userId = 10, .packageName = "1001234", .bytes = {500, 0}, .fsync = {20, 0}}},
+ .total = {{3000, 0}, {500, 0}, {20, 0}},
+ };
+
+ sp<MockUidIoStats> mockUidIoStats = new MockUidIoStats();
+ EXPECT_CALL(*mockUidIoStats, deltaStats()).WillOnce(Return(uidIoUsages));
+
+ IoPerfCollection collector;
+ collector.mTopNStatsPerCategory = 10;
+
+ struct UidIoPerfData actualUidIoPerfData = {};
+ collector.processUidIoPerfData({}, mockUidIoStats, &actualUidIoPerfData);
+
+ EXPECT_TRUE(isEqual(expectedUidIoPerfData, actualUidIoPerfData))
+ << "Collected data doesn't match.\nExpected:\n"
+ << toString(expectedUidIoPerfData) << "\nActual:\n"
+ << toString(actualUidIoPerfData);
+}
+
+TEST(IoPerfCollectionTest, TestProcessSystemIoPerfData) {
+ const ProcStatInfo procStatInfo(
+ /*stats=*/{6200, 5700, 1700, 3100, 1100, 5200, 3900, 0, 0, 0},
+ /*runnableCnt=*/17,
+ /*ioBlockedCnt=*/5);
+ struct SystemIoPerfData expectedSystemIoPerfData = {
+ .cpuIoWaitTime = 1100,
+ .totalCpuTime = 26900,
+ .ioBlockedProcessesCnt = 5,
+ .totalProcessesCnt = 22,
+ };
+
+ sp<MockProcStat> mockProcStat = new MockProcStat();
+ EXPECT_CALL(*mockProcStat, deltaStats()).WillOnce(Return(procStatInfo));
+
+ IoPerfCollection collector;
+ struct SystemIoPerfData actualSystemIoPerfData = {};
+ collector.processSystemIoPerfData(mockProcStat, &actualSystemIoPerfData);
+
+ EXPECT_TRUE(isEqual(expectedSystemIoPerfData, actualSystemIoPerfData))
+ << "Expected:\n"
+ << toString(expectedSystemIoPerfData) << "\nActual:\n"
+ << toString(actualSystemIoPerfData);
+}
+
+TEST(IoPerfCollectionTest, TestProcPidContentsGreaterThanTopNStatsLimit) {
+ const std::vector<ProcessStats> firstProcessStats({
+ {.tgid = 1,
+ .uid = 0,
+ .process = {1, "init", "S", 0, 220, 2, 0},
+ .threads = {{1, {1, "init", "S", 0, 200, 2, 0}},
+ {453, {453, "init", "S", 0, 20, 2, 275}}}},
+ {.tgid = 2456,
+ .uid = 1001000,
+ .process = {2456, "system_server", "R", 1, 6000, 3, 1000},
+ .threads = {{2456, {2456, "system_server", "R", 1, 1000, 3, 1000}},
+ {3456, {3456, "system_server", "S", 1, 3000, 3, 2300}},
+ {4789, {4789, "system_server", "D", 1, 2000, 3, 4500}}}},
+ {.tgid = 7890,
+ .uid = 1001000,
+ .process = {7890, "logd", "D", 1, 15000, 3, 2345},
+ .threads = {{7890, {7890, "logd", "D", 1, 10000, 3, 2345}},
+ {8978, {8978, "logd", "D", 1, 1000, 3, 2500}},
+ {12890, {12890, "logd", "D", 1, 500, 3, 2900}}}},
+ {.tgid = 18902,
+ .uid = 1009,
+ .process = {18902, "disk I/O", "D", 1, 45678, 3, 897654},
+ .threads = {{18902, {18902, "disk I/O", "D", 1, 30000, 3, 897654}},
+ {21345, {21345, "disk I/O", "D", 1, 15000, 3, 904000}},
+ {32452, {32452, "disk I/O", "D", 1, 678, 3, 1007000}}}},
+ {.tgid = 28900,
+ .uid = 1001234,
+ .process = {28900, "tombstoned", "D", 1, 89765, 1, 2345671},
+ .threads = {{28900, {28900, "tombstoned", "D", 1, 89765, 1, 2345671}}}},
+ });
+ sp<MockProcPidStat> mockProcPidStat = new MockProcPidStat();
+ EXPECT_CALL(*mockProcPidStat, deltaStats()).WillOnce(Return(firstProcessStats));
+
+ struct ProcessIoPerfData expectedProcessIoPerfData = {
+ .topNIoBlockedUids = {{.userId = 10, // uid: 1001000
+ .packageName = "shared:android.uid.system",
+ .count = 4,
+ .topNProcesses = {{"logd", 3}, {"system_server", 1}}},
+ {.userId = 0,
+ .packageName = "mount",
+ .count = 3,
+ .topNProcesses = {{"disk I/O", 3}}}},
+ .topNIoBlockedUidsTotalTaskCnt = {6, 3},
+ .topNMajorFaultUids = {{.userId = 10, // uid: 1001234
+ .packageName = "1001234",
+ .count = 89765,
+ .topNProcesses = {{"tombstoned", 89765}}},
+ {.userId = 0, // uid: 1009
+ .packageName = "mount",
+ .count = 45678,
+ .topNProcesses = {{"disk I/O", 45678}}}},
+ .totalMajorFaults = 156663,
+ .majorFaultsPercentChange = 0.0,
+ };
+
+ internal::PackageNameResolverPeer peer({
+ {0, "root"},
+ {1009, "mount"},
+ {1001000, "shared:android.uid.system"},
+ });
+
+ IoPerfCollection collector;
+ collector.mTopNStatsPerCategory = 2;
+ collector.mTopNStatsPerSubcategory = 2;
+
+ struct ProcessIoPerfData actualProcessIoPerfData = {};
+ collector.processProcessIoPerfDataLocked({}, mockProcPidStat, &actualProcessIoPerfData);
+
+ EXPECT_TRUE(isEqual(expectedProcessIoPerfData, actualProcessIoPerfData))
+ << "First snapshot doesn't match.\nExpected:\n"
+ << toString(expectedProcessIoPerfData) << "\nActual:\n"
+ << toString(actualProcessIoPerfData);
+
+ const std::vector<ProcessStats> secondProcessStats({
+ {.tgid = 1,
+ .uid = 0,
+ .process = {1, "init", "S", 0, 660, 2, 0},
+ .threads = {{1, {1, "init", "S", 0, 600, 2, 0}},
+ {453, {453, "init", "S", 0, 60, 2, 275}}}},
+ {.tgid = 2546,
+ .uid = 1001000,
+ .process = {2546, "system_server", "R", 1, 12000, 3, 1000},
+ .threads = {{2456, {2456, "system_server", "R", 1, 2000, 3, 1000}},
+ {3456, {3456, "system_server", "S", 1, 6000, 3, 2300}},
+ {4789, {4789, "system_server", "D", 1, 4000, 3, 4500}}}},
+ });
+ EXPECT_CALL(*mockProcPidStat, deltaStats()).WillOnce(Return(secondProcessStats));
+ expectedProcessIoPerfData = {
+ .topNIoBlockedUids = {{.userId = 10, // uid: 1001000
+ .packageName = "shared:android.uid.system",
+ .count = 1,
+ .topNProcesses = {{"system_server", 1}}}},
+ .topNIoBlockedUidsTotalTaskCnt = {3},
+ .topNMajorFaultUids = {{.userId = 10, // uid: 1001000
+ .packageName = "shared:android.uid.system",
+ .count = 12000,
+ .topNProcesses = {{"system_server", 12000}}},
+ {.userId = 0, // uid: 0
+ .packageName = "root",
+ .count = 660,
+ .topNProcesses = {{"init", 660}}}},
+ .totalMajorFaults = 12660,
+ .majorFaultsPercentChange = ((12660.0 - 156663.0) / 156663.0) * 100,
+ };
+
+ actualProcessIoPerfData = {};
+ collector.processProcessIoPerfDataLocked({}, mockProcPidStat, &actualProcessIoPerfData);
+
+ EXPECT_TRUE(isEqual(expectedProcessIoPerfData, actualProcessIoPerfData))
+ << "Second snapshot doesn't match.\nExpected:\n"
+ << toString(expectedProcessIoPerfData) << "\nActual:\n"
+ << toString(actualProcessIoPerfData);
+}
+
+TEST(IoPerfCollectionTest, TestProcPidContentsLessThanTopNStatsLimit) {
+ const std::vector<ProcessStats> processStats({
+ {.tgid = 1,
+ .uid = 0,
+ .process = {1, "init", "S", 0, 880, 2, 0},
+ .threads = {{1, {1, "init", "S", 0, 800, 2, 0}},
+ {453, {453, "init", "S", 0, 80, 2, 275}}}},
+ });
+ sp<MockProcPidStat> mockProcPidStat = new MockProcPidStat();
+ EXPECT_CALL(*mockProcPidStat, deltaStats()).WillOnce(Return(processStats));
+
+ struct ProcessIoPerfData expectedProcessIoPerfData = {
+ .topNMajorFaultUids = {{.userId = 0, // uid: 0
+ .packageName = "root",
+ .count = 880,
+ .topNProcesses = {{"init", 880}}}},
+ .totalMajorFaults = 880,
+ .majorFaultsPercentChange = 0.0,
+ };
+
+ internal::PackageNameResolverPeer peer({
+ {0, "root"},
+ });
+
+ IoPerfCollection collector;
+ collector.mTopNStatsPerCategory = 5;
+ collector.mTopNStatsPerSubcategory = 3;
+
+ struct ProcessIoPerfData actualProcessIoPerfData = {};
+ collector.processProcessIoPerfDataLocked({}, mockProcPidStat, &actualProcessIoPerfData);
+
+ EXPECT_TRUE(isEqual(expectedProcessIoPerfData, actualProcessIoPerfData))
+ << "proc pid contents don't match.\nExpected:\n"
+ << toString(expectedProcessIoPerfData) << "\nActual:\n"
+ << toString(actualProcessIoPerfData);
+}
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
diff --git a/watchdog/server/tests/LooperStub.cpp b/cpp/watchdog/server/tests/LooperStub.cpp
similarity index 100%
rename from watchdog/server/tests/LooperStub.cpp
rename to cpp/watchdog/server/tests/LooperStub.cpp
diff --git a/watchdog/server/tests/LooperStub.h b/cpp/watchdog/server/tests/LooperStub.h
similarity index 95%
rename from watchdog/server/tests/LooperStub.h
rename to cpp/watchdog/server/tests/LooperStub.h
index da50faf..bae8b5d 100644
--- a/watchdog/server/tests/LooperStub.h
+++ b/cpp/watchdog/server/tests/LooperStub.h
@@ -14,8 +14,8 @@
* limitations under the License.
*/
-#ifndef WATCHDOG_SERVER_TESTS_LOOPERSTUB_H_
-#define WATCHDOG_SERVER_TESTS_LOOPERSTUB_H_
+#ifndef CPP_WATCHDOG_SERVER_TESTS_LOOPERSTUB_H_
+#define CPP_WATCHDOG_SERVER_TESTS_LOOPERSTUB_H_
#include <android-base/chrono_utils.h>
#include <android-base/result.h>
@@ -83,4 +83,4 @@
} // namespace automotive
} // namespace android
-#endif // WATCHDOG_SERVER_TESTS_LOOPERSTUB_H_
+#endif // CPP_WATCHDOG_SERVER_TESTS_LOOPERSTUB_H_
diff --git a/cpp/watchdog/server/tests/MockProcPidStat.h b/cpp/watchdog/server/tests/MockProcPidStat.h
new file mode 100644
index 0000000..acc8b0c
--- /dev/null
+++ b/cpp/watchdog/server/tests/MockProcPidStat.h
@@ -0,0 +1,48 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#ifndef CPP_WATCHDOG_SERVER_TESTS_MOCKPROCPIDSTAT_H_
+#define CPP_WATCHDOG_SERVER_TESTS_MOCKPROCPIDSTAT_H_
+
+#include "ProcPidStat.h"
+
+#include <android-base/result.h>
+#include <gmock/gmock.h>
+
+#include <string>
+#include <unordered_map>
+#include <vector>
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+class MockProcPidStat : public ProcPidStat {
+public:
+ MockProcPidStat() { ON_CALL(*this, enabled()).WillByDefault(::testing::Return(true)); }
+ MOCK_METHOD(bool, enabled, (), (override));
+ MOCK_METHOD(android::base::Result<void>, collect, (), (override));
+ MOCK_METHOD((const std::unordered_map<pid_t, ProcessStats>), latestStats, (),
+ (const, override));
+ MOCK_METHOD(const std::vector<ProcessStats>, deltaStats, (), (const, override));
+ MOCK_METHOD(std::string, dirPath, (), (override));
+};
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
+
+#endif // CPP_WATCHDOG_SERVER_TESTS_MOCKPROCPIDSTAT_H_
diff --git a/cpp/watchdog/server/tests/MockProcStat.h b/cpp/watchdog/server/tests/MockProcStat.h
new file mode 100644
index 0000000..81fd6a8
--- /dev/null
+++ b/cpp/watchdog/server/tests/MockProcStat.h
@@ -0,0 +1,45 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#ifndef CPP_WATCHDOG_SERVER_TESTS_MOCKPROCSTAT_H_
+#define CPP_WATCHDOG_SERVER_TESTS_MOCKPROCSTAT_H_
+
+#include "ProcStat.h"
+
+#include <android-base/result.h>
+#include <gmock/gmock.h>
+
+#include <string>
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+class MockProcStat : public ProcStat {
+public:
+ MockProcStat() { ON_CALL(*this, enabled()).WillByDefault(::testing::Return(true)); }
+ MOCK_METHOD(bool, enabled, (), (override));
+ MOCK_METHOD(android::base::Result<void>, collect, (), (override));
+ MOCK_METHOD(const ProcStatInfo, latestStats, (), (const, override));
+ MOCK_METHOD(const ProcStatInfo, deltaStats, (), (const, override));
+ MOCK_METHOD(std::string, filePath, (), (override));
+};
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
+
+#endif // CPP_WATCHDOG_SERVER_TESTS_MOCKPROCSTAT_H_
diff --git a/cpp/watchdog/server/tests/MockUidIoStats.h b/cpp/watchdog/server/tests/MockUidIoStats.h
new file mode 100644
index 0000000..f603bf8
--- /dev/null
+++ b/cpp/watchdog/server/tests/MockUidIoStats.h
@@ -0,0 +1,46 @@
+/**
+ * Copyright (c) 2020, 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.
+ */
+
+#ifndef CPP_WATCHDOG_SERVER_TESTS_MOCKUIDIOSTATS_H_
+#define CPP_WATCHDOG_SERVER_TESTS_MOCKUIDIOSTATS_H_
+
+#include "UidIoStats.h"
+
+#include <android-base/result.h>
+#include <gmock/gmock.h>
+
+#include <string>
+#include <unordered_map>
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+class MockUidIoStats : public UidIoStats {
+public:
+ MockUidIoStats() { ON_CALL(*this, enabled()).WillByDefault(::testing::Return(true)); }
+ MOCK_METHOD(bool, enabled, (), (override));
+ MOCK_METHOD(android::base::Result<void>, collect, (), (override));
+ MOCK_METHOD((const std::unordered_map<uid_t, UidIoUsage>), latestStats, (), (const, override));
+ MOCK_METHOD((const std::unordered_map<uid_t, UidIoUsage>), deltaStats, (), (const, override));
+ MOCK_METHOD(std::string, filePath, (), (override));
+};
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
+
+#endif // CPP_WATCHDOG_SERVER_TESTS_MOCKUIDIOSTATS_H_
diff --git a/cpp/watchdog/server/tests/PackageNameResolverTest.cpp b/cpp/watchdog/server/tests/PackageNameResolverTest.cpp
new file mode 100644
index 0000000..854bd55
--- /dev/null
+++ b/cpp/watchdog/server/tests/PackageNameResolverTest.cpp
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2020 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.
+ */
+
+#include "PackageNameResolver.h"
+
+#include <gmock/gmock.h>
+#include <gtest/gtest.h>
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+using content::pm::IPackageManagerNativeDefault;
+using ::testing::_;
+using ::testing::DoAll;
+using ::testing::NotNull;
+using ::testing::Pair;
+using ::testing::Return;
+using ::testing::SetArgPointee;
+using ::testing::UnorderedElementsAre;
+
+namespace {
+
+class MockIPackageManagerNative : public IPackageManagerNativeDefault {
+public:
+ MockIPackageManagerNative() {}
+
+ MOCK_METHOD(binder::Status, getNamesForUids,
+ (const std::vector<int32_t>&, std::vector<std::string>*));
+};
+
+} // namespace
+
+TEST(PackageNameResolverTest, TestResolvesNativeUid) {
+ PackageNameResolver::sInstance.clear();
+ auto actualMapping = PackageNameResolver::getInstance()->resolveUids({0});
+
+ EXPECT_THAT(actualMapping, UnorderedElementsAre(Pair(0, "root")));
+}
+
+TEST(PackageNameResolverTest, TestResolvesApplicationUidFromPackageManager) {
+ PackageNameResolver::sInstance.clear();
+ auto packageNameResolver = PackageNameResolver::getInstance();
+ sp<MockIPackageManagerNative> mock = new MockIPackageManagerNative();
+ PackageNameResolver::sInstance->mPackageManager = mock;
+
+ std::vector<std::string> packageNames = {"shared:android.uid.system"};
+ EXPECT_CALL(*mock, getNamesForUids(std::vector<int32_t>({1001000}), NotNull()))
+ .WillOnce(DoAll(SetArgPointee<1>(packageNames), Return(binder::Status::ok())));
+
+ auto actualMapping = packageNameResolver->resolveUids({1001000});
+
+ EXPECT_THAT(actualMapping, UnorderedElementsAre(Pair(1001000, "shared:android.uid.system")));
+
+ PackageNameResolver::sInstance->mPackageManager = nullptr;
+}
+
+TEST(PackageNameResolverTest, TestResolvesApplicationUidFromLocalCache) {
+ PackageNameResolver::sInstance.clear();
+ auto packageNameResolver = PackageNameResolver::getInstance();
+ sp<MockIPackageManagerNative> mock = new MockIPackageManagerNative();
+ PackageNameResolver::sInstance->mPackageManager = mock;
+
+ PackageNameResolver::sInstance->mUidToPackageNameMapping = {{1003456, "random package"}};
+ EXPECT_CALL(*mock, getNamesForUids(_, _)).Times(0).WillRepeatedly(Return(binder::Status::ok()));
+
+ auto actualMapping = packageNameResolver->resolveUids({1003456});
+
+ EXPECT_THAT(actualMapping, UnorderedElementsAre(Pair(1003456, "random package")));
+
+ PackageNameResolver::sInstance->mPackageManager = nullptr;
+}
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
diff --git a/watchdog/server/tests/ProcPidDir.cpp b/cpp/watchdog/server/tests/ProcPidDir.cpp
similarity index 88%
rename from watchdog/server/tests/ProcPidDir.cpp
rename to cpp/watchdog/server/tests/ProcPidDir.cpp
index ac00e9b..9fa09ce 100644
--- a/watchdog/server/tests/ProcPidDir.cpp
+++ b/cpp/watchdog/server/tests/ProcPidDir.cpp
@@ -16,12 +16,12 @@
#include "ProcPidDir.h"
+#include "ProcPidStat.h"
+
#include <android-base/file.h>
#include <android-base/result.h>
#include <errno.h>
-#include "ProcPidStat.h"
-
namespace android {
namespace automotive {
namespace watchdog {
@@ -42,12 +42,11 @@
} // namespace
-Result<void> populateProcPidDir(
- const std::string& procDirPath,
- const std::unordered_map<uint32_t, std::vector<uint32_t>>& pidToTids,
- const std::unordered_map<uint32_t, std::string>& processStat,
- const std::unordered_map<uint32_t, std::string>& processStatus,
- const std::unordered_map<uint32_t, std::string>& threadStat) {
+Result<void> populateProcPidDir(const std::string& procDirPath,
+ const std::unordered_map<pid_t, std::vector<pid_t>>& pidToTids,
+ const std::unordered_map<pid_t, std::string>& processStat,
+ const std::unordered_map<pid_t, std::string>& processStatus,
+ const std::unordered_map<pid_t, std::string>& threadStat) {
for (const auto& it : pidToTids) {
// 1. Create /proc/PID dir.
const auto& pidDirRes = makeDir(StringPrintf("%s/%" PRIu32, procDirPath.c_str(), it.first));
diff --git a/watchdog/server/tests/ProcPidDir.h b/cpp/watchdog/server/tests/ProcPidDir.h
similarity index 70%
rename from watchdog/server/tests/ProcPidDir.h
rename to cpp/watchdog/server/tests/ProcPidDir.h
index 7253203..ab70d82 100644
--- a/watchdog/server/tests/ProcPidDir.h
+++ b/cpp/watchdog/server/tests/ProcPidDir.h
@@ -14,8 +14,8 @@
* limitations under the License.
*/
-#ifndef WATCHDOG_SERVER_TESTS_PROCPIDDIR_H_
-#define WATCHDOG_SERVER_TESTS_PROCPIDDIR_H_
+#ifndef CPP_WATCHDOG_SERVER_TESTS_PROCPIDDIR_H_
+#define CPP_WATCHDOG_SERVER_TESTS_PROCPIDDIR_H_
#include <android-base/result.h>
#include <stdint.h>
@@ -31,14 +31,14 @@
android::base::Result<void> populateProcPidDir(
const std::string& procDirPath,
- const std::unordered_map<uint32_t, std::vector<uint32_t>>& pidToTids,
- const std::unordered_map<uint32_t, std::string>& processStat,
- const std::unordered_map<uint32_t, std::string>& processStatus,
- const std::unordered_map<uint32_t, std::string>& threadStat);
+ const std::unordered_map<pid_t, std::vector<pid_t>>& pidToTids,
+ const std::unordered_map<pid_t, std::string>& processStat,
+ const std::unordered_map<pid_t, std::string>& processStatus,
+ const std::unordered_map<pid_t, std::string>& threadStat);
} // namespace testing
} // namespace watchdog
} // namespace automotive
} // namespace android
-#endif // WATCHDOG_SERVER_TESTS_PROCPIDDIR_H_
+#endif // CPP_WATCHDOG_SERVER_TESTS_PROCPIDDIR_H_
diff --git a/cpp/watchdog/server/tests/ProcPidStatTest.cpp b/cpp/watchdog/server/tests/ProcPidStatTest.cpp
new file mode 100644
index 0000000..88da021
--- /dev/null
+++ b/cpp/watchdog/server/tests/ProcPidStatTest.cpp
@@ -0,0 +1,553 @@
+/*
+ * Copyright 2020 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.
+ */
+
+#include "ProcPidStat.h"
+
+#include "ProcPidDir.h"
+
+#include <android-base/file.h>
+#include <android-base/stringprintf.h>
+#include <gmock/gmock.h>
+#include <inttypes.h>
+
+#include <algorithm>
+#include <string>
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+using android::base::StringAppendF;
+using android::base::StringPrintf;
+using testing::populateProcPidDir;
+
+namespace {
+
+std::string toString(const PidStat& stat) {
+ return StringPrintf("PID: %" PRIu32 ", PPID: %" PRIu32 ", Comm: %s, State: %s, "
+ "Major page faults: %" PRIu64 ", Num threads: %" PRIu32
+ ", Start time: %" PRIu64,
+ stat.pid, stat.ppid, stat.comm.c_str(), stat.state.c_str(),
+ stat.majorFaults, stat.numThreads, stat.startTime);
+}
+
+std::string toString(const ProcessStats& stats) {
+ std::string buffer;
+ StringAppendF(&buffer,
+ "Tgid: %" PRIi64 ", UID: %" PRIi64 ", VmPeak: %" PRIu64 ", VmSize: %" PRIu64
+ ", VmHWM: %" PRIu64 ", VmRSS: %" PRIu64 ", %s\n",
+ stats.tgid, stats.uid, stats.vmPeakKb, stats.vmSizeKb, stats.vmHwmKb,
+ stats.vmRssKb, toString(stats.process).c_str());
+ StringAppendF(&buffer, "\tThread stats:\n");
+ for (const auto& it : stats.threads) {
+ StringAppendF(&buffer, "\t\t%s\n", toString(it.second).c_str());
+ }
+ StringAppendF(&buffer, "\n");
+ return buffer;
+}
+
+std::string toString(const std::vector<ProcessStats>& stats) {
+ std::string buffer;
+ StringAppendF(&buffer, "Number of processes: %d\n", static_cast<int>(stats.size()));
+ for (const auto& it : stats) {
+ StringAppendF(&buffer, "%s", toString(it).c_str());
+ }
+ return buffer;
+}
+
+bool isEqual(const PidStat& lhs, const PidStat& rhs) {
+ return lhs.pid == rhs.pid && lhs.comm == rhs.comm && lhs.state == rhs.state &&
+ lhs.ppid == rhs.ppid && lhs.majorFaults == rhs.majorFaults &&
+ lhs.numThreads == rhs.numThreads && lhs.startTime == rhs.startTime;
+}
+
+bool isEqual(std::vector<ProcessStats>* lhs, std::vector<ProcessStats>* rhs) {
+ if (lhs->size() != rhs->size()) {
+ return false;
+ }
+ std::sort(lhs->begin(), lhs->end(), [&](const ProcessStats& l, const ProcessStats& r) -> bool {
+ return l.process.pid < r.process.pid;
+ });
+ std::sort(rhs->begin(), rhs->end(), [&](const ProcessStats& l, const ProcessStats& r) -> bool {
+ return l.process.pid < r.process.pid;
+ });
+ return std::equal(lhs->begin(), lhs->end(), rhs->begin(),
+ [&](const ProcessStats& l, const ProcessStats& r) -> bool {
+ if (l.tgid != r.tgid || l.uid != r.uid || l.vmPeakKb != r.vmPeakKb ||
+ l.vmSizeKb != r.vmSizeKb || l.vmHwmKb != r.vmHwmKb ||
+ l.vmRssKb != r.vmRssKb || !isEqual(l.process, r.process) ||
+ l.threads.size() != r.threads.size()) {
+ return false;
+ }
+ for (const auto& lIt : l.threads) {
+ const auto& rIt = r.threads.find(lIt.first);
+ if (rIt == r.threads.end()) {
+ return false;
+ }
+ if (!isEqual(lIt.second, rIt->second)) {
+ return false;
+ }
+ }
+ return true;
+ });
+}
+
+std::string pidStatusStr(pid_t pid, uid_t uid) {
+ return StringPrintf("Pid:\t%" PRIu32 "\nTgid:\t%" PRIu32 "\nUid:\t%" PRIu32 "\n", pid, pid,
+ uid);
+}
+
+std::string pidStatusStr(pid_t pid, uid_t uid, uint64_t vmPeakKb, uint64_t vmSizeKb,
+ uint64_t vmHwmKb, uint64_t vmRssKb) {
+ return StringPrintf("%sVmPeak:\t%" PRIu64 "\nVmSize:\t%" PRIu64 "\nVmHWM:\t%" PRIu64
+ "\nVmRSS:\t%" PRIu64 "\n",
+ pidStatusStr(pid, uid).c_str(), vmPeakKb, vmSizeKb, vmHwmKb, vmRssKb);
+}
+
+} // namespace
+
+TEST(ProcPidStatTest, TestValidStatFiles) {
+ std::unordered_map<pid_t, std::vector<pid_t>> pidToTids = {
+ {1, {1, 453}},
+ {1000, {1000, 1100}},
+ };
+
+ std::unordered_map<pid_t, std::string> perProcessStat = {
+ {1, "1 (init) S 0 0 0 0 0 0 0 0 220 0 0 0 0 0 0 0 2 0 0\n"},
+ {1000, "1000 (system_server) R 1 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 2 0 1000\n"},
+ };
+
+ std::unordered_map<pid_t, std::string> perProcessStatus = {
+ {1, pidStatusStr(1, 0, 123, 456, 789, 345)},
+ {1000, pidStatusStr(1000, 10001234, 234, 567, 890, 123)},
+ };
+
+ std::unordered_map<pid_t, std::string> perThreadStat = {
+ {1, "1 (init) S 0 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 2 0 0\n"},
+ {453, "453 (init) S 0 0 0 0 0 0 0 0 20 0 0 0 0 0 0 0 2 0 275\n"},
+ {1000, "1000 (system_server) R 1 0 0 0 0 0 0 0 250 0 0 0 0 0 0 0 2 0 1000\n"},
+ {1100, "1100 (system_server) S 1 0 0 0 0 0 0 0 350 0 0 0 0 0 0 0 2 0 1200\n"},
+ };
+
+ std::vector<ProcessStats> expected = {
+ {.tgid = 1,
+ .uid = 0,
+ .vmPeakKb = 123,
+ .vmSizeKb = 456,
+ .vmHwmKb = 789,
+ .vmRssKb = 345,
+ .process = {1, "init", "S", 0, 220, 2, 0},
+ .threads = {{1, {1, "init", "S", 0, 200, 2, 0}},
+ {453, {453, "init", "S", 0, 20, 2, 275}}}},
+ {.tgid = 1000,
+ .uid = 10001234,
+ .vmPeakKb = 234,
+ .vmSizeKb = 567,
+ .vmHwmKb = 890,
+ .vmRssKb = 123,
+ .process = {1000, "system_server", "R", 1, 600, 2, 1000},
+ .threads = {{1000, {1000, "system_server", "R", 1, 250, 2, 1000}},
+ {1100, {1100, "system_server", "S", 1, 350, 2, 1200}}}},
+ };
+
+ TemporaryDir firstSnapshot;
+ ASSERT_RESULT_OK(populateProcPidDir(firstSnapshot.path, pidToTids, perProcessStat,
+ perProcessStatus, perThreadStat));
+
+ ProcPidStat procPidStat(firstSnapshot.path);
+ ASSERT_TRUE(procPidStat.enabled())
+ << "Files under the path `" << firstSnapshot.path << "` are inaccessible";
+ ASSERT_RESULT_OK(procPidStat.collect());
+
+ auto actual = std::vector<ProcessStats>(procPidStat.deltaStats());
+ EXPECT_TRUE(isEqual(&expected, &actual)) << "First snapshot doesn't match.\nExpected:\n"
+ << toString(expected) << "\nActual:\n"
+ << toString(actual);
+ pidToTids = {
+ {1, {1, 453}}, {1000, {1000, 1400}}, // TID 1100 terminated and 1400 instantiated.
+ };
+
+ perProcessStat = {
+ {1, "1 (init) S 0 0 0 0 0 0 0 0 920 0 0 0 0 0 0 0 2 0 0\n"},
+ {1000, "1000 (system_server) R 1 0 0 0 0 0 0 0 1550 0 0 0 0 0 0 0 2 0 1000\n"},
+ };
+
+ perThreadStat = {
+ {1, "1 (init) S 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 2 0 0\n"},
+ {453, "453 (init) S 0 0 0 0 0 0 0 0 320 0 0 0 0 0 0 0 2 0 275\n"},
+ {1000, "1000 (system_server) R 1 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 2 0 1000\n"},
+ // TID 1100 hits +400 major page faults before terminating. This is counted against
+ // PID 1000's perProcessStat.
+ {1400, "1400 (system_server) S 1 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 2 0 8977476\n"},
+ };
+
+ expected = {
+ {.tgid = 1,
+ .uid = 0,
+ .vmPeakKb = 123,
+ .vmSizeKb = 456,
+ .vmHwmKb = 789,
+ .vmRssKb = 345,
+ .process = {1, "init", "S", 0, 700, 2, 0},
+ .threads = {{1, {1, "init", "S", 0, 400, 2, 0}},
+ {453, {453, "init", "S", 0, 300, 2, 275}}}},
+ {.tgid = 1000,
+ .uid = 10001234,
+ .vmPeakKb = 234,
+ .vmSizeKb = 567,
+ .vmHwmKb = 890,
+ .vmRssKb = 123,
+ .process = {1000, "system_server", "R", 1, 950, 2, 1000},
+ .threads = {{1000, {1000, "system_server", "R", 1, 350, 2, 1000}},
+ {1400, {1400, "system_server", "S", 1, 200, 2, 8977476}}}},
+ };
+
+ TemporaryDir secondSnapshot;
+ ASSERT_RESULT_OK(populateProcPidDir(secondSnapshot.path, pidToTids, perProcessStat,
+ perProcessStatus, perThreadStat));
+
+ procPidStat.mPath = secondSnapshot.path;
+ ASSERT_TRUE(procPidStat.enabled())
+ << "Files under the path `" << secondSnapshot.path << "` are inaccessible";
+ ASSERT_RESULT_OK(procPidStat.collect());
+
+ actual = std::vector<ProcessStats>(procPidStat.deltaStats());
+ EXPECT_TRUE(isEqual(&expected, &actual)) << "Second snapshot doesn't match.\nExpected:\n"
+ << toString(expected) << "\nActual:\n"
+ << toString(actual);
+}
+
+TEST(ProcPidStatTest, TestHandlesProcessTerminationBetweenScanningAndParsing) {
+ std::unordered_map<pid_t, std::vector<pid_t>> pidToTids = {
+ {1, {1}},
+ {100, {100}}, // Process terminates after scanning PID directory.
+ {1000, {1000}}, // Process terminates after reading stat file.
+ {2000, {2000}}, // Process terminates after scanning task directory.
+ {3000, {3000, 3300}}, // TID 3300 terminates after scanning task directory.
+ };
+
+ std::unordered_map<pid_t, std::string> perProcessStat = {
+ {1, "1 (init) S 0 0 0 0 0 0 0 0 220 0 0 0 0 0 0 0 1 0 0\n"},
+ // Process 100 terminated.
+ {1000, "1000 (system_server) R 1 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 1 0 1000\n"},
+ {2000, "2000 (logd) R 1 0 0 0 0 0 0 0 1200 0 0 0 0 0 0 0 1 0 4567\n"},
+ {3000, "3000 (disk I/O) R 1 0 0 0 0 0 0 0 10300 0 0 0 0 0 0 0 2 0 67890\n"},
+ };
+
+ std::unordered_map<pid_t, std::string> perProcessStatus = {
+ {1, "Pid:\t1\nTgid:\t1\nUid:\t0\t0\t0\t0\n"},
+ // Process 1000 terminated.
+ {2000, pidStatusStr(2000, 10001234)},
+ {3000, pidStatusStr(3000, 10001234)},
+ };
+
+ std::unordered_map<pid_t, std::string> perThreadStat = {
+ {1, "1 (init) S 0 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 1 0 0\n"},
+ // Process 2000 terminated.
+ {3000, "3000 (disk I/O) R 1 0 0 0 0 0 0 0 2400 0 0 0 0 0 0 0 2 0 67890\n"},
+ // TID 3300 terminated.
+ };
+
+ std::vector<ProcessStats> expected = {
+ {.tgid = 1,
+ .uid = 0,
+ .process = {1, "init", "S", 0, 220, 1, 0},
+ .threads = {{1, {1, "init", "S", 0, 200, 1, 0}}}},
+ {.tgid = -1,
+ .uid = -1,
+ .process = {1000, "system_server", "R", 1, 600, 1, 1000},
+ // Stats common between process and main-thread are copied when
+ // main-thread stats are not available.
+ .threads = {{1000, {1000, "system_server", "R", 1, 0, 1, 1000}}}},
+ {.tgid = 2000,
+ .uid = 10001234,
+ .process = {2000, "logd", "R", 1, 1200, 1, 4567},
+ .threads = {{2000, {2000, "logd", "R", 1, 0, 1, 4567}}}},
+ {.tgid = 3000,
+ .uid = 10001234,
+ .process = {3000, "disk I/O", "R", 1, 10300, 2, 67890},
+ .threads = {{3000, {3000, "disk I/O", "R", 1, 2400, 2, 67890}}}},
+ };
+
+ TemporaryDir procDir;
+ ASSERT_RESULT_OK(populateProcPidDir(procDir.path, pidToTids, perProcessStat, perProcessStatus,
+ perThreadStat));
+
+ ProcPidStat procPidStat(procDir.path);
+ ASSERT_TRUE(procPidStat.enabled())
+ << "Files under the path `" << procDir.path << "` are inaccessible";
+ ASSERT_RESULT_OK(procPidStat.collect());
+
+ auto actual = std::vector<ProcessStats>(procPidStat.deltaStats());
+ EXPECT_TRUE(isEqual(&expected, &actual)) << "Proc pid contents doesn't match.\nExpected:\n"
+ << toString(expected) << "\nActual:\n"
+ << toString(actual);
+}
+
+TEST(ProcPidStatTest, TestHandlesPidTidReuse) {
+ std::unordered_map<pid_t, std::vector<pid_t>> pidToTids = {
+ {1, {1, 367, 453, 589}},
+ {1000, {1000}},
+ {2345, {2345}},
+ };
+
+ std::unordered_map<pid_t, std::string> perProcessStat = {
+ {1, "1 (init) S 0 0 0 0 0 0 0 0 1200 0 0 0 0 0 0 0 4 0 0\n"},
+ {1000, "1000 (system_server) R 1 0 0 0 0 0 0 0 250 0 0 0 0 0 0 0 1 0 1000\n"},
+ {2345, "2345 (logd) R 1 0 0 0 0 0 0 0 54354 0 0 0 0 0 0 0 1 0 456\n"},
+ };
+
+ std::unordered_map<pid_t, std::string> perProcessStatus = {
+ {1, pidStatusStr(1, 0)},
+ {1000, pidStatusStr(1000, 10001234)},
+ {2345, pidStatusStr(2345, 10001234)},
+ };
+
+ std::unordered_map<pid_t, std::string> perThreadStat = {
+ {1, "1 (init) S 0 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 4 0 0\n"},
+ {367, "367 (init) S 0 0 0 0 0 0 0 0 400 0 0 0 0 0 0 0 4 0 100\n"},
+ {453, "453 (init) S 0 0 0 0 0 0 0 0 100 0 0 0 0 0 0 0 4 0 275\n"},
+ {589, "589 (init) S 0 0 0 0 0 0 0 0 500 0 0 0 0 0 0 0 4 0 600\n"},
+ {1000, "1000 (system_server) R 1 0 0 0 0 0 0 0 250 0 0 0 0 0 0 0 1 0 1000\n"},
+ {2345, "2345 (logd) R 1 0 0 0 0 0 0 0 54354 0 0 0 0 0 0 0 1 0 456\n"},
+ };
+
+ std::vector<ProcessStats> expected = {
+ {.tgid = 1,
+ .uid = 0,
+ .process = {1, "init", "S", 0, 1200, 4, 0},
+ .threads = {{1, {1, "init", "S", 0, 200, 4, 0}},
+ {367, {367, "init", "S", 0, 400, 4, 100}},
+ {453, {453, "init", "S", 0, 100, 4, 275}},
+ {589, {589, "init", "S", 0, 500, 4, 600}}}},
+ {.tgid = 1000,
+ .uid = 10001234,
+ .process = {1000, "system_server", "R", 1, 250, 1, 1000},
+ .threads = {{1000, {1000, "system_server", "R", 1, 250, 1, 1000}}}},
+ {.tgid = 2345,
+ .uid = 10001234,
+ .process = {2345, "logd", "R", 1, 54354, 1, 456},
+ .threads = {{2345, {2345, "logd", "R", 1, 54354, 1, 456}}}},
+ };
+
+ TemporaryDir firstSnapshot;
+ ASSERT_RESULT_OK(populateProcPidDir(firstSnapshot.path, pidToTids, perProcessStat,
+ perProcessStatus, perThreadStat));
+
+ ProcPidStat procPidStat(firstSnapshot.path);
+ ASSERT_TRUE(procPidStat.enabled())
+ << "Files under the path `" << firstSnapshot.path << "` are inaccessible";
+ ASSERT_RESULT_OK(procPidStat.collect());
+
+ auto actual = std::vector<ProcessStats>(procPidStat.deltaStats());
+ EXPECT_TRUE(isEqual(&expected, &actual)) << "First snapshot doesn't match.\nExpected:\n"
+ << toString(expected) << "\nActual:\n"
+ << toString(actual);
+
+ pidToTids = {
+ {1, {1, 589}}, // TID 589 reused by the same process.
+ {367, {367, 2000}}, // TID 367 reused as a PID. PID 2000 reused as a TID.
+ // PID 1000 reused as a new PID. TID 453 reused by a different PID.
+ {1000, {1000, 453}},
+ };
+
+ perProcessStat = {
+ {1, "1 (init) S 0 0 0 0 0 0 0 0 1800 0 0 0 0 0 0 0 2 0 0\n"},
+ {367, "367 (system_server) R 1 0 0 0 0 0 0 0 100 0 0 0 0 0 0 0 2 0 3450\n"},
+ {1000, "1000 (logd) R 1 0 0 0 0 0 0 0 2000 0 0 0 0 0 0 0 2 0 4650\n"},
+ };
+
+ perProcessStatus = {
+ {1, pidStatusStr(1, 0)},
+ {367, pidStatusStr(367, 10001234)},
+ {1000, pidStatusStr(1000, 10001234)},
+ };
+
+ perThreadStat = {
+ {1, "1 (init) S 0 0 0 0 0 0 0 0 500 0 0 0 0 0 0 0 2 0 0\n"},
+ {589, "589 (init) S 0 0 0 0 0 0 0 0 300 0 0 0 0 0 0 0 2 0 2345\n"},
+ {367, "367 (system_server) R 1 0 0 0 0 0 0 0 50 0 0 0 0 0 0 0 2 0 3450\n"},
+ {2000, "2000 (system_server) R 1 0 0 0 0 0 0 0 50 0 0 0 0 0 0 0 2 0 3670\n"},
+ {1000, "1000 (logd) R 1 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 2 0 4650\n"},
+ {453, "453 (logd) D 1 0 0 0 0 0 0 0 1800 0 0 0 0 0 0 0 2 0 4770\n"},
+ };
+
+ expected = {
+ {.tgid = 1,
+ .uid = 0,
+ .process = {1, "init", "S", 0, 600, 2, 0},
+ .threads = {{1, {1, "init", "S", 0, 300, 2, 0}},
+ {589, {589, "init", "S", 0, 300, 2, 2345}}}},
+ {.tgid = 367,
+ .uid = 10001234,
+ .process = {367, "system_server", "R", 1, 100, 2, 3450},
+ .threads = {{367, {367, "system_server", "R", 1, 50, 2, 3450}},
+ {2000, {2000, "system_server", "R", 1, 50, 2, 3670}}}},
+ {.tgid = 1000,
+ .uid = 10001234,
+ .process = {1000, "logd", "R", 1, 2000, 2, 4650},
+ .threads = {{1000, {1000, "logd", "R", 1, 200, 2, 4650}},
+ {453, {453, "logd", "D", 1, 1800, 2, 4770}}}},
+ };
+
+ TemporaryDir secondSnapshot;
+ ASSERT_RESULT_OK(populateProcPidDir(secondSnapshot.path, pidToTids, perProcessStat,
+ perProcessStatus, perThreadStat));
+
+ procPidStat.mPath = secondSnapshot.path;
+ ASSERT_TRUE(procPidStat.enabled())
+ << "Files under the path `" << secondSnapshot.path << "` are inaccessible";
+ ASSERT_RESULT_OK(procPidStat.collect());
+
+ actual = std::vector<ProcessStats>(procPidStat.deltaStats());
+ EXPECT_TRUE(isEqual(&expected, &actual)) << "Second snapshot doesn't match.\nExpected:\n"
+ << toString(expected) << "\nActual:\n"
+ << toString(actual);
+}
+
+TEST(ProcPidStatTest, TestErrorOnCorruptedProcessStatFile) {
+ std::unordered_map<pid_t, std::vector<pid_t>> pidToTids = {
+ {1, {1}},
+ };
+
+ std::unordered_map<pid_t, std::string> perProcessStat = {
+ {1, "1 (init) S 0 0 0 0 0 0 0 0 200 0 0 0 CORRUPTED DATA\n"},
+ };
+
+ std::unordered_map<pid_t, std::string> perProcessStatus = {
+ {1, pidStatusStr(1, 0)},
+ };
+
+ std::unordered_map<pid_t, std::string> perThreadStat = {
+ {1, "1 (init) S 0 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 1 0 0\n"},
+ };
+
+ TemporaryDir procDir;
+ ASSERT_RESULT_OK(populateProcPidDir(procDir.path, pidToTids, perProcessStat, perProcessStatus,
+ perThreadStat));
+
+ ProcPidStat procPidStat(procDir.path);
+ ASSERT_TRUE(procPidStat.enabled())
+ << "Files under the path `" << procDir.path << "` are inaccessible";
+ ASSERT_FALSE(procPidStat.collect().ok()) << "No error returned for invalid process stat file";
+}
+
+TEST(ProcPidStatTest, TestErrorOnCorruptedProcessStatusFile) {
+ std::unordered_map<pid_t, std::vector<pid_t>> pidToTids = {
+ {1, {1}},
+ };
+
+ std::unordered_map<pid_t, std::string> perProcessStat = {
+ {1, "1 (init) S 0 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 1 0 0\n"},
+ };
+
+ std::unordered_map<pid_t, std::string> perProcessStatus = {
+ {1, "Pid:\t1\nTgid:\t1\nCORRUPTED DATA\n"},
+ };
+
+ std::unordered_map<pid_t, std::string> perThreadStat = {
+ {1, "1 (init) S 0 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 1 0 0\n"},
+ };
+
+ TemporaryDir procDir;
+ ASSERT_RESULT_OK(populateProcPidDir(procDir.path, pidToTids, perProcessStat, perProcessStatus,
+ perThreadStat));
+
+ ProcPidStat procPidStat(procDir.path);
+ ASSERT_TRUE(procPidStat.enabled())
+ << "Files under the path `" << procDir.path << "` are inaccessible";
+ ASSERT_FALSE(procPidStat.collect().ok()) << "No error returned for invalid process status file";
+}
+
+TEST(ProcPidStatTest, TestErrorOnCorruptedThreadStatFile) {
+ std::unordered_map<pid_t, std::vector<pid_t>> pidToTids = {
+ {1, {1}},
+ };
+
+ std::unordered_map<pid_t, std::string> perProcessStat = {
+ {1, "1 (init) S 0 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 1 0 0\n"},
+ };
+
+ std::unordered_map<pid_t, std::string> perProcessStatus = {
+ {1, pidStatusStr(1, 0)},
+ };
+
+ std::unordered_map<pid_t, std::string> perThreadStat = {
+ {1, "1 (init) S 0 0 0 0 0 0 0 0 200 0 0 0 CORRUPTED DATA\n"},
+ };
+
+ TemporaryDir procDir;
+ ASSERT_RESULT_OK(populateProcPidDir(procDir.path, pidToTids, perProcessStat, perProcessStatus,
+ perThreadStat));
+
+ ProcPidStat procPidStat(procDir.path);
+ ASSERT_TRUE(procPidStat.enabled())
+ << "Files under the path `" << procDir.path << "` are inaccessible";
+ ASSERT_FALSE(procPidStat.collect().ok()) << "No error returned for invalid thread stat file";
+}
+
+TEST(ProcPidStatTest, TestHandlesSpaceInCommName) {
+ std::unordered_map<pid_t, std::vector<pid_t>> pidToTids = {
+ {1, {1}},
+ };
+
+ std::unordered_map<pid_t, std::string> perProcessStat = {
+ {1, "1 (random process name with space) S 0 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 1 0 0\n"},
+ };
+
+ std::unordered_map<pid_t, std::string> perProcessStatus = {
+ {1, pidStatusStr(1, 0)},
+ };
+
+ std::unordered_map<pid_t, std::string> perThreadStat = {
+ {1, "1 (random process name with space) S 0 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 1 0 0\n"},
+ };
+
+ std::vector<ProcessStats> expected = {
+ {.tgid = 1,
+ .uid = 0,
+ .process = {1, "random process name with space", "S", 0, 200, 1, 0},
+ .threads = {{1, {1, "random process name with space", "S", 0, 200, 1, 0}}}},
+ };
+
+ TemporaryDir procDir;
+ ASSERT_RESULT_OK(populateProcPidDir(procDir.path, pidToTids, perProcessStat, perProcessStatus,
+ perThreadStat));
+
+ ProcPidStat procPidStat(procDir.path);
+ ASSERT_TRUE(procPidStat.enabled())
+ << "Files under the path `" << procDir.path << "` are inaccessible";
+ ASSERT_RESULT_OK(procPidStat.collect());
+
+ auto actual = std::vector<ProcessStats>(procPidStat.deltaStats());
+ EXPECT_TRUE(isEqual(&expected, &actual)) << "Proc pid contents doesn't match.\nExpected:\n"
+ << toString(expected) << "\nActual:\n"
+ << toString(actual);
+}
+
+TEST(ProcPidStatTest, TestProcPidStatContentsFromDevice) {
+ ProcPidStat procPidStat;
+ ASSERT_TRUE(procPidStat.enabled()) << "/proc/[pid]/.* files are inaccessible";
+ ASSERT_RESULT_OK(procPidStat.collect());
+
+ const auto& processStats = procPidStat.deltaStats();
+ // The below check should pass because there should be at least one process.
+ EXPECT_GT(processStats.size(), 0);
+}
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
diff --git a/watchdog/server/tests/ProcStatTest.cpp b/cpp/watchdog/server/tests/ProcStatTest.cpp
similarity index 92%
rename from watchdog/server/tests/ProcStatTest.cpp
rename to cpp/watchdog/server/tests/ProcStatTest.cpp
index ad37e66..c991605 100644
--- a/watchdog/server/tests/ProcStatTest.cpp
+++ b/cpp/watchdog/server/tests/ProcStatTest.cpp
@@ -18,12 +18,11 @@
#include <android-base/file.h>
#include <android-base/stringprintf.h>
+#include <gmock/gmock.h>
#include <inttypes.h>
#include <string>
-#include "gmock/gmock.h"
-
namespace android {
namespace automotive {
namespace watchdog {
@@ -87,13 +86,12 @@
ProcStat procStat(tf.path);
ASSERT_TRUE(procStat.enabled()) << "Temporary file is inaccessible";
+ ASSERT_RESULT_OK(procStat.collect());
- const auto& actualFirstDelta = procStat.collect();
- EXPECT_RESULT_OK(actualFirstDelta);
- EXPECT_EQ(expectedFirstDelta, *actualFirstDelta)
- << "First snapshot doesnt't match.\nExpected:\n"
- << toString(expectedFirstDelta) << "\nActual:\n"
- << toString(*actualFirstDelta);
+ const auto& actualFirstDelta = procStat.deltaStats();
+ EXPECT_EQ(expectedFirstDelta, actualFirstDelta) << "First snapshot doesn't match.\nExpected:\n"
+ << toString(expectedFirstDelta) << "\nActual:\n"
+ << toString(actualFirstDelta);
constexpr char secondSnapshot[] =
"cpu 16200 8700 2000 4100 2200 6200 5900 0 0 0\n"
@@ -126,12 +124,13 @@
expectedSecondDelta.ioBlockedProcessesCnt = 2;
ASSERT_TRUE(WriteStringToFile(secondSnapshot, tf.path));
- const auto& actualSecondDelta = procStat.collect();
- EXPECT_RESULT_OK(actualSecondDelta);
- EXPECT_EQ(expectedSecondDelta, *actualSecondDelta)
+ ASSERT_RESULT_OK(procStat.collect());
+
+ const auto& actualSecondDelta = procStat.deltaStats();
+ EXPECT_EQ(expectedSecondDelta, actualSecondDelta)
<< "Second snapshot doesnt't match.\nExpected:\n"
<< toString(expectedSecondDelta) << "\nActual:\n"
- << toString(*actualSecondDelta);
+ << toString(actualSecondDelta);
}
TEST(ProcStatTest, TestErrorOnCorruptedStatFile) {
@@ -255,14 +254,13 @@
TEST(ProcStatTest, TestProcStatContentsFromDevice) {
ProcStat procStat;
ASSERT_TRUE(procStat.enabled()) << kProcStatPath << " file is inaccessible";
+ ASSERT_RESULT_OK(procStat.collect());
- const auto& info = procStat.collect();
- ASSERT_RESULT_OK(info);
-
+ const auto& info = procStat.deltaStats();
// The below checks should pass because the /proc/stats file should have the CPU time spent
// since bootup and there should be at least one running process.
- EXPECT_GT(info->totalCpuTime(), 0);
- EXPECT_GT(info->totalProcessesCnt(), 0);
+ EXPECT_GT(info.totalCpuTime(), 0);
+ EXPECT_GT(info.totalProcessesCnt(), 0);
}
} // namespace watchdog
diff --git a/watchdog/server/tests/UidIoStatsTest.cpp b/cpp/watchdog/server/tests/UidIoStatsTest.cpp
similarity index 66%
rename from watchdog/server/tests/UidIoStatsTest.cpp
rename to cpp/watchdog/server/tests/UidIoStatsTest.cpp
index f4f0dd9..2326381 100644
--- a/watchdog/server/tests/UidIoStatsTest.cpp
+++ b/cpp/watchdog/server/tests/UidIoStatsTest.cpp
@@ -17,11 +17,10 @@
#include "UidIoStats.h"
#include <android-base/file.h>
+#include <gmock/gmock.h>
#include <unordered_map>
-#include "gmock/gmock.h"
-
namespace android {
namespace automotive {
namespace watchdog {
@@ -36,14 +35,14 @@
"1005678 500 100 30 50 300 400 100 200 45 60\n"
"1009 0 0 0 0 40000 50000 20000 30000 0 300\n"
"1001000 4000 3000 2000 1000 400 300 200 100 50 10\n";
- std::unordered_map<uint32_t, UidIoUsage> expectedFirstUsage = {
- {1001234,
- {.uid = 1001234,
- .ios = {/*fgRdBytes=*/3000, /*bgRdBytes=*/0, /*fgWrBytes=*/500,
- /*bgWrBytes=*/0, /*fgFsync=*/20, /*bgFsync=*/0}}},
- {1005678, {.uid = 1005678, .ios = {30, 100, 50, 200, 45, 60}}},
- {1009, {.uid = 1009, .ios = {0, 20000, 0, 30000, 0, 300}}},
- {1001000, {.uid = 1001000, .ios = {2000, 200, 1000, 100, 50, 10}}},
+ std::unordered_map<uid_t, UidIoUsage> expectedFirstUsage = {
+ {1001234,
+ {.uid = 1001234,
+ .ios = {/*fgRdBytes=*/3000, /*bgRdBytes=*/0, /*fgWrBytes=*/500,
+ /*bgWrBytes=*/0, /*fgFsync=*/20, /*bgFsync=*/0}}},
+ {1005678, {.uid = 1005678, .ios = {30, 100, 50, 200, 45, 60}}},
+ {1009, {.uid = 1009, .ios = {0, 20000, 0, 30000, 0, 300}}},
+ {1001000, {.uid = 1001000, .ios = {2000, 200, 1000, 100, 50, 10}}},
};
TemporaryFile tf;
ASSERT_NE(tf.fd, -1);
@@ -51,16 +50,17 @@
UidIoStats uidIoStats(tf.path);
ASSERT_TRUE(uidIoStats.enabled()) << "Temporary file is inaccessible";
+ ASSERT_RESULT_OK(uidIoStats.collect());
- const auto& actualFirstUsage = uidIoStats.collect();
- EXPECT_TRUE(actualFirstUsage) << actualFirstUsage.error();
- EXPECT_EQ(expectedFirstUsage.size(), actualFirstUsage->size());
+ const auto& actualFirstUsage = uidIoStats.deltaStats();
+ EXPECT_EQ(expectedFirstUsage.size(), actualFirstUsage.size());
+
for (const auto& it : expectedFirstUsage) {
- if (actualFirstUsage->find(it.first) == actualFirstUsage->end()) {
+ if (actualFirstUsage.find(it.first) == actualFirstUsage.end()) {
ADD_FAILURE() << "Expected uid " << it.first << " not found in the first snapshot";
}
const UidIoUsage& expected = it.second;
- const UidIoUsage& actual = actualFirstUsage->at(it.first);
+ const UidIoUsage& actual = actualFirstUsage.at(it.first);
EXPECT_EQ(expected.uid, actual.uid);
EXPECT_EQ(expected.ios, actual.ios)
<< "Unexpected I/O usage for uid " << it.first << " in first snapshot.\nExpected:\n"
@@ -72,26 +72,28 @@
"1005678 600 100 40 50 1000 1000 1000 600 50 70\n"
"1003456 300 500 200 300 0 0 0 0 50 0\n"
"1001000 400 300 200 100 40 30 20 10 5 1\n";
- std::unordered_map<uint32_t, UidIoUsage> expectedSecondUsage = {
- {1001234,
- {.uid = 1001234,
- .ios = {/*fgRdBytes=*/4000, /*bgRdBytes=*/0,
- /*fgWrBytes=*/450, /*bgWrBytes=*/0, /*fgFsync=*/25,
- /*bgFsync=*/0}}},
- {1005678, {.uid = 1005678, .ios = {10, 900, 0, 400, 5, 10}}},
- {1003456, {.uid = 1003456, .ios = {200, 0, 300, 0, 50, 0}}},
- {1001000, {.uid = 1001000, .ios = {0, 0, 0, 0, 0, 0}}},
+ std::unordered_map<uid_t, UidIoUsage> expectedSecondUsage = {
+ {1001234,
+ {.uid = 1001234,
+ .ios = {/*fgRdBytes=*/4000, /*bgRdBytes=*/0,
+ /*fgWrBytes=*/450, /*bgWrBytes=*/0, /*fgFsync=*/25,
+ /*bgFsync=*/0}}},
+ {1005678, {.uid = 1005678, .ios = {10, 900, 0, 400, 5, 10}}},
+ {1003456, {.uid = 1003456, .ios = {200, 0, 300, 0, 50, 0}}},
+ {1001000, {.uid = 1001000, .ios = {0, 0, 0, 0, 0, 0}}},
};
ASSERT_TRUE(WriteStringToFile(secondSnapshot, tf.path));
- const auto& actualSecondUsage = uidIoStats.collect();
- EXPECT_TRUE(actualSecondUsage) << actualSecondUsage.error();
- EXPECT_EQ(expectedSecondUsage.size(), actualSecondUsage->size());
+ ASSERT_RESULT_OK(uidIoStats.collect());
+
+ const auto& actualSecondUsage = uidIoStats.deltaStats();
+ EXPECT_EQ(expectedSecondUsage.size(), actualSecondUsage.size());
+
for (const auto& it : expectedSecondUsage) {
- if (actualSecondUsage->find(it.first) == actualSecondUsage->end()) {
+ if (actualSecondUsage.find(it.first) == actualSecondUsage.end()) {
ADD_FAILURE() << "Expected uid " << it.first << " not found in the second snapshot";
}
const UidIoUsage& expected = it.second;
- const UidIoUsage& actual = actualSecondUsage->at(it.first);
+ const UidIoUsage& actual = actualSecondUsage.at(it.first);
EXPECT_EQ(expected.uid, actual.uid);
EXPECT_EQ(expected.ios, actual.ios)
<< "Unexpected I/O usage for uid " << it.first << " in second snapshot:.\nExpected:\n"
@@ -113,7 +115,7 @@
UidIoStats uidIoStats(tf.path);
ASSERT_TRUE(uidIoStats.enabled()) << "Temporary file is inaccessible";
- EXPECT_FALSE(uidIoStats.collect()) << "No error returned for invalid file";
+ EXPECT_FALSE(uidIoStats.collect().ok()) << "No error returned for invalid file";
}
} // namespace watchdog
diff --git a/watchdog/server/tests/WatchdogBinderMediatorTest.cpp b/cpp/watchdog/server/tests/WatchdogBinderMediatorTest.cpp
similarity index 80%
rename from watchdog/server/tests/WatchdogBinderMediatorTest.cpp
rename to cpp/watchdog/server/tests/WatchdogBinderMediatorTest.cpp
index 7e44893..c043d94 100644
--- a/watchdog/server/tests/WatchdogBinderMediatorTest.cpp
+++ b/cpp/watchdog/server/tests/WatchdogBinderMediatorTest.cpp
@@ -17,16 +17,18 @@
#include "WatchdogBinderMediator.h"
#include <android/automotive/watchdog/BootPhase.h>
+#include <android/automotive/watchdog/ComponentType.h>
+#include <android/automotive/watchdog/IoOveruseConfiguration.h>
#include <android/automotive/watchdog/PowerCycle.h>
#include <android/automotive/watchdog/UserState.h>
#include <binder/IBinder.h>
#include <binder/IPCThreadState.h>
-#include <errno.h>
+#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <private/android_filesystem_config.h>
#include <utils/RefBase.h>
-#include "gmock/gmock.h"
+#include <errno.h>
namespace android {
namespace automotive {
@@ -62,18 +64,28 @@
(const android::sp<ICarWatchdogMonitor>& monitor, int32_t pid), (override));
MOCK_METHOD(Status, notifyPowerCycleChange, (PowerCycle cycle), (override));
MOCK_METHOD(Status, notifyUserStateChange, (userid_t userId, UserState state), (override));
- MOCK_METHOD(void, binderDied, (const android::wp<IBinder>& who), (override));
};
-class MockIoPerfCollection : public IoPerfCollection {
+class MockWatchdogPerfService : public WatchdogPerfService {
public:
- MockIoPerfCollection() {}
+ MockWatchdogPerfService() {}
+ ~MockWatchdogPerfService() {}
+ MOCK_METHOD(Result<void>, start, (), (override));
+ MOCK_METHOD(void, terminate, (), (override));
MOCK_METHOD(Result<void>, onBootFinished, (), (override));
MOCK_METHOD(Result<void>, onCustomCollection, (int fd, const Vector<String16>& args),
(override));
MOCK_METHOD(Result<void>, onDump, (int fd), (override));
};
+class MockIoOveruseMonitor : public IoOveruseMonitor {
+public:
+ MockIoOveruseMonitor() {}
+ ~MockIoOveruseMonitor() {}
+ MOCK_METHOD(Result<void>, updateIoOveruseConfiguration,
+ (ComponentType type, const IoOveruseConfiguration& config), (override));
+};
+
class MockICarWatchdogClient : public ICarWatchdogClient {
public:
MOCK_METHOD(Status, checkIfAlive, (int32_t sessionId, TimeoutLength timeout), (override));
@@ -123,52 +135,66 @@
protected:
virtual void SetUp() {
mMockWatchdogProcessService = new MockWatchdogProcessService();
- mMockIoPerfCollection = new MockIoPerfCollection();
+ mMockWatchdogPerfService = new MockWatchdogPerfService();
+ mMockIoOveruseMonitor = new MockIoOveruseMonitor();
mWatchdogBinderMediator = new WatchdogBinderMediator();
- mWatchdogBinderMediator->init(mMockWatchdogProcessService, mMockIoPerfCollection);
+ mWatchdogBinderMediator->init(mMockWatchdogProcessService, mMockWatchdogPerfService,
+ mMockIoOveruseMonitor);
}
virtual void TearDown() {
mWatchdogBinderMediator->terminate();
- ASSERT_TRUE(mWatchdogBinderMediator->mWatchdogProcessService == nullptr);
- ASSERT_TRUE(mWatchdogBinderMediator->mIoPerfCollection == nullptr);
- mMockWatchdogProcessService = nullptr;
- mMockIoPerfCollection = nullptr;
- mWatchdogBinderMediator = nullptr;
- mScopedChangeCallingUid = nullptr;
+ ASSERT_EQ(mWatchdogBinderMediator->mWatchdogProcessService, nullptr);
+ ASSERT_EQ(mWatchdogBinderMediator->mWatchdogPerfService, nullptr);
+ ASSERT_EQ(mWatchdogBinderMediator->mIoOveruseMonitor, nullptr);
+ mMockWatchdogProcessService.clear();
+ mMockWatchdogPerfService.clear();
+ mMockIoOveruseMonitor.clear();
+ mWatchdogBinderMediator.clear();
+ mScopedChangeCallingUid.clear();
}
// Sets calling UID to imitate System's process.
void setSystemCallingUid() { mScopedChangeCallingUid = new ScopedChangeCallingUid(AID_SYSTEM); }
sp<MockWatchdogProcessService> mMockWatchdogProcessService;
- sp<MockIoPerfCollection> mMockIoPerfCollection;
+ sp<MockWatchdogPerfService> mMockWatchdogPerfService;
+ sp<MockIoOveruseMonitor> mMockIoOveruseMonitor;
sp<WatchdogBinderMediator> mWatchdogBinderMediator;
sp<ScopedChangeCallingUid> mScopedChangeCallingUid;
};
TEST_F(WatchdogBinderMediatorTest, TestErrorOnNullptrDuringInit) {
sp<WatchdogBinderMediator> mediator = new WatchdogBinderMediator();
- ASSERT_FALSE(mediator->init(nullptr, new MockIoPerfCollection()).ok())
+ ASSERT_FALSE(
+ mediator->init(nullptr, new MockWatchdogPerfService(), new MockIoOveruseMonitor()).ok())
<< "No error returned on nullptr watchdog process service";
- ASSERT_FALSE(mediator->init(new MockWatchdogProcessService(), nullptr).ok())
- << "No error returned on nullptr I/O perf collection";
- ASSERT_FALSE(mediator->init(nullptr, nullptr).ok()) << "No error returned on nullptr";
+ ASSERT_FALSE(
+ mediator->init(new MockWatchdogProcessService(), nullptr, new MockIoOveruseMonitor())
+ .ok())
+ << "No error returned on nullptr watchdog perf service";
+ ASSERT_FALSE(
+ mediator->init(new MockWatchdogProcessService(), new MockWatchdogPerfService(), nullptr)
+ .ok())
+ << "No error returned on nullptr I/O overuse monitor";
+ ASSERT_FALSE(mediator->init(nullptr, nullptr, nullptr).ok()) << "No error returned on nullptr";
}
TEST_F(WatchdogBinderMediatorTest, TestHandlesEmptyDumpArgs) {
EXPECT_CALL(*mMockWatchdogProcessService, dump(-1, _)).WillOnce(Return(Result<void>()));
- EXPECT_CALL(*mMockIoPerfCollection, onDump(-1)).WillOnce(Return(Result<void>()));
+ EXPECT_CALL(*mMockWatchdogPerfService, onDump(-1)).WillOnce(Return(Result<void>()));
mWatchdogBinderMediator->dump(-1, Vector<String16>());
}
-TEST_F(WatchdogBinderMediatorTest, TestHandlesStartCustomIoPerfCollection) {
- EXPECT_CALL(*mMockIoPerfCollection, onCustomCollection(-1, _)).WillOnce(Return(Result<void>()));
+TEST_F(WatchdogBinderMediatorTest, TestHandlesStartCustomPerfCollection) {
+ EXPECT_CALL(*mMockWatchdogPerfService, onCustomCollection(-1, _))
+ .WillOnce(Return(Result<void>()));
Vector<String16> args;
args.push_back(String16(kStartCustomCollectionFlag));
ASSERT_EQ(mWatchdogBinderMediator->dump(-1, args), OK);
}
-TEST_F(WatchdogBinderMediatorTest, TestHandlesStopCustomIoPerfCollection) {
- EXPECT_CALL(*mMockIoPerfCollection, onCustomCollection(-1, _)).WillOnce(Return(Result<void>()));
+TEST_F(WatchdogBinderMediatorTest, TestHandlesStopCustomPerfCollection) {
+ EXPECT_CALL(*mMockWatchdogPerfService, onCustomCollection(-1, _))
+ .WillOnce(Return(Result<void>()));
Vector<String16> args;
args.push_back(String16(kEndCustomCollectionFlag));
@@ -270,16 +296,7 @@
ASSERT_TRUE(status.isOk()) << status;
}
-TEST_F(WatchdogBinderMediatorTest, TestErrorOnTellMediatorAliveWithNonSystemCallingUid) {
- sp<ICarWatchdogClient> mediator = new MockICarWatchdogClient();
- std::vector clientsNotResponding = {123};
- EXPECT_CALL(*mMockWatchdogProcessService, tellMediatorAlive(_, _, _)).Times(0);
- Status status = mWatchdogBinderMediator->tellMediatorAlive(mediator, clientsNotResponding, 456);
- ASSERT_FALSE(status.isOk()) << status;
-}
-
TEST_F(WatchdogBinderMediatorTest, TestTellMediatorAlive) {
- setSystemCallingUid();
sp<ICarWatchdogClient> mediator = new MockICarWatchdogClient();
std::vector clientsNotResponding = {123};
EXPECT_CALL(*mMockWatchdogProcessService,
@@ -289,15 +306,7 @@
ASSERT_TRUE(status.isOk()) << status;
}
-TEST_F(WatchdogBinderMediatorTest, TestErrorOnTellDumpFinishedWithNonSystemCallingUid) {
- sp<ICarWatchdogMonitor> monitor = new MockICarWatchdogMonitor();
- EXPECT_CALL(*mMockWatchdogProcessService, tellDumpFinished(_, _)).Times(0);
- Status status = mWatchdogBinderMediator->tellDumpFinished(monitor, 456);
- ASSERT_FALSE(status.isOk()) << status;
-}
-
TEST_F(WatchdogBinderMediatorTest, TestTellDumpFinished) {
- setSystemCallingUid();
sp<ICarWatchdogMonitor> monitor = new MockICarWatchdogMonitor();
EXPECT_CALL(*mMockWatchdogProcessService, tellDumpFinished(monitor, 456))
.WillOnce(Return(Status::ok()));
@@ -368,7 +377,7 @@
TEST_F(WatchdogBinderMediatorTest, TestNotifyBootPhaseChange) {
setSystemCallingUid();
StateType type = StateType::BOOT_PHASE;
- EXPECT_CALL(*mMockIoPerfCollection, onBootFinished()).WillOnce(Return(Result<void>()));
+ EXPECT_CALL(*mMockWatchdogPerfService, onBootFinished()).WillOnce(Return(Result<void>()));
Status status = mWatchdogBinderMediator->notifySystemStateChange(
type, static_cast<int32_t>(BootPhase::BOOT_COMPLETED), -1);
ASSERT_TRUE(status.isOk()) << status;
@@ -378,11 +387,27 @@
TEST_F(WatchdogBinderMediatorTest, TestNotifyBootPhaseChangeWithNonBootCompletedPhase) {
setSystemCallingUid();
StateType type = StateType::BOOT_PHASE;
- EXPECT_CALL(*mMockIoPerfCollection, onBootFinished()).Times(0);
+ EXPECT_CALL(*mMockWatchdogPerfService, onBootFinished()).Times(0);
Status status = mWatchdogBinderMediator->notifySystemStateChange(type, 0, -1);
ASSERT_TRUE(status.isOk()) << status;
}
+TEST_F(WatchdogBinderMediatorTest, TestUpdateIoOveruseConfiguration) {
+ setSystemCallingUid();
+ EXPECT_CALL(*mMockIoOveruseMonitor, updateIoOveruseConfiguration(ComponentType::SYSTEM, _))
+ .WillOnce(Return(Result<void>()));
+ Status status = mWatchdogBinderMediator->updateIoOveruseConfiguration(ComponentType::SYSTEM,
+ IoOveruseConfiguration{});
+ ASSERT_TRUE(status.isOk()) << status;
+}
+
+TEST_F(WatchdogBinderMediatorTest, TestErrorOnUpdateIoOveruseConfigurationWithNonSystemCallingUid) {
+ EXPECT_CALL(*mMockIoOveruseMonitor, updateIoOveruseConfiguration(_, _)).Times(0);
+ Status status = mWatchdogBinderMediator->updateIoOveruseConfiguration(ComponentType::SYSTEM,
+ IoOveruseConfiguration{});
+ ASSERT_FALSE(status.isOk()) << status;
+}
+
} // namespace watchdog
} // namespace automotive
} // namespace android
diff --git a/cpp/watchdog/server/tests/WatchdogPerfServiceTest.cpp b/cpp/watchdog/server/tests/WatchdogPerfServiceTest.cpp
new file mode 100644
index 0000000..998ec86
--- /dev/null
+++ b/cpp/watchdog/server/tests/WatchdogPerfServiceTest.cpp
@@ -0,0 +1,526 @@
+/*
+ * Copyright 2020 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.
+ */
+
+#include "WatchdogPerfService.h"
+
+#include "LooperStub.h"
+#include "MockProcPidStat.h"
+#include "MockProcStat.h"
+#include "MockUidIoStats.h"
+#include "ProcPidDir.h"
+#include "ProcPidStat.h"
+#include "ProcStat.h"
+#include "UidIoStats.h"
+#include "utils/PackageNameResolver.h"
+
+#include <WatchdogProperties.sysprop.h>
+#include <android-base/file.h>
+#include <gmock/gmock.h>
+
+#include <future> // NOLINT(build/c++11)
+#include <queue>
+#include <string>
+#include <vector>
+
+namespace android {
+namespace automotive {
+namespace watchdog {
+
+namespace {
+
+using android::wp;
+using android::base::Error;
+using android::base::Result;
+using ::testing::_;
+using ::testing::DefaultValue;
+using ::testing::InSequence;
+using testing::LooperStub;
+using ::testing::Mock;
+using ::testing::NiceMock;
+using ::testing::Return;
+using ::testing::StrictMock;
+using ::testing::UnorderedElementsAreArray;
+
+const std::chrono::seconds kTestBootInterval = 1s;
+const std::chrono::seconds kTestPeriodicInterval = 2s;
+const std::chrono::seconds kTestCustomInterval = 3s;
+const std::chrono::seconds kTestCustomCollectionDuration = 11s;
+
+class MockDataProcessor : public DataProcessor {
+public:
+ MockDataProcessor() { ON_CALL(*this, name()).WillByDefault(Return("MockedDataProcessor")); }
+ MOCK_METHOD(std::string, name, (), (override));
+ MOCK_METHOD(Result<void>, start, (), (override));
+ MOCK_METHOD(void, terminate, (), (override));
+ MOCK_METHOD(Result<void>, onBoottimeCollection,
+ (time_t, const wp<UidIoStats>&, const wp<ProcStat>&, const wp<ProcPidStat>&),
+ (override));
+ MOCK_METHOD(Result<void>, onPeriodicCollection,
+ (time_t, const wp<UidIoStats>&, const wp<ProcStat>&, const wp<ProcPidStat>&),
+ (override));
+ MOCK_METHOD(Result<void>, onCustomCollection,
+ (time_t, const std::unordered_set<std::string>&, const wp<UidIoStats>&,
+ const wp<ProcStat>&, const wp<ProcPidStat>&),
+ (override));
+ MOCK_METHOD(Result<void>, onDump, (int), (override));
+ MOCK_METHOD(Result<void>, onCustomCollectionDump, (int), (override));
+};
+
+} // namespace
+
+namespace internal {
+
+class WatchdogPerfServicePeer {
+public:
+ explicit WatchdogPerfServicePeer(sp<WatchdogPerfService> service) : service(service) {}
+ WatchdogPerfServicePeer() = delete;
+ ~WatchdogPerfServicePeer() { service->terminate(); }
+
+ void injectFakes() {
+ looperStub = new LooperStub();
+ mockUidIoStats = new NiceMock<MockUidIoStats>();
+ mockProcStat = new NiceMock<MockProcStat>();
+ mockProcPidStat = new NiceMock<MockProcPidStat>();
+ mockDataProcessor = new StrictMock<MockDataProcessor>();
+
+ Mutex::Autolock lock(service->mMutex);
+ service->mHandlerLooper = looperStub;
+ service->mUidIoStats = mockUidIoStats;
+ service->mProcStat = mockProcStat;
+ service->mProcPidStat = mockProcPidStat;
+ ASSERT_RESULT_OK(service->registerDataProcessor(mockDataProcessor));
+ }
+
+ Result<void> start() {
+ auto ret = service->start();
+ if (!ret.ok()) {
+ return ret;
+ }
+ Mutex::Autolock lock(service->mMutex);
+ service->mBoottimeCollection.interval = kTestBootInterval;
+ service->mPeriodicCollection.interval = kTestPeriodicInterval;
+ return {};
+ }
+
+ CollectionEvent getCurrCollectionEvent() {
+ Mutex::Autolock lock(service->mMutex);
+ return service->mCurrCollectionEvent;
+ }
+
+ std::future<void> joinCollectionThread() {
+ return std::async([&]() {
+ if (service->mCollectionThread.joinable()) {
+ service->mCollectionThread.join();
+ }
+ });
+ }
+
+ void verifyAndClearExpectations() {
+ Mock::VerifyAndClearExpectations(mockUidIoStats.get());
+ Mock::VerifyAndClearExpectations(mockProcStat.get());
+ Mock::VerifyAndClearExpectations(mockProcPidStat.get());
+ Mock::VerifyAndClearExpectations(mockDataProcessor.get());
+ }
+
+ sp<WatchdogPerfService> service;
+ // Below fields are populated only on injectFakes.
+ sp<LooperStub> looperStub;
+ sp<MockUidIoStats> mockUidIoStats;
+ sp<MockProcStat> mockProcStat;
+ sp<MockProcPidStat> mockProcPidStat;
+ sp<MockDataProcessor> mockDataProcessor;
+};
+
+} // namespace internal
+
+TEST(WatchdogPerfServiceTest, TestServiceStartAndTerminate) {
+ sp<WatchdogPerfService> service = new WatchdogPerfService();
+ ASSERT_RESULT_OK(service->start());
+ ASSERT_TRUE(service->mCollectionThread.joinable()) << "Collection thread not created";
+ ASSERT_FALSE(service->start().ok())
+ << "No error returned when WatchdogPerfService was started more than once";
+ ASSERT_TRUE(sysprop::boottimeCollectionInterval().has_value());
+ ASSERT_EQ(std::chrono::duration_cast<std::chrono::seconds>(
+ service->mBoottimeCollection.interval)
+ .count(),
+ sysprop::boottimeCollectionInterval().value());
+ ASSERT_TRUE(sysprop::periodicCollectionInterval().has_value());
+ ASSERT_EQ(std::chrono::duration_cast<std::chrono::seconds>(
+ service->mPeriodicCollection.interval)
+ .count(),
+ sysprop::periodicCollectionInterval().value());
+
+ service->terminate();
+ ASSERT_FALSE(service->mCollectionThread.joinable()) << "Collection thread did not terminate";
+}
+
+TEST(WatchdogPerfServiceTest, TestValidCollectionSequence) {
+ sp<WatchdogPerfService> service = new WatchdogPerfService();
+
+ internal::WatchdogPerfServicePeer servicePeer(service);
+ servicePeer.injectFakes();
+
+ EXPECT_CALL(*servicePeer.mockDataProcessor, start()).Times(1);
+
+ ASSERT_RESULT_OK(servicePeer.start());
+
+ wp<UidIoStats> uidIoStats(servicePeer.mockUidIoStats);
+ wp<ProcStat> procStat(servicePeer.mockProcStat);
+ wp<ProcPidStat> procPidStat(servicePeer.mockProcPidStat);
+
+ // #1 Boot-time collection
+ EXPECT_CALL(*servicePeer.mockUidIoStats, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockProcStat, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockProcPidStat, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockDataProcessor,
+ onBoottimeCollection(_, uidIoStats, procStat, procPidStat))
+ .Times(1);
+
+ ASSERT_RESULT_OK(servicePeer.looperStub->pollCache());
+
+ ASSERT_EQ(servicePeer.looperStub->numSecondsElapsed(), 0)
+ << "Boot-time collection didn't start immediately";
+ ASSERT_EQ(servicePeer.getCurrCollectionEvent(), CollectionEvent::BOOT_TIME)
+ << "Invalid collection event";
+ servicePeer.verifyAndClearExpectations();
+
+ // #2 Boot-time collection
+ EXPECT_CALL(*servicePeer.mockUidIoStats, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockProcStat, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockProcPidStat, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockDataProcessor,
+ onBoottimeCollection(_, uidIoStats, procStat, procPidStat))
+ .Times(1);
+
+ ASSERT_RESULT_OK(servicePeer.looperStub->pollCache());
+
+ ASSERT_EQ(servicePeer.looperStub->numSecondsElapsed(), kTestBootInterval.count())
+ << "Subsequent boot-time collection didn't happen at " << kTestBootInterval.count()
+ << " seconds interval";
+ ASSERT_EQ(servicePeer.getCurrCollectionEvent(), CollectionEvent::BOOT_TIME)
+ << "Invalid collection event";
+ servicePeer.verifyAndClearExpectations();
+
+ // #3 Last boot-time collection
+ EXPECT_CALL(*servicePeer.mockUidIoStats, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockProcStat, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockProcPidStat, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockDataProcessor,
+ onBoottimeCollection(_, uidIoStats, procStat, procPidStat))
+ .Times(1);
+
+ ASSERT_RESULT_OK(service->onBootFinished());
+
+ ASSERT_RESULT_OK(servicePeer.looperStub->pollCache());
+
+ ASSERT_EQ(servicePeer.looperStub->numSecondsElapsed(), 0)
+ << "Last boot-time collection didn't happen immediately after receiving boot complete "
+ << "notification";
+ ASSERT_EQ(servicePeer.getCurrCollectionEvent(), CollectionEvent::PERIODIC)
+ << "Invalid collection event";
+ servicePeer.verifyAndClearExpectations();
+
+ // #4 Periodic collection
+ EXPECT_CALL(*servicePeer.mockUidIoStats, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockProcStat, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockProcPidStat, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockDataProcessor,
+ onPeriodicCollection(_, uidIoStats, procStat, procPidStat))
+ .Times(1);
+
+ ASSERT_RESULT_OK(servicePeer.looperStub->pollCache());
+
+ ASSERT_EQ(servicePeer.looperStub->numSecondsElapsed(), kTestPeriodicInterval.count())
+ << "First periodic collection didn't happen at " << kTestPeriodicInterval.count()
+ << " seconds interval";
+ ASSERT_EQ(servicePeer.getCurrCollectionEvent(), CollectionEvent::PERIODIC)
+ << "Invalid collection event";
+ servicePeer.verifyAndClearExpectations();
+
+ // #5 Custom collection
+ Vector<String16> args;
+ args.push_back(String16(kStartCustomCollectionFlag));
+ args.push_back(String16(kIntervalFlag));
+ args.push_back(String16(std::to_string(kTestCustomInterval.count()).c_str()));
+ args.push_back(String16(kMaxDurationFlag));
+ args.push_back(String16(std::to_string(kTestCustomCollectionDuration.count()).c_str()));
+
+ ASSERT_RESULT_OK(service->onCustomCollection(-1, args));
+
+ EXPECT_CALL(*servicePeer.mockUidIoStats, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockProcStat, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockProcPidStat, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockDataProcessor,
+ onCustomCollection(_, _, uidIoStats, procStat, procPidStat))
+ .Times(1);
+
+ ASSERT_RESULT_OK(servicePeer.looperStub->pollCache());
+
+ ASSERT_EQ(servicePeer.looperStub->numSecondsElapsed(), 0)
+ << "Custom collection didn't start immediately";
+ ASSERT_EQ(servicePeer.getCurrCollectionEvent(), CollectionEvent::CUSTOM)
+ << "Invalid collection event";
+ servicePeer.verifyAndClearExpectations();
+
+ // #6 Custom collection
+ EXPECT_CALL(*servicePeer.mockUidIoStats, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockProcStat, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockProcPidStat, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockDataProcessor,
+ onCustomCollection(_, _, uidIoStats, procStat, procPidStat))
+ .Times(1);
+
+ ASSERT_RESULT_OK(servicePeer.looperStub->pollCache());
+
+ ASSERT_EQ(servicePeer.looperStub->numSecondsElapsed(), kTestCustomInterval.count())
+ << "Subsequent custom collection didn't happen at " << kTestCustomInterval.count()
+ << " seconds interval";
+ ASSERT_EQ(servicePeer.getCurrCollectionEvent(), CollectionEvent::CUSTOM)
+ << "Invalid collection event";
+ servicePeer.verifyAndClearExpectations();
+
+ // #7 End custom collection
+ TemporaryFile customDump;
+ {
+ InSequence s;
+ EXPECT_CALL(*servicePeer.mockDataProcessor, onCustomCollectionDump(customDump.fd)).Times(1);
+ EXPECT_CALL(*servicePeer.mockDataProcessor, onCustomCollectionDump(-1)).Times(1);
+ }
+
+ args.clear();
+ args.push_back(String16(kEndCustomCollectionFlag));
+ ASSERT_RESULT_OK(service->onCustomCollection(customDump.fd, args));
+ ASSERT_RESULT_OK(servicePeer.looperStub->pollCache());
+ ASSERT_EQ(servicePeer.getCurrCollectionEvent(), CollectionEvent::PERIODIC)
+ << "Invalid collection event";
+
+ // #8 Switch to periodic collection
+ EXPECT_CALL(*servicePeer.mockUidIoStats, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockProcStat, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockProcPidStat, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockDataProcessor,
+ onPeriodicCollection(_, uidIoStats, procStat, procPidStat))
+ .Times(1);
+
+ ASSERT_RESULT_OK(servicePeer.looperStub->pollCache());
+
+ ASSERT_EQ(servicePeer.looperStub->numSecondsElapsed(), 0)
+ << "Periodic collection didn't start immediately after ending custom collection";
+ ASSERT_EQ(servicePeer.getCurrCollectionEvent(), CollectionEvent::PERIODIC)
+ << "Invalid collection event";
+ servicePeer.verifyAndClearExpectations();
+
+ EXPECT_CALL(*servicePeer.mockDataProcessor, terminate()).Times(1);
+}
+
+TEST(WatchdogPerfServiceTest, TestCollectionTerminatesOnZeroEnabledCollectors) {
+ sp<WatchdogPerfService> service = new WatchdogPerfService();
+
+ internal::WatchdogPerfServicePeer servicePeer(service);
+ servicePeer.injectFakes();
+
+ EXPECT_CALL(*servicePeer.mockDataProcessor, start()).Times(1);
+
+ ASSERT_RESULT_OK(servicePeer.start());
+
+ ON_CALL(*servicePeer.mockUidIoStats, enabled()).WillByDefault(Return(false));
+ ON_CALL(*servicePeer.mockProcStat, enabled()).WillByDefault(Return(false));
+ ON_CALL(*servicePeer.mockProcPidStat, enabled()).WillByDefault(Return(false));
+
+ // Collection should terminate and call data processor's terminate method on error.
+ EXPECT_CALL(*servicePeer.mockDataProcessor, terminate()).Times(1);
+
+ ASSERT_RESULT_OK(servicePeer.looperStub->pollCache());
+
+ ASSERT_EQ(servicePeer.joinCollectionThread().wait_for(1s), std::future_status::ready)
+ << "Collection thread didn't terminate within 1 second.";
+ ASSERT_EQ(servicePeer.getCurrCollectionEvent(), CollectionEvent::TERMINATED);
+}
+
+TEST(WatchdogPerfServiceTest, TestCollectionTerminatesOnDataCollectorError) {
+ sp<WatchdogPerfService> service = new WatchdogPerfService();
+
+ internal::WatchdogPerfServicePeer servicePeer(service);
+ servicePeer.injectFakes();
+
+ EXPECT_CALL(*servicePeer.mockDataProcessor, start()).Times(1);
+
+ ASSERT_RESULT_OK(servicePeer.start());
+
+ // Inject data collector error.
+ Result<void> errorRes = Error() << "Failed to collect data";
+ EXPECT_CALL(*servicePeer.mockUidIoStats, collect()).WillOnce(Return(errorRes));
+
+ // Collection should terminate and call data processor's terminate method on error.
+ EXPECT_CALL(*servicePeer.mockDataProcessor, terminate()).Times(1);
+
+ ASSERT_RESULT_OK(servicePeer.looperStub->pollCache());
+
+ ASSERT_EQ(servicePeer.joinCollectionThread().wait_for(1s), std::future_status::ready)
+ << "Collection thread didn't terminate within 1 second.";
+ ASSERT_EQ(servicePeer.getCurrCollectionEvent(), CollectionEvent::TERMINATED);
+}
+
+TEST(WatchdogPerfServiceTest, TestCollectionTerminatesOnDataProcessorError) {
+ sp<WatchdogPerfService> service = new WatchdogPerfService();
+
+ internal::WatchdogPerfServicePeer servicePeer(service);
+ servicePeer.injectFakes();
+
+ EXPECT_CALL(*servicePeer.mockDataProcessor, start()).Times(1);
+ EXPECT_CALL(*servicePeer.mockDataProcessor, name()).Times(1);
+
+ ASSERT_RESULT_OK(servicePeer.start());
+
+ // Inject data processor error.
+ Result<void> errorRes = Error() << "Failed to process data";
+ EXPECT_CALL(*servicePeer.mockDataProcessor,
+ onBoottimeCollection(_, wp<UidIoStats>(servicePeer.mockUidIoStats),
+ wp<ProcStat>(servicePeer.mockProcStat),
+ wp<ProcPidStat>(servicePeer.mockProcPidStat)))
+ .WillOnce(Return(errorRes));
+
+ // Collection should terminate and call data processor's terminate method on error.
+ EXPECT_CALL(*servicePeer.mockDataProcessor, terminate()).Times(1);
+
+ ASSERT_RESULT_OK(servicePeer.looperStub->pollCache());
+
+ ASSERT_EQ(servicePeer.joinCollectionThread().wait_for(1s), std::future_status::ready)
+ << "Collection thread didn't terminate within 1 second.";
+ ASSERT_EQ(servicePeer.getCurrCollectionEvent(), CollectionEvent::TERMINATED);
+}
+
+TEST(WatchdogPerfServiceTest, TestCustomCollection) {
+ sp<WatchdogPerfService> service = new WatchdogPerfService();
+
+ internal::WatchdogPerfServicePeer servicePeer(service);
+ servicePeer.injectFakes();
+
+ EXPECT_CALL(*servicePeer.mockDataProcessor, start()).Times(1);
+
+ ASSERT_RESULT_OK(servicePeer.start());
+
+ EXPECT_CALL(*servicePeer.mockUidIoStats, collect()).Times(2);
+ EXPECT_CALL(*servicePeer.mockProcStat, collect()).Times(2);
+ EXPECT_CALL(*servicePeer.mockProcPidStat, collect()).Times(2);
+ EXPECT_CALL(*servicePeer.mockDataProcessor,
+ onBoottimeCollection(_, wp<UidIoStats>(servicePeer.mockUidIoStats),
+ wp<ProcStat>(servicePeer.mockProcStat),
+ wp<ProcPidStat>(servicePeer.mockProcPidStat)))
+ .Times(2);
+
+ // Make sure the collection event changes from CollectionEvent::INIT to
+ // CollectionEvent::BOOT_TIME.
+ ASSERT_RESULT_OK(servicePeer.looperStub->pollCache());
+
+ // Mock boot complete and switch collection event to CollectionEvent::PERIODIC.
+ ASSERT_RESULT_OK(service->onBootFinished());
+
+ ASSERT_RESULT_OK(servicePeer.looperStub->pollCache());
+ ASSERT_EQ(servicePeer.getCurrCollectionEvent(), CollectionEvent::PERIODIC)
+ << "Invalid collection event";
+ servicePeer.verifyAndClearExpectations();
+
+ // Start custom collection with filter packages option.
+ Vector<String16> args;
+ args.push_back(String16(kStartCustomCollectionFlag));
+ args.push_back(String16(kIntervalFlag));
+ args.push_back(String16(std::to_string(kTestCustomInterval.count()).c_str()));
+ args.push_back(String16(kMaxDurationFlag));
+ args.push_back(String16(std::to_string(kTestCustomCollectionDuration.count()).c_str()));
+ args.push_back(String16(kFilterPackagesFlag));
+ args.push_back(String16("android.car.cts,system_server"));
+
+ ASSERT_RESULT_OK(service->onCustomCollection(-1, args));
+
+ // Poll until custom collection auto terminates.
+ int maxIterations =
+ static_cast<int>(kTestCustomCollectionDuration.count() / kTestCustomInterval.count());
+ for (int i = 0; i < maxIterations; ++i) {
+ EXPECT_CALL(*servicePeer.mockUidIoStats, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockProcStat, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockProcPidStat, collect()).Times(1);
+ EXPECT_CALL(*servicePeer.mockDataProcessor,
+ onCustomCollection(_,
+ UnorderedElementsAreArray(
+ {"android.car.cts", "system_server"}),
+ wp<UidIoStats>(servicePeer.mockUidIoStats),
+ wp<ProcStat>(servicePeer.mockProcStat),
+ wp<ProcPidStat>(servicePeer.mockProcPidStat)))
+ .Times(1);
+
+ ASSERT_RESULT_OK(servicePeer.looperStub->pollCache());
+
+ int secondsElapsed = (i == 0 ? 0 : kTestCustomInterval.count());
+ ASSERT_EQ(servicePeer.looperStub->numSecondsElapsed(), secondsElapsed)
+ << "Custom collection didn't happen at " << secondsElapsed
+ << " seconds interval in iteration " << i;
+ ASSERT_EQ(servicePeer.getCurrCollectionEvent(), CollectionEvent::CUSTOM)
+ << "Invalid collection event";
+ servicePeer.verifyAndClearExpectations();
+ }
+
+ EXPECT_CALL(*servicePeer.mockDataProcessor, onCustomCollectionDump(-1)).Times(1);
+
+ // Next looper message was injected during startCustomCollection to end the custom collection
+ // after |kTestCustomCollectionDuration|. On processing this message, the custom collection
+ // should auto terminate.
+ ASSERT_RESULT_OK(servicePeer.looperStub->pollCache());
+
+ ASSERT_EQ(servicePeer.looperStub->numSecondsElapsed(),
+ kTestCustomCollectionDuration.count() % kTestCustomInterval.count())
+ << "Custom collection did't end after " << kTestCustomCollectionDuration.count()
+ << " seconds";
+ ASSERT_EQ(servicePeer.getCurrCollectionEvent(), CollectionEvent::PERIODIC)
+ << "Invalid collection event";
+ EXPECT_CALL(*servicePeer.mockDataProcessor, terminate()).Times(1);
+}
+
+TEST(WatchdogPerfServiceTest, TestHandlesInvalidDumpArguments) {
+ sp<WatchdogPerfService> service = new WatchdogPerfService();
+ Vector<String16> args;
+ args.push_back(String16(kStartCustomCollectionFlag));
+ args.push_back(String16("Invalid flag"));
+ args.push_back(String16("Invalid value"));
+ ASSERT_FALSE(service->onCustomCollection(-1, args).ok());
+
+ args.clear();
+ args.push_back(String16(kStartCustomCollectionFlag));
+ args.push_back(String16(kIntervalFlag));
+ args.push_back(String16("Invalid interval"));
+ ASSERT_FALSE(service->onCustomCollection(-1, args).ok());
+
+ args.clear();
+ args.push_back(String16(kStartCustomCollectionFlag));
+ args.push_back(String16(kMaxDurationFlag));
+ args.push_back(String16("Invalid duration"));
+ ASSERT_FALSE(service->onCustomCollection(-1, args).ok());
+
+ args.clear();
+ args.push_back(String16(kEndCustomCollectionFlag));
+ args.push_back(String16(kMaxDurationFlag));
+ args.push_back(String16(std::to_string(kTestCustomCollectionDuration.count()).c_str()));
+ ASSERT_FALSE(service->onCustomCollection(-1, args).ok());
+
+ args.clear();
+ args.push_back(String16("Invalid flag"));
+ ASSERT_FALSE(service->onCustomCollection(-1, args).ok());
+ service->terminate();
+}
+
+} // namespace watchdog
+} // namespace automotive
+} // namespace android
diff --git a/watchdog/server/tests/WatchdogProcessServiceTest.cpp b/cpp/watchdog/server/tests/WatchdogProcessServiceTest.cpp
similarity index 99%
rename from watchdog/server/tests/WatchdogProcessServiceTest.cpp
rename to cpp/watchdog/server/tests/WatchdogProcessServiceTest.cpp
index 38598ec..66f3057 100644
--- a/watchdog/server/tests/WatchdogProcessServiceTest.cpp
+++ b/cpp/watchdog/server/tests/WatchdogProcessServiceTest.cpp
@@ -16,7 +16,7 @@
#include "WatchdogProcessService.h"
-#include "gmock/gmock.h"
+#include <gmock/gmock.h>
namespace android {
namespace automotive {
diff --git a/watchdog/testclient/Android.bp b/cpp/watchdog/testclient/Android.bp
similarity index 100%
rename from watchdog/testclient/Android.bp
rename to cpp/watchdog/testclient/Android.bp
diff --git a/watchdog/testclient/sepolicy/carwatchdog_testclient.te b/cpp/watchdog/testclient/sepolicy/carwatchdog_testclient.te
similarity index 100%
rename from watchdog/testclient/sepolicy/carwatchdog_testclient.te
rename to cpp/watchdog/testclient/sepolicy/carwatchdog_testclient.te
diff --git a/watchdog/testclient/sepolicy/file_contexts b/cpp/watchdog/testclient/sepolicy/file_contexts
similarity index 100%
rename from watchdog/testclient/sepolicy/file_contexts
rename to cpp/watchdog/testclient/sepolicy/file_contexts
diff --git a/watchdog/testclient/src/WatchdogClient.cpp b/cpp/watchdog/testclient/src/WatchdogClient.cpp
similarity index 100%
rename from watchdog/testclient/src/WatchdogClient.cpp
rename to cpp/watchdog/testclient/src/WatchdogClient.cpp
diff --git a/watchdog/testclient/src/WatchdogClient.h b/cpp/watchdog/testclient/src/WatchdogClient.h
similarity index 100%
rename from watchdog/testclient/src/WatchdogClient.h
rename to cpp/watchdog/testclient/src/WatchdogClient.h
diff --git a/watchdog/testclient/src/main.cpp b/cpp/watchdog/testclient/src/main.cpp
similarity index 100%
rename from watchdog/testclient/src/main.cpp
rename to cpp/watchdog/testclient/src/main.cpp
diff --git a/evs/manager/1.1/Android.bp b/evs/manager/1.1/Android.bp
deleted file mode 100644
index d9c7d33..0000000
--- a/evs/manager/1.1/Android.bp
+++ /dev/null
@@ -1,138 +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.
-//
-//
-
-cc_library {
- name: "android.automotive.evs.manager.fuzzlib",
-
- srcs: [
- "Enumerator.cpp",
- "HalCamera.cpp",
- "HalDisplay.cpp",
- "VirtualCamera.cpp",
- "stats/CameraUsageStats.cpp",
- "stats/LooperWrapper.cpp",
- "stats/StatsCollector.cpp",
- "sync/unique_fd.cpp",
- "sync/unique_fence.cpp",
- "sync/unique_timeline.cpp",
- ],
-
- shared_libs: [
- "android.hardware.automotive.evs@1.0",
- "android.hardware.automotive.evs@1.1",
- "libbase",
- "libcamera_metadata",
- "libcutils",
- "libhardware",
- "libhidlbase",
- "libprocessgroup",
- "libstatslog",
- "libsync",
- "libui",
- "libutils",
- ],
-
- cflags: ["-DLOG_TAG=\"EvsManagerFuzzlibV1_1\""] + [
- "-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS",
- "-Wall",
- "-Werror",
- "-Wunused",
- "-Wunreachable-code",
- "-Wthread-safety",
- ],
-
- include_dirs: [
- "system/core/libsync",
- ],
-
- export_include_dirs: [
- "./",
- "stats/",
- "sync/",
- ],
-
- product_variables: {
- debuggable: {
- cflags: [
- "-DEVS_DEBUG",
- ]
- }
- },
-}
-
-
-//#################################
-cc_binary {
- name: "android.automotive.evs.manager@1.1",
-
- srcs: [
- "Enumerator.cpp",
- "HalCamera.cpp",
- "HalDisplay.cpp",
- "VirtualCamera.cpp",
- "service.cpp",
- "stats/CameraUsageStats.cpp",
- "stats/LooperWrapper.cpp",
- "stats/StatsCollector.cpp",
- "sync/unique_fd.cpp",
- "sync/unique_fence.cpp",
- "sync/unique_timeline.cpp",
- ],
-
- shared_libs: [
- "android.hardware.automotive.evs@1.0",
- "android.hardware.automotive.evs@1.1",
- "libbase",
- "libcamera_metadata",
- "libcutils",
- "libhardware",
- "libhidlbase",
- "libprocessgroup",
- "libstatslog",
- "libsync",
- "libui",
- "libutils",
- ],
-
- init_rc: ["android.automotive.evs.manager@1.1.rc"],
-
- cflags: ["-DLOG_TAG=\"EvsManagerV1_1\""] + [
- "-DGL_GLEXT_PROTOTYPES",
- "-DEGL_EGLEXT_PROTOTYPES",
- "-D_LIBCPP_ENABLE_THREAD_SAFETY_ANNOTATIONS",
- "-Wall",
- "-Werror",
- "-Wunused",
- "-Wunreachable-code",
- "-Wthread-safety",
- ],
-
- include_dirs: [
- "system/core/libsync",
- ],
-
- product_variables: {
- debuggable: {
- cflags: [
- "-DEVS_DEBUG",
- ]
- }
- },
-
- vintf_fragments: [
- "manifest_android.automotive.evs.manager@1.1.xml",
- ],
-}
diff --git a/evs/manager/1.1/test/fuzzer/HalCameraFuzzer.cpp b/evs/manager/1.1/test/fuzzer/HalCameraFuzzer.cpp
deleted file mode 100644
index 4660182..0000000
--- a/evs/manager/1.1/test/fuzzer/HalCameraFuzzer.cpp
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright 2020 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.
- */
-
-#include <fuzzer/FuzzedDataProvider.h>
-#include <iostream>
-#include "Common.h"
-#include "Enumerator.h"
-#include "HalCamera.h"
-#include "MockHWCamera.h"
-
-namespace android {
-namespace automotive {
-namespace evs {
-namespace V1_1 {
-namespace implementation {
-
-namespace {
-
-enum EvsFuzzFuncs {
- EVS_FUZZ_MAKE_VIRTUAL_CAMERA = 0, // verify makeVirtualCamera
- EVS_FUZZ_OWN_VIRTUAL_CAMERA, // verify ownVirtualCamera
- EVS_FUZZ_DISOWN_VIRTUAL_CAMERA, // verify disownVirtualCamera
- EVS_FUZZ_GET_CLIENT_COUNT, // verify getClientCount
- EVS_FUZZ_GET_ID, // verify getId
- EVS_FUZZ_GET_STREAM_CONFIG, // verify getStreamConfig
- EVS_FUZZ_CHANGE_FRAMES_IN_FLIGHT, // verify changeFramesInFlight
- EVS_FUZZ_CHANGE_FRAMES_IN_FLIGHT_1, // verify overloaded changeFramesInFlight
- EVS_FUZZ_REQUEST_NEW_FRAME, // verify requestNewFrame
- EVS_FUZZ_CLIENT_STREAM_STARTING, // verify clientStreamStarting
- EVS_FUZZ_CLIENT_STREAM_ENDING, // verify clientStreamEnding
- EVS_FUZZ_GET_STATS, // verify getStats
- EVS_FUZZ_GET_STREAM_CONFIGURATION, // verify getStreamConfiguration
- EVS_FUZZ_DELIVER_FRAME_1_1, // verify deliverFrame_1_1
- EVS_FUZZ_BASE_ENUM // verify common functions
-};
-
-extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
- FuzzedDataProvider fdp(data, size);
- sp<IEvsCamera_1_1> mockHWCamera = new MockHWCamera();
- sp<HalCamera> halCamera = new HalCamera(mockHWCamera);
- std::vector<sp<VirtualCamera>> virtualCameras;
-
- while (fdp.remaining_bytes() > 4) {
- switch (fdp.ConsumeIntegralInRange<uint32_t>(0, EVS_FUZZ_API_SUM)) {
- case EVS_FUZZ_MAKE_VIRTUAL_CAMERA: {
- sp<VirtualCamera> virtualCamera = halCamera->makeVirtualCamera();
- virtualCameras.emplace_back(virtualCamera);
- break;
- }
- case EVS_FUZZ_OWN_VIRTUAL_CAMERA: {
- if (!virtualCameras.empty()) {
- uint32_t whichCam =
- fdp.ConsumeIntegralInRange<uint32_t>(0, virtualCameras.size() - 1);
- halCamera->ownVirtualCamera(virtualCameras[whichCam]);
- }
- break;
- }
- case EVS_FUZZ_DISOWN_VIRTUAL_CAMERA: {
- if (!virtualCameras.empty()) {
- uint32_t whichCam =
- fdp.ConsumeIntegralInRange<uint32_t>(0, virtualCameras.size() - 1);
- halCamera->disownVirtualCamera(virtualCameras[whichCam]);
- }
- break;
- }
- case EVS_FUZZ_GET_HW_CAMERA: {
- halCamera->getHwCamera();
- break;
- }
- case EVS_FUZZ_GET_CLIENT_COUNT: {
- halCamera->getClientCount();
- break;
- }
- case EVS_FUZZ_GET_ID: {
- halCamera->getId();
- break;
- }
- case EVS_FUZZ_GET_STREAM_CONFIG: {
- halCamera->getStreamConfig();
- break;
- }
- case EVS_FUZZ_CHANGE_FRAMES_IN_FLIGHT: {
- uint32_t delta = fdp.ConsumeIntegral<int32_t>();
- halCamera->changeFramesInFlight(delta);
- break;
- }
- default:
- LOG(ERROR) << "Unexpected option, aborting...";
- break;
- }
- }
- return 0;
-}
-
-} // namespace
-} // namespace implementation
-} // namespace V1_1
-} // namespace evs
-} // namespace automotive
-} // namespace android
diff --git a/evs/sepolicy/evs.mk b/evs/sepolicy/evs.mk
deleted file mode 100644
index aee4003..0000000
--- a/evs/sepolicy/evs.mk
+++ /dev/null
@@ -1,3 +0,0 @@
-# Extended View System Selinux Policies
-PRODUCT_PUBLIC_SEPOLICY_DIRS += packages/services/Car/evs/sepolicy/public
-PRODUCT_PRIVATE_SEPOLICY_DIRS += packages/services/Car/evs/sepolicy/private
diff --git a/evs/sepolicy/private/evs_app.te b/evs/sepolicy/evs_app.te
similarity index 100%
rename from evs/sepolicy/private/evs_app.te
rename to evs/sepolicy/evs_app.te
diff --git a/evs/sepolicy/evs_driver.te b/evs/sepolicy/evs_driver.te
new file mode 100644
index 0000000..9bb7b97
--- /dev/null
+++ b/evs/sepolicy/evs_driver.te
@@ -0,0 +1,29 @@
+# evs_mock mock hardware driver service
+type hal_evs_driver, domain;
+hal_server_domain(hal_evs_driver, hal_evs)
+hal_client_domain(hal_evs_driver, hal_evs)
+
+# allow init to launch processes in this context
+type hal_evs_driver_exec, exec_type, file_type, vendor_file_type;
+init_daemon_domain(hal_evs_driver)
+binder_use(hal_evs_driver)
+
+# Allow use of USB devices, gralloc buffers, and surface flinger
+allow hal_evs_driver device:dir { open read };
+allow hal_evs_driver video_device:chr_file rw_file_perms;
+hal_client_domain(hal_evs_driver, hal_graphics_allocator);
+hal_client_domain(hal_evs_driver, hal_graphics_composer)
+hal_client_domain(hal_evs_driver, hal_configstore)
+
+allow hal_evs_driver gpu_device:chr_file rw_file_perms;
+binder_call(hal_evs_driver, surfaceflinger);
+allow hal_evs_driver surfaceflinger_service:service_manager find;
+allow hal_evs_driver ion_device:chr_file r_file_perms;
+
+# Allow the driver to access kobject uevents
+allow hal_evs_driver self:netlink_kobject_uevent_socket create_socket_perms_no_ioctl;
+
+# Allow the driver to use automotive display proxy service
+allow hal_evs_driver automotive_display_service_server:binder call;
+allow hal_evs_driver fwk_automotive_display_hwservice:hwservice_manager find;
+
diff --git a/evs/sepolicy/evs_manager.te b/evs/sepolicy/evs_manager.te
new file mode 100644
index 0000000..cf649bb
--- /dev/null
+++ b/evs/sepolicy/evs_manager.te
@@ -0,0 +1,18 @@
+# evs manager
+type evs_manager, domain, coredomain;
+hal_server_domain(evs_manager, hal_evs)
+hal_client_domain(evs_manager, hal_evs)
+
+# allow init to launch processes in this context
+type evs_manager_exec, exec_type, file_type, system_file_type;
+init_daemon_domain(evs_manager)
+
+# allow use of hwservices
+allow evs_manager hal_graphics_allocator_default:fd use;
+
+# allow write to fd
+allow evs_manager shell:fd use;
+allow evs_manager shell:fifo_file write;
+
+# allow evs_manager to send information to statsd socket
+unix_socket_send(evs_manager, statsdw, statsd)
diff --git a/evs/sepolicy/private/file_contexts b/evs/sepolicy/file_contexts
similarity index 100%
rename from evs/sepolicy/private/file_contexts
rename to evs/sepolicy/file_contexts
diff --git a/evs/sepolicy/private/automotive_display_service.te b/evs/sepolicy/private/automotive_display_service.te
deleted file mode 100644
index cd42ed6..0000000
--- a/evs/sepolicy/private/automotive_display_service.te
+++ /dev/null
@@ -1,2 +0,0 @@
-allow automotive_display_service hal_evs_driver:binder transfer;
-allow automotive_display_service hal_evs_driver:fd use;
diff --git a/evs/sepolicy/private/servicemanager.te b/evs/sepolicy/servicemanager.te
similarity index 100%
rename from evs/sepolicy/private/servicemanager.te
rename to evs/sepolicy/servicemanager.te
diff --git a/evs/sepolicy/private/surfaceflinger.te b/evs/sepolicy/surfaceflinger.te
similarity index 100%
rename from evs/sepolicy/private/surfaceflinger.te
rename to evs/sepolicy/surfaceflinger.te
diff --git a/experimental/service/res/values-af/strings.xml b/experimental/service/res/values-af/strings.xml
index bdec8e5..8b74368 100644
--- a/experimental/service/res/values-af/strings.xml
+++ b/experimental/service/res/values-af/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Bestuurderafleiding"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"lees bestuurder se afleidingsvlak"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Lees bestuurder se afleidingsvlak."</string>
</resources>
diff --git a/experimental/service/res/values-am/strings.xml b/experimental/service/res/values-am/strings.xml
index a0ff5f8..47887d8 100644
--- a/experimental/service/res/values-am/strings.xml
+++ b/experimental/service/res/values-am/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"የነጂ መዘናጋት"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"የነጂ መዘናጋት ደረጃ ያንብቡ"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"የነጂ መዘናጋት ደረጃን ያንብቡ።"</string>
</resources>
diff --git a/experimental/service/res/values-ar/strings.xml b/experimental/service/res/values-ar/strings.xml
index a22a28b..08391f5 100644
--- a/experimental/service/res/values-ar/strings.xml
+++ b/experimental/service/res/values-ar/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"تشتت السائق"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"قراءة مستوى تشتت السائق"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"قراءة مستوى تشتت السائق"</string>
</resources>
diff --git a/experimental/service/res/values-as/strings.xml b/experimental/service/res/values-as/strings.xml
index ebd84c4..a3a1185 100644
--- a/experimental/service/res/values-as/strings.xml
+++ b/experimental/service/res/values-as/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"চালকৰ অন্যমনস্কতা"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"চালকৰ অন্যমনস্কতাৰ স্তৰ পঢ়িব পাৰে"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"চালকৰ অন্যমনস্কতাৰ স্তৰ পঢ়ক।"</string>
</resources>
diff --git a/experimental/service/res/values-az/strings.xml b/experimental/service/res/values-az/strings.xml
index 9551ba1..aa67fdb 100644
--- a/experimental/service/res/values-az/strings.xml
+++ b/experimental/service/res/values-az/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Sürücünün yayınması"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"sürücünün yayınma səviyyəsini oxumaq"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Sürücünün yayınma səviyyəsini oxuyun."</string>
</resources>
diff --git a/experimental/service/res/values-b+sr+Latn/strings.xml b/experimental/service/res/values-b+sr+Latn/strings.xml
index be3cf46..b4957fd 100644
--- a/experimental/service/res/values-b+sr+Latn/strings.xml
+++ b/experimental/service/res/values-b+sr+Latn/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Ometanje vozača"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"čitanje nivoa ometanja vozača"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Očitavaju nivo ometanja vozača."</string>
</resources>
diff --git a/experimental/service/res/values-be/strings.xml b/experimental/service/res/values-be/strings.xml
index 60b007c..f8df9fd 100644
--- a/experimental/service/res/values-be/strings.xml
+++ b/experimental/service/res/values-be/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Рассеянасць вадзіцеля"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"вызначаць узровень рассеянасці вадзіцеля"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Вызначаць узровень рассеянасці вадзіцеля."</string>
</resources>
diff --git a/experimental/service/res/values-bg/strings.xml b/experimental/service/res/values-bg/strings.xml
index 958eb4b..dbfe9a4 100644
--- a/experimental/service/res/values-bg/strings.xml
+++ b/experimental/service/res/values-bg/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Разсейване на шофьора"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"четене на нивото на разсейване на шофьора"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Четене на нивото на разсейване на шофьора."</string>
</resources>
diff --git a/experimental/service/res/values-bn/strings.xml b/experimental/service/res/values-bn/strings.xml
index 30c8e62..a94c53a 100644
--- a/experimental/service/res/values-bn/strings.xml
+++ b/experimental/service/res/values-bn/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"ড্রাইভারের মনোযোগে ব্যাঘাত ঘটা"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"ড্রাইভারের মনোযোগে ব্যাঘাত ঘটার লেভেল সম্পর্কে জানুন"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"ড্রাইভারের মনোযোগে ব্যাঘাত ঘটার লেভেল সম্পর্কে জানুন।"</string>
</resources>
diff --git a/experimental/service/res/values-bs/strings.xml b/experimental/service/res/values-bs/strings.xml
index 966cba9..bb6e2c3 100644
--- a/experimental/service/res/values-bs/strings.xml
+++ b/experimental/service/res/values-bs/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Ometanje vozača"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"očitavanje nivoa ometanja vozača"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Očitavanje nivoa ometanja vozača."</string>
</resources>
diff --git a/experimental/service/res/values-ca/strings.xml b/experimental/service/res/values-ca/strings.xml
index 75a62b7..df98dda 100644
--- a/experimental/service/res/values-ca/strings.xml
+++ b/experimental/service/res/values-ca/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Distracció del conductor"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"consultar el nivell de distracció del conductor"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Consultar el nivell de distracció del conductor."</string>
</resources>
diff --git a/experimental/service/res/values-cs/strings.xml b/experimental/service/res/values-cs/strings.xml
index 39c5880..d2b9e62 100644
--- a/experimental/service/res/values-cs/strings.xml
+++ b/experimental/service/res/values-cs/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Vyrušení pozornosti řidiče"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"čtení míry vyrušení pozornosti řidiče"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Čtení míry vyrušení pozornosti řidiče."</string>
</resources>
diff --git a/experimental/service/res/values-da/strings.xml b/experimental/service/res/values-da/strings.xml
index ef79a77..0de5c2b 100644
--- a/experimental/service/res/values-da/strings.xml
+++ b/experimental/service/res/values-da/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Distrahering af fører"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"aflæs, hvor distraheret føreren er"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Tjek, hvor distraheret føreren er."</string>
</resources>
diff --git a/experimental/service/res/values-de/strings.xml b/experimental/service/res/values-de/strings.xml
index 6773ba2..14953b7 100644
--- a/experimental/service/res/values-de/strings.xml
+++ b/experimental/service/res/values-de/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Ablenkungsgrad des Fahrers"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"Ablenkungsgrad des Fahrers erkennen"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Ablenkungsgrad des Fahrers erkennen."</string>
</resources>
diff --git a/experimental/service/res/values-el/strings.xml b/experimental/service/res/values-el/strings.xml
index e3d9845..a136eb1 100644
--- a/experimental/service/res/values-el/strings.xml
+++ b/experimental/service/res/values-el/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Απόσπαση προσοχής οδηγού"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"ανάγνωση επιπέδου απόσπασης προσοχής οδηγού"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Ανάγνωση επιπέδου απόσπασης προσοχής οδηγού."</string>
</resources>
diff --git a/experimental/service/res/values-en-rAU/strings.xml b/experimental/service/res/values-en-rAU/strings.xml
index f5f5ff0..4162250 100644
--- a/experimental/service/res/values-en-rAU/strings.xml
+++ b/experimental/service/res/values-en-rAU/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Driver distraction"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"read driver’s distraction level"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Read driver distraction level."</string>
</resources>
diff --git a/experimental/service/res/values-en-rCA/strings.xml b/experimental/service/res/values-en-rCA/strings.xml
index f5f5ff0..4162250 100644
--- a/experimental/service/res/values-en-rCA/strings.xml
+++ b/experimental/service/res/values-en-rCA/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Driver distraction"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"read driver’s distraction level"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Read driver distraction level."</string>
</resources>
diff --git a/experimental/service/res/values-en-rGB/strings.xml b/experimental/service/res/values-en-rGB/strings.xml
index f5f5ff0..4162250 100644
--- a/experimental/service/res/values-en-rGB/strings.xml
+++ b/experimental/service/res/values-en-rGB/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Driver distraction"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"read driver’s distraction level"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Read driver distraction level."</string>
</resources>
diff --git a/experimental/service/res/values-en-rIN/strings.xml b/experimental/service/res/values-en-rIN/strings.xml
index f5f5ff0..4162250 100644
--- a/experimental/service/res/values-en-rIN/strings.xml
+++ b/experimental/service/res/values-en-rIN/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Driver distraction"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"read driver’s distraction level"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Read driver distraction level."</string>
</resources>
diff --git a/experimental/service/res/values-en-rXC/strings.xml b/experimental/service/res/values-en-rXC/strings.xml
index 19bc3a8..39ca1ae 100644
--- a/experimental/service/res/values-en-rXC/strings.xml
+++ b/experimental/service/res/values-en-rXC/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Driver Distraction"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"read driver’s distraction level"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Read driver distraction level."</string>
</resources>
diff --git a/experimental/service/res/values-es-rUS/strings.xml b/experimental/service/res/values-es-rUS/strings.xml
index e8fbad5..0e93b4f 100644
--- a/experimental/service/res/values-es-rUS/strings.xml
+++ b/experimental/service/res/values-es-rUS/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Distracción del conductor"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"leer nivel de distracción del conductor"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Leer el nivel de distracción del conductor."</string>
</resources>
diff --git a/experimental/service/res/values-es/strings.xml b/experimental/service/res/values-es/strings.xml
index e8fbad5..826ace2 100644
--- a/experimental/service/res/values-es/strings.xml
+++ b/experimental/service/res/values-es/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Distracción del conductor"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"consultar el nivel de distracción de quien conduce"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Leer el nivel de distracción del conductor."</string>
</resources>
diff --git a/experimental/service/res/values-et/strings.xml b/experimental/service/res/values-et/strings.xml
index a5e67ef..0fa6482 100644
--- a/experimental/service/res/values-et/strings.xml
+++ b/experimental/service/res/values-et/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Juhi häiritus"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"juhi häirituse taseme lugemine"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Juhi häirituse taseme lugemine."</string>
</resources>
diff --git a/experimental/service/res/values-eu/strings.xml b/experimental/service/res/values-eu/strings.xml
index b24ac35..408e4d7 100644
--- a/experimental/service/res/values-eu/strings.xml
+++ b/experimental/service/res/values-eu/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Gidariaren distrakzioa"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"irakurri gidariaren distrakzio-maila"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Irakurri gidariaren distrakzio-maila."</string>
</resources>
diff --git a/experimental/service/res/values-fa/strings.xml b/experimental/service/res/values-fa/strings.xml
index 3931b80..29068bc 100644
--- a/experimental/service/res/values-fa/strings.xml
+++ b/experimental/service/res/values-fa/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"حواسپرتی راننده"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"خواندن سطح حواسپرتی راننده"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"خواندن سطح حواسپرتی راننده."</string>
</resources>
diff --git a/experimental/service/res/values-fi/strings.xml b/experimental/service/res/values-fi/strings.xml
index ab43067..ee5cf5c 100644
--- a/experimental/service/res/values-fi/strings.xml
+++ b/experimental/service/res/values-fi/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Kuljettajan keskittyminen"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"lue kuljettajan keskittymisen taso"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Lue kuljettajan keskittymisen taso."</string>
</resources>
diff --git a/experimental/service/res/values-fr-rCA/strings.xml b/experimental/service/res/values-fr-rCA/strings.xml
index 497534b..f013f3a 100644
--- a/experimental/service/res/values-fr-rCA/strings.xml
+++ b/experimental/service/res/values-fr-rCA/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Distraction du conducteur"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"accéder au niveau de distraction du conducteur"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Accédez au niveau de distraction du conducteur."</string>
</resources>
diff --git a/experimental/service/res/values-fr/strings.xml b/experimental/service/res/values-fr/strings.xml
index eaa7572..42e60a6 100644
--- a/experimental/service/res/values-fr/strings.xml
+++ b/experimental/service/res/values-fr/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Niveau de distraction du conducteur"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"accéder au niveau de distraction du conducteur"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Accéder au niveau de distraction du conducteur."</string>
</resources>
diff --git a/experimental/service/res/values-gl/strings.xml b/experimental/service/res/values-gl/strings.xml
index e84f8b1..7fe78ad 100644
--- a/experimental/service/res/values-gl/strings.xml
+++ b/experimental/service/res/values-gl/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Distracción do condutor"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"ler o nivel de distracción do condutor"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Ler o nivel de distracción do condutor."</string>
</resources>
diff --git a/experimental/service/res/values-gu/strings.xml b/experimental/service/res/values-gu/strings.xml
index d6bd7dd..64f97f2 100644
--- a/experimental/service/res/values-gu/strings.xml
+++ b/experimental/service/res/values-gu/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"ડ્રાઇવરનું ધ્યાન ભટકવું"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"ડ્રાઇવરનું ધ્યાન ભટકવાના સ્તર વિશે જાણો"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"ડ્રાઇવરનું ધ્યાન ભટકવાના સ્તર વિશે જાણો."</string>
</resources>
diff --git a/experimental/service/res/values-hi/strings.xml b/experimental/service/res/values-hi/strings.xml
index b5639da..ee2faf5 100644
--- a/experimental/service/res/values-hi/strings.xml
+++ b/experimental/service/res/values-hi/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"ड्राइवर का ध्यान भटकना"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"ड्राइवर का ध्यान भटकने के लेवल के बारे में जानें"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"ड्राइवर का ध्यान भटकने के लेवल के बारे में जानें."</string>
</resources>
diff --git a/experimental/service/res/values-hr/strings.xml b/experimental/service/res/values-hr/strings.xml
index 2fb84b4..271625b 100644
--- a/experimental/service/res/values-hr/strings.xml
+++ b/experimental/service/res/values-hr/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Ometanje vozača"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"čitaju razinu ometanja vozača"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Čitaju razinu ometanja vozača."</string>
</resources>
diff --git a/experimental/service/res/values-hu/strings.xml b/experimental/service/res/values-hu/strings.xml
index e261861..21ca04c 100644
--- a/experimental/service/res/values-hu/strings.xml
+++ b/experimental/service/res/values-hu/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Sofőr figyelmetlensége"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"sofőr figyelmetlenségi szintjének olvasása"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"A sofőr figyelmetlenségi szintjének olvasása."</string>
</resources>
diff --git a/experimental/service/res/values-hy/strings.xml b/experimental/service/res/values-hy/strings.xml
index 77ac717..407f2dd 100644
--- a/experimental/service/res/values-hy/strings.xml
+++ b/experimental/service/res/values-hy/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Շեղող գործոններ"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"հաշվարկել շեղող գործոնների մակարդակը"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Տեսնել շեղող գործոնների մակարդակը։"</string>
</resources>
diff --git a/experimental/service/res/values-in/strings.xml b/experimental/service/res/values-in/strings.xml
index 06924d1..f1ffbac 100644
--- a/experimental/service/res/values-in/strings.xml
+++ b/experimental/service/res/values-in/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Gangguan bagi Pengemudi"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"baca tingkat gangguan bagi pengemudi"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Baca tingkat gangguan bagi pengemudi."</string>
</resources>
diff --git a/experimental/service/res/values-is/strings.xml b/experimental/service/res/values-is/strings.xml
index 759c6a9..99f6547 100644
--- a/experimental/service/res/values-is/strings.xml
+++ b/experimental/service/res/values-is/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Truflun ökumanns"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"athuga hversu miklum truflunum ökumaður verður fyrir"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Athuga hversu miklum truflunum ökumaður verður fyrir."</string>
</resources>
diff --git a/experimental/service/res/values-it/strings.xml b/experimental/service/res/values-it/strings.xml
index 9436c06..a48bb0f 100644
--- a/experimental/service/res/values-it/strings.xml
+++ b/experimental/service/res/values-it/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Distrazione dell\'autista"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"Lettura del livello di distrazione dell\'autista"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Leggi il livello di distrazione dell\'autista"</string>
</resources>
diff --git a/experimental/service/res/values-iw/strings.xml b/experimental/service/res/values-iw/strings.xml
index d5b8bb4..8e38a45 100644
--- a/experimental/service/res/values-iw/strings.xml
+++ b/experimental/service/res/values-iw/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"הסחת הדעת של הנהג"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"קריאה של רמת הסחת הדעת של הנהג"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"אישור קריאה של רמת הסחת הדעת של הנהג."</string>
</resources>
diff --git a/experimental/service/res/values-ja/strings.xml b/experimental/service/res/values-ja/strings.xml
index 1762317..07dbea4 100644
--- a/experimental/service/res/values-ja/strings.xml
+++ b/experimental/service/res/values-ja/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"ドライバーの注意散漫"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"ドライバーの注意散漫レベルの読み取り"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"ドライバーの注意散漫レベルの読み取り。"</string>
</resources>
diff --git a/experimental/service/res/values-ka/strings.xml b/experimental/service/res/values-ka/strings.xml
index 2317561..3f28b4b 100644
--- a/experimental/service/res/values-ka/strings.xml
+++ b/experimental/service/res/values-ka/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"მძღოლის გაფანტულობა"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"მძღოლის გაფანტულობის დონის წაკითხვა"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"მძღოლის გაფანტულობის დონის წაკითხვა."</string>
</resources>
diff --git a/experimental/service/res/values-kk/strings.xml b/experimental/service/res/values-kk/strings.xml
index eda84f1..0941757 100644
--- a/experimental/service/res/values-kk/strings.xml
+++ b/experimental/service/res/values-kk/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Жүргізушіні алаңдату"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"жүргізушіні алаңдату деңгейін көру"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Жүргізушіні алаңдату деңгейін көру."</string>
</resources>
diff --git a/experimental/service/res/values-km/strings.xml b/experimental/service/res/values-km/strings.xml
index ff5d56c..c25b605 100644
--- a/experimental/service/res/values-km/strings.xml
+++ b/experimental/service/res/values-km/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"ការរំខានរបស់អ្នកបើកបរ"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"អានកម្រិតនៃការរំខានរបស់អ្នកបើកបរ"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"អានកម្រិតនៃការរំខានរបស់អ្នកបើកបរ។"</string>
</resources>
diff --git a/experimental/service/res/values-kn/strings.xml b/experimental/service/res/values-kn/strings.xml
index e70dc1b..c58906b 100644
--- a/experimental/service/res/values-kn/strings.xml
+++ b/experimental/service/res/values-kn/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"ಚಾಲಕನ ವ್ಯಾಕುಲತೆ"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"ಚಾಲಕರ ವ್ಯಾಕುಲತೆಯ ಮಟ್ಟವನ್ನು ಓದಿ"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"ಚಾಲಕನ ವ್ಯಾಕುಲತೆಯ ಮಟ್ಟವನ್ನು ಓದಿ."</string>
</resources>
diff --git a/experimental/service/res/values-ko/strings.xml b/experimental/service/res/values-ko/strings.xml
index 8a239a6..62b78fc 100644
--- a/experimental/service/res/values-ko/strings.xml
+++ b/experimental/service/res/values-ko/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"운전자 주의 분산"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"운전자의 주의 분산 수준을 읽습니다."</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"운전자의 주의 분산 수준을 읽습니다."</string>
</resources>
diff --git a/experimental/service/res/values-ky/strings.xml b/experimental/service/res/values-ky/strings.xml
index c73ad9f..f4f2750 100644
--- a/experimental/service/res/values-ky/strings.xml
+++ b/experimental/service/res/values-ky/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Айдоочуну алаксыткан колдонмолор"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"айдоочуну алаксыткан колдонмолордун деңгээлин окуу"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Айдоочуну алаксыткан колдонмолордун деңгээлин окуу."</string>
</resources>
diff --git a/experimental/service/res/values-lo/strings.xml b/experimental/service/res/values-lo/strings.xml
index c57f2b3..3065fb6 100644
--- a/experimental/service/res/values-lo/strings.xml
+++ b/experimental/service/res/values-lo/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"ການເສຍສະມາທິຂອງຜູ້ຂັບ"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"ລະດັບການເສຍສະມາທິຂອງຜູ້ຂັບ"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"ອ່ານລະດັບການເສຍສະມາທິຂອງຜູ້ຂັບ."</string>
</resources>
diff --git a/experimental/service/res/values-lt/strings.xml b/experimental/service/res/values-lt/strings.xml
index 0dbc6b6..7bbbf97 100644
--- a/experimental/service/res/values-lt/strings.xml
+++ b/experimental/service/res/values-lt/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Vairuotojo dėmesio atitraukimas"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"skaityti vairuotojo dėmesio atitraukimo lygio informaciją"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Skaityti vairuotojo dėmesio atitraukimo lygio informaciją."</string>
</resources>
diff --git a/experimental/service/res/values-lv/strings.xml b/experimental/service/res/values-lv/strings.xml
index 3e7afe4..755614c 100644
--- a/experimental/service/res/values-lv/strings.xml
+++ b/experimental/service/res/values-lv/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Autovadītāja uzmanības novēršanas līmenis"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"lasīt autovadītāja uzmanības novēršanas līmeni"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Lasīt autovadītāja uzmanības novēršanas līmeni."</string>
</resources>
diff --git a/experimental/service/res/values-mk/strings.xml b/experimental/service/res/values-mk/strings.xml
index 1577970..fe75ef8 100644
--- a/experimental/service/res/values-mk/strings.xml
+++ b/experimental/service/res/values-mk/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Одвлекување на вниманието на возачот"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"да го чита нивото на одвлекување на вниманието на возачот"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Го читаат нивото на одвлекување на вниманието на возачот."</string>
</resources>
diff --git a/experimental/service/res/values-ml/strings.xml b/experimental/service/res/values-ml/strings.xml
index 26a6bc5..a1fb16f 100644
--- a/experimental/service/res/values-ml/strings.xml
+++ b/experimental/service/res/values-ml/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"ഡ്രൈവറുടെ ശ്രദ്ധാ വ്യതിചലനം"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"ഡ്രൈവറുടെ ശ്രദ്ധ വ്യതിചലിച്ചതിന്റെ ലെവൽ റീഡ് ചെയ്യുക"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"ഡ്രൈവറുടെ ശ്രദ്ധ വ്യതിചലിച്ചതിന്റെ ലെവൽ റീഡ് ചെയ്യുക."</string>
</resources>
diff --git a/experimental/service/res/values-mn/strings.xml b/experimental/service/res/values-mn/strings.xml
index 93277d4..c4c1c78 100644
--- a/experimental/service/res/values-mn/strings.xml
+++ b/experimental/service/res/values-mn/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Жолоочийн анхаарал сарниулах зүйлс"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"жолоочийн анхаарал сарних түвшнийг унших"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Жолоочийн анхаарал сарниулах зүйлсийн түвшнийг уншина уу."</string>
</resources>
diff --git a/experimental/service/res/values-mr/strings.xml b/experimental/service/res/values-mr/strings.xml
index 6477c68..96328bb 100644
--- a/experimental/service/res/values-mr/strings.xml
+++ b/experimental/service/res/values-mr/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"ड्रायव्हर डिस्ट्रॅक्शन"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"ड्रायव्हर डिस्ट्रॅक्शनची पातळी वाचा"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"ड्रायव्हर डिस्ट्रॅक्शनची पातळी रीड करा."</string>
</resources>
diff --git a/experimental/service/res/values-ms/strings.xml b/experimental/service/res/values-ms/strings.xml
index 005e721..5b7cb61 100644
--- a/experimental/service/res/values-ms/strings.xml
+++ b/experimental/service/res/values-ms/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Gangguan Pemandu"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"baca tahap gangguan pemandu"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Baca tahap gangguan pemandu."</string>
</resources>
diff --git a/experimental/service/res/values-my/strings.xml b/experimental/service/res/values-my/strings.xml
index 6dcec79..7f6ec58 100644
--- a/experimental/service/res/values-my/strings.xml
+++ b/experimental/service/res/values-my/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"ယာဉ်မောင်းသူ အနှောင့်အယှက်ဖြစ်မှု"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"ယာဉ်မောင်းသူ၏ စိတ်အနှောင့်အယှက်ဖြစ်မှု အဆင့်ကို ကြည့်ရန်"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"ယာဉ်မောင်းသူ အနှောင့်အယှက်ဖြစ်မှုအဆင့်ကို ဖတ်ရန်။"</string>
</resources>
diff --git a/experimental/service/res/values-nb/strings.xml b/experimental/service/res/values-nb/strings.xml
index aa7f821..ac03d56 100644
--- a/experimental/service/res/values-nb/strings.xml
+++ b/experimental/service/res/values-nb/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Sjåførens distraksjonsnivå"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"registrer sjåførens distraksjonsnivå"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Registrer sjåførens distraksjonsnivå."</string>
</resources>
diff --git a/experimental/service/res/values-ne/strings.xml b/experimental/service/res/values-ne/strings.xml
index dd3a974..fac2957 100644
--- a/experimental/service/res/values-ne/strings.xml
+++ b/experimental/service/res/values-ne/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"ड्राइभरको ध्यान भङ्ग गराउने कुरा"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"ड्राइभरको ध्यान भङ्ग गराउने कुराको स्तर पढ्नुहोस्"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"ड्राइभरको ध्यान भङ्ग गराउने कुराको स्तर पढ्नुहोस्।"</string>
</resources>
diff --git a/experimental/service/res/values-nl/strings.xml b/experimental/service/res/values-nl/strings.xml
index c72564f..70cb99a 100644
--- a/experimental/service/res/values-nl/strings.xml
+++ b/experimental/service/res/values-nl/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Afleidingsniveau van chauffeur"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"afleidingsniveau van chauffeur lezen"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Afleidingsniveau van chauffeur lezen"</string>
</resources>
diff --git a/experimental/service/res/values-or/strings.xml b/experimental/service/res/values-or/strings.xml
index 22e3577..f896f66 100644
--- a/experimental/service/res/values-or/strings.xml
+++ b/experimental/service/res/values-or/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"ଡ୍ରାଇଭର୍ ଡିସଟ୍ରାକସନ୍"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"ଡ୍ରାଇଭରର ଡିସଟ୍ରାକସନ୍ ସ୍ତର ପଢ଼ନ୍ତୁ"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"ଡ୍ରାଇଭର୍ ଡିସଟ୍ରାକସନ୍ ସ୍ତର ପଢ଼ନ୍ତୁ"</string>
</resources>
diff --git a/experimental/service/res/values-pa/strings.xml b/experimental/service/res/values-pa/strings.xml
index 1774246..01788ed 100644
--- a/experimental/service/res/values-pa/strings.xml
+++ b/experimental/service/res/values-pa/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"ਡਰਾਈਵਰ ਦਾ ਧਿਆਨ ਹਟਣਾ"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"ਡਰਾਈਵਰ ਦੇ ਧਿਆਨ ਹਟਣ ਦੇ ਪੱਧਰ ਬਾਰੇ ਜਾਣੋ"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"ਡਰਾਈਵਰ ਦੇ ਧਿਆਨ ਹਟਣ ਦੇ ਪੱਧਰ ਬਾਰੇ ਜਾਣੋ।"</string>
</resources>
diff --git a/experimental/service/res/values-pl/strings.xml b/experimental/service/res/values-pl/strings.xml
index 7054259..5e4db5d 100644
--- a/experimental/service/res/values-pl/strings.xml
+++ b/experimental/service/res/values-pl/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Rozproszenie uwagi kierowcy"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"odczytywanie informacji o poziomie rozproszenia uwagi kierowcy"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Odczytywanie informacji o poziomie rozproszenia uwagi kierowcy."</string>
</resources>
diff --git a/experimental/service/res/values-pt-rPT/strings.xml b/experimental/service/res/values-pt-rPT/strings.xml
index e8714fc..7c3fb42 100644
--- a/experimental/service/res/values-pt-rPT/strings.xml
+++ b/experimental/service/res/values-pt-rPT/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Distração do condutor"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"avaliar o nível de distração do condutor"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Avaliar o nível de distração do condutor"</string>
</resources>
diff --git a/experimental/service/res/values-pt/strings.xml b/experimental/service/res/values-pt/strings.xml
index 024c7ad..c697875 100644
--- a/experimental/service/res/values-pt/strings.xml
+++ b/experimental/service/res/values-pt/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Distração do motorista"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"ler o nível de distração do motorista"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Ler o nível de distração do motorista."</string>
</resources>
diff --git a/experimental/service/res/values-ro/strings.xml b/experimental/service/res/values-ro/strings.xml
index 3e96fb5..7b6f4be 100644
--- a/experimental/service/res/values-ro/strings.xml
+++ b/experimental/service/res/values-ro/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Distragerea șoferului"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"poate citi nivelul de distragere al șoferului"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Poate citi nivelul de distragere al șoferului."</string>
</resources>
diff --git a/experimental/service/res/values-ru/strings.xml b/experimental/service/res/values-ru/strings.xml
index 883430d..c2176d6 100644
--- a/experimental/service/res/values-ru/strings.xml
+++ b/experimental/service/res/values-ru/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Отвлекающие факторы"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"считывание уровня отвлекающих факторов"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Считывание уровня отвлекающих факторов."</string>
</resources>
diff --git a/experimental/service/res/values-si/strings.xml b/experimental/service/res/values-si/strings.xml
index 24dde2e..0a793ea 100644
--- a/experimental/service/res/values-si/strings.xml
+++ b/experimental/service/res/values-si/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"රියදුරු වික්ෂිප්ත වීම"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"රියදුරු වික්ෂිප්ත මට්ටම කියවන්න"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"රියදුරු වික්ෂිප්ත මට්ටම කියවන්න."</string>
</resources>
diff --git a/experimental/service/res/values-sk/strings.xml b/experimental/service/res/values-sk/strings.xml
index fc57d39..567acf0 100644
--- a/experimental/service/res/values-sk/strings.xml
+++ b/experimental/service/res/values-sk/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Vyrušenie pozornosti vodiča"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"čítanie miery vyrušenia pozornosti vodiča"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Čítanie miery vyrušenia pozornosti vodiča."</string>
</resources>
diff --git a/experimental/service/res/values-sl/strings.xml b/experimental/service/res/values-sl/strings.xml
index 96174f8..e8243ff 100644
--- a/experimental/service/res/values-sl/strings.xml
+++ b/experimental/service/res/values-sl/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Nepozornost voznika"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"branje stopnje nepozornosti voznika"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Branje stopnje nepozornosti voznika."</string>
</resources>
diff --git a/experimental/service/res/values-sq/strings.xml b/experimental/service/res/values-sq/strings.xml
index ecbc905..6ec188b 100644
--- a/experimental/service/res/values-sq/strings.xml
+++ b/experimental/service/res/values-sq/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Shpërqendrimi i drejtuesit të makinës"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"të lexojnë nivelin e shpërqendrimit të drejtuesit të makinës"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Lexo nivelin e shpërqendrimit të drejtuesit të makinës."</string>
</resources>
diff --git a/experimental/service/res/values-sr/strings.xml b/experimental/service/res/values-sr/strings.xml
index 86ab2f7..a1db45b 100644
--- a/experimental/service/res/values-sr/strings.xml
+++ b/experimental/service/res/values-sr/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Ометање возача"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"читање нивоа ометања возача"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Очитавају ниво ометања возача."</string>
</resources>
diff --git a/experimental/service/res/values-sv/strings.xml b/experimental/service/res/values-sv/strings.xml
index 0404356..c7f35a6 100644
--- a/experimental/service/res/values-sv/strings.xml
+++ b/experimental/service/res/values-sv/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Förardistraktion"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"läsa graden av förardistraktion"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Läsa graden av förardistraktion."</string>
</resources>
diff --git a/experimental/service/res/values-sw/strings.xml b/experimental/service/res/values-sw/strings.xml
index eb1839e..7ef4c6f 100644
--- a/experimental/service/res/values-sw/strings.xml
+++ b/experimental/service/res/values-sw/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Usumbufu kwa Dereva"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"kusoma kiwango cha usumbufu kwa dereva"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Soma kiwango cha usumbufu kwa dereva."</string>
</resources>
diff --git a/experimental/service/res/values-ta/strings.xml b/experimental/service/res/values-ta/strings.xml
index 5109d48..b3f6833 100644
--- a/experimental/service/res/values-ta/strings.xml
+++ b/experimental/service/res/values-ta/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"ஓட்டுநரின் கவனச்சிதறல்"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"ஓட்டுநரின் கவனச்சிதறல் நிலையைக் கண்டறி"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"ஓட்டுநரின் கவனச்சிதறல் நிலையைக் கண்டறி."</string>
</resources>
diff --git a/experimental/service/res/values-te/strings.xml b/experimental/service/res/values-te/strings.xml
index c7576de..ca50681 100644
--- a/experimental/service/res/values-te/strings.xml
+++ b/experimental/service/res/values-te/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"డ్రైవర్ పరధ్యానం"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"డ్రైవర్ పరధ్యాన స్థాయిని చదువు"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"డ్రైవర్ పరధ్యాన స్థాయిని చదువు."</string>
</resources>
diff --git a/experimental/service/res/values-th/strings.xml b/experimental/service/res/values-th/strings.xml
index 4459040..3a2c851 100644
--- a/experimental/service/res/values-th/strings.xml
+++ b/experimental/service/res/values-th/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"การเสียสมาธิของผู้ขับ"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"อ่านระดับการเสียสมาธิของผู้ขับ"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"อ่านระดับการเสียสมาธิของผู้ขับ"</string>
</resources>
diff --git a/experimental/service/res/values-tl/strings.xml b/experimental/service/res/values-tl/strings.xml
index 0c77534..19052c8 100644
--- a/experimental/service/res/values-tl/strings.xml
+++ b/experimental/service/res/values-tl/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Gambala sa Nagmamaneho"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"basahin ang antas ng gambala sa nagmamaneho"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Basahin ang antas ng gambala sa nagmamaneho."</string>
</resources>
diff --git a/experimental/service/res/values-tr/strings.xml b/experimental/service/res/values-tr/strings.xml
index 5f8ef5d..cccb1a4 100644
--- a/experimental/service/res/values-tr/strings.xml
+++ b/experimental/service/res/values-tr/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Sürücünün Dikkatinin Dağılması"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"sürücünün dikkatinin dağılma seviyesini oku"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Sürücünün dikkatinin dağılma seviyesini oku."</string>
</resources>
diff --git a/experimental/service/res/values-uk/strings.xml b/experimental/service/res/values-uk/strings.xml
index 9f2fc5f..54c0bd4 100644
--- a/experimental/service/res/values-uk/strings.xml
+++ b/experimental/service/res/values-uk/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Відволікання водія"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"переглядати рівень відволікання водія"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Переглядати рівень відволікання водія."</string>
</resources>
diff --git a/experimental/service/res/values-ur/strings.xml b/experimental/service/res/values-ur/strings.xml
index 82805cc..871fb80 100644
--- a/experimental/service/res/values-ur/strings.xml
+++ b/experimental/service/res/values-ur/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"ڈرائیور کا ذہنی انتشار"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"ڈرائیور کے ذہنی انتشار کا لیول پڑھیں"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"ڈرائیور کے ذہنی انتشار کا لیول پڑھیں۔"</string>
</resources>
diff --git a/experimental/service/res/values-uz/strings.xml b/experimental/service/res/values-uz/strings.xml
index 4a92473..3e30601 100644
--- a/experimental/service/res/values-uz/strings.xml
+++ b/experimental/service/res/values-uz/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Haydovchi diqqatini olish"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"haydovchi diqqatini olish darajasi haqida batafsil"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Haydovchi diqqatini olish darajasi haqida batafsil."</string>
</resources>
diff --git a/experimental/service/res/values-vi/strings.xml b/experimental/service/res/values-vi/strings.xml
index 2ee4c33..1af7c52 100644
--- a/experimental/service/res/values-vi/strings.xml
+++ b/experimental/service/res/values-vi/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Mức mất tập trung của người lái xe"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"đọc thông tin về mức mất tập trung của người lái xe"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Đọc thông tin về mức mất tập trung của người lái xe."</string>
</resources>
diff --git a/experimental/service/res/values-zh-rCN/strings.xml b/experimental/service/res/values-zh-rCN/strings.xml
index 66fbb35..cfecc42 100644
--- a/experimental/service/res/values-zh-rCN/strings.xml
+++ b/experimental/service/res/values-zh-rCN/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"驾驶员分散注意力"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"读取驾驶员分散注意力等级"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"读取驾驶员分散注意力等级。"</string>
</resources>
diff --git a/experimental/service/res/values-zh-rHK/strings.xml b/experimental/service/res/values-zh-rHK/strings.xml
index 3974389..2aa6176 100644
--- a/experimental/service/res/values-zh-rHK/strings.xml
+++ b/experimental/service/res/values-zh-rHK/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"司機分心程度"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"讀取司機分心程度"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"讀取司機分心程度。"</string>
</resources>
diff --git a/experimental/service/res/values-zh-rTW/strings.xml b/experimental/service/res/values-zh-rTW/strings.xml
index ac74c8a..86512f5 100644
--- a/experimental/service/res/values-zh-rTW/strings.xml
+++ b/experimental/service/res/values-zh-rTW/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"駕駛人分心等級"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"讀取駕駛人的分心等級"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"讀取駕駛人分心等級。"</string>
</resources>
diff --git a/experimental/service/res/values-zu/strings.xml b/experimental/service/res/values-zu/strings.xml
index 0489163..6d1c25a 100644
--- a/experimental/service/res/values-zu/strings.xml
+++ b/experimental/service/res/values-zu/strings.xml
@@ -16,6 +16,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label_driver_distraction" msgid="4864958399001183048">"Ukuphazamiseka komshayeli"</string>
+ <string name="car_permission_label_driver_distraction" msgid="4362982084385602611">"funda ileveli yokuphazamisa yomshayeli"</string>
<string name="car_permission_desc_driver_distraction" msgid="2506435411900299264">"Funda ileveli yokuphazamisa yomshayeli."</string>
</resources>
diff --git a/experimental/service/src/com/android/experimentalcar/TouchDriverAwarenessSupplier.java b/experimental/service/src/com/android/experimentalcar/TouchDriverAwarenessSupplier.java
index fa8bc34..90ad609 100644
--- a/experimental/service/src/com/android/experimentalcar/TouchDriverAwarenessSupplier.java
+++ b/experimental/service/src/com/android/experimentalcar/TouchDriverAwarenessSupplier.java
@@ -273,16 +273,22 @@
@Override
public void onInputEvent(InputEvent event) {
- if (!(event instanceof MotionEvent)) {
- return;
- }
-
- MotionEvent motionEvent = (MotionEvent) event;
- if (motionEvent.getActionMasked() == MotionEvent.ACTION_UP) {
- logd("ACTION_UP touch received");
- synchronized (mLock) {
- consumePermitLocked(SystemClock.elapsedRealtime());
+ boolean handled = false;
+ try {
+ if (!(event instanceof MotionEvent)) {
+ return;
}
+
+ MotionEvent motionEvent = (MotionEvent) event;
+ if (motionEvent.getActionMasked() == MotionEvent.ACTION_UP) {
+ logd("ACTION_UP touch received");
+ synchronized (mLock) {
+ consumePermitLocked(SystemClock.elapsedRealtime());
+ }
+ handled = true;
+ }
+ } finally {
+ finishInputEvent(event, handled);
}
}
}
diff --git a/experimental/tests/experimentalcarservice_unit_test/Android.bp b/experimental/tests/experimentalcarservice_unit_test/Android.bp
index 891a151..13fa524 100644
--- a/experimental/tests/experimentalcarservice_unit_test/Android.bp
+++ b/experimental/tests/experimentalcarservice_unit_test/Android.bp
@@ -45,4 +45,6 @@
],
instrumentation_for: "ExperimentalCarService",
+
+ test_suites: ["device-tests"]
}
diff --git a/packages/CarShell/AndroidManifest.xml b/packages/CarShell/AndroidManifest.xml
index c947a59..d4f7fd7 100644
--- a/packages/CarShell/AndroidManifest.xml
+++ b/packages/CarShell/AndroidManifest.xml
@@ -27,4 +27,8 @@
<uses-permission android:name="android.car.permission.CAR_CONTROL_AUDIO_VOLUME" />
<!-- Permissions required for ATS tests - AtsDeviceInfo -->
<uses-permission android:name="android.car.permission.CAR_DIAGNOSTICS" />
+ <!-- Permission required for 'adb shell cmd car_service silent-mode' -->
+ <uses-permission android:name="android.car.permission.CAR_POWER" />
+ <!-- Permission required for 'adb shell cmd car_service day-night-mode [day|night]' -->
+ <uses-permission android:name="android.car.permission.MODIFY_DAY_NIGHT_MODE" />
</manifest>
diff --git a/service/Android.bp b/service/Android.bp
index 50f0f41..0d5dab2 100644
--- a/service/Android.bp
+++ b/service/Android.bp
@@ -39,13 +39,13 @@
"android.hardware.health-V1.0-java",
"android.hardware.health-V2.0-java",
"android.hardware.automotive.occupant_awareness-java",
+ "carpowerpolicy_system_notification-java",
"vehicle-hal-support-lib",
"car-systemtest",
"com.android.car.procfsinspector-client",
"blestream-protos",
"SettingsLib",
"androidx.preference_preference",
- "EncryptionRunner",
]
android_app {
@@ -69,10 +69,10 @@
libs: ["android.car"],
static_libs: common_lib_deps + [
- "car-frameworks-service",
+ "com.android.car.internal.system",
],
- required: ["privapp_whitelist_com.android.car"],
+ required: ["allowed_privapp_com.android.car"],
// Disable build in PDK, missing aidl import breaks build
product_variables: {
diff --git a/service/AndroidManifest.xml b/service/AndroidManifest.xml
index f15978c..1fe8c0c 100644
--- a/service/AndroidManifest.xml
+++ b/service/AndroidManifest.xml
@@ -15,930 +15,839 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
- package="com.android.car"
- coreApp="true"
- android:sharedUserId="android.uid.system">
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+ package="com.android.car"
+ coreApp="true"
+ android:sharedUserId="android.uid.system">
- <original-package android:name="com.android.car" />
+ <original-package android:name="com.android.car"/>
<!-- Used for runtime permissions related to monitoring vehicle information. -->
- <permission-group
- android:name="android.car.permission-group.CAR_MONITORING"
- android:icon="@drawable/perm_group_car"
- android:description="@string/car_permission_desc"
- android:label="@string/car_permission_label" />
+ <permission-group android:name="android.car.permission-group.CAR_MONITORING"
+ android:icon="@drawable/perm_group_car"
+ android:description="@string/car_permission_desc"
+ android:label="@string/car_permission_label"/>
<!-- Allows an application to read the vehicle energy information.
<p>Protection level: dangerous
-->
- <permission
- android:name="android.car.permission.CAR_ENERGY"
- android:permissionGroup="android.car.permission-group.CAR_MONITORING"
- android:protectionLevel="dangerous"
- android:label="@string/car_permission_label_energy"
- android:description="@string/car_permission_desc_energy" />
+ <permission android:name="android.car.permission.CAR_ENERGY"
+ android:permissionGroup="android.car.permission-group.CAR_MONITORING"
+ android:protectionLevel="dangerous"
+ android:label="@string/car_permission_label_energy"
+ android:description="@string/car_permission_desc_energy"/>
<!-- Allows an application to adjust the vehicle's range remaining information.
<p>Protection level: signature|privileged
- -->
- <permission
- android:name="android.car.permission.ADJUST_RANGE_REMAINING"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_adjust_range_remaining"
- android:description="@string/car_permission_desc_adjust_range_remaining" />
+ -->
+ <permission android:name="android.car.permission.ADJUST_RANGE_REMAINING"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_adjust_range_remaining"
+ android:description="@string/car_permission_desc_adjust_range_remaining"/>
<!-- Allows an application to read the VIN information.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CAR_IDENTIFICATION"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_car_identification"
- android:description="@string/car_permission_desc_car_identification" />
+ <permission android:name="android.car.permission.CAR_IDENTIFICATION"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_car_identification"
+ android:description="@string/car_permission_desc_car_identification"/>
<!-- Allows an application to control the vehicle HVAC.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CONTROL_CAR_CLIMATE"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_hvac"
- android:description="@string/car_permission_desc_hvac" />
+ <permission android:name="android.car.permission.CONTROL_CAR_CLIMATE"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_hvac"
+ android:description="@string/car_permission_desc_hvac"/>
<!-- Allows an application to control the vehicle doors.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CONTROL_CAR_DOORS"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_control_car_doors"
- android:description="@string/car_permission_desc_control_car_doors" />
+ <permission android:name="android.car.permission.CONTROL_CAR_DOORS"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_control_car_doors"
+ android:description="@string/car_permission_desc_control_car_doors"/>
<!-- Allows an application to control the vehicle windows.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CONTROL_CAR_WINDOWS"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_control_car_windows"
- android:description="@string/car_permission_desc_control_car_windows" />
+ <permission android:name="android.car.permission.CONTROL_CAR_WINDOWS"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_control_car_windows"
+ android:description="@string/car_permission_desc_control_car_windows"/>
<!-- Allows an application to control the vehicle mirrors.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CONTROL_CAR_MIRRORS"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_control_car_mirrors"
- android:description="@string/car_permission_desc_control_car_mirrors" />
+ <permission android:name="android.car.permission.CONTROL_CAR_MIRRORS"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_control_car_mirrors"
+ android:description="@string/car_permission_desc_control_car_mirrors"/>
<!-- Allows an application to control the vehicle seats.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CONTROL_CAR_SEATS"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_control_car_seats"
- android:description="@string/car_permission_desc_control_car_seats" />
+ <permission android:name="android.car.permission.CONTROL_CAR_SEATS"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_control_car_seats"
+ android:description="@string/car_permission_desc_control_car_seats"/>
<!-- Allows an application to read the vehicle mileage information.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CAR_MILEAGE"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_mileage"
- android:description="@string/car_permission_desc_mileage" />
+ <permission android:name="android.car.permission.CAR_MILEAGE"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_mileage"
+ android:description="@string/car_permission_desc_mileage"/>
<!-- Allows an application to read the vehicle tire pressure information.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CAR_TIRES"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_car_tires"
- android:description="@string/car_permission_desc_car_tires" />
+ <permission android:name="android.car.permission.CAR_TIRES"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_car_tires"
+ android:description="@string/car_permission_desc_car_tires"/>
<!-- Allows an application to read the vehicle steering angle information.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.READ_CAR_STEERING"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_car_steering"
- android:description="@string/car_permission_desc_car_steering" />
+ <permission android:name="android.car.permission.READ_CAR_STEERING"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_car_steering"
+ android:description="@string/car_permission_desc_car_steering"/>
<!-- Allows an application to read the display units for distance, fuel, tire pressure,
EV battery and fuel consumption.
<p>Protection level: normal
-->
- <permission
- android:name="android.car.permission.READ_CAR_DISPLAY_UNITS"
- android:protectionLevel="normal"
- android:label="@string/car_permission_label_read_car_display_units"
- android:description="@string/car_permission_desc_read_car_display_units" />
+ <permission android:name="android.car.permission.READ_CAR_DISPLAY_UNITS"
+ android:protectionLevel="normal"
+ android:label="@string/car_permission_label_read_car_display_units"
+ android:description="@string/car_permission_desc_read_car_display_units"/>
<!-- Allows an application to control the display units for distance, fuel, tire pressure,
EV battery and fuel consumption.
<p>Protection level: normal
-->
- <permission
- android:name="android.car.permission.CONTROL_CAR_DISPLAY_UNITS"
- android:protectionLevel="normal"
- android:label="@string/car_permission_label_control_car_display_units"
- android:description="@string/car_permission_desc_control_car_display_units" />
+ <permission android:name="android.car.permission.CONTROL_CAR_DISPLAY_UNITS"
+ android:protectionLevel="normal"
+ android:label="@string/car_permission_label_control_car_display_units"
+ android:description="@string/car_permission_desc_control_car_display_units"/>
<!-- Allows an application to read the vehicle speed.
<p>Protection level: dangerous
-->
- <permission
- android:name="android.car.permission.CAR_SPEED"
- android:permissionGroup="android.permission-group.LOCATION"
- android:protectionLevel="dangerous"
- android:label="@string/car_permission_label_speed"
- android:description="@string/car_permission_desc_speed" />
+ <permission android:name="android.car.permission.CAR_SPEED"
+ android:permissionGroup="android.permission-group.LOCATION"
+ android:protectionLevel="dangerous"
+ android:label="@string/car_permission_label_speed"
+ android:description="@string/car_permission_desc_speed"/>
<!-- Allows an application to read the vehicle fuel and charge port status.
<p>Protection level: normal
-->
- <permission
- android:name="android.car.permission.CAR_ENERGY_PORTS"
- android:protectionLevel="normal"
- android:label="@string/car_permission_label_car_energy_ports"
- android:description="@string/car_permission_desc_car_energy_ports" />
+ <permission android:name="android.car.permission.CAR_ENERGY_PORTS"
+ android:protectionLevel="normal"
+ android:label="@string/car_permission_label_car_energy_ports"
+ android:description="@string/car_permission_desc_car_energy_ports"/>
<!-- Allows an application to control the vehicle fuel and charge port status.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CONTROL_CAR_ENERGY_PORTS"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_control_car_energy_ports"
- android:description="@string/car_permission_desc_control_car_energy_ports" />
+ <permission android:name="android.car.permission.CONTROL_CAR_ENERGY_PORTS"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_control_car_energy_ports"
+ android:description="@string/car_permission_desc_control_car_energy_ports"/>
<!-- Allows an application to read the vehicle engine information. For example, it allows an
application to read the engine oil level, oil temperature, coolant temperature and RPM.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CAR_ENGINE_DETAILED"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_car_engine_detailed"
- android:description="@string/car_permission_desc_car_engine_detailed" />
+ <permission android:name="android.car.permission.CAR_ENGINE_DETAILED"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_car_engine_detailed"
+ android:description="@string/car_permission_desc_car_engine_detailed"/>
<!-- Allows an application to read the vehicle dynamic state information. For example, it
allows an application to read the ABS and traction control status.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CAR_DYNAMICS_STATE"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_vehicle_dynamics_state"
- android:description="@string/car_permission_desc_vehicle_dynamics_state" />
+ <permission android:name="android.car.permission.CAR_DYNAMICS_STATE"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_vehicle_dynamics_state"
+ android:description="@string/car_permission_desc_vehicle_dynamics_state"/>
<!-- Allows an application to access the vehicle vendor channel to exchange vendor-specific information.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CAR_VENDOR_EXTENSION"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_vendor_extension"
- android:description="@string/car_permission_desc_vendor_extension" />
+ <permission android:name="android.car.permission.CAR_VENDOR_EXTENSION"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_vendor_extension"
+ android:description="@string/car_permission_desc_vendor_extension"/>
<!-- Allows an application to project an interface from a phone to the vehicle display.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CAR_PROJECTION"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_projection"
- android:description="@string/car_permission_desc_projection" />
+ <permission android:name="android.car.permission.CAR_PROJECTION"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_projection"
+ android:description="@string/car_permission_desc_projection"/>
<!-- Allows an application to get the status of other applications projecting to the vehicle display.
technologies status changes.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.ACCESS_CAR_PROJECTION_STATUS"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_access_projection_status"
- android:description="@string/car_permission_desc_access_projection_status" />
+ <permission android:name="android.car.permission.ACCESS_CAR_PROJECTION_STATUS"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_access_projection_status"
+ android:description="@string/car_permission_desc_access_projection_status"/>
<!-- Must be required by projection service to ensure only system can bind to it.
<p>Protection level: signature
-->
- <permission
- android:name="android.car.permission.BIND_PROJECTION_SERVICE"
- android:protectionLevel="signature"
- android:label="@string/car_permission_label_bind_projection_service"
- android:description="@string/car_permission_desc_bind_projection_service" />
+ <permission android:name="android.car.permission.BIND_PROJECTION_SERVICE"
+ android:protectionLevel="signature"
+ android:label="@string/car_permission_label_bind_projection_service"
+ android:description="@string/car_permission_desc_bind_projection_service"/>
<!-- Allows an application to emulate the vehicle HAL for testing purposes.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CAR_MOCK_VEHICLE_HAL"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_mock_vehicle_hal"
- android:description="@string/car_permission_desc_mock_vehicle_hal" />
+ <permission android:name="android.car.permission.CAR_MOCK_VEHICLE_HAL"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_mock_vehicle_hal"
+ android:description="@string/car_permission_desc_mock_vehicle_hal"/>
<!-- Allows an application to read the vehicle car basic information. For example, it allows
an application to read the vehicle Make, Model, Model Year, fuel capacity, fuel type,
EV battery capacity, EV connection type, fuel door location and driver seat location.
<p>Protection level: normal
-->
- <permission
- android:name="android.car.permission.CAR_INFO"
- android:protectionLevel="normal"
- android:label="@string/car_permission_label_car_info"
- android:description="@string/car_permission_desc_car_info" />
+ <permission android:name="android.car.permission.CAR_INFO"
+ android:protectionLevel="normal"
+ android:label="@string/car_permission_label_car_info"
+ android:description="@string/car_permission_desc_car_info"/>
<!-- Allows an application to read information of car's vendor permission.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.READ_CAR_VENDOR_PERMISSION_INFO"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_vendor_permission_info"
- android:description="@string/car_permission_desc_vendor_permission_info" />
+ <permission android:name="android.car.permission.READ_CAR_VENDOR_PERMISSION_INFO"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_vendor_permission_info"
+ android:description="@string/car_permission_desc_vendor_permission_info"/>
<!-- Allows an application to read the vehicle exterior environment information. For example,
it allows an application to read the vehicle exterior temperature and night mode status.
<p>Protection level: normal
-->
- <permission
- android:name="android.car.permission.CAR_EXTERIOR_ENVIRONMENT"
- android:protectionLevel="normal"
- android:label="@string/car_permission_label_car_exterior_environment"
- android:description="@string/car_permission_desc_car_exterior_environment" />
+ <permission android:name="android.car.permission.CAR_EXTERIOR_ENVIRONMENT"
+ android:protectionLevel="normal"
+ android:label="@string/car_permission_label_car_exterior_environment"
+ android:description="@string/car_permission_desc_car_exterior_environment"/>
<!-- Allows an application to read the vehicle exterior lights state.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CAR_EXTERIOR_LIGHTS"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_car_exterior_lights"
- android:description="@string/car_permission_desc_car_exterior_lights" />
+ <permission android:name="android.car.permission.CAR_EXTERIOR_LIGHTS"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_car_exterior_lights"
+ android:description="@string/car_permission_desc_car_exterior_lights"/>
<!-- Allows an application to control the vehicle exterior lights.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CONTROL_CAR_EXTERIOR_LIGHTS"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_control_car_exterior_lights"
- android:description="@string/car_permission_desc_control_car_exterior_lights" />
+ <permission android:name="android.car.permission.CONTROL_CAR_EXTERIOR_LIGHTS"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_control_car_exterior_lights"
+ android:description="@string/car_permission_desc_control_car_exterior_lights"/>
<!-- Allows an application to read the vehicle interior lights state.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.READ_CAR_INTERIOR_LIGHTS"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_car_interior_lights"
- android:description="@string/car_permission_desc_car_interior_lights" />
+ <permission android:name="android.car.permission.READ_CAR_INTERIOR_LIGHTS"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_car_interior_lights"
+ android:description="@string/car_permission_desc_car_interior_lights"/>
<!-- Allows an application to control the vehicle interior lights state.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CONTROL_CAR_INTERIOR_LIGHTS"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_control_car_interior_lights"
- android:description="@string/car_permission_desc_control_car_interior_lights" />
+ <permission android:name="android.car.permission.CONTROL_CAR_INTERIOR_LIGHTS"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_control_car_interior_lights"
+ android:description="@string/car_permission_desc_control_car_interior_lights"/>
<!-- Allows an application to control the vehicle power state.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CAR_POWER"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_car_power"
- android:description="@string/car_permission_desc_car_power" />
+ <permission android:name="android.car.permission.CAR_POWER"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_car_power"
+ android:description="@string/car_permission_desc_car_power"/>
<!-- Allows an application to read the vehicle powertrain information. For example, it allows
an application to read the vehicle current gear, ignition state or parking break status.
<p>Protection level: normal
-->
- <permission
- android:name="android.car.permission.CAR_POWERTRAIN"
- android:protectionLevel="normal"
- android:label="@string/car_permission_label_car_powertrain"
- android:description="@string/car_permission_desc_car_powertrain" />
+ <permission android:name="android.car.permission.CAR_POWERTRAIN"
+ android:protectionLevel="normal"
+ android:label="@string/car_permission_label_car_powertrain"
+ android:description="@string/car_permission_desc_car_powertrain"/>
<!-- Allows an application to access {@link android.car.navigation.CarNavigationStatusManager}
to report navigation data. This information may be displayed by the vehicle in the
instrument cluster, head-up display or other locations.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CAR_NAVIGATION_MANAGER"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_car_navigation_manager"
- android:description="@string/car_permission_desc_car_navigation_manager" />
+ <permission android:name="android.car.permission.CAR_NAVIGATION_MANAGER"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_car_navigation_manager"
+ android:description="@string/car_permission_desc_car_navigation_manager"/>
<!-- Allows an application to read vehicle diagnostic information, including vendor-specific
information.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CAR_DIAGNOSTICS"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_diag_read"
- android:description="@string/car_permission_desc_diag_read" />
+ <permission android:name="android.car.permission.CAR_DIAGNOSTICS"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_diag_read"
+ android:description="@string/car_permission_desc_diag_read"/>
<!-- Allows an application to clear diagnostic information from the vehicle.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CLEAR_CAR_DIAGNOSTICS"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_diag_clear"
- android:description="@string/car_permission_desc_diag_clear" />
+ <permission android:name="android.car.permission.CLEAR_CAR_DIAGNOSTICS"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_diag_clear"
+ android:description="@string/car_permission_desc_diag_clear"/>
<!-- Must be required by VMS client service to ensure only system can bind to it.
<p>Protection level: signature
-->
- <permission
- android:name="android.car.permission.BIND_VMS_CLIENT"
- android:protectionLevel="signature"
- android:label="@string/car_permission_label_bind_vms_client"
- android:description="@string/car_permission_desc_bind_vms_client" />
+ <permission android:name="android.car.permission.BIND_VMS_CLIENT"
+ android:protectionLevel="signature"
+ android:label="@string/car_permission_label_bind_vms_client"
+ android:description="@string/car_permission_desc_bind_vms_client"/>
<!-- Allows an application to publich VMS messages.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.VMS_PUBLISHER"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_vms_publisher"
- android:description="@string/car_permission_desc_vms_publisher" />
+ <permission android:name="android.car.permission.VMS_PUBLISHER"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_vms_publisher"
+ android:description="@string/car_permission_desc_vms_publisher"/>
<!-- Allows an application to subscribe to VMS messages.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.VMS_SUBSCRIBER"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_vms_subscriber"
- android:description="@string/car_permission_desc_vms_subscriber" />
+ <permission android:name="android.car.permission.VMS_SUBSCRIBER"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_vms_subscriber"
+ android:description="@string/car_permission_desc_vms_subscriber"/>
<!-- Allows an application to read the vehicle driving state.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CAR_DRIVING_STATE"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_driving_state"
- android:description="@string/car_permission_desc_driving_state" />
+ <permission android:name="android.car.permission.CAR_DRIVING_STATE"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_driving_state"
+ android:description="@string/car_permission_desc_driving_state"/>
<!-- may replace this with system permission if proper one is defined. -->
- <eat-comment />
+ <eat-comment/>
<!-- Allows an application to block other applications for driver distraction purposes.
Note: This permission may be replaced in future versions.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CONTROL_APP_BLOCKING"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_control_app_blocking"
- android:description="@string/car_permission_desc_control_app_blocking" />
+ <permission android:name="android.car.permission.CONTROL_APP_BLOCKING"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_control_app_blocking"
+ android:description="@string/car_permission_desc_control_app_blocking"/>
<!-- Allows an application to control the vehicle audio volume.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CAR_CONTROL_AUDIO_VOLUME"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_audio_volume"
- android:description="@string/car_permission_desc_audio_volume" />
+ <permission android:name="android.car.permission.CAR_CONTROL_AUDIO_VOLUME"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_audio_volume"
+ android:description="@string/car_permission_desc_audio_volume"/>
<!-- Allows an application to control the vehicle audio settings.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CAR_CONTROL_AUDIO_SETTINGS"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_audio_settings"
- android:description="@string/car_permission_desc_audio_settings" />
+ <permission android:name="android.car.permission.CAR_CONTROL_AUDIO_SETTINGS"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_audio_settings"
+ android:description="@string/car_permission_desc_audio_settings"/>
<!-- Must be required by instrument cluster service to ensure only system can bind to it.
<p>Protection level: signature
-->
- <permission
- android:name="android.car.permission.RECEIVE_CAR_AUDIO_DUCKING_EVENTS"
- android:protectionLevel="system|signature"
- android:label="@string/car_permission_label_receive_ducking"
- android:description="@string/car_permission_desc_receive_ducking" />
+ <permission android:name="android.car.permission.RECEIVE_CAR_AUDIO_DUCKING_EVENTS"
+ android:protectionLevel="system|signature"
+ android:label="@string/car_permission_label_receive_ducking"
+ android:description="@string/car_permission_desc_receive_ducking"/>
- <permission
- android:name="android.car.permission.BIND_INSTRUMENT_CLUSTER_RENDERER_SERVICE"
- android:protectionLevel="signature"
- android:label="@string/car_permission_label_bind_instrument_cluster_rendering"
- android:description="@string/car_permission_desc_bind_instrument_cluster_rendering"/>
+ <permission android:name="android.car.permission.BIND_INSTRUMENT_CLUSTER_RENDERER_SERVICE"
+ android:protectionLevel="signature"
+ android:label="@string/car_permission_label_bind_instrument_cluster_rendering"
+ android:description="@string/car_permission_desc_bind_instrument_cluster_rendering"/>
<!-- Allows an application to handle the vehicle input events.
<p>Protection level: signature
-->
- <permission
- android:name="android.car.permission.BIND_CAR_INPUT_SERVICE"
- android:protectionLevel="signature"
- android:label="@string/car_permission_label_bind_input_service"
- android:description="@string/car_permission_desc_bind_input_service"/>
+ <permission android:name="android.car.permission.BIND_CAR_INPUT_SERVICE"
+ android:protectionLevel="signature"
+ android:label="@string/car_permission_label_bind_input_service"
+ android:description="@string/car_permission_desc_bind_input_service"/>
<!-- Allows an application to declare activities to be displayed in the instrument cluster.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CAR_DISPLAY_IN_CLUSTER"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_car_display_in_cluster"
- android:description="@string/car_permission_desc_car_display_in_cluster" />
+ <permission android:name="android.car.permission.CAR_DISPLAY_IN_CLUSTER"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_car_display_in_cluster"
+ android:description="@string/car_permission_desc_car_display_in_cluster"/>
<!-- Allows an application to lunch applications in the instrument cluster.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CAR_INSTRUMENT_CLUSTER_CONTROL"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_car_cluster_control"
- android:description="@string/car_permission_desc_car_cluster_control" />
+ <permission android:name="android.car.permission.CAR_INSTRUMENT_CLUSTER_CONTROL"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_car_cluster_control"
+ android:description="@string/car_permission_desc_car_cluster_control"/>
<!-- Allows an application to communicate with a device in AOAP mode.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CAR_HANDLE_USB_AOAP_DEVICE"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_car_handle_usb_aoap_device"
- android:description="@string/car_permission_desc_car_handle_usb_aoap_device" />
+ <permission android:name="android.car.permission.CAR_HANDLE_USB_AOAP_DEVICE"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_car_handle_usb_aoap_device"
+ android:description="@string/car_permission_desc_car_handle_usb_aoap_device"/>
<!-- Allows an application to configure UX restrictions in the device.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CAR_UX_RESTRICTIONS_CONFIGURATION"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_car_ux_restrictions_configuration"
- android:description="@string/car_permission_desc_car_ux_restrictions_configuration" />
+ <permission android:name="android.car.permission.CAR_UX_RESTRICTIONS_CONFIGURATION"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_car_ux_restrictions_configuration"
+ android:description="@string/car_permission_desc_car_ux_restrictions_configuration"/>
<!-- Allows an application to read state data from the 'Occupant Awareness System'.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.READ_CAR_OCCUPANT_AWARENESS_STATE"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_read_car_occupant_awareness_state"
- android:description="@string/car_permission_desc_read_car_occupant_awareness_state" />
+ <permission android:name="android.car.permission.READ_CAR_OCCUPANT_AWARENESS_STATE"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_read_car_occupant_awareness_state"
+ android:description="@string/car_permission_desc_read_car_occupant_awareness_state"/>
<!-- Allows an application to control the detection graph for the 'Occupant Awareness System'.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CONTROL_CAR_OCCUPANT_AWARENESS_SYSTEM"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_control_car_occupant_awareness_system"
- android:description="@string/car_permission_desc_control_car_occupant_awareness_system" />
+ <permission android:name="android.car.permission.CONTROL_CAR_OCCUPANT_AWARENESS_SYSTEM"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_control_car_occupant_awareness_system"
+ android:description="@string/car_permission_desc_control_car_occupant_awareness_system"/>
<!-- Allows an application to monitor flash storage usage.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.STORAGE_MONITORING"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_storage_monitoring"
- android:description="@string/car_permission_desc_storage_monitoring" />
+ <permission android:name="android.car.permission.STORAGE_MONITORING"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_storage_monitoring"
+ android:description="@string/car_permission_desc_storage_monitoring"/>
<!-- Allows an application to enroll trusted devices.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CAR_ENROLL_TRUST"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_enroll_trust"
- android:description="@string/car_permission_desc_enroll_trust" />
+ <permission android:name="android.car.permission.CAR_ENROLL_TRUST"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_enroll_trust"
+ android:description="@string/car_permission_desc_enroll_trust"/>
<!-- Allows a test application to control car service's testing mode.
This is only for platform level testing.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CAR_TEST_SERVICE"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_car_test_service"
- android:description="@string/car_permission_desc_car_test_service" />
+ <permission android:name="android.car.permission.CAR_TEST_SERVICE"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_car_test_service"
+ android:description="@string/car_permission_desc_car_test_service"/>
<!-- Allows system app to enable / disable / query features in the system.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.CONTROL_CAR_FEATURES"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_control_car_features"
- android:description="@string/car_permission_desc_control_car_features" />
+ <permission android:name="android.car.permission.CONTROL_CAR_FEATURES"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_control_car_features"
+ android:description="@string/car_permission_desc_control_car_features"/>
<!-- Allows an application to use car watchdog service.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.USE_CAR_WATCHDOG"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_use_car_watchdog"
- android:description="@string/car_permission_desc_use_car_watchdog" />
+ <permission android:name="android.car.permission.USE_CAR_WATCHDOG"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_use_car_watchdog"
+ android:description="@string/car_permission_desc_use_car_watchdog"/>
<!-- Allows an application to read vendor properties related with windows.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_WINDOW"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_get_car_vendor_category_window"
- android:description="@string/car_permission_desc_get_car_vendor_category_window" />
+ <permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_WINDOW"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_get_car_vendor_category_window"
+ android:description="@string/car_permission_desc_get_car_vendor_category_window"/>
<!-- Allows an application to control vendor properties related with windows.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_WINDOW"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_set_car_vendor_category_window"
- android:description="@string/car_permission_desc_set_car_vendor_category_window" />
+ <permission android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_WINDOW"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_set_car_vendor_category_window"
+ android:description="@string/car_permission_desc_set_car_vendor_category_window"/>
<!-- Allows an application to read vendor properties related with doors.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_DOOR"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_get_car_vendor_category_door"
- android:description="@string/car_permission_desc_get_car_vendor_category_door" />
+ <permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_DOOR"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_get_car_vendor_category_door"
+ android:description="@string/car_permission_desc_get_car_vendor_category_door"/>
<!-- Allows an application to control vendor properties related with doors.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_DOOR"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_set_car_vendor_category_door"
- android:description="@string/car_permission_desc_set_car_vendor_category_door" />
+ <permission android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_DOOR"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_set_car_vendor_category_door"
+ android:description="@string/car_permission_desc_set_car_vendor_category_door"/>
<!-- Allows an application to read vendor properties related with seats.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_SEAT"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_get_car_vendor_category_seat"
- android:description="@string/car_permission_desc_get_car_vendor_category_seat" />
+ <permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_SEAT"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_get_car_vendor_category_seat"
+ android:description="@string/car_permission_desc_get_car_vendor_category_seat"/>
<!-- Allows an application to control vendor properties related with seats.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_SEAT"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_set_car_vendor_category_seat"
- android:description="@string/car_permission_desc_set_car_vendor_category_seat" />
+ <permission android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_SEAT"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_set_car_vendor_category_seat"
+ android:description="@string/car_permission_desc_set_car_vendor_category_seat"/>
<!-- Allows an application to read vendor properties related with mirrors.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_MIRROR"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_get_car_vendor_category_mirror"
- android:description="@string/car_permission_desc_get_car_vendor_category_mirror" />
+ <permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_MIRROR"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_get_car_vendor_category_mirror"
+ android:description="@string/car_permission_desc_get_car_vendor_category_mirror"/>
<!-- Allows an application to control vendor properties related with mirrors.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_MIRROR"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_set_car_vendor_category_mirror"
- android:description="@string/car_permission_desc_set_car_vendor_category_mirror" />
+ <permission android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_MIRROR"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_set_car_vendor_category_mirror"
+ android:description="@string/car_permission_desc_set_car_vendor_category_mirror"/>
<!-- Allows an application to read vendor properties related with car information.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_INFO"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_get_car_vendor_category_info"
- android:description="@string/car_permission_desc_get_car_vendor_category_info" />
+ <permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_INFO"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_get_car_vendor_category_info"
+ android:description="@string/car_permission_desc_get_car_vendor_category_info"/>
<!-- Allows an application to control vendor properties related with car information.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_INFO"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_set_car_vendor_category_info"
- android:description="@string/car_permission_desc_set_car_vendor_category_info" />
+ <permission android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_INFO"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_set_car_vendor_category_info"
+ android:description="@string/car_permission_desc_set_car_vendor_category_info"/>
<!-- Allows an application to read vendor properties related with engine.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_ENGINE"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_get_car_vendor_category_engine"
- android:description="@string/car_permission_desc_get_car_vendor_category_engine" />
+ <permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_ENGINE"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_get_car_vendor_category_engine"
+ android:description="@string/car_permission_desc_get_car_vendor_category_engine"/>
<!-- Allows an application to control vendor properties related with engine.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_ENGINE"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_set_car_vendor_category_engine"
- android:description="@string/car_permission_desc_set_car_vendor_category_engine" />
+ <permission android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_ENGINE"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_set_car_vendor_category_engine"
+ android:description="@string/car_permission_desc_set_car_vendor_category_engine"/>
<!-- Allows an application to read vendor properties related with HVAC.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_HVAC"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_get_car_vendor_category_hvac"
- android:description="@string/car_permission_desc_get_car_vendor_category_hvac" />
+ <permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_HVAC"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_get_car_vendor_category_hvac"
+ android:description="@string/car_permission_desc_get_car_vendor_category_hvac"/>
<!-- Allows an application to control vendor properties related with hvac.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_HVAC"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_set_car_vendor_category_hvac"
- android:description="@string/car_permission_desc_set_car_vendor_category_hvac" />
+ <permission android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_HVAC"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_set_car_vendor_category_hvac"
+ android:description="@string/car_permission_desc_set_car_vendor_category_hvac"/>
<!-- Allows an application to read vendor properties related with light.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_LIGHT"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_get_car_vendor_category_light"
- android:description="@string/car_permission_desc_get_car_vendor_category_light" />
+ <permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_LIGHT"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_get_car_vendor_category_light"
+ android:description="@string/car_permission_desc_get_car_vendor_category_light"/>
<!-- Allows an application to control vendor properties related with light.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_LIGHT"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_set_car_vendor_category_light"
- android:description="@string/car_permission_desc_set_car_vendor_category_light" />
+ <permission android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_LIGHT"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_set_car_vendor_category_light"
+ android:description="@string/car_permission_desc_set_car_vendor_category_light"/>
<!-- Allows an application to access vendor properties in category 1.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_1"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_get_car_vendor_category_1"
- android:description="@string/car_permission_desc_get_car_vendor_category_1" />
+ <permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_1"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_get_car_vendor_category_1"
+ android:description="@string/car_permission_desc_get_car_vendor_category_1"/>
<!-- Allows an application to control vendor properties in category 1.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_1"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_set_car_vendor_category_1"
- android:description="@string/car_permission_desc_set_car_vendor_category_1" />
+ <permission android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_1"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_set_car_vendor_category_1"
+ android:description="@string/car_permission_desc_set_car_vendor_category_1"/>
<!-- Allows an application to access vendor properties in category 2.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_2"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_get_car_vendor_category_2"
- android:description="@string/car_permission_desc_get_car_vendor_category_2" />
+ <permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_2"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_get_car_vendor_category_2"
+ android:description="@string/car_permission_desc_get_car_vendor_category_2"/>
<!-- Allows an application to control vendor properties in category 2.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_2"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_set_car_vendor_category_2"
- android:description="@string/car_permission_desc_set_car_vendor_category_2" />
+ <permission android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_2"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_set_car_vendor_category_2"
+ android:description="@string/car_permission_desc_set_car_vendor_category_2"/>
<!-- Allows an application to access vendor properties in category 3.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_3"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_get_car_vendor_category_3"
- android:description="@string/car_permission_desc_get_car_vendor_category_3" />
+ <permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_3"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_get_car_vendor_category_3"
+ android:description="@string/car_permission_desc_get_car_vendor_category_3"/>
<!-- Allows an application to control vendor properties in category 3.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_3"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_set_car_vendor_category_3"
- android:description="@string/car_permission_desc_set_car_vendor_category_3" />
+ <permission android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_3"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_set_car_vendor_category_3"
+ android:description="@string/car_permission_desc_set_car_vendor_category_3"/>
<!-- Allows an application to access vendor properties in category 4.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_4"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_get_car_vendor_category_4"
- android:description="@string/car_permission_desc_get_car_vendor_category_4" />
+ <permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_4"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_get_car_vendor_category_4"
+ android:description="@string/car_permission_desc_get_car_vendor_category_4"/>
<!-- Allows an application to control vendor properties in category 4.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_4"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_set_car_vendor_category_4"
- android:description="@string/car_permission_desc_set_car_vendor_category_4" />
+ <permission android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_4"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_set_car_vendor_category_4"
+ android:description="@string/car_permission_desc_set_car_vendor_category_4"/>
<!-- Allows an application to access vendor properties in category 5.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_5"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_get_car_vendor_category_5"
- android:description="@string/car_permission_desc_get_car_vendor_category_5" />
+ <permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_5"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_get_car_vendor_category_5"
+ android:description="@string/car_permission_desc_get_car_vendor_category_5"/>
<!-- Allows an application to control vendor properties in category 5.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_5"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_set_car_vendor_category_5"
- android:description="@string/car_permission_desc_set_car_vendor_category_5" />
+ <permission android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_5"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_set_car_vendor_category_5"
+ android:description="@string/car_permission_desc_set_car_vendor_category_5"/>
<!-- Allows an application to access vendor properties in category 6.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_6"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_get_car_vendor_category_6"
- android:description="@string/car_permission_desc_get_car_vendor_category_6" />
+ <permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_6"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_get_car_vendor_category_6"
+ android:description="@string/car_permission_desc_get_car_vendor_category_6"/>
<!-- Allows an application to control vendor properties in category 6.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_6"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_set_car_vendor_category_6"
- android:description="@string/car_permission_desc_set_car_vendor_category_6" />
+ <permission android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_6"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_set_car_vendor_category_6"
+ android:description="@string/car_permission_desc_set_car_vendor_category_6"/>
<!-- Allows an application to access vendor properties in category 7.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_7"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_get_car_vendor_category_7"
- android:description="@string/car_permission_desc_get_car_vendor_category_7" />
+ <permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_7"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_get_car_vendor_category_7"
+ android:description="@string/car_permission_desc_get_car_vendor_category_7"/>
<!-- Allows an application to control vendor properties in category 7.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_7"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_set_car_vendor_category_7"
- android:description="@string/car_permission_desc_set_car_vendor_category_7" />
+ <permission android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_7"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_set_car_vendor_category_7"
+ android:description="@string/car_permission_desc_set_car_vendor_category_7"/>
<!-- Allows an application to access vendor properties in category 8.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_8"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_get_car_vendor_category_8"
- android:description="@string/car_permission_desc_get_car_vendor_category_8" />
+ <permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_8"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_get_car_vendor_category_8"
+ android:description="@string/car_permission_desc_get_car_vendor_category_8"/>
<!-- Allows an application to control vendor properties in category 8.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_8"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_set_car_vendor_category_8"
- android:description="@string/car_permission_desc_set_car_vendor_category_8" />
+ <permission android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_8"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_set_car_vendor_category_8"
+ android:description="@string/car_permission_desc_set_car_vendor_category_8"/>
<!-- Allows an application to access vendor properties in category 9.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_9"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_get_car_vendor_category_9"
- android:description="@string/car_permission_desc_get_car_vendor_category_9" />
+ <permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_9"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_get_car_vendor_category_9"
+ android:description="@string/car_permission_desc_get_car_vendor_category_9"/>
<!-- Allows an application to control vendor properties in category 9.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_9"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_set_car_vendor_category_9"
- android:description="@string/car_permission_desc_set_car_vendor_category_9" />
+ <permission android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_9"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_set_car_vendor_category_9"
+ android:description="@string/car_permission_desc_set_car_vendor_category_9"/>
<!-- Allows an application to access vendor properties in category 10.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_10"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_get_car_vendor_category_10"
- android:description="@string/car_permission_desc_get_car_vendor_category_10" />
+ <permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_10"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_get_car_vendor_category_10"
+ android:description="@string/car_permission_desc_get_car_vendor_category_10"/>
<!-- Allows an application to control vendor properties in category 10.
<p>Protection level: signature|privileged
-->
- <permission
- android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_10"
- android:protectionLevel="signature|privileged"
- android:label="@string/car_permission_label_set_car_vendor_category_10"
- android:description="@string/car_permission_desc_set_car_vendor_category_10" />
+ <permission android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_10"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/car_permission_label_set_car_vendor_category_10"
+ android:description="@string/car_permission_desc_set_car_vendor_category_10"/>
- <uses-permission android:name="android.permission.CALL_PHONE" />
- <uses-permission android:name="android.permission.DEVICE_POWER" />
- <uses-permission android:name="android.permission.GRANT_RUNTIME_PERMISSIONS" />
- <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
- <uses-permission android:name="android.permission.MANAGE_ACTIVITY_STACKS" />
- <uses-permission android:name="android.permission.MODIFY_AUDIO_ROUTING" />
- <uses-permission android:name="android.permission.MODIFY_DAY_NIGHT_MODE" />
- <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
- <uses-permission android:name="android.permission.READ_CALL_LOG" />
- <uses-permission android:name="android.permission.READ_PHONE_STATE" />
- <uses-permission android:name="android.permission.REAL_GET_TASKS" />
- <uses-permission android:name="android.permission.REBOOT" />
- <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
- <uses-permission android:name="android.permission.REMOVE_TASKS" />
- <uses-permission android:name="android.permission.WRITE_SETTINGS" />
- <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
- <uses-permission android:name="android.permission.BLUETOOTH" />
- <uses-permission android:name="android.permission.MANAGE_APP_OPS_MODES" />
- <uses-permission android:name="android.permission.MANAGE_USERS" />
- <uses-permission android:name="android.permission.LOCATION_HARDWARE" />
- <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
- <uses-permission android:name="android.permission.PROVIDE_TRUST_AGENT" />
- <uses-permission android:name="android.permission.READ_LOGS" />
+ <uses-permission android:name="android.permission.CALL_PHONE"/>
+ <uses-permission android:name="android.permission.DEVICE_POWER"/>
+ <uses-permission android:name="android.permission.GRANT_RUNTIME_PERMISSIONS"/>
+ <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>
+ <uses-permission android:name="android.permission.MANAGE_ACTIVITY_STACKS"/>
+ <uses-permission android:name="android.permission.MODIFY_AUDIO_ROUTING"/>
+ <uses-permission android:name="android.permission.MODIFY_DAY_NIGHT_MODE"/>
+ <uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>
+ <uses-permission android:name="android.permission.READ_CALL_LOG"/>
+ <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
+ <uses-permission android:name="android.permission.REAL_GET_TASKS"/>
+ <uses-permission android:name="android.permission.REBOOT"/>
+ <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+ <uses-permission android:name="android.permission.REMOVE_TASKS"/>
+ <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
+ <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
+ <uses-permission android:name="android.permission.BLUETOOTH"/>
+ <uses-permission android:name="android.permission.MANAGE_APP_OPS_MODES"/>
+ <uses-permission android:name="android.permission.MANAGE_USERS"/>
+ <uses-permission android:name="android.permission.LOCATION_HARDWARE"/>
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
+ <uses-permission android:name="android.permission.PROVIDE_TRUST_AGENT"/>
+ <uses-permission android:name="android.permission.READ_LOGS"/>
<application android:label="@string/app_title"
- android:directBootAware="true"
- android:allowBackup="false"
- android:persistent="true">
+ android:directBootAware="true"
+ android:allowBackup="false"
+ android:persistent="true">
<service android:name=".CarService"
- android:singleUser="true">
+ android:singleUser="true"
+ android:exported="true">
<intent-filter>
- <action android:name="android.car.ICar" />
+ <action android:name="android.car.ICar"/>
</intent-filter>
</service>
- <service android:name=".PerUserCarService" android:exported="false" />
+ <service android:name=".PerUserCarService"
+ android:exported="false"/>
- <service
- android:name="com.android.car.trust.CarBleTrustAgent"
- android:permission="android.permission.BIND_TRUST_AGENT"
- android:singleUser="true">
+ <service android:name="com.android.car.trust.CarBleTrustAgent"
+ android:permission="android.permission.BIND_TRUST_AGENT"
+ android:singleUser="true"
+ android:exported="true">
<intent-filter>
- <action android:name="android.service.trust.TrustAgentService" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.service.trust.TrustAgentService"/>
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<!-- Warning: the meta data must be included if the service is direct boot aware.
- If not included, the device will crash before boot completes. Rendering the
- device unusable. -->
+ If not included, the device will crash before boot completes. Rendering the
+ device unusable. -->
<meta-data android:name="android.service.trust.trustagent"
- android:resource="@xml/car_trust_agent"/>
+ android:resource="@xml/car_trust_agent"/>
</service>
<activity android:name="com.android.car.pm.ActivityBlockingActivity"
- android:documentLaunchMode="always"
- android:excludeFromRecents="true"
- android:exported="false"
- android:theme="@android:style/Theme.Translucent.NoTitleBar">
+ android:documentLaunchMode="always"
+ android:excludeFromRecents="true"
+ android:exported="false"
+ android:theme="@android:style/Theme.Translucent.NoTitleBar">
<intent-filter>
- <action android:name="android.intent.action.MAIN" />
+ <action android:name="android.intent.action.MAIN"/>
</intent-filter>
</activity>
<activity android:name="com.android.car.am.ContinuousBlankActivity"
- android:excludeFromRecents="true"
- android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
- android:exported="false"
- android:launchMode="singleTask">
+ android:excludeFromRecents="true"
+ android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
+ android:exported="false"
+ android:launchMode="singleTask">
</activity>
</application>
</manifest>
diff --git a/service/res/values-af/strings.xml b/service/res/values-af/strings.xml
index b4a103f..6c1a292 100644
--- a/service/res/values-af/strings.xml
+++ b/service/res/values-af/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Hanteer invoergebeurtenisse"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN-bus het misluk"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-bus reageer nie. Ontprop hoofeenheidkas, prop dit weer in, en herbegin die motor"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Vir jou veiligheid is dié aktiwiteit nie beskikbaar terwyl jy bestuur nie.\nWag totdat jy geparkeer het om voort te gaan."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Jy kan nie hierdie kenmerk gebruik terwyl jy bestuur nie"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Kies <xliff:g id="EXIT_BUTTON">%s</xliff:g> om oor te begin met veilige programkenmerke."</string>
<string name="exit_button" msgid="5829638404777671253">"Terug"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Maak program toe"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Terug"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"lees diagnostiese data"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Lees diagnostiese data van die motor af."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"vee diagnostiese data uit"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"gebruik motorwaghond"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Gebruik motorwaghond."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"My Toestel"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Gas"</string>
</resources>
diff --git a/service/res/values-am/strings.xml b/service/res/values-am/strings.xml
index 2f03c34..3899911 100644
--- a/service/res/values-am/strings.xml
+++ b/service/res/values-am/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"የግቤት ክስተቶችን ያስተናግዱ"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN አውቶብስ አልተሳካም"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN አውቶብስ ምላሽ አይሰጥም። የጭንቅላት አሃድ መያዣ ሳጥኑን ይሰኩ እና ይንቀሉ በመቀጠል መኪናውን ዳግም ያስጀምሩ"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"ለእርስዎ ደህንነት ሲባል፣ ይህ እንቅስቃሴ እርስዎ በሚነዱበት ጊዜ አይገኝም። \nለመቀጠል እንዲችሉ፣ መኪናዎ እስከሚቆም ድረስ ይጠብቁ።"</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"እየነዱ ሳለ ይህን ባህሪ መጠቀም አይችሉም"</string>
<string name="exit_button_message" msgid="8554690915924055685">"ከደህንነት አስተማማኝ የሆኑ የመተግበሪያ ባህሪያት ጋር መልሶ ለመጀመር፣ <xliff:g id="EXIT_BUTTON">%s</xliff:g>ን ይምረጡ።"</string>
<string name="exit_button" msgid="5829638404777671253">"ተመለስ"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"መተግበሪያን ዝጋ"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"ተመለስ"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"የምርመራ ውሂብን አንብብ"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"ከመኪናው ላይ የምርመራ ውሂብን ያንብቡ።"</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"የምርመራ ውሂብን አጽዳ"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"የመኪና ጠባቂን መጠቀም"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"የመኪና ጠባቂን መጠቀም።"</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"የእኔ መሣሪያ"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"እንግዳ"</string>
</resources>
diff --git a/service/res/values-ar/strings.xml b/service/res/values-ar/strings.xml
index 0026cb5..3b3015e 100644
--- a/service/res/values-ar/strings.xml
+++ b/service/res/values-ar/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"التعامل مع أحداث الإدخال"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"حدث خطأ في موصّل CAN"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"لا استجابة من موصّل CAN. يمكنك فصل صندوق وحدة الرأس وإعادة تشغيل السيارة."</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"حرصًا على سلامتك، لا يتوفّر هذا النشاط أثناء القيادة.\nللمتابعة، يمكنك الانتظار حتى تتوقّف السيارة."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"لا يمكنك استخدام هذه الميزة أثناء القيادة."</string>
<string name="exit_button_message" msgid="8554690915924055685">"للبدء من جديد باستخدام ميزات تطبيق آمنة، اختَر <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"رجوع"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"إغلاق التطبيق"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"رجوع"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"قراءة البيانات التشخيصية"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"يمكنك قراءة البيانات التشخيصية من السيارة."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"محو البيانات التشخيصية"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"استخدام مراقب نظام السيارة"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"استخدام مراقب نظام السيارة"</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"جهازي"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"ضيف"</string>
</resources>
diff --git a/service/res/values-as/strings.xml b/service/res/values-as/strings.xml
index 7a29acb..811d8f7 100644
--- a/service/res/values-as/strings.xml
+++ b/service/res/values-as/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ইনপুট ইভেণ্ট নিয়ন্ত্ৰণ কৰিব"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN বাছ বিফল হৈছে"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN বাছে সঁহাৰি দিয়া নাই। হে’ড ইউনিট বাকচটো আঁতৰাই পুনৰ লগাওক"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"আপোনাৰ নিৰাপত্তাৰ বাবে এই কাৰ্যকলাপটো গাড়ী চলাই থকা সময়ত কৰিব নোৱাৰি।\nগাড়ীখন পাৰ্ক কৰি কামটো কৰক।"</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"আপুনি গাড়ী চলাই থকাৰ সময়ত এই সুবিধাটো ব্যৱহাৰ কৰিব নোৱাৰে"</string>
<string name="exit_button_message" msgid="8554690915924055685">"সুৰক্ষিত এপ্ সুবিধাসহ আকৌ আৰম্ভ কৰিবলৈ <xliff:g id="EXIT_BUTTON">%s</xliff:g> বাছনি কৰক।"</string>
<string name="exit_button" msgid="5829638404777671253">"উভতি যাওক"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"এপ্টো বন্ধ কৰক"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"উভতি যাওক"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"ডায়গন’ষ্টিক ডেটা পঢ়িব"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"গাড়ীৰ ডায়গ’ষ্টিক তথ্য পঢ়িব।"</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"ডায়গন’ষ্টিক ডেটা মচিব"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"গাড়ীৰ ৱাচ্ডগ ব্যৱহাৰ কৰক"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"গাড়ীৰ ৱাচ্ডগ ব্যৱহাৰ কৰক।"</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"মোৰ ডিভাইচ"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"অতিথি"</string>
</resources>
diff --git a/service/res/values-az/strings.xml b/service/res/values-az/strings.xml
index d812aba..fbdd24c 100644
--- a/service/res/values-az/strings.xml
+++ b/service/res/values-az/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Daxiletmələri idarə etmək"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN idarəetmə mexanizmi uğursuz oldu"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN mexanizmi cavab vermir. Əsas cihaz panelini ayırın və yenidən qoşun, sonra avtomobili yenidən işə salın"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Təhlükəsizliyiniz üçün bu əməliyyat sürüş zamanı əlçatan deyil.\nDavam etmək üçün park edənədək gözləyin."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Avtomobil sürərkən bu funksiyanı istifadə edə bilməzsiniz"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Təhlükəsiz tətbiq xüsusiyyətləri ilə başlamaq üçün <xliff:g id="EXIT_BUTTON">%s</xliff:g> seçin."</string>
<string name="exit_button" msgid="5829638404777671253">"Geri"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Tətbiqi qapadın"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Geri"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"diaqnoztika məlumatlarını oxumaq"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Avtomobilin diaqnoztika məlumatlarını oxumaq."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"diaqnoztika məlumatlarını silmək"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"avtomobil keşikçisindən istifadə edin"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Avtomobil keşikçisindən istifadə edin."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Cihazım"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Qonaq"</string>
</resources>
diff --git a/service/res/values-b+sr+Latn/strings.xml b/service/res/values-b+sr+Latn/strings.xml
index 4abf472..25bffaa 100644
--- a/service/res/values-b+sr+Latn/strings.xml
+++ b/service/res/values-b+sr+Latn/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Upravlja događajima unosa"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Greška CAN magistrale"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN magistrala ne reaguje. Isključite i ponovo uključite glavnu jedinicu i ponovo pokrenite automobil"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Ova aktivnost nije dostupna dok vozite radi vaše bezbednosti.\nDa biste nastavili, prvo se parkirajte."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Ne možete da koristite ovu funkciju dok vozite"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Da biste ponovo počeli sa bezbednim funkcijama aplikacije, izaberite <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Nazad"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Zatvori aplikaciju"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Nazad"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"čitanje dijagnostičkih podataka"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Čitanje dijagnostičkih podataka iz automobila."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"brisanje dijagnostičkih podataka"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"koristi nadzorni tajmer automobila"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Koristi nadzorni tajmer automobila."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Moj uređaj"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Gost"</string>
</resources>
diff --git a/service/res/values-be/strings.xml b/service/res/values-be/strings.xml
index 117f40e..9df2dc5 100644
--- a/service/res/values-be/strings.xml
+++ b/service/res/values-be/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Магчымасць апрацоўваць падзеі ўводу"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN-шына парушана"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-шына не адказвае. Перападключыце канектар, а затым выключыце запальванне і паўторна завядзіце аўтамабіль"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Дзеля вашай бяспекі гэта дзеянне недаступнае, калі вы за рулём.\nСпачатку прыпаркуйцеся."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Гэта функцыя недаступная для карыстання, калі аўтамабіль рухаецца"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Каб перазапусціць праграму ў бяспечным рэжыме, націсніце кнопку \"<xliff:g id="EXIT_BUTTON">%s</xliff:g>\"."</string>
<string name="exit_button" msgid="5829638404777671253">"Назад"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Закрыць праграму"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Назад"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"атрымліваць даныя дыягностыкі"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Счытванне дыягнастычных даных аўтамабіля"</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"ачысціць даныя дыягностыкі"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"выкарыстанне вартавога таймера аўтамабіля"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Выкарыстанне вартавога таймера аўтамабіля."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Мая прылада"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Госць"</string>
</resources>
diff --git a/service/res/values-bg/strings.xml b/service/res/values-bg/strings.xml
index 1c5b0ef..e8be5e2 100644
--- a/service/res/values-bg/strings.xml
+++ b/service/res/values-bg/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Обработване на входящи събития"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Грешка в CAN шината"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN шината не реагира. Изключете и включете отново захранването на основното устройство и рестартирайте автомобила"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"От съображения за безопасност тази функция не е достъпна при шофиране.\nЗа да продължите, трябва първо да паркирате."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Не можете да използвате тази функция по време на шофиране"</string>
<string name="exit_button_message" msgid="8554690915924055685">"За да рестартирате приложението и безопасните му функции, изберете „<xliff:g id="EXIT_BUTTON">%s</xliff:g>“."</string>
<string name="exit_button" msgid="5829638404777671253">"Назад"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Затваряне"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Назад"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"четене на диагностични данни"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Четене на диагностични данни от автомобила."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"изчистване на диагностичните данни"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"използване на защитения таймер на автомобила"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Използване на защитения таймер на автомобила."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Моето устройство"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Гост"</string>
</resources>
diff --git a/service/res/values-bn/strings.xml b/service/res/values-bn/strings.xml
index afa6761..2a2dd4f 100644
--- a/service/res/values-bn/strings.xml
+++ b/service/res/values-bn/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ইনপুট ইভেন্ট হ্যান্ডেল করা"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN বাস কাজ করছে না"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN বাস কাজ করছে না। হেডইউনিট বক্স খুলে নিয়ে আবার লাগান ও গাড়ি রিস্টার্ট করুন"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"আপনার সুরক্ষার জন্য, ড্রাইভ করার সময় এটি করা যাবে না।\nচালিয়ে যেতে, গাড়ি পার্ক করা পর্যন্ত অপেক্ষা করুন।"</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"ড্রাইভ করার সময় আপনি এই ফিচারটি ব্যবহার করতে পারবেন না"</string>
<string name="exit_button_message" msgid="8554690915924055685">"অ্যাপের সুরক্ষিত ফিচারগুলি নিয়ে আবার শুরু করতে, <xliff:g id="EXIT_BUTTON">%s</xliff:g> বেছে নিন।"</string>
<string name="exit_button" msgid="5829638404777671253">"আবার চালু করুন"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"অ্যাপ বন্ধ করুন"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"ফিরুন"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"ডায়াগনস্টিক ডেটা দেখা"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"গাড়ির ডায়াগনস্টিক সংক্রান্ত ডেটা দেখা।"</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"ডায়াগনস্টিকস ডেটা সরানো"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"গাড়ির ওয়াচডগ ফিচারটি ব্যবহার করুন"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"গাড়ির ওয়াচডগ ফিচারটি ব্যবহার করুন।"</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"আমার ডিভাইস"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"অতিথি"</string>
</resources>
diff --git a/service/res/values-bs/strings.xml b/service/res/values-bs/strings.xml
index 46e6224..a8779ca 100644
--- a/service/res/values-bs/strings.xml
+++ b/service/res/values-bs/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Rukovati događajima unosa"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Greška CAN busa"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus ne reagira. Isključite i ponovo uključite glavnu jedinicu i ponovo pokrenite automobil"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Radi vaše sigurnosti, ova aktivnost nije dostupna tokom vožnje.\nDa nastavite, sačekajte da se zaustavite."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Nije moguće koristiti ovu funkciju tokom vožnje"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Da počnete ponovo s funkcijama sigurne aplikacije, odaberite <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Nazad"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Zatvori aplikaciju"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Nazad"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"očitati dijagnostičke podatke"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Očitati dijagnostičke podatke automobila."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"brisati dijagnostičke podatke"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"koristi čuvara automobila"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Koristi čuvara automobila."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Moj uređaj"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Gost"</string>
</resources>
diff --git a/service/res/values-ca/strings.xml b/service/res/values-ca/strings.xml
index 7eb9205..cb1b4ee 100644
--- a/service/res/values-ca/strings.xml
+++ b/service/res/values-ca/strings.xml
@@ -24,8 +24,8 @@
<string name="car_permission_desc_energy" msgid="3392963810053235407">"Accedir a la informació sobre l\'energia del cotxe"</string>
<string name="car_permission_label_adjust_range_remaining" msgid="839033553999920138">"ajustar l\'autonomia restant del cotxe"</string>
<string name="car_permission_desc_adjust_range_remaining" msgid="2369321650437370673">"Ajustar el valor de l\'autonomia restant del cotxe."</string>
- <string name="car_permission_label_hvac" msgid="1499454192558727843">"accedeix al sistema HVAC del cotxe"</string>
- <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Accedir al sistema HVAC del cotxe"</string>
+ <string name="car_permission_label_hvac" msgid="1499454192558727843">"accedir al sistema de climatització del cotxe"</string>
+ <string name="car_permission_desc_hvac" msgid="3754229695589774195">"Accedir al sistema de climatització del cotxe"</string>
<string name="car_permission_label_mileage" msgid="4661317074631150551">"accedeix a la informació sobre el quilometratge del cotxe"</string>
<string name="car_permission_desc_mileage" msgid="7179735693278681090">"Accedir a la informació sobre el quilometratge del cotxe"</string>
<string name="car_permission_label_speed" msgid="1149027717860529745">"llegeix la velocitat del cotxe"</string>
@@ -45,7 +45,7 @@
<string name="car_permission_label_audio_volume" msgid="310587969373137690">"controla el volum de l\'àudio del cotxe"</string>
<string name="car_permission_label_audio_settings" msgid="6524703796944023977">"gestiona la configuració de l\'àudio del cotxe"</string>
<string name="car_permission_label_mock_vehicle_hal" msgid="7198852512207405935">"emula l\'API vehicle HAL"</string>
- <string name="car_permission_label_receive_ducking" msgid="4884538660766756573">"rep esdeveniments de reducció del volum de l\'àudio"</string>
+ <string name="car_permission_label_receive_ducking" msgid="4884538660766756573">"rep esdeveniments d\'atenuació d\'àudio"</string>
<string name="car_permission_desc_receive_ducking" msgid="776376388266656512">"Permet notificar a una aplicació que s\'està baixant el seu volum perquè s\'està reproduint un altre àudio al cotxe."</string>
<string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"Emular l\'API vehicle HAL del cotxe per fer proves internes"</string>
<string name="car_permission_desc_audio_volume" msgid="536626185654307889">"Controlar el volum d\'àudio del cotxe"</string>
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Gestionar els esdeveniments d\'entrada"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Ha fallat el bus CAN"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"El bus CAN no respon. Desendolla i torna a endollar el capçal i torna a engegar el cotxe."</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Per motius de seguretat, aquesta activitat no està disponible mentre condueixes.\nPer continuar, has d\'estar aparcat."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"No pots fer servir aquesta funció mentre condueixes"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Per tornar a començar amb unes funcions d\'aplicació segures, selecciona <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Enrere"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Tanca l\'aplicació"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Enrere"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"llegeix les dades de diagnòstic"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Llegeix les dades de diagnòstic del cotxe."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"esborra les dades de diagnòstic"</string>
@@ -133,11 +135,12 @@
<string name="car_permission_desc_car_power" msgid="9202079903668652864">"Accedeix a l\'estat de la potència del cotxe."</string>
<string name="car_permission_label_enroll_trust" msgid="3512907900486690218">"Registra un dispositiu de confiança"</string>
<string name="car_permission_desc_enroll_trust" msgid="4148649994602185130">"Permet el registre de dispositius de confiança"</string>
- <string name="car_permission_label_car_test_service" msgid="9159328930558208708">"Controla el mode de prova del cotxe"</string>
- <string name="car_permission_desc_car_test_service" msgid="7426844534110145843">"Controla el mode de prova del cotxe"</string>
+ <string name="car_permission_label_car_test_service" msgid="9159328930558208708">"Controla el mode de proves del cotxe"</string>
+ <string name="car_permission_desc_car_test_service" msgid="7426844534110145843">"Controla el mode de proves del cotxe"</string>
<string name="car_permission_label_control_car_features" msgid="3905791560378888286">"Activa o desactiva les funcions del cotxe"</string>
<string name="car_permission_desc_control_car_features" msgid="7646711104530599901">"Activa o desactiva les funcions del cotxe."</string>
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"utilitza el temporitzador de vigilància del cotxe"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Utilitza el temporitzador de vigilància del cotxe."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"El meu dispositiu"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Convidat"</string>
</resources>
diff --git a/service/res/values-cs/strings.xml b/service/res/values-cs/strings.xml
index cfaa375..4db0481 100644
--- a/service/res/values-cs/strings.xml
+++ b/service/res/values-cs/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Zpracování vstupních událostí"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Sběrnice CAN selhala"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Sběrnice CAN neodpovídá. Odpojte a opět zapojte autorádio a znovu nastartujte auto"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Tato aktivita není při řízení z bezpečnostních důvodů dostupná.\nPokračovat můžete, až zaparkujete."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Tuto funkci nelze používat při řízení"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Chcete-li začít znovu s bezpečnými funkcemi aplikace, vyberte <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Zpět"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Zavřít aplikaci"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Zpět"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"čtení diagnostických dat"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Čtení diagnostických dat z auta."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"vymazat diagnostická data"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"používat sledování auta"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Používat sledování auta."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Moje zařízení"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Host"</string>
</resources>
diff --git a/service/res/values-da/strings.xml b/service/res/values-da/strings.xml
index b2c075f..40b134c 100644
--- a/service/res/values-da/strings.xml
+++ b/service/res/values-da/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Håndter input"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN-bus (Controller Area Network) mislykkedes"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-bus (Controller Area Network) svarer ikke. Afbryd forbindelsen til bilens hovedenhed, tilslut den igen, og genstart bilen"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Af hensyn til din sikkerhed kan du ikke få adgang til denne aktivitet, mens du kører.\nParkér, før du kan fortsætte."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Du kan ikke bruge denne funktion, mens du kører"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Vælg <xliff:g id="EXIT_BUTTON">%s</xliff:g> for at starte forfra med sikre appfunktioner."</string>
<string name="exit_button" msgid="5829638404777671253">"Tilbage"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Luk app"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Tilbage"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"tjekke diagnosticeringsdata"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Tjek diagnosticeringsdata fra bilen."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"rydde diagnosticeringsdata"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"brug bilens watchdog"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Brug bilens watchdog."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Min enhed"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Gæst"</string>
</resources>
diff --git a/service/res/values-de/strings.xml b/service/res/values-de/strings.xml
index b472961..c0aa8da 100644
--- a/service/res/values-de/strings.xml
+++ b/service/res/values-de/strings.xml
@@ -72,13 +72,15 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Eingabe-Ereignisse verwalten"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN-Bus ausgefallen"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-Bus reagiert nicht. Trenne die Haupteinheit vom Stromnetz, schließe sie wieder an und starte das Auto."</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Aus Sicherheitsgründen ist diese Aktivität während der Fahrt nicht verfügbar.\nWarte, bis das Fahrzeug geparkt ist."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Du kannst diese Funktion nicht während der Fahrt nutzen"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Wähle <xliff:g id="EXIT_BUTTON">%s</xliff:g>, um die App mit sicheren Funktionen neu zu starten."</string>
<string name="exit_button" msgid="5829638404777671253">"Zurück"</string>
- <string name="car_permission_label_diag_read" msgid="7248894224877702604">"Diagnosedaten zu lesen"</string>
- <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Diagnosedaten des Autos lesen."</string>
- <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"Diagnosedaten zu löschen"</string>
- <string name="car_permission_desc_diag_clear" msgid="7453222114866042786">"Diagnosedaten des Autos löschen."</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"App schließen"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Zurück"</string>
+ <string name="car_permission_label_diag_read" msgid="7248894224877702604">"Fehlerberichte zu lesen"</string>
+ <string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Fehlerberichte des Autos lesen."</string>
+ <string name="car_permission_label_diag_clear" msgid="4783070510879698157">"Fehlerberichte zu löschen"</string>
+ <string name="car_permission_desc_diag_clear" msgid="7453222114866042786">"Fehlerberichte des Autos löschen."</string>
<string name="car_permission_label_vms_publisher" msgid="3049934078926106641">"VMS-Herausgeber"</string>
<string name="car_permission_desc_vms_publisher" msgid="5589489298597386828">"VMS-Meldungen senden"</string>
<string name="car_permission_label_vms_subscriber" msgid="5648841182059222299">"VMS-Abonnent"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"Watchdog im Auto verwenden"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Watchdog im Auto verwenden."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Mein Gerät"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Gast"</string>
</resources>
diff --git a/service/res/values-el/strings.xml b/service/res/values-el/strings.xml
index 7b75754..3d4fc20 100644
--- a/service/res/values-el/strings.xml
+++ b/service/res/values-el/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Χειρισμός συμβάντων εισόδου"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Αποτυχία διαύλου CAN"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Ο δίαυλος CAN δεν αποκρίνεται. Αποσυνδέστε και συνδέστε ξανά το πλαίσιο μονάδας κεφαλής και έπειτα επανεκκινήστε το αυτοκίνητο"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Για λόγους ασφαλείας, η δραστηρ. δεν είναι διαθέσιμη όταν οδηγείτε.\nΓια να συνεχίσετε, περιμένετε μέχρι να σταθμεύσετε."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Δεν μπορείτε να χρησιμοποιείτε αυτήν τη λειτουργία όταν οδηγείτε."</string>
<string name="exit_button_message" msgid="8554690915924055685">"Για να ξεκινήσετε από την αρχή με ασφαλείς λειτουργίες εφαρμογής, επιλέξτε <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Πίσω"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Κλείσιμο εφαρμογής"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Πίσω"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"παρακολούθηση δεδομένων διαγνωστικών στοιχείων"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Παρακολούθηση δεδομένων διαγνωστικών στοιχείων από το αυτοκίνητο."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"διαγραφή δεδομένων διαγνωστικών στοιχείων"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"χρήση watchdog αυτοκινήτου"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Χρήση watchdog αυτοκινήτου."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Η συσκευή μου"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Επισκέπτης"</string>
</resources>
diff --git a/service/res/values-en-rAU/strings.xml b/service/res/values-en-rAU/strings.xml
index 1d723ed..cae8100 100644
--- a/service/res/values-en-rAU/strings.xml
+++ b/service/res/values-en-rAU/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Handle input events"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN bus failed"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus does not respond. Unplug and plug back in head unit box and restart the car"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"For your safety, this activity isn’t available while driving.\nTo continue, wait until you’ve parked."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"You can’t use this feature while driving"</string>
<string name="exit_button_message" msgid="8554690915924055685">"To start again with safe app features, select <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Back"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Close app"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Back"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"read diagnostic data"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Read diagnostic data from the car."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"clear diagnostic data"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"use car watchdog"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Use car watchdog."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"My Device"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Guest"</string>
</resources>
diff --git a/service/res/values-en-rCA/strings.xml b/service/res/values-en-rCA/strings.xml
index 1d723ed..cae8100 100644
--- a/service/res/values-en-rCA/strings.xml
+++ b/service/res/values-en-rCA/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Handle input events"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN bus failed"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus does not respond. Unplug and plug back in head unit box and restart the car"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"For your safety, this activity isn’t available while driving.\nTo continue, wait until you’ve parked."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"You can’t use this feature while driving"</string>
<string name="exit_button_message" msgid="8554690915924055685">"To start again with safe app features, select <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Back"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Close app"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Back"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"read diagnostic data"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Read diagnostic data from the car."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"clear diagnostic data"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"use car watchdog"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Use car watchdog."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"My Device"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Guest"</string>
</resources>
diff --git a/service/res/values-en-rGB/strings.xml b/service/res/values-en-rGB/strings.xml
index 1d723ed..cae8100 100644
--- a/service/res/values-en-rGB/strings.xml
+++ b/service/res/values-en-rGB/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Handle input events"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN bus failed"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus does not respond. Unplug and plug back in head unit box and restart the car"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"For your safety, this activity isn’t available while driving.\nTo continue, wait until you’ve parked."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"You can’t use this feature while driving"</string>
<string name="exit_button_message" msgid="8554690915924055685">"To start again with safe app features, select <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Back"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Close app"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Back"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"read diagnostic data"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Read diagnostic data from the car."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"clear diagnostic data"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"use car watchdog"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Use car watchdog."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"My Device"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Guest"</string>
</resources>
diff --git a/service/res/values-en-rIN/strings.xml b/service/res/values-en-rIN/strings.xml
index 1d723ed..cae8100 100644
--- a/service/res/values-en-rIN/strings.xml
+++ b/service/res/values-en-rIN/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Handle input events"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN bus failed"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus does not respond. Unplug and plug back in head unit box and restart the car"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"For your safety, this activity isn’t available while driving.\nTo continue, wait until you’ve parked."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"You can’t use this feature while driving"</string>
<string name="exit_button_message" msgid="8554690915924055685">"To start again with safe app features, select <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Back"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Close app"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Back"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"read diagnostic data"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Read diagnostic data from the car."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"clear diagnostic data"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"use car watchdog"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Use car watchdog."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"My Device"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Guest"</string>
</resources>
diff --git a/service/res/values-en-rXC/strings.xml b/service/res/values-en-rXC/strings.xml
index 61d5782..840f717 100644
--- a/service/res/values-en-rXC/strings.xml
+++ b/service/res/values-en-rXC/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Handle input events"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN bus failed"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus does not respond. Unplug and plug back headunit box and restart the car"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"For your safety, this activity isn’t available while driving.\nTo continue, wait until you’re parked."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"You can’t use this feature while driving"</string>
<string name="exit_button_message" msgid="8554690915924055685">"To start over with safe app features, select <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Back"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Close app"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Back"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"read diagnostic data"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Read diagnostic data from the car."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"clear diagnostic data"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"use car watchdog"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Use car watchdog."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"My Device"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Guest"</string>
</resources>
diff --git a/service/res/values-es-rUS/strings.xml b/service/res/values-es-rUS/strings.xml
index b2ccbc4..85ccfab 100644
--- a/service/res/values-es-rUS/strings.xml
+++ b/service/res/values-es-rUS/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Controlar eventos de entrada"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Error de bus CAN"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus no responde. Desconecta y vuelve a conectar la caja de la unidad central y enciende nuevamente el auto"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Por razones de seguridad, esta actividad no está disponible al conducir.\nPara continuar espera hasta que estaciones."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"No puedes usar esta función mientras conduces"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Para volver a comenzar con funciones de app seguras, selecciona <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Atrás"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Cerrar app"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Atrás"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"leer datos de diagnóstico"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Leer datos de diagnóstico del vehículo."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"borrar datos de diagnóstico"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"usar perro guardián del vehículo"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Usar perro guardián del vehículo"</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Mi dispositivo"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Invitado"</string>
</resources>
diff --git a/service/res/values-es/strings.xml b/service/res/values-es/strings.xml
index d1e35f7..97d252b 100644
--- a/service/res/values-es/strings.xml
+++ b/service/res/values-es/strings.xml
@@ -16,8 +16,8 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label" msgid="741004755205554376">"acceder a la información del coche"</string>
- <string name="car_permission_desc" msgid="162499818870052725">"Acceder a la información del coche."</string>
+ <string name="car_permission_label" msgid="741004755205554376">"acceder a los datos del coche"</string>
+ <string name="car_permission_desc" msgid="162499818870052725">"Acceder a los datos del coche."</string>
<string name="car_permission_label_camera" msgid="3725702064841827180">"acceder a la cámara del coche"</string>
<string name="car_permission_desc_camera" msgid="917024932164501426">"Acceder a las cámaras del coche."</string>
<string name="car_permission_label_energy" msgid="7409144323527821558">"acceder a la información sobre el nivel de energía del coche"</string>
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Gestionar eventos de entrada"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Fallo de bus CAN"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"El bus CAN no responde. Desconecta el cabezal, conéctalo de nuevo y reinicia el coche"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Por tu seguridad, esta actividad no está disponible mientras conduces.\nPuedes continuar cuando hayas aparcado."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"No puedes utilizar esta función mientras conduces"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Para volver a empezar con funciones de aplicaciones seguras, selecciona <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Atrás"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Cerrar aplicación"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Atrás"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"consultar datos de diagnóstico"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Consultar los datos de diagnóstico del coche."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"borrar los datos de diagnóstico"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"usar watchdog del coche"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Usar watchdog del coche."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Mi dispositivo"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Invitado"</string>
</resources>
diff --git a/service/res/values-et/strings.xml b/service/res/values-et/strings.xml
index 9d55afa..982d219 100644
--- a/service/res/values-et/strings.xml
+++ b/service/res/values-et/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="car_permission_label" msgid="741004755205554376">"juurdepääs auto teabele"</string>
- <string name="car_permission_desc" msgid="162499818870052725">"Juurdepääs auto andmetele."</string>
+ <string name="car_permission_desc" msgid="162499818870052725">"Juurdepääs auto teabele."</string>
<string name="car_permission_label_camera" msgid="3725702064841827180">"juurdepääs auto kaamerale"</string>
<string name="car_permission_desc_camera" msgid="917024932164501426">"Juurdepääs auto kaameratele."</string>
<string name="car_permission_label_energy" msgid="7409144323527821558">"juurdepääs auto energiateabele"</string>
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Sisestussündmuste töötlemine"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN-siin ebaõnnestus"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-siin ei reageeri. Eemaldage autoraadio üksus ja pange see tagasi ning taaskäivitage auto"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Teie turvalisuse tõttu ei ole see toiming sõitmise ajal saadaval.\nJätkamiseks oodake, kuni olete parkinud."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Te ei saa seda funktsiooni sõidu ajal kasutada"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Uuesti alustamiseks turvaliste rakenduste funktsioonidega valige <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Tagasi"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Sule rakendus"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Tagasi"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"diagnostikaandmete lugemine"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Auto diagnostikaandmete lugemine."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"diagnostikaandmete kustutamine"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"kasuta auto valvesüsteemi"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Kasuta auto valvesüsteemi."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Minu seade"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Külaline"</string>
</resources>
diff --git a/service/res/values-eu/strings.xml b/service/res/values-eu/strings.xml
index 9074592..136add4 100644
--- a/service/res/values-eu/strings.xml
+++ b/service/res/values-eu/strings.xml
@@ -55,7 +55,7 @@
<string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"Nabigazio-kudeatzailea"</string>
<string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"Jakinarazi nabigazio-datuak instrumentu lukuari"</string>
<string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"Zuzeneko errendatzea instrumentu lukuan"</string>
- <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Baimendu aplikazioari instrumentu lukuan bistaratu beharreko jarduerak erabakitzea"</string>
+ <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"Eman instrumentu lukuan bistaratu beharreko jarduerak azaltzeko baimena aplikazioari"</string>
<string name="car_permission_car_cluster_control" msgid="1382247204230165674">"Instrumentu lukua kontrolatzeko aukera"</string>
<string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"Abiarazi aplikazioak instrumentu lukuan"</string>
<string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"Instrumentu lukuaren errendatzea"</string>
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Kudeatu sarrerako gertaerak"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN autobusak huts egin du"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus-ak ez du erantzuten. Desentxufatu eta entxufatu berriro gailu nagusia eta berrabiarazi autoa."</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Zure segurtasuna bermatzeko, eginbide hau ezin da erabili gidatu bitartean.\nAurrera egiteko, itxaron autoa aparkatu arte."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Ezin duzu erabili eginbide hori gidatu bitartean"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Berriro hasi nahi baduzu aplikazioaren eginbide seguruekin, hautatu <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Atzera"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Itxi aplikazioa"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Atzera"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"irakurri diagnostiko-datuak"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Irakurri autoaren diagnostiko-datuak."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"garbitu diagnostiko-datuak"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"erabili autoaren softwarea zaintzeko sistema"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Erabili autoaren softwarea zaintzeko sistema."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Nire gailua"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Gonbidatua"</string>
</resources>
diff --git a/service/res/values-fa/strings.xml b/service/res/values-fa/strings.xml
index 7f95337..cc05861 100644
--- a/service/res/values-fa/strings.xml
+++ b/service/res/values-fa/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"مدیریت رویدادهای ورودی"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"گذرگاه CAN ناموفق بود"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"گذرگاه CAN پاسخ نمیدهد. محفظه ضبطوپخش را جدا و سپس وصل کنید و خودرو را دوباره روشن کنید"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"بنا به دلایل ایمنی، این فعالیت درحین رانندگی دردسترس نیست.\n برای ادامه، تا زمان توقف خودرو صبر کنید."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"هنگام رانندگی نمیتوانید از این ویژگی استفاده کنید"</string>
<string name="exit_button_message" msgid="8554690915924055685">"برای شروع مجدد با ویژگیهای برنامه امن، <xliff:g id="EXIT_BUTTON">%s</xliff:g> را انتخاب کنید."</string>
<string name="exit_button" msgid="5829638404777671253">"برگشت"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"بستن برنامه"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"برگشت"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"خواندن دادههای عیبیابی"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"دادههای عیبیابی خودرو را بخوانید."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"پاک کردن دادههای عیبیابی"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"استفاده از زمانسنج مراقب خودرو"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"استفاده از زمانسنج مراقب خودرو"</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"دستگاه من"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"مهمان"</string>
</resources>
diff --git a/service/res/values-fi/strings.xml b/service/res/values-fi/strings.xml
index 4ab264a..e03f38c 100644
--- a/service/res/values-fi/strings.xml
+++ b/service/res/values-fi/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"käsitellä syötteitä"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN-väylä hylättiin"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-väylä ei vastaa. Irrota pääyksikkö ja liitä se takaisin. Käynnistä auto sitten uudelleen."</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Turvallisuussyistä toiminto ei ole käytettävissä ajon aikana.\nVoit jatkaa, kun olet pysäköinyt auton."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Et voi käyttää ominaisuutta ajon aikana"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Jos haluat aloittaa alusta turvallisilla sovellusominaisuuksilla, valitse <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Takaisin"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Sulje sovellus"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Takaisin"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"nähdä diagnostiikkadataa"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"lukea auton diagnostiikkadataa"</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"poistaa diagnostiikkatiedot"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"käytä auton vauhtiajastinta"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Käytä auton vauhtiajastinta."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Oma laite"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Vieras"</string>
</resources>
diff --git a/service/res/values-fr-rCA/strings.xml b/service/res/values-fr-rCA/strings.xml
index de9fa03..4bfbde2 100644
--- a/service/res/values-fr-rCA/strings.xml
+++ b/service/res/values-fr-rCA/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label" msgid="741004755205554376">"accéder aux renseignements relatifs à la voiture"</string>
+ <string name="car_permission_label" msgid="741004755205554376">"Accéder aux renseignements relatifs à la voiture"</string>
<string name="car_permission_desc" msgid="162499818870052725">"Accéder aux renseignements relatifs à la voiture."</string>
<string name="car_permission_label_camera" msgid="3725702064841827180">"accéder à la caméra de la voiture"</string>
<string name="car_permission_desc_camera" msgid="917024932164501426">"Accéder aux caméras de la voiture."</string>
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Gérer les événements d\'entrée"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Défaillance du bus de données CAN"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Le bus de données CAN ne répond pas. Débranchez et rebranchez le boîtier de l\'unité centrale, puis redémarrez la voiture"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Pour votre sécurité, cette activité est bloquée lorsque vous conduisez.\nVous devez être stationné pour continuer."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Vous ne pouvez pas utiliser cette fonctionnalité en conduisant"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Pour recommencer avec des fonctionnalités d\'application sécurisées, sélectionnez <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Retour"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Fermer l\'application"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Retour"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"lire des données de diagnostic"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Lire des données de diagnostic à partir de la voiture."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"effacer les données de diagnostic"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"utilisez le service de surveillance automobile"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Utilisez le service de surveillance automobile."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Mon appareil"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Invité"</string>
</resources>
diff --git a/service/res/values-fr/strings.xml b/service/res/values-fr/strings.xml
index 5d68a8f..b1e67e4 100644
--- a/service/res/values-fr/strings.xml
+++ b/service/res/values-fr/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Gérer les événements d\'entrée"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Échec du bus de données CAN"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Le bus de données CAN ne répond pas. Débranchez et rebranchez le boîtier de l\'unité principale, puis redémarrez la voiture"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Pour votre sécurité, cette activité n\'est pas disponible pendant la conduite.\nPour continuer, attendez d\'être garé."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Vous ne pouvez pas utiliser cette fonctionnalité en conduisant"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Pour recommencer avec des fonctionnalités d\'application sécurisées, sélectionnez <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Retour"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Fermer l\'application"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Retour"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"Lire les données de diagnostic"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Lire les données de diagnostic de la voiture."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"Effacer les données de diagnostic"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"utiliser le watchdog de la voiture"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Utiliser le watchdog de la voiture."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Mon appareil"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Invité"</string>
</resources>
diff --git a/service/res/values-gl/strings.xml b/service/res/values-gl/strings.xml
index a089221..7a6eaa9 100644
--- a/service/res/values-gl/strings.xml
+++ b/service/res/values-gl/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Controlar os eventos de entrada"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Produciuse un erro no bus CAN"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"O bus CAN non responde. Desconecta a caixa da unidade principal, conéctaa de novo e reinicia o coche"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Pola túa seguranza, esta actividade non está dispoñible mentres conduces.\nPodes continuar cando aparques."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Non podes utilizar esta función mentres conduces"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Para comezar de novo coas funcións de aplicacións seguras, selecciona o botón <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Atrás"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Pechar aplicación"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Atrás"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"ler datos de diagnóstico"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Ler datos de diagnóstico do coche."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"borrar datos de diagnóstico"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"utilizar sistema de vixilancia do coche"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Utiliza o sistema de vixilancia do coche."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Dispositivo"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Convidado"</string>
</resources>
diff --git a/service/res/values-gu/strings.xml b/service/res/values-gu/strings.xml
index 468d41d..3303fce 100644
--- a/service/res/values-gu/strings.xml
+++ b/service/res/values-gu/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ઇનપુટ ઇવેન્ટ્સને હૅન્ડલ કરો"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN બસ નિષ્ફળ રહી"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN બસ પ્રતિસાદ આપતી નથી. હેડયુનિટ બોક્સને અનપ્લગ કરી ફરી પ્લગ કરો અને કારને ફરી શરૂ કરો"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"તમારી સલામતી માટે કાર ચલાવતી વખતે આ પ્રવૃત્તિ ઉપલબ્ધ નથી.\nચાલુ રાખવા માટે કાર પાર્ક થવા સુધી રાહ જુઓ."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"ડ્રાઇવ કરતી વખતે તમે આ સુવિધાનો ઉપયોગ કરી શકતા નથી"</string>
<string name="exit_button_message" msgid="8554690915924055685">"સુરક્ષિત ઍપ્લિકેશન સુવિધાઓ સાથે ફરી શરૂ કરવા, <xliff:g id="EXIT_BUTTON">%s</xliff:g> પસંદ કરો."</string>
<string name="exit_button" msgid="5829638404777671253">"પાછળ"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"ઍપ બંધ કરો"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"પાછળ"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"નિદાનનો ડેટા વાંચો"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"કારમાંથી નિદાનનો ડેટા વાંચો."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"નિદાનનો ડેટા સાફ કરો"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"કાર વૉચડોગ સુવિધાનો ઉપયોગ કરો"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"કાર વૉચડોગ સુવિધાનો ઉપયોગ કરો."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"મારું ડિવાઇસ"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"અતિથિ"</string>
</resources>
diff --git a/service/res/values-hi/strings.xml b/service/res/values-hi/strings.xml
index bd67d31..a70c77d 100644
--- a/service/res/values-hi/strings.xml
+++ b/service/res/values-hi/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"इनपुट से जुड़े इवेंट प्रबंधित कर सकता है"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"\'CAN बस\' काम नहीं कर पा रहा है"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"\'CAN बस\' जवाब नहीं दे रहा है. हेडयूनिट बॉक्स का प्लग निकालकर वापस लगाएं और कार को रीस्टार्ट करें"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"आपकी सुरक्षा के लिए, गाड़ी चलाते समय यह गतिविधि मौजूद नहीं रहती है.\nजारी रखने के लिए गाड़ी पार्क करनी होगी."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"आप गाड़ी चलाते समय इस सुविधा का इस्तेमाल नहीं कर सकते"</string>
<string name="exit_button_message" msgid="8554690915924055685">"सुरक्षित ऐप्लिकेशन सुविधाएं फिर से शुरू करने के लिए, <xliff:g id="EXIT_BUTTON">%s</xliff:g> चुनें."</string>
<string name="exit_button" msgid="5829638404777671253">"वापस शुरू करें"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"ऐप्लिकेशन बंद करें"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"वापस जाएं"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"गड़बड़ी की पहचान का डेटा देख सकता है"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"कार की \'गड़बड़ी की पहचान का डेटा\' देख सकता है."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"गड़बड़ी की पहचान का डेटा मिटा सकता है"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"कार के वॉचडॉग का इस्तेमाल करें"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"कार के वॉचडॉग का इस्तेमाल करें."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"मेरा डिवाइस"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"मेहमान"</string>
</resources>
diff --git a/service/res/values-hr/strings.xml b/service/res/values-hr/strings.xml
index 011c217..2f9c2b0 100644
--- a/service/res/values-hr/strings.xml
+++ b/service/res/values-hr/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"rukovati događajima unosa"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Pogreška CAN busa"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus ne odgovara. Iskopčajte i ponovo ukopčajte glavnu jedinicu i ponovo pokrenite automobil"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Radi vaše sigurnosti ta aktivnost nije dostupna tijekom vožnje.\nDa biste nastavili, pričekajte dok se ne zaustavite."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Tu značajku ne možete upotrebljavati tijekom vožnje"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Da biste započeli ponovo sa sigurnim značajkama aplikacije, odaberite <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Natrag"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Zatvori aplikaciju"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Natrag"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"čitati dijagnostičke podatke"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"čitati dijagnostičke podatke automobila"</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"izbrisati dijagnostičke podatke"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"koristi čuvara automobila."</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Koristi čuvara automobila."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Moj uređaj"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Gost"</string>
</resources>
diff --git a/service/res/values-hu/strings.xml b/service/res/values-hu/strings.xml
index 6326bd9..0a3950f 100644
--- a/service/res/values-hu/strings.xml
+++ b/service/res/values-hu/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Kezelheti a beviteli eseményeket"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"A CAN-busz hibát észlelt"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"A CAN-busz nem válaszol. Csatlakoztassa újra a fejegységet, és indítsa újra az autót."</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Az Ön biztonsága érdekében ez a tevékenység nem végezhető vezetés közben.\nLeparkolás után folytathatja a tevékenységet."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Vezetés közben nem használhatja ezt a funkciót"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Ha biztonságos alkalmazásfunkciókkal szeretné újrakezdeni, válassza a következő gombot: <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Vissza"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Alkalmazás bezárása"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Vissza"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"olvashatja a diagnosztikai adatokat"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Olvashatja az autó diagnosztikai adatait."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"törölheti a diagnosztikai adatokat"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"autófigyelő használata"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Autófigyelő használata."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Saját eszköz"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Vendég"</string>
</resources>
diff --git a/service/res/values-hy/strings.xml b/service/res/values-hy/strings.xml
index ae977ac..80f3c91 100644
--- a/service/res/values-hy/strings.xml
+++ b/service/res/values-hy/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Մշակել ներածման իրադարձությունները"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN անվադողի սխալ"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN անվադողը չի պատասխանում: Անջատեք և նորից միացրեք միակցիչը, ապա անջատեք վառոցքը և վերագործարկեք մեքենան:"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Անվտանգության նկատառումներով այս գործողությունը հասանելի չէ վարելու ռեժիմում:\nՇարունակելու համար կայանեք մեքենան:"</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Դուք չեք կարող օգտագործել այս գործառույթը մեքենա վարելիս"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Հավելվածն անվտանգ ռեժիմում վերագործարկելու համար սեղմեք<xliff:g id="EXIT_BUTTON">%s</xliff:g> կոճակը:"</string>
<string name="exit_button" msgid="5829638404777671253">"Հետ"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Փակել հավելվածը"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Հետ"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"կարդալ ախտորոշման մասին տվյալները"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Կարդալ մեքենայի ախտորոշման տվյալները։"</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"մաքրել ախտորոշման տվյալները"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"oգտագործել մեքենայի պահապանին"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Օգտագործել մեքենայի պահապանին"</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Իմ սարքը"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Հյուր"</string>
</resources>
diff --git a/service/res/values-in/strings.xml b/service/res/values-in/strings.xml
index 32b2650..3f35edd 100644
--- a/service/res/values-in/strings.xml
+++ b/service/res/values-in/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Menangani aktivitas masukan"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN bus gagal"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus tidak merespons. Cabut dan colokkan kembali boks headunit, lalu nyalakan ulang mobil"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Demi keamanan Anda, aktivitas ini tidak tersedia saat Anda mengemudi.\nUntuk melanjutkan, tunggu hingga mobil terparkir."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Anda tidak dapat menggunakan fitur ini saat mengemudi"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Untuk mulai dari awal dengan fitur apl yang aman, pilih <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Kembali"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Tutup aplikasi"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Kembali"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"membaca data diagnostik"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Membaca data diagnostik dari mobil."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"menghapus data diagnostik"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"gunakan watchdog mobil"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Gunakan watchdog mobil."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Perangkat Saya"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Tamu"</string>
</resources>
diff --git a/service/res/values-is/strings.xml b/service/res/values-is/strings.xml
index 56a18dc..5a10627 100644
--- a/service/res/values-is/strings.xml
+++ b/service/res/values-is/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Stjórna inntakstilvikum"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Bilun í CAN-gagnabraut"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-gagnabraut svarar ekki. Taktu stjórneiningarboxið úr sambandi, settu það aftur í samband og gangsettu bílinn aftur."</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Af öryggisástæðum er þessi aðgerð ekki í boði við akstur.\nLeggðu ökutækinu áður en þú heldur áfram."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Þú getur ekki notað þennan eiginleika við akstur"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Til að byrja aftur að setja upp örugga forritseiginleika skaltu velja <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Til baka"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Loka forriti"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Til baka"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"lesa greiningargögn"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Lesa greiningargögn úr bílnum."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"hreinsa greiningargögn"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"nota bílaeftirlitsaðila"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Nota bílaeftirlitsaðila."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Tækið mitt"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Gestur"</string>
</resources>
diff --git a/service/res/values-it/strings.xml b/service/res/values-it/strings.xml
index 4b807c0..da6720a 100644
--- a/service/res/values-it/strings.xml
+++ b/service/res/values-it/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Consente di gestire gli eventi di input."</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Comunicazione tramite bus CAN non riuscita"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Il bus CAN non risponde. Scollega e ricollega l\'unità principale e riaccendi il motore."</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Per motivi di sicurezza, questa attività non è disponibile durante la guida.\nPotrai continuare quando avrai parcheggiato."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Non è possibile usare questa funzionalità durante la guida"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Seleziona <xliff:g id="EXIT_BUTTON">%s</xliff:g> per ricominciare con le funzionalità sicure dell\'app."</string>
<string name="exit_button" msgid="5829638404777671253">"Indietro"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Chiudi app"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Indietro"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"Lettura dei dati diagnostici"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Consente di leggere i dati diagnostici dell\'automobile."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"Cancellazione dei dati diagnostici"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"Uso del watchdog dell\'auto"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Consente di usare il watchdog dell\'auto."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Mio dispositivo"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Ospite"</string>
</resources>
diff --git a/service/res/values-iw/strings.xml b/service/res/values-iw/strings.xml
index 7315e75..de220ec 100644
--- a/service/res/values-iw/strings.xml
+++ b/service/res/values-iw/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="car_permission_label" msgid="741004755205554376">"גישה לנתוני הרכב"</string>
- <string name="car_permission_desc" msgid="162499818870052725">"גישה לנתוני הרכב."</string>
+ <string name="car_permission_desc" msgid="162499818870052725">"לקבל גישה לנתוני הרכב."</string>
<string name="car_permission_label_camera" msgid="3725702064841827180">"גישה למצלמה של הרכב"</string>
<string name="car_permission_desc_camera" msgid="917024932164501426">"גישה למצלמות הרכב."</string>
<string name="car_permission_label_energy" msgid="7409144323527821558">"גישה למידע על נתוני צריכת האנרגיה של הרכב"</string>
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ניהול אירועי קלט"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"פרוטוקול CAN bus נכשל"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"פרוטוקול CAN bus לא מגיב. יש לנתק ולחבר שוב את מערכת הסטריאו ולהתניע מחדש את הרכב"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"מטעמי בטיחות, פעילות זו אינה זמינה בזמן נהיגה.\nכדי להמשיך, צריך להמתין עד לחניית הרכב."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"לא ניתן להשתמש בתכונה הזו בזמן נהיגה"</string>
<string name="exit_button_message" msgid="8554690915924055685">"כדי להפעיל מחדש את האפליקציה במצב בטוח, יש ללחוץ על <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"הקודם"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"סגירת האפליקציה"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"חזרה"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"קריאת נתוני אבחון"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"קריאת נתוני אבחון מהרכב."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"מחיקת נתוני האבחון"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"שימוש בטיימר המפקח (watchdog) של המכונית"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"שימוש בטיימר המפקח (watchdog) של המכונית."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"המכשיר שלי"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"אורח"</string>
</resources>
diff --git a/service/res/values-ja/strings.xml b/service/res/values-ja/strings.xml
index 8dfb2d9..10db486 100644
--- a/service/res/values-ja/strings.xml
+++ b/service/res/values-ja/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"入力イベントを処理します"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN バスでエラーが発生しました"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN バスが応答しません。ヘッドユニット ボックスのプラグを抜いて接続し直し、車を再始動してください"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"安全上の理由により、運転中はこのアクティビティをご利用いただけません。\n続行するには駐車してください。"</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"運転中はこの機能を利用できません"</string>
<string name="exit_button_message" msgid="8554690915924055685">"アプリをセーフモードで再起動するには、<xliff:g id="EXIT_BUTTON">%s</xliff:g> を選択します。"</string>
<string name="exit_button" msgid="5829638404777671253">"戻る"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"アプリを閉じる"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"戻る"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"診断データの読み取り"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"車から診断データを読み取ります。"</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"診断データの消去"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"車のウォッチドッグの使用"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"車のウォッチドッグの使用。"</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"自分のデバイス"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"ゲスト"</string>
</resources>
diff --git a/service/res/values-ka/strings.xml b/service/res/values-ka/strings.xml
index 98995a5..b4cd61a 100644
--- a/service/res/values-ka/strings.xml
+++ b/service/res/values-ka/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"შეტანის მოვლენების დამუშავება"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"წარმოიშვა CAN-სალტის შეცდომა"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-სალტე არ რეაგირებს. გამოაერთეთ და ხელახლა მიაერთეთ საინფორმაციო-გასართობი მოწყობილობა, შემდეგ კი ხელახლა დაქოქეთ მანქანა"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"ეს აქტივობა მიუწვდომელია მანქანის მართვისას, უსაფრთხოების მოსაზრებებიდან გამომდინარე.\nგთხოვთ, ჯერ გააჩეროთ მანქანა."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"მანქანის მართვისას ამ ფუნქციას ვერ გამოიყენებთ"</string>
<string name="exit_button_message" msgid="8554690915924055685">"აპის უსაფრთხო რეჟიმში გასაშვებად აირჩიეთ „<xliff:g id="EXIT_BUTTON">%s</xliff:g>“."</string>
<string name="exit_button" msgid="5829638404777671253">"უკან"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"აპის დახურვა"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"უკან"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"დიაგნოსტიკური მონაცემების წაკითხვა"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"დიაგნოსტიკური მონაცემების წაკითხვა მანქანიდან."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"დიაგნოსტიკური მონაცემების გასუფთავება"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"მანქანის დაცვის მოწყობილობის გამოყენება"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"მანქანის დაცვის მოწყობილობის გამოყენება."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"ჩემი მოწყობილობა"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"სტუმარი"</string>
</resources>
diff --git a/service/res/values-kk/strings.xml b/service/res/values-kk/strings.xml
index 077f44e..14e925e 100644
--- a/service/res/values-kk/strings.xml
+++ b/service/res/values-kk/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Деректерді енгізу оқиғаларын басқаруға болады"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN шинасы істен шықты"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN шинасы жауап бермейді. Негізгі модульді ажыратып, қайта жалғаңыз және көлікті қайта оталдырыңыз"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Көлік жүргізгенде, қауіпсіздік мақсатында бұл әрекетті орындау мүмкін емес.\nЖалғастыру үшін көлікті тұраққа қойыңыз."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Бұл функцияны көлік жүргізген кезде пайдалана алмайсыз."</string>
<string name="exit_button_message" msgid="8554690915924055685">"Қолданбаны қауіпсіз күйде қайта іске қосу үшін <xliff:g id="EXIT_BUTTON">%s</xliff:g> түймесін басыңыз."</string>
<string name="exit_button" msgid="5829638404777671253">"Артқа"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Қолданбаны жабу"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Артқа"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"диагностикалық деректерді көру"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Көліктің диагностикалық деректерін көру."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"диагностикалық деректерді өшіру"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"көлік бақылау жүйесін пайдалану"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Көлік бақылау жүйесін пайдалану."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Құрылғым"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Қонақ"</string>
</resources>
diff --git a/service/res/values-km/strings.xml b/service/res/values-km/strings.xml
index 896ff3c..cec9d5d 100644
--- a/service/res/values-km/strings.xml
+++ b/service/res/values-km/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"គ្រប់គ្រងព្រឹត្តិការណ៍បញ្ចូល"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"មិនអាចដំណើរការ CAN bus បានទេ"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus មិនឆ្លើយតបទេ។ សូមផ្ដាច់ រួចភ្ជាប់ប្រអប់ឧបករណ៍ចាក់តន្ត្រីម្តងទៀត បន្ទាប់មកបញ្ឆេះរថយន្តឡើងវិញ"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"ដើម្បីសុវត្ថិភាពរបស់អ្នក សកម្មភាពនេះមិនអាចប្រើបានទេ ពេលកំពុងបើកបរ។\nដើម្បីបន្ត សូមរង់ចាំរហូតទាល់តែអ្នកចតរថយន្តរួច។"</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"អ្នកមិនអាចប្រើមុខងារនេះបានទេ ខណៈពេលកំពុងបើកបរ"</string>
<string name="exit_button_message" msgid="8554690915924055685">"ដើម្បីចាប់ផ្តើមឡើងវិញដោយប្រើមុខងារកម្មវិធីដែលមានសុវត្ថិភាព សូមជ្រើសរើស <xliff:g id="EXIT_BUTTON">%s</xliff:g> ។"</string>
<string name="exit_button" msgid="5829638404777671253">"ថយក្រោយ"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"បិទកម្មវិធី"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"ថយក្រោយ"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"អានទិន្នន័យវិភាគ"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"អានអំពីទិន្នន័យវិភាគពីរថយន្ត។"</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"សម្អាតទិន្នន័យវិភាគ"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"ប្រើប្រាស់សេវាមើលការខុសត្រូវស្ថានភាពកម្មវិធីរបស់ឡាន"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"ប្រើប្រាស់សេវាមើលការខុសត្រូវស្ថានភាពកម្មវិធីរបស់ឡាន។"</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"ឧបករណ៍របស់ខ្ញុំ"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"ភ្ញៀវ"</string>
</resources>
diff --git a/service/res/values-kn/strings.xml b/service/res/values-kn/strings.xml
index 81b2f32..1ee0f44 100644
--- a/service/res/values-kn/strings.xml
+++ b/service/res/values-kn/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ಊಡಿಕೆ ಘಟನೆಗಳನ್ನು ನಿಯಂತ್ರಿಸಿ"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"ಸಿಎಎನ್ ಬಸ್ ಕೆಟ್ಟಿದೆ"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN ಬಸ್ ಸ್ಪಂದಿಸುತ್ತಿಲ್ಲ. ಹೆಡ್ ಯುನಿಟ್ ಪೆಟ್ಟಿಗೆಯನ್ನು ಅನ್ಪ್ಲಗ್ ಮಾಡಿ ಮತ್ತೆ ಪ್ಲಗ್ ಮಾಡಿ ಕಾರನ್ನು ಪುನರಾರಂಭಿಸಿ"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"ನಿಮ್ಮ ಸುರಕ್ಷೆಗಾಗಿ, ಈ ಚಟುವಟಿಕೆಯು ವಾಹನ ಚಲಾಯಿಸುತ್ತಿರುವಾಗ ಲಭ್ಯವಿಲ್ಲ. ಮುಂದುವರೆಯಲು \n ಮಾಡಿ, ನೀವು ಪಾರ್ಕ್ ಮಾಡುವ ತನಕ ಕಾಯಿರಿ."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"ಡ್ರೈವ್ ಮಾಡುವಾಗ ನೀವು ಈ ವೈಶಿಷ್ಟ್ಯವನ್ನು ಬಳಸಲಾಗುವುದಿಲ್ಲ"</string>
<string name="exit_button_message" msgid="8554690915924055685">"ಆಪ್ನ ಸುರಕ್ಷೆ ಗುಣಲಕ್ಷಣಗಳನ್ನು ಒಳಗೊಂಡು ಮತ್ತೆ ಪ್ರಾರಂಭಿಸಲು, <xliff:g id="EXIT_BUTTON">%s</xliff:g> ಆಯ್ಕೆ ಮಾಡಿ."</string>
<string name="exit_button" msgid="5829638404777671253">"ಹಿಂದಕ್ಕೆ"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"ಆ್ಯಪ್ ಮುಚ್ಚಿರಿ"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"ಹಿಂದೆ"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"ಡಯಾಗ್ನೋಸ್ಟಿಕ್ ಡೇಟಾವನ್ನು ಓದಿ"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"ಕಾರಿನಲ್ಲಿರುವ ಅದರ ಡಯಾಗ್ನೋಸ್ಟಿಕ್ ಡೇಟಾವನ್ನು ಓದಿ."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"ಡಯಾಗ್ನೋಸ್ಟಿಕ್ ಡೇಟಾವನ್ನು ತೆರವುಗೊಳಿಸಿ"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"ಕಾರ್ ಮಾನಿಟರಿಂಗ್ ಟೈಮರ್ ಬಳಸಿ"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"ಕಾರ್ ಮಾನಿಟರಿಂಗ್ ಟೈಮರ್ ಬಳಸಿ."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"ನನ್ನ ಸಾಧನ"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"ಅತಿಥಿ"</string>
</resources>
diff --git a/service/res/values-ko/strings.xml b/service/res/values-ko/strings.xml
index f334829..2e1e845 100644
--- a/service/res/values-ko/strings.xml
+++ b/service/res/values-ko/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"입력 이벤트 처리"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN 버스 실패"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN 버스가 응답하지 않습니다. 헤드유닛 박스를 분리한 후 다시 연결한 다음 시동을 다시 걸어 보세요."</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"안전을 위해 운전 중에는 이용할 수 없는 활동입니다.\n계속하려면 먼저 주차하세요."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"운전 중에는 이 기능을 사용하실 수 없습니다."</string>
<string name="exit_button_message" msgid="8554690915924055685">"안전한 앱 기능으로 다시 시작하려면 <xliff:g id="EXIT_BUTTON">%s</xliff:g>을(를) 선택하세요."</string>
<string name="exit_button" msgid="5829638404777671253">"뒤로"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"앱 닫기"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"뒤로"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"진단 데이터 읽기"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"차량의 진단 데이터를 읽습니다."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"진단 데이터 삭제"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"차량 워치독을 사용합니다."</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"차량 워치독을 사용합니다."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"내 기기"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"게스트"</string>
</resources>
diff --git a/service/res/values-ky/strings.xml b/service/res/values-ky/strings.xml
index f0ec715..294da79 100644
--- a/service/res/values-ky/strings.xml
+++ b/service/res/values-ky/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Киргизүү аракеттерин башкаруу"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN иштебей калды"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN жооп бербей жатат. Башкы шайман блогун сууруп, кайра сайгандан кийин унааны кайра жүргүзүңүз"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Коопсуздугуңузду коргоо максатында, бул иш-аракетти унаа айдап баратканда аткарууга болбойт.\nТоктоп туруп, улантыңыз."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Бул функцияны унаа айдап баратканда колдоно албайсыз"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Колдонмонун коопсуз функцияларын иштетүү үчүн <xliff:g id="EXIT_BUTTON">%s</xliff:g> баскычын басыңыз."</string>
<string name="exit_button" msgid="5829638404777671253">"Артка"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Колдонмону жабуу"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Артка"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"мүчүлүштүктөрдү аныктоо дайындарын окуу"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Унаадагы мүчүлүштүктөрдү аныктоо дайындарын окуу."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"мүчүлүштүктөрдү аныктоо дайындарын тазалоо"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"унаанын кароолун колдонуу"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Унаанын кароолун колдонуу."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Түзмөгүм"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Конок"</string>
</resources>
diff --git a/service/res/values-lo/strings.xml b/service/res/values-lo/strings.xml
index e7ebb33..8691783 100644
--- a/service/res/values-lo/strings.xml
+++ b/service/res/values-lo/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ຈັດການເຫດການປ້ອນຂໍ້ມູນ"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN bus ບໍ່ສຳເລັດ"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus ບໍ່ຕອບສະໜອງ. ຖອດປລັກກ່ອງເຄື່ອງຫຼິ້ນວິທະຍຸ (Headunit) ແລ້ວສຽບເຂົ້າຄືນໃໝ່ ແລະ ຣິສະຕາດລົດ"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"ເພື່ອຄວາມປອດໄພຂອງທ່ານ, ກິດຈະກຳນີ້ບໍ່ມີໃຫ້ນໍາໃຊ້ໃນຂະນະທີ່ທ່ານກຳລັງຂັບລົດຢູ່. \nເພື່ອສືບຕໍ່, ກະລຸນາລໍຖ້າຈົນກວ່າວ່າທ່ານຈອດລົດ."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"ທ່ານບໍ່ສາມາດໃຊ້ຄຸນສົມບັດນີ້ໃນຂະນະທີ່ຂັບລົດໄດ້"</string>
<string name="exit_button_message" msgid="8554690915924055685">"ເພື່ອເລີ່ມຕົ້ນຄືນໃໝ່ດ້ວຍຄຸນສົມບັດແອັບທີ່ປອດໄພ, ກະລຸນາເລືອກ <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"ກັບຄືນ"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"ປິດແອັບ"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"ກັບຄືນ"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"ອ່ານຂໍ້ມູນການວິເຄາະ"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"ອ່ານຂໍ້ມູນການວິເຄາະຈາກລົດ."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"ລຶບລ້າງຂໍ້ມູນການວິເຄາະ"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"ໃຊ້ Watchdog ໃນລົດ"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"ໃຊ້ Watchdog ໃນລົດ."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"ອຸປະກອນຂອງຂ້ອຍ"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"ແຂກ"</string>
</resources>
diff --git a/service/res/values-lt/strings.xml b/service/res/values-lt/strings.xml
index 7dac0d2..3cc8d44 100644
--- a/service/res/values-lt/strings.xml
+++ b/service/res/values-lt/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Apdoroti įvesties įvykius."</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN BUS klaida"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN BUS nereaguoja. Atjunkite ir vėl prijunkite pagrindinio įtaiso dėžutę."</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Siekiant užtikrinti jūsų saugą, ši veikla nepasiekiama vairuojant.\nJei norite tęsti, palaukite, kol sustosite."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Negalite naudoti šios funkcijos vairuodami"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Jei norite pradėti iš naujo naudodami saugias programos funkcijas, pasirinkite <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Atgal"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Uždaryti programą"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Atgal"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"nuskaityti diagnostikos duomenis"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Nuskaityti automobilio diagnostikos duomenis."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"išvalyti diagnostikos duomenis"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"naudoti automobilio apsauginį laikmatį"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Naudoti automobilio apsauginį laikmatį."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Mano įrenginys"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Svečias"</string>
</resources>
diff --git a/service/res/values-lv/strings.xml b/service/res/values-lv/strings.xml
index e3a8330..aecbeb4 100644
--- a/service/res/values-lv/strings.xml
+++ b/service/res/values-lv/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Apstrādāt ievades notikumus."</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Radās atteice datu maģistrālē"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Datu maģistrāle nereaģē. Atvienojiet un atkal pievienojiet stereosistēmas paneļa kabeli un atkārtoti iedarbiniet automašīnu"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Drošības apsvērumu dēļ šī darbība nav pieejama braukšanas laikā.\nTurpiniet, kad automašīna būs novietota stāvēšanai."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Jūs nevarat izmantot šo funkciju braukšanas laikā."</string>
<string name="exit_button_message" msgid="8554690915924055685">"Lai atsāktu darbu ar drošām lietotnes funkcijām, atlasiet pogu <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Atpakaļ"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Aizvērt lietotni"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Atpakaļ"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"nolasīt diagnostikas datus"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Nolasīt diagnostikas datus no automašīnas."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"notīrīt diagnostikas datus"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"izmantot automašīnas sargierīci"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Izmantot automašīnas sargierīci."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Mana ierīce"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Viesis"</string>
</resources>
diff --git a/service/res/values-mk/strings.xml b/service/res/values-mk/strings.xml
index 63d0282..8945ff6 100644
--- a/service/res/values-mk/strings.xml
+++ b/service/res/values-mk/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Ракува со влезните настани"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN-магистралата не успеа"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-магистралата не реагира. Откачете ја и повторно прикачете ја кутијата на главната единица и рестартирајте го автомобилот"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"За ваша безбедност, оваа активност не е достапна додека возите.\nЗа да продолжите, почекајте да се паркирате."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Не може да ја користите функцијава додека возите"</string>
<string name="exit_button_message" msgid="8554690915924055685">"За да започнете одново со безбедносните фунции на апликацијата, изберете <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Назад"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Затвори апликација"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Назад"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"ги чита дијагностичките податоци"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Чита дијагностички податоци од автомобилот."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"чисти дијагностички податоци"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"ја користат „Заштитник за автомобилот“"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Ја користат „Заштитник за автомобилот“."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Мојот уред"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Гостин"</string>
</resources>
diff --git a/service/res/values-ml/strings.xml b/service/res/values-ml/strings.xml
index 5646ef2..4e8cf7e 100644
--- a/service/res/values-ml/strings.xml
+++ b/service/res/values-ml/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ഇൻപുട്ട് ഇവന്റുകൾ കൈകാര്യം ചെയ്യുക"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN ബസ് പരാജയപ്പെട്ടു"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN ബസ് പ്രതികരിക്കുന്നില്ല. ഹെഡ്യൂണിറ്റ് ബോക്സ്, അൺപ്ലഗ് ചെയ്ത്, വീണ്ടും പ്ലഗ് ചെയ്ത്, കാർ റീസ്റ്റാർട്ട് ചെയ്യുക"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"നിങ്ങളുടെ സുരക്ഷയ്ക്ക്, ഡ്രൈവ് ചെയ്യുമ്പോൾ ഈ ആക്റ്റിവിറ്റി ലഭ്യമല്ല.\nതുടരാൻ, നിങ്ങൾ പാർക്ക് ചെയ്യുന്നതുവരെ കാത്തിരിക്കുക."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"ഡ്രെെവ് ചെയ്യുമ്പോൾ നിങ്ങൾ ഈ ഫീച്ചർ ഉപയോഗിക്കരുത്"</string>
<string name="exit_button_message" msgid="8554690915924055685">"സുരക്ഷിതമായ ആപ്പ് ഫീച്ചറുകൾ ഉപയോഗിച്ച് പുനരാരംഭിക്കാൻ, <xliff:g id="EXIT_BUTTON">%s</xliff:g> തിരഞ്ഞെടുക്കുക."</string>
<string name="exit_button" msgid="5829638404777671253">"മടങ്ങുക"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"ആപ്പ് അടയ്ക്കുക"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"മടങ്ങുക"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"പ്രശ്നനിർണ്ണയ ഡാറ്റ വായിക്കുക"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"കാറിൽ നിന്നുള്ള പ്രശ്നനിർണ്ണയ ഡാറ്റ വായിക്കുക."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"പ്രശ്നനിർണ്ണയ ഡാറ്റ മായ്ക്കുക"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"കാർ പരിശോധനാ സിസ്റ്റം ഉപയോഗിക്കുക"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"കാർ പരിശോധനാ സിസ്റ്റം ഉപയോഗിക്കുക."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"എന്റെ ഉപകരണം"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"അതിഥി"</string>
</resources>
diff --git a/service/res/values-mn/strings.xml b/service/res/values-mn/strings.xml
index 8028cab..19d64b6 100644
--- a/service/res/values-mn/strings.xml
+++ b/service/res/values-mn/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Оролтын арга хэмжээг боловсруулах"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN bus амжилтгүй болсон"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus хариу өгөхгүй байна. Хөгжим тоглуулагчийн хайрцгийг салгаад, дахин залгаж, машиныг дахин эхлүүлнэ үү"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Таны аюулгүй байдлын үүднээс жолоодох явцад энэ үйл ажиллагааг хийх боломжгүй.\nМашинаа зогсоолд байршуулаад үргэлжлүүлнэ үү."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Та энэ онцлогийг жолоо барьж байхдаа ашиглах боломжгүй"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Аппын аюулгүй онцлогуудтайгаар дахин эхлүүлэхийн тулд <xliff:g id="EXIT_BUTTON">%s</xliff:g>-г сонгоно уу."</string>
<string name="exit_button" msgid="5829638404777671253">"Буцах"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Аппыг хаах"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Буцах"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"оношилгооны өгөгдлийг унших"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Машины оношилгооны өгөгдлийг унших."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"оношилгооны өгөгдлийг устгах"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"машины watchdog-г ашиглана уу"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Машины watchdog-г ашиглана уу."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Миний төхөөрөмж"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Зочин"</string>
</resources>
diff --git a/service/res/values-mr/strings.xml b/service/res/values-mr/strings.xml
index f929253..8007a0e 100644
--- a/service/res/values-mr/strings.xml
+++ b/service/res/values-mr/strings.xml
@@ -32,8 +32,8 @@
<string name="car_permission_desc_speed" msgid="2047965198165448241">"तुमच्या कारची गती अॅक्सेस करा."</string>
<string name="car_permission_label_vehicle_dynamics_state" msgid="313779267420048367">"कारची डायनॅमिक स्थिती अॅक्सेस करा"</string>
<string name="car_permission_desc_vehicle_dynamics_state" msgid="8891506193446375660">"तुमच्या कारची डायनॅमिक स्थिती अॅक्सेस करा."</string>
- <string name="car_permission_label_vendor_extension" msgid="7141601811734127361">"कारचे व्हेंडर चॅनेल अॅक्सेस करा"</string>
- <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"कारसंबंधी माहितीच्या देवाण-घेवाणीसाठी तुमच्या कारचे विक्रेता चॅनेल अॅक्सेस करा."</string>
+ <string name="car_permission_label_vendor_extension" msgid="7141601811734127361">"कारचे व्हेंडर चॅनल अॅक्सेस करा"</string>
+ <string name="car_permission_desc_vendor_extension" msgid="2970718502334714035">"कारसंबंधी माहितीच्या देवाण-घेवाणीसाठी तुमच्या कारचे विक्रेता चॅनल अॅक्सेस करा."</string>
<string name="car_permission_label_radio" msgid="6009465291685935112">"कारचा रेडिओ व्यवस्थापित करा"</string>
<string name="car_permission_desc_radio" msgid="3385999027478186964">"तुमच्या कारचा रेडिओ अॅक्सेस करा."</string>
<string name="car_permission_label_projection" msgid="9107156380287576787">"फोनवरून कारच्या डिस्प्लेवर इंटरफेस प्रोजेक्ट करा"</string>
@@ -60,8 +60,8 @@
<string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"इंस्ट्रुमेंट क्लस्टरमध्ये अॅप्स लाँच करा"</string>
<string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"इंस्ट्रुमेंट क्लस्टर रेंडरिंग"</string>
<string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"इंस्ट्रुमेंट क्लस्टर डेटा मिळवा"</string>
- <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX निर्बंध कॉन्फिगरेशन"</string>
- <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX निर्बंध कॉन्फिगर करा"</string>
+ <string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX निर्बंध कॉंफिगरेशन"</string>
+ <string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX निर्बंध कॉंफिगर करा"</string>
<string name="car_permission_label_car_handle_usb_aoap_device" msgid="72783989504378036">"USB डिव्हाइसशी AOAP मोडमध्ये कनेक्ट करा"</string>
<string name="car_permission_desc_car_handle_usb_aoap_device" msgid="273505990971317034">"अॅपला डिव्हाइसशी AOAP मोडमध्ये कनेक्ट करण्याची अनुमती देते"</string>
<string name="car_permission_label_read_car_occupant_awareness_state" msgid="125517953575032758">"ऑक्युपंट अवेअरनेस सिस्टम वाचन अॅक्सेस"</string>
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"इनपुट इव्हेंट हाताळा"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN बस अयशस्वी"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN बस प्रतिसाद देत नाही. हेडयुनिट बॉक्स अनप्लग करून पुन्हा प्लग करा आणि कार रीस्टार्ट करा"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"तुमच्या सुरक्षेसाठी, ड्रायव्हिंग करत असताना ही अॅक्टिव्हिटी उपलब्ध नाही.\nसुरू ठेवण्यासाठी, पार्क करेपर्यंत वाट पहा."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"तुम्ही ड्राइव्ह करताना हे वैशिष्ट्य वापरू शकत नाही"</string>
<string name="exit_button_message" msgid="8554690915924055685">"सुरक्षित अॅप वैशिष्ट्यांसोबत पुन्हा सुरुवात करण्यासाठी, <xliff:g id="EXIT_BUTTON">%s</xliff:g> निवडा."</string>
<string name="exit_button" msgid="5829638404777671253">"मागे जा"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"अॅप बंद करा"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"मागे जा"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"निदान डेटा वाचा"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"कारचा निदान डेटा वाचा."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"निदान डेटा साफ करा"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"कार वॉचडॉग वापरा"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"कार वॉचडॉग वापरा."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"माझे डिव्हाइस"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"अतिथी"</string>
</resources>
diff --git a/service/res/values-ms/strings.xml b/service/res/values-ms/strings.xml
index 473e42b..e5d4a9c 100644
--- a/service/res/values-ms/strings.xml
+++ b/service/res/values-ms/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Kendalikan peristiwa input"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Bas CAN gagal"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Bas CAN tidak bertindak balas. Cabut dan palamkan kembali kotak unit stereo dan mulakan semula kereta"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Untuk keselamatan anda, aktiviti ini tidak tersedia semasa memandu.\nUntuk meneruskan, tunggu kereta diberhentikan."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Anda tidak boleh menggunakan ciri ini semasa memandu"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Untuk bermula semula dengan ciri apl selamat, pilih <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Kembali"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Tutup apl"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Kembali"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"baca data diagnostik"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Baca data diagnostik daripada kereta."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"kosongkan data diagnostik"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"gunakan pengawas kereta"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Gunakan pengawas kereta."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Peranti Saya"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Tetamu"</string>
</resources>
diff --git a/service/res/values-my/strings.xml b/service/res/values-my/strings.xml
index d781575..fb1aebf 100644
--- a/service/res/values-my/strings.xml
+++ b/service/res/values-my/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"အချက်အလက်ထည့်သွင်းခြင်း အစီအစဉ်များကို စီမံပါမည်"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"\"CAN bus\" စနစ် အသုံးပြုမှု မအောင်မြင်ပါ"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus စနစ်က တုန့်ပြန်မှုမရှိပါ။ စက်အထိုင်ဘောက်စ်ကို ပလတ်ဖြုတ်ပြီး ပြန်တပ်ကာ ကားကို ပြန်လည်စတင်ပါ"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"သင့် လုံခြုံမှုအတွက် ဤလုပ်ဆောင်ချက်ကို ကားမောင်းနေစဉ် အသုံးမပြုနိုင်ပါ။\nဆက်လက်လုပ်ဆောင်ရန် ကားရပ်နားသည်အထိစောင့်ပါ။"</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"ကားမောင်းနေစဉ် ဤဝန်ဆောင်မှုကို သုံး၍မရပါ"</string>
<string name="exit_button_message" msgid="8554690915924055685">"စိတ်ချရသော အက်ပ်လုပ်ဆောင်ချက်များနှင့်အတူ အစမှပြန်စရန် <xliff:g id="EXIT_BUTTON">%s</xliff:g> ကို ရွေးချယ်ပါ။"</string>
<string name="exit_button" msgid="5829638404777671253">"နောက်သို့"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"အက်ပ်ကိုပိတ်ရန်"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"နောက်သို့"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"အမှားရှာပြင်ခြင်းဒေတာများကို ကြည့်ပါမည်"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"ကားအတွင်း အမှားရှာပြင်ခြင်းဒေတာကို ကြည့်ပါမည်။"</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"အမှားရှာပြင်ခြင်းဒေတာများကို ရှင်းလင်းပါမည်"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"ကားကင်းစောင့်ကို အသုံးပြုခွင့်"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"ကားကင်းစောင့်ကို အသုံးပြုခွင့်။"</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"ကျွန်ုပ်၏စက်"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"ဧည့်သည်"</string>
</resources>
diff --git a/service/res/values-nb/strings.xml b/service/res/values-nb/strings.xml
index 7957d0f..5d1fbe6 100644
--- a/service/res/values-nb/strings.xml
+++ b/service/res/values-nb/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Behandling av inndatahendelser"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN-bus mislyktes"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-bus svarer ikke. Koble bilens hovedenhet ut og inn igjen, og start bilen på nytt"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Av sikkerhetshensyn er denne aktiviteten utilgjengelig når du kjører.\nDu kan ikke fortsette før du stopper bilen."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Du kan ikke bruke denne funksjonen når du kjører"</string>
<string name="exit_button_message" msgid="8554690915924055685">"For å starte på nytt med sikre appfunksjoner, velg <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Tilbake"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Lukk appen"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Tilbake"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"lese diagnostikkdata"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Les diagnostikkdata fra bilen."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"slette diagnostikkdata"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"bruk vakthund for bil"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Bruk vakthund for bil."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Enheten min"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Gjest"</string>
</resources>
diff --git a/service/res/values-ne/strings.xml b/service/res/values-ne/strings.xml
index 57bec9b..5ef3730 100644
--- a/service/res/values-ne/strings.xml
+++ b/service/res/values-ne/strings.xml
@@ -37,33 +37,33 @@
<string name="car_permission_label_radio" msgid="6009465291685935112">"कारको रेडियो व्यवस्थित गर्ने"</string>
<string name="car_permission_desc_radio" msgid="3385999027478186964">"तपाईंको कारको रेडियोमाथि पहुँच राख्ने।"</string>
<string name="car_permission_label_projection" msgid="9107156380287576787">"फोनको इन्टरफेस कारको डिस्प्लेमा प्रोजेक्ट गर्ने"</string>
- <string name="car_permission_desc_projection" msgid="2352178999656292944">"अनुप्रयोगलाई कुनै फोनको इन्टरफेस कारको डिस्प्लेमा प्रोजेक्ट गर्न दिन्छ।"</string>
+ <string name="car_permission_desc_projection" msgid="2352178999656292944">"एपलाई कुनै फोनको इन्टरफेस कारको डिस्प्लेमा प्रोजेक्ट गर्न दिन्छ।"</string>
<string name="car_permission_label_access_projection_status" msgid="4231618890836627402">"प्रोजेक्सनको स्थितिमाथि पहुँच राख्ने"</string>
- <string name="car_permission_desc_access_projection_status" msgid="8497351979100616278">"अनुप्रयोगलाई कारको डिस्प्लेमा प्रोजेक्ट गरिरहेका अन्य अनुप्रयोगहरूको स्थिति प्राप्त गर्ने अनुमति दिन्छ।"</string>
+ <string name="car_permission_desc_access_projection_status" msgid="8497351979100616278">"एपलाई कारको डिस्प्लेमा प्रोजेक्ट गरिरहेका अन्य अनुप्रयोगहरूको स्थिति प्राप्त गर्ने अनुमति दिन्छ।"</string>
<string name="car_permission_label_bind_projection_service" msgid="5362076216606651526">"प्रोजेक्सन सेवामा सम्बद्ध हुने"</string>
<string name="car_permission_desc_bind_projection_service" msgid="2282657787853408639">"धारकलाई प्रोजेक्सन सेवाको उच्च स्तरको इन्टरफेसमा सम्बद्ध हुने अनुमति दिन्छ। साधारण अनुप्रयोगहरूको लागि कहिल्यै पनि आवश्यक पर्दैन।"</string>
<string name="car_permission_label_audio_volume" msgid="310587969373137690">"कारको अडियोको भोल्युम नियन्त्रण गर्ने"</string>
<string name="car_permission_label_audio_settings" msgid="6524703796944023977">"कारका अडियो सेटिङ व्यवस्थित गर्ने"</string>
<string name="car_permission_label_mock_vehicle_hal" msgid="7198852512207405935">"सवारी साधनको HAL को अनुकरण गर्ने"</string>
<string name="car_permission_label_receive_ducking" msgid="4884538660766756573">"अडियो डकिङ कार्यक्रमहरू प्राप्त गर्नुहोस्"</string>
- <string name="car_permission_desc_receive_ducking" msgid="776376388266656512">"कारमा अन्य अडियो प्ले भइरहेका हुनाले अनुप्रयोगको भोल्युम कम भइरहेको कुराबारे अनुप्रयोगलाई सूचित हुन दिन्छ।"</string>
+ <string name="car_permission_desc_receive_ducking" msgid="776376388266656512">"कारमा अन्य अडियो प्ले भइरहेका हुनाले एपको भोल्युम कम भइरहेको कुराबारे एपलाई सूचित हुन दिन्छ।"</string>
<string name="car_permission_desc_mock_vehicle_hal" msgid="5235596491098649155">"आन्तरिक परीक्षण गर्ने प्रयोजनका लागि तपाईंको कारको सवारी साधन HAL को अनुकरण गर्ने।"</string>
<string name="car_permission_desc_audio_volume" msgid="536626185654307889">"तपाईंको कारको अडियोको भोल्युम नियन्त्रण गर्ने।"</string>
<string name="car_permission_desc_audio_settings" msgid="7192007170677915937">"आफ्नो कारको अडियोसम्बन्धी सेटिङहरू नियन्त्रण गर्नुहोस्।"</string>
- <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"अनुप्रयोगमाथि रोक लगाउने कार्य"</string>
- <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"सवारी साधन चलाइरहेका बेलामा अनुप्रयोगलाई रोक लगाउने प्रक्रिया नियन्त्रण गर्ने।"</string>
+ <string name="car_permission_label_control_app_blocking" msgid="9112678596919993386">"एपमाथि रोक लगाउने कार्य"</string>
+ <string name="car_permission_desc_control_app_blocking" msgid="7539378161760696190">"सवारी साधन चलाइरहेका बेलामा एपलाई रोक लगाउने प्रक्रिया नियन्त्रण गर्ने।"</string>
<string name="car_permission_car_navigation_manager" msgid="5895461364007854077">"नेभिगेसन प्रबन्धक"</string>
<string name="car_permission_desc_car_navigation_manager" msgid="6188751054665471537">"नेभिगेसनसम्बन्धी डेटालाई उपकरणको क्लस्टरमा रिपोर्ट गर्ने"</string>
<string name="car_permission_car_display_in_cluster" msgid="4005987646292458684">"उपकरणको क्लस्टरमा प्रत्यक्ष रेन्डर गर्ने प्रक्रिया"</string>
- <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"कुनै अनुप्रयोगलाई उपकरणको क्लस्टरमा देखाइने क्रियाकलापहरूको घोषणा गर्न दिनुहोस्"</string>
+ <string name="car_permission_desc_car_display_in_cluster" msgid="2668300546822672927">"कुनै एपलाई उपकरणको क्लस्टरमा देखाइने क्रियाकलापहरूको घोषणा गर्न दिनुहोस्"</string>
<string name="car_permission_car_cluster_control" msgid="1382247204230165674">"उपकरणको क्लस्टरको नियन्त्रण"</string>
- <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"उपकरणको क्लस्टरमा अनुप्रयोगहरू सुरु गर्नुहोस्"</string>
+ <string name="car_permission_desc_car_cluster_control" msgid="9222776665281176031">"उपकरणको क्लस्टरमा एपहरू सुरु गर्नुहोस्"</string>
<string name="car_permission_label_bind_instrument_cluster_rendering" msgid="8627480897198377418">"उपकरणको क्लस्टर रेन्डर गर्ने प्रक्रिया"</string>
<string name="car_permission_desc_bind_instrument_cluster_rendering" msgid="5073596870485006783">"उपकरणको क्लस्टरको डेटा प्राप्त गर्नुहोस्"</string>
<string name="car_permission_label_car_ux_restrictions_configuration" msgid="6801393970411049725">"UX सम्बन्धी प्रतिबन्धहरूको कन्फिगुरेसन"</string>
<string name="car_permission_desc_car_ux_restrictions_configuration" msgid="5711926927484813777">"UX सम्बन्धी प्रतिबन्धहरू कन्फिगर गर्नुहोस्"</string>
<string name="car_permission_label_car_handle_usb_aoap_device" msgid="72783989504378036">"AOAP मोडमा USB यन्त्रसँग सञ्चार गर्नुहोस्"</string>
- <string name="car_permission_desc_car_handle_usb_aoap_device" msgid="273505990971317034">"AOAP मोडमा अनुप्रयोगलाई कुनै यन्त्रसँग सञ्चार गर्न दिन्छ"</string>
+ <string name="car_permission_desc_car_handle_usb_aoap_device" msgid="273505990971317034">"AOAP मोडमा एपलाई कुनै यन्त्रसँग सञ्चार गर्न दिन्छ"</string>
<string name="car_permission_label_read_car_occupant_awareness_state" msgid="125517953575032758">"Occupant Awareness System रिड गर्ने पहुँच"</string>
<string name="car_permission_desc_read_car_occupant_awareness_state" msgid="188865882598414986">"Occupant Awareness System को स्थिति र पत्ता लगाउनेसम्बन्धी डेटा रिड गर्न दिन्छ"</string>
<string name="car_permission_label_control_car_occupant_awareness_system" msgid="7163330266691094542">"Occupant Awareness System सम्बन्धी ग्राफको नियन्त्रण गर्नुहोस्"</string>
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"इनपुट गरिएका कार्यक्रमहरू व्यवस्थापन गर्ने"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN bus असफल भयो"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus ले प्रतिक्रिया जनाएन। हेडयुनिट बाकसलाई प्लगबाट निकालेर फेरि प्लगमा घुसाउनुहोस् र कार पुनःसुरु गर्नुहोस्"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"तपाईंको सुरक्षाका लागि, तपाईंले सवारी साधन चलाइरहेका बेलामा यो क्रियाकलाप उपलब्ध हुँदैन।\nजारी राख्न, पार्क नगरुन्जेल पर्खनुहोस्।"</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"तपाईं सवारी साधन चलाइरहेका बेला यो सुविधा प्रयोग गर्न सक्नुहुन्न"</string>
<string name="exit_button_message" msgid="8554690915924055685">"अनुप्रयोगका सुरक्षित सुविधाहरूको प्रयोग गरी फेरि सुरु गर्न <xliff:g id="EXIT_BUTTON">%s</xliff:g> चयन गर्नुहोस्।"</string>
<string name="exit_button" msgid="5829638404777671253">"पछाडि"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"एप बन्द गर्नुहोस्"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"पछाडि"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"निदानसम्बन्धी डेटा पढ्ने"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"कारको निदानसम्बन्धी डेटा पढ्ने।"</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"निदानसम्बन्धी डेटा हटाउने"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"कारको प्रणालीको निगरानी गर्ने सुविधा प्रयोग गर्नुहोस्"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"कारको प्रणालीको निगरानी गर्ने सुविधा प्रयोग गर्नुहोस्"</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"मेरो यन्त्र"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"अतिथि"</string>
</resources>
diff --git a/service/res/values-night/colors.xml b/service/res/values-night/colors.xml
deleted file mode 100644
index 108de11..0000000
--- a/service/res/values-night/colors.xml
+++ /dev/null
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2018, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<resources>
- <!-- Semi-transparent background color of blocking activity. -->
- <color name="activity_blocking_activity_background">#c7000000</color>
-
- <!-- Color of text in blocking activity. -->
- <color name="blocking_text">#fff5f5f5</color>
-
- <!-- Background color of button. -->
- <color name="button_background">#ff80cbc4</color>
-
- <!-- Color of button text. -->
- <color name="button_text">#ff212121</color>
-
- <!-- Ripple color. -->
- <color name="ripple_background">#3dffffff</color>
-</resources>
diff --git a/service/res/values-nl/strings.xml b/service/res/values-nl/strings.xml
index 5d084df..da7bc47 100644
--- a/service/res/values-nl/strings.xml
+++ b/service/res/values-nl/strings.xml
@@ -16,7 +16,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="car_permission_label" msgid="741004755205554376">"toegang tot gegevens van auto"</string>
+ <string name="car_permission_label" msgid="741004755205554376">"Toegang tot gegevens van auto"</string>
<string name="car_permission_desc" msgid="162499818870052725">"toegang krijgen tot je autogegevens."</string>
<string name="car_permission_label_camera" msgid="3725702064841827180">"toegang tot camera van auto"</string>
<string name="car_permission_desc_camera" msgid="917024932164501426">"Toegang tot de camera(\'s) van je auto."</string>
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Invoergebeurtenissen verwerken"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN-bus is mislukt"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-bus reageert niet. Koppel de hoofdeenheid los en sluit deze vervolgens weer aan. Start de auto daarna opnieuw."</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Voor jouw veiligheid is deze activiteit niet beschikbaar als je aan het rijden bent.\nJe moet parkeren om door te gaan."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Je kunt deze functie niet gebruiken tijdens het rijden"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Selecteer <xliff:g id="EXIT_BUTTON">%s</xliff:g> om opnieuw te beginnen met de veilige app-functies."</string>
<string name="exit_button" msgid="5829638404777671253">"Vorige"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"App sluiten"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Terug"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"diagnostische gegevens lezen"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Diagnostische gegevens van auto lezen."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"diagnostische gegevens wissen"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"auto-watchdog gebruiken"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Auto-watchdog gebruiken."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Mijn apparaat"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Gast"</string>
</resources>
diff --git a/service/res/values-or/strings.xml b/service/res/values-or/strings.xml
index a671892..9851358 100644
--- a/service/res/values-or/strings.xml
+++ b/service/res/values-or/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ଇନ୍ପୁଟ୍ ଇଭେଣ୍ଟଗୁଡ଼ିକ ପରିଚାଳନା କରିପାରେ"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN ବସ୍ ବିଫଳ ହେଲା"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN ବସ୍ ପ୍ରତିକ୍ରିୟା ଦେଉନାହିଁ। ହେଡୟୁନିଟ୍ ବାକ୍ସର ପ୍ଲଗ୍ କାଢ଼ି ପୁଣି ଲଗାନ୍ତୁ ଏବଂ କାର୍କୁ ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"ଆପଣଙ୍କ ସୁରକ୍ଷା ପାଇଁ, ଡ୍ରାଇଭିଂ କରିବା ସମୟରେ ଏହି ଗତିବିଧି ଉପଲବ୍ଧ ନାହିଁ।\nଜାରି ରଖିବା ପାଇଁ, ପାର୍କ କରିବା ପର୍ଯ୍ୟନ୍ତ ଅପେକ୍ଷା କରନ୍ତୁ।"</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"ଆପଣ ଡ୍ରାଇଭ୍ କରିବା ସମୟରେ ଏହି ଫିଚର୍ ବ୍ୟବହାର କରିପାରିବେ ନାହିଁ"</string>
<string name="exit_button_message" msgid="8554690915924055685">"ସୁରକ୍ଷିତ ଆପ୍ ବୈଶିଷ୍ଟ୍ୟଗୁଡ଼ିକୁ ନେଇ ପୁଣି ଆରମ୍ଭ କରିବା ପାଇଁ, <xliff:g id="EXIT_BUTTON">%s</xliff:g> ଚୟନ କରନ୍ତୁ।"</string>
<string name="exit_button" msgid="5829638404777671253">"ପଛକୁ ଫେରନ୍ତୁ"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"ଆପ୍ ବନ୍ଦ କରନ୍ତୁ"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"ପଛକୁ ଫେରନ୍ତୁ"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"ଡାଏଗ୍ନୋଷ୍ଟିକ୍ ଡାଟାକୁ ପଢ଼ିବ"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"କାର୍ ମଧ୍ୟରୁ ଡାଏଗ୍ନୋଷ୍ଟିକ୍ ଡାଟାକୁ ପଢ଼ିବ।"</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"ଡାଏଗ୍ନୋଷ୍ଟିକ୍ ଡାଟା ଖାଲି କରନ୍ତୁ"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"କାର ୱାଚଡଗ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"କାର ୱାଚଡଗ ବ୍ୟବହାର କରନ୍ତୁ।"</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"ମୋ ଡିଭାଇସ୍"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"ଅତିଥି"</string>
</resources>
diff --git a/service/res/values-pa/strings.xml b/service/res/values-pa/strings.xml
index f4dee5d..d0e0ee5 100644
--- a/service/res/values-pa/strings.xml
+++ b/service/res/values-pa/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ਇਨਪੁੱਟ ਇਵੈਂਟਾਂ ਦੀ ਸੰਭਾਲ"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN ਬੱਸ ਅਸਫਲ ਰਹੀ"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN ਬੱਸ ਕੰਮ ਨਹੀਂ ਕਰਦੀ। ਹੈੱਡ ਯੂਨਿਟ ਬਾਕਸ ਨੂੰ ਅਨਪਲੱਗ ਕਰੋ ਅਤੇ ਦੁਬਾਰਾ ਪਲੱਗ ਲਗਾ ਕੇ ਕਾਰ ਨੂੰ ਮੁੜ-ਚਾਲੂ ਕਰੋ"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"ਤੁਹਾਡੀ ਸੁਰੱਖਿਆ ਲਈ, ਗੱਡੀ ਚਲਾਉਣ ਵੇਲੇ ਇਹ ਸਰਗਰਮੀ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।\nਜਾਰੀ ਰੱਖਣ ਲਈ, ਗੱਡੀ ਰੋਕਣ ਤੱਕ ਉਡੀਕ ਕਰੋ।"</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"ਤੁਸੀਂ ਇਹ ਵਿਸ਼ੇਸ਼ਤਾ ਗੱਡੀ ਚਲਾਉਂਦੇ ਸਮੇਂ ਨਹੀਂ ਵਰਤ ਸਕਦੇ"</string>
<string name="exit_button_message" msgid="8554690915924055685">"ਸੁਰੱਖਿਅਤ ਐਪ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨਾਲ ਮੁੜ ਤੋਂ ਸ਼ੁਰੂ ਕਰਨ ਲਈ, <xliff:g id="EXIT_BUTTON">%s</xliff:g> ਚੁਣੋ।"</string>
<string name="exit_button" msgid="5829638404777671253">"ਪਿੱਛੇ"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"ਐਪ ਬੰਦ ਕਰੋ"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"ਪਿੱਛੇ"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"ਤਸ਼ਖੀਸੀ ਡਾਟੇ ਨੂੰ ਪੜ੍ਹਨਾ"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"ਕਾਰ ਦਾ ਤਸ਼ਖੀਸੀ ਡਾਟਾ ਪੜ੍ਹਨਾ।"</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"ਤਸ਼ਖੀਸੀ ਡਾਟਾ ਕਲੀਅਰ ਕਰਨਾ"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"ਕਾਰ ਵਾਚਡੌਗ ਵਰਤੋ"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"ਕਾਰ ਵਾਚਡੌਗ ਵਰਤੋ।"</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"ਮੇਰਾ ਡੀਵਾਈਸ"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"ਮਹਿਮਾਨ"</string>
</resources>
diff --git a/service/res/values-pl/strings.xml b/service/res/values-pl/strings.xml
index 0c21c9b..fa33cd3 100644
--- a/service/res/values-pl/strings.xml
+++ b/service/res/values-pl/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Obsługa zdarzeń wprowadzania danych"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Błąd magistrali CAN"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Magistrala CAN nie odpowiada. Odłącz i jeszcze raz podłącz moduł główny i ponownie uruchom samochód."</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Dla Twojego bezpieczeństwa ta funkcja jest wyłączona podczas jazdy.\nAby jej użyć, zaparkuj samochód."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Podczas jazdy nie można korzystać z tej funkcji"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Aby jeszcze raz przejść do funkcji bezpieczeństwa w aplikacji, wybierz <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Wstecz"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Zamknij aplikację"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Wstecz"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"odczytywanie danych diagnostycznych"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Odczytywanie danych diagnostycznych samochodu."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"czyszczenie danych diagnostycznych"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"używaj watchdoga w samochodzie"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Używaj watchdoga w samochodzie."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Moje urządzenie"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Gość"</string>
</resources>
diff --git a/service/res/values-pt-rPT/strings.xml b/service/res/values-pt-rPT/strings.xml
index 43f9521..9d7ae8f 100644
--- a/service/res/values-pt-rPT/strings.xml
+++ b/service/res/values-pt-rPT/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Processe eventos de entrada."</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Falha no CAN bus."</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"O CAN bus não responde. Desligue e volte a ligar a caixa da unidade principal e reinicie o automóvel."</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Para sua segurança, esta atividade não está disponível enquanto estiver a conduzir.\nPode continuar após estacionar."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Não pode utilizar esta funcionalidade enquanto conduz."</string>
<string name="exit_button_message" msgid="8554690915924055685">"Para começar de novo com funcionalidades de aplicações seguras, selecione <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Anterior"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Fechar app"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Anterior"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"ler os dados de diagnóstico"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Ler os dados de diagnóstico do automóvel."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"limpar os dados de diagnóstico"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"utilizar o watchdog do automóvel"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Utilize o watchdog do automóvel."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Dispositivo"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Convidado"</string>
</resources>
diff --git a/service/res/values-pt/strings.xml b/service/res/values-pt/strings.xml
index fa23098..3cc6b05 100644
--- a/service/res/values-pt/strings.xml
+++ b/service/res/values-pt/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Gerenciar eventos de entrada"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Falha no barramento CAN"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"O barramento CAN parou de responder. Desconecte e conecte novamente a caixa da unidade principal, depois ligue o carro"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Para sua segurança, essa atividade não está disponível enquanto você dirige.\nPara continuar, aguarde até estacionar."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Não é possível usar esse recurso enquanto você dirige"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Para reiniciar o app com recursos de segurança, selecione <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Voltar"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Fechar app"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Voltar"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"ler dados de diagnóstico"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Ler dados de diagnóstico do carro."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"limpar dados de diagnóstico"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"usar watchdog do carro"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Usar watchdog do carro."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Meu dispositivo"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Visitante"</string>
</resources>
diff --git a/service/res/values-ro/strings.xml b/service/res/values-ro/strings.xml
index 0b52ec8..cae9576 100644
--- a/service/res/values-ro/strings.xml
+++ b/service/res/values-ro/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Gestionează evenimentele de intrare"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Magistrala CAN nu a reușit"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Magistrala CAN nu răspunde. Deconectați și reconectați unitatea radio, apoi reporniți mașina"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Pentru siguranța dvs., activitatea nu este disponibilă în timp ce conduceți.\nCa să continuați, așteptați să parcați."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Nu puteți folosi această funcție în timp ce conduceți"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Pentru a începe din nou cu funcțiile pentru aplicații sigure, selectați <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Înapoi"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Închideți aplicația"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Înapoi"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"Citește datele de diagnosticare"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Citește datele de diagnosticare de la mașină."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"Șterge datele de diagnosticare"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"folosiți ceasul de gardă al mașinii"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Folosiți ceasul de gardă al mașinii."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Dispozitivul meu"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Invitat"</string>
</resources>
diff --git a/service/res/values-ru/strings.xml b/service/res/values-ru/strings.xml
index 913be79..c9f7231 100644
--- a/service/res/values-ru/strings.xml
+++ b/service/res/values-ru/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Возможность обрабатывать события ввода"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Произошла ошибка шины CAN."</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Шина CAN не отвечает. Переподключите коннектор, а затем выключите зажигание и заведите машину снова."</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Во время вождения это действие недоступно.\nСначала вам нужно припарковаться."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Эту функцию нельзя использовать во время вождения."</string>
<string name="exit_button_message" msgid="8554690915924055685">"Чтобы перезапустить приложение в безопасном режиме, нажмите кнопку \"<xliff:g id="EXIT_BUTTON">%s</xliff:g>\"."</string>
<string name="exit_button" msgid="5829638404777671253">"Назад"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Закрыть приложение"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Назад"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"чтение диагностических данных"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Чтение диагностических данных автомобиля."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"удаление диагностических данных"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"использование системы мониторинга автомобиля"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Использование системы мониторинга автомобиля."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Мое устройство"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Гость"</string>
</resources>
diff --git a/service/res/values-si/strings.xml b/service/res/values-si/strings.xml
index a762579..653e7fd 100644
--- a/service/res/values-si/strings.xml
+++ b/service/res/values-si/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ආදාන සිදුවීම් පරිහරණ කරන්න"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN බස් අසාර්ථකයි"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN බස් ප්රතිචාර නොදක්වයි. හෙඩ්යුනිට් පෙට්ටිය පේනු ඉවත් කර ආපසු පේනුගත කර, මෝටර් රථය යළි අරඹන්න"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"ඔබේ ආරක්ෂාව සඳහා, ඔබ රිය පදවන විට මෙම ක්රියාකාරකම නොලැබේ.\nඉදිරියට යාමට, ඔබ ගාල් කරන තෙක් රැඳී සිටින්න."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"රිය පදවන අතරේ ඔබට මෙම විශේෂාංගය භාවිතා කළ නොහැක"</string>
<string name="exit_button_message" msgid="8554690915924055685">"ආරක්ෂිත යෙදුම් විශේෂාංග සමඟ පටන් ගැනීමට, <xliff:g id="EXIT_BUTTON">%s</xliff:g> තෝරන්න."</string>
<string name="exit_button" msgid="5829638404777671253">"ආපසු"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"යෙදුම වසන්න"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"ආපසු"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"දෝෂනිර්ණ දත්ත කියවන්න"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"මෝටර් රථයෙන් දෝෂනිර්ණ දත්ත කියවන්න."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"දෝෂනිර්ණ දත්ත හිස් කරන්න"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"රිය මුරබල්ලා භාවිතා කරන්න"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"රිය මුරබල්ලා භාවිතා කරන්න."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"මගේ උපාංගය"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"අමුත්තා"</string>
</resources>
diff --git a/service/res/values-sk/strings.xml b/service/res/values-sk/strings.xml
index 20a14b6..3154c8b 100644
--- a/service/res/values-sk/strings.xml
+++ b/service/res/values-sk/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Spravovať udalosti vstupu"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Zbernica CAN zlyhala"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Zbernica CAN nereaguje. Odpojte autorádio a znova ho pripojte. Potom auto znova naštartujte."</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Z bezpečnostných dôvodov nie je táto aktivita k dispozícii počas jazdy.\nAk chcete pokračovať, počkajte, kým budete parkovať."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Túto funkciu nie je možné používať za jazdy"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Ak chcete začať odznova s bezpečnými funkciami aplikácie, vyberte tlačidlo <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Späť"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Zavrieť aplikáciu"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Späť"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"čítať diagnostické údaje"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Čítanie diagnostických údajov z auta."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"vymazať diagnostické údaje"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"používať strážcu prevádzky auta"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Používať strážcu prevádzky auta."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Moje zariadenie"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Hosť"</string>
</resources>
diff --git a/service/res/values-sl/strings.xml b/service/res/values-sl/strings.xml
index f9c8e09..0e37f92 100644
--- a/service/res/values-sl/strings.xml
+++ b/service/res/values-sl/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Obravnava dogodkov vnosa"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Napaka vodila CAN"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Vodilo CAN se ne odziva. Odklopite in znova priklopite ohišje avtomobilskega vmesnika ter znova zaženite avtomobil"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Zaradi varnosti ta dejavnost med vožnjo ni na voljo.\nČe želite nadaljevati, počakajte, da bo vozilo parkirano."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Te funkcije med vožnjo ne morete uporabljati"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Če želite začeti znova z varnimi funkcijami aplikacij, izberite <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Nazaj"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Zapri aplikacijo"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Nazaj"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"branje diagnostičnih podatkov"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Branje diagnostičnih podatkov avtomobila."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"brisanje diagnostičnih podatkov"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"uporaba avtomobilskega nadzornika"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Uporaba avtomobilskega nadzornika."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Moja naprava"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Gost"</string>
</resources>
diff --git a/service/res/values-sq/strings.xml b/service/res/values-sq/strings.xml
index 4229c94..89b6944 100644
--- a/service/res/values-sq/strings.xml
+++ b/service/res/values-sq/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Menaxho ngjarjet e hyrjes"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Kanali i komunikimit CAN dështoi"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Kanali i komunikimit CAN nuk përgjigjet. Shkëput dhe lidh përsëri kutinë e njësisë kryesore dhe rindiz makinës"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Për sigurinë tënde, ky aktivitet nuk ofrohet kur je duke drejtuar makinën.\nPër të vazhduar, prit deri sa të parkosh."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Nuk mund ta përdorësh këtë veçori gjatë drejtimit të makinës"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Për të filluar nga e para me funksionet e sigurta të aplikacionit, zgjidh <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Prapa"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Mbyll aplikacionin"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Pas"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"lexo të dhënat diagnostikuese"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Lexo të dhënat diagnostikuese nga makina."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"pastro të dhënat diagnostikuese"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"përdor monitoruesin e makinës"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Përdor monitoruesin e makinës."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Pajisja ime"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"I ftuar"</string>
</resources>
diff --git a/service/res/values-sr/strings.xml b/service/res/values-sr/strings.xml
index cdefd5b..c8505b4 100644
--- a/service/res/values-sr/strings.xml
+++ b/service/res/values-sr/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Управља догађајима уноса"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Грешка CAN магистрале"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN магистрала не реагује. Искључите и поново укључите главну јединицу и поново покрените аутомобил"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Ова активност није доступна док возите ради ваше безбедности.\nДа бисте наставили, прво се паркирајте."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Не можете да користите ову функцију док возите"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Да бисте поново почели са безбедним функцијама апликације, изаберите <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Назад"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Затвори апликацију"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Назад"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"читање дијагностичких података"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Читање дијагностичких података из аутомобила."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"брисање дијагностичких података"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"користи надзорни тајмер аутомобила"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Користи надзорни тајмер аутомобила."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Мој уређај"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Гост"</string>
</resources>
diff --git a/service/res/values-sv/strings.xml b/service/res/values-sv/strings.xml
index cb45be3..a7320db 100644
--- a/service/res/values-sv/strings.xml
+++ b/service/res/values-sv/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Hantera indatahändelser"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Fel i CAN-bussen"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-bussen svarar inte. Koppla från huvudenheten och koppla in den igen. Starta sedan om bilen"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Av säkerhetsskäl är den här aktiviteten inte tillgänglig under körning.\nDu kan fortsätta med detta när du har parkerat."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Du kan inte använda funktionen medan du kör"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Välj <xliff:g id="EXIT_BUTTON">%s</xliff:g> om du vill starta om appen med säkra funktioner."</string>
<string name="exit_button" msgid="5829638404777671253">"Tillbaka"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Stäng appen"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Tillbaka"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"läsa diagnostikdata"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Läsa diagnostisk data om bilen."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"rensa diagnostikdata"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"använd vakthund för bilen"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Använd vakthund för bilen."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Min enhet"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Gäst"</string>
</resources>
diff --git a/service/res/values-sw/strings.xml b/service/res/values-sw/strings.xml
index 8f390bb..85eadfd 100644
--- a/service/res/values-sw/strings.xml
+++ b/service/res/values-sw/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Kudhibiti matukio ya kuweka data"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Imeshindwa kuleta maelezo ya kebo CAN"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Kebo ya CAN haifanyi kazi. Ondoa kisha urudishe tena kisanduku cha sehemu kuu na uzime kisha uwashe gari"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Kwa usalama wako, shughuli haipatikani wakati unaendesha gari. \nIli uendelee, subiri hadi utakapoegesha gari."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Huwezi kutumia kipengele hiki wakati unaendesha gari"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Ili uanzishe tena ukitumia vipengele salama vya programu, chagua <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Rudi Nyuma"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Funga programu"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Nyuma"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"kusoma data ya uchunguzi"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Kusoma data ya uchunguzi kwenye gari."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"kufuta data ya uchunguzi wa gari"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"tumia kipengele cha kulinda gari"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Tumia kipengele cha kulinda gari."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Kifaa Changu"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Mgeni"</string>
</resources>
diff --git a/service/res/values-ta/strings.xml b/service/res/values-ta/strings.xml
index 85837ac..63c4493 100644
--- a/service/res/values-ta/strings.xml
+++ b/service/res/values-ta/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"உற்பத்தியாளர் வழங்கும் சேவைகளைக் கையாளுதல்"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN bus அமைப்பு தோல்வியடைந்தது"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN bus அமைப்பு இயங்கவில்லை. ஹெட்யூனிட் பாக்ஸைப் பிளக்கில் இருந்து அகற்றிச் செருகியபின் காரை மீண்டும் தொடங்கவும்"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"உங்கள் பாதுகாப்பை முன்னிட்டு இந்தச் செயல்பாடு, வாகனம் ஓட்டும்போது இயங்காது.\nதொடர வாகனத்தை நிறுத்தும்வரை காத்திருக்கவும்."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"வாகனம் ஓட்டும்போது இந்த அம்சத்தைப் பயன்படுத்த முடியாது"</string>
<string name="exit_button_message" msgid="8554690915924055685">"ஆப்ஸைப் பாதுகாப்பான அம்சங்களுடன் மீண்டும் தொடங்க <xliff:g id="EXIT_BUTTON">%s</xliff:g>ஐத் தேர்ந்தெடுக்கவும்."</string>
<string name="exit_button" msgid="5829638404777671253">"பின்செல்"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"ஆப்ஸை மூடுக"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"முந்தையது"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"ஆய்வுத் தரவை அறிய வேண்டும்"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"கார் தொடர்பான ஆய்வுத் தரவை அறிய வேண்டும்."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"ஆய்வுத் தரவை அழிக்க வேண்டும்"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"பயன்படுத்திய காருக்கான ஒழுங்குமுறை ஆணையம்"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"பயன்படுத்திய காருக்கான ஒழுங்குமுறை ஆணையம்."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"எனது சாதனம்"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"விருந்தினர்"</string>
</resources>
diff --git a/service/res/values-te/strings.xml b/service/res/values-te/strings.xml
index d7872c4..d886359 100644
--- a/service/res/values-te/strings.xml
+++ b/service/res/values-te/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ఇన్పుట్ ఈవెంట్లను హ్యాండిల్ చేయండి"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN బస్సు విఫలమైంది"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN బస్సు స్పందించలేదు. హెడ్ యూనిట్ బాక్స్ని ప్లగ్ మరియు అన్ప్లగ్ చేసి కారుని పునఃప్రారంభించుము"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"మీ భద్రత విషయమై, ఈ కార్యాచరణ మీరు డ్రైవింగ్లో ఉన్నప్పుడు అందుబాటులో లేదు.\n కొనసాగించడానికి, మీరు పార్క్ చేయబడేవరకు వేచి ఉండండి."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"డ్రైవింగ్లో ఉండగా మీరు ఈ ఫీచర్ని ఉపయోగించలేరు"</string>
<string name="exit_button_message" msgid="8554690915924055685">"సురక్షిత యాప్ లక్షణాలతో ప్రారంభించడానికి, <xliff:g id="EXIT_BUTTON">%s</xliff:g>ని ఎంచుకోండి."</string>
<string name="exit_button" msgid="5829638404777671253">"వెనుకకు"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"యాప్ను మూసివేయండి"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"వెనుకకు"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"సమస్య విశ్లేషణ డేటాను తెలుసుకోగలవు"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"కారు నుండి విశ్లేషణ డేటాను తెలుసుకోగలవు."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"సమస్య విశ్లేషణ డేటాను క్లియర్ చేయగలవు"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"కార్ వాచ్డాగ్ను ఉపయోగించండి"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"కార్ వాచ్డాగ్ను ఉపయోగించండి."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"నా పరికరం"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"అతిథి"</string>
</resources>
diff --git a/service/res/values-th/strings.xml b/service/res/values-th/strings.xml
index e0c3bdf..62b454a 100644
--- a/service/res/values-th/strings.xml
+++ b/service/res/values-th/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"จัดการเหตุการณ์การป้อนข้อมูล"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN Bus ล้มเหลว"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN Bus ไม่ตอบสนอง ถอดปลั๊กกล่องเครื่องเล่นวิทยุ (Headunit) แล้วเสียบกลับเข้าไป สตาร์ทรถอีกครั้ง"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"เพื่อความปลอดภัย กิจกรรมนี้จะไม่เปิดให้ใช้งานขณะขับรถ\nคุณต้องจอดรถให้เรียบร้อยก่อน จึงจะดำเนินการต่อได้"</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"คุณใช้ฟีเจอร์นี้ขณะขับรถไม่ได้"</string>
<string name="exit_button_message" msgid="8554690915924055685">"เลือก <xliff:g id="EXIT_BUTTON">%s</xliff:g> เพื่อเริ่มต้นใหม่โดยใช้ฟีเจอร์แอปที่ปลอดภัย"</string>
<string name="exit_button" msgid="5829638404777671253">"กลับ"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"ปิดแอป"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"กลับ"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"อ่านข้อมูลการวินิจฉัย"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"อ่านข้อมูลการวินิจฉัยจากรถ"</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"ล้างข้อมูลการวินิจฉัย"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"ใช้ Watchdog ในรถ"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"ใช้ Watchdog ในรถ"</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"อุปกรณ์ของฉัน"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"ผู้มาเยือน"</string>
</resources>
diff --git a/service/res/values-tl/strings.xml b/service/res/values-tl/strings.xml
index 8b9ca7e..47f4172 100644
--- a/service/res/values-tl/strings.xml
+++ b/service/res/values-tl/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Pangasiwaan ang mga event ng input"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Hindi gumana ang CAN bus"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Hindi tumugon ang CAN bus. Hugutin at muling isaksak ang headunit box at i-restart ang sasakyan"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Para sa seguridad, hindi available ang aktibidad habang nagmamaneho.\nPara magpatuloy, maghintay hanggang sa makaparada."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Hindi mo puwedeng gamitin ang feature na ito habang nagmamaneho"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Para magsimula sa mga ligtas na feature ng app, piliin ang <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Bumalik"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Isara ang app"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Bumalik"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"basahin ang data ng mga diagnostic"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Basahin ang data ng mga diagnostic mula sa sasakyan."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"i-clear ang data ng mga diagnostic"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"gamitin ang watchdog ng sasakyan"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Gamitin ang watchdog ng sasakyan."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Aking Device"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Bisita"</string>
</resources>
diff --git a/service/res/values-tr/strings.xml b/service/res/values-tr/strings.xml
index 6062d11..4419f98 100644
--- a/service/res/values-tr/strings.xml
+++ b/service/res/values-tr/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Giriş olaylarını işleme"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN veri yolu başarısız"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN veri yolu yanıt vermiyor. Ana birim kutusunu söküp tekrar takın ve aracı yeniden çalıştırın"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Güvenliğiniz için bu etkinlik sürüş sırasında gerçekleştirilemez.\nDevam etmek için park edene dek bekleyin."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Sürüş sırasında bu özelliği kullanamazsınız"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Güvenli uygulama özellikleriyle baştan başlamak için <xliff:g id="EXIT_BUTTON">%s</xliff:g> düğmesini seçin."</string>
<string name="exit_button" msgid="5829638404777671253">"Geri"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Uygulamayı kapat"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Geri"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"teşhis verilerini okuma"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Araçtan teşhis verilerini okuma."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"teşhis verilerini temizleme"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"araç güvenlik zamanlayıcısını kullan"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Araç güvenlik zamanlayıcısını kullan."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Cihazım"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Misafir"</string>
</resources>
diff --git a/service/res/values-uk/strings.xml b/service/res/values-uk/strings.xml
index 235494c..a7f6ef4 100644
--- a/service/res/values-uk/strings.xml
+++ b/service/res/values-uk/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Обробка вхідних подій"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Помилка CAN-шини"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN-шина не відповідає. Від’єднайте та знову під’єднайте головний пристрій аудіосистеми й заведіть автомобіль ще раз"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Задля вашої безпеки ці дії недоступні під час поїздки.\nЩоб продовжити, зупиніть автомобіль."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Ця функція недоступна під час руху"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Щоб почати знову з безпечними функціями додатка, натисніть кнопку \"<xliff:g id="EXIT_BUTTON">%s</xliff:g>\"."</string>
<string name="exit_button" msgid="5829638404777671253">"Назад"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Закрити додаток"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Назад"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"перегляд даних діагностики"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Перегляд даних діагностики автомобіля."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"очищення даних діагностики"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"використовувати сторожовий таймер автомобіля"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Використовувати сторожовий таймер автомобіля."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Мій пристрій"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Гість"</string>
</resources>
diff --git a/service/res/values-ur/strings.xml b/service/res/values-ur/strings.xml
index 0025f4a..01b7626 100644
--- a/service/res/values-ur/strings.xml
+++ b/service/res/values-ur/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="car_permission_label" msgid="741004755205554376">"کار کی معلومات تک رسائی حاصل کریں"</string>
- <string name="car_permission_desc" msgid="162499818870052725">"آپ کی کار کی معلومات تک رسائی حاصل کر سکتی ہیں"</string>
+ <string name="car_permission_desc" msgid="162499818870052725">"آپ کی کار کی معلومات تک رسائی حاصل کر سکتی ہیں۔"</string>
<string name="car_permission_label_camera" msgid="3725702064841827180">"کار کے کیمرے تک رسائی حاصل کریں"</string>
<string name="car_permission_desc_camera" msgid="917024932164501426">"اپنی کار کے کیمرے (کیمروں) تک رسائی حاصل کریں۔"</string>
<string name="car_permission_label_energy" msgid="7409144323527821558">"کار کی انرجی کی معلومات تک رسائی حاصل کریں"</string>
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"ایونٹس کے ان پٹ کو ہینڈل کریں"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"کین بس ناکام ہو گئی"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"کین بس جواب نہیں دیتی ہے۔ ہیڈیونٹ باکس کو ان پلگ کر کے دوبارہ پلگ کریں اور کار کو دوبارہ شروع کریں"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"آپ کی حفاظت کے لیے یہ سرگرمی آپ کے کار چلانے کے دوران دستیاب نہیں ہے۔\n جاری رکھنے کے لیے کار کے پارک ہونے تک انتظار کریں۔"</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"ڈرائیونگ کے دوران آپ یہ خصوصیت استعمال نہیں کر سکتے ہیں"</string>
<string name="exit_button_message" msgid="8554690915924055685">"محفوظ اپپ کی خصوصیات کے ساتھ شروع کرنے کے لیے <xliff:g id="EXIT_BUTTON">%s</xliff:g> پر کلک کریں۔"</string>
<string name="exit_button" msgid="5829638404777671253">"پیچھے"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"ایپ بند کریں"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"پیچھے"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"تشخیصی ڈیٹا پڑھیں"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"کار کے تشخیصی ڈیٹا کے بارے میں پڑھیں۔"</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"تشخیصی ڈیٹا صاف کریں"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"کار کے واچ ڈاگ کا ستعمال کریں"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"کار کے واچ ڈاگ کا ستعمال کریں۔"</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"میرا آلہ"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"مہمان"</string>
</resources>
diff --git a/service/res/values-uz/strings.xml b/service/res/values-uz/strings.xml
index 9186a3e..7f9e006 100644
--- a/service/res/values-uz/strings.xml
+++ b/service/res/values-uz/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Matn kiritish hodisalari bilan ishlash imkoniyati"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN shinalarida xatolik yuz berdi"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN javob bermayapti. Konnektorni chiqaring va qayta ulang, keyin avtomobilni oʻt oldiring"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Avtomobil haydayotganingizda bu harakatni amalga oshira olmaysiz.\nUni bajarish uchun avtomobilni toʻxtating."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Avtomobilda harakatlanayotganda bu funksiyadan foydalanish imkonsiz"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Ilovani xavfsiz rejimda ishga tushirish uchun <xliff:g id="EXIT_BUTTON">%s</xliff:g> tugmasini bosing."</string>
<string name="exit_button" msgid="5829638404777671253">"Orqaga"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Ilovani yopish"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Orqaga"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"diagnostika axborotini ochish"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Avtomobildan diagnostika axborotini olish."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"diagnostika axborotini tozalash"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"avtomobilni kuzatish tizimidan foydalanish."</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Avtomobilni kuzatish tizimidan foydalanish."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Qurilmam"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Mehmon"</string>
</resources>
diff --git a/service/res/values-vi/strings.xml b/service/res/values-vi/strings.xml
index 6af0b35..7426314 100644
--- a/service/res/values-vi/strings.xml
+++ b/service/res/values-vi/strings.xml
@@ -17,17 +17,17 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="car_permission_label" msgid="741004755205554376">"truy cập vào thông tin về ô tô"</string>
- <string name="car_permission_desc" msgid="162499818870052725">"Truy cập vào thông tin về ô tô."</string>
+ <string name="car_permission_desc" msgid="162499818870052725">"Truy cập vào thông tin ô tô của bạn."</string>
<string name="car_permission_label_camera" msgid="3725702064841827180">"truy cập vào camera ô tô"</string>
<string name="car_permission_desc_camera" msgid="917024932164501426">"Truy cập vào (các) camera trên ô tô."</string>
<string name="car_permission_label_energy" msgid="7409144323527821558">"truy cập vào thông tin về năng lượng của ô tô"</string>
- <string name="car_permission_desc_energy" msgid="3392963810053235407">"Truy cập vào thông tin về mức năng lượng trên ô tô."</string>
+ <string name="car_permission_desc_energy" msgid="3392963810053235407">"Truy cập vào thông tin về mức năng lượng trên ô tô của bạn."</string>
<string name="car_permission_label_adjust_range_remaining" msgid="839033553999920138">"điều chỉnh quãng đường còn đi được của ô tô"</string>
<string name="car_permission_desc_adjust_range_remaining" msgid="2369321650437370673">"Điều chỉnh giá trị quãng đường còn đi được của ô tô."</string>
<string name="car_permission_label_hvac" msgid="1499454192558727843">"truy cập vào hệ thống điều hòa không khí (hvac) của ô tô"</string>
<string name="car_permission_desc_hvac" msgid="3754229695589774195">"Truy cập vào hvac của ô tô."</string>
<string name="car_permission_label_mileage" msgid="4661317074631150551">"truy cập vào thông tin về quãng đường đi được của ô tô"</string>
- <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Truy cập vào thông tin về số dặm ô tô đã đi."</string>
+ <string name="car_permission_desc_mileage" msgid="7179735693278681090">"Truy cập vào thông tin về số dặm đã đi trên ô tô của bạn."</string>
<string name="car_permission_label_speed" msgid="1149027717860529745">"đọc tốc độ ô tô"</string>
<string name="car_permission_desc_speed" msgid="2047965198165448241">"Truy cập vào thông tin về tốc độ của ô tô."</string>
<string name="car_permission_label_vehicle_dynamics_state" msgid="313779267420048367">"truy cập vào trạng thái động của ô tô"</string>
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Xử lý sự kiện nhập"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Đường dẫn chính CAN không hoạt động"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Đường dẫn chính CAN không phản hồi. Rút rồi cắm lại hộp bộ đầu và khởi động lại ô tô"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Vì lý do an toàn, bạn không sử dụng được hoạt động này trong khi lái xe.\nHãy đợi cho tới khi bạn đỗ xe để tiếp tục."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Bạn không thể dùng tính năng này khi đang lái xe"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Để bắt đầu lại với các tính năng an toàn của ứng dụng, hãy chọn <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Quay lại"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Tắt ứng dụng"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Quay lại"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"đọc dữ liệu chẩn đoán"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Đọc dữ liệu chẩn đoán từ ô tô."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"xóa dữ liệu chẩn đoán"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"dùng dịch vụ theo dõi tình trạng xe"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Dùng dịch vụ theo dõi tình trạng xe."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Thiết bị của tôi"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Khách"</string>
</resources>
diff --git a/service/res/values-zh-rCN/strings.xml b/service/res/values-zh-rCN/strings.xml
index f9de733..8357acc 100644
--- a/service/res/values-zh-rCN/strings.xml
+++ b/service/res/values-zh-rCN/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"处理输入事件"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"CAN 总线故障"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"CAN 总线没有响应。请将主机盒插头拔下并插回,然后重新启动汽车"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"为了确保您的安全,您无法在开车时执行这项活动。\n要继续,请先停车。"</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"您不能在驾车时使用此功能"</string>
<string name="exit_button_message" msgid="8554690915924055685">"要重新开始使用安全的应用功能,请选择<xliff:g id="EXIT_BUTTON">%s</xliff:g>。"</string>
<string name="exit_button" msgid="5829638404777671253">"返回"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"关闭应用"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"返回"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"读取诊断数据"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"读取汽车的诊断数据。"</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"清除诊断数据"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"使用汽车监控定时器"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"使用汽车监控定时器。"</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"我的设备"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"访客"</string>
</resources>
diff --git a/service/res/values-zh-rHK/strings.xml b/service/res/values-zh-rHK/strings.xml
index 45ddc60..1510099 100644
--- a/service/res/values-zh-rHK/strings.xml
+++ b/service/res/values-zh-rHK/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"處理輸入活動"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"控制器區域網路操作失敗"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"控制器區域網路未有回覆。請拔除並重新插上汽車音響主機,然後重新啟動汽車"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"基於安全理由,駕駛時無法執行此操作。\n如要繼續,請留待泊車後操作。"</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"您無法在駕駛時使用此功能"</string>
<string name="exit_button_message" msgid="8554690915924055685">"如要以安全應用程式功能重新啟動,請選擇 <xliff:g id="EXIT_BUTTON">%s</xliff:g>。"</string>
<string name="exit_button" msgid="5829638404777671253">"返回"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"關閉應用程式"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"返回"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"讀取診斷資料"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"讀取來自汽車的診斷資料。"</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"清除診斷資料"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"使用汽車監控服務"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"使用汽車監控服務。"</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"我的裝置"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"訪客"</string>
</resources>
diff --git a/service/res/values-zh-rTW/strings.xml b/service/res/values-zh-rTW/strings.xml
index fc57e09..0de37a5 100644
--- a/service/res/values-zh-rTW/strings.xml
+++ b/service/res/values-zh-rTW/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"處理輸入事件"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"控制器區域網路發生問題"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"控制器區域網路無回應。請將主機盒插頭拔下並插回,然後重新啟動車輛"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"為了你的安全,開車期間不得進行這個活動。\n如要繼續,請先停車。"</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"開車時無法使用這項功能"</string>
<string name="exit_button_message" msgid="8554690915924055685">"如要使用安全應用程式功能重新啟動,請選取「離開」按鈕 <xliff:g id="EXIT_BUTTON">%s</xliff:g>。"</string>
<string name="exit_button" msgid="5829638404777671253">"返回"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"關閉應用程式"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"返回"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"讀取診斷資料"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"讀取車輛的診斷資料。"</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"清除診斷資料"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"使用車輛監控計時器"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"使用車輛監控計時器。"</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"我的裝置"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"訪客"</string>
</resources>
diff --git a/service/res/values-zu/strings.xml b/service/res/values-zu/strings.xml
index cd06d2f..ede8f50 100644
--- a/service/res/values-zu/strings.xml
+++ b/service/res/values-zu/strings.xml
@@ -72,9 +72,11 @@
<string name="car_permission_desc_bind_input_service" msgid="1670323419931890170">"Phatha imicimbi yokungena"</string>
<string name="car_can_bus_failure" msgid="2334035748788283914">"Ibhasi ye-CAN yehlulekile"</string>
<string name="car_can_bus_failure_desc" msgid="4125516222786484733">"Ibhasi ye-CAN ayiphenduli. Nqamula futhi uxhume ibhokisi le-headunit ukuze uqalise kabusha imoto"</string>
- <string name="activity_blocked_text" msgid="5342114426610711378">"Ngokuphepha kwakho, lo msebenzi awutholakali uma ushayela.\nUkuze uqhubeke, linda uze umiswe."</string>
+ <string name="activity_blocked_text" msgid="8088902789540147995">"Awukwazi ukusebenzisa lesi sici ngenkathi ushayela"</string>
<string name="exit_button_message" msgid="8554690915924055685">"Ukuze uqalise futhi ngezici zohlelo lokusebenza, khetha <xliff:g id="EXIT_BUTTON">%s</xliff:g>."</string>
<string name="exit_button" msgid="5829638404777671253">"Emuva"</string>
+ <string name="exit_button_close_application" msgid="8824289547809332460">"Vala uhlelo lokusebenza"</string>
+ <string name="exit_button_go_back" msgid="3469083862100560326">"Emuva"</string>
<string name="car_permission_label_diag_read" msgid="7248894224877702604">"funda idatha yokuxilonga"</string>
<string name="car_permission_desc_diag_read" msgid="1121426363040966178">"Ukufunda idatha yokuxilonga kusuka emotweni."</string>
<string name="car_permission_label_diag_clear" msgid="4783070510879698157">"sula idatha yokuxilonga"</string>
@@ -140,4 +142,5 @@
<string name="car_permission_label_use_car_watchdog" msgid="6973938293170413475">"sebenzisa unogada wemoto"</string>
<string name="car_permission_desc_use_car_watchdog" msgid="8244592601805516086">"Sebenzisa unogada wemoto."</string>
<string name="trust_device_default_name" msgid="4213625926070261253">"Idivayisi yami"</string>
+ <string name="default_guest_name" msgid="2912812799433131476">"Isihambeli"</string>
</resources>
diff --git a/service/res/values/config.xml b/service/res/values/config.xml
index d7400dc..089fed2 100644
--- a/service/res/values/config.xml
+++ b/service/res/values/config.xml
@@ -39,8 +39,6 @@
connection process. Disable this default to implement your own policy. -->
<bool name="useDefaultBluetoothConnectionPolicy">true</bool>
- <string name="inputService" translatable="false">android.car.input.service/.DefaultInputService</string>
-
<!-- Service responsible for displaying information on the car instrument cluster. -->
<string name="instrumentClusterRendererService" translatable="false">android.car.cluster/.ClusterRenderingService</string>
@@ -61,7 +59,7 @@
use format of "packagename/activity_classname" for tagging each activities.
For general guidelines to design distraction optimized apps, please refer
to Android Auto Driver Distraction Guidelines. -->
- <string name="activityWhitelist" translatable="false"></string>
+ <string name="activityAllowlist" translatable="false"></string>
<!-- Comma separated list of activities that need to be exempted from getting
blocked in a UX restricted state.
Format of each entry is either to specify package name to allowlist the whole package or
@@ -69,11 +67,11 @@
The current implementations expects the following system packages/activities to be
allowlisted. For general guidelines to design distraction optimized apps, please refer
to Android Auto Driver Distraction Guidelines. -->
- <string name="systemActivityWhitelist" translatable="false">com.android.systemui,com.google.android.permissioncontroller/com.android.permissioncontroller.permission.ui.GrantPermissionsActivity,com.android.permissioncontroller/com.android.permissioncontroller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity,com.android.mtp/com.android.mtp.ReceiverActivity,com.android.server.telecom/com.android.server.telecom.components.UserCallActivity</string>
+ <string name="systemActivityAllowlist" translatable="false">com.android.systemui,com.google.android.permissioncontroller/com.android.permissioncontroller.permission.ui.GrantPermissionsActivity,com.android.permissioncontroller/com.android.permissioncontroller.permission.ui.GrantPermissionsActivity,android/com.android.internal.app.ResolverActivity,com.android.mtp/com.android.mtp.ReceiverActivity,com.android.server.telecom/com.android.server.telecom.components.UserCallActivity</string>
<!-- Comma separated list of activities that will be blocked during restricted state.
Format of each entry is either to specify package name to allowlist the whole package
or use format of "packagename/activity_classname" for tagging each activities.-->
- <string name="activityBlacklist" translatable="false"></string>
+ <string name="activityDenylist" translatable="false"></string>
<!-- List of play store package names that are allowed sources of app installation-->
<string-array translatable="false" name="allowedAppInstallSources">
</string-array>
@@ -214,18 +212,6 @@
TODO(b/139497602): Remove dependency on Media Center, handle in CarMediaService -->
<string name="serviceMediaConnection" translatable="false">com.android.car.media</string>
- <!-- service/characteristics uuid for adding new escrow token -->
- <string name="enrollment_service_uuid" translatable="false">5e2a68a4-27be-43f9-8d1e-4546976fabd7</string>
- <string name="enrollment_server_write_uuid" translatable="false">5e2a68a5-27be-43f9-8d1e-4546976fabd7</string>
- <string name="enrollment_client_write_uuid" translatable="false">5e2a68a6-27be-43f9-8d1e-4546976fabd7</string>
-
- <!-- service/characteristics uuid for unlocking a device -->
- <string name="unlock_service_uuid" translatable="false">00003ac5-0000-1000-8000-00805f9b34fb</string>
- <string name="unlock_client_write_uuid" translatable="false">5e2a68a2-27be-43f9-8d1e-4546976fabd7</string>
- <string name="unlock_server_write_uuid" translatable="false">5e2a68a3-27be-43f9-8d1e-4546976fabd7</string>
-
- <string name="token_handle_shared_preferences" translatable="false">com.android.car.trust.TOKEN_HANDLE</string>
-
<!-- The package name of the default bugreport application that can use CarBugreportServiceManager.
There is no default bugreporting app.-->
<string name="config_car_bugreport_application" translatable="false"></string>
@@ -309,11 +295,6 @@
source in the car, for both playback and browse. -->
<bool name="config_mediaSourceIndependentPlayback">false</bool>
-
- <!-- Disable switching the user while the system is resuming from Suspend to RAM.
- This default says to prevent changing the user during Resume. -->
- <bool name="config_disableUserSwitchDuringResume" translatable="false">true</bool>
-
<!--
Specifies optional features that can be enabled by this image. Note that vhal can disable
them depending on product variation.
diff --git a/service/src/com/android/car/BluetoothDeviceConnectionPolicy.java b/service/src/com/android/car/BluetoothDeviceConnectionPolicy.java
index c0f393a..68e244c 100644
--- a/service/src/com/android/car/BluetoothDeviceConnectionPolicy.java
+++ b/service/src/com/android/car/BluetoothDeviceConnectionPolicy.java
@@ -18,8 +18,6 @@
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
-import android.car.hardware.power.CarPowerManager;
-import android.car.hardware.power.CarPowerManager.CarPowerStateListenerWithCompletion;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -28,9 +26,11 @@
import android.provider.Settings;
import android.util.Log;
+import com.android.car.power.SilentModeController;
+import com.android.internal.annotations.VisibleForTesting;
+
import java.io.PrintWriter;
import java.util.Objects;
-import java.util.concurrent.CompletableFuture;
/**
* A Bluetooth Device Connection policy that is specific to the use cases of a Car. Contains policy
@@ -46,54 +46,34 @@
private final BluetoothAdapter mBluetoothAdapter;
private final CarBluetoothService mCarBluetoothService;
- private CarPowerManager mCarPowerManager;
- private final CarPowerStateListenerWithCompletion mCarPowerStateListener =
- new CarPowerStateListenerWithCompletion() {
- @Override
- public void onStateChanged(int state, CompletableFuture<Void> future) {
- logd("Car power state has changed to " + state);
-
- // ON is the state when user turned on the car (it can be either ignition or
- // door unlock) the policy for ON is defined by OEMs and we can rely on that.
- if (state == CarPowerManager.CarPowerStateListener.ON) {
- logd("Car is powering on. Enable Bluetooth and auto-connect to devices");
- if (isBluetoothPersistedOn()) {
- enableBluetooth();
+ private final SilentModeController.SilentModeListener mSilentModeListener =
+ new SilentModeController.SilentModeListener() {
+ @Override
+ public void onModeChange(boolean isSilent) {
+ if (isSilent) {
+ // we'll turn off Bluetooth to disconnect devices and better the "off"
+ // illusion
+ logd("Car is going silent. Disable bluetooth adapter");
+ disableBluetooth();
+ } else {
+ if (isBluetoothPersistedOn()) {
+ enableBluetooth();
+ }
+ // The above isBluetoothPersistedOn() call is always true when the
+ // adapter is on, but can be true or false if the adapter is off. If we
+ // turned the adapter back on then this connectDevices() call would fail
+ // at first here but be caught by the following adapter on broadcast
+ // below. We'll only do this if the adapter is on.
+ if (mBluetoothAdapter.getState() == BluetoothAdapter.STATE_ON) {
+ connectDevices();
+ }
+ }
}
-
- // The above isBluetoothPersistedOn() call is always true when the adapter is on and
- // can be true or false if the adapter is off. If we are turned the adapter back on
- // then this connectDevices() call would fail at first here but be caught by the
- // following adapter on broadcast below. We'll only do this if the adapter is on
- if (mBluetoothAdapter.getState() == BluetoothAdapter.STATE_ON) {
- connectDevices();
- }
- return;
- }
-
- // Since we're appearing to be off after shutdown prepare, but may stay on in idle mode,
- // we'll turn off Bluetooth to disconnect devices and better the "off" illusion
- if (state == CarPowerManager.CarPowerStateListener.SHUTDOWN_PREPARE) {
- logd("Car is preparing for shutdown. Disable bluetooth adapter");
- disableBluetooth();
-
- // Let CPMS know we're ready to shutdown. Otherwise, CPMS will get stuck for
- // up to an hour.
- if (future != null) {
- future.complete(null);
- }
- return;
- }
- }
};
- /**
- * Get the policy's CarPowerStateListenerWithCompletion object
- *
- * For testing purposes only
- */
- public CarPowerStateListenerWithCompletion getCarPowerStateListener() {
- return mCarPowerStateListener;
+ @VisibleForTesting
+ public SilentModeController.SilentModeListener getSilentModeListener() {
+ return mSilentModeListener;
}
/**
@@ -167,12 +147,12 @@
profileFilter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
mContext.registerReceiverAsUser(mBluetoothBroadcastReceiver, UserHandle.CURRENT,
profileFilter, null, null);
- mCarPowerManager = CarLocalServices.createCarPowerManager(mContext);
- // CarLocalServices can fail to return a service.
- if (mCarPowerManager != null) {
- mCarPowerManager.setListenerWithCompletion(mCarPowerStateListener);
+ SilentModeController silentModeController = CarLocalServices.getService(
+ SilentModeController.class);
+ if (silentModeController != null) {
+ silentModeController.registerListener(mSilentModeListener);
} else {
- logd("Failed to get car power manager");
+ Log.w(TAG, "Cannot find SilentModeController");
}
// Since we do this only on start up and on user switch, it's safe to kick off a connect on
@@ -192,9 +172,10 @@
*/
public void release() {
logd("release()");
- if (mCarPowerManager != null) {
- mCarPowerManager.clearListener();
- mCarPowerManager = null;
+ SilentModeController silentModeController =
+ CarLocalServices.getService(SilentModeController.class);
+ if (silentModeController != null) {
+ silentModeController.unregisterListener(mSilentModeListener);
}
if (mBluetoothBroadcastReceiver != null) {
mContext.unregisterReceiver(mBluetoothBroadcastReceiver);
diff --git a/service/src/com/android/car/CarConfigurationService.java b/service/src/com/android/car/CarConfigurationService.java
deleted file mode 100644
index fe763d2..0000000
--- a/service/src/com/android/car/CarConfigurationService.java
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright (C) 2018 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.car;
-
-import android.annotation.Nullable;
-import android.annotation.RawRes;
-import android.car.settings.ICarConfigurationManager;
-import android.car.settings.SpeedBumpConfiguration;
-import android.content.Context;
-import android.util.Log;
-
-import com.android.internal.annotations.VisibleForTesting;
-
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import java.io.PrintWriter;
-
-/**
- * A service that will look at a default JSON configuration file on the system and parses out its
- * results.
- *
- * <p>This service will look for the JSON file that is mapped to {@code R.raw.car_config}. If this
- * value does not exist or is malformed, then this service will not fail; instead, it returns
- * default values for various configurations.
- */
-public class CarConfigurationService extends ICarConfigurationManager.Stub
- implements CarServiceBase {
- private static final String TAG = "CarConfigurationService";
-
- // Keys for accessing data in the parsed JSON related to SpeedBump.
- @VisibleForTesting
- static final String SPEED_BUMP_CONFIG_KEY = "SpeedBump";
- @VisibleForTesting
- static final String SPEED_BUMP_ACQUIRED_PERMITS_PER_SECOND_KEY =
- "acquiredPermitsPerSecond";
- @VisibleForTesting
- static final String SPEED_BUMP_MAX_PERMIT_POOL_KEY = "maxPermitPool";
- @VisibleForTesting
- static final String SPEED_BUMP_PERMIT_FILL_DELAY_KEY = "permitFillDelay";
-
- // Default values for speed bump configuration.
- @VisibleForTesting
- static final double DEFAULT_SPEED_BUMP_ACQUIRED_PERMITS_PER_SECOND = 0.5d;
- @VisibleForTesting
- static final double DEFAULT_SPEED_BUMP_MAX_PERMIT_POOL = 5d;
- @VisibleForTesting
- static final long DEFAULT_SPEED_BUMP_PERMIT_FILL_DELAY = 600L;
-
- private final Context mContext;
- private final JsonReader mJsonReader;
-
- @VisibleForTesting
- @Nullable
- JSONObject mConfigFile;
-
- @Nullable
- private SpeedBumpConfiguration mSpeedBumpConfiguration;
-
- /**
- * An interface that abstracts away the parsing of a JSON file. This interface allows the
- * JSON file to be mocked away for testing.
- */
- @VisibleForTesting
- interface JsonReader {
- /**
- * Returns the contents of the JSON file that is pointed to by the given {@code resId} as
- * a string.
- *
- * @param context The current Context.
- * @param resId The resource id of the JSON file.
- * @return A string representation of the file or {@code null} if an error occurred.
- */
- @Nullable
- String jsonFileToString(Context context, @RawRes int resId);
- }
-
- CarConfigurationService(Context context, JsonReader reader) {
- mContext = context;
- mJsonReader = reader;
- }
-
- /**
- * Returns the configuration values for speed bump that is found in the configuration JSON on
- * the system. If there was an error reading this JSON or the JSON did not contain
- * speed bump configuration, then default values will be returned. This method does not return
- * {@code null}.
- */
- @Override
- public SpeedBumpConfiguration getSpeedBumpConfiguration() {
- if (mSpeedBumpConfiguration == null) {
- return getDefaultSpeedBumpConfiguration();
- }
- return mSpeedBumpConfiguration;
- }
-
- @Override
- public synchronized void init() {
- String jsonString = mJsonReader.jsonFileToString(mContext, R.raw.car_config);
- if (jsonString != null) {
- try {
- mConfigFile = new JSONObject(jsonString);
- } catch (JSONException e) {
- Log.e(TAG, "Error reading JSON file", e);
- }
- }
-
- mSpeedBumpConfiguration = createSpeedBumpConfiguration();
- }
-
- @Override
- public synchronized void release() {
- mConfigFile = null;
- mSpeedBumpConfiguration = null;
- }
-
- @Override
- public void dump(PrintWriter writer) {
- writer.println("*CarConfigurationService*");
- writer.println("Config value initialized: " + (mConfigFile != null));
- if (mConfigFile != null) {
- try {
- writer.println("Config: " + mConfigFile.toString(/* indentSpaces= */ 2));
- } catch (JSONException e) {
- Log.e(TAG, "Error printing JSON config", e);
- writer.println("Config: " + mConfigFile);
- }
- }
-
- writer.println("SpeedBumpConfig initialized: " + (mSpeedBumpConfiguration != null));
- if (mSpeedBumpConfiguration != null) {
- writer.println("SpeedBumpConfig: " + mSpeedBumpConfiguration);
- }
- }
-
- /**
- * Reads the configuration for speed bump off of the parsed JSON stored in {@link #mConfigFile}.
- * If {@code mConfigFile} is {@code null} or a configuration does not exist for speed bump,
- * then return the default configuration created by {@link #getDefaultSpeedBumpConfiguration()}.
- */
- private SpeedBumpConfiguration createSpeedBumpConfiguration() {
- if (mConfigFile == null) {
- return getDefaultSpeedBumpConfiguration();
- }
-
- try {
- JSONObject speedBumpJson = mConfigFile.getJSONObject(SPEED_BUMP_CONFIG_KEY);
-
- if (speedBumpJson != null) {
- return new SpeedBumpConfiguration(
- speedBumpJson.getDouble(SPEED_BUMP_ACQUIRED_PERMITS_PER_SECOND_KEY),
- speedBumpJson.getDouble(SPEED_BUMP_MAX_PERMIT_POOL_KEY),
- speedBumpJson.getLong(SPEED_BUMP_PERMIT_FILL_DELAY_KEY));
- }
- } catch (JSONException e) {
- Log.e(TAG, "Error parsing SpeedBumpConfiguration; returning default values", e);
- }
-
- // If an error is encountered or the JSON does not contain an entry for speed bump
- // configuration, then return default values.
- return getDefaultSpeedBumpConfiguration();
- }
-
- private SpeedBumpConfiguration getDefaultSpeedBumpConfiguration() {
- return new SpeedBumpConfiguration(
- DEFAULT_SPEED_BUMP_ACQUIRED_PERMITS_PER_SECOND,
- DEFAULT_SPEED_BUMP_MAX_PERMIT_POOL,
- DEFAULT_SPEED_BUMP_PERMIT_FILL_DELAY);
- }
-}
diff --git a/service/src/com/android/car/CarFeatureController.java b/service/src/com/android/car/CarFeatureController.java
index 1742e4f..606963b 100644
--- a/service/src/com/android/car/CarFeatureController.java
+++ b/service/src/com/android/car/CarFeatureController.java
@@ -64,12 +64,10 @@
Car.AUDIO_SERVICE,
Car.BLUETOOTH_SERVICE,
Car.CAR_BUGREPORT_SERVICE,
- Car.CAR_CONFIGURATION_SERVICE,
Car.CAR_DRIVING_STATE_SERVICE,
Car.CAR_INPUT_SERVICE,
Car.CAR_MEDIA_SERVICE,
Car.CAR_OCCUPANT_ZONE_SERVICE,
- Car.CAR_TRUST_AGENT_ENROLLMENT_SERVICE,
Car.CAR_USER_SERVICE,
Car.CAR_UX_RESTRICTION_SERVICE,
Car.INFO_SERVICE,
@@ -105,7 +103,7 @@
private static final String FEATURE_CONFIG_FILE_NAME = "car_feature_config.txt";
- // Last line starts with this with number of features for extra sanity check.
+ // Last line starts with this with number of features for extra confidence check.
private static final String CONFIG_FILE_LAST_LINE_MARKER = ",,";
// Set once in constructor and not updated. Access it without lock so that it can be accessed
diff --git a/service/src/com/android/car/CarInputService.java b/service/src/com/android/car/CarInputService.java
index 222e760..86e3b5b 100644
--- a/service/src/com/android/car/CarInputService.java
+++ b/service/src/com/android/car/CarInputService.java
@@ -15,6 +15,7 @@
*/
package com.android.car;
+import static android.car.CarOccupantZoneManager.DisplayTypeEnum;
import static android.hardware.input.InputManager.INJECT_INPUT_EVENT_MODE_ASYNC;
import static android.service.voice.VoiceInteractionSession.SHOW_SOURCE_PUSH_TO_TALK;
@@ -25,42 +26,37 @@
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothHeadsetClient;
import android.bluetooth.BluetoothProfile;
+import android.car.CarOccupantZoneManager;
import android.car.CarProjectionManager;
-import android.car.input.CarInputHandlingService;
-import android.car.input.CarInputHandlingService.InputFilter;
import android.car.input.CarInputManager;
+import android.car.input.CustomInputEvent;
import android.car.input.ICarInput;
import android.car.input.ICarInputCallback;
-import android.car.input.ICarInputListener;
import android.car.input.RotaryEvent;
import android.car.user.CarUserManager;
-import android.car.userlib.UserHelper;
-import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
-import android.content.ServiceConnection;
+import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.hardware.input.InputManager;
import android.net.Uri;
-import android.os.Binder;
import android.os.Bundle;
import android.os.Handler;
-import android.os.IBinder;
import android.os.Looper;
-import android.os.Parcel;
-import android.os.RemoteException;
import android.os.UserHandle;
import android.provider.CallLog.Calls;
import android.provider.Settings;
import android.telecom.TelecomManager;
import android.text.TextUtils;
import android.util.Log;
+import android.view.Display;
import android.view.InputDevice;
import android.view.KeyEvent;
import android.view.ViewConfiguration;
import com.android.car.hal.InputHalService;
+import com.android.car.internal.common.UserHelperLite;
import com.android.car.user.CarUserService;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
@@ -164,12 +160,10 @@
private final Context mContext;
private final InputHalService mInputHalService;
private final CarUserService mUserService;
+ private final CarOccupantZoneService mCarOccupantZoneService;
private final TelecomManager mTelecomManager;
private final AssistUtils mAssistUtils;
- // The ComponentName of the CarInputListener service. Can be changed via resource overlay,
- // or overridden directly for testing.
- @Nullable
- private final ComponentName mCustomInputServiceComponent;
+
// The default handler for main-display input events. By default, injects the events into
// the input queue via InputManager, but can be overridden for testing.
private final KeyEventListener mMainDisplayHandler;
@@ -197,56 +191,8 @@
@GuardedBy("mLock")
private KeyEventListener mInstrumentClusterKeyListener;
- @GuardedBy("mLock")
- @VisibleForTesting
- ICarInputListener mCarInputListener;
-
- @GuardedBy("mLock")
- private boolean mCarInputListenerBound = false;
-
- // Maps display -> keycodes handled.
- @GuardedBy("mLock")
- private final SetMultimap<Integer, Integer> mHandledKeys = new SetMultimap<>();
-
private final InputCaptureClientController mCaptureController;
- private final Binder mCallback = new Binder() {
- @Override
- protected boolean onTransact(int code, Parcel data, Parcel reply, int flags) {
- if (code == CarInputHandlingService.INPUT_CALLBACK_BINDER_CODE) {
- data.setDataPosition(0);
- InputFilter[] handledKeys = (InputFilter[]) data.createTypedArray(
- InputFilter.CREATOR);
- if (handledKeys != null) {
- setHandledKeys(handledKeys);
- }
- return true;
- }
- return false;
- }
- };
-
- private final ServiceConnection mInputServiceConnection = new ServiceConnection() {
- @Override
- public void onServiceConnected(ComponentName name, IBinder binder) {
- if (DBG) {
- Log.d(CarLog.TAG_INPUT, "onServiceConnected, name: "
- + name + ", binder: " + binder);
- }
- synchronized (mLock) {
- mCarInputListener = ICarInputListener.Stub.asInterface(binder);
- }
- }
-
- @Override
- public void onServiceDisconnected(ComponentName name) {
- Log.d(CarLog.TAG_INPUT, "onServiceDisconnected, name: " + name);
- synchronized (mLock) {
- mCarInputListener = null;
- }
- }
- };
-
private final BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
// BluetoothHeadsetClient set through mBluetoothProfileServiceListener, and used by
@@ -284,13 +230,6 @@
}
};
- @Nullable
- private static ComponentName getDefaultInputComponent(Context context) {
- String carInputService = context.getString(R.string.inputService);
- return TextUtils.isEmpty(carInputService)
- ? null : ComponentName.unflattenFromString(carInputService);
- }
-
private static int getViewLongPressDelay(ContentResolver cr) {
return Settings.Secure.getIntForUser(
cr,
@@ -300,32 +239,34 @@
}
public CarInputService(Context context, InputHalService inputHalService,
- CarUserService userService) {
- this(context, inputHalService, userService, new Handler(Looper.getMainLooper()),
+ CarUserService userService, CarOccupantZoneService occupantZoneService) {
+ this(context, inputHalService, userService, occupantZoneService,
+ new Handler(Looper.getMainLooper()),
context.getSystemService(TelecomManager.class), new AssistUtils(context),
event ->
context.getSystemService(InputManager.class)
.injectInputEvent(event, INJECT_INPUT_EVENT_MODE_ASYNC),
() -> Calls.getLastOutgoingCall(context),
- getDefaultInputComponent(context),
- () -> getViewLongPressDelay(context.getContentResolver()));
+ () -> getViewLongPressDelay(context.getContentResolver()),
+ new InputCaptureClientController(context));
}
@VisibleForTesting
CarInputService(Context context, InputHalService inputHalService, CarUserService userService,
- Handler handler, TelecomManager telecomManager, AssistUtils assistUtils,
- KeyEventListener mainDisplayHandler, Supplier<String> lastCalledNumberSupplier,
- @Nullable ComponentName customInputServiceComponent,
- IntSupplier longPressDelaySupplier) {
+ CarOccupantZoneService occupantZoneService, Handler handler,
+ TelecomManager telecomManager, AssistUtils assistUtils,
+ KeyEventListener mainDisplayHandler,
+ Supplier<String> lastCalledNumberSupplier, IntSupplier longPressDelaySupplier,
+ InputCaptureClientController captureController) {
mContext = context;
- mCaptureController = new InputCaptureClientController(context);
+ mCaptureController = captureController;
mInputHalService = inputHalService;
mUserService = userService;
+ mCarOccupantZoneService = occupantZoneService;
mTelecomManager = telecomManager;
mAssistUtils = assistUtils;
mMainDisplayHandler = mainDisplayHandler;
mLastCalledNumberSupplier = lastCalledNumberSupplier;
- mCustomInputServiceComponent = customInputServiceComponent;
mLongPressDelaySupplier = longPressDelaySupplier;
mVoiceKeyTimer =
@@ -337,16 +278,6 @@
mRotaryServiceComponentName = mContext.getString(R.string.rotaryService);
}
- @VisibleForTesting
- void setHandledKeys(InputFilter[] handledKeys) {
- synchronized (mLock) {
- mHandledKeys.clear();
- for (InputFilter handledKey : handledKeys) {
- mHandledKeys.put(handledKey.mTargetDisplay, handledKey.mKeyCode);
- }
- }
- }
-
/**
* Set projection key event listener. If null, unregister listener.
*/
@@ -362,6 +293,9 @@
}
}
+ /**
+ * Sets the instrument cluster key event listener.
+ */
public void setInstrumentClusterKeyListener(KeyEventListener listener) {
synchronized (mLock) {
mInstrumentClusterKeyListener = listener;
@@ -378,9 +312,6 @@
}
mInputHalService.setInputListener(this);
- synchronized (mLock) {
- mCarInputListenerBound = bindCarInputService();
- }
if (mBluetoothAdapter != null) {
mBluetoothAdapter.getProfileProxy(
mContext, mBluetoothProfileServiceListener, BluetoothProfile.HEADSET_CLIENT);
@@ -396,10 +327,6 @@
mProjectionKeyEventHandler = null;
mProjectionKeyEventsSubscribed.clear();
mInstrumentClusterKeyListener = null;
- if (mCarInputListenerBound) {
- mContext.unbindService(mInputServiceConnection);
- mCarInputListenerBound = false;
- }
if (mBluetoothHeadsetClient != null) {
mBluetoothAdapter.closeProfileProxy(
BluetoothProfile.HEADSET_CLIENT, mBluetoothHeadsetClient);
@@ -412,22 +339,7 @@
}
@Override
- public void onKeyEvent(KeyEvent event, int targetDisplay) {
- // Give a car specific input listener the opportunity to intercept any input from the car
- ICarInputListener carInputListener;
- synchronized (mLock) {
- carInputListener = mCarInputListener;
- }
- if (carInputListener != null && isCustomEventHandler(event, targetDisplay)) {
- try {
- carInputListener.onKeyEvent(event, targetDisplay);
- } catch (RemoteException e) {
- Log.e(CarLog.TAG_INPUT, "Error while calling car input service", e);
- }
- // Custom input service handled the event, nothing more to do here.
- return;
- }
-
+ public void onKeyEvent(KeyEvent event, @DisplayTypeEnum int targetDisplay) {
// Special case key code that have special "long press" handling for automotive
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_VOICE_ASSIST:
@@ -441,10 +353,10 @@
}
// Allow specifically targeted keys to be routed to the cluster
- if (targetDisplay == InputHalService.DISPLAY_INSTRUMENT_CLUSTER) {
+ if (targetDisplay == CarOccupantZoneManager.DISPLAY_TYPE_INSTRUMENT_CLUSTER) {
handleInstrumentClusterKey(event);
} else {
- if (mCaptureController.onKeyEvent(CarInputManager.TARGET_DISPLAY_TYPE_MAIN, event)) {
+ if (mCaptureController.onKeyEvent(CarOccupantZoneManager.DISPLAY_TYPE_MAIN, event)) {
return;
}
mMainDisplayHandler.onKeyEvent(event);
@@ -452,7 +364,7 @@
}
@Override
- public void onRotaryEvent(RotaryEvent event, int targetDisplay) {
+ public void onRotaryEvent(RotaryEvent event, @DisplayTypeEnum int targetDisplay) {
if (!mCaptureController.onRotaryEvent(targetDisplay, event)) {
List<KeyEvent> keyEvents = rotaryEventToKeyEvents(event);
for (KeyEvent keyEvent : keyEvents) {
@@ -461,6 +373,17 @@
}
}
+ @Override
+ public void onCustomInputEvent(CustomInputEvent event) {
+ if (!mCaptureController.onCustomInputEvent(event)) {
+ Log.w(CarLog.TAG_INPUT, "Failed to propagate " + event);
+ return;
+ }
+ if (DBG) {
+ Log.d(CarLog.TAG_INPUT, "Succeed injecting " + event);
+ }
+ }
+
private static List<KeyEvent> rotaryEventToKeyEvents(RotaryEvent event) {
int numClicks = event.getNumberOfClicks();
int numEvents = numClicks * 2; // up / down per each click
@@ -508,21 +431,56 @@
}
@Override
- public int requestInputEventCapture(ICarInputCallback callback, int targetDisplayType,
+ public int requestInputEventCapture(ICarInputCallback callback,
+ @DisplayTypeEnum int targetDisplayType,
int[] inputTypes, int requestFlags) {
return mCaptureController.requestInputEventCapture(callback, targetDisplayType, inputTypes,
requestFlags);
}
@Override
- public void releaseInputEventCapture(ICarInputCallback callback, int targetDisplayType) {
+ public void releaseInputEventCapture(ICarInputCallback callback,
+ @DisplayTypeEnum int targetDisplayType) {
mCaptureController.releaseInputEventCapture(callback, targetDisplayType);
}
- private boolean isCustomEventHandler(KeyEvent event, int targetDisplay) {
- synchronized (mLock) {
- return mHandledKeys.containsEntry(targetDisplay, event.getKeyCode());
+ /**
+ * Injects the {@link KeyEvent} passed as parameter against Car Input API.
+ * <p>
+ * The event's display id will be overridden accordingly to the display type (it will be
+ * retrieved from {@link CarOccupantZoneService}).
+ *
+ * @param event the event to inject
+ * @param targetDisplayType the display type associated with the event
+ * @throws SecurityException when caller doesn't have INJECT_EVENTS permission granted
+ */
+ @Override
+ public void injectKeyEvent(KeyEvent event, @DisplayTypeEnum int targetDisplayType) {
+ // Permission check
+ if (PackageManager.PERMISSION_GRANTED != mContext.checkCallingOrSelfPermission(
+ android.Manifest.permission.INJECT_EVENTS)) {
+ throw new SecurityException("Injecting KeyEvent requires INJECT_EVENTS permission");
}
+
+ // Setting display id for driver user id (currently MAIN and CLUSTER display types are
+ // linked to driver user only)
+ int driverUserId = mCarOccupantZoneService.getDriverUserId();
+ int driverZoneId = mCarOccupantZoneService.getOccupantZoneIdForUserId(driverUserId);
+ int newDisplayId = mCarOccupantZoneService.getDisplayForOccupant(driverZoneId,
+ targetDisplayType);
+
+ // Sets KeyEvent display id
+ int oldDisplayId = event.getDisplayId();
+ if (oldDisplayId != Display.INVALID_DISPLAY && oldDisplayId != newDisplayId) {
+ Log.w(CarLog.TAG_INPUT, "Incoming KeyEvent parameter is expected to be set "
+ + "with INVALID_DISPLAY or the display id associated with driver user id ("
+ + "which is {" + newDisplayId + "}), but instead was set with {"
+ + oldDisplayId + "}");
+ }
+ event.setDisplayId(newDisplayId);
+
+ // Redirect event to onKeyEvent
+ onKeyEvent(event, targetDisplayType);
}
private void handleVoiceAssistKey(KeyEvent event) {
@@ -705,33 +663,12 @@
@Override
public void dump(PrintWriter writer) {
writer.println("*Input Service*");
- writer.println("mCustomInputServiceComponent: " + mCustomInputServiceComponent);
- synchronized (mLock) {
- writer.println("mCarInputListenerBound: " + mCarInputListenerBound);
- writer.println("mCarInputListener: " + mCarInputListener);
- }
writer.println("Long-press delay: " + mLongPressDelaySupplier.getAsInt() + "ms");
mCaptureController.dump(writer);
}
- private boolean bindCarInputService() {
- if (mCustomInputServiceComponent == null) {
- Log.i(CarLog.TAG_INPUT, "Custom input service was not configured");
- return false;
- }
-
- Log.d(CarLog.TAG_INPUT, "bindCarInputService, component: " + mCustomInputServiceComponent);
-
- Intent intent = new Intent();
- Bundle extras = new Bundle();
- extras.putBinder(CarInputHandlingService.INPUT_CALLBACK_BINDER_KEY, mCallback);
- intent.putExtras(extras);
- intent.setComponent(mCustomInputServiceComponent);
- return mContext.bindService(intent, mInputServiceConnection, Context.BIND_AUTO_CREATE);
- }
-
private void updateRotaryServiceSettings(@UserIdInt int userId) {
- if (UserHelper.isHeadlessSystemUser(userId)) {
+ if (UserHelperLite.isHeadlessSystemUser(userId)) {
return;
}
ContentResolver contentResolver = mContext.getContentResolver();
diff --git a/service/src/com/android/car/CarLocalServices.java b/service/src/com/android/car/CarLocalServices.java
index ea1b6f1..511f157 100644
--- a/service/src/com/android/car/CarLocalServices.java
+++ b/service/src/com/android/car/CarLocalServices.java
@@ -23,6 +23,7 @@
import android.util.ArrayMap;
import android.util.Log;
+import com.android.car.power.CarPowerManagementService;
import com.android.internal.annotations.VisibleForTesting;
/**
diff --git a/service/src/com/android/car/CarLog.java b/service/src/com/android/car/CarLog.java
index a9b7dd4..c2f2958 100644
--- a/service/src/com/android/car/CarLog.java
+++ b/service/src/com/android/car/CarLog.java
@@ -42,6 +42,7 @@
public static final String TAG_PROPERTY = "CAR.PROPERTY";
public static final String TAG_SENSOR = "CAR.SENSOR";
public static final String TAG_SERVICE = "CAR.SERVICE";
+ public static final String TAG_SILENT = "CAR.SILENT";
public static final String TAG_STORAGE = "CAR.STORAGE";
public static final String TAG_SYS = "CAR.SYS";
public static final String TAG_TEST = "CAR.TEST";
diff --git a/service/src/com/android/car/CarMediaService.java b/service/src/com/android/car/CarMediaService.java
index c35578b..bc3ca96 100644
--- a/service/src/com/android/car/CarMediaService.java
+++ b/service/src/com/android/car/CarMediaService.java
@@ -18,6 +18,8 @@
import static android.car.media.CarMediaManager.MEDIA_SOURCE_MODE_BROWSE;
import static android.car.media.CarMediaManager.MEDIA_SOURCE_MODE_PLAYBACK;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.annotation.TestApi;
import android.app.ActivityManager;
import android.car.Car;
@@ -55,9 +57,7 @@
import android.text.TextUtils;
import android.util.Log;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
+import com.android.car.power.SilentModeController;
import com.android.car.user.CarUserService;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
@@ -108,15 +108,23 @@
private final MediaSessionUpdater mMediaSessionUpdater = new MediaSessionUpdater();
@GuardedBy("mLock")
private ComponentName[] mPrimaryMediaComponents = new ComponentName[MEDIA_SOURCE_MODES];
- private SharedPreferences mSharedPrefs;
// MediaController for the current active user's active media session. This controller can be
// null if playback has not been started yet.
+ @GuardedBy("mLock")
private MediaController mActiveUserMediaController;
+ @GuardedBy("mLock")
+ private int mCurrentPlaybackState;
+ @GuardedBy("mLock")
+ private boolean mIsSilentMode;
+ @GuardedBy("mLock")
+ private boolean mWasPreviouslySilentMode;
+ @GuardedBy("mLock")
+ private boolean mWasPlayingBeforeGoingSilent;
+ private SharedPreferences mSharedPrefs;
private SessionChangedListener mSessionsListener;
private int mPlayOnMediaSourceChangedConfig;
private int mPlayOnBootConfig;
private boolean mIndependentPlaybackConfig;
- private int mCurrentPlaybackState;
private boolean mPendingInit;
@@ -248,6 +256,7 @@
public void init() {
int currentUser = ActivityManager.getCurrentUser();
maybeInitUser(currentUser);
+ setSilentModeListener();
}
private void maybeInitUser(int userId) {
@@ -267,29 +276,31 @@
// credential encrypted storage are not available until after user 0 is unlocked.
// initUser() is called when the current foreground user is unlocked, and by that time user
// 0 has been unlocked already, so initializing SharedPreferences in initUser() is fine.
- if (mSharedPrefs == null) {
- mSharedPrefs = mContext.getSharedPreferences(SHARED_PREF, Context.MODE_PRIVATE);
+ synchronized (mLock) {
+ if (mSharedPrefs == null) {
+ mSharedPrefs = mContext.getSharedPreferences(SHARED_PREF, Context.MODE_PRIVATE);
+ }
+
+ if (mIsPackageUpdateReceiverRegistered) {
+ mContext.unregisterReceiver(mPackageUpdateReceiver);
+ }
+ UserHandle currentUser = new UserHandle(userId);
+ mContext.registerReceiverAsUser(mPackageUpdateReceiver, currentUser,
+ mPackageUpdateFilter, null, null);
+ mIsPackageUpdateReceiverRegistered = true;
+
+ mPrimaryMediaComponents[MEDIA_SOURCE_MODE_PLAYBACK] = isCurrentUserEphemeral()
+ ? getDefaultMediaSource() : getLastMediaSource(MEDIA_SOURCE_MODE_PLAYBACK);
+ mPrimaryMediaComponents[MEDIA_SOURCE_MODE_BROWSE] = isCurrentUserEphemeral()
+ ? getDefaultMediaSource() : getLastMediaSource(MEDIA_SOURCE_MODE_BROWSE);
+ mActiveUserMediaController = null;
+
+ updateMediaSessionCallbackForCurrentUser();
+ notifyListeners(MEDIA_SOURCE_MODE_PLAYBACK);
+ notifyListeners(MEDIA_SOURCE_MODE_BROWSE);
+
+ startMediaConnectorService(shouldStartPlayback(mPlayOnBootConfig), currentUser);
}
-
- if (mIsPackageUpdateReceiverRegistered) {
- mContext.unregisterReceiver(mPackageUpdateReceiver);
- }
- UserHandle currentUser = new UserHandle(userId);
- mContext.registerReceiverAsUser(mPackageUpdateReceiver, currentUser,
- mPackageUpdateFilter, null, null);
- mIsPackageUpdateReceiverRegistered = true;
-
- mPrimaryMediaComponents[MEDIA_SOURCE_MODE_PLAYBACK] = isCurrentUserEphemeral()
- ? getDefaultMediaSource() : getLastMediaSource(MEDIA_SOURCE_MODE_PLAYBACK);
- mPrimaryMediaComponents[MEDIA_SOURCE_MODE_BROWSE] = isCurrentUserEphemeral()
- ? getDefaultMediaSource() : getLastMediaSource(MEDIA_SOURCE_MODE_BROWSE);
- mActiveUserMediaController = null;
-
- updateMediaSessionCallbackForCurrentUser();
- notifyListeners(MEDIA_SOURCE_MODE_PLAYBACK);
- notifyListeners(MEDIA_SOURCE_MODE_BROWSE);
-
- startMediaConnectorService(shouldStartPlayback(mPlayOnBootConfig), currentUser);
}
/**
@@ -327,6 +338,57 @@
return mUserManager.getUserInfo(ActivityManager.getCurrentUser()).isEphemeral();
}
+ // Sets a listener to be notified when Silent Mode changes.
+ // Basically, the listener pauses the audio when the system goes
+ // silent and resumes the audio when the system goes non-silent.
+ // This is called only from init().
+ private void setSilentModeListener() {
+ CarLocalServices.getService(SilentModeController.class).registerListener(
+ (isSilent) -> {
+ boolean weShouldBePlaying;
+ MediaController mediaController;
+ synchronized (mLock) {
+ boolean weArePlaying = mCurrentPlaybackState == PlaybackState.STATE_PLAYING;
+ mIsSilentMode = isSilent;
+ if (isSilent) {
+ if (!mWasPreviouslySilentMode) {
+ // We're entering Silent mode.
+ // Remember if we are playing at this transition.
+ mWasPlayingBeforeGoingSilent = weArePlaying;
+ mWasPreviouslySilentMode = true;
+ }
+ weShouldBePlaying = false;
+ } else {
+ mWasPreviouslySilentMode = false;
+ weShouldBePlaying = mWasPlayingBeforeGoingSilent;
+ }
+ if (weShouldBePlaying == weArePlaying) {
+ return;
+ }
+ // Make a change
+ mediaController = mActiveUserMediaController;
+ if (mediaController == null) {
+ return;
+ }
+ }
+ PlaybackState oldState = mediaController.getPlaybackState();
+ savePlaybackState(
+ // The new state is the same as the old state, except for play/pause
+ new PlaybackState.Builder(oldState)
+ .setState(weShouldBePlaying ? PlaybackState.STATE_PLAYING
+ : PlaybackState.STATE_PAUSED,
+ oldState.getPosition(),
+ oldState.getPlaybackSpeed())
+ .build());
+ if (weShouldBePlaying) {
+ mediaController.getTransportControls().play();
+ } else {
+ mediaController.getTransportControls().pause();
+ }
+ }
+ );
+ }
+
@Override
public void release() {
mMediaSessionUpdater.unregisterCallbacks();
@@ -335,31 +397,39 @@
@Override
public void dump(PrintWriter writer) {
- writer.println("*CarMediaService*");
- writer.println("\tCurrent playback media component: "
- + (mPrimaryMediaComponents[MEDIA_SOURCE_MODE_PLAYBACK] == null ? "-"
- : mPrimaryMediaComponents[MEDIA_SOURCE_MODE_PLAYBACK].flattenToString()));
- writer.println("\tCurrent browse media component: "
- + (mPrimaryMediaComponents[MEDIA_SOURCE_MODE_BROWSE] == null ? "-"
- : mPrimaryMediaComponents[MEDIA_SOURCE_MODE_BROWSE].flattenToString()));
- if (mActiveUserMediaController != null) {
- writer.println(
- "\tCurrent media controller: " + mActiveUserMediaController.getPackageName());
- writer.println(
- "\tCurrent browse service extra: " + getClassName(mActiveUserMediaController));
- }
- writer.println("\tNumber of active media sessions: " + mMediaSessionManager
- .getActiveSessionsForUser(null, ActivityManager.getCurrentUser()).size());
+ synchronized (mLock) {
+ writer.println("*CarMediaService*");
+ writer.println("\tCurrent playback media component: "
+ + (mPrimaryMediaComponents[MEDIA_SOURCE_MODE_PLAYBACK] == null ? "-"
+ : mPrimaryMediaComponents[MEDIA_SOURCE_MODE_PLAYBACK].flattenToString()));
+ writer.println("\tCurrent browse media component: "
+ + (mPrimaryMediaComponents[MEDIA_SOURCE_MODE_BROWSE] == null ? "-"
+ : mPrimaryMediaComponents[MEDIA_SOURCE_MODE_BROWSE].flattenToString()));
+ if (mActiveUserMediaController != null) {
+ writer.println(
+ "\tCurrent media controller: "
+ + mActiveUserMediaController.getPackageName());
+ writer.println(
+ "\tCurrent browse service extra: " + getClassName(
+ mActiveUserMediaController));
+ }
+ writer.println("\tNumber of active media sessions: " + mMediaSessionManager
+ .getActiveSessionsForUser(null, ActivityManager.getCurrentUser()).size());
- writer.println("\tPlayback media source history: ");
- for (ComponentName name : getLastMediaSources(MEDIA_SOURCE_MODE_PLAYBACK)) {
- writer.println("\t" + name.flattenToString());
+ writer.println("\tPlayback media source history: ");
+ for (ComponentName name : getLastMediaSources(MEDIA_SOURCE_MODE_PLAYBACK)) {
+ writer.println("\t" + name.flattenToString());
+ }
+ writer.println("\tBrowse media source history: ");
+ for (ComponentName name : getLastMediaSources(MEDIA_SOURCE_MODE_BROWSE)) {
+ writer.println("\t" + name.flattenToString());
+ }
+ writer.println("\tSilent state: " + (mIsSilentMode ? "Silent" : "Non-silent"));
+ if (mIsSilentMode) {
+ writer.println("\tBefore going Silent, audio was "
+ + (mWasPlayingBeforeGoingSilent ? "active" : "inactive"));
+ }
}
- writer.println("\tBrowse media source history: ");
- for (ComponentName name : getLastMediaSources(MEDIA_SOURCE_MODE_BROWSE)) {
- writer.println("\t" + name.flattenToString());
- }
-
}
/**
@@ -477,17 +547,20 @@
* to preserve the PlaybackState before stopping.
*/
private void stopAndUnregisterCallback() {
- if (mActiveUserMediaController != null) {
- mActiveUserMediaController.unregisterCallback(mMediaControllerCallback);
- if (Log.isLoggable(CarLog.TAG_MEDIA, Log.DEBUG)) {
- Log.d(CarLog.TAG_MEDIA, "stopping " + mActiveUserMediaController.getPackageName());
- }
- TransportControls controls = mActiveUserMediaController.getTransportControls();
- if (controls != null) {
- controls.stop();
- } else {
- Log.e(CarLog.TAG_MEDIA, "Can't stop playback, transport controls unavailable "
- + mActiveUserMediaController.getPackageName());
+ synchronized (mLock) {
+ if (mActiveUserMediaController != null) {
+ mActiveUserMediaController.unregisterCallback(mMediaControllerCallback);
+ if (Log.isLoggable(CarLog.TAG_MEDIA, Log.DEBUG)) {
+ Log.d(CarLog.TAG_MEDIA,
+ "stopping " + mActiveUserMediaController.getPackageName());
+ }
+ TransportControls controls = mActiveUserMediaController.getTransportControls();
+ if (controls != null) {
+ controls.stop();
+ } else {
+ Log.e(CarLog.TAG_MEDIA, "Can't stop playback, transport controls unavailable "
+ + mActiveUserMediaController.getPackageName());
+ }
}
}
}
@@ -584,8 +657,10 @@
// for the active source, check the active sessions for a matching controller. If this
// is called after a user switch, its possible for a matching controller to already be
// active before the user is unlocked, so we check all of the current controllers
- if (mActiveUserMediaController == null) {
- updateActiveMediaController(newControllers);
+ synchronized (mLock) {
+ if (mActiveUserMediaController == null) {
+ updateActiveMediaControllerLocked(newControllers);
+ }
}
}
@@ -625,8 +700,8 @@
private void setPlaybackMediaSource(ComponentName playbackMediaSource) {
stopAndUnregisterCallback();
- mActiveUserMediaController = null;
synchronized (mLock) {
+ mActiveUserMediaController = null;
mPrimaryMediaComponents[MEDIA_SOURCE_MODE_PLAYBACK] = playbackMediaSource;
}
@@ -648,9 +723,11 @@
// Reset current playback state for the new source, in the case that the app is in an error
// state (e.g. not signed in). This state will be updated from the app callback registered
// below, to make sure mCurrentPlaybackState reflects the current source only.
- mCurrentPlaybackState = PlaybackState.STATE_NONE;
- updateActiveMediaController(mMediaSessionManager
- .getActiveSessionsForUser(null, ActivityManager.getCurrentUser()));
+ synchronized (mLock) {
+ mCurrentPlaybackState = PlaybackState.STATE_NONE;
+ updateActiveMediaControllerLocked(mMediaSessionManager
+ .getActiveSessionsForUser(null, ActivityManager.getCurrentUser()));
+ }
}
private void setBrowseMediaSource(ComponentName browseMediaSource) {
@@ -690,9 +767,7 @@
private MediaController.Callback mMediaControllerCallback = new MediaController.Callback() {
@Override
public void onPlaybackStateChanged(PlaybackState state) {
- if (!isCurrentUserEphemeral()) {
- savePlaybackState(state);
- }
+ savePlaybackState(state);
}
};
@@ -853,8 +928,13 @@
if (!sharedPrefsInitialized()) {
return;
}
+ if (isCurrentUserEphemeral()) {
+ return;
+ }
int state = playbackState != null ? playbackState.getState() : PlaybackState.STATE_NONE;
- mCurrentPlaybackState = state;
+ synchronized (mLock) {
+ mCurrentPlaybackState = state;
+ }
String key = getPlaybackStateKey();
mSharedPrefs.edit().putInt(key, state).apply();
}
@@ -878,7 +958,7 @@
* Updates active media controller from the list that has the same component name as the primary
* media component. Clears callback and resets media controller to null if not found.
*/
- private void updateActiveMediaController(List<MediaController> mediaControllers) {
+ private void updateActiveMediaControllerLocked(List<MediaController> mediaControllers) {
if (mPrimaryMediaComponents[MEDIA_SOURCE_MODE_PLAYBACK] == null) {
return;
}
@@ -891,9 +971,7 @@
MEDIA_SOURCE_MODE_PLAYBACK)) {
mActiveUserMediaController = controller;
PlaybackState state = mActiveUserMediaController.getPlaybackState();
- if (!isCurrentUserEphemeral()) {
- savePlaybackState(state);
- }
+ savePlaybackState(state);
// Specify Handler to receive callbacks on, to avoid defaulting to the calling
// thread; this method can be called from the MediaSessionManager callback.
// Using the version of this method without passing a handler causes a
@@ -920,7 +998,9 @@
return mSharedPrefs.getInt(getPlaybackStateKey(), PlaybackState.STATE_NONE)
== PlaybackState.STATE_PLAYING;
case AUTOPLAY_CONFIG_RETAIN_PREVIOUS:
- return mCurrentPlaybackState == PlaybackState.STATE_PLAYING;
+ synchronized (mLock) {
+ return mCurrentPlaybackState == PlaybackState.STATE_PLAYING;
+ }
default:
Log.e(CarLog.TAG_MEDIA, "Unsupported playback configuration: " + config);
return false;
diff --git a/service/src/com/android/car/CarOccupantZoneService.java b/service/src/com/android/car/CarOccupantZoneService.java
index 261235b..a980770 100644
--- a/service/src/com/android/car/CarOccupantZoneService.java
+++ b/service/src/com/android/car/CarOccupantZoneService.java
@@ -47,20 +47,19 @@
import android.util.ArraySet;
import android.util.IntArray;
import android.util.Log;
+import android.util.SparseArray;
import android.util.SparseIntArray;
import android.view.Display;
import android.view.DisplayAddress;
+import com.android.car.internal.ICarServiceHelper;
import com.android.car.user.CarUserService;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.car.ICarServiceHelper;
import java.io.PrintWriter;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import java.util.Objects;
/**
@@ -71,6 +70,7 @@
private static final String TAG = CarLog.TAG_OCCUPANT;
private static final String ALL_COMPONENTS = "*";
+ private static final int INVALID_PORT = -1;
private final Object mLock = new Object();
private final Context mContext;
@@ -90,7 +90,7 @@
/** key: zone id */
@GuardedBy("mLock")
- private final HashMap<Integer, OccupantZoneInfo> mOccupantsConfig = new HashMap<>();
+ private final SparseArray<OccupantZoneInfo> mOccupantsConfig = new SparseArray<>();
@VisibleForTesting
static class DisplayConfig {
@@ -117,7 +117,7 @@
/** key: display port address */
@GuardedBy("mLock")
- private final HashMap<Integer, DisplayConfig> mDisplayConfigs = new HashMap<>();
+ private final SparseArray<DisplayConfig> mDisplayConfigs = new SparseArray<>();
/** key: audio zone id */
@GuardedBy("mLock")
@@ -175,7 +175,7 @@
/** key : zoneId */
@GuardedBy("mLock")
- private final HashMap<Integer, OccupantConfig> mActiveOccupantConfigs = new HashMap<>();
+ private final SparseArray<OccupantConfig> mActiveOccupantConfigs = new SparseArray<>();
@GuardedBy("mLock")
private ICarServiceHelper mICarServiceHelper;
@@ -286,10 +286,9 @@
public boolean assignUserToOccupantZone(@UserIdInt int userId, int zoneId) {
// Check if the user is already assigned to the other zone.
synchronized (mLock) {
- for (Map.Entry<Integer, OccupantConfig> entry :
- mActiveOccupantConfigs.entrySet()) {
- OccupantConfig config = entry.getValue();
- if (config.userId == userId && zoneId != entry.getKey()) {
+ for (int i = 0; i < mActiveOccupantConfigs.size(); ++i) {
+ OccupantConfig config = mActiveOccupantConfigs.valueAt(i);
+ if (config.userId == userId && zoneId != mActiveOccupantConfigs.keyAt(i)) {
Log.w(TAG, "cannot assign user to two different zone simultaneously");
return false;
}
@@ -311,7 +310,8 @@
@Override
public boolean unassignUserFromOccupantZone(@UserIdInt int userId) {
synchronized (mLock) {
- for (OccupantConfig config : mActiveOccupantConfigs.values()) {
+ for (int i = 0; i < mActiveOccupantConfigs.size(); ++i) {
+ OccupantConfig config = mActiveOccupantConfigs.valueAt(i);
if (config.userId == userId) {
config.userId = UserHandle.USER_NULL;
break;
@@ -353,18 +353,18 @@
/** Return cloned mOccupantsConfig for testing */
@VisibleForTesting
@NonNull
- public HashMap<Integer, OccupantZoneInfo> getOccupantsConfig() {
+ public SparseArray<OccupantZoneInfo> getOccupantsConfig() {
synchronized (mLock) {
- return (HashMap<Integer, OccupantZoneInfo>) mOccupantsConfig.clone();
+ return mOccupantsConfig.clone();
}
}
/** Return cloned mDisplayConfigs for testing */
@VisibleForTesting
@NonNull
- public HashMap<Integer, DisplayConfig> getDisplayConfigs() {
+ public SparseArray<DisplayConfig> getDisplayConfigs() {
synchronized (mLock) {
- return (HashMap<Integer, DisplayConfig>) mDisplayConfigs.clone();
+ return mDisplayConfigs.clone();
}
}
@@ -380,9 +380,9 @@
/** Return cloned mActiveOccupantConfigs for testing */
@VisibleForTesting
@NonNull
- public HashMap<Integer, OccupantConfig> getActiveOccupantConfigs() {
+ public SparseArray<OccupantConfig> getActiveOccupantConfigs() {
synchronized (mLock) {
- return (HashMap<Integer, OccupantConfig>) mActiveOccupantConfigs.clone();
+ return mActiveOccupantConfigs.clone();
}
}
@@ -391,25 +391,25 @@
writer.println("*OccupantZoneService*");
synchronized (mLock) {
writer.println("**mOccupantsConfig**");
- for (Map.Entry<Integer, OccupantZoneInfo> entry : mOccupantsConfig.entrySet()) {
- writer.println(" zoneId=" + entry.getKey()
- + " info=" + entry.getValue().toString());
+ for (int i = 0; i < mOccupantsConfig.size(); ++i) {
+ writer.println(" zoneId=" + mOccupantsConfig.keyAt(i)
+ + " info=" + mOccupantsConfig.valueAt(i));
}
writer.println("**mDisplayConfigs**");
- for (Map.Entry<Integer, DisplayConfig> entry : mDisplayConfigs.entrySet()) {
- writer.println(" port=" + Integer.toHexString(entry.getKey())
- + " config=" + entry.getValue().toString());
+ for (int i = 0; i < mDisplayConfigs.size(); ++i) {
+ writer.println(" port=" + mDisplayConfigs.keyAt(i)
+ + " config=" + mDisplayConfigs.valueAt(i));
}
writer.println("**mAudioZoneIdToOccupantZoneIdMapping**");
for (int index = 0; index < mAudioZoneIdToOccupantZoneIdMapping.size(); index++) {
int audioZoneId = mAudioZoneIdToOccupantZoneIdMapping.keyAt(index);
writer.println(" audioZoneId=" + Integer.toHexString(audioZoneId)
- + " zoneId=" + mAudioZoneIdToOccupantZoneIdMapping.get(audioZoneId));
+ + " zoneId=" + mAudioZoneIdToOccupantZoneIdMapping.valueAt(index));
}
writer.println("**mActiveOccupantConfigs**");
- for (Map.Entry<Integer, OccupantConfig> entry : mActiveOccupantConfigs.entrySet()) {
- writer.println(" zoneId=" + entry.getKey()
- + " config=" + entry.getValue().toString());
+ for (int i = 0; i < mActiveOccupantConfigs.size(); ++i) {
+ writer.println(" zoneId=" + mActiveOccupantConfigs.keyAt(i)
+ + " config=" + mActiveOccupantConfigs.valueAt(i));
}
writer.println("mEnableProfileUserAssignmentForMultiDisplay:"
+ mEnableProfileUserAssignmentForMultiDisplay);
@@ -430,7 +430,8 @@
public List<OccupantZoneInfo> getAllOccupantZones() {
synchronized (mLock) {
List<OccupantZoneInfo> infos = new ArrayList<>();
- for (Integer zoneId : mActiveOccupantConfigs.keySet()) {
+ for (int i = 0; i < mActiveOccupantConfigs.size(); ++i) {
+ int zoneId = mActiveOccupantConfigs.keyAt(i);
// no need for deep copy as OccupantZoneInfo itself is static.
infos.add(mOccupantsConfig.get(zoneId));
}
@@ -478,7 +479,7 @@
return config.audioZoneId;
}
// check if the occupant id exist at all
- if (!mOccupantsConfig.containsKey(occupantZoneId)) {
+ if (!mOccupantsConfig.contains(occupantZoneId)) {
return CarAudioManager.INVALID_AUDIO_ZONE;
}
// Exist but not active
@@ -512,20 +513,16 @@
@Nullable
private DisplayConfig findDisplayConfigForDisplayLocked(int displayId) {
- for (Map.Entry<Integer, DisplayConfig> entry : mDisplayConfigs.entrySet()) {
- Display display = mDisplayManager.getDisplay(displayId);
- if (display == null) {
- continue;
- }
- Byte portAddress = getPortAddress(display);
- if (portAddress == null) {
- continue;
- }
- DisplayConfig config =
- mDisplayConfigs.get(Byte.toUnsignedInt(portAddress));
- return config;
+ Display display = mDisplayManager.getDisplay(displayId);
+ if (display == null) {
+ return null;
}
- return null;
+ int portAddress = getPortAddress(display);
+ if (portAddress == INVALID_PORT) {
+ return null;
+ }
+ DisplayConfig config = mDisplayConfigs.get(portAddress);
+ return config;
}
@Override
@@ -553,10 +550,10 @@
@Override
public int getOccupantZoneIdForUserId(int userId) {
synchronized (mLock) {
- for (int occupantZoneId : mActiveOccupantConfigs.keySet()) {
- OccupantConfig config = mActiveOccupantConfigs.get(occupantZoneId);
+ for (int i = 0; i < mActiveOccupantConfigs.size(); ++i) {
+ OccupantConfig config = mActiveOccupantConfigs.valueAt(i);
if (config.userId == userId) {
- return occupantZoneId;
+ return mActiveOccupantConfigs.keyAt(i);
}
}
Log.w(TAG, "Could not find occupantZoneId for userId" + userId
@@ -600,7 +597,7 @@
for (int i = 0; i < audioZoneIdToOccupantZoneMapping.size(); i++) {
int occupantZoneId =
audioZoneIdToOccupantZoneMapping.get(audioZoneIdToOccupantZoneMapping.keyAt(i));
- if (!mOccupantsConfig.containsKey(occupantZoneId)) {
+ if (!mOccupantsConfig.contains(occupantZoneId)) {
throw new IllegalArgumentException("occupantZoneId " + occupantZoneId
+ " does not exist.");
}
@@ -671,7 +668,7 @@
private void doSyncWithCarServiceHelper(@Nullable ICarServiceHelper helper,
boolean updateDisplay, boolean updateUser, boolean updateConfig) {
int[] passengerDisplays = null;
- ArrayMap<Integer, IntArray> whitelists = null;
+ ArrayMap<Integer, IntArray> allowlists = null;
ICarServiceHelper helperToUse = helper;
synchronized (mLock) {
if (helper == null) {
@@ -686,14 +683,14 @@
passengerDisplays = getAllActivePassengerDisplaysLocked();
}
if (updateUser) {
- whitelists = createDisplayWhitelistsLocked();
+ allowlists = createDisplayAllowlistsLocked();
}
}
if (updateDisplay) {
updatePassengerDisplays(helperToUse, passengerDisplays);
}
if (updateUser) {
- updateUserAssignmentForDisplays(helperToUse, whitelists);
+ updateUserAssignmentForDisplays(helperToUse, allowlists);
}
if (updateConfig) {
Resources res = mContext.getResources();
@@ -704,12 +701,12 @@
private int[] getAllActivePassengerDisplaysLocked() {
IntArray displays = new IntArray();
- for (Map.Entry<Integer, OccupantConfig> entry : mActiveOccupantConfigs.entrySet()) {
- Integer zoneId = entry.getKey();
+ for (int j = 0; j < mActiveOccupantConfigs.size(); ++j) {
+ int zoneId = mActiveOccupantConfigs.keyAt(j);
if (zoneId == mDriverZoneId) {
continue;
}
- OccupantConfig config = entry.getValue();
+ OccupantConfig config = mActiveOccupantConfigs.valueAt(j);
for (int i = 0; i < config.displayInfos.size(); i++) {
displays.add(config.displayInfos.get(i).display.getDisplayId());
}
@@ -758,42 +755,42 @@
}
}
- private ArrayMap<Integer, IntArray> createDisplayWhitelistsLocked() {
- ArrayMap<Integer, IntArray> whitelists = new ArrayMap<>();
- for (Map.Entry<Integer, OccupantConfig> entry : mActiveOccupantConfigs.entrySet()) {
- Integer zoneId = entry.getKey();
+ private ArrayMap<Integer, IntArray> createDisplayAllowlistsLocked() {
+ ArrayMap<Integer, IntArray> allowlists = new ArrayMap<>();
+ for (int j = 0; j < mActiveOccupantConfigs.size(); ++j) {
+ int zoneId = mActiveOccupantConfigs.keyAt(j);
if (zoneId == mDriverZoneId) {
continue;
}
- OccupantConfig config = entry.getValue();
+ OccupantConfig config = mActiveOccupantConfigs.valueAt(j);
if (config.displayInfos.isEmpty()) {
continue;
}
// user like driver can have multiple zones assigned, so add them all.
- IntArray displays = whitelists.get(config.userId);
+ IntArray displays = allowlists.get(config.userId);
if (displays == null) {
displays = new IntArray();
- whitelists.put(config.userId, displays);
+ allowlists.put(config.userId, displays);
}
for (int i = 0; i < config.displayInfos.size(); i++) {
displays.add(config.displayInfos.get(i).display.getDisplayId());
}
}
- return whitelists;
+ return allowlists;
}
private void updateUserAssignmentForDisplays(ICarServiceHelper helper,
- ArrayMap<Integer, IntArray> whitelists) {
- if (whitelists == null || whitelists.isEmpty()) {
+ ArrayMap<Integer, IntArray> allowlists) {
+ if (allowlists == null || allowlists.isEmpty()) {
return;
}
try {
- for (int i = 0; i < whitelists.size(); i++) {
- int userId = whitelists.keyAt(i);
- helper.setDisplayWhitelistForUser(userId, whitelists.valueAt(i).toArray());
+ for (int i = 0; i < allowlists.size(); i++) {
+ int userId = allowlists.keyAt(i);
+ helper.setDisplayAllowlistForUser(userId, allowlists.valueAt(i).toArray());
}
} catch (RemoteException e) {
- Log.e(TAG, "ICarServiceHelper.setDisplayWhitelistForUser failed");
+ Log.e(TAG, "ICarServiceHelper.setDisplayAllowlistForUser failed");
}
}
@@ -906,7 +903,7 @@
throwFormatErrorInOccupantZones("Invalid seat:" + config);
}
OccupantZoneInfo info = new OccupantZoneInfo(zoneId, type, seat);
- if (mOccupantsConfig.containsKey(zoneId)) {
+ if (mOccupantsConfig.contains(zoneId)) {
throwFormatErrorInOccupantZones("Duplicate zone id:" + config);
}
mOccupantsConfig.put(zoneId, info);
@@ -931,9 +928,8 @@
// examples:
// <item>displayPort=0,displayType=MAIN,occupantZoneId=0</item>
// <item>displayPort=1,displayType=INSTRUMENT_CLUSTER,occupantZoneId=0</item>
- final int invalidPort = -1;
for (String config : res.getStringArray(R.array.config_occupant_display_mapping)) {
- int port = invalidPort;
+ int port = INVALID_PORT;
int type = CarOccupantZoneManager.DISPLAY_TYPE_UNKNOWN;
int zoneId = OccupantZoneInfo.INVALID_ZONE_ID;
String[] entries = config.split(",");
@@ -979,7 +975,7 @@
}
}
// Now check validity
- if (port == invalidPort) {
+ if (port == INVALID_PORT) {
throwFormatErrorInDisplayMapping("Missing or invalid displayPort:" + config);
}
@@ -989,18 +985,18 @@
if (zoneId == OccupantZoneInfo.INVALID_ZONE_ID) {
throwFormatErrorInDisplayMapping("Missing or invalid occupantZoneId:" + config);
}
- if (!mOccupantsConfig.containsKey(zoneId)) {
+ if (!mOccupantsConfig.contains(zoneId)) {
throwFormatErrorInDisplayMapping(
"Missing or invalid occupantZoneId:" + config);
}
- if (mDisplayConfigs.containsKey(port)) {
+ if (mDisplayConfigs.contains(port)) {
throwFormatErrorInDisplayMapping("Duplicate displayPort:" + config);
}
mDisplayConfigs.put(port, new DisplayConfig(type, zoneId));
}
}
- private Byte getPortAddress(Display display) {
+ private int getPortAddress(Display display) {
DisplayAddress address = display.getAddress();
if (address instanceof DisplayAddress.Physical) {
DisplayAddress.Physical physicalAddress = (DisplayAddress.Physical) address;
@@ -1008,7 +1004,7 @@
return physicalAddress.getPort();
}
}
- return null;
+ return INVALID_PORT;
}
private void addDisplayInfoToOccupantZoneLocked(int zoneId, DisplayInfo info) {
@@ -1024,16 +1020,15 @@
mActiveOccupantConfigs.clear();
boolean hasDefaultDisplayConfig = false;
for (Display display : mDisplayManager.getDisplays()) {
- Byte rawPortAddress = getPortAddress(display);
- if (rawPortAddress == null) {
+ int rawPortAddress = getPortAddress(display);
+ if (rawPortAddress == INVALID_PORT) {
continue;
}
- int portAddress = Byte.toUnsignedInt(rawPortAddress);
- DisplayConfig displayConfig = mDisplayConfigs.get(portAddress);
+ DisplayConfig displayConfig = mDisplayConfigs.get(rawPortAddress);
if (displayConfig == null) {
Log.w(TAG,
- "Display id:" + display.getDisplayId() + " port:" + portAddress
+ "Display id:" + display.getDisplayId() + " port:" + rawPortAddress
+ " does not have configurations");
continue;
}
@@ -1078,9 +1073,9 @@
updateEnabledProfilesLocked(driverUserId);
}
- for (Map.Entry<Integer, OccupantConfig> entry : mActiveOccupantConfigs.entrySet()) {
- Integer zoneId = entry.getKey();
- OccupantConfig config = entry.getValue();
+ for (int i = 0; i < mActiveOccupantConfigs.size(); ++i) {
+ int zoneId = mActiveOccupantConfigs.keyAt(i);
+ OccupantConfig config = mActiveOccupantConfigs.valueAt(i);
// mProfileUsers empty if not supported
if (mProfileUsers.contains(config.userId)) {
Log.i(TAG, "Profile user:" + config.userId
@@ -1095,8 +1090,7 @@
for (int index = 0; index < mAudioZoneIdToOccupantZoneIdMapping.size(); index++) {
int audioZoneId = mAudioZoneIdToOccupantZoneIdMapping.keyAt(index);
int occupantZoneId = mAudioZoneIdToOccupantZoneIdMapping.get(audioZoneId);
- OccupantConfig occupantConfig =
- mActiveOccupantConfigs.get(occupantZoneId);
+ OccupantConfig occupantConfig = mActiveOccupantConfigs.get(occupantZoneId);
if (occupantConfig == null) {
//no active display for zone just continue
continue;
diff --git a/service/src/com/android/car/CarService.java b/service/src/com/android/car/CarService.java
index a0db99d..c7c06bb 100644
--- a/service/src/com/android/car/CarService.java
+++ b/service/src/com/android/car/CarService.java
@@ -33,9 +33,9 @@
import android.util.EventLog;
import android.util.Log;
+import com.android.car.internal.common.EventLogTags;
import com.android.car.systeminterface.SystemInterface;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.car.EventLogTags;
import com.android.internal.util.RingBufferIndices;
import java.io.FileDescriptor;
@@ -199,14 +199,14 @@
try {
mVehicle.unlinkToDeath(this);
} catch (RemoteException e) {
- Log.e(CarLog.TAG_SERVICE, "Failed to unlinkToDeath", e); // Log and continue.
+ Log.e(CarLog.TAG_SERVICE, "Failed to unlinkToDeath", e); // Log and continue.
}
mVehicle = null;
mVhalCrashTracker.crashDetected();
- Log.i(CarLog.TAG_SERVICE, "Trying to reconnect to Vehicle HAL: " +
- mVehicleInterfaceName);
+ Log.i(CarLog.TAG_SERVICE,
+ "Trying to reconnect to Vehicle HAL: " + mVehicleInterfaceName);
mVehicle = getVehicleWithTimeout(WAIT_FOR_VEHICLE_HAL_TIMEOUT_MS);
if (mVehicle == null) {
throw new IllegalStateException("Failed to reconnect to Vehicle HAL");
@@ -237,8 +237,8 @@
private final Runnable mCallback;
/**
- * If maxCrashCountLimit number of crashes occurred within slidingWindowMillis time
- * frame then call provided callback function.
+ * If maxCrashCountLimit number of crashes occurred within slidingWindowMillis time frame
+ * then call provided callback function.
*/
CrashTracker(int maxCrashCountLimit, int slidingWindowMillis, Runnable callback) {
mMaxCrashCountLimit = maxCrashCountLimit;
diff --git a/service/src/com/android/car/CarShellCommand.java b/service/src/com/android/car/CarShellCommand.java
index 2ccf858..d933543 100644
--- a/service/src/com/android/car/CarShellCommand.java
+++ b/service/src/com/android/car/CarShellCommand.java
@@ -31,7 +31,9 @@
import android.app.ActivityOptions;
import android.app.UiModeManager;
import android.car.Car;
+import android.car.CarOccupantZoneManager;
import android.car.input.CarInputManager;
+import android.car.input.CustomInputEvent;
import android.car.input.RotaryEvent;
import android.car.user.CarUserManager;
import android.car.user.UserCreationResult;
@@ -40,6 +42,7 @@
import android.car.user.UserSwitchResult;
import android.car.userlib.HalCallback;
import android.car.userlib.UserHalHelper;
+import android.car.util.concurrent.AsyncFuture;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -63,6 +66,7 @@
import android.hardware.automotive.vehicle.V2_0.UserInfo;
import android.hardware.automotive.vehicle.V2_0.UsersInfo;
import android.hardware.automotive.vehicle.V2_0.VehicleArea;
+import android.hardware.automotive.vehicle.V2_0.VehicleDisplay;
import android.os.Binder;
import android.os.Build;
import android.os.Process;
@@ -83,17 +87,19 @@
import com.android.car.hal.UserHalService;
import com.android.car.hal.VehicleHal;
import com.android.car.pm.CarPackageManagerService;
+import com.android.car.power.CarPowerManagementService;
+import com.android.car.power.SilentModeController;
import com.android.car.systeminterface.SystemInterface;
-import com.android.car.trust.CarTrustedDeviceService;
import com.android.car.user.CarUserService;
-import com.android.internal.infra.AndroidFuture;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
import java.util.concurrent.atomic.AtomicBoolean;
final class CarShellCommand extends ShellCommand {
@@ -116,8 +122,6 @@
private static final String COMMAND_PROJECTION_UI_MODE = "projection-ui-mode";
private static final String COMMAND_RESUME = "resume";
private static final String COMMAND_SUSPEND = "suspend";
- private static final String COMMAND_ENABLE_TRUSTED_DEVICE = "enable-trusted-device";
- private static final String COMMAND_REMOVE_TRUSTED_DEVICES = "remove-trusted-devices";
private static final String COMMAND_SET_UID_TO_ZONE = "set-audio-zone-for-uid";
private static final String COMMAND_START_FIXED_ACTIVITY_MODE = "start-fixed-activity-mode";
private static final String COMMAND_STOP_FIXED_ACTIVITY_MODE = "stop-fixed-activity-mode";
@@ -125,7 +129,9 @@
private static final String COMMAND_DISABLE_FEATURE = "disable-feature";
private static final String COMMAND_INJECT_KEY = "inject-key";
private static final String COMMAND_INJECT_ROTARY = "inject-rotary";
+ private static final String COMMAND_INJECT_CUSTOM_INPUT = "inject-custom-input";
private static final String COMMAND_GET_INITIAL_USER_INFO = "get-initial-user-info";
+ private static final String COMMAND_SILENT_MODE = "silent-mode";
private static final String COMMAND_SWITCH_USER = "switch-user";
private static final String COMMAND_REMOVE_USER = "remove-user";
private static final String COMMAND_CREATE_USER = "create-user";
@@ -139,13 +145,41 @@
private static final String COMMAND_SET_USER_AUTH_ASSOCIATION =
"set-user-auth-association";
- // Whitelist of commands allowed in user build. All these command should be protected with
+ private static final String[] CREATE_OR_MANAGE_USERS_PERMISSIONS = new String[] {
+ android.Manifest.permission.CREATE_USERS,
+ android.Manifest.permission.MANAGE_USERS
+ };
+
+ // List of commands allowed in user build. All these command should be protected with
+ // a permission. K: command, V: required permissions (must have at least 1).
+ // Only commands with permission already granted to shell user should be allowed.
+ // Commands that can affect safety should be never allowed in user build.
+ //
+ // This map is looked up first, then USER_BUILD_COMMAND_TO_PERMISSION_MAP
+ private static final ArrayMap<String, String[]> USER_BUILD_COMMAND_TO_PERMISSIONS_MAP;
+ static {
+ USER_BUILD_COMMAND_TO_PERMISSIONS_MAP = new ArrayMap<>(6);
+ USER_BUILD_COMMAND_TO_PERMISSIONS_MAP.put(COMMAND_GET_INITIAL_USER_INFO,
+ CREATE_OR_MANAGE_USERS_PERMISSIONS);
+ USER_BUILD_COMMAND_TO_PERMISSIONS_MAP.put(COMMAND_SWITCH_USER,
+ CREATE_OR_MANAGE_USERS_PERMISSIONS);
+ USER_BUILD_COMMAND_TO_PERMISSIONS_MAP.put(COMMAND_REMOVE_USER,
+ CREATE_OR_MANAGE_USERS_PERMISSIONS);
+ USER_BUILD_COMMAND_TO_PERMISSIONS_MAP.put(COMMAND_CREATE_USER,
+ CREATE_OR_MANAGE_USERS_PERMISSIONS);
+ USER_BUILD_COMMAND_TO_PERMISSIONS_MAP.put(COMMAND_GET_USER_AUTH_ASSOCIATION,
+ CREATE_OR_MANAGE_USERS_PERMISSIONS);
+ USER_BUILD_COMMAND_TO_PERMISSIONS_MAP.put(COMMAND_SET_USER_AUTH_ASSOCIATION,
+ CREATE_OR_MANAGE_USERS_PERMISSIONS);
+ }
+
+ // List of commands allowed in user build. All these command should be protected with
// a permission. K: command, V: required permission.
// Only commands with permission already granted to shell user should be allowed.
// Commands that can affect safety should be never allowed in user build.
private static final ArrayMap<String, String> USER_BUILD_COMMAND_TO_PERMISSION_MAP;
static {
- USER_BUILD_COMMAND_TO_PERMISSION_MAP = new ArrayMap<>();
+ USER_BUILD_COMMAND_TO_PERMISSION_MAP = new ArrayMap<>(5);
USER_BUILD_COMMAND_TO_PERMISSION_MAP.put(COMMAND_GARAGE_MODE,
android.Manifest.permission.DEVICE_POWER);
USER_BUILD_COMMAND_TO_PERMISSION_MAP.put(COMMAND_RESUME,
@@ -154,22 +188,10 @@
android.Manifest.permission.DEVICE_POWER);
USER_BUILD_COMMAND_TO_PERMISSION_MAP.put(COMMAND_GET_INITIAL_USER,
android.Manifest.permission.INTERACT_ACROSS_USERS_FULL);
- USER_BUILD_COMMAND_TO_PERMISSION_MAP.put(COMMAND_GET_INITIAL_USER_INFO,
- android.Manifest.permission.MANAGE_USERS);
- USER_BUILD_COMMAND_TO_PERMISSION_MAP.put(COMMAND_SWITCH_USER,
- android.Manifest.permission.MANAGE_USERS);
- USER_BUILD_COMMAND_TO_PERMISSION_MAP.put(COMMAND_REMOVE_USER,
- android.Manifest.permission.MANAGE_USERS);
- USER_BUILD_COMMAND_TO_PERMISSION_MAP.put(COMMAND_CREATE_USER,
- android.Manifest.permission.MANAGE_USERS);
- USER_BUILD_COMMAND_TO_PERMISSION_MAP.put(COMMAND_GET_USER_AUTH_ASSOCIATION,
- android.Manifest.permission.MANAGE_USERS);
- USER_BUILD_COMMAND_TO_PERMISSION_MAP.put(COMMAND_SET_USER_AUTH_ASSOCIATION,
- android.Manifest.permission.MANAGE_USERS);
+ USER_BUILD_COMMAND_TO_PERMISSION_MAP.put(COMMAND_DAY_NIGHT_MODE,
+ android.Manifest.permission.MODIFY_DAY_NIGHT_MODE);
}
- private static final String DEVICE_POWER_PERMISSION = "android.permission.DEVICE_POWER";
-
private static final String PARAM_DAY_MODE = "day";
private static final String PARAM_NIGHT_MODE = "night";
private static final String PARAM_SENSOR_MODE = "sensor";
@@ -192,8 +214,10 @@
private static final SparseArray<String> VALID_USER_AUTH_SET_VALUES;
private static final String VALID_USER_AUTH_SET_VALUES_HELP;
+ private static final ArrayMap<String, Integer> CUSTOM_INPUT_FUNCTION_ARGS;
+
static {
- VALID_USER_AUTH_TYPES = new SparseArray<String>(5);
+ VALID_USER_AUTH_TYPES = new SparseArray<>(5);
VALID_USER_AUTH_TYPES.put(KEY_FOB, UserIdentificationAssociationType.toString(KEY_FOB));
VALID_USER_AUTH_TYPES.put(CUSTOM_1, UserIdentificationAssociationType.toString(CUSTOM_1));
VALID_USER_AUTH_TYPES.put(CUSTOM_2, UserIdentificationAssociationType.toString(CUSTOM_2));
@@ -201,7 +225,7 @@
VALID_USER_AUTH_TYPES.put(CUSTOM_4, UserIdentificationAssociationType.toString(CUSTOM_4));
VALID_USER_AUTH_TYPES_HELP = getHelpString("types", VALID_USER_AUTH_TYPES);
- VALID_USER_AUTH_SET_VALUES = new SparseArray<String>(3);
+ VALID_USER_AUTH_SET_VALUES = new SparseArray<>(3);
VALID_USER_AUTH_SET_VALUES.put(ASSOCIATE_CURRENT_USER,
UserIdentificationAssociationSetValue.toString(ASSOCIATE_CURRENT_USER));
VALID_USER_AUTH_SET_VALUES.put(DISASSOCIATE_CURRENT_USER,
@@ -209,6 +233,18 @@
VALID_USER_AUTH_SET_VALUES.put(DISASSOCIATE_ALL_USERS,
UserIdentificationAssociationSetValue.toString(DISASSOCIATE_ALL_USERS));
VALID_USER_AUTH_SET_VALUES_HELP = getHelpString("values", VALID_USER_AUTH_SET_VALUES);
+
+ CUSTOM_INPUT_FUNCTION_ARGS = new ArrayMap<>(10);
+ CUSTOM_INPUT_FUNCTION_ARGS.put("f1", CustomInputEvent.INPUT_CODE_F1);
+ CUSTOM_INPUT_FUNCTION_ARGS.put("f2", CustomInputEvent.INPUT_CODE_F2);
+ CUSTOM_INPUT_FUNCTION_ARGS.put("f3", CustomInputEvent.INPUT_CODE_F3);
+ CUSTOM_INPUT_FUNCTION_ARGS.put("f4", CustomInputEvent.INPUT_CODE_F4);
+ CUSTOM_INPUT_FUNCTION_ARGS.put("f5", CustomInputEvent.INPUT_CODE_F5);
+ CUSTOM_INPUT_FUNCTION_ARGS.put("f6", CustomInputEvent.INPUT_CODE_F6);
+ CUSTOM_INPUT_FUNCTION_ARGS.put("f7", CustomInputEvent.INPUT_CODE_F7);
+ CUSTOM_INPUT_FUNCTION_ARGS.put("f8", CustomInputEvent.INPUT_CODE_F8);
+ CUSTOM_INPUT_FUNCTION_ARGS.put("f9", CustomInputEvent.INPUT_CODE_F9);
+ CUSTOM_INPUT_FUNCTION_ARGS.put("f10", CustomInputEvent.INPUT_CODE_F10);
}
@NonNull
@@ -230,13 +266,13 @@
private final CarPackageManagerService mCarPackageManagerService;
private final CarProjectionService mCarProjectionService;
private final CarPowerManagementService mCarPowerManagementService;
- private final CarTrustedDeviceService mCarTrustedDeviceService;
private final FixedActivityService mFixedActivityService;
private final CarFeatureController mFeatureController;
private final CarInputService mCarInputService;
private final CarNightService mCarNightService;
private final SystemInterface mSystemInterface;
private final GarageModeService mGarageModeService;
+ private final SilentModeController mSilentModeController;
private final CarUserService mCarUserService;
private final CarOccupantZoneService mCarOccupantZoneService;
@@ -246,7 +282,6 @@
CarPackageManagerService carPackageManagerService,
CarProjectionService carProjectionService,
CarPowerManagementService carPowerManagementService,
- CarTrustedDeviceService carTrustedDeviceService,
FixedActivityService fixedActivityService,
CarFeatureController featureController,
CarInputService carInputService,
@@ -254,14 +289,14 @@
SystemInterface systemInterface,
GarageModeService garageModeService,
CarUserService carUserService,
- CarOccupantZoneService carOccupantZoneService) {
+ CarOccupantZoneService carOccupantZoneService,
+ SilentModeController silentModeController) {
mContext = context;
mHal = hal;
mCarAudioService = carAudioService;
mCarPackageManagerService = carPackageManagerService;
mCarProjectionService = carProjectionService;
mCarPowerManagementService = carPowerManagementService;
- mCarTrustedDeviceService = carTrustedDeviceService;
mFixedActivityService = fixedActivityService;
mFeatureController = featureController;
mCarInputService = carInputService;
@@ -270,6 +305,7 @@
mGarageModeService = garageModeService;
mCarUserService = carUserService;
mCarOccupantZoneService = carOccupantZoneService;
+ mSilentModeController = silentModeController;
}
@Override
@@ -326,10 +362,6 @@
pw.println("\t Suspend the system to Deep Sleep.");
pw.println("\tresume");
pw.println("\t Wake the system up after a 'suspend.'");
- pw.println("\tenable-trusted-device true|false");
- pw.println("\t Enable/Disable Trusted device feature.");
- pw.println("\tremove-trusted-devices");
- pw.println("\t Remove all trusted devices for the current foreground user.");
pw.println("\tprojection-tethering [true|false]");
pw.println("\t Whether tethering should be used when creating access point for"
+ " wireless projection");
@@ -365,9 +397,12 @@
pw.println("\t counter-clockwise. If not specified, it will be false.");
pw.println("\t delta_times_ms: a list of delta time (current time minus event time)");
pw.println("\t in descending order. If not specified, it will be 0.");
-
- pw.printf("\t%s <REQ_TYPE> [--hal-only] [--timeout TIMEOUT_MS]\n",
- COMMAND_GET_INITIAL_USER_INFO);
+ pw.println("\tinject-custom-input [-d display] [-r repeatCounter] EVENT");
+ pw.println("\t display: 0 for main, 1 for cluster. If not specified, it will be 0.");
+ pw.println("\t repeatCounter: number of times the button was hit (default value is 1)");
+ pw.println("\t EVENT: mandatory last argument. Possible values for for this flag are ");
+ pw.println("\t F1, F2, up to F10 (functions to defined by OEM partners)");
+ pw.printf("\t%s <REQ_TYPE> [--timeout TIMEOUT_MS]\n", COMMAND_GET_INITIAL_USER_INFO);
pw.println("\t Calls the Vehicle HAL to get the initial boot info, passing the given");
pw.println("\t REQ_TYPE (which could be either FIRST_BOOT, FIRST_BOOT_AFTER_OTA, ");
pw.println("\t COLD_BOOT, RESUME, or any numeric value that would be passed 'as-is')");
@@ -410,11 +445,16 @@
COMMAND_SET_USER_AUTH_ASSOCIATION);
pw.println("\t Sets the N user authentication types with the N values for the given user");
pw.println("\t (or current user when not specified).");
- pw.println("\t By defautt it calls CarUserManager, but using --hal-only will call just "
+ pw.println("\t By default it calls CarUserManager, but using --hal-only will call just "
+ "UserHalService.");
-
pw.printf("\t %s\n", VALID_USER_AUTH_TYPES_HELP);
pw.printf("\t %s\n", VALID_USER_AUTH_SET_VALUES_HELP);
+
+ pw.println("\t" + COMMAND_SILENT_MODE
+ + " [forced-silent|forced-non-silent|non-forced|query]");
+ pw.println("\t Forces silent mode silent or non-silent. With query (or no command) "
+ + "displays the silent state");
+ pw.println("\t and shows how many listeners are monitoring the state.");
}
private static int showInvalidArguments(PrintWriter pw) {
@@ -448,21 +488,40 @@
}
}
+ private void assertHasAtLeastOnePermission(String cmd, String[] requiredPermissions) {
+ for (String requiredPermission : requiredPermissions) {
+ if (ICarImpl.hasPermission(mContext, requiredPermission)) return;
+ }
+ if (requiredPermissions.length == 1) {
+ throw new SecurityException("The command '" + cmd + "' requires permission:"
+ + requiredPermissions[0]);
+ }
+ throw new SecurityException(
+ "The command " + cmd + " requires one of the following permissions:"
+ + Arrays.toString(requiredPermissions));
+ }
+
int exec(String[] args, PrintWriter writer) {
String cmd = args[0];
- String requiredPermission = USER_BUILD_COMMAND_TO_PERMISSION_MAP.get(cmd);
- if (VERBOSE) {
- Log.v(TAG, "cmd: " + cmd + ", requiredPermission: " + requiredPermission);
- }
- if (Build.IS_USER && requiredPermission == null) {
- throw new SecurityException("The command " + cmd + "requires non-user build");
- }
- if (requiredPermission != null) {
- if (!ICarImpl.hasPermission(mContext, requiredPermission)) {
- throw new SecurityException("The command " + cmd + "requires permission:"
- + requiredPermission);
+ String[] requiredPermissions = USER_BUILD_COMMAND_TO_PERMISSIONS_MAP.get(cmd);
+ if (requiredPermissions == null) {
+ String requiredPermission = USER_BUILD_COMMAND_TO_PERMISSION_MAP.get(cmd);
+ if (requiredPermission != null) {
+ requiredPermissions = new String[] { requiredPermission };
}
+
}
+ if (VERBOSE) {
+ Log.v(TAG, "cmd: " + cmd + ", requiredPermissions: "
+ + Arrays.toString(requiredPermissions));
+ }
+ if (Build.IS_USER && requiredPermissions == null) {
+ throw new SecurityException("The command '" + cmd + "' requires non-user build");
+ }
+ if (requiredPermissions != null) {
+ assertHasAtLeastOnePermission(cmd, requiredPermissions);
+ }
+
switch (cmd) {
case COMMAND_HELP:
showHelp(writer);
@@ -560,19 +619,6 @@
mCarPowerManagementService.forceSuspendAndMaybeReboot(false);
writer.println("Suspend: Simulating powering down to Deep Sleep");
break;
- case COMMAND_ENABLE_TRUSTED_DEVICE:
- if (args.length != 2) {
- return showInvalidArguments(writer);
- }
- mCarTrustedDeviceService.getCarTrustAgentEnrollmentService()
- .setTrustedDeviceEnrollmentEnabled(Boolean.valueOf(args[1]));
- mCarTrustedDeviceService.getCarTrustAgentUnlockService()
- .setTrustedDeviceUnlockEnabled(Boolean.valueOf(args[1]));
- break;
- case COMMAND_REMOVE_TRUSTED_DEVICES:
- mCarTrustedDeviceService.getCarTrustAgentEnrollmentService()
- .removeAllTrustedDevices(ActivityManager.getCurrentUser());
- break;
case COMMAND_SET_UID_TO_ZONE:
if (args.length != 3) {
return showInvalidArguments(writer);
@@ -585,6 +631,12 @@
}
runSetOccupantZoneIdForUserId(args[1], args[2]);
break;
+ case COMMAND_SILENT_MODE: {
+ String value = args.length < 2 ? ""
+ : args.length == 2 ? args[1] : "too many arguments";
+ runSilentCommand(value, writer);
+ break;
+ }
case COMMAND_RESET_USER_ID_IN_OCCUPANT_ZONE:
if (args.length != 2) {
return showInvalidArguments(writer);
@@ -621,6 +673,12 @@
}
injectRotary(args, writer);
break;
+ case COMMAND_INJECT_CUSTOM_INPUT:
+ if (args.length < 2) {
+ return showInvalidArguments(writer);
+ }
+ injectCustomInputEvent(args, writer);
+ break;
case COMMAND_GET_INITIAL_USER_INFO:
getInitialUserInfo(args, writer);
break;
@@ -738,7 +796,7 @@
private void injectKey(String[] args, PrintWriter writer) {
int i = 1; // 0 is command itself
- int display = InputHalService.DISPLAY_MAIN;
+ int display = CarOccupantZoneManager.DISPLAY_TYPE_MAIN;
int delayMs = 0;
int keyCode = KeyEvent.KEYCODE_UNKNOWN;
int action = -1;
@@ -747,7 +805,11 @@
switch (args[i]) {
case "-d":
i++;
- display = Integer.parseInt(args[i]);
+ int vehicleDisplay = Integer.parseInt(args[i]);
+ if (!checkVehicleDisplay(vehicleDisplay, writer)) {
+ return;
+ }
+ display = InputHalService.convertDisplayType(vehicleDisplay);
break;
case "-t":
i++;
@@ -772,7 +834,7 @@
}
i++;
}
- } catch (Exception e) {
+ } catch (NumberFormatException e) {
writer.println("Invalid args:" + e);
showHelp(writer);
return;
@@ -782,12 +844,6 @@
showHelp(writer);
return;
}
- if (display != InputHalService.DISPLAY_MAIN
- && display != InputHalService.DISPLAY_INSTRUMENT_CLUSTER) {
- writer.println("Invalid display:" + display);
- showHelp(writer);
- return;
- }
if (delayMs < 0) {
writer.println("Invalid delay:" + delayMs);
showHelp(writer);
@@ -810,7 +866,7 @@
private void injectRotary(String[] args, PrintWriter writer) {
int i = 1; // 0 is command itself
- int display = InputHalService.DISPLAY_MAIN;
+ int display = CarOccupantZoneManager.DISPLAY_TYPE_MAIN;
int inputType = CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION;
boolean clockwise = false;
List<Long> deltaTimeMs = new ArrayList<>();
@@ -819,7 +875,11 @@
switch (args[i]) {
case "-d":
i++;
- display = Integer.parseInt(args[i]);
+ int vehicleDisplay = Integer.parseInt(args[i]);
+ if (!checkVehicleDisplay(vehicleDisplay, writer)) {
+ return;
+ }
+ display = InputHalService.convertDisplayType(vehicleDisplay);
break;
case "-i":
i++;
@@ -842,7 +902,7 @@
}
i++;
}
- } catch (Exception e) {
+ } catch (NumberFormatException e) {
writer.println("Invalid args:" + e);
showHelp(writer);
return;
@@ -872,6 +932,61 @@
writer.println("Succeeded in injecting: " + rotaryEvent);
}
+ private void injectCustomInputEvent(String[] args, PrintWriter writer) {
+ int display = CarOccupantZoneManager.DISPLAY_TYPE_MAIN;
+ int repeatCounter = 1;
+
+ int argIdx = 1;
+ for (; argIdx < args.length - 1; argIdx++) {
+ switch (args[argIdx]) {
+ case "-d":
+ int vehicleDisplay = Integer.parseInt(args[++argIdx]);
+ if (!checkVehicleDisplay(vehicleDisplay, writer)) {
+ return;
+ }
+ display = InputHalService.convertDisplayType(vehicleDisplay);
+ break;
+ case "-r":
+ repeatCounter = Integer.parseInt(args[++argIdx]);
+ break;
+ default:
+ writer.printf("Unrecognized argument: {%s}\n", args[argIdx]);
+ writer.println("Pass -help to see the full list of options");
+ return;
+ }
+ }
+
+ if (argIdx == args.length) {
+ writer.println("Last mandatory argument (fn) not passed.");
+ writer.println("Pass -help to see the full list of options");
+ return;
+ }
+
+ // Processing the last remaining argument (expected to be 'f1', 'f2', ..., 'f10').
+ String eventValue = args[argIdx].toLowerCase();
+ Integer inputCode = CUSTOM_INPUT_FUNCTION_ARGS.get(eventValue);
+ if (inputCode == null) {
+ writer.printf("Invalid input event value {%s}, valid values are f1, f2, ..., f10\n",
+ eventValue);
+ writer.println("Pass -help to see the full list of options");
+ return;
+ }
+
+ CustomInputEvent event = new CustomInputEvent(inputCode, display, repeatCounter);
+ mCarInputService.onCustomInputEvent(event);
+ writer.printf("Succeeded in injecting {%s}\n", event);
+ }
+
+ private boolean checkVehicleDisplay(int vehicleDisplay, PrintWriter writer) {
+ if (vehicleDisplay != VehicleDisplay.MAIN
+ && vehicleDisplay != VehicleDisplay.INSTRUMENT_CLUSTER) {
+ writer.println("Invalid display:" + vehicleDisplay);
+ showHelp(writer);
+ return false;
+ }
+ return true;
+ }
+
private void getInitialUserInfo(String[] args, PrintWriter writer) {
if (args.length < 2) {
writer.println("Insufficient number of args");
@@ -881,7 +996,6 @@
// Gets the request type
String typeArg = args[1];
int requestType = UserHalHelper.parseInitialUserInfoRequestType(typeArg);
- boolean halOnly = false;
int timeout = DEFAULT_HAL_TIMEOUT_MS;
for (int i = 2; i < args.length; i++) {
@@ -890,9 +1004,6 @@
case "--timeout":
timeout = Integer.parseInt(args[++i]);
break;
- case "--hal-only":
- halOnly = true;
- break;
default:
writer.println("Invalid option at index " + i + ": " + arg);
return;
@@ -932,12 +1043,8 @@
latch.countDown();
}
};
- if (halOnly) {
- UsersInfo usersInfo = generateUsersInfo();
- mHal.getUserHal().getInitialUserInfo(requestType, timeout, usersInfo, callback);
- } else {
- mCarUserService.getInitialUserInfo(requestType, callback);
- }
+ UsersInfo usersInfo = generateUsersInfo();
+ mHal.getUserHal().getInitialUserInfo(requestType, timeout, usersInfo, callback);
waitForHal(writer, latch, timeout);
}
@@ -1030,7 +1137,7 @@
return;
}
CarUserManager carUserManager = getCarUserManager(mContext);
- AndroidFuture<UserSwitchResult> future = carUserManager.switchUser(targetUserId);
+ AsyncFuture<UserSwitchResult> future = carUserManager.switchUser(targetUserId);
UserSwitchResult result = waitForFuture(writer, future, timeout);
if (result == null) return;
writer.printf("UserSwitchResult: status=%s",
@@ -1078,12 +1185,12 @@
}
Log.d(TAG, "createUser(): name=" + name + ", userType=" + userType
- + ", flags=" + UserHalHelper.userFlagsToString(flags)
+ + ", flags=" + android.content.pm.UserInfo.flagsToString(flags)
+ ", halOnly=" + halOnly + ", timeout=" + timeout);
if (!halOnly) {
CarUserManager carUserManager = getCarUserManager(mContext);
- AndroidFuture<UserCreationResult> future = carUserManager
+ AsyncFuture<UserCreationResult> future = carUserManager
.createUser(name, userType, flags);
UserCreationResult result = waitForFuture(writer, future, timeout);
@@ -1138,7 +1245,7 @@
latch.countDown();
});
waitForHal(writer, latch, timeout);
- } catch (Exception e) {
+ } catch (RuntimeException e) {
writer.printf("HAL failed: %s\n", e);
} finally {
if (!halOk.get()) {
@@ -1190,20 +1297,21 @@
CarUserManager carUserManager = getCarUserManager(mContext);
UserRemovalResult result = carUserManager.removeUser(userId);
- if (result == null) return;
writer.printf("UserRemovalResult: status = %s\n",
UserRemovalResult.statusToString(result.getStatus()));
}
private static <T> T waitForFuture(@NonNull PrintWriter writer,
- @NonNull AndroidFuture<T> future, int timeoutMs) {
+ @NonNull AsyncFuture<T> future, int timeoutMs) {
T result = null;
try {
result = future.get(timeoutMs, TimeUnit.MILLISECONDS);
if (result == null) {
writer.printf("Service didn't respond in %d ms", timeoutMs);
}
- } catch (Exception e) {
+ } catch (InterruptedException e) {
+ Thread.currentThread().interrupt();
+ } catch (ExecutionException | TimeoutException e) {
writer.printf("Exception getting future: %s", e);
}
return result;
@@ -1230,7 +1338,7 @@
case "--user":
try {
userId = Integer.parseInt(args[++i]);
- } catch (Exception e) {
+ } catch (NumberFormatException e) {
writer.printf("Invalid user id at index %d (from %s): %s\n", i + 1,
Arrays.toString(args), arg);
}
@@ -1358,7 +1466,7 @@
case "--user":
try {
userId = Integer.parseInt(args[++i]);
- } catch (Exception e) {
+ } catch (NumberFormatException e) {
writer.printf("Invalid user id at index %d (from %s): %s\n", i + 1,
Arrays.toString(args), arg);
}
@@ -1419,7 +1527,7 @@
types[i] = association.type;
values[i] = association.value;
}
- AndroidFuture<UserIdentificationAssociationResponse> future = carUserManager
+ AsyncFuture<UserIdentificationAssociationResponse> future = carUserManager
.setUserIdentificationAssociation(types, values);
UserIdentificationAssociationResponse response = waitForFuture(writer, future, timeout);
if (response != null) {
@@ -1449,8 +1557,8 @@
mode = CarNightService.FORCED_SENSOR_MODE;
break;
default:
- writer.println("Unknown value. Valid argument: " + PARAM_DAY_MODE + "|"
- + PARAM_NIGHT_MODE + "|" + PARAM_SENSOR_MODE);
+ writer.printf("Unknown value: %s. Valid argument: %s|%s|%s\n",
+ arg, PARAM_DAY_MODE, PARAM_NIGHT_MODE, PARAM_SENSOR_MODE);
return;
}
int current = mCarNightService.forceDayNightMode(mode);
@@ -1489,8 +1597,33 @@
writer.println("Entering Garage Mode. Will reboot when it completes.");
break;
default:
- writer.println("Unknown value. Valid argument: " + PARAM_ON_MODE + "|"
- + PARAM_OFF_MODE + "|" + PARAM_QUERY_MODE + "|" + PARAM_REBOOT);
+ writer.printf("Unknown value: %s. Valid argument: %s|%s|%s|%s\n",
+ arg, PARAM_ON_MODE, PARAM_OFF_MODE, PARAM_QUERY_MODE, PARAM_REBOOT);
+ }
+ }
+
+ private void runSilentCommand(String arg, PrintWriter writer) {
+ switch (arg) {
+ case "forced-silent":
+ writer.println("Forcing silent mode to silent");
+ mSilentModeController.forceSilentMode(true);
+ break;
+ case "forced-non-silent":
+ writer.println("Forcing silent mode to non-silent");
+ mSilentModeController.forceSilentMode(false);
+ break;
+ case "non-forced":
+ writer.println("Not forcing silent mode");
+ mSilentModeController.unforceSilentMode();
+ break;
+ case PARAM_QUERY_MODE:
+ case "":
+ mSilentModeController.dump(writer);
+ break;
+ default:
+ writer.printf("Unknown value: %s. Valid argument: "
+ + "forced-silent|forced-non-silent|non-forced|%s\n",
+ arg, PARAM_QUERY_MODE);
}
}
diff --git a/service/src/com/android/car/CarUxRestrictionsConfigurationXmlParser.java b/service/src/com/android/car/CarUxRestrictionsConfigurationXmlParser.java
index 15e71d1..4c4d72f 100644
--- a/service/src/com/android/car/CarUxRestrictionsConfigurationXmlParser.java
+++ b/service/src/com/android/car/CarUxRestrictionsConfigurationXmlParser.java
@@ -175,7 +175,7 @@
if (a.hasValue(R.styleable.UxRestrictions_RestrictionMapping_physicalPort)) {
int portValue = a.getInt(
R.styleable.UxRestrictions_RestrictionMapping_physicalPort, 0);
- byte port = CarUxRestrictionsConfiguration.Builder.validatePort(portValue);
+ int port = CarUxRestrictionsConfiguration.Builder.validatePort(portValue);
getCurrentBuilder().setPhysicalPort(port);
}
a.recycle();
diff --git a/service/src/com/android/car/CarUxRestrictionsManagerService.java b/service/src/com/android/car/CarUxRestrictionsManagerService.java
index 88fc920..42384bc 100644
--- a/service/src/com/android/car/CarUxRestrictionsManagerService.java
+++ b/service/src/com/android/car/CarUxRestrictionsManagerService.java
@@ -121,7 +121,7 @@
private static final String JSON_NAME_SCHEMA_VERSION = "schema_version";
private static final String JSON_NAME_RESTRICTIONS = "restrictions";
- private static final byte DEFAULT_PORT = 0;
+ private static final int DEFAULT_PORT = 0;
@VisibleForTesting
static final String CONFIG_FILENAME_PRODUCTION = "ux_restrictions_prod_config.json";
@@ -142,9 +142,9 @@
* Metadata associated with a binder callback.
*/
private static class RemoteCallbackListCookie {
- final Byte mPhysicalPort;
+ final Integer mPhysicalPort;
- RemoteCallbackListCookie(Byte physicalPort) {
+ RemoteCallbackListCookie(Integer physicalPort) {
mPhysicalPort = physicalPort;
}
}
@@ -152,17 +152,17 @@
private final Object mLock = new Object();
/**
- * This lookup caches the mapping from an int display id to a byte that represents a physical
+ * This lookup caches the mapping from an int display id to an int that represents a physical
* port. It includes mappings for virtual displays.
*/
@GuardedBy("mLock")
- private final Map<Integer, Byte> mPortLookup = new HashMap<>();
+ private final Map<Integer, Integer> mPortLookup = new HashMap<>();
@GuardedBy("mLock")
- private Map<Byte, CarUxRestrictionsConfiguration> mCarUxRestrictionsConfigurations;
+ private Map<Integer, CarUxRestrictionsConfiguration> mCarUxRestrictionsConfigurations;
@GuardedBy("mLock")
- private Map<Byte, CarUxRestrictions> mCurrentUxRestrictions;
+ private Map<Integer, CarUxRestrictions> mCurrentUxRestrictions;
@GuardedBy("mLock")
private String mRestrictionMode = UX_RESTRICTION_MODE_BASELINE;
@@ -170,12 +170,12 @@
@GuardedBy("mLock")
private float mCurrentMovingSpeed;
- // Byte represents a physical port for display.
+ // Represents a physical port for display.
@GuardedBy("mLock")
- private byte mDefaultDisplayPhysicalPort;
+ private int mDefaultDisplayPhysicalPort;
@GuardedBy("mLock")
- private final List<Byte> mPhysicalPorts = new ArrayList<>();
+ private final List<Integer> mPhysicalPorts = new ArrayList<>();
// Flag to disable broadcasting UXR changes - for development purposes
@GuardedBy("mLock")
@@ -205,7 +205,7 @@
// start
// driving and we don't get speed or gear information, we have bigger problems.
mCurrentUxRestrictions = new HashMap<>();
- for (byte port : mPhysicalPorts) {
+ for (int port : mPhysicalPorts) {
mCurrentUxRestrictions.put(port, createUnrestrictedRestrictions());
}
@@ -272,7 +272,7 @@
configs = new ArrayList<>();
synchronized (mLock) {
- for (byte port : mPhysicalPorts) {
+ for (int port : mPhysicalPorts) {
configs.add(createDefaultConfig(port));
}
}
@@ -386,7 +386,7 @@
Log.e(TAG, "registerUxRestrictionsChangeListener(): listener null");
throw new IllegalArgumentException("Listener is null");
}
- Byte physicalPort;
+ Integer physicalPort;
synchronized (mLock) {
physicalPort = getPhysicalPortLocked(displayId);
if (physicalPort == null) {
@@ -687,7 +687,7 @@
synchronized (mLock) {
writer.println("*CarUxRestrictionsManagerService*");
mUxRClients.dump(writer, "UX Restrictions Clients ");
- for (byte port : mCurrentUxRestrictions.keySet()) {
+ for (int port : mCurrentUxRestrictions.keySet()) {
CarUxRestrictions restrictions = mCurrentUxRestrictions.get(port);
writer.printf("Port: 0x%02X UXR: %s\n", port, restrictions.toString());
}
@@ -815,8 +815,8 @@
return;
}
- Map<Byte, CarUxRestrictions> newUxRestrictions = new HashMap<>();
- for (byte port : mPhysicalPorts) {
+ Map<Integer, CarUxRestrictions> newUxRestrictions = new HashMap<>();
+ for (int port : mPhysicalPorts) {
CarUxRestrictionsConfiguration config = mCarUxRestrictionsConfigurations.get(port);
if (config == null) {
continue;
@@ -836,8 +836,8 @@
}
// Ignore dispatching if the restrictions has not changed.
- Set<Byte> displayToDispatch = new ArraySet<>();
- for (byte port : newUxRestrictions.keySet()) {
+ Set<Integer> displayToDispatch = new ArraySet<>();
+ for (int port : newUxRestrictions.keySet()) {
if (!mCurrentUxRestrictions.containsKey(port)) {
// This should never happen.
Log.wtf(TAG, "Unrecognized port:" + port);
@@ -852,7 +852,7 @@
return;
}
- for (byte port : displayToDispatch) {
+ for (int port : displayToDispatch) {
addTransitionLogLocked(
mCurrentUxRestrictions.get(port), newUxRestrictions.get(port));
}
@@ -862,8 +862,8 @@
mCurrentUxRestrictions = newUxRestrictions;
}
- private void dispatchRestrictionsToClients(Map<Byte, CarUxRestrictions> displayRestrictions,
- Set<Byte> displayToDispatch) {
+ private void dispatchRestrictionsToClients(Map<Integer, CarUxRestrictions> displayRestrictions,
+ Set<Integer> displayToDispatch) {
logd("dispatching to clients");
boolean success = mClientDispatchHandler.post(() -> {
int numClients = mUxRClients.beginBroadcast();
@@ -897,7 +897,7 @@
}
@VisibleForTesting
- static byte getDefaultDisplayPhysicalPort(DisplayManager displayManager) {
+ static int getDefaultDisplayPhysicalPort(DisplayManager displayManager) {
Display defaultDisplay = displayManager.getDisplay(Display.DEFAULT_DISPLAY);
DisplayAddress.Physical address = (DisplayAddress.Physical) defaultDisplay.getAddress();
@@ -924,11 +924,10 @@
mPhysicalPorts.add(mDefaultDisplayPhysicalPort);
}
} else if (display.getAddress() instanceof DisplayAddress.Physical) {
- byte port = ((DisplayAddress.Physical) display.getAddress()).getPort();
+ int port = ((DisplayAddress.Physical) display.getAddress()).getPort();
if (Log.isLoggable(TAG, Log.INFO)) {
Log.i(TAG, String.format(
- "Display %d uses port %d", display.getDisplayId(),
- Byte.toUnsignedInt(port)));
+ "Display %d uses port %d", display.getDisplayId(), port));
}
synchronized (mLock) {
mPhysicalPorts.add(port);
@@ -940,15 +939,15 @@
}
}
- private Map<Byte, CarUxRestrictionsConfiguration> convertToMap(
+ private Map<Integer, CarUxRestrictionsConfiguration> convertToMap(
List<CarUxRestrictionsConfiguration> configs) {
validateConfigs(configs);
- Map<Byte, CarUxRestrictionsConfiguration> result = new HashMap<>();
+ Map<Integer, CarUxRestrictionsConfiguration> result = new HashMap<>();
if (configs.size() == 1) {
CarUxRestrictionsConfiguration config = configs.get(0);
synchronized (mLock) {
- byte port = config.getPhysicalPort() == null
+ int port = config.getPhysicalPort() == null
? mDefaultDisplayPhysicalPort
: config.getPhysicalPort();
result.put(port, config);
@@ -978,7 +977,7 @@
}
CarUxRestrictionsConfiguration first = configs.get(0);
- Set<Byte> existingPorts = new ArraySet<>();
+ Set<Integer> existingPorts = new ArraySet<>();
for (CarUxRestrictionsConfiguration config : configs) {
if (!config.hasSameParameters(first)) {
// Input should have the same restriction parameters because:
@@ -988,7 +987,7 @@
"Configurations should have the same restrictions parameters.");
}
- Byte port = config.getPhysicalPort();
+ Integer port = config.getPhysicalPort();
if (port == null) {
// Size was checked above; safe to assume there are multiple configs.
throw new IllegalArgumentException(
@@ -1003,26 +1002,26 @@
}
/**
- * Returns the physical port byte id for the display or {@code null} if {@link
+ * Returns the physical port id for the display or {@code null} if {@link
* DisplayManager#getDisplay(int)} is not aware of the provided id.
*/
@Nullable
@GuardedBy("mLock")
- private Byte getPhysicalPortLocked(int displayId) {
+ private Integer getPhysicalPortLocked(int displayId) {
if (!mPortLookup.containsKey(displayId)) {
Display display = mDisplayManager.getDisplay(displayId);
if (display == null) {
Log.w(TAG, "Could not retrieve display for id: " + displayId);
return null;
}
- byte port = doGetPhysicalPortLocked(display);
+ int port = doGetPhysicalPortLocked(display);
mPortLookup.put(displayId, port);
}
return mPortLookup.get(displayId);
}
@GuardedBy("mLock")
- private byte doGetPhysicalPortLocked(@NonNull Display display) {
+ private int doGetPhysicalPortLocked(@NonNull Display display) {
if (display.getType() == Display.TYPE_VIRTUAL) {
Log.e(TAG, "Display " + display
+ " is a virtual display and does not have a known port.");
@@ -1055,7 +1054,7 @@
SystemClock.elapsedRealtimeNanos()).build();
}
- CarUxRestrictionsConfiguration createDefaultConfig(byte port) {
+ CarUxRestrictionsConfiguration createDefaultConfig(int port) {
return new CarUxRestrictionsConfiguration.Builder()
.setPhysicalPort(port)
.setUxRestrictions(DRIVING_STATE_PARKED,
@@ -1152,7 +1151,7 @@
mRemoteCallbackList.register(callback);
mActivityViewDisplayInfoMap.put(virtualDisplayId,
new DisplayInfo(callback, physicalDisplayId));
- Byte physicalPort = getPhysicalPortLocked(physicalDisplayId);
+ Integer physicalPort = getPhysicalPortLocked(physicalDisplayId);
if (physicalPort == null) {
// This should not happen.
Log.wtf(TAG, "No known physicalPort for displayId:" + physicalDisplayId);
diff --git a/service/src/com/android/car/ICarImpl.java b/service/src/com/android/car/ICarImpl.java
index 4d78dad..ac2ab18 100644
--- a/service/src/com/android/car/ICarImpl.java
+++ b/service/src/com/android/car/ICarImpl.java
@@ -16,6 +16,8 @@
package com.android.car;
+import static com.android.car.internal.SystemConstants.ICAR_SYSTEM_SERVER_CLIENT;
+
import android.annotation.MainThread;
import android.annotation.Nullable;
import android.app.ActivityManager;
@@ -24,7 +26,6 @@
import android.car.ICar;
import android.car.cluster.renderer.IInstrumentClusterNavigation;
import android.car.user.CarUserManager;
-import android.car.userlib.CarUserManagerHelper;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.res.Resources;
@@ -33,6 +34,7 @@
import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
import android.os.Binder;
import android.os.Build;
+import android.os.Bundle;
import android.os.IBinder;
import android.os.Process;
import android.os.RemoteException;
@@ -50,18 +52,20 @@
import com.android.car.cluster.InstrumentClusterService;
import com.android.car.garagemode.GarageModeService;
import com.android.car.hal.VehicleHal;
+import com.android.car.internal.ICarServiceHelper;
+import com.android.car.internal.ICarSystemServerClient;
+import com.android.car.internal.common.EventLogTags;
import com.android.car.pm.CarPackageManagerService;
+import com.android.car.power.CarPowerManagementService;
+import com.android.car.power.SilentModeController;
import com.android.car.stats.CarStatsService;
import com.android.car.systeminterface.SystemInterface;
-import com.android.car.trust.CarTrustedDeviceService;
import com.android.car.user.CarUserNoticeService;
import com.android.car.user.CarUserService;
import com.android.car.vms.VmsBrokerService;
import com.android.car.watchdog.CarWatchdogService;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.car.EventLogTags;
-import com.android.internal.car.ICarServiceHelper;
import com.android.internal.os.IResultReceiver;
import java.io.FileDescriptor;
@@ -87,6 +91,7 @@
private final SystemActivityMonitoringService mSystemActivityMonitoringService;
private final CarPowerManagementService mCarPowerManagementService;
+ private final SilentModeController mSilentModeController;
private final CarPackageManagerService mCarPackageManagerService;
private final CarInputService mCarInputService;
private final CarDrivingStateService mCarDrivingStateService;
@@ -106,10 +111,7 @@
private final PerUserCarServiceHelper mPerUserCarServiceHelper;
private final CarDiagnosticService mCarDiagnosticService;
private final CarStorageMonitoringService mCarStorageMonitoringService;
- private final CarConfigurationService mCarConfigurationService;
- private final CarTrustedDeviceService mCarTrustedDeviceService;
private final CarMediaService mCarMediaService;
- private final CarUserManagerHelper mUserManagerHelper;
private final CarUserService mCarUserService;
private final CarOccupantZoneService mCarOccupantZoneService;
private final CarUserNoticeService mCarUserNoticeService;
@@ -138,6 +140,8 @@
private final String mVehicleInterfaceName;
+ private final ICarSystemServerClientImpl mICarSystemServerClientImpl;
+
public ICarImpl(Context serviceContext, IVehicle vehicle, SystemInterface systemInterface,
CanBusErrorNotifier errorNotifier, String vehicleInterfaceName) {
this(serviceContext, vehicle, systemInterface, errorNotifier, vehicleInterfaceName,
@@ -173,7 +177,10 @@
disabledFeaturesFromVhal , mSystemInterface.getSystemCarDir());
CarLocalServices.addService(CarFeatureController.class, mFeatureController);
mVehicleInterfaceName = vehicleInterfaceName;
- mUserManagerHelper = new CarUserManagerHelper(serviceContext);
+ mCarPropertyService = new CarPropertyService(serviceContext, mHal.getPropertyHal());
+ mCarDrivingStateService = new CarDrivingStateService(serviceContext, mCarPropertyService);
+ mCarUXRestrictionsService = new CarUxRestrictionsManagerService(serviceContext,
+ mCarDrivingStateService, mCarPropertyService);
if (carUserService != null) {
mCarUserService = carUserService;
} else {
@@ -182,21 +189,19 @@
int maxRunningUsers = res.getInteger(
com.android.internal.R.integer.config_multiuserMaxRunningUsers);
mCarUserService = new CarUserService(serviceContext, mHal.getUserHal(),
- mUserManagerHelper, userManager, ActivityManager.getService(), maxRunningUsers);
+ userManager, ActivityManager.getService(), maxRunningUsers,
+ mCarUXRestrictionsService);
}
mCarOccupantZoneService = new CarOccupantZoneService(serviceContext);
mSystemActivityMonitoringService = new SystemActivityMonitoringService(serviceContext);
mCarPowerManagementService = new CarPowerManagementService(mContext, mHal.getPowerHal(),
systemInterface, mCarUserService);
+ mSilentModeController = new SilentModeController(mContext, systemInterface);
if (mFeatureController.isFeatureEnabled(CarFeatures.FEATURE_CAR_USER_NOTICE_SERVICE)) {
mCarUserNoticeService = new CarUserNoticeService(serviceContext);
} else {
mCarUserNoticeService = null;
}
- mCarPropertyService = new CarPropertyService(serviceContext, mHal.getPropertyHal());
- mCarDrivingStateService = new CarDrivingStateService(serviceContext, mCarPropertyService);
- mCarUXRestrictionsService = new CarUxRestrictionsManagerService(serviceContext,
- mCarDrivingStateService, mCarPropertyService);
if (mFeatureController.isFeatureEnabled(Car.OCCUPANT_AWARENESS_SERVICE)) {
mOccupantAwarenessService = new OccupantAwarenessService(serviceContext);
} else {
@@ -208,7 +213,8 @@
mCarUserService);
mPerUserCarServiceHelper = new PerUserCarServiceHelper(serviceContext, mCarUserService);
mCarBluetoothService = new CarBluetoothService(serviceContext, mPerUserCarServiceHelper);
- mCarInputService = new CarInputService(serviceContext, mHal.getInputHal(), mCarUserService);
+ mCarInputService = new CarInputService(serviceContext, mHal.getInputHal(), mCarUserService,
+ mCarOccupantZoneService);
mCarProjectionService = new CarProjectionService(
serviceContext, null /* handler */, mCarInputService, mCarBluetoothService);
mGarageModeService = new GarageModeService(mContext);
@@ -239,10 +245,7 @@
} else {
mCarStorageMonitoringService = null;
}
- mCarConfigurationService =
- new CarConfigurationService(serviceContext, new JsonReaderImpl());
mCarLocationService = new CarLocationService(serviceContext);
- mCarTrustedDeviceService = new CarTrustedDeviceService(serviceContext);
mCarMediaService = new CarMediaService(serviceContext, mCarUserService);
mCarBugreportManagerService = new CarBugreportManagerService(serviceContext);
if (!Build.IS_USER) {
@@ -258,9 +261,9 @@
}
CarLocalServices.addService(CarPowerManagementService.class, mCarPowerManagementService);
+ CarLocalServices.addService(SilentModeController.class, mSilentModeController);
CarLocalServices.addService(CarPropertyService.class, mCarPropertyService);
CarLocalServices.addService(CarUserService.class, mCarUserService);
- CarLocalServices.addService(CarTrustedDeviceService.class, mCarTrustedDeviceService);
CarLocalServices.addService(CarUserNoticeService.class, mCarUserNoticeService);
CarLocalServices.addService(SystemInterface.class, mSystemInterface);
CarLocalServices.addService(CarDrivingStateService.class, mCarDrivingStateService);
@@ -276,6 +279,7 @@
allServices.add(mCarUserService);
allServices.add(mSystemActivityMonitoringService);
allServices.add(mCarPowerManagementService);
+ allServices.add(mSilentModeController);
allServices.add(mCarPropertyService);
allServices.add(mCarDrivingStateService);
allServices.add(mCarOccupantZoneService);
@@ -296,9 +300,7 @@
allServices.add(mCarProjectionService);
addServiceIfNonNull(allServices, mCarDiagnosticService);
addServiceIfNonNull(allServices, mCarStorageMonitoringService);
- allServices.add(mCarConfigurationService);
addServiceIfNonNull(allServices, mVmsBrokerService);
- allServices.add(mCarTrustedDeviceService);
allServices.add(mCarMediaService);
allServices.add(mCarLocationService);
allServices.add(mCarBugreportManagerService);
@@ -306,6 +308,8 @@
// Always put mCarExperimentalFeatureServiceController in last.
addServiceIfNonNull(allServices, mCarExperimentalFeatureServiceController);
mAllServices = allServices.toArray(new CarServiceBase[allServices.size()]);
+
+ mICarSystemServerClientImpl = new ICarSystemServerClientImpl();
}
private void addServiceIfNonNull(List<CarServiceBase> services, CarServiceBase service) {
@@ -344,48 +348,33 @@
}
@Override
- public void setCarServiceHelper(IBinder helper) {
- EventLog.writeEvent(EventLogTags.CAR_SERVICE_SET_CAR_SERVICE_HELPER,
- Binder.getCallingPid());
- assertCallingFromSystemProcess();
- ICarServiceHelper carServiceHelper = ICarServiceHelper.Stub.asInterface(helper);
- synchronized (mLock) {
- mICarServiceHelper = carServiceHelper;
+ public void setSystemServerConnections(IBinder helper, IBinder receiver) {
+ Bundle bundle;
+ try {
+ EventLog.writeEvent(EventLogTags.CAR_SERVICE_SET_CAR_SERVICE_HELPER,
+ Binder.getCallingPid());
+ assertCallingFromSystemProcess();
+ ICarServiceHelper carServiceHelper = ICarServiceHelper.Stub.asInterface(helper);
+ synchronized (mLock) {
+ mICarServiceHelper = carServiceHelper;
+ }
+ mSystemInterface.setCarServiceHelper(carServiceHelper);
+ mCarOccupantZoneService.setCarServiceHelper(carServiceHelper);
+
+ bundle = new Bundle();
+ bundle.putBinder(ICAR_SYSTEM_SERVER_CLIENT, mICarSystemServerClientImpl.asBinder());
+ } catch (Exception e) {
+ // send back a null response
+ Log.w(TAG, "Exception in setSystemServerConnections", e);
+ bundle = null;
}
- mSystemInterface.setCarServiceHelper(carServiceHelper);
- mCarOccupantZoneService.setCarServiceHelper(carServiceHelper);
- }
- @Override
- public void onUserLifecycleEvent(int eventType, long timestampMs, int fromUserId,
- int toUserId) {
- assertCallingFromSystemProcess();
- EventLog.writeEvent(EventLogTags.CAR_SERVICE_ON_USER_LIFECYCLE, eventType, fromUserId,
- toUserId);
- if (DBG) {
- Log.d(TAG, "onUserLifecycleEvent("
- + CarUserManager.lifecycleEventTypeToString(eventType) + ", " + toUserId + ")");
+ try {
+ IResultReceiver resultReceiver = IResultReceiver.Stub.asInterface(receiver);
+ resultReceiver.send(/* unused */ 0, bundle);
+ } catch (RemoteException e) {
+ Log.w(TAG, "RemoteException from CarServiceHelperService", e);
}
- mCarUserService.onUserLifecycleEvent(eventType, timestampMs, fromUserId, toUserId);
- }
-
- @Override
- public void onFirstUserUnlocked(int userId, long timestampMs, long duration,
- int halResponseTime) {
- mCarUserService.onFirstUserUnlocked(userId, timestampMs, duration, halResponseTime);
- }
-
- @Override
- public void getInitialUserInfo(int requestType, int timeoutMs, IBinder binder) {
- IResultReceiver receiver = IResultReceiver.Stub.asInterface(binder);
- mCarUserService.getInitialUserInfo(requestType, timeoutMs, receiver);
- }
-
- @Override
- public void setInitialUser(int userId) {
- EventLog.writeEvent(EventLogTags.CAR_SERVICE_SET_INITIAL_USER, userId);
- if (DBG) Log.d(TAG, "setInitialUser(): " + userId);
- mCarUserService.setInitialUser(userId);
}
@Override
@@ -443,7 +432,7 @@
* from its own process even if it is not system. The latter can happen in test environment.
* Note that car service runs as system user but test like car service test will not.
*/
- static void assertCallingFromSystemProcessOrSelf() {
+ public static void assertCallingFromSystemProcessOrSelf() {
int uid = Binder.getCallingUid();
int pid = Binder.getCallingPid();
if (uid != Process.SYSTEM_UID && pid != Process.myPid()) {
@@ -514,11 +503,6 @@
return mCarUXRestrictionsService;
case Car.OCCUPANT_AWARENESS_SERVICE:
return mOccupantAwarenessService;
- case Car.CAR_CONFIGURATION_SERVICE:
- return mCarConfigurationService;
- case Car.CAR_TRUST_AGENT_ENROLLMENT_SERVICE:
- assertTrustAgentEnrollmentPermission(mContext);
- return mCarTrustedDeviceService.getCarTrustAgentEnrollmentService();
case Car.CAR_MEDIA_SERVICE:
return mCarMediaService;
case Car.CAR_OCCUPANT_ZONE_SERVICE:
@@ -615,13 +599,6 @@
assertPermission(context, Car.PERMISSION_VMS_SUBSCRIBER);
}
- /**
- * Ensures the caller has the permission to enroll a Trust Agent.
- */
- public static void assertTrustAgentEnrollmentPermission(Context context) {
- assertPermission(context, Car.PERMISSION_CAR_ENROLL_TRUST);
- }
-
public static void assertPermission(Context context, String permission) {
if (context.checkCallingOrSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) {
throw new SecurityException("requires " + permission);
@@ -694,10 +671,6 @@
} else if ("--list-hals".equals(args[0])) {
mHal.dumpListHals(writer);
return;
- } else if ("--user-metrics".equals(args[0])) {
- mCarUserService.dumpUserMetrics(writer);
- } else if ("--first-user-metrics".equals(args[0])) {
- mCarUserService.dumpFirstUserUnlockDuration(writer);
} else if ("--help".equals(args[0])) {
showDumpHelp(writer);
} else {
@@ -755,9 +728,10 @@
private CarShellCommand newCarShellCommand() {
return new CarShellCommand(mContext, mHal, mCarAudioService, mCarPackageManagerService,
- mCarProjectionService, mCarPowerManagementService, mCarTrustedDeviceService,
- mFixedActivityService, mFeatureController, mCarInputService, mCarNightService,
- mSystemInterface, mGarageModeService, mCarUserService, mCarOccupantZoneService);
+ mCarProjectionService, mCarPowerManagementService, mFixedActivityService,
+ mFeatureController, mCarInputService, mCarNightService, mSystemInterface,
+ mGarageModeService, mCarUserService, mCarOccupantZoneService,
+ mSilentModeController);
}
private void dumpListOfServices(PrintWriter writer) {
@@ -819,4 +793,37 @@
private void traceEnd() {
mBootTiming.traceEnd();
}
+
+ private final class ICarSystemServerClientImpl extends ICarSystemServerClient.Stub {
+ @Override
+ public void onUserLifecycleEvent(int eventType, int fromUserId, int toUserId)
+ throws RemoteException {
+ assertCallingFromSystemProcess();
+ EventLog.writeEvent(EventLogTags.CAR_SERVICE_ON_USER_LIFECYCLE, eventType, fromUserId,
+ toUserId);
+ if (DBG) {
+ Log.d(TAG,
+ "onUserLifecycleEvent("
+ + CarUserManager.lifecycleEventTypeToString(eventType) + ", "
+ + toUserId + ")");
+ }
+ mCarUserService.onUserLifecycleEvent(eventType, fromUserId, toUserId);
+ }
+
+ @Override
+ public void initBootUser() throws RemoteException {
+ assertCallingFromSystemProcess();
+ // TODO(b/160819016): add events log
+ if (DBG) Log.d(TAG, "initBootUser(): ");
+ mCarUserService.initBootUser();
+ }
+
+ @Override
+ public void preCreateUsers() throws RemoteException {
+ assertCallingFromSystemProcess();
+ // TODO(b/160819016): add events log
+ if (DBG) Log.d(TAG, "preCreateUsers(): ");
+ mCarUserService.preCreateUsers();
+ }
+ }
}
diff --git a/service/src/com/android/car/InputCaptureClientController.java b/service/src/com/android/car/InputCaptureClientController.java
index 8d140bd..e33b0a5 100644
--- a/service/src/com/android/car/InputCaptureClientController.java
+++ b/service/src/com/android/car/InputCaptureClientController.java
@@ -16,10 +16,14 @@
package com.android.car;
+import static android.car.CarOccupantZoneManager.DisplayTypeEnum;
+
import static java.util.Map.entry;
import android.annotation.NonNull;
+import android.car.CarOccupantZoneManager;
import android.car.input.CarInputManager;
+import android.car.input.CustomInputEvent;
import android.car.input.ICarInputCallback;
import android.car.input.RotaryEvent;
import android.content.Context;
@@ -35,7 +39,6 @@
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.Preconditions;
-
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
@@ -56,9 +59,9 @@
private static final String TAG = CarLog.TAG_INPUT;
/**
- * This table decides which input key goes into which input type. Not mapped here means it is
- * not supported for capturing. Rotary events are treated separately and this is only for
- * key events.
+ * This table decides which input key goes into which input type. Not mapped here means it is
+ * not supported for capturing. Rotary events are treated separately and this is only for
+ * key events.
*/
private static final Map<Integer, Integer> KEY_EVENT_TO_INPUT_TYPE = Map.ofEntries(
entry(KeyEvent.KEYCODE_DPAD_CENTER, CarInputManager.INPUT_TYPE_DPAD_KEYS),
@@ -89,7 +92,8 @@
CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION,
CarInputManager.INPUT_TYPE_DPAD_KEYS,
CarInputManager.INPUT_TYPE_NAVIGATE_KEYS,
- CarInputManager.INPUT_TYPE_SYSTEM_NAVIGATE_KEYS
+ CarInputManager.INPUT_TYPE_SYSTEM_NAVIGATE_KEYS,
+ CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
);
private static final Set<Integer> VALID_ROTARY_TYPES = Set.of(
@@ -98,7 +102,7 @@
// TODO(b/150818155) Need to migrate cluster code to use this to enable it.
private static final List<Integer> SUPPORTED_DISPLAY_TYPES = List.of(
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN
);
private static final int[] EMPTY_INPUT_TYPES = new int[0];
@@ -214,6 +218,10 @@
/** Accessed from dispatch thread only */
private final ArrayList<RotaryEvent> mRotaryEventDispatchScratchList = new ArrayList<>(1);
+ /** Accessed from dispatch thread only */
+ private final ArrayList<CustomInputEvent> mCustomInputEventDispatchScratchList =
+ new ArrayList<>(1);
+
@GuardedBy("mLock")
private int mNumKeyEventsDispatched;
@GuardedBy("mLock")
@@ -228,7 +236,8 @@
* {@link CarInputManager#requestInputEventCapture(CarInputManager.CarInputCaptureCallback,
* int, int[], int)}.
*/
- public int requestInputEventCapture(ICarInputCallback callback, int targetDisplayType,
+ public int requestInputEventCapture(ICarInputCallback callback,
+ @DisplayTypeEnum int targetDisplayType,
int[] inputTypes, int requestFlags) {
ICarImpl.assertPermission(mContext, android.Manifest.permission.MONITOR_INPUT);
@@ -244,8 +253,8 @@
+ " for CAPTURE_REQ_FLAGS_TAKE_ALL_EVENTS_FOR_DISPLAY");
}
}
- if (targetDisplayType != CarInputManager.TARGET_DISPLAY_TYPE_CLUSTER
- && targetDisplayType != CarInputManager.TARGET_DISPLAY_TYPE_MAIN) {
+ if (targetDisplayType != CarOccupantZoneManager.DISPLAY_TYPE_INSTRUMENT_CLUSTER
+ && targetDisplayType != CarOccupantZoneManager.DISPLAY_TYPE_MAIN) {
throw new IllegalArgumentException("Unrecognized display type:" + targetDisplayType);
}
if (inputTypes == null) {
@@ -411,7 +420,7 @@
if (DBG_CALLS) {
Log.i(TAG, "releaseInputEventCapture callback:" + callback
- + ", display:" + targetDisplayType);
+ + ", display:" + targetDisplayType);
}
ClientsToDispatch clientsToDispatch = new ClientsToDispatch(targetDisplayType);
synchronized (mLock) {
@@ -481,12 +490,12 @@
/**
* Dispatches the given {@code KeyEvent} to a capturing client if there is one.
*
- * @param displayType Should be a display type defined in {@code CarInputManager} such as
- * {@link CarInputManager#TARGET_DISPLAY_TYPE_MAIN}.
- * @param event
+ * @param displayType the display type defined in {@code CarInputManager} such as
+ * {@link CarOccupantZoneManager#DISPLAY_TYPE_MAIN}
+ * @param event the key event to handle
* @return true if the event was consumed.
*/
- public boolean onKeyEvent(int displayType, KeyEvent event) {
+ public boolean onKeyEvent(@DisplayTypeEnum int displayType, KeyEvent event) {
if (!SUPPORTED_DISPLAY_TYPES.contains(displayType)) {
return false;
}
@@ -510,12 +519,12 @@
/**
* Dispatches the given {@code RotaryEvent} to a capturing client if there is one.
*
- * @param displayType Should be a display type defined in {@code CarInputManager} such as
- * {@link CarInputManager#TARGET_DISPLAY_TYPE_MAIN}.
- * @param event
+ * @param displayType the display type defined in {@code CarInputManager} such as
+ * {@link CarOccupantZoneManager#DISPLAY_TYPE_MAIN}
+ * @param event the Rotary event to handle
* @return true if the event was consumed.
*/
- public boolean onRotaryEvent(int displayType, RotaryEvent event) {
+ public boolean onRotaryEvent(@DisplayTypeEnum int displayType, RotaryEvent event) {
if (!SUPPORTED_DISPLAY_TYPES.contains(displayType)) {
Log.w(TAG, "onRotaryEvent for not supported display:" + displayType);
return false;
@@ -542,6 +551,37 @@
return true;
}
+ /**
+ * Dispatches the given {@link CustomInputEvent} to a capturing client if there is one.
+ * Nothing happens if no callback was registered for the incoming event. In this case this
+ * method will return {@code false}.
+ * <p>
+ * In case of there are more than one client registered for this event, then only the first one
+ * will be notified.
+ *
+ * @param event the {@link CustomInputEvent} to dispatch
+ * @return {@code true} if the event was consumed.
+ */
+ public boolean onCustomInputEvent(CustomInputEvent event) {
+ int displayType = event.getTargetDisplayType();
+ if (!SUPPORTED_DISPLAY_TYPES.contains(displayType)) {
+ Log.w(TAG, "onCustomInputEvent for not supported display:" + displayType);
+ return false;
+ }
+ ICarInputCallback callback;
+ synchronized (mLock) {
+ callback = getClientForInputTypeLocked(displayType,
+ CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT);
+ if (callback == null) {
+ Log.w(TAG, "No client for input: " + CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT
+ + " and display: " + displayType);
+ return false;
+ }
+ }
+ dispatchCustomInputEvent(displayType, event, callback);
+ return true;
+ }
+
ICarInputCallback getClientForInputTypeLocked(int targetDisplayType, int inputType) {
LinkedList<ClientInfoForDisplay> fullCapturersStack = mFullDisplayEventCapturers.get(
targetDisplayType);
@@ -571,14 +611,14 @@
public void dump(PrintWriter writer) {
writer.println("**InputCaptureClientController**");
synchronized (mLock) {
- for (int display: SUPPORTED_DISPLAY_TYPES) {
+ for (int display : SUPPORTED_DISPLAY_TYPES) {
writer.println("***Display:" + display);
HashMap<IBinder, ClientInfoForDisplay> allClientsForDisplay = mAllClients.get(
display);
if (allClientsForDisplay != null) {
writer.println("****All clients:");
- for (ClientInfoForDisplay client: allClientsForDisplay.values()) {
+ for (ClientInfoForDisplay client : allClientsForDisplay.values()) {
writer.println(client);
}
}
@@ -587,7 +627,7 @@
mFullDisplayEventCapturers.get(display);
if (fullCapturersStack != null) {
writer.println("****Full capture stack");
- for (ClientInfoForDisplay client: fullCapturersStack) {
+ for (ClientInfoForDisplay client : fullCapturersStack) {
writer.println(client);
}
}
@@ -599,7 +639,7 @@
LinkedList<ClientInfoForDisplay> perInputStack = perInputStacks.valueAt(i);
if (perInputStack.size() > 0) {
writer.println("**** Per Input stack, input type:" + inputType);
- for (ClientInfoForDisplay client: perInputStack) {
+ for (ClientInfoForDisplay client : perInputStack) {
writer.println(client);
}
}
@@ -659,7 +699,9 @@
try {
callback.onKeyEvents(targetDisplayType, mKeyEventDispatchScratchList);
} catch (RemoteException e) {
- // Ignore. Let death handler deal with it.
+ if (DBG_DISPATCH) {
+ Log.e(TAG, "Failed to dispatch KeyEvent " + event, e);
+ }
}
});
}
@@ -669,13 +711,37 @@
if (DBG_DISPATCH) {
Log.i(TAG, "dispatchRotaryEvent:" + event);
}
+ // TODO(b/159623196): Use HandlerThread for dispatching rather than relying on the main
+ // thread. Change here and other dispatch methods.
CarServiceUtils.runOnMain(() -> {
mRotaryEventDispatchScratchList.clear();
mRotaryEventDispatchScratchList.add(event);
try {
callback.onRotaryEvents(targetDisplayType, mRotaryEventDispatchScratchList);
} catch (RemoteException e) {
- // Ignore. Let death handler deal with it.
+ if (DBG_DISPATCH) {
+ Log.e(TAG, "Failed to dispatch RotaryEvent " + event, e);
+ }
+ }
+ });
+ }
+
+ private void dispatchCustomInputEvent(@DisplayTypeEnum int targetDisplayType,
+ CustomInputEvent event,
+ ICarInputCallback callback) {
+ if (DBG_DISPATCH) {
+ Log.d(TAG, "dispatchCustomInputEvent:" + event);
+ }
+ CarServiceUtils.runOnMain(() -> {
+ mCustomInputEventDispatchScratchList.clear();
+ mCustomInputEventDispatchScratchList.add(event);
+ try {
+ callback.onCustomInputEvents(targetDisplayType,
+ mCustomInputEventDispatchScratchList);
+ } catch (RemoteException e) {
+ if (DBG_DISPATCH) {
+ Log.e(TAG, "Failed to dispatch CustomInputEvent " + event, e);
+ }
}
});
}
diff --git a/service/src/com/android/car/JsonReaderImpl.java b/service/src/com/android/car/JsonReaderImpl.java
deleted file mode 100644
index 2ab7c32..0000000
--- a/service/src/com/android/car/JsonReaderImpl.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2018 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.car;
-
-import android.annotation.Nullable;
-import android.annotation.RawRes;
-import android.content.Context;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.Reader;
-
-/**
- * An implementation of {@link com.android.car.CarConfigurationService.JsonReader} that will
- * parse a JSON file on the system that is mapped to {@code R.raw.car_config}.
- */
-public class JsonReaderImpl implements CarConfigurationService.JsonReader {
- private static final int BUF_SIZE = 0x1000; // 2K chars (4K bytes)
- private static final String JSON_FILE_ENCODING = "UTF-8";
-
- /**
- * Takes a resource file that is considered to be a JSON file and parses it into a String that
- * is returned.
- *
- * @param resId The resource id pointing to the json file.
- * @return A {@code String} representing the file contents, or {@code null} if
- */
- @Override
- @Nullable
- public String jsonFileToString(Context context, @RawRes int resId) {
- InputStream is = context.getResources().openRawResource(resId);
-
- // Note: this "try" will close the Reader, thus closing the associated InputStreamReader
- // and InputStream.
- try (Reader reader = new BufferedReader(new InputStreamReader(is, JSON_FILE_ENCODING))) {
- char[] buffer = new char[BUF_SIZE];
- StringBuilder stringBuilder = new StringBuilder();
-
- int bufferedContent;
- while ((bufferedContent = reader.read(buffer)) != -1) {
- stringBuilder.append(buffer, /* offset= */ 0, bufferedContent);
- }
-
- return stringBuilder.toString();
- } catch (IOException e) {
- return null;
- }
- }
-}
diff --git a/service/src/com/android/car/SystemActivityMonitoringService.java b/service/src/com/android/car/SystemActivityMonitoringService.java
index 418dd3b..b8e5ad9 100644
--- a/service/src/com/android/car/SystemActivityMonitoringService.java
+++ b/service/src/com/android/car/SystemActivityMonitoringService.java
@@ -18,8 +18,8 @@
import static com.android.car.pm.CarPackageManagerService.BLOCKING_INTENT_EXTRA_DISPLAY_ID;
import android.app.ActivityManager;
-import android.app.ActivityManager.StackInfo;
import android.app.ActivityOptions;
+import android.app.ActivityTaskManager.RootTaskInfo;
import android.app.IActivityManager;
import android.app.IProcessObserver;
import android.app.TaskStackListener;
@@ -63,15 +63,15 @@
public final int taskId;
public final int displayId;
public final int position;
- public final StackInfo stackInfo;
+ public final RootTaskInfo taskInfo;
private TopTaskInfoContainer(ComponentName topActivity, int taskId,
- int displayId, int position, StackInfo stackInfo) {
+ int displayId, int position, RootTaskInfo taskInfo) {
this.topActivity = topActivity;
this.taskId = taskId;
this.displayId = displayId;
this.position = position;
- this.stackInfo = stackInfo;
+ this.taskInfo = taskInfo;
}
public boolean isMatching(TopTaskInfoContainer taskInfo) {
@@ -80,7 +80,7 @@
&& this.taskId == taskInfo.taskId
&& this.displayId == taskInfo.displayId
&& this.position == taskInfo.position
- && this.stackInfo.userId == taskInfo.stackInfo.userId;
+ && this.taskInfo.userId == taskInfo.taskInfo.userId;
}
@Override
@@ -88,7 +88,7 @@
return String.format(
"TaskInfoContainer [topActivity=%s, taskId=%d, stackId=%d, userId=%d, "
+ "displayId=%d, position=%d",
- topActivity, taskId, stackInfo.stackId, stackInfo.userId, displayId, position);
+ topActivity, taskId, taskInfo.taskId, taskInfo.userId, displayId, position);
}
}
@@ -228,10 +228,10 @@
int userId = 0;
try {
findRootActivityName:
- for (StackInfo info : mAm.getAllStackInfos()) {
- for (int i = 0; i < info.taskIds.length; i++) {
- if (info.taskIds[i] == taskId) {
- rootActivityName = info.taskNames[i];
+ for (RootTaskInfo info : mAm.getAllRootTaskInfos()) {
+ for (int i = 0; i < info.childTaskIds.length; i++) {
+ if (info.childTaskIds[i] == taskId) {
+ rootActivityName = info.childTaskNames[i];
userId = info.userId;
if (Log.isLoggable(CarLog.TAG_AM, Log.DEBUG)) {
Log.d(CarLog.TAG_AM, "Root activity is " + rootActivityName);
@@ -272,9 +272,9 @@
}
private void updateTasks() {
- List<StackInfo> infos;
+ List<RootTaskInfo> infos;
try {
- infos = mAm.getAllStackInfos();
+ infos = mAm.getAllRootTaskInfos();
} catch (RemoteException e) {
Log.e(CarLog.TAG_AM, "cannot getTasks", e);
return;
@@ -288,9 +288,9 @@
try {
// TODO(b/66955160): Someone on the Auto-team should probably re-work the code in the
// synchronized block below based on this new API.
- final StackInfo focusedStackInfo = mAm.getFocusedStackInfo();
- if (focusedStackInfo != null) {
- focusedStackId = focusedStackInfo.stackId;
+ final RootTaskInfo focusedTaskInfo = mAm.getFocusedRootTaskInfo();
+ if (focusedTaskInfo != null) {
+ focusedStackId = focusedTaskInfo.taskId;
}
} catch (RemoteException e) {
Log.e(CarLog.TAG_AM, "cannot getFocusedStackId", e);
@@ -303,13 +303,14 @@
mTopTasks.clear();
listener = mActivityLaunchListener;
- for (StackInfo info : infos) {
+ for (RootTaskInfo info : infos) {
int displayId = info.displayId;
- if (info.taskNames.length == 0 || !info.visible) { // empty stack or not shown
+ if (info.childTaskNames.length == 0
+ || !info.visible) { // empty stack or not shown
continue;
}
TopTaskInfoContainer newTopTaskInfo = new TopTaskInfoContainer(
- info.topActivity, info.taskIds[info.taskIds.length - 1],
+ info.topActivity, info.childTaskIds[info.childTaskIds.length - 1],
info.displayId, info.position, info);
TopTaskInfoContainer currentTopTaskInfo = topTasks.get(displayId);
@@ -341,19 +342,19 @@
}
}
- public StackInfo getFocusedStackForTopActivity(ComponentName activity) {
- StackInfo focusedStack;
+ public RootTaskInfo getFocusedStackForTopActivity(ComponentName activity) {
+ RootTaskInfo focusedStack;
try {
- focusedStack = mAm.getFocusedStackInfo();
+ focusedStack = mAm.getFocusedRootTaskInfo();
} catch (RemoteException e) {
Log.e(CarLog.TAG_AM, "cannot getFocusedStackId", e);
return null;
}
- if (focusedStack.taskNames.length == 0) { // nothing in focused stack
+ if (focusedStack.childTaskNames.length == 0) { // nothing in focused stack
return null;
}
ComponentName topActivity = ComponentName.unflattenFromString(
- focusedStack.taskNames[focusedStack.taskNames.length - 1]);
+ focusedStack.childTaskNames[focusedStack.childTaskNames.length - 1]);
if (topActivity.equals(activity)) {
return focusedStack;
} else {
@@ -405,30 +406,30 @@
ActivityOptions options = ActivityOptions.makeBasic();
options.setLaunchDisplayId(displayId);
mContext.startActivityAsUser(newActivityIntent, options.toBundle(),
- new UserHandle(currentTask.stackInfo.userId));
+ new UserHandle(currentTask.taskInfo.userId));
// Now make stack with new activity focused.
findTaskAndGrantFocus(newActivityIntent.getComponent());
}
private void findTaskAndGrantFocus(ComponentName activity) {
- List<StackInfo> infos;
+ List<RootTaskInfo> infos;
try {
- infos = mAm.getAllStackInfos();
+ infos = mAm.getAllRootTaskInfos();
} catch (RemoteException e) {
Log.e(CarLog.TAG_AM, "cannot getTasks", e);
return;
}
- for (StackInfo info : infos) {
- if (info.taskNames.length == 0) {
+ for (RootTaskInfo info : infos) {
+ if (info.childTaskNames.length == 0) {
continue;
}
ComponentName topActivity = ComponentName.unflattenFromString(
- info.taskNames[info.taskNames.length - 1]);
+ info.childTaskNames[info.childTaskNames.length - 1]);
if (activity.equals(topActivity)) {
try {
- mAm.setFocusedStack(info.stackId);
+ mAm.setFocusedRootTask(info.taskId);
} catch (RemoteException e) {
- Log.e(CarLog.TAG_AM, "cannot setFocusedStack to stack:" + info.stackId, e);
+ Log.e(CarLog.TAG_AM, "cannot setFocusedRootTask to task:" + info.taskId, e);
}
return;
}
diff --git a/service/src/com/android/car/am/FixedActivityService.java b/service/src/com/android/car/am/FixedActivityService.java
index 81bc470..7e0726f 100644
--- a/service/src/com/android/car/am/FixedActivityService.java
+++ b/service/src/com/android/car/am/FixedActivityService.java
@@ -25,9 +25,9 @@
import android.annotation.Nullable;
import android.annotation.UserIdInt;
import android.app.ActivityManager;
-import android.app.ActivityManager.StackInfo;
import android.app.ActivityOptions;
import android.app.ActivityTaskManager;
+import android.app.ActivityTaskManager.RootTaskInfo;
import android.app.IActivityManager;
import android.app.IActivityTaskManager;
import android.app.IProcessObserver;
@@ -244,10 +244,10 @@
private void moveFocusBackToDefaultDisplay(int taskId) {
try {
- List<StackInfo> tasks = mAtm.getAllStackInfosOnDisplay(Display.DEFAULT_DISPLAY);
+ List<RootTaskInfo> tasks = mAtm.getAllRootTaskInfosOnDisplay(Display.DEFAULT_DISPLAY);
if (tasks.size() == 0) return;
- StackInfo topStack = tasks.get(0);
- int topTaskIdInDefaultDisplay = topStack.taskIds[topStack.taskIds.length - 1];
+ RootTaskInfo topStack = tasks.get(0);
+ int topTaskIdInDefaultDisplay = topStack.childTaskIds[topStack.childTaskIds.length - 1];
if (DBG) {
Log.d(TAG_AM, "FixedActivity #" + taskId + " got the focus, return back to #"
+ topTaskIdInDefaultDisplay);
@@ -430,9 +430,9 @@
}
@Nullable
- private List<StackInfo> getStackInfos() {
+ private List<RootTaskInfo> getRootTaskInfos() {
try {
- return mAm.getAllStackInfos();
+ return mAm.getAllRootTaskInfos();
} catch (RemoteException e) {
Log.e(TAG_AM, "remote exception from AM", e);
}
@@ -447,9 +447,9 @@
* launched. It will return false for {@link Display#INVALID_DISPLAY} {@code displayId}.
*/
private boolean launchIfNecessary(int displayId) {
- List<StackInfo> infos = getStackInfos();
+ List<RootTaskInfo> infos = getRootTaskInfos();
if (infos == null) {
- Log.e(TAG_AM, "cannot get StackInfo from AM");
+ Log.e(TAG_AM, "cannot get RootTaskInfo from AM");
return false;
}
long now = SystemClock.elapsedRealtime();
@@ -503,33 +503,34 @@
mRunningActivities.removeAt(i);
}
int previousDisplayId = Display.INVALID_DISPLAY;
- for (StackInfo stackInfo : infos) {
+ for (RootTaskInfo taskInfo : infos) {
// In the current ATMS implementation which enumerates the display first, then
// enumerates the stack/task, so the tasks in the same display come consecutively.
- if (stackInfo.displayId == previousDisplayId) {
+ if (taskInfo.displayId == previousDisplayId) {
// 2nd+ tasks, skip it.
continue;
}
- previousDisplayId = stackInfo.displayId;
- RunningActivityInfo activityInfo = mRunningActivities.get(stackInfo.displayId);
+ previousDisplayId = taskInfo.displayId;
+ RunningActivityInfo activityInfo = mRunningActivities.get(taskInfo.displayId);
if (activityInfo == null) {
continue;
}
- int topUserId = stackInfo.taskUserIds[stackInfo.taskUserIds.length - 1];
- if (activityInfo.intent.getComponent().equals(stackInfo.topActivity)
- && activityInfo.userId == topUserId && stackInfo.visible) {
+ int topUserId = taskInfo.childTaskUserIds[taskInfo.childTaskUserIds.length - 1];
+ if (activityInfo.intent.getComponent().equals(taskInfo.topActivity)
+ && activityInfo.userId == topUserId && taskInfo.visible) {
// top one is matching.
activityInfo.isVisible = true;
- activityInfo.taskId = stackInfo.taskIds[stackInfo.taskIds.length - 1];
+ activityInfo.taskId = taskInfo.childTaskIds[taskInfo.childTaskIds.length - 1];
continue;
}
- activityInfo.previousTaskId = stackInfo.taskIds[stackInfo.taskIds.length - 1];
+ activityInfo.previousTaskId =
+ taskInfo.childTaskIds[taskInfo.childTaskIds.length - 1];
Log.i(TAG_AM, "Unmatched top activity will be removed:"
- + stackInfo.topActivity + " top task id:" + activityInfo.previousTaskId
- + " user:" + topUserId + " display:" + stackInfo.displayId);
+ + taskInfo.topActivity + " top task id:" + activityInfo.previousTaskId
+ + " user:" + topUserId + " display:" + taskInfo.displayId);
activityInfo.inBackground = false;
- for (int i = 0; i < stackInfo.taskIds.length - 1; i++) {
- if (activityInfo.taskId == stackInfo.taskIds[i]) {
+ for (int i = 0; i < taskInfo.childTaskIds.length - 1; i++) {
+ if (activityInfo.taskId == taskInfo.childTaskIds[i]) {
activityInfo.inBackground = true;
}
}
diff --git a/service/src/com/android/car/audio/CarAudioContext.java b/service/src/com/android/car/audio/CarAudioContext.java
index f05157b..2348cbe 100644
--- a/service/src/com/android/car/audio/CarAudioContext.java
+++ b/service/src/com/android/car/audio/CarAudioContext.java
@@ -16,13 +16,12 @@
package com.android.car.audio;
+import android.annotation.IntDef;
import android.media.AudioAttributes;
import android.media.AudioAttributes.AttributeUsage;
import android.util.SparseArray;
import android.util.SparseIntArray;
-import androidx.annotation.IntDef;
-
import com.android.internal.util.Preconditions;
import java.lang.annotation.Retention;
diff --git a/service/src/com/android/car/audio/CarAudioSettings.java b/service/src/com/android/car/audio/CarAudioSettings.java
index ef2d5a2..a31b5c2 100644
--- a/service/src/com/android/car/audio/CarAudioSettings.java
+++ b/service/src/com/android/car/audio/CarAudioSettings.java
@@ -15,13 +15,12 @@
*/
package com.android.car.audio;
+import android.annotation.NonNull;
import android.annotation.UserIdInt;
import android.car.settings.CarSettings;
import android.content.ContentResolver;
import android.provider.Settings;
-import androidx.annotation.NonNull;
-
import java.util.Objects;
/**
diff --git a/service/src/com/android/car/audio/CarVolumeCallbackHandler.java b/service/src/com/android/car/audio/CarVolumeCallbackHandler.java
index 71cb844..f352a64 100644
--- a/service/src/com/android/car/audio/CarVolumeCallbackHandler.java
+++ b/service/src/com/android/car/audio/CarVolumeCallbackHandler.java
@@ -15,13 +15,12 @@
*/
package com.android.car.audio;
+import android.annotation.NonNull;
import android.car.media.ICarVolumeCallback;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
-import androidx.annotation.NonNull;
-
import com.android.car.BinderInterfaceContainer;
import com.android.car.CarLog;
diff --git a/service/src/com/android/car/audio/FocusEntry.java b/service/src/com/android/car/audio/FocusEntry.java
index ec9b8c5..d6b0005 100644
--- a/service/src/com/android/car/audio/FocusEntry.java
+++ b/service/src/com/android/car/audio/FocusEntry.java
@@ -15,6 +15,7 @@
*/
package com.android.car.audio;
+import android.annotation.NonNull;
import android.car.Car;
import android.car.media.CarAudioManager;
import android.content.pm.PackageManager;
@@ -22,8 +23,6 @@
import android.media.AudioManager;
import android.os.Bundle;
-import androidx.annotation.NonNull;
-
import com.android.car.audio.CarAudioContext.AudioContext;
import java.io.PrintWriter;
diff --git a/service/src/com/android/car/audio/FocusInteraction.java b/service/src/com/android/car/audio/FocusInteraction.java
index eeb8321..90da140 100644
--- a/service/src/com/android/car/audio/FocusInteraction.java
+++ b/service/src/com/android/car/audio/FocusInteraction.java
@@ -28,9 +28,8 @@
import android.provider.Settings;
import android.util.Log;
-import androidx.annotation.VisibleForTesting;
-
import com.android.car.audio.CarAudioContext.AudioContext;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.Preconditions;
import java.io.PrintWriter;
diff --git a/service/src/com/android/car/audio/hal/AudioControlWrapper.java b/service/src/com/android/car/audio/hal/AudioControlWrapper.java
index c491056..f612a1a 100644
--- a/service/src/com/android/car/audio/hal/AudioControlWrapper.java
+++ b/service/src/com/android/car/audio/hal/AudioControlWrapper.java
@@ -16,11 +16,10 @@
package com.android.car.audio.hal;
+import android.annotation.Nullable;
import android.hardware.automotive.audiocontrol.V2_0.IFocusListener;
import android.media.AudioAttributes.AttributeUsage;
-import androidx.annotation.Nullable;
-
import java.io.PrintWriter;
/**
diff --git a/service/src/com/android/car/audio/hal/AudioControlWrapperV1.java b/service/src/com/android/car/audio/hal/AudioControlWrapperV1.java
index 433b5d5..42b4b3b 100644
--- a/service/src/com/android/car/audio/hal/AudioControlWrapperV1.java
+++ b/service/src/com/android/car/audio/hal/AudioControlWrapperV1.java
@@ -16,13 +16,12 @@
package com.android.car.audio.hal;
+import android.annotation.Nullable;
import android.hardware.automotive.audiocontrol.V1_0.IAudioControl;
import android.hardware.automotive.audiocontrol.V2_0.IFocusListener;
import android.os.RemoteException;
import android.util.Log;
-import androidx.annotation.Nullable;
-
import com.android.car.audio.CarAudioContext;
import com.android.internal.annotations.VisibleForTesting;
diff --git a/service/src/com/android/car/audio/hal/AudioControlWrapperV2.java b/service/src/com/android/car/audio/hal/AudioControlWrapperV2.java
index ff504f4..a531a5a 100644
--- a/service/src/com/android/car/audio/hal/AudioControlWrapperV2.java
+++ b/service/src/com/android/car/audio/hal/AudioControlWrapperV2.java
@@ -16,6 +16,7 @@
package com.android.car.audio.hal;
+import android.annotation.Nullable;
import android.hardware.automotive.audiocontrol.V2_0.IAudioControl;
import android.hardware.automotive.audiocontrol.V2_0.ICloseHandle;
import android.hardware.automotive.audiocontrol.V2_0.IFocusListener;
@@ -24,8 +25,6 @@
import android.os.RemoteException;
import android.util.Log;
-import androidx.annotation.Nullable;
-
import java.io.PrintWriter;
import java.util.NoSuchElementException;
import java.util.Objects;
diff --git a/service/src/com/android/car/audio/hal/HalAudioFocus.java b/service/src/com/android/car/audio/hal/HalAudioFocus.java
index eff0168..b60bec8 100644
--- a/service/src/com/android/car/audio/hal/HalAudioFocus.java
+++ b/service/src/com/android/car/audio/hal/HalAudioFocus.java
@@ -21,6 +21,7 @@
import static android.media.AudioManager.AUDIOFOCUS_REQUEST_FAILED;
import static android.media.AudioManager.AUDIOFOCUS_REQUEST_GRANTED;
+import android.annotation.NonNull;
import android.car.media.CarAudioManager;
import android.hardware.automotive.audiocontrol.V2_0.IFocusListener;
import android.media.AudioAttributes;
@@ -32,8 +33,6 @@
import android.util.Log;
import android.util.SparseArray;
-import androidx.annotation.NonNull;
-
import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.Preconditions;
diff --git a/service/src/com/android/car/cluster/InstrumentClusterService.java b/service/src/com/android/car/cluster/InstrumentClusterService.java
index 94f31d2..8a95eb3 100644
--- a/service/src/com/android/car/cluster/InstrumentClusterService.java
+++ b/service/src/com/android/car/cluster/InstrumentClusterService.java
@@ -81,7 +81,7 @@
private final AppFocusService mAppFocusService;
private final CarInputService mCarInputService;
/**
- * TODO: (b/121277787) Remove this on master.
+ * TODO: (b/121277787) Remove this on main.
* @deprecated CarInstrumentClusterManager is being deprecated.
*/
@Deprecated
@@ -476,7 +476,7 @@
}
/**
- * TODO: (b/121277787) Remove on master
+ * TODO: (b/121277787) Remove on main
* @deprecated CarClusterManager is being deprecated.
*/
@Deprecated
diff --git a/service/src/com/android/car/garagemode/Controller.java b/service/src/com/android/car/garagemode/Controller.java
index d7cda0a..86d5c82 100644
--- a/service/src/com/android/car/garagemode/Controller.java
+++ b/service/src/com/android/car/garagemode/Controller.java
@@ -30,7 +30,7 @@
import com.android.car.systeminterface.SystemInterface;
import com.android.internal.annotations.VisibleForTesting;
-import java.util.List;
+import java.io.PrintWriter;
import java.util.concurrent.CompletableFuture;
/**
@@ -108,10 +108,10 @@
}
/**
- * @return Garage Mode's status, including what jobs it is waiting for
+ * Prints Garage Mode's status, including what jobs it is waiting for
*/
- List<String> dump() {
- return mGarageMode.dump();
+ void dump(PrintWriter writer) {
+ mGarageMode.dump(writer);
}
/**
diff --git a/service/src/com/android/car/garagemode/GarageMode.java b/service/src/com/android/car/garagemode/GarageMode.java
index 5698657..1e26ffd 100644
--- a/service/src/com/android/car/garagemode/GarageMode.java
+++ b/service/src/com/android/car/garagemode/GarageMode.java
@@ -25,12 +25,13 @@
import android.util.ArraySet;
import com.android.car.CarLocalServices;
-import com.android.car.CarPowerManagementService;
import com.android.car.CarStatsLogHelper;
+import com.android.car.power.CarPowerManagementService;
import com.android.car.user.CarUserService;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
+import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CancellationException;
@@ -176,30 +177,28 @@
}
}
- List<String> dump() {
- List<String> outString = new ArrayList<>();
+ void dump(PrintWriter writer) {
if (!mGarageModeActive) {
- return outString;
+ return;
}
- outString.add("GarageMode idle checker is " + (mIdleCheckerIsRunning ? "" : "not ")
- + "running");
+ writer.printf("GarageMode idle checker is %srunning\n",
+ (mIdleCheckerIsRunning ? "" : "not "));
List<String> jobList = new ArrayList<>();
int numJobs = getListOfIdleJobsRunning(jobList);
if (numJobs > 0) {
- outString.add("GarageMode is waiting for " + numJobs + " jobs:");
+ writer.printf("GarageMode is waiting for %d jobs:\n", numJobs);
// Dump the names of the jobs that we are waiting for
for (int idx = 0; idx < jobList.size(); idx++) {
- outString.add(" " + (idx + 1) + ": " + jobList.get(idx));
+ writer.printf(" %d: %s\n", idx + 1, jobList.get(idx));
}
} else {
// Dump the names of the pending jobs that we are waiting for
numJobs = getListOfPendingJobs(jobList);
- outString.add("GarageMode is waiting for " + jobList.size() + " pending idle jobs:");
+ writer.printf("GarageMode is waiting for %d pending idle jobs:\n", jobList.size());
for (int idx = 0; idx < jobList.size(); idx++) {
- outString.add(" " + (idx + 1) + ": " + jobList.get(idx));
+ writer.printf(" %d: %s\n", idx + 1, jobList.get(idx));
}
}
- return outString;
}
void enterGarageMode(CompletableFuture<Void> future) {
diff --git a/service/src/com/android/car/garagemode/GarageModeService.java b/service/src/com/android/car/garagemode/GarageModeService.java
index ea67b91..a095749 100644
--- a/service/src/com/android/car/garagemode/GarageModeService.java
+++ b/service/src/com/android/car/garagemode/GarageModeService.java
@@ -23,7 +23,6 @@
import com.android.internal.annotations.VisibleForTesting;
import java.io.PrintWriter;
-import java.util.List;
/**
* Main service container for car Garage Mode.
@@ -70,10 +69,7 @@
public void dump(PrintWriter writer) {
boolean isActive = mController.isGarageModeActive();
writer.println("GarageModeInProgress " + isActive);
- List<String> status = mController.dump();
- for (int idx = 0; idx < status.size(); idx++) {
- writer.println(status.get(idx));
- }
+ mController.dump(writer);
}
/**
diff --git a/service/src/com/android/car/hal/CarPropertyUtils.java b/service/src/com/android/car/hal/CarPropertyUtils.java
index 92258c2..3c8004b 100644
--- a/service/src/com/android/car/hal/CarPropertyUtils.java
+++ b/service/src/com/android/car/hal/CarPropertyUtils.java
@@ -264,13 +264,13 @@
builder.addAreaConfig(area.areaId, area.minFloatValue, area.maxFloatValue);
} else if (classMatched(Long.class, clazz)) {
builder.addAreaConfig(area.areaId, area.minInt64Value, area.maxInt64Value);
- } else if (classMatched(Boolean.class, clazz) ||
- classMatched(Float[].class, clazz) ||
- classMatched(Integer[].class, clazz) ||
- classMatched(Long[].class, clazz) ||
- classMatched(String.class, clazz) ||
- classMatched(byte[].class, clazz) ||
- classMatched(Object[].class, clazz)) {
+ } else if (classMatched(Boolean.class, clazz)
+ || classMatched(Float[].class, clazz)
+ || classMatched(Integer[].class, clazz)
+ || classMatched(Long[].class, clazz)
+ || classMatched(String.class, clazz)
+ || classMatched(byte[].class, clazz)
+ || classMatched(Object[].class, clazz)) {
// These property types do not have min/max values
builder.addArea(area.areaId);
} else {
diff --git a/service/src/com/android/car/hal/DiagnosticHalService.java b/service/src/com/android/car/hal/DiagnosticHalService.java
index fed4eca..5e85021 100644
--- a/service/src/com/android/car/hal/DiagnosticHalService.java
+++ b/service/src/com/android/car/hal/DiagnosticHalService.java
@@ -65,7 +65,10 @@
@GuardedBy("mLock")
private boolean mIsReady = false;
- public static class DiagnosticCapabilities {
+ /**
+ * Nested class used as a place holder for vehicle HAL's diagnosed properties.
+ */
+ public static final class DiagnosticCapabilities {
private final CopyOnWriteArraySet<Integer> mProperties = new CopyOnWriteArraySet<>();
void setSupported(int propertyId) {
@@ -158,26 +161,27 @@
case VehicleProperty.OBD2_LIVE_FRAME:
mDiagnosticCapabilities.setSupported(propConfig.prop);
mVehiclePropertyToConfig.put(propConfig.prop, propConfig);
- Log.i(CarLog.TAG_DIAGNOSTIC, String.format("configArray for OBD2_LIVE_FRAME is %s",
- propConfig.configArray));
+ Log.i(CarLog.TAG_DIAGNOSTIC, "configArray for OBD2_LIVE_FRAME is "
+ + propConfig.configArray);
return CarDiagnosticManager.FRAME_TYPE_LIVE;
case VehicleProperty.OBD2_FREEZE_FRAME:
mDiagnosticCapabilities.setSupported(propConfig.prop);
mVehiclePropertyToConfig.put(propConfig.prop, propConfig);
- Log.i(CarLog.TAG_DIAGNOSTIC, String.format("configArray for OBD2_FREEZE_FRAME is %s",
- propConfig.configArray));
+ Log.i(CarLog.TAG_DIAGNOSTIC, "configArray for OBD2_FREEZE_FRAME is "
+ + propConfig.configArray);
return CarDiagnosticManager.FRAME_TYPE_FREEZE;
case VehicleProperty.OBD2_FREEZE_FRAME_INFO:
mDiagnosticCapabilities.setSupported(propConfig.prop);
return propConfig.prop;
case VehicleProperty.OBD2_FREEZE_FRAME_CLEAR:
mDiagnosticCapabilities.setSupported(propConfig.prop);
- Log.i(CarLog.TAG_DIAGNOSTIC, String.format(
- "configArray for OBD2_FREEZE_FRAME_CLEAR is %s", propConfig.configArray));
+ Log.i(CarLog.TAG_DIAGNOSTIC, "configArray for OBD2_FREEZE_FRAME_CLEAR is "
+ + propConfig.configArray);
if (propConfig.configArray.size() < 1) {
Log.e(CarLog.TAG_DIAGNOSTIC, String.format(
- "property 0x%x does not specify whether it supports selective " +
- "clearing of freeze frames. assuming it does not.", propConfig.prop));
+ "property 0x%x does not specify whether it supports selective "
+ + "clearing of freeze frames. assuming it does not.",
+ propConfig.prop));
} else {
if (propConfig.configArray.get(0) == 1) {
mDiagnosticCapabilities.setSupported(OBD2_SELECTIVE_FRAME_CLEAR);
@@ -333,12 +337,11 @@
private int getNumIntegerSensors(int halPropId) {
int count = DiagnosticIntegerSensorIndex.LAST_SYSTEM_INDEX + 1;
List<Integer> configArray = getPropConfigArray(halPropId);
- if(configArray.size() < 2) {
+ if (configArray.size() < 2) {
Log.e(CarLog.TAG_DIAGNOSTIC, String.format(
- "property 0x%x does not specify the number of vendor-specific properties." +
- "assuming 0.", halPropId));
- }
- else {
+ "property 0x%x does not specify the number of vendor-specific properties."
+ + "assuming 0.", halPropId));
+ } else {
count += configArray.get(0);
}
return count;
@@ -347,23 +350,19 @@
private int getNumFloatSensors(int halPropId) {
int count = DiagnosticFloatSensorIndex.LAST_SYSTEM_INDEX + 1;
List<Integer> configArray = getPropConfigArray(halPropId);
- if(configArray.size() < 2) {
+ if (configArray.size() < 2) {
Log.e(CarLog.TAG_DIAGNOSTIC, String.format(
- "property 0x%x does not specify the number of vendor-specific properties." +
- "assuming 0.", halPropId));
- }
- else {
+ "property 0x%x does not specify the number of vendor-specific properties."
+ + "assuming 0.", halPropId));
+ } else {
count += configArray.get(1);
}
return count;
}
private CarDiagnosticEvent createCarDiagnosticEvent(VehiclePropValue value) {
- if (null == value)
- return null;
-
+ if (value == null) return null;
final boolean isFreezeFrame = value.prop == VehicleProperty.OBD2_FREEZE_FRAME;
-
CarDiagnosticEvent.Builder builder =
(isFreezeFrame
? CarDiagnosticEvent.Builder.newFreezeFrameBuilder()
@@ -473,6 +472,9 @@
return mDiagnosticCapabilities;
}
+ /**
+ * Returns the {@link CarDiagnosticEvent} for the current Vehicle HAL's live frame.
+ */
@Nullable
public CarDiagnosticEvent getCurrentLiveFrame() {
try {
@@ -487,6 +489,9 @@
}
}
+ /**
+ * Returns all timestamps for the Vehicle HAL's Freeze Frame data.
+ */
@Nullable
public long[] getFreezeFrameTimestamps() {
try {
@@ -506,10 +511,14 @@
}
}
+ /**
+ * Returns the {@link CarDiagnosticEvent} representing a Freeze Frame data for the timestamp
+ * passed as parameter.
+ */
@Nullable
public CarDiagnosticEvent getFreezeFrame(long timestamp) {
VehiclePropValueBuilder builder = VehiclePropValueBuilder.newBuilder(
- VehicleProperty.OBD2_FREEZE_FRAME);
+ VehicleProperty.OBD2_FREEZE_FRAME);
builder.setInt64Value(timestamp);
try {
VehiclePropValue value = mVehicleHal.get(builder.build());
@@ -524,9 +533,12 @@
}
}
+ /**
+ * Clears all Vehicle HAL's Freeze Frame data for the timestamps passed as parameter.
+ */
public void clearFreezeFrames(long... timestamps) {
VehiclePropValueBuilder builder = VehiclePropValueBuilder.newBuilder(
- VehicleProperty.OBD2_FREEZE_FRAME_CLEAR);
+ VehicleProperty.OBD2_FREEZE_FRAME_CLEAR);
builder.setInt64Value(timestamps);
try {
mVehicleHal.set(builder.build());
@@ -534,7 +546,7 @@
Log.e(CarLog.TAG_DIAGNOSTIC, "Failed to write OBD2_FREEZE_FRAME_CLEAR.", e);
} catch (IllegalArgumentException e) {
Log.e(CarLog.TAG_DIAGNOSTIC,
- "illegal argument trying to write OBD2_FREEZE_FRAME_CLEAR", e);
+ "illegal argument trying to write OBD2_FREEZE_FRAME_CLEAR", e);
}
}
}
diff --git a/service/src/com/android/car/hal/HalClient.java b/service/src/com/android/car/hal/HalClient.java
index bb96957..e7d3e7b 100644
--- a/service/src/com/android/car/hal/HalClient.java
+++ b/service/src/com/android/car/hal/HalClient.java
@@ -199,18 +199,18 @@
}
private static final class ObjectWrapper<T> {
- T object;
+ public T object;
}
private static final class ValueResult {
- int status;
- VehiclePropValue propValue;
+ public int status;
+ public VehiclePropValue propValue;
}
private static final class PropertySetError {
- final int errorCode;
- final int propId;
- final int areaId;
+ public final int errorCode;
+ public final int propId;
+ public final int areaId;
PropertySetError(int errorCode, int propId, int areaId) {
this.errorCode = errorCode;
diff --git a/service/src/com/android/car/hal/HalServiceBase.java b/service/src/com/android/car/hal/HalServiceBase.java
index 5e2e5bb..c343866 100644
--- a/service/src/com/android/car/hal/HalServiceBase.java
+++ b/service/src/com/android/car/hal/HalServiceBase.java
@@ -39,7 +39,7 @@
/** For dispatching events. Kept here to avoid alloc every time */
private final ArrayList<VehiclePropValue> mDispatchList = new ArrayList<>(1);
- final static int NOT_SUPPORTED_PROPERTY = -1;
+ static final int NOT_SUPPORTED_PROPERTY = -1;
public List<VehiclePropValue> getDispatchList() {
return mDispatchList;
@@ -94,6 +94,9 @@
+ ", area=" + area + " , errorCode = " + errorCode);
}
+ /**
+ * Dumps HAL service related info to the writer passed as parameter.
+ */
public abstract void dump(PrintWriter writer);
/**
diff --git a/service/src/com/android/car/hal/InputHalService.java b/service/src/com/android/car/hal/InputHalService.java
index c39ba51..32e4d25 100644
--- a/service/src/com/android/car/hal/InputHalService.java
+++ b/service/src/com/android/car/hal/InputHalService.java
@@ -15,12 +15,18 @@
*/
package com.android.car.hal;
+import static android.car.CarOccupantZoneManager.DisplayTypeEnum;
+import static android.hardware.automotive.vehicle.V2_0.CustomInputType.CUSTOM_EVENT_F1;
+import static android.hardware.automotive.vehicle.V2_0.CustomInputType.CUSTOM_EVENT_F10;
import static android.hardware.automotive.vehicle.V2_0.RotaryInputType.ROTARY_INPUT_TYPE_AUDIO_VOLUME;
import static android.hardware.automotive.vehicle.V2_0.RotaryInputType.ROTARY_INPUT_TYPE_SYSTEM_NAVIGATION;
+import static android.hardware.automotive.vehicle.V2_0.VehicleProperty.HW_CUSTOM_INPUT;
import static android.hardware.automotive.vehicle.V2_0.VehicleProperty.HW_KEY_INPUT;
import static android.hardware.automotive.vehicle.V2_0.VehicleProperty.HW_ROTARY_INPUT;
+import android.car.CarOccupantZoneManager;
import android.car.input.CarInputManager;
+import android.car.input.CustomInputEvent;
import android.car.input.RotaryEvent;
import android.hardware.automotive.vehicle.V2_0.VehicleDisplay;
import android.hardware.automotive.vehicle.V2_0.VehicleHwKeyInputAction;
@@ -44,14 +50,15 @@
import java.util.concurrent.TimeUnit;
import java.util.function.LongSupplier;
+/**
+ * Translates HAL input events to higher-level semantic information.
+ */
public class InputHalService extends HalServiceBase {
- public static final int DISPLAY_MAIN = VehicleDisplay.MAIN;
- public static final int DISPLAY_INSTRUMENT_CLUSTER = VehicleDisplay.INSTRUMENT_CLUSTER;
-
private static final int[] SUPPORTED_PROPERTIES = new int[] {
HW_KEY_INPUT,
- HW_ROTARY_INPUT
+ HW_ROTARY_INPUT,
+ HW_CUSTOM_INPUT
};
private final VehicleHal mHal;
@@ -61,11 +68,16 @@
*/
private final LongSupplier mUptimeSupplier;
+ /**
+ * Interface used to act upon HAL incoming key events.
+ */
public interface InputListener {
/** Called for key event */
void onKeyEvent(KeyEvent event, int targetDisplay);
/** Called for rotary event */
void onRotaryEvent(RotaryEvent event, int targetDisplay);
+ /** Called for OEM custom input event */
+ void onCustomInputEvent(CustomInputEvent event);
}
/** The current press state of a key. */
@@ -81,10 +93,13 @@
private final Object mLock = new Object();
@GuardedBy("mLock")
- private boolean mKeyInputSupported = false;
+ private boolean mKeyInputSupported;
@GuardedBy("mLock")
- private boolean mRotaryInputSupported = false;
+ private boolean mRotaryInputSupported;
+
+ @GuardedBy("mLock")
+ private boolean mCustomInputSupported;
@GuardedBy("mLock")
private InputListener mListener;
@@ -102,11 +117,15 @@
mUptimeSupplier = uptimeSupplier;
}
+ /**
+ * Sets the input event listener.
+ */
public void setInputListener(InputListener listener) {
boolean keyInputSupported;
boolean rotaryInputSupported;
+ boolean customInputSupported;
synchronized (mLock) {
- if (!mKeyInputSupported && !mRotaryInputSupported) {
+ if (!mKeyInputSupported && !mRotaryInputSupported && !mCustomInputSupported) {
Log.w(CarLog.TAG_INPUT,
"input listener set while rotary and key input not supported");
return;
@@ -114,6 +133,7 @@
mListener = listener;
keyInputSupported = mKeyInputSupported;
rotaryInputSupported = mRotaryInputSupported;
+ customInputSupported = mCustomInputSupported;
}
if (keyInputSupported) {
mHal.subscribeProperty(this, HW_KEY_INPUT);
@@ -121,6 +141,9 @@
if (rotaryInputSupported) {
mHal.subscribeProperty(this, HW_ROTARY_INPUT);
}
+ if (customInputSupported) {
+ mHal.subscribeProperty(this, HW_CUSTOM_INPUT);
+ }
}
/** Returns whether {@code HW_KEY_INPUT} is supported. */
@@ -137,6 +160,13 @@
}
}
+ /** Returns whether {@code HW_CUSTOM_INPUT} is supported. */
+ public boolean isCustomInputSupported() {
+ synchronized (mLock) {
+ return mCustomInputSupported;
+ }
+ }
+
@Override
public void init() {
}
@@ -147,6 +177,7 @@
mListener = null;
mKeyInputSupported = false;
mRotaryInputSupported = false;
+ mCustomInputSupported = false;
}
}
@@ -169,6 +200,11 @@
mRotaryInputSupported = true;
}
break;
+ case HW_CUSTOM_INPUT:
+ synchronized (mLock) {
+ mCustomInputSupported = true;
+ }
+ break;
}
}
}
@@ -191,6 +227,9 @@
case HW_ROTARY_INPUT:
dispatchRotaryInput(listener, value);
break;
+ case HW_CUSTOM_INPUT:
+ dispatchCustomInput(listener, value);
+ break;
default:
Log.e(CarLog.TAG_INPUT,
"Wrong event dispatched, prop:0x" + Integer.toHexString(value.prop));
@@ -204,19 +243,19 @@
? KeyEvent.ACTION_DOWN
: KeyEvent.ACTION_UP;
int code = value.value.int32Values.get(1);
- int display = value.value.int32Values.get(2);
+ int vehicleDisplay = value.value.int32Values.get(2);
int indentsCount = value.value.int32Values.size() < 4 ? 1 : value.value.int32Values.get(3);
if (DBG) {
Log.i(CarLog.TAG_INPUT, new StringBuilder()
.append("hal event code:").append(code)
.append(", action:").append(action)
- .append(", display: ").append(display)
+ .append(", display: ").append(vehicleDisplay)
.append(", number of indents: ").append(indentsCount)
.toString());
}
while (indentsCount > 0) {
indentsCount--;
- dispatchKeyEvent(listener, action, code, display);
+ dispatchKeyEvent(listener, action, code, convertDisplayType(vehicleDisplay));
}
}
@@ -229,13 +268,13 @@
}
int rotaryInputType = value.value.int32Values.get(0);
int detentCount = value.value.int32Values.get(1);
- int display = value.value.int32Values.get(2);
+ int vehicleDisplay = value.value.int32Values.get(2);
long timestamp = value.timestamp; // for first detent, uptime nanoseconds
if (DBG) {
Log.i(CarLog.TAG_INPUT, new StringBuilder()
.append("hal rotary input type: ").append(rotaryInputType)
.append(", number of detents:").append(detentCount)
- .append(", display: ").append(display)
+ .append(", display: ").append(vehicleDisplay)
.toString());
}
boolean clockwise = detentCount > 0;
@@ -244,9 +283,10 @@
Log.e(CarLog.TAG_INPUT, "Zero detentCount from vhal, ignore the event");
return;
}
- if (display != DISPLAY_MAIN && display != DISPLAY_INSTRUMENT_CLUSTER) {
+ if (vehicleDisplay != VehicleDisplay.MAIN
+ && vehicleDisplay != VehicleDisplay.INSTRUMENT_CLUSTER) {
Log.e(CarLog.TAG_INPUT, "Wrong display type for RotaryInput from vhal:"
- + display);
+ + vehicleDisplay);
return;
}
if (value.value.int32Values.size() != (timeValuesIndex + detentCount - 1)) {
@@ -277,7 +317,7 @@
value.value.int32Values.get(timeValuesIndex + i));
}
RotaryEvent event = new RotaryEvent(carInputManagerType, clockwise, timestamps);
- listener.onRotaryEvent(event, display);
+ listener.onRotaryEvent(event, convertDisplayType(vehicleDisplay));
}
/**
@@ -288,7 +328,8 @@
* @param code keycode for the KeyEvent
* @param display target display the event is associated with
*/
- private void dispatchKeyEvent(InputListener listener, int action, int code, int display) {
+ private void dispatchKeyEvent(InputListener listener, int action, int code,
+ @DisplayTypeEnum int display) {
dispatchKeyEvent(listener, action, code, display, mUptimeSupplier.getAsLong());
}
@@ -301,8 +342,8 @@
* @param display target display the event is associated with
* @param eventTime uptime in milliseconds when the event occurred
*/
- private void dispatchKeyEvent(InputListener listener, int action, int code, int display,
- long eventTime) {
+ private void dispatchKeyEvent(InputListener listener, int action, int code,
+ @DisplayTypeEnum int display, long eventTime) {
long downTime;
int repeat;
@@ -336,18 +377,59 @@
action,
code,
repeat,
- 0 /* meta state */,
0 /* deviceId */,
0 /* scancode */,
0 /* flags */,
InputDevice.SOURCE_CLASS_BUTTON);
- if (display == DISPLAY_MAIN) {
+ if (display == CarOccupantZoneManager.DISPLAY_TYPE_MAIN) {
event.setDisplayId(Display.DEFAULT_DISPLAY);
}
listener.onKeyEvent(event, display);
}
+ private void dispatchCustomInput(InputListener listener, VehiclePropValue value) {
+ if (DBG) {
+ Log.d(CarLog.TAG_INPUT, "Dispatching CustomInputEvent for listener="
+ + listener + " and value=" + value);
+ }
+ int inputCode = value.value.int32Values.get(0);
+ int targetDisplayType = convertDisplayType(value.value.int32Values.get(1));
+ int repeatCounter = value.value.int32Values.get(2);
+
+ if (inputCode < CUSTOM_EVENT_F1 || inputCode > CUSTOM_EVENT_F10) {
+ Log.e(CarLog.TAG_INPUT, "Unknown custom input code: " + inputCode);
+ return;
+ }
+ CustomInputEvent event = new CustomInputEvent(inputCode, targetDisplayType, repeatCounter);
+ listener.onCustomInputEvent(event);
+ }
+
+ /**
+ * Converts the vehicle display type ({@link VehicleDisplay#MAIN} and
+ * {@link VehicleDisplay#INSTRUMENT_CLUSTER}) to their corresponding types in
+ * {@link CarOccupantZoneManager} ({@link CarOccupantZoneManager#DISPLAY_TYPE_MAIN} and
+ * {@link CarOccupantZoneManager#DISPLAY_TYPE_INSTRUMENT_CLUSTER}).
+ *
+ * @param vehicleDisplayType the vehicle display type
+ * @return the corresponding display type (defined in {@link CarOccupantZoneManager}) or
+ * {@link CarOccupantZoneManager#DISPLAY_TYPE_UNKNOWN} if the value passed as parameter doesn't
+ * correspond to a driver's display type
+ *
+ * @hide
+ */
+ @DisplayTypeEnum
+ public static int convertDisplayType(int vehicleDisplayType) {
+ switch (vehicleDisplayType) {
+ case VehicleDisplay.MAIN:
+ return CarOccupantZoneManager.DISPLAY_TYPE_MAIN;
+ case VehicleDisplay.INSTRUMENT_CLUSTER:
+ return CarOccupantZoneManager.DISPLAY_TYPE_INSTRUMENT_CLUSTER;
+ default:
+ return CarOccupantZoneManager.DISPLAY_TYPE_UNKNOWN;
+ }
+ }
+
@Override
public void dump(PrintWriter writer) {
writer.println("*Input HAL*");
diff --git a/service/src/com/android/car/hal/PowerHalService.java b/service/src/com/android/car/hal/PowerHalService.java
index 28c8789..14607e5 100644
--- a/service/src/com/android/car/hal/PowerHalService.java
+++ b/service/src/com/android/car/hal/PowerHalService.java
@@ -42,6 +42,9 @@
import java.util.LinkedList;
import java.util.List;
+/**
+ * Translates HAL power events to higher-level semantic information.
+ */
public class PowerHalService extends HalServiceBase {
// Set display brightness from 0-100%
public static final int MAX_BRIGHTNESS = 100;
@@ -107,12 +110,17 @@
return baseName + "(" + state + ")";
}
+ /**
+ * Interface to be implemented by any object that wants to be notified by any Vehicle's power
+ * change.
+ */
public interface PowerEventListener {
/**
* Received power state change event.
* @param state One of STATE_*
*/
void onApPowerStateChange(PowerState state);
+
/**
* Received display brightness change event.
* @param brightness in percentile. 100% full.
@@ -120,6 +128,9 @@
void onDisplayBrightnessChange(int brightness);
}
+ /**
+ * Contains information about the Vehicle's power state.
+ */
public static final class PowerState {
/**
* One of STATE_*
@@ -192,6 +203,9 @@
mHal = hal;
}
+ /**
+ * Sets the event listener to receive Vehicle's power events.
+ */
public void setListener(PowerEventListener listener) {
LinkedList<VehiclePropValue> eventsToDispatch = null;
synchronized (mLock) {
@@ -308,6 +322,9 @@
}
}
+ /**
+ * Returns a {@link PowerState} representing the current power state for the vehicle.
+ */
@Nullable
public PowerState getCurrentPowerState() {
int[] state;
@@ -451,7 +468,7 @@
@Override
public void dump(PrintWriter writer) {
writer.println("*Power HAL*");
- writer.println("isPowerStateSupported:" + isPowerStateSupported() +
- ",isDeepSleepAllowed:" + isDeepSleepAllowed());
+ writer.printf("isPowerStateSupported:%b, isDeepSleepAllowed:%b\n",
+ isPowerStateSupported(), isDeepSleepAllowed());
}
}
diff --git a/service/src/com/android/car/hal/PropertyHalServiceIds.java b/service/src/com/android/car/hal/PropertyHalServiceIds.java
index 3772843..97c2633 100644
--- a/service/src/com/android/car/hal/PropertyHalServiceIds.java
+++ b/service/src/com/android/car/hal/PropertyHalServiceIds.java
@@ -840,7 +840,7 @@
if (f.getType() == int.class) {
try {
integerList.add(f.getInt(clazz));
- } catch (Exception e) {
+ } catch (IllegalAccessException | RuntimeException e) {
Log.w(TAG, "Failed to get value");
}
}
diff --git a/service/src/com/android/car/hal/UserHalService.java b/service/src/com/android/car/hal/UserHalService.java
index acf26c4..d669a73 100644
--- a/service/src/com/android/car/hal/UserHalService.java
+++ b/service/src/com/android/car/hal/UserHalService.java
@@ -30,7 +30,6 @@
import android.car.user.CarUserManager;
import android.car.userlib.HalCallback;
import android.car.userlib.UserHalHelper;
-import android.car.userlib.UserHelper;
import android.hardware.automotive.vehicle.V2_0.CreateUserRequest;
import android.hardware.automotive.vehicle.V2_0.CreateUserResponse;
import android.hardware.automotive.vehicle.V2_0.CreateUserStatus;
@@ -63,10 +62,11 @@
import com.android.car.CarLocalServices;
import com.android.car.CarStatsLog;
+import com.android.car.internal.common.EventLogTags;
+import com.android.car.internal.common.UserHelperLite;
import com.android.car.user.CarUserService;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.car.EventLogTags;
import com.android.internal.util.FunctionalUtils;
import com.android.internal.util.Preconditions;
@@ -431,7 +431,7 @@
}
EventLog.writeEvent(EventLogTags.CAR_USER_HAL_CREATE_USER_REQ, request.requestId,
- UserHelper.safeName(request.newUserName), request.newUserInfo.flags, timeoutMs);
+ UserHelperLite.safeName(request.newUserName), request.newUserInfo.flags, timeoutMs);
CarStatsLog.write(CarStatsLog.CAR_USER_HAL_MODIFY_USER_REQUEST_REPORTED, request.requestId,
CarStatsLog
.CAR_USER_HAL_MODIFY_USER_REQUEST_REPORTED__REQUEST_TYPE__CREATE_REQUEST,
@@ -1078,7 +1078,6 @@
writer.printf("*User HAL*\n");
writer.printf("Relevant CarProperties\n");
- dumpSystemProperty(writer, indent, "user_hal_enabled", CarProperties.user_hal_enabled());
dumpSystemProperty(writer, indent, "user_hal_timeout", CarProperties.user_hal_timeout());
synchronized (mLock) {
diff --git a/service/src/com/android/car/hal/VehicleHal.java b/service/src/com/android/car/hal/VehicleHal.java
index 28afa85..9fd69dd 100644
--- a/service/src/com/android/car/hal/VehicleHal.java
+++ b/service/src/com/android/car/hal/VehicleHal.java
@@ -73,15 +73,22 @@
private static final boolean DBG = false;
- private static final int NO_AREA = -1;
+ /**
+ * Used in {@link VehicleHal#dumpVehiclePropValue} method when copying {@link VehiclePropValue}.
+ */
+ private static final int MAX_BYTE_SIZE = 20;
- private final HandlerThread mHandlerThread;
+ public static final int NO_AREA = -1;
+ public static final float NO_SAMPLE_RATE = -1;
+
+ private final HandlerThread mHandlerThread = CarServiceUtils.getHandlerThread(
+ VehicleHal.class.getSimpleName());
private final PowerHalService mPowerHal;
private final PropertyHalService mPropertyHal;
private final InputHalService mInputHal;
private final VmsHalService mVmsHal;
private final UserHalService mUserHal;
- private DiagnosticHalService mDiagnosticHal = null;
+ private final DiagnosticHalService mDiagnosticHal;
private final Object mLock = new Object();
@@ -105,48 +112,61 @@
// Used by injectVHALEvent for testing purposes. Delimiter for an array of data
private static final String DATA_DELIMITER = ",";
+ /**
+ * Constructs a new {@link VehicleHal} object given the {@link Context} and {@link IVehicle}
+ * both passed as parameters.
+ */
public VehicleHal(Context context, IVehicle vehicle) {
- mHandlerThread = CarServiceUtils.getHandlerThread(VehicleHal.class.getSimpleName());
- // passing this should be safe as long as it is just kept and not used in constructor
mPowerHal = new PowerHalService(this);
mPropertyHal = new PropertyHalService(this);
mInputHal = new InputHalService(this);
mVmsHal = new VmsHalService(context, this);
- mDiagnosticHal = new DiagnosticHalService(this);
mUserHal = new UserHalService(this);
+ mDiagnosticHal = new DiagnosticHalService(this);
mAllServices.addAll(Arrays.asList(mPowerHal,
mInputHal,
mDiagnosticHal,
mVmsHal,
mUserHal,
mPropertyHal)); // mPropertyHal should be the last.
-
- mHalClient = new HalClient(vehicle, mHandlerThread.getLooper(), this /*IVehicleCallback*/);
+ mHalClient = new HalClient(vehicle, mHandlerThread.getLooper(),
+ /* callback= */ this);
}
- /** Placeholder version only for testing */
+ /**
+ * Constructs a new {@link VehicleHal} object given the services and {@link HalClient} factory
+ * function passed as parameters. This method must be used by tests only.
+ */
@VisibleForTesting
- public VehicleHal(PowerHalService powerHal, DiagnosticHalService diagnosticHal,
- HalClient halClient, PropertyHalService propertyHal) {
- mHandlerThread = null;
+ VehicleHal(PowerHalService powerHal,
+ PropertyHalService propertyHal,
+ InputHalService inputHal,
+ VmsHalService vmsHal,
+ UserHalService userHal,
+ DiagnosticHalService diagnosticHal,
+ HalClient halClient) {
mPowerHal = powerHal;
mPropertyHal = propertyHal;
+ mInputHal = inputHal;
+ mVmsHal = vmsHal;
+ mUserHal = userHal;
mDiagnosticHal = diagnosticHal;
- mInputHal = null;
- mVmsHal = null;
+ mAllServices.addAll(Arrays.asList(mPowerHal,
+ mInputHal,
+ mDiagnosticHal,
+ mVmsHal,
+ mUserHal,
+ mPropertyHal));
mHalClient = halClient;
- mDiagnosticHal = diagnosticHal;
- mUserHal = null;
}
+ /** Called when connection to Vehicle HAL was restored. */
public void vehicleHalReconnected(IVehicle vehicle) {
synchronized (mLock) {
mHalClient = new HalClient(vehicle, mHandlerThread.getLooper(),
this /*IVehicleCallback*/);
-
SubscribeOptions[] options = mSubscribedProperties.values()
.toArray(new SubscribeOptions[0]);
-
try {
mHalClient.subscribe(options);
} catch (RemoteException e) {
@@ -225,6 +245,9 @@
}
}
+ /**
+ * Releases all connected services (power management service, input service, etc).
+ */
public void release() {
// release in reverse order from init
for (int i = mAllServices.size() - 1; i >= 0; i--) {
@@ -245,7 +268,9 @@
// keep the looper thread as should be kept for the whole life cycle.
}
- public DiagnosticHalService getDiagnosticHal() { return mDiagnosticHal; }
+ public DiagnosticHalService getDiagnosticHal() {
+ return mDiagnosticHal;
+ }
public PowerHalService getPowerHal() {
return mPowerHal;
@@ -263,7 +288,9 @@
return mUserHal;
}
- public VmsHalService getVmsHal() { return mVmsHal; }
+ public VmsHalService getVmsHal() {
+ return mVmsHal;
+ }
private void assertServiceOwnerLocked(HalServiceBase service, int property) {
if (service != mPropertyHandlers.get(property)) {
@@ -279,7 +306,8 @@
*/
public void subscribeProperty(HalServiceBase service, int property)
throws IllegalArgumentException {
- subscribeProperty(service, property, 0f, SubscribeFlags.EVENTS_FROM_CAR);
+ subscribeProperty(service, property, /* samplingRateHz= */ 0f,
+ SubscribeFlags.EVENTS_FROM_CAR);
}
/**
@@ -313,8 +341,8 @@
}
if (config == null) {
- throw new IllegalArgumentException("subscribe error: config is null for property 0x" +
- toHexString(property));
+ throw new IllegalArgumentException("subscribe error: config is null for property 0x"
+ + toHexString(property));
} else if (isPropertySubscribable(config)) {
SubscribeOptions opts = new SubscribeOptions();
opts.propId = property;
@@ -334,6 +362,10 @@
}
}
+ /**
+ * Unsubscribes from receiving notifications for the property and HAL services passed
+ * as parameters.
+ */
public void unsubscribeProperty(HalServiceBase service, int property) {
if (DBG) {
Log.i(CarLog.TAG_HAL, "unsubscribeProperty, service:" + service
@@ -362,6 +394,9 @@
}
}
+ /**
+ * Indicates if the property passed as parameter is supported.
+ */
public boolean isPropertySupported(int propertyId) {
synchronized (mLock) {
return mAllProperties.containsKey(propertyId);
@@ -405,29 +440,46 @@
return getIfAvailableOrFail(propertyId, numberOfRetries);
}
+ /**
+ * Returns the property's {@link VehiclePropValue} for the property id passed as parameter and
+ * not specified area.
+ */
public VehiclePropValue get(int propertyId) {
return get(propertyId, NO_AREA);
}
+ /**
+ * Returns the property's {@link VehiclePropValue} for the property id and area id passed as
+ * parameters.
+ */
public VehiclePropValue get(int propertyId, int areaId) {
if (DBG) {
Log.i(CarLog.TAG_HAL, "get, property: 0x" + toHexString(propertyId)
+ ", areaId: 0x" + toHexString(areaId));
}
- VehiclePropValue propValue = new VehiclePropValue();
- propValue.prop = propertyId;
- propValue.areaId = areaId;
- return mHalClient.getValue(propValue);
+ return mHalClient.getValue(createPropValue(propertyId, areaId));
}
+ /**
+ * Returns the property object value for the class and property id passed as parameter and
+ * no area specified.
+ */
public <T> T get(Class clazz, int propertyId) {
return get(clazz, createPropValue(propertyId, NO_AREA));
}
+ /**
+ * Returns the property object value for the class, property id, and area id passed as
+ * parameter.
+ */
public <T> T get(Class clazz, int propertyId, int areaId) {
return get(clazz, createPropValue(propertyId, areaId));
}
+ /**
+ * Returns the property object value for the class and requested property value passed as
+ * parameter.
+ */
@SuppressWarnings("unchecked")
public <T> T get(Class clazz, VehiclePropValue requestedPropValue) {
VehiclePropValue propValue;
@@ -458,22 +510,23 @@
}
}
+ /**
+ * Returns the vehicle's {@link VehiclePropValue} for the requested property value passed
+ * as parameter.
+ */
public VehiclePropValue get(VehiclePropValue requestedPropValue) {
return mHalClient.getValue(requestedPropValue);
}
/**
- *
- * @param propId Property ID to return the current sample rate for.
- *
- * @return float Returns the current sample rate of the specified propId, or -1 if the
- * property is not currently subscribed.
+ * Returns the sample rate for a subscribed property. Returns {@link VehicleHal#NO_SAMPLE_RATE}
+ * if the property id passed as parameter is not linked to any subscribed property.
*/
public float getSampleRate(int propId) {
SubscribeOptions opts = mSubscribedProperties.get(propId);
if (opts == null) {
// No sample rate for this property
- return -1;
+ return NO_SAMPLE_RATE;
} else {
return opts.sampleRate;
}
@@ -494,19 +547,13 @@
}
static boolean isPropertySubscribable(VehiclePropConfig config) {
- if ((config.access & VehiclePropertyAccess.READ) == 0 ||
- (config.changeMode == VehiclePropertyChangeMode.STATIC)) {
+ if ((config.access & VehiclePropertyAccess.READ) == 0
+ || (config.changeMode == VehiclePropertyChangeMode.STATIC)) {
return false;
}
return true;
}
- static void dumpProperties(PrintWriter writer, Collection<VehiclePropConfig> configs) {
- for (VehiclePropConfig config : configs) {
- writer.println(String.format("property 0x%x", config.prop));
- }
- }
-
private final ArraySet<HalServiceBase> mServicesToDispatch = new ArraySet<>();
@Override
@@ -514,9 +561,9 @@
synchronized (mLock) {
for (VehiclePropValue v : propValues) {
HalServiceBase service = mPropertyHandlers.get(v.prop);
- if(service == null) {
+ if (service == null) {
Log.e(CarLog.TAG_HAL, "HalService not found for prop: 0x"
- + toHexString(v.prop));
+ + toHexString(v.prop));
continue;
}
service.getDispatchList().add(v);
@@ -555,6 +602,9 @@
}
}
+ /**
+ * Dumps HAL service info using the print writer passed as parameter.
+ */
public void dump(PrintWriter writer) {
writer.println("**dump HAL services**");
for (HalServiceBase service: mAllServices) {
@@ -566,7 +616,7 @@
SystemClock.elapsedRealtimeNanos()));
for (VehiclePropertyEventInfo info : mEventLog.values()) {
writer.println(String.format("event count:%d, lastEvent:%s",
- info.eventCount, dumpVehiclePropValue(info.lastEvent)));
+ info.mEventCount, dumpVehiclePropValue(info.mLastEvent)));
}
writer.println("**Property handlers**");
@@ -628,7 +678,7 @@
try {
VehiclePropValue value = get(id, area);
writer.println(dumpVehiclePropValue(value));
- } catch (Exception e) {
+ } catch (RuntimeException e) {
writer.println("Can not get property value for propertyId: 0x"
+ propId + ", areaId: " + area);
}
@@ -640,7 +690,7 @@
try {
VehiclePropValue value = get(config.prop);
writer.println(dumpVehiclePropValue(value));
- } catch (Exception e) {
+ } catch (RuntimeException e) {
writer.println("Can not get property value for propertyId: 0x"
+ toHexString(config.prop) + ", areaId: 0");
}
@@ -650,7 +700,7 @@
try {
VehiclePropValue value = get(config.prop, area);
writer.println(dumpVehiclePropValue(value));
- } catch (Exception e) {
+ } catch (RuntimeException e) {
writer.println("Can not get property value for propertyId: 0x"
+ toHexString(config.prop) + ", areaId: " + area);
}
@@ -707,6 +757,7 @@
}
return builder.toString();
}
+
/**
* Inject a VHAL event
*
@@ -770,17 +821,17 @@
}
private static class VehiclePropertyEventInfo {
- private int eventCount;
- private VehiclePropValue lastEvent;
+ private int mEventCount;
+ private VehiclePropValue mLastEvent;
private VehiclePropertyEventInfo(VehiclePropValue event) {
- eventCount = 1;
- lastEvent = event;
+ mEventCount = 1;
+ mLastEvent = event;
}
private void addNewEvent(VehiclePropValue event) {
- eventCount++;
- lastEvent = event;
+ mEventCount++;
+ mLastEvent = event;
}
}
@@ -829,8 +880,6 @@
}
private static String dumpVehiclePropValue(VehiclePropValue value) {
- final int MAX_BYTE_SIZE = 20;
-
StringBuilder sb = new StringBuilder()
.append("Property:0x").append(toHexString(value.prop))
.append(",status: ").append(value.status)
diff --git a/service/src/com/android/car/hal/VmsHalService.java b/service/src/com/android/car/hal/VmsHalService.java
index f1129f7..2704c55 100644
--- a/service/src/com/android/car/hal/VmsHalService.java
+++ b/service/src/com/android/car/hal/VmsHalService.java
@@ -47,12 +47,11 @@
import android.util.ArraySet;
import android.util.Log;
-import androidx.annotation.GuardedBy;
-import androidx.annotation.VisibleForTesting;
-
import com.android.car.CarLocalServices;
import com.android.car.CarServiceUtils;
import com.android.car.vms.VmsBrokerService;
+import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
import java.io.FileDescriptor;
import java.io.FileOutputStream;
@@ -300,6 +299,7 @@
break;
case VmsMessageType.PUBLISHER_INFORMATION_REQUEST:
handlePublisherInfoRequest(vec);
+ break;
case VmsMessageType.OFFERING:
handleOfferingEvent(vec);
break;
diff --git a/service/src/com/android/car/monitoring/CarMonitoringService.java b/service/src/com/android/car/monitoring/CarMonitoringService.java
deleted file mode 100644
index 3b439e1..0000000
--- a/service/src/com/android/car/monitoring/CarMonitoringService.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2016 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.car.monitoring;
-
-import android.annotation.SystemApi;
-import android.content.Context;
-import android.util.Log;
-
-import com.android.car.CarLog;
-import com.android.car.CarServiceBase;
-import com.android.car.SystemActivityMonitoringService;
-
-import java.io.PrintWriter;
-
-/**
- * Service that monitors applications resource usage.
- * @hide
- */
-@SystemApi
-public class CarMonitoringService implements CarServiceBase {
- private static final String TAG = CarLog.TAG_MONITORING;
- private static final Boolean DBG = true;
-
- private static final int MONITORING_SLEEP_TIME_MS = 30000; // Run monitoring every 30s.
-
- private final Context mContext;
-
- private final SystemActivityMonitoringService mSystemActivityMonitoringService;
-
- public CarMonitoringService(Context context,
- SystemActivityMonitoringService systemActivityMonitoringService) {
- mContext = context;
- mSystemActivityMonitoringService = systemActivityMonitoringService;
- }
-
- @Override
- public void init() {
- if (DBG) {
- Log.d(TAG, "init");
- }
- // TODO: add periodic update to setAppPriority to monitoring native service.
- }
-
- @Override
- public void release() {
- if (DBG) {
- Log.d(TAG, "release");
- }
- }
-
- @Override
- public void dump(PrintWriter writer) {
- writer.println("**" + getClass().getSimpleName() + "**");
- // TODO
- }
-}
diff --git a/service/src/com/android/car/pm/ActivityBlockingActivity.java b/service/src/com/android/car/pm/ActivityBlockingActivity.java
index 991c966..f36de41 100644
--- a/service/src/com/android/car/pm/ActivityBlockingActivity.java
+++ b/service/src/com/android/car/pm/ActivityBlockingActivity.java
@@ -22,6 +22,7 @@
import android.app.Activity;
import android.app.ActivityManager;
+import android.app.ActivityTaskManager.RootTaskInfo;
import android.app.IActivityManager;
import android.car.Car;
import android.car.content.pm.CarPackageManager;
@@ -264,34 +265,34 @@
* the ABA is distraction optimized.
*/
private boolean isTopActivityBehindAbaDistractionOptimized() {
- List<ActivityManager.StackInfo> stackInfos;
+ List<RootTaskInfo> taskInfos;
try {
- stackInfos = mAm.getAllStackInfos();
+ taskInfos = mAm.getAllRootTaskInfos();
} catch (RemoteException e) {
Log.e(CarLog.TAG_AM, "Unable to get stack info from ActivityManager");
// assume that the state is still correct, the activity behind is not DO
return false;
}
- ActivityManager.StackInfo topStackBehindAba = null;
- for (ActivityManager.StackInfo stackInfo : stackInfos) {
- if (stackInfo.displayId != getDisplayId()) {
+ RootTaskInfo topStackBehindAba = null;
+ for (RootTaskInfo taskInfo : taskInfos) {
+ if (taskInfo.displayId != getDisplayId()) {
// ignore stacks on other displays
continue;
}
- if (getComponentName().equals(stackInfo.topActivity)) {
+ if (getComponentName().equals(taskInfo.topActivity)) {
// ignore stack with the blocking activity
continue;
}
- if (!stackInfo.visible) {
+ if (!taskInfo.visible) {
// ignore stacks that aren't visible
continue;
}
- if (topStackBehindAba == null || topStackBehindAba.position < stackInfo.position) {
- topStackBehindAba = stackInfo;
+ if (topStackBehindAba == null || topStackBehindAba.position < taskInfo.position) {
+ topStackBehindAba = taskInfo;
}
}
diff --git a/service/src/com/android/car/pm/CarPackageManagerService.java b/service/src/com/android/car/pm/CarPackageManagerService.java
index 9f66e49..9f2857b 100644
--- a/service/src/com/android/car/pm/CarPackageManagerService.java
+++ b/service/src/com/android/car/pm/CarPackageManagerService.java
@@ -19,7 +19,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.ActivityManager;
-import android.app.ActivityManager.StackInfo;
+import android.app.ActivityTaskManager.RootTaskInfo;
import android.app.PendingIntent;
import android.car.Car;
import android.car.content.pm.AppBlockingPackageInfo;
@@ -109,10 +109,10 @@
// For dumpsys logging.
private final LinkedList<String> mBlockedActivityLogs = new LinkedList<>();
- // Store the white list and black list strings from the resource file.
- private String mConfiguredWhitelist;
- private String mConfiguredSystemWhitelist;
- private String mConfiguredBlacklist;
+ // Store the allowlist and blocklist strings from the resource file.
+ private String mConfiguredAllowlist;
+ private String mConfiguredSystemAllowlist;
+ private String mConfiguredBlocklist;
private final List<String> mAllowedAppInstallSources;
/**
@@ -122,7 +122,7 @@
@GuardedBy("mLock")
private final HashMap<String, ClientPolicy> mClientPolicies = new HashMap<>();
@GuardedBy("mLock")
- private HashMap<String, AppBlockingPackageInfoWrapper> mActivityWhitelistMap = new HashMap<>();
+ private HashMap<String, AppBlockingPackageInfoWrapper> mActivityAllowlistMap = new HashMap<>();
@GuardedBy("mLock")
private LinkedList<AppBlockingPolicyProxy> mProxies;
@@ -140,8 +140,8 @@
new SparseArray<>();
private final VendorServiceController mVendorServiceController;
- // Information related to when the installed packages should be parsed for building a white and
- // black list
+ // Information related to when the installed packages should be parsed for building a allow and
+ // block list
private final Set<String> mPackageManagerActions = Sets.newArraySet(
Intent.ACTION_PACKAGE_ADDED,
Intent.ACTION_PACKAGE_CHANGED,
@@ -151,8 +151,8 @@
private final PackageParsingEventReceiver mPackageParsingEventReceiver =
new PackageParsingEventReceiver();
- // To track if the packages have been parsed for building white/black lists. If we haven't had
- // received any intents (boot complete or package changed), then the white list is null leading
+ // To track if the packages have been parsed for building allow/blocklists. If we haven't had
+ // received any intents (boot complete or package changed), then the allowlist is null leading
// to blocking everything. So, no blocking until we have had a chance to parse the packages.
private boolean mHasParsedPackages;
@@ -277,11 +277,11 @@
Log.i(CarLog.TAG_PACKAGE, "isActivityDistractionOptimized"
+ dumpPoliciesLocked(false));
}
- AppBlockingPackageInfo info = searchFromBlacklistsLocked(packageName);
+ AppBlockingPackageInfo info = searchFromBlocklistsLocked(packageName);
if (info != null) {
return false;
}
- return isActivityInWhitelistsLocked(packageName, className);
+ return isActivityInAllowlistsLocked(packageName, className);
}
}
@@ -304,11 +304,11 @@
Log.i(CarLog.TAG_PACKAGE, "isServiceDistractionOptimized"
+ dumpPoliciesLocked(false));
}
- AppBlockingPackageInfo info = searchFromBlacklistsLocked(packageName);
+ AppBlockingPackageInfo info = searchFromBlocklistsLocked(packageName);
if (info != null) {
return false;
}
- info = searchFromWhitelistsLocked(packageName);
+ info = searchFromAllowlistsLocked(packageName);
if (info != null) {
return true;
}
@@ -318,7 +318,7 @@
@Override
public boolean isActivityBackedBySafeActivity(ComponentName activityName) {
- StackInfo info = mSystemActivityMonitoringService.getFocusedStackForTopActivity(
+ RootTaskInfo info = mSystemActivityMonitoringService.getFocusedStackForTopActivity(
activityName);
if (info == null) { // not top in focused stack
return true;
@@ -326,11 +326,11 @@
if (!isUxRestrictedOnDisplay(info.displayId)) {
return true;
}
- if (info.taskNames.length <= 1) { // nothing below this.
+ if (info.childTaskNames.length <= 1) { // nothing below this.
return false;
}
ComponentName activityBehind = ComponentName.unflattenFromString(
- info.taskNames[info.taskNames.length - 2]);
+ info.childTaskNames[info.childTaskNames.length - 2]);
return isActivityDistractionOptimized(activityBehind.getPackageName(),
activityBehind.getClassName());
}
@@ -349,9 +349,9 @@
}
@GuardedBy("mLock")
- private AppBlockingPackageInfo searchFromBlacklistsLocked(String packageName) {
+ private AppBlockingPackageInfo searchFromBlocklistsLocked(String packageName) {
for (ClientPolicy policy : mClientPolicies.values()) {
- AppBlockingPackageInfoWrapper wrapper = policy.blacklistsMap.get(packageName);
+ AppBlockingPackageInfoWrapper wrapper = policy.mBlocklistsMap.get(packageName);
if (wrapper != null && wrapper.isMatching) {
return wrapper.info;
}
@@ -360,25 +360,25 @@
}
@GuardedBy("mLock")
- private AppBlockingPackageInfo searchFromWhitelistsLocked(String packageName) {
+ private AppBlockingPackageInfo searchFromAllowlistsLocked(String packageName) {
for (ClientPolicy policy : mClientPolicies.values()) {
- AppBlockingPackageInfoWrapper wrapper = policy.whitelistsMap.get(packageName);
+ AppBlockingPackageInfoWrapper wrapper = policy.mAllowlistsMap.get(packageName);
if (wrapper != null && wrapper.isMatching) {
return wrapper.info;
}
}
- AppBlockingPackageInfoWrapper wrapper = mActivityWhitelistMap.get(packageName);
+ AppBlockingPackageInfoWrapper wrapper = mActivityAllowlistMap.get(packageName);
return (wrapper != null) ? wrapper.info : null;
}
@GuardedBy("mLock")
- private boolean isActivityInWhitelistsLocked(String packageName, String className) {
+ private boolean isActivityInAllowlistsLocked(String packageName, String className) {
for (ClientPolicy policy : mClientPolicies.values()) {
- if (isActivityInMapAndMatching(policy.whitelistsMap, packageName, className)) {
+ if (isActivityInMapAndMatching(policy.mAllowlistsMap, packageName, className)) {
return true;
}
}
- return isActivityInMapAndMatching(mActivityWhitelistMap, packageName, className);
+ return isActivityInMapAndMatching(mActivityAllowlistMap, packageName, className);
}
private boolean isActivityInMapAndMatching(HashMap<String, AppBlockingPackageInfoWrapper> map,
@@ -386,7 +386,7 @@
AppBlockingPackageInfoWrapper wrapper = map.get(packageName);
if (wrapper == null || !wrapper.isMatching) {
if (DBG_POLICY_CHECK) {
- Log.d(CarLog.TAG_PACKAGE, "Pkg not in whitelist:" + packageName);
+ Log.d(CarLog.TAG_PACKAGE, "Pkg not in allowlist:" + packageName);
}
return false;
}
@@ -413,7 +413,7 @@
Thread.currentThread().interrupt();
}
mHasParsedPackages = false;
- mActivityWhitelistMap.clear();
+ mActivityAllowlistMap.clear();
mClientPolicies.clear();
if (mProxies != null) {
for (AppBlockingPolicyProxy proxy : mProxies) {
@@ -475,12 +475,12 @@
private void doParseInstalledPackages() {
int userId = mActivityManager.getCurrentUser();
- generateActivityWhitelistMap(userId);
+ generateActivityAllowlistMap(userId);
synchronized (mLock) {
mHasParsedPackages = true;
}
- // Once the activity launch listener is registered we attempt to block any non-whitelisted
- // activities that are launched. For this reason, we need to wait until after the whitelist
+ // Once the activity launch listener is registered we attempt to block any non-allowlisted
+ // activities that are launched. For this reason, we need to wait until after the allowlist
// has been created.
mSystemActivityMonitoringService.registerActivityLaunchListener(mActivityLaunchListener);
blockTopActivitiesIfNecessary();
@@ -498,8 +498,8 @@
Log.i(CarLog.TAG_PACKAGE, "setting policy from:" + packageName + ",policy:" + policy +
",flags:0x" + Integer.toHexString(flags));
}
- AppBlockingPackageInfoWrapper[] blacklistWrapper = verifyList(policy.blacklists);
- AppBlockingPackageInfoWrapper[] whitelistWrapper = verifyList(policy.whitelists);
+ AppBlockingPackageInfoWrapper[] blocklistWrapper = verifyList(policy.blacklists);
+ AppBlockingPackageInfoWrapper[] allowlistWrapper = verifyList(policy.whitelists);
synchronized (mLock) {
ClientPolicy clientPolicy = mClientPolicies.get(packageName);
if (clientPolicy == null) {
@@ -507,14 +507,14 @@
mClientPolicies.put(packageName, clientPolicy);
}
if ((flags & CarPackageManager.FLAG_SET_POLICY_ADD) != 0) {
- clientPolicy.addToBlacklists(blacklistWrapper);
- clientPolicy.addToWhitelists(whitelistWrapper);
+ clientPolicy.addToBlocklists(blocklistWrapper);
+ clientPolicy.addToAllowlists(allowlistWrapper);
} else if ((flags & CarPackageManager.FLAG_SET_POLICY_REMOVE) != 0) {
- clientPolicy.removeBlacklists(blacklistWrapper);
- clientPolicy.removeWhitelists(whitelistWrapper);
+ clientPolicy.removeBlocklists(blocklistWrapper);
+ clientPolicy.removeAllowlists(allowlistWrapper);
} else { //replace.
- clientPolicy.replaceBlacklists(blacklistWrapper);
- clientPolicy.replaceWhitelists(whitelistWrapper);
+ clientPolicy.replaceBlocklists(blocklistWrapper);
+ clientPolicy.replaceAllowlists(allowlistWrapper);
}
if ((flags & CarPackageManager.FLAG_SET_POLICY_WAIT_FOR_CHANGE) != 0) {
mWaitingPolicies.remove(policy);
@@ -602,94 +602,94 @@
}
/**
- * Generate a map of whitelisted packages and activities of the form {pkgName, Whitelisted
- * activities}. The whitelist information can come from a configuration XML resource or from
+ * Generate a map of allowlisted packages and activities of the form {pkgName, Allowlisted
+ * activities}. The allowlist information can come from a configuration XML resource or from
* the apps marking their activities as distraction optimized.
*
- * @param userId Generate whitelist based on packages installed for this user.
+ * @param userId Generate allowlist based on packages installed for this user.
*/
- private void generateActivityWhitelistMap(int userId) {
- // Get the apps/activities that are whitelisted in the configuration XML resources.
- Map<String, Set<String>> configWhitelist = generateConfigWhitelist();
- Map<String, Set<String>> configBlacklist = generateConfigBlacklist();
+ private void generateActivityAllowlistMap(int userId) {
+ // Get the apps/activities that are allowlisted in the configuration XML resources.
+ Map<String, Set<String>> configAllowlist = generateConfigAllowlist();
+ Map<String, Set<String>> configBlocklist = generateConfigBlocklist();
- Map<String, AppBlockingPackageInfoWrapper> activityWhitelist =
- generateActivityWhitelistAsUser(UserHandle.USER_SYSTEM,
- configWhitelist, configBlacklist);
+ Map<String, AppBlockingPackageInfoWrapper> activityAllowlist =
+ generateActivityAllowlistAsUser(UserHandle.USER_SYSTEM,
+ configAllowlist, configBlocklist);
// Also parse packages for current user.
if (userId != UserHandle.USER_SYSTEM) {
- Map<String, AppBlockingPackageInfoWrapper> userWhitelistedPackages =
- generateActivityWhitelistAsUser(userId, configWhitelist, configBlacklist);
- for (String packageName : userWhitelistedPackages.keySet()) {
- if (activityWhitelist.containsKey(packageName)) {
+ Map<String, AppBlockingPackageInfoWrapper> userAllowlistedPackages =
+ generateActivityAllowlistAsUser(userId, configAllowlist, configBlocklist);
+ for (String packageName : userAllowlistedPackages.keySet()) {
+ if (activityAllowlist.containsKey(packageName)) {
continue;
}
- activityWhitelist.put(packageName, userWhitelistedPackages.get(packageName));
+ activityAllowlist.put(packageName, userAllowlistedPackages.get(packageName));
}
}
synchronized (mLock) {
- mActivityWhitelistMap.clear();
- mActivityWhitelistMap.putAll(activityWhitelist);
+ mActivityAllowlistMap.clear();
+ mActivityAllowlistMap.putAll(activityAllowlist);
}
}
- private Map<String, Set<String>> generateConfigWhitelist() {
- Map<String, Set<String>> configWhitelist = new HashMap<>();
- mConfiguredWhitelist = mContext.getString(R.string.activityWhitelist);
- if (mConfiguredWhitelist == null) {
+ private Map<String, Set<String>> generateConfigAllowlist() {
+ Map<String, Set<String>> configAllowlist = new HashMap<>();
+ mConfiguredAllowlist = mContext.getString(R.string.activityAllowlist);
+ if (mConfiguredAllowlist == null) {
if (DBG_POLICY_CHECK) {
- Log.w(CarLog.TAG_PACKAGE, "White list is null.");
+ Log.w(CarLog.TAG_PACKAGE, "Allowlist is null.");
}
}
- parseConfigList(mConfiguredWhitelist, configWhitelist);
+ parseConfigList(mConfiguredAllowlist, configAllowlist);
- mConfiguredSystemWhitelist = mContext.getString(R.string.systemActivityWhitelist);
- if (mConfiguredSystemWhitelist == null) {
+ mConfiguredSystemAllowlist = mContext.getString(R.string.systemActivityAllowlist);
+ if (mConfiguredSystemAllowlist == null) {
if (DBG_POLICY_CHECK) {
- Log.w(CarLog.TAG_PACKAGE, "System white list is null.");
+ Log.w(CarLog.TAG_PACKAGE, "System allowlist is null.");
}
}
- parseConfigList(mConfiguredSystemWhitelist, configWhitelist);
+ parseConfigList(mConfiguredSystemAllowlist, configAllowlist);
- // Add the blocking overlay activity to the whitelist, since that needs to run in a
+ // Add the blocking overlay activity to the allowlist, since that needs to run in a
// restricted state to communicate the reason an app was blocked.
Set<String> defaultActivity = new ArraySet<>();
if (mActivityBlockingActivity != null) {
defaultActivity.add(mActivityBlockingActivity.getClassName());
- configWhitelist.put(mActivityBlockingActivity.getPackageName(), defaultActivity);
+ configAllowlist.put(mActivityBlockingActivity.getPackageName(), defaultActivity);
}
- return configWhitelist;
+ return configAllowlist;
}
- private Map<String, Set<String>> generateConfigBlacklist() {
- Map<String, Set<String>> configBlacklist = new HashMap<>();
- mConfiguredBlacklist = mContext.getString(R.string.activityBlacklist);
- if (mConfiguredBlacklist == null) {
+ private Map<String, Set<String>> generateConfigBlocklist() {
+ Map<String, Set<String>> configBlocklist = new HashMap<>();
+ mConfiguredBlocklist = mContext.getString(R.string.activityDenylist);
+ if (mConfiguredBlocklist == null) {
if (DBG_POLICY_CHECK) {
- Log.d(CarLog.TAG_PACKAGE, "Null blacklist in config");
+ Log.d(CarLog.TAG_PACKAGE, "Null blocklist in config");
}
}
- parseConfigList(mConfiguredBlacklist, configBlacklist);
+ parseConfigList(mConfiguredBlocklist, configBlocklist);
- return configBlacklist;
+ return configBlocklist;
}
/**
- * Generates whitelisted activities based on packages installed for system user and current
- * user (if different). Factors affecting whitelist:
- * - whitelist from resource config;
+ * Generates allowlisted activities based on packages installed for system user and current
+ * user (if different). Factors affecting allowlist:
+ * - allowlist from resource config;
* - activity declared as Distraction Optimized (D.O.) in manifest;
- * - blacklist from resource config - package/activity blacklisted will not exist
- * in returned whitelist.
+ * - blocklist from resource config - package/activity blocklisted will not exist
+ * in returned allowlist.
*
* @param userId Parse packages installed for user.
- * @param configWhitelist Whitelist from config.
- * @param configBlacklist Blacklist from config.
+ * @param configAllowlist Allowlist from config.
+ * @param configBlocklist Blocklist from config.
*/
- private Map<String, AppBlockingPackageInfoWrapper> generateActivityWhitelistAsUser(int userId,
- Map<String, Set<String>> configWhitelist, Map<String, Set<String>> configBlacklist) {
- HashMap<String, AppBlockingPackageInfoWrapper> activityWhitelist = new HashMap<>();
+ private Map<String, AppBlockingPackageInfoWrapper> generateActivityAllowlistAsUser(int userId,
+ Map<String, Set<String>> configAllowlist, Map<String, Set<String>> configBlocklist) {
+ HashMap<String, AppBlockingPackageInfoWrapper> activityAllowlist = new HashMap<>();
List<PackageInfo> packages = mPackageManager
.getInstalledPackagesAsUser(PackageManager.GET_SIGNATURES
@@ -708,17 +708,17 @@
flags = AppBlockingPackageInfo.FLAG_SYSTEM_APP;
}
- /* 1. Check if all or some of this app is in the <activityWhitelist> or
- <systemActivityWhitelist> in config.xml */
- Set<String> configActivitiesForPackage = configWhitelist.get(info.packageName);
+ /* 1. Check if all or some of this app is in the <activityAllowlist> or
+ <systemActivityAllowlist> in config.xml */
+ Set<String> configActivitiesForPackage = configAllowlist.get(info.packageName);
if (configActivitiesForPackage != null) {
if (DBG_POLICY_CHECK) {
- Log.d(CarLog.TAG_PACKAGE, info.packageName + " whitelisted");
+ Log.d(CarLog.TAG_PACKAGE, info.packageName + " allowlisted");
}
if (configActivitiesForPackage.size() == 0) {
- // Whole Pkg has been whitelisted
+ // Whole Pkg has been allowlisted
flags |= AppBlockingPackageInfo.FLAG_WHOLE_ACTIVITY;
- // Add all activities to the whitelist
+ // Add all activities to the allowlist
List<String> activitiesForPackage = getActivitiesInPackage(info);
if (activitiesForPackage != null) {
activities.addAll(activitiesForPackage);
@@ -729,7 +729,7 @@
}
} else {
if (DBG_POLICY_CHECK) {
- Log.d(CarLog.TAG_PACKAGE, "Partially Whitelisted. WL Activities:");
+ Log.d(CarLog.TAG_PACKAGE, "Partially Allowlisted. WL Activities:");
for (String a : configActivitiesForPackage) {
Log.d(CarLog.TAG_PACKAGE, a);
}
@@ -772,7 +772,7 @@
if (DBG_POLICY_CHECK) {
for (String activity : doActivities) {
Log.d(CarLog.TAG_PACKAGE, "adding " + activity + " from "
- + info.packageName + " to whitelist");
+ + info.packageName + " to allowlist");
}
}
activities.addAll(Arrays.asList(doActivities));
@@ -782,20 +782,20 @@
continue;
}
- // Nothing to add to whitelist
+ // Nothing to add to allowlist
if (activities.isEmpty()) {
continue;
}
- /* 3. Check if parsed activity is in <activityBlacklist> in config.xml. Anything
- in blacklist should not be whitelisted, either as D.O. or by config. */
- if (configBlacklist.containsKey(info.packageName)) {
- Set<String> configBlacklistActivities = configBlacklist.get(info.packageName);
- if (configBlacklistActivities.isEmpty()) {
- // Whole package should be blacklisted.
+ /* 3. Check if parsed activity is in <activityBlocklist> in config.xml. Anything
+ in blocklist should not be allowlisted, either as D.O. or by config. */
+ if (configBlocklist.containsKey(info.packageName)) {
+ Set<String> configBlocklistActivities = configBlocklist.get(info.packageName);
+ if (configBlocklistActivities.isEmpty()) {
+ // Whole package should be blocklisted.
continue;
}
- activities.removeAll(configBlacklistActivities);
+ activities.removeAll(configBlocklistActivities);
}
Signature[] signatures;
@@ -805,9 +805,9 @@
activities.toArray(new String[activities.size()]));
AppBlockingPackageInfoWrapper wrapper = new AppBlockingPackageInfoWrapper(
appBlockingInfo, true);
- activityWhitelist.put(info.packageName, wrapper);
+ activityAllowlist.put(info.packageName, wrapper);
}
- return activityWhitelist;
+ return activityAllowlist;
}
private boolean isDebugBuild() {
@@ -821,9 +821,9 @@
* included.
*
* When there are multiple entries regarding one package, the entry with
- * greater scope wins. Namely if there were 2 entires such that one whitelists
- * an activity, and the other whitelists the entire package of the activity,
- * the package is whitelisted, regardless of input order.
+ * greater scope wins. Namely if there were 2 entries such that one allowlists
+ * an activity, and the other allowlists the entire package of the activity,
+ * the package is allowlisted, regardless of input order.
*/
@VisibleForTesting
/* package */ void parseConfigList(String configList,
@@ -844,7 +844,7 @@
if (packageActivityPair.length == 1) { // whole package
activities.clear();
} else if (packageActivityPair.length == 2) {
- // add class name only when the whole package is not whitelisted.
+ // add class name only when the whole package is not allowlisted.
if (newPackage || (activities.size() > 0)) {
activities.add(packageActivityPair[1]);
}
@@ -957,20 +957,20 @@
private String dumpPoliciesLocked(boolean dumpAll) {
StringBuilder sb = new StringBuilder();
if (dumpAll) {
- sb.append("**System whitelist**\n");
- for (AppBlockingPackageInfoWrapper wrapper : mActivityWhitelistMap.values()) {
+ sb.append("**System allowlist**\n");
+ for (AppBlockingPackageInfoWrapper wrapper : mActivityAllowlistMap.values()) {
sb.append(wrapper.toString() + "\n");
}
}
sb.append("**Client Policies**\n");
for (Entry<String, ClientPolicy> entry : mClientPolicies.entrySet()) {
sb.append("Client:" + entry.getKey() + "\n");
- sb.append(" whitelists:\n");
- for (AppBlockingPackageInfoWrapper wrapper : entry.getValue().whitelistsMap.values()) {
+ sb.append(" allowlists:\n");
+ for (AppBlockingPackageInfoWrapper wrapper : entry.getValue().mAllowlistsMap.values()) {
sb.append(wrapper.toString() + "\n");
}
- sb.append(" blacklists:\n");
- for (AppBlockingPackageInfoWrapper wrapper : entry.getValue().blacklistsMap.values()) {
+ sb.append(" blocklists:\n");
+ for (AppBlockingPackageInfoWrapper wrapper : entry.getValue().mBlocklistsMap.values()) {
sb.append(wrapper.toString() + "\n");
}
}
@@ -980,14 +980,14 @@
sb.append(proxy.toString() + "\n");
}
}
- sb.append("**Whitelist string in resource**\n");
- sb.append(mConfiguredWhitelist + "\n");
+ sb.append("**Allowlist string in resource**\n");
+ sb.append(mConfiguredAllowlist + "\n");
- sb.append("**System whitelist string in resource**\n");
- sb.append(mConfiguredSystemWhitelist + "\n");
+ sb.append("**System allowlist string in resource**\n");
+ sb.append(mConfiguredSystemAllowlist + "\n");
- sb.append("**Blacklist string in resource**\n");
- sb.append(mConfiguredBlacklist + "\n");
+ sb.append("**Blocklist string in resource**\n");
+ sb.append(mConfiguredBlocklist + "\n");
return sb.toString();
}
@@ -1069,24 +1069,24 @@
if (!mEnableActivityBlocking) {
Log.d(CarLog.TAG_PACKAGE, "Current activity " + topTask.topActivity +
" not allowed, blocking disabled. Number of tasks in stack:"
- + topTask.stackInfo.taskIds.length);
+ + topTask.taskInfo.childTaskIds.length);
return;
}
}
if (DBG_POLICY_ENFORCEMENT) {
Log.i(CarLog.TAG_PACKAGE, "Current activity " + topTask.topActivity +
" not allowed, will block, number of tasks in stack:" +
- topTask.stackInfo.taskIds.length);
+ topTask.taskInfo.childTaskIds.length);
}
// Figure out the root activity of blocked task.
String taskRootActivity = null;
- for (int i = 0; i < topTask.stackInfo.taskIds.length; i++) {
+ for (int i = 0; i < topTask.taskInfo.childTaskIds.length; i++) {
// topTask.taskId is the task that should be blocked.
- if (topTask.stackInfo.taskIds[i] == topTask.taskId) {
+ if (topTask.taskInfo.childTaskIds[i] == topTask.taskId) {
// stackInfo represents an ActivityStack. Its fields taskIds and taskNames
// are 1:1 mapped, where taskNames is the name of root activity in this task.
- taskRootActivity = topTask.stackInfo.taskNames[i];
+ taskRootActivity = topTask.taskInfo.childTaskNames[i];
break;
}
}
@@ -1295,61 +1295,61 @@
* held.
*/
private static class ClientPolicy {
- private final HashMap<String, AppBlockingPackageInfoWrapper> whitelistsMap =
+ private final HashMap<String, AppBlockingPackageInfoWrapper> mAllowlistsMap =
new HashMap<>();
- private final HashMap<String, AppBlockingPackageInfoWrapper> blacklistsMap =
+ private final HashMap<String, AppBlockingPackageInfoWrapper> mBlocklistsMap =
new HashMap<>();
- private void replaceWhitelists(AppBlockingPackageInfoWrapper[] whitelists) {
- whitelistsMap.clear();
- addToWhitelists(whitelists);
+ private void replaceAllowlists(AppBlockingPackageInfoWrapper[] allowlists) {
+ mAllowlistsMap.clear();
+ addToAllowlists(allowlists);
}
- private void addToWhitelists(AppBlockingPackageInfoWrapper[] whitelists) {
- if (whitelists == null) {
+ private void addToAllowlists(AppBlockingPackageInfoWrapper[] allowlists) {
+ if (allowlists == null) {
return;
}
- for (AppBlockingPackageInfoWrapper wrapper : whitelists) {
+ for (AppBlockingPackageInfoWrapper wrapper : allowlists) {
if (wrapper != null) {
- whitelistsMap.put(wrapper.info.packageName, wrapper);
+ mAllowlistsMap.put(wrapper.info.packageName, wrapper);
}
}
}
- private void removeWhitelists(AppBlockingPackageInfoWrapper[] whitelists) {
- if (whitelists == null) {
+ private void removeAllowlists(AppBlockingPackageInfoWrapper[] allowlists) {
+ if (allowlists == null) {
return;
}
- for (AppBlockingPackageInfoWrapper wrapper : whitelists) {
+ for (AppBlockingPackageInfoWrapper wrapper : allowlists) {
if (wrapper != null) {
- whitelistsMap.remove(wrapper.info.packageName);
+ mAllowlistsMap.remove(wrapper.info.packageName);
}
}
}
- private void replaceBlacklists(AppBlockingPackageInfoWrapper[] blacklists) {
- blacklistsMap.clear();
- addToBlacklists(blacklists);
+ private void replaceBlocklists(AppBlockingPackageInfoWrapper[] blocklists) {
+ mBlocklistsMap.clear();
+ addToBlocklists(blocklists);
}
- private void addToBlacklists(AppBlockingPackageInfoWrapper[] blacklists) {
- if (blacklists == null) {
+ private void addToBlocklists(AppBlockingPackageInfoWrapper[] blocklists) {
+ if (blocklists == null) {
return;
}
- for (AppBlockingPackageInfoWrapper wrapper : blacklists) {
+ for (AppBlockingPackageInfoWrapper wrapper : blocklists) {
if (wrapper != null) {
- blacklistsMap.put(wrapper.info.packageName, wrapper);
+ mBlocklistsMap.put(wrapper.info.packageName, wrapper);
}
}
}
- private void removeBlacklists(AppBlockingPackageInfoWrapper[] blacklists) {
- if (blacklists == null) {
+ private void removeBlocklists(AppBlockingPackageInfoWrapper[] blocklists) {
+ if (blocklists == null) {
return;
}
- for (AppBlockingPackageInfoWrapper wrapper : blacklists) {
+ for (AppBlockingPackageInfoWrapper wrapper : blocklists) {
if (wrapper != null) {
- blacklistsMap.remove(wrapper.info.packageName);
+ mBlocklistsMap.remove(wrapper.info.packageName);
}
}
}
diff --git a/service/src/com/android/car/pm/blurredbackground/BlurredSurfaceRenderer.java b/service/src/com/android/car/pm/blurredbackground/BlurredSurfaceRenderer.java
index fb97113..8b7edcd 100644
--- a/service/src/com/android/car/pm/blurredbackground/BlurredSurfaceRenderer.java
+++ b/service/src/com/android/car/pm/blurredbackground/BlurredSurfaceRenderer.java
@@ -146,16 +146,18 @@
Log.e(TAG,
"Could not find display token for screenshot. Will not capture screenshot");
} else {
- SurfaceControl.screenshot(
- token,
- mSurface,
- mWindowRect,
- mWindowRect.width(),
- mWindowRect.height(),
- /* useIdentityTransform= */ false,
- Surface.ROTATION_0
- );
+ final SurfaceControl.DisplayCaptureArgs captureArgs =
+ new SurfaceControl.DisplayCaptureArgs.Builder(token)
+ .setSize(mWindowRect.width(), mWindowRect.height())
+ .setSourceCrop(mWindowRect)
+ .setUseIdentityTransform(true)
+ .build();
+ SurfaceControl.ScreenshotHardwareBuffer screenshotHardwareBuffer =
+ SurfaceControl.captureDisplay(captureArgs);
+ mSurface.attachAndQueueBufferWithColorSpace(
+ screenshotHardwareBuffer.getHardwareBuffer(),
+ screenshotHardwareBuffer.getColorSpace());
mSurfaceTexture.updateTexImage();
mSurfaceTexture.getTransformMatrix(mTexMatrix);
isScreenshotCaptured = true;
diff --git a/service/src/com/android/car/pm/blurredbackground/GLHelper.java b/service/src/com/android/car/pm/blurredbackground/GLHelper.java
index 42df687..5489819 100644
--- a/service/src/com/android/car/pm/blurredbackground/GLHelper.java
+++ b/service/src/com/android/car/pm/blurredbackground/GLHelper.java
@@ -16,6 +16,7 @@
package com.android.car.pm.blurredbackground;
+import android.annotation.Nullable;
import android.content.Context;
import android.opengl.GLES30;
import android.opengl.Matrix;
@@ -23,8 +24,6 @@
import android.util.Log;
import android.util.Slog;
-import androidx.annotation.Nullable;
-
import libcore.io.Streams;
import java.io.IOException;
diff --git a/service/src/com/android/car/CarPowerManagementService.java b/service/src/com/android/car/power/CarPowerManagementService.java
similarity index 83%
rename from service/src/com/android/car/CarPowerManagementService.java
rename to service/src/com/android/car/power/CarPowerManagementService.java
index df647bb..715b0ff 100644
--- a/service/src/com/android/car/CarPowerManagementService.java
+++ b/service/src/com/android/car/power/CarPowerManagementService.java
@@ -13,27 +13,20 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.car;
+package com.android.car.power;
import android.annotation.NonNull;
-import android.annotation.UserIdInt;
import android.app.ActivityManager;
import android.car.Car;
import android.car.hardware.power.CarPowerManager.CarPowerStateListener;
import android.car.hardware.power.ICarPower;
import android.car.hardware.power.ICarPowerStateListener;
-import android.car.userlib.HalCallback;
-import android.car.userlib.InitialUserSetter;
-import android.car.userlib.InitialUserSetter.InitialUserInfoType;
-import android.car.userlib.UserHalHelper;
-import android.car.userlib.UserHelper;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.UserInfo;
import android.content.res.Resources;
-import android.hardware.automotive.vehicle.V2_0.InitialUserInfoRequestType;
-import android.hardware.automotive.vehicle.V2_0.InitialUserInfoResponseAction;
+import android.frameworks.automotive.powerpolicy.ICarPowerPolicySystemNotification;
import android.hardware.automotive.vehicle.V2_0.VehicleApPowerStateReq;
import android.net.wifi.WifiManager;
import android.os.Build;
@@ -50,10 +43,16 @@
import android.os.SystemProperties;
import android.os.UserHandle;
import android.os.UserManager;
-import android.sysprop.CarProperties;
import android.util.AtomicFile;
import android.util.Slog;
+import com.android.car.CarLocalServices;
+import com.android.car.CarLog;
+import com.android.car.CarServiceBase;
+import com.android.car.CarServiceUtils;
+import com.android.car.CarStatsLogHelper;
+import com.android.car.ICarImpl;
+import com.android.car.R;
import com.android.car.am.ContinuousBlankActivity;
import com.android.car.hal.PowerHalService;
import com.android.car.hal.PowerHalService.PowerState;
@@ -62,7 +61,7 @@
import com.android.car.user.CarUserService;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.app.IVoiceInteractionManagerService;
+import com.android.internal.util.function.pooled.PooledLambda;
import java.io.BufferedReader;
import java.io.BufferedWriter;
@@ -97,69 +96,11 @@
private static final int MAX_SUSPEND_TRIES = 9; // Initial + 8 retries
private static final long INITIAL_SUSPEND_RETRY_INTERVAL_MS = 10;
- private final Object mLock = new Object();
- private final Object mSimulationWaitObject = new Object();
-
- private final Context mContext;
- private final PowerHalService mHal;
- private final SystemInterface mSystemInterface;
- // The listeners that complete simply by returning from onStateChanged()
- private final PowerManagerCallbackList mPowerManagerListeners = new PowerManagerCallbackList();
- // The listeners that must indicate asynchronous completion by calling finished().
- private final PowerManagerCallbackList mPowerManagerListenersWithCompletion =
- new PowerManagerCallbackList();
-
- @GuardedBy("mSimulationWaitObject")
- private boolean mWakeFromSimulatedSleep;
- @GuardedBy("mSimulationWaitObject")
- private boolean mInSimulatedDeepSleepMode;
-
- @GuardedBy("mLock")
- private final Set<IBinder> mListenersWeAreWaitingFor = new HashSet<>();
- @GuardedBy("mLock")
- private CpmsState mCurrentState;
- @GuardedBy("mLock")
- private Timer mTimer;
- @GuardedBy("mLock")
- private long mProcessingStartTime;
- @GuardedBy("mLock")
- private long mLastSleepEntryTime;
- @GuardedBy("mLock")
- private final LinkedList<CpmsState> mPendingPowerStates = new LinkedList<>();
- private final HandlerThread mHandlerThread = CarServiceUtils.getHandlerThread(
- getClass().getSimpleName());
- private final PowerHandler mHandler = new PowerHandler(mHandlerThread.getLooper(), this);
-
- @GuardedBy("mLock")
- private boolean mTimerActive;
- @GuardedBy("mLock")
- private int mNextWakeupSec;
- @GuardedBy("mLock")
- private boolean mShutdownOnFinish;
- @GuardedBy("mLock")
- private boolean mShutdownOnNextSuspend;
- @GuardedBy("mLock")
- private boolean mIsBooting = true;
- @GuardedBy("mLock")
- private boolean mIsResuming;
- @GuardedBy("mLock")
- private int mShutdownPrepareTimeMs = MIN_MAX_GARAGE_MODE_DURATION_MS;
- @GuardedBy("mLock")
- private int mShutdownPollingIntervalMs = SHUTDOWN_POLLING_INTERVAL_MS;
- @GuardedBy("mLock")
- private boolean mRebootAfterGarageMode;
- @GuardedBy("mLock")
- private boolean mGarageModeShouldExitImmediately;
- private final boolean mDisableUserSwitchDuringResume;
-
- private final UserManager mUserManager;
- private final CarUserService mUserService;
- private final InitialUserSetter mInitialUserSetter;
-
- private final IVoiceInteractionManagerService mVoiceInteractionManagerService;
-
- private final WifiManager mWifiManager;
- private final AtomicFile mWifiStateFile;
+ private static final long CAR_POWER_POLICY_DAEMON_FIND_MARGINAL_TIME_MS = 300;
+ private static final long CAR_POWER_POLICY_DAEMON_BIND_RETRY_INTERVAL_MS = 500;
+ private static final int CAR_POWER_POLICY_DAEMON_BIND_MAX_RETRY = 3;
+ private static final String CAR_POWER_POLICY_DAEMON_INTERFACE =
+ "carpowerpolicy_system_notification";
// TODO: Make this OEM configurable.
private static final int SHUTDOWN_POLLING_INTERVAL_MS = 2000;
@@ -172,9 +113,74 @@
private static final String PROP_MAX_GARAGE_MODE_DURATION_OVERRIDE =
"android.car.garagemodeduration";
+ private final Object mLock = new Object();
+ private final Object mSimulationWaitObject = new Object();
+
+ private final Context mContext;
+ private final PowerHalService mHal;
+ private final SystemInterface mSystemInterface;
+ // The listeners that complete simply by returning from onStateChanged()
+ private final PowerManagerCallbackList mPowerManagerListeners = new PowerManagerCallbackList();
+ // The listeners that must indicate asynchronous completion by calling finished().
+ private final PowerManagerCallbackList mPowerManagerListenersWithCompletion =
+ new PowerManagerCallbackList();
+
+ @GuardedBy("mLock")
+ private final Set<IBinder> mListenersWeAreWaitingFor = new HashSet<>();
+ @GuardedBy("mLock")
+ private final LinkedList<CpmsState> mPendingPowerStates = new LinkedList<>();
+ private final HandlerThread mHandlerThread = CarServiceUtils.getHandlerThread(
+ getClass().getSimpleName());
+ private final PowerHandler mHandler = new PowerHandler(mHandlerThread.getLooper(), this);
+
+ private final UserManager mUserManager;
+ private final CarUserService mUserService;
+
+ private final WifiManager mWifiManager;
+ private final AtomicFile mWifiStateFile;
+
// This is a temp work-around to reduce user switching delay after wake-up.
private final boolean mSwitchGuestUserBeforeSleep;
+ @GuardedBy("mSimulationWaitObject")
+ private boolean mWakeFromSimulatedSleep;
+ @GuardedBy("mSimulationWaitObject")
+ private boolean mInSimulatedDeepSleepMode;
+
+ @GuardedBy("mLock")
+ private CpmsState mCurrentState;
+ @GuardedBy("mLock")
+ private Timer mTimer;
+ @GuardedBy("mLock")
+ private long mProcessingStartTime;
+ @GuardedBy("mLock")
+ private long mLastSleepEntryTime;
+
+ @GuardedBy("mLock")
+ private boolean mTimerActive;
+ @GuardedBy("mLock")
+ private int mNextWakeupSec;
+ @GuardedBy("mLock")
+ private boolean mShutdownOnFinish;
+ @GuardedBy("mLock")
+ private boolean mShutdownOnNextSuspend;
+ @GuardedBy("mLock")
+ private boolean mIsBooting = true;
+ @GuardedBy("mLock")
+ private int mShutdownPrepareTimeMs = MIN_MAX_GARAGE_MODE_DURATION_MS;
+ @GuardedBy("mLock")
+ private int mShutdownPollingIntervalMs = SHUTDOWN_POLLING_INTERVAL_MS;
+ @GuardedBy("mLock")
+ private boolean mRebootAfterGarageMode;
+ @GuardedBy("mLock")
+ private boolean mGarageModeShouldExitImmediately;
+
+ @GuardedBy("mLock")
+ private ICarPowerPolicySystemNotification mCarPowerPolicyDaemon;
+ @GuardedBy("mLock")
+ private boolean mConnectionInProgress;
+ private BinderHandler mBinderHandler;
+
private class PowerManagerCallbackList extends RemoteCallbackList<ICarPowerStateListener> {
/**
* Old version of {@link #onCallbackDied(E, Object)} that
@@ -190,24 +196,17 @@
public CarPowerManagementService(Context context, PowerHalService powerHal,
SystemInterface systemInterface, CarUserService carUserService) {
this(context, context.getResources(), powerHal, systemInterface, UserManager.get(context),
- carUserService, new InitialUserSetter(context,
- (u) -> carUserService.setInitialUser(u),
- context.getString(R.string.default_guest_name)),
- IVoiceInteractionManagerService.Stub.asInterface(
- ServiceManager.getService(Context.VOICE_INTERACTION_MANAGER_SERVICE)));
+ carUserService);
}
@VisibleForTesting
public CarPowerManagementService(Context context, Resources resources, PowerHalService powerHal,
- SystemInterface systemInterface, UserManager userManager, CarUserService carUserService,
- InitialUserSetter initialUserSetter,
- IVoiceInteractionManagerService voiceInteractionService) {
+ SystemInterface systemInterface, UserManager userManager,
+ CarUserService carUserService) {
mContext = context;
mHal = powerHal;
mSystemInterface = systemInterface;
mUserManager = userManager;
- mDisableUserSwitchDuringResume = resources
- .getBoolean(R.bool.config_disableUserSwitchDuringResume);
mShutdownPrepareTimeMs = resources.getInteger(
R.integer.maxGarageModeRunningDurationInSecs) * 1000;
mSwitchGuestUserBeforeSleep = resources.getBoolean(
@@ -220,17 +219,18 @@
mShutdownPrepareTimeMs = MIN_MAX_GARAGE_MODE_DURATION_MS;
}
mUserService = carUserService;
- mInitialUserSetter = initialUserSetter;
- mVoiceInteractionManagerService = voiceInteractionService;
mWifiManager = context.getSystemService(WifiManager.class);
mWifiStateFile = new AtomicFile(
new File(mSystemInterface.getSystemCarDir(), WIFI_STATE_FILENAME));
}
+ /**
+ * Overrides timers to keep testing time short.
+ *
+ * <p>Passing in {@code 0} resets the value to the default.
+ */
@VisibleForTesting
public void setShutdownTimersForTest(int pollingIntervalMs, int shutdownTimeoutMs) {
- // Override timers to keep testing time short
- // Passing in '0' resets the value to the default
synchronized (mLock) {
mShutdownPollingIntervalMs =
(pollingIntervalMs == 0) ? SHUTDOWN_POLLING_INTERVAL_MS : pollingIntervalMs;
@@ -255,13 +255,18 @@
onApPowerStateChange(CpmsState.ON, CarPowerStateListener.ON);
}
mSystemInterface.startDisplayStateMonitoring(this);
+ connectToPowerPolicyDaemon();
}
@Override
public void release() {
+ if (mBinderHandler != null) {
+ mBinderHandler.unlinkToDeath();
+ }
synchronized (mLock) {
releaseTimerLocked();
mCurrentState = null;
+ mCarPowerPolicyDaemon = null;
mHandler.cancelAll();
mListenersWeAreWaitingFor.clear();
}
@@ -284,11 +289,9 @@
writer.print(",mShutdownOnFinish:" + mShutdownOnFinish);
writer.print(",mShutdownPollingIntervalMs:" + mShutdownPollingIntervalMs);
writer.print(",mShutdownPrepareTimeMs:" + mShutdownPrepareTimeMs);
- writer.print(",mDisableUserSwitchDuringResume:" + mDisableUserSwitchDuringResume);
writer.println(",mRebootAfterGarageMode:" + mRebootAfterGarageMode);
writer.println("mSwitchGuestUserBeforeSleep:" + mSwitchGuestUserBeforeSleep);
}
- mInitialUserSetter.dump(writer);
}
@Override
@@ -301,13 +304,10 @@
}
@VisibleForTesting
- void setStateForTesting(boolean isBooting, boolean isResuming) {
+ void setStateForTesting(boolean isBooting) {
synchronized (mLock) {
- Slog.d(TAG, "setStateForTesting():"
- + " booting(" + mIsBooting + ">" + isBooting + ")"
- + " resuming(" + mIsResuming + ">" + isResuming + ")");
+ Slog.d(TAG, "setStateForTesting():" + " booting(" + mIsBooting + ">" + isBooting + ")");
mIsBooting = isBooting;
- mIsResuming = isResuming;
}
}
@@ -338,11 +338,11 @@
}
// now real power change happens. Whatever was queued before should be all cancelled.
releaseTimerLocked();
+ mCurrentState = state;
}
mHandler.cancelProcessingComplete();
Slog.i(TAG, "setCurrentState " + state.toString());
CarStatsLogHelper.logPowerState(state.mState);
- mCurrentState = state;
switch (state.mState) {
case CpmsState.WAIT_FOR_VHAL:
handleWaitForVhal(state);
@@ -417,89 +417,23 @@
updateCarUserNoticeServiceIfNecessary();
}
- // Some OEMs have their own user-switching logic, which may not be coordinated with this
- // code. To avoid contention, we don't switch users when we coming alive. The OEM's code
- // should do the switch.
- boolean allowUserSwitch = true;
- synchronized (mLock) {
- if (mIsBooting) {
- // The system is booting, so don't switch users
- allowUserSwitch = false;
- mIsBooting = false;
- mIsResuming = false;
- Slog.i(TAG, "User switch disallowed while booting");
- } else {
- // The system is resuming after a suspension. Optionally disable user switching.
- allowUserSwitch = !mDisableUserSwitchDuringResume;
- mIsBooting = false;
- mIsResuming = false;
- if (!allowUserSwitch) {
- Slog.i(TAG, "User switch disallowed while resuming");
- }
- }
- }
-
- mSystemInterface.setDisplayState(true);
sendPowerManagerEvent(CarPowerStateListener.ON);
mHal.sendOn();
+ synchronized (mLock) {
+ if (mIsBooting) {
+ Slog.d(TAG, "handleOn(): called on boot");
+ mIsBooting = false;
+ return;
+ }
+ }
+
try {
- switchUserOnResumeIfNecessary(allowUserSwitch);
+ mUserService.onResume();
} catch (Exception e) {
Slog.e(TAG, "Could not switch user on resume", e);
}
-
- setVoiceInteractionDisabled(false);
- }
-
- @VisibleForTesting // Ideally it should not be exposed, but it speeds up the unit tests
- void switchUserOnResumeIfNecessary(boolean allowSwitching) {
- Slog.d(TAG, "switchUserOnResumeIfNecessary(): allowSwitching=" + allowSwitching
- + ", mSwitchGuestUserBeforeSleep=" + mSwitchGuestUserBeforeSleep);
- if (!allowSwitching) {
- if (mSwitchGuestUserBeforeSleep) { // already handled
- return;
- }
- switchToNewGuestIfNecessary();
- return;
- }
-
- if (CarProperties.user_hal_enabled().orElse(false) && mUserService.isUserHalSupported()) {
- switchUserOnResumeIfNecessaryUsingHal();
- return;
- }
-
- executeDefaultInitialUserBehavior(!mSwitchGuestUserBeforeSleep);
- }
-
- private void executeDefaultInitialUserBehavior(boolean replaceGuest) {
- mInitialUserSetter.set(newInitialUserInfoBuilder(InitialUserSetter.TYPE_DEFAULT_BEHAVIOR)
- .setReplaceGuest(replaceGuest)
- .build());
- }
-
- /**
- * Replaces the current user if it's a guest.
- */
- private void switchToNewGuestIfNecessary() {
- int currentUserId = ActivityManager.getCurrentUser();
- UserInfo currentUser = mUserManager.getUserInfo(currentUserId);
-
- if (!mInitialUserSetter.canReplaceGuestUser(currentUser)) return; // Not a guest
-
- mInitialUserSetter.set(newInitialUserInfoBuilder(InitialUserSetter.TYPE_REPLACE_GUEST)
- .build());
- }
-
- private void switchUser(@UserIdInt int userId, boolean replaceGuest) {
- mInitialUserSetter.set(newInitialUserInfoBuilder(InitialUserSetter.TYPE_SWITCH)
- .setSwitchUserId(userId).setReplaceGuest(replaceGuest).build());
- }
-
- private InitialUserSetter.Builder newInitialUserInfoBuilder(@InitialUserInfoType int type) {
- return new InitialUserSetter.Builder(type)
- .setSupportsOverrideUserIdProperty(!mUserService.isUserHalSupported());
}
/**
@@ -514,79 +448,7 @@
}
}
- /**
- * Switches the initial user by calling the User HAL to define the behavior.
- */
- private void switchUserOnResumeIfNecessaryUsingHal() {
- Slog.i(TAG, "Using User HAL to define initial user behavior");
- mUserService.getInitialUserInfo(InitialUserInfoRequestType.RESUME, (status, response) -> {
- switch (status) {
- case HalCallback.STATUS_HAL_RESPONSE_TIMEOUT:
- case HalCallback.STATUS_HAL_SET_TIMEOUT:
- switchUserOnResumeUserHalFallback("timeout");
- return;
- case HalCallback.STATUS_CONCURRENT_OPERATION:
- switchUserOnResumeUserHalFallback("concurrent call");
- return;
- case HalCallback.STATUS_WRONG_HAL_RESPONSE:
- switchUserOnResumeUserHalFallback("wrong response");
- return;
- case HalCallback.STATUS_HAL_NOT_SUPPORTED:
- switchUserOnResumeUserHalFallback("Hal not supported");
- return;
- case HalCallback.STATUS_OK:
- if (response == null) {
- switchUserOnResumeUserHalFallback("no response");
- return;
- }
- boolean replaceGuest = !mSwitchGuestUserBeforeSleep;
- switch (response.action) {
- case InitialUserInfoResponseAction.DEFAULT:
- Slog.i(TAG, "HAL requested default initial user behavior");
- executeDefaultInitialUserBehavior(replaceGuest);
- return;
- case InitialUserInfoResponseAction.SWITCH:
- int userId = response.userToSwitchOrCreate.userId;
- Slog.i(TAG, "HAL requested switch to user " + userId);
- // If guest was replaced on shutdown, it doesn't need to be replaced
- // again
- switchUser(userId, replaceGuest);
- return;
- case InitialUserInfoResponseAction.CREATE:
- int halFlags = response.userToSwitchOrCreate.flags;
- String name = response.userNameToCreate;
- Slog.i(TAG, "HAL requested new user (name="
- + UserHelper.safeName(name) + ", flags="
- + UserHalHelper.userFlagsToString(halFlags) + ")");
- mInitialUserSetter
- .set(newInitialUserInfoBuilder(InitialUserSetter.TYPE_CREATE)
- .setNewUserName(name)
- .setNewUserFlags(halFlags)
- .build());
- return;
- default:
- switchUserOnResumeUserHalFallback(
- "invalid response action: " + response.action);
- return;
- }
- default:
- switchUserOnResumeUserHalFallback("invalid status: " + status);
- }
- });
- }
-
- /**
- * Switches the initial user directly when the User HAL call failed.
- */
- private void switchUserOnResumeUserHalFallback(String reason) {
- Slog.w(TAG, "Failed to set initial user based on User Hal (" + reason
- + "); falling back to default behavior");
- executeDefaultInitialUserBehavior(!mSwitchGuestUserBeforeSleep);
- }
-
private void handleShutdownPrepare(CpmsState newState) {
- setVoiceInteractionDisabled(true);
- mSystemInterface.setDisplayState(false);
// Shutdown on finish if the system doesn't support deep sleep or doesn't allow it.
synchronized (mLock) {
mShutdownOnFinish = mShutdownOnNextSuspend
@@ -606,7 +468,6 @@
// Simulate system shutdown to Deep Sleep
private void simulateShutdownPrepare() {
- mSystemInterface.setDisplayState(false);
Slog.i(TAG, "starting shutdown prepare");
sendPowerManagerEvent(CarPowerStateListener.SHUTDOWN_PREPARE);
mHal.sendShutdownPrepare();
@@ -653,8 +514,6 @@
throw new AssertionError("Should not return from PowerManager.reboot()");
}
}
- setVoiceInteractionDisabled(true);
-
// To make Kernel implementation simpler when going into sleep.
disableWifi();
@@ -667,14 +526,6 @@
mShutdownOnNextSuspend = false;
}
- private void setVoiceInteractionDisabled(boolean disabled) {
- try {
- mVoiceInteractionManagerService.setDisabled(disabled);
- } catch (RemoteException e) {
- Slog.w(TAG, "setVoiceIntefactionDisabled(" + disabled + ") failed", e);
- }
- }
-
private void restoreWifi() {
boolean needToRestore = readWifiModifiedState();
if (needToRestore) {
@@ -787,9 +638,8 @@
0 /*delay*/,
intervalMs);
}
- if (mSwitchGuestUserBeforeSleep) {
- switchToNewGuestIfNecessary();
- }
+ // allowUserSwitch value doesn't matter for onSuspend = true
+ mUserService.onSuspend();
}
private void sendPowerManagerEvent(int newState) {
@@ -866,7 +716,6 @@
nextListenerState = CarPowerStateListener.SUSPEND_EXIT;
}
synchronized (mLock) {
- mIsResuming = true;
// Any wakeup time from before is no longer valid.
mNextWakeupSec = 0;
}
@@ -953,6 +802,9 @@
Slog.w(TAG, "Unimplemented: doHandleMainDisplayStateChange() - on = " + on);
}
+ /**
+ * Handles when a main display changes.
+ */
public void handleMainDisplayChanged(boolean on) {
mHandler.handleMainDisplayStateChange(on);
}
@@ -1087,17 +939,131 @@
}
}
+ private void initializePowerPolicy() {
+ // TODO(b/170158623): Get the current policy ID from car power policy daemon and make sure
+ // that all components are in the expected power state.
+ }
+
+ private void connectToPowerPolicyDaemon() {
+ synchronized (mLock) {
+ if (mCarPowerPolicyDaemon != null || mConnectionInProgress) {
+ return;
+ }
+ mConnectionInProgress = true;
+ }
+ connectToDaemonHelper(CAR_POWER_POLICY_DAEMON_BIND_MAX_RETRY);
+ }
+
+ private void connectToDaemonHelper(int retryCount) {
+ if (retryCount <= 0) {
+ synchronized (mLock) {
+ mConnectionInProgress = false;
+ }
+ Slog.e(TAG, "Cannot reconnect to car power policyd daemon after retrying "
+ + CAR_POWER_POLICY_DAEMON_BIND_MAX_RETRY + " times");
+ return;
+ }
+ if (makeBinderConnection()) {
+ Slog.i(TAG, "Connected to car power policy daemon");
+ initializePowerPolicy();
+ return;
+ }
+ mHandler.sendMessageDelayed(PooledLambda.obtainMessage(
+ CarPowerManagementService::connectToDaemonHelper,
+ CarPowerManagementService.this, retryCount - 1),
+ CAR_POWER_POLICY_DAEMON_BIND_RETRY_INTERVAL_MS);
+ }
+
+ private boolean makeBinderConnection() {
+ long currentTimeMs = SystemClock.uptimeMillis();
+ IBinder binder = ServiceManager.getService(CAR_POWER_POLICY_DAEMON_INTERFACE);
+ if (binder == null) {
+ Slog.w(TAG, "Finding car power policy daemon failed. Power policy management is not "
+ + "supported");
+ return false;
+ }
+ long elapsedTimeMs = SystemClock.uptimeMillis() - currentTimeMs;
+ if (elapsedTimeMs > CAR_POWER_POLICY_DAEMON_FIND_MARGINAL_TIME_MS) {
+ Slog.wtf(TAG, "Finding car power policy daemon took too long(" + elapsedTimeMs + "ms)");
+ }
+
+ ICarPowerPolicySystemNotification daemon =
+ ICarPowerPolicySystemNotification.Stub.asInterface(binder);
+ if (daemon == null) {
+ Slog.w(TAG, "Getting car power policy daemon interface failed. Power policy management "
+ + "is not supported");
+ return false;
+ }
+ synchronized (mLock) {
+ mCarPowerPolicyDaemon = daemon;
+ mConnectionInProgress = false;
+ }
+ mBinderHandler = new BinderHandler(daemon);
+ mBinderHandler.linkToDeath();
+ return true;
+ }
+
+ private final class BinderHandler implements IBinder.DeathRecipient {
+ private ICarPowerPolicySystemNotification mDaemon;
+
+ private BinderHandler(ICarPowerPolicySystemNotification daemon) {
+ mDaemon = daemon;
+ }
+
+ @Override
+ public void binderDied() {
+ Slog.w(TAG, "Car power policy daemon died: reconnecting");
+ unlinkToDeath();
+ mDaemon = null;
+ synchronized (mLock) {
+ mCarPowerPolicyDaemon = null;
+ }
+ mHandler.sendMessageDelayed(PooledLambda.obtainMessage(
+ CarPowerManagementService::connectToDaemonHelper,
+ CarPowerManagementService.this, CAR_POWER_POLICY_DAEMON_BIND_MAX_RETRY),
+ CAR_POWER_POLICY_DAEMON_BIND_RETRY_INTERVAL_MS);
+ }
+
+ private void linkToDeath() {
+ if (mDaemon == null) {
+ return;
+ }
+ IBinder binder = mDaemon.asBinder();
+ if (binder == null) {
+ Slog.w(TAG, "Linking to binder death recipient skipped");
+ return;
+ }
+ try {
+ binder.linkToDeath(this, 0);
+ } catch (RemoteException e) {
+ mDaemon = null;
+ Slog.w(TAG, "Linking to binder death recipient failed: " + e);
+ }
+ }
+
+ private void unlinkToDeath() {
+ if (mDaemon == null) {
+ return;
+ }
+ IBinder binder = mDaemon.asBinder();
+ if (binder == null) {
+ Slog.w(TAG, "Unlinking from binder death recipient skipped");
+ return;
+ }
+ binder.unlinkToDeath(this, 0);
+ }
+ }
+
private static final class PowerHandler extends Handler {
private static final String TAG = PowerHandler.class.getSimpleName();
-
- private final int MSG_POWER_STATE_CHANGE = 0;
- private final int MSG_DISPLAY_BRIGHTNESS_CHANGE = 1;
- private final int MSG_MAIN_DISPLAY_STATE_CHANGE = 2;
- private final int MSG_PROCESSING_COMPLETE = 3;
+ private static final int MSG_POWER_STATE_CHANGE = 0;
+ private static final int MSG_DISPLAY_BRIGHTNESS_CHANGE = 1;
+ private static final int MSG_MAIN_DISPLAY_STATE_CHANGE = 2;
+ private static final int MSG_PROCESSING_COMPLETE = 3;
// Do not handle this immediately but with some delay as there can be a race between
// display off due to rear view camera and delivery to here.
- private final long MAIN_DISPLAY_EVENT_DELAY_MS = 500;
+ private static final long MAIN_DISPLAY_EVENT_DELAY_MS = 500;
private final WeakReference<CarPowerManagementService> mService;
@@ -1294,10 +1260,6 @@
}
}
- CpmsState(int state) {
- this(state, cpmsStateToPowerStateListenerState(state));
- }
-
CpmsState(int state, int carPowerStateListenerState) {
this.mCanPostpone = (state == SIMULATE_SLEEP);
this.mCanSleep = (state == SIMULATE_SLEEP);
@@ -1395,8 +1357,7 @@
* This is similar to 'onApPowerStateChange()' except that it needs to create a CpmsState
* that is not directly derived from a VehicleApPowerStateReq.
*/
- @VisibleForTesting
- void forceSuspendAndMaybeReboot(boolean shouldReboot) {
+ public void forceSuspendAndMaybeReboot(boolean shouldReboot) {
synchronized (mSimulationWaitObject) {
mInSimulatedDeepSleepMode = true;
mWakeFromSimulatedSleep = false;
diff --git a/service/src/com/android/car/power/SilentModeController.java b/service/src/com/android/car/power/SilentModeController.java
new file mode 100644
index 0000000..2e93967
--- /dev/null
+++ b/service/src/com/android/car/power/SilentModeController.java
@@ -0,0 +1,472 @@
+/*
+ * Copyright (C) 2020 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.car.power;
+
+import android.annotation.NonNull;
+import android.car.Car;
+import android.car.hardware.power.CarPowerManager.CarPowerStateListener;
+import android.car.hardware.power.ICarPowerStateListener;
+import android.content.Context;
+import android.os.FileObserver;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Message;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.os.SystemProperties;
+import android.util.Slog;
+
+import com.android.car.CarLocalServices;
+import com.android.car.CarLog;
+import com.android.car.CarServiceBase;
+import com.android.car.ICarImpl;
+import com.android.car.systeminterface.SystemInterface;
+import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.app.IVoiceInteractionManagerService;
+import com.android.internal.util.FunctionalUtils;
+
+import libcore.io.IoUtils;
+
+import java.io.File;
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Objects;
+
+/**
+ * Class to handle Silent and Non-silent modes.
+ *
+ * <p>Notifies others when the mode changes.
+ */
+public final class SilentModeController implements CarServiceBase {
+ private static final String FORCED_NON_SILENT = "reboot,forcednonsilent";
+ private static final String FORCED_SILENT = "reboot,forcedsilent";
+ private static final int MSG_SEND_NONSILENT = 0;
+ private static final int MSG_SEND_NONSILENT_TO_ONE = 1;
+ private static final int MSG_SEND_SILENT = 2;
+ private static final int MSG_SEND_SILENT_TO_ONE = 3;
+ private static final String SILENT_BOOT_FILENAME = "/sys/power/kernelsilentboot";
+ private static final String SYSTEM_BOOT_REASON = "sys.boot.reason";
+ private static final String TAG = CarLog.TAG_SILENT;
+
+ private final Object mLock = new Object();
+ private final String mSilentBootFileName;
+ private final Context mContext;
+ private final SystemInterface mSystemInterface;
+ private final HandlerThread mNotifierThread = new HandlerThread("SilentModeContollerNotifier");
+ private final IVoiceInteractionManagerService mVoiceInteractionManagerService;
+ private final ICarPowerStateListener mPowerListener = new ICarPowerStateListener.Stub() {
+ @Override
+ public void onStateChanged(int state) {
+ synchronized (mLock) {
+ boolean powerWasOn = mPowerStateIsOn;
+ mPowerStateIsOn = (state == CarPowerStateListener.ON);
+ if (powerWasOn != mPowerStateIsOn) {
+ queueNotificationLocked();
+ }
+ }
+ }
+ };
+
+ private CarPowerManagementService mCarPowerManagementService;
+ private FileObserver mFileObserver;
+ private Handler mNotifier;
+
+ @GuardedBy("mLock")
+ private boolean mIsInitialized;
+ // mIsModeForced is true when an ADB command was used to reboot the system
+ // into either silent or non-silent mode.
+ // If mIsModeForced we ignore the sysfs file's initial value.
+ // If the sysfs file is updated by the kernel or 'setSilentMode' is called
+ // by the VHAL, we clear mIsModeForced and respond.
+ @GuardedBy("mLock")
+ private boolean mIsModeForced;
+ @GuardedBy("mLock")
+ private boolean mIsModeForcedSilent;
+ @GuardedBy("mLock")
+ private final ArrayList<SilentModeListener> mSilentModeListeners = new ArrayList<>();
+ @GuardedBy("mLock")
+ private boolean mPowerStateIsOn;
+ // Does the VHAL allow us to be Silent, or does it require us to be active?
+ @GuardedBy("mLock")
+ private boolean mExternalControlAllowsSilent = true;
+ @GuardedBy("mLock")
+ private boolean mKernelAllowsSilent;
+
+ public SilentModeController(@NonNull Context context,
+ @NonNull SystemInterface systemInterface) {
+ this(context, systemInterface,
+ IVoiceInteractionManagerService.Stub.asInterface(
+ ServiceManager.getService(Context.VOICE_INTERACTION_MANAGER_SERVICE)),
+ SILENT_BOOT_FILENAME,
+ SystemProperties.get(SYSTEM_BOOT_REASON));
+ }
+
+ @VisibleForTesting
+ public SilentModeController(@NonNull Context context, @NonNull SystemInterface systemInterface,
+ @NonNull IVoiceInteractionManagerService voiceService, @NonNull String fileName) {
+ this(context, systemInterface, voiceService, fileName, "");
+ }
+
+ private SilentModeController(@NonNull Context context, @NonNull SystemInterface systemInterface,
+ @NonNull IVoiceInteractionManagerService voiceService, @NonNull String fileName,
+ String bootReason) {
+ Objects.requireNonNull(context, "Context must be non-null");
+ Objects.requireNonNull(systemInterface, "SystemInterface must be non-null");
+ Objects.requireNonNull(fileName, "File name must be non-null");
+ mContext = context;
+ mSystemInterface = systemInterface;
+ mVoiceInteractionManagerService = voiceService;
+ mSilentBootFileName = fileName;
+ startNotifierThread();
+ // The boot reason property takes precedence
+ if (FORCED_SILENT.equals(bootReason)) {
+ Slog.i(TAG, "Starting in forced silent mode");
+ mIsModeForced = true;
+ mIsModeForcedSilent = true;
+ } else if (FORCED_NON_SILENT.equals(bootReason)) {
+ Slog.i(TAG, "Starting in forced non-silent mode");
+ mIsModeForced = true;
+ mIsModeForcedSilent = false;
+ } else {
+ mIsModeForced = false;
+ // mIsModeForcedSilent is ignored when !mIsModeForced
+ }
+ startSilentBootFileObserver();
+ }
+
+ @Override
+ public void init() {
+ mCarPowerManagementService =
+ CarLocalServices.getService(CarPowerManagementService.class);
+ Objects.requireNonNull(mCarPowerManagementService, "Cannot get CarPowerManagementService");
+ mCarPowerManagementService.registerListener(mPowerListener);
+ synchronized (mLock) {
+ // Get the initial power state
+ mPowerStateIsOn =
+ (mCarPowerManagementService.getPowerState() == CarPowerStateListener.ON);
+ mIsInitialized = true;
+ queueNotificationLocked();
+ }
+ }
+
+ @Override
+ public void release() {
+ synchronized (mLock) {
+ if (mFileObserver != null) {
+ mFileObserver.stopWatching();
+ mFileObserver = null;
+ }
+ if (mCarPowerManagementService != null) {
+ mCarPowerManagementService.unregisterListener(mPowerListener);
+ }
+ mSilentModeListeners.clear();
+ }
+ }
+
+ @Override
+ public void dump(PrintWriter writer) {
+ boolean isSilent;
+ boolean powerStateIsOn;
+ boolean kernelAllowsSilent;
+ boolean externalControlAllowsSilent;
+ boolean isForced;
+ FileObserver fileObserver;
+ int numListeners;
+
+ synchronized (mLock) {
+ isSilent = isModeSilentLocked();
+ powerStateIsOn = mPowerStateIsOn;
+ kernelAllowsSilent = mKernelAllowsSilent;
+ externalControlAllowsSilent = mExternalControlAllowsSilent;
+ isForced = mIsModeForced;
+ fileObserver = mFileObserver;
+ numListeners = mSilentModeListeners.size();
+ }
+ writer.printf("SilentMode is %s%s\n", (isSilent ? "silent" : "non-silent"),
+ (isForced ? ", forced by reboot command or test" : ""));
+ writer.printf("Silent indicators: System power: %s, Kernel: %s, VHAL: %s\n",
+ (powerStateIsOn ? "On" : "not On"),
+ (kernelAllowsSilent ? "silent" : "non-silent"),
+ (externalControlAllowsSilent ? "silent" : "non-silent"));
+ writer.printf("SilentModeController %s monitoring %s\n",
+ ((fileObserver == null) ? "is not" : "is"), mSilentBootFileName);
+ writer.printf("SilentModeController has %d listeners registered\n", numListeners);
+ }
+
+ /**
+ * Indicates whether the current mode is silent.
+ */
+ public boolean isSilent() {
+ verifyPermission();
+ synchronized (mLock) {
+ return isModeSilentLocked();
+ }
+ }
+
+ /**
+ * Registers a listener to be called when the Silent state changes.
+ */
+ public void registerListener(SilentModeListener listener) {
+ verifyPermission();
+ Message message = Message.obtain();
+ message.obj = listener;
+ synchronized (mLock) {
+ message.what = isModeSilentLocked()
+ ? MSG_SEND_SILENT_TO_ONE : MSG_SEND_NONSILENT_TO_ONE;
+ mNotifier.sendMessage(message);
+ mSilentModeListeners.add(listener);
+ }
+ }
+
+ /**
+ * Unregisters a listener for Silent mode changes.
+ */
+ public void unregisterListener(SilentModeListener listener) {
+ verifyPermission();
+ synchronized (mLock) {
+ mSilentModeListeners.remove(listener);
+ }
+ }
+
+ /**
+ * Sets the power state for Silent Mode
+ *
+ * Helps to test Silent Mode without CarPowerManagementService
+ */
+ @VisibleForTesting
+ public void setPowerOnForTest(boolean isOn) {
+ synchronized (mLock) {
+ if (mPowerStateIsOn != isOn) {
+ mPowerStateIsOn = isOn;
+ queueNotificationLocked();
+ }
+ }
+ }
+
+ // Called only from the constructor
+ private void startSilentBootFileObserver() {
+ // This is called only from the constructor, so we don't
+ // need to hold mLock here.
+ File monitorFile = new File(mSilentBootFileName);
+ if (!monitorFile.exists()) {
+ mFileObserver = null;
+ mKernelAllowsSilent = false;
+ if (mIsModeForced) {
+ Slog.w(TAG, "\"" + mSilentBootFileName + "\" does not exist");
+ } else {
+ Slog.w(TAG, "\"" + mSilentBootFileName
+ + "\" does not exist. Assuming non-silent mode.");
+ }
+ return;
+ }
+ // Create an observer to run whenever the file is modified
+ mFileObserver = new FileObserver(monitorFile, FileObserver.MODIFY) {
+ @Override
+ public void onEvent(int event, String fileName) {
+ synchronized (mLock) {
+ boolean kernelAllowedSilent = mKernelAllowsSilent;
+ boolean weCanceledForcing = false;
+ if (mIsInitialized && mIsModeForced) {
+ // A GPIO update cancels the forcing
+ mIsModeForced = false;
+ weCanceledForcing = true;
+ }
+ try {
+ String contents = IoUtils.readFileAsString(mSilentBootFileName).trim();
+ mKernelAllowsSilent = contents.equals("1");
+ Slog.i(TAG, mSilentBootFileName + " indicates "
+ + (mKernelAllowsSilent ? "silent" : "non-silent") + " mode");
+ } catch (Exception ee) {
+ mKernelAllowsSilent = false;
+ Slog.w(TAG, "Exception reading " + mSilentBootFileName + ": " + ee);
+ }
+ if ((kernelAllowedSilent != mKernelAllowsSilent) || weCanceledForcing) {
+ queueNotificationLocked();
+ }
+ }
+ }
+ };
+ mFileObserver.startWatching();
+ // Trigger the observer to get the initial contents
+ mFileObserver.onEvent(FileObserver.MODIFY, mSilentBootFileName);
+ }
+
+ private void verifyPermission() {
+ ICarImpl.assertPermission(mContext, Car.PERMISSION_CAR_POWER);
+ }
+
+ private void queueNotificationLocked() {
+ if (mIsInitialized) {
+ int messageWhat = isModeSilentLocked() ? MSG_SEND_SILENT : MSG_SEND_NONSILENT;
+ mNotifier.sendEmptyMessage(messageWhat);
+ }
+ }
+
+ /**
+ * Functional interface for receiving Silent mode notifications.
+ */
+ public interface SilentModeListener {
+ /**
+ * Called when the Silent Mode changes.
+ *
+ * <p>This may also be called to reiterate the current state,
+ * so listeners should not assume that the state is different
+ * from the previous state.
+ */
+ void onModeChange(boolean isSilent);
+ }
+
+ /**
+ * Indicates that Silent Mode is allowed by the Vehicle HAL.
+ *
+ * <p>This is intended to be used by the Vehicle HAL if it wants the
+ * system to go non-silent.
+ * <p>Note that the system power state and the signal from the kernel
+ * both play a part in the ultimate silent/non-silent decision.
+ */
+ public void setSilentModeAllowed(boolean allowSilent) {
+ verifyPermission();
+ synchronized (mLock) {
+ boolean isAChange = mIsModeForced || (mExternalControlAllowsSilent != allowSilent);
+ mIsModeForced = false;
+ mExternalControlAllowsSilent = allowSilent;
+ if (isAChange) {
+ queueNotificationLocked();
+ }
+ }
+ }
+
+ /**
+ * Forces Silent Mode on or off, ignoring the GPIO and VHAL.
+ *
+ * <p>Note that the system power state plays a part in the
+ * ultimate silent/non-silent decision.
+ */
+ @VisibleForTesting
+ public void forceSilentMode(boolean isSilent) {
+ verifyPermission();
+ synchronized (mLock) {
+ mIsModeForced = true;
+ mIsModeForcedSilent = isSilent;
+ queueNotificationLocked();
+ }
+ }
+
+ /**
+ * Stops forcing Silent Mode.
+ *
+ * <p>Restores the logic that considers the GPIO and VHAL in determining
+ * the ultimate silent/non-silent decision.
+ */
+ @VisibleForTesting
+ public void unforceSilentMode() {
+ verifyPermission();
+ synchronized (mLock) {
+ mIsModeForced = false;
+ // 'mIsModeForcedSilent' is unused
+ queueNotificationLocked();
+ }
+ }
+
+ private boolean isModeSilentLocked() {
+ // Returns true if the display and audio should be off
+ if (!mPowerStateIsOn) {
+ return true;
+ }
+ if (mIsModeForced) {
+ return mIsModeForcedSilent;
+ }
+ return (mKernelAllowsSilent && mExternalControlAllowsSilent);
+ }
+
+ // Called only from the constructor
+ private void startNotifierThread() {
+ mNotifierThread.start();
+ // Notify the listeners on a separate thread to ensure that
+ // notifications are serialized and in order
+ mNotifier = new Handler(mNotifierThread.getLooper()) {
+ public void handleMessage(Message msg) {
+ switch (msg.what) {
+ case MSG_SEND_SILENT:
+ case MSG_SEND_NONSILENT:
+ processSilentModeChange(msg.what == MSG_SEND_SILENT);
+ break;
+ case MSG_SEND_SILENT_TO_ONE:
+ case MSG_SEND_NONSILENT_TO_ONE:
+ if (!(msg.obj instanceof SilentModeListener)) {
+ Slog.e(TAG, "Bad listener given to LooperThread");
+ return;
+ }
+ notifyOneListener((SilentModeListener) msg.obj,
+ msg.what == MSG_SEND_SILENT_TO_ONE);
+ break;
+ default:
+ Slog.w(TAG, "Unknown message " + msg.what);
+ }
+ };
+ };
+ }
+
+ // Called only on the notifier thread
+ private void processSilentModeChange(boolean silentState) {
+ // Control the display/audio and notify listeners.
+ // The notifications are sent when the devices are off.
+ if (silentState) {
+ // Turn off the display/audio first
+ switchDisplayAndAudio(true);
+ notifyAllListeners(true);
+ } else {
+ // Turn on the display/audio last
+ notifyAllListeners(false);
+ switchDisplayAndAudio(false);
+ }
+ }
+
+ // Called only on the notifier thread
+ private void notifyAllListeners(boolean silentState) {
+ ArrayList<SilentModeListener> listeners;
+ synchronized (mLock) {
+ listeners = (ArrayList<SilentModeListener>) mSilentModeListeners.clone();
+ }
+ Slog.i(TAG, "Sending \"" + (silentState ? "silent" : "non-silent")
+ + "\" to " + listeners.size() + " listeners");
+ for (int idx = 0; idx < listeners.size(); idx++) {
+ notifyOneListener(listeners.get(idx), silentState);
+ }
+ }
+
+ // Called only on the notifier thread
+ private void notifyOneListener(SilentModeListener listener, boolean silentState) {
+ try {
+ listener.onModeChange(silentState);
+ } catch (Exception e) {
+ Slog.w(TAG, "Exception thrown by listener "
+ + FunctionalUtils.getLambdaName(listener), e);
+ }
+ }
+
+ // Called only on the notifier thread
+ private void switchDisplayAndAudio(boolean silentState) {
+ mSystemInterface.setDisplayState(!silentState);
+ try {
+ mVoiceInteractionManagerService.setDisabled(silentState);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "IVoiceInteractionManagerServicesetDisabled("
+ + silentState + ") failed", e);
+ }
+ }
+}
diff --git a/service/src/com/android/car/storagemonitoring/EMmcWearInformationProvider.java b/service/src/com/android/car/storagemonitoring/EMmcWearInformationProvider.java
index 3940578..7b8a33c 100644
--- a/service/src/com/android/car/storagemonitoring/EMmcWearInformationProvider.java
+++ b/service/src/com/android/car/storagemonitoring/EMmcWearInformationProvider.java
@@ -18,11 +18,13 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.util.Log;
+
import com.android.car.CarLog;
import com.android.internal.annotations.VisibleForTesting;
+
+import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
-import java.io.BufferedReader;
import java.io.IOException;
/**
@@ -94,8 +96,7 @@
lifetimeB = Integer.decode(lifetimes[1]);
eol = Integer.decode("0x" + eolData);
} catch (NumberFormatException e) {
- Log.w(CarLog.TAG_STORAGE,
- "lifetime data not in expected format: " + lifetimeData, e);
+ Log.w(CarLog.TAG_STORAGE, "lifetime data not in expected format: " + lifetimeData);
return null;
}
diff --git a/service/src/com/android/car/storagemonitoring/IoStatsTracker.java b/service/src/com/android/car/storagemonitoring/IoStatsTracker.java
index fee1bbf..e28f3c7 100644
--- a/service/src/com/android/car/storagemonitoring/IoStatsTracker.java
+++ b/service/src/com/android/car/storagemonitoring/IoStatsTracker.java
@@ -20,11 +20,10 @@
import android.car.storagemonitoring.UidIoRecord;
import android.util.SparseArray;
-import androidx.annotation.GuardedBy;
-
import com.android.car.SparseArrayStream;
import com.android.car.procfsinspector.ProcessInfo;
import com.android.car.systeminterface.SystemStateInterface;
+import com.android.internal.annotations.GuardedBy;
import java.util.List;
import java.util.Optional;
diff --git a/service/src/com/android/car/storagemonitoring/UfsWearInformationProvider.java b/service/src/com/android/car/storagemonitoring/UfsWearInformationProvider.java
index fa7ba8b..fe96f87 100644
--- a/service/src/com/android/car/storagemonitoring/UfsWearInformationProvider.java
+++ b/service/src/com/android/car/storagemonitoring/UfsWearInformationProvider.java
@@ -18,8 +18,10 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.util.Log;
+
import com.android.car.CarLog;
import com.android.internal.annotations.VisibleForTesting;
+
import java.io.File;
import java.io.IOException;
import java.util.List;
@@ -54,6 +56,10 @@
@Nullable
@Override
public WearInformation load() {
+ if (!mFile.exists() || !mFile.isFile()) {
+ Log.i(CarLog.TAG_STORAGE, mFile + " does not exist or is not a file");
+ return null;
+ }
List<String> lifetimeData;
try {
lifetimeData = java.nio.file.Files.readAllLines(mFile.toPath());
diff --git a/service/src/com/android/car/systeminterface/DisplayInterface.java b/service/src/com/android/car/systeminterface/DisplayInterface.java
index 301a48a..5b00ca6 100644
--- a/service/src/com/android/car/systeminterface/DisplayInterface.java
+++ b/service/src/com/android/car/systeminterface/DisplayInterface.java
@@ -42,7 +42,7 @@
import android.view.InputDevice;
import com.android.car.CarLog;
-import com.android.car.CarPowerManagementService;
+import com.android.car.power.CarPowerManagementService;
import com.android.internal.annotations.GuardedBy;
/**
diff --git a/service/src/com/android/car/systeminterface/SystemInterface.java b/service/src/com/android/car/systeminterface/SystemInterface.java
index ff3dcb0..928962d 100644
--- a/service/src/com/android/car/systeminterface/SystemInterface.java
+++ b/service/src/com/android/car/systeminterface/SystemInterface.java
@@ -20,12 +20,12 @@
import android.content.Intent;
import android.os.UserHandle;
-import com.android.car.CarPowerManagementService;
+import com.android.car.internal.ICarServiceHelper;
+import com.android.car.power.CarPowerManagementService;
import com.android.car.procfsinspector.ProcessInfo;
import com.android.car.storagemonitoring.LifetimeWriteInfoProvider;
import com.android.car.storagemonitoring.UidIoStatsProvider;
import com.android.car.storagemonitoring.WearInformationProvider;
-import com.android.internal.car.ICarServiceHelper;
import java.io.File;
import java.time.Duration;
diff --git a/service/src/com/android/car/systeminterface/SystemStateInterface.java b/service/src/com/android/car/systeminterface/SystemStateInterface.java
index d7d9de9..8849394 100644
--- a/service/src/com/android/car/systeminterface/SystemStateInterface.java
+++ b/service/src/com/android/car/systeminterface/SystemStateInterface.java
@@ -25,10 +25,10 @@
import android.util.Log;
import android.util.Pair;
+import com.android.car.internal.ICarServiceHelper;
import com.android.car.procfsinspector.ProcessInfo;
import com.android.car.procfsinspector.ProcfsInspector;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.car.ICarServiceHelper;
import java.time.Duration;
import java.util.ArrayList;
diff --git a/service/src/com/android/car/trust/BLEMessagePayloadStream.java b/service/src/com/android/car/trust/BLEMessagePayloadStream.java
deleted file mode 100644
index 9082a4a..0000000
--- a/service/src/com/android/car/trust/BLEMessagePayloadStream.java
+++ /dev/null
@@ -1,66 +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.car.trust;
-
-import android.annotation.NonNull;
-
-import com.android.car.BLEStreamProtos.BLEMessageProto.BLEMessage;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-/**
- * Manage a stream in which the {@code payload} field of
- * {@link com.android.car.trust.BLEStream.BLEMessage} is written to.
- */
-class BLEMessagePayloadStream {
- private ByteArrayOutputStream mPendingData = new ByteArrayOutputStream();
- private boolean mIsComplete;
-
- /**
- * Clears this data stream.
- */
- public void reset() {
- mPendingData.reset();
- mIsComplete = false;
- }
-
- /**
- * Extracts the payload from the given {@code BLEMessage} and writes it to the stream.
- *
- * @param message The {@link com.android.car.trust.BLEStream.BLEMessage} to parse.
- */
- public void write(BLEMessage message) throws IOException {
- mPendingData.write(message.getPayload().toByteArray());
- mIsComplete = message.getPacketNumber() == message.getTotalPackets();
- }
-
- /**
- * Returns {@code true} if a complete payload has been formed.
- */
- public boolean isComplete() {
- return mIsComplete;
- }
-
- /**
- * Returns the current contents of a stream as a byte array.
- */
- @NonNull
- public byte[] toByteArray() {
- return mPendingData.toByteArray();
- }
-}
diff --git a/service/src/com/android/car/trust/BLEMessageV1Factory.java b/service/src/com/android/car/trust/BLEMessageV1Factory.java
deleted file mode 100644
index 8bebc90..0000000
--- a/service/src/com/android/car/trust/BLEMessageV1Factory.java
+++ /dev/null
@@ -1,215 +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.car.trust;
-
-import android.util.Log;
-
-import com.android.car.BLEStreamProtos.BLEMessageProto.BLEMessage;
-import com.android.car.BLEStreamProtos.BLEOperationProto.OperationType;
-import com.android.car.protobuf.ByteString;
-import com.android.internal.annotations.VisibleForTesting;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-/**
- * Methods for creating {@link BLEStream} protos
- */
-class BLEMessageV1Factory {
-
- private static final String TAG = "BLEMessageFactory";
-
- /**
- * The size in bytes of a {@code fixed32} field in the proto.
- * See this <a href="https://developers.google.com/protocol-buffers/docs/encoding">site</a> for
- * more details.
- */
- private static final int FIXED_32_SIZE = 4;
-
- // The size needed to encode a boolean proto field
- private static final int BOOLEAN_FIELD_ENCODING_SIZE = 1;
-
- /**
- * The bytes needed to encode the field number in the proto.
- *
- * <p>Since the v1 proto only has 6 fields, it will only take 1 additional byte to encode.
- */
- private static final int FIELD_NUMBER_ENCODING_SIZE = 1;
- /**
- * Current version of the proto.
- */
- private static final int PROTOCOL_VERSION = 1;
- /**
- * The size of the version field in the proto.
- *
- * <p>The version field is a {@code variant} and thus, its size can vary between 1-5 bytes.
- * Since the version is {@code 1}, it will only take 1 byte to encode + 1 byte for the field
- * number.
- */
- private static final int VERSION_SIZE = getEncodedSize(PROTOCOL_VERSION)
- + FIELD_NUMBER_ENCODING_SIZE;
- /**
- * The size of fields in the header that do not change depending on their value.
- *
- * <p>The fixed fields are:
- *
- * <ol>
- * <li>Version (1 byte + 1 byte for field)
- * <li>Packet number (4 bytes + 1 byte for field)
- * <li>Total packets (4 bytes + 1 byte for field)
- * </ol>
- *
- * <p>Note, the version code is an {@code Int32Value} and thus, can vary, but it is always a set
- * value at compile time. Thus, it can be calculated statically.
- */
- private static final int CONSTANT_HEADER_FIELD_SIZE = VERSION_SIZE
- + (FIXED_32_SIZE + FIELD_NUMBER_ENCODING_SIZE)
- + (FIXED_32_SIZE + FIELD_NUMBER_ENCODING_SIZE);
-
- private BLEMessageV1Factory() {}
-
- /**
- * Creates an acknowledgement {@link BLEMessage}.
- *
- * <p>This type of proto should be used to let a client know that this device has received
- * a partially completed {@code BLEMessage}.
- *
- * <p>Note, this type of message has an empty {@code payload} field.
- *
- * @return A {@code BLEMessage} with an {@code OperationType} of {@link OperationType.ACK}.
- */
- static BLEMessage makeAcknowledgementMessage() {
- return BLEMessage.newBuilder()
- .setVersion(PROTOCOL_VERSION)
- .setOperation(OperationType.ACK)
- .setPacketNumber(1)
- .setTotalPackets(1)
- .setIsPayloadEncrypted(false)
- .build();
- }
-
- /**
- * Method used to generate a single message, the packet number and total packets will set to 1
- * by default
- *
- * @param payload The data object to use as the
- * {@link com.android.car.trust.BLEStream.BLEMessage}
- * payload
- * @param operation The operation this message represents
- * @return The generated {@link com.android.car.trust.BLEStream.BLEMessage}
- */
- @VisibleForTesting
- static BLEMessage makeBLEMessage(byte[] payload, OperationType operation,
- boolean isPayloadEncrypted) {
- return BLEMessage.newBuilder()
- .setVersion(PROTOCOL_VERSION)
- .setOperation(operation)
- .setPacketNumber(1)
- .setTotalPackets(1)
- .setIsPayloadEncrypted(isPayloadEncrypted)
- .setPayload(ByteString.copyFrom(payload))
- .build();
- }
-
- /**
- * Split given data if necessary to fit within the given {@code maxSize}
- *
- * @param payload The payload to potentially split across multiple {@link
- * com.android.car.trust.BLEStream.BLEMessage}s
- * @param operation The operation this message represents
- * @param maxSize The maximum size of each chunk
- * @return An array of {@link com.android.car.trust.BLEStream.BLEMessage}s
- */
- public static List<BLEMessage> makeBLEMessages(byte[] payload, OperationType operation,
- int maxSize, boolean isPayloadEncrypted) {
- List<BLEMessage> bleMessages = new ArrayList();
- int payloadSize = payload.length;
- int maxPayloadSize =
- maxSize - getProtoHeaderSize(operation, payloadSize, isPayloadEncrypted);
- if (payloadSize <= maxPayloadSize) {
- bleMessages.add(makeBLEMessage(payload, operation, isPayloadEncrypted));
- return bleMessages;
- }
- int totalPackets = (int) Math.ceil((double) payloadSize / maxPayloadSize);
- int start = 0;
- int end = maxPayloadSize;
- for (int i = 0; i < totalPackets; i++) {
- bleMessages.add(BLEMessage.newBuilder()
- .setVersion(PROTOCOL_VERSION)
- .setOperation(operation)
- .setPacketNumber(i + 1)
- .setTotalPackets(totalPackets)
- .setIsPayloadEncrypted(isPayloadEncrypted)
- .setPayload(ByteString.copyFrom(Arrays.copyOfRange(payload, start, end)))
- .build());
- start = end;
- end = Math.min(start + maxPayloadSize, payloadSize);
- }
- return bleMessages;
- }
-
- /**
- * Returns the header size for the proto in bytes. This method assumes that the proto
- * contain a payload.
- */
- @VisibleForTesting
- static int getProtoHeaderSize(OperationType operation, int payloadSize,
- boolean isPayloadEncrypted) {
- int isPayloadEncryptedFieldSize = isPayloadEncrypted
- ? BOOLEAN_FIELD_ENCODING_SIZE + FIELD_NUMBER_ENCODING_SIZE
- : 0;
- int operationSize = getEncodedSize(operation.getNumber()) + FIELD_NUMBER_ENCODING_SIZE;
-
- // The payload size is a varint.
- int payloadEncodingSize = FIELD_NUMBER_ENCODING_SIZE + getEncodedSize(payloadSize);
-
- return CONSTANT_HEADER_FIELD_SIZE + operationSize + isPayloadEncryptedFieldSize
- + payloadEncodingSize;
- }
-
- /**
- * The methods in this section are taken from
- * google3/third_party/swift/swift_protobuf/Sources/SwiftProtobuf/Variant.swift.
- * It should be kept in sync as long as the proto version remains the same.
- *
- * <p>Computes the number of bytes that would be needed to store a 32-bit variant. Negative
- * value is not considered because all proto values should be positive.
- *
- * @param value the data that need to be encoded
- * @return the size of the encoded data
- */
- private static int getEncodedSize(int value) {
- if (value < 0) {
- Log.e(TAG, "Get a negative value from proto");
- return 10;
- }
- if ((value & (~0 << 7)) == 0) {
- return 1;
- }
- if ((value & (~0 << 14)) == 0) {
- return 2;
- }
- if ((value & (~0 << 21)) == 0) {
- return 3;
- }
- if ((value & (~0 << 28)) == 0) {
- return 4;
- }
- return 5;
- }
-}
diff --git a/service/src/com/android/car/trust/BLEVersionExchangeResolver.java b/service/src/com/android/car/trust/BLEVersionExchangeResolver.java
deleted file mode 100644
index d5c7383..0000000
--- a/service/src/com/android/car/trust/BLEVersionExchangeResolver.java
+++ /dev/null
@@ -1,93 +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.car.trust;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothGattCharacteristic;
-import android.os.Handler;
-import android.os.Looper;
-import android.util.Log;
-
-import com.android.car.BLEStreamProtos.VersionExchangeProto.BLEVersionExchange;
-
-/**
- * Resolver of version exchanges between this device and a client device.
- */
-class BLEVersionExchangeResolver {
- private static final String TAG = "BLEVersionExchangeResolver";
-
- // Currently, only version 1 of the messaging and security supported.
- private static final int MESSAGING_VERSION = 1;
- private static final int SECURITY_VERSION = 1;
-
- /**
- * Returns a message stream that can be used to send messages to the given
- * {@link BluetoothDevice} based on the version exchange proto.
- *
- * @param versionExchange The version exchange proto to resolve
- * @param device The remote device to send messages to.
- * @param readCharacteristic The characteristic the remote device will use to write messages to.
- * This is the characteristic this IHU will read from.
- * @param writeCharacteristic The characteristic on the remote device that this IHU can write
- * messages to.
- * @return A stream that can send message or {@code null} if resolution was not possible.
- */
- @Nullable
- static BleMessageStream resolveToStream(
- @NonNull BLEVersionExchange versionExchange,
- @NonNull BluetoothDevice device, @NonNull BlePeripheralManager blePeripheralManager,
- @NonNull BluetoothGattCharacteristic writeCharacteristic,
- @NonNull BluetoothGattCharacteristic readCharacteristic) {
- int minMessagingVersion = versionExchange.getMinSupportedMessagingVersion();
- int minSecurityVersion = versionExchange.getMinSupportedSecurityVersion();
-
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Checking for supported version on (minMessagingVersion: "
- + minMessagingVersion + ", minSecurityVersion: " + minSecurityVersion + ")");
- }
-
- // Only one supported version, so ensure the minimum version matches.
- if (minMessagingVersion == MESSAGING_VERSION && minSecurityVersion == SECURITY_VERSION) {
- return new BleMessageStreamV1(
- new Handler(Looper.getMainLooper()),
- blePeripheralManager,
- device,
- writeCharacteristic,
- readCharacteristic);
- }
-
- return null;
- }
-
- /**
- * Returns a version exchange proto with the maximum and minimum protocol and security versions
- * this device currently supports.
- */
- @NonNull
- static BLEVersionExchange makeVersionExchange() {
- return BLEVersionExchange.newBuilder()
- .setMinSupportedMessagingVersion(MESSAGING_VERSION)
- .setMaxSupportedMessagingVersion(MESSAGING_VERSION)
- .setMinSupportedSecurityVersion(SECURITY_VERSION)
- .setMaxSupportedSecurityVersion(SECURITY_VERSION)
- .build();
- }
-
- private BLEVersionExchangeResolver() {}
-}
diff --git a/service/src/com/android/car/trust/BleMessageStream.java b/service/src/com/android/car/trust/BleMessageStream.java
deleted file mode 100644
index 19da2c2..0000000
--- a/service/src/com/android/car/trust/BleMessageStream.java
+++ /dev/null
@@ -1,60 +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.car.trust;
-
-import android.annotation.NonNull;
-
-import com.android.car.BLEStreamProtos.BLEOperationProto.OperationType;
-
-/**
- * Handles the streaming of BLE messages to a specific {@link android.bluetooth.BluetoothDevice}.
- *
- * <p>This stream will handle if messages to a particular peripheral need to be split into
- * multiple messages or if the messages can be sent all at once. Internally, it will have its own
- * protocol for how the split messages are structured.
- */
-interface BleMessageStream {
- /** Registers the given callback to be notified of various events within the stream. */
- void registerCallback(@NonNull BleMessageStreamCallback callback);
-
- /** Unregisters the given callback from being notified of stream events. */
- void unregisterCallback(@NonNull BleMessageStreamCallback callback);
-
- /** Sets the maximum size of a message that can be sent. */
- void setMaxWriteSize(int maxWriteSize);
-
- /** Returns the maximum size of a message that can be sent. */
- int getMaxWriteSize();
-
- /**
- * Writes the given message to the write characteristic set on this stream to the
- * {@code BleutoothDevice} associated with this stream.
- *
- * <p>The given message will adhere to the max write size set on this stream. If the message is
- * larger than this size, then this stream should take the appropriate actions necessary to
- * chunk the message to the device so that no parts of the message is dropped.
- *
- * <p>If there was an error, then this stream will notify the [callback] of this stream via a
- * call to its {@code onWriteMessageError} method.
- *
- * @param message The message to send.
- * @param operationType The {@link OperationType} of this message.
- * @param isPayloadEncrypted {@code true} if the message to send has been encrypted.
- */
- void writeMessage(@NonNull byte[] message, @NonNull OperationType operationType,
- boolean isPayloadEncrypted);
-}
diff --git a/service/src/com/android/car/trust/BleMessageStreamCallback.java b/service/src/com/android/car/trust/BleMessageStreamCallback.java
deleted file mode 100644
index d497c85..0000000
--- a/service/src/com/android/car/trust/BleMessageStreamCallback.java
+++ /dev/null
@@ -1,48 +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.car.trust;
-
-import android.annotation.NonNull;
-
-import java.util.UUID;
-
-/**
- * The callback that will be notified of various actions that occur in a {@link BleMessageStream}.
- */
-interface BleMessageStreamCallback {
- /**
- * Called if an error was encountered during a processing of a client message.
- *
- * @param uuid The {@link UUID} of the characteristic that the client message was retrieved
- * from.
- */
- void onMessageReceivedError(@NonNull UUID uuid);
-
- /**
- * Called when a complete message is received from the client.
- *
- * @param message The complete message.
- * @param uuid The {@link UUID} of the characteristic that the client message was retrieved
- * from.
- */
- void onMessageReceived(@NonNull byte[] message, UUID uuid);
-
- /**
- * Called if there was an error during a write of a message to the stream.
- */
- void onWriteMessageError();
-}
diff --git a/service/src/com/android/car/trust/BleMessageStreamV1.java b/service/src/com/android/car/trust/BleMessageStreamV1.java
deleted file mode 100644
index d3f68cf..0000000
--- a/service/src/com/android/car/trust/BleMessageStreamV1.java
+++ /dev/null
@@ -1,304 +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.car.trust;
-
-import android.annotation.NonNull;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothGattCharacteristic;
-import android.os.Handler;
-import android.util.Log;
-
-import com.android.car.BLEStreamProtos.BLEMessageProto.BLEMessage;
-import com.android.car.BLEStreamProtos.BLEOperationProto.OperationType;
-import com.android.car.protobuf.InvalidProtocolBufferException;
-import com.android.internal.annotations.VisibleForTesting;
-
-import java.io.IOException;
-import java.util.ArrayDeque;
-import java.util.ArrayList;
-import java.util.Deque;
-import java.util.List;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Version 1 of the message stream.
- */
-class BleMessageStreamV1 implements BleMessageStream {
- private static final String TAG = "BleMessageStreamV1";
-
- @VisibleForTesting
- static final int BLE_MESSAGE_RETRY_LIMIT = 5;
-
- /**
- * The delay in milliseconds before a failed message is retried for sending.
- *
- * <p>This delay is only present for a message has been chunked. Each part of this chunked
- * message requires an ACK from the remote device before the next chunk is sent. If this ACK is
- * not received, then a second message is sent after this delay.
- *
- * <p>The value of this delay is 2 seconds to allow for 1 second to notify the remote device of
- * a new message and 1 second to wait for an ACK.
- */
- private static final long BLE_MESSAGE_RETRY_DELAY_MS = TimeUnit.SECONDS.toMillis(2);
-
- private final Handler mHandler;
- private final BlePeripheralManager mBlePeripheralManager;
- private final BluetoothDevice mDevice;
- private final BluetoothGattCharacteristic mWriteCharacteristic;
- private final BluetoothGattCharacteristic mReadCharacteristic;
-
- // Explicitly using an ArrayDequeue here for performance when used as a queue.
- private final Deque<BLEMessage> mMessageQueue = new ArrayDeque<>();
- private final BLEMessagePayloadStream mPayloadStream = new BLEMessagePayloadStream();
-
- /** The number of times that a message to send has been retried. */
- private int mRetryCount = 0;
-
- /**
- * The maximum write size for a single message.
- *
- * <p>By default, this value is 20 because the smaller possible write size over BLE is 23 bytes.
- * However, 3 bytes need to be subtracted due to them being used by the header of the BLE
- * packet. Thus, the final value is 20.
- */
- private int mMaxWriteSize = 20;
-
- private final List<BleMessageStreamCallback> mCallbacks = new ArrayList<>();
-
- BleMessageStreamV1(@NonNull Handler handler, @NonNull BlePeripheralManager blePeripheralManager,
- @NonNull BluetoothDevice device,
- @NonNull BluetoothGattCharacteristic writeCharacteristic,
- @NonNull BluetoothGattCharacteristic readCharacteristic) {
- mHandler = handler;
- mBlePeripheralManager = blePeripheralManager;
- mDevice = device;
- mWriteCharacteristic = writeCharacteristic;
- mReadCharacteristic = readCharacteristic;
-
- mBlePeripheralManager.addOnCharacteristicWriteListener(this::onCharacteristicWrite);
- }
-
- /** Registers the given callback to be notified of various events within the stream. */
- @Override
- public void registerCallback(@NonNull BleMessageStreamCallback callback) {
- mCallbacks.add(callback);
- }
-
- /** Unregisters the given callback from being notified of stream events. */
- @Override
- public void unregisterCallback(@NonNull BleMessageStreamCallback callback) {
- mCallbacks.remove(callback);
- }
-
- /** Sets the maximum size of a message that can be sent. */
- @Override
- public void setMaxWriteSize(int maxWriteSize) {
- mMaxWriteSize = maxWriteSize;
- }
-
- /** Returns the maximum size of a message that can be sent. */
- @Override
- public int getMaxWriteSize() {
- return mMaxWriteSize;
- }
-
- /**
- * Writes the given message to the write characteristic of this stream.
- *
- * <p>This method will handle the chunking of messages based on maximum write size assigned to
- * this stream.. If there is an error during the send, any callbacks on this stream will be
- * notified of the error.
- *
- * @param message The message to send.
- * @param operationType The {@link OperationType} of this message.
- * @param isPayloadEncrypted {@code true} if the message to send has been encrypted.
- */
- @Override
- public void writeMessage(@NonNull byte[] message, @NonNull OperationType operationType,
- boolean isPayloadEncrypted) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Writing message to device with name: " + mDevice.getName());
- }
-
- List<BLEMessage> bleMessages = BLEMessageV1Factory.makeBLEMessages(message, operationType,
- mMaxWriteSize, isPayloadEncrypted);
-
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Number of messages to send to device: " + bleMessages.size());
- }
-
- // Each write will override previous messages.
- if (!mMessageQueue.isEmpty()) {
- mMessageQueue.clear();
- Log.w(TAG, "Request to write a new message when there are still messages in the "
- + "queue.");
- }
-
- mMessageQueue.addAll(bleMessages);
-
- writeNextMessageInQueue();
- }
-
- /**
- * Processes a message from the client and notifies any callbacks of the success of this
- * call.
- */
- @VisibleForTesting
- void onCharacteristicWrite(@NonNull BluetoothDevice device,
- @NonNull BluetoothGattCharacteristic characteristic, @NonNull byte[] value) {
- if (!mDevice.equals(device)) {
- Log.w(TAG, "Received a message from a device (" + device.getAddress() + ") that is not "
- + "the expected device (" + mDevice.getAddress() + ") registered to this "
- + "stream. Ignoring.");
- return;
- }
-
- if (!characteristic.getUuid().equals(mReadCharacteristic.getUuid())) {
- Log.w(TAG, "Received a write to a characteristic (" + characteristic.getUuid()
- + ") that is not the expected UUID (" + mReadCharacteristic.getUuid()
- + "). Ignoring.");
- return;
- }
-
- BLEMessage bleMessage;
- try {
- bleMessage = BLEMessage.parseFrom(value);
- } catch (InvalidProtocolBufferException e) {
- Log.e(TAG, "Can not parse BLE message from client.", e);
-
- for (BleMessageStreamCallback callback : mCallbacks) {
- callback.onMessageReceivedError(characteristic.getUuid());
- }
- return;
- }
-
- if (bleMessage.getOperation() == OperationType.ACK) {
- handleClientAckMessage();
- return;
- }
-
- try {
- mPayloadStream.write(bleMessage);
- } catch (IOException e) {
- Log.e(TAG, "Unable to parse the BLE message's payload from client.", e);
-
- for (BleMessageStreamCallback callback : mCallbacks) {
- callback.onMessageReceivedError(characteristic.getUuid());
- }
- return;
- }
-
- // If it's not complete, make sure the client knows that this message was received.
- if (!mPayloadStream.isComplete()) {
- sendAcknowledgmentMessage();
- return;
- }
-
- for (BleMessageStreamCallback callback : mCallbacks) {
- callback.onMessageReceived(mPayloadStream.toByteArray(), characteristic.getUuid());
- }
-
- mPayloadStream.reset();
- }
-
- /**
- * Writes the next message in the message queue to the write characteristic.
- *
- * <p>If the message queue is empty, then this method will do nothing.
- */
- private void writeNextMessageInQueue() {
- // This should not happen in practice since this method is private and should only be called
- // for a non-empty queue.
- if (mMessageQueue.isEmpty()) {
- Log.e(TAG, "Call to write next message in queue, but the message queue is empty.");
- return;
- }
-
- if (mMessageQueue.size() == 1) {
- writeValueAndNotify(mMessageQueue.remove().toByteArray());
- return;
- }
-
- mHandler.post(mSendMessageWithTimeoutRunnable);
- }
-
- private void handleClientAckMessage() {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Received ACK from client. Attempting to write next message in queue.");
- }
-
- mHandler.removeCallbacks(mSendMessageWithTimeoutRunnable);
- mRetryCount = 0;
-
- if (mMessageQueue.isEmpty()) {
- Log.e(TAG, "Received ACK, but the message queue is empty. Ignoring.");
- return;
- }
-
- // Previous message has been sent successfully so we can start the next message.
- mMessageQueue.remove();
- writeNextMessageInQueue();
- }
-
- private void sendAcknowledgmentMessage() {
- writeValueAndNotify(BLEMessageV1Factory.makeAcknowledgementMessage().toByteArray());
- }
-
- /**
- * Convenience method to write the given message to the {@link #mWriteCharacteristic} of this
- * class. After writing, this method will also send notifications to any listening devices that
- * the write was made.
- */
- private void writeValueAndNotify(@NonNull byte[] message) {
- mWriteCharacteristic.setValue(message);
-
- mBlePeripheralManager.notifyCharacteristicChanged(mDevice, mWriteCharacteristic,
- /* confirm= */ false);
- }
-
- /**
- * A runnable that will write the message at the head of the {@link #mMessageQueue} and set up
- * a timeout for receiving an ACK for that write.
- *
- * <p>If the timeout is reached before an ACK is received, the message write is retried.
- */
- private final Runnable mSendMessageWithTimeoutRunnable = new Runnable() {
- @Override
- public void run() {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Sending BLE message; retry count: " + mRetryCount);
- }
-
- if (mRetryCount < BLE_MESSAGE_RETRY_LIMIT) {
- writeValueAndNotify(mMessageQueue.peek().toByteArray());
- mRetryCount++;
- mHandler.postDelayed(this, BLE_MESSAGE_RETRY_DELAY_MS);
- return;
- }
-
- mHandler.removeCallbacks(this);
- mRetryCount = 0;
- mMessageQueue.clear();
-
- Log.e(TAG, "Error during BLE message sending - exceeded retry limit.");
-
- for (BleMessageStreamCallback callback : mCallbacks) {
- callback.onWriteMessageError();
- }
- }
- };
-}
diff --git a/service/src/com/android/car/trust/BlePeripheralManager.java b/service/src/com/android/car/trust/BlePeripheralManager.java
deleted file mode 100644
index 17528f4..0000000
--- a/service/src/com/android/car/trust/BlePeripheralManager.java
+++ /dev/null
@@ -1,560 +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.car.trust;
-
-import static android.bluetooth.BluetoothProfile.GATT_SERVER;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothGatt;
-import android.bluetooth.BluetoothGattCallback;
-import android.bluetooth.BluetoothGattCharacteristic;
-import android.bluetooth.BluetoothGattDescriptor;
-import android.bluetooth.BluetoothGattServer;
-import android.bluetooth.BluetoothGattServerCallback;
-import android.bluetooth.BluetoothGattService;
-import android.bluetooth.BluetoothManager;
-import android.bluetooth.BluetoothProfile;
-import android.bluetooth.le.AdvertiseCallback;
-import android.bluetooth.le.AdvertiseData;
-import android.bluetooth.le.AdvertiseSettings;
-import android.bluetooth.le.BluetoothLeAdvertiser;
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.os.Handler;
-import android.util.Log;
-
-import com.android.car.Utils;
-
-import java.util.UUID;
-import java.util.concurrent.CopyOnWriteArrayList;
-
-/**
- * A generic class that manages BLE peripheral operations like start/stop advertising, notifying
- * connects/disconnects and reading/writing values to GATT characteristics.
- *
- * @deprecated Enrolling a trusted device through car service is no longer a supported feature and
- * these APIs will be removed in the next Android release.
- */
-@Deprecated
-public class BlePeripheralManager {
- private static final String TAG = BlePeripheralManager.class.getSimpleName();
-
- private static final int BLE_RETRY_LIMIT = 5;
- private static final int BLE_RETRY_INTERVAL_MS = 1000;
-
- private static final int GATT_SERVER_RETRY_LIMIT = 20;
- private static final int GATT_SERVER_RETRY_DELAY_MS = 200;
-
- // https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth
- // .service.generic_access.xml
- private static final UUID GENERIC_ACCESS_PROFILE_UUID =
- UUID.fromString("00001800-0000-1000-8000-00805f9b34fb");
- //https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth
- // .characteristic.gap.device_name.xml
- private static final UUID DEVICE_NAME_UUID =
- UUID.fromString("00002a00-0000-1000-8000-00805f9b34fb");
-
- private final Handler mHandler = new Handler();
-
- private final Context mContext;
- private final CopyOnWriteArrayList<Callback> mCallbacks = new CopyOnWriteArrayList<>();
- private final CopyOnWriteArrayList<OnCharacteristicWriteListener> mWriteListeners =
- new CopyOnWriteArrayList<>();
- private final CopyOnWriteArrayList<OnCharacteristicReadListener> mReadListeners =
- new CopyOnWriteArrayList<>();
-
- private int mMtuSize = 20;
-
- private BluetoothManager mBluetoothManager;
- private BluetoothLeAdvertiser mAdvertiser;
- private BluetoothGattServer mGattServer;
- private BluetoothGatt mBluetoothGatt;
- private int mAdvertiserStartCount;
- private int mGattServerRetryStartCount;
- private BluetoothGattService mBluetoothGattService;
- private AdvertiseCallback mAdvertiseCallback;
- private AdvertiseData mAdvertiseData;
-
-
- BlePeripheralManager(Context context) {
- mContext = context;
- }
-
- /**
- * Registers the given callback to be notified of various events within the
- * {@link BlePeripheralManager}.
- *
- * @param callback The callback to be notified.
- */
- void registerCallback(@NonNull Callback callback) {
- mCallbacks.add(callback);
- }
-
- /**
- * Unregisters a previously registered callback.
- *
- * @param callback The callback to unregister.
- */
- void unregisterCallback(@NonNull Callback callback) {
- mCallbacks.remove(callback);
- }
-
- /**
- * Adds a listener to be notified of a write to characteristics.
- *
- * @param listener The listener to notify.
- */
- void addOnCharacteristicWriteListener(@NonNull OnCharacteristicWriteListener listener) {
- mWriteListeners.add(listener);
- }
-
- /**
- * Removes the given listener from being notified of characteristic writes.
- *
- * @param listener The listener to remove.
- */
- void removeOnCharacteristicWriteListener(@NonNull OnCharacteristicWriteListener listener) {
- mWriteListeners.remove(listener);
- }
-
- /**
- * Adds a listener to be notified of reads to characteristics.
- *
- * @param listener The listener to notify.
- */
- void addOnCharacteristicReadListener(@NonNull OnCharacteristicReadListener listener) {
- mReadListeners.add(listener);
- }
-
- /**
- * Removes the given listener from being notified of characteristic reads.
- *
- * @param listener The listener to remove.
- */
- void removeOnCharacteristicReadistener(@NonNull OnCharacteristicReadListener listener) {
- mReadListeners.remove(listener);
- }
-
- /**
- * Returns the current MTU size.
- *
- * @return The size of the MTU in bytes.
- */
- int getMtuSize() {
- return mMtuSize;
- }
-
- /**
- * Starts the GATT server with the given {@link BluetoothGattService} and begins
- * advertising.
- *
- * <p>It is possible that BLE service is still in TURNING_ON state when this method is invoked.
- * Therefore, several retries will be made to ensure advertising is started.
- *
- * @param service {@link BluetoothGattService} that will be discovered by clients
- * @param data {@link AdvertiseData} data to advertise
- * @param advertiseCallback {@link AdvertiseCallback} callback for advertiser
- */
- void startAdvertising(BluetoothGattService service, AdvertiseData data,
- AdvertiseCallback advertiseCallback) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "startAdvertising: " + service.getUuid().toString());
- }
- if (!mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_BLUETOOTH_LE)) {
- Log.e(TAG, "Attempted start advertising, but system does not support BLE. "
- + "Ignoring");
- return;
- }
-
- mBluetoothGattService = service;
- mAdvertiseCallback = advertiseCallback;
- mAdvertiseData = data;
- mGattServerRetryStartCount = 0;
- mBluetoothManager = (BluetoothManager) mContext.getSystemService(
- Context.BLUETOOTH_SERVICE);
- openGattServer();
- }
-
- /**
- * Stops the GATT server from advertising.
- *
- * @param advertiseCallback The callback that is associated with the advertisement.
- */
- void stopAdvertising(AdvertiseCallback advertiseCallback) {
- if (mAdvertiser != null) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "stopAdvertising: ");
- }
- mAdvertiser.stopAdvertising(advertiseCallback);
- }
- }
-
- /**
- * Notifies the characteristic change via {@link BluetoothGattServer}
- */
- void notifyCharacteristicChanged(@NonNull BluetoothDevice device,
- @NonNull BluetoothGattCharacteristic characteristic, boolean confirm) {
- if (mGattServer == null) {
- return;
- }
-
- boolean result = mGattServer.notifyCharacteristicChanged(device, characteristic, confirm);
-
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "notifyCharacteristicChanged succeeded: " + result);
- }
- }
-
- /**
- * Connect the Gatt server of the remote device to retrieve device name.
- */
- final void retrieveDeviceName(BluetoothDevice device) {
- mBluetoothGatt = device.connectGatt(mContext, false, mGattCallback);
- }
-
- /**
- * Returns the currently opened GATT server within this manager.
- *
- * @return An opened GATT server or {@code null} if none have been opened.
- */
- @Nullable
- BluetoothGattServer getGattServer() {
- return mGattServer;
- }
-
- /**
- * Cleans up the BLE GATT server state.
- */
- void cleanup() {
- // Stops the advertiser, scanner and GATT server. This needs to be done to avoid leaks.
- if (mAdvertiser != null) {
- mAdvertiser.cleanup();
- }
-
- if (mGattServer != null) {
- mGattServer.clearServices();
- try {
- for (BluetoothDevice d : mBluetoothManager.getConnectedDevices(GATT_SERVER)) {
- mGattServer.cancelConnection(d);
- }
- } catch (UnsupportedOperationException e) {
- Log.e(TAG, "Error getting connected devices", e);
- } finally {
- stopGattServer();
- }
- }
- }
-
- /**
- * Close the GATT Server
- */
- void stopGattServer() {
- if (mGattServer == null) {
- return;
- }
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "stopGattServer");
- }
- if (mBluetoothGatt != null) {
- mBluetoothGatt.disconnect();
- }
- mGattServer.close();
- mGattServer = null;
- }
-
- private void openGattServer() {
- // Only open one Gatt server.
- if (mGattServer != null) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Gatt Server created, retry count: " + mGattServerRetryStartCount);
- }
- mGattServer.clearServices();
- mGattServer.addService(mBluetoothGattService);
- AdvertiseSettings settings = new AdvertiseSettings.Builder()
- .setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY)
- .setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH)
- .setConnectable(true)
- .build();
- mAdvertiserStartCount = 0;
- startAdvertisingInternally(settings, mAdvertiseData, mAdvertiseCallback);
- mGattServerRetryStartCount = 0;
- } else if (mGattServerRetryStartCount < GATT_SERVER_RETRY_LIMIT) {
- mGattServer = mBluetoothManager.openGattServer(mContext, mGattServerCallback);
- mGattServerRetryStartCount++;
- mHandler.postDelayed(() -> openGattServer(), GATT_SERVER_RETRY_DELAY_MS);
- } else {
- Log.e(TAG, "Gatt server not created - exceeded retry limit.");
- }
- }
-
- private void startAdvertisingInternally(AdvertiseSettings settings, AdvertiseData data,
- AdvertiseCallback advertiseCallback) {
- if (BluetoothAdapter.getDefaultAdapter() != null) {
- mAdvertiser = BluetoothAdapter.getDefaultAdapter().getBluetoothLeAdvertiser();
- }
-
- if (mAdvertiser != null) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Advertiser created, retry count: " + mAdvertiserStartCount);
- }
- mAdvertiser.startAdvertising(settings, data, advertiseCallback);
- mAdvertiserStartCount = 0;
- } else if (mAdvertiserStartCount < BLE_RETRY_LIMIT) {
- mHandler.postDelayed(
- () -> startAdvertisingInternally(settings, data, advertiseCallback),
- BLE_RETRY_INTERVAL_MS);
- mAdvertiserStartCount += 1;
- } else {
- Log.e(TAG, "Cannot start BLE Advertisement. BT Adapter: "
- + BluetoothAdapter.getDefaultAdapter() + " Advertise Retry count: "
- + mAdvertiserStartCount);
- }
- }
-
- private final BluetoothGattServerCallback mGattServerCallback =
- new BluetoothGattServerCallback() {
- @Override
- public void onConnectionStateChange(BluetoothDevice device, int status,
- int newState) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "BLE Connection State Change: " + newState);
- }
- switch (newState) {
- case BluetoothProfile.STATE_CONNECTED:
- for (Callback callback : mCallbacks) {
- callback.onRemoteDeviceConnected(device);
- }
- break;
- case BluetoothProfile.STATE_DISCONNECTED:
- for (Callback callback : mCallbacks) {
- callback.onRemoteDeviceDisconnected(device);
- }
- break;
- default:
- Log.w(TAG,
- "Connection state not connecting or disconnecting; ignoring: "
- + newState);
- }
- }
-
- @Override
- public void onServiceAdded(int status, BluetoothGattService service) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG,
- "Service added status: " + status + " uuid: " + service.getUuid());
- }
- }
-
- @Override
- public void onCharacteristicReadRequest(BluetoothDevice device, int requestId,
- int offset, BluetoothGattCharacteristic characteristic) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Read request for characteristic: " + characteristic.getUuid());
- }
-
- boolean isSuccessful = mGattServer.sendResponse(device, requestId,
- BluetoothGatt.GATT_SUCCESS, offset, characteristic.getValue());
-
- if (isSuccessful) {
- for (OnCharacteristicReadListener listener : mReadListeners) {
- listener.onCharacteristicRead(device, characteristic);
- }
- } else {
- stopGattServer();
- for (Callback callback : mCallbacks) {
- callback.onRemoteDeviceDisconnected(device);
- }
- }
- }
-
- @Override
- public void onCharacteristicWriteRequest(BluetoothDevice device, int requestId,
- BluetoothGattCharacteristic characteristic, boolean preparedWrite,
- boolean responseNeeded, int offset, byte[] value) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Write request for characteristic: " + characteristic.getUuid()
- + "value: " + Utils.byteArrayToHexString(value));
- }
-
- mGattServer.sendResponse(device, requestId, BluetoothGatt.GATT_SUCCESS,
- offset, value);
-
- for (OnCharacteristicWriteListener listener : mWriteListeners) {
- listener.onCharacteristicWrite(device, characteristic, value);
- }
- }
-
- @Override
- public void onDescriptorWriteRequest(BluetoothDevice device, int requestId,
- BluetoothGattDescriptor descriptor, boolean preparedWrite,
- boolean responseNeeded, int offset, byte[] value) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Write request for descriptor: " + descriptor.getUuid()
- + "; value: " + Utils.byteArrayToHexString(value));
- }
-
- mGattServer.sendResponse(device, requestId, BluetoothGatt.GATT_SUCCESS,
- offset, value);
- }
-
- @Override
- public void onMtuChanged(BluetoothDevice device, int mtu) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "onMtuChanged: " + mtu + " for device " + device.getAddress());
- }
-
- mMtuSize = mtu;
-
- for (Callback callback : mCallbacks) {
- callback.onMtuSizeChanged(mtu);
- }
- }
-
- };
-
- private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {
- @Override
- public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Gatt Connection State Change: " + newState);
- }
- switch (newState) {
- case BluetoothProfile.STATE_CONNECTED:
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Gatt connected");
- }
- mBluetoothGatt.discoverServices();
- break;
- case BluetoothProfile.STATE_DISCONNECTED:
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Gatt Disconnected");
- }
- break;
- default:
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG,
- "Connection state not connecting or disconnecting; ignoring: "
- + newState);
- }
- }
- }
-
- @Override
- public void onServicesDiscovered(BluetoothGatt gatt, int status) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Gatt Services Discovered");
- }
- BluetoothGattService gapService = mBluetoothGatt.getService(
- GENERIC_ACCESS_PROFILE_UUID);
- if (gapService == null) {
- Log.e(TAG, "Generic Access Service is Null");
- return;
- }
- BluetoothGattCharacteristic deviceNameCharacteristic = gapService.getCharacteristic(
- DEVICE_NAME_UUID);
- if (deviceNameCharacteristic == null) {
- Log.e(TAG, "Device Name Characteristic is Null");
- return;
- }
- mBluetoothGatt.readCharacteristic(deviceNameCharacteristic);
- }
-
- @Override
- public void onCharacteristicRead(BluetoothGatt gatt,
- BluetoothGattCharacteristic characteristic, int status) {
- if (status == BluetoothGatt.GATT_SUCCESS) {
- String deviceName = characteristic.getStringValue(0);
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "BLE Device Name: " + deviceName);
- }
-
- for (Callback callback : mCallbacks) {
- callback.onDeviceNameRetrieved(deviceName);
- }
- } else {
- Log.e(TAG, "Reading GAP Failed: " + status);
- }
- }
- };
-
- /**
- * Interface to be notified of various events within the {@link BlePeripheralManager}.
- */
- interface Callback {
- /**
- * Triggered when the name of the remote device is retrieved.
- *
- * @param deviceName Name of the remote device.
- */
- void onDeviceNameRetrieved(@Nullable String deviceName);
-
- /**
- * Triggered if a remote client has requested to change the MTU for a given connection.
- *
- * @param size The new MTU size.
- */
- void onMtuSizeChanged(int size);
-
- /**
- * Triggered when a device (GATT client) connected.
- *
- * @param device Remote device that connected on BLE.
- */
- void onRemoteDeviceConnected(@NonNull BluetoothDevice device);
-
- /**
- * Triggered when a device (GATT client) disconnected.
- *
- * @param device Remote device that disconnected on BLE.
- */
- void onRemoteDeviceDisconnected(@NonNull BluetoothDevice device);
- }
-
- /**
- * An interface for classes that wish to be notified of writes to a characteristic.
- */
- interface OnCharacteristicWriteListener {
- /**
- * Triggered when this BlePeripheralManager receives a write request from a remote device.
- *
- * @param device The bluetooth device that holds the characteristic.
- * @param characteristic The characteristic that was written to.
- * @param value The value that was written.
- */
- void onCharacteristicWrite(
- @NonNull BluetoothDevice device,
- @NonNull BluetoothGattCharacteristic characteristic,
- @NonNull byte[] value);
- }
-
- /**
- * An interface for classes that wish to be notified of reads on a characteristic.
- */
- interface OnCharacteristicReadListener {
- /**
- * Triggered when this BlePeripheralManager receives a read request from a remote device.
- *
- * @param device The bluetooth device that holds the characteristic.
- * @param characteristic The characteristic that was read from.
- */
- void onCharacteristicRead(
- @NonNull BluetoothDevice device,
- @NonNull BluetoothGattCharacteristic characteristic);
- }
-}
diff --git a/service/src/com/android/car/trust/CarBleTrustAgent.java b/service/src/com/android/car/trust/CarBleTrustAgent.java
deleted file mode 100644
index 7489b13..0000000
--- a/service/src/com/android/car/trust/CarBleTrustAgent.java
+++ /dev/null
@@ -1,339 +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.car.trust;
-
-import static com.android.car.trust.EventLog.BLUETOOTH_STATE_CHANGED;
-import static com.android.car.trust.EventLog.USER_UNLOCKED;
-import static com.android.car.trust.EventLog.logUnlockEvent;
-
-import android.app.ActivityManager;
-import android.bluetooth.BluetoothAdapter;
-import android.car.trust.TrustedDeviceInfo;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.service.trust.TrustAgentService;
-import android.util.Log;
-
-import com.android.car.CarLocalServices;
-import com.android.car.Utils;
-import com.android.car.trust.CarTrustAgentEnrollmentService.CarTrustAgentEnrollmentRequestDelegate;
-import com.android.car.trust.CarTrustAgentUnlockService.CarTrustAgentUnlockDelegate;
-
-import java.util.List;
-
-/**
- * A BluetoothLE (BLE) based {@link TrustAgentService} that uses the escrow token unlock APIs.
- * <p>
- * This trust agent runs during direct boot and interacts with {@link CarTrustedDeviceService}
- * to listen for remote devices to trigger an unlock.
- * <p>
- * The system {@link com.android.server.trust.TrustManagerService} binds to this agent and uses
- * the data it receives from this agent to authorize a user in lieu of the PIN/Pattern/Password
- * credentials.
- *
- * @deprecated Enrolling a trusted device through car service is no longer supported and these APIs
- * will be removed in the next Android release.
- */
-@Deprecated
-public class CarBleTrustAgent extends TrustAgentService {
- private static final String TAG = CarBleTrustAgent.class.getSimpleName();
- private boolean mIsDeviceLocked;
- private CarTrustedDeviceService mCarTrustedDeviceService;
- private CarTrustAgentEnrollmentService mCarTrustAgentEnrollmentService;
- private CarTrustAgentUnlockService mCarTrustAgentUnlockService;
-
- @Override
- public void onCreate() {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "onCreate()");
- }
- super.onCreate();
- // Registering for more granular BLE specific state changes as against Bluetooth state
- // changes, helps with reducing latency in getting notified.
- IntentFilter intentFilter = new IntentFilter(BluetoothAdapter.ACTION_BLE_STATE_CHANGED);
- registerReceiver(mBluetoothBroadcastReceiver, intentFilter);
-
- // TODO(b/129144535) handle scenarios where CarService crashed. Maybe retrieve this
- // every time we need instead of caching.
- mCarTrustedDeviceService = CarLocalServices.getService(CarTrustedDeviceService.class);
- if (mCarTrustedDeviceService == null) {
- Log.e(TAG, "Cannot retrieve the Trusted device Service");
- return;
- }
- mCarTrustAgentEnrollmentService =
- mCarTrustedDeviceService.getCarTrustAgentEnrollmentService();
- setEnrollmentRequestDelegate();
- mCarTrustAgentUnlockService = mCarTrustedDeviceService.getCarTrustAgentUnlockService();
- setUnlockRequestDelegate();
- setManagingTrust(true);
- }
-
- @Override
- public void onDestroy() {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Car Trust agent shutting down");
- }
- super.onDestroy();
- mCarTrustAgentEnrollmentService = null;
- if (mBluetoothBroadcastReceiver != null) {
- unregisterReceiver(mBluetoothBroadcastReceiver);
- }
- }
-
- // Overriding TrustAgentService methods
- @Override
- public void onDeviceLocked() {
- int uid = ActivityManager.getCurrentUser();
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "onDeviceLocked Current user: " + uid);
- }
- super.onDeviceLocked();
- mIsDeviceLocked = true;
-
- if (!hasTrustedDevice(uid)) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Not starting Unlock Advertising yet, since current user: "
- + uid + "has no trusted device");
- }
- return;
- }
- if (isBluetoothAvailable() && mCarTrustAgentUnlockService != null) {
- mCarTrustAgentUnlockService.startUnlockAdvertising();
- }
- }
-
- @Override
- public void onDeviceUnlocked() {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "onDeviceUnlocked Current user: " + ActivityManager.getCurrentUser());
- }
- super.onDeviceUnlocked();
- mIsDeviceLocked = false;
-
- if (isBluetoothAvailable() && mCarTrustAgentUnlockService != null) {
- mCarTrustAgentUnlockService.stopUnlockAdvertising();
- }
- }
-
- private boolean isBluetoothAvailable() {
- BluetoothAdapter defaultAdapter = BluetoothAdapter.getDefaultAdapter();
- if (defaultAdapter == null) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Bluetooth Adapter null.");
- }
- return false;
- }
- if (defaultAdapter.getState() == BluetoothAdapter.STATE_OFF) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Bluetooth Adapter is off");
- }
- return false;
- }
- return true;
- }
-
- @Override
- public void onEscrowTokenRemoved(long handle, boolean successful) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "onEscrowTokenRemoved handle: " + Long.toHexString(handle));
- }
- if (mCarTrustAgentEnrollmentService == null) {
- return;
- }
- if (successful) {
- mCarTrustAgentEnrollmentService.onEscrowTokenRemoved(handle,
- ActivityManager.getCurrentUser());
- }
- }
-
- @Override
- public void onEscrowTokenStateReceived(long handle, int tokenState) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "onEscrowTokenStateReceived: " + Long.toHexString(handle) + " state: "
- + tokenState);
- }
- if (mCarTrustAgentEnrollmentService == null) {
- return;
- }
- mCarTrustAgentEnrollmentService.onEscrowTokenActiveStateChanged(handle,
- tokenState == TOKEN_STATE_ACTIVE, ActivityManager.getCurrentUser());
- }
-
- @Override
- public void onEscrowTokenAdded(byte[] token, long handle, UserHandle user) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "onEscrowTokenAdded handle: " + Long.toHexString(handle) + " token: "
- + Utils.byteArrayToHexString(token));
- }
- if (mCarTrustAgentEnrollmentService == null) {
- return;
- }
- mCarTrustAgentEnrollmentService.onEscrowTokenAdded(token, handle, user.getIdentifier());
- }
-
- private void setEnrollmentRequestDelegate() {
- if (mCarTrustAgentEnrollmentService == null) {
- return;
- }
- mCarTrustAgentEnrollmentService.setEnrollmentRequestDelegate(mEnrollDelegate);
- }
-
- private void setUnlockRequestDelegate() {
- if (mCarTrustAgentUnlockService == null) {
- return;
- }
- mCarTrustAgentUnlockService.setUnlockRequestDelegate(mUnlockDelegate);
- }
-
- /**
- *
- * @param uid User id
- * @return if the user has trusted device
- */
- private boolean hasTrustedDevice(int uid) {
- if (mCarTrustAgentEnrollmentService == null) {
- return false;
- }
- List<TrustedDeviceInfo> trustedDeviceInfos = mCarTrustAgentEnrollmentService
- .getEnrolledDeviceInfosForUser(uid);
- return trustedDeviceInfos != null && trustedDeviceInfos.size() > 0;
- }
-
- private void unlockUserInternally(int uid, byte[] token, long handle) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "About to unlock user: " + uid);
- UserManager um = (UserManager) getSystemService(Context.USER_SERVICE);
- if (um.isUserUnlocked(UserHandle.of(uid))) {
- Log.d(TAG, "User currently unlocked");
- } else {
- Log.d(TAG, "User currently locked");
- }
- }
- unlockUserWithToken(handle, token, UserHandle.of(uid));
- grantTrust("Granting trust from escrow token",
- 0, FLAG_GRANT_TRUST_DISMISS_KEYGUARD);
- }
-
- private final BroadcastReceiver mBluetoothBroadcastReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (intent.getAction() != null && BluetoothAdapter.ACTION_BLE_STATE_CHANGED.equals(
- intent.getAction())) {
- onBluetoothStateChanged(intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1));
- }
- }
- };
-
- private void onBluetoothStateChanged(int state) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "onBluetoothStateChanged: " + BluetoothAdapter.nameForState(state));
- }
- if (!mIsDeviceLocked) {
- return;
- }
- logUnlockEvent(BLUETOOTH_STATE_CHANGED, state);
- switch (state) {
- case BluetoothAdapter.STATE_BLE_ON:
- int uid = ActivityManager.getCurrentUser();
- if (mCarTrustAgentUnlockService != null && hasTrustedDevice(uid)) {
- mCarTrustAgentUnlockService.startUnlockAdvertising();
- }
- break;
- case BluetoothAdapter.STATE_OFF:
- Log.e(TAG, "Bluetooth Adapter Off in lock screen");
- if (mCarTrustedDeviceService != null) {
- mCarTrustedDeviceService.cleanupBleService();
- }
- break;
- default:
- break;
- }
- }
-
- // Implementing Delegates for Enrollment and Unlock. The CarBleTrustAgent acts as the interface
- // between the Trust Agent framework and the Car Service. The Car service handles communicating
- // with the peer device part and the framework handles the actual authentication. The
- // CarBleTrustAgent abstracts these 2 pieces from each other.
- /**
- * Implementation of the {@link CarTrustAgentEnrollmentRequestDelegate}
- */
- private final CarTrustAgentEnrollmentRequestDelegate mEnrollDelegate =
- new CarTrustAgentEnrollmentRequestDelegate() {
- @Override
- public void addEscrowToken(byte[] token, int uid) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG,
- "addEscrowToken. uid: " + uid + " token: "
- + Utils.byteArrayToHexString(
- token));
- }
- CarBleTrustAgent.this.addEscrowToken(token, UserHandle.of(uid));
- }
-
- @Override
- public void removeEscrowToken(long handle, int uid) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG,
- "removeEscrowToken. uid: " + ActivityManager.getCurrentUser()
- + " handle: " + handle);
- }
- CarBleTrustAgent.this.removeEscrowToken(handle,
- UserHandle.of(uid));
- }
-
- @Override
- public void isEscrowTokenActive(long handle, int uid) {
- CarBleTrustAgent.this.isEscrowTokenActive(handle, UserHandle.of(uid));
- }
- };
-
- /**
- * Implementation of the {@link CarTrustAgentUnlockDelegate}
- */
- private final CarTrustAgentUnlockDelegate mUnlockDelegate = new CarTrustAgentUnlockDelegate() {
- /**
- * Pass the user and token credentials to authenticate with the LockSettingsService.
- *
- * @param user user being authorized
- * @param token escrow token for the user
- * @param handle the handle corresponding to the escrow token
- */
- @Override
- public void onUnlockDataReceived(int user, byte[] token, long handle) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "onUnlockDataReceived:" + user + " token: " + Long.toHexString(
- Utils.bytesToLong(token)) + " handle: " + Long.toHexString(handle));
- }
- if (ActivityManager.getCurrentUser() != user) {
- // Current behavior is to only authenticate the user we have booted into.
- // TODO(b/129029418) Make identification & Auth vs Auth-only a
- // configurable option
- Log.e(TAG, "Expected User: " + ActivityManager.getCurrentUser()
- + " Presented User: " + user);
- return;
- } else {
- unlockUserInternally(user, token, handle);
- logUnlockEvent(USER_UNLOCKED);
- }
-
- }
- };
-}
diff --git a/service/src/com/android/car/trust/CarCompanionDeviceStorage.java b/service/src/com/android/car/trust/CarCompanionDeviceStorage.java
deleted file mode 100644
index 47edebb..0000000
--- a/service/src/com/android/car/trust/CarCompanionDeviceStorage.java
+++ /dev/null
@@ -1,296 +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.car.trust;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.security.keystore.KeyGenParameterSpec;
-import android.security.keystore.KeyProperties;
-import android.util.Base64;
-import android.util.Log;
-
-import com.android.car.R;
-
-import java.io.IOException;
-import java.security.InvalidAlgorithmParameterException;
-import java.security.InvalidKeyException;
-import java.security.Key;
-import java.security.KeyStore;
-import java.security.KeyStoreException;
-import java.security.NoSuchAlgorithmException;
-import java.security.NoSuchProviderException;
-import java.security.UnrecoverableKeyException;
-import java.security.cert.CertificateException;
-import java.util.UUID;
-
-import javax.crypto.BadPaddingException;
-import javax.crypto.Cipher;
-import javax.crypto.IllegalBlockSizeException;
-import javax.crypto.KeyGenerator;
-import javax.crypto.NoSuchPaddingException;
-import javax.crypto.spec.GCMParameterSpec;
-
-/**
- * Storage for Trusted Devices in a car.
- */
-class CarCompanionDeviceStorage {
- private static final String TAG = CarCompanionDeviceStorage.class.getSimpleName();
-
- private static final String UNIQUE_ID_KEY = "CTABM_unique_id";
- private static final String PREF_ENCRYPTION_KEY_PREFIX = "CTABM_encryption_key";
- private static final String KEY_ALIAS = "Ukey2Key";
- private static final String CIPHER_TRANSFORMATION = "AES/GCM/NoPadding";
- private static final String KEYSTORE_PROVIDER = "AndroidKeyStore";
- private static final String IV_SPEC_SEPARATOR = ";";
-
- // The length of the authentication tag for a cipher in GCM mode. The GCM specification states
- // that this length can only have the values {128, 120, 112, 104, 96}. Using the highest
- // possible value.
- private static final int GCM_AUTHENTICATION_TAG_LENGTH = 128;
-
- private Context mContext;
- private SharedPreferences mSharedPreferences;
- private UUID mUniqueId;
-
- CarCompanionDeviceStorage(@NonNull Context context) {
- mContext = context;
- }
-
- /** Return the car TrustedAgent {@link SharedPreferences}. */
- @NonNull
- SharedPreferences getSharedPrefs() {
- // This should be called only after user 0 is unlocked.
- if (mSharedPreferences != null) {
- return mSharedPreferences;
- }
- mSharedPreferences = mContext.getSharedPreferences(
- mContext.getString(R.string.token_handle_shared_preferences), Context.MODE_PRIVATE);
- return mSharedPreferences;
- }
-
- /**
- * Returns User Id for the given token handle
- *
- * @param handle The handle corresponding to the escrow token
- * @return User id corresponding to the handle
- */
- int getUserHandleByTokenHandle(long handle) {
- return getSharedPrefs().getInt(String.valueOf(handle), -1);
- }
-
- /**
- * Get communication encryption key for the given device
- *
- * @param deviceId id of trusted device
- * @return encryption key, null if device id is not recognized
- */
- @Nullable
- byte[] getEncryptionKey(@NonNull String deviceId) {
- SharedPreferences prefs = getSharedPrefs();
- String key = createSharedPrefKey(deviceId);
- if (!prefs.contains(key)) {
- return null;
- }
-
- // This value will not be "null" because we already checked via a call to contains().
- String[] values = prefs.getString(key, null).split(IV_SPEC_SEPARATOR);
-
- if (values.length != 2) {
- return null;
- }
-
- byte[] encryptedKey = Base64.decode(values[0], Base64.DEFAULT);
- byte[] ivSpec = Base64.decode(values[1], Base64.DEFAULT);
- return decryptWithKeyStore(KEY_ALIAS, encryptedKey, ivSpec);
- }
-
- /**
- * Save encryption key for the given device
- *
- * @param deviceId did of trusted device
- * @param encryptionKey encryption key
- * @return {@code true} if the operation succeeded
- */
- boolean saveEncryptionKey(@NonNull String deviceId, @NonNull byte[] encryptionKey) {
- String encryptedKey = encryptWithKeyStore(KEY_ALIAS, encryptionKey);
- if (encryptedKey == null) {
- return false;
- }
- if (getSharedPrefs().contains(createSharedPrefKey(deviceId))) {
- clearEncryptionKey(deviceId);
- }
-
- return getSharedPrefs()
- .edit()
- .putString(createSharedPrefKey(deviceId), encryptedKey)
- .commit();
- }
-
- /**
- * Clear the encryption key for the given device
- *
- * @param deviceId id of the peer device
- */
- void clearEncryptionKey(@Nullable String deviceId) {
- if (deviceId == null) {
- return;
- }
- getSharedPrefs()
- .edit()
- .remove(createSharedPrefKey(deviceId))
- .commit();
- }
-
- /**
- * Encrypt value with designated key
- *
- * <p>The encrypted value is of the form:
- *
- * <p>key + IV_SPEC_SEPARATOR + ivSpec
- *
- * <p>The {@code ivSpec} is needed to decrypt this key later on.
- *
- * @param keyAlias KeyStore alias for key to use
- * @param value a value to encrypt
- * @return encrypted value, null if unable to encrypt
- */
- @Nullable
- String encryptWithKeyStore(@NonNull String keyAlias, @Nullable byte[] value) {
- if (value == null) {
- return null;
- }
-
- Key key = getKeyStoreKey(keyAlias);
- try {
- Cipher cipher = Cipher.getInstance(CIPHER_TRANSFORMATION);
- cipher.init(Cipher.ENCRYPT_MODE, key);
- return new StringBuffer(Base64.encodeToString(cipher.doFinal(value), Base64.DEFAULT))
- .append(IV_SPEC_SEPARATOR)
- .append(Base64.encodeToString(cipher.getIV(), Base64.DEFAULT))
- .toString();
- } catch (IllegalBlockSizeException
- | BadPaddingException
- | NoSuchAlgorithmException
- | NoSuchPaddingException
- | IllegalStateException
- | InvalidKeyException e) {
- Log.e(TAG, "Unable to encrypt value with key " + keyAlias, e);
- return null;
- }
- }
-
- /**
- * Decrypt value with designated key
- *
- * @param keyAlias KeyStore alias for key to use
- * @param value encrypted value
- * @return decrypted value, null if unable to decrypt
- */
- @Nullable
- byte[] decryptWithKeyStore(@NonNull String keyAlias, @Nullable byte[] value,
- @NonNull byte[] ivSpec) {
- if (value == null) {
- return null;
- }
-
- try {
- Key key = getKeyStoreKey(keyAlias);
- Cipher cipher = Cipher.getInstance(CIPHER_TRANSFORMATION);
- cipher.init(Cipher.DECRYPT_MODE, key,
- new GCMParameterSpec(GCM_AUTHENTICATION_TAG_LENGTH, ivSpec));
- return cipher.doFinal(value);
- } catch (IllegalBlockSizeException
- | BadPaddingException
- | NoSuchAlgorithmException
- | NoSuchPaddingException
- | IllegalStateException
- | InvalidKeyException
- | InvalidAlgorithmParameterException e) {
- Log.e(TAG, "Unable to decrypt value with key " + keyAlias, e);
- return null;
- }
- }
-
- private Key getKeyStoreKey(@NonNull String keyAlias) {
- KeyStore keyStore;
- try {
- keyStore = KeyStore.getInstance(KEYSTORE_PROVIDER);
- keyStore.load(null);
- if (!keyStore.containsAlias(keyAlias)) {
- KeyGenerator keyGenerator = KeyGenerator.getInstance(
- KeyProperties.KEY_ALGORITHM_AES, KEYSTORE_PROVIDER);
- keyGenerator.init(
- new KeyGenParameterSpec.Builder(keyAlias,
- KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
- .setBlockModes(KeyProperties.BLOCK_MODE_GCM)
- .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
- .build());
- keyGenerator.generateKey();
- }
- return keyStore.getKey(keyAlias, null);
-
- } catch (KeyStoreException
- | NoSuchAlgorithmException
- | UnrecoverableKeyException
- | NoSuchProviderException
- | CertificateException
- | IOException
- | InvalidAlgorithmParameterException e) {
- Log.e(TAG, "Unable to retrieve key " + keyAlias + " from KeyStore.", e);
- throw new IllegalStateException(e);
- }
- }
-
- /**
- * Get the unique id for head unit. Persists on device until factory reset.
- * This should be called only after user 0 is unlocked.
- *
- * @return unique id, or null if unable to retrieve generated id (this should never happen)
- */
- @Nullable
- UUID getUniqueId() {
- if (mUniqueId != null) {
- return mUniqueId;
- }
-
- SharedPreferences prefs = getSharedPrefs();
- if (prefs.contains(UNIQUE_ID_KEY)) {
- mUniqueId = UUID.fromString(
- prefs.getString(UNIQUE_ID_KEY, null));
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Found existing trusted unique id: "
- + prefs.getString(UNIQUE_ID_KEY, ""));
- }
- } else {
- mUniqueId = UUID.randomUUID();
- if (!prefs.edit().putString(UNIQUE_ID_KEY, mUniqueId.toString()).commit()) {
- mUniqueId = null;
- } else if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Generated new trusted unique id: "
- + prefs.getString(UNIQUE_ID_KEY, ""));
- }
- }
-
- return mUniqueId;
- }
-
- private String createSharedPrefKey(@NonNull String deviceId) {
- return PREF_ENCRYPTION_KEY_PREFIX + deviceId;
- }
-}
diff --git a/service/src/com/android/car/trust/CarTrustAgentBleManager.java b/service/src/com/android/car/trust/CarTrustAgentBleManager.java
deleted file mode 100644
index b1fedd0..0000000
--- a/service/src/com/android/car/trust/CarTrustAgentBleManager.java
+++ /dev/null
@@ -1,654 +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.car.trust;
-
-import android.annotation.IntDef;
-import android.annotation.Nullable;
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothGattCharacteristic;
-import android.bluetooth.BluetoothGattDescriptor;
-import android.bluetooth.BluetoothGattService;
-import android.bluetooth.le.AdvertiseCallback;
-import android.bluetooth.le.AdvertiseData;
-import android.bluetooth.le.AdvertiseSettings;
-import android.content.Context;
-import android.os.Handler;
-import android.os.ParcelUuid;
-import android.util.Log;
-
-import androidx.collection.SimpleArrayMap;
-
-import com.android.car.BLEStreamProtos.BLEOperationProto.OperationType;
-import com.android.car.BLEStreamProtos.VersionExchangeProto.BLEVersionExchange;
-import com.android.car.R;
-import com.android.car.Utils;
-import com.android.car.protobuf.InvalidProtocolBufferException;
-import com.android.internal.annotations.VisibleForTesting;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.UUID;
-import java.util.concurrent.TimeUnit;
-
-/**
- * A BLE Service that is used for communicating with the trusted peer device. This extends from a
- * more generic {@link BlePeripheralManager} and has more context on the BLE requirements for the
- * Trusted device feature. It has knowledge on the GATT services and characteristics that are
- * specific to the Trusted Device feature.
- */
-class CarTrustAgentBleManager implements BleMessageStreamCallback, BlePeripheralManager.Callback,
- BlePeripheralManager.OnCharacteristicWriteListener {
- private static final String TAG = "CarTrustBLEManager";
-
- /**
- * The UUID of the Client Characteristic Configuration Descriptor. This descriptor is
- * responsible for specifying if a characteristic can be subscribed to for notifications.
- *
- * @see <a href="https://www.bluetooth.com/specifications/gatt/descriptors/">
- * GATT Descriptors</a>
- */
- private static final UUID CLIENT_CHARACTERISTIC_CONFIG =
- UUID.fromString("00002902-0000-1000-8000-00805f9b34fb");
-
- /**
- * Reserved bytes for an ATT write request payload.
- *
- * <p>The attribute protocol uses 3 bytes to encode the command type and attribute ID. These
- * bytes need to be subtracted from the reported MTU size and the resulting value will
- * represent the total amount of bytes that can be sent in a write.
- */
- private static final int ATT_PAYLOAD_RESERVED_BYTES = 3;
-
- /** @hide */
- @IntDef(prefix = {"TRUSTED_DEVICE_OPERATION_"}, value = {
- TRUSTED_DEVICE_OPERATION_NONE,
- TRUSTED_DEVICE_OPERATION_ENROLLMENT,
- TRUSTED_DEVICE_OPERATION_UNLOCK
- })
- @Retention(RetentionPolicy.SOURCE)
- public @interface TrustedDeviceOperation {
- }
-
- private static final int TRUSTED_DEVICE_OPERATION_NONE = 0;
- private static final int TRUSTED_DEVICE_OPERATION_ENROLLMENT = 1;
- private static final int TRUSTED_DEVICE_OPERATION_UNLOCK = 2;
- @VisibleForTesting
- static final long BLE_MESSAGE_RETRY_DELAY_MS = TimeUnit.SECONDS.toMillis(2);
-
- private final Context mContext;
- private final BlePeripheralManager mBlePeripheralManager;
-
- @TrustedDeviceOperation
- private int mCurrentTrustedDeviceOperation = TRUSTED_DEVICE_OPERATION_NONE;
- private String mOriginalBluetoothName;
- private byte[] mUniqueId;
-
- /**
- * The maximum amount of bytes that can be written over BLE.
- *
- * <p>This initial value is 20 because BLE has a default write of 23 bytes. However, 3 bytes
- * are subtracted due to bytes being reserved for the command type and attribute ID.
- *
- * @see #ATT_PAYLOAD_RESERVED_BYTES
- */
- private int mMaxWriteSize = 20;
-
- @VisibleForTesting
- int mBleMessageRetryLimit = 20;
-
- private final List<BleEventCallback> mBleEventCallbacks = new ArrayList<>();
- private AdvertiseCallback mEnrollmentAdvertisingCallback;
- private SendMessageCallback mSendMessageCallback;
-
- // Enrollment Service and Characteristic UUIDs
- private UUID mEnrollmentServiceUuid;
- private UUID mEnrollmentClientWriteUuid;
- private UUID mEnrollmentServerWriteUuid;
- private BluetoothGattService mEnrollmentGattService;
-
- // Unlock Service and Characteristic UUIDs
- private UUID mUnlockServiceUuid;
- private UUID mUnlockClientWriteUuid;
- private UUID mUnlockServerWriteUuid;
- private BluetoothGattService mUnlockGattService;
-
- @Nullable
- private BleMessageStream mMessageStream;
- private final Handler mHandler = new Handler();
-
- // A map of enrollment/unlock client write uuid -> listener
- private final SimpleArrayMap<UUID, DataReceivedListener> mDataReceivedListeners =
- new SimpleArrayMap<>();
-
- CarTrustAgentBleManager(Context context, BlePeripheralManager blePeripheralManager) {
- mContext = context;
- mBlePeripheralManager = blePeripheralManager;
- mBlePeripheralManager.registerCallback(this);
- }
-
- /**
- * This should be called before starting unlock advertising
- */
- void setUniqueId(UUID uniqueId) {
- mUniqueId = Utils.uuidToBytes(uniqueId);
- }
-
- void cleanup() {
- mBlePeripheralManager.cleanup();
- }
-
- void stopGattServer() {
- mBlePeripheralManager.stopGattServer();
- }
-
- // Overriding some of the {@link BLEManager} methods to be specific for Trusted Device feature.
- @Override
- public void onRemoteDeviceConnected(BluetoothDevice device) {
- if (mBleEventCallbacks.isEmpty()) {
- Log.e(TAG, "No valid BleEventCallback for trust device.");
- return;
- }
-
- // Retrieving device name only happens in enrollment, the retrieved device name will be
- // stored in sharedPreference for further use.
- if (mCurrentTrustedDeviceOperation == TRUSTED_DEVICE_OPERATION_ENROLLMENT
- && device.getName() == null) {
- mBlePeripheralManager.retrieveDeviceName(device);
- }
-
- if (mMessageStream != null) {
- mMessageStream.unregisterCallback(this);
- mMessageStream = null;
- }
-
- mSendMessageCallback = null;
-
- mBlePeripheralManager.addOnCharacteristicWriteListener(this);
- mBleEventCallbacks.forEach(bleEventCallback ->
- bleEventCallback.onRemoteDeviceConnected(device));
- }
-
- @Override
- public void onRemoteDeviceDisconnected(BluetoothDevice device) {
- mBlePeripheralManager.removeOnCharacteristicWriteListener(this);
- mBleEventCallbacks.forEach(bleEventCallback ->
- bleEventCallback.onRemoteDeviceDisconnected(device));
-
- if (mMessageStream != null) {
- mMessageStream.unregisterCallback(this);
- mMessageStream = null;
- }
-
- mSendMessageCallback = null;
- }
-
- @Override
- public void onDeviceNameRetrieved(@Nullable String deviceName) {
- mBleEventCallbacks.forEach(bleEventCallback ->
- bleEventCallback.onClientDeviceNameRetrieved(deviceName));
- }
-
- @Override
- public void onMtuSizeChanged(int size) {
- mMaxWriteSize = size - ATT_PAYLOAD_RESERVED_BYTES;
-
- if (mMessageStream != null) {
- mMessageStream.setMaxWriteSize(mMaxWriteSize);
- }
-
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "MTU size changed to: " + size
- + "; setting max payload size to: " + mMaxWriteSize);
- }
- }
-
- @Override
- public void onCharacteristicWrite(BluetoothDevice device,
- BluetoothGattCharacteristic characteristic, byte[] value) {
- UUID uuid = characteristic.getUuid();
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "onCharacteristicWrite received uuid: " + uuid);
- }
-
- if (mMessageStream == null) {
- resolveBLEVersion(device, value, uuid);
- return;
- }
-
- Log.e(TAG, "Received a message but message stream has already been created. "
- + "Was this manager not unregistered as a listener for writes?");
- }
-
- @VisibleForTesting
- void setBleMessageRetryLimit(int limit) {
- mBleMessageRetryLimit = limit;
- }
-
- private void resolveBLEVersion(BluetoothDevice device, byte[] value,
- UUID clientCharacteristicUUID) {
- BluetoothGattCharacteristic writeCharacteristic =
- getCharacteristicForWrite(clientCharacteristicUUID);
-
- if (writeCharacteristic == null) {
- Log.e(TAG, "Invalid write UUID (" + clientCharacteristicUUID
- + ") during version exchange; disconnecting from remote device.");
- disconnectRemoteDevice();
- return;
- }
-
- BluetoothGattCharacteristic readCharacteristic =
- clientCharacteristicUUID.equals(mEnrollmentClientWriteUuid)
- ? mEnrollmentGattService.getCharacteristic(clientCharacteristicUUID)
- : mUnlockGattService.getCharacteristic(clientCharacteristicUUID);
-
- // If this occurs, then there is a bug in the retrieval code above.
- if (readCharacteristic == null) {
- Log.e(TAG, "No read characteristic corresponding to UUID ("
- + clientCharacteristicUUID + "). Cannot listen for messages. Disconnecting.");
- disconnectRemoteDevice();
- return;
- }
-
- BLEVersionExchange deviceVersion;
- try {
- deviceVersion = BLEVersionExchange.parseFrom(value);
- } catch (InvalidProtocolBufferException e) {
- disconnectRemoteDevice();
- Log.e(TAG, "Could not parse version exchange message", e);
- return;
- }
-
- mMessageStream = BLEVersionExchangeResolver.resolveToStream(
- deviceVersion, device, mBlePeripheralManager, writeCharacteristic,
- readCharacteristic);
- mMessageStream.setMaxWriteSize(mMaxWriteSize);
- mMessageStream.registerCallback(this);
-
- if (mMessageStream == null) {
- Log.e(TAG, "No supported version found during version exchange. "
- + "Could not create message stream.");
- disconnectRemoteDevice();
- return;
- }
-
- // No need for this manager to listen for any writes; the stream will handle that from now
- // on.
- mBlePeripheralManager.removeOnCharacteristicWriteListener(this);
-
- // The message stream is not used to send the IHU's version, but will be used for
- // any subsequent messages.
- BLEVersionExchange headunitVersion = BLEVersionExchangeResolver.makeVersionExchange();
- setValueOnCharacteristicAndNotify(device, headunitVersion.toByteArray(),
- writeCharacteristic);
-
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Sent supported version to the phone.");
- }
- }
-
- /**
- * Setup the BLE GATT server for Enrollment. The GATT server for Enrollment comprises of one
- * GATT Service and 2 characteristics - one for the phone to write to and one for the head unit
- * to write to.
- */
- void setupEnrollmentBleServer() {
- mEnrollmentServiceUuid = UUID.fromString(
- mContext.getString(R.string.enrollment_service_uuid));
- mEnrollmentClientWriteUuid = UUID.fromString(
- mContext.getString(R.string.enrollment_client_write_uuid));
- mEnrollmentServerWriteUuid = UUID.fromString(
- mContext.getString(R.string.enrollment_server_write_uuid));
-
- mEnrollmentGattService = new BluetoothGattService(mEnrollmentServiceUuid,
- BluetoothGattService.SERVICE_TYPE_PRIMARY);
-
- // Characteristic the connected bluetooth device will write to.
- BluetoothGattCharacteristic clientCharacteristic =
- new BluetoothGattCharacteristic(mEnrollmentClientWriteUuid,
- BluetoothGattCharacteristic.PROPERTY_WRITE
- | BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE,
- BluetoothGattCharacteristic.PERMISSION_WRITE);
-
- // Characteristic that this manager will write to.
- BluetoothGattCharacteristic serverCharacteristic =
- new BluetoothGattCharacteristic(mEnrollmentServerWriteUuid,
- BluetoothGattCharacteristic.PROPERTY_NOTIFY,
- BluetoothGattCharacteristic.PERMISSION_READ);
-
- addDescriptorToCharacteristic(serverCharacteristic);
-
- mEnrollmentGattService.addCharacteristic(clientCharacteristic);
- mEnrollmentGattService.addCharacteristic(serverCharacteristic);
- }
-
- /**
- * Setup the BLE GATT server for Unlocking the Head unit. The GATT server for this phase also
- * comprises of 1 Service and 2 characteristics. However both the token and the handle are sent
- * from the phone to the head unit.
- */
- void setupUnlockBleServer() {
- mUnlockServiceUuid = UUID.fromString(mContext.getString(R.string.unlock_service_uuid));
- mUnlockClientWriteUuid = UUID
- .fromString(mContext.getString(R.string.unlock_client_write_uuid));
- mUnlockServerWriteUuid = UUID
- .fromString(mContext.getString(R.string.unlock_server_write_uuid));
-
- mUnlockGattService = new BluetoothGattService(mUnlockServiceUuid,
- BluetoothGattService.SERVICE_TYPE_PRIMARY);
-
- // Characteristic the connected bluetooth device will write to.
- BluetoothGattCharacteristic clientCharacteristic = new BluetoothGattCharacteristic(
- mUnlockClientWriteUuid,
- BluetoothGattCharacteristic.PROPERTY_WRITE
- | BluetoothGattCharacteristic.PROPERTY_WRITE_NO_RESPONSE,
- BluetoothGattCharacteristic.PERMISSION_WRITE);
-
- // Characteristic that this manager will write to.
- BluetoothGattCharacteristic serverCharacteristic = new BluetoothGattCharacteristic(
- mUnlockServerWriteUuid,
- BluetoothGattCharacteristic.PROPERTY_NOTIFY,
- BluetoothGattCharacteristic.PERMISSION_READ);
-
- addDescriptorToCharacteristic(serverCharacteristic);
-
- mUnlockGattService.addCharacteristic(clientCharacteristic);
- mUnlockGattService.addCharacteristic(serverCharacteristic);
- }
-
- @Override
- public void onMessageReceivedError(UUID uuid) {
- Log.e(TAG, "Error parsing the message from the client on UUID: " + uuid);
- }
-
- @Override
- public void onMessageReceived(byte[] message, UUID uuid) {
- if (mDataReceivedListeners.containsKey(uuid)) {
- mDataReceivedListeners.get(uuid).onDataReceived(message);
- }
- }
-
- @Override
- public void onWriteMessageError() {
- if (mSendMessageCallback != null) {
- mSendMessageCallback.onSendMessageFailure();
- }
- }
-
- private void addDescriptorToCharacteristic(BluetoothGattCharacteristic characteristic) {
- BluetoothGattDescriptor descriptor = new BluetoothGattDescriptor(
- CLIENT_CHARACTERISTIC_CONFIG,
- BluetoothGattDescriptor.PERMISSION_READ | BluetoothGattDescriptor.PERMISSION_WRITE);
- descriptor.setValue(BluetoothGattDescriptor.ENABLE_NOTIFICATION_VALUE);
- characteristic.addDescriptor(descriptor);
- }
-
- /**
- * Begins advertising for enrollment
- *
- * @param deviceName device name to advertise
- * @param enrollmentAdvertisingCallback callback for advertiser
- */
- void startEnrollmentAdvertising(@Nullable String deviceName,
- AdvertiseCallback enrollmentAdvertisingCallback) {
- if (enrollmentAdvertisingCallback == null) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Enrollment Advertising not started: "
- + "enrollmentAdvertisingCallback is null");
- }
- return;
- }
- mCurrentTrustedDeviceOperation = TRUSTED_DEVICE_OPERATION_ENROLLMENT;
- mEnrollmentAdvertisingCallback = enrollmentAdvertisingCallback;
- // Replace name to ensure it is small enough to be advertised
- if (deviceName != null) {
- BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
- if (mOriginalBluetoothName == null) {
- mOriginalBluetoothName = adapter.getName();
- }
- adapter.setName(deviceName);
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Changing bluetooth adapter name from "
- + mOriginalBluetoothName + " to " + deviceName);
- }
- }
-
- attemptAdvertising();
- }
-
- private void attemptAdvertising() {
- // Validate the adapter name change has happened. If not, try again after delay.
- if (mOriginalBluetoothName != null
- && BluetoothAdapter.getDefaultAdapter().getName().equals(mOriginalBluetoothName)) {
- mHandler.postDelayed(this::attemptAdvertising, BLE_MESSAGE_RETRY_DELAY_MS);
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Adapter name change has not taken affect prior to advertising attempt. "
- + "Trying again.");
- }
- return;
- }
-
- mBlePeripheralManager.startAdvertising(mEnrollmentGattService,
- new AdvertiseData.Builder()
- .setIncludeDeviceName(true)
- .addServiceUuid(new ParcelUuid(mEnrollmentServiceUuid))
- .build(),
- mEnrollmentAdvertisingCallback);
- }
-
- void stopEnrollmentAdvertising() {
- if (mOriginalBluetoothName != null) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Changing bluetooth adapter name back to "
- + mOriginalBluetoothName);
- }
- BluetoothAdapter.getDefaultAdapter().setName(mOriginalBluetoothName);
- mOriginalBluetoothName = null;
- }
- if (mEnrollmentAdvertisingCallback != null) {
- mBlePeripheralManager.stopAdvertising(mEnrollmentAdvertisingCallback);
- }
- }
-
- void startUnlockAdvertising() {
- if (mUniqueId == null) {
- Log.e(TAG, "unique id is null");
- return;
- }
- mCurrentTrustedDeviceOperation = TRUSTED_DEVICE_OPERATION_UNLOCK;
- mBlePeripheralManager.startAdvertising(mUnlockGattService,
- new AdvertiseData.Builder()
- .setIncludeDeviceName(false)
- .addServiceData(new ParcelUuid(mUnlockServiceUuid), mUniqueId)
- .addServiceUuid(new ParcelUuid(mUnlockServiceUuid))
- .build(),
- mUnlockAdvertisingCallback);
- }
-
- void stopUnlockAdvertising() {
- mCurrentTrustedDeviceOperation = TRUSTED_DEVICE_OPERATION_NONE;
- mBlePeripheralManager.stopAdvertising(mUnlockAdvertisingCallback);
- }
-
- void disconnectRemoteDevice() {
- mBlePeripheralManager.stopGattServer();
- }
-
- void sendMessage(byte[] message, OperationType operation, boolean isPayloadEncrypted,
- SendMessageCallback callback) {
- if (mMessageStream == null) {
- Log.e(TAG, "Request to send message, but no valid message stream.");
- return;
- }
-
- mSendMessageCallback = callback;
-
- mMessageStream.writeMessage(message, operation, isPayloadEncrypted);
- }
-
- /**
- * Sets the given message on the specified characteristic.
- *
- * <p>Upon successfully setting of the value, any listeners on the characteristic will be
- * notified that its value has changed.
- *
- * @param device The device has own the given characteristic.
- * @param message The message to set as the characteristic's value.
- * @param characteristic The characteristic to set the value on.
- */
- private void setValueOnCharacteristicAndNotify(BluetoothDevice device, byte[] message,
- BluetoothGattCharacteristic characteristic) {
- characteristic.setValue(message);
- mBlePeripheralManager.notifyCharacteristicChanged(device, characteristic, false);
- }
-
- /**
- * Returns the characteristic that can be written to based on the given UUID.
- *
- * <p>The UUID will be one that corresponds to either enrollment or unlock. This method will
- * return the write characteristic for enrollment or unlock respectively.
- *
- * @return The write characteristic or {@code null} if the UUID is invalid.
- */
- @Nullable
- private BluetoothGattCharacteristic getCharacteristicForWrite(UUID uuid) {
- if (uuid.equals(mEnrollmentClientWriteUuid)) {
- return mEnrollmentGattService.getCharacteristic(mEnrollmentServerWriteUuid);
- }
-
- if (uuid.equals(mUnlockClientWriteUuid)) {
- return mUnlockGattService.getCharacteristic(mUnlockServerWriteUuid);
- }
-
- return null;
- }
-
- private final AdvertiseCallback mUnlockAdvertisingCallback = new AdvertiseCallback() {
- @Override
- public void onStartSuccess(AdvertiseSettings settingsInEffect) {
- super.onStartSuccess(settingsInEffect);
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Unlock Advertising onStartSuccess");
- }
- }
-
- @Override
- public void onStartFailure(int errorCode) {
- Log.e(TAG, "Failed to advertise, errorCode: " + errorCode);
- super.onStartFailure(errorCode);
- if (errorCode == AdvertiseCallback.ADVERTISE_FAILED_ALREADY_STARTED) {
- return;
- }
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Start unlock advertising fail, retry to advertising..");
- }
- setupUnlockBleServer();
- startUnlockAdvertising();
- }
- };
-
- /**
- * Adds the given listener to be notified when the characteristic with the given uuid has
- * received data.
- */
- void addDataReceivedListener(UUID uuid, DataReceivedListener listener) {
- mDataReceivedListeners.put(uuid, listener);
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Register DataReceivedListener: " + listener + "for uuid "
- + uuid.toString());
- }
- }
-
- void removeDataReceivedListener(UUID uuid) {
- if (!mDataReceivedListeners.containsKey(uuid)) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "No DataReceivedListener for uuid " + uuid.toString()
- + " to unregister.");
- }
- return;
- }
- mDataReceivedListeners.remove(uuid);
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Unregister DataReceivedListener for uuid " + uuid.toString());
- }
- }
-
- void addBleEventCallback(BleEventCallback callback) {
- mBleEventCallbacks.add(callback);
- }
-
- void removeBleEventCallback(BleEventCallback callback) {
- if (!mBleEventCallbacks.remove(callback)) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Remove BleEventCallback that does not exist.");
- }
- }
- }
-
- /**
- * Callback to be invoked for enrollment events
- */
- interface SendMessageCallback {
-
- /**
- * Called when enrollment handshake needs to be terminated
- */
- void onSendMessageFailure();
- }
-
- /**
- * Callback to be invoked when BLE receives data from remote device.
- */
- interface DataReceivedListener {
-
- /**
- * Called when data has been received from a remote device.
- *
- * @param value received data
- */
- void onDataReceived(byte[] value);
- }
-
- /**
- * The interface that device service has to implement to get notified when BLE events occur
- */
- interface BleEventCallback {
-
- /**
- * Called when a remote device is connected
- *
- * @param device the remote device
- */
- void onRemoteDeviceConnected(BluetoothDevice device);
-
- /**
- * Called when a remote device is disconnected
- *
- * @param device the remote device
- */
- void onRemoteDeviceDisconnected(BluetoothDevice device);
-
- /**
- * Called when the device name of the remote device is retrieved
- *
- * @param deviceName device name of the remote device
- */
- void onClientDeviceNameRetrieved(String deviceName);
- }
-}
diff --git a/service/src/com/android/car/trust/CarTrustAgentEnrollmentService.java b/service/src/com/android/car/trust/CarTrustAgentEnrollmentService.java
deleted file mode 100644
index bff833a..0000000
--- a/service/src/com/android/car/trust/CarTrustAgentEnrollmentService.java
+++ /dev/null
@@ -1,1211 +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.car.trust;
-
-import static android.car.Car.PERMISSION_CAR_ENROLL_TRUST;
-import static android.car.trust.CarTrustAgentEnrollmentManager.ENROLLMENT_HANDSHAKE_FAILURE;
-import static android.car.trust.CarTrustAgentEnrollmentManager.ENROLLMENT_NOT_ALLOWED;
-
-import static com.android.car.trust.EventLog.ENCRYPTION_KEY_SAVED;
-import static com.android.car.trust.EventLog.ENROLLMENT_ENCRYPTION_STATE;
-import static com.android.car.trust.EventLog.ENROLLMENT_HANDSHAKE_ACCEPTED;
-import static com.android.car.trust.EventLog.ESCROW_TOKEN_ADDED;
-import static com.android.car.trust.EventLog.RECEIVED_DEVICE_ID;
-import static com.android.car.trust.EventLog.REMOTE_DEVICE_CONNECTED;
-import static com.android.car.trust.EventLog.SHOW_VERIFICATION_CODE;
-import static com.android.car.trust.EventLog.START_ENROLLMENT_ADVERTISING;
-import static com.android.car.trust.EventLog.STOP_ENROLLMENT_ADVERTISING;
-import static com.android.car.trust.EventLog.logEnrollmentEvent;
-
-import android.annotation.IntDef;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.annotation.RequiresPermission;
-import android.app.ActivityManager;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.le.AdvertiseCallback;
-import android.bluetooth.le.AdvertiseSettings;
-import android.car.encryptionrunner.EncryptionRunner;
-import android.car.encryptionrunner.EncryptionRunnerFactory;
-import android.car.encryptionrunner.HandshakeException;
-import android.car.encryptionrunner.HandshakeMessage;
-import android.car.encryptionrunner.HandshakeMessage.HandshakeState;
-import android.car.encryptionrunner.Key;
-import android.car.trust.ICarTrustAgentBleCallback;
-import android.car.trust.ICarTrustAgentEnrollment;
-import android.car.trust.ICarTrustAgentEnrollmentCallback;
-import android.car.trust.TrustedDeviceInfo;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.os.IBinder;
-import android.os.RemoteException;
-import android.sysprop.CarProperties;
-import android.util.Log;
-
-import com.android.car.BLEStreamProtos.BLEOperationProto.OperationType;
-import com.android.car.ICarImpl;
-import com.android.car.R;
-import com.android.car.Utils;
-import com.android.car.trust.CarTrustAgentBleManager.DataReceivedListener;
-import com.android.car.trust.CarTrustAgentBleManager.SendMessageCallback;
-import com.android.internal.annotations.GuardedBy;
-import com.android.internal.annotations.VisibleForTesting;
-
-import java.io.PrintWriter;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.security.SignatureException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Queue;
-import java.util.Set;
-import java.util.UUID;
-
-/**
- * A service that is part of the CarTrustedDeviceService that is responsible for allowing a
- * phone to enroll as a trusted device. The enrolled phone can then be used for authenticating a
- * user on the HU. This implements the {@link android.car.trust.CarTrustAgentEnrollmentManager}
- * APIs that an app like Car Settings can call to conduct an enrollment.
- *
- * @deprecated Enrollment of a trusted device is no longer a supported feature of car service and
- * these APIs will be removed in the next Android release.
- */
-@Deprecated
-public class CarTrustAgentEnrollmentService extends ICarTrustAgentEnrollment.Stub implements
- DataReceivedListener {
- private static final String TAG = "CarTrustAgentEnroll";
- private static final String TRUSTED_DEVICE_ENROLLMENT_ENABLED_KEY =
- "trusted_device_enrollment_enabled";
- @VisibleForTesting
- static final byte[] CONFIRMATION_SIGNAL = "True".getBytes();
- //Arbirary log size
- private static final int MAX_LOG_SIZE = 20;
- // This delimiter separates deviceId and deviceInfo, so it has to differ from the
- // TrustedDeviceInfo delimiter. Once new API can be added, deviceId will be added to
- // TrustedDeviceInfo and this delimiter will be removed.
- private static final char DEVICE_INFO_DELIMITER = '#';
-
- // Device name length is limited by available bytes in BLE advertisement data packet.
- //
- // BLE advertisement limits data packet length to 31
- // Currently we send:
- // - 18 bytes for 16 chars UUID: 16 bytes + 2 bytes for header;
- // - 3 bytes for advertisement being connectable;
- // which leaves 10 bytes.
- // Subtracting 2 bytes used by header, we have 8 bytes for device name.
- private static final int DEVICE_NAME_LENGTH_LIMIT = 8;
- // Limit prefix to 4 chars and fill the rest with randomly generated name. Use random name
- // to improve uniqueness in paired device name.
- private static final int DEVICE_NAME_PREFIX_LIMIT = 4;
-
- private final CarTrustedDeviceService mTrustedDeviceService;
- private final CarCompanionDeviceStorage mCarCompanionDeviceStorage;
- // List of clients listening to Enrollment state change events.
- private final List<EnrollmentStateClient> mEnrollmentStateClients = new ArrayList<>();
- // List of clients listening to BLE state changes events during enrollment.
- private final List<BleStateChangeClient> mBleStateChangeClients = new ArrayList<>();
- private final Queue<String> mLogQueue = new LinkedList<>();
-
- private final CarTrustAgentBleManager mCarTrustAgentBleManager;
- private CarTrustAgentEnrollmentRequestDelegate mEnrollmentDelegate;
-
- private Object mRemoteDeviceLock = new Object();
- @GuardedBy("mRemoteDeviceLock")
- private BluetoothDevice mRemoteEnrollmentDevice;
- private final Map<Long, Boolean> mTokenActiveStateMap = new HashMap<>();
- private String mClientDeviceName;
- private String mClientDeviceId;
- private final UUID mEnrollmentClientWriteUuid;
- private final Context mContext;
- private String mEnrollmentDeviceName;
- private SendMessageCallback mSendMessageCallback = this::terminateEnrollmentHandshake;
-
- private EncryptionRunner mEncryptionRunner = EncryptionRunnerFactory.newRunner();
- private HandshakeMessage mHandshakeMessage;
- private Key mEncryptionKey;
- private long mHandle;
- @VisibleForTesting
- @HandshakeState
- int mEncryptionState = HandshakeState.UNKNOWN;
- // State of last message sent to phone in enrollment process. Order matters with
- // state being auto-incremented.
- static final int ENROLLMENT_STATE_NONE = 0;
- static final int ENROLLMENT_STATE_UNIQUE_ID = 1;
- static final int ENROLLMENT_STATE_ENCRYPTION_COMPLETED = 2;
- static final int ENROLLMENT_STATE_HANDLE = 3;
-
- /** @hide */
- @VisibleForTesting
- @Retention(RetentionPolicy.SOURCE)
- @IntDef({ENROLLMENT_STATE_NONE, ENROLLMENT_STATE_UNIQUE_ID,
- ENROLLMENT_STATE_ENCRYPTION_COMPLETED, ENROLLMENT_STATE_HANDLE})
- @interface EnrollmentState {
- }
-
- @VisibleForTesting
- @EnrollmentState
- int mEnrollmentState;
-
- public CarTrustAgentEnrollmentService(Context context, CarTrustedDeviceService service,
- CarTrustAgentBleManager bleService) {
- mContext = context;
- mTrustedDeviceService = service;
- mCarTrustAgentBleManager = bleService;
- mEnrollmentClientWriteUuid = UUID.fromString(context
- .getString(R.string.enrollment_client_write_uuid));
- mCarCompanionDeviceStorage = new CarCompanionDeviceStorage(context);
- }
-
- public synchronized void init() {
- mCarTrustAgentBleManager.setupEnrollmentBleServer();
- mCarTrustAgentBleManager.addDataReceivedListener(mEnrollmentClientWriteUuid,
- this);
- }
-
- /**
- * Pass a dummy encryption to generate a dummy key, only for test purpose.
- */
- @VisibleForTesting
- void setEncryptionRunner(EncryptionRunner dummyEncryptionRunner) {
- mEncryptionRunner = dummyEncryptionRunner;
- }
-
- public synchronized void release() {
- for (EnrollmentStateClient client : mEnrollmentStateClients) {
- client.mListenerBinder.unlinkToDeath(client, 0);
- }
- for (BleStateChangeClient client : mBleStateChangeClients) {
- client.mListenerBinder.unlinkToDeath(client, 0);
- }
- mEnrollmentStateClients.clear();
- }
-
- // Implementing the ICarTrustAgentEnrollment interface
-
- /**
- * Begin BLE advertisement for Enrollment. This should be called from an app that conducts
- * the enrollment of the trusted device.
- */
- @Override
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public void startEnrollmentAdvertising() {
- ICarImpl.assertTrustAgentEnrollmentPermission(mContext);
- if (!mCarCompanionDeviceStorage.getSharedPrefs()
- .getBoolean(TRUSTED_DEVICE_ENROLLMENT_ENABLED_KEY, true)) {
- Log.e(TAG, "Trusted Device Enrollment disabled");
- dispatchEnrollmentFailure(ENROLLMENT_NOT_ALLOWED);
- return;
- }
- // Stop any current broadcasts
- mTrustedDeviceService.getCarTrustAgentUnlockService().stopUnlockAdvertising();
- stopEnrollmentAdvertising();
-
- logEnrollmentEvent(START_ENROLLMENT_ADVERTISING);
- addEnrollmentServiceLog("startEnrollmentAdvertising");
- mCarTrustAgentBleManager.startEnrollmentAdvertising(getEnrollmentDeviceName(),
- new AdvertiseCallback() {
- @Override
- public void onStartSuccess(AdvertiseSettings settingsInEffect) {
- super.onStartSuccess(settingsInEffect);
- onEnrollmentAdvertiseStartSuccess();
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Successfully started advertising service");
- }
- }
-
- @Override
- public void onStartFailure(int errorCode) {
- super.onStartFailure(errorCode);
- Log.e(TAG, "Failed to advertise, errorCode: " + errorCode);
- onEnrollmentAdvertiseStartFailure();
- }
- });
- mEnrollmentState = ENROLLMENT_STATE_NONE;
- }
-
- /**
- * Stop BLE advertisement for Enrollment
- */
- @Override
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public void stopEnrollmentAdvertising() {
- ICarImpl.assertTrustAgentEnrollmentPermission(mContext);
- logEnrollmentEvent(STOP_ENROLLMENT_ADVERTISING);
- addEnrollmentServiceLog("stopEnrollmentAdvertising");
- mCarTrustAgentBleManager.stopEnrollmentAdvertising();
- }
-
- /**
- * Called by the client to notify that the user has accepted a pairing code or any out-of-band
- * confirmation, and send confirmation signals to remote bluetooth device.
- *
- * @param device the remote Bluetooth device that will receive the signal.
- */
- @Override
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public void enrollmentHandshakeAccepted(BluetoothDevice device) {
- ICarImpl.assertTrustAgentEnrollmentPermission(mContext);
- logEnrollmentEvent(ENROLLMENT_HANDSHAKE_ACCEPTED);
- addEnrollmentServiceLog("enrollmentHandshakeAccepted");
- if (device == null || !device.equals(mRemoteEnrollmentDevice)) {
- Log.wtf(TAG,
- "Enrollment Failure: device is different from cached remote bluetooth device,"
- + " disconnect from the device. current device is:" + device);
- mCarTrustAgentBleManager.disconnectRemoteDevice();
- return;
- }
- mCarTrustAgentBleManager.sendMessage(CONFIRMATION_SIGNAL,
- OperationType.ENCRYPTION_HANDSHAKE, /* isPayloadEncrypted= */ false,
- mSendMessageCallback);
- setEnrollmentHandshakeAccepted();
- }
-
- /**
- * Terminate the Enrollment process. To be called when an error is encountered during
- * enrollment. For example - user pressed cancel on pairing code confirmation or user
- * navigated away from the app before completing enrollment.
- */
- @Override
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public void terminateEnrollmentHandshake() {
- ICarImpl.assertTrustAgentEnrollmentPermission(mContext);
- addEnrollmentServiceLog("terminateEnrollmentHandshake");
- // Disconnect from BLE
- mCarTrustAgentBleManager.disconnectRemoteDevice();
- // Remove any handles that have not been activated yet.
- Iterator<Map.Entry<Long, Boolean>> it = mTokenActiveStateMap.entrySet().iterator();
- while (it.hasNext()) {
- Map.Entry<Long, Boolean> pair = it.next();
- boolean isHandleActive = pair.getValue();
- if (!isHandleActive) {
- long handle = pair.getKey();
- int uid = mCarCompanionDeviceStorage.getSharedPrefs().getInt(String.valueOf(handle),
- -1);
- removeEscrowToken(handle, uid);
- it.remove();
- }
- }
- }
-
- /*
- * Returns if there is an active token for the given user and handle.
- *
- * @param handle handle corresponding to the escrow token
- * @param uid user id
- * @return True if the escrow token is active, false if not
- */
- @Override
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public boolean isEscrowTokenActive(long handle, int uid) {
- ICarImpl.assertTrustAgentEnrollmentPermission(mContext);
- if (mTokenActiveStateMap.get(handle) != null) {
- return mTokenActiveStateMap.get(handle);
- }
- return false;
- }
-
- /**
- * Remove the Token associated with the given handle for the given user.
- *
- * @param handle handle corresponding to the escrow token
- * @param uid user id
- */
- @Override
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public void removeEscrowToken(long handle, int uid) {
- ICarImpl.assertTrustAgentEnrollmentPermission(mContext);
- mEnrollmentDelegate.removeEscrowToken(handle, uid);
- addEnrollmentServiceLog("removeEscrowToken (handle:" + handle + " uid:" + uid + ")");
- }
-
- /**
- * Remove all Trusted devices associated with the given user.
- *
- * @param uid user id
- */
- @Override
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public void removeAllTrustedDevices(int uid) {
- ICarImpl.assertTrustAgentEnrollmentPermission(mContext);
- for (TrustedDeviceInfo device : getEnrolledDeviceInfosForUser(uid)) {
- removeEscrowToken(device.getHandle(), uid);
- }
- }
-
- /**
- * Enable or disable enrollment of a Trusted device. When disabled,
- * {@link android.car.trust.CarTrustAgentEnrollmentManager#ENROLLMENT_NOT_ALLOWED} is returned,
- * when {@link #startEnrollmentAdvertising()} is called by a client.
- *
- * @param isEnabled {@code true} to enable; {@code false} to disable the feature.
- */
- @Override
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public void setTrustedDeviceEnrollmentEnabled(boolean isEnabled) {
- ICarImpl.assertTrustAgentEnrollmentPermission(mContext);
- SharedPreferences.Editor editor = mCarCompanionDeviceStorage.getSharedPrefs().edit();
- editor.putBoolean(TRUSTED_DEVICE_ENROLLMENT_ENABLED_KEY, isEnabled);
- if (!editor.commit()) {
- Log.wtf(TAG,
- "Enrollment Failure: Commit to SharedPreferences failed. Enable? " + isEnabled);
- }
- }
-
- /**
- * Enable or disable authentication of the head unit with a trusted device.
- *
- * @param isEnabled when set to {@code false}, head unit will not be
- * discoverable to unlock the user. Setting it to {@code true} will enable it
- * back.
- */
- @Override
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public void setTrustedDeviceUnlockEnabled(boolean isEnabled) {
- ICarImpl.assertTrustAgentEnrollmentPermission(mContext);
- mTrustedDeviceService.getCarTrustAgentUnlockService()
- .setTrustedDeviceUnlockEnabled(isEnabled);
- }
-
- /**
- * Get the Handles and Device Mac Address corresponding to the token for the current user. The
- * client can use this to list the trusted devices for the user.
- *
- * @param uid user id
- * @return array of trusted device handles and names for the user.
- */
- @NonNull
- @Override
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public List<TrustedDeviceInfo> getEnrolledDeviceInfosForUser(int uid) {
- ICarImpl.assertTrustAgentEnrollmentPermission(mContext);
- Set<String> enrolledDeviceInfos = mCarCompanionDeviceStorage.getSharedPrefs().getStringSet(
- String.valueOf(uid), new HashSet<>());
- List<TrustedDeviceInfo> trustedDeviceInfos = new ArrayList<>(enrolledDeviceInfos.size());
- for (String deviceInfoWithId : enrolledDeviceInfos) {
- TrustedDeviceInfo deviceInfo = extractDeviceInfo(deviceInfoWithId);
- if (deviceInfo != null) {
- trustedDeviceInfos.add(deviceInfo);
- }
- }
- return trustedDeviceInfos;
- }
-
- /**
- * Registers a {@link ICarTrustAgentEnrollmentCallback} to be notified for changes to the
- * enrollment state.
- *
- * @param listener {@link ICarTrustAgentEnrollmentCallback}
- */
- @Override
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public synchronized void registerEnrollmentCallback(ICarTrustAgentEnrollmentCallback listener) {
- ICarImpl.assertTrustAgentEnrollmentPermission(mContext);
- if (listener == null) {
- throw new IllegalArgumentException("Listener is null");
- }
- // If a new client is registering, create a new EnrollmentStateClient and add it to the list
- // of listening clients.
- EnrollmentStateClient client = findEnrollmentStateClientLocked(listener);
- if (client == null) {
- client = new EnrollmentStateClient(listener);
- try {
- listener.asBinder().linkToDeath(client, 0);
- } catch (RemoteException e) {
- Log.e(TAG, "Cannot link death recipient to binder ", e);
- return;
- }
- mEnrollmentStateClients.add(client);
- }
- }
-
- /**
- * Called after the escrow token has been successfully added to the framework.
- *
- * @param token the escrow token which has been added
- * @param handle the given handle of that token
- * @param uid the current user id
- */
- void onEscrowTokenAdded(byte[] token, long handle, int uid) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "onEscrowTokenAdded handle:" + handle + " uid:" + uid);
- }
-
- if (mRemoteEnrollmentDevice == null) {
- Log.e(TAG, "onEscrowTokenAdded() but no remote device connected!");
- removeEscrowToken(handle, uid);
- dispatchEnrollmentFailure(ENROLLMENT_HANDSHAKE_FAILURE);
- return;
- }
-
- mTokenActiveStateMap.put(handle, false);
- for (EnrollmentStateClient client : mEnrollmentStateClients) {
- try {
- client.mListener.onEscrowTokenAdded(handle);
- } catch (RemoteException e) {
- Log.e(TAG, "onEscrowTokenAdded dispatch failed", e);
- }
- }
- }
-
- /**
- * Called after the escrow token has been successfully removed from the framework.
- */
- void onEscrowTokenRemoved(long handle, int uid) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "onEscrowTokenRemoved handle:" + handle + " uid:" + uid);
- }
- for (EnrollmentStateClient client : mEnrollmentStateClients) {
- try {
- client.mListener.onEscrowTokenRemoved(handle);
- } catch (RemoteException e) {
- Log.e(TAG, "onEscrowTokenRemoved dispatch failed", e);
- }
- }
- SharedPreferences sharedPrefs = mCarCompanionDeviceStorage.getSharedPrefs();
- SharedPreferences.Editor editor = sharedPrefs.edit();
- editor.remove(String.valueOf(handle));
- Set<String> deviceInfos = sharedPrefs.getStringSet(String.valueOf(uid), new HashSet<>());
- Iterator<String> iterator = deviceInfos.iterator();
- while (iterator.hasNext()) {
- String deviceIdAndInfo = iterator.next();
- TrustedDeviceInfo info = extractDeviceInfo(deviceIdAndInfo);
- if (info != null && info.getHandle() == handle) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Removing trusted device: " + info);
- }
- String clientDeviceId = extractDeviceId(deviceIdAndInfo);
- if (clientDeviceId != null && sharedPrefs.getLong(clientDeviceId, -1) == handle) {
- editor.remove(clientDeviceId);
- }
- iterator.remove();
- break;
- }
- }
- editor.putStringSet(String.valueOf(uid), deviceInfos);
- if (!editor.commit()) {
- Log.e(TAG, "EscrowToken removed, but shared prefs update failed");
- }
- }
-
- /**
- * @param handle the handle whose active state change
- * @param isTokenActive the active state of the handle
- * @param uid id of current user
- */
- void onEscrowTokenActiveStateChanged(long handle, boolean isTokenActive, int uid) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "onEscrowTokenActiveStateChanged: " + Long.toHexString(handle));
- }
- if (mRemoteEnrollmentDevice == null || !isTokenActive) {
- if (mRemoteEnrollmentDevice == null) {
- Log.e(TAG,
- "Device disconnected before sending back handle. Enrollment incomplete");
- }
- if (!isTokenActive) {
- Log.e(TAG, "Unexpected: Escrow Token activation failed");
- }
- removeEscrowToken(handle, uid);
- dispatchEnrollmentFailure(ENROLLMENT_HANDSHAKE_FAILURE);
- return;
- }
-
- // Avoid storing duplicate info for same device by checking if there is already device info
- // and deleting it.
- SharedPreferences sharedPrefs = mCarCompanionDeviceStorage.getSharedPrefs();
- if (sharedPrefs.contains(mClientDeviceId)) {
- removeEscrowToken(sharedPrefs.getLong(mClientDeviceId, -1), uid);
- }
- mTokenActiveStateMap.put(handle, isTokenActive);
- Set<String> deviceInfo = sharedPrefs.getStringSet(String.valueOf(uid), new HashSet<>());
- String clientDeviceName;
- if (mRemoteEnrollmentDevice.getName() != null) {
- clientDeviceName = mRemoteEnrollmentDevice.getName();
- } else if (mClientDeviceName != null) {
- clientDeviceName = mClientDeviceName;
- } else {
- clientDeviceName = mContext.getString(R.string.trust_device_default_name);
- }
- StringBuffer log = new StringBuffer()
- .append("trustedDeviceAdded (id:").append(mClientDeviceId)
- .append(", handle:").append(handle)
- .append(", uid:").append(uid)
- .append(", addr:").append(mRemoteEnrollmentDevice.getAddress())
- .append(", name:").append(clientDeviceName).append(")");
- addEnrollmentServiceLog(log.toString());
- deviceInfo.add(serializeDeviceInfoWithId(new TrustedDeviceInfo(handle,
- mRemoteEnrollmentDevice.getAddress(), clientDeviceName), mClientDeviceId));
-
- // To conveniently get the devices info regarding certain user.
- SharedPreferences.Editor editor = sharedPrefs.edit();
- editor.putStringSet(String.valueOf(uid), deviceInfo);
- if (!editor.commit()) {
- Log.e(TAG, "Writing DeviceInfo to shared prefs Failed");
- removeEscrowToken(handle, uid);
- dispatchEnrollmentFailure(ENROLLMENT_HANDSHAKE_FAILURE);
- return;
- }
-
- // To conveniently get the user id to unlock when handle is received.
- editor.putInt(String.valueOf(handle), uid);
- if (!editor.commit()) {
- Log.e(TAG, "Writing (handle, uid) to shared prefs Failed");
- removeEscrowToken(handle, uid);
- dispatchEnrollmentFailure(ENROLLMENT_HANDSHAKE_FAILURE);
- return;
- }
-
- // To check if the device has already been mapped to a handle
- editor.putLong(mClientDeviceId, handle);
- if (!editor.commit()) {
- Log.e(TAG, "Writing (identifier, handle) to shared prefs Failed");
- removeEscrowToken(handle, uid);
- dispatchEnrollmentFailure(ENROLLMENT_HANDSHAKE_FAILURE);
- return;
- }
-
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Sending handle: " + handle);
- }
- mHandle = handle;
- mCarTrustAgentBleManager.sendMessage(
- mEncryptionKey.encryptData(Utils.longToBytes(handle)),
- OperationType.CLIENT_MESSAGE, /* isPayloadEncrypted= */ true,
- mSendMessageCallback);
- }
-
- void onEnrollmentAdvertiseStartSuccess() {
- for (BleStateChangeClient client : mBleStateChangeClients) {
- try {
- client.mListener.onEnrollmentAdvertisingStarted();
- } catch (RemoteException e) {
- Log.e(TAG, "onAdvertiseSuccess dispatch failed", e);
- }
- }
- }
-
- void onEnrollmentAdvertiseStartFailure() {
- for (BleStateChangeClient client : mBleStateChangeClients) {
- try {
- client.mListener.onEnrollmentAdvertisingFailed();
- } catch (RemoteException e) {
- Log.e(TAG, "onAdvertiseSuccess dispatch failed", e);
- }
- }
- }
-
- /**
- * Called when a device has been connected through bluetooth
- *
- * @param device the connected device
- */
- void onRemoteDeviceConnected(BluetoothDevice device) {
- logEnrollmentEvent(REMOTE_DEVICE_CONNECTED);
- addEnrollmentServiceLog("onRemoteDeviceConnected (addr:" + device.getAddress() + ")");
- resetEncryptionState();
- mHandle = 0;
- synchronized (mRemoteDeviceLock) {
- mRemoteEnrollmentDevice = device;
- }
- for (BleStateChangeClient client : mBleStateChangeClients) {
- try {
- client.mListener.onBleEnrollmentDeviceConnected(device);
- } catch (RemoteException e) {
- Log.e(TAG, "onRemoteDeviceConnected dispatch failed", e);
- }
- }
- mCarTrustAgentBleManager.stopEnrollmentAdvertising();
- }
-
- void onRemoteDeviceDisconnected(BluetoothDevice device) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Device Disconnected: " + device.getAddress() + " Enrollment State: "
- + mEnrollmentState + " Encryption State: " + mEncryptionState);
- }
- addEnrollmentServiceLog("onRemoteDeviceDisconnected (addr:" + device.getAddress() + ")");
- addEnrollmentServiceLog(
- "Enrollment State: " + mEnrollmentState + " EncryptionState: " + mEncryptionState);
- resetEncryptionState();
- mHandle = 0;
- synchronized (mRemoteDeviceLock) {
- mRemoteEnrollmentDevice = null;
- }
- for (BleStateChangeClient client : mBleStateChangeClients) {
- try {
- client.mListener.onBleEnrollmentDeviceDisconnected(device);
- } catch (RemoteException e) {
- Log.e(TAG, "onRemoteDeviceDisconnected dispatch failed", e);
- }
- }
- }
-
- /**
- * Called when data is received during enrollment process.
- *
- * @param value received data
- */
- @Override
- public void onDataReceived(byte[] value) {
- if (mEnrollmentDelegate == null) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Enrollment Delegate not set");
- }
- return;
- }
- switch (mEnrollmentState) {
- case ENROLLMENT_STATE_NONE:
- if (!CarTrustAgentValidator.isValidEnrollmentDeviceId(value)) {
- Log.e(TAG, "Device id rejected by validator.");
- return;
- }
- notifyDeviceIdReceived(value);
- logEnrollmentEvent(RECEIVED_DEVICE_ID);
- break;
- case ENROLLMENT_STATE_UNIQUE_ID:
- try {
- processInitEncryptionMessage(value);
- } catch (HandshakeException e) {
- Log.e(TAG, "HandshakeException during set up of encryption: ", e);
- }
- break;
- case ENROLLMENT_STATE_ENCRYPTION_COMPLETED:
- notifyEscrowTokenReceived(value);
- break;
- case ENROLLMENT_STATE_HANDLE:
- // only activated handle can be sent to the connected remote device.
- dispatchEscrowTokenActiveStateChanged(mHandle, true);
- mCarTrustAgentBleManager.disconnectRemoteDevice();
- break;
- default:
- // Should never get here
- break;
- }
- }
-
- void onClientDeviceNameRetrieved(String deviceName) {
- mClientDeviceName = deviceName;
- }
-
- private void notifyDeviceIdReceived(byte[] id) {
- UUID deviceId = Utils.bytesToUUID(id);
- if (deviceId == null) {
- Log.e(TAG, "Invalid device id sent");
- return;
- }
- mClientDeviceId = deviceId.toString();
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Received device id: " + mClientDeviceId);
- }
- UUID uniqueId = mCarCompanionDeviceStorage.getUniqueId();
- if (uniqueId == null) {
- Log.e(TAG, "Cannot get Unique ID for the IHU");
- resetEnrollmentStateOnFailure();
- dispatchEnrollmentFailure(ENROLLMENT_HANDSHAKE_FAILURE);
- return;
- }
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Sending device id: " + uniqueId.toString());
- }
- mCarTrustAgentBleManager.sendMessage(
- Utils.uuidToBytes(uniqueId), OperationType.CLIENT_MESSAGE,
- /* isPayloadEncrypted= */ false,
- mSendMessageCallback);
- mEnrollmentState++;
- }
-
- private void notifyEscrowTokenReceived(byte[] token) {
- try {
- mEnrollmentDelegate.addEscrowToken(
- mEncryptionKey.decryptData(token), ActivityManager.getCurrentUser());
- mEnrollmentState++;
- logEnrollmentEvent(ESCROW_TOKEN_ADDED);
- } catch (SignatureException e) {
- Log.e(TAG, "Could not decrypt escrow token", e);
- }
- }
-
- /**
- * Processes the given message as one that will establish encryption for secure communication.
- *
- * <p>This method should be called continually until {@link #mEncryptionState} is
- * {@link HandshakeState#FINISHED}, meaning an secure channel has been set up.
- *
- * @param message The message received from the connected device.
- * @throws HandshakeException If an error was encountered during the handshake flow.
- */
- private void processInitEncryptionMessage(byte[] message) throws HandshakeException {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Processing init encryption message.");
- }
- switch (mEncryptionState) {
- case HandshakeState.UNKNOWN:
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Responding to handshake init request.");
- }
-
- mHandshakeMessage = mEncryptionRunner.respondToInitRequest(message);
- mEncryptionState = mHandshakeMessage.getHandshakeState();
- mCarTrustAgentBleManager.sendMessage(
- mHandshakeMessage.getNextMessage(),
- OperationType.ENCRYPTION_HANDSHAKE, /* isPayloadEncrypted= */ false,
- mSendMessageCallback);
-
- logEnrollmentEvent(ENROLLMENT_ENCRYPTION_STATE, mEncryptionState);
- break;
-
- case HandshakeState.IN_PROGRESS:
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Continuing handshake.");
- }
-
- mHandshakeMessage = mEncryptionRunner.continueHandshake(message);
- mEncryptionState = mHandshakeMessage.getHandshakeState();
-
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Updated encryption state: " + mEncryptionState);
- }
-
- // The state is updated after a call to continueHandshake(). Thus, need to check
- // if we're in the next stage.
- if (mEncryptionState == HandshakeState.VERIFICATION_NEEDED) {
- showVerificationCode();
- return;
- }
- mCarTrustAgentBleManager.sendMessage(
- mHandshakeMessage.getNextMessage(), OperationType.ENCRYPTION_HANDSHAKE,
- /* isPayloadEncrypted= */ false, mSendMessageCallback);
- break;
- case HandshakeState.VERIFICATION_NEEDED:
- Log.w(TAG, "Encountered VERIFICATION_NEEDED state when it should have been "
- + "transitioned to after IN_PROGRESS.");
- // This case should never happen because this state should occur right after
- // a call to "continueHandshake". But just in case, call the appropriate method.
- showVerificationCode();
- break;
-
- case HandshakeState.FINISHED:
- // Should never reach this case since this state should occur after a verification
- // code has been accepted. But it should mean handshake is done and the message
- // is one for the escrow token.
- notifyEscrowTokenReceived(message);
- break;
-
- default:
- Log.w(TAG, "Encountered invalid handshake state: " + mEncryptionState);
- break;
- }
- }
-
- private void showVerificationCode() {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "showVerificationCode(): " + mHandshakeMessage.getVerificationCode());
- }
-
- for (EnrollmentStateClient client : mEnrollmentStateClients) {
- try {
- client.mListener.onAuthStringAvailable(mRemoteEnrollmentDevice,
- mHandshakeMessage.getVerificationCode());
- } catch (RemoteException e) {
- Log.e(TAG, "Broadcast verification code failed", e);
- }
- }
- logEnrollmentEvent(SHOW_VERIFICATION_CODE);
- }
-
- /**
- * Reset the whole enrollment state. Disconnects the peer device and removes any escrow token
- * that has not been activated.
- *
- * <p>This method should be called from any stage in the middle of enrollment where we
- * encounter a failure.
- */
- private void resetEnrollmentStateOnFailure() {
- terminateEnrollmentHandshake();
- resetEncryptionState();
- }
-
- /**
- * Resets the encryption status of this service.
- *
- * <p>This method should be called each time a device connects so that a new handshake can be
- * started and encryption keys exchanged.
- */
- private void resetEncryptionState() {
- mEncryptionRunner = EncryptionRunnerFactory.newRunner();
- mHandshakeMessage = null;
- mEncryptionKey = null;
- mEncryptionState = HandshakeState.UNKNOWN;
- mEnrollmentState = ENROLLMENT_STATE_NONE;
- }
-
- private synchronized void setEnrollmentHandshakeAccepted() {
- if (mEncryptionRunner == null) {
- Log.e(TAG, "Received notification that enrollment handshake was accepted, "
- + "but encryption was never set up.");
- return;
- }
- HandshakeMessage message;
- try {
- message = mEncryptionRunner.verifyPin();
- } catch (HandshakeException e) {
- Log.e(TAG, "Error during PIN verification", e);
- resetEnrollmentStateOnFailure();
- dispatchEnrollmentFailure(ENROLLMENT_HANDSHAKE_FAILURE);
- return;
- }
-
- if (message.getHandshakeState() != HandshakeState.FINISHED) {
- Log.e(TAG, "Handshake not finished after calling verify PIN. Instead got state: "
- + message.getHandshakeState());
- return;
- }
-
- mEncryptionState = HandshakeState.FINISHED;
- mEncryptionKey = message.getKey();
- if (!mCarCompanionDeviceStorage.saveEncryptionKey(mClientDeviceId,
- mEncryptionKey.asBytes())) {
- resetEnrollmentStateOnFailure();
- dispatchEnrollmentFailure(ENROLLMENT_HANDSHAKE_FAILURE);
- return;
- }
- logEnrollmentEvent(ENCRYPTION_KEY_SAVED);
- mEnrollmentState++;
- }
-
- /**
- * Iterates through the list of registered Enrollment State Change clients -
- * {@link EnrollmentStateClient} and finds if the given client is already registered.
- *
- * @param listener Listener to look for.
- * @return the {@link EnrollmentStateClient} if found, null if not
- */
- @Nullable
- private EnrollmentStateClient findEnrollmentStateClientLocked(
- ICarTrustAgentEnrollmentCallback listener) {
- IBinder binder = listener.asBinder();
- // Find the listener by comparing the binder object they host.
- for (EnrollmentStateClient client : mEnrollmentStateClients) {
- if (client.isHoldingBinder(binder)) {
- return client;
- }
- }
- return null;
- }
-
- /**
- * Unregister the given Enrollment State Change listener
- *
- * @param listener client to unregister
- */
- @Override
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public synchronized void unregisterEnrollmentCallback(
- ICarTrustAgentEnrollmentCallback listener) {
- ICarImpl.assertTrustAgentEnrollmentPermission(mContext);
- if (listener == null) {
- throw new IllegalArgumentException("Listener is null");
- }
-
- EnrollmentStateClient client = findEnrollmentStateClientLocked(listener);
- if (client == null) {
- Log.e(TAG, "unregisterEnrollmentCallback(): listener was not previously "
- + "registered");
- return;
- }
- listener.asBinder().unlinkToDeath(client, 0);
- mEnrollmentStateClients.remove(client);
- }
-
- /**
- * Registers a {@link ICarTrustAgentBleCallback} to be notified for changes to the BLE state
- * changes.
- *
- * @param listener {@link ICarTrustAgentBleCallback}
- */
- @Override
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public synchronized void registerBleCallback(ICarTrustAgentBleCallback listener) {
- ICarImpl.assertTrustAgentEnrollmentPermission(mContext);
- if (listener == null) {
- throw new IllegalArgumentException("Listener is null");
- }
- // If a new client is registering, create a new EnrollmentStateClient and add it to the list
- // of listening clients.
- BleStateChangeClient client = findBleStateClientLocked(listener);
- if (client == null) {
- client = new BleStateChangeClient(listener);
- try {
- listener.asBinder().linkToDeath(client, 0);
- } catch (RemoteException e) {
- Log.e(TAG, "Cannot link death recipient to binder " + e);
- return;
- }
- mBleStateChangeClients.add(client);
- }
- }
-
- /**
- * Iterates through the list of registered BLE State Change clients -
- * {@link BleStateChangeClient} and finds if the given client is already registered.
- *
- * @param listener Listener to look for.
- * @return the {@link BleStateChangeClient} if found, null if not
- */
- @Nullable
- private BleStateChangeClient findBleStateClientLocked(
- ICarTrustAgentBleCallback listener) {
- IBinder binder = listener.asBinder();
- // Find the listener by comparing the binder object they host.
- for (BleStateChangeClient client : mBleStateChangeClients) {
- if (client.isHoldingBinder(binder)) {
- return client;
- }
- }
- return null;
- }
-
- /**
- * Unregister the given BLE State Change listener
- *
- * @param listener client to unregister
- */
- @Override
- @RequiresPermission(PERMISSION_CAR_ENROLL_TRUST)
- public synchronized void unregisterBleCallback(ICarTrustAgentBleCallback listener) {
- ICarImpl.assertTrustAgentEnrollmentPermission(mContext);
- if (listener == null) {
- throw new IllegalArgumentException("Listener is null");
- }
-
- BleStateChangeClient client = findBleStateClientLocked(listener);
- if (client == null) {
- Log.e(TAG, "unregisterBleCallback(): listener was not previously "
- + "registered");
- return;
- }
- listener.asBinder().unlinkToDeath(client, 0);
- mBleStateChangeClients.remove(client);
- }
-
- /**
- * The interface that an enrollment delegate has to implement to add/remove escrow tokens.
- */
- interface CarTrustAgentEnrollmentRequestDelegate {
- /**
- * Add the given escrow token that was generated by the peer device that is being enrolled.
- *
- * @param token the 64 bit token
- * @param uid user id
- */
- void addEscrowToken(byte[] token, int uid);
-
- /**
- * Remove the given escrow token. This should be called when removing a trusted device.
- *
- * @param handle the 64 bit token
- * @param uid user id
- */
- void removeEscrowToken(long handle, int uid);
-
- /**
- * Query if the token is active. The result is asynchronously delivered through a callback
- * {@link CarTrustAgentEnrollmentService#onEscrowTokenActiveStateChanged(long, boolean,
- * int)}
- *
- * @param handle the 64 bit token
- * @param uid user id
- */
- void isEscrowTokenActive(long handle, int uid);
- }
-
- void setEnrollmentRequestDelegate(CarTrustAgentEnrollmentRequestDelegate delegate) {
- mEnrollmentDelegate = delegate;
- }
-
- void dump(PrintWriter writer) {
- writer.println("*CarTrustAgentEnrollmentService*");
- writer.println("Enrollment Service Logs:");
- for (String log : mLogQueue) {
- writer.println("\t" + log);
- }
- }
-
- private void addEnrollmentServiceLog(String message) {
- if (mLogQueue.size() >= MAX_LOG_SIZE) {
- mLogQueue.remove();
- }
- mLogQueue.add(System.currentTimeMillis() + " : " + message);
- }
-
- private void dispatchEscrowTokenActiveStateChanged(long handle, boolean active) {
- for (EnrollmentStateClient client : mEnrollmentStateClients) {
- try {
- client.mListener.onEscrowTokenActiveStateChanged(handle, active);
- } catch (RemoteException e) {
- Log.e(TAG, "Cannot notify client of a Token Activation change: " + active);
- }
- }
- }
-
- private void dispatchEnrollmentFailure(int error) {
- for (EnrollmentStateClient client : mEnrollmentStateClients) {
- try {
- client.mListener.onEnrollmentHandshakeFailure(null, error);
- } catch (RemoteException e) {
- Log.e(TAG, "onEnrollmentHandshakeFailure dispatch failed", e);
- }
- }
- }
-
- /**
- * Currently, we store a map of uid -> a set of deviceId+deviceInfo strings
- * This method extracts deviceInfo from a device+deviceInfo string, which should be
- * created by {@link #serializeDeviceInfoWithId(TrustedDeviceInfo, String)}
- *
- * @param deviceInfoWithId deviceId+deviceInfo string
- */
- @Nullable
- private static TrustedDeviceInfo extractDeviceInfo(String deviceInfoWithId) {
- int delimiterIndex = deviceInfoWithId.indexOf(DEVICE_INFO_DELIMITER);
- if (delimiterIndex < 0) {
- return null;
- }
- return TrustedDeviceInfo.deserialize(deviceInfoWithId.substring(delimiterIndex + 1));
- }
-
- /**
- * Extract deviceId from a deviceId+deviceInfo string which should be created by
- * {@link #serializeDeviceInfoWithId(TrustedDeviceInfo, String)}
- *
- * @param deviceInfoWithId deviceId+deviceInfo string
- */
- @Nullable
- private static String extractDeviceId(String deviceInfoWithId) {
- int delimiterIndex = deviceInfoWithId.indexOf(DEVICE_INFO_DELIMITER);
- if (delimiterIndex < 0) {
- return null;
- }
- return deviceInfoWithId.substring(0, delimiterIndex);
- }
-
- // Create deviceId+deviceInfo string
- private static String serializeDeviceInfoWithId(TrustedDeviceInfo info, String id) {
- return new StringBuilder()
- .append(id)
- .append(DEVICE_INFO_DELIMITER)
- .append(info.serialize())
- .toString();
- }
-
- /**
- * Class that holds onto client related information - listener interface, process that hosts the
- * binder object etc.
- * <p>
- * It also registers for death notifications of the host.
- */
- private class EnrollmentStateClient implements DeathRecipient {
- private final IBinder mListenerBinder;
- private final ICarTrustAgentEnrollmentCallback mListener;
-
- EnrollmentStateClient(ICarTrustAgentEnrollmentCallback listener) {
- mListener = listener;
- mListenerBinder = listener.asBinder();
- }
-
- @Override
- public void binderDied() {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Binder died " + mListenerBinder);
- }
- mListenerBinder.unlinkToDeath(this, 0);
- synchronized (CarTrustAgentEnrollmentService.this) {
- mEnrollmentStateClients.remove(this);
- }
- }
-
- /**
- * Returns if the given binder object matches to what this client info holds.
- * Used to check if the listener asking to be registered is already registered.
- *
- * @return true if matches, false if not
- */
- public boolean isHoldingBinder(IBinder binder) {
- return mListenerBinder == binder;
- }
- }
-
- private class BleStateChangeClient implements DeathRecipient {
- private final IBinder mListenerBinder;
- private final ICarTrustAgentBleCallback mListener;
-
- BleStateChangeClient(ICarTrustAgentBleCallback listener) {
- mListener = listener;
- mListenerBinder = listener.asBinder();
- }
-
- @Override
- public void binderDied() {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Binder died " + mListenerBinder);
- }
- mListenerBinder.unlinkToDeath(this, 0);
- synchronized (CarTrustAgentEnrollmentService.this) {
- mBleStateChangeClients.remove(this);
- }
- }
-
- /**
- * Returns if the given binder object matches to what this client info holds.
- * Used to check if the listener asking to be registered is already registered.
- *
- * @return true if matches, false if not
- */
- public boolean isHoldingBinder(IBinder binder) {
- return mListenerBinder == binder;
- }
-
- public void onEnrollmentAdvertisementStarted() {
- try {
- mListener.onEnrollmentAdvertisingStarted();
- } catch (RemoteException e) {
- Log.e(TAG, "onEnrollmentAdvertisementStarted() failed", e);
- }
- }
- }
-
- /**
- * Returns the name that should be used for the device during enrollment of a trusted device.
- *
- * <p>The returned name will be a combination of a prefix sysprop and randomized digits.
- */
- private String getEnrollmentDeviceName() {
- if (mEnrollmentDeviceName == null) {
- String deviceNamePrefix = CarProperties.trusted_device_device_name_prefix().orElse("");
- deviceNamePrefix = deviceNamePrefix.substring(
- 0, Math.min(deviceNamePrefix.length(), DEVICE_NAME_PREFIX_LIMIT));
-
- int randomNameLength = DEVICE_NAME_LENGTH_LIMIT - deviceNamePrefix.length();
- String randomName = Utils.generateRandomNumberString(randomNameLength);
- mEnrollmentDeviceName = deviceNamePrefix + randomName;
- }
- return mEnrollmentDeviceName;
- }
-}
diff --git a/service/src/com/android/car/trust/CarTrustAgentUnlockService.java b/service/src/com/android/car/trust/CarTrustAgentUnlockService.java
deleted file mode 100644
index a163dba..0000000
--- a/service/src/com/android/car/trust/CarTrustAgentUnlockService.java
+++ /dev/null
@@ -1,499 +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.car.trust;
-
-import static com.android.car.trust.EventLog.CLIENT_AUTHENTICATED;
-import static com.android.car.trust.EventLog.RECEIVED_DEVICE_ID;
-import static com.android.car.trust.EventLog.REMOTE_DEVICE_CONNECTED;
-import static com.android.car.trust.EventLog.START_UNLOCK_ADVERTISING;
-import static com.android.car.trust.EventLog.STOP_UNLOCK_ADVERTISING;
-import static com.android.car.trust.EventLog.UNLOCK_CREDENTIALS_RECEIVED;
-import static com.android.car.trust.EventLog.UNLOCK_ENCRYPTION_STATE;
-import static com.android.car.trust.EventLog.UNLOCK_SERVICE_INIT;
-import static com.android.car.trust.EventLog.WAITING_FOR_CLIENT_AUTH;
-import static com.android.car.trust.EventLog.logUnlockEvent;
-
-import android.annotation.IntDef;
-import android.annotation.Nullable;
-import android.bluetooth.BluetoothDevice;
-import android.car.encryptionrunner.EncryptionRunner;
-import android.car.encryptionrunner.EncryptionRunnerFactory;
-import android.car.encryptionrunner.HandshakeException;
-import android.car.encryptionrunner.HandshakeMessage;
-import android.car.encryptionrunner.Key;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.util.Log;
-
-import com.android.car.BLEStreamProtos.BLEOperationProto.OperationType;
-import com.android.car.PhoneAuthProtos.PhoneAuthProto.PhoneCredentials;
-import com.android.car.R;
-import com.android.car.Utils;
-import com.android.car.protobuf.InvalidProtocolBufferException;
-import com.android.car.trust.CarTrustAgentBleManager.SendMessageCallback;
-import com.android.internal.annotations.GuardedBy;
-
-import java.io.PrintWriter;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.security.SignatureException;
-import java.util.LinkedList;
-import java.util.Queue;
-import java.util.UUID;
-
-/**
- * A service that interacts with the Trust Agent {@link CarBleTrustAgent} and a comms (BLE) service
- * {@link CarTrustAgentBleManager} to receive the necessary credentials to authenticate
- * an Android user.
- *
- * <p>
- * The unlock flow is as follows:
- * <ol>
- * <li>IHU advertises via BLE when it is in a locked state. The advertisement includes its
- * identifier.
- * <li>Phone (Trusted device) scans, finds and connects to the IHU.
- * <li>Protocol versions are exchanged and verified.
- * <li>Phone sends its identifier in plain text.
- * <li>IHU verifies that the phone is enrolled as a trusted device from its identifier.
- * <li>IHU, then sends an ACK back to the phone.
- * <li>Phone & IHU go over the key exchange (using UKEY2) for encrypting this new session.
- * <li>Key exchange is completed without any numeric comparison.
- * <li>Phone sends its MAC (digest) that is computed from the context from this new session and the
- * previous session.
- * <li>IHU computes Phone's MAC and validates against what the phone sent. On validation failure,
- * the stored encryption keys for the phone are deleted. This would require the phone to re-enroll
- * again.
- * <li>IHU sends its MAC that is computed similarly from the new session and previous session
- * contexts.
- * <li>Phone computes IHU's MAC internally and validates it against what it received.
- * <li>At this point, the devices have mutually authenticated each other and also have keys to
- * encrypt
- * current session.
- * <li>IHU saves the current session keys. This would serve for authenticating the next session.
- * <li>Phone sends the encrypted escrow token and handle to the IHU.
- * <li>IHU retrieves the user id and authenticates the user.
- * </ol>
- *
- * @deprecated Unlocking of a trusted device is no longer a supported feature of car service and
- * these APIs will be removed in the next Android release.
- */
-@Deprecated
-public class CarTrustAgentUnlockService {
- private static final String TAG = "CarTrustAgentUnlock";
- private static final String TRUSTED_DEVICE_UNLOCK_ENABLED_KEY = "trusted_device_unlock_enabled";
-
- // Arbitrary log size
- private static final int MAX_LOG_SIZE = 20;
-
- private static final byte[] ACKNOWLEDGEMENT_MESSAGE = "ACK".getBytes();
-
- // State of the unlock process. Important to maintain the same order in both phone and IHU.
- // State increments to the next state on successful completion.
- private static final int UNLOCK_STATE_WAITING_FOR_UNIQUE_ID = 0;
- private static final int UNLOCK_STATE_KEY_EXCHANGE_IN_PROGRESS = 1;
- private static final int UNLOCK_STATE_MUTUAL_AUTH_ESTABLISHED = 2;
- private static final int UNLOCK_STATE_PHONE_CREDENTIALS_RECEIVED = 3;
-
- /** @hide */
- @Retention(RetentionPolicy.SOURCE)
- @IntDef(prefix = {"UNLOCK_STATE_"},
- value = {UNLOCK_STATE_WAITING_FOR_UNIQUE_ID, UNLOCK_STATE_KEY_EXCHANGE_IN_PROGRESS,
- UNLOCK_STATE_MUTUAL_AUTH_ESTABLISHED, UNLOCK_STATE_PHONE_CREDENTIALS_RECEIVED})
- @interface UnlockState {
- }
-
- @UnlockState
- private int mCurrentUnlockState = UNLOCK_STATE_WAITING_FOR_UNIQUE_ID;
-
- private final CarTrustedDeviceService mTrustedDeviceService;
- private final CarCompanionDeviceStorage mCarCompanionDeviceStorage;
- private final CarTrustAgentBleManager mCarTrustAgentBleManager;
- private CarTrustAgentUnlockDelegate mUnlockDelegate;
- private String mClientDeviceId;
- private final Queue<String> mLogQueue = new LinkedList<>();
- private final UUID mUnlockClientWriteUuid;
- private SendMessageCallback mSendMessageCallback;
-
- // Locks
- private final Object mDeviceLock = new Object();
-
- @GuardedBy("mDeviceLock")
- private BluetoothDevice mRemoteUnlockDevice;
-
- private EncryptionRunner mEncryptionRunner = EncryptionRunnerFactory.newRunner();
- private Key mEncryptionKey;
- @HandshakeMessage.HandshakeState
- private int mEncryptionState = HandshakeMessage.HandshakeState.UNKNOWN;
-
- CarTrustAgentUnlockService(Context context, CarTrustedDeviceService service,
- CarTrustAgentBleManager bleService) {
- mTrustedDeviceService = service;
- mCarTrustAgentBleManager = bleService;
- mUnlockClientWriteUuid = UUID.fromString(context
- .getString(R.string.unlock_client_write_uuid));
- mEncryptionRunner.setIsReconnect(true);
- mSendMessageCallback = () -> mCarTrustAgentBleManager.disconnectRemoteDevice();
- mCarCompanionDeviceStorage = new CarCompanionDeviceStorage(context);
- }
-
- /**
- * The interface that an unlock delegate has to implement to get the auth credentials from
- * the unlock service.
- */
- interface CarTrustAgentUnlockDelegate {
- /**
- * Called when the Unlock service has the auth credentials to pass.
- *
- * @param user user being authorized
- * @param token escrow token for the user
- * @param handle the handle corresponding to the escrow token
- */
- void onUnlockDataReceived(int user, byte[] token, long handle);
- }
-
- /**
- * Enable or disable authentication of the head unit with a trusted device.
- *
- * @param isEnabled when set to {@code false}, head unit will not be
- * discoverable to unlock the user. Setting it to {@code true} will enable it
- * back.
- */
- public void setTrustedDeviceUnlockEnabled(boolean isEnabled) {
- SharedPreferences.Editor editor = mCarCompanionDeviceStorage.getSharedPrefs().edit();
- editor.putBoolean(TRUSTED_DEVICE_UNLOCK_ENABLED_KEY, isEnabled);
- if (!editor.commit()) {
- Log.wtf(TAG, "Unlock Enable Failed. Enable? " + isEnabled);
- }
- }
-
- /**
- * Set a delegate that implements {@link CarTrustAgentUnlockDelegate}. The delegate will be
- * handed the auth related data (token and handle) when it is received from the remote
- * trusted device. The delegate is expected to use that to authorize the user.
- */
- void setUnlockRequestDelegate(CarTrustAgentUnlockDelegate delegate) {
- mUnlockDelegate = delegate;
- }
-
- /**
- * Start Unlock Advertising
- */
- void startUnlockAdvertising() {
- if (!mCarCompanionDeviceStorage.getSharedPrefs().getBoolean(
- TRUSTED_DEVICE_UNLOCK_ENABLED_KEY, true)) {
- Log.e(TAG, "Trusted Device Unlock is disabled");
- return;
- }
- mTrustedDeviceService.getCarTrustAgentEnrollmentService().stopEnrollmentAdvertising();
- stopUnlockAdvertising();
-
- logUnlockEvent(START_UNLOCK_ADVERTISING);
- queueMessageForLog("startUnlockAdvertising");
- mCarTrustAgentBleManager.setUniqueId(mCarCompanionDeviceStorage.getUniqueId());
- mCarTrustAgentBleManager.startUnlockAdvertising();
- }
-
- /**
- * Stop unlock advertising
- */
- void stopUnlockAdvertising() {
- logUnlockEvent(STOP_UNLOCK_ADVERTISING);
- queueMessageForLog("stopUnlockAdvertising");
- mCarTrustAgentBleManager.stopUnlockAdvertising();
- // Also disconnect from the peer.
- if (mRemoteUnlockDevice != null) {
- mCarTrustAgentBleManager.disconnectRemoteDevice();
- mRemoteUnlockDevice = null;
- }
- }
-
- void init() {
- logUnlockEvent(UNLOCK_SERVICE_INIT);
- mCarTrustAgentBleManager.setupUnlockBleServer();
- mCarTrustAgentBleManager.addDataReceivedListener(mUnlockClientWriteUuid,
- this::onUnlockDataReceived);
- }
-
- void release() {
- synchronized (mDeviceLock) {
- mRemoteUnlockDevice = null;
- }
- }
-
- void onRemoteDeviceConnected(BluetoothDevice device) {
- synchronized (mDeviceLock) {
- if (mRemoteUnlockDevice != null) {
- // TBD, return when this is encountered?
- Log.e(TAG, "Unexpected: Cannot connect to another device when already connected");
- }
- queueMessageForLog("onRemoteDeviceConnected (addr:" + device.getAddress() + ")");
- logUnlockEvent(REMOTE_DEVICE_CONNECTED);
- mRemoteUnlockDevice = device;
- }
- resetEncryptionState();
- mCurrentUnlockState = UNLOCK_STATE_WAITING_FOR_UNIQUE_ID;
- }
-
- void onRemoteDeviceDisconnected(BluetoothDevice device) {
- // sanity checking
- if (!device.equals(mRemoteUnlockDevice) && device.getAddress() != null) {
- Log.e(TAG, "Disconnected from an unknown device:" + device.getAddress());
- }
- queueMessageForLog("onRemoteDeviceDisconnected (addr:" + device.getAddress() + ")");
- synchronized (mDeviceLock) {
- mRemoteUnlockDevice = null;
- }
- resetEncryptionState();
- mCurrentUnlockState = UNLOCK_STATE_WAITING_FOR_UNIQUE_ID;
- }
-
- void onUnlockDataReceived(byte[] value) {
- switch (mCurrentUnlockState) {
- case UNLOCK_STATE_WAITING_FOR_UNIQUE_ID:
- if (!CarTrustAgentValidator.isValidUnlockDeviceId(value)) {
- Log.e(TAG, "Device Id rejected by validator.");
- resetUnlockStateOnFailure();
- return;
- }
- mClientDeviceId = convertToDeviceId(value);
- if (mClientDeviceId == null) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Phone not enrolled as a trusted device");
- }
- resetUnlockStateOnFailure();
- return;
- }
- logUnlockEvent(RECEIVED_DEVICE_ID);
- sendAckToClient(/* isEncrypted = */ false);
- // Next step is to wait for the client to start the encryption handshake.
- mCurrentUnlockState = UNLOCK_STATE_KEY_EXCHANGE_IN_PROGRESS;
- break;
- case UNLOCK_STATE_KEY_EXCHANGE_IN_PROGRESS:
- try {
- processKeyExchangeHandshakeMessage(value);
- } catch (HandshakeException e) {
- Log.e(TAG, "Handshake failure", e);
- resetUnlockStateOnFailure();
- }
- break;
- case UNLOCK_STATE_MUTUAL_AUTH_ESTABLISHED:
- if (mEncryptionKey == null) {
- Log.e(TAG, "Current session key null. Unexpected at this stage: "
- + mCurrentUnlockState);
- // Clear the previous session key. Need to re-enroll the trusted device.
- mCarCompanionDeviceStorage.clearEncryptionKey(mClientDeviceId);
- resetUnlockStateOnFailure();
- return;
- }
-
- // Save the current session to be used for authenticating the next session
- mCarCompanionDeviceStorage.saveEncryptionKey(mClientDeviceId,
- mEncryptionKey.asBytes());
-
- byte[] decryptedCredentials;
- try {
- decryptedCredentials = mEncryptionKey.decryptData(value);
- } catch (SignatureException e) {
- Log.e(TAG, "Could not decrypt phone credentials.", e);
- resetUnlockStateOnFailure();
- return;
- }
-
- processCredentials(decryptedCredentials);
- mCurrentUnlockState = UNLOCK_STATE_PHONE_CREDENTIALS_RECEIVED;
- logUnlockEvent(UNLOCK_CREDENTIALS_RECEIVED);
-
- // Let the phone know that the token was received.
- sendAckToClient(/* isEncrypted = */ true);
- break;
- case UNLOCK_STATE_PHONE_CREDENTIALS_RECEIVED:
- // Should never get here because the unlock process should be completed now.
- Log.e(TAG, "Landed on unexpected state of credentials received.");
- break;
- default:
- Log.e(TAG, "Encountered unexpected unlock state: " + mCurrentUnlockState);
- }
- }
-
- private void sendAckToClient(boolean isEncrypted) {
- // Let the phone know that the handle was received.
- byte[] ack = isEncrypted ? mEncryptionKey.encryptData(ACKNOWLEDGEMENT_MESSAGE)
- : ACKNOWLEDGEMENT_MESSAGE;
- mCarTrustAgentBleManager.sendMessage(ack,
- OperationType.CLIENT_MESSAGE, /* isPayloadEncrypted= */ isEncrypted,
- mSendMessageCallback);
- }
-
- @Nullable
- private String convertToDeviceId(byte[] id) {
- // Validate if the id exists i.e., if the phone is enrolled already
- UUID deviceId = Utils.bytesToUUID(id);
- if (deviceId == null
- || mCarCompanionDeviceStorage.getEncryptionKey(deviceId.toString()) == null) {
- if (deviceId != null) {
- Log.e(TAG, "Unknown phone connected: " + deviceId.toString());
- }
- return null;
- }
-
- return deviceId.toString();
- }
-
- private void processKeyExchangeHandshakeMessage(byte[] message) throws HandshakeException {
- HandshakeMessage handshakeMessage;
- switch (mEncryptionState) {
- case HandshakeMessage.HandshakeState.UNKNOWN:
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Responding to handshake init request.");
- }
-
- handshakeMessage = mEncryptionRunner.respondToInitRequest(message);
- mEncryptionState = handshakeMessage.getHandshakeState();
- mCarTrustAgentBleManager.sendMessage(
- handshakeMessage.getNextMessage(),
- OperationType.ENCRYPTION_HANDSHAKE,
- /* isPayloadEncrypted= */ false, mSendMessageCallback);
- logUnlockEvent(UNLOCK_ENCRYPTION_STATE, mEncryptionState);
- break;
-
- case HandshakeMessage.HandshakeState.IN_PROGRESS:
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Continuing handshake.");
- }
-
- handshakeMessage = mEncryptionRunner.continueHandshake(message);
- mEncryptionState = handshakeMessage.getHandshakeState();
-
- logUnlockEvent(UNLOCK_ENCRYPTION_STATE, mEncryptionState);
-
- if (mEncryptionState != HandshakeMessage.HandshakeState.RESUMING_SESSION) {
- Log.e(TAG,
- "Handshake did not went to resume session after calling verify PIN. "
- + "Instead got state: " + mEncryptionState);
- resetUnlockStateOnFailure();
- return;
- }
- logUnlockEvent(WAITING_FOR_CLIENT_AUTH);
- break;
- case HandshakeMessage.HandshakeState.RESUMING_SESSION:
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "Start reconnection authentication.");
- }
- if (mClientDeviceId == null) {
- resetUnlockStateOnFailure();
- return;
- }
- handshakeMessage = mEncryptionRunner.authenticateReconnection(
- message, mCarCompanionDeviceStorage.getEncryptionKey(mClientDeviceId));
- mEncryptionKey = handshakeMessage.getKey();
- mEncryptionState = handshakeMessage.getHandshakeState();
- logUnlockEvent(UNLOCK_ENCRYPTION_STATE, mEncryptionState);
- if (mEncryptionState != HandshakeMessage.HandshakeState.FINISHED) {
- resetUnlockStateOnFailure();
- return;
- }
- mCurrentUnlockState = UNLOCK_STATE_MUTUAL_AUTH_ESTABLISHED;
- sendServerAuthToClient(handshakeMessage.getNextMessage());
- logUnlockEvent(CLIENT_AUTHENTICATED);
- break;
- case HandshakeMessage.HandshakeState.VERIFICATION_NEEDED:
- case HandshakeMessage.HandshakeState.FINISHED:
- // Should never reach this case since this state should occur after a verification
- // code has been accepted. But it should mean handshake is done and the message
- // is one for the escrow token. Waiting Mutual Auth from client, authenticate,
- // compute MACs and send it over
- default:
- Log.w(TAG, "Encountered invalid handshake state: " + mEncryptionState);
- break;
- }
- }
-
- private void sendServerAuthToClient(byte[] resumeBytes) {
- // send to client
- mCarTrustAgentBleManager.sendMessage(resumeBytes,
- OperationType.CLIENT_MESSAGE, /* isPayloadEncrypted= */false,
- mSendMessageCallback);
- }
-
- void processCredentials(byte[] credentials) {
- if (mUnlockDelegate == null) {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "No Unlock delegate to notify of unlock credentials.");
- }
- return;
- }
-
- queueMessageForLog("processCredentials");
-
- PhoneCredentials phoneCredentials;
- try {
- phoneCredentials = PhoneCredentials.parseFrom(credentials);
- } catch (InvalidProtocolBufferException e) {
- Log.e(TAG, "Error parsing credentials protobuf.", e);
- return;
- }
-
- byte[] handle = phoneCredentials.getHandle().toByteArray();
-
- mUnlockDelegate.onUnlockDataReceived(
- mCarCompanionDeviceStorage.getUserHandleByTokenHandle(Utils.bytesToLong(handle)),
- phoneCredentials.getEscrowToken().toByteArray(),
- Utils.bytesToLong(handle));
- }
-
- /**
- * Reset the whole unlock state. Disconnects from the peer device
- *
- * <p>This method should be called from any stage in the middle of unlock where we
- * encounter a failure.
- */
- private void resetUnlockStateOnFailure() {
- mCarTrustAgentBleManager.disconnectRemoteDevice();
- resetEncryptionState();
- }
-
- /**
- * Resets the encryption status of this service.
- *
- * <p>This method should be called each time a device connects so that a new handshake can be
- * started and encryption keys exchanged.
- */
- private void resetEncryptionState() {
- mEncryptionRunner = EncryptionRunnerFactory.newRunner();
- // It should always be a reconnection for unlock because only enrolled device can unlock
- // the IHU.
- mEncryptionRunner.setIsReconnect(true);
- mEncryptionKey = null;
- mEncryptionState = HandshakeMessage.HandshakeState.UNKNOWN;
- mCurrentUnlockState = UNLOCK_STATE_WAITING_FOR_UNIQUE_ID;
- }
-
- void dump(PrintWriter writer) {
- writer.println("*CarTrustAgentUnlockService*");
- writer.println("Unlock Service Logs:");
- for (String log : mLogQueue) {
- writer.println("\t" + log);
- }
- }
-
- private void queueMessageForLog(String message) {
- if (mLogQueue.size() >= MAX_LOG_SIZE) {
- mLogQueue.remove();
- }
- mLogQueue.add(System.currentTimeMillis() + " : " + message);
- }
-}
diff --git a/service/src/com/android/car/trust/CarTrustAgentValidator.java b/service/src/com/android/car/trust/CarTrustAgentValidator.java
deleted file mode 100644
index bb3bb6c..0000000
--- a/service/src/com/android/car/trust/CarTrustAgentValidator.java
+++ /dev/null
@@ -1,51 +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.car.trust;
-
-/**
- * A utility class that provides validations.
- */
-final class CarTrustAgentValidator {
-
- /**
- * Returns whether device id received during trust agent enrollment is valid.
- * <p>
- * Default implementation has no expectation (always returns true).
- *
- * @param value Data received in the initial state of enrollment.
- * @return {@code True} if input is valid; {@code false} otherwise.
- */
- static boolean isValidEnrollmentDeviceId(byte[] value) {
- return true;
- }
-
- /**
- * Returns whether device id received during trust agent unlock is valid.
- * <p>
- * Default implementation has no expectation (always returns true).
- *
- * @param value Data received in the initial state of unlocking.
- * @return {@code True} if input is valid; {@code false} otherwise.
- */
- static boolean isValidUnlockDeviceId(byte[] value) {
- return true;
- }
-
- private CarTrustAgentValidator() {
- // Do not instantiate.
- }
-}
diff --git a/service/src/com/android/car/trust/CarTrustedDeviceService.java b/service/src/com/android/car/trust/CarTrustedDeviceService.java
deleted file mode 100644
index 972ff64..0000000
--- a/service/src/com/android/car/trust/CarTrustedDeviceService.java
+++ /dev/null
@@ -1,146 +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.car.trust;
-
-import android.app.ActivityManager;
-import android.bluetooth.BluetoothDevice;
-import android.car.trust.TrustedDeviceInfo;
-import android.content.Context;
-import android.util.Log;
-
-import com.android.car.CarServiceBase;
-import com.android.car.trust.CarTrustAgentBleManager.BleEventCallback;
-
-import java.io.PrintWriter;
-import java.util.List;
-
-/**
- * The part of the Car service that enables the Trusted device feature. Trusted Device is a feature
- * where a remote device is enrolled as a trusted device that can authorize an Android user in lieu
- * of the user entering a password or PIN.
- * <p>
- * It is comprised of the {@link CarTrustAgentEnrollmentService} for handling enrollment and
- * {@link CarTrustAgentUnlockService} for handling unlock/auth.
- *
- * @deprecated Enrolling a trusted device is no longer a supported feature of car service and these
- * APIs will be removed in the next Android release.
- */
-@Deprecated
-public class CarTrustedDeviceService implements CarServiceBase, BleEventCallback {
- private static final String TAG = CarTrustedDeviceService.class.getSimpleName();
-
- private final Context mContext;
- private CarTrustAgentEnrollmentService mCarTrustAgentEnrollmentService;
- private CarTrustAgentUnlockService mCarTrustAgentUnlockService;
- private CarTrustAgentBleManager mCarTrustAgentBleManager;
-
- public CarTrustedDeviceService(Context context) {
- mContext = context;
- BlePeripheralManager blePeripheralManager = new BlePeripheralManager(context);
- mCarTrustAgentBleManager = new CarTrustAgentBleManager(context, blePeripheralManager);
- mCarTrustAgentEnrollmentService = new CarTrustAgentEnrollmentService(mContext, this,
- mCarTrustAgentBleManager);
- mCarTrustAgentUnlockService = new CarTrustAgentUnlockService(mContext, this,
- mCarTrustAgentBleManager);
- }
-
- @Override
- public synchronized void init() {
- mCarTrustAgentEnrollmentService.init();
- mCarTrustAgentUnlockService.init();
- mCarTrustAgentBleManager.addBleEventCallback(this);
- }
-
- @Override
- public synchronized void release() {
- mCarTrustAgentBleManager.cleanup();
- mCarTrustAgentEnrollmentService.release();
- mCarTrustAgentUnlockService.release();
- }
-
- /**
- * Returns the internal {@link CarTrustAgentEnrollmentService} instance.
- */
- public CarTrustAgentEnrollmentService getCarTrustAgentEnrollmentService() {
- return mCarTrustAgentEnrollmentService;
- }
-
- /**
- * Returns the internal {@link CarTrustAgentUnlockService} instance.
- */
- public CarTrustAgentUnlockService getCarTrustAgentUnlockService() {
- return mCarTrustAgentUnlockService;
- }
-
- /**
- * Called when a remote device is connected
- *
- * @param device the remote device
- */
- @Override
- public void onRemoteDeviceConnected(BluetoothDevice device) {
- mCarTrustAgentEnrollmentService.onRemoteDeviceConnected(device);
- mCarTrustAgentUnlockService.onRemoteDeviceConnected(device);
- }
-
- @Override
- public void onRemoteDeviceDisconnected(BluetoothDevice device) {
- mCarTrustAgentEnrollmentService.onRemoteDeviceDisconnected(device);
- mCarTrustAgentUnlockService.onRemoteDeviceDisconnected(device);
- }
-
- @Override
- public void onClientDeviceNameRetrieved(String deviceName) {
- mCarTrustAgentEnrollmentService.onClientDeviceNameRetrieved(deviceName);
- }
-
- void cleanupBleService() {
- if (Log.isLoggable(TAG, Log.DEBUG)) {
- Log.d(TAG, "cleanupBleService");
- }
- mCarTrustAgentBleManager.stopGattServer();
- mCarTrustAgentBleManager.stopEnrollmentAdvertising();
- mCarTrustAgentBleManager.stopUnlockAdvertising();
- }
-
- @Override
- public void dump(PrintWriter writer) {
- writer.println("*CarTrustedDeviceService*");
- int uid = ActivityManager.getCurrentUser();
- writer.println("current user id: " + uid);
- List<TrustedDeviceInfo> deviceInfos = mCarTrustAgentEnrollmentService
- .getEnrolledDeviceInfosForUser(uid);
- writer.println(getDeviceInfoListString(uid, deviceInfos));
- mCarTrustAgentEnrollmentService.dump(writer);
- mCarTrustAgentUnlockService.dump(writer);
- }
-
- private static String getDeviceInfoListString(int uid, List<TrustedDeviceInfo> deviceInfos) {
- StringBuilder sb = new StringBuilder();
- sb.append("device list of (user : ").append(uid).append("):");
- if (deviceInfos != null && deviceInfos.size() > 0) {
- for (int i = 0; i < deviceInfos.size(); i++) {
- sb.append("\n\tdevice# ").append(i + 1).append(" : ")
- .append(deviceInfos.get(i).toString());
- }
- } else {
- sb.append("\n\tno device listed");
- }
- return sb.toString();
- }
-
-}
diff --git a/service/src/com/android/car/trust/EventLog.java b/service/src/com/android/car/trust/EventLog.java
deleted file mode 100644
index c27ce36..0000000
--- a/service/src/com/android/car/trust/EventLog.java
+++ /dev/null
@@ -1,101 +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.car.trust;
-
-import android.util.Log;
-
-/**
- * Helper class for logging trusted device related events, e.g. unlock process.
- *
- * Events are logged with timestamp in fixed format for parsing and further analyzing.
- */
-final class EventLog {
- private static final String UNLOCK_TAG = "CarTrustAgentUnlockEvent";
- private static final String ENROLL_TAG = "CarTrustAgentEnrollmentEvent";
-
- // Enrollment events.
- static final String STOP_ENROLLMENT_ADVERTISING = "STOP_ENROLLMENT_ADVERTISING";
- static final String START_ENROLLMENT_ADVERTISING = "START_ENROLLMENT_ADVERTISING";
- static final String ENROLLMENT_HANDSHAKE_ACCEPTED = "ENROLLMENT_HANDSHAKE_ACCEPTED";
- static final String ENROLLMENT_ENCRYPTION_STATE = "ENROLLMENT_ENCRYPTION_STATE";
- static final String SHOW_VERIFICATION_CODE = "SHOW_VERIFICATION_CODE";
- static final String ENCRYPTION_KEY_SAVED = "ENCRYPTION_KEY_SAVED";
- static final String ESCROW_TOKEN_ADDED = "ESCROW_TOKEN_ADDED";
-
- // Unlock events.
- static final String START_UNLOCK_ADVERTISING = "START_UNLOCK_ADVERTISING";
- static final String STOP_UNLOCK_ADVERTISING = "STOP_UNLOCK_ADVERTISING";
- static final String UNLOCK_SERVICE_INIT = "UNLOCK_SERVICE_INIT";
- static final String CLIENT_AUTHENTICATED = "CLIENT_AUTHENTICATED";
- static final String UNLOCK_CREDENTIALS_RECEIVED = "UNLOCK_CREDENTIALS_RECEIVED";
- static final String WAITING_FOR_CLIENT_AUTH = "WAITING_FOR_CLIENT_AUTH";
- static final String USER_UNLOCKED = "USER_UNLOCKED";
- static final String UNLOCK_ENCRYPTION_STATE = "UNLOCK_ENCRYPTION_STATE";
- static final String BLUETOOTH_STATE_CHANGED = "BLUETOOTH_STATE_CHANGED";
-
- // Shared events.
- static final String REMOTE_DEVICE_CONNECTED = "REMOTE_DEVICE_CONNECTED";
- static final String RECEIVED_DEVICE_ID = "RECEIVED_DEVICE_ID";
-
- private EventLog() {
- // Do not instantiate.
- }
-
- /**
- * Logs [timestamp and event] with unlock tag.
- * Format is "timestamp: <system time in milli-seconds> - <eventType>
- */
- static void logUnlockEvent(String eventType) {
- if (Log.isLoggable(UNLOCK_TAG, Log.INFO)) {
- Log.i(UNLOCK_TAG,
- String.format("timestamp: %d - %s", System.currentTimeMillis(), eventType));
- }
- }
-
- /**
- * Logs [timestamp, event, and value] with unlock tag.
- * Format is "timestamp: <system time in milli-seconds> - <eventType>: <value>
- */
- static void logUnlockEvent(String eventType, int value) {
- if (Log.isLoggable(UNLOCK_TAG, Log.INFO)) {
- Log.i(UNLOCK_TAG, String.format("timestamp: %d - %s: %d",
- System.currentTimeMillis(), eventType, value));
- }
- }
-
- /**
- * Logs [timestamp and event] with enrollment tag.
- * Format is "timestamp: <system time in milli-seconds> - <eventType>
- */
- static void logEnrollmentEvent(String eventType) {
- if (Log.isLoggable(ENROLL_TAG, Log.INFO)) {
- Log.i(ENROLL_TAG, String.format(
- "timestamp: %d - %s", System.currentTimeMillis(), eventType));
- }
- }
-
- /**
- * Logs [timestamp, event, and value] with enrollment tag.
- * Format is "timestamp: <system time in milli-seconds> - <eventType>: <value>
- */
- static void logEnrollmentEvent(String eventType, int value) {
- if (Log.isLoggable(ENROLL_TAG, Log.INFO)) {
- Log.i(ENROLL_TAG, String.format("timestamp: %d - %s: %d",
- System.currentTimeMillis(), eventType, value));
- }
- }
-}
diff --git a/service/src/com/android/car/user/CarUserNoticeService.java b/service/src/com/android/car/user/CarUserNoticeService.java
index 3e0891c..9001078 100644
--- a/service/src/com/android/car/user/CarUserNoticeService.java
+++ b/service/src/com/android/car/user/CarUserNoticeService.java
@@ -50,12 +50,11 @@
import android.view.IWindowManager;
import android.view.WindowManagerGlobal;
-import androidx.annotation.VisibleForTesting;
-
import com.android.car.CarLocalServices;
import com.android.car.CarServiceBase;
import com.android.car.R;
import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
import java.io.PrintWriter;
diff --git a/service/src/com/android/car/user/CarUserService.java b/service/src/com/android/car/user/CarUserService.java
index 1883a8a..2ac36a7 100644
--- a/service/src/com/android/car/user/CarUserService.java
+++ b/service/src/com/android/car/user/CarUserService.java
@@ -16,34 +16,39 @@
package com.android.car.user;
+import static android.Manifest.permission.CREATE_USERS;
+import static android.Manifest.permission.MANAGE_USERS;
+import static android.car.drivingstate.CarUxRestrictions.UX_RESTRICTIONS_NO_SETUP;
+
import static com.android.car.CarLog.TAG_USER;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.UserIdInt;
import android.app.ActivityManager;
-import android.app.ActivityManager.StackInfo;
+import android.app.ActivityTaskManager.RootTaskInfo;
import android.app.IActivityManager;
import android.car.CarOccupantZoneManager;
import android.car.CarOccupantZoneManager.OccupantTypeEnum;
import android.car.CarOccupantZoneManager.OccupantZoneInfo;
import android.car.ICarUserService;
+import android.car.drivingstate.CarUxRestrictions;
import android.car.settings.CarSettings;
import android.car.user.CarUserManager;
import android.car.user.CarUserManager.UserLifecycleEvent;
-import android.car.user.CarUserManager.UserLifecycleEventType;
import android.car.user.CarUserManager.UserLifecycleListener;
import android.car.user.UserCreationResult;
import android.car.user.UserIdentificationAssociationResponse;
import android.car.user.UserRemovalResult;
import android.car.user.UserSwitchResult;
-import android.car.userlib.CarUserManagerHelper;
-import android.car.userlib.CommonConstants.CarUserServiceConstants;
import android.car.userlib.HalCallback;
import android.car.userlib.UserHalHelper;
import android.car.userlib.UserHelper;
+import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.UserInfo;
@@ -52,7 +57,7 @@
import android.graphics.Bitmap;
import android.hardware.automotive.vehicle.V2_0.CreateUserRequest;
import android.hardware.automotive.vehicle.V2_0.CreateUserStatus;
-import android.hardware.automotive.vehicle.V2_0.InitialUserInfoResponse;
+import android.hardware.automotive.vehicle.V2_0.InitialUserInfoRequestType;
import android.hardware.automotive.vehicle.V2_0.InitialUserInfoResponseAction;
import android.hardware.automotive.vehicle.V2_0.RemoveUserRequest;
import android.hardware.automotive.vehicle.V2_0.SwitchUserRequest;
@@ -67,6 +72,7 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
+import android.os.Process;
import android.os.RemoteException;
import android.os.Trace;
import android.os.UserHandle;
@@ -77,15 +83,21 @@
import android.util.EventLog;
import android.util.Log;
import android.util.SparseArray;
+import android.util.SparseBooleanArray;
import android.util.TimingsTraceLog;
import com.android.car.CarServiceBase;
import com.android.car.CarServiceUtils;
+import com.android.car.CarUxRestrictionsManagerService;
import com.android.car.R;
import com.android.car.hal.UserHalService;
+import com.android.car.internal.common.CommonConstants.UserLifecycleEventType;
+import com.android.car.internal.common.EventLogTags;
+import com.android.car.internal.common.UserHelperLite;
+import com.android.car.power.CarPowerManagementService;
+import com.android.car.user.InitialUserSetter.InitialUserInfo;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.car.EventLogTags;
import com.android.internal.infra.AndroidFuture;
import com.android.internal.os.IResultReceiver;
import com.android.internal.util.ArrayUtils;
@@ -118,30 +130,29 @@
private static final String TAG = TAG_USER;
/** {@code int} extra used to represent a user id in a {@link IResultReceiver} response. */
- public static final String BUNDLE_USER_ID = CarUserServiceConstants.BUNDLE_USER_ID;
+ public static final String BUNDLE_USER_ID = "user.id";
/** {@code int} extra used to represent user flags in a {@link IResultReceiver} response. */
- public static final String BUNDLE_USER_FLAGS = CarUserServiceConstants.BUNDLE_USER_FLAGS;
+ public static final String BUNDLE_USER_FLAGS = "user.flags";
/** {@code String} extra used to represent a user name in a {@link IResultReceiver} response. */
- public static final String BUNDLE_USER_NAME = CarUserServiceConstants.BUNDLE_USER_NAME;
+ public static final String BUNDLE_USER_NAME = "user.name";
/**
* {@code int} extra used to represent the user locales in a {@link IResultReceiver} response.
*/
- public static final String BUNDLE_USER_LOCALES =
- CarUserServiceConstants.BUNDLE_USER_LOCALES;
+ public static final String BUNDLE_USER_LOCALES = "user.locales";
/**
* {@code int} extra used to represent the info action in a {@link IResultReceiver} response.
*/
- public static final String BUNDLE_INITIAL_INFO_ACTION =
- CarUserServiceConstants.BUNDLE_INITIAL_INFO_ACTION;
+ public static final String BUNDLE_INITIAL_INFO_ACTION = "initial_info.action";
public static final String VEHICLE_HAL_NOT_SUPPORTED = "Vehicle Hal not supported.";
private final Context mContext;
- private final CarUserManagerHelper mCarUserManagerHelper;
private final IActivityManager mAm;
private final UserManager mUserManager;
private final int mMaxRunningUsers;
+ private final InitialUserSetter mInitialUserSetter;
private final boolean mEnablePassengerSupport;
+ private final UserPreCreator mUserPreCreator;
private final Object mLockUser = new Object();
@GuardedBy("mLockUser")
@@ -197,14 +208,17 @@
private final CopyOnWriteArrayList<PassengerCallback> mPassengerCallbacks =
new CopyOnWriteArrayList<>();
+ // TODO(b/163566866): Use mSwitchGuestUserBeforeSleep for new create guest request
+ private final boolean mSwitchGuestUserBeforeSleep;
+
@Nullable
@GuardedBy("mLockUser")
private UserInfo mInitialUser;
- private UserMetrics mUserMetrics;
-
private IResultReceiver mUserSwitchUiReceiver;
+ private final CarUxRestrictionsManagerService mUxRestrictionService;
+
/** Interface for callbaks related to passenger activities. */
public interface PassengerCallback {
/** Called when passenger is started at a certain zone. */
@@ -230,29 +244,61 @@
@GuardedBy("mLockHelper")
private ZoneUserBindingHelper mZoneUserBindingHelper;
+ private final BroadcastReceiver mUserLifecycleReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (Log.isLoggable(TAG_USER, Log.DEBUG)) {
+ Log.d(TAG_USER, "onReceive: " + intent);
+ }
+ switch(intent.getAction()) {
+ case Intent.ACTION_USER_REMOVED:
+ int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL);
+ notifyHalUserRemoved(userId);
+ break;
+ default:
+ Log.w(TAG, "received unexpected intent: " + intent);
+ }
+ }
+ };
+
+ /** Map used to avoid calling UserHAL when a user was removed because HAL creation failed. */
+ @GuardedBy("mLockUser")
+ private final SparseBooleanArray mFailedToCreateUserIds = new SparseBooleanArray(1);
+
public CarUserService(@NonNull Context context, @NonNull UserHalService hal,
- @NonNull CarUserManagerHelper carUserManagerHelper, @NonNull UserManager userManager,
- @NonNull IActivityManager am, int maxRunningUsers) {
- this(context, hal, carUserManagerHelper, userManager, am, maxRunningUsers,
- new UserMetrics());
+ @NonNull UserManager userManager,
+ @NonNull IActivityManager am, int maxRunningUsers,
+ @NonNull CarUxRestrictionsManagerService uxRestrictionService) {
+ this(context, hal, userManager, am, maxRunningUsers,
+ /* initialUserSetter= */ null, /* userPreCreator= */ null, uxRestrictionService);
}
@VisibleForTesting
CarUserService(@NonNull Context context, @NonNull UserHalService hal,
- @NonNull CarUserManagerHelper carUserManagerHelper, @NonNull UserManager userManager,
- @NonNull IActivityManager am, int maxRunningUsers, UserMetrics userMetrics) {
+ @NonNull UserManager userManager,
+ @NonNull IActivityManager am, int maxRunningUsers,
+ @Nullable InitialUserSetter initialUserSetter,
+ @Nullable UserPreCreator userPreCreator,
+ @NonNull CarUxRestrictionsManagerService uxRestrictionService) {
if (Log.isLoggable(TAG_USER, Log.DEBUG)) {
Log.d(TAG_USER, "constructed");
}
mContext = context;
mHal = hal;
- mCarUserManagerHelper = carUserManagerHelper;
mAm = am;
mMaxRunningUsers = maxRunningUsers;
mUserManager = userManager;
mLastPassengerId = UserHandle.USER_NULL;
- mEnablePassengerSupport = context.getResources().getBoolean(R.bool.enablePassengerSupport);
- mUserMetrics = userMetrics;
+ mInitialUserSetter =
+ initialUserSetter == null ? new InitialUserSetter(context, (u) -> setInitialUser(u))
+ : initialUserSetter;
+ mUserPreCreator =
+ userPreCreator == null ? new UserPreCreator(mUserManager) : userPreCreator;
+ Resources resources = context.getResources();
+ mEnablePassengerSupport = resources.getBoolean(R.bool.enablePassengerSupport);
+ mSwitchGuestUserBeforeSleep = resources.getBoolean(
+ R.bool.config_switchGuestUserBeforeGoingSleep);
+ mUxRestrictionService = uxRestrictionService;
}
@Override
@@ -260,6 +306,8 @@
if (Log.isLoggable(TAG_USER, Log.DEBUG)) {
Log.d(TAG_USER, "init");
}
+ mContext.registerReceiver(mUserLifecycleReceiver,
+ new IntentFilter(Intent.ACTION_USER_REMOVED));
}
@Override
@@ -267,6 +315,7 @@
if (Log.isLoggable(TAG_USER, Log.DEBUG)) {
Log.d(TAG_USER, "release");
}
+ mContext.unregisterReceiver(mUserLifecycleReceiver);
}
@Override
@@ -280,6 +329,9 @@
writer.println("User0Unlocked: " + mUser0Unlocked);
writer.println("BackgroundUsersToRestart: " + mBackgroundUsersToRestart);
writer.println("BackgroundUsersRestarted: " + mBackgroundUsersRestartedHere);
+ if (mFailedToCreateUserIds.size() > 0) {
+ writer.println("FailedToCreateUserIds: " + mFailedToCreateUserIds);
+ }
}
writer.println("MaxRunningUsers: " + mMaxRunningUsers);
List<UserInfo> allDrivers = getAllDrivers();
@@ -317,12 +369,13 @@
writer.printf("Request Id for the user switch in process=%d\n ",
mRequestIdForUserSwitchInProcess);
writer.printf("System UI package name=%s\n", getSystemUiPackageName());
+ writer.printf("Is UX restricted: %b\n", isUxRestricted());
writer.println("Relevant Global settings");
dumpGlobalProperty(writer, indent, CarSettings.Global.LAST_ACTIVE_USER_ID);
dumpGlobalProperty(writer, indent, CarSettings.Global.LAST_ACTIVE_PERSISTENT_USER_ID);
- dumpUserMetrics(writer);
+ mInitialUserSetter.dump(writer);
}
private void dumpGlobalProperty(PrintWriter writer, String indent, String property) {
@@ -330,20 +383,6 @@
writer.printf("%s%s=%s\n", indent, property, value);
}
- /**
- * Dumps user metrics.
- */
- public void dumpUserMetrics(@NonNull PrintWriter writer) {
- mUserMetrics.dump(writer);
- }
-
- /**
- * Dumps first user unlocking time.
- */
- public void dumpFirstUserUnlockDuration(PrintWriter writer) {
- mUserMetrics.dumpFirstUserUnlockDuration(writer);
- }
-
private void handleDumpListeners(@NonNull PrintWriter writer, String indent) {
CountDownLatch latch = new CountDownLatch(1);
mHandler.post(() -> {
@@ -386,7 +425,8 @@
for (int i = 0; i < size; i++) {
int uid = mAppLifecycleListeners.keyAt(i);
IResultReceiver listener = mAppLifecycleListeners.valueAt(i);
- writer.printf("%suid: %d\n", indent, uid);
+ writer.printf("%suid: %d listener: %s\n", indent, uid,
+ FunctionalUtils.getLambdaName(listener));
}
}
@@ -450,7 +490,7 @@
return null;
}
// Passenger user should be a non-admin user.
- mCarUserManagerHelper.setDefaultNonAdminRestrictions(user, /* enable= */ true);
+ UserHelper.setDefaultNonAdminRestrictions(mContext, user, /* enable= */ true);
assignDefaultIcon(user);
return user;
}
@@ -461,7 +501,7 @@
@Override
public void switchDriver(@UserIdInt int driverId, AndroidFuture<UserSwitchResult> receiver) {
checkManageUsersPermission("switchDriver");
- if (UserHelper.isHeadlessSystemUser(driverId)) {
+ if (UserHelperLite.isHeadlessSystemUser(driverId)) {
// System user doesn't associate with real person, can not be switched to.
Log.w(TAG_USER, "switching to system user in headless system user mode is not allowed");
sendUserSwitchResult(receiver, UserSwitchResult.STATUS_INVALID_REQUEST);
@@ -485,7 +525,7 @@
@NonNull
public List<UserInfo> getAllDrivers() {
checkManageUsersOrDumpPermission("getAllDrivers");
- return getUsers((user) -> !UserHelper.isHeadlessSystemUser(user.id) && user.isEnabled()
+ return getUsers((user) -> !UserHelperLite.isHeadlessSystemUser(user.id) && user.isEnabled()
&& !user.isManagedProfile() && !user.isEphemeral());
}
@@ -500,7 +540,7 @@
public List<UserInfo> getPassengers(@UserIdInt int driverId) {
checkManageUsersOrDumpPermission("getPassengers");
return getUsers((user) -> {
- return !UserHelper.isHeadlessSystemUser(user.id) && user.isEnabled()
+ return !UserHelperLite.isHeadlessSystemUser(user.id) && user.isEnabled()
&& user.isManagedProfile() && user.profileGroupId == driverId;
});
}
@@ -580,10 +620,10 @@
private void stopAllTasks(@UserIdInt int userId) {
try {
- for (StackInfo info : mAm.getAllStackInfos()) {
- for (int i = 0; i < info.taskIds.length; i++) {
- if (info.taskUserIds[i] == userId) {
- int taskId = info.taskIds[i];
+ for (RootTaskInfo info : mAm.getAllRootTaskInfos()) {
+ for (int i = 0; i < info.childTaskIds.length; i++) {
+ if (info.childTaskUserIds[i] == userId) {
+ int taskId = info.childTaskIds[i];
if (!mAm.removeTask(taskId)) {
Log.w(TAG_USER, "could not remove task " + taskId);
}
@@ -622,55 +662,6 @@
mHandler.post(() -> mAppLifecycleListeners.remove(uid));
}
- @Override
- public void getInitialUserInfo(int requestType, int timeoutMs,
- @NonNull IResultReceiver receiver) {
- EventLog.writeEvent(EventLogTags.CAR_USER_SVC_INITIAL_USER_INFO_REQ, requestType,
- timeoutMs);
- Objects.requireNonNull(receiver, "receiver cannot be null");
- checkManageUsersPermission("getInitialInfo");
- if (!isUserHalSupported()) {
- sendResult(receiver, HalCallback.STATUS_HAL_NOT_SUPPORTED, null);
- return;
- }
- UsersInfo usersInfo = UserHalHelper.newUsersInfo(mUserManager);
- mHal.getInitialUserInfo(requestType, timeoutMs, usersInfo, (status, resp) -> {
- Bundle resultData = null;
- if (resp != null) {
- EventLog.writeEvent(EventLogTags.CAR_USER_SVC_INITIAL_USER_INFO_RESP,
- status, resp.action, resp.userToSwitchOrCreate.userId,
- resp.userToSwitchOrCreate.flags, resp.userNameToCreate, resp.userLocales);
- switch (resp.action) {
- case InitialUserInfoResponseAction.SWITCH:
- resultData = new Bundle();
- resultData.putInt(BUNDLE_INITIAL_INFO_ACTION, resp.action);
- resultData.putInt(BUNDLE_USER_ID, resp.userToSwitchOrCreate.userId);
- break;
- case InitialUserInfoResponseAction.CREATE:
- resultData = new Bundle();
- resultData.putInt(BUNDLE_INITIAL_INFO_ACTION, resp.action);
- resultData.putInt(BUNDLE_USER_FLAGS, resp.userToSwitchOrCreate.flags);
- resultData.putString(BUNDLE_USER_NAME, resp.userNameToCreate);
- break;
- case InitialUserInfoResponseAction.DEFAULT:
- resultData = new Bundle();
- resultData.putInt(BUNDLE_INITIAL_INFO_ACTION, resp.action);
- break;
- default:
- // That's ok, it will be the same as DEFAULT...
- Log.w(TAG_USER, "invalid response action on " + resp);
- }
- } else {
- EventLog.writeEvent(EventLogTags.CAR_USER_SVC_INITIAL_USER_INFO_RESP, status);
- }
- if (resultData != null && !TextUtils.isEmpty(resp.userLocales)) {
- resultData.putString(BUNDLE_USER_LOCALES, resp.userLocales);
- }
-
- sendResult(receiver, status, resultData);
- });
- }
-
/**
* Gets the initial foreground user after the device boots or resumes from suspension.
*
@@ -695,17 +686,6 @@
}
}
- // TODO(b/150413515): temporary method called by ICarImpl.setInitialUser(int userId), as for
- // some reason passing the whole UserInfo through a raw binder transaction is not working.
- /**
- * Sets the initial foreground user after the device boots or resumes from suspension.
- */
- public void setInitialUser(@UserIdInt int userId) {
- UserInfo initialUser = userId == UserHandle.USER_NULL ? null
- : mUserManager.getUserInfo(userId);
- setInitialUser(initialUser);
- }
-
/**
* Sets the initial foreground user after the device boots or resumes from suspension.
*/
@@ -723,24 +703,153 @@
}
}
+ private void initResumeReplaceGuest() {
+ int currentUserId = ActivityManager.getCurrentUser();
+ UserInfo currentUser = mUserManager.getUserInfo(currentUserId);
+
+ if (!mInitialUserSetter.canReplaceGuestUser(currentUser)) return; // Not a guest
+
+ InitialUserInfo info =
+ new InitialUserSetter.Builder(InitialUserSetter.TYPE_REPLACE_GUEST).build();
+
+ mInitialUserSetter.set(info);
+ }
+
/**
- * Calls the User HAL to get the initial user info.
+ * Calls to switch user at the power suspend.
*
- * @param requestType type as defined by {@code InitialUserInfoRequestType}.
- * @param callback callback to receive the results.
+ * <p><b>Note:</b> Should be used only by {@link CarPowerManagementService}
+ *
*/
- public void getInitialUserInfo(int requestType,
- HalCallback<InitialUserInfoResponse> callback) {
+ public void onSuspend() {
+ if (Log.isLoggable(TAG_USER, Log.DEBUG)) {
+ Log.d(TAG_USER, "onSuspend called.");
+ }
+
+ if (mSwitchGuestUserBeforeSleep) {
+ initResumeReplaceGuest();
+ }
+
+ preCreateUsers();
+ }
+
+ /**
+ * Calls to switch user at the power resume.
+ *
+ * <p>
+ * <b>Note:</b> Should be used only by {@link CarPowerManagementService}
+ *
+ */
+ public void onResume() {
+ if (Log.isLoggable(TAG_USER, Log.DEBUG)) {
+ Log.d(TAG_USER, "onResume called.");
+ }
+
+ initBootUser(InitialUserInfoRequestType.RESUME);
+ }
+
+ /**
+ * Calls to start user at the android startup.
+ */
+ public void initBootUser() {
+ int requestType = getInitialUserInfoRequestType();
+ initBootUser(requestType);
+ }
+
+ private void initBootUser(int requestType) {
+ boolean replaceGuest =
+ requestType == InitialUserInfoRequestType.RESUME && !mSwitchGuestUserBeforeSleep;
EventLog.writeEvent(EventLogTags.CAR_USER_SVC_INITIAL_USER_INFO_REQ, requestType,
mHalTimeoutMs);
- Objects.requireNonNull(callback, "callback cannot be null");
- checkManageUsersPermission("getInitialUserInfo");
+ checkManageUsersPermission("startInitialUser");
+
if (!isUserHalSupported()) {
- callback.onResponse(HalCallback.STATUS_HAL_NOT_SUPPORTED, null);
+ fallbackToDefaultInitialUserBehavior(/* userLocales= */ null, replaceGuest);
return;
}
+
UsersInfo usersInfo = UserHalHelper.newUsersInfo(mUserManager);
- mHal.getInitialUserInfo(requestType, mHalTimeoutMs, usersInfo, callback);
+ mHal.getInitialUserInfo(requestType, mHalTimeoutMs, usersInfo, (status, resp) -> {
+ if (resp != null) {
+ EventLog.writeEvent(EventLogTags.CAR_USER_SVC_INITIAL_USER_INFO_RESP,
+ status, resp.action, resp.userToSwitchOrCreate.userId,
+ resp.userToSwitchOrCreate.flags, resp.userNameToCreate, resp.userLocales);
+
+ String userLocales = resp.userLocales;
+ InitialUserInfo info;
+ switch (resp.action) {
+ case InitialUserInfoResponseAction.SWITCH:
+ int userId = resp.userToSwitchOrCreate.userId;
+ if (userId <= 0) {
+ Log.w(TAG, "invalid (or missing) user id sent by HAL: " + userId);
+ fallbackToDefaultInitialUserBehavior(userLocales, replaceGuest);
+ break;
+ }
+ info = new InitialUserSetter.Builder(InitialUserSetter.TYPE_SWITCH)
+ .setUserLocales(userLocales)
+ .setSwitchUserId(userId)
+ .setReplaceGuest(replaceGuest)
+ .build();
+ mInitialUserSetter.set(info);
+ break;
+
+ case InitialUserInfoResponseAction.CREATE:
+ int halFlags = resp.userToSwitchOrCreate.flags;
+ String userName = resp.userNameToCreate;
+ info = new InitialUserSetter.Builder(InitialUserSetter.TYPE_CREATE)
+ .setUserLocales(userLocales)
+ .setNewUserName(userName)
+ .setNewUserFlags(halFlags)
+ .build();
+ mInitialUserSetter.set(info);
+ break;
+
+ case InitialUserInfoResponseAction.DEFAULT:
+ fallbackToDefaultInitialUserBehavior(userLocales, replaceGuest);
+ break;
+ default:
+ Log.w(TAG_USER, "invalid response action on " + resp);
+ fallbackToDefaultInitialUserBehavior(/* user locale */ null, replaceGuest);
+ break;
+
+ }
+ } else {
+ EventLog.writeEvent(EventLogTags.CAR_USER_SVC_INITIAL_USER_INFO_RESP, status);
+ fallbackToDefaultInitialUserBehavior(/* user locale */ null, replaceGuest);
+ }
+ });
+ }
+
+ private void fallbackToDefaultInitialUserBehavior(String userLocales, boolean replaceGuest) {
+ InitialUserInfo info = new InitialUserSetter.Builder(
+ InitialUserSetter.TYPE_DEFAULT_BEHAVIOR)
+ .setUserLocales(userLocales)
+ .setReplaceGuest(replaceGuest)
+ .build();
+ mInitialUserSetter.set(info);
+ }
+
+ @VisibleForTesting
+ int getInitialUserInfoRequestType() {
+ if (!mInitialUserSetter.hasInitialUser()) {
+ return InitialUserInfoRequestType.FIRST_BOOT;
+ }
+ if (mContext.getPackageManager().isDeviceUpgrading()) {
+ return InitialUserInfoRequestType.FIRST_BOOT_AFTER_OTA;
+ }
+ return InitialUserInfoRequestType.COLD_BOOT;
+ }
+
+ private boolean isUxRestricted() {
+ CarUxRestrictions restrictions = mUxRestrictionService.getCurrentUxRestrictions();
+ boolean restricted = restrictions != null
+ && (restrictions.getActiveRestrictions() & UX_RESTRICTIONS_NO_SETUP)
+ == UX_RESTRICTIONS_NO_SETUP;
+ if (Log.isLoggable(TAG_USER, Log.DEBUG)) {
+ Log.d(TAG_USER, "isUxRestricted(): restrictions=" + restrictions
+ + ", restricted=" + restricted);
+ }
+ return restricted;
}
/**
@@ -785,7 +894,7 @@
public void switchUser(@UserIdInt int targetUserId, int timeoutMs,
@NonNull AndroidFuture<UserSwitchResult> receiver) {
EventLog.writeEvent(EventLogTags.CAR_USER_SVC_SWITCH_USER_REQ, targetUserId, timeoutMs);
- checkManageUsersPermission("switchUser");
+ checkManageOrCreateUsersPermission("switchUser");
Objects.requireNonNull(receiver);
UserInfo targetUser = mUserManager.getUserInfo(targetUserId);
Preconditions.checkArgument(targetUser != null, "Target user doesn't exist");
@@ -800,6 +909,11 @@
return;
}
+ if (isUxRestricted()) {
+ sendUserSwitchResult(receiver, UserSwitchResult.STATUS_UX_RESTRICTION_FAILURE);
+ return;
+ }
+
// If User Hal is not supported, just android user switch.
if (!isUserHalSupported()) {
try {
@@ -847,28 +961,25 @@
UsersInfo usersInfo = UserHalHelper.newUsersInfo(mUserManager);
SwitchUserRequest request = createUserSwitchRequest(targetUserId, usersInfo);
- mHal.switchUser(request, timeoutMs, (status, resp) -> {
+ mHal.switchUser(request, timeoutMs, (halCallbackStatus, resp) -> {
if (Log.isLoggable(TAG_USER, Log.DEBUG)) {
Log.d(TAG, "switch response: status="
- + UserHalHelper.halCallbackStatusToString(status) + ", resp=" + resp);
+ + UserHalHelper.halCallbackStatusToString(halCallbackStatus)
+ + ", resp=" + resp);
}
int resultStatus = UserSwitchResult.STATUS_HAL_INTERNAL_FAILURE;
synchronized (mLockUser) {
- if (status != HalCallback.STATUS_OK) {
- EventLog.writeEvent(EventLogTags.CAR_USER_SVC_SWITCH_USER_RESP, status);
+ if (halCallbackStatus != HalCallback.STATUS_OK) {
Log.w(TAG, "invalid callback status ("
- + UserHalHelper.halCallbackStatusToString(status) + ") for response "
- + resp);
+ + UserHalHelper.halCallbackStatusToString(halCallbackStatus)
+ + ") for response " + resp);
sendUserSwitchResult(receiver, resultStatus);
mUserIdForUserSwitchInProcess = UserHandle.USER_NULL;
return;
}
- EventLog.writeEvent(EventLogTags.CAR_USER_SVC_SWITCH_USER_RESP, status, resp.status,
- resp.errorMessage);
-
if (mUserIdForUserSwitchInProcess != targetUserId) {
// Another user switch request received while HAL responded. No need to process
// this request further
@@ -916,14 +1027,15 @@
mUserIdForUserSwitchInProcess = UserHandle.USER_NULL;
}
}
- sendUserSwitchResult(receiver, resultStatus, resp.errorMessage);
+ sendUserSwitchResult(receiver, halCallbackStatus, resultStatus, resp.errorMessage);
});
}
@Override
- public UserRemovalResult removeUser(@UserIdInt int userId) {
- checkManageUsersPermission("removeUser");
+ public UserRemovalResult removeUser(@UserIdInt int userId, boolean hasCallerRestrictions) {
+ checkManageOrCreateUsersPermission("removeUser");
EventLog.writeEvent(EventLogTags.CAR_USER_SVC_REMOVE_USER_REQ, userId);
+
// If the requested user is the current user, return error.
if (ActivityManager.getCurrentUser() == userId) {
return logAndGetResults(userId,
@@ -936,6 +1048,16 @@
return logAndGetResults(userId, UserRemovalResult.STATUS_USER_DOES_NOT_EXIST);
}
+ if (hasCallerRestrictions) {
+ // Restrictions: non-admin user can only remove itself, admins have no restrictions
+ int callingUserId = Binder.getCallingUserHandle().getIdentifier();
+ UserInfo callingUser = mUserManager.getUserInfo(callingUserId);
+ if (!callingUser.isAdmin() && userId != callingUserId) {
+ throw new SecurityException("Non-admin user " + callingUserId
+ + " can only remove itself");
+ }
+ }
+
android.hardware.automotive.vehicle.V2_0.UserInfo halUser =
new android.hardware.automotive.vehicle.V2_0.UserInfo();
halUser.userId = userInfo.id;
@@ -963,15 +1085,8 @@
return logAndGetResults(userId, UserRemovalResult.STATUS_ANDROID_FAILURE);
}
- if (isUserHalSupported()) {
- RemoveUserRequest request = new RemoveUserRequest();
- request.removedUserInfo = halUser;
- request.usersInfo = UserHalHelper.newUsersInfo(mUserManager);
- mHal.removeUser(request);
- }
-
if (isLastAdmin) {
- Log.w(TAG_USER, "Last admin user successfully removed. UserId: " + userId);
+ Log.w(TAG_USER, "Last admin user successfully removed. User Id: " + userId);
}
return logAndGetResults(userId,
@@ -979,6 +1094,38 @@
: UserRemovalResult.STATUS_SUCCESSFUL);
}
+ private void notifyHalUserRemoved(@UserIdInt int userId) {
+ if (!isUserHalSupported()) return;
+
+ if (userId == UserHandle.USER_NULL) {
+ Log.wtf(TAG, "notifyHalUserRemoved() Called for UserHandle.USER_NULL");
+ return;
+ }
+
+ synchronized (mLockUser) {
+ if (mFailedToCreateUserIds.get(userId)) {
+ if (Log.isLoggable(TAG_USER, Log.DEBUG)) {
+ Log.d(TAG, "notifyHalUserRemoved(): skipping " + userId);
+ }
+ mFailedToCreateUserIds.delete(userId);
+ return;
+ }
+ }
+
+ android.hardware.automotive.vehicle.V2_0.UserInfo halUser =
+ new android.hardware.automotive.vehicle.V2_0.UserInfo();
+ halUser.userId = userId;
+ // TODO(b/155913815): per the REMOVE_USER API, the userFlags should be set as well, but it's
+ // gone. We'll need to either update the documentation, or if that's not possible (as it's
+ // breaking the contract), either change the intent to contain the flags, or keep track of
+ // the flags internally.
+
+ RemoveUserRequest request = new RemoveUserRequest();
+ request.removedUserInfo = halUser;
+ request.usersInfo = UserHalHelper.newUsersInfo(mUserManager);
+ mHal.removeUser(request);
+ }
+
private UserRemovalResult logAndGetResults(@UserIdInt int userId,
@UserRemovalResult.Status int result) {
EventLog.writeEvent(EventLogTags.CAR_USER_SVC_REMOVE_USER_RESP, userId, result);
@@ -1004,9 +1151,10 @@
int timeoutMs, @NonNull AndroidFuture<UserCreationResult> receiver) {
Objects.requireNonNull(userType, "user type cannot be null");
Objects.requireNonNull(receiver, "receiver cannot be null");
- checkManageOrCreateUsersPermission("createUser");
- EventLog.writeEvent(EventLogTags.CAR_USER_SVC_CREATE_USER_REQ, UserHelper.safeName(name),
- userType, flags, timeoutMs);
+ checkManageOrCreateUsersPermission(flags);
+
+ EventLog.writeEvent(EventLogTags.CAR_USER_SVC_CREATE_USER_REQ,
+ UserHelperLite.safeName(name), userType, flags, timeoutMs);
UserInfo newUser;
try {
@@ -1021,7 +1169,7 @@
Log.d(TAG, "Created user: " + newUser.toFullString());
}
EventLog.writeEvent(EventLogTags.CAR_USER_SVC_CREATE_USER_USER_CREATED, newUser.id,
- UserHelper.safeName(newUser.name), newUser.userType, newUser.flags);
+ UserHelperLite.safeName(newUser.name), newUser.userType, newUser.flags);
} catch (RuntimeException e) {
Log.e(TAG_USER, "Error creating user of type " + userType + " and flags"
+ UserInfo.flagsToString(flags), e);
@@ -1059,7 +1207,7 @@
+ resp);
EventLog.writeEvent(EventLogTags.CAR_USER_SVC_CREATE_USER_RESP, status,
resultStatus, resp.errorMessage);
- removeUser(newUser, "HAL call failed with "
+ removeCreatedUser(newUser, "HAL call failed with "
+ UserHalHelper.halCallbackStatusToString(status));
sendUserCreationResult(receiver, resultStatus, user, /* errorMsg= */ null);
return;
@@ -1081,22 +1229,28 @@
EventLog.writeEvent(EventLogTags.CAR_USER_SVC_CREATE_USER_RESP, status,
resultStatus, resp.errorMessage);
if (user == null) {
- removeUser(newUser, "HAL returned "
+ removeCreatedUser(newUser, "HAL returned "
+ UserCreationResult.statusToString(resultStatus));
}
sendUserCreationResult(receiver, resultStatus, user, resp.errorMessage);
});
} catch (Exception e) {
Log.w(TAG, "mHal.createUser(" + request + ") failed", e);
- removeUser(newUser, "mHal.createUser() failed");
+ removeCreatedUser(newUser, "mHal.createUser() failed");
sendUserCreationResultFailure(receiver, UserCreationResult.STATUS_HAL_INTERNAL_FAILURE);
}
}
- private void removeUser(@NonNull UserInfo user, @NonNull String reason) {
- EventLog.writeEvent(EventLogTags.CAR_USER_SVC_CREATE_USER_USER_REMOVED, user.id, reason);
+ private void removeCreatedUser(@NonNull UserInfo user, @NonNull String reason) {
+ int userId = user.id;
+ EventLog.writeEvent(EventLogTags.CAR_USER_SVC_CREATE_USER_USER_REMOVED, userId, reason);
+
+ synchronized (mLockUser) {
+ mFailedToCreateUserIds.put(userId, true);
+ }
+
try {
- if (!mUserManager.removeUser(user.id)) {
+ if (!mUserManager.removeUser(userId)) {
Log.w(TAG, "Failed to remove user " + user.toFullString());
}
} catch (Exception e) {
@@ -1111,7 +1265,7 @@
}
Preconditions.checkArgument(!ArrayUtils.isEmpty(types), "must have at least one type");
- checkManageUsersPermission("getUserIdentificationAssociation");
+ checkManageOrCreateUsersPermission("getUserIdentificationAssociation");
int uid = getCallingUid();
int userId = UserHandle.getUserId(uid);
@@ -1157,7 +1311,7 @@
throw new IllegalArgumentException("types (" + Arrays.toString(types) + ") and values ("
+ Arrays.toString(values) + ") should have the same length");
}
- checkManageUsersPermission("setUserIdentificationAssociation");
+ checkManageOrCreateUsersPermission("setUserIdentificationAssociation");
int uid = getCallingUid();
int userId = UserHandle.getUserId(uid);
@@ -1231,13 +1385,22 @@
}
private void sendUserSwitchResult(@NonNull AndroidFuture<UserSwitchResult> receiver,
- @UserSwitchResult.Status int status) {
- sendUserSwitchResult(receiver, status, /* errorMessage= */ null);
+ @UserSwitchResult.Status int userSwitchStatus) {
+ sendUserSwitchResult(receiver, HalCallback.STATUS_INVALID, userSwitchStatus,
+ /* errorMessage= */ null);
}
private void sendUserSwitchResult(@NonNull AndroidFuture<UserSwitchResult> receiver,
- @UserSwitchResult.Status int status, @Nullable String errorMessage) {
- receiver.complete(new UserSwitchResult(status, errorMessage));
+ @HalCallback.HalCallbackStatus int halCallbackStatus,
+ @UserSwitchResult.Status int userSwitchStatus, @Nullable String errorMessage) {
+ if (errorMessage != null) {
+ EventLog.writeEvent(EventLogTags.CAR_USER_SVC_SWITCH_USER_RESP, halCallbackStatus,
+ userSwitchStatus, errorMessage);
+ } else {
+ EventLog.writeEvent(EventLogTags.CAR_USER_SVC_SWITCH_USER_RESP, halCallbackStatus,
+ userSwitchStatus);
+ }
+ receiver.complete(new UserSwitchResult(userSwitchStatus, errorMessage));
}
private void sendUserCreationResultFailure(@NonNull AndroidFuture<UserCreationResult> receiver,
@@ -1563,7 +1726,7 @@
/**
* Notifies all registered {@link UserLifecycleListener} with the event passed as argument.
*/
- public void onUserLifecycleEvent(@UserLifecycleEventType int eventType, long timestampMs,
+ public void onUserLifecycleEvent(@UserLifecycleEventType int eventType,
@UserIdInt int fromUserId, @UserIdInt int toUserId) {
int userId = toUserId;
@@ -1581,19 +1744,6 @@
handleNotifyServiceUserLifecycleListeners(event);
handleNotifyAppUserLifecycleListeners(event);
});
-
- if (timestampMs != 0) {
- // Finally, update metrics.
- mUserMetrics.onEvent(eventType, timestampMs, fromUserId, toUserId);
- }
- }
-
- /**
- * Sets the first user unlocking metrics.
- */
- public void onFirstUserUnlocked(@UserIdInt int userId, long timestampMs, long duration,
- int halResponseTime) {
- mUserMetrics.logFirstUnlockedUser(userId, timestampMs, duration, halResponseTime);
}
private void sendPostSwitchToHalLocked(@UserIdInt int userId) {
@@ -1693,7 +1843,7 @@
// Switch HAL users if user switch is not requested by CarUserService
notifyHalLegacySwitch(fromUserId, toUserId);
- mCarUserManagerHelper.setLastActiveUser(toUserId);
+ mInitialUserSetter.setLastActiveUser(toUserId);
if (mLastPassengerId != UserHandle.USER_NULL) {
stopPassengerInternal(mLastPassengerId, false);
@@ -1781,7 +1931,7 @@
/** Returns all users who are matched by the given filter. */
private List<UserInfo> getUsers(UserFilter filter) {
- List<UserInfo> users = mUserManager.getUsers(/* excludeDying= */ true);
+ List<UserInfo> users = mUserManager.getAliveUsers();
for (Iterator<UserInfo> iterator = users.iterator(); iterator.hasNext(); ) {
UserInfo user = iterator.next();
@@ -1792,24 +1942,6 @@
return users;
}
- /**
- * Enforces that apps which have the
- * {@link android.Manifest.permission#MANAGE_USERS MANAGE_USERS}
- * can make certain calls to the CarUserManager.
- *
- * @param message used as message if SecurityException is thrown.
- * @throws SecurityException if the caller is not system or root.
- */
- private static void checkManageUsersPermission(String message) {
- checkAtLeastOnePermission(message, android.Manifest.permission.MANAGE_USERS);
- }
-
- private static void checkManageOrCreateUsersPermission(String message) {
- checkAtLeastOnePermission(message,
- android.Manifest.permission.MANAGE_USERS,
- android.Manifest.permission.CREATE_USERS);
- }
-
private static void checkManageUsersOrDumpPermission(String message) {
checkAtLeastOnePermission(message,
android.Manifest.permission.MANAGE_USERS,
@@ -1841,7 +1973,7 @@
}
private int getNumberOfManagedProfiles(@UserIdInt int userId) {
- List<UserInfo> users = mUserManager.getUsers(/* excludeDying= */true);
+ List<UserInfo> users = mUserManager.getAliveUsers();
// Count all users that are managed profiles of the given user.
int managedProfilesCount = 0;
for (UserInfo user : users) {
@@ -1973,4 +2105,74 @@
List<OccupantZoneInfo> zoneInfos = getOccupantZones(occupantType);
return (zoneInfos.size() > 0) ? zoneInfos.get(0).zoneId : OccupantZoneInfo.INVALID_ZONE_ID;
}
+
+ /**
+ * Manages the required number of pre-created users.
+ */
+ public void preCreateUsers() {
+ mUserPreCreator.managePreCreatedUsers();
+ }
+
+ // TODO(b/167698977): members below were copied from UserManagerService; it would be better to
+ // move them to some internal android.os class instead.
+
+ private static final int ALLOWED_FLAGS_FOR_CREATE_USERS_PERMISSION =
+ UserInfo.FLAG_MANAGED_PROFILE
+ | UserInfo.FLAG_PROFILE
+ | UserInfo.FLAG_EPHEMERAL
+ | UserInfo.FLAG_RESTRICTED
+ | UserInfo.FLAG_GUEST
+ | UserInfo.FLAG_DEMO
+ | UserInfo.FLAG_FULL;
+
+ private static void checkManageUsersPermission(String message) {
+ if (!hasManageUsersPermission()) {
+ throw new SecurityException("You need " + MANAGE_USERS + " permission to: " + message);
+ }
+ }
+
+ private static void checkManageOrCreateUsersPermission(String message) {
+ if (!hasManageOrCreateUsersPermission()) {
+ throw new SecurityException(
+ "You either need " + MANAGE_USERS + " or " + CREATE_USERS + " permission to: "
+ + message);
+ }
+ }
+
+ private static void checkManageOrCreateUsersPermission(int creationFlags) {
+ if ((creationFlags & ~ALLOWED_FLAGS_FOR_CREATE_USERS_PERMISSION) == 0) {
+ if (!hasManageOrCreateUsersPermission()) {
+ throw new SecurityException("You either need " + MANAGE_USERS + " or "
+ + CREATE_USERS + "permission to create a user with flags "
+ + creationFlags);
+ }
+ } else if (!hasManageUsersPermission()) {
+ throw new SecurityException("You need " + MANAGE_USERS + " permission to create a user"
+ + " with flags " + creationFlags);
+ }
+ }
+
+ private static boolean hasManageUsersPermission() {
+ final int callingUid = Binder.getCallingUid();
+ return UserHandle.isSameApp(callingUid, Process.SYSTEM_UID)
+ || callingUid == Process.ROOT_UID
+ || hasPermissionGranted(MANAGE_USERS, callingUid);
+ }
+
+ private static boolean hasManageUsersOrPermission(String alternativePermission) {
+ final int callingUid = Binder.getCallingUid();
+ return UserHandle.isSameApp(callingUid, Process.SYSTEM_UID)
+ || callingUid == Process.ROOT_UID
+ || hasPermissionGranted(MANAGE_USERS, callingUid)
+ || hasPermissionGranted(alternativePermission, callingUid);
+ }
+
+ private static boolean hasManageOrCreateUsersPermission() {
+ return hasManageUsersOrPermission(CREATE_USERS);
+ }
+
+ private static boolean hasPermissionGranted(String permission, int uid) {
+ return ActivityManager.checkComponentPermission(permission, uid, /* owningUid= */ -1,
+ /* exported= */ true) == PackageManager.PERMISSION_GRANTED;
+ }
}
diff --git a/user/car-user-lib/src/android/car/userlib/InitialUserSetter.java b/service/src/com/android/car/user/InitialUserSetter.java
similarity index 69%
rename from user/car-user-lib/src/android/car/userlib/InitialUserSetter.java
rename to service/src/com/android/car/user/InitialUserSetter.java
index aea4f3d..c7375a9 100644
--- a/user/car-user-lib/src/android/car/userlib/InitialUserSetter.java
+++ b/service/src/com/android/car/user/InitialUserSetter.java
@@ -13,10 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package android.car.userlib;
+package com.android.car.user;
import static android.car.userlib.UserHalHelper.userFlagsToString;
-import static android.car.userlib.UserHelper.safeName;
import android.annotation.IntDef;
import android.annotation.NonNull;
@@ -24,6 +23,8 @@
import android.annotation.UserIdInt;
import android.app.ActivityManager;
import android.app.IActivityManager;
+import android.car.settings.CarSettings;
+import android.car.userlib.UserHalHelper;
import android.content.Context;
import android.content.pm.UserInfo;
import android.hardware.automotive.vehicle.V2_0.UserFlags;
@@ -38,6 +39,7 @@
import android.util.Slog;
import android.util.TimingsTraceLog;
+import com.android.car.internal.common.UserHelperLite;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.Preconditions;
import com.android.internal.widget.LockPatternUtils;
@@ -45,16 +47,21 @@
import java.io.PrintWriter;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
import java.util.function.Consumer;
/**
* Helper used to set the initial Android user on boot or when resuming from RAM.
*/
-public final class InitialUserSetter {
+final class InitialUserSetter {
private static final String TAG = InitialUserSetter.class.getSimpleName();
private static final boolean DBG = false;
+ private static final int BOOT_USER_NOT_FOUND = -1;
/**
* Sets the initial user using the default behavior.
@@ -109,7 +116,6 @@
// TODO(b/150413304): abstract AM / UM into interfaces, then provide local and remote
// implementation (where local is implemented by ActivityManagerInternal / UserManagerInternal)
- private final CarUserManagerHelper mHelper;
private final UserManager mUm;
private final LockPatternUtils mLockPatternUtils;
@@ -118,24 +124,21 @@
private final Consumer<UserInfo> mListener;
- public InitialUserSetter(@NonNull Context context, @NonNull Consumer<UserInfo> listener) {
+ InitialUserSetter(@NonNull Context context, @NonNull Consumer<UserInfo> listener) {
this(context, listener, /* newGuestName= */ null);
}
- public InitialUserSetter(@NonNull Context context, @NonNull Consumer<UserInfo> listener,
+ InitialUserSetter(@NonNull Context context, @NonNull Consumer<UserInfo> listener,
@Nullable String newGuestName) {
- this(context, new CarUserManagerHelper(context), UserManager.get(context), listener,
- new LockPatternUtils(context),
+ this(context, UserManager.get(context), listener, new LockPatternUtils(context),
context.getString(com.android.internal.R.string.owner_name), newGuestName);
}
@VisibleForTesting
- public InitialUserSetter(@NonNull Context context, @NonNull CarUserManagerHelper helper,
- @NonNull UserManager um, @NonNull Consumer<UserInfo> listener,
- @NonNull LockPatternUtils lockPatternUtils,
+ InitialUserSetter(@NonNull Context context, @NonNull UserManager um,
+ @NonNull Consumer<UserInfo> listener, @NonNull LockPatternUtils lockPatternUtils,
@Nullable String newUserName, @Nullable String newGuestName) {
mContext = context;
- mHelper = helper;
mUm = um;
mListener = listener;
mLockPatternUtils = lockPatternUtils;
@@ -265,6 +268,38 @@
supportsOverrideUserIdProperty = builder.mSupportsOverrideUserIdProperty;
userLocales = builder.mUserLocales;
}
+
+ @Override
+ public String toString() {
+ StringBuilder string = new StringBuilder("InitialUserInfo[type=");
+ switch(type) {
+ case TYPE_DEFAULT_BEHAVIOR:
+ string.append("DEFAULT_BEHAVIOR");
+ break;
+ case TYPE_REPLACE_GUEST:
+ string.append("REPLACE_GUEST");
+ break;
+ case TYPE_SWITCH:
+ string.append("SWITCH").append(",userId=").append(switchUserId);
+ break;
+ case TYPE_CREATE:
+ string.append("CREATE").append(",flags=")
+ .append(UserHalHelper.userFlagsToString(newUserFlags));
+ if (newUserName != null) {
+ string.append(",name=" + UserHelperLite.safeName(newUserName));
+ }
+ if (userLocales != null) {
+ string.append(",locales=").append(userLocales);
+ }
+ break;
+ default:
+ string.append("UNKNOWN:").append(type);
+ }
+ if (replaceGuest) string.append(",replaceGuest");
+ if (supportsOverrideUserIdProperty) string.append(",supportsOverrideUserIdProperty");
+
+ return string.append(']').toString();
+ }
}
/**
@@ -291,7 +326,7 @@
} catch (Exception e) {
fallbackDefaultBehavior(info, /* fallback= */ true,
"Exception createUser user with name "
- + UserHelper.safeName(info.newUserName) + " and flags "
+ + UserHelperLite.safeName(info.newUserName) + " and flags "
+ UserHalHelper.userFlagsToString(info.newUserFlags) + ": "
+ e);
}
@@ -333,7 +368,7 @@
}
private void executeDefaultBehavior(@NonNull InitialUserInfo info, boolean fallback) {
- if (!mHelper.hasInitialUser()) {
+ if (!hasInitialUser()) {
if (DBG) Log.d(TAG, "executeDefaultBehavior(): no initial user, creating it");
createAndSwitchUser(new Builder(TYPE_CREATE)
.setNewUserName(mNewUserName)
@@ -343,7 +378,7 @@
.build(), fallback);
} else {
if (DBG) Log.d(TAG, "executeDefaultBehavior(): switching to initial user");
- int userId = mHelper.getInitialUser(info.supportsOverrideUserIdProperty);
+ int userId = getInitialUser(info.supportsOverrideUserIdProperty);
switchUser(new Builder(TYPE_SWITCH)
.setSwitchUserId(userId)
.setSupportsOverrideUserIdProperty(info.supportsOverrideUserIdProperty)
@@ -404,7 +439,7 @@
"am.switchUser(" + actualUserId + ") failed");
return;
}
- mHelper.setLastActiveUser(actualUserId);
+ setLastActiveUser(actualUser.id);
}
notifyListener(actualUser);
@@ -440,7 +475,6 @@
return true;
}
- // TODO(b/151758646): move to CarUserManagerHelper
/**
* Replaces {@code user} by a new guest, if necessary.
*
@@ -517,7 +551,7 @@
int halFlags = info.newUserFlags;
if (DBG) {
- Log.d(TAG, "createUser(name=" + safeName(name) + ", flags="
+ Log.d(TAG, "createUser(name=" + UserHelperLite.safeName(name) + ", flags="
+ userFlagsToString(halFlags) + ")");
}
@@ -547,13 +581,13 @@
: UserManager.USER_TYPE_FULL_SECONDARY;
if (DBG) {
- Log.d(TAG, "calling am.createUser((name=" + safeName(name) + ", type=" + type
- + ", flags=" + UserInfo.flagsToString(flags) + ")");
+ Log.d(TAG, "calling am.createUser((name=" + UserHelperLite.safeName(name) + ", type="
+ + type + ", flags=" + UserInfo.flagsToString(flags) + ")");
}
UserInfo userInfo = mUm.createUser(name, type, flags);
if (userInfo == null) {
- return new Pair<>(null, "createUser(name=" + safeName(name) + ", flags="
+ return new Pair<>(null, "createUser(name=" + UserHelperLite.safeName(name) + ", flags="
+ userFlagsToString(halFlags) + "): failed to create user");
}
@@ -604,7 +638,7 @@
@VisibleForTesting
boolean startForegroundUser(@UserIdInt int userId) {
- if (UserHelper.isHeadlessSystemUser(userId)) {
+ if (UserHelperLite.isHeadlessSystemUser(userId)) {
// System User doesn't associate with real person, can not be switched to.
return false;
}
@@ -630,4 +664,167 @@
writer.printf("%smNewUserName: %s\n", indent, mNewUserName);
writer.printf("%smNewGuestName: %s\n", indent, mNewGuestName);
}
+
+ /**
+ * Sets the last active user.
+ */
+ public void setLastActiveUser(@UserIdInt int userId) {
+ if (UserHelperLite.isHeadlessSystemUser(userId)) {
+ if (DBG) Log.d(TAG, "setLastActiveUser(): ignoring headless system user " + userId);
+ return;
+ }
+ setUserIdGlobalProperty(CarSettings.Global.LAST_ACTIVE_USER_ID, userId);
+
+ // TODO(b/155918094): change method to receive a UserInfo instead
+ UserInfo user = mUm.getUserInfo(userId);
+ if (user == null) {
+ Log.w(TAG, "setLastActiveUser(): user " + userId + " doesn't exist");
+ return;
+ }
+ if (!user.isEphemeral()) {
+ setUserIdGlobalProperty(CarSettings.Global.LAST_ACTIVE_PERSISTENT_USER_ID, userId);
+ }
+ }
+
+ private void setUserIdGlobalProperty(@NonNull String name, @UserIdInt int userId) {
+ if (DBG) Log.d(TAG, "setting global property " + name + " to " + userId);
+
+ Settings.Global.putInt(mContext.getContentResolver(), name, userId);
+ }
+
+ /**
+ * Gets the user id for the initial user to boot into. This is only applicable for headless
+ * system user model. This method checks for a system property and will only work for system
+ * apps.
+ *
+ * This method checks for the initial user via three mechanisms in this order:
+ * <ol>
+ * <li>Check for a boot user override via {@link CarProperties#boot_user_override_id()}</li>
+ * <li>Check for the last active user in the system</li>
+ * <li>Fallback to the smallest user id that is not {@link UserHandle.USER_SYSTEM}</li>
+ * </ol>
+ *
+ * If any step fails to retrieve the stored id or the retrieved id does not exist on device,
+ * then it will move onto the next step.
+ *
+ * @return user id of the initial user to boot into on the device, or
+ * {@link UserHandle#USER_NULL} if there is no user available.
+ */
+ @VisibleForTesting
+ int getInitialUser(boolean usesOverrideUserIdProperty) {
+
+ List<Integer> allUsers = userInfoListToUserIdList(getAllUsers());
+
+ if (allUsers.isEmpty()) {
+ return UserHandle.USER_NULL;
+ }
+
+ //TODO(b/150416512): Check if it is still supported, if not remove it.
+ if (usesOverrideUserIdProperty) {
+ int bootUserOverride = CarProperties.boot_user_override_id()
+ .orElse(BOOT_USER_NOT_FOUND);
+
+ // If an override user is present and a real user, return it
+ if (bootUserOverride != BOOT_USER_NOT_FOUND
+ && allUsers.contains(bootUserOverride)) {
+ Log.i(TAG, "Boot user id override found for initial user, user id: "
+ + bootUserOverride);
+ return bootUserOverride;
+ }
+ }
+
+ // If the last active user is not the SYSTEM user and is a real user, return it
+ int lastActiveUser = getUserIdGlobalProperty(CarSettings.Global.LAST_ACTIVE_USER_ID);
+ if (allUsers.contains(lastActiveUser)) {
+ Log.i(TAG, "Last active user loaded for initial user: " + lastActiveUser);
+ return lastActiveUser;
+ }
+ resetUserIdGlobalProperty(CarSettings.Global.LAST_ACTIVE_USER_ID);
+
+ int lastPersistentUser = getUserIdGlobalProperty(
+ CarSettings.Global.LAST_ACTIVE_PERSISTENT_USER_ID);
+ if (allUsers.contains(lastPersistentUser)) {
+ Log.i(TAG, "Last active, persistent user loaded for initial user: "
+ + lastPersistentUser);
+ return lastPersistentUser;
+ }
+ resetUserIdGlobalProperty(CarSettings.Global.LAST_ACTIVE_PERSISTENT_USER_ID);
+
+ // If all else fails, return the smallest user id
+ int returnId = Collections.min(allUsers);
+ // TODO(b/158101909): the smallest user id is not always the initial user; a better approach
+ // would be looking for the first ADMIN user, or keep track of all last active users (not
+ // just the very last)
+ Log.w(TAG, "Last active user (" + lastActiveUser + ") not found. Returning smallest user id"
+ + " instead: " + returnId);
+ return returnId;
+ }
+
+ /**
+ * Gets all the users that can be brought to the foreground on the system.
+ *
+ * @return List of {@code UserInfo} for users that associated with a real person.
+ */
+ private List<UserInfo> getAllUsers() {
+ if (UserManager.isHeadlessSystemUserMode()) {
+ return getAllUsersExceptSystemUserAndSpecifiedUser(UserHandle.USER_SYSTEM);
+ } else {
+ return mUm.getAliveUsers();
+ }
+ }
+
+ /**
+ * Gets all the users except system user and the one with userId passed in.
+ *
+ * @param userId of the user not to be returned.
+ * @return All users other than system user and user with userId.
+ */
+ private List<UserInfo> getAllUsersExceptSystemUserAndSpecifiedUser(@UserIdInt int userId) {
+ List<UserInfo> users = mUm.getAliveUsers();
+
+ for (Iterator<UserInfo> iterator = users.iterator(); iterator.hasNext(); ) {
+ UserInfo userInfo = iterator.next();
+ if (userInfo.id == userId || userInfo.id == UserHandle.USER_SYSTEM) {
+ // Remove user with userId from the list.
+ iterator.remove();
+ }
+ }
+ return users;
+ }
+
+ /**
+ * Checks whether the device has an initial user that can be switched to.
+ */
+ public boolean hasInitialUser() {
+ List<UserInfo> allUsers = getAllUsers();
+ for (int i = 0; i < allUsers.size(); i++) {
+ UserInfo user = allUsers.get(i);
+ if (user.isManagedProfile()) continue;
+
+ return true;
+ }
+ return false;
+ }
+
+ private static List<Integer> userInfoListToUserIdList(List<UserInfo> allUsers) {
+ ArrayList<Integer> list = new ArrayList<>(allUsers.size());
+ for (int i = 0; i < allUsers.size(); i++) {
+ list.add(allUsers.get(i).id);
+ }
+ return list;
+ }
+
+ private void resetUserIdGlobalProperty(@NonNull String name) {
+ if (DBG) Log.d(TAG, "resetting global property " + name);
+
+ Settings.Global.putInt(mContext.getContentResolver(), name, UserHandle.USER_NULL);
+ }
+
+ private int getUserIdGlobalProperty(@NonNull String name) {
+ int userId = Settings.Global.getInt(mContext.getContentResolver(), name,
+ UserHandle.USER_NULL);
+ if (DBG) Log.d(TAG, "getting global property " + name + ": " + userId);
+
+ return userId;
+ }
}
diff --git a/service/src/com/android/car/user/UserMetrics.java b/service/src/com/android/car/user/UserMetrics.java
deleted file mode 100644
index cd139cc..0000000
--- a/service/src/com/android/car/user/UserMetrics.java
+++ /dev/null
@@ -1,397 +0,0 @@
-/*
- * Copyright (C) 2020 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.car.user;
-
-import static android.car.user.CarUserManager.USER_LIFECYCLE_EVENT_TYPE_STARTING;
-import static android.car.user.CarUserManager.USER_LIFECYCLE_EVENT_TYPE_STOPPED;
-import static android.car.user.CarUserManager.USER_LIFECYCLE_EVENT_TYPE_STOPPING;
-import static android.car.user.CarUserManager.USER_LIFECYCLE_EVENT_TYPE_SWITCHING;
-import static android.car.user.CarUserManager.USER_LIFECYCLE_EVENT_TYPE_UNLOCKED;
-import static android.car.user.CarUserManager.USER_LIFECYCLE_EVENT_TYPE_UNLOCKING;
-import static android.car.user.CarUserManager.lifecycleEventTypeToString;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.annotation.UserIdInt;
-import android.car.user.CarUserManager.UserLifecycleEventType;
-import android.util.LocalLog;
-import android.util.Slog;
-import android.util.SparseArray;
-import android.util.SparseLongArray;
-import android.util.TimeUtils;
-
-import com.android.internal.annotations.GuardedBy;
-import com.android.internal.annotations.VisibleForTesting;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
-/**
- * Metrics for user switches.
- *
- * <p>It stores 2 types of metrics:
- *
- * <ol>
- * <li>Time to start a user (from start to unlock)
- * <li>Time to stop a user (from stop to shutdown)
- * </ol>
- *
- * <p>It keeps track of the users being started and stopped, then logs the last
- * {{@link #INITIAL_CAPACITY}} occurrences of each when the operation finished (so it can be dumped
- * later).
- */
-final class UserMetrics {
-
- private static final String TAG = UserMetrics.class.getSimpleName();
-
- /**
- * Initial capacity for the current operations.
- */
- // Typically there are at most 2 users (system and 1st full), although it could be higher on
- // garage mode
- private static final int INITIAL_CAPACITY = 2;
-
- // TODO(b/150413515): read from resources
- private static final int LOG_SIZE = 10;
-
- private final Object mLock = new Object();
-
- @GuardedBy("mLock")
- private SparseArray<UserStartingMetric> mUserStartingMetrics;
- @GuardedBy("mLock")
- private SparseArray<UserStoppingMetric> mUserStoppingMetrics;
-
- @GuardedBy("mLock")
- private final LocalLog mUserStartedLogs = new LocalLog(LOG_SIZE);
- @GuardedBy("mLock")
- private final LocalLog mUserStoppedLogs = new LocalLog(LOG_SIZE);
-
- @GuardedBy("mLock")
- private final SparseLongArray mFirstUserUnlockDuration = new SparseLongArray(1);
-
- @GuardedBy("mLock")
- private int mHalResponseTime;
-
- /**
- * Logs a user lifecycle event.
- */
- public void onEvent(@UserLifecycleEventType int eventType, long timestampMs,
- @UserIdInt int fromUserId, @UserIdInt int toUserId) {
- synchronized (mLock) {
- switch(eventType) {
- case USER_LIFECYCLE_EVENT_TYPE_STARTING:
- onUserStartingEventLocked(timestampMs, toUserId);
- return;
- case USER_LIFECYCLE_EVENT_TYPE_SWITCHING:
- onUserSwitchingEventLocked(timestampMs, fromUserId, toUserId);
- return;
- case USER_LIFECYCLE_EVENT_TYPE_UNLOCKING:
- onUserUnlockingEventLocked(timestampMs, toUserId);
- return;
- case USER_LIFECYCLE_EVENT_TYPE_UNLOCKED:
- onUserUnlockedEventLocked(timestampMs, toUserId);
- return;
- case USER_LIFECYCLE_EVENT_TYPE_STOPPING:
- onUserStoppingEventLocked(timestampMs, toUserId);
- return;
- case USER_LIFECYCLE_EVENT_TYPE_STOPPED:
- onUserStoppedEventLocked(timestampMs, toUserId);
- return;
- default:
- Slog.w(TAG, "Invalid event: " + lifecycleEventTypeToString(eventType));
- }
- }
- }
-
- /**
- * Logs when the first user was unlocked.
- */
- public void logFirstUnlockedUser(int userId, long timestampMs, long duration,
- int halResponseTime) {
- synchronized (mLock) {
- mHalResponseTime = halResponseTime;
- mFirstUserUnlockDuration.put(userId, duration);
- }
- }
-
- @VisibleForTesting
- SparseArray<UserStartingMetric> getUserStartMetrics() {
- synchronized (mLock) {
- return mUserStartingMetrics;
- }
- }
-
- @VisibleForTesting
- SparseArray<UserStoppingMetric> getUserStopMetrics() {
- synchronized (mLock) {
- return mUserStoppingMetrics;
- }
- }
-
- private void onUserStartingEventLocked(long timestampMs, @UserIdInt int userId) {
- if (mUserStartingMetrics == null) {
- mUserStartingMetrics = new SparseArray<>(INITIAL_CAPACITY);
- }
-
- UserStartingMetric existingMetrics = mUserStartingMetrics.get(userId);
- if (existingMetrics != null) {
- Slog.w(TAG, "user re-started: " + existingMetrics);
- finishUserStartingLocked(existingMetrics, /* removeMetric= */ false);
- }
-
- mUserStartingMetrics.put(userId, new UserStartingMetric(userId, timestampMs));
- }
-
- private void onUserSwitchingEventLocked(long timestampMs, @UserIdInt int fromUserId,
- @UserIdInt int toUserId) {
- UserStartingMetric metrics = getExistingMetricsLocked(mUserStartingMetrics, toUserId);
- if (metrics == null) return;
-
- metrics.switchFromUserId = fromUserId;
- metrics.switchTime = timestampMs;
- }
-
- private void onUserUnlockingEventLocked(long timestampMs, @UserIdInt int userId) {
- UserStartingMetric metrics = getExistingMetricsLocked(mUserStartingMetrics, userId);
- if (metrics == null) return;
-
- metrics.unlockingTime = timestampMs;
- }
-
- private void onUserUnlockedEventLocked(long timestampMs, @UserIdInt int userId) {
- UserStartingMetric metrics = getExistingMetricsLocked(mUserStartingMetrics, userId);
- if (metrics == null) return;
-
- metrics.unlockedTime = timestampMs;
-
- finishUserStartingLocked(metrics, /* removeMetric= */ true);
- }
-
- private void onUserStoppingEventLocked(long timestampMs, @UserIdInt int userId) {
- if (mUserStoppingMetrics == null) {
- mUserStoppingMetrics = new SparseArray<>(INITIAL_CAPACITY);
- }
- UserStoppingMetric existingMetrics = mUserStoppingMetrics.get(userId);
- if (existingMetrics != null) {
- Slog.w(TAG, "user re-stopped: " + existingMetrics);
- finishUserStoppingLocked(existingMetrics, /* removeMetric= */ false);
- }
- mUserStoppingMetrics.put(userId, new UserStoppingMetric(userId, timestampMs));
- }
-
- private void onUserStoppedEventLocked(long timestampMs, @UserIdInt int userId) {
- UserStoppingMetric metrics = getExistingMetricsLocked(mUserStoppingMetrics, userId);
- if (metrics == null) return;
-
- metrics.shutdownTime = timestampMs;
- finishUserStoppingLocked(metrics, /* removeMetric= */ true);
- }
-
- @Nullable
- private <T extends BaseUserMetric> T getExistingMetricsLocked(
- @NonNull SparseArray<? extends BaseUserMetric> metrics, @UserIdInt int userId) {
- if (metrics == null) {
- Slog.w(TAG, "getExistingMetricsLocked() should not pass null metrics, except on tests");
- return null;
- }
- @SuppressWarnings("unchecked")
- T metric = (T) metrics.get(userId);
- if (metric == null) {
- String name = metrics == mUserStartingMetrics ? "starting" : "stopping";
- Slog.w(TAG, "no " + name + " metrics for user " + userId);
- }
- return metric;
- }
-
- private void removeExistingMetricsLogged(@NonNull SparseArray<? extends BaseUserMetric> metrics,
- @UserIdInt int userId) {
- metrics.remove(userId);
- if (metrics.size() != 0) return;
-
- if (metrics == mUserStartingMetrics) {
- mUserStartingMetrics = null;
- } else {
- mUserStoppingMetrics = null;
- }
- }
-
- private void finishUserStartingLocked(@NonNull UserStartingMetric metrics,
- boolean removeMetric) {
- mUserStartedLogs.log(metrics.toString());
- if (removeMetric) {
- removeExistingMetricsLogged(mUserStartingMetrics, metrics.userId);
- }
- }
-
- private void finishUserStoppingLocked(@NonNull UserStoppingMetric metrics,
- boolean removeMetric) {
- mUserStoppedLogs.log(metrics.toString());
- if (removeMetric) {
- removeExistingMetricsLogged(mUserStoppingMetrics, metrics.userId);
- }
- }
-
- /**
- * Dumps its contents.
- */
- public void dump(@NonNull PrintWriter pw) {
- pw.println("* User Metrics *");
- synchronized (mLock) {
-
- if (mFirstUserUnlockDuration.size() == 0) {
- pw.println("First user not unlocked yet");
- } else {
- pw.printf("First user (%d) unlocked in ", mFirstUserUnlockDuration.keyAt(0));
- TimeUtils.formatDuration(mFirstUserUnlockDuration.valueAt(0), pw);
- pw.println();
- }
-
- dump(pw, "starting", mUserStartingMetrics);
- dump(pw, "stopping", mUserStoppingMetrics);
-
- pw.printf("Last %d started users\n", LOG_SIZE);
- mUserStartedLogs.dump(" ", pw);
-
- pw.printf("Last %d stopped users\n", LOG_SIZE);
- mUserStoppedLogs.dump(" ", pw);
-
- pw.print("HAL response time: ");
- if (mHalResponseTime == 0) {
- pw.print("N/A");
- } else if (mHalResponseTime < 0) {
- pw.print("not replied yet, sent at ");
- TimeUtils.formatUptime(-mHalResponseTime);
- } else {
- TimeUtils.formatDuration(mHalResponseTime, pw);
- }
- pw.println();
- }
- }
-
- /**
- * Dumps only how long it took to unlock the first user (or {@code -1} if not available).
- */
- public void dumpFirstUserUnlockDuration(@NonNull PrintWriter pw) {
- synchronized (mLock) {
- if (mFirstUserUnlockDuration.size() == 0) {
- pw.println(-1);
- return;
- }
- pw.println(mFirstUserUnlockDuration.valueAt(0));
- }
- }
-
- private void dump(@NonNull PrintWriter pw, @NonNull String message,
- @NonNull SparseArray<? extends BaseUserMetric> metrics) {
- String indent = " ";
- if (metrics == null) {
- pw.printf("%sno users %s\n", indent, message);
- return;
- }
- int size = metrics.size();
- pw.printf("%d users %s\n", size, message);
- for (int i = 0; i < size; i++) {
- BaseUserMetric metric = metrics.valueAt(i);
- pw.printf("%s%d: ", indent, i);
- metric.dump(pw);
- pw.println();
- }
- }
-
- private abstract class BaseUserMetric {
- public final @UserIdInt int userId;
-
- protected BaseUserMetric(@UserIdInt int userId) {
- this.userId = userId;
- }
-
- @Override
- public String toString() {
- StringWriter sw = new StringWriter();
- PrintWriter pw = new PrintWriter(sw);
- dump(pw);
- pw.flush();
- return sw.toString();
- }
-
- abstract void dump(@NonNull PrintWriter pw);
- }
-
- @VisibleForTesting
- final class UserStartingMetric extends BaseUserMetric {
- public final long startTime;
- public long switchTime;
- public long unlockingTime;
- public long unlockedTime;
- public @UserIdInt int switchFromUserId;
-
- UserStartingMetric(@UserIdInt int userId, long startTime) {
- super(userId);
- this.startTime = startTime;
- }
-
- @Override
- public void dump(@NonNull PrintWriter pw) {
- pw.printf("user=%d start=", userId);
- TimeUtils.dumpTime(pw, startTime);
-
- if (switchTime > 0) {
- long delta = switchTime - startTime;
- pw.print(" switch");
- if (switchFromUserId != 0) {
- pw.printf("(from %d)", switchFromUserId);
- }
- pw.print('=');
- TimeUtils.formatDuration(delta, pw);
- }
-
- if (unlockingTime > 0) {
- long delta = unlockingTime - startTime;
- pw.print(" unlocking=");
- TimeUtils.formatDuration(delta, pw);
- }
- if (unlockedTime > 0) {
- long delta = unlockedTime - startTime;
- pw.print(" unlocked=");
- TimeUtils.formatDuration(delta, pw);
- }
- }
- }
-
- @VisibleForTesting
- final class UserStoppingMetric extends BaseUserMetric {
- public final long stopTime;
- public long shutdownTime;
-
- UserStoppingMetric(@UserIdInt int userId, long stopTime) {
- super(userId);
- this.stopTime = stopTime;
- }
-
- @Override
- public void dump(@NonNull PrintWriter pw) {
- pw.printf("user=%d stop=", userId);
- TimeUtils.dumpTime(pw, stopTime);
-
- if (shutdownTime > 0) {
- long delta = shutdownTime - stopTime;
- pw.print(" shutdown=");
- TimeUtils.formatDuration(delta, pw);
- }
- }
- }
-}
diff --git a/service/src/com/android/car/user/UserPreCreator.java b/service/src/com/android/car/user/UserPreCreator.java
new file mode 100644
index 0000000..f217f5d
--- /dev/null
+++ b/service/src/com/android/car/user/UserPreCreator.java
@@ -0,0 +1,240 @@
+/*
+ * Copyright (C) 2020 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.car.user;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.pm.UserInfo;
+import android.os.UserManager;
+import android.sysprop.CarProperties;
+import android.util.EventLog;
+import android.util.Slog;
+import android.util.SparseBooleanArray;
+
+import com.android.car.internal.common.EventLogTags;
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Manages the pre-created users.
+ *
+ * <p>
+ * It creates (and remove) new pre-created users based on the values of {@link CarProperties} and
+ * the number of existing pre-created users.
+ */
+public final class UserPreCreator {
+
+ private static final String TAG = UserPreCreator.class.getSimpleName();
+
+ private final UserManager mUserManager;
+
+ UserPreCreator(UserManager userManager) {
+ mUserManager = userManager;
+ }
+
+ /**
+ * Manages the required number of pre-created users.
+ */
+ public void managePreCreatedUsers() {
+ // First gets how many pre-createad users are defined by the OEM
+ int numberRequestedGuests = CarProperties.number_pre_created_guests().orElse(0);
+ int numberRequestedUsers = CarProperties.number_pre_created_users().orElse(0);
+ EventLog.writeEvent(EventLogTags.CAR_USER_SVC_PRE_CREATION_REQUESTED, numberRequestedUsers,
+ numberRequestedGuests);
+ Slog.d(TAG, "managePreCreatedUsers(): OEM asked for " + numberRequestedGuests
+ + " guests and " + numberRequestedUsers + " users");
+
+ if (numberRequestedGuests < 0 || numberRequestedUsers < 0) {
+ Slog.w(TAG, "preCreateUsers(): invalid values provided by OEM; "
+ + "number_pre_created_guests=" + numberRequestedGuests
+ + ", number_pre_created_users=" + numberRequestedUsers);
+ return;
+ }
+
+ // Then checks how many exist already
+ List<UserInfo> allUsers = mUserManager.getUsers(/* excludePartial= */ true,
+ /* excludeDying= */ true, /* excludePreCreated= */ false);
+
+ int allUsersSize = allUsers.size();
+ Slog.d(TAG, "preCreateUsers: total users size is " + allUsersSize);
+
+ int numberExistingGuests = 0;
+ int numberExistingUsers = 0;
+
+ // List of pre-created users that were not properly initialized. Typically happens when
+ // the system crashed / rebooted before they were fully started.
+ SparseBooleanArray invalidPreCreatedUsers = new SparseBooleanArray();
+
+ // List of all pre-created users - it will be used to remove unused ones (when needed)
+ SparseBooleanArray existingPrecreatedUsers = new SparseBooleanArray();
+
+ // List of extra pre-created users and guests - they will be removed
+ List<Integer> extraPreCreatedUsers = new ArrayList<>();
+
+ for (int i = 0; i < allUsersSize; i++) {
+ UserInfo user = allUsers.get(i);
+ if (!user.preCreated) continue;
+ if (!user.isInitialized()) {
+ Slog.w(TAG, "Found invalid pre-created user that needs to be removed: "
+ + user.toFullString());
+ invalidPreCreatedUsers.append(user.id, /* notUsed=*/ true);
+ continue;
+ }
+ boolean isGuest = user.isGuest();
+ existingPrecreatedUsers.put(user.id, isGuest);
+ if (isGuest) {
+ numberExistingGuests++;
+ if (numberExistingGuests > numberRequestedGuests) {
+ extraPreCreatedUsers.add(user.id);
+ }
+ } else {
+ numberExistingUsers++;
+ if (numberExistingUsers > numberRequestedUsers) {
+ extraPreCreatedUsers.add(user.id);
+ }
+ }
+ }
+ Slog.i(TAG, "managePreCreatedUsers(): system already has " + numberExistingGuests
+ + " pre-created guests," + numberExistingUsers + " pre-created users, and these"
+ + " invalid users: " + invalidPreCreatedUsers
+ + " and these extra pre-created users: " + extraPreCreatedUsers);
+
+ int numberGuestsToAdd = numberRequestedGuests - numberExistingGuests;
+ int numberUsersToAdd = numberRequestedUsers - numberExistingUsers;
+ int numberGuestsToRemove = numberExistingGuests - numberRequestedGuests;
+ int numberUsersToRemove = numberExistingUsers - numberRequestedUsers;
+ int numberInvalidUsersToRemove = invalidPreCreatedUsers.size();
+
+ EventLog.writeEvent(EventLogTags.CAR_USER_SVC_PRE_CREATION_STATUS,
+ numberExistingUsers, numberUsersToAdd, numberUsersToRemove,
+ numberExistingGuests, numberGuestsToAdd, numberGuestsToRemove,
+ numberInvalidUsersToRemove);
+
+ if (numberGuestsToAdd == 0 && numberUsersToAdd == 0 && numberInvalidUsersToRemove == 0) {
+ Slog.i(TAG, "managePreCreatedUsers(): everything in sync");
+ return;
+ }
+
+ // Finally, manage them....
+
+ // In theory, we could submit multiple user pre-creations in parallel, but we're
+ // submitting just 1 task, for 2 reasons:
+ // 1.To minimize it's effect on other system server initialization tasks.
+ // 2.The pre-created users will be unlocked in parallel anyways.
+ runAsync(() -> {
+ if (numberUsersToAdd > 0) {
+ preCreateUsers(numberUsersToAdd, /* isGuest= */ false);
+ }
+ if (numberGuestsToAdd > 0) {
+ preCreateUsers(numberGuestsToAdd, /* isGuest= */ true);
+ }
+
+ int totalNumberToRemove = extraPreCreatedUsers.size();
+ Slog.d(TAG, "Must delete " + totalNumberToRemove + " pre-created users");
+ if (totalNumberToRemove > 0) {
+ int[] usersToRemove = new int[totalNumberToRemove];
+ for (int i = 0; i < totalNumberToRemove; i++) {
+ usersToRemove[i] = extraPreCreatedUsers.get(i);
+ }
+ removePreCreatedUsers(usersToRemove);
+ }
+
+ if (numberInvalidUsersToRemove > 0) {
+ for (int i = 0; i < numberInvalidUsersToRemove; i++) {
+ int userId = invalidPreCreatedUsers.keyAt(i);
+ Slog.w(TAG, "removing invalid pre-created user " + userId);
+ mUserManager.removeUser(userId);
+ }
+ }
+ });
+ }
+
+ @VisibleForTesting
+ void runAsync(Runnable r) {
+ // We cannot use SystemServerInitThreadPool because user pre-creation can take too long,
+ // which would crash the SystemServer on SystemServerInitThreadPool.shutdown();
+ String threadName = TAG + ".AsyncTask";
+ Slog.d(TAG, "Starting thread " + threadName);
+ new Thread(() -> {
+ try {
+ r.run();
+ Slog.d(TAG, "Finishing thread " + threadName);
+ } catch (RuntimeException e) {
+ Slog.e(TAG, "runAsync() failed", e);
+ throw e;
+ }
+ }, threadName).start();
+ }
+
+ private void preCreateUsers(int size, boolean isGuest) {
+ String msg = isGuest ? "preCreateGuests-" + size : "preCreateUsers-" + size;
+ Slog.d(TAG, "preCreateUsers: " + msg);
+ for (int i = 1; i <= size; i++) {
+ UserInfo preCreated = preCreateUsers(isGuest);
+ if (preCreated == null) {
+ Slog.w(TAG, "Could not pre-create" + (isGuest ? " guest" : "")
+ + " user #" + i);
+ continue;
+ }
+ }
+ }
+
+ @VisibleForTesting
+ @Nullable
+ UserInfo preCreateUsers(boolean isGuest) {
+ String traceMsg = "pre-create" + (isGuest ? "-guest" : "-user");
+ // NOTE: we want to get rid of UserManagerHelper, so let's call UserManager directly
+ String userType =
+ isGuest ? UserManager.USER_TYPE_FULL_GUEST : UserManager.USER_TYPE_FULL_SECONDARY;
+ UserInfo user = null;
+ try {
+ user = mUserManager.preCreateUser(userType);
+ if (user == null) {
+ logPrecreationFailure(traceMsg, /* cause= */ null);
+ }
+ } catch (Exception e) {
+ logPrecreationFailure(traceMsg, e);
+ }
+ return user;
+ }
+
+ private void removePreCreatedUsers(int[] usersToRemove) {
+ for (int userId : usersToRemove) {
+ Slog.i(TAG, "removing pre-created user with id " + userId);
+ mUserManager.removeUser(userId);
+ }
+ }
+
+ /**
+ * Logs proper message when user pre-creation fails (most likely because there are too many).
+ */
+ @VisibleForTesting
+ void logPrecreationFailure(@NonNull String operation, @Nullable Exception cause) {
+ int maxNumberUsers = UserManager.getMaxSupportedUsers();
+ int currentNumberUsers = mUserManager.getUserCount();
+ String message = new StringBuilder(operation.length() + 100)
+ .append(operation).append(" failed. Number users: ").append(currentNumberUsers)
+ .append(" Max: ").append(maxNumberUsers).toString();
+ if (cause == null) {
+ Slog.w(TAG, message);
+ } else {
+ Slog.w(TAG, message, cause);
+ }
+ }
+}
diff --git a/service/src/com/android/car/watchdog/CarWatchdogService.java b/service/src/com/android/car/watchdog/CarWatchdogService.java
index 488165f..2da867e 100644
--- a/service/src/com/android/car/watchdog/CarWatchdogService.java
+++ b/service/src/com/android/car/watchdog/CarWatchdogService.java
@@ -50,8 +50,8 @@
import android.util.SparseBooleanArray;
import com.android.car.CarLocalServices;
-import com.android.car.CarPowerManagementService;
import com.android.car.CarServiceBase;
+import com.android.car.power.CarPowerManagementService;
import com.android.car.user.CarUserService;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
diff --git a/surround_view/service-impl/SurroundViewSessionTests.cpp b/surround_view/service-impl/SurroundViewSessionTests.cpp
deleted file mode 100644
index a6abd04..0000000
--- a/surround_view/service-impl/SurroundViewSessionTests.cpp
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright 2020 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.
- */
-
-#define LOG_TAG "SurroundViewSessionTests"
-
-#include "mock-evs/MockEvsEnumerator.h"
-#include "mock-evs/MockSurroundViewCallback.h"
-
-#include "IOModule.h"
-#include "SurroundView2dSession.h"
-#include "SurroundView3dSession.h"
-
-#include <android/hardware/automotive/vehicle/2.0/IVehicle.h>
-
-#include <android-base/logging.h>
-
-#include <gtest/gtest.h>
-#include <time.h>
-
-namespace android {
-namespace hardware {
-namespace automotive {
-namespace sv {
-namespace V1_0 {
-namespace implementation {
-namespace {
-
-const char* kSvConfigFilename = "vendor/etc/automotive/sv/sv_sample_config.xml";
-
-// TODO(b/159733690): Verify the callbacks using help/mock methods
-TEST(SurroundViewSessionTests, startAndStopSurroundView2dSession) {
- sp<IEvsEnumerator> fakeEvs = new MockEvsEnumerator();
- IOModule* ioModule = new IOModule(kSvConfigFilename);
- EXPECT_EQ(ioModule->initialize(), IOStatus::OK);
-
- IOModuleConfig config;
- ioModule->getConfig(&config);
-
- sp<SurroundView2dSession> sv2dSession =
- new SurroundView2dSession(fakeEvs, &config);
-
- EXPECT_TRUE(sv2dSession->initialize());
-
- sp<MockSurroundViewCallback> sv2dCallback =
- new MockSurroundViewCallback(sv2dSession);
-
- EXPECT_EQ(sv2dSession->startStream(sv2dCallback), SvResult::OK);
-
- sleep(5);
-
- sv2dSession->stopStream();
-}
-
-TEST(SurroundViewSessionTests, startAndStopSurroundView3dSession) {
- sp<IEvsEnumerator> fakeEvs = new MockEvsEnumerator();
- IOModule* ioModule = new IOModule(kSvConfigFilename);
- EXPECT_EQ(ioModule->initialize(), IOStatus::OK);
-
- IOModuleConfig config;
- ioModule->getConfig(&config);
-
- sp<SurroundView3dSession> sv3dSession =
- new SurroundView3dSession(fakeEvs,
- nullptr, /* VhalHandler */
- nullptr, /* AnimationModule */
- &config);
-
- EXPECT_TRUE(sv3dSession->initialize());
-
- sp<MockSurroundViewCallback> sv3dCallback =
- new MockSurroundViewCallback(sv3dSession);
-
- View3d view = {
- .viewId = 0,
- .pose = {
- .rotation = {.x=0, .y=0, .z=0, .w=1.0f},
- .translation = {.x=0, .y=0, .z=0},
- },
- .horizontalFov = 90,
- };
- vector<View3d> views;
- views.emplace_back(view);
- sv3dSession->setViews(views);
-
- EXPECT_EQ(sv3dSession->startStream(sv3dCallback), SvResult::OK);
-
- sleep(5);
-
- sv3dSession->stopStream();
-}
-
-} // namespace
-} // namespace implementation
-} // namespace V1_0
-} // namespace sv
-} // namespace automotive
-} // namespace hardware
-} // namespace android
diff --git a/tests/BugReportApp/Android.bp b/tests/BugReportApp/Android.bp
index 5642a68..5c6d04b 100644
--- a/tests/BugReportApp/Android.bp
+++ b/tests/BugReportApp/Android.bp
@@ -57,7 +57,7 @@
"jsr305",
],
- required: ["privapp_whitelist_com.android.car.bugreport"],
+ required: ["allowed_privapp_com.android.car.bugreport"],
// Explicitly define annotation processors even if javac can find them from static_libs.
plugins: ["auto_value_plugin"],
diff --git a/tests/BugReportApp/AndroidManifest.xml b/tests/BugReportApp/AndroidManifest.xml
index 7389260..d70dc9b 100644
--- a/tests/BugReportApp/AndroidManifest.xml
+++ b/tests/BugReportApp/AndroidManifest.xml
@@ -70,10 +70,15 @@
<service android:name="com.android.car.bugreport.UploadJob"
android:permission="android.permission.BIND_JOB_SERVICE"
- android:exported="true"/>
+ android:exported="false"/>
+
+ <service android:name="com.android.car.bugreport.ExpireOldBugReportsJob"
+ android:permission="android.permission.BIND_JOB_SERVICE"
+ android:exported="false"/>
<receiver android:name=".StartUpBootReceiver"
- android:exported="true">
+ android:enabled="true"
+ android:exported="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED"/>
</intent-filter>
diff --git a/tests/BugReportApp/res/layout/bug_info_view.xml b/tests/BugReportApp/res/layout/bug_info_view.xml
index 1841f9c..de3da1d 100644
--- a/tests/BugReportApp/res/layout/bug_info_view.xml
+++ b/tests/BugReportApp/res/layout/bug_info_view.xml
@@ -50,12 +50,20 @@
</LinearLayout>
<TextView
- android:id="@+id/bug_info_row_message"
+ android:id="@+id/bug_info_row_status_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
style="@style/TextAppearance.BugReportUi.Body" />
+ <TextView
+ android:id="@+id/bug_info_row_expiration_notice"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="gone"
+ android:text="@string/bugreport_info_expires_soon_notice"
+ android:textSize="@dimen/bug_report_default_text_size" />
+
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
diff --git a/tests/BugReportApp/res/values-af/strings.xml b/tests/BugReportApp/res/values-af/strings.xml
index 9289688..9891c46 100644
--- a/tests/BugReportApp/res/values-af/strings.xml
+++ b/tests/BugReportApp/res/values-af/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Maak toe"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Begin foutverslag"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Status:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Hierdie foutverslag sal binnekort verval"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Dien in"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Kanselleer"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Laai op"</string>
diff --git a/tests/BugReportApp/res/values-am/strings.xml b/tests/BugReportApp/res/values-am/strings.xml
index 3b7ca5c..9013eac 100644
--- a/tests/BugReportApp/res/values-am/strings.xml
+++ b/tests/BugReportApp/res/values-am/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"ዝጋ"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"የሳንካ ሪፖርትን ጀምር"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"ሁኔታ፦"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"ይህ የሳንካ ሪፖርት በቅርቡ የአገልግሎት ጊዜ ያበቃል"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"አስገባ"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"ይቅር"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"ስቀል"</string>
diff --git a/tests/BugReportApp/res/values-ar/strings.xml b/tests/BugReportApp/res/values-ar/strings.xml
index 5362a12..5ffd7e2 100644
--- a/tests/BugReportApp/res/values-ar/strings.xml
+++ b/tests/BugReportApp/res/values-ar/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"إغلاق"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"بدء إعداد تقرير الأخطاء"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"الحالة:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"ستنتهي صلاحية تقرير الخطأ هذا قريبًا."</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"إرسال"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"إلغاء"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"تحميل"</string>
diff --git a/tests/BugReportApp/res/values-as/strings.xml b/tests/BugReportApp/res/values-as/strings.xml
index 80c8eb2..2b6c382 100644
--- a/tests/BugReportApp/res/values-as/strings.xml
+++ b/tests/BugReportApp/res/values-as/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"বন্ধ কৰক"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"বাগ ৰিপ’ৰ্ট আৰম্ভ কৰক"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"স্থিতি:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"এই বাগ সম্পর্কীয় অভিযোগৰ ম্যাদ সোনকালে উকলিব"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"দাখিল কৰক"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"বাতিল কৰক"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"আপল’ড কৰক"</string>
diff --git a/tests/BugReportApp/res/values-az/strings.xml b/tests/BugReportApp/res/values-az/strings.xml
index e8facc9..8fea2ff 100644
--- a/tests/BugReportApp/res/values-az/strings.xml
+++ b/tests/BugReportApp/res/values-az/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Bağlayın"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Baq hesabatını başladın"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Status:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Bu baq hesabatının müddəti tezliklə bitəcək"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Təqdim edin"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Ləğv edin"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Yükləyin"</string>
diff --git a/tests/BugReportApp/res/values-b+sr+Latn/strings.xml b/tests/BugReportApp/res/values-b+sr+Latn/strings.xml
index f78771d..243ec44 100644
--- a/tests/BugReportApp/res/values-b+sr+Latn/strings.xml
+++ b/tests/BugReportApp/res/values-b+sr+Latn/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Zatvori"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Pokreni pravljenje izveštaja o grešci"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Status:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Ovaj izveštaj o grešci uskoro ističe"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Pošalji"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Otkaži"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Otpremi"</string>
diff --git a/tests/BugReportApp/res/values-be/strings.xml b/tests/BugReportApp/res/values-be/strings.xml
index ab6639f..41b83d9 100644
--- a/tests/BugReportApp/res/values-be/strings.xml
+++ b/tests/BugReportApp/res/values-be/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Закрыць"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Запусціць справаздачу пра памылкі"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Стан:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Тэрмін дзеяння гэтай справаздачы пра памылкі неўзабаве скончыцца"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Пацвердзіць"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Скасаваць"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Запампаваць"</string>
diff --git a/tests/BugReportApp/res/values-bg/strings.xml b/tests/BugReportApp/res/values-bg/strings.xml
index 720c2d6..32c9ab9 100644
--- a/tests/BugReportApp/res/values-bg/strings.xml
+++ b/tests/BugReportApp/res/values-bg/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Затваряне"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Създаване на сигнал за програмна грешка"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Състояние:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Този сигнал за програмна грешка скоро ще изтече"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Изпращане"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Отказ"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Качване"</string>
diff --git a/tests/BugReportApp/res/values-bn/strings.xml b/tests/BugReportApp/res/values-bn/strings.xml
index e458f0d..ef19f4d 100644
--- a/tests/BugReportApp/res/values-bn/strings.xml
+++ b/tests/BugReportApp/res/values-bn/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"বন্ধ করুন"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"সমস্যার বিষয়ে রিপোর্ট শুরু করুন"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"স্ট্যাটাস:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"এই সমস্যা সংক্রান্ত প্রতিবেদনের মেয়াদ শীঘ্রই শেষ হয়ে যাবে"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"জমা দিন"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"বাতিল করুন"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"আপলোড করুন"</string>
diff --git a/tests/BugReportApp/res/values-bs/strings.xml b/tests/BugReportApp/res/values-bs/strings.xml
index 640be50..0fde893 100644
--- a/tests/BugReportApp/res/values-bs/strings.xml
+++ b/tests/BugReportApp/res/values-bs/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Zatvori"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Pokreni kreiranje izvještaja o greškama"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Status:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Ovaj izvještaj o greškama će uskoro isteći"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Pošalji"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Otkaži"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Otpremi"</string>
diff --git a/tests/BugReportApp/res/values-ca/strings.xml b/tests/BugReportApp/res/values-ca/strings.xml
index 4b47edd..dd4d1bc 100644
--- a/tests/BugReportApp/res/values-ca/strings.xml
+++ b/tests/BugReportApp/res/values-ca/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Tanca"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Inicia l\'informe d\'errors"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Estat:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Aquest informe d\'errors caducarà aviat"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Envia"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Cancel·la"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Penja"</string>
diff --git a/tests/BugReportApp/res/values-cs/strings.xml b/tests/BugReportApp/res/values-cs/strings.xml
index 96d7f9b..f4ebf47 100644
--- a/tests/BugReportApp/res/values-cs/strings.xml
+++ b/tests/BugReportApp/res/values-cs/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Zavřít"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Vytvořit zprávu o chybě"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Stav:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Platnost této zprávy o chybě brzy vyprší"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Odeslat"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Zrušit"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Nahrát"</string>
diff --git a/tests/BugReportApp/res/values-da/strings.xml b/tests/BugReportApp/res/values-da/strings.xml
index c7bc37e..b9459fa 100644
--- a/tests/BugReportApp/res/values-da/strings.xml
+++ b/tests/BugReportApp/res/values-da/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Luk"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Start fejlrapporten"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Status:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Denne fejlrapport udløber snart"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Send"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Annuller"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Upload"</string>
diff --git a/tests/BugReportApp/res/values-de/strings.xml b/tests/BugReportApp/res/values-de/strings.xml
index b19c720..eeca3d6 100644
--- a/tests/BugReportApp/res/values-de/strings.xml
+++ b/tests/BugReportApp/res/values-de/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Schließen"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Fehlerbericht starten"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Status:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Dieser Fehlerbericht ist bald nicht mehr gültig"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Senden"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Abbrechen"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Hochladen"</string>
diff --git a/tests/BugReportApp/res/values-el/strings.xml b/tests/BugReportApp/res/values-el/strings.xml
index 2a31225..8f2d5a6 100644
--- a/tests/BugReportApp/res/values-el/strings.xml
+++ b/tests/BugReportApp/res/values-el/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Κλείσιμο"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Έναρξη αναφοράς σφάλματος"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Κατάσταση:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Αυτή η αναφορά σφάλματος θα λήξει σύντομα"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Υποβολή"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Ακύρωση"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Μεταφόρτωση"</string>
diff --git a/tests/BugReportApp/res/values-en-rAU/strings.xml b/tests/BugReportApp/res/values-en-rAU/strings.xml
index 1c8a539..f6b112f 100644
--- a/tests/BugReportApp/res/values-en-rAU/strings.xml
+++ b/tests/BugReportApp/res/values-en-rAU/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Close"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Start bug report"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Status:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"This bug report will expire soon"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Submit"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Cancel"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Upload"</string>
diff --git a/tests/BugReportApp/res/values-en-rCA/strings.xml b/tests/BugReportApp/res/values-en-rCA/strings.xml
index 1c8a539..f6b112f 100644
--- a/tests/BugReportApp/res/values-en-rCA/strings.xml
+++ b/tests/BugReportApp/res/values-en-rCA/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Close"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Start bug report"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Status:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"This bug report will expire soon"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Submit"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Cancel"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Upload"</string>
diff --git a/tests/BugReportApp/res/values-en-rGB/strings.xml b/tests/BugReportApp/res/values-en-rGB/strings.xml
index 1c8a539..f6b112f 100644
--- a/tests/BugReportApp/res/values-en-rGB/strings.xml
+++ b/tests/BugReportApp/res/values-en-rGB/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Close"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Start bug report"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Status:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"This bug report will expire soon"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Submit"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Cancel"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Upload"</string>
diff --git a/tests/BugReportApp/res/values-en-rIN/strings.xml b/tests/BugReportApp/res/values-en-rIN/strings.xml
index 1c8a539..f6b112f 100644
--- a/tests/BugReportApp/res/values-en-rIN/strings.xml
+++ b/tests/BugReportApp/res/values-en-rIN/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Close"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Start bug report"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Status:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"This bug report will expire soon"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Submit"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Cancel"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Upload"</string>
diff --git a/tests/BugReportApp/res/values-en-rXC/strings.xml b/tests/BugReportApp/res/values-en-rXC/strings.xml
index e9715bb..b3b3aa9 100644
--- a/tests/BugReportApp/res/values-en-rXC/strings.xml
+++ b/tests/BugReportApp/res/values-en-rXC/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Close"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Start Bug Report"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Status:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"This bug report will expire soon"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Submit"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Cancel"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Upload"</string>
diff --git a/tests/BugReportApp/res/values-es-rUS/strings.xml b/tests/BugReportApp/res/values-es-rUS/strings.xml
index a972508..3216579 100644
--- a/tests/BugReportApp/res/values-es-rUS/strings.xml
+++ b/tests/BugReportApp/res/values-es-rUS/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Cerrar"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Iniciar informe de errores"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Estado:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Este informe de errores caducará pronto"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Enviar"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Cancelar"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Subir"</string>
diff --git a/tests/BugReportApp/res/values-es/strings.xml b/tests/BugReportApp/res/values-es/strings.xml
index a9ae8ba..9f54a27 100644
--- a/tests/BugReportApp/res/values-es/strings.xml
+++ b/tests/BugReportApp/res/values-es/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Cerrar"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Iniciar informe de errores"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Estado:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Este informe de errores caduca pronto"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Enviar"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Cancelar"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Subir"</string>
diff --git a/tests/BugReportApp/res/values-et/strings.xml b/tests/BugReportApp/res/values-et/strings.xml
index ef06e9e0..abba855 100644
--- a/tests/BugReportApp/res/values-et/strings.xml
+++ b/tests/BugReportApp/res/values-et/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Sule"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Alusta veaaruande jäädvustamist"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Olek:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"See veaaruanne aegub peagi"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Esita"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Tühista"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Laadi üles"</string>
diff --git a/tests/BugReportApp/res/values-eu/strings.xml b/tests/BugReportApp/res/values-eu/strings.xml
index 81fa7df..fa395a9 100644
--- a/tests/BugReportApp/res/values-eu/strings.xml
+++ b/tests/BugReportApp/res/values-eu/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Itxi"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Sortu akatsen txostena"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Egoera:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Akatsen txosten hau laster iraungiko da"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Bidali"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Utzi"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Kargatu"</string>
diff --git a/tests/BugReportApp/res/values-fa/strings.xml b/tests/BugReportApp/res/values-fa/strings.xml
index c4926c9..86b451a 100644
--- a/tests/BugReportApp/res/values-fa/strings.xml
+++ b/tests/BugReportApp/res/values-fa/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"بستن"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"شروع گزارش اشکال"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"وضعیت:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"این گزارش اشکال بهزودی منقضی میشود"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"ارسال"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"لغو"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"بارگذاری"</string>
diff --git a/tests/BugReportApp/res/values-fi/strings.xml b/tests/BugReportApp/res/values-fi/strings.xml
index cd46aed..9acc7ff 100644
--- a/tests/BugReportApp/res/values-fi/strings.xml
+++ b/tests/BugReportApp/res/values-fi/strings.xml
@@ -21,13 +21,14 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Sulje"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Aloita virheraportti"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Tila:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Tämä virheraportti vanhenee pian"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Lähetä"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Peruuta"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Lataa"</string>
<string name="bugreport_dialog_save" msgid="3291363266190644226">"Tallenna"</string>
<string name="bugreport_dialog_show_bugreports" msgid="6964385141627170297">"Näytä virheraportit"</string>
<string name="bugreport_dialog_close" msgid="289925437277364266">"Sulje"</string>
- <string name="bugreport_dialog_title" msgid="3315160684205929910">"Kuvaile ongelmaa puhumalla"</string>
+ <string name="bugreport_dialog_title" msgid="3315160684205929910">"Kerro ongelmasta tarkemmin puhumalla"</string>
<string name="bugreport_dialog_add_audio_to_existing" msgid="4958460267276935700">"Ääniviesti virheraportin kohdassa %s"</string>
<string name="bugreport_dialog_recording_finished" msgid="3982335902169398758">"Tallennus lopetettu"</string>
<string name="bugreport_dialog_in_progress_title" msgid="3782308141532622394">"Virheraporttia kerätään jo"</string>
diff --git a/tests/BugReportApp/res/values-fr-rCA/strings.xml b/tests/BugReportApp/res/values-fr-rCA/strings.xml
index 4da30e2..21a12d0 100644
--- a/tests/BugReportApp/res/values-fr-rCA/strings.xml
+++ b/tests/BugReportApp/res/values-fr-rCA/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Fermer"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Lancer le rapport de bogue"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"État :"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Ce rapport de bogue expirera bientôt"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Envoyer"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Annuler"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Téléverser"</string>
diff --git a/tests/BugReportApp/res/values-fr/strings.xml b/tests/BugReportApp/res/values-fr/strings.xml
index 35b1cb7..ff67a34 100644
--- a/tests/BugReportApp/res/values-fr/strings.xml
+++ b/tests/BugReportApp/res/values-fr/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Fermer"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Lancer le rapport de bug"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"État :"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Le rapport de bug va bientôt arriver à expiration"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Envoyer"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Annuler"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Importer"</string>
diff --git a/tests/BugReportApp/res/values-gl/strings.xml b/tests/BugReportApp/res/values-gl/strings.xml
index 81001af..adaa47a 100644
--- a/tests/BugReportApp/res/values-gl/strings.xml
+++ b/tests/BugReportApp/res/values-gl/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Pechar"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Iniciar informe de erros"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Estado:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Este informe de erros caducará pronto"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Enviar"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Cancelar"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Cargar"</string>
diff --git a/tests/BugReportApp/res/values-gu/strings.xml b/tests/BugReportApp/res/values-gu/strings.xml
index fc8c085..124fec9 100644
--- a/tests/BugReportApp/res/values-gu/strings.xml
+++ b/tests/BugReportApp/res/values-gu/strings.xml
@@ -17,10 +17,11 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2596316479611335185">"ખામીની જાણકારી"</string>
+ <string name="app_name" msgid="2596316479611335185">"બગ રિપોર્ટ"</string>
<string name="bugreport_info_quit" msgid="5590138890181142473">"બંધ કરો"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"ખામીની જાણકારી શરૂ કરો"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"સ્ટેટસ:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"ટૂંક સમયમાં ખામીના આ રિપોર્ટની સમયસીમા સમાપ્ત થશે"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"સબમિટ કરો"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"રદ કરો"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"અપલોડ કરો"</string>
diff --git a/tests/BugReportApp/res/values-hi/strings.xml b/tests/BugReportApp/res/values-hi/strings.xml
index ca999e7..ff12509 100644
--- a/tests/BugReportApp/res/values-hi/strings.xml
+++ b/tests/BugReportApp/res/values-hi/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"बंद करें"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"गड़बड़ी की रिपोर्ट बनाना शुरू करें"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"स्थिति:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"गड़बड़ी की यह रिपोर्ट जल्द ही हटा दी जाएगी"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"सबमिट करें"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"रद्द करें"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"अपलोड करें"</string>
diff --git a/tests/BugReportApp/res/values-hr/strings.xml b/tests/BugReportApp/res/values-hr/strings.xml
index bccb44a..86945ea 100644
--- a/tests/BugReportApp/res/values-hr/strings.xml
+++ b/tests/BugReportApp/res/values-hr/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Zatvori"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Pokreni izvješće o programskoj pogrešci"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Status:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Ovo izvješće o programskoj pogrešci uskoro će isteći"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Pošalji"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Odustani"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Prijenos"</string>
diff --git a/tests/BugReportApp/res/values-hu/strings.xml b/tests/BugReportApp/res/values-hu/strings.xml
index 5e6ca67..01379ca 100644
--- a/tests/BugReportApp/res/values-hu/strings.xml
+++ b/tests/BugReportApp/res/values-hu/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Bezárás"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Hibajelentés indítása"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Állapot:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"A hibajelentés érvényessége hamarosan lejár"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Küldés"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Mégse"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Feltöltés"</string>
diff --git a/tests/BugReportApp/res/values-hy/strings.xml b/tests/BugReportApp/res/values-hy/strings.xml
index 5ed63f9..fae2e3b 100644
--- a/tests/BugReportApp/res/values-hy/strings.xml
+++ b/tests/BugReportApp/res/values-hy/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Փակել"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Գործարկել վրիպակի մասին զեկույցը"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Կարգավիճակը՝"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Վրիպակի մասին այս հաղորդման ժամկետը շուտով կլրանա"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Ուղարկել"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Չեղարկել"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Վերբեռնել"</string>
@@ -28,9 +29,9 @@
<string name="bugreport_dialog_show_bugreports" msgid="6964385141627170297">"Ցույց տալ վրիպակի մասին զեկույցները"</string>
<string name="bugreport_dialog_close" msgid="289925437277364266">"Փակել"</string>
<string name="bugreport_dialog_title" msgid="3315160684205929910">"Բարձրաձայն նկարագրեք սխալը"</string>
- <string name="bugreport_dialog_add_audio_to_existing" msgid="4958460267276935700">"Վրիպակների մասին հաղորդման վերաբերյալ ձայնային հաղորդագրություն, ժամը՝ %s։"</string>
+ <string name="bugreport_dialog_add_audio_to_existing" msgid="4958460267276935700">"Վրիպակների մասին հաշվետվության վերաբերյալ ձայնային հաղորդագրություն, ժամը՝ %s։"</string>
<string name="bugreport_dialog_recording_finished" msgid="3982335902169398758">"Գրանցումն ավարտվեց"</string>
- <string name="bugreport_dialog_in_progress_title" msgid="3782308141532622394">"Վրիպակների մասին զեկույցն արդեն բեռնվում է"</string>
+ <string name="bugreport_dialog_in_progress_title" msgid="3782308141532622394">"Վրիպակների մասին հաշվետվությունն արդեն բեռնվում է"</string>
<string name="bugreport_dialog_in_progress_title_finished" msgid="1610236990020413471">"Սխալի մասին զեկույցը բեռնվել է"</string>
<string name="bugreport_add_audio_button_text" msgid="8606400151705699144">"Ավելացնել աուդիո"</string>
<string name="bugreport_add_audio_upload_button_text" msgid="3830917832551764694">"Ավելացնել աուդիո և վերբեռնել"</string>
@@ -38,7 +39,7 @@
<string name="bugreport_upload_button_text" msgid="4136749466634820848">"Վերբեռնել"</string>
<string name="bugreport_upload_gcs_button_text" msgid="5844929656507607424">"Վերբեռնել GCS"</string>
<string name="toast_permissions_denied" msgid="7054832711916992770">"Տրամադրեք թույլտվություններ"</string>
- <string name="toast_bug_report_in_progress" msgid="8319601113129121579">"Վրիպակների մասին զեկույցն արդեն բեռնվել է"</string>
+ <string name="toast_bug_report_in_progress" msgid="8319601113129121579">"Վրիպակների մասին հաշվետվությունն արդեն բեռնվել է"</string>
<string name="toast_bug_report_started" msgid="7154589593986557754">"Վրիպակների մասին հաղորդումը սկսված է"</string>
<string name="toast_status_failed" msgid="6365384202315043395">"Վրիպակի զեկույցի հետ կապված սխալ առաջացավ"</string>
<string name="toast_status_screencap_failed" msgid="2187083897594745149">"Չհաջողվեց ստեղծել սքրինշոթ"</string>
diff --git a/tests/BugReportApp/res/values-in/strings.xml b/tests/BugReportApp/res/values-in/strings.xml
index 60a3af1..2d76a43 100644
--- a/tests/BugReportApp/res/values-in/strings.xml
+++ b/tests/BugReportApp/res/values-in/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Tutup"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Mulai Laporan Bug"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Status:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Masa berlaku laporan bug ini akan segera berakhir"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Kirim"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Batal"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Upload"</string>
diff --git a/tests/BugReportApp/res/values-is/strings.xml b/tests/BugReportApp/res/values-is/strings.xml
index b383518..2641eee 100644
--- a/tests/BugReportApp/res/values-is/strings.xml
+++ b/tests/BugReportApp/res/values-is/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Loka"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Skrá villutilkynningu"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Staða:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Þessi villutilkynning rennur fljótlega út"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Senda inn"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Hætta við"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Hlaða inn"</string>
diff --git a/tests/BugReportApp/res/values-it/strings.xml b/tests/BugReportApp/res/values-it/strings.xml
index 3fdff3d..fa508f9 100644
--- a/tests/BugReportApp/res/values-it/strings.xml
+++ b/tests/BugReportApp/res/values-it/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Chiudi"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Avvia BugReport"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Stato:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Questa segnalazione di bug scadrà a breve"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Invia"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Annulla"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Carica"</string>
diff --git a/tests/BugReportApp/res/values-iw/strings.xml b/tests/BugReportApp/res/values-iw/strings.xml
index 956cc5e..bb94591 100644
--- a/tests/BugReportApp/res/values-iw/strings.xml
+++ b/tests/BugReportApp/res/values-iw/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"סגירה"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"התחלה של דוח על באג"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"סטטוס:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"תוקף הדוח על הבאג הזה יפוג בקרוב"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"שליחה"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"ביטול"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"העלאה"</string>
diff --git a/tests/BugReportApp/res/values-ja/strings.xml b/tests/BugReportApp/res/values-ja/strings.xml
index 6635bf3..afc40a5 100644
--- a/tests/BugReportApp/res/values-ja/strings.xml
+++ b/tests/BugReportApp/res/values-ja/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"閉じる"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"バグレポートの収集を開始"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"ステータス:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"このバグレポートは間もなく有効期限が切れます"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"送信"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"キャンセル"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"アップロード"</string>
diff --git a/tests/BugReportApp/res/values-ka/strings.xml b/tests/BugReportApp/res/values-ka/strings.xml
index 7fdadb5..cdc732e 100644
--- a/tests/BugReportApp/res/values-ka/strings.xml
+++ b/tests/BugReportApp/res/values-ka/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"დახურვა"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"სისტემის ხარვეზის ანგარიშის მომზადების დაწყება"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"სტატუსი:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"სისტემის ხარვეზის ამ ანგარიშის ვადა მალე ამოიწურება"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"გაგზავნა"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"გაუქმება"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"ატვირთვა"</string>
diff --git a/tests/BugReportApp/res/values-kk/strings.xml b/tests/BugReportApp/res/values-kk/strings.xml
index a4b67a6..f78cf0f 100644
--- a/tests/BugReportApp/res/values-kk/strings.xml
+++ b/tests/BugReportApp/res/values-kk/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Жабу"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Қате туралы есеп алуды бастау"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Күйі:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Бұл қате туралы есептің мерзімі жақында бітеді."</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Жіберу"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Бас тарту"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Жүктеп салу"</string>
diff --git a/tests/BugReportApp/res/values-km/strings.xml b/tests/BugReportApp/res/values-km/strings.xml
index 2d86e9c..a7b95b8 100644
--- a/tests/BugReportApp/res/values-km/strings.xml
+++ b/tests/BugReportApp/res/values-km/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"បិទ"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"ចាប់ផ្ដើមរបាយការណ៍អំពីបញ្ហា"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"ស្ថានភាព៖"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"របាយការណ៍អំពីបញ្ហានេះនឹងផុតកំណត់ក្នុងពេលឆាប់ៗនេះ"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"ដាក់បញ្ជូន"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"បោះបង់"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"បង្ហោះ"</string>
diff --git a/tests/BugReportApp/res/values-kn/strings.xml b/tests/BugReportApp/res/values-kn/strings.xml
index e39f88f..8149343 100644
--- a/tests/BugReportApp/res/values-kn/strings.xml
+++ b/tests/BugReportApp/res/values-kn/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"ಮುಚ್ಚಿರಿ"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"ಬಗ್ ವರದಿಮಾಡುವಿಕೆಯನ್ನು ಪ್ರಾರಂಭಿಸಿ"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"ಸ್ಥಿತಿ:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"ಈ ಬಗ್ ವರದಿಯ ಅವಧಿಯು ಶೀಘ್ರದಲ್ಲೇ ಮುಕ್ತಾಯವಾಗುತ್ತದೆ"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"ಸಲ್ಲಿಸಿ"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"ರದ್ದುಮಾಡಿ"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"ಅಪ್ಲೋಡ್ ಮಾಡಿ"</string>
diff --git a/tests/BugReportApp/res/values-ko/strings.xml b/tests/BugReportApp/res/values-ko/strings.xml
index 64d4bb7..6162aae 100644
--- a/tests/BugReportApp/res/values-ko/strings.xml
+++ b/tests/BugReportApp/res/values-ko/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"닫기"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"버그 신고 시작"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"상태:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"이 버그 보고서는 곧 만료됩니다."</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"제출"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"취소"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"업로드"</string>
diff --git a/tests/BugReportApp/res/values-ky/strings.xml b/tests/BugReportApp/res/values-ky/strings.xml
index 6ef7370..4d06e55 100644
--- a/tests/BugReportApp/res/values-ky/strings.xml
+++ b/tests/BugReportApp/res/values-ky/strings.xml
@@ -17,10 +17,11 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2596316479611335185">"Мүчүлүштүк тууралуу кабар берүү"</string>
+ <string name="app_name" msgid="2596316479611335185">"Мүчүлүштүк тууралуу кабарлоо"</string>
<string name="bugreport_info_quit" msgid="5590138890181142473">"Жабуу"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Мүчүлүштүк тууралуу кабарды берип баштоо"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Абалы:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Мүчүлүштүктөр жөнүндө кабардын мөөнөтү жакында бүтөт"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Тапшыруу"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Жокко чыгаруу"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Жүктөп берүү"</string>
@@ -45,5 +46,5 @@
<string name="toast_status_dump_state_failed" msgid="8072469535227541761">"Абал тууралуу маалымат алынган жок"</string>
<string name="notification_bugreport_in_progress" msgid="8486454116357963238">"Мүчүлүштүк тууралуу кабар даярдалууда"</string>
<string name="notification_bugreport_finished_title" msgid="3970195939909624320">"Мүчүлүштүк тууралуу кабар алынды"</string>
- <string name="notification_bugreport_channel_name" msgid="776902295433824255">"Мүчүлүштүк тууралуу кабар берүү абалынын каналы"</string>
+ <string name="notification_bugreport_channel_name" msgid="776902295433824255">"Мүчүлүштүк тууралуу кабарлоо абалынын каналы"</string>
</resources>
diff --git a/tests/BugReportApp/res/values-lo/strings.xml b/tests/BugReportApp/res/values-lo/strings.xml
index 362a4aa..57d0d82 100644
--- a/tests/BugReportApp/res/values-lo/strings.xml
+++ b/tests/BugReportApp/res/values-lo/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"ປິດ"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"ເລີີ່ມລາຍງານບັນຫາ"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"ສະຖານະ:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"ລາຍງານຂໍ້ຜິດພາດນີ້ຈະໝົດອາຍຸໃນໄວໆນີ້"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"ສົ່ງຂໍ້ມູນ"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"ຍົກເລີກ"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"ອັບໂຫລດ"</string>
diff --git a/tests/BugReportApp/res/values-lt/strings.xml b/tests/BugReportApp/res/values-lt/strings.xml
index 12ee21f..6b5dd33 100644
--- a/tests/BugReportApp/res/values-lt/strings.xml
+++ b/tests/BugReportApp/res/values-lt/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Uždaryti"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Pradėti pranešimą apie riktą"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Būsena:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Šis pranešimas apie riktą netrukus nustos galioti"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Pateikti"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Atšaukti"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Įkelti"</string>
diff --git a/tests/BugReportApp/res/values-lv/strings.xml b/tests/BugReportApp/res/values-lv/strings.xml
index 509c297..fe21bd7 100644
--- a/tests/BugReportApp/res/values-lv/strings.xml
+++ b/tests/BugReportApp/res/values-lv/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Aizvērt"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Sākt kļūdu pārskata izveidi"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Statuss:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Šī kļūdas pārskata derīguma termiņš drīz beigsies."</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Iesniegt"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Atcelt"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Augšupielādēt"</string>
diff --git a/tests/BugReportApp/res/values-mk/strings.xml b/tests/BugReportApp/res/values-mk/strings.xml
index 875c82e..9681a1b 100644
--- a/tests/BugReportApp/res/values-mk/strings.xml
+++ b/tests/BugReportApp/res/values-mk/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Затвори"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Започни извештај за грешка"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Статус:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Извештајот за грешки наскоро ќе истече"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Испрати"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Откажи"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Прикачи"</string>
diff --git a/tests/BugReportApp/res/values-ml/strings.xml b/tests/BugReportApp/res/values-ml/strings.xml
index f9983cf..e00f964 100644
--- a/tests/BugReportApp/res/values-ml/strings.xml
+++ b/tests/BugReportApp/res/values-ml/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"അടയ്ക്കുക"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"ബഗ് റിപ്പോർട്ട് ആരംഭിക്കുക"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"നില:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"ഈ ബഗ് റിപ്പോർട്ട് ഉടൻ കാലഹരണപ്പെടും"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"സമർപ്പിക്കുക"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"റദ്ദാക്കുക"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"അപ്ലോഡ് ചെയ്യുക"</string>
diff --git a/tests/BugReportApp/res/values-mn/strings.xml b/tests/BugReportApp/res/values-mn/strings.xml
index ac58d0a..cd503a7 100644
--- a/tests/BugReportApp/res/values-mn/strings.xml
+++ b/tests/BugReportApp/res/values-mn/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Хаах"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Алдааны мэдээг эхлүүлэх"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Төлөв:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Энэ алдааны мэдээний хугацаа удахгүй дуусна"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Илгээх"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Цуцлах"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Байршуулах"</string>
diff --git a/tests/BugReportApp/res/values-mr/strings.xml b/tests/BugReportApp/res/values-mr/strings.xml
index 50a97e7..c69f650 100644
--- a/tests/BugReportApp/res/values-mr/strings.xml
+++ b/tests/BugReportApp/res/values-mr/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"बंद करा"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"बग रिपोर्ट तयार करणे सुरू करा"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"स्थिती:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"हा बग रिपोर्ट लवकरच एक्स्पायर होईल"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"सबमिट करा"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"रद्द करा"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"अपलोड करा"</string>
@@ -45,5 +46,5 @@
<string name="toast_status_dump_state_failed" msgid="8072469535227541761">"डंप स्थितीवर बदलता आले नाही"</string>
<string name="notification_bugreport_in_progress" msgid="8486454116357963238">"बग रिपोर्ट तयार करणे प्रगतिपथावर आहे"</string>
<string name="notification_bugreport_finished_title" msgid="3970195939909624320">"बग रिपोर्ट गोळा केला"</string>
- <string name="notification_bugreport_channel_name" msgid="776902295433824255">"बग रिपोर्ट स्थिती चॅनेल"</string>
+ <string name="notification_bugreport_channel_name" msgid="776902295433824255">"बग रिपोर्ट स्थिती चॅनल"</string>
</resources>
diff --git a/tests/BugReportApp/res/values-ms/strings.xml b/tests/BugReportApp/res/values-ms/strings.xml
index 289b6e5..5e77e6b 100644
--- a/tests/BugReportApp/res/values-ms/strings.xml
+++ b/tests/BugReportApp/res/values-ms/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Tutup"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Mulakan Laporan Pepijat"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Status:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Laporan pepijat ini akan tamat tempoh tidak lama lagi"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Serah"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Batal"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Muat naik"</string>
diff --git a/tests/BugReportApp/res/values-my/strings.xml b/tests/BugReportApp/res/values-my/strings.xml
index 08dc4d4..0d7b693 100644
--- a/tests/BugReportApp/res/values-my/strings.xml
+++ b/tests/BugReportApp/res/values-my/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"ပိတ်ရန်"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"ချွတ်ယွင်းမှု အစီရင်ခံခြင်းကို စတင်ရန်"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"အခြေအနေ-"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"ချွတ်ယွင်းမှု အစီရင်ခံချက် မကြာမီ သက်တမ်းကုန်ပါမည်"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"ပေးပို့ရန်"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"မလုပ်တော့"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"အပ်လုဒ်လုပ်ရန်"</string>
diff --git a/tests/BugReportApp/res/values-nb/strings.xml b/tests/BugReportApp/res/values-nb/strings.xml
index 581426d..4aa225a 100644
--- a/tests/BugReportApp/res/values-nb/strings.xml
+++ b/tests/BugReportApp/res/values-nb/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Lukk"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Start feilrapport"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Status:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Denne feilrapporten utløper snart"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Send inn"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Avbryt"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Last opp"</string>
diff --git a/tests/BugReportApp/res/values-ne/strings.xml b/tests/BugReportApp/res/values-ne/strings.xml
index 997cea1..737f745 100644
--- a/tests/BugReportApp/res/values-ne/strings.xml
+++ b/tests/BugReportApp/res/values-ne/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"बन्द गर्नुहोस्"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"बग रिपोर्ट सङ्कलन गर्ने कार्य सुरु गर्नुहोस्"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"स्थिति:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"यो बग रिपोर्ट चाँडै नै हटाइने छ"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"पेस गर्नुहोस्"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"रद्द गर्नुहोस्"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"अपलोड गर्नुहोस्"</string>
@@ -41,7 +42,7 @@
<string name="toast_bug_report_in_progress" msgid="8319601113129121579">"बग रिपोर्ट पहिलेदेखि नै सङ्कलन भइरहेको छ"</string>
<string name="toast_bug_report_started" msgid="7154589593986557754">"बगबारे रिपोर्ट गर्ने कार्य सुरु भयो"</string>
<string name="toast_status_failed" msgid="6365384202315043395">"बग रिपोर्ट सङ्कलन गर्न सकिएन"</string>
- <string name="toast_status_screencap_failed" msgid="2187083897594745149">"स्क्रिनको तस्बिर खिच्न सकिएन"</string>
+ <string name="toast_status_screencap_failed" msgid="2187083897594745149">"स्क्रिनको फोटो खिच्न सकिएन"</string>
<string name="toast_status_dump_state_failed" msgid="8072469535227541761">"डम्प स्टेटले काम गर्न सकेन"</string>
<string name="notification_bugreport_in_progress" msgid="8486454116357963238">"बग रिपोर्ट सङ्कलन गर्ने कार्य जारी छ"</string>
<string name="notification_bugreport_finished_title" msgid="3970195939909624320">"बग रिपोर्ट सङ्कलन गरियो"</string>
diff --git a/tests/BugReportApp/res/values-nl/strings.xml b/tests/BugReportApp/res/values-nl/strings.xml
index 6d378eb..b893a19 100644
--- a/tests/BugReportApp/res/values-nl/strings.xml
+++ b/tests/BugReportApp/res/values-nl/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Sluiten"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Bugrapport starten"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Status:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Dit bugrapport verloopt binnenkort"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Verzenden"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Annuleren"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Uploaden"</string>
diff --git a/tests/BugReportApp/res/values-or/strings.xml b/tests/BugReportApp/res/values-or/strings.xml
index 93784d5..678830d 100644
--- a/tests/BugReportApp/res/values-or/strings.xml
+++ b/tests/BugReportApp/res/values-or/strings.xml
@@ -17,10 +17,11 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="app_name" msgid="2596316479611335185">"ବଗ୍ ରିପୋର୍ଟ୍ କରନ୍ତୁ"</string>
+ <string name="app_name" msgid="2596316479611335185">"ବଗ୍ ରିପୋର୍ଟ୍"</string>
<string name="bugreport_info_quit" msgid="5590138890181142473">"ବନ୍ଦ କରନ୍ତୁ"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"ବଗ୍ ରିପୋର୍ଟ୍ ଆରମ୍ଭ କରନ୍ତୁ"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"ସ୍ଥିତି:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"ଏହି ବଗ୍ ରିପୋର୍ଟର ମିଆଦ ଶୀଘ୍ର ସମାପ୍ତ ହେବ"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"ଦାଖଲ କରନ୍ତୁ"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"ବାତିଲ୍ କରନ୍ତୁ"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"ଅପ୍ଲୋଡ୍"</string>
diff --git a/tests/BugReportApp/res/values-pa/strings.xml b/tests/BugReportApp/res/values-pa/strings.xml
index d6cc684..3d34363 100644
--- a/tests/BugReportApp/res/values-pa/strings.xml
+++ b/tests/BugReportApp/res/values-pa/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"ਬੰਦ ਕਰੋ"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"ਬੱਗ ਰਿਪੋਰਟ ਇਕੱਤਰ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰੋ"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"ਸਥਿਤੀ:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"ਇਸ ਬੱਗ ਰਿਪੋਰਟ ਦੀ ਮਿਆਦ ਜਲਦ ਹੀ ਸਮਾਪਤ ਹੋ ਜਾਵੇਗੀ"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"ਸਪੁਰਦ ਕਰੋ"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"ਰੱਦ ਕਰੋ"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"ਅੱਪਲੋਡ ਕਰੋ"</string>
diff --git a/tests/BugReportApp/res/values-pl/strings.xml b/tests/BugReportApp/res/values-pl/strings.xml
index 7401e26..052665a 100644
--- a/tests/BugReportApp/res/values-pl/strings.xml
+++ b/tests/BugReportApp/res/values-pl/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Zamknij"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Rozpocznij zgłaszanie błędu"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Stan:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Ten raport o błędzie wkrótce wygaśnie"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Prześlij"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Anuluj"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Prześlij"</string>
diff --git a/tests/BugReportApp/res/values-pt-rPT/strings.xml b/tests/BugReportApp/res/values-pt-rPT/strings.xml
index db4cae2..a9dfbae 100644
--- a/tests/BugReportApp/res/values-pt-rPT/strings.xml
+++ b/tests/BugReportApp/res/values-pt-rPT/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Fechar"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Iniciar relatório de erro"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Estado:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Este relatório de erro expira brevemente."</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Enviar"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Cancelar"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Carregar"</string>
diff --git a/tests/BugReportApp/res/values-pt/strings.xml b/tests/BugReportApp/res/values-pt/strings.xml
index 9018501..0d872a7 100644
--- a/tests/BugReportApp/res/values-pt/strings.xml
+++ b/tests/BugReportApp/res/values-pt/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Fechar"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Iniciar relatório do bug"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Status:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Este relatório de bug expirará em breve"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Enviar"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Cancelar"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Fazer upload"</string>
diff --git a/tests/BugReportApp/res/values-ro/strings.xml b/tests/BugReportApp/res/values-ro/strings.xml
index d4748bf..435869b 100644
--- a/tests/BugReportApp/res/values-ro/strings.xml
+++ b/tests/BugReportApp/res/values-ro/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Închideți"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Începeți raportul de eroare"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Stare:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Acest raport de eroare va expira în curând"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Trimiteți"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Anulați"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Încărcați"</string>
diff --git a/tests/BugReportApp/res/values-ru/strings.xml b/tests/BugReportApp/res/values-ru/strings.xml
index 1da94d1..479c80e 100644
--- a/tests/BugReportApp/res/values-ru/strings.xml
+++ b/tests/BugReportApp/res/values-ru/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Закрыть"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Запустить \"Отчет об ошибке\""</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Статус:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Этот отчет об ошибке скоро станет недействительным."</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Отправить"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Отмена"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Загрузить"</string>
diff --git a/tests/BugReportApp/res/values-si/strings.xml b/tests/BugReportApp/res/values-si/strings.xml
index 422d99c..994f997 100644
--- a/tests/BugReportApp/res/values-si/strings.xml
+++ b/tests/BugReportApp/res/values-si/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"වසන්න"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"දෝෂ වාර්තාව ආරම්භ කරන්න"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"තත්ත්වය:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"මෙම දෝෂ වාර්තාව ඉක්මනින් කල් ඉකුත් වනු ඇත"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"ඉදිරිපත් කරන්න"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"අවලංගු කරන්න"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"උඩුගත කරන්න"</string>
diff --git a/tests/BugReportApp/res/values-sk/strings.xml b/tests/BugReportApp/res/values-sk/strings.xml
index 92cd91b..a13406c 100644
--- a/tests/BugReportApp/res/values-sk/strings.xml
+++ b/tests/BugReportApp/res/values-sk/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Zavrieť"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Spustiť hlásenie chyby"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Stav:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Platnosť tohto hlásenia chyby čoskoro vyprší"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Odoslať"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Zrušiť"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Nahrať"</string>
diff --git a/tests/BugReportApp/res/values-sl/strings.xml b/tests/BugReportApp/res/values-sl/strings.xml
index 9192ba8..6c8368f 100644
--- a/tests/BugReportApp/res/values-sl/strings.xml
+++ b/tests/BugReportApp/res/values-sl/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Zapri"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Začetek ustvarjanja poročila o napakah"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Stanje:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"To poročilo o napakah bo kmalu poteklo"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Pošlji"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Prekliči"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Naloži"</string>
diff --git a/tests/BugReportApp/res/values-sq/strings.xml b/tests/BugReportApp/res/values-sq/strings.xml
index f4bbb8b..4f96081 100644
--- a/tests/BugReportApp/res/values-sq/strings.xml
+++ b/tests/BugReportApp/res/values-sq/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Mbyll"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Nis raportin e defekteve në kod"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Statusi:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Ky raport i defekteve në kod do të skadojë së shpejti"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Dërgo"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Anulo"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Ngarko"</string>
diff --git a/tests/BugReportApp/res/values-sr/strings.xml b/tests/BugReportApp/res/values-sr/strings.xml
index f774637..b77f27c 100644
--- a/tests/BugReportApp/res/values-sr/strings.xml
+++ b/tests/BugReportApp/res/values-sr/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Затвори"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Покрени прављење извештаја о грешци"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Статус:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Овај извештај о грешци ускоро истиче"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Пошаљи"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Откажи"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Отпреми"</string>
diff --git a/tests/BugReportApp/res/values-sv/strings.xml b/tests/BugReportApp/res/values-sv/strings.xml
index 18b19ef..7d292aa 100644
--- a/tests/BugReportApp/res/values-sv/strings.xml
+++ b/tests/BugReportApp/res/values-sv/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Stäng"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Starta felrapport"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Status:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Den här felrapporten löper snart ut"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Skicka"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Avbryt"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Ladda upp"</string>
diff --git a/tests/BugReportApp/res/values-sw/strings.xml b/tests/BugReportApp/res/values-sw/strings.xml
index 581b9ac..881ca52 100644
--- a/tests/BugReportApp/res/values-sw/strings.xml
+++ b/tests/BugReportApp/res/values-sw/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Funga"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Anza Kuripoti Hitilafu"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Hali:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Muda wa ripoti hii ya hitilafu utakwisha hivi karibuni"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Tuma"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Ghairi"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Pakia"</string>
diff --git a/tests/BugReportApp/res/values-ta/strings.xml b/tests/BugReportApp/res/values-ta/strings.xml
index b4454c5..bf0e227 100644
--- a/tests/BugReportApp/res/values-ta/strings.xml
+++ b/tests/BugReportApp/res/values-ta/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"மூடுக"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"பிழை அறிக்கையைத் தொடங்கு"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"நிலை:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"இந்தப் பிழை அறிக்கை விரைவில் காலாவதியாகும்"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"சமர்ப்பி"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"ரத்துசெய்"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"பதிவேற்று"</string>
diff --git a/tests/BugReportApp/res/values-te/strings.xml b/tests/BugReportApp/res/values-te/strings.xml
index 7857105..0a9b835 100644
--- a/tests/BugReportApp/res/values-te/strings.xml
+++ b/tests/BugReportApp/res/values-te/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"మూసివేయి"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"బగ్ నివేదికను ప్రారంభించండి"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"స్థితి:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"ఈ బగ్ నివేదిక గడువు త్వరలో ముగుస్తుంది"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"సమర్పించండి"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"రద్దు చేయండి"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"అప్లోడ్ చేయి"</string>
diff --git a/tests/BugReportApp/res/values-th/strings.xml b/tests/BugReportApp/res/values-th/strings.xml
index ffbd683..74a83aa 100644
--- a/tests/BugReportApp/res/values-th/strings.xml
+++ b/tests/BugReportApp/res/values-th/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"ปิด"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"เริ่มรายงานข้อบกพร่อง"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"สถานะ:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"รายงานข้อบกพร่องนี้จะหมดอายุในไม่ช้า"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"ส่ง"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"ยกเลิก"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"อัปโหลด"</string>
diff --git a/tests/BugReportApp/res/values-tl/strings.xml b/tests/BugReportApp/res/values-tl/strings.xml
index 5e0fe03..f1f391e 100644
--- a/tests/BugReportApp/res/values-tl/strings.xml
+++ b/tests/BugReportApp/res/values-tl/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Isara"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Simulan ang Ulat ng Bug"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Status:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Malapit nang mag-expire ang ulat ng bug na ito"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Isumite"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Kanselahin"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"I-upload"</string>
diff --git a/tests/BugReportApp/res/values-tr/strings.xml b/tests/BugReportApp/res/values-tr/strings.xml
index f6ce461..d0f5e35 100644
--- a/tests/BugReportApp/res/values-tr/strings.xml
+++ b/tests/BugReportApp/res/values-tr/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Kapat"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Hata Raporunu Başlat"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Durum:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Bu hata raporunun süresi dolmak üzere"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Gönder"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"İptal"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Yükle"</string>
diff --git a/tests/BugReportApp/res/values-uk/strings.xml b/tests/BugReportApp/res/values-uk/strings.xml
index 75f2c45..9a350e0 100644
--- a/tests/BugReportApp/res/values-uk/strings.xml
+++ b/tests/BugReportApp/res/values-uk/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Закрити"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Запустити звіт про помилку"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Стан:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Термін дії звіту про помилку невдовзі закінчиться"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Надіслати"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Скасувати"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Завантажити"</string>
diff --git a/tests/BugReportApp/res/values-ur/strings.xml b/tests/BugReportApp/res/values-ur/strings.xml
index 6fe4566..a70586a 100644
--- a/tests/BugReportApp/res/values-ur/strings.xml
+++ b/tests/BugReportApp/res/values-ur/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"بند کریں"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"بگ رپورٹ شروع کریں"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"صورتحال:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"اس بگ رپورٹ کی معیاد جلد ہی ختم ہو جائے گی"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"جمع کرائیں"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"منسوخ کریں"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"اپ لوڈ کریں"</string>
diff --git a/tests/BugReportApp/res/values-uz/strings.xml b/tests/BugReportApp/res/values-uz/strings.xml
index fd83c14..7ae806b 100644
--- a/tests/BugReportApp/res/values-uz/strings.xml
+++ b/tests/BugReportApp/res/values-uz/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Yopish"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Xatoliklar hisobotini yuklashni boshlash"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Holati:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Bu xatoliklar hisoboti muddati tez orada tugaydi"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Yuborish"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Bekor qilish"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Yuklash"</string>
diff --git a/tests/BugReportApp/res/values-vi/strings.xml b/tests/BugReportApp/res/values-vi/strings.xml
index 3831d64..7454927 100644
--- a/tests/BugReportApp/res/values-vi/strings.xml
+++ b/tests/BugReportApp/res/values-vi/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Đóng"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Bắt đầu báo cáo lỗi"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Trạng thái:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Báo cáo lỗi này sẽ sớm hết hạn"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Gửi"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Hủy"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Tải lên"</string>
diff --git a/tests/BugReportApp/res/values-zh-rCN/strings.xml b/tests/BugReportApp/res/values-zh-rCN/strings.xml
index fbf3672..4460403 100644
--- a/tests/BugReportApp/res/values-zh-rCN/strings.xml
+++ b/tests/BugReportApp/res/values-zh-rCN/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"关闭"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"开始收集错误报告"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"状态:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"这份错误报告即将到期"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"提交"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"取消"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"上传"</string>
diff --git a/tests/BugReportApp/res/values-zh-rHK/strings.xml b/tests/BugReportApp/res/values-zh-rHK/strings.xml
index e2520c5..dc0d168 100644
--- a/tests/BugReportApp/res/values-zh-rHK/strings.xml
+++ b/tests/BugReportApp/res/values-zh-rHK/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"關閉"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"開始產生錯誤報告"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"狀態:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"此錯誤報告即將到期"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"提交"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"取消"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"上載"</string>
diff --git a/tests/BugReportApp/res/values-zh-rTW/strings.xml b/tests/BugReportApp/res/values-zh-rTW/strings.xml
index e940dde..75fc620 100644
--- a/tests/BugReportApp/res/values-zh-rTW/strings.xml
+++ b/tests/BugReportApp/res/values-zh-rTW/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"關閉"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"開始收集錯誤報告"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"狀態:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"這份錯誤報告即將到期"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"提交"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"取消"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"上傳"</string>
diff --git a/tests/BugReportApp/res/values-zu/strings.xml b/tests/BugReportApp/res/values-zu/strings.xml
index 6fe7fb3..061f105 100644
--- a/tests/BugReportApp/res/values-zu/strings.xml
+++ b/tests/BugReportApp/res/values-zu/strings.xml
@@ -21,6 +21,7 @@
<string name="bugreport_info_quit" msgid="5590138890181142473">"Vala"</string>
<string name="bugreport_info_start" msgid="667324824650830832">"Qala umbiko wesiphazamisi"</string>
<string name="bugreport_info_status" msgid="7211044508792815451">"Isimo:"</string>
+ <string name="bugreport_info_expires_soon_notice" msgid="927139313070992675">"Lo mbiko wesiphazamisi uzophelelwa isikhathi kungekudala"</string>
<string name="bugreport_dialog_submit" msgid="2789636252713280633">"Hambisa"</string>
<string name="bugreport_dialog_cancel" msgid="4741928791364757040">"Khansela"</string>
<string name="bugreport_dialog_upload" msgid="2517386929450370781">"Layisha"</string>
diff --git a/tests/BugReportApp/res/values/strings.xml b/tests/BugReportApp/res/values/strings.xml
index b3b125a..a2fc716 100644
--- a/tests/BugReportApp/res/values/strings.xml
+++ b/tests/BugReportApp/res/values/strings.xml
@@ -20,6 +20,7 @@
<string name="bugreport_info_quit">Close</string>
<string name="bugreport_info_start">Start Bug Report</string>
<string name="bugreport_info_status">Status:</string>
+ <string name="bugreport_info_expires_soon_notice">This bug report will expire soon</string>
<string name="bugreport_dialog_submit">Submit</string>
<string name="bugreport_dialog_cancel">Cancel</string>
diff --git a/tests/BugReportApp/src/com/android/car/bugreport/BugInfoAdapter.java b/tests/BugReportApp/src/com/android/car/bugreport/BugInfoAdapter.java
index 7d508b1..ef961c8 100644
--- a/tests/BugReportApp/src/com/android/car/bugreport/BugInfoAdapter.java
+++ b/tests/BugReportApp/src/com/android/car/bugreport/BugInfoAdapter.java
@@ -38,6 +38,9 @@
static final int BUTTON_TYPE_MOVE = 1;
static final int BUTTON_TYPE_ADD_AUDIO = 2;
+ /** If bugreport TTL points go below this number, show a notice message. */
+ private static final int MIN_TTL_POINTS_TO_SHOW_NOTICE = 10;
+
/** Provides a handler for click events*/
interface ItemClickedListener {
/**
@@ -65,6 +68,9 @@
/** Message View */
TextView mMessageView;
+ /** Expiration Notice View */
+ TextView mExpirationNoticeView;
+
/** Move Button */
Button mMoveButton;
@@ -78,7 +84,8 @@
super(v);
mTitleView = itemView.findViewById(R.id.bug_info_row_title);
mStatusView = itemView.findViewById(R.id.bug_info_row_status);
- mMessageView = itemView.findViewById(R.id.bug_info_row_message);
+ mMessageView = itemView.findViewById(R.id.bug_info_row_status_message);
+ mExpirationNoticeView = itemView.findViewById(R.id.bug_info_row_expiration_notice);
mMoveButton = itemView.findViewById(R.id.bug_info_move_button);
mUploadButton = itemView.findViewById(R.id.bug_info_upload_button);
mAddAudioButton = itemView.findViewById(R.id.bug_info_add_audio_button);
@@ -116,6 +123,12 @@
} else {
holder.mMessageView.setVisibility(View.VISIBLE);
}
+ if (bugreport.getTtlPoints() <= MIN_TTL_POINTS_TO_SHOW_NOTICE
+ && BugStorageUtils.canBugReportBeExpired(bugreport.getStatus())) {
+ holder.mExpirationNoticeView.setVisibility(View.VISIBLE);
+ } else {
+ holder.mExpirationNoticeView.setVisibility(View.GONE);
+ }
boolean enableUserActionButtons =
bugreport.getStatus() == Status.STATUS_PENDING_USER_ACTION.getValue()
|| bugreport.getStatus() == Status.STATUS_MOVE_FAILED.getValue()
diff --git a/tests/BugReportApp/src/com/android/car/bugreport/BugStorageProvider.java b/tests/BugReportApp/src/com/android/car/bugreport/BugStorageProvider.java
index 729fc15..75ffb89 100644
--- a/tests/BugReportApp/src/com/android/car/bugreport/BugStorageProvider.java
+++ b/tests/BugReportApp/src/com/android/car/bugreport/BugStorageProvider.java
@@ -39,6 +39,7 @@
import java.io.PrintWriter;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
+import java.time.Instant;
import java.util.function.Function;
@@ -64,6 +65,10 @@
static final String URL_SEGMENT_DELETE_FILES = "deleteZipFile";
/** Destructively deletes a bug report. */
static final String URL_SEGMENT_COMPLETE_DELETE = "completeDelete";
+ /**
+ * Deletes all files for given bugreport and sets the status to {@link Status#STATUS_EXPIRED}.
+ */
+ static final String URL_SEGMENT_EXPIRE = "expire";
/** Opens bugreport file of a bug report, uses column {@link #COLUMN_BUGREPORT_FILENAME}. */
static final String URL_SEGMENT_OPEN_BUGREPORT_FILE = "openBugReportFile";
/** Opens audio file of a bug report, uses column {@link #URL_MATCHED_OPEN_AUDIO_FILE}. */
@@ -82,9 +87,10 @@
private static final int URL_MATCHED_BUG_REPORT_ID_URI = 2;
private static final int URL_MATCHED_DELETE_FILES = 3;
private static final int URL_MATCHED_COMPLETE_DELETE = 4;
- private static final int URL_MATCHED_OPEN_BUGREPORT_FILE = 5;
- private static final int URL_MATCHED_OPEN_AUDIO_FILE = 6;
- private static final int URL_MATCHED_OPEN_FILE = 7;
+ private static final int URL_MATCHED_EXPIRE = 5;
+ private static final int URL_MATCHED_OPEN_BUGREPORT_FILE = 6;
+ private static final int URL_MATCHED_OPEN_AUDIO_FILE = 7;
+ private static final int URL_MATCHED_OPEN_FILE = 8;
@StringDef({
URL_SEGMENT_DELETE_FILES,
@@ -113,6 +119,12 @@
static final String COLUMN_TYPE = "type";
static final String COLUMN_BUGREPORT_FILENAME = "bugreport_filename";
static final String COLUMN_AUDIO_FILENAME = "audio_filename";
+ static final String COLUMN_TTL_POINTS = "ttl_points";
+ /**
+ * Retaining bugreports for {@code 50} reboots is good enough.
+ * See {@link TtlPointsDecremental} for more details.
+ */
+ private static final int DEFAULT_TTL_POINTS = 50;
private DatabaseHelper mDatabaseHelper;
private final UriMatcher mUriMatcher;
@@ -129,13 +141,15 @@
/**
* All changes in database versions should be recorded here.
* 1: Initial version.
- * 2: Add integer column details_needed.
+ * 2: Add integer column: type.
* 3: Add string column audio_filename and bugreport_filename.
+ * 4: Add integer column: ttl_points.
*/
private static final int INITIAL_VERSION = 1;
private static final int TYPE_VERSION = 2;
private static final int AUDIO_VERSION = 3;
- private static final int DATABASE_VERSION = AUDIO_VERSION;
+ private static final int TTL_POINTS_VERSION = 4;
+ private static final int DATABASE_VERSION = TTL_POINTS_VERSION;
private static final String CREATE_TABLE = "CREATE TABLE " + BUG_REPORTS_TABLE + " ("
+ COLUMN_ID + " INTEGER PRIMARY KEY,"
@@ -148,7 +162,8 @@
+ COLUMN_STATUS_MESSAGE + " TEXT NULL,"
+ COLUMN_TYPE + " INTEGER DEFAULT " + MetaBugReport.TYPE_INTERACTIVE + ","
+ COLUMN_BUGREPORT_FILENAME + " TEXT DEFAULT NULL,"
- + COLUMN_AUDIO_FILENAME + " TEXT DEFAULT NULL"
+ + COLUMN_AUDIO_FILENAME + " TEXT DEFAULT NULL,"
+ + COLUMN_TTL_POINTS + " INTEGER DEFAULT " + DEFAULT_TTL_POINTS
+ ");";
DatabaseHelper(Context context) {
@@ -173,6 +188,10 @@
db.execSQL("ALTER TABLE " + BUG_REPORTS_TABLE + " ADD COLUMN "
+ COLUMN_AUDIO_FILENAME + " TEXT DEFAULT NULL");
}
+ if (oldVersion < TTL_POINTS_VERSION) {
+ db.execSQL("ALTER TABLE " + BUG_REPORTS_TABLE + " ADD COLUMN "
+ + COLUMN_TTL_POINTS + " INTEGER DEFAULT " + DEFAULT_TTL_POINTS);
+ }
}
}
@@ -196,6 +215,9 @@
AUTHORITY, BUG_REPORTS_TABLE + "/" + URL_SEGMENT_COMPLETE_DELETE + "/#",
URL_MATCHED_COMPLETE_DELETE);
mUriMatcher.addURI(
+ AUTHORITY, BUG_REPORTS_TABLE + "/" + URL_SEGMENT_EXPIRE + "/#",
+ URL_MATCHED_EXPIRE);
+ mUriMatcher.addURI(
AUTHORITY, BUG_REPORTS_TABLE + "/" + URL_SEGMENT_OPEN_BUGREPORT_FILE + "/#",
URL_MATCHED_OPEN_BUGREPORT_FILE);
mUriMatcher.addURI(
@@ -330,6 +352,22 @@
deleteFilesFor(getBugReportFromUri(uri));
getContext().getContentResolver().notifyChange(uri, null);
return db.delete(BUG_REPORTS_TABLE, selection, selectionArgs);
+ case URL_MATCHED_EXPIRE:
+ if (selection != null || selectionArgs != null) {
+ throw new IllegalArgumentException("selection is not allowed for "
+ + URL_MATCHED_EXPIRE);
+ }
+ if (deleteFilesFor(getBugReportFromUri(uri))) {
+ ContentValues values = new ContentValues();
+ values.put(COLUMN_STATUS, Status.STATUS_EXPIRED.getValue());
+ values.put(COLUMN_STATUS_MESSAGE, "Expired at " + Instant.now());
+ selection = COLUMN_ID + " = ?";
+ selectionArgs = new String[]{uri.getLastPathSegment()};
+ int rowCount = db.update(BUG_REPORTS_TABLE, values, selection, selectionArgs);
+ getContext().getContentResolver().notifyChange(uri, null);
+ return rowCount;
+ }
+ return 0;
default:
throw new IllegalArgumentException("Unknown URL " + uri);
}
diff --git a/tests/BugReportApp/src/com/android/car/bugreport/BugStorageUtils.java b/tests/BugReportApp/src/com/android/car/bugreport/BugStorageUtils.java
index cd0a12e..d4eb1b4 100644
--- a/tests/BugReportApp/src/com/android/car/bugreport/BugStorageUtils.java
+++ b/tests/BugReportApp/src/com/android/car/bugreport/BugStorageUtils.java
@@ -23,6 +23,7 @@
import static com.android.car.bugreport.BugStorageProvider.COLUMN_STATUS_MESSAGE;
import static com.android.car.bugreport.BugStorageProvider.COLUMN_TIMESTAMP;
import static com.android.car.bugreport.BugStorageProvider.COLUMN_TITLE;
+import static com.android.car.bugreport.BugStorageProvider.COLUMN_TTL_POINTS;
import static com.android.car.bugreport.BugStorageProvider.COLUMN_TYPE;
import static com.android.car.bugreport.BugStorageProvider.COLUMN_USERNAME;
@@ -36,14 +37,15 @@
import android.util.Log;
import com.google.api.client.auth.oauth2.TokenResponseException;
+import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
+import com.google.common.collect.ImmutableList;
import java.io.FileNotFoundException;
import java.io.InputStream;
import java.io.OutputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
-import java.time.Instant;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -67,6 +69,19 @@
private static final DateFormat TIMESTAMP_FORMAT = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss");
/**
+ * List of {@link Status}-es that will be expired after certain period by
+ * {@link ExpireOldBugReportsJob}.
+ */
+ private static final ImmutableList<Integer> EXPIRATION_STATUSES = ImmutableList.of(
+ Status.STATUS_WRITE_FAILED.getValue(),
+ Status.STATUS_UPLOAD_PENDING.getValue(),
+ Status.STATUS_UPLOAD_FAILED.getValue(),
+ Status.STATUS_PENDING_USER_ACTION.getValue(),
+ Status.STATUS_MOVE_FAILED.getValue(),
+ Status.STATUS_MOVE_IN_PROGRESS.getValue(),
+ Status.STATUS_AUDIO_PENDING.getValue());
+
+ /**
* Creates a new {@link Status#STATUS_WRITE_PENDING} bug report record in a local sqlite
* database.
*
@@ -167,6 +182,17 @@
}
/**
+ * Deletes the associated zip file from disk and then sets status {@link Status#STATUS_EXPIRED}.
+ *
+ * @return true if succeeded.
+ */
+ static boolean expireBugReport(@NonNull Context context, int bugReportId) {
+ ContentResolver r = context.getContentResolver();
+ return r.delete(BugStorageProvider.buildUriWithSegment(
+ bugReportId, BugStorageProvider.URL_SEGMENT_EXPIRE), null, null) == 1;
+ }
+
+ /**
* Returns all the bugreports that are waiting to be uploaded.
*/
@NonNull
@@ -186,6 +212,35 @@
return getBugreports(context, null, null, COLUMN_ID + " DESC");
}
+ /**
+ * Returns list of bugreports with zip files (with the best possible guess).
+ *
+ * @param context A context.
+ * @param ttlPointsReachedZero if true it returns bugreports with
+ * {@link BugStorageProvider#COLUMN_TTL_POINTS} equal 0; if false
+ * {@link BugStorageProvider#COLUMN_TTL_POINTS} more than 0.
+ */
+ @NonNull
+ static List<MetaBugReport> getUnexpiredBugReportsWithZipFile(
+ @NonNull Context context, boolean ttlPointsReachedZero) {
+ // Number of question marks should be the same as the size of EXPIRATION_STATUSES.
+ String selection = COLUMN_STATUS + " IN (?, ?, ?, ?, ?, ?, ?)";
+ Preconditions.checkState(EXPIRATION_STATUSES.size() == 7, "Invalid EXPIRATION_STATUSES");
+ if (ttlPointsReachedZero) {
+ selection += " AND " + COLUMN_TTL_POINTS + " = 0";
+ } else {
+ selection += " AND " + COLUMN_TTL_POINTS + " > 0";
+ }
+ String[] selectionArgs = EXPIRATION_STATUSES.stream()
+ .map(i -> Integer.toString(i)).toArray(String[]::new);
+ return getBugreports(context, selection, selectionArgs, null);
+ }
+
+ /** Return true if bugreport with given status can be expired. */
+ static boolean canBugReportBeExpired(int status) {
+ return EXPIRATION_STATUSES.contains(status);
+ }
+
/** Returns {@link MetaBugReport} for given bugreport id. */
static Optional<MetaBugReport> findBugReport(Context context, int bugreportId) {
String selection = COLUMN_ID + " = ?";
@@ -211,7 +266,8 @@
COLUMN_FILEPATH,
COLUMN_STATUS,
COLUMN_STATUS_MESSAGE,
- COLUMN_TYPE};
+ COLUMN_TYPE,
+ COLUMN_TTL_POINTS};
ContentResolver r = context.getContentResolver();
Cursor c = r.query(BugStorageProvider.BUGREPORT_CONTENT_URI, projection,
selection, selectionArgs, order);
@@ -231,6 +287,7 @@
.setStatus(getInt(c, COLUMN_STATUS))
.setStatusMessage(getString(c, COLUMN_STATUS_MESSAGE))
.setType(getInt(c, COLUMN_TYPE))
+ .setTtlPoints(getInt(c, COLUMN_TTL_POINTS))
.build();
bugReports.add(meta);
c.moveToNext();
@@ -290,22 +347,6 @@
setBugReportStatus(context, bugReport, Status.STATUS_UPLOAD_PENDING, msg);
}
- /**
- * Sets {@link MetaBugReport} status {@link Status#STATUS_EXPIRED}.
- * Deletes the associated zip file from disk.
- *
- * @return true if succeeded.
- */
- static boolean expireBugReport(@NonNull Context context,
- @NonNull MetaBugReport metaBugReport, @NonNull Instant expiredAt) {
- metaBugReport = setBugReportStatus(
- context, metaBugReport, Status.STATUS_EXPIRED, "Expired on " + expiredAt);
- if (metaBugReport.getStatus() != Status.STATUS_EXPIRED.getValue()) {
- return false;
- }
- return deleteBugReportFiles(context, metaBugReport.getId());
- }
-
/** Gets the root cause of the error. */
@NonNull
private static String getRootCauseMessage(@Nullable Throwable t) {
diff --git a/tests/BugReportApp/src/com/android/car/bugreport/ExpireOldBugReportsJob.java b/tests/BugReportApp/src/com/android/car/bugreport/ExpireOldBugReportsJob.java
new file mode 100644
index 0000000..458fb04
--- /dev/null
+++ b/tests/BugReportApp/src/com/android/car/bugreport/ExpireOldBugReportsJob.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2020 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.car.bugreport;
+
+import android.app.job.JobParameters;
+import android.app.job.JobService;
+
+import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * Marks the old bugreport entries {@link Status#STATUS_EXPIRED} and deletes associated zip files.
+ * Bug report is considered old if it has 0 TTL points, which is decremented every system boot by
+ * {@link TtlPointsDecremental}.
+ *
+ * <p>This job will be executed in garage-mode, see
+ * {@link JobSchedulingUtils#scheduleExpireOldBugReportsJobInGarageMode}.
+ */
+public class ExpireOldBugReportsJob extends JobService {
+ private final AtomicBoolean mIsCancelled = new AtomicBoolean(false);
+ private ExecutorService mExecutorService;
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+
+ mExecutorService = Executors.newSingleThreadExecutor();
+ }
+
+ /**
+ * @return {@code true} if your service will continue running, using a separate thread.
+ */
+ @Override
+ public boolean onStartJob(JobParameters params) {
+ if (!Config.isBugReportEnabled()) {
+ return false;
+ }
+ mIsCancelled.set(false);
+ mExecutorService.submit(() -> run(params));
+ return true;
+ }
+
+ /**
+ * @return {@code true} to indicate to the JobManager whether you'd like to reschedule
+ * this job based on the retry criteria provided at job creation-time; or {@code false}
+ * to end the job entirely. Regardless of the value returned, your job must stop executing.
+ */
+ @Override
+ public boolean onStopJob(JobParameters params) {
+ mIsCancelled.set(true);
+ return false;
+ }
+
+ /** Deletes old bugreports. Must be run in a separate thread. */
+ private void run(JobParameters params) {
+ List<MetaBugReport> bugReportsWithZeroTtlPoints =
+ BugStorageUtils.getUnexpiredBugReportsWithZipFile(
+ this, /* ttlPointsReachedZero= */ true);
+ for (MetaBugReport bug : bugReportsWithZeroTtlPoints) {
+ if (mIsCancelled.get()) {
+ break;
+ }
+ BugStorageUtils.expireBugReport(this, bug.getId());
+ }
+ jobFinished(params, /* wantsReschedule= */ false);
+ }
+}
diff --git a/tests/BugReportApp/src/com/android/car/bugreport/JobSchedulingUtils.java b/tests/BugReportApp/src/com/android/car/bugreport/JobSchedulingUtils.java
index ec09b1f..c3a071f 100644
--- a/tests/BugReportApp/src/com/android/car/bugreport/JobSchedulingUtils.java
+++ b/tests/BugReportApp/src/com/android/car/bugreport/JobSchedulingUtils.java
@@ -28,6 +28,7 @@
private static final String TAG = JobSchedulingUtils.class.getSimpleName();
private static final int UPLOAD_JOB_ID = 1;
+ private static final int EXPIRE_OLD_BUG_REPORTS_JOB_ID = 2;
private static final int RETRY_DELAY_IN_MS = 5_000;
/**
@@ -63,4 +64,29 @@
.setBackoffCriteria(RETRY_DELAY_IN_MS, JobInfo.BACKOFF_POLICY_LINEAR)
.build());
}
+
+ /**
+ * Schedules {@link ExpireOldBugReportsJob} in garage mode.
+ *
+ * <p>Note: Garage mode is activated during shutdown.
+ */
+ static void scheduleExpireOldBugReportsJobInGarageMode(Context context) {
+ JobScheduler jobScheduler = context.getSystemService(JobScheduler.class);
+ if (jobScheduler == null) {
+ Log.w(TAG, "Cannot get JobScheduler from context.");
+ return;
+ }
+ JobInfo pendingJob = jobScheduler.getPendingJob(EXPIRE_OLD_BUG_REPORTS_JOB_ID);
+ // if there is already a pending job, do not schedule a new one.
+ if (pendingJob != null) {
+ Log.d(TAG, "Clean up job is already active, not re-scheduling");
+ return;
+ }
+ jobScheduler.schedule(new JobInfo.Builder(
+ EXPIRE_OLD_BUG_REPORTS_JOB_ID,
+ new ComponentName(context, ExpireOldBugReportsJob.class))
+ // Schedules the job in garage mode.
+ .setRequiresDeviceIdle(true)
+ .build());
+ }
}
diff --git a/tests/BugReportApp/src/com/android/car/bugreport/MetaBugReport.java b/tests/BugReportApp/src/com/android/car/bugreport/MetaBugReport.java
index e458e22..7e35c53 100644
--- a/tests/BugReportApp/src/com/android/car/bugreport/MetaBugReport.java
+++ b/tests/BugReportApp/src/com/android/car/bugreport/MetaBugReport.java
@@ -102,6 +102,12 @@
*/
public abstract int getType();
+ /**
+ * @return how many TTL (time-to-live) points left until the bugreport gets
+ * {@link Status#STATUS_EXPIRED}.
+ */
+ public abstract int getTtlPoints();
+
/** @return {@link Builder} from the meta bug report. */
public abstract Builder toBuilder();
@@ -122,6 +128,7 @@
dest.writeInt(getStatus());
dest.writeString(getStatusMessage());
dest.writeInt(getType());
+ dest.writeInt(getTtlPoints());
}
/** Converts {@link Date} to bugreport timestamp. */
@@ -155,6 +162,7 @@
int status = in.readInt();
String statusMessage = in.readString();
int type = in.readInt();
+ int ttlPoints = in.readInt();
return MetaBugReport.builder()
.setId(id)
.setTimestamp(timestamp)
@@ -166,6 +174,7 @@
.setStatus(status)
.setStatusMessage(statusMessage)
.setType(type)
+ .setTtlPoints(ttlPoints)
.build();
}
@@ -207,6 +216,9 @@
/** Sets the {@link BugReportType}. */
public abstract Builder setType(@BugReportType int type);
+ /** Sets the bugreport TTL (time-to-live) points. */
+ public abstract Builder setTtlPoints(int ttlPoints);
+
public abstract MetaBugReport build();
}
}
diff --git a/tests/BugReportApp/src/com/android/car/bugreport/SimpleUploaderAsyncTask.java b/tests/BugReportApp/src/com/android/car/bugreport/SimpleUploaderAsyncTask.java
index b5d86ec..bc0f54f 100644
--- a/tests/BugReportApp/src/com/android/car/bugreport/SimpleUploaderAsyncTask.java
+++ b/tests/BugReportApp/src/com/android/car/bugreport/SimpleUploaderAsyncTask.java
@@ -50,6 +50,8 @@
*
* <p>Please see {@code res/values/configs.xml} and {@code res/raw/gcs_credentials.json} for the
* configuration.
+ *
+ * <p>Must be run under user0.
*/
class SimpleUploaderAsyncTask extends AsyncTask<Void, Void, Boolean> {
private static final String TAG = SimpleUploaderAsyncTask.class.getSimpleName();
diff --git a/tests/BugReportApp/src/com/android/car/bugreport/StartUpBootReceiver.java b/tests/BugReportApp/src/com/android/car/bugreport/StartUpBootReceiver.java
index 7528c21..aa9c3a3 100644
--- a/tests/BugReportApp/src/com/android/car/bugreport/StartUpBootReceiver.java
+++ b/tests/BugReportApp/src/com/android/car/bugreport/StartUpBootReceiver.java
@@ -25,7 +25,9 @@
* Handles device boot intents.
*
* <ul>
- * <li>Starts {@link UploadJob}</li>
+ * <li>Schedules {@link UploadJob}</li>
+ * <li>Schedules {@link ExpireOldBugReportsJob}</li>
+ * <li>Starts {@link TtlPointsDecremental}</li>
* </ul>
*/
public class StartUpBootReceiver extends BroadcastReceiver {
@@ -36,17 +38,32 @@
if (!Config.isBugReportEnabled()) {
return;
}
+
// Run it only once for the system user (u0) and ignore for other users.
UserManager userManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
if (!userManager.isSystemUser()) {
return;
}
-
- if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
- Log.d(TAG, "StartUpBootReceiver BOOT_COMPLETED");
- // We removed "persisted" from UploadJob scheduling, instead we will manually schedule
- // the job on boot, because "persisted" seems more fragile.
- JobSchedulingUtils.scheduleUploadJob(context);
+ if (!Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
+ return;
}
+
+ Log.d(TAG, "StartUpBootReceiver BOOT_COMPLETED");
+
+ // We removed "persisted" from UploadJob scheduling, instead we will manually schedule
+ // the job on boot, because "persisted" seems more fragile.
+ JobSchedulingUtils.scheduleUploadJob(context);
+
+ // We schedule ExpireOldBugReportsJob after every boot, so it can be run in garage mode
+ // during shutdown.
+ JobSchedulingUtils.scheduleExpireOldBugReportsJobInGarageMode(context);
+
+ // Use goAsync() to allow TtlPointsDecremental to complete.
+ startTtlPointsDecremental(context, goAsync());
+ }
+
+ /** Start {@link TtlPointsDecremental} in a separate thread. */
+ private void startTtlPointsDecremental(Context context, PendingResult bootReceiverResult) {
+ new Thread(new TtlPointsDecremental(context, bootReceiverResult::finish)).start();
}
}
diff --git a/tests/BugReportApp/src/com/android/car/bugreport/TtlPointsDecremental.java b/tests/BugReportApp/src/com/android/car/bugreport/TtlPointsDecremental.java
new file mode 100644
index 0000000..fc7a11e
--- /dev/null
+++ b/tests/BugReportApp/src/com/android/car/bugreport/TtlPointsDecremental.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2020 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.car.bugreport;
+
+import static com.android.car.bugreport.BugStorageProvider.COLUMN_ID;
+import static com.android.car.bugreport.BugStorageProvider.COLUMN_TTL_POINTS;
+
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.content.Context;
+import android.util.Log;
+
+import java.util.List;
+
+/**
+ * Decrements TTL (time-to-live) points of bugreports with zip files by 1 every boot. When TTL
+ * points reach zero, {@link ExpireOldBugReportsJob} will expire them and remove zip files.
+ *
+ * <p>It's called once by {@link StartUpBootReceiver} after every boot completed. It is not
+ * triggered when the device goes to the sleep and wakes up.
+ *
+ * <p>Default ttl points value for new bugreports is {@code BugStorageProvider#DEFAULT_TTL_POINTS}.
+ */
+public class TtlPointsDecremental implements Runnable {
+ private static final String TAG = TtlPointsDecremental.class.getSimpleName();
+
+ private final Context mContext;
+ private final Runnable mOnFinishCallback;
+
+ TtlPointsDecremental(Context context, Runnable onFinishCallback) {
+ mContext = context;
+ mOnFinishCallback = onFinishCallback;
+ }
+
+ @Override
+ public void run() {
+ Log.d(TAG, "Running TtlPointsDecremental");
+ List<MetaBugReport> unexpiredBugReports =
+ BugStorageUtils.getUnexpiredBugReportsWithZipFile(
+ mContext, /* ttlPointsReachedZero= */ false);
+ ContentResolver resolver = mContext.getContentResolver();
+ for (MetaBugReport bugReport : unexpiredBugReports) {
+ ContentValues values = new ContentValues();
+ values.put(COLUMN_TTL_POINTS, bugReport.getTtlPoints() - 1);
+ String where = COLUMN_ID + " = " + bugReport.getId();
+ resolver.update(BugStorageProvider.BUGREPORT_CONTENT_URI, values, where, null);
+ }
+ Log.d(TAG, "Updated " + unexpiredBugReports.size() + " bugreports");
+ mOnFinishCallback.run();
+ }
+}
diff --git a/tests/BugReportApp/src/com/android/car/bugreport/UploadJob.java b/tests/BugReportApp/src/com/android/car/bugreport/UploadJob.java
index a0b9cec..a1ad1a3 100644
--- a/tests/BugReportApp/src/com/android/car/bugreport/UploadJob.java
+++ b/tests/BugReportApp/src/com/android/car/bugreport/UploadJob.java
@@ -19,7 +19,7 @@
import android.app.job.JobService;
import android.util.Log;
-/** Executes a {@link SimpleUploaderAsyncTask}. */
+/** Executes a {@link SimpleUploaderAsyncTask}. Must be run under user0. */
public class UploadJob extends JobService {
private static final String TAG = UploadJob.class.getSimpleName();
diff --git a/tests/BugReportApp/tests/Android.bp b/tests/BugReportApp/tests/Android.bp
index 9f54a75..ba325b8 100644
--- a/tests/BugReportApp/tests/Android.bp
+++ b/tests/BugReportApp/tests/Android.bp
@@ -33,6 +33,7 @@
static_libs: [
"android-support-test",
+ "mockito-target",
"truth-prebuilt",
],
diff --git a/tests/BugReportApp/tests/src/com/android/car/bugreport/BugStorageUtilsTest.java b/tests/BugReportApp/tests/src/com/android/car/bugreport/BugStorageUtilsTest.java
new file mode 100644
index 0000000..d210e61
--- /dev/null
+++ b/tests/BugReportApp/tests/src/com/android/car/bugreport/BugStorageUtilsTest.java
@@ -0,0 +1,241 @@
+/*
+ * 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.car.bugreport;
+
+import static com.android.car.bugreport.MetaBugReport.TYPE_INTERACTIVE;
+import static com.android.car.bugreport.MetaBugReport.TYPE_SILENT;
+import static com.android.car.bugreport.Status.STATUS_EXPIRED;
+import static com.android.car.bugreport.Status.STATUS_PENDING_USER_ACTION;
+import static com.android.car.bugreport.Status.STATUS_UPLOAD_FAILED;
+import static com.android.car.bugreport.Status.STATUS_UPLOAD_PENDING;
+import static com.android.car.bugreport.Status.STATUS_UPLOAD_SUCCESS;
+import static com.android.car.bugreport.Status.STATUS_WRITE_PENDING;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.content.Context;
+import android.net.Uri;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.MediumTest;
+import android.support.test.runner.AndroidJUnit4;
+import android.util.Log;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Date;
+import java.util.List;
+
+@RunWith(AndroidJUnit4.class)
+@MediumTest
+public class BugStorageUtilsTest {
+ private static final String TIMESTAMP_TODAY = MetaBugReport.toBugReportTimestamp(new Date());
+ private static final String BUGREPORT_FILE_NAME = "bugreport@ASD.zip";
+ private static final String AUDIO_FILE_NAME = "bugreport@ASD-message.3gp";
+ private static final int BUGREPORT_ZIP_FILE_CONTENT = 1;
+ private static final int USE_DEFAULT_TTL_POINTS = -9000;
+
+ private Context mContext;
+
+ @Before
+ public void setUp() {
+ mContext = InstrumentationRegistry.getContext();
+ deleteAllBugReports();
+ }
+
+ @Test
+ public void test_createBugReport_createsAndReturnsMetaBugReport() throws Exception {
+ MetaBugReport bug = createBugReport(TIMESTAMP_TODAY,
+ STATUS_PENDING_USER_ACTION, TYPE_INTERACTIVE, /* ttl_points= */ 0);
+
+ assertThat(BugStorageUtils.findBugReport(mContext, bug.getId()).get()).isEqualTo(bug);
+ }
+
+ @Test
+ public void test_expireBugReport_marksBugReportDeletedAndDeletesZip() throws Exception {
+ MetaBugReport bug = createBugReport(TIMESTAMP_TODAY,
+ STATUS_PENDING_USER_ACTION, TYPE_INTERACTIVE, /* ttl_points= */ 0);
+ bug = createBugReportFile(bug);
+ bug = createAudioFile(bug);
+ try (InputStream in = BugStorageUtils.openBugReportFileToRead(mContext, bug)) {
+ assertThat(in).isNotNull();
+ }
+ try (InputStream in = BugStorageUtils.openAudioFileToRead(mContext, bug)) {
+ assertThat(in).isNotNull();
+ }
+
+ boolean deleteResult = BugStorageUtils.expireBugReport(mContext, bug.getId());
+
+ assertThat(deleteResult).isTrue();
+ MetaBugReport updatedBug = BugStorageUtils.findBugReport(mContext, bug.getId()).get();
+ // Because we don't have a way of mocking Instant in BugStorageProvider#delete,
+ // we can't predict its value in getStatusMessage(); so we do this kind of shenanigans.
+ assertThat(updatedBug)
+ .isEqualTo(bug.toBuilder()
+ .setStatus(STATUS_EXPIRED.getValue())
+ .setStatusMessage(updatedBug.getStatusMessage())
+ .build());
+ assertThat(updatedBug.getStatusMessage()).startsWith("Expired at ");
+ final MetaBugReport finalBug = bug;
+ assertThrows(FileNotFoundException.class, () ->
+ BugStorageUtils.openBugReportFileToRead(mContext, finalBug));
+ assertThrows(FileNotFoundException.class, () ->
+ BugStorageUtils.openAudioFileToRead(mContext, finalBug));
+ }
+
+ @Test
+ public void test_completeDeleteBugReport_removesBugReportRecordFromDb() throws Exception {
+ MetaBugReport bug = createBugReport(TIMESTAMP_TODAY,
+ STATUS_PENDING_USER_ACTION, TYPE_INTERACTIVE, /* ttl_points= */ 0);
+ bug = createBugReportFile(bug);
+ bug = createAudioFile(bug);
+ try (InputStream in = BugStorageUtils.openBugReportFileToRead(mContext, bug)) {
+ assertThat(in).isNotNull();
+ }
+ try (InputStream in = BugStorageUtils.openAudioFileToRead(mContext, bug)) {
+ assertThat(in).isNotNull();
+ }
+
+ boolean deleteResult = BugStorageUtils.completeDeleteBugReport(mContext, bug.getId());
+
+ assertThat(deleteResult).isTrue();
+ assertThat(BugStorageUtils.findBugReport(mContext, bug.getId()).isPresent()).isFalse();
+ final MetaBugReport finalBug = bug;
+ assertThrows(IllegalArgumentException.class, () ->
+ BugStorageUtils.openBugReportFileToRead(mContext, finalBug));
+ assertThrows(IllegalArgumentException.class, () ->
+ BugStorageUtils.openAudioFileToRead(mContext, finalBug));
+ }
+
+ @Test
+ public void test_getUnexpiredBugReportsWithZipFile_withNonZeroTtlPoints() {
+ MetaBugReport bugUserPending = createBugReport(TIMESTAMP_TODAY,
+ STATUS_PENDING_USER_ACTION, TYPE_SILENT, USE_DEFAULT_TTL_POINTS);
+ createBugReport(TIMESTAMP_TODAY,
+ STATUS_PENDING_USER_ACTION, TYPE_SILENT, /* ttl_points= */ 0);
+ MetaBugReport bugUserPending_ttl_points1 = createBugReport(TIMESTAMP_TODAY,
+ STATUS_PENDING_USER_ACTION, TYPE_SILENT, /* ttl_points= */ 1);
+ MetaBugReport bugUploadPending = createBugReport(TIMESTAMP_TODAY,
+ STATUS_UPLOAD_PENDING, TYPE_SILENT, USE_DEFAULT_TTL_POINTS);
+ MetaBugReport bugUploadFailed = createBugReport(TIMESTAMP_TODAY,
+ STATUS_UPLOAD_FAILED, TYPE_SILENT, USE_DEFAULT_TTL_POINTS);
+ createBugReport(TIMESTAMP_TODAY, STATUS_WRITE_PENDING, TYPE_SILENT, USE_DEFAULT_TTL_POINTS);
+ createBugReport(TIMESTAMP_TODAY, STATUS_EXPIRED, TYPE_SILENT, USE_DEFAULT_TTL_POINTS);
+ createBugReport(
+ TIMESTAMP_TODAY, STATUS_UPLOAD_SUCCESS, TYPE_SILENT, USE_DEFAULT_TTL_POINTS);
+
+ List<MetaBugReport> bugReports = BugStorageUtils.getUnexpiredBugReportsWithZipFile(
+ mContext, /* ttl_pointsReachedZero= */ false);
+
+ assertThat(bugReports).containsExactly(bugUserPending, bugUserPending_ttl_points1,
+ bugUploadPending, bugUploadFailed);
+ }
+
+ @Test
+ public void test_getUnexpiredBugReportsWithZipFile_withZeroTtlPoints() {
+ createBugReport(TIMESTAMP_TODAY,
+ STATUS_PENDING_USER_ACTION, TYPE_SILENT, USE_DEFAULT_TTL_POINTS);
+ MetaBugReport bugUserPending_ttl_points0 = createBugReport(TIMESTAMP_TODAY,
+ STATUS_PENDING_USER_ACTION, TYPE_SILENT, /* ttl_points= */ 0);
+ createBugReport(TIMESTAMP_TODAY,
+ STATUS_PENDING_USER_ACTION, TYPE_SILENT, /* ttl_points= */ 1);
+ MetaBugReport bugUploadPending_ttl_points_0 = createBugReport(TIMESTAMP_TODAY,
+ STATUS_UPLOAD_PENDING, TYPE_SILENT, /* ttl_points= */ 0);
+ createBugReport(
+ TIMESTAMP_TODAY, STATUS_UPLOAD_PENDING, TYPE_SILENT, USE_DEFAULT_TTL_POINTS);
+ createBugReport(TIMESTAMP_TODAY, STATUS_UPLOAD_FAILED, TYPE_SILENT, USE_DEFAULT_TTL_POINTS);
+ createBugReport(TIMESTAMP_TODAY, STATUS_WRITE_PENDING, TYPE_SILENT, USE_DEFAULT_TTL_POINTS);
+ createBugReport(TIMESTAMP_TODAY, STATUS_EXPIRED, TYPE_SILENT, USE_DEFAULT_TTL_POINTS);
+ createBugReport(
+ TIMESTAMP_TODAY, STATUS_UPLOAD_SUCCESS, TYPE_SILENT, USE_DEFAULT_TTL_POINTS);
+
+ List<MetaBugReport> bugReports = BugStorageUtils.getUnexpiredBugReportsWithZipFile(
+ mContext, /* ttl_pointsReachedZero= */ true);
+
+ assertThat(bugReports).containsExactly(bugUserPending_ttl_points0,
+ bugUploadPending_ttl_points_0);
+ }
+
+ private MetaBugReport createBugReport(
+ String timestamp, Status status, int type, int ttlPoints) {
+ ContentValues values = new ContentValues();
+ values.put(BugStorageProvider.COLUMN_USERNAME, "driver");
+ values.put(BugStorageProvider.COLUMN_TITLE, "sample title");
+ values.put(BugStorageProvider.COLUMN_TIMESTAMP, timestamp);
+ values.put(BugStorageProvider.COLUMN_STATUS, status.getValue());
+ values.put(BugStorageProvider.COLUMN_STATUS_MESSAGE, "");
+ values.put(BugStorageProvider.COLUMN_TYPE, type);
+ if (ttlPoints != USE_DEFAULT_TTL_POINTS) {
+ values.put(BugStorageProvider.COLUMN_TTL_POINTS, ttlPoints);
+ }
+ ContentResolver r = mContext.getContentResolver();
+ Uri uri = r.insert(BugStorageProvider.BUGREPORT_CONTENT_URI, values);
+ Log.d("asd-bugreport", "uri=" + uri);
+ return BugStorageUtils.findBugReport(mContext,
+ Integer.parseInt(uri.getLastPathSegment())).get();
+ }
+
+ private MetaBugReport createBugReportFile(MetaBugReport bug) throws IOException {
+ bug = BugStorageUtils.update(mContext,
+ bug.toBuilder().setBugReportFileName(BUGREPORT_FILE_NAME).build());
+ try (OutputStream out = BugStorageUtils.openBugReportFileToWrite(mContext, bug)) {
+ out.write(BUGREPORT_ZIP_FILE_CONTENT);
+ }
+ return bug;
+ }
+
+ private MetaBugReport createAudioFile(MetaBugReport bug) throws IOException {
+ bug = BugStorageUtils.update(mContext,
+ bug.toBuilder().setAudioFileName(AUDIO_FILE_NAME).build());
+ try (OutputStream out = BugStorageUtils.openAudioMessageFileToWrite(mContext, bug)) {
+ out.write(BUGREPORT_ZIP_FILE_CONTENT);
+ }
+ return bug;
+ }
+
+ private void deleteAllBugReports() {
+ for (MetaBugReport bug : BugStorageUtils.getAllBugReportsDescending(mContext)) {
+ BugStorageUtils.completeDeleteBugReport(mContext, bug.getId());
+ }
+ }
+
+ private static void assertThrows(Class<? extends Throwable> exceptionClass,
+ ExceptionRunnable r) {
+ try {
+ r.run();
+ } catch (Throwable e) {
+ assertTrue("Expected exception type " + exceptionClass.getName() + " but got "
+ + e.getClass().getName(), exceptionClass.isAssignableFrom(e.getClass()));
+ return;
+ }
+ fail("Expected exception type " + exceptionClass.getName()
+ + ", but no exception was thrown");
+ }
+
+ private interface ExceptionRunnable {
+ void run() throws Exception;
+ }
+}
diff --git a/tests/BugReportApp/tests/src/com/android/car/bugreport/TtlPointsDecrementalTest.java b/tests/BugReportApp/tests/src/com/android/car/bugreport/TtlPointsDecrementalTest.java
new file mode 100644
index 0000000..e196914
--- /dev/null
+++ b/tests/BugReportApp/tests/src/com/android/car/bugreport/TtlPointsDecrementalTest.java
@@ -0,0 +1,121 @@
+/*
+ * 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.car.bugreport;
+
+import static com.android.car.bugreport.Status.STATUS_PENDING_USER_ACTION;
+import static com.android.car.bugreport.Status.STATUS_UPLOAD_FAILED;
+import static com.android.car.bugreport.Status.STATUS_UPLOAD_PENDING;
+import static com.android.car.bugreport.Status.STATUS_WRITE_PENDING;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.verify;
+
+import android.content.ContentResolver;
+import android.content.ContentValues;
+import android.content.Context;
+import android.net.Uri;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.filters.MediumTest;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.Date;
+
+@RunWith(AndroidJUnit4.class)
+@MediumTest
+public class TtlPointsDecrementalTest {
+ private static final String TIMESTAMP_TODAY = MetaBugReport.toBugReportTimestamp(new Date());
+
+ private static final int USE_DEFAULT_TTL_POINTS = -9000;
+
+ private Context mContext;
+ private TtlPointsDecremental mSubject;
+
+ @Mock
+ Runnable mFinishedCallback;
+
+ @Before
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ mContext = InstrumentationRegistry.getContext();
+ mSubject = new TtlPointsDecremental(mContext, mFinishedCallback);
+ deleteAllBugReports();
+ }
+
+ /** Makes sure only certain bugreports will get ttl_points decreased. */
+ @Test
+ public void test_decrementsTtlPointsForPendingBugReports() {
+ MetaBugReport bugUserPending_ttl_points0 = createBugReport(TIMESTAMP_TODAY,
+ STATUS_PENDING_USER_ACTION, /* ttl_points= */ 0);
+ MetaBugReport bugUserPending_ttl_points1 = createBugReport(TIMESTAMP_TODAY,
+ STATUS_PENDING_USER_ACTION, /* ttl_points= */ 1);
+ MetaBugReport bugUserPending_ttl_points2 = createBugReport(TIMESTAMP_TODAY,
+ STATUS_PENDING_USER_ACTION, /* ttl_points= */ 2);
+ MetaBugReport bugUploadPending = createBugReport(TIMESTAMP_TODAY,
+ STATUS_UPLOAD_PENDING, /* ttl_points= */ 2);
+ MetaBugReport bugUploadFailed = createBugReport(TIMESTAMP_TODAY,
+ STATUS_UPLOAD_FAILED, /* ttl_points= */ 2);
+ MetaBugReport bugUploadWritePending = createBugReport(TIMESTAMP_TODAY,
+ STATUS_WRITE_PENDING, /* ttl_points= */ 2);
+
+ mSubject.run();
+
+ assertThat(find(bugUserPending_ttl_points0)).isEqualTo(bugUserPending_ttl_points0);
+ assertThat(find(bugUserPending_ttl_points1)).isEqualTo(
+ bugUserPending_ttl_points1.toBuilder().setTtlPoints(0).build());
+ assertThat(find(bugUserPending_ttl_points2)).isEqualTo(
+ bugUserPending_ttl_points2.toBuilder().setTtlPoints(1).build());
+ assertThat(find(bugUploadPending)).isEqualTo(
+ bugUploadPending.toBuilder().setTtlPoints(1).build());
+ assertThat(find(bugUploadFailed)).isEqualTo(
+ bugUploadFailed.toBuilder().setTtlPoints(1).build());
+ assertThat(find(bugUploadWritePending)).isEqualTo(bugUploadWritePending);
+ verify(mFinishedCallback).run();
+ }
+
+ private MetaBugReport find(MetaBugReport bug) {
+ return BugStorageUtils.findBugReport(mContext, bug.getId()).get();
+ }
+
+ private MetaBugReport createBugReport(String timestamp, Status status, int ttlPoints) {
+ ContentValues values = new ContentValues();
+ values.put(BugStorageProvider.COLUMN_USERNAME, "driver");
+ values.put(BugStorageProvider.COLUMN_TITLE, "sample title");
+ values.put(BugStorageProvider.COLUMN_TIMESTAMP, timestamp);
+ values.put(BugStorageProvider.COLUMN_STATUS, status.getValue());
+ values.put(BugStorageProvider.COLUMN_STATUS_MESSAGE, "");
+ values.put(BugStorageProvider.COLUMN_TYPE, MetaBugReport.TYPE_SILENT);
+ if (ttlPoints != USE_DEFAULT_TTL_POINTS) {
+ values.put(BugStorageProvider.COLUMN_TTL_POINTS, ttlPoints);
+ }
+ ContentResolver r = mContext.getContentResolver();
+ Uri uri = r.insert(BugStorageProvider.BUGREPORT_CONTENT_URI, values);
+ return BugStorageUtils.findBugReport(mContext,
+ Integer.parseInt(uri.getLastPathSegment())).get();
+ }
+
+ private void deleteAllBugReports() {
+ for (MetaBugReport bug : BugStorageUtils.getAllBugReportsDescending(mContext)) {
+ BugStorageUtils.completeDeleteBugReport(mContext, bug.getId());
+ }
+ }
+}
diff --git a/tests/BugReportApp/tests/src/com/google/android/car/bugreport/BugStorageUtilsTest.java b/tests/BugReportApp/tests/src/com/google/android/car/bugreport/BugStorageUtilsTest.java
deleted file mode 100644
index 29dcc19..0000000
--- a/tests/BugReportApp/tests/src/com/google/android/car/bugreport/BugStorageUtilsTest.java
+++ /dev/null
@@ -1,131 +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.car.bugreport;
-
-import static com.android.car.bugreport.MetaBugReport.TYPE_INTERACTIVE;
-import static com.android.car.bugreport.Status.STATUS_PENDING_USER_ACTION;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import android.content.Context;
-import android.support.test.InstrumentationRegistry;
-import android.support.test.filters.MediumTest;
-import android.support.test.runner.AndroidJUnit4;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.time.Instant;
-import java.util.Date;
-
-@RunWith(AndroidJUnit4.class)
-@MediumTest
-public class BugStorageUtilsTest {
- private static final String TIMESTAMP_TODAY = MetaBugReport.toBugReportTimestamp(new Date());
- private static final String BUGREPORT_ZIP_FILE_NAME = "bugreport@ASD.zip";
- private static final int BUGREPORT_ZIP_FILE_CONTENT = 1;
-
- private Context mContext;
-
- @Before
- public void setUp() {
- mContext = InstrumentationRegistry.getContext();
- }
-
- @Test
- public void test_createBugReport_createsAndReturnsMetaBugReport() throws Exception {
- MetaBugReport bug = createBugReportWithStatus(TIMESTAMP_TODAY,
- STATUS_PENDING_USER_ACTION, TYPE_INTERACTIVE, /* createBugReportFile= */ true);
-
- assertThat(BugStorageUtils.findBugReport(mContext, bug.getId()).get()).isEqualTo(bug);
- }
-
- @Test
- public void test_expireBugReport_marksBugReportDeletedAndDeletesZip() throws Exception {
- MetaBugReport bug = createBugReportWithStatus(TIMESTAMP_TODAY,
- STATUS_PENDING_USER_ACTION, TYPE_INTERACTIVE, /* createBugReportFile= */ true);
- try (InputStream in = BugStorageUtils.openBugReportFileToRead(mContext, bug)) {
- assertThat(in).isNotNull();
- }
- Instant now = Instant.now();
-
- boolean deleteResult = BugStorageUtils.expireBugReport(mContext, bug, now);
-
- assertThat(deleteResult).isTrue();
- assertThat(BugStorageUtils.findBugReport(mContext, bug.getId()).get())
- .isEqualTo(bug.toBuilder()
- .setStatus(Status.STATUS_EXPIRED.getValue())
- .setStatusMessage("Expired on " + now).build());
- assertThrows(FileNotFoundException.class, () ->
- BugStorageUtils.openBugReportFileToRead(mContext, bug));
- }
-
- @Test
- public void test_completeDeleteBugReport_removesBugReportRecordFromDb() throws Exception {
- MetaBugReport bug = createBugReportWithStatus(TIMESTAMP_TODAY,
- STATUS_PENDING_USER_ACTION, TYPE_INTERACTIVE, /* createBugReportFile= */ true);
- try (InputStream in = BugStorageUtils.openBugReportFileToRead(mContext, bug)) {
- assertThat(in).isNotNull();
- }
-
- boolean deleteResult = BugStorageUtils.completeDeleteBugReport(mContext, bug.getId());
-
- assertThat(deleteResult).isTrue();
- assertThat(BugStorageUtils.findBugReport(mContext, bug.getId()).isPresent()).isFalse();
- assertThrows(IllegalArgumentException.class, () ->
- BugStorageUtils.openBugReportFileToRead(mContext, bug));
- }
-
- private MetaBugReport createBugReportWithStatus(
- String timestamp, Status status, int type, boolean createBugReportFile)
- throws IOException {
- MetaBugReport bugReport = BugStorageUtils.createBugReport(
- mContext, "sample title", timestamp, "driver", type);
- if (createBugReportFile) {
- bugReport = BugStorageUtils.update(mContext,
- bugReport.toBuilder().setBugReportFileName(BUGREPORT_ZIP_FILE_NAME).build());
- try (OutputStream out = BugStorageUtils.openBugReportFileToWrite(mContext, bugReport)) {
- out.write(BUGREPORT_ZIP_FILE_CONTENT);
- }
- }
- return BugStorageUtils.setBugReportStatus(mContext, bugReport, status, "");
- }
-
- private static void assertThrows(Class<? extends Throwable> exceptionClass,
- ExceptionRunnable r) {
- try {
- r.run();
- } catch (Throwable e) {
- assertTrue("Expected exception type " + exceptionClass.getName() + " but got "
- + e.getClass().getName(), exceptionClass.isAssignableFrom(e.getClass()));
- return;
- }
- fail("Expected exception type " + exceptionClass.getName()
- + ", but no exception was thrown");
- }
-
- private interface ExceptionRunnable {
- void run() throws Exception;
- }
-}
diff --git a/tests/CarCtsDummyLauncher/AndroidManifest.xml b/tests/CarCtsDummyLauncher/AndroidManifest.xml
deleted file mode 100644
index 32ada71..0000000
--- a/tests/CarCtsDummyLauncher/AndroidManifest.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.car.dummylauncher">
-
- <uses-sdk android:minSdkVersion="17" />
-
- <application
- android:label="@string/app_name">
- <activity
- android:name=".LauncherActivity"
- android:label="@string/app_name"
- android:configChanges="uiMode|mcc|mnc"
- android:alwaysRetainTaskState="true"
- android:launchMode="singleTask"
- android:clearTaskOnLaunch="true"
- android:stateNotNeeded="true"
- android:resumeWhilePausing="true"
- android:windowSoftInputMode="adjustPan"
- android:theme="@android:style/Theme.NoTitleBar">
- <meta-data android:name="distractionOptimized" android:value="true"/>
- <intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.HOME"/>
- <category android:name="android.intent.category.LAUNCHER" />
- <category android:name="android.intent.category.DEFAULT" />
- </intent-filter>
- </activity>
- </application>
-
-
-</manifest>
diff --git a/tests/CarCtsDummyLauncher/Android.mk b/tests/CarCtsFakeLauncher/Android.mk
similarity index 95%
rename from tests/CarCtsDummyLauncher/Android.mk
rename to tests/CarCtsFakeLauncher/Android.mk
index fec1106..d042095 100644
--- a/tests/CarCtsDummyLauncher/Android.mk
+++ b/tests/CarCtsFakeLauncher/Android.mk
@@ -22,7 +22,7 @@
# Only compile source java files in this apk.
LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_PACKAGE_NAME := CarCtsDummyLauncher
+LOCAL_PACKAGE_NAME := CarCtsFakeLauncher
LOCAL_PRIVATE_PLATFORM_APIS := true
diff --git a/tests/CarCtsFakeLauncher/AndroidManifest.xml b/tests/CarCtsFakeLauncher/AndroidManifest.xml
new file mode 100644
index 0000000..e02f44b
--- /dev/null
+++ b/tests/CarCtsFakeLauncher/AndroidManifest.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.car.fakelauncher">
+
+ <uses-sdk android:minSdkVersion="17"/>
+
+ <application android:label="@string/app_name">
+ <activity android:name=".LauncherActivity"
+ android:label="@string/app_name"
+ android:configChanges="uiMode|mcc|mnc"
+ android:alwaysRetainTaskState="true"
+ android:launchMode="singleTask"
+ android:clearTaskOnLaunch="true"
+ android:stateNotNeeded="true"
+ android:resumeWhilePausing="true"
+ android:windowSoftInputMode="adjustPan"
+ android:theme="@android:style/Theme.NoTitleBar"
+ android:exported="true">
+ <meta-data android:name="distractionOptimized"
+ android:value="true"/>
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN"/>
+ <category android:name="android.intent.category.HOME"/>
+ <category android:name="android.intent.category.LAUNCHER"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ </intent-filter>
+ </activity>
+ </application>
+
+
+</manifest>
diff --git a/tests/CarCtsDummyLauncher/res/layout/launcher_activity.xml b/tests/CarCtsFakeLauncher/res/layout/launcher_activity.xml
similarity index 100%
rename from tests/CarCtsDummyLauncher/res/layout/launcher_activity.xml
rename to tests/CarCtsFakeLauncher/res/layout/launcher_activity.xml
diff --git a/tests/CarCtsDummyLauncher/res/values/strings.xml b/tests/CarCtsFakeLauncher/res/values/strings.xml
similarity index 87%
rename from tests/CarCtsDummyLauncher/res/values/strings.xml
rename to tests/CarCtsFakeLauncher/res/values/strings.xml
index b5d4664..f96bcdf 100644
--- a/tests/CarCtsDummyLauncher/res/values/strings.xml
+++ b/tests/CarCtsFakeLauncher/res/values/strings.xml
@@ -18,8 +18,8 @@
<string name="launcher_activity_message" translatable="false">Uninstall this after CTS finishs\n\n
To uninstall, you can use Setting app or run the following command:\n
- adb uninstall com.android.car.dummylauncher
+ adb uninstall com.android.car.fakelauncher
</string>
- <string name="app_name" translatable="false">Dummy Launcher for CTS</string>
+ <string name="app_name" translatable="false">Fake Launcher for CTS</string>
</resources>
diff --git a/tests/CarCtsDummyLauncher/src/com/android/car/dummylauncher/LauncherActivity.java b/tests/CarCtsFakeLauncher/src/com/android/car/fakelauncher/LauncherActivity.java
similarity index 96%
rename from tests/CarCtsDummyLauncher/src/com/android/car/dummylauncher/LauncherActivity.java
rename to tests/CarCtsFakeLauncher/src/com/android/car/fakelauncher/LauncherActivity.java
index 413fae9..42d802a 100644
--- a/tests/CarCtsDummyLauncher/src/com/android/car/dummylauncher/LauncherActivity.java
+++ b/tests/CarCtsFakeLauncher/src/com/android/car/fakelauncher/LauncherActivity.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package com.android.car.dummylauncher;
+package com.android.car.fakelauncher;
import android.app.Activity;
import android.content.Intent;
@@ -32,7 +32,7 @@
* for CTS and they make CTS fail.
*/
public class LauncherActivity extends Activity {
- private static final String TAG = "DummyLauncher";
+ private static final String TAG = "FakeLauncher";
private int mUserId = UserHandle.USER_NULL;
diff --git a/tests/CarDeveloperOptions/Android.mk b/tests/CarDeveloperOptions/Android.mk
index 4523962..edd277c 100644
--- a/tests/CarDeveloperOptions/Android.mk
+++ b/tests/CarDeveloperOptions/Android.mk
@@ -31,7 +31,7 @@
LOCAL_CERTIFICATE := platform
LOCAL_SYSTEM_EXT_MODULE := true
LOCAL_PRIVILEGED_MODULE := true
-LOCAL_REQUIRED_MODULES := privapp_whitelist_com.android.car.developeroptions
+LOCAL_REQUIRED_MODULES := allowed_privapp_com.android.car.developeroptions
LOCAL_MODULE_TAGS := optional
LOCAL_USE_AAPT2 := true
diff --git a/tests/CarDeveloperOptions/AndroidManifest.xml b/tests/CarDeveloperOptions/AndroidManifest.xml
index 436d7f0..66d2581 100644
--- a/tests/CarDeveloperOptions/AndroidManifest.xml
+++ b/tests/CarDeveloperOptions/AndroidManifest.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2019 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
@@ -14,47 +15,47 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.car.developeroptions"
- coreApp="true"
- android:sharedUserId="android.uid.system">
+ package="com.android.car.developeroptions"
+ coreApp="true"
+ android:sharedUserId="android.uid.system">
- <original-package android:name="com.android.car.developeroptions" />
+ <original-package android:name="com.android.car.developeroptions"/>
- <uses-permission android:name="android.permission.REQUEST_NETWORK_SCORES" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
- <uses-permission android:name="android.permission.WRITE_SETTINGS" />
- <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
- <uses-permission android:name="android.permission.DEVICE_POWER" />
- <uses-permission android:name="android.permission.CHANGE_CONFIGURATION" />
- <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
- <uses-permission android:name="android.permission.VIBRATE" />
- <uses-permission android:name="android.permission.BLUETOOTH" />
- <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
- <uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />
- <uses-permission android:name="android.permission.NFC" />
- <uses-permission android:name="android.permission.HARDWARE_TEST" />
- <uses-permission android:name="android.permission.CALL_PHONE" />
- <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
- <uses-permission android:name="android.permission.MASTER_CLEAR" />
- <uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH" />
- <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER" />
- <uses-permission android:name="android.permission.READ_CONTACTS" />
- <uses-permission android:name="android.permission.WRITE_CONTACTS" />
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- <uses-permission android:name="android.permission.LOCAL_MAC_ADDRESS" />
- <uses-permission android:name="android.permission.ACCESS_WIMAX_STATE" />
- <uses-permission android:name="android.permission.CHANGE_WIMAX_STATE" />
- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
- <uses-permission android:name="com.android.certinstaller.INSTALL_AS_USER" />
- <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
- <uses-permission android:name="android.permission.TETHER_PRIVILEGED" />
+ <uses-permission android:name="android.permission.REQUEST_NETWORK_SCORES"/>
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+ <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+ <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
+ <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
+ <uses-permission android:name="android.permission.DEVICE_POWER"/>
+ <uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/>
+ <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
+ <uses-permission android:name="android.permission.VIBRATE"/>
+ <uses-permission android:name="android.permission.BLUETOOTH"/>
+ <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
+ <uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED"/>
+ <uses-permission android:name="android.permission.NFC"/>
+ <uses-permission android:name="android.permission.HARDWARE_TEST"/>
+ <uses-permission android:name="android.permission.CALL_PHONE"/>
+ <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
+ <uses-permission android:name="android.permission.MASTER_CLEAR"/>
+ <uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH"/>
+ <uses-permission android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"/>
+ <uses-permission android:name="android.permission.READ_CONTACTS"/>
+ <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
+ <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
+ <uses-permission android:name="android.permission.LOCAL_MAC_ADDRESS"/>
+ <uses-permission android:name="android.permission.ACCESS_WIMAX_STATE"/>
+ <uses-permission android:name="android.permission.CHANGE_WIMAX_STATE"/>
+ <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
+ <uses-permission android:name="com.android.certinstaller.INSTALL_AS_USER"/>
+ <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
+ <uses-permission android:name="android.permission.TETHER_PRIVILEGED"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.CLEAR_APP_USER_DATA" />
- <uses-permission android:name="android.permission.READ_PHONE_STATE" />
- <uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
- <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
+ <uses-permission android:name="android.permission.INTERNET"/>
+ <uses-permission android:name="android.permission.CLEAR_APP_USER_DATA"/>
+ <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
+ <uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
+ <uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.WRITE_APN_SETTINGS"/>
<uses-permission android:name="android.permission.ACCESS_CHECKIN_PROPERTIES"/>
@@ -63,138 +64,139 @@
<uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"/>
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS"/>
<uses-permission android:name="android.permission.BATTERY_STATS"/>
- <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
- <uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS" />
- <uses-permission android:name="android.permission.MOVE_PACKAGE" />
- <uses-permission android:name="android.permission.USE_CREDENTIALS" />
- <uses-permission android:name="android.permission.BACKUP" />
- <uses-permission android:name="android.permission.READ_SYNC_STATS" />
- <uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />
- <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS" />
- <uses-permission android:name="android.permission.READ_DEVICE_CONFIG" />
- <uses-permission android:name="android.permission.STATUS_BAR" />
- <uses-permission android:name="android.permission.MANAGE_USB" />
- <uses-permission android:name="android.permission.MANAGE_DEBUGGING" />
- <uses-permission android:name="android.permission.SET_POINTER_SPEED" />
- <uses-permission android:name="android.permission.SET_KEYBOARD_LAYOUT" />
- <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
- <uses-permission android:name="android.permission.COPY_PROTECTED_DATA" />
- <uses-permission android:name="android.permission.MANAGE_USERS" />
- <uses-permission android:name="android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS" />
- <uses-permission android:name="android.permission.READ_PROFILE" />
- <uses-permission android:name="android.permission.CONFIGURE_WIFI_DISPLAY" />
- <uses-permission android:name="android.permission.CONFIGURE_DISPLAY_COLOR_MODE" />
- <uses-permission android:name="android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS" />
- <uses-permission android:name="android.permission.SUGGEST_MANUAL_TIME_AND_ZONE" />
- <uses-permission android:name="android.permission.ACCESS_NOTIFICATIONS" />
- <uses-permission android:name="android.permission.REBOOT" />
- <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
- <uses-permission android:name="android.permission.MANAGE_DEVICE_ADMINS" />
- <uses-permission android:name="android.permission.READ_SEARCH_INDEXABLES" />
- <uses-permission android:name="android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE" />
- <uses-permission android:name="android.permission.OEM_UNLOCK_STATE" />
- <uses-permission android:name="android.permission.MANAGE_USER_OEM_UNLOCK_STATE" />
- <uses-permission android:name="android.permission.OVERRIDE_WIFI_CONFIG" />
- <uses-permission android:name="android.permission.USE_FINGERPRINT" />
- <uses-permission android:name="android.permission.MANAGE_FINGERPRINT" />
- <uses-permission android:name="android.permission.USE_BIOMETRIC" />
- <uses-permission android:name="android.permission.USE_BIOMETRIC_INTERNAL" />
- <uses-permission android:name="android.permission.USER_ACTIVITY" />
- <uses-permission android:name="android.permission.CHANGE_APP_IDLE_STATE" />
+ <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS"/>
+ <uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS"/>
+ <uses-permission android:name="android.permission.MOVE_PACKAGE"/>
+ <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
+ <uses-permission android:name="android.permission.BACKUP"/>
+ <uses-permission android:name="android.permission.READ_SYNC_STATS"/>
+ <uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
+ <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/>
+ <uses-permission android:name="android.permission.READ_DEVICE_CONFIG"/>
+ <uses-permission android:name="android.permission.STATUS_BAR"/>
+ <uses-permission android:name="android.permission.MANAGE_USB"/>
+ <uses-permission android:name="android.permission.MANAGE_DEBUGGING"/>
+ <uses-permission android:name="android.permission.SET_POINTER_SPEED"/>
+ <uses-permission android:name="android.permission.SET_KEYBOARD_LAYOUT"/>
+ <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>
+ <uses-permission android:name="android.permission.COPY_PROTECTED_DATA"/>
+ <uses-permission android:name="android.permission.MANAGE_USERS"/>
+ <uses-permission android:name="android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS"/>
+ <uses-permission android:name="android.permission.READ_PROFILE"/>
+ <uses-permission android:name="android.permission.CONFIGURE_WIFI_DISPLAY"/>
+ <uses-permission android:name="android.permission.CONFIGURE_DISPLAY_COLOR_MODE"/>
+ <uses-permission android:name="android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS"/>
+ <uses-permission android:name="android.permission.SUGGEST_MANUAL_TIME_AND_ZONE"/>
+ <uses-permission android:name="android.permission.ACCESS_NOTIFICATIONS"/>
+ <uses-permission android:name="android.permission.REBOOT"/>
+ <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+ <uses-permission android:name="android.permission.MANAGE_DEVICE_ADMINS"/>
+ <uses-permission android:name="android.permission.READ_SEARCH_INDEXABLES"/>
+ <uses-permission android:name="android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE"/>
+ <uses-permission android:name="android.permission.OEM_UNLOCK_STATE"/>
+ <uses-permission android:name="android.permission.MANAGE_USER_OEM_UNLOCK_STATE"/>
+ <uses-permission android:name="android.permission.OVERRIDE_WIFI_CONFIG"/>
+ <uses-permission android:name="android.permission.USE_FINGERPRINT"/>
+ <uses-permission android:name="android.permission.MANAGE_FINGERPRINT"/>
+ <uses-permission android:name="android.permission.USE_BIOMETRIC"/>
+ <uses-permission android:name="android.permission.USE_BIOMETRIC_INTERNAL"/>
+ <uses-permission android:name="android.permission.USER_ACTIVITY"/>
+ <uses-permission android:name="android.permission.CHANGE_APP_IDLE_STATE"/>
<uses-permission android:name="android.permission.PEERS_MAC_ADDRESS"/>
<uses-permission android:name="android.permission.MANAGE_NOTIFICATIONS"/>
<uses-permission android:name="android.permission.DELETE_PACKAGES"/>
- <uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES" />
+ <uses-permission android:name="android.permission.REQUEST_DELETE_PACKAGES"/>
<uses-permission android:name="android.permission.MANAGE_APP_OPS_RESTRICTIONS"/>
- <uses-permission android:name="android.permission.MANAGE_APP_OPS_MODES" />
+ <uses-permission android:name="android.permission.MANAGE_APP_OPS_MODES"/>
<uses-permission android:name="android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS"/>
- <uses-permission android:name="android.permission.READ_PRINT_SERVICES" />
- <uses-permission android:name="android.permission.NETWORK_SETTINGS" />
- <uses-permission android:name="android.permission.TEST_BLACKLISTED_PASSWORD" />
- <uses-permission android:name="android.permission.USE_RESERVED_DISK" />
- <uses-permission android:name="android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS" />
- <uses-permission android:name="android.permission.CAMERA" />
- <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
+ <uses-permission android:name="android.permission.READ_PRINT_SERVICES"/>
+ <uses-permission android:name="android.permission.NETWORK_SETTINGS"/>
+ <uses-permission android:name="android.permission.TEST_BLACKLISTED_PASSWORD"/>
+ <uses-permission android:name="android.permission.USE_RESERVED_DISK"/>
+ <uses-permission android:name="android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS"/>
+ <uses-permission android:name="android.permission.CAMERA"/>
+ <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL"/>
<application android:label="@string/development_settings_title"
- android:icon="@drawable/ic_launcher_settings"
- android:theme="@style/Theme.Settings"
- android:hardwareAccelerated="true"
- android:requiredForAllUsers="true"
- android:supportsRtl="true"
- android:allowBackup="false"
- android:usesCleartextTraffic="true"
- android:defaultToDeviceProtectedStorage="true"
- android:directBootAware="true"
- android:appComponentFactory="androidx.core.app.CoreComponentFactory">
+ android:icon="@drawable/ic_launcher_settings"
+ android:theme="@style/Theme.Settings"
+ android:hardwareAccelerated="true"
+ android:requiredForAllUsers="true"
+ android:supportsRtl="true"
+ android:allowBackup="false"
+ android:usesCleartextTraffic="true"
+ android:defaultToDeviceProtectedStorage="true"
+ android:directBootAware="true"
+ android:appComponentFactory="androidx.core.app.CoreComponentFactory">
- <uses-library android:name="org.apache.http.legacy" />
+ <uses-library android:name="org.apache.http.legacy"/>
<!-- Settings -->
<activity android:name=".SubSettings"
- android:parentActivityName="Settings" />
+ android:parentActivityName="Settings"/>
<activity android:name="SetFullBackupPassword"
- android:label="@string/local_backup_password_title"
- android:exported="false" />
+ android:label="@string/local_backup_password_title"
+ android:exported="false"/>
- <activity
- android:name="Settings$DevelopmentSettingsDashboardActivity"
- android:label="@string/development_settings_title"
- android:icon="@drawable/ic_settings_development"
- android:parentActivityName="Settings"
- android:enabled="false">
+ <activity android:name="Settings$DevelopmentSettingsDashboardActivity"
+ android:label="@string/development_settings_title"
+ android:icon="@drawable/ic_settings_development"
+ android:parentActivityName="Settings"
+ android:enabled="false"
+ android:exported="true">
<intent-filter android:priority="1">
- <action android:name="android.settings.APPLICATION_DEVELOPMENT_SETTINGS" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.settings.APPLICATION_DEVELOPMENT_SETTINGS"/>
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<intent-filter>
- <action android:name="com.android.settings.action.SETTINGS" />
+ <action android:name="com.android.settings.action.SETTINGS"/>
</intent-filter>
- <meta-data android:name="com.android.settings.order" android:value="-40"/>
+ <meta-data android:name="com.android.settings.order"
+ android:value="-40"/>
<meta-data android:name="com.android.settings.category"
- android:value="com.android.settings.category.ia.system" />
+ android:value="com.android.settings.category.ia.system"/>
<meta-data android:name="com.android.settings.summary"
- android:resource="@string/summary_empty"/>
+ android:resource="@string/summary_empty"/>
<meta-data android:name="com.android.car.developeroptions.FRAGMENT_CLASS"
- android:value="com.android.car.developeroptions.development.DevelopmentSettingsDashboardFragment" />
+ android:value="com.android.car.developeroptions.development.DevelopmentSettingsDashboardFragment"/>
<meta-data android:name="com.android.car.developeroptions.PRIMARY_PROFILE_CONTROLLED"
- android:value="true" />
+ android:value="true"/>
</activity>
<!-- The opposite of DevelopmentSettingsActivity, it's no-op and only enabled when the real
- activity is disabled to be CTS compliant. -->
- <activity
- android:name=".development.DevelopmentSettingsDisabledActivity"
- android:icon="@drawable/ic_settings_development"
- android:label="@string/development_settings_title"
- android:excludeFromRecents="true"
- android:theme="@style/Transparent">
+ activity is disabled to be CTS compliant. -->
+ <activity android:name=".development.DevelopmentSettingsDisabledActivity"
+ android:icon="@drawable/ic_settings_development"
+ android:label="@string/development_settings_title"
+ android:excludeFromRecents="true"
+ android:theme="@style/Transparent"
+ android:exported="true">
<intent-filter android:priority="-1">
- <action android:name="android.settings.APPLICATION_DEVELOPMENT_SETTINGS" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.settings.APPLICATION_DEVELOPMENT_SETTINGS"/>
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<activity android:name=".development.AppPicker"
- android:label="@string/select_application"
- android:theme="@android:style/Theme.DeviceDefault.Light.Dialog" />
+ android:label="@string/select_application"
+ android:theme="@android:style/Theme.DeviceDefault.Light.Dialog"/>
<!-- For CtsVerifier use. -->
- <activity
- android:name="Settings$TrustedCredentialsSettingsActivity"
- android:label="@string/trusted_credentials"
- android:icon="@drawable/ic_settings_security"
- android:parentActivityName="Settings">
+ <activity android:name="Settings$TrustedCredentialsSettingsActivity"
+ android:label="@string/trusted_credentials"
+ android:icon="@drawable/ic_settings_security"
+ android:parentActivityName="Settings"
+ android:exported="true">
<intent-filter android:priority="1">
- <action android:name="com.android.settings.TRUSTED_CREDENTIALS" />
- <action android:name="com.android.settings.TRUSTED_CREDENTIALS_USER" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="com.android.settings.TRUSTED_CREDENTIALS"/>
+ <action android:name="com.android.settings.TRUSTED_CREDENTIALS_USER"/>
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
<meta-data android:name="com.android.car.developeroptions.FRAGMENT_CLASS"
- android:value="com.android.car.developeroptions.TrustedCredentialsSettings" />
+ android:value="com.android.car.developeroptions.TrustedCredentialsSettings"/>
<meta-data android:name="com.android.car.developeroptions.PRIMARY_PROFILE_CONTROLLED"
- android:value="true" />
+ android:value="true"/>
</activity>
</application>
diff --git a/tests/CarDeveloperOptions/res/layout/preference_widget_master_checkbox.xml b/tests/CarDeveloperOptions/res/layout/preference_widget_primary_checkbox.xml
similarity index 100%
rename from tests/CarDeveloperOptions/res/layout/preference_widget_master_checkbox.xml
rename to tests/CarDeveloperOptions/res/layout/preference_widget_primary_checkbox.xml
diff --git a/tests/CarDeveloperOptions/res/layout/preference_widget_master_switch.xml b/tests/CarDeveloperOptions/res/layout/preference_widget_primary_switch.xml
similarity index 100%
rename from tests/CarDeveloperOptions/res/layout/preference_widget_master_switch.xml
rename to tests/CarDeveloperOptions/res/layout/preference_widget_primary_switch.xml
diff --git a/tests/CarDeveloperOptions/res/values-af/arrays.xml b/tests/CarDeveloperOptions/res/values-af/arrays.xml
index 3b24efc..eee8364 100644
--- a/tests/CarDeveloperOptions/res/values-af/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-af/arrays.xml
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"Moet nooit toelaat dat"</item>
<item msgid="8184570120217958741">"Laat altyd toe"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normaal"</item>
+ <item msgid="5101233285497327432">"Matig"</item>
+ <item msgid="1555861583162930714">"Laag"</item>
+ <item msgid="1719683776264798117">"Kritiek"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normaal"</item>
+ <item msgid="6107138933849816768">"Matig"</item>
+ <item msgid="182695359839047859">"Laag"</item>
+ <item msgid="8577246509202964244">"Kritiek"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Aanhoudend"</item>
<item msgid="167418068739176448">"Topaktiwiteit"</item>
diff --git a/tests/CarDeveloperOptions/res/values-af/strings.xml b/tests/CarDeveloperOptions/res/values-af/strings.xml
index 740beee..80bf6d8 100644
--- a/tests/CarDeveloperOptions/res/values-af/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-af/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Maak die teks op die skerm kleiner of groter."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Maak kleiner"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Maak groter"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Voorbeeldteks"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Die Wonderlike Towenaar van Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Hoofstuk 11: Die Wonderlike Smaragstad van Oz"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Profiel-inligting"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Rekeninge"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Ligging"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Gebruik ligging"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Gebruik ligging"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Af"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Aan – <xliff:g id="COUNT_1">%1$d</xliff:g> programme kan toegang tot ligging verkry</item>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Skakel Wi-Fi aan"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Gebruik Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Gebruik Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi-Fi-instellings"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Stel en beheer draadlose toegangspunte"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Mobiel"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"As Wi-Fi onbeskikbaar is, moet jy mobiele netwerk gebruik"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"As mobiele netwerk onbeskikbaar is, gebruik Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Bel oor Wi-Fi. Die oproep sal eindig as jy nie meer Wi-Fi het nie."</string>
@@ -1613,7 +1615,7 @@
<string name="tether_settings_title_bluetooth" msgid="1999590158102569959">"Bluetooth-verbinding"</string>
<string name="tether_settings_title_usb_bluetooth" msgid="1159128764162788159">"Verbinding"</string>
<string name="tether_settings_title_all" msgid="6935843543433954181">"Warmkol en verbinding"</string>
- <string name="tether_settings_summary_hotspot_on_tether_on" msgid="1289593649526514499">"Warmkol is aan, verbinding"</string>
+ <string name="tether_settings_summary_hotspot_on_tether_on" msgid="1289593649526514499">"Warmkol is aan, verbind"</string>
<string name="tether_settings_summary_hotspot_on_tether_off" msgid="8010689354668285422">"Warmkol is aan"</string>
<string name="tether_settings_summary_hotspot_off_tether_on" msgid="1349909238672649877">"Verbinding"</string>
<string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"Kan nie verbind of Wi-Fi-warmkol gebruik wanneer Databespaarder aan is nie"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Kennisgewingvibrasie"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Luivibrasie"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Raakvibrasie"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Gebruik diens"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Gebruik kleurregstelling"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Gebruik onderskrifte"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Gebruik diens"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Gebruik kleurregstelling"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Gebruik onderskrifte"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Gaan voort"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Gehoortoestelle"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Geen gehoortoestelle is gekoppel nie"</string>
@@ -2307,9 +2309,9 @@
<item quantity="other">Beperk %1$d programme?</item>
<item quantity="one">Beperk program?</item>
</plurals>
- <string name="battery_tip_restrict_app_dialog_message" msgid="6905822297507947381">"Om batterykrag te bespaar, keer <xliff:g id="APP">%1$s</xliff:g> om die battery op die agtergrond te gebruik. Hierdie program sal dalk nie behoorlik werk nie en kennisgewings sal dalk vertraag word."</string>
- <string name="battery_tip_restrict_apps_less_than_5_dialog_message" msgid="4225881888543582456">"Om batterykrag te bespaar, keer hierdie programme om die battery op die agtergrond te gebruik. Beperkte programme sal dalk nie behoorlik werk nie en kennisgewings sal dalk vertraag word.\n\nProgramme:"</string>
- <string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"Om batterykrag te bespaar, keer hierdie programme om die battery op die agtergrond te gebruik. Beperkte programme sal dalk nie behoorlik werk nie en kennisgewings sal dalk vertraag word.\n\nProgramme:\n<xliff:g id="APP_LIST">%1$s</xliff:g>."</string>
+ <string name="battery_tip_restrict_app_dialog_message" msgid="6905822297507947381">"Verhoed <xliff:g id="APP">%1$s</xliff:g> om die battery op die agtergrond te gebruik om so batterykrag te bespaar. Hierdie program sal dalk nie behoorlik werk nie en kennisgewings sal dalk vertraag word."</string>
+ <string name="battery_tip_restrict_apps_less_than_5_dialog_message" msgid="4225881888543582456">"Verhoed hierdie programme om die battery op die agtergrond te gebruik om so batterykrag te bespaar. Beperkte programme sal dalk nie behoorlik werk nie en kennisgewings sal dalk vertraag word.\n\nProgramme:"</string>
+ <string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"Verhoed hierdie programme om die battery op die agtergrond te gebruik om so batterykrag te bespaar. Beperkte programme sal dalk nie behoorlik werk nie en kennisgewings sal dalk vertraag word.\n\nProgramme:\n<xliff:g id="APP_LIST">%1$s</xliff:g>."</string>
<string name="battery_tip_restrict_app_dialog_ok" msgid="2573410775701913487">"Beperk"</string>
<string name="battery_tip_unrestrict_app_dialog_title" msgid="812458516399125710">"Verwyder beperking?"</string>
<string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"Hierdie program sal batterykrag op die agtergrond kan gebruik. Jou battery sal dalk gouer as verwag afloop."</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Skakel aan"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Gebruik Batterybespaarder"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Gebruik Batterybespaarder"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Skakel outomaties aan"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Nooit"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"met battery <xliff:g id="PERCENT">%1$s</xliff:g> vol"</string>
@@ -2627,8 +2629,8 @@
<string name="remove_account_label" msgid="5885425720323823387">"Verwyder rekening"</string>
<string name="header_add_an_account" msgid="8482614556580804956">"Voeg \'n rekening by"</string>
<string name="really_remove_account_title" msgid="4166512362915154319">"Verwyder rekening?"</string>
- <string name="really_remove_account_message" product="tablet" msgid="7403843371045856719">"Verwydering van hierdie rekening sal ook al sy boodskappe, kontakte en ander data van die tablet uitvee."</string>
- <string name="really_remove_account_message" product="default" msgid="8951224626153163914">"Verwydering van hierdie rekening sal ook al sy boodskappe, kontakte en ander data van die foon uitvee."</string>
+ <string name="really_remove_account_message" product="tablet" msgid="7403843371045856719">"Verwydering van hierdie rekening sal ook al sy boodskappe, kontakte en ander data van die tablet af uitvee."</string>
+ <string name="really_remove_account_message" product="default" msgid="8951224626153163914">"Verwydering van hierdie rekening sal ook al sy boodskappe, kontakte en ander data van die foon af uitvee."</string>
<string name="really_remove_account_message" product="device" msgid="3751798556257519916">"As hierdie rekening verwyder word, sal al sy boodskappe, kontakte en ander data van die toestel af uitgevee word!"</string>
<string name="remove_account_failed" msgid="491458185327106966">"Hierdie verandering word nie deur jou administrateur toegelaat nie"</string>
<string name="cant_sync_dialog_title" msgid="5483419398223189881">"Kan nie handmatig sinkroniseer nie"</string>
@@ -3706,7 +3708,7 @@
</plurals>
<string name="high_power_filter_on" msgid="5294209328473386403">"Nie geoptimeer nie"</string>
<string name="high_power_on" msgid="3573501822510580334">"Nie geoptimeer nie"</string>
- <string name="high_power_off" msgid="5906679734326490426">"Optimaliseer batterygebruik"</string>
+ <string name="high_power_off" msgid="5906679734326490426">"Optimeer batterygebruik"</string>
<string name="high_power_system" msgid="739584574711292753">"Batteryoptimering is nie beskikbaar nie"</string>
<string name="high_power_desc" msgid="333756885680362741">"Moenie batteryoptimering toepas nie. Dit kan jou battery dalk vinniger pap maak."</string>
<string name="high_power_prompt_title" msgid="2805745781720454052">"Laat program altyd in die agtergrond loop?"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Verhinder die tik van antwoorde of ander teks in kennisgewings as die toestel gesluit is"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Verstekspeltoetser"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Kies speltoetser"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Gebruik speltoetser"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Gebruik speltoetser"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Nie gekies nie"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(geen)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Bergingbestuurder verwyder gerugsteunde foto\'s en video\'s van jou toestel af om te help om berginspasie beskikbaar te maak."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Verwyder foto\'s en video\'s"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Bergingbestuurder"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Gebruik Bergingbestuurder"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Gebruik Bergingbestuurder"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Outomaties"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Handmatig"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Maak nou spasie beskikbaar"</string>
diff --git a/tests/CarDeveloperOptions/res/values-am/arrays.xml b/tests/CarDeveloperOptions/res/values-am/arrays.xml
index 46bbc7e..860c396 100644
--- a/tests/CarDeveloperOptions/res/values-am/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-am/arrays.xml
@@ -323,7 +323,7 @@
<item msgid="6844485713404805301">"ዋናው የድምጽ መቆጣጠሪያ"</item>
<item msgid="1600379420669104929">"የድምጽ መጠን"</item>
<item msgid="6296768210470214866">"የጥሪ ድምጽ መጠን"</item>
- <item msgid="510690696071629241">"የማህደረመረጃ ክፍልፍል"</item>
+ <item msgid="510690696071629241">"የማህደረ መረጃ ድምጽ መጠን"</item>
<item msgid="406861638631430109">"የማንቂያ ድምፅ መጠን"</item>
<item msgid="4715864795872233884">"የማሳወቂያ ድምጽ መጠን"</item>
<item msgid="2311478519251301183">"የብሉቱዝ ድምፅ መጠን"</item>
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"በጭራሽ አትፍቀድ"</item>
<item msgid="8184570120217958741">"ሁልጊዜ ፍቀድ"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"መደበኛ"</item>
+ <item msgid="5101233285497327432">"መጠነኛ"</item>
+ <item msgid="1555861583162930714">"ዝቅተኛ"</item>
+ <item msgid="1719683776264798117">"አሳሳቢ"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"መደበኛ"</item>
+ <item msgid="6107138933849816768">"መጠነኛ"</item>
+ <item msgid="182695359839047859">"ዝቅተኛ"</item>
+ <item msgid="8577246509202964244">"አሳሳቢ"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"የሚጸና"</item>
<item msgid="167418068739176448">"ከፍተኛ እንቅስቃሴ"</item>
diff --git a/tests/CarDeveloperOptions/res/values-am/strings.xml b/tests/CarDeveloperOptions/res/values-am/strings.xml
index 7ba65c3..6c41249 100644
--- a/tests/CarDeveloperOptions/res/values-am/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-am/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"በማያ ገጽ ላይ ያለውን ጽሑፍ ያሳንሱ ወይም ያተልቁ።"</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"አነስ አድርግ"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"ተለቅ አድርግ"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"የናሙና ጽሑፍ"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"አስደናቂው የኦዝ ምትሃተኛ"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"ምዕራፍ 11፦ ኦዝ፣ አስደናቂዋ የኤምራልድ ከተማ"</string>
@@ -197,7 +196,7 @@
<string name="proxy_settings_title" msgid="6014901859338211713">"ተኪ"</string>
<string name="proxy_clear_text" msgid="498317431076294101">"አጽዳ"</string>
<string name="proxy_port_label" msgid="8285157632538848509">"የእጅ አዙርወደብ"</string>
- <string name="proxy_exclusionlist_label" msgid="8179084955547941904">"የእጅ አዙሩን በጎንእለፍ"</string>
+ <string name="proxy_exclusionlist_label" msgid="8179084955547941904">"የእጅ አዙሩን በጎን እለፍ"</string>
<string name="proxy_defaultView_text" msgid="5785775257042403261">"ወደ ነባሪዎች እነበረበት መልስ"</string>
<string name="proxy_action_text" msgid="814511434843981413">"ተከናውኗል"</string>
<string name="proxy_hostname_label" msgid="6798891831427287847">"የእጅ አዙር ስመ ካዳም"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"የመገለጫ መረጃ"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"መለያዎች"</string>
<string name="location_settings_title" msgid="2707201457572301030">"አካባቢ"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"አካባቢን ተጠቀም"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"አካባቢን ተጠቀም"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"ጠፍቷል"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">በርቷል - <xliff:g id="COUNT_1">%1$d</xliff:g> መተግበሪያዎች መገኛ አካባቢን መድረስ ይችላሉ</item>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Wi-Fi ያብሩ"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Wi-Fiን ተጠቀም"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Wi-Fiን ተጠቀም"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"የWi-Fi ቅንብሮች"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"አዘጋጅ& የገመድ አልባ ድረስ ነጥብ አደራጅ"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"ተንቀሳቃሽ ስልክ"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Wi‑Fi የማይገኝ ከሆነ፣ የተንቀሳቃሽ ስልክ አውታረ መረብ ተጠቀም"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"የተንቀሳቃስሽ ስልክ አውታረ መረብ የማይገኝ ከሆነ፣ Wi‑Fi ይጠቀሙ"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"በ Wi-Fi በኩል ደውል። Wi‑Fi ከጠፋ፣ ጥሪ ያበቃል።"</string>
@@ -1525,7 +1527,7 @@
<string name="battery_status_title" msgid="8731200319740671905">"የባትሪሁኔታ"</string>
<string name="battery_level_title" msgid="5207775387973771646">"የባትሪደረጃ፡"</string>
<string name="apn_settings" msgid="8130776653826271664">"APNs"</string>
- <string name="apn_edit" msgid="4350571070853305357">"የድረስ ነጥብ አርትዕ"</string>
+ <string name="apn_edit" msgid="4350571070853305357">"የመዳረሻ ነጥብ አርትዕ"</string>
<string name="apn_not_set" msgid="5344235604466825691">"አልተዘጋጀም"</string>
<string name="apn_name" msgid="8431432886706852226">"ስም"</string>
<string name="apn_apn" msgid="190519449579357696">"APN"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"የማሳወቂያ ንዝረት"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"የጥሪ ንዝረት"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"የንኪ ንዝረት"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"አገልግሎትን ተጠቀም"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"የቀለም ማስተካከያን ተጠቀም"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"መግለጫ ጽሑፎችን ተጠቀም"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"አገልግሎትን ተጠቀም"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"የቀለም ማስተካከያን ተጠቀም"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"መግለጫ ጽሑፎችን ተጠቀም"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"ቀጥል"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"አጋዥ መስሚያዎች"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"ምንም አጋዥ መስሚያዎች አልተገናኙም"</string>
@@ -2449,7 +2451,7 @@
<string name="battery_saver_auto_no_schedule" msgid="739814529432092706">"ምንም መርሐግብር የለም"</string>
<string name="battery_saver_auto_routine" msgid="886514412067906980">"በዕለታዊ ተግባርዎ ላይ የተመሠረተ"</string>
<string name="battery_saver_auto_percentage" msgid="5791982309331921556">"በመቶኛ ላይ የተመሠረተ"</string>
- <string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"በተመልዶ ባትሪዎ ከሚሞሉበት ቀጣዩ ጊዜ በፊት ባትሪዎ የማለቅ ዕድሉ ከፍ ያለ ከሆነ ባትሪ ቆጣቢ ይበራል።"</string>
+ <string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"በተለምዶ ባትሪዎ ከሚሞሉበት ቀጣዩ ጊዜ በፊት ባትሪዎ የማለቅ ዕድሉ ከፍ ያለ ከሆነ ባትሪ ቆጣቢ ይበራል።"</string>
<string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"<xliff:g id="PERCENT">%1$s</xliff:g> ላይ ይበራል"</string>
<string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"መርሐግብር ያቀናብሩ"</string>
<string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"ሙሉ በሙሉ ኃይል ሲሞላ አጥፋ"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"አብራ"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"የባትሪ ቆጣቢን ተጠቀም"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"ባትሪ ቆጣቢን ተጠቀም"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"በራስ ሰር አብራ"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"በፍፁም"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"<xliff:g id="PERCENT">%1$s</xliff:g> ባትሪ ላይ"</string>
@@ -2490,7 +2492,7 @@
<string name="menu_duration_12h" msgid="1435242738163843797">"12 ሰዓቶች"</string>
<string name="menu_duration_1d" msgid="6476370834372352174">"1 ቀን"</string>
<string name="menu_show_system" msgid="6315865548558708248">"ስርዓት አሳይ"</string>
- <string name="menu_hide_system" msgid="8457027118873733782">"የመደበቂያ ስርዓት"</string>
+ <string name="menu_hide_system" msgid="8457027118873733782">"ስርዓት ደብቅ"</string>
<string name="menu_show_percentage" msgid="6983272380729890884">"መቶኛዎችን አሳይ"</string>
<string name="menu_use_uss" msgid="3765054705208926803">"ዩ ኤስ ኤስ ይጠቀሙ"</string>
<string name="menu_proc_stats_type" msgid="2680179749566186247">"የስታቲስቲክስ አይነት"</string>
@@ -3081,7 +3083,7 @@
<string name="keywords_location" msgid="6439463166207072559">"አቅራቢያ፣ አካባቢ፣ ታሪክ፣ ሪፖርት ማድረግ"</string>
<string name="keywords_accounts" msgid="5908945725229306088">"መለያ"</string>
<string name="keywords_users" msgid="5880705776023155640">"ገደብ፣ ገድብ፣ የተገደበ"</string>
- <string name="keywords_keyboard_and_ime" msgid="3327265741354129990">"የጽሑፍ እርማት፣ ትክክል፣ ድምፅ፣ ንዘር፣ ራስ-ሰር፣ ቋንቋ፣ የጣት ምልክት፣ ጠቁም፣ የአስተያየት ጥቆማ፣ ገጽታ፣ የሚያስከፋ፣ ቃል፣ ተይብ፣ ስሜት ገላጭ ምስል፣ አለምአቀፍ"</string>
+ <string name="keywords_keyboard_and_ime" msgid="3327265741354129990">"የጽሑፍ እርማት፣ ትክክል፣ ድምፅ፣ ንዘር፣ ራስ-ሰር፣ ቋንቋ፣ የጣት ምልክት፣ ጠቁም፣ የአስተያየት ጥቆማ፣ ገጽታ፣ የሚያስከፋ፣ ቃል፣ ተይብ፣ ስሜት ገላጭ ምስል፣ ዓለምአቀፍ"</string>
<string name="keywords_reset_apps" msgid="2645701455052020435">"ዳግም አስጀምር፣ ምርጫዎች፣ ነባሪ"</string>
<string name="keywords_all_apps" msgid="846444448435698930">"መተግበሪያዎች፣ ውርድ፣ መተግበሪያዎች፣ ስርዓት"</string>
<string name="keywords_app_permissions" msgid="8539841019997048500">"መተግበሪያዎች፣ ፈቃዶች፣ ደህንነት"</string>
@@ -3132,7 +3134,7 @@
<string name="sound_settings_summary_vibrate" msgid="2194491116884798590">"ደዋዩ ወደ ንዘር ተቀናብሯል"</string>
<string name="sound_settings_summary_silent" msgid="899823817462768876">"ደዋዩ ወደ ጸጥታ ተቀናብሯል"</string>
<string name="sound_settings_example_summary" msgid="2091822107298841827">"የጥሪ ድምጽ መጠን 80% ላይ"</string>
- <string name="media_volume_option_title" msgid="3553411883305505682">"የማህደረመረጃ ክፍልፍል"</string>
+ <string name="media_volume_option_title" msgid="3553411883305505682">"የማህደረ መረጃ ድምጽ መጠን"</string>
<string name="remote_media_volume_option_title" msgid="6355710054191873836">"ድምፅን Cast አድርግ"</string>
<string name="call_volume_option_title" msgid="5028003296631037334">"የስልክ ጥሪ ድምጽ መጠን"</string>
<string name="alarm_volume_option_title" msgid="3184076022438477047">"የማንቂያ ድምፅ መጠን"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"መሣሪያው ከተቆለፈ በማሳወቂያዎች ውስጥ ምላሾችን ወይም ሌላ ጽሑፍን መተየብ ከልክል"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"ነባሪ ፊደል አራሚ"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"ፊደል አራሚን ይምረጡ"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"ፊደል አራሚን ይጠቀሙ"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"ፊደል አራሚን ተጠቀም"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"አልተመረጠም"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(ባዶ)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">"፦ "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"የማከማቻ ባዶ ቦታን ነጻ ለማድረግ እንዲያግዝ የማከማቻ አስተዳዳሪ ከእርስዎ መሣሪያ ላይ በምትኬት የተቀመጡ ፎቶዎችን እና ቪዲዮዎችን አስወግዷል።"</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"ፎቶዎች እና ቪዲዮዎች አስወግድ"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"የማከማቻ አስተዳዳሪ"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"የማከማቻ አስተዳዳሪን ተጠቀም"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"የማከማቻ አስተዳዳሪን ተጠቀም"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"ራስ-ሰር"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"በራስ"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"አሁኑኑ ባዶ ቦታ ያስለቅቁ"</string>
@@ -4356,7 +4358,7 @@
<string name="preferred_network_mode_lte_summary" msgid="4281029367896990461">"ተመራጭ የአውታረ መረብ ሁነታ፦ LTE"</string>
<string name="preferred_network_mode_lte_gsm_wcdma_summary" msgid="149627151786465701">"ተመራጭ የአውታረ መረብ ሁነታ፦ GSM/WCDMA/LTE"</string>
<string name="preferred_network_mode_lte_cdma_evdo_summary" msgid="2892417308574212352">"ተመራጭ የአውታረ መረብ ሁነታ፦ CDMA+LTE/EVDO"</string>
- <string name="preferred_network_mode_global_summary" msgid="487001671043476488">"ተመራጭ የአውታረ መረብ ሁነታ፦ አለምአቀፍ"</string>
+ <string name="preferred_network_mode_global_summary" msgid="487001671043476488">"ተመራጭ የአውታረ መረብ ሁነታ፦ ዓለምአቀፍ"</string>
<string name="preferred_network_mode_lte_wcdma_summary" msgid="9029884385644299102">"ተመራጭ የአውታረ መረብ ሁነታ፦ LTE / WCDMA"</string>
<string name="preferred_network_mode_lte_gsm_umts_summary" msgid="6583001637967763033">"ተመራጭ የአውታረ መረብ ሁነታ፦ LTE / GSM / UMTS"</string>
<string name="preferred_network_mode_lte_cdma_summary" msgid="344294371859765484">"ተመራጭ የአውታረ መረብ ሁነታ፦ LTE / CDMA"</string>
diff --git a/tests/CarDeveloperOptions/res/values-ar/arrays.xml b/tests/CarDeveloperOptions/res/values-ar/arrays.xml
index e6e5ee5..30c8a65 100644
--- a/tests/CarDeveloperOptions/res/values-ar/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-ar/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"التشغيل في الخلفية"</item>
<item msgid="6423861043647911030">"مستوى صوت \"سهولة الاستخدام\""</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"الموقع"</item>
+ <item msgid="6656077694190491067">"الموقع"</item>
+ <item msgid="8790228218278477369">"الموقع"</item>
+ <item msgid="7836406246005211990">"اهتزاز"</item>
+ <item msgid="3951439024549922598">"قراءة جهات الاتصال"</item>
+ <item msgid="8802152411647068">"تعديل جهات الاتصال"</item>
+ <item msgid="229544934599698735">"قراءة سجل المكالمات"</item>
+ <item msgid="7396102294405899613">"تعديل سجل المكالمات"</item>
+ <item msgid="3597797992398484655">"قراءة التقويم"</item>
+ <item msgid="2705975774250907343">"تعديل التقويم"</item>
+ <item msgid="4668747371441932697">"الموقع"</item>
+ <item msgid="1487578921720243646">"نشر إشعار"</item>
+ <item msgid="4636080349724146638">"الموقع"</item>
+ <item msgid="673510900286463926">"اتصال هاتفي"</item>
+ <item msgid="542083422784609790">"قراءة الرسائل القصيرة SMS/رسائل الوسائط المتعددة"</item>
+ <item msgid="1033780373029588436">"كتابة الرسائل القصيرة SMS/رسائل الوسائط المتعددة"</item>
+ <item msgid="5647111115517787488">"تلقي الرسائل القصيرة SMS/رسائل الوسائط المتعددة"</item>
+ <item msgid="8591105601108455893">"تلقي الرسائل القصيرة SMS/رسائل الوسائط المتعددة"</item>
+ <item msgid="7730995008517841903">"تلقي الرسائل القصيرة SMS/رسائل الوسائط المتعددة"</item>
+ <item msgid="2613033109026626086">"تلقي الرسائل القصيرة SMS/رسائل الوسائط المتعددة"</item>
+ <item msgid="3037159047591081136">"إرسال الرسائل القصيرة SMS/رسائل الوسائط المتعددة"</item>
+ <item msgid="4726682243833913568">"قراءة الرسائل القصيرة SMS/رسائل الوسائط المتعددة"</item>
+ <item msgid="6555678522277865572">"كتابة الرسائل القصيرة SMS/رسائل الوسائط المتعددة"</item>
+ <item msgid="6981734935578130884">"تعديل الإعدادات"</item>
+ <item msgid="8705854389991425629">"رسم في الأعلى"</item>
+ <item msgid="5861356020344153651">"إشعارات الدخول"</item>
+ <item msgid="78432174621628659">"الكاميرا"</item>
+ <item msgid="3986116419882154794">"تسجيل الصوت"</item>
+ <item msgid="4516840825756409490">"تشغيل الصوت"</item>
+ <item msgid="6811712502798183957">"قراءة الحافظة"</item>
+ <item msgid="2780369012602289114">"تعديل الحافظة"</item>
+ <item msgid="2331359440170850868">"أزرار الوسائط"</item>
+ <item msgid="6133599737122751231">"التركيز على الصوت"</item>
+ <item msgid="6844485713404805301">"مستوى الصوت الرئيسي"</item>
+ <item msgid="1600379420669104929">"مستوى الصوت"</item>
+ <item msgid="6296768210470214866">"مستوى صوت الرنين"</item>
+ <item msgid="510690696071629241">"مستوى صوت الوسائط"</item>
+ <item msgid="406861638631430109">"مستوى صوت المنبّه"</item>
+ <item msgid="4715864795872233884">"مستوى صوت الإشعارات"</item>
+ <item msgid="2311478519251301183">"مستوى صوت البلوتوث"</item>
+ <item msgid="5133991377896747027">"ابق متيقظًا"</item>
+ <item msgid="2464189519136248621">"الموقع الجغرافي"</item>
+ <item msgid="2062677934050803037">"الموقع"</item>
+ <item msgid="1735171933192715957">"الحصول على إحصاءات الاستخدام"</item>
+ <item msgid="1014093788778383554">"كتم صوت/إلغاء كتم صوت الميكروفون"</item>
+ <item msgid="4199297950608622850">"عرض الإعلام المنبثق"</item>
+ <item msgid="2527962435313398821">"وسائط المشروع"</item>
+ <item msgid="5117506254221861929">"تفعيل الشبكة الافتراضية الخاصة"</item>
+ <item msgid="8291198322681891160">"كتابة الخلفية"</item>
+ <item msgid="7106921284621230961">"تركيبة مساعدة"</item>
+ <item msgid="4496533640894624799">"لقطة شاشة مساعدة"</item>
+ <item msgid="2598847264853993611">"قراءة حالة الهاتف"</item>
+ <item msgid="9215610846802973353">"إضافة بريد صوتي"</item>
+ <item msgid="9186411956086478261">"استخدام SIP"</item>
+ <item msgid="6884763100104539558">"معالجة المكالمات الصادرة"</item>
+ <item msgid="125513972170580692">"بصمة الإصبع"</item>
+ <item msgid="2556071024281275619">"أجهزة استشعار الجسم"</item>
+ <item msgid="617168514928339387">"قراءة رسائل البث الخلوي"</item>
+ <item msgid="7134693570516523585">"موقع وهمي"</item>
+ <item msgid="7224489175375229399">"قراءة مساحة التخزين"</item>
+ <item msgid="8472735063903258202">"كتابة مساحة التخزين"</item>
+ <item msgid="4069276819909595110">"تشغيل الشاشة"</item>
+ <item msgid="1228338896751121025">"الحصول على الحسابات"</item>
+ <item msgid="3181581793459233672">"التشغيل في الخلفية"</item>
+ <item msgid="2340936043025374076">"مستوى صوت \"سهولة الاستخدام\""</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"قصيرة"</item>
<item msgid="4816511817309094890">"أهميّة متوسّطة"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"عدم السماح مطلقًا"</item>
<item msgid="8184570120217958741">"السماح دومًا"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"عادية"</item>
+ <item msgid="5101233285497327432">"معتدلة"</item>
+ <item msgid="1555861583162930714">"منخفضة"</item>
+ <item msgid="1719683776264798117">"حرجة"</item>
+ <item msgid="1567326459340152525">"؟"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"عادية"</item>
+ <item msgid="6107138933849816768">"متوسطة"</item>
+ <item msgid="182695359839047859">"منخفضة"</item>
+ <item msgid="8577246509202964244">"حرجة"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"ثابتة"</item>
<item msgid="167418068739176448">"أهم نشاط"</item>
diff --git a/tests/CarDeveloperOptions/res/values-ar/strings.xml b/tests/CarDeveloperOptions/res/values-ar/strings.xml
index 1eb5f82..a424f22 100644
--- a/tests/CarDeveloperOptions/res/values-ar/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-ar/strings.xml
@@ -87,16 +87,15 @@
<string name="font_size_summary" msgid="9120023206321191067">"يمكنك تصغير النص الظاهر على الشاشة أو تكبيره."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"تصغير"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"تكبير"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"نموذج نص"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"ساحر أوز العجيب"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"الفصل ۱۱: مدينة أوز الزمردية العجيبة"</string>
<string name="font_size_preview_text_body" msgid="6803085337474390845">"على الرغم من احتماء دورثي ورفاقها خلف نظارات خضراء، انبهرت عيونهم للوهلة الأولى بتوهج المدينة العجيبة وتألقها. كانت المنازل الرائعة أمامهم متراصة على الشوارع ومصممة جميعها من الرخام الأخضر المرصع بالزمرّد البرّاق. ساروا على رصيف من الرخام الأخضر نفسه حيث تلتقي المباني الضخمة على صفوف من الزمرد المتلألئ تحت أشعة الشمس الساطعة. كانت ألواح النوافذ الزجاجية خضراء هي أيضًا، حتى أنّ السماء وأشعة الشمس تلوّنت بالأخضر الفاتح. \n\nرأوا الكثير من الرجال والنساء والأطفال يجوبون الشوارع وجميعهم في ثياب خضراء فوق بشرة تميل إلى الأخضر. نظروا إلى دورثي ورفاقها الغريبين بتعجب، في حين أنّ الأطفال اختبأوا وراء أمهاتهم خائفين من الأسد، ولكن لم يتحدث معهم أحد. اصطفّت في الشارع المتاجر الخضراء ولاحظت دورثي أنّ كل ما فيها كان أخضر، من الحلوى الخضراء والفشار الأخضر إلى الأحذية والقبعات والملابس الخضراء. وفي أحد الأركان، وقف رجل يبيع الليموناضة الخضراء ورأت دورثي أنّ الأطفال كانوا يشترون العصير منه بعملة خضراء هي أيضًا. \n\nخلت الشوارع من الأحصنة أو أي نوع آخر من الحيوانات، وكان الرجال ينقلون أمتعتهم في عربات خضراء صغيرة يدفعونها أمامهم. وبدت ملامح السعادة والارتياح على وجوه الجميع."</string>
- <string name="font_size_save" msgid="8652044574655753921">"موافق"</string>
+ <string name="font_size_save" msgid="8652044574655753921">"حسنًا"</string>
<string name="sdcard_setting" product="nosdcard" msgid="1533784309105748696">"وحدة تخزين USB"</string>
<string name="sdcard_setting" product="default" msgid="8398782065765523178">"بطاقة SD"</string>
- <string name="bluetooth" msgid="1564520421786841227">"بلوتوث"</string>
+ <string name="bluetooth" msgid="1564520421786841227">"البلوتوث"</string>
<string name="bluetooth_is_discoverable" msgid="6748888489356326898">"مرئي لجميع أجهزة بلوتوث القريبة (<xliff:g id="DISCOVERABLE_TIME_PERIOD">%1$s</xliff:g>)"</string>
<string name="bluetooth_is_discoverable_always" msgid="6835934878803488274">"مرئي لجميع أجهزة بلوتوث القريبة"</string>
<string name="bluetooth_not_visible_to_other_devices" msgid="9134284066024557293">"ليس مرئيًا لأجهزة بلوتوث الأخرى"</string>
@@ -108,7 +107,7 @@
<string name="bluetooth_device_name" msgid="3682016026866302981">"اسم الجهاز"</string>
<string name="bluetooth_device_details" msgid="2500840679106321361">"إعدادات الجهاز"</string>
<string name="bluetooth_profile_details" msgid="1785505059738682493">"إعدادات الملف الشخصي"</string>
- <string name="bluetooth_name_not_set" msgid="1886067683138385142">"لم يتم تعيين اسم، استخدام اسم الحساب"</string>
+ <string name="bluetooth_name_not_set" msgid="1886067683138385142">"لم يتم ضبط اسم، استخدام اسم الحساب"</string>
<string name="bluetooth_scan_for_devices" msgid="3215740768422735880">"البحث عن أجهزة"</string>
<string name="bluetooth_rename_device" msgid="7862992396452800566">"إعادة تسمية هذا الجهاز"</string>
<string name="bluetooth_rename_button" msgid="8946904845821073267">"إعادة التسمية"</string>
@@ -136,7 +135,7 @@
<string name="device_picker" msgid="8345264486071697705">"اختيار جهاز البلوتوث"</string>
<string name="bluetooth_ask_enablement" msgid="8716802066127746062">"يريد <xliff:g id="APP_NAME">%1$s</xliff:g> تفعيل البلوتوث"</string>
<string name="bluetooth_ask_disablement" msgid="7125319551097350783">"يريد <xliff:g id="APP_NAME">%1$s</xliff:g> إيقاف البلوتوث"</string>
- <string name="bluetooth_ask_enablement_no_name" msgid="6105893027185475233">"يريد أحد التطبيقات تشغيل بلوتوث"</string>
+ <string name="bluetooth_ask_enablement_no_name" msgid="6105893027185475233">"يريد أحد التطبيقات تفعيل بلوتوث"</string>
<string name="bluetooth_ask_disablement_no_name" msgid="8648888502291681310">"يريد أحد التطبيقات إيقاف البلوتوث"</string>
<string name="bluetooth_ask_discovery" product="tablet" msgid="6871595755186170115">"يريد <xliff:g id="APP_NAME">%1$s</xliff:g> أن يكون جهازك اللوحي مرئيًا لأجهزة بلوتوث الأخرى لمدة <xliff:g id="TIMEOUT">%2$d</xliff:g> من الثواني."</string>
<string name="bluetooth_ask_discovery" product="default" msgid="3388041479101348095">"يريد <xliff:g id="APP_NAME">%1$s</xliff:g> أن يكون هاتفك مرئيًا لأجهزة بلوتوث الأخرى لمدة <xliff:g id="TIMEOUT">%2$d</xliff:g> من الثواني."</string>
@@ -155,7 +154,7 @@
<string name="bluetooth_ask_enablement_and_lasting_discovery_no_name" product="tablet" msgid="7083038132794842691">"يريد أحد التطبيقات تفعيل البلوتوث وجعل جهازك اللوحي مرئيًا للأجهزة الأخرى. يمكنك تغيير هذا لاحقًا في إعدادات بلوتوث."</string>
<string name="bluetooth_ask_enablement_and_lasting_discovery_no_name" product="default" msgid="3541668604020109525">"يريد أحد التطبيقات تفعيل البلوتوث وجعل هاتفك مرئيًا للأجهزة الأخرى. يمكنك تغيير هذا لاحقًا في إعدادات بلوتوث."</string>
<string name="bluetooth_turning_on" msgid="6935183036449748493">"جارٍ تفعيل البلوتوث..."</string>
- <string name="bluetooth_turning_off" msgid="9214026723789756620">"جارٍ إيقاف تفعيل البلوتوث..."</string>
+ <string name="bluetooth_turning_off" msgid="9214026723789756620">"جارٍ إيقاف البلوتوث..."</string>
<string name="bluetooth_connection_permission_request" msgid="2382506002340643398">"طلب اتصال بلوتوث"</string>
<string name="bluetooth_connection_notif_message" msgid="6824654400460127108">"انقر للاتصال بـ \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\"."</string>
<string name="bluetooth_connection_dialog_text" msgid="5454660775522235951">"هل تريد الاتصال بـ \"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\"؟"</string>
@@ -183,7 +182,7 @@
<string name="connected_device_available_call_title" msgid="6774859446815858428">"أجهزة الاتصال المتاحة"</string>
<string name="connected_device_connected_title" msgid="6255107326608785482">"الأجهزة المتصلة حاليًا"</string>
<string name="connected_device_saved_title" msgid="8270136893488475163">"الأجهزة المحفوظة"</string>
- <string name="connected_device_add_device_summary" msgid="7960491471270158891">"سيتم تشغيل بلوتوث للإقران"</string>
+ <string name="connected_device_add_device_summary" msgid="7960491471270158891">"سيتم تفعيل بلوتوث للإقران"</string>
<string name="connected_device_connections_title" msgid="9205000271382018428">"إعدادات الاتصال المفضّلة"</string>
<string name="connected_device_previously_connected_title" msgid="225918223397410428">"الأجهزة المتصلة سابقًا"</string>
<string name="connected_device_previously_connected_screen_title" msgid="2018789662358162716">"الأجهزة المتصلة سابقًا"</string>
@@ -206,25 +205,25 @@
<string name="proxy_action_text" msgid="814511434843981413">"تم"</string>
<string name="proxy_hostname_label" msgid="6798891831427287847">"اسم المضيف للخادم الوكيل"</string>
<string name="proxy_error" msgid="5036164133669802299">"تنبيه"</string>
- <string name="proxy_error_dismiss" msgid="883805570485635650">"موافق"</string>
+ <string name="proxy_error_dismiss" msgid="883805570485635650">"حسنًا"</string>
<string name="proxy_error_invalid_host" msgid="5430640241353307223">"اسم المضيف الذي كتبته غير صالح."</string>
<string name="proxy_error_invalid_exclusion_list" msgid="4314503082913856333">"لم يتم تنسيق قائمة الاستبعاد التي كتبتها بشكل صحيح. اكتب قائمة مفصولة بفواصل للنطاقات المستبعدة."</string>
<string name="proxy_error_empty_port" msgid="8034561724923076215">"يلزمك إكمال حقل المنفذ."</string>
<string name="proxy_error_empty_host_set_port" msgid="8471455809508588255">"يجب أن يكون حقل المنفذ فارغًا إذا كان حقل المضيف فارغًا."</string>
<string name="proxy_error_invalid_port" msgid="4046559920586100637">"المنفذ الذي كتبته غير صالح."</string>
- <string name="proxy_warning_limited_support" msgid="9026539134219095768">"يستخدم المتصفح الخادم الوكيل HTTP، ولكنه ربما لا تستخدمه التطبيقات الأخرى."</string>
- <string name="proxy_url_title" msgid="882042361706435904">"عنوان URL لتهيئة PAC: "</string>
+ <string name="proxy_warning_limited_support" msgid="9026539134219095768">"يتم استخدام الخادم الوكيل HTTP على المتصفّح، ولكن قد لا تستخدمه التطبيقات الأخرى."</string>
+ <string name="proxy_url_title" msgid="882042361706435904">"عنوان URL لإعداد PAC: "</string>
<string name="radio_info_dl_kbps" msgid="2903778264453410272">"معدّل نقل بيانات DL (كيلوبت في الثانية):"</string>
<string name="radio_info_ul_kbps" msgid="3802245899811732716">"معدّل نقل بيانات UL (كيلوبت في الثانية):"</string>
<string name="radio_info_signal_location_label" msgid="6788144906873498013">"معلومات الموقع الخلوية (تم الإيقاف):"</string>
- <string name="radio_info_phy_chan_config" msgid="1184401689381480522">"تهيئة قناة LTE Physical:"</string>
+ <string name="radio_info_phy_chan_config" msgid="1184401689381480522">"إعداد قناة LTE Physical:"</string>
<string name="radio_info_cell_info_refresh_rate" msgid="3557422342215875913">"معدل إعادة تحميل المعلومات الخلوية:"</string>
<string name="radio_info_cellinfo_label" msgid="632796561627452215">"جميع معلومات القياس الخلوية:"</string>
<string name="radio_info_gprs_service_label" msgid="7926626443442993242">"خدمة البيانات:"</string>
<string name="radio_info_roaming_label" msgid="3131949337031835485">"تجوال:"</string>
<string name="radio_info_imei_label" msgid="7300156592358133405">"IMEI:"</string>
<string name="radio_info_call_redirect_label" msgid="2679891718182753061">"إعادة توجيه الاتصال:"</string>
- <string name="radio_info_ppp_resets_label" msgid="2785162965440312941">"عدد مرات إعادة تعيين PPP منذ التشغيل:"</string>
+ <string name="radio_info_ppp_resets_label" msgid="2785162965440312941">"عدد مرات إعادة ضبط PPP منذ التشغيل:"</string>
<string name="radio_info_current_network_label" msgid="5785805819312999094">"الشبكة الحالية:"</string>
<string name="radio_info_ppp_received_label" msgid="5217391494757374330">"البيانات المستلمة:"</string>
<string name="radio_info_gsm_service_label" msgid="7488842563230281026">"الخدمة الصوتية:"</string>
@@ -236,7 +235,7 @@
<string name="radio_info_band_mode_label" msgid="9181607879920091762">"تحديد النطاق اللاسلكي"</string>
<string name="radio_info_voice_network_type_label" msgid="3686471589514241007">"نوع الشبكة الصوتية:"</string>
<string name="radio_info_data_network_type_label" msgid="5108279335070879015">"نوع شبكة البيانات:"</string>
- <string name="radio_info_set_perferred_label" msgid="1447353131819041587">"تعيين نوع الشبكة المفضل:"</string>
+ <string name="radio_info_set_perferred_label" msgid="1447353131819041587">"ضبط نوع الشبكة المفضل:"</string>
<string name="radio_info_ping_hostname_v4" msgid="4377067049156466290">"فحص اتصال اسم المضيف (www.google.com) عبر IPv4:"</string>
<string name="radio_info_ping_hostname_v6" msgid="3541896405771734445">"فحص اتصال اسم المضيف (www.google.com) عبر IPv6:"</string>
<string name="radio_info_http_client_test" msgid="781411599778629953">"اختبار عميل HTTP:"</string>
@@ -299,7 +298,7 @@
<string name="sd_card_settings_label" product="default" msgid="1074813865245983607">"بطاقة SD"</string>
<string name="proxy_settings_label" msgid="7219106162267925123">"إعدادات الخادم الوكيل"</string>
<string name="cancel" msgid="2582602392048772404">"إلغاء"</string>
- <string name="okay" msgid="5838476766924989056">"موافق"</string>
+ <string name="okay" msgid="5838476766924989056">"حسنًا"</string>
<string name="forget" msgid="7735525146062672874">"نسيان"</string>
<string name="save" msgid="3418211178410498517">"حفظ"</string>
<string name="done" msgid="5143229467535372339">"تم"</string>
@@ -309,7 +308,7 @@
<string name="settings_label" msgid="7263237773415875813">"الإعدادات"</string>
<string name="settings_label_launcher" msgid="500627679902923496">"الإعدادات"</string>
<string name="settings_shortcut" msgid="4503714880251502167">"اختصار الإعدادات"</string>
- <string name="airplane_mode" msgid="4508870277398231073">"وضع الطائرة"</string>
+ <string name="airplane_mode" msgid="4508870277398231073">"وضع الطيران"</string>
<string name="wireless_networks_settings_title" msgid="4298430520189173949">"اللاسلكي والشبكات"</string>
<string name="radio_controls_summary" msgid="4596981962167684814">"إدارة Wi-Fi والبلوتوث ووضع الطائرة وشبكات الجوّال والشبكات الافتراضية الخاصة (VPN)"</string>
<string name="cellular_data_title" msgid="7909624119432695022">"بيانات الجوّال"</string>
@@ -320,7 +319,7 @@
<string name="roaming" msgid="8860308342135146004">"التجوال"</string>
<string name="roaming_enable" msgid="2108142024297441116">"الاتصال بخدمات البيانات عند التجوال"</string>
<string name="roaming_disable" msgid="1915440242079953809">"الاتصال بخدمات البيانات عند التجوال"</string>
- <string name="roaming_reenable_message" msgid="8388505868655113258">"لقد فقدت اتصال البيانات نظرًا لأنك أوقفت تشغيل تجوال البيانات بشبكتك الرئيسية."</string>
+ <string name="roaming_reenable_message" msgid="8388505868655113258">"لقد فقدت اتصال البيانات نظرًا لأنك أوقفت تفعيل تجوال البيانات بشبكتك الرئيسية."</string>
<string name="roaming_turn_it_on_button" msgid="4370846458830537578">"تشغيل"</string>
<string name="roaming_warning" msgid="5488050911277592868">"قد يكلف ذلك رسومًا مرتفعة."</string>
<string name="roaming_warning_multiuser" product="tablet" msgid="7090388691615686893">"عند السماح بتجوال البيانات، قد تتكلف رسوم تجوال مرتفعة!\n\nيؤثر هذا الإعداد على جميع مستخدمي هذا الجهاز اللوحي."</string>
@@ -359,7 +358,7 @@
<string name="lock_after_timeout_summary" msgid="3160517585613694740">"<xliff:g id="TIMEOUT_STRING">%1$s</xliff:g> بعد السكون"</string>
<string name="lock_immediately_summary_with_exception" msgid="6442552135409347556">"بعد السكون مباشرة، باستثناء عندما ميزة <xliff:g id="TRUST_AGENT_NAME">%1$s</xliff:g> تبقي الجهاز مفتوحًا"</string>
<string name="lock_after_timeout_summary_with_exception" msgid="7218267834086717545">"<xliff:g id="TIMEOUT_STRING">%1$s</xliff:g> بعد السكون، باستثناء عندما ميزة <xliff:g id="TRUST_AGENT_NAME">%2$s</xliff:g> تبقي الجهاز مفتوحًا"</string>
- <string name="show_owner_info_on_lockscreen_label" msgid="4510756693837171575">"إظهار معلومات المالك في شاشة التأمين"</string>
+ <string name="show_owner_info_on_lockscreen_label" msgid="4510756693837171575">"إظهار معلومات المالك في شاشة القفل"</string>
<string name="owner_info_settings_title" msgid="2537966178998339896">"رسالة شاشة القفل"</string>
<string name="security_enable_widgets_title" msgid="1701510007926738088">"تفعيل الأدوات"</string>
<string name="security_enable_widgets_disabled_summary" msgid="4408176087132339331">"تم إيقاف الإعداد بواسطة المشرف"</string>
@@ -373,11 +372,11 @@
<string name="owner_info_settings_status" msgid="8049975536717685126">"<xliff:g id="COUNT_0">%1$d</xliff:g> / <xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
<string name="owner_info_settings_edit_text_hint" msgid="2250029417257939706">"جهاز Android الخاص بهاني مثلاً"</string>
<string name="user_info_settings_title" msgid="1125111518759995748">"معلومات المستخدم"</string>
- <string name="show_profile_info_on_lockscreen_label" msgid="5204282771893683026">"إظهار معلومات الملف الشخصي في شاشة التأمين"</string>
+ <string name="show_profile_info_on_lockscreen_label" msgid="5204282771893683026">"إظهار معلومات الملف الشخصي في شاشة القفل"</string>
<string name="profile_info_settings_title" msgid="4855892878512562551">"معلومات الملف الشخصي"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"الحسابات"</string>
<string name="location_settings_title" msgid="2707201457572301030">"الموقع الجغرافي"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"استخدام الموقع الجغرافي"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"استخدام الموقع الجغرافي"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"خدمة الموقع الجغرافي غير مفعّلة."</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="zero">خدمة الموقع الجغرافي مفعّلة - هناك <xliff:g id="COUNT_1">%1$d</xliff:g> تطبيق يمكنه الوصول إلى الموقع الجغرافي.</item>
@@ -391,9 +390,9 @@
<string name="account_settings_title" msgid="7870321267198486578">"الحسابات"</string>
<string name="security_settings_title" msgid="8228075165942416425">"الأمان"</string>
<string name="encryption_and_credential_settings_title" msgid="6911729638397745353">"التشفير وبيانات الاعتماد"</string>
- <string name="encryption_and_credential_settings_summary" product="default" msgid="468749700109808546">"تم تشفير الهاتف"</string>
+ <string name="encryption_and_credential_settings_summary" product="default" msgid="468749700109808546">"تم ترميز الهاتف"</string>
<string name="decryption_settings_summary" product="default" msgid="7401802133199522441">"الهاتف ليس مشفّرًا."</string>
- <string name="encryption_and_credential_settings_summary" product="tablet" msgid="8170667308598998791">"تم تشفير الجهاز"</string>
+ <string name="encryption_and_credential_settings_summary" product="tablet" msgid="8170667308598998791">"تم ترميز الجهاز"</string>
<string name="decryption_settings_summary" product="tablet" msgid="7524119945312453569">"الجهاز ليس مشفرًا."</string>
<string name="lockscreen_settings_title" msgid="1221505938891948413">"عرض شاشة القفل"</string>
<string name="lockscreen_settings_what_to_show_category" msgid="3133378945821488654">"ما يتم عرضه"</string>
@@ -500,7 +499,7 @@
<string name="lock_screen_pin_skip_title" msgid="8217519439213393785">"أتريد تخطي إعداد رقم التعريف الشخصي؟"</string>
<string name="lock_screen_password_skip_title" msgid="3725788215672959827">"أتريد تخطّي إعداد كلمة المرور؟"</string>
<string name="lock_screen_pattern_skip_title" msgid="4237030500353932005">"هل تريد تخطّي إعداد النقش؟"</string>
- <string name="security_settings_fingerprint_enroll_setup_screen_lock" msgid="9036983528330627756">"إعداد تأمين الشاشة"</string>
+ <string name="security_settings_fingerprint_enroll_setup_screen_lock" msgid="9036983528330627756">"إعداد قفل الشاشة"</string>
<string name="security_settings_fingerprint_enroll_done" msgid="4111289529758845926">"تم"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"عفوًا، هذا ليس جهاز الاستشعار"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"المس زر الاستشعار في الجزء الخلفي لهاتفك. استخدم إصبع السبابة."</string>
@@ -522,25 +521,25 @@
<string name="fingerprint_last_delete_message_profile_challenge" msgid="5385095150532247025">"لن تتمكن من استخدام بصمات إصبعك لإلغاء تأمين الملف الشخصي للعمل، أو السماح بعمليات الشراء، أو تسجيل الدخول إلى تطبيقات العمل"</string>
<string name="fingerprint_last_delete_confirm" msgid="7984595457589664004">"نعم، إزالة"</string>
<string name="crypt_keeper_settings_title" msgid="839783588093862748">"التشفير"</string>
- <string name="crypt_keeper_encrypt_title" product="tablet" msgid="2292129135369853167">"تشفير الجهاز اللوحي"</string>
- <string name="crypt_keeper_encrypt_title" product="default" msgid="3110852053238357832">"تشفير الهاتف"</string>
+ <string name="crypt_keeper_encrypt_title" product="tablet" msgid="2292129135369853167">"ترميز الجهاز اللوحي"</string>
+ <string name="crypt_keeper_encrypt_title" product="default" msgid="3110852053238357832">"ترميز الهاتف"</string>
<string name="crypt_keeper_encrypted_summary" msgid="2438498691741626642">"مشفّر"</string>
- <string name="crypt_keeper_desc" product="tablet" msgid="9142792050252407734">"يمكنك تشفير حساباتك وإعداداتك والتطبيقات التي تم تنزيلها وبياناتها والوسائط والملفات الأخرى. وبعد تشفير جهازك اللوحي، بافتراض أنك قد أعددت قفل الشاشة (باستخدام نقش أو رقم تعريف شخصي أو كلمة مرور)، يجب فتح قفل الشاشة لفك تشفير الجهاز اللوحي في كل مرة تشغله فيها. والوسيلة الأخرى الوحيدة لفك تشفير الجهاز هي إجراء إعادة الضبط على الإعدادات الأصلية، ومحو كل بياناتك.\n\nيستغرق التشفير ساعة أو أكثر. ويجب البدء ببطارية مشحونة وتوصيل الجهاز اللوحي بالشاحن أثناء عملية التشفير. فإذا أوقفت العملية، ستفقد بعض أو كل بياناتك"</string>
- <string name="crypt_keeper_desc" product="default" msgid="1996334685607444282">"يمكنك تشفير حساباتك وإعداداتك والتطبيقات التي تم تنزيلها وبياناتها والوسائط والملفات الأخرى. وبعد تشفير هاتفك، وبافتراض أنك قد أعددت قفل الشاشة (عبر النقش أو رقم التعريف الشخصي أو كلمة المرور)، يجب فتح قفل الشاشة لفك تشفير الهاتف في كل مرة تشغله فيها. الطريقة الوحيدة الأخرى لفك تشفير الجهاز هي إجراء إعادة الضبط على الإعدادات الأصلية، ومحو كل بياناتك.\n\nيستغرق التشفير ساعة أو أكثر. يجب البدء ببطارية مشحونة وتوصيل الهاتف بالشاحن أثناء عملية التشفير. فإذا أوقفت هذه العملية، ستفقد بعض أو كل البيانات."</string>
- <string name="crypt_keeper_button_text" product="tablet" msgid="7918671468758813824">"تشفير الجهاز اللوحي"</string>
- <string name="crypt_keeper_button_text" product="default" msgid="8737394386627318489">"تشفير الهاتف"</string>
+ <string name="crypt_keeper_desc" product="tablet" msgid="9142792050252407734">"يمكنك ترميز حساباتك وإعداداتك والتطبيقات التي تم تنزيلها وبياناتها والوسائط والملفات الأخرى. وبعد ترميز جهازك اللوحي، بافتراض أنك قد أعددت قفل الشاشة (باستخدام نقش أو رقم تعريف شخصي أو كلمة مرور)، يجب فتح قفل الشاشة لفك ترميز الجهاز اللوحي في كل مرة تشغله فيها. والوسيلة الأخرى الوحيدة لفك ترميز الجهاز هي إجراء إعادة الضبط على الإعدادات الأصلية، ومحو كل بياناتك.\n\nيستغرق الترميز ساعة أو أكثر. ويجب البدء ببطارية مشحونة وتوصيل الجهاز اللوحي بالشاحن أثناء عملية الترميز. فإذا أوقفت العملية، ستفقد بعض أو كل بياناتك"</string>
+ <string name="crypt_keeper_desc" product="default" msgid="1996334685607444282">"يمكنك ترميز حساباتك وإعداداتك والتطبيقات التي تم تنزيلها وبياناتها والوسائط والملفات الأخرى. وبعد ترميز هاتفك، وبافتراض أنك قد أعددت قفل الشاشة (عبر النقش أو رقم التعريف الشخصي أو كلمة المرور)، يجب فتح قفل الشاشة لفك ترميز الهاتف في كل مرة تشغله فيها. الطريقة الوحيدة الأخرى لفك ترميز الجهاز هي إجراء إعادة الضبط على الإعدادات الأصلية، ومحو كل بياناتك.\n\nيستغرق الترميز ساعة أو أكثر. يجب البدء ببطارية مشحونة وتوصيل الهاتف بالشاحن أثناء عملية الترميز. فإذا أوقفت هذه العملية، ستفقد بعض أو كل البيانات."</string>
+ <string name="crypt_keeper_button_text" product="tablet" msgid="7918671468758813824">"ترميز الجهاز اللوحي"</string>
+ <string name="crypt_keeper_button_text" product="default" msgid="8737394386627318489">"ترميز الهاتف"</string>
<string name="crypt_keeper_low_charge_text" msgid="1422879728632636311">"اشحن البطارية وأعد المحاولة."</string>
<string name="crypt_keeper_unplugged_text" msgid="6597684068340036200">"صل الشاحن وأعد المحاولة."</string>
- <string name="crypt_keeper_dialog_need_password_title" msgid="8532211509636340535">"ليس هناك رقم تعريف شخصي (PIN) أو كلمة مرور لتأمين الشاشة"</string>
- <string name="crypt_keeper_dialog_need_password_message" msgid="1341590897367808702">"يجب تعيين رقم تعريف شخصي أو كلمة مرور لتأمين الشاشة قبل أن تتمكن من بدء عملية التشفير."</string>
+ <string name="crypt_keeper_dialog_need_password_title" msgid="8532211509636340535">"ليس هناك رقم تعريف شخصي (PIN) أو كلمة مرور لقفل الشاشة"</string>
+ <string name="crypt_keeper_dialog_need_password_message" msgid="1341590897367808702">"يجب تعيين رقم تعريف شخصي أو كلمة مرور لقفل الشاشة قبل أن تتمكن من بدء عملية التشفير."</string>
<string name="crypt_keeper_confirm_title" msgid="8884417036062084547">"التشفير؟"</string>
<string name="crypt_keeper_final_desc" product="tablet" msgid="2713708841024805586">"لا يمكن التراجع عن عملية التشفير، وفي حالة مقاطعتها، ستفقد البيانات. تستغرق عملية التشفير ساعة أو أكثر، وسيتم خلالها إعادة تشغيل الجهاز اللوحي عدة مرات."</string>
<string name="crypt_keeper_final_desc" product="default" msgid="2483549885938505746">"لا يمكن التراجع عن عملية التشفير، وفي حالة مقاطعتها، ستفقد البيانات. تستغرق عملية التشفير ساعة أو أكثر، وسيتم خلالها إعادة تشغيل الهاتف عدة مرات."</string>
<string name="crypt_keeper_setup_title" msgid="5444657765706199408">"التشفير"</string>
- <string name="crypt_keeper_setup_description" product="tablet" msgid="9129783898699975969">"انتظر حتى يتم تشفير الجهاز اللوحي. اكتمل <xliff:g id="PERCENT">^1</xliff:g>%."</string>
- <string name="crypt_keeper_setup_description" product="default" msgid="3391750289253411494">"انتظر حتى يتم تشفير هاتفك. اكتمل <xliff:g id="PERCENT">^1</xliff:g>%."</string>
- <string name="crypt_keeper_setup_time_remaining" product="tablet" msgid="7841271240063858796">"انتظر بينما يتم تشفير جهازك اللوحي. الوقت المتبقي: <xliff:g id="DURATION">^1</xliff:g>"</string>
- <string name="crypt_keeper_setup_time_remaining" product="default" msgid="8049188590821796173">"انتظر بينما يتم تشفير هاتفك. الوقت المتبقي: <xliff:g id="DURATION">^1</xliff:g>"</string>
+ <string name="crypt_keeper_setup_description" product="tablet" msgid="9129783898699975969">"انتظر حتى يتم ترميز الجهاز اللوحي. اكتمل <xliff:g id="PERCENT">^1</xliff:g>%."</string>
+ <string name="crypt_keeper_setup_description" product="default" msgid="3391750289253411494">"انتظر حتى يتم ترميز هاتفك. اكتمل <xliff:g id="PERCENT">^1</xliff:g>%."</string>
+ <string name="crypt_keeper_setup_time_remaining" product="tablet" msgid="7841271240063858796">"انتظر بينما يتم ترميز جهازك اللوحي. الوقت المتبقي: <xliff:g id="DURATION">^1</xliff:g>"</string>
+ <string name="crypt_keeper_setup_time_remaining" product="default" msgid="8049188590821796173">"انتظر بينما يتم ترميز هاتفك. الوقت المتبقي: <xliff:g id="DURATION">^1</xliff:g>"</string>
<string name="crypt_keeper_force_power_cycle" product="tablet" msgid="9168213181845231795">"لإلغاء تأمين الجهاز اللوحي، يمكنك إيقافه وتشغيله مرة أخرى."</string>
<string name="crypt_keeper_force_power_cycle" product="default" msgid="1182690469082263666">"لإلغاء تأمين الهاتف، يمكنك إيقافه وتشغيله مرة أخرى."</string>
<string name="crypt_keeper_warn_wipe" msgid="700814581500057050">"تحذير: سيتم محو محتوى جهازك بعد فشل <xliff:g id="COUNT">^1</xliff:g> من المحاولات الأخرى في فتح القفل!"</string>
@@ -553,9 +552,9 @@
<string name="crypt_keeper_data_corrupt_summary" product="default" msgid="5798580588985326937">"كلمة المرور التي أدخلتها صحيحة، ولكن للأسف بياناتك تالفة. \n\nلاستئناف استخدام هاتفك، يلزمك إجراء إعادة الضبط على الإعدادات الأصلية. عند إعداد الهاتف بعد إعادة الضبط، ستكون لديك فرصة لاستعادة أي بيانات تم نسخها احتياطيًا في حسابك على Google."</string>
<string name="crypt_keeper_switch_input_method" msgid="4744137470890459582">"تبديل أسلوب الإدخال"</string>
<string name="suggested_lock_settings_title" msgid="1518155558803371661">"تأمين هاتفك"</string>
- <string name="suggested_lock_settings_summary" product="tablet" msgid="1861066918594412519">"تعيين قفل شاشة لحماية الجهاز اللوحي"</string>
- <string name="suggested_lock_settings_summary" product="device" msgid="7127114417250029182">"تعيين قفل شاشة لحماية الجهاز"</string>
- <string name="suggested_lock_settings_summary" product="default" msgid="1090621950888321990">"تعيين قفل شاشة لحماية الهاتف"</string>
+ <string name="suggested_lock_settings_summary" product="tablet" msgid="1861066918594412519">"ضبط قفل شاشة لحماية الجهاز اللوحي"</string>
+ <string name="suggested_lock_settings_summary" product="device" msgid="7127114417250029182">"ضبط قفل شاشة لحماية الجهاز"</string>
+ <string name="suggested_lock_settings_summary" product="default" msgid="1090621950888321990">"ضبط قفل شاشة لحماية الهاتف"</string>
<string name="suggested_fingerprint_lock_settings_title" msgid="2860380076519822398">"إضافة بصمة الإصبع لإلغاء القفل"</string>
<string name="suggested_fingerprint_lock_settings_summary" product="tablet" msgid="8114514312665251311"></string>
<string name="suggested_fingerprint_lock_settings_summary" product="device" msgid="8114514312665251311"></string>
@@ -577,9 +576,9 @@
<string name="unlock_set_unlock_launch_picker_summary_lock_immediately" msgid="5596186270725220642">"<xliff:g id="UNLOCK_METHOD">%1$s</xliff:g> / بعد النوم مباشرة"</string>
<string name="unlock_set_unlock_launch_picker_summary_lock_after_timeout" msgid="3861167251234952373">"<xliff:g id="UNLOCK_METHOD">%1$s</xliff:g> / <xliff:g id="TIMEOUT_STRING">%2$s</xliff:g> بعد النوم"</string>
<string name="unlock_set_unlock_launch_picker_title_profile" msgid="7976345264630422921">"قفل الملف الشخصي للعمل"</string>
- <string name="unlock_set_unlock_launch_picker_change_title" msgid="32310692507029407">"تغيير تأمين الشاشة"</string>
+ <string name="unlock_set_unlock_launch_picker_change_title" msgid="32310692507029407">"تغيير قفل الشاشة"</string>
<string name="unlock_set_unlock_launch_picker_change_summary" msgid="2072792784866320522">"تغيير أو إيقاف النقش أو رمز PIN أو أمان كلمة المرور"</string>
- <string name="unlock_set_unlock_launch_picker_enable_summary" msgid="9070847611379078795">"اختيار طريقة لتأمين الشاشة"</string>
+ <string name="unlock_set_unlock_launch_picker_enable_summary" msgid="9070847611379078795">"اختيار طريقة لقفل الشاشة"</string>
<string name="unlock_set_unlock_off_title" msgid="5049876793411416079">"بدون"</string>
<string name="unlock_set_unlock_off_summary" msgid="3997346045783359119"></string>
<string name="unlock_set_unlock_none_title" msgid="1922027966983146392">"التمرير السريع"</string>
@@ -609,7 +608,7 @@
<string name="unlock_set_unlock_mode_pin" msgid="7828354651668392875">"رقم تعريف شخصي"</string>
<string name="unlock_set_unlock_mode_password" msgid="397703731925549447">"كلمة مرور"</string>
<string name="unlock_setup_wizard_fingerprint_details" msgid="6515136915205473675">"بعد إعداد قفل شاشة، يمكنك أيضًا إعداد بصمة إصبعك في الإعدادات > الأمان."</string>
- <string name="unlock_disable_lock_title" msgid="3508492427073600294">"إيقاف تأمين الشاشة"</string>
+ <string name="unlock_disable_lock_title" msgid="3508492427073600294">"إيقاف قفل الشاشة"</string>
<string name="unlock_disable_frp_warning_title" msgid="5858589970505254193">"هل تريد إزالة حماية الجهاز؟"</string>
<string name="unlock_disable_frp_warning_title_profile" msgid="3814123014295965266">"هل تريد إزالة حماية الملف الشخصي؟"</string>
<string name="unlock_disable_frp_warning_content_pattern" msgid="1843950215687159135">"لن تعمل ميزات حماية الجهاز بدون النقش."</string>
@@ -793,10 +792,10 @@
<item quantity="other"><xliff:g id="COUNT">%d</xliff:g> خدمة ناشطة لمنح الثقة</item>
<item quantity="one">خدمة واحدة ناشطة لمنح الثقة</item>
</plurals>
- <string name="bluetooth_quick_toggle_title" msgid="7410319268406112792">"بلوتوث"</string>
+ <string name="bluetooth_quick_toggle_title" msgid="7410319268406112792">"البلوتوث"</string>
<string name="bluetooth_quick_toggle_summary" msgid="3951769568065428093">"تفعيل البلوتوث"</string>
- <string name="bluetooth_settings" msgid="5228032727293770389">"بلوتوث"</string>
- <string name="bluetooth_settings_title" msgid="7261244857456521825">"بلوتوث"</string>
+ <string name="bluetooth_settings" msgid="5228032727293770389">"البلوتوث"</string>
+ <string name="bluetooth_settings_title" msgid="7261244857456521825">"البلوتوث"</string>
<string name="bluetooth_settings_summary" msgid="1221689092429277887">"إدارة الاتصالات، تعيين اسم الجهاز وقابلية الاكتشاف"</string>
<string name="bluetooth_pairing_request" msgid="7221745525632573125">"هل تريد الإقران مع <xliff:g id="DEVICE_NAME">%1$s</xliff:g>؟"</string>
<string name="bluetooth_pairing_key_msg" msgid="1139230917419961975">"رمز إقران البلوتوث"</string>
@@ -892,7 +891,7 @@
<string name="nfc_quick_toggle_title" msgid="4990697912813795002">"الاتصالات قصيرة المدى (NFC)"</string>
<string name="nfc_quick_toggle_summary" product="tablet" msgid="983451155092850657">"السماح بتبادل البيانات عندما يلمس الجهاز اللوحي جهازًا آخر"</string>
<string name="nfc_quick_toggle_summary" product="default" msgid="7141056939052895142">"السماح بتبادل البيانات عندما يلمس الهاتف جهازًا آخر"</string>
- <string name="nfc_disclaimer_title" msgid="4860231267351602970">"تشغيل NFC"</string>
+ <string name="nfc_disclaimer_title" msgid="4860231267351602970">"تفعيل NFC"</string>
<string name="nfc_disclaimer_content" msgid="3066113577854565782">"يتم من خلال تقنية الاتصال بالحقل القريب (NFC) تبادل البيانات بين هذا الجهاز والأجهزة أو الأهداف المجاورة الأخرى، مثل محطات الدفع وبرامج قراءة الوصول والعلامات أو الإعلانات التفاعلية."</string>
<string name="nfc_secure_settings_title" msgid="5153751163174916581">"تأمين الاتصال بالحقل القريب (NFC)"</string>
<string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"السماح باستخدام \"الدفع والتقل عبر تقنية NFC\" فقط عندما تكون الشاشة مفتوحة"</string>
@@ -905,7 +904,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"تفعيل شبكة Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"استخدام Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"استخدام Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"إعدادات Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"إعداد وإدارة نقاط الدخول اللاسلكية"</string>
@@ -914,12 +913,12 @@
<string name="wifi_stopping" msgid="413711069039939520">"إيقاف Wi-Fi…"</string>
<string name="wifi_error" msgid="5605801874484465557">"خطأ"</string>
<string name="wifi_sap_no_channel_error" msgid="6881796988574851628">"لا يتوفر التردد ٥ غيغاهرتز في هذا البلد"</string>
- <string name="wifi_in_airplane_mode" msgid="4729571191578262246">"في وضع الطائرة"</string>
+ <string name="wifi_in_airplane_mode" msgid="4729571191578262246">"في وضع الطيران"</string>
<string name="wifi_notify_open_networks" msgid="4782239203624619655">"الإشعار بوجود شبكات مفتوحة"</string>
<string name="wifi_notify_open_networks_summary" msgid="1383681260705466715">"الإشعار عند توفر شبكة عامة عالية الجودة"</string>
- <string name="wifi_wakeup" msgid="4963732992164721548">"تشغيل اتّصال Wi‑Fi تلقائيًا"</string>
- <string name="wifi_wakeup_summary" msgid="1152699417411690">"إعادة تشغيل اتّصال Wi‑Fi بالقرب من الشبكات المحفوظة العالية الجودة، مثل الشبكة المنزلية"</string>
- <string name="wifi_wakeup_summary_no_location" msgid="3007457288587966962">"غير متاحة نظرًا لإيقاف خدمة الموقع. شغّل خدمة "<annotation id="link">"الموقع"</annotation>"."</string>
+ <string name="wifi_wakeup" msgid="4963732992164721548">"تفعيل اتّصال Wi‑Fi تلقائيًا"</string>
+ <string name="wifi_wakeup_summary" msgid="1152699417411690">"إعادة تفعيل اتّصال Wi‑Fi بالقرب من الشبكات المحفوظة العالية الجودة، مثل الشبكة المنزلية"</string>
+ <string name="wifi_wakeup_summary_no_location" msgid="3007457288587966962">"غير متاحة نظرًا لإيقاف خدمة الموقع. فعِّل خدمة "<annotation id="link">"الموقع"</annotation>"."</string>
<string name="wifi_wakeup_summary_scanning_disabled" msgid="6820040651529910914">"غير متاح لأن ميزة \"البحث عن شبكات Wi‑Fi\" غير مفعّلة"</string>
<string name="wifi_wakeup_summary_scoring_disabled" msgid="7067018832237903151">"لاستخدام الميزة، اختر مقدِّم خدمة تقييم شبكة"</string>
<string name="wifi_poor_network_detection" msgid="7193423327400703073">"تجنب الاتصالات الضعيفة"</string>
@@ -934,7 +933,7 @@
<string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"لتحسين دقة تحديد الموقع الجغرافي، يمكنك تفعيل ميزة \"البحث عن شبكات Wi-Fi\" من خلال <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>إعدادات البحث<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
<string name="wifi_scan_notify_remember_choice" msgid="1235445971400237444">"عدم الإظهار مرة أخرى"</string>
<string name="wifi_setting_sleep_policy_title" msgid="2120785188625932076">"احتفاظ بـ Wi-Fi في وضع السكون"</string>
- <string name="wifi_setting_on_during_sleep_title" msgid="856670183023402715">"تشغيل Wi‑Fi أثناء وضع السكون"</string>
+ <string name="wifi_setting_on_during_sleep_title" msgid="856670183023402715">"تفعيل Wi-Fi أثناء وضع السكون"</string>
<string name="wifi_setting_sleep_policy_error" msgid="9029652631829560733">"حدثت مشكلة أثناء تغيير الإعدادات"</string>
<string name="wifi_suspend_efficiency_title" msgid="5292408676086580527">"تحسين الفعالية"</string>
<string name="wifi_suspend_optimizations" msgid="8826033336622472222">"تحسين Wi-Fi"</string>
@@ -946,13 +945,13 @@
<string name="wifi_add_network" msgid="4094957940791876640">"إضافة شبكة"</string>
<string name="wifi_configure_settings_preference_title" msgid="2678534679408777268">"إعدادات Wi-Fi"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="5714892572614655675">"ستتم إعادة تفعيل شبكة Wi‑Fi تلقائيًا"</string>
- <string name="wifi_configure_settings_preference_summary_wakeup_off" msgid="286904094152909651">"لن تتم إعادة تشغيل اتّصال Wi‑Fi تلقائيًا"</string>
+ <string name="wifi_configure_settings_preference_summary_wakeup_off" msgid="286904094152909651">"لن تتم إعادة تفعيل اتّصال Wi‑Fi تلقائيًا"</string>
<string name="wifi_access_points" msgid="1647976498906871869">"شبكات Wi-Fi"</string>
<string name="wifi_menu_more_options" msgid="8318269834264035524">"مزيد من الخيارات"</string>
<string name="wifi_menu_p2p" msgid="4945665601551289791">"اتصال Wi-Fi مباشر"</string>
<string name="wifi_menu_scan" msgid="9082691677803181629">"فحص"</string>
<string name="wifi_menu_advanced" msgid="5984484498045511072">"إعدادات متقدمة"</string>
- <string name="wifi_menu_configure" msgid="52192491120701266">"تهيئة"</string>
+ <string name="wifi_menu_configure" msgid="52192491120701266">"إعداد"</string>
<string name="wifi_menu_connect" msgid="3984327567173931219">"اتصال بالشبكة"</string>
<string name="wifi_menu_remember" msgid="717257200269700641">"تذكر الشبكة"</string>
<string name="wifi_menu_forget" msgid="7561140554450163075">"حذف الشبكة"</string>
@@ -963,7 +962,7 @@
<string name="wifi_more" msgid="3538241640407382185">"المزيد"</string>
<string name="wifi_setup_wps" msgid="6730131677695521321">"الإعداد التلقائي (WPS)"</string>
<string name="wifi_settings_scanning_required_title" msgid="3593457187659922490">"هل تريد تفعيل ميزة \"البحث عن شبكات Wi‑Fi\"؟"</string>
- <string name="wifi_settings_scanning_required_summary" msgid="7469610959462708782">"لتشغيل Wi‑Fi تلقائيًا، يجب أولاً تفعيل ميزة \"البحث عن شبكات Wi‑Fi\"."</string>
+ <string name="wifi_settings_scanning_required_summary" msgid="7469610959462708782">"لتفعيل Wi‑Fi تلقائيًا، يجب أولاً تفعيل ميزة \"البحث عن شبكات Wi‑Fi\"."</string>
<string name="wifi_settings_scanning_required_info" msgid="5913535073390607386">"تتيح ميزة \"البحث عن شبكات Wi‑Fi\" للتطبيقات والخدمات إمكانية البحث عن شبكات Wi‑Fi في أي وقت، حتى في حال عدم تفعيل Wi‑Fi. ويمكن استخدام هذه البيانات مثلاً لتحسين الميزات والخدمات المستندة إلى الموقع الجغرافي."</string>
<string name="wifi_settings_scanning_required_turn_on" msgid="4327570180594277049">"تفعيل"</string>
<string name="wifi_settings_scanning_required_enabled" msgid="3336102100425307040">"ميزة \"البحث عن شبكات Wi‑Fi\" مفعّلة"</string>
@@ -974,7 +973,7 @@
<string name="wifi_ssid_hint" msgid="5010024648106585165">"يُرجى إدخال اسم SSID"</string>
<string name="wifi_security" msgid="9136702039496152831">"الأمان"</string>
<string name="wifi_hidden_network" msgid="6647772204699776833">"شبكة مخفية"</string>
- <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"إذا لم يكن جهاز التوجيه يبث معرّف شبكة وتريد الاتصال به في المستقبل، يمكنك تعيين الشبكة كشبكة مخفية.\n\nربما ينشئ هذا خطرًا أمنيًا حيث سيبث هاتفك إشارته بانتظام للعثور على الشبكة.\n\nلن يؤدي تعيين الشبكة كشبكة مخفية إلى تغيير إعدادات جهاز التوجيه."</string>
+ <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"إذا لم يكن جهاز التوجيه يبث معرّف شبكة وتريد الاتصال به في المستقبل، يمكنك ضبط الشبكة كشبكة مخفية.\n\nربما ينشئ هذا خطرًا أمنيًا حيث سيبث هاتفك إشارته بانتظام للعثور على الشبكة.\n\nلن يؤدي تعيين الشبكة كشبكة مخفية إلى تغيير إعدادات جهاز التوجيه."</string>
<string name="wifi_signal" msgid="696548364467704808">"قوة الإشارة"</string>
<string name="wifi_status" msgid="3439931558930689940">"الحالة"</string>
<string name="tx_wifi_speed" msgid="2571810085003261073">"سرعة نقل الرابط"</string>
@@ -992,7 +991,7 @@
<string name="wifi_eap_anonymous" msgid="6352344972490839958">"هوية مجهولة"</string>
<string name="wifi_password" msgid="6942983531275177771">"كلمة المرور"</string>
<string name="wifi_show_password" msgid="7878398590772942202">"إظهار كلمة المرور"</string>
- <string name="wifi_ap_band_config" msgid="6565016368079288433">"تحديد نطاق AP"</string>
+ <string name="wifi_ap_band_config" msgid="6565016368079288433">"اختيار نطاق AP"</string>
<string name="wifi_ap_choose_auto" msgid="7927637960569365785">"تلقائي"</string>
<string name="wifi_ap_choose_2G" msgid="43198403259714736">"نطاق بتردد ٢٫٤ غيغاهرتز"</string>
<string name="wifi_ap_choose_5G" msgid="2624859713183683146">"نطاق بتردد ٥ غيغاهرتز"</string>
@@ -1004,7 +1003,7 @@
<string name="wifi_privacy_settings" msgid="4462092795794247809">"الخصوصية"</string>
<string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"عنوان MAC العشوائي"</string>
<string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"إضافة جهاز"</string>
- <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"توسيط رمز الاستجابة السريعة أدناه لإضافة الجهاز إلى \"<xliff:g id="SSID">%1$s</xliff:g>\""</string>
+ <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"وضع رمز الاستجابة السريعة في الوسط أدناه لإضافة الجهاز إلى \"<xliff:g id="SSID">%1$s</xliff:g>\""</string>
<string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"المسح الضوئي لرمز الاستجابة السريعة"</string>
<string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"توسيط رمز الاستجابة السريعة أدناه للربط بالمعرِّف \"<xliff:g id="SSID">%1$s</xliff:g>\""</string>
<string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"يمكنك الانضمام إلى شبكة Wi‑Fi عن طريق المسح الضوئي لرمز مسح الاستجابة السريعة."</string>
@@ -1036,8 +1035,8 @@
<string name="wifi_dpp_connect_network_using_qr_code" msgid="115993715600532357">"يمكنك الاتصال بهذه الشبكة باستخدام رمز استجابة سريعة."</string>
<string name="retry" msgid="8500839563577344702">"إعادة المحاولة"</string>
<string name="wifi_shared" msgid="5054256778276524960">"المشاركة مع مستخدمي الجهاز الآخرين"</string>
- <string name="wifi_unchanged" msgid="6804964646942333992">"(لم يتم التغيير)"</string>
- <string name="wifi_unspecified" msgid="893491188483500809">"يُرجى التحديد"</string>
+ <string name="wifi_unchanged" msgid="6804964646942333992">"(لم يتم تغييره)"</string>
+ <string name="wifi_unspecified" msgid="893491188483500809">"يُرجى الاختيار"</string>
<string name="wifi_multiple_cert_added" msgid="7986200585749147204">"(تمت إضافة عدة شهادات)"</string>
<string name="wifi_use_system_certs" msgid="4794489370929885022">"استخدام شهادات النظام"</string>
<string name="wifi_do_not_provide_eap_user_cert" msgid="4044301449482425250">"عدم التوفير"</string>
@@ -1133,8 +1132,8 @@
<string name="wifi_hotspot_off_subtext" msgid="6177054857136221058">"لا تتم مشاركة اتصال الإنترنت أو المحتوى مع الأجهزة الأخرى"</string>
<string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="71421730039785897">"تتم مشاركة اتصال الإنترنت على هذا الجهاز اللوحي عبر نقطة الاتصال"</string>
<string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="8914285514605049879">"تتم مشاركة اتصال الإنترنت على هذا الهاتف عبر نقطة الاتصال"</string>
- <string name="wifi_hotspot_on_local_only_subtext" msgid="7415381343846704553">"يشارك التطبيق المحتوى. لمشاركة اتصال الإنترنت، يجب إيقاف نقطة الاتصال، ثم تشغيلها."</string>
- <string name="wifi_hotspot_no_password_subtext" msgid="5400500962974373706">"لم يتم تعيين كلمة مرور"</string>
+ <string name="wifi_hotspot_on_local_only_subtext" msgid="7415381343846704553">"يشارك التطبيق المحتوى. لمشاركة اتصال الإنترنت، يجب إيقاف نقطة الاتصال، ثم تفعيلها."</string>
+ <string name="wifi_hotspot_no_password_subtext" msgid="5400500962974373706">"لم يتم ضبط كلمة مرور"</string>
<string name="wifi_hotspot_name_title" msgid="6572202165400226127">"اسم نقطة الاتصال"</string>
<string name="wifi_hotspot_name_summary_connecting" msgid="5176787959408511889">"جارٍ تفعيل <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>..."</string>
<string name="wifi_hotspot_name_summary_connected" msgid="8387768642326756749">"يمكن توصيل الأجهزة الأخرى بشبكة <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>"</string>
@@ -1175,18 +1174,21 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"الجوّال"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"إذا لم تكن شبكة Wi-Fi متاحة، يمكنك استخدام شبكة الجوّال."</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"إذا لم تكن شبكة الجوّال متاحة، يمكنك استخدام شبكة Wi-Fi."</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"يمكنك الاتصال عبر شبكة Wi-Fi. وإذا لم تكن متوفرة، سيتم إنهاء المكالمة."</string>
- <string name="wifi_calling_off_explanation" msgid="1653424723742898015">"عند تشغيل الاتصال عبر Wi-Fi، يمكن للهاتف توجيه المكالمات عبر شبكة Wi-Fi أو عبر مشغّل شبكة الجوّال، حسب تفضيلك وحسب الإشارة الأقوى. وقبل تفعيل هذه الميزة، يُرجى مراجعة الرسوم والتفاصيل الأخرى مع مشغّل شبكة الجوّال.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
+ <string name="wifi_calling_off_explanation" msgid="1653424723742898015">"عند تفعيل الاتصال عبر Wi-Fi، يمكن للهاتف توجيه المكالمات عبر شبكة Wi-Fi أو عبر مشغّل شبكة الجوّال، حسب تفضيلك وحسب الإشارة الأقوى. وقبل تفعيل هذه الميزة، يُرجى مراجعة الرسوم والتفاصيل الأخرى مع مشغّل شبكة الجوّال.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="8648609693875720408"></string>
<string name="emergency_address_title" msgid="5779915349686787024">"عنوان الطوارئ"</string>
<string name="emergency_address_summary" msgid="478668478569851714">"يتم اعتباره موقعك الجغرافي عند إجراء مكالمة طوارئ عبر Wi‑Fi"</string>
<string name="private_dns_help_message" msgid="7633526525131196650"><annotation id="url">"مزيد من المعلومات"</annotation>" عن ميزات نظام أسماء النطاقات الخاص"</string>
<string name="wifi_calling_pref_managed_by_carrier" msgid="5458050015417972072">"الإعداد تحت إدارة مشغّل شبكة الجوّال"</string>
<string name="wifi_calling_settings_activation_instructions" msgid="2863642668648110908">"تفعيل الاتصال عبر Wi‑Fi"</string>
- <string name="wifi_calling_turn_on" msgid="1212277809455062043">"تشغيل الاتصال عبر Wi-Fi"</string>
+ <string name="wifi_calling_turn_on" msgid="1212277809455062043">"تفعيل الاتصال عبر Wi-Fi"</string>
<string name="wifi_calling_not_supported" msgid="216781767605669775">"لا يوفّر مشغِّل شبكة الجوّال %1$s ميزة \"الاتصال عبر Wi-Fi\""</string>
<string name="carrier" msgid="3413463182542176886">"مشغّل شبكة جوّال"</string>
<string name="display_settings_title" msgid="1243571562133261601">"العرض"</string>
@@ -1194,7 +1196,7 @@
<string name="all_volume_title" msgid="1750261506951315423">"مستويات الصوت"</string>
<string name="musicfx_title" msgid="6456079041566773649">"تأثيرات موسيقية"</string>
<string name="ring_volume_title" msgid="5874791723449821646">"مستوى صوت الرنين"</string>
- <string name="vibrate_in_silent_title" msgid="2314667015729841220">"اهتزاز عند تشغيل الوضع صامت"</string>
+ <string name="vibrate_in_silent_title" msgid="2314667015729841220">"اهتزاز عند تفعيل الوضع صامت"</string>
<string name="notification_sound_title" msgid="6812164482799723931">"الصوت التلقائي للإشعارات"</string>
<string name="incoming_call_volume_title" msgid="4736570528754310450">"نغمة الرنين"</string>
<string name="notification_volume_title" msgid="6022562909288085275">"التنبيه"</string>
@@ -1207,7 +1209,7 @@
<string name="dock_settings_summary" msgid="3023630224867503210">"الإعدادات الصوتية للإرساء المرفق"</string>
<string name="dtmf_tone_enable_title" msgid="3797301105270314782">"نغمات لمس لوحة الطلب"</string>
<string name="sound_effects_enable_title" msgid="3693756476729696246">"أصوات النقر"</string>
- <string name="lock_sounds_enable_title" msgid="6456726219456531315">"صوت تأمين الشاشة"</string>
+ <string name="lock_sounds_enable_title" msgid="6456726219456531315">"صوت قفل الشاشة"</string>
<string name="audio_record_proc_title" msgid="5772134576781468721">"إلغاء الضجيج"</string>
<string name="volume_media_description" msgid="3659485559976891268">"الموسيقى والفيديو والألعاب والوسائط الأخرى"</string>
<string name="volume_ring_description" msgid="1975431532517579212">"نغمة الرنين والتنبيهات"</string>
@@ -1226,8 +1228,8 @@
<string name="dock_audio_summary_none" product="default" msgid="2704912407397319084">"لم يتم إرساء الهاتف"</string>
<string name="dock_audio_summary_unknown" msgid="1615958511030469507">"إعدادات الإرساء المرفق"</string>
<string name="dock_not_found_title" msgid="2035088760477532435">"لم يتم العثور على الإرساء"</string>
- <string name="dock_not_found_text" product="tablet" msgid="5996654431405111902">"يلزمك إرساء الجهاز اللوحي قبل تهيئة إعدادات الإرساء الصوتية."</string>
- <string name="dock_not_found_text" product="default" msgid="8275091896320216368">"يلزمك إرساء الهاتف قبل تهيئة إعدادات الإرساء الصوتية."</string>
+ <string name="dock_not_found_text" product="tablet" msgid="5996654431405111902">"يلزمك إرساء الجهاز اللوحي قبل ضبط إعدادات الإرساء الصوتية."</string>
+ <string name="dock_not_found_text" product="default" msgid="8275091896320216368">"يلزمك إرساء الهاتف قبل ضبط إعدادات الإرساء الصوتية."</string>
<string name="dock_sounds_enable_title" msgid="3385931465312084061">"صوت إدراج الإرساء"</string>
<string name="dock_sounds_enable_summary_on" product="tablet" msgid="4322104626905111669">"تشغيل صوت أثناء إدراج الجهاز اللوحي أو إزالته من المرسى"</string>
<string name="dock_sounds_enable_summary_on" product="default" msgid="2751810717801098293">"تشغيل الصوت عند إدراج أو إزالة الهاتف من الإرساء"</string>
@@ -1244,7 +1246,7 @@
<string name="color_mode_title" msgid="8164858320869449142">"الألوان"</string>
<string name="color_mode_option_natural" msgid="1292837781836645320">"طبيعي"</string>
<string name="color_mode_option_boosted" msgid="453557938434778933">"مُحسن"</string>
- <string name="color_mode_option_saturated" msgid="7758384943407859851">"مُشبع"</string>
+ <string name="color_mode_option_saturated" msgid="7758384943407859851">"مُشبعة"</string>
<string name="color_mode_option_automatic" msgid="6572718611315165117">"توافقي"</string>
<string name="color_mode_summary_natural" msgid="1247153893843263340">"استخدام الألوان الدقيقة فقط"</string>
<string name="color_mode_summary_automatic" msgid="6066740785261330514">"ضبط إلى التبديل بين الألوان الزاهية والدقيقة"</string>
@@ -1271,7 +1273,7 @@
<string name="auto_brightness_very_high_title" msgid="6649896560889239565">"مرتفع جدًا"</string>
<string name="auto_brightness_subtitle" msgid="8516999348793100665">"مستوى السطوع المفضل بالنسبة لك"</string>
<string name="auto_brightness_off_summary" msgid="6162650416289359104">"عدم ضبط السطوع بحسب الإضاءة المتاحة"</string>
- <string name="auto_brightness_very_high_summary" msgid="7202032980509583918">"زيادة استخدام البطارية"</string>
+ <string name="auto_brightness_very_high_summary" msgid="7202032980509583918">"يزيد استخدام البطارية"</string>
<string name="auto_brightness_disclaimer" msgid="5416696351199148809">"يمكنك تحسين مستوى السطوع حسب الإضاءة. وعند تفعيل هذه الميزة، سيظل بإمكانك ضبط السطوع مؤقتًا."</string>
<string name="auto_brightness_description" msgid="8209140379089535411">"سيتم ضبط سطوع الشاشة تلقائيًا حسب البيئة المحيطة والأنشطة. ويمكنك تحريك شريط التمرير يدويًا لضبط السطوع التكيُّفي حسبما تفضّل."</string>
<string name="display_white_balance_title" msgid="5747260735311935143">"موازنة اللون الأبيض للشاشة"</string>
@@ -1292,8 +1294,8 @@
<string name="night_display_temperature_title" msgid="8375126629902616296">"الكثافة"</string>
<string name="night_display_summary_off" msgid="8850539785332228069">"غير مفعّل / <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="night_display_summary_off_auto_mode_never" msgid="8618824386434992487">"لن يتم تفعيل الميزة تلقائيًا على الإطلاق"</string>
- <string name="night_display_summary_off_auto_mode_custom" msgid="596847003171394411">"سيتم التشغيل تلقائيًا في <xliff:g id="ID_1">%1$s</xliff:g>"</string>
- <string name="night_display_summary_off_auto_mode_twilight" msgid="4071750976585359952">"سيتم التشغيل تلقائيًا عند غروب الشمس"</string>
+ <string name="night_display_summary_off_auto_mode_custom" msgid="596847003171394411">"سيتم التفعيل تلقائيًا في <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="night_display_summary_off_auto_mode_twilight" msgid="4071750976585359952">"سيتم التفعيل تلقائيًا عند غروب الشمس"</string>
<string name="night_display_summary_on" msgid="6580571388791426596">"تم التشغيل / <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="night_display_summary_on_auto_mode_never" msgid="5461580863060506687">"لن يتم الإيقاف تلقائيًا مطلقًا"</string>
<string name="night_display_summary_on_auto_mode_custom" msgid="2200631112239399233">"سيتم الإيقاف تلقائيًا عند الساعة <xliff:g id="ID_1">%1$s</xliff:g>"</string>
@@ -1362,7 +1364,7 @@
<string name="sim_lock_failed" msgid="7949781515066772755">"لا يمكن تغيير حالة تأمين شريحة SIM.\nيُحتمل أن يكون رقم التعريف الشخصي غير صحيح."</string>
<string name="sim_pin_disable_failed" msgid="6780973900290546751">"يتعذَّر إيقاف رقم التعريف الشخصي."</string>
<string name="sim_pin_enable_failed" msgid="804897359922298792">"يتعذَّر تفعيل رقم التعريف الشخصي."</string>
- <string name="sim_enter_ok" msgid="5103626479976731229">"موافق"</string>
+ <string name="sim_enter_ok" msgid="5103626479976731229">"حسنًا"</string>
<string name="sim_enter_cancel" msgid="2806801210236824592">"إلغاء"</string>
<string name="sim_multi_sims_title" msgid="8816212852512189781">"تم العثور على بطاقات SIM متعددة"</string>
<string name="sim_multi_sims_summary" msgid="8237021982527032257">"اختر شريحة SIM المفضلة لبيانات الجوّال."</string>
@@ -1487,7 +1489,7 @@
<string name="storage_menu_format" msgid="4285487419855632896">"تهيئة"</string>
<string name="storage_menu_format_public" msgid="5361388353980722971">"تهيئة كوحدة تخزين محمولة"</string>
<string name="storage_menu_format_private" msgid="5288599205435858720">"تهيئة كوحدة تخزين داخلية"</string>
- <string name="storage_menu_migrate" msgid="1885806122515759703">"ترحيل البيانات"</string>
+ <string name="storage_menu_migrate" msgid="1885806122515759703">"نقل البيانات"</string>
<string name="storage_menu_forget" msgid="4345021250834642640">"حذف"</string>
<string name="storage_menu_set_up" msgid="2849170579745958513">"إعداد"</string>
<string name="storage_menu_explore" msgid="3733439525636202662">"استكشاف"</string>
@@ -1519,7 +1521,7 @@
<string name="storage_dialog_unmountable" msgid="7082856306456936054">"بطاقة <xliff:g id="NAME_0">^1</xliff:g> هذه تالفة. \n\nلاستخدام بطاقة <xliff:g id="NAME_1">^1</xliff:g> هذه، عليك إعدادها أولاً."</string>
<string name="storage_dialog_unsupported" msgid="8274023677580782553">"هذا الجهاز غير متوافق مع <xliff:g id="NAME_0">^1</xliff:g> هذه. \n\nلاستخدام <xliff:g id="NAME_1">^1</xliff:g> هذه مع هذا الجهاز، عليك إعدادها أولاً."</string>
<string name="storage_internal_format_details" msgid="2780806013122012384">"بعد إجراء التنسيق، يمكنك استخدام <xliff:g id="NAME_0">^1</xliff:g> هذه على أجهزة أخرى. \n\nوسيتم محو جميع البيانات الموجودة على <xliff:g id="NAME_1">^1</xliff:g> هذه. يمكنك إجراء النسخ الاحتياطي أولاً. \n\n"<b>"النسخ الاحتياطي للصور والوسائط الأخرى"</b>" \nيمكنك نقل ملفات الوسائط إلى وحدة تخزين بديلة على هذا الجهاز أو نقلها إلى جهاز كمبيوتر باستخدام كابل USB. \n\n"<b>"النسخ الاحتياطي للتطبيقات"</b>" \nستتم إزالة جميع التطبيقات المخزنة على <xliff:g id="NAME_6">^1</xliff:g> هذه وكذلك سيتم محو بياناتها. وللاحتفاظ بهذه التطبيقات، يمكنك نقلها إلى وحدة تخزين بديلة على هذا الجهاز."</string>
- <string name="storage_internal_unmount_details" msgid="4667435317528624039"><b>"عند إخراج <xliff:g id="NAME_0">^1</xliff:g> هذه، فإن التطبيقات المخزنة عليها ستتوقف عن العمل ولن تكون ملفات الوسائط المخزنة عليها متاحة حتى يتم إعادة إدخالها."</b>" \n\nلقد تمت تهيئة <xliff:g id="NAME_1">^1</xliff:g> للعمل على هذا الجهاز فقط. ولن تعمل على أي أجهزة أخرى."</string>
+ <string name="storage_internal_unmount_details" msgid="4667435317528624039"><b>"عند إخراج <xliff:g id="NAME_0">^1</xliff:g> هذه، فإن التطبيقات المخزنة عليها ستتوقف عن العمل ولن تكون ملفات الوسائط المخزنة عليها متاحة حتى يتم إعادة إدخالها."</b>" \n\nلقد تم إعداد <xliff:g id="NAME_1">^1</xliff:g> للعمل على هذا الجهاز فقط. ولن تعمل على أي أجهزة أخرى."</string>
<string name="storage_internal_forget_details" msgid="5655856574682184453">"لاستخدام التطبيقات أو الصور أو البيانات التي يحتوي عليها <xliff:g id="NAME">^1</xliff:g> يمكنك إعادة إدخاله. \n\nبدلاً من ذلك، يمكنك اختيار حذف وحدة التخزين هذه إذا لم يكن الجهاز متاحًا. \n\nوإذا اخترت الحذف، فستفقد جميع البيانات التي يحتوي عليها الجهاز للأبد. \n\nويمكنك إعادة تثبيت التطبيقات لاحقًا، إلا أنه سيتم فقد بياناتها المخزنة على هذا الجهاز."</string>
<string name="storage_internal_forget_confirm_title" msgid="331032276130605241">"هل تريد حذف <xliff:g id="NAME">^1</xliff:g>؟"</string>
<string name="storage_internal_forget_confirm" msgid="3052483375203727176">"سيتم فقد كل التطبيقات والصور والبيانات المخزنة على <xliff:g id="NAME">^1</xliff:g> هذه للأبد."</string>
@@ -1542,7 +1544,7 @@
<string name="storage_wizard_format_confirm_title" msgid="7785358616068633439">"التنسيق كوحدة تخزين داخلية"</string>
<string name="storage_wizard_format_confirm_body" msgid="4107762933332992624">"يتطلب هذا أن يتم تنسيق <xliff:g id="NAME_0">^1</xliff:g> لجعلها آمنة. \n\nبعد التنسيق، لن تعمل <xliff:g id="NAME_1">^1</xliff:g> هذه إلا على هذا الجهاز. \n\n"<b>"يؤدي التنسيق إلى محو جميع البيانات المخزنة حاليًا على <xliff:g id="NAME_2">^1</xliff:g>."</b>" ولتجنب فقد البيانات، يمكنك نسخها احتياطيًا."</string>
<string name="storage_wizard_format_confirm_public_title" msgid="5866830103788091426">"التهيئة كوحدة تخزين محمولة"</string>
- <string name="storage_wizard_format_confirm_public_body" msgid="1451308701654703353">"يتطلب هذا تهيئة <xliff:g id="NAME_0">^1</xliff:g>. \n\n"<b>"وتجدر الإشارة إلى أن التهيئة ستؤدي إلى محو جميع البيانات المخزنة حاليًا على <xliff:g id="NAME_1">^1</xliff:g>."</b>" لتجنب فقد البيانات، يمكنك الاحتفاظ بنسخة احتياطية منها."</string>
+ <string name="storage_wizard_format_confirm_public_body" msgid="1451308701654703353">"يتطلب هذا تهيئة <xliff:g id="NAME_0">^1</xliff:g>. \n\n"<b>"وتجدر الإشارة إلى أن الإعداد سيؤدي إلى محو جميع البيانات المخزنة حاليًا على <xliff:g id="NAME_1">^1</xliff:g>."</b>" لتجنب فقد البيانات، يمكنك الاحتفاظ بنسخة احتياطية منها."</string>
<string name="storage_wizard_format_confirm_next" msgid="236947984802247625">"محو البيانات والتنسيق"</string>
<string name="storage_wizard_format_progress_title" msgid="6905902731208646436">"جارٍ تنسيق <xliff:g id="NAME">^1</xliff:g>…"</string>
<string name="storage_wizard_format_progress_body" msgid="5346709539457190419">"لا تُزِل <xliff:g id="NAME">^1</xliff:g> أثناء تنفيذ عملية التنسيق."</string>
@@ -1601,8 +1603,8 @@
<string name="battery_status_title" msgid="8731200319740671905">"حالة البطارية"</string>
<string name="battery_level_title" msgid="5207775387973771646">"مستوى البطارية"</string>
<string name="apn_settings" msgid="8130776653826271664">"أسماء نقاط الوصول"</string>
- <string name="apn_edit" msgid="4350571070853305357">"تعديل نقطة الدخول"</string>
- <string name="apn_not_set" msgid="5344235604466825691">"لم يتم التعيين"</string>
+ <string name="apn_edit" msgid="4350571070853305357">"تعديل نقطة الوصول"</string>
+ <string name="apn_not_set" msgid="5344235604466825691">"لم يتم الضبط"</string>
<string name="apn_name" msgid="8431432886706852226">"الاسم"</string>
<string name="apn_apn" msgid="190519449579357696">"APN"</string>
<string name="apn_http_proxy" msgid="8816906767987944465">"الخادم الوكيل"</string>
@@ -1641,7 +1643,7 @@
<string name="error_adding_apn_type" msgid="671634520340569678">"لا يسمح مشغّل شبكة الجوّال بإضافة APN من النوع %s."</string>
<string name="restore_default_apn" msgid="7195266404077471007">"جارٍ استعادة إعدادات APN التلقائية."</string>
<string name="menu_restore" msgid="3799288817317293115">"إعادة الضبط على الإعداد التلقائي"</string>
- <string name="restore_default_apn_completed" msgid="5671734152740058937">"اكتملت إعادة تعيين إعدادات APN التلقائية."</string>
+ <string name="restore_default_apn_completed" msgid="5671734152740058937">"اكتملت إعادة ضبط إعدادات APN التلقائية."</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"خيارات إعادة الضبط"</string>
<string name="reset_dashboard_summary" msgid="8778383341461126642">"يمكن إعادة ضبط الشبكة أو التطبيقات أو الجهاز"</string>
<string name="reset_network_title" msgid="8944059136930806211">"إعادة ضبط شبكة Wi-Fi والجوّال والبلوتوث"</string>
@@ -1654,7 +1656,7 @@
<string name="reset_network_final_button_text" msgid="345255333127794393">"إعادة ضبط الإعدادات"</string>
<string name="reset_network_confirm_title" msgid="2432145031070536008">"هل تريد إعادة الضبط؟"</string>
<string name="network_reset_not_available" msgid="6146655531868016281">"إعادة ضبط الشبكة ليست متاحة لهذا المستخدم"</string>
- <string name="reset_network_complete_toast" msgid="128225929536005495">"تمت إعادة تعيين إعدادات الشبكة"</string>
+ <string name="reset_network_complete_toast" msgid="128225929536005495">"تمت إعادة ضبط إعدادات الشبكة"</string>
<string name="reset_esim_error_title" msgid="4728931209471875632">"يتعذّر محو بيانات شرائح SIM"</string>
<string name="reset_esim_error_msg" msgid="4716366079119742235">"يتعذّر محو بيانات شرائح التي تم تنزيلها بسبب خطأ.\n\nيمكنك إعادة تشغيل الجهاز وإعادة المحاولة."</string>
<string name="master_clear_title" msgid="1560712943955904673">"محو جميع البيانات (إعادة الضبط على الإعدادات الأصلية)"</string>
@@ -1667,7 +1669,7 @@
<string name="master_clear_desc_also_erases_esim" msgid="4497260499055258773"><li>"شرائح eSIM"</li></string>
<string name="master_clear_desc_no_cancel_mobile_plan" msgid="6072668588881679461">\n\n"لن يؤدي هذا إلى إلغاء خطة خدمة الجوّال."</string>
<string name="master_clear_desc_erase_external_storage" product="nosdcard" msgid="2723272952715259307">\n\n"لمحو الموسيقى والصور وبيانات المستخدم الأخرى أيضًا، يجب محو "<b>"وحدة تخزين USB"</b>"."</string>
- <string name="master_clear_desc_erase_external_storage" product="default" msgid="9003555775524798797">\n\n"لمحو الموسيقى والصور وبيانات المستخدم الأخرى أيضًا، يجب مسح "<b>"بطاقة SD"</b>"."</string>
+ <string name="master_clear_desc_erase_external_storage" product="default" msgid="9003555775524798797">\n\n"لمحو الموسيقى والصور وبيانات المستخدم الأخرى أيضًا، يجب محو "<b>"بطاقة SD"</b>"."</string>
<string name="erase_external_storage" product="nosdcard" msgid="8989746770347525207">"محو وحدة تخزين USB"</string>
<string name="erase_external_storage" product="default" msgid="194249742376770215">"محو بطاقة SD"</string>
<string name="erase_external_storage_description" product="nosdcard" msgid="8020275102431496261">"محو جميع البيانات على وحدة تخزين USB الداخلية، مثل الموسيقى أو الصور"</string>
@@ -1717,13 +1719,13 @@
<string name="network_scorer_change_active_dialog_text" msgid="4264089809189760730">"هل تريد استخدام <xliff:g id="NEW_APP">%1$s</xliff:g> بدلاً من <xliff:g id="CURRENT_APP">%2$s</xliff:g> لإدارة اتصالات الشبكة لديك؟"</string>
<string name="network_scorer_change_active_no_previous_dialog_text" msgid="6394483538843474495">"هل تريد استخدام <xliff:g id="NEW_APP">%s</xliff:g> لإدارة اتصالات الشبكة لديك؟"</string>
<string name="mobile_unknown_sim_operator" msgid="872589370085135817">"مشغل SIM (مشغل شبكة الجوّال) غير معروف"</string>
- <string name="mobile_no_provisioning_url" msgid="3216517414902166131">"ليس لدى <xliff:g id="OPERATOR">%1$s</xliff:g> موقع ويب معروف لإدارة حسابات"</string>
+ <string name="mobile_no_provisioning_url" msgid="3216517414902166131">"ليس لدى <xliff:g id="OPERATOR">%1$s</xliff:g> موقع إلكتروني معروف لإدارة حسابات"</string>
<string name="mobile_insert_sim_card" msgid="7594550403454243732">"يُرجى إدخال شريحة SIM وإعادة التشغيل"</string>
<string name="mobile_connect_to_internet" msgid="6031886097365170913">"يُرجى الاتصال بالإنترنت"</string>
<string name="location_title" msgid="8664674161765477168">"موقعي"</string>
<string name="managed_profile_location_switch_title" msgid="8157384427925389680">"موقع الملف الشخصي للعمل"</string>
<string name="location_app_level_permissions" msgid="1298041503927632960">"إذن التطبيقات"</string>
- <string name="location_app_permission_summary_location_off" msgid="541372845344796336">"تم إيقاف خدمة الموقع الجغرافي."</string>
+ <string name="location_app_permission_summary_location_off" msgid="541372845344796336">"الموقع الجغرافي غير مفعّل"</string>
<plurals name="location_app_permission_summary_location_on" formatted="false" msgid="7904821382328758218">
<item quantity="zero">لدى <xliff:g id="BACKGROUND_LOCATION_APP_COUNT_2">%1$d</xliff:g> من أصل <xliff:g id="TOTAL_LOCATION_APP_COUNT_3">%2$d</xliff:g> تطبيق إذن وصول غير محدود.</item>
<item quantity="two">لدى <xliff:g id="BACKGROUND_LOCATION_APP_COUNT_2">%1$d</xliff:g> من أصل <xliff:g id="TOTAL_LOCATION_APP_COUNT_3">%2$d</xliff:g> تطبيق إذن وصول غير محدود.</item>
@@ -1760,8 +1762,8 @@
<string name="location_sources_heading" msgid="8526658357120282741">"مصادر الموقع"</string>
<string name="about_settings" product="tablet" msgid="4869626690708456341">"لمحة عن الجهاز اللوحي"</string>
<string name="about_settings" product="default" msgid="6019547763377294261">"لمحة عن الهاتف"</string>
- <string name="about_settings" product="device" msgid="1770438316234693655">"لمحة حول الجهاز"</string>
- <string name="about_settings" product="emulator" msgid="4497482494770487014">"حول الجهاز في وضع المحاكاة"</string>
+ <string name="about_settings" product="device" msgid="1770438316234693655">"لمحة عن الجهاز"</string>
+ <string name="about_settings" product="emulator" msgid="4497482494770487014">"لمحة عن الجهاز في وضع المحاكاة"</string>
<string name="about_settings_summary" msgid="4506081667462281647">"عرض المعلومات القانونية والحالة وإصدار البرنامج"</string>
<string name="legal_information" msgid="2374267257615182139">"المعلومات القانونية"</string>
<string name="contributors_title" msgid="6800028420806884340">"المساهمون"</string>
@@ -1797,10 +1799,10 @@
<string name="lockpassword_confirm_passwords_dont_match" msgid="1783767008133345784">"كلمات المرور غير متطابقة"</string>
<string name="lockpassword_confirm_pins_dont_match" msgid="5444357293637748942">"أرقام التعريف الشخصي غير متطابقة"</string>
<string name="lockpassword_draw_your_pattern_again_header" msgid="9017394036814402348">"ارسم النقش مرة أخرى"</string>
- <string name="lockpassword_choose_lock_generic_header" msgid="4418423132980560119">"تحديد طريقة فتح القفل"</string>
- <string name="lockpassword_password_set_toast" msgid="601928982984489868">"تم تعيين كلمة المرور"</string>
- <string name="lockpassword_pin_set_toast" msgid="172594825722240059">"تم تعيين رمز PIN"</string>
- <string name="lockpassword_pattern_set_toast" msgid="6923260369475481406">"تم تعيين النقش"</string>
+ <string name="lockpassword_choose_lock_generic_header" msgid="4418423132980560119">"اختيار طريقة فتح القفل"</string>
+ <string name="lockpassword_password_set_toast" msgid="601928982984489868">"تم ضبط كلمة المرور"</string>
+ <string name="lockpassword_pin_set_toast" msgid="172594825722240059">"تم ضبط رمز PIN"</string>
+ <string name="lockpassword_pattern_set_toast" msgid="6923260369475481406">"تم ضبط النقش"</string>
<string name="lockpassword_choose_your_password_header_for_face" msgid="8823110536502072216">"لاستخدام المصادقة بالوجه، اضبط كلمة المرور"</string>
<string name="lockpassword_choose_your_pattern_header_for_face" msgid="5563793748503883666">"لاستخدام المصادقة بالوجه، اضبط النمط"</string>
<string name="lockpassword_choose_your_pin_header_for_face" msgid="7238352632535405068">"لاستخدام المصادقة بالوجه، اضبط رقم التعريف الشخصي"</string>
@@ -1816,9 +1818,9 @@
<string name="lockpassword_strong_auth_required_work_pattern" msgid="6861154706098327320">"استخدام نقش للملف الشخصي للعمل لزيادة الأمان"</string>
<string name="lockpassword_strong_auth_required_work_pin" msgid="6306902249365524526">"إدخال رقم تعريف شخصي للملف الشخصي للعمل لزيادة الأمان"</string>
<string name="lockpassword_strong_auth_required_work_password" msgid="2917338218971012776">"إدخال كلمة مرور للملف الشخصي للعمل لزيادة الأمان"</string>
- <string name="lockpassword_confirm_your_pattern_details_frp" msgid="1085862410379709928">"تم إعادة تعيين هاتفك على الإعدادات الأصلية. لاستخدام هذا الهاتف، أدخل النقش السابق."</string>
- <string name="lockpassword_confirm_your_pin_details_frp" msgid="6849889353126558761">"تم إعادة تعيين هاتفك على الإعدادات الأصلية. لاستخدام هذا الهاتف، أدخل رقم التعريف الشخصي السابق."</string>
- <string name="lockpassword_confirm_your_password_details_frp" msgid="3239944795659418737">"تم إعادة تعيين هاتفك على الإعدادات الأصلية. لاستخدام هذا الهاتف، أدخل كلمة المرور السابقة."</string>
+ <string name="lockpassword_confirm_your_pattern_details_frp" msgid="1085862410379709928">"تم إعادة ضبط هاتفك على الإعدادات الأصلية. لاستخدام هذا الهاتف، أدخل النقش السابق."</string>
+ <string name="lockpassword_confirm_your_pin_details_frp" msgid="6849889353126558761">"تم إعادة ضبط هاتفك على الإعدادات الأصلية. لاستخدام هذا الهاتف، أدخل رقم التعريف الشخصي السابق."</string>
+ <string name="lockpassword_confirm_your_password_details_frp" msgid="3239944795659418737">"تم إعادة ضبط هاتفك على الإعدادات الأصلية. لاستخدام هذا الهاتف، أدخل كلمة المرور السابقة."</string>
<string name="lockpassword_confirm_your_pattern_header_frp" msgid="3290569334665839860">"التحقق من النقش"</string>
<string name="lockpassword_confirm_your_pin_header_frp" msgid="8520474869079710782">"التحقق من رقم التعريف الشخصي"</string>
<string name="lockpassword_confirm_your_password_header_frp" msgid="7326670978891793470">"التحقق من كلمة المرور"</string>
@@ -1841,7 +1843,7 @@
<string name="lockpattern_continue_button_text" msgid="3328913552656376892">"متابعة"</string>
<string name="lockpattern_settings_title" msgid="5152005866870766842">"نقش فتح القفل"</string>
<string name="lockpattern_settings_enable_title" msgid="8508410891939268080">"النقش مطلوب"</string>
- <string name="lockpattern_settings_enable_summary" msgid="8027605503917737512">"يجب رسم نقش لإلغاء تأمين الشاشة"</string>
+ <string name="lockpattern_settings_enable_summary" msgid="8027605503917737512">"يجب رسم نقش لإلغاء قفل الشاشة"</string>
<string name="lockpattern_settings_enable_visible_pattern_title" msgid="4935583222709647096">"جعل النقش مرئيًا"</string>
<string name="lockpattern_settings_enable_visible_pattern_title_profile" msgid="5338893138982642228">"إظهار نقش الملف الشخصي"</string>
<string name="lockpattern_settings_enable_tactile_feedback_title" msgid="3203621862806531947">"اهتزاز عند النقر"</string>
@@ -1911,7 +1913,7 @@
<string name="app_factory_reset" msgid="8718986000278776272">"إزالة التحديثات"</string>
<string name="auto_launch_enable_text" msgid="3372898942144027341">"لقد اخترت تشغيل هذا التطبيق بشكل تلقائي لبعض الإجراءات."</string>
<string name="always_allow_bind_appwidgets_text" msgid="2286211654774611037">"لقد اخترت السماح لهذا التطبيق بإنشاء الأدوات والوصول إلى بياناتها."</string>
- <string name="auto_launch_disable_text" msgid="8560921288036801416">"لم يتم تعيين إعدادات تلقائية."</string>
+ <string name="auto_launch_disable_text" msgid="8560921288036801416">"لم يتم ضبط إعدادات تلقائية."</string>
<string name="clear_activities" msgid="2068014972549235347">"محو الإعدادات التلقائية"</string>
<string name="screen_compatibility_text" msgid="1768064020294301496">"ربما لم يتم تصميم هذا التطبيق ليلائم شاشتك، يمكنك التحكم في كيفية ضبطه ليلائم شاشتك هنا."</string>
<string name="ask_compatibility" msgid="6687958195768084807">"السؤال عند الإطلاق"</string>
@@ -1944,11 +1946,11 @@
<string name="recompute_size" msgid="4290692197892743928">"جارٍ إعادة حساب الحجم..."</string>
<string name="clear_data_dlg_title" msgid="7388024498687029597">"هل تريد حذف بيانات التطبيق؟"</string>
<string name="clear_data_dlg_text" msgid="6849657743695013414">"سيتم حذف جميع بيانات هذا التطبيق نهائيًا. ويشمل ذلك جميع الملفات والإعدادات والحسابات وقواعد البيانات وما إلى ذلك."</string>
- <string name="dlg_ok" msgid="4666570206507476557">"موافق"</string>
+ <string name="dlg_ok" msgid="4666570206507476557">"حسنًا"</string>
<string name="dlg_cancel" msgid="2434951039156262467">"إلغاء"</string>
<string name="app_not_found_dlg_title" msgid="394147475018718483"></string>
<string name="app_not_found_dlg_text" msgid="8807428608938210212">"لم يتم العثور على التطبيق في قائمة التطبيقات المثبتة."</string>
- <string name="clear_failed_dlg_text" msgid="8072859778950498232">"تعذّر مسح مساحة تخزين للتطبيق."</string>
+ <string name="clear_failed_dlg_text" msgid="8072859778950498232">"تعذّر محو مساحة تخزين للتطبيق."</string>
<string name="join_two_items" msgid="3833831843199356403">"<xliff:g id="FIRST_ITEM">%1$s</xliff:g> و<xliff:g id="SECOND_ITEM">%2$s</xliff:g>"</string>
<string name="join_two_unrelated_items" msgid="8257688498236358394">"<xliff:g id="FIRST_ITEM">%1$s</xliff:g> و<xliff:g id="SECOND_ITEM">%2$s</xliff:g>"</string>
<string name="computing_size" msgid="2234106107535318136">"جارٍ الحساب..."</string>
@@ -1959,7 +1961,7 @@
<string name="move_app_to_internal" product="default" msgid="1031111519418252055">"نقل إلى الهاتف"</string>
<string name="move_app_to_sdcard" product="nosdcard" msgid="5555917755995563518">"نقل إلى وحدة تخزين USB"</string>
<string name="move_app_to_sdcard" product="default" msgid="2348845109583354505">"نقل إلى بطاقة SD"</string>
- <string name="another_migration_already_in_progress" msgid="3159694008286196454">"هناك عملية ترحيل أخرى قيد التقدم حاليًا."</string>
+ <string name="another_migration_already_in_progress" msgid="3159694008286196454">"هناك عملية نقل أخرى قيد التقدم حاليًا."</string>
<string name="insufficient_storage" msgid="7089626244018569405">"ليست هناك مساحة تخزين كافية."</string>
<string name="does_not_exist" msgid="4821267479183197109">"التطبيق غير موجود."</string>
<string name="invalid_location" msgid="8057409982223429673">"موقع التثبيت غير صالح."</string>
@@ -2075,7 +2077,7 @@
<string name="user_dict_settings_add_screen_title" msgid="8164998107273393830">"عبارة"</string>
<string name="user_dict_settings_add_dialog_more_options" msgid="577584009496650183">"خيارات أكثر"</string>
<string name="user_dict_settings_add_dialog_less_options" msgid="5678408488188525719">"خيارات أقل"</string>
- <string name="user_dict_settings_add_dialog_confirm" msgid="7279673661732968137">"موافق"</string>
+ <string name="user_dict_settings_add_dialog_confirm" msgid="7279673661732968137">"حسنًا"</string>
<string name="user_dict_settings_add_word_option_name" msgid="5310204485783762787">"الكلمة:"</string>
<string name="user_dict_settings_add_shortcut_option_name" msgid="1494012163016712256">"الاختصار:"</string>
<string name="user_dict_settings_add_locale_option_name" msgid="6589803829089582686">"اللغة:"</string>
@@ -2142,10 +2144,10 @@
<string name="accessibility_screen_magnification_navbar_short_summary" msgid="5418767043532322397">"انقر على أحد الأزرار للتكبير"</string>
<string name="accessibility_screen_magnification_summary" msgid="3363006902079431772"><b>"للتكبير أو التصغير"</b>"، انقر على الشاشة 3 مرات بسرعة.\n"<ul><li>"اسحب بإصبعين أو أكثر للتمرير"</li>\n<li>"اضغط بإصبعين أو أكثر على الشاشة لضبط التكبير/التصغير"</li></ul>\n\n<b>"للتكبير أو التصغير مؤقتًا"</b>"، انقر على الشاشة 3 مرات بسرعة واستمر بالضغط بإصبعك بعد النقرة الثالثة.\n"<ul><li>"اسحب للتنقل على الشاشة"</li>\n<li>"ارفع إصبعك للتصغير"</li></ul>\n\n"لا يمكنك استخدام التكبير عند استخدام لوحة المفاتيح وشريط التنقل."</string>
<string name="accessibility_screen_magnification_navbar_summary" msgid="4726360285256503132">"عند تفعيل ميزة التكبير، استخدم زر إمكانية الوصول في أسفل الشاشة للتكبير بسرعة.\n\n"<b>"للتكبير أو التصغير"</b>"، انقر على زر إمكانية الوصول، ثم انقر في أي مكان على الشاشة.\n"<ul><li>"اسحب بإصبعين أو أكثر للتمرير"</li>\n<li>"اضغط بإصبعين أو أكثر على الشاشة لضبط التكبير/التصغير"</li></ul>\n\n<b>"للتكبير أو التصغير مؤقتًا"</b>"، انقر على زر إمكانية الوصول، ثم المس أي موضع على الشاشة مع الاستمرار.\n"<ul><li>"اسحب للتنقل على الشاشة"</li>\n<li>"ارفع إصبعك للتصغير"</li></ul>\n\n"لا يمكنك استخدام التكبير عند استخدام لوحة المفاتيح وشريط التنقل."</string>
- <string name="accessibility_screen_magnification_navbar_configuration_warning" msgid="6477234309484795550">"تم تعيين زر إمكانية الوصول لخدمة <xliff:g id="SERVICE">%1$s</xliff:g>. لاستخدام التكبير، المس زر إمكانية الوصول مع الاستمرار ثم اختر التكبير."</string>
+ <string name="accessibility_screen_magnification_navbar_configuration_warning" msgid="6477234309484795550">"تم ضبط زر إمكانية الوصول لخدمة <xliff:g id="SERVICE">%1$s</xliff:g>. لاستخدام التكبير، المس زر إمكانية الوصول مع الاستمرار ثم اختر التكبير."</string>
<string name="accessibility_global_gesture_preference_title" msgid="3842279082831426816">"مفتاح الاختصار لمستوى الصوت"</string>
<string name="accessibility_shortcut_service_title" msgid="3516052294376744060">"خدمة الاختصار"</string>
- <string name="accessibility_shortcut_service_on_lock_screen_title" msgid="1279441617927949980">"السماح من شاشة التأمين"</string>
+ <string name="accessibility_shortcut_service_on_lock_screen_title" msgid="1279441617927949980">"السماح من شاشة القفل"</string>
<string name="accessibility_shortcut_description" msgid="1427049334225166395">"عندما يكون مفتاح الاختصار قيد التفعيل، يمكنك الضغط على مفتاحي مستوى الصوت لمدة 3 ثوانٍ لبدء تشغيل إحدى ميزات إمكانية الوصول."</string>
<string name="accessibility_toggle_high_text_contrast_preference_title" msgid="5652244684961877255">"نص ذو درجة تباين عالية"</string>
<string name="accessibility_toggle_screen_magnification_auto_update_preference_title" msgid="2466317284195934003">"التحديث التلقائي لتكبير الشاشة"</string>
@@ -2177,9 +2179,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"الاهتزاز عند تلقّي إشعارات"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"الاهتزاز عند الرنين"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"اهتزاز الجهاز عند لمسه"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"استخدام الخدمة"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"استخدام تصحيح الألوان"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"استخدام الترجمة"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"استخدام الخدمة"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"استخدام ميزة \"تصحيح الألوان\""</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"استخدام الشرح"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"متابعة"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"سماعات الأذن الطبية"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"لم يتم توصيل سماعات أذن طبية"</string>
@@ -2286,14 +2288,14 @@
<string name="enable_service_title" msgid="2746143093464928251">"هل تريد استخدام <xliff:g id="SERVICE">%1$s</xliff:g>؟"</string>
<string name="capabilities_list_title" msgid="8177719542886123788">"خدمة <xliff:g id="SERVICE">%1$s</xliff:g> تحتاج إلى:"</string>
<string name="touch_filtered_warning" msgid="3072665526993043879">"نظرًا لأن هناك تطبيقًا يحجب طلب الإذن، لا تستطيع الإعدادات التحقق من ردك."</string>
- <string name="enable_service_encryption_warning" msgid="3580275420826492351">"في حالة تفعيل <xliff:g id="SERVICE">%1$s</xliff:g>، لن يستخدم جهازك ميزة قفل الشاشة لتحسين تشفير البيانات."</string>
- <string name="secure_lock_encryption_warning" msgid="8724670910924531152">"لن يستخدم جهازك ميزة قفل الشاشة لتحسين تشفير البيانات، وذلك لأنك قد فعّلت إحدى خدمات إمكانية الوصول."</string>
- <string name="enable_service_pattern_reason" msgid="7415969807374459848">"نظرًا لأن تشغيل <xliff:g id="SERVICE">%1$s</xliff:g> يؤثر في تشفير البيانات، يجب تأكيد النقش."</string>
- <string name="enable_service_pin_reason" msgid="2899057249007636608">"نظرًا لأن تشغيل <xliff:g id="SERVICE">%1$s</xliff:g> يؤثر في تشفير البيانات، يجب تأكيد رقم التعريف الشخصي."</string>
- <string name="enable_service_password_reason" msgid="5210815233227388083">"نظرًا لأن تشغيل <xliff:g id="SERVICE">%1$s</xliff:g> يؤثر في تشفير البيانات، يجب تأكيد كلمة المرور."</string>
+ <string name="enable_service_encryption_warning" msgid="3580275420826492351">"في حالة تفعيل <xliff:g id="SERVICE">%1$s</xliff:g>، لن يستخدم جهازك ميزة قفل الشاشة لتحسين ترميز البيانات."</string>
+ <string name="secure_lock_encryption_warning" msgid="8724670910924531152">"لن يستخدم جهازك ميزة قفل الشاشة لتحسين ترميز البيانات، وذلك لأنك قد فعّلت إحدى خدمات إمكانية الوصول."</string>
+ <string name="enable_service_pattern_reason" msgid="7415969807374459848">"نظرًا لأن تشغيل <xliff:g id="SERVICE">%1$s</xliff:g> يؤثر في ترميز البيانات، يجب تأكيد النقش."</string>
+ <string name="enable_service_pin_reason" msgid="2899057249007636608">"نظرًا لأن تشغيل <xliff:g id="SERVICE">%1$s</xliff:g> يؤثر في ترميز البيانات، يجب تأكيد رقم التعريف الشخصي."</string>
+ <string name="enable_service_password_reason" msgid="5210815233227388083">"نظرًا لأن تشغيل <xliff:g id="SERVICE">%1$s</xliff:g> يؤثر في ترميز البيانات، يجب تأكيد كلمة المرور."</string>
<string name="accessibility_service_warning" msgid="345702253188068806">"تطلب خدمة <xliff:g id="SERVICE">%1$s</xliff:g> الحصول على تحكم كامل في هذا الجهاز. ويمكن للخدمة قراءة الشاشة والتصرف بالنيابة عن المستخدمين ذوي الاحتياجات المتعلقة بإمكانية الوصول. ولا يناسب هذا المستوى من التحكم معظم التطبيقات."</string>
<string name="disable_service_title" msgid="6234243399949005825">"هل تريد إيقاف <xliff:g id="SERVICE">%1$s</xliff:g>؟"</string>
- <string name="disable_service_message" msgid="4250593674885651779">"يؤدي النقر على \"موافق\" إلى إيقاف <xliff:g id="SERVICE">%1$s</xliff:g>."</string>
+ <string name="disable_service_message" msgid="4250593674885651779">"يؤدي النقر على \"حسنًا\" إلى إيقاف <xliff:g id="SERVICE">%1$s</xliff:g>."</string>
<string name="accessibility_no_services_installed" msgid="6979918129976547334">"لم يتم تثبيت أي خدمات"</string>
<string name="accessibility_no_service_selected" msgid="3909390566736834080">"لم يتم اختيار أي خدمة"</string>
<string name="accessibility_service_default_description" msgid="857921874644864502">"لم يتم تقديم أي وصف."</string>
@@ -2333,7 +2335,7 @@
<string name="print_restart" msgid="4090462480288441779">"إعادة تشغيل"</string>
<string name="print_cancel" msgid="4567831028966698753">"إلغاء"</string>
<string name="print_job_summary" msgid="438156926959424058">"<xliff:g id="PRINTER">%1$s</xliff:g>\n<xliff:g id="TIME">%2$s</xliff:g>"</string>
- <string name="print_configuring_state_title_template" msgid="5052801061241050737">"جارٍ تهيئة <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
+ <string name="print_configuring_state_title_template" msgid="5052801061241050737">"جارٍ إعداد <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="print_printing_state_title_template" msgid="8796814912920963803">"جارٍ طباعة <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="print_cancelling_state_title_template" msgid="4627355699517405600">"جارٍ إلغاء <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
<string name="print_failed_state_title_template" msgid="6575080578316671101">"خطأ في الطابعة في تنفيذ <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
@@ -2395,7 +2397,7 @@
<string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"قد تنفد البطارية قبل الوقت المعتاد."</string>
<string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"تم تفعيل \"ميزة توفير شحن البطارية\"."</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"قد تكون بعض الميزات مقيّدة."</string>
- <string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"الهاتف المستخدَم أكثر من المعتاد"</string>
+ <string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"مقدار استخدام الهاتف أكثر من المعتاد"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"الجهاز اللوحي المستخدَم أكثر من المعتاد"</string>
<string name="battery_tip_high_usage_title" product="device" msgid="8304138287288309490">"الجهاز المستخدَم أكثر من المعتاد"</string>
<string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"قد تنفد البطارية قبل الوقت المعتاد."</string>
@@ -2425,7 +2427,7 @@
<item quantity="few">هناك %2$d تطبيقات تستخدم البطارية في الخلفية بدرجة عالية</item>
<item quantity="many">هناك %2$d تطبيقًا يستخدم البطارية في الخلفية بدرجة عالية</item>
<item quantity="other">هناك %2$d تطبيق يستخدم البطارية في الخلفية بدرجة عالية</item>
- <item quantity="one">يستخدم تطبيق %1$s البطارية في الخلفية بدرجة عالية</item>
+ <item quantity="one">هناك تطبيق واحد (%1$s) يستخدم البطارية في الخلفية بدرجة عالية</item>
</plurals>
<plurals name="battery_tip_restrict_handled_summary" formatted="false" msgid="469696766640020557">
<item quantity="zero">يتعذّر تشغيل هذه التطبيقات في الخلفية.</item>
@@ -2544,7 +2546,7 @@
<string name="battery_desc_standby" product="tablet" msgid="2941777996429933419">"البطارية المستخدمة عندما يكون الجهاز اللوحي خاملاً"</string>
<string name="battery_desc_standby" product="default" msgid="8889482616564520287">"يتم استخدام البطارية عندما يكون الهاتف في وضع الخمول"</string>
<string name="battery_desc_radio" msgid="5119078473833865414">"البطارية مستخدمة بواسطة الراديو الخلوي"</string>
- <string name="battery_sugg_radio" msgid="3616364509738133415">"تبديل إلى وضع الطائرة للحفاظ على الطاقة في المناطق التي لا توجد بها تغطية للشبكة"</string>
+ <string name="battery_sugg_radio" msgid="3616364509738133415">"تبديل إلى وضع الطيران للحفاظ على الطاقة في المناطق التي لا توجد بها تغطية للشبكة"</string>
<string name="battery_desc_flashlight" msgid="4574819522143720917">"طاقة البطارية المستخدمة بواسطة ضوء الفلاش"</string>
<string name="battery_desc_camera" msgid="517966830222999462">"طاقة البطارية التي استهلكتها الكاميرا"</string>
<string name="battery_desc_display" msgid="6701005808894183097">"طاقة البطارية المستخدمة بواسطة العرض والإضاءة الخلفية"</string>
@@ -2603,13 +2605,13 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"تفعيل"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"استخدام الوضع \"توفير شحن البطارية\""</string>
- <string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"التشغيل تلقائيًا"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"استخدام ميزة \"توفير شحن البطارية\""</string>
+ <string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"التفعيل تلقائيًا"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"أبدًا"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"البطارية عند مستوى <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<string name="battery_percentage" msgid="7782252476471033843">"نسبة شحن البطارية"</string>
<string name="battery_percentage_description" msgid="9219875229166700610">"عرض نسبة شحن البطارية في شريط الحالة"</string>
- <string name="process_stats_summary_title" msgid="9189588417488537954">"إحصائيات العمليات"</string>
+ <string name="process_stats_summary_title" msgid="9189588417488537954">"إحصاءات العمليات"</string>
<string name="process_stats_summary" msgid="8077998499161221885">"الإحصائيات التقنية حول العمليات الجارية"</string>
<string name="app_memory_use" msgid="5126237308545653706">"استخدام الذاكرة"</string>
<string name="process_stats_total_duration" msgid="4013432468516155868">"تم استخدام <xliff:g id="USEDRAM">%1$s</xliff:g> من إجمالي <xliff:g id="TOTALRAM">%2$s</xliff:g> خلال آخر <xliff:g id="TIMEDURATION">%3$s</xliff:g>"</string>
@@ -2705,7 +2707,7 @@
<string name="backup_erase_dialog_title" msgid="8178424339104463014"></string>
<string name="backup_erase_dialog_message" msgid="8767843355330070902">"هل تريد إيقاف النسخ الاحتياطي لكلمات مرور Wi-Fi والإشارات المرجعية والإعدادات الأخرى وبيانات التطبيقات ومحو جميع النُسخ على خوادم Google؟"</string>
<string name="fullbackup_erase_dialog_message" msgid="2588536036471144070">"هل تريد إيقاف الاحتفاظ بنسخة احتياطية من بيانات الجهاز (مثل كلمات مرور Wi-Fi وسجل المكالمات) وبيانات التطبيقات (مثل الإعدادات والملفات التي تخزنها التطبيقات) بالإضافة إلى محو بيانات جميع النسخ الموجودة على الخوادم البعيدة؟"</string>
- <string name="fullbackup_data_summary" msgid="406274198094268556">"بإمكانك الاحتفاظ تلقائيًا بنسخة احتياطية من بيانات الجهاز (مثل كلمات مرور Wi-Fi وسجل المكالمات) وبيانات التطبيقات (مثل الإعدادات والملفات التي تخزنها التطبيقات) عن بُعد.\n\nعند تشغيل الاحتفاظ التلقائي بنسخة احتياطية، يتم بشكل دوري حفظ بيانات الجهاز وبيانات التطبيقات عن بُعد. ويمكن أن تكون بيانات التطبيقات أي بيانات تم حفظها في التطبيق (استنادًا إلى إعدادات مطور التطبيق) بما في ذلك البيانات المحتمل أن تكون حساسة مثل جهات الاتصال والرسائل والصور."</string>
+ <string name="fullbackup_data_summary" msgid="406274198094268556">"بإمكانك الاحتفاظ تلقائيًا بنسخة احتياطية من بيانات الجهاز (مثل كلمات مرور Wi-Fi وسجل المكالمات) وبيانات التطبيقات (مثل الإعدادات والملفات التي تخزنها التطبيقات) عن بُعد.\n\nعند تفعيل الاحتفاظ التلقائي بنسخة احتياطية، يتم بشكل دوري حفظ بيانات الجهاز وبيانات التطبيقات عن بُعد. ويمكن أن تكون بيانات التطبيقات أي بيانات تم حفظها في التطبيق (استنادًا إلى إعدادات مطور التطبيق) بما في ذلك البيانات المحتمل أن تكون حساسة مثل جهات الاتصال والرسائل والصور."</string>
<string name="device_admin_settings_title" msgid="2074319456047334589">"إعدادات مشرف الجهاز"</string>
<string name="active_device_admin_msg" msgid="6929247869516924549">"تطبيق مشرف الجهاز"</string>
<string name="remove_device_admin" msgid="4413438593788336400">"إيقاف تطبيق مشرف الجهاز"</string>
@@ -2776,7 +2778,7 @@
<string name="really_remove_account_message" product="device" msgid="3751798556257519916">"ستؤدي إزالة هذا الحساب إلى إزالة جميع رسائله وجهات الاتصال الخاصة به وبياناته الأخرى من الجهاز."</string>
<string name="remove_account_failed" msgid="491458185327106966">"لا يسمح المشرف بإجراء هذا التغيير"</string>
<string name="cant_sync_dialog_title" msgid="5483419398223189881">"لا يمكن المزامنة يدويًا"</string>
- <string name="cant_sync_dialog_message" msgid="3467126947262857534">"مزامنة هذا العنصر غير مفعّلة في الوقت الحالي. لتغيير هذا الإعداد، شغّل بشكل مؤقت بيانات الخلفية والمزامنة التلقائية."</string>
+ <string name="cant_sync_dialog_message" msgid="3467126947262857534">"مزامنة هذا العنصر غير مفعّلة في الوقت الحالي. لتغيير هذا الإعداد، فعِّل بشكل مؤقت بيانات الخلفية والمزامنة التلقائية."</string>
<string name="enter_password" msgid="2963496904625715235">"لبدء تشغيل Android، أدخل كلمة المرور"</string>
<string name="enter_pin" msgid="7140938268709546890">"لبدء تشغيل Android، أدخل رقم التعريف الشخصي"</string>
<string name="enter_pattern" msgid="1653841963422825336">"لبدء تشغيل Android، ارسم النقش"</string>
@@ -2787,7 +2789,7 @@
<string name="starting_android" msgid="4774187626261253089">"جارٍ تشغيل Android…"</string>
<string name="delete" msgid="2325292565700865366">"حذف"</string>
<string name="misc_files" msgid="1012397035001764693">"ملفات متنوعة"</string>
- <string name="misc_files_selected_count" msgid="1434146080729502726">"تم تحديد <xliff:g id="NUMBER">%1$d</xliff:g> من إجمالي <xliff:g id="TOTAL">%2$d</xliff:g>"</string>
+ <string name="misc_files_selected_count" msgid="1434146080729502726">"تم اختيار <xliff:g id="NUMBER">%1$d</xliff:g> من إجمالي <xliff:g id="TOTAL">%2$d</xliff:g>"</string>
<string name="misc_files_selected_count_bytes" msgid="3752262902203465861">"<xliff:g id="NUMBER">%1$s</xliff:g> من إجمالي <xliff:g id="TOTAL">%2$s</xliff:g>"</string>
<string name="select_all" msgid="452240217913675728">"اختيار الكل"</string>
<string name="data_usage_summary_title" msgid="7288431048564861043">"استخدام البيانات"</string>
@@ -2820,7 +2822,7 @@
<string name="data_usage_label_foreground" msgid="2471091128648754601">"المقدمة"</string>
<string name="data_usage_label_background" msgid="1618794447370396845">"الخلفية"</string>
<string name="data_usage_app_restricted" msgid="7569077654579299326">"مقيَّد"</string>
- <string name="data_usage_disable_mobile" msgid="4125335076749119451">"هل تريد إيقاف تفعيل بيانات الجوّال؟"</string>
+ <string name="data_usage_disable_mobile" msgid="4125335076749119451">"هل تريد إيقاف بيانات الجوّال؟"</string>
<string name="data_usage_disable_mobile_limit" msgid="1937796699758613667">"تعيين حد لبيانات الجوال"</string>
<string name="data_usage_disable_4g_limit" msgid="7131367986548147266">"تعيين حد بيانات لـ 4G"</string>
<string name="data_usage_disable_3g_limit" msgid="6746819313032692220">"تعيين حد لبيانات 2G-3G"</string>
@@ -2920,18 +2922,18 @@
<string name="vpn_forget_long" msgid="8457511440635534478">"نسيان الشبكة الافتراضية الخاصة"</string>
<string name="vpn_replace_vpn_title" msgid="8517436922021598103">"هل تريد استبدال الشبكة الافتراضية الخاصة الحالية؟"</string>
<string name="vpn_set_vpn_title" msgid="6483554732067951052">"هل تريد تشغيل الشبكة الافتراضية الخاصة باستمرار؟"</string>
- <string name="vpn_first_always_on_vpn_message" msgid="7050017738816963855">"عند تشغيل هذا الإعداد، لن تتمكن من الاتصال بالإنترنت إلا بعد أن ينجح اتصال الشبكة الافتراضية الخاصة (VPN)"</string>
+ <string name="vpn_first_always_on_vpn_message" msgid="7050017738816963855">"عند تفعيل هذا الإعداد، لن تتمكن من الاتصال بالإنترنت إلا بعد أن ينجح اتصال الشبكة الافتراضية الخاصة (VPN)"</string>
<string name="vpn_replace_always_on_vpn_enable_message" msgid="4149931501300203205">"سيتم استبدال شبكتك الافتراضية الخاصة (VPN) الحالية ولن تتمكن من الاتصال بالإنترنت إلا بعد أن ينجح اتصال الشبكة الافتراضية الخاصة (VPN)"</string>
<string name="vpn_replace_always_on_vpn_disable_message" msgid="4924947523200883088">"أنت متصل حاليًا بشبكة افتراضية خاصة (VPN) مضبوطة على وضع التشغيل الدائم. وإذا اتصلت بشبكة افتراضية خاصة أخرى، فسيتم استبدال شبكتك الافتراضية الخاصة الحالية، كما سيتم إيقاف وضع التشغيل الدائم."</string>
<string name="vpn_replace_vpn_message" msgid="8009433728523145393">"أنت متصل حاليًا بشبكة افتراضية خاصة (VPN). وإذا اتصلت بشبكة افتراضية خاصة أخرى، فسيتم استبدال شبكتك الافتراضية الخاصة الحالية."</string>
- <string name="vpn_turn_on" msgid="2334736319093953055">"تشغيل"</string>
+ <string name="vpn_turn_on" msgid="2334736319093953055">"تفعيل"</string>
<string name="vpn_cant_connect_title" msgid="5803347131129293771">"يتعذر الاتصال بـ <xliff:g id="VPN_NAME">%1$s</xliff:g>"</string>
<string name="vpn_cant_connect_message" msgid="7729125036551401236">"لا يتوافق هذا التطبيق مع الشبكة الافتراضية الخاصة (VPN) التي يتم تشغيلها دائمًا"</string>
<string name="vpn_title" msgid="7801918186865029203">"الشبكات الافتراضية الخاصة"</string>
<string name="vpn_create" msgid="2477570636472897359">"إضافة ملف شخصي لشبكة افتراضية خاصة (VPN)"</string>
<string name="vpn_menu_edit" msgid="8061437799373333593">"تعديل الملف الشخصي"</string>
<string name="vpn_menu_delete" msgid="4128305800374946877">"حذف الملف الشخصي"</string>
- <string name="vpn_menu_lockdown" msgid="6951452279924808089">"شبكة افتراضية خاصة (VPN) دائمة التشغيل"</string>
+ <string name="vpn_menu_lockdown" msgid="6951452279924808089">"شبكة افتراضية خاصة (VPN) دائمة التفعيل"</string>
<string name="vpn_no_vpns_added" msgid="6616183541896197147">"لم تتم إضافة أي شبكات افتراضية خاصة (VPN)"</string>
<string name="vpn_always_on_summary" msgid="3639994551631437397">"متابعة الاتصال بشبكة VPN في جميع الأوقات"</string>
<string name="vpn_always_on_summary_not_supported" msgid="9077720997795965133">"عدم التوافق مع هذا التطبيق"</string>
@@ -2940,7 +2942,7 @@
<string name="vpn_require_connection_title" msgid="8361434328767853717">"أيتطلب الأمر اتصالاً بشبكة افتراضية خاصة؟"</string>
<string name="vpn_lockdown_summary" msgid="6770030025737770861">"حدد ملفًا شخصيًا للشبكة الافتراضية الخاصة (VPN) للاتصال الدائم بها. لن يتم السماح بحركة مرور الشبكة إلا عند الاتصال بهذه الشبكة الافتراضية الخاصة."</string>
<string name="vpn_lockdown_none" msgid="3789288793603394679">"بدون"</string>
- <string name="vpn_lockdown_config_error" msgid="8761770968704589885">"تتطلب الشبكة الافتراضية الخاصة (VPN) دائمة التشغيل عنوان IP لكل من الخادم ونظام أسماء النطاقات."</string>
+ <string name="vpn_lockdown_config_error" msgid="8761770968704589885">"تتطلب الشبكة الافتراضية الخاصة (VPN) دائمة التفعيل عنوان IP لكل من الخادم ونظام أسماء النطاقات."</string>
<string name="vpn_no_network" msgid="8313250136194588023">"ليس هناك اتصال بالشبكة. يُرجى إعادة المحاولة لاحقًا."</string>
<string name="vpn_disconnected" msgid="4597953053220332539">"تم قطع الاتصال بالشبكة الافتراضية الخاصة"</string>
<string name="vpn_disconnected_summary" msgid="3784118965271376808">"غير متّصل بشبكة"</string>
@@ -3039,7 +3041,7 @@
<string name="user_cannot_manage_message" product="default" msgid="915260531390608092">"يمكن لمالك الهاتف فقط إدارة المستخدمين."</string>
<string name="user_cannot_add_accounts_message" msgid="5993561303748749097">"لا يمكن للملفات الشخصية إضافة حسابات"</string>
<string name="user_remove_user_menu" msgid="3505139157217459864">"حذف <xliff:g id="USER_NAME">%1$s</xliff:g> من هذا الجهاز"</string>
- <string name="user_lockscreen_settings" msgid="3820813814848394568">"إعدادات شاشة التأمين"</string>
+ <string name="user_lockscreen_settings" msgid="3820813814848394568">"إعدادات شاشة القفل"</string>
<string name="user_add_on_lockscreen_menu" msgid="5211604808199585774">"إضافة المستخدمين من شاشة القفل"</string>
<string name="user_new_user_name" msgid="3880395219777884838">"مستخدم جديد"</string>
<string name="user_new_profile_name" msgid="3074939718101489937">"ملف شخصي جديد"</string>
@@ -3061,7 +3063,7 @@
<string name="user_exit_guest_confirm_message" msgid="6955182181145748919">"سيتم حذف كل التطبيقات والبيانات في هذه الجلسة."</string>
<string name="user_exit_guest_dialog_remove" msgid="1878866060881115716">"إزالة"</string>
<string name="user_enable_calling" msgid="864760054792249503">"تفعيل المكالمات الهاتفية"</string>
- <string name="user_enable_calling_sms" msgid="3450252891736718793">"تشغيل المكالمات الهاتفية والرسائل القصيرة SMS"</string>
+ <string name="user_enable_calling_sms" msgid="3450252891736718793">"تفعيل المكالمات الهاتفية والرسائل القصيرة SMS"</string>
<string name="user_remove_user" msgid="3687544420125911166">"حذف حساب المستخدم"</string>
<string name="user_enable_calling_confirm_title" msgid="1141612415529158542">"هل تريد تفعيل المكالمات الهاتفية؟"</string>
<string name="user_enable_calling_confirm_message" msgid="2490126715153125970">"ستتم مشاركة سجل المكالمات مع هذا المستخدم."</string>
@@ -3076,14 +3078,14 @@
<string name="nfc_payment_how_it_works" msgid="7607901964687787177">"آلية العمل"</string>
<string name="nfc_payment_no_apps" msgid="8844440783395420860">"استخدِم هاتفك للدفع في المتاجر"</string>
<string name="nfc_payment_default" msgid="7869273092463612271">"التطبيق التلقائي للدفع"</string>
- <string name="nfc_payment_default_not_set" msgid="955804193510335338">"لم يتم التعيين"</string>
+ <string name="nfc_payment_default_not_set" msgid="955804193510335338">"لم يتم الضبط"</string>
<string name="nfc_payment_app_and_desc" msgid="102312684211458190">"<xliff:g id="APP">%1$s</xliff:g> - <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
<string name="nfc_payment_use_default" msgid="3098724195746409476">"استخدام التلقائي"</string>
<string name="nfc_payment_favor_default" msgid="7555356982142464260">"دومًا"</string>
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"إلا إذا كان هناك تطبيق دفع آخر مفتوحًا"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"عند أحد أجهزة انقر وادفع الطرفية، يمكنك الدفع باستخدام:"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"الدفع عند الجهاز الطرفي"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"يمكنك إعداد تطبيق للدفع، وبعد ذلك لن يلزمك سوى توصيل الجزء الخلفي من الهاتف بأي جهاز طرفي يحتوي على رمز عدم لمس الجهاز."</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"يمكنك إعداد تطبيق للدفع، وبعد ذلك لن يلزمك سوى الإمساك بالجزء الخلفي من الهاتف أعلى جهاز طرفي يحتوي على رمز الدفع بدون تلامس الأجهزة."</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"حسنًا"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"المزيد..."</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"هل تريد تعيينه كتفضيل؟"</string>
@@ -3141,21 +3143,21 @@
<string name="wizard_finish" msgid="3742102879981212094">"إنهاء"</string>
<string name="user_image_take_photo" msgid="2000247510236178111">"التقاط صورة"</string>
<string name="user_image_choose_photo" msgid="4920315415203051898">"اختيار صورة"</string>
- <string name="user_image_photo_selector" msgid="8429694590849882411">"تحديد صورة"</string>
+ <string name="user_image_photo_selector" msgid="8429694590849882411">"اختيار صورة"</string>
<string name="regulatory_info_text" msgid="9112993912873512834"></string>
<string name="sim_setup_wizard_title" msgid="77627575294867180">"بطاقات SIM"</string>
<string name="sim_settings_title" msgid="8818243954752261922">"بطاقات SIM"</string>
<string name="sim_settings_summary" msgid="6516330865408217800">"<xliff:g id="SIM_NAME">%1$s</xliff:g> - <xliff:g id="SIM_NUMBER">%2$s</xliff:g>"</string>
<string name="sim_cards_changed_message" msgid="1012486903583092731">"تم تغيير بطاقات SIM"</string>
- <string name="sim_cards_changed_message_summary" msgid="5753692480107865077">"انقر لتعيين الأنشطة."</string>
+ <string name="sim_cards_changed_message_summary" msgid="5753692480107865077">"انقر لضبط الأنشطة."</string>
<string name="sim_cellular_data_unavailable" msgid="1832472508352891641">"بيانات الجوّال غير متاحة"</string>
- <string name="sim_cellular_data_unavailable_summary" msgid="3093797406601964131">"انقر لتحديد شريحة SIM للبيانات."</string>
+ <string name="sim_cellular_data_unavailable_summary" msgid="3093797406601964131">"انقر لاختيار شريحة SIM للبيانات."</string>
<string name="sim_calls_always_use" msgid="5322696995795851734">"استخدام هذا للمكالمات دائمًا"</string>
- <string name="select_sim_for_data" msgid="2099705792885526394">"تحديد شريحة SIM للبيانات"</string>
+ <string name="select_sim_for_data" msgid="2099705792885526394">"اختيار شريحة SIM للبيانات"</string>
<string name="select_sim_for_sms" msgid="2481682560233370731">"اختيار شريحة SIM للرسائل القصيرة SMS"</string>
<string name="data_switch_started" msgid="4517966162053949265">"جارٍ تبديل شريحة SIM للبيانات؛ قد يستغرق هذا مدة تصل إلى دقيقة..."</string>
<string name="select_sim_for_calls" msgid="131091573472832807">"الاتصال باستخدام"</string>
- <string name="sim_select_card" msgid="5558215843972182767">"تحديد شريحة SIM"</string>
+ <string name="sim_select_card" msgid="5558215843972182767">"اختيار شريحة SIM"</string>
<string name="sim_card_number_title" msgid="8808663374497085634">"شريحة SIM <xliff:g id="CARD_NUMBER">%1$d</xliff:g>"</string>
<string name="sim_slot_empty" msgid="2710430326225678239">"شريحة SIM فارغة"</string>
<string name="sim_editor_name" msgid="3367549287943555967">"اسم شريحة SIM"</string>
@@ -3164,7 +3166,7 @@
<string name="sim_editor_carrier" msgid="8860370077829961512">"مشغل شبكة الجوّال"</string>
<string name="sim_editor_number" msgid="1757338150165234970">"الرقم"</string>
<string name="sim_editor_color" msgid="373059962306191123">"لون شريحة SIM"</string>
- <string name="sim_card_select_title" msgid="4925862525985187946">"تحديد شريحة SIM"</string>
+ <string name="sim_card_select_title" msgid="4925862525985187946">"اختيار شريحة SIM"</string>
<string name="color_orange" msgid="3159707916066563431">"برتقالي"</string>
<string name="color_purple" msgid="4391440966734810713">"أرجواني"</string>
<string name="sim_no_inserted_msg" msgid="1197884607569714609">"لم يتم إدراج بطاقات SIM"</string>
@@ -3237,7 +3239,7 @@
<string name="keywords_text_to_speech_output" msgid="1337378060761399890">"تقييم، لغة، تلقائي، يتحدث، تحدث، تحويل نص إلى كلام، إمكانية الوصول، قارئ شاشة، مكفوف"</string>
<string name="keywords_date_and_time" msgid="4434079919474174978">"ساعة، عسكرية"</string>
<string name="keywords_network_reset" msgid="2064330046866583215">"إعادة ضبط، استرداد، المصنع"</string>
- <string name="keywords_factory_data_reset" msgid="5865739790670615499">"مسح، حذف، استعادة، محو، إزالة، إعادة الضبط على الإعدادات الأصلية"</string>
+ <string name="keywords_factory_data_reset" msgid="5865739790670615499">"محو، حذف، استعادة، محو، إزالة، إعادة الضبط على الإعدادات الأصلية"</string>
<string name="keywords_printing" msgid="8499167841024606451">"طابعة"</string>
<string name="keywords_sounds" msgid="9155626618185269312">"صفارة مكبر الصوت، مكبر صوت، مستوى الصوت، كتم الصوت، صامت، صوت، موسيقى"</string>
<string name="keywords_sounds_and_notifications_interruptions" msgid="7106220678170229900">"ممنوع الإزعاج، ممنوع، المقاطعة، مقاطعة"</string>
@@ -3269,8 +3271,8 @@
<string name="keywords_financial_apps_sms_access" msgid="3236014691838121857">"تطبيق مالي، رسائل قصيرة sms، إذن"</string>
<string name="keywords_systemui_theme" msgid="9150908170417305866">"مظهر مُعتِم"</string>
<string name="keywords_device_feedback" msgid="6948977907405738490">"خطأ"</string>
- <string name="keywords_ambient_display_screen" msgid="5873935693887583428">"العرض على الشاشة، عرض شاشة التأمين"</string>
- <string name="keywords_lock_screen_notif" msgid="4914337222856805463">"إشعار شاشة التأمين، الإشعارات"</string>
+ <string name="keywords_ambient_display_screen" msgid="5873935693887583428">"العرض على الشاشة، عرض شاشة القفل"</string>
+ <string name="keywords_lock_screen_notif" msgid="4914337222856805463">"إشعار شاشة القفل، الإشعارات"</string>
<string name="keywords_face_settings" msgid="4117345666006836599">"وجه"</string>
<string name="keywords_fingerprint_settings" msgid="902902368701134163">"بصمة إصبع، إضافة بصمة إصبع"</string>
<string name="keywords_display_auto_brightness" msgid="1810596220466483996">"تعتيم الشاشة، شاشة تعمل باللمس، بطارية، سطوع ذكي، سطوع ديناميكي"</string>
@@ -3278,10 +3280,10 @@
<string name="keywords_auto_rotate" msgid="4320791369951647513">"تدوير، قلب، دوران، عمودي، أفقي، اتجاه، رأسي، عرضي"</string>
<string name="keywords_system_update_settings" msgid="4419971277998986067">"ترقية، android"</string>
<string name="keywords_zen_mode_settings" msgid="4103819458182535493">"الرجاء عدم الإزعاج، جدول زمني، إشعارات، حظر، صامت، اهتزاز، سكون، عمل، تركيز، صوت، كتم الصوت، يوم، يوم من الأسبوع، عطلة نهاية الأسبوع، ليلة من الأسبوع، حدث"</string>
- <string name="keywords_screen_timeout" msgid="4328381362313993666">"شاشة، وقت القفل، مهلة، شاشة تأمين"</string>
+ <string name="keywords_screen_timeout" msgid="4328381362313993666">"شاشة، وقت القفل، مهلة، شاشة قفل"</string>
<string name="keywords_storage_settings" msgid="6422454520424236476">"ذاكرة، تخزين مؤقت، بيانات، حذف، محو، فارغة، مساحة"</string>
<string name="keywords_bluetooth_settings" msgid="1152229891590622822">"متصل، جهاز، سماعات رأس، سماعة، مكبر صوت، لاسلكي، إقران، سمّاعات أذن، موسيقى، وسائط"</string>
- <string name="keywords_wallpaper" msgid="7665778626293643625">"خلفية، شاشة، شاشة تأمين، موضوع"</string>
+ <string name="keywords_wallpaper" msgid="7665778626293643625">"خلفية، شاشة، شاشة قفل، موضوع"</string>
<string name="keywords_assist_input" msgid="8392362788794886564">"تلقائي، مساعد"</string>
<string name="keywords_default_payment_app" msgid="845369409578423996">"دفع، تلقائي"</string>
<string name="keywords_ambient_display" msgid="8835182491798487184">"إشعار وارد"</string>
@@ -3293,8 +3295,8 @@
<string name="default_sound" msgid="6675629744816442953">"الصوت التلقائي"</string>
<string name="sound_settings_summary" msgid="8467549670633195109">"مستوى صوت الرنين على <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="5187301919242823508">"مستوى الصوت والاهتزاز ووضع\"عدم الإزعاج\""</string>
- <string name="sound_settings_summary_vibrate" msgid="2194491116884798590">"تم تعيين الرنين على اهتزاز"</string>
- <string name="sound_settings_summary_silent" msgid="899823817462768876">"تم تعيين الرنين على صامت"</string>
+ <string name="sound_settings_summary_vibrate" msgid="2194491116884798590">"تم ضبط الرنين على اهتزاز"</string>
+ <string name="sound_settings_summary_silent" msgid="899823817462768876">"تم ضبط الرنين على صامت"</string>
<string name="sound_settings_example_summary" msgid="2091822107298841827">"مستوى صوت الرنين على ۸۰٪"</string>
<string name="media_volume_option_title" msgid="3553411883305505682">"مستوى صوت الوسائط"</string>
<string name="remote_media_volume_option_title" msgid="6355710054191873836">"مستوى صوت الإرسال"</string>
@@ -3335,7 +3337,7 @@
<item quantity="one">تم تفعيل قاعدة واحدة.</item>
</plurals>
<string name="zen_mode_settings_title" msgid="3425263414594779244">"وضع \"عدم الإزعاج\""</string>
- <string name="zen_mode_settings_turn_on_dialog_title" msgid="3062548369931058282">"تشغيل وضع \"الرجاء عدم الإزعاج\""</string>
+ <string name="zen_mode_settings_turn_on_dialog_title" msgid="3062548369931058282">"تفعيل وضع \"الرجاء عدم الإزعاج\""</string>
<string name="zen_mode_behavior_settings_title" msgid="423125904296667490">"الاستثناءات"</string>
<string name="zen_mode_duration_settings_title" msgid="5522668871014735728">"المدة التلقائية"</string>
<string name="zen_mode_behavior_allow_title" msgid="2440627647424280842">"السماح بالأصوات والاهتزازات من"</string>
@@ -3395,7 +3397,7 @@
<string name="zen_mode_no_exceptions" msgid="3099578343994492857">"بدون"</string>
<string name="zen_mode_other_options" msgid="7216192179063769057">"خيارات أخرى"</string>
<string name="zen_mode_add" msgid="2533484377786927366">"إضافة"</string>
- <string name="zen_mode_enable_dialog_turn_on" msgid="6396050543542026184">"تشغيل"</string>
+ <string name="zen_mode_enable_dialog_turn_on" msgid="6396050543542026184">"تفعيل"</string>
<string name="zen_mode_button_turn_on" msgid="1097964136225943415">"التفعيل الآن"</string>
<string name="zen_mode_button_turn_off" msgid="3990967728457149454">"الإيقاف الآن"</string>
<string name="zen_mode_settings_dnd_manual_end_time" msgid="4307574188962071429">"وضع \"الرجاء عدم الإزعاج\" مفعَّل حتى <xliff:g id="FORMATTED_TIME">%s</xliff:g>"</string>
@@ -3493,11 +3495,11 @@
<string name="swipe_direction_ltr" msgid="944932514821822709">"التمرير سريعًا باتجاه اليسار للتجاهل، وباتجاه اليمين لعرض القائمة"</string>
<string name="swipe_direction_rtl" msgid="4521416787262888813">"التمرير سريعًا باتجاه اليمين للتجاهل، وباتجاه اليسار لعرض القائمة"</string>
<string name="notification_pulse_title" msgid="4861418327614907116">"وميض الضوء"</string>
- <string name="lock_screen_notifications_title" msgid="6889072265118747835">"على شاشة التأمين"</string>
+ <string name="lock_screen_notifications_title" msgid="6889072265118747835">"على شاشة القفل"</string>
<string name="locked_work_profile_notification_title" msgid="8307025804986190658">"عند قفل الملف الشخصي للعمل"</string>
<string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"عرض محتوى الإشعارات كاملاً"</string>
<string name="lock_screen_notifications_summary_hide" msgid="3668806866535260143">"إخفاء المحتوى الحساس"</string>
- <string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"عدم عرض إشعارات على الإطلاق"</string>
+ <string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"عدم عرض الإشعارات على الإطلاق"</string>
<string name="lock_screen_notifications_interstitial_message" msgid="4230189215124387818">"كيف تريد أن يتم عرض الإشعارات عندما يكون الجهاز مقفلاً؟"</string>
<string name="lock_screen_notifications_interstitial_title" msgid="2832587379332443505">"الإشعارات"</string>
<string name="lock_screen_notifications_summary_show_profile" msgid="8908775469657073273">"عرض محتوى إشعارات العمل كاملًا"</string>
@@ -3609,12 +3611,12 @@
<string name="app_notification_block_title" msgid="7898269373875294367">"حظر الكل"</string>
<string name="app_notification_block_summary" msgid="4502146897785692336">"عدم عرض هذه الإشعارات"</string>
<string name="notification_content_block_title" msgid="2805138591864484587">"عرض الإشعارات"</string>
- <string name="notification_content_block_summary" msgid="2743896875255591743">"عدم عرض الإشعارات في مركز الإشعارات أو على الأجهزة المرتبطة بحساب Google"</string>
+ <string name="notification_content_block_summary" msgid="2743896875255591743">"عدم عرض الإشعارات في مركز الإشعارات أو على الأجهزة الملحقة"</string>
<string name="notification_badge_title" msgid="8989086619255666442">"السماح بنقطة الإشعار"</string>
<string name="notification_channel_badge_title" msgid="8228215248332054612">"إظهار نقطة الإشعار"</string>
<string name="app_notification_override_dnd_title" msgid="1757042206738172601">"إلغاء وضع \"عدم الإزعاج\""</string>
<string name="app_notification_override_dnd_summary" msgid="3152957611171210980">"السماح لهذه الإشعارات بمقاطعتك عندما يكون وضع \"عدم الإزعاج\" مفعلاً"</string>
- <string name="app_notification_visibility_override_title" msgid="2349335170165637672">"على شاشة التأمين"</string>
+ <string name="app_notification_visibility_override_title" msgid="2349335170165637672">"على شاشة القفل"</string>
<string name="app_notification_row_banned" msgid="2079325338122151677">"محظور"</string>
<string name="app_notification_row_priority" msgid="432299064888787236">"الأولوية"</string>
<string name="app_notification_row_sensitive" msgid="4919671519227722958">"حساس"</string>
@@ -3622,7 +3624,7 @@
<string name="app_notification_importance_title" msgid="1902794400671001142">"الأهمية"</string>
<string name="notification_show_lights_title" msgid="5381920725933228542">"وميض الضوء"</string>
<string name="notification_vibrate_title" msgid="8221718258793835282">"اهتزاز"</string>
- <string name="notification_channel_sound_title" msgid="7635366839003304745">"صوت"</string>
+ <string name="notification_channel_sound_title" msgid="7635366839003304745">"الصوت"</string>
<string name="zen_mode_rule_delete_button" msgid="6763486487220471193">"حذف"</string>
<string name="zen_mode_rule_rename_button" msgid="1428130397306726792">"إعادة التسمية"</string>
<string name="zen_mode_rule_name" msgid="8583652780885724670">"اسم الجدول الزمني"</string>
@@ -3640,9 +3642,9 @@
<string name="zen_mode_unknown_app_set_behavior" msgid="5666462954329932302">"لا يمكن تغيير هذه الإعدادات الآن. لقد اختار أحد التطبيقات تفعيل وضع \"الرجاء عدم الإزعاج\" تلقائيًا مع سلوك مخصّص."</string>
<string name="zen_mode_qs_set_behavior" msgid="788646569296973998">"لا يمكن تغيير هذه الإعدادات الآن. تم تفعيل وضع \"الرجاء عدم الإزعاج\" يدويًا مع سلوك مخصّص."</string>
<string name="zen_schedule_rule_type_name" msgid="4516851728113801329">"وقت"</string>
- <string name="zen_schedule_rule_enabled_toast" msgid="1742354493045049048">"تم ضبط القاعدة التلقائية على تشغيل وضع \"عدم الإزعاج\" أثناء أوقات محددة"</string>
+ <string name="zen_schedule_rule_enabled_toast" msgid="1742354493045049048">"تم ضبط القاعدة التلقائية على تفعيل وضع \"عدم الإزعاج\" أثناء أوقات محددة"</string>
<string name="zen_event_rule_type_name" msgid="7467729997336583342">"حدث"</string>
- <string name="zen_event_rule_enabled_toast" msgid="7087368268966855976">"تم ضبط القاعدة التلقائية على تشغيل وضع \"عدم الإزعاج\" أثناء أحداث محددة"</string>
+ <string name="zen_event_rule_enabled_toast" msgid="7087368268966855976">"تم ضبط القاعدة التلقائية على تفعيل وضع \"عدم الإزعاج\" أثناء أحداث محددة"</string>
<string name="zen_mode_event_rule_calendar" msgid="6088077103908487442">"أثناء الأحداث لـ"</string>
<string name="zen_mode_event_rule_summary_calendar_template" msgid="4027207992040792657">"أثناء الأحداث للتقويم <xliff:g id="CALENDAR">%1$s</xliff:g>"</string>
<string name="zen_mode_event_rule_summary_any_calendar" msgid="7590085295784895885">"أي تقويم"</string>
@@ -3723,7 +3725,7 @@
<string name="zen_mode_calls_summary_two" msgid="9017678770532673578">"السماح بالمكالمات من <xliff:g id="CALLER_TYPE">%1$s</xliff:g> و<xliff:g id="CALLERT_TPYE">%2$s</xliff:g>"</string>
<string name="zen_mode_repeat_callers_summary" msgid="1752513516040525545">"في حال اتصال الشخص نفسه للمرة الثانية في غضون <xliff:g id="MINUTES">%d</xliff:g> دقيقة"</string>
<string name="zen_mode_behavior_summary_custom" msgid="3909532602640130841">"مخصص"</string>
- <string name="zen_mode_when" msgid="7835420687948416255">"تشغيل تلقائي"</string>
+ <string name="zen_mode_when" msgid="7835420687948416255">"تفعيل تلقائي"</string>
<string name="zen_mode_when_never" msgid="4506296396609224524">"مطلقًا"</string>
<string name="zen_mode_when_every_night" msgid="3942151668791426194">"كل ليلة"</string>
<string name="zen_mode_when_weeknights" msgid="2412709309122408474">"ليالي الأسبوع"</string>
@@ -3755,7 +3757,7 @@
<string name="zen_mode_screen_off_summary" msgid="8592179073243001267">"السماح للإشعارات التي يتجاهلها وضع \"الرجاء عدم الإزعاج\" بتشغيل الشاشة وإحداث وميض ضوئي"</string>
<string name="zen_mode_screen_off_summary_no_led" msgid="7255874108150630145">"السماح للإشعارات التي يتجاهلها وضع \"الرجاء عدم الإزعاج\" بتشغيل الشاشة"</string>
<string name="notification_app_settings_button" msgid="3651180424198580907">"إعدادات الإشعارات"</string>
- <string name="suggestion_button_text" msgid="5783566542423813847">"موافق"</string>
+ <string name="suggestion_button_text" msgid="5783566542423813847">"حسنًا"</string>
<string name="device_feedback" msgid="4042352891448769818">"إرسال تعليقات حول هذا الجهاز"</string>
<string name="restr_pin_enter_admin_pin" msgid="8577847751493521230">"إدخال رقم التعريف الشخصي للمشرف"</string>
<string name="switch_on_text" msgid="7100491749799298324">"مفعّل"</string>
@@ -3813,8 +3815,8 @@
<string name="notifications_disabled" msgid="316658185757688983">"إيقاف"</string>
<string name="notifications_partly_blocked" msgid="6330451240669068819">"تم إيقاف <xliff:g id="COUNT_0">%1$d</xliff:g> من <xliff:g id="COUNT_1">%2$d</xliff:g> من الفئات"</string>
<string name="notifications_silenced" msgid="538923056987616372">"تم كتم الصوت"</string>
- <string name="notifications_redacted" msgid="308836040236690014">"المحتوى الحساس ليس على شاشة التأمين"</string>
- <string name="notifications_hidden" msgid="3665505522897010205">"ليست على شاشة التأمين"</string>
+ <string name="notifications_redacted" msgid="308836040236690014">"المحتوى الحساس ليس على شاشة القفل"</string>
+ <string name="notifications_hidden" msgid="3665505522897010205">"ليست على شاشة القفل"</string>
<string name="notifications_priority" msgid="8849045645983017929">"تم تجاوز \"عدم الإزعاج\""</string>
<string name="notifications_summary_divider" msgid="3148951310482572028">" / "</string>
<string name="notification_summary_level" msgid="309162160355022027">"المستوى %d"</string>
@@ -3865,7 +3867,7 @@
<string name="filter_notif_blocked_channels" msgid="6110799550327612670">"الفئات: متوفقة"</string>
<string name="filter_notif_dnd_channels" msgid="3251570137256371092">"الفئات: تتجاوز خيار \"عدم الإزعاج\""</string>
<string name="advanced_apps" msgid="6643869089344883537">"إعدادات متقدّمة"</string>
- <string name="configure_apps" msgid="4066683118857400943">"تهيئة التطبيقات"</string>
+ <string name="configure_apps" msgid="4066683118857400943">"إعداد التطبيقات"</string>
<string name="unknown_app" msgid="2312052973570376877">"تطبيق غير معروف"</string>
<string name="app_permissions" msgid="3215958256821756086">"مدير الأذونات"</string>
<string name="app_permissions_summary" msgid="8785798165776061594">"التطبيقات التي تستخدم <xliff:g id="APPS">%1$s</xliff:g>"</string>
@@ -3905,7 +3907,7 @@
<string name="system_default_app" msgid="1454719098589351197">"(الإعداد التلقائي للنظام)"</string>
<string name="apps_storage" msgid="5658466038269046038">"مساحة تخزين التطبيقات"</string>
<string name="usage_access" msgid="2023443456361489516">"الوصول إلى بيانات الاستخدام"</string>
- <string name="permit_usage_access" msgid="3321727608629752758">"السماح بالدخول إلى الاستخدام"</string>
+ <string name="permit_usage_access" msgid="3321727608629752758">"السماح بالوصول إلى بيانات الاستخدام"</string>
<string name="app_usage_preference" msgid="5691545073101551727">"الإعدادات المفضّلة لاستخدام التطبيقات"</string>
<string name="time_spent_in_app_pref_title" msgid="2803186835902798451">"وقت الشاشة"</string>
<string name="usage_access_description" msgid="2178083292760305207">"عند السماح بالوصول إلى بيانات الاستخدام، سيتمكّن التطبيق من تتبع التطبيقات الأخرى التي تستخدمها ومدى تكرار استخدامها وكذلم تتبّع مشغّل شبكة الجوال وإعدادات اللغة بالإضافة إلى تفاصيل أخرى."</string>
@@ -3971,7 +3973,7 @@
<string name="usb_use_MIDI" msgid="4710632870781041401">"MIDI"</string>
<string name="usb_use_MIDI_desc" msgid="1770966187150010947">"يمكنك استخدام هذا الجهاز باعتباره MIDI"</string>
<string name="usb_use" msgid="8940500223316278632">"استخدام USB في"</string>
- <string name="usb_default_label" msgid="7471316635263936101">"تهيئة USB التلقائية"</string>
+ <string name="usb_default_label" msgid="7471316635263936101">"إعداد USB التلقائي"</string>
<string name="usb_default_info" msgid="953775292571786528">"عند الاتصال بجهاز آخر وإلغاء قفل هاتفك، سيتم تطبيق هذه الإعدادات. لذلك يجب الاتصال بالأجهزة الموثوق بها فقط."</string>
<string name="usb_pref" msgid="6194821550693495068">"USB"</string>
<string name="usb_preference" msgid="7092987095048592826">"إعدادات USB"</string>
@@ -3998,7 +4000,7 @@
<string name="assist_access_screenshot_summary" msgid="3010943864000489424">"السماح للتطبيق المساعد بالوصول إلى صورة للشاشة"</string>
<string name="assist_flash_title" msgid="8852484250748551092">"إظهار وميض على الشاشة"</string>
<string name="assist_flash_summary" msgid="6697095786317559129">"إظهار وميض على حدود الشاشة عند وصول التطبيق المساعد إلى النص من الشاشة أو لقطة الشاشة"</string>
- <string name="assist_footer" msgid="7030121180457472165">"بإمكان التطبيقات المساعِدة تقديم المساعدة لك استنادًا إلى المعلومات على الشاشة التي تعرضها أنت. وتتوافق بعض التطبيقات مع كل من خدمة المشغّل وخدمة الإدخال الصوتي لتوفير مساعدة متكاملة لك."</string>
+ <string name="assist_footer" msgid="7030121180457472165">"بإمكان التطبيقات المساعِدة مساعدتك استنادًا إلى المعلومات على الشاشة التي تشاهدها. وتتوافق بعض التطبيقات مع كل من خدمة المشغّل وخدمة الإدخال الصوتي لتوفير مساعدة متكاملة لك."</string>
<string name="average_memory_use" msgid="5333366040118953945">"متوسط استخدام الذاكرة"</string>
<string name="maximum_memory_use" msgid="6509872438499846077">"الاستخدام الأقصى للذاكرة"</string>
<string name="memory_usage" msgid="7963253555330830906">"استخدام الذاكرة"</string>
@@ -4006,8 +4008,8 @@
<string name="memory_details" msgid="5165105904103664110">"التفاصيل"</string>
<string name="memory_use_summary" msgid="7676311343819965850">"متوسط الذاكرة المستخدمة خلال آخر ٣ ساعات: <xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="no_memory_use_summary" msgid="3966550113388917978">"لم يتم استخدام الذاكرة خلال آخر ٣ ساعات"</string>
- <string name="sort_avg_use" msgid="78428601253054298">"الترتيب بحسب متوسط الاستخدام"</string>
- <string name="sort_max_use" msgid="322772647893307413">"الترتيب بحسب الاستخدام الأقصى"</string>
+ <string name="sort_avg_use" msgid="78428601253054298">"الترتيب حسب متوسط الاستخدام"</string>
+ <string name="sort_max_use" msgid="322772647893307413">"الترتيب حسب الاستخدام الأقصى"</string>
<string name="memory_performance" msgid="3506743771947250453">"الأداء"</string>
<string name="total_memory" msgid="7352192982476976453">"إجمالي الذاكرة"</string>
<string name="average_used" msgid="3022736210190754669">"متوسط استخدام الذاكرة (%)"</string>
@@ -4126,16 +4128,16 @@
<string name="admin_profile_owner_user_message" msgid="2991249382056855531">"يمكن للمشرف مراقبة التطبيقات والبيانات المرتبطة بهذا المستخدم وإدارتها، بما في ذلك الإعدادات والأذونات والدخول إلى المؤسسة ونشاط الشبكة ومعلومات موقع الجهاز."</string>
<string name="admin_device_owner_message" msgid="1823477572459610869">"يمكن للمشرف مراقبة التطبيقات والبيانات المرتبطة بهذا الجهاز وإدارتها، بما في ذلك الإعدادات والأذونات والدخول إلى المؤسسة ونشاط الشبكة ومعلومات موقع الجهاز."</string>
<string name="condition_turn_off" msgid="4395150881365143558">"إيقاف"</string>
- <string name="condition_turn_on" msgid="1699088245481841159">"تشغيل"</string>
+ <string name="condition_turn_on" msgid="1699088245481841159">"تفعيل"</string>
<string name="condition_expand_show" msgid="4118818022763913777">"إظهار"</string>
<string name="condition_expand_hide" msgid="1112721783024332643">"إخفاء"</string>
<string name="condition_hotspot_title" msgid="4143299802283098506">"نقطة الاتصال مفعّلة"</string>
- <string name="condition_airplane_title" msgid="8484582712516148433">"وضع الطائرة قيد التفعيل"</string>
+ <string name="condition_airplane_title" msgid="8484582712516148433">"وضع الطيران قيد التفعيل"</string>
<string name="condition_airplane_summary" msgid="3021193218494740742">"الشبكات غير متوفرة"</string>
<string name="condition_zen_title" msgid="2128184708916052585">"تمّ تفعيل \"الرجاء عدم الإزعاج\""</string>
<string name="condition_zen_summary_phone_muted" msgid="4396050395522974654">"تم كتم صوت الهاتف."</string>
<string name="condition_zen_summary_with_exceptions" msgid="3435216391993785818">"مع بعض الاستثناءات"</string>
- <string name="condition_battery_title" msgid="6704870010912986274">"تم تشغيل وضع توفير شحن البطارية"</string>
+ <string name="condition_battery_title" msgid="6704870010912986274">"تم تفعيل وضع توفير شحن البطارية"</string>
<string name="condition_battery_summary" msgid="1236078243905690620">"تم تقييد الميزات."</string>
<string name="condition_cellular_title" msgid="6605277435894307935">"تم إيقاف بيانات الجوّال"</string>
<string name="condition_cellular_summary" msgid="3607459310548343777">"يتوفّر الإنترنت من خلال Wi‑Fi فقط."</string>
@@ -4215,7 +4217,7 @@
<string name="set_data_limit" msgid="5043770023229990674">"ضبط الحد الأقصى للبيانات"</string>
<string name="data_limit" msgid="5793521160051596228">"الحد الأقصى للبيانات"</string>
<string name="data_usage_template" msgid="6848274347956096882">"<xliff:g id="ID_1">%1$s</xliff:g> مستخدمة خلال <xliff:g id="ID_2">%2$s</xliff:g>"</string>
- <string name="configure" msgid="8232696842838580549">"تهيئة"</string>
+ <string name="configure" msgid="8232696842838580549">"إعداد"</string>
<string name="data_usage_other_apps" msgid="7002491980141402084">"التطبيقات الأخرى المضمّنة في الاستخدام"</string>
<plurals name="data_saver_unrestricted_summary" formatted="false" msgid="6046013861315713697">
<item quantity="zero">هناك <xliff:g id="COUNT">%1$d</xliff:g> تطبيق مسموح له باستخدام البيانات بدون قيود عند تفعيل ميزة \"توفير البيانات\"</item>
@@ -4248,7 +4250,7 @@
<string name="launch_mdp_app_text" msgid="9186559496664208252">"عرض الخطة"</string>
<string name="launch_wifi_text" msgid="317820210431682605">"عرض التفاصيل"</string>
<string name="data_saver_title" msgid="7903308134514179256">"توفير البيانات"</string>
- <string name="unrestricted_data_saver" msgid="9139401849550738720">"الاستخدام غير المقيّد للبيانات"</string>
+ <string name="unrestricted_data_saver" msgid="9139401849550738720">"الاستخدام غير المحدود للبيانات"</string>
<string name="restrict_background_blacklisted" msgid="7158991683849067124">"تم إيقاف بيانات الخلفية."</string>
<string name="data_saver_on" msgid="7281809065420480881">"قيد التفعيل"</string>
<string name="data_saver_off" msgid="7439439787358504018">"غير مفعّل"</string>
@@ -4264,7 +4266,7 @@
<string name="suggestion_additional_fingerprints" msgid="3434467207282466411">"إضافة بصمة إصبع أخرى"</string>
<string name="suggestion_additional_fingerprints_summary" msgid="1916547587832484196">"فتح القفل باستخدام إصبع مختلف"</string>
<string name="battery_saver_on_summary" msgid="6841062406467435672">"مفعّل"</string>
- <string name="battery_saver_off_scheduled_summary" msgid="3740414764069188669">"سيتم التشغيل تلقائيًا عند الوصول إلى <xliff:g id="BATTERY_PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_saver_off_scheduled_summary" msgid="3740414764069188669">"سيتم التفعيل تلقائيًا عند الوصول إلى <xliff:g id="BATTERY_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="battery_saver_off_summary" msgid="8736555723004299721">"غير مفعّل"</string>
<string name="battery_saver_button_turn_on" msgid="3748696527267573793">"التفعيل الآن"</string>
<string name="battery_saver_button_turn_off" msgid="2912950982503267828">"إيقاف الميزة الآن"</string>
@@ -4272,7 +4274,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"أثناء قفل الجهاز، منع كتابة ردود أو نصوص أخرى في الإشعارات"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"المدقّق الإملائي التلقائي"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"اختيار المدقق الإملائي"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"استخدام المدقّق الإملائي"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"استخدام ميزة \"المدقّق الإملائي\""</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"غير محدد"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(بدون)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4324,11 +4326,11 @@
<item quantity="one">يمكن لتطبيق واحد استخدام البيانات غير المقيّدة</item>
</plurals>
<string name="special_access_more" msgid="7086690625048471400">"الاطّلاع على المزيد"</string>
- <string name="confirm_convert_to_fbe_warning" msgid="4972595831034280189">"هل تريد فعلًا مسح بيانات المستخدم والتحويل إلى تشفير الملفات؟"</string>
+ <string name="confirm_convert_to_fbe_warning" msgid="4972595831034280189">"هل تريد فعلًا مسح بيانات المستخدم والتحويل إلى ترميز الملفات؟"</string>
<string name="button_confirm_convert_fbe" msgid="419832223125147297">"مسح وتحويل"</string>
<string name="reset_shortcut_manager_throttling" msgid="1912184636360233397">"إعادة ضبط تقييد المعدّل في ShortcutManager"</string>
<string name="reset_shortcut_manager_throttling_complete" msgid="2932990541160593632">"تمت إعادة ضبط تقييد المعدّل في ShortcutManager."</string>
- <string name="notification_suggestion_title" msgid="3292107671498148560">"التحكم في المعلومات على شاشة التأمين"</string>
+ <string name="notification_suggestion_title" msgid="3292107671498148560">"التحكم في المعلومات على شاشة القفل"</string>
<string name="notification_suggestion_summary" msgid="6516827892359614597">"إظهار محتوى الإشعار أو إخفاؤه"</string>
<string name="page_tab_title_summary" msgid="4824744863994538006">"الكل"</string>
<string name="page_tab_title_support" msgid="5569262185010367870">"النصائح والدعم"</string>
@@ -4381,7 +4383,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"للمساعدة في تفريغ مساحة التخزين، يزيل مدير مساحة التخزين من جهاز الصور والفيديوهات التي تم الاحتفاظ بنسخة احتياطية منها."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"إزالة الصور والفيديوهات"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"مدير مساحة التخزين"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"استخدام مدير مساحة التخزين"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"استخدام أداة \"إدارة مساحة التخزين\""</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"تلقائي"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"يدوي"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"إخلاء بعض المساحة الآن"</string>
@@ -4434,7 +4436,7 @@
<string name="domain_url_section_title" msgid="206403507921518321">"التطبيقات المثبَّتة"</string>
<string name="automatic_storage_manager_activation_warning" msgid="2630083316417707308">"تتم إدارة مساحة التخزين لجهازك الآن عن طريق مدير مساحة التخزين"</string>
<string name="account_for_section_header" msgid="5975241715840642563">"حسابات <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
- <string name="configure_section_header" msgid="6988981883075615136">"تهيئة"</string>
+ <string name="configure_section_header" msgid="6988981883075615136">"إعداد"</string>
<string name="auto_sync_account_title" msgid="2394463123733529506">"مزامنة البيانات تلقائيًا"</string>
<string name="auto_sync_personal_account_title" msgid="6844465157916100655">"مزامنة البيانات الشخصية تلقائيًا"</string>
<string name="auto_sync_work_account_title" msgid="2403222633447522376">"مزامنة بيانات العمل تلقائيًا"</string>
@@ -4480,11 +4482,11 @@
<item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> تطبيق</item>
</plurals>
<string name="enterprise_privacy_input_method" msgid="5885916325874284011">"لوحة المفاتيح التلقائية"</string>
- <string name="enterprise_privacy_input_method_name" msgid="439610095825218563">"تعيين على <xliff:g id="APP_LABEL">%s</xliff:g>"</string>
- <string name="enterprise_privacy_always_on_vpn_device" msgid="2022700916516458213">"تم تشغيل إعداد \"شبكة افتراضية خاصة (VPN) دائمة التشغيل\""</string>
- <string name="enterprise_privacy_always_on_vpn_personal" msgid="5644065780843002044">"تم تشغيل إعداد \"شبكة افتراضية خاصة (VPN) دائمة التشغيل\" في الملف الشخصي"</string>
- <string name="enterprise_privacy_always_on_vpn_work" msgid="6443089897985373564">"تم تفعيل \"شبكة افتراضية خاصة (VPN) دائمة التشغيل\" في الملف الشخصي للعمل"</string>
- <string name="enterprise_privacy_global_http_proxy" msgid="3862135895716080830">"تم تعيين الخادم الوكيل HTTP العام"</string>
+ <string name="enterprise_privacy_input_method_name" msgid="439610095825218563">"ضبط على <xliff:g id="APP_LABEL">%s</xliff:g>"</string>
+ <string name="enterprise_privacy_always_on_vpn_device" msgid="2022700916516458213">"تم تفعيل إعداد \"شبكة افتراضية خاصة (VPN) دائمة التفعيل\""</string>
+ <string name="enterprise_privacy_always_on_vpn_personal" msgid="5644065780843002044">"تم تفعيل إعداد \"شبكة افتراضية خاصة (VPN) دائمة التفعيل\" في الملف الشخصي"</string>
+ <string name="enterprise_privacy_always_on_vpn_work" msgid="6443089897985373564">"تم تفعيل \"شبكة افتراضية خاصة (VPN) دائمة التفعيل\" في الملف الشخصي للعمل"</string>
+ <string name="enterprise_privacy_global_http_proxy" msgid="3862135895716080830">"تم ضبط الخادم الوكيل HTTP العام"</string>
<string name="enterprise_privacy_ca_certs_device" msgid="7715658848470643878">"بيانات الاعتماد الموثوقة"</string>
<string name="enterprise_privacy_ca_certs_personal" msgid="1356447417193483802">"بيانات اعتماد موثوقة في ملفك الشخصي"</string>
<string name="enterprise_privacy_ca_certs_work" msgid="836419648894546893">"بيانات اعتماد موثوقة في ملفك الشخصي للعمل"</string>
@@ -4496,7 +4498,7 @@
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> شهادة CA كحد أدنى</item>
<item quantity="one">شهادة CA واحدة (<xliff:g id="COUNT_0">%d</xliff:g>) كحد أدنى</item>
</plurals>
- <string name="enterprise_privacy_lock_device" msgid="1533125067038409945">"يمكن للمشرف قفل الجهاز وإعادة تعيين كلمة المرور"</string>
+ <string name="enterprise_privacy_lock_device" msgid="1533125067038409945">"يمكن للمشرف قفل الجهاز وإعادة ضبط كلمة المرور"</string>
<string name="enterprise_privacy_wipe_device" msgid="7555287990273929922">"يمكن للمشرف حذف جميع بيانات الجهاز"</string>
<string name="enterprise_privacy_failed_password_wipe_device" msgid="4101502079202483156">"محاولات كلمة المرور الخاطئة قبل حذف جميع بيانات الجهاز"</string>
<string name="enterprise_privacy_failed_password_wipe_work" msgid="2881646286634693392">"محاولات كلمة المرور الخاطئة قبل حذف بيانات الملف الشخصي للعمل"</string>
@@ -4549,7 +4551,7 @@
<string name="storage_size_large_alternate" msgid="1317796542509105857">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" "<font size="20">"<xliff:g id="UNIT">^2</xliff:g>"</font></small>""</string>
<string name="storage_volume_total" msgid="5021484171514159913">"مساحة التخزين المستخدمة من أصل <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
<string name="storage_percent_full" msgid="6924662861545958442">"مستخدمة"</string>
- <string name="clear_instant_app_data" msgid="3673669086522890405">"مسح التطبيق"</string>
+ <string name="clear_instant_app_data" msgid="3673669086522890405">"محو التطبيق"</string>
<string name="clear_instant_app_confirmation" msgid="1778553115373698061">"هل تريد إزالة هذا التطبيق الفوري؟"</string>
<string name="launch_instant_app" msgid="5251693061228352333">"فتح"</string>
<string name="game_storage_settings" msgid="6856911551799175914">"الألعاب"</string>
@@ -4591,8 +4593,8 @@
<string name="allow_background_activity_starts_summary" msgid="8170749270869606692">"السماح ببدء جميع الأنشطة في الخلفية"</string>
<string name="show_first_crash_dialog" msgid="3682063068903692710">"عرض مربع حوار الأعطال دائمًا"</string>
<string name="show_first_crash_dialog_summary" msgid="8197987550025401754">"عرض مربع الحوار في كل مرة يتعطل فيها تطبيق"</string>
- <string name="angle_enabled_app" msgid="4359266182151708733">"تحديد التطبيق الذي يستخدم ANGLE"</string>
- <string name="angle_enabled_app_not_set" msgid="7428910515748621910">"لم يتم تعيين تطبيق لاستخدام ANGLE"</string>
+ <string name="angle_enabled_app" msgid="4359266182151708733">"اختيار التطبيق الذي يستخدم ANGLE"</string>
+ <string name="angle_enabled_app_not_set" msgid="7428910515748621910">"لم يتم ضبط تطبيق لاستخدام ANGLE"</string>
<string name="angle_enabled_app_set" msgid="7313088703610569320">"التطبيق الذي يستخدم ANGLE: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="game_driver_dashboard_title" msgid="219443350404091201">"إعدادات Game Driver المفضّلة"</string>
<string name="game_driver_dashboard_summary" msgid="1500674075618790528">"تعديل إعدادات Game Driver"</string>
@@ -4779,7 +4781,7 @@
<string name="settings_panel_title" msgid="8181989386118232534">"لوحة الإعدادات"</string>
<string name="internet_connectivity_panel_title" msgid="341712994620215750">"اتصال الإنترنت"</string>
<string name="volume_connectivity_panel_title" msgid="4998755371496690971">"مستوى الصوت"</string>
- <string name="mobile_data_ap_mode_disabled" msgid="2452716524753472885">"غير متاح أثناء وضع الطائرة"</string>
+ <string name="mobile_data_ap_mode_disabled" msgid="2452716524753472885">"غير متاح أثناء وضع الطيران"</string>
<string name="force_desktop_mode" msgid="6973100177551040740">"فرض وضع سطح المكتب"</string>
<string name="force_desktop_mode_summary" msgid="8865007610266954719">"فرض وضع سطح المكتب التجريبي على شاشات العرض الثانوية"</string>
<string name="hwui_force_dark_title" msgid="3744825212652331461">"إلغاء ميزة فرض تعتيم الشاشة"</string>
diff --git a/tests/CarDeveloperOptions/res/values-as/arrays.xml b/tests/CarDeveloperOptions/res/values-as/arrays.xml
index f31c3f4..60b9ba7 100644
--- a/tests/CarDeveloperOptions/res/values-as/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-as/arrays.xml
@@ -29,9 +29,25 @@
<item msgid="5194868215515664953">"প্ৰশান্ত মহাসাগৰীয়"</item>
<item msgid="7044520255415007865">"সকলো"</item>
</string-array>
- <!-- no translation found for screen_timeout_entries:0 (8596143519087753804) -->
- <!-- no translation found for screen_timeout_entries:5 (5827960506924849753) -->
- <!-- no translation found for dream_timeout_entries:7 (8271452751594598661) -->
+ <string-array name="screen_timeout_entries">
+ <item msgid="8596143519087753804">"১৫ ছেকেণ্ড"</item>
+ <item msgid="772029947136115322">"৩০ ছেকেণ্ড"</item>
+ <item msgid="8743663928349474087">"১ মিনিট"</item>
+ <item msgid="1506508631223164814">"২ মিনিট"</item>
+ <item msgid="8664703938127907662">"৫ মিনিট"</item>
+ <item msgid="5827960506924849753">"১০ মিনিট"</item>
+ <item msgid="6677424950124253938">"৩০ মিনিট"</item>
+ </string-array>
+ <string-array name="dream_timeout_entries">
+ <item msgid="6487043225269853023">"কেতিয়াও নহয়"</item>
+ <item msgid="2517785806387977252">"১৫ ছেকেণ্ড"</item>
+ <item msgid="6347954399441173672">"৩০ ছেকেণ্ড"</item>
+ <item msgid="4858305253279921789">"১ মিনিট"</item>
+ <item msgid="8109273437140044073">"২ মিনিট"</item>
+ <item msgid="2788593551142462622">"৫ মিনিট"</item>
+ <item msgid="8012672183888404961">"১০ মিনিট"</item>
+ <item msgid="8271452751594598661">"৩০ মিনিট"</item>
+ </string-array>
<string-array name="lock_after_timeout_entries">
<item msgid="2232921187970351881">"তৎক্ষণাৎ"</item>
<item msgid="2038544972632026612">"৫ ছেকেণ্ড"</item>
@@ -43,17 +59,47 @@
<item msgid="811192536981678974">"১০ মিনিট"</item>
<item msgid="7258394417241706272">"৩০ মিনিট"</item>
</string-array>
- <!-- no translation found for entries_font_size:0 (2340391964816059553) -->
- <!-- no translation found for entries_font_size:0 (6490061470416867723) -->
- <!-- no translation found for entries_font_size:2 (1714184661981538355) -->
- <!-- no translation found for entries_font_size:2 (1678068858001018666) -->
- <!-- no translation found for wifi_status:3 (5848277343965362748) -->
- <!-- no translation found for wifi_status_with_ssid:1 (6816207058895999545) -->
- <!-- no translation found for wifi_status_with_ssid:3 (7547609081339573756) -->
- <!-- no translation found for wifi_status_with_ssid:4 (5145158315060185414) -->
+ <string-array name="entries_font_size">
+ <item msgid="2340391964816059553">"সৰু"</item>
+ <item msgid="591935967183159581">"ডিফ’ল্ট"</item>
+ <item msgid="1714184661981538355">"ডাঙৰ"</item>
+ <item msgid="6195563047686707484">"সকলোতকৈ ডাঙৰ"</item>
+ </string-array>
+ <string-array name="wifi_status">
+ <item msgid="1304883790721412351"></item>
+ <item msgid="4157625910392775808">"স্কেন কৰি থকা হৈছে…"</item>
+ <item msgid="5597394826455877834">"সংযোগ কৰি থকা হৈছে…"</item>
+ <item msgid="5848277343965362748">"বিশ্বাসযোগ্যতা প্ৰমাণীকৰণ কৰি থকা হৈছে…"</item>
+ <item msgid="3391238031431440676">"আইপি ঠিকনা সংগ্ৰহ কৰি থকা হৈছে…"</item>
+ <item msgid="5257597310494000224">"সংযোগ কৰা হ’ল"</item>
+ <item msgid="8472497592913050396">"স্থগিত"</item>
+ <item msgid="1228072488815999109">"সংযোগ বিচ্ছিন্ন কৰি থকা হৈছে…"</item>
+ <item msgid="7253087004422991731">"সংযোগ বিচ্ছিন্ন"</item>
+ <item msgid="4169850917304751227">"অসফল"</item>
+ <item msgid="6266658166690831131">"অৱৰোধিত"</item>
+ <item msgid="4517230805854909775">"কিছুসময়ৰ বাবে দুৰ্বল সংযোগ দেখুওৱা হোৱা নাই"</item>
+ </string-array>
+ <string-array name="wifi_status_with_ssid">
+ <item msgid="4853670665485437464"></item>
+ <item msgid="6816207058895999545">"স্কেন কৰি থকা হৈছে…"</item>
+ <item msgid="8058143476674427024">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>ৰ সৈতে সংযোগ কৰি থকা হৈছে…"</item>
+ <item msgid="7547609081339573756">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>ৰ জৰিয়তে বিশ্বাসযোগ্যতা প্ৰমাণীকৰণ কৰি থকা হৈছে…"</item>
+ <item msgid="5145158315060185414">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>ৰ আইপি ঠিকনা পৰা সংগ্ৰহ কৰি থকা হৈছে…"</item>
+ <item msgid="3283243151651124831">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>ৰ সৈতে সংযোগ কৰা হ’ল"</item>
+ <item msgid="6600156231416890902">"স্থগিত"</item>
+ <item msgid="4133290864821295785">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>ৰ পৰা সংযোগ বিচ্ছিন্ন কৰি থকা হৈছে…"</item>
+ <item msgid="3980154971187953257">"সংযোগ বিচ্ছিন্ন"</item>
+ <item msgid="2847316776634969068">"অসফল"</item>
+ <item msgid="4390990424746035383">"অৱৰোধিত"</item>
+ <item msgid="3618248791367063949">"কিছুসময়ৰ বাবে দুৰ্বল সংযোগ দেখুওৱা হোৱা নাই"</item>
+ </string-array>
<!-- no translation found for wifi_tether_security:0 (5586343370515598801) -->
<!-- no translation found for wifi_tether_security:1 (6136336549994615745) -->
- <!-- no translation found for wifi_p2p_wps_setup:0 (5390235347963255303) -->
+ <string-array name="wifi_p2p_wps_setup">
+ <item msgid="5390235347963255303">"পুশ্ব বুটাম"</item>
+ <item msgid="7401896200768713930">"সংযুক্ত ডিভাইচৰ পৰা পিন"</item>
+ <item msgid="4526848028011846710">"এই ডিভাইচৰ পিন"</item>
+ </string-array>
<string-array name="wifi_p2p_status">
<item msgid="8741947238021758201">"সংযোগ কৰা হ’ল"</item>
<item msgid="983792611851499732">"নিমন্ত্ৰিত"</item>
@@ -61,7 +107,12 @@
<item msgid="4646663015449312554">"উপলব্ধ"</item>
<item msgid="3230556734162006146">"সীমাৰ বাহিৰত"</item>
</string-array>
- <!-- no translation found for bluetooth_visibility_timeout_entries:1 (2759776603549270587) -->
+ <string-array name="bluetooth_visibility_timeout_entries">
+ <item msgid="8247986727324120082">"২ মিনিট"</item>
+ <item msgid="2759776603549270587">"৫ মিনিট"</item>
+ <item msgid="167772676068860015">"১ ঘণ্টা"</item>
+ <item msgid="5985477119043628504">"কেতিয়াও সময় উকলি নাযায়"</item>
+ </string-array>
<string-array name="bluetooth_max_connected_audio_devices">
<item msgid="3800257971619063588">"ছিষ্টেম ডিফ\'ল্ট ব্যৱহাৰ কৰক: <xliff:g id="DEFAULT_BLUETOOTH_MAX_CONNECTED_AUDIO_DEVICES">%1$d</xliff:g>"</item>
<item msgid="8572230405241423895">"১"</item>
@@ -70,8 +121,13 @@
<item msgid="1644506614010085798">"৪"</item>
<item msgid="3132506679404897150">"৫"</item>
</string-array>
- <!-- no translation found for wifi_signal:1 (7882129634982603782) -->
- <!-- no translation found for wifi_signal:4 (999948812884919584) -->
+ <string-array name="wifi_signal">
+ <item msgid="1709949377823900951">"দুৰ্বল"</item>
+ <item msgid="7882129634982603782">"বেয়া"</item>
+ <item msgid="6457357501905996224">"গ্ৰহণযোগ্য"</item>
+ <item msgid="405271628162918841">"উচ্চ"</item>
+ <item msgid="999948812884919584">"উত্তম"</item>
+ </string-array>
<string-array name="data_usage_data_range">
<item msgid="8986775481492954015">"যোৱা ৩০ দিন"</item>
<item msgid="3211287705232736964">"ডেটা ব্যৱহাৰ চক্ৰ..."</item>
@@ -107,7 +163,10 @@
<item msgid="7330627471456865502">"MSCHAPV2"</item>
<item msgid="6255179395132581882">"GTC"</item>
</string-array>
- <!-- no translation found for wifi_ip_settings:1 (4377002609760712163) -->
+ <string-array name="wifi_ip_settings">
+ <item msgid="2717196390555072244">"DHCP"</item>
+ <item msgid="4377002609760712163">"নিশ্চল"</item>
+ </string-array>
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"নাই"</item>
<item msgid="1464741437353223198">"মেনুএল"</item>
@@ -124,8 +183,24 @@
<item msgid="9148582221081416020">"IPv6"</item>
<item msgid="4094895508821270572">"IPv4/IPv6"</item>
</string-array>
- <!-- no translation found for bearer_entries:0 (5231094118929435723) -->
- <!-- no translation found for bearer_entries:9 (7246853278334311652) -->
+ <string-array name="bearer_entries">
+ <item msgid="5231094118929435723">"অনিৰ্দিষ্ট"</item>
+ <item msgid="2740477081395679090">"এলটিই"</item>
+ <item msgid="1807866878276630064">"HSPAP"</item>
+ <item msgid="7945352669463358624">"HSPA"</item>
+ <item msgid="4152166097223929133">"HSUPA"</item>
+ <item msgid="5134662517319988296">"HSDPA"</item>
+ <item msgid="4997539146036732961">"UMTS"</item>
+ <item msgid="4910169712073083585">"EDGE"</item>
+ <item msgid="3505904588897578792">"জিপিআৰএছ"</item>
+ <item msgid="7246853278334311652">"eHRPD"</item>
+ <item msgid="7037248100126710307">"EVDO_B"</item>
+ <item msgid="3440758673769932256">"EVDO_A"</item>
+ <item msgid="1782525731958596741">"EVDO_0"</item>
+ <item msgid="1819765960790884441">"1xRTT"</item>
+ <item msgid="3148192102183107944">"IS95B"</item>
+ <item msgid="3778273775365258534">"IS95A"</item>
+ </string-array>
<string-array name="mvno_type_entries">
<item msgid="6984770764726663331">"নাই"</item>
<item msgid="1469208769491004112">"SPN"</item>
@@ -144,28 +219,185 @@
<item msgid="8563996233342430477">"মিডিয়া"</item>
<item msgid="5323851085993963783">"ডিভাইচ"</item>
</string-array>
- <!-- no translation found for app_ops_summaries:46 (4933375960222609935) -->
- <!-- no translation found for app_ops_labels:3 (7836406246005211990) -->
- <!-- no translation found for app_ops_labels:4 (3951439024549922598) -->
- <!-- no translation found for app_ops_labels:8 (3597797992398484655) -->
- <!-- no translation found for app_ops_labels:20 (3037159047591081136) -->
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
- <!-- no translation found for app_ops_labels:48 (8291198322681891160) -->
+ <string-array name="app_ops_summaries">
+ <item msgid="2585253854462134715">"আনুমানিক অৱস্থান"</item>
+ <item msgid="1830619568689922920">"সঠিক অৱস্থান"</item>
+ <item msgid="3317274469481923141">"জিপিএছ"</item>
+ <item msgid="8931785990160383356">"কম্পন"</item>
+ <item msgid="8632513128515114092">"সম্পৰ্কসমূহ পঢ়ক"</item>
+ <item msgid="3741042113569620272">"সম্পৰ্কসমূহ সংশোধন কৰক"</item>
+ <item msgid="4204420969709009931">"কলৰ লগ পঢ়ক"</item>
+ <item msgid="2260380357119423209">"কলৰ লগ সংশোধন কৰক"</item>
+ <item msgid="6550710385014530934">"কেলেণ্ডাৰ পঢ়ক"</item>
+ <item msgid="3575906174264853951">"কেলেণ্ডাৰ সাল-সলনি কৰক"</item>
+ <item msgid="4319843242568057174">"ৱাই-ফাই স্কেন"</item>
+ <item msgid="2981791890467303819">"জাননী"</item>
+ <item msgid="6617825156152476692">"চেল স্কেন"</item>
+ <item msgid="8865260890611559753">"ফ\'ন ক\'ল কৰক"</item>
+ <item msgid="3254999273961542982">"এছএমএছ পঢ়ক"</item>
+ <item msgid="7711446453028825171">"এছএমএছ লিখক"</item>
+ <item msgid="6123238544099198034">"SMS পাওক"</item>
+ <item msgid="838342167431596036">"জৰূৰীকালীন এছএমএছ পাওক"</item>
+ <item msgid="8554432731560956686">"এমএমএছ পাওক"</item>
+ <item msgid="7464863464299515059">"WAP পুশ্ব পাওক"</item>
+ <item msgid="310463075729606765">"এছএমএছ পঠিয়াওক"</item>
+ <item msgid="7338021933527689514">"আইচিচি এছএমএছ পঢ়ক"</item>
+ <item msgid="6130369335466613036">"আইচিচি এছএমএছ লিখক"</item>
+ <item msgid="6536865581421670942">"ছেটিংবোৰ সংশোধন কৰক"</item>
+ <item msgid="4547203129183558973">"ওপৰত আঁকক"</item>
+ <item msgid="9080347512916542840">"জাননীত প্ৰৱেশ কৰক"</item>
+ <item msgid="5332718516635907742">"কেমেৰা"</item>
+ <item msgid="6098422447246167852">"ধ্বনি ৰেকৰ্ড কৰক"</item>
+ <item msgid="9182794235292595296">"অডিঅ’ প্লে কৰক"</item>
+ <item msgid="8760743229597702019">"ক্লিপব\'ৰ্ড পঢ়ক"</item>
+ <item msgid="2266923698240538544">"ক্লিপব\'ৰ্ড সংশোধন কৰক"</item>
+ <item msgid="1801619438618539275">"মিডিয়া বুটামসমূহ"</item>
+ <item msgid="31588119965784465">"অডিঅ\' ফ\'কাছ"</item>
+ <item msgid="7565226799008076833">"মাষ্টাৰ ভলিউম"</item>
+ <item msgid="5420704980305018295">"ধ্বনিৰ ভলিউম"</item>
+ <item msgid="5797363115508970204">"ৰিঙৰ ভলিউম"</item>
+ <item msgid="8233154098550715999">"মিডিয়াৰ ভলিউম"</item>
+ <item msgid="5196715605078153950">"এলাৰ্মৰ ভলিউম"</item>
+ <item msgid="394030698764284577">"জাননীৰ ভলিউম"</item>
+ <item msgid="8952898972491680178">"ব্লুটুথ ভলিউম"</item>
+ <item msgid="8506227454543690851">"সক্ৰিয় কৰি ৰাখক"</item>
+ <item msgid="1108160036049727420">"অৱস্থান নিৰীক্ষণ কৰক"</item>
+ <item msgid="1496205959751719491">"উচ্চ ক্ষমতাসম্পন্ন অৱস্থান নিৰীক্ষণ কৰক"</item>
+ <item msgid="3776296279910987380">"ব্যৱহাৰ পৰিসংখ্যা লাভ কৰক"</item>
+ <item msgid="8827100324471975602">"মাইক্ৰ\'ফ\'ন মিউট/আনমিউট কৰক"</item>
+ <item msgid="6880736730520126864">"ট’ষ্ট দেখুৱাওক"</item>
+ <item msgid="4933375960222609935">"মিডিয়া প্ৰ’জেক্ট কৰক"</item>
+ <item msgid="8357907018938895462">"VPN সক্ৰিয় কৰক"</item>
+ <item msgid="8143812849911310973">"ৱালপেপাৰ লিখক"</item>
+ <item msgid="6266277260961066535">"সহায়ৰ গাঁঠনি"</item>
+ <item msgid="7715498149883482300">"সহায়ক স্ক্ৰীণশ্বট"</item>
+ <item msgid="4046679376726313293">"ফ\'নৰ স্থিতি পঢ়ক"</item>
+ <item msgid="6329507266039719587">"ভইচমেইল যোগ কৰক"</item>
+ <item msgid="7692440726415391408">"ছিপ ব্যৱহাৰ কৰক"</item>
+ <item msgid="8572453398128326267">"বৰ্হিগামী কল সম্পাদন কৰক"</item>
+ <item msgid="7775674394089376306">"ফিংগাৰপ্ৰিণ্ট"</item>
+ <item msgid="3182815133441738779">"শৰীৰৰ ছেন্সৰসমূহ"</item>
+ <item msgid="2793100005496829513">"চেল সম্প্ৰচাৰসমূহ পঢ়ক"</item>
+ <item msgid="2633626056029384366">"নকল অৱস্থান"</item>
+ <item msgid="8356842191824684631">"সঞ্চয়াগাৰত পঢ়ক"</item>
+ <item msgid="5671906070163291500">"সঞ্চয়াগাৰত লিখক"</item>
+ <item msgid="2791955098549340418">"স্ক্ৰীণ অন কৰক"</item>
+ <item msgid="5599435119609178367">"একাউণ্টবোৰ বিচাৰক"</item>
+ <item msgid="1165623660533024666">"নেপথ্যত চলাওক"</item>
+ <item msgid="6423861043647911030">"দিব্যাংসকলৰ বাবে থকা সুবিধাসমূহৰ ভলিউম"</item>
+ </string-array>
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"অৱস্থান"</item>
+ <item msgid="6656077694190491067">"অৱস্থান"</item>
+ <item msgid="8790228218278477369">"অৱস্থান"</item>
+ <item msgid="7836406246005211990">"কম্পন"</item>
+ <item msgid="3951439024549922598">"সম্পৰ্কসূচী পঢ়ক"</item>
+ <item msgid="8802152411647068">"সম্পৰ্কসূচী সংশোধন"</item>
+ <item msgid="229544934599698735">"কল লগ পঢ়ক"</item>
+ <item msgid="7396102294405899613">"কল লগ সলনি কৰক"</item>
+ <item msgid="3597797992398484655">"কেলেণ্ডাৰ পঢ়ক"</item>
+ <item msgid="2705975774250907343">"কেলেণ্ডাৰ সংশোধন কৰক"</item>
+ <item msgid="4668747371441932697">"অৱস্থান"</item>
+ <item msgid="1487578921720243646">"প\'ষ্ট জাননী"</item>
+ <item msgid="4636080349724146638">"অৱস্থান"</item>
+ <item msgid="673510900286463926">"ফ\'ন নম্বৰত কল কৰক"</item>
+ <item msgid="542083422784609790">"এছএমএছ/এমএমএছ পঢ়ক"</item>
+ <item msgid="1033780373029588436">"SMS/MMS লিখক"</item>
+ <item msgid="5647111115517787488">"SMS/MMS পাওক"</item>
+ <item msgid="8591105601108455893">"SMS/MMS পাওক"</item>
+ <item msgid="7730995008517841903">"এছএমএছ/এমএমএছ পাওক"</item>
+ <item msgid="2613033109026626086">"এছএমএছ/এমএমএছ পাওক"</item>
+ <item msgid="3037159047591081136">"এছএমএছ/এমএমএছ পঠিয়াওক"</item>
+ <item msgid="4726682243833913568">"এছএমএছ/এমএমএছ পঢ়ক"</item>
+ <item msgid="6555678522277865572">"এছএমএছ/এমএমএছ লিখক"</item>
+ <item msgid="6981734935578130884">"ছেটিংসমূহ সংশোধন কৰক"</item>
+ <item msgid="8705854389991425629">"ওপৰত আঁকক"</item>
+ <item msgid="5861356020344153651">"প্ৰৱেশৰ জাননীসমূহ"</item>
+ <item msgid="78432174621628659">"কেমেৰা"</item>
+ <item msgid="3986116419882154794">"ধ্বনি ৰেকৰ্ড কৰক"</item>
+ <item msgid="4516840825756409490">"অডিঅ\' প্লে কৰক"</item>
+ <item msgid="6811712502798183957">"ক্লিপব\'ৰ্ড পঢ়ক"</item>
+ <item msgid="2780369012602289114">"ক্লিপব\'ৰ্ড সংশোধন কৰক"</item>
+ <item msgid="2331359440170850868">"মিডিয়া বুটাম"</item>
+ <item msgid="6133599737122751231">"অডিঅ\' ফ\'কাছ"</item>
+ <item msgid="6844485713404805301">"মাষ্টাৰ ভলিউম"</item>
+ <item msgid="1600379420669104929">"কণ্ঠস্বৰৰ ভলিউম"</item>
+ <item msgid="6296768210470214866">"ৰিঙৰ ভলিউম"</item>
+ <item msgid="510690696071629241">"মিডিয়াৰ ভলিউম"</item>
+ <item msgid="406861638631430109">"এলাৰ্মৰ ভলিউম"</item>
+ <item msgid="4715864795872233884">"জাননী-ধ্বনিৰ ভলিউম"</item>
+ <item msgid="2311478519251301183">"ব্লুটুথ ভলিউম"</item>
+ <item msgid="5133991377896747027">"জাগ্ৰত কৰি ৰাখক"</item>
+ <item msgid="2464189519136248621">"অৱস্থান"</item>
+ <item msgid="2062677934050803037">"অৱস্থান"</item>
+ <item msgid="1735171933192715957">"ব্যৱহাৰ পৰিসংখ্যা লাভ কৰক"</item>
+ <item msgid="1014093788778383554">"মাইক্ৰ\'ফ\'ন মিউট/আনমিউট কৰক"</item>
+ <item msgid="4199297950608622850">"ট\'ষ্ট দেখুৱাওক"</item>
+ <item msgid="2527962435313398821">"মিডিয়া প্ৰ’জেক্ট কৰক"</item>
+ <item msgid="5117506254221861929">"ভিপিএন সক্ৰিয় কৰক"</item>
+ <item msgid="8291198322681891160">"ৱালপেপাৰ লিখক"</item>
+ <item msgid="7106921284621230961">"সহায়ৰ গাঁথনি"</item>
+ <item msgid="4496533640894624799">"সহায় স্ক্ৰীণশ্বট"</item>
+ <item msgid="2598847264853993611">"ফ\'নৰ স্থিতি পঢ়ক"</item>
+ <item msgid="9215610846802973353">"ভইচমেইল যোগ কৰক"</item>
+ <item msgid="9186411956086478261">"ছিপ ব্যৱহাৰ কৰক"</item>
+ <item msgid="6884763100104539558">"বৰ্হিগামী কল সম্পাদন কৰক"</item>
+ <item msgid="125513972170580692">"ফিংগাৰপ্ৰিণ্ট"</item>
+ <item msgid="2556071024281275619">"শৰীৰৰ ছেন্সৰসমূহ"</item>
+ <item msgid="617168514928339387">"চেল সম্প্ৰচাৰবোৰ পঢ়ক"</item>
+ <item msgid="7134693570516523585">"নকল অৱস্থান"</item>
+ <item msgid="7224489175375229399">"সঞ্চয়াগাৰ পঢ়ক"</item>
+ <item msgid="8472735063903258202">"সঞ্চয়াগাৰত লিখক"</item>
+ <item msgid="4069276819909595110">"স্ক্ৰীণ অন কৰক"</item>
+ <item msgid="1228338896751121025">"একাউণ্টবোৰ বিচাৰক"</item>
+ <item msgid="3181581793459233672">"নেপথ্যত চলাওক"</item>
+ <item msgid="2340936043025374076">"দিব্যাংসকলৰ বাবে থকা সুবিধাসমূহৰ ভলিউম"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"চুটি"</item>
<item msgid="4816511817309094890">"মধ্যমীয়া"</item>
<item msgid="8305084671259331134">"দীঘল"</item>
</string-array>
- <!-- no translation found for captioning_typeface_selector_titles:4 (1487203730637617924) -->
- <!-- no translation found for captioning_font_size_selector_titles:3 (2784236342175159295) -->
- <!-- no translation found for captioning_edge_type_selector_titles:4 (8019330250538856521) -->
+ <string-array name="captioning_typeface_selector_titles">
+ <item msgid="6928465258504250174">"ডিফ’ল্ট"</item>
+ <item msgid="4147246073737933622">"ছানছ-ছেৰিফ"</item>
+ <item msgid="3117680749167407907">"ছানছ-ছেৰিফ ঘনীকৃত"</item>
+ <item msgid="6529379119163117545">"ছান-ছেৰিফ ম\'ন\'স্পেচ"</item>
+ <item msgid="1487203730637617924">"ছেৰিফ"</item>
+ <item msgid="4937790671987480464">"ছেৰিফ ম\'ন\'স্পেচ"</item>
+ <item msgid="4448481989108928248">"অনানুষ্ঠানিক"</item>
+ <item msgid="4627069151979553527">"পকোৱা আখৰ"</item>
+ <item msgid="6896773537705206194">"সৰু বৰফলাৰ আখৰ"</item>
+ </string-array>
+ <string-array name="captioning_font_size_selector_titles">
+ <item msgid="1680223634161592855">"নিচেই সৰু"</item>
+ <item msgid="5091603983404027034">"সৰু"</item>
+ <item msgid="176844712416932112">"সাধাৰণ"</item>
+ <item msgid="2784236342175159295">"ডাঙৰ"</item>
+ <item msgid="218913203203160606">"অতি ডাঙৰ"</item>
+ </string-array>
+ <string-array name="captioning_edge_type_selector_titles">
+ <item msgid="3865198759294188069">"ডিফ’ল্ট"</item>
+ <item msgid="6488643537808152001">"নাই"</item>
+ <item msgid="552332815156010137">"ৰূপৰেখা"</item>
+ <item msgid="7187891159463789272">"ছাঁযুক্ত আখৰ"</item>
+ <item msgid="8019330250538856521">"উঠঙা"</item>
+ <item msgid="8987385315647049787">"পোটোকা পৰা"</item>
+ </string-array>
<string-array name="captioning_opacity_selector_titles">
<item msgid="313003243371588365">"২৫%"</item>
<item msgid="4665048002584838262">"৫০%"</item>
<item msgid="1874668269931014581">"৭৫%"</item>
<item msgid="6462911487571123954">"১০০%"</item>
</string-array>
- <!-- no translation found for captioning_preset_selector_titles:2 (5891360837786277638) -->
+ <string-array name="captioning_preset_selector_titles">
+ <item msgid="326819345272910536">"এপৰ ডিফ\'ল্টসমূহ ব্যৱহাৰ কৰক"</item>
+ <item msgid="8611890312638868524">"ক\'লাৰ ওপৰত বগা"</item>
+ <item msgid="5891360837786277638">"বগা ওপৰত ক’লা"</item>
+ <item msgid="2798457065945456853">"ক\'লাৰ ওপৰত হালধীয়া"</item>
+ <item msgid="5799049811524553967">"নীলাৰ ওপৰত হালধীয়া"</item>
+ <item msgid="3673930830658169860">"কাষ্টম"</item>
+ </string-array>
<string-array name="vpn_types_long">
<item msgid="6566768880689730097">"পিপিটিপি ভিপিএন"</item>
<item msgid="1349760781118368659">"পূৰ্বে ভাগ-বতৰা কৰা কীসমূহৰ সৈতে L2TP/IPSec ভিপিএন"</item>
@@ -174,16 +406,36 @@
<item msgid="3319427315593649917">"প্ৰমাণপত্ৰ আৰু Xauth বিশ্ৱাসযোগ্যতা প্ৰামাণিকৰণৰ সৈতে IPSec ভিপিএন"</item>
<item msgid="8258927774145391041">"প্ৰমাণপত্ৰ আৰু হাইব্ৰিড সত্যাপনসহ IPSec ভিপিএন"</item>
</string-array>
- <!-- no translation found for vpn_proxy_settings:0 (2958623927055120839) -->
- <!-- no translation found for vpn_states:4 (9135049670787351881) -->
+ <string-array name="vpn_proxy_settings">
+ <item msgid="2958623927055120839">"একো নাই"</item>
+ <item msgid="1157046369795346308">"মেনুএল"</item>
+ </string-array>
+ <string-array name="vpn_states">
+ <item msgid="5408915841694583740">"সংযোগ বিচ্ছিন্ন"</item>
+ <item msgid="8754480102834556765">"আৰম্ভ কৰা হৈছে…"</item>
+ <item msgid="3351334355574270250">"সংযোগ কৰি থকা হৈছে…"</item>
+ <item msgid="8303882153995748352">"সংযোগ কৰা হ’ল"</item>
+ <item msgid="9135049670787351881">"সময় উকলিছে"</item>
+ <item msgid="2124868417182583926">"অসফল"</item>
+ </string-array>
<string-array name="security_settings_premium_sms_values">
<item msgid="1164265643455394443">"সোধক"</item>
<item msgid="7718817231348607934">"কেতিয়াও অনুমতি নিদিব"</item>
<item msgid="8184570120217958741">"চিৰদিনৰ বাবে অনুমোদন"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"স্বাভাৱিক"</item>
+ <item msgid="5101233285497327432">"মজলীয়া"</item>
+ <item msgid="1555861583162930714">"নিম্ন"</item>
+ <item msgid="1719683776264798117">"জটিল"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"সাধাৰণ"</item>
+ <item msgid="6107138933849816768">"মজলীয়া"</item>
+ <item msgid="182695359839047859">"নিম্ন"</item>
+ <item msgid="8577246509202964244">"জটিল"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"নেৰানেপেৰা"</item>
<item msgid="167418068739176448">"শীৰ্ষ কাৰ্যকলাপ"</item>
@@ -245,7 +497,31 @@
<item msgid="8444727359525554695">"কেৱল গৃহ পৃষ্ঠাত"</item>
<item msgid="1161026694891024702">"স্বয়ংক্ৰিয়"</item>
</string-array>
- <!-- no translation found for preferred_network_mode_choices:11 (5713723042183940349) -->
+ <string-array name="preferred_network_mode_choices">
+ <item msgid="1823884522189328861">"GSM/WCDMA অগ্ৰাধিকাৰপ্ৰাপ্ত"</item>
+ <item msgid="7581481130337402578">"কেৱল GSM"</item>
+ <item msgid="8579197487913425819">"কেৱল WCDMA"</item>
+ <item msgid="8465243227505412498">"GSM/WCDMA স্বয়ংক্ৰিয়"</item>
+ <item msgid="9107479914166352132">"CDMA/EvDo স্বয়ংক্ৰিয়"</item>
+ <item msgid="4219607161971472471">"CDMA w/o EvDo"</item>
+ <item msgid="7278975240951052041">"কেৱল EvDo"</item>
+ <item msgid="2295969832276827854">"CDMA/EvDo/GSM/WCDMA"</item>
+ <item msgid="9059227943989034424">"CDMA + LTE/EvDo"</item>
+ <item msgid="463168068025354541">"GSM/WCDMA/LTE"</item>
+ <item msgid="1770755308983338311">"গোলকীয়"</item>
+ <item msgid="5713723042183940349">"LTE"</item>
+ <item msgid="8600184258612405670">"LTE / WCDMA"</item>
+ <item msgid="5638632460322750180">"কেৱল TDSCDMA"</item>
+ <item msgid="4346392996298714633">"TDSCDMA/WCDMA"</item>
+ <item msgid="5004811216708487615">"LTE/TDSCDMA"</item>
+ <item msgid="9191730167201068525">"TDSCDMA/GSM"</item>
+ <item msgid="5874623229495009031">"LTE/TDSCDMA/GSM"</item>
+ <item msgid="5096480046347789213">"TDSCDMA/GSM/WCDMA"</item>
+ <item msgid="2075445917638134012">"LTE/TDSCDMA/WCDMA"</item>
+ <item msgid="3353351554070857366">"LTE/TDSCDMA/GSM/WCDMA"</item>
+ <item msgid="2067289929099567494">"TDSCDMA/CDMA/EVDO/GSM/WCDMA"</item>
+ <item msgid="4959483620561891661">"LTE/TDSCDMA/CDMA/EVDO/GSM/WCDMA"</item>
+ </string-array>
<string-array name="cdma_subscription_choices">
<item msgid="7691437408632563841">"RUIM/SIM"</item>
<item msgid="6219184455685527822">"NV"</item>
diff --git a/tests/CarDeveloperOptions/res/values-as/strings.xml b/tests/CarDeveloperOptions/res/values-as/strings.xml
index 83840d7..1ef3a1f 100644
--- a/tests/CarDeveloperOptions/res/values-as/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-as/strings.xml
@@ -368,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"প্ৰ\'ফাইলৰ তথ্য"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"একাউণ্টসমূহ"</string>
<string name="location_settings_title" msgid="2707201457572301030">"অৱস্থান"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"অৱস্থান ব্যৱহাৰ কৰক"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"অৱস্থান ব্যৱহাৰ কৰক"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"অফ আছে"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">অন আছে - <xliff:g id="COUNT_1">%1$d</xliff:g>টা এপে অৱস্থান এক্সেছ কৰিব পাৰে</item>
@@ -836,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"ৱাই-ফাই"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"বাই-ফাই অন কৰক"</string>
<string name="wifi_settings" msgid="7486492317310514109">"ৱাই-ফাই"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"ৱাই-ফাই ব্যৱহাৰ কৰক"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"ৱাই-ফাই ব্যৱহাৰ কৰক"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"ৱাই-ফাই ছেটিংসমূহ"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"ৱাই-ফাই"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"ৱায়াৰলেচ একচেছ পইণ্টসমূহ ছেটআপ আৰু পৰিচালনা কৰক"</string>
@@ -1102,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"ৱাই-ফাই"</item>
+ <item msgid="2271962426654621656">"ম’বাইল"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"যদি ৱাই-ফাই উপলব্ধ নহয়, তেন্তে ম’বাইল নেটৱৰ্ক ব্যৱহাৰ কৰক"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"যদি ম’বাইল নেটৱৰ্ক নাথাকে তেন্তে ৱাই-ফাই ব্যৱহাৰ কৰক"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"ৱাই-ফাইৰ জৰিয়তে কল কৰক। ৱাই-ফাই সংযোগ হেৰালে কল সমাপ্ত হ’ব।"</string>
@@ -1165,7 +1168,7 @@
<string name="accessibility_category_personal" msgid="1423427301759058762">"ব্যক্তিগত প্ৰ’ফাইলৰ একাউণ্টসমূহ"</string>
<string name="accessibility_work_account_title" msgid="3195468574776888011">"কৰ্মস্থানৰ একাউণ্ট - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
<string name="accessibility_personal_account_title" msgid="7251761883688839354">"ব্যক্তিগত একাউণ্ট - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
- <string name="search_settings" msgid="5809250790214921377">"অনুসন্ধান"</string>
+ <string name="search_settings" msgid="5809250790214921377">"Search"</string>
<string name="display_settings" msgid="1045535829232307190">"ডিছপ্লে’"</string>
<string name="accelerometer_title" msgid="2427487734964971453">"স্বয়ং-ঘূৰ্ণন স্ক্ৰীণ"</string>
<string name="color_mode_title" msgid="8164858320869449142">"ৰংবোৰ"</string>
@@ -1887,7 +1890,7 @@
<string name="app_disable_dlg_positive" msgid="5508828271100168073">"এপ্ অক্ষম কৰক"</string>
<string name="app_disable_dlg_text" msgid="9221864774943530281">"আপুনি যদি এই এপ্টো অক্ষম কৰে, তেন্তে Android আৰু অন্য এপ্সমূহে বিচৰাৰ দৰে কাম নকৰিব পাৰে। মনত ৰাখিব, আপুনি এই এপ্টো মচিব নোৱাৰে কাৰণ এইটো আপোনাৰ ডিভাইচত আগৰেপৰা ইনষ্টল কৰি থোৱা আছে। অক্ষম কৰি আপুনি এই এপ্টো অফ কৰে আৰু ইয়াক আপোনাৰ ডিভাইচৰপৰা লুকুৱায়।"</string>
<string name="app_disable_notifications_dlg_title" msgid="699530661413553928">"জাননীসমুহ অফ কৰিবনে?"</string>
- <string name="app_install_details_group_title" msgid="2909597319422976921">"ষ্ট’ৰ"</string>
+ <string name="app_install_details_group_title" msgid="2909597319422976921">"Store"</string>
<string name="app_install_details_title" msgid="6954953384372934881">"এপ্ৰ সবিশেষ"</string>
<string name="app_install_details_summary" msgid="6612222941121363940">"<xliff:g id="APP_STORE">%1$s</xliff:g>ৰ পৰা এপ্ ইনষ্টল কৰা হৈছে"</string>
<string name="instant_app_details_summary" msgid="6384264315914966114">"<xliff:g id="APP_STORE">%1$s</xliff:g>ত আৰু অধিক তথ্য"</string>
@@ -2092,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"জাননীৰ কম্পন"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"ৰিং কম্পন"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"স্পৰ্শ কৰিলে কম্পন হ’ব"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"সেৱা ব্যৱহাৰ কৰক"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"ৰং শুধৰণি ব্যৱহাৰ কৰক"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"কেপশ্বন ব্যৱহাৰ কৰক"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"সেৱা ব্যৱহাৰ কৰক"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"ৰং শুধৰণী ব্যৱহাৰ কৰক"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"কেপশ্বন ব্যৱহাৰ কৰক"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"অব্যাহত ৰাখক"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"শ্ৰৱণ যন্ত্ৰ"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"কোনো শ্ৰৱণ যন্ত্ৰ সংযুক্ত হৈ থকা নাই"</string>
@@ -2208,7 +2211,7 @@
<string name="print_feature_state_off" msgid="208580346723223688">"অফ হৈ আছে"</string>
<string name="print_menu_item_add_service" msgid="6803000110578493782">"সেৱা যোগ কৰক"</string>
<string name="print_menu_item_add_printer" msgid="8529196211179574921">"প্ৰিণ্টাৰ যোগ কৰক"</string>
- <string name="print_menu_item_search" msgid="1165316329772287360">"সন্ধান কৰক"</string>
+ <string name="print_menu_item_search" msgid="1165316329772287360">"Search"</string>
<string name="print_searching_for_printers" msgid="6538687129687642542">"সংযোগ কৰিবলৈ প্ৰিণ্টাৰ বিচাৰি থকা হৈছে"</string>
<string name="print_service_disabled" msgid="6376344992705893436">"সেৱা নিষ্ক্ৰিয়হৈ আছে"</string>
<string name="print_print_jobs" msgid="7357841034181762157">"প্ৰিণ্টিঙৰ কামবোৰ"</string>
@@ -2458,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"অন কৰক"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"বেটাৰি সঞ্চয়কাৰী ব্যৱহাৰ কৰক"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"বেটাৰী সঞ্চয়কাৰী ব্যৱহাৰ কৰক"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"স্বয়ংক্ৰিয়ভাবে অন কৰক"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"কেতিয়াও নকৰিব"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"<xliff:g id="PERCENT">%1$s</xliff:g> বেটাৰি"</string>
@@ -2616,7 +2619,7 @@
<string name="sync_one_time_sync" msgid="6005174168405784256">"এতিয়াই ছিংক কৰিবলৈ টিপক<xliff:g id="LAST_SYNC_TIME">
%1$s</xliff:g>"</string>
<string name="sync_gmail" msgid="4457967084840001296">"Gmail"</string>
- <string name="sync_calendar" msgid="6573708019827519372">"কেলেণ্ডাৰ"</string>
+ <string name="sync_calendar" msgid="6573708019827519372">"Calendar"</string>
<string name="sync_contacts" msgid="5687434785723746534">"সম্পৰ্কসমূহ"</string>
<string name="sync_plug" msgid="6703804441408427257"><font fgcolor="#ffffffff">"Google ছিংকলৈ আপোনাক স্বাগতম!"</font>" \nডেটা ছিংক কৰাৰ এইয়া Googleৰ এটা পদক্ষেপ, যাৰদ্বাৰা আপুনি য\'তেই নাথাকক ত\'তে সম্পৰ্কসূচী, সাক্ষাতৰ সময়সূচীকে ধৰি আপোনাৰ বাবে অতি দৰকাৰী তথ্যসমূহ থাওকতে পাব।"</string>
<string name="header_application_sync_settings" msgid="4581847153669774489">"এপৰ ছিংক ছেটিংসমূহ"</string>
@@ -3391,7 +3394,7 @@
<string name="zen_access_detail_switch" msgid="8706332327904974500">"অসুবিধা নিদিব ম’ডক অনুমতি দিয়ক"</string>
<string name="zen_access_empty_text" msgid="7667538993781607731">"ইনষ্টল কৰি থোৱা কোনো এপে অসুবিধা নিদিবত প্ৰৱেশৰ অনুমতি বিচৰা নাই"</string>
<string name="loading_notification_apps" msgid="1978345231934072091">"এপ্সমূহ ল’ড কৰি থকা হৈছে..."</string>
- <string name="app_notifications_off_desc" msgid="3904090905748895146">"আপোনাৰ অনুৰোধত, Android-এ এই ডিভাইচটোত এই এপৰ জাননীসমূহ দেখাবলৈ বাধা দি আছে"</string>
+ <string name="app_notifications_off_desc" msgid="3904090905748895146">"আপোনাৰ অনুৰোধমৰ্মে, Androidএ এই এপৰ জাননীসমূহ এই ডিভাইচটোত দৃশ্যমান হোৱাত বাধা দি আছে"</string>
<string name="channel_notifications_off_desc" msgid="8005444443218306611">"আপোনাৰ অনুৰোধমৰ্মে, Androidএ জাননীসমূহৰ এই শ্ৰেণীটোক এই ডিভাইচটোত দৃশ্যমান হ\'বলৈ দিয়া নাই"</string>
<string name="channel_group_notifications_off_desc" msgid="7154205544298672850">"আপোনাৰ অনুৰোধমৰ্মে, Androidএ জাননীসমূহৰ এই গোটটোক এই ডিভাইচটোত দৃশ্যমান হ\'বলৈ দিয়া নাই"</string>
<string name="notification_channels" msgid="956764228116145956">"শ্ৰেণী"</string>
@@ -3723,7 +3726,7 @@
<string name="sharing_remote_bugreport_dialog_message" msgid="3814787466701526359">"আপোনাৰ আইটি প্ৰশাসকৰ সৈতে এই বাগ প্ৰতিবেদনটো শ্বেয়াৰ কৰা হৈছে। অধিক তথ্যৰ বাবে তেওঁলোকৰ সৈতে যোগাযোগ কৰক।"</string>
<string name="share_remote_bugreport_action" msgid="8600797271670537888">"শ্বেয়াৰ কৰক"</string>
<string name="decline_remote_bugreport_action" msgid="706319275774199033">"প্ৰত্যাখ্যান কৰক"</string>
- <string name="usb_use_charging_only" msgid="2344625733377110164">"কোনো ডেটা স্থানান্তৰণ কৰিব নোৱাৰি"</string>
+ <string name="usb_use_charging_only" msgid="2344625733377110164">"ডেটা স্থানান্তৰ কৰিব নোৱাৰি"</string>
<string name="usb_use_charging_only_desc" msgid="3283518562582478950">"ডিভাইচটো কেৱল চাৰ্জ কৰক"</string>
<string name="usb_use_power_only" msgid="6595783381323810697">"চ্চাৰ্জাৰ ডিভাইচত সংযোগ কৰা হ’ল"</string>
<string name="usb_use_file_transfers" msgid="6153021302176151884">"ফাইল স্থানান্তৰণৰ বাবে"</string>
@@ -4007,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"ডিভাইচটো লক হৈ থাকোতে, টাইপিং উত্তৰ বা অইন পাঠ জাননীসমূহ নেদেখুৱাব"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"ডিফ\'ল্ট বানান পৰীক্ষক"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"বানান পৰীক্ষক বাছনি কৰক"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"বানান পৰীক্ষক ব্য়ৱহাৰ কৰক"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"বানান পৰীক্ষক ব্যৱহাৰ কৰক"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"বাছনি কৰা হোৱা নাই"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"পোৱা নগ\'ল"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4100,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"সঞ্চয়াগাৰত ঠাই খালী কৰিবৰ কাৰণে সহায় কৰিবলৈ সঞ্চয়াগাৰ মেনেজাৰে আপোনাৰ ডিভাইচৰ পৰা বেকআপ কৰা ফট\' আৰু ভিডিঅ\'বোৰ আঁতৰাই দিয়ে।"</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"ফট\' আৰু ভিডিঅ\'সমূহ আঁতৰাওক"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"সঞ্চয়াগাৰ পৰিচালক"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"সঞ্চয়াগাৰ পৰিচালক ব্যৱহাৰ কৰক"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"ষ্ট’ৰেজ পৰিচালক ব্যৱহাৰ কৰক"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"স্বয়ংক্ৰিয়"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"হস্তকৃত"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"এতিয়া খালী স্থান উলিয়াওক"</string>
@@ -4236,7 +4239,7 @@
<string name="storage_music_audio" msgid="3661289086715297149">"সংগীত আৰু ধ্বনি"</string>
<string name="storage_games" msgid="7740038143749092373">"খেল"</string>
<string name="storage_other_apps" msgid="3202407095387420842">"অন্যান্য এপসমূহ"</string>
- <string name="storage_files" msgid="2087824267937487880">"ফাইলসমূহ"</string>
+ <string name="storage_files" msgid="2087824267937487880">"Files"</string>
<string name="storage_size_large_alternate" msgid="1317796542509105857">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" "<font size="20">"<xliff:g id="UNIT">^2</xliff:g>"</font></small>""</string>
<string name="storage_volume_total" msgid="5021484171514159913">"<xliff:g id="TOTAL">%1$s</xliff:g>ৰ বাবে ব্যৱহৃত"</string>
<string name="storage_percent_full" msgid="6924662861545958442">"ব্যৱহৃত"</string>
@@ -4470,7 +4473,7 @@
<string name="privacy_dashboard_title" msgid="8764930992456607513">"গোপনীয়তা"</string>
<string name="privacy_dashboard_summary" msgid="7916431309860824945">"অনুমতি, একাউণ্টৰ কাৰ্যকলাপ, ব্যক্তিগত ডেটা"</string>
<string name="contextual_card_dismiss_remove" msgid="1750420285615827309">"আঁতৰাওক"</string>
- <string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"ৰাখক"</string>
+ <string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"Keep"</string>
<string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"এই পৰামৰ্শটো আঁতৰাবনে?"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"পৰামৰ্শ আঁতৰোৱা হ’ল"</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"আনডু কৰক"</string>
diff --git a/tests/CarDeveloperOptions/res/values-az/arrays.xml b/tests/CarDeveloperOptions/res/values-az/arrays.xml
index d6ee9b7..08f6c45 100644
--- a/tests/CarDeveloperOptions/res/values-az/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-az/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"arka fonda işləyir"</item>
<item msgid="6423861043647911030">"əlçatımlılıq dərəcəsi"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Yer"</item>
+ <item msgid="6656077694190491067">"Yer"</item>
+ <item msgid="8790228218278477369">"Yer"</item>
+ <item msgid="7836406246005211990">"Vibrasiya"</item>
+ <item msgid="3951439024549922598">"Kontaktları oxuyun"</item>
+ <item msgid="8802152411647068">"Kontaktları dəyişdirin"</item>
+ <item msgid="229544934599698735">"Zəng jurnalı oxuyun"</item>
+ <item msgid="7396102294405899613">"Zəng jurnalına dəyişiklik edin"</item>
+ <item msgid="3597797992398484655">"Təqvim oxuyun"</item>
+ <item msgid="2705975774250907343">"Təqvimə dəyişiklik edin"</item>
+ <item msgid="4668747371441932697">"Yer"</item>
+ <item msgid="1487578921720243646">"Bildiriş göndərin"</item>
+ <item msgid="4636080349724146638">"Məkan"</item>
+ <item msgid="673510900286463926">"Telefon zəngi"</item>
+ <item msgid="542083422784609790">"SMS/MMS oxuyun"</item>
+ <item msgid="1033780373029588436">"SMS/MMS yazın"</item>
+ <item msgid="5647111115517787488">"SMS/MMS alın"</item>
+ <item msgid="8591105601108455893">"SMS/MMS alın"</item>
+ <item msgid="7730995008517841903">"SMS/MMS alın"</item>
+ <item msgid="2613033109026626086">"SMS/MMS alın"</item>
+ <item msgid="3037159047591081136">"SMS/MMS göndərin"</item>
+ <item msgid="4726682243833913568">"SMS/MMS oxuyun"</item>
+ <item msgid="6555678522277865572">"SMS/MMS yazın"</item>
+ <item msgid="6981734935578130884">"Parametrləri dəyişin"</item>
+ <item msgid="8705854389991425629">"Yuxarıda çəkin"</item>
+ <item msgid="5861356020344153651">"Giriş bildirişi"</item>
+ <item msgid="78432174621628659">"Kamera"</item>
+ <item msgid="3986116419882154794">"Səs yazın"</item>
+ <item msgid="4516840825756409490">"Audio oxudun"</item>
+ <item msgid="6811712502798183957">"Mübadilə buferini oxuyun"</item>
+ <item msgid="2780369012602289114">"Mübadilə buferini dəyişin"</item>
+ <item msgid="2331359440170850868">"Media düymələri"</item>
+ <item msgid="6133599737122751231">"Audio fokus"</item>
+ <item msgid="6844485713404805301">"Master həcmi"</item>
+ <item msgid="1600379420669104929">"Səs həcmi"</item>
+ <item msgid="6296768210470214866">"Zəng həcmi"</item>
+ <item msgid="510690696071629241">"Media səsi"</item>
+ <item msgid="406861638631430109">"Siqnal səsi həcmi"</item>
+ <item msgid="4715864795872233884">"Bildiriş səsi"</item>
+ <item msgid="2311478519251301183">"Bluetooth həcmi"</item>
+ <item msgid="5133991377896747027">"Oyaq saxla"</item>
+ <item msgid="2464189519136248621">"Məkan"</item>
+ <item msgid="2062677934050803037">"Yer"</item>
+ <item msgid="1735171933192715957">"İstifadə statistikasını əldə edin"</item>
+ <item msgid="1014093788778383554">"Mikrofonu susdurun/susdurmayın"</item>
+ <item msgid="4199297950608622850">"Tostu göstərin"</item>
+ <item msgid="2527962435313398821">"Layihə mediası"</item>
+ <item msgid="5117506254221861929">"VPN aktivləşdirin"</item>
+ <item msgid="8291198322681891160">"Yazı divar kağızı"</item>
+ <item msgid="7106921284621230961">"Köməkçi struktur"</item>
+ <item msgid="4496533640894624799">"Köməkçi skrinşot"</item>
+ <item msgid="2598847264853993611">"Telefon statusunu oxuyun"</item>
+ <item msgid="9215610846802973353">"Səsli məktub əlavə edin"</item>
+ <item msgid="9186411956086478261">"Sip istifadə edin"</item>
+ <item msgid="6884763100104539558">"Gedən zəngi idarə edin"</item>
+ <item msgid="125513972170580692">"Barmaq izi"</item>
+ <item msgid="2556071024281275619">"Bədən sensorları"</item>
+ <item msgid="617168514928339387">"Şəbəkə yayımlarını oxuyun"</item>
+ <item msgid="7134693570516523585">"Sınaq yeri"</item>
+ <item msgid="7224489175375229399">"Yaddaşı oxuyun"</item>
+ <item msgid="8472735063903258202">"Yaddaşı yazın"</item>
+ <item msgid="4069276819909595110">"Ekranı yandırın"</item>
+ <item msgid="1228338896751121025">"Hesabları əldə edin"</item>
+ <item msgid="3181581793459233672">"Arxa fonda işlədin"</item>
+ <item msgid="2340936043025374076">"Əlçatımlılıq dərəcəsi"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Qısa"</item>
<item msgid="4816511817309094890">"Orta"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Heç vaxt icazə verməyin"</item>
<item msgid="8184570120217958741">"Həmişə icazə verin"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normal"</item>
+ <item msgid="5101233285497327432">"Orta"</item>
+ <item msgid="1555861583162930714">"Aşağı"</item>
+ <item msgid="1719683776264798117">"Kritik"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normal"</item>
+ <item msgid="6107138933849816768">"Orta"</item>
+ <item msgid="182695359839047859">"Aşağı"</item>
+ <item msgid="8577246509202964244">"Kritik"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Davamlı"</item>
<item msgid="167418068739176448">"Top fəaliyyət"</item>
diff --git a/tests/CarDeveloperOptions/res/values-az/strings.xml b/tests/CarDeveloperOptions/res/values-az/strings.xml
index e2398a6..64f231a 100644
--- a/tests/CarDeveloperOptions/res/values-az/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-az/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Ekrandakı mətni kiçildin və ya böyüdün."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Kiçildin"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Böyüdün"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Mətn nümunəsi"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Ozlu Heyrətamiz Sehrbaz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Fəsil 11: Məftunedici Zümrüd Şəhəri Oz"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Profil info"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Hesablar"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Yer"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Məkan istifadə edin"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Məkan istifadə edin"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Deaktiv"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Aktiv - <xliff:g id="COUNT_1">%1$d</xliff:g> tətbiqin məkana girişi var</item>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Wi-Fi yandırın"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Wi-Fi istifadə edin"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Wi-Fi istifadə edin"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi-Fi ayarları"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Simzis giriş nöqtələrini quraşdırın və idarə edin"</string>
@@ -906,7 +905,7 @@
<string name="wifi_ssid_hint" msgid="5010024648106585165">"SSID daxil edin"</string>
<string name="wifi_security" msgid="9136702039496152831">"Təhlükəsizlik"</string>
<string name="wifi_hidden_network" msgid="6647772204699776833">"Gizlədilmiş şəbəkə"</string>
- <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Yönləndirici şəbəkə ID-sini yayımlamırsa, lakin ona gələcəkdə qoşulmaq istəyirsinizsə, şəbəkəni gizlədə bilərsiniz.\n\nBu təhlükəsizliyinizi riskə ata bilər çünki telefon şəbəkəni tapmaq üçün daima siqnal yayımlayacaq.\n\nŞəbəkəini gizlətmək yönləndirici ayarlarını dəyişməyəcək."</string>
+ <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Yönləndirici şəbəkə ID-sini yayımlamırsa, lakin ona gələcəkdə qoşulmaq istəyirsinizsə, şəbəkəni gizlədə bilərsiniz.\n\nBu təhlükəsizliyinizi riskə ata bilər, çünki telefon şəbəkəni tapmaq üçün daima siqnal yayımlayacaq.\n\nŞəbəkəini gizlətmək yönləndirici ayarlarını dəyişməyəcək."</string>
<string name="wifi_signal" msgid="696548364467704808">"Siqnal gücü"</string>
<string name="wifi_status" msgid="3439931558930689940">"Status"</string>
<string name="tx_wifi_speed" msgid="2571810085003261073">"Link sürətini ötürün"</string>
@@ -941,7 +940,7 @@
<string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"\"<xliff:g id="SSID">%1$s</xliff:g>\" şəbəkəsinə qoşulmaq üçün aşağıdakı QR kodunu kameranın mərkəzinə tutun"</string>
<string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"QR kodunu skan etməklə Wi‑Fi şəbəkəsinə qoşulun"</string>
<string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Wi‑Fi şəbəkəsini paylaşın"</string>
- <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"\"<xliff:g id="SSID">%1$s</xliff:g>\" şəbəkəsinə qoşulmaq və parolu paylaşmaq üçün bu QR kodu skan edin"</string>
+ <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"\"<xliff:g id="SSID">%1$s</xliff:g>\" şəbəkəsinə qoşulmaq və parolu paylaşmaq üçün bu QR kodunu skan edin"</string>
<string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"\"<xliff:g id="SSID">%1$s</xliff:g>\" şəbəkəsinə qoşulmaq üçün bu QR kodu skan edin"</string>
<string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"QR kodunu oxumaq mümkün olmadı. Kodu mərkəzə tutduqdan sonra yenidən cəhd edin"</string>
<string name="wifi_dpp_failure_authentication_or_configuration" msgid="9142051662156233679">"Yenidən cəhd edin. Problem davam edərsə, cihaz istehsalçısı ilə əlaqə saxlayın"</string>
@@ -1047,7 +1046,7 @@
<string name="wifi_p2p_menu_search" msgid="8207638860263805291">"Cihaz axtarışı"</string>
<string name="wifi_p2p_menu_searching" msgid="7443249001543208106">"Axtarır..."</string>
<string name="wifi_p2p_menu_rename" msgid="2129974878377065488">"Cihazı yenidən adlandır"</string>
- <string name="wifi_p2p_peer_devices" msgid="8232126067045093382">"Peer cihazlar"</string>
+ <string name="wifi_p2p_peer_devices" msgid="8232126067045093382">"Əlçatımlı cihazlar"</string>
<string name="wifi_p2p_remembered_groups" msgid="1356458238836730346">"Qrupları yadda saxla"</string>
<string name="wifi_p2p_failed_connect_message" msgid="6103436959132424093">"Bağlana bilmədi."</string>
<string name="wifi_p2p_failed_rename_message" msgid="638656605352538706">"Cihazın adı dəyişə bilmədi."</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Mobil"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Wi‑Fi əlçatan olmasa, mobil şəbəkədən istifadə edin"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Mobil şəbəkə əlçatan olmasa, Wi‑Fi istifadə edin"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Wi‑Fi ilə zəng edin. Wi‑Fi itsə, zəng sonlandırılacaq."</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Bildiriş vibrasiyası"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Zəng vibrasiyası"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Toxunuş vibrasiyası"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Xidmətdən istifadə edin"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Rəng korreksiyasından istifadə edin"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Başlıqlardan istifadə edin"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Xidmətdən istifadə edin"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Rəng korreksiyasından istifadə edin"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Başlıqlardan istifadə edin"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Davam edin"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Qulaqlıq"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Qulaqlıq qoşulmayıb"</string>
@@ -2279,7 +2281,7 @@
<string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Batareya həmişə olduğundan daha tez bitə bilər"</string>
<string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"Batareya Qənaəti aktivdir"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"Bəzi funksiyalar məhddudlaşdırıla bilər"</string>
- <string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Telefon həddindən çox istifadə etdi"</string>
+ <string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Telefon gərəkdiyindən daha çox işlədib"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"Planşet hədindən çox istifadə etdi"</string>
<string name="battery_tip_high_usage_title" product="device" msgid="8304138287288309490">"Cihaz həddindən çox istifadə etdi"</string>
<string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"Batareya həmişə olduğundan daha tez bitə bilər"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Aktiv edin"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Batareya Qənaətindən istifadə edin"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Batareya Qənaətindən istifadə edin"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Avtomatik aktivləşdir"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Heç vaxt"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"<xliff:g id="PERCENT">%1$s</xliff:g> batareya"</string>
@@ -2529,7 +2531,7 @@
<string name="credentials_reset_summary" msgid="7622528359699428555">"Bütün sertifikatları sil"</string>
<string name="trusted_credentials" msgid="6989242522455395200">"İnanılmış etimadlar"</string>
<string name="trusted_credentials_summary" msgid="7411781319056251582">"İnanılmış CA sertifikatları göstər"</string>
- <string name="user_credentials" msgid="8365731467650306757">"İstifadəçi haqqında məlumatlar"</string>
+ <string name="user_credentials" msgid="8365731467650306757">"İstifadəçi məlumatı"</string>
<string name="user_credentials_summary" msgid="7350223899317423252">"Saxlanılan məlumatlara baxın və dəyişin"</string>
<string name="advanced_security_title" msgid="286883005673855845">"Qabaqcıl ayarlar"</string>
<string name="credential_storage_type" msgid="2585337320206095255">"Saxlama növü"</string>
@@ -3132,7 +3134,7 @@
<string name="sound_settings_summary_vibrate" msgid="2194491116884798590">"Zəng səsi vibrasiya rejimindədir"</string>
<string name="sound_settings_summary_silent" msgid="899823817462768876">"Zəng səsi səssiz rejimdədir"</string>
<string name="sound_settings_example_summary" msgid="2091822107298841827">"Zəng səsi 80% faizdir"</string>
- <string name="media_volume_option_title" msgid="3553411883305505682">"Media həcmi"</string>
+ <string name="media_volume_option_title" msgid="3553411883305505682">"Media səsi"</string>
<string name="remote_media_volume_option_title" msgid="6355710054191873836">"Yayım həcmi"</string>
<string name="call_volume_option_title" msgid="5028003296631037334">"Zəng səsi"</string>
<string name="alarm_volume_option_title" msgid="3184076022438477047">"Siqnal səsi həcmi"</string>
@@ -3192,7 +3194,7 @@
<string name="zen_mode_summary_combination" msgid="6960111215170691605">"<xliff:g id="MODE">%1$s</xliff:g>: <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="zen_mode_visual_interruptions_settings_title" msgid="8378266552787406849">"Vizual fəsadları blok edin"</string>
<string name="zen_mode_visual_signals_settings_subtitle" msgid="6608239691864638854">"Görünən siqnallara icazə verin"</string>
- <string name="zen_mode_settings_category" msgid="5601680733422424922">"Narahat Etməyin rejimi aktiv olduqda"</string>
+ <string name="zen_mode_settings_category" msgid="5601680733422424922">"Narahat Etmə rejimi aktiv olduqda"</string>
<string name="zen_mode_restrict_notifications_title" msgid="7486753018073540477">"Bildirişləri məhdudlaşdırın"</string>
<string name="zen_mode_restrict_notifications_mute" msgid="2673665450311184875">"Bildirişlər səs çıxarmır"</string>
<string name="zen_mode_restrict_notifications_mute_summary" msgid="1696217042353376674">"Ekranda bildirişləri görəcəksiniz"</string>
@@ -3692,7 +3694,7 @@
<string name="memory_avg_desc" msgid="1200185697910086968">"Orta <xliff:g id="MEMORY">%1$s</xliff:g>"</string>
<string name="memory_use_running_format" msgid="3741170402563292232">"<xliff:g id="MEMORY">%1$s</xliff:g> / <xliff:g id="RUNNING">%2$s</xliff:g>"</string>
<string name="process_format" msgid="8575347150598564509">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="COUNT">%2$d</xliff:g>)"</string>
- <string name="high_power_apps" msgid="2518319744362028920">"Batareya optimallaşdırılması"</string>
+ <string name="high_power_apps" msgid="2518319744362028920">"Batareya optimallaşması"</string>
<string name="additional_battery_info" msgid="6877663897819271203">"İstifadə siqnalları"</string>
<string name="show_all_apps" msgid="5442552004569634846">"Tam cihaz istifadəsini göstərin"</string>
<string name="hide_extra_apps" msgid="6798261081113299441">"Tətbiq istifadəsini göstərin"</string>
@@ -3802,7 +3804,7 @@
<string name="system_alert_window_apps_title" msgid="9188448296493699566">"Tətbiqlər"</string>
<string name="system_alert_window_access_title" msgid="5187343732185369675">"Tətbiqlər üzərindən görüntüləmə"</string>
<string name="permit_draw_overlay" msgid="9039092257052422344">"Digər tətbiq üzərindən görüntüləmək icazəsi"</string>
- <string name="allow_overlay_description" msgid="6669524816705082807">"Bu tətbiqə istifadə etdiyiniz digər tətbiqlərin üzərində göstərilmək icazəsi verin. Bu tətbiq həmin tətbiqlərin istifadəsinə müdaxilə edə və ya tətbiqlərin görünüş və davranışını dəyişə bilər."</string>
+ <string name="allow_overlay_description" msgid="6669524816705082807">"Bu tətbiqə işlətdiyiniz digər tətbiqlərin üzərində göstərilmək icazəsi verin. Bu tətbiq həmin tətbiqlərin istifadəsinə müdaxilə edə və ya tətbiqlərin görünüş və davranışını dəyişə bilər."</string>
<string name="keywords_vr_listener" msgid="5312633527788917750">"vr virtual reallıq dinləyici stereo köməkçi xidməti"</string>
<string name="keywords_system_alert_window" msgid="3936658600272194599">"digər tətbiqlərin üzərində sistem siqnalının pəncərə dialoq görüntüsü"</string>
<string name="overlay_settings" msgid="3325154759946433666">"Tətbiqlər üzərindən görüntüləmə"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Cihaz kilidlidirsə, bildirişlərdə cavab və ya digər mətnlərin yazılmasının qarşısını alın."</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Defolt orfoqrafik yoxlama"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Orfoqrafik yoxlama seçin"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Orfoqrafik yoxlamadan istifadə edin"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Orfoqrafik yoxlamadan istifadə edin"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Seçilməyib"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(heç biri)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Yaddaşda boş yer yaratmaq üçün, yaddaş meneceri yedəklənmiş foto və videoları cihazınızdan silir."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Foto və videoları silin"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Yaddaş Meneceri"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Yaddaş menecerindən istifadə edin"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Yaddaş menecerindən istifadə edin"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Avtomatik"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Təlimat"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"İndi yer boşaldın"</string>
diff --git a/tests/CarDeveloperOptions/res/values-b+sr+Latn/arrays.xml b/tests/CarDeveloperOptions/res/values-b+sr+Latn/arrays.xml
index b459ed6..56a4885 100644
--- a/tests/CarDeveloperOptions/res/values-b+sr+Latn/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-b+sr+Latn/arrays.xml
@@ -214,7 +214,7 @@
</string-array>
<string-array name="app_ops_categories">
<item msgid="1102693344156734891">"Lokacija"</item>
- <item msgid="6842381562497597649">"Lični"</item>
+ <item msgid="6842381562497597649">"Lično"</item>
<item msgid="3966700236695683444">"Razmena poruka"</item>
<item msgid="8563996233342430477">"Mediji"</item>
<item msgid="5323851085993963783">"Uređaj"</item>
@@ -230,7 +230,7 @@
<item msgid="2260380357119423209">"menjanje evidencije poziva"</item>
<item msgid="6550710385014530934">"čitanje kalendara"</item>
<item msgid="3575906174264853951">"menjanje kalendara"</item>
- <item msgid="4319843242568057174">"Wi-Fi skeniranje"</item>
+ <item msgid="4319843242568057174">"WiFi skeniranje"</item>
<item msgid="2981791890467303819">"obaveštenje"</item>
<item msgid="6617825156152476692">"skeniranje telefona"</item>
<item msgid="8865260890611559753">"pozivanje telefona"</item>
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"rad u pozadini"</item>
<item msgid="6423861043647911030">"jačina zvuka za pristupačnost"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Lokacija"</item>
+ <item msgid="6656077694190491067">"Lokacija"</item>
+ <item msgid="8790228218278477369">"Lokacija"</item>
+ <item msgid="7836406246005211990">"Vibracija"</item>
+ <item msgid="3951439024549922598">"Čitanje kontakata"</item>
+ <item msgid="8802152411647068">"Menjanje kontakata"</item>
+ <item msgid="229544934599698735">"Čitanje evidencije poziva"</item>
+ <item msgid="7396102294405899613">"Menjanje evidencije poziva"</item>
+ <item msgid="3597797992398484655">"Čitanje kalendara"</item>
+ <item msgid="2705975774250907343">"Menjanje kalendara"</item>
+ <item msgid="4668747371441932697">"Lokacija"</item>
+ <item msgid="1487578921720243646">"Postavljanje obaveštenja"</item>
+ <item msgid="4636080349724146638">"Lokacija"</item>
+ <item msgid="673510900286463926">"Pozivanje telefona"</item>
+ <item msgid="542083422784609790">"Čitanje SMS/MMS poruka"</item>
+ <item msgid="1033780373029588436">"Pisanje SMS/MMS poruka"</item>
+ <item msgid="5647111115517787488">"Prijem SMS/MMS poruka"</item>
+ <item msgid="8591105601108455893">"Prijem SMS/MMS poruka"</item>
+ <item msgid="7730995008517841903">"Prijem SMS/MMS poruka"</item>
+ <item msgid="2613033109026626086">"Prijem SMS/MMS poruka"</item>
+ <item msgid="3037159047591081136">"Slanje SMS/MMS poruka"</item>
+ <item msgid="4726682243833913568">"Čitanje SMS/MMS poruka"</item>
+ <item msgid="6555678522277865572">"Pisanje SMS/MMS poruka"</item>
+ <item msgid="6981734935578130884">"Menjanje podešavanja"</item>
+ <item msgid="8705854389991425629">"Povlačenje na vrh"</item>
+ <item msgid="5861356020344153651">"Pristup obaveštenjima"</item>
+ <item msgid="78432174621628659">"Kamera"</item>
+ <item msgid="3986116419882154794">"Snimanje audio zapisa"</item>
+ <item msgid="4516840825756409490">"Puštanje audio zapisa"</item>
+ <item msgid="6811712502798183957">"Čitanje memorije"</item>
+ <item msgid="2780369012602289114">"Menjanje memorije"</item>
+ <item msgid="2331359440170850868">"Dugmad za medije"</item>
+ <item msgid="6133599737122751231">"Audio fokus"</item>
+ <item msgid="6844485713404805301">"Glavna jačina zvuka"</item>
+ <item msgid="1600379420669104929">"Jačina zvuka glasa"</item>
+ <item msgid="6296768210470214866">"Jačina zvuka zvona"</item>
+ <item msgid="510690696071629241">"Jačina zvuka medija"</item>
+ <item msgid="406861638631430109">"Jačina zvuka alarma"</item>
+ <item msgid="4715864795872233884">"Jačina zvuka za obaveštenja"</item>
+ <item msgid="2311478519251301183">"Jačina zvuka Bluetooth-a"</item>
+ <item msgid="5133991377896747027">"Zadrži van stanja spavanja"</item>
+ <item msgid="2464189519136248621">"Lokacija"</item>
+ <item msgid="2062677934050803037">"Lokacija"</item>
+ <item msgid="1735171933192715957">"Preuzmi statistiku o korišćenju"</item>
+ <item msgid="1014093788778383554">"Isključi/uključi zvuk mikrofona"</item>
+ <item msgid="4199297950608622850">"Prikazivanje iskačućih poruka"</item>
+ <item msgid="2527962435313398821">"Mediji za projekat"</item>
+ <item msgid="5117506254221861929">"Aktiviranje VPN-a"</item>
+ <item msgid="8291198322681891160">"Upis na pozadinu"</item>
+ <item msgid="7106921284621230961">"Struktura pomoći"</item>
+ <item msgid="4496533640894624799">"Snimak ekrana pomoći"</item>
+ <item msgid="2598847264853993611">"Čitanje stanja telefona"</item>
+ <item msgid="9215610846802973353">"Dodavanje govorne pošte"</item>
+ <item msgid="9186411956086478261">"Korišćenje SIP-a"</item>
+ <item msgid="6884763100104539558">"Obrada odlaznog poziva"</item>
+ <item msgid="125513972170580692">"Otisak prsta"</item>
+ <item msgid="2556071024281275619">"Senzori za telo"</item>
+ <item msgid="617168514928339387">"Čitanje poruka za mobilne uređaje na lokalitetu"</item>
+ <item msgid="7134693570516523585">"Lažna lokacija"</item>
+ <item msgid="7224489175375229399">"Čitanje memorijskog prostora"</item>
+ <item msgid="8472735063903258202">"Upis podataka u memorijski prostor"</item>
+ <item msgid="4069276819909595110">"Uključivanje ekrana"</item>
+ <item msgid="1228338896751121025">"Pristup nalozima"</item>
+ <item msgid="3181581793459233672">"Rad u pozadini"</item>
+ <item msgid="2340936043025374076">"Jačina zvuka za pristupačnost"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Kratko"</item>
<item msgid="4816511817309094890">"Srednji"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Nikada ne dozvoli"</item>
<item msgid="8184570120217958741">"Uvek dozvoli"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normalno"</item>
+ <item msgid="5101233285497327432">"Umereno"</item>
+ <item msgid="1555861583162930714">"Niska"</item>
+ <item msgid="1719683776264798117">"Kritična"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normalna"</item>
+ <item msgid="6107138933849816768">"Umerena"</item>
+ <item msgid="182695359839047859">"Niska"</item>
+ <item msgid="8577246509202964244">"Kritično"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Neprekidna"</item>
<item msgid="167418068739176448">"Najveća aktivnost"</item>
diff --git a/tests/CarDeveloperOptions/res/values-b+sr+Latn/strings.xml b/tests/CarDeveloperOptions/res/values-b+sr+Latn/strings.xml
index 714da21..ce0cf96 100644
--- a/tests/CarDeveloperOptions/res/values-b+sr+Latn/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-b+sr+Latn/strings.xml
@@ -36,7 +36,7 @@
<string name="radio_info_data_connection_disable" msgid="2430609627397999371">"Onemogući vezu za prenos podataka"</string>
<string name="volte_provisioned_switch_string" msgid="6326756678226686704">"Dodeljeno za VoLTE"</string>
<string name="vt_provisioned_switch_string" msgid="7458479879009293613">"Video pozivanje je dodeljeno"</string>
- <string name="wfc_provisioned_switch_string" msgid="5446697646596639516">"Pozivanje preko Wifi veze je dodeljeno"</string>
+ <string name="wfc_provisioned_switch_string" msgid="5446697646596639516">"Pozivanje preko WiFi veze je dodeljeno"</string>
<string name="eab_provisioned_switch_string" msgid="3921103790584572430">"EAB/Dodeljeno prisustvo"</string>
<string name="cbrs_data_switch_string" msgid="9120919504831536183">"Cbrs podaci"</string>
<string name="dsds_switch_string" msgid="2606482598327613264">"Omogući DSDS"</string>
@@ -84,8 +84,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Omogućava da tekst na ekranu bude manji ili veći."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Umanji"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Uvećaj"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Primer teksta"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Čarobnjak iz Oza"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Poglavlje 11: Čudesni Smaragdni grad Oza"</string>
@@ -305,7 +304,7 @@
<string name="settings_shortcut" msgid="4503714880251502167">"Prečica podešavanja"</string>
<string name="airplane_mode" msgid="4508870277398231073">"Režim rada u avionu"</string>
<string name="wireless_networks_settings_title" msgid="4298430520189173949">"Bežična veza i mreže"</string>
- <string name="radio_controls_summary" msgid="4596981962167684814">"Upravljanje Wi-Fi mrežom, Bluetooth-om, režimom rada u avionu, mobilnim mrežama i VPN-om"</string>
+ <string name="radio_controls_summary" msgid="4596981962167684814">"Upravljanje WiFi mrežom, Bluetooth-om, režimom rada u avionu, mobilnim mrežama i VPN-om"</string>
<string name="cellular_data_title" msgid="7909624119432695022">"Mobilni podaci"</string>
<string name="calls_title" msgid="875693497825736550">"Dozvoli pozive"</string>
<string name="sms_messages_title" msgid="934188835214592753">"SMS poruke"</string>
@@ -371,7 +370,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Podaci o profilu"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Nalozi"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Lokacija"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Koristi lokaciju"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Koristi lokaciju"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Isključena"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">Uključena – <xliff:g id="COUNT_1">%1$d</xliff:g> aplikacija može da pristupa lokaciji</item>
@@ -507,7 +506,7 @@
<string name="fingerprint_delete_title" msgid="3120894112324235536">"Uklonite „<xliff:g id="FINGERPRINT_ID">%1$s</xliff:g>“"</string>
<string name="fingerprint_delete_message" msgid="5895802741486967970">"Želite li da izbrišete ovaj otisak prsta?"</string>
<string name="fingerprint_last_delete_message" msgid="3346252479778971442">"Nećete moći da otključavate telefon, odobravate kupovine niti da se prijavljujete u aplikacije pomoću otisaka prstiju"</string>
- <string name="fingerprint_last_delete_message_profile_challenge" msgid="5385095150532247025">"Nećete moći da otključavate profil za Work, odobravate kupovine niti da se prijavljujete u aplikacije za Work pomoću otisaka prstiju"</string>
+ <string name="fingerprint_last_delete_message_profile_challenge" msgid="5385095150532247025">"Nećete moći da otključavate poslovni profil, odobravate kupovine niti da se prijavljujete u poslovne aplikacije pomoću otisaka prstiju"</string>
<string name="fingerprint_last_delete_confirm" msgid="7984595457589664004">"Da, ukloni"</string>
<string name="crypt_keeper_settings_title" msgid="839783588093862748">"Šifrovanje"</string>
<string name="crypt_keeper_encrypt_title" product="tablet" msgid="2292129135369853167">"Šifruj tablet"</string>
@@ -549,7 +548,7 @@
<string name="suggested_fingerprint_lock_settings_summary" product="device" msgid="8114514312665251311"></string>
<string name="suggested_fingerprint_lock_settings_summary" product="default" msgid="8114514312665251311"></string>
<string name="lock_settings_picker_title" msgid="1034741644461982205">"Zaključavanje ekrana"</string>
- <string name="lock_settings_picker_title_profile" msgid="5086594364428782115">"Izaberite zaključavanje za Work"</string>
+ <string name="lock_settings_picker_title_profile" msgid="5086594364428782115">"Izaberite zaključavanje za posao"</string>
<string name="setup_lock_settings_picker_title" product="tablet" msgid="2429667472335773519">"Zaštitite tablet"</string>
<string name="setup_lock_settings_picker_title" product="device" msgid="4739290104106645233">"Zaštitite uređaj"</string>
<string name="setup_lock_settings_picker_title" product="default" msgid="3911582328576859628">"Zaštitite telefon"</string>
@@ -564,7 +563,7 @@
<string name="unlock_set_unlock_launch_picker_title" msgid="2731152716948003853">"Zaključavanje ekrana"</string>
<string name="unlock_set_unlock_launch_picker_summary_lock_immediately" msgid="5596186270725220642">"<xliff:g id="UNLOCK_METHOD">%1$s</xliff:g>/odmah posle spavanja"</string>
<string name="unlock_set_unlock_launch_picker_summary_lock_after_timeout" msgid="3861167251234952373">"<xliff:g id="UNLOCK_METHOD">%1$s</xliff:g>/<xliff:g id="TIMEOUT_STRING">%2$s</xliff:g> posle spavanja"</string>
- <string name="unlock_set_unlock_launch_picker_title_profile" msgid="7976345264630422921">"Zaključavanje profila za Work"</string>
+ <string name="unlock_set_unlock_launch_picker_title_profile" msgid="7976345264630422921">"Zaključavanje poslovnog profila"</string>
<string name="unlock_set_unlock_launch_picker_change_title" msgid="32310692507029407">"Promena zaključ. ekrana"</string>
<string name="unlock_set_unlock_launch_picker_change_summary" msgid="2072792784866320522">"Menjanje ili onemogućavanje šablona, PIN koda ili bezbednosti lozinke"</string>
<string name="unlock_set_unlock_launch_picker_enable_summary" msgid="9070847611379078795">"Izaberite metod zaključavanja ekrana"</string>
@@ -648,12 +647,12 @@
<string name="lock_last_pattern_attempt_before_wipe_user" msgid="5194192938934564218">"Ako u sledećem pokušaju unesete netačan šablon, izbrisaćemo ovog korisnika"</string>
<string name="lock_last_pin_attempt_before_wipe_user" msgid="7833852187363499906">"Ako u sledećem pokušaju unesete netačan PIN, izbrisaćemo ovog korisnika"</string>
<string name="lock_last_password_attempt_before_wipe_user" msgid="8979742220140001204">"Ako u sledećem pokušaju unesete netačnu lozinku, izbrisaćemo ovog korisnika"</string>
- <string name="lock_last_pattern_attempt_before_wipe_profile" msgid="3877613047631174576">"Ako u sledećem pokušaju unesete netačan šablon, izbrisaćemo profil za Work i njegove podatke"</string>
- <string name="lock_last_pin_attempt_before_wipe_profile" msgid="8132438288175428168">"Ako u sledećem pokušaju unesete netačan PIN, izbrisaćemo profil za Work i njegove podatke"</string>
- <string name="lock_last_password_attempt_before_wipe_profile" msgid="1535128774464384305">"Ako u sledećem pokušaju unesete netačnu lozinku, izbrisaćemo profil za Work i njegove podatke"</string>
+ <string name="lock_last_pattern_attempt_before_wipe_profile" msgid="3877613047631174576">"Ako u sledećem pokušaju unesete netačan šablon, izbrisaćemo poslovni profil i njegove podatke"</string>
+ <string name="lock_last_pin_attempt_before_wipe_profile" msgid="8132438288175428168">"Ako u sledećem pokušaju unesete netačan PIN, izbrisaćemo poslovni profil i njegove podatke"</string>
+ <string name="lock_last_password_attempt_before_wipe_profile" msgid="1535128774464384305">"Ako u sledećem pokušaju unesete netačnu lozinku, izbrisaćemo poslovni profil i njegove podatke"</string>
<string name="lock_failed_attempts_now_wiping_device" msgid="8662360098784762828">"Previše netačnih pokušaja. Izbrisaćemo podatke sa ovog uređaja."</string>
<string name="lock_failed_attempts_now_wiping_user" msgid="3793513796171561873">"Previše netačnih pokušaja. Izbrisaćemo ovog korisnika."</string>
- <string name="lock_failed_attempts_now_wiping_profile" msgid="5347108525299038285">"Previše netačnih pokušaja. Izbrisaćemo ovaj profil za Work i njegove podatke."</string>
+ <string name="lock_failed_attempts_now_wiping_profile" msgid="5347108525299038285">"Previše netačnih pokušaja. Izbrisaćemo ovaj poslovni profil i njegove podatke."</string>
<string name="lock_failed_attempts_now_wiping_dialog_dismiss" msgid="3950582268749037318">"Odbaci"</string>
<plurals name="lockpassword_password_too_short" formatted="false" msgid="694091983183310827">
<item quantity="one">Mora da sadrži najmanje <xliff:g id="COUNT_1">%d</xliff:g> znak</item>
@@ -747,7 +746,7 @@
<string name="bluetooth_settings" msgid="5228032727293770389">"Bluetooth"</string>
<string name="bluetooth_settings_title" msgid="7261244857456521825">"Bluetooth"</string>
<string name="bluetooth_settings_summary" msgid="1221689092429277887">"Upravljanje vezama, podešavanje naziva i vidljivosti uređaja"</string>
- <string name="bluetooth_pairing_request" msgid="7221745525632573125">"Upariti sa uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
+ <string name="bluetooth_pairing_request" msgid="7221745525632573125">"Želite da uparite sa <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="bluetooth_pairing_key_msg" msgid="1139230917419961975">"Kôd za uparivanje sa Bluetooth uređajem"</string>
<string name="bluetooth_enter_passkey_msg" msgid="6205151011298670207">"Unesite kôd za uparivanje, pa pritisnite Return ili Enter"</string>
<string name="bluetooth_enable_alphanumeric_pin" msgid="9138308197078115672">"PIN sadrži slova ili simbole"</string>
@@ -834,8 +833,8 @@
<string name="wifi_tap_to_sign_in" msgid="1075925570550560453">"Dodirnite ovde da biste se prijavili na mrežu"</string>
<string name="tx_link_speed" msgid="4557508597788146162">"<xliff:g id="TRANSMIT_LINK_SPEED">%1$d</xliff:g> Mb/s"</string>
<string name="rx_link_speed" msgid="3735337600274627581">"<xliff:g id="RECEIVE_LINK_SPEED">%1$d</xliff:g> Mb/s"</string>
- <string name="wifi_ask_enable" msgid="925862998663619616">"<xliff:g id="REQUESTER">%s</xliff:g> želi da uključi Wi-Fi"</string>
- <string name="wifi_ask_disable" msgid="2146839060110412974">"<xliff:g id="REQUESTER">%s</xliff:g> želi da isključi Wi-Fi"</string>
+ <string name="wifi_ask_enable" msgid="925862998663619616">"<xliff:g id="REQUESTER">%s</xliff:g> želi da uključi WiFi"</string>
+ <string name="wifi_ask_disable" msgid="2146839060110412974">"<xliff:g id="REQUESTER">%s</xliff:g> želi da isključi WiFi"</string>
<string name="art_verifier_for_debuggable_title" msgid="5223835619409464642">"Potvrdi binarni kôd aplikacija iz kojih mogu da se otklone greške"</string>
<string name="art_verifier_for_debuggable_summary" msgid="2204242476996701111">"Dozvoli da ART potvrdi binarni kôd aplikacija iz kojih mogu da se otklone greške"</string>
<string name="nfc_quick_toggle_title" msgid="4990697912813795002">"NFC"</string>
@@ -852,15 +851,15 @@
<string name="android_beam_label" msgid="5340299879556025708">"Android Beam"</string>
<string name="android_beam_explained" msgid="4501176353247859329">"Kada je ova funkcija uključena, možete da prebacujete sadržaj aplikacija na drugi uređaj na kome je omogućen NFC tako što ćete približiti uređaje jedan drugome. Na primer, možete da prebacujete veb-stranice, YouTube video snimke, kontakte i još toga.\n\nSamo prislonite uređaje jedan na drugi (obično sa zadnje strane), a zatim dodirnite ekran. Aplikacija određuje šta će biti prebačeno."</string>
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
- <string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Uključivanje Wi-Fi-ja"</string>
+ <string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Uključivanje WiFi-ja"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Koristi Wi-Fi"</string>
- <string name="wifi_settings_category" msgid="9094716747565527901">"Wi-Fi podešavanja"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Koristi WiFi"</string>
+ <string name="wifi_settings_category" msgid="9094716747565527901">"WiFi podešavanja"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Podešavanje i upravljanje bežičnim pristupnim tačkama"</string>
- <string name="wifi_select_network" msgid="2541598480767312831">"Izaberi Wi-Fi"</string>
- <string name="wifi_starting" msgid="1299466156783469023">"Uključivanje Wi-Fi-ja..."</string>
- <string name="wifi_stopping" msgid="413711069039939520">"Isključivanje Wi-Fi-ja..."</string>
+ <string name="wifi_select_network" msgid="2541598480767312831">"Izaberi WiFi"</string>
+ <string name="wifi_starting" msgid="1299466156783469023">"Uključivanje WiFi-ja..."</string>
+ <string name="wifi_stopping" msgid="413711069039939520">"Isključivanje WiFi-ja..."</string>
<string name="wifi_error" msgid="5605801874484465557">"Greška"</string>
<string name="wifi_sap_no_channel_error" msgid="6881796988574851628">"Opseg od 5 GHz nije dostupan u ovoj zemlji"</string>
<string name="wifi_in_airplane_mode" msgid="4729571191578262246">"U Režimu rada u avionu"</string>
@@ -872,7 +871,7 @@
<string name="wifi_wakeup_summary_scanning_disabled" msgid="6820040651529910914">"Nedostupno je jer je isključeno Wi‑Fi skeniranje"</string>
<string name="wifi_wakeup_summary_scoring_disabled" msgid="7067018832237903151">"Da biste koristili funkciju, izaberite dobavljača ocene mreže"</string>
<string name="wifi_poor_network_detection" msgid="7193423327400703073">"Izbegavaj loše veze"</string>
- <string name="wifi_poor_network_detection_summary" msgid="5539951465985614590">"Ne koristi Wi-Fi mrežu ako nema dobru internet vezu"</string>
+ <string name="wifi_poor_network_detection_summary" msgid="5539951465985614590">"Ne koristi WiFi mrežu ako nema dobru internet vezu"</string>
<string name="wifi_avoid_poor_network_detection_summary" msgid="1976503191780928104">"Koristi samo one mreže koje imaju dobru internet vezu"</string>
<string name="use_open_wifi_automatically_title" msgid="3084513215481454350">"Povezuj se sa otvorenim mrežama"</string>
<string name="use_open_wifi_automatically_summary" msgid="8338020172673161754">"Automatski se povezuj sa javnim mrežama visokog kvaliteta"</string>
@@ -880,15 +879,15 @@
<string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"Da biste koristili funkciju, izaberite kompatibilnog dobavljača ocene mreže"</string>
<string name="wifi_install_credentials" msgid="5650088113710858289">"Instaliraj sertifikate"</string>
<string name="wifi_scan_notify_text" msgid="7614101215028336927">"Da bi poboljšale preciznost lokacije, aplikacije i usluge mogu i dalje da traže Wi‑Fi mreže u bilo kom trenutku, čak i kada je Wi‑Fi isključen. Ovo može da se koristi, na primer, za poboljšanje funkcija i usluga zasnovanih na lokaciji. Ovo možete da promenite u <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>podešavanjima pretraživanja<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
- <string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"Da biste poboljšali preciznost lokacije, uključite Wi-Fi skeniranje u <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>podešavanjima skeniranja<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
+ <string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"Da biste poboljšali preciznost lokacije, uključite WiFi skeniranje u <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>podešavanjima skeniranja<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
<string name="wifi_scan_notify_remember_choice" msgid="1235445971400237444">"Ne prikazuj ponovo"</string>
- <string name="wifi_setting_sleep_policy_title" msgid="2120785188625932076">"Ne isključuj Wi-Fi tokom spavanja"</string>
+ <string name="wifi_setting_sleep_policy_title" msgid="2120785188625932076">"Ne isključuj WiFi tokom spavanja"</string>
<string name="wifi_setting_on_during_sleep_title" msgid="856670183023402715">"Wi‑Fi je uključen tokom spavanja"</string>
<string name="wifi_setting_sleep_policy_error" msgid="9029652631829560733">"Došlo je do problema prilikom promene podešavanja"</string>
<string name="wifi_suspend_efficiency_title" msgid="5292408676086580527">"Poboljšaj efikasnost"</string>
- <string name="wifi_suspend_optimizations" msgid="8826033336622472222">"Wi-Fi optimizacija"</string>
- <string name="wifi_suspend_optimizations_summary" msgid="2375789014394339008">"Smanji korišćenje baterije kada je Wi-Fi uključen"</string>
- <string name="wifi_limit_optimizations_summary" msgid="1192849485764156570">"Ogran. bat. koju koristi Wi-Fi"</string>
+ <string name="wifi_suspend_optimizations" msgid="8826033336622472222">"WiFi optimizacija"</string>
+ <string name="wifi_suspend_optimizations_summary" msgid="2375789014394339008">"Smanji korišćenje baterije kada je WiFi uključen"</string>
+ <string name="wifi_limit_optimizations_summary" msgid="1192849485764156570">"Ogran. bat. koju koristi WiFi"</string>
<string name="wifi_switch_away_when_unvalidated" msgid="2418577764071293971">"Pređi na mobilne podatke ako Wi‑Fi izgubi pristup internetu."</string>
<string name="wifi_cellular_data_fallback_title" msgid="5067241930716252665">"Automatski pređi na mobilne podatke"</string>
<string name="wifi_cellular_data_fallback_summary" msgid="2721467405851519769">"Koristite mobilne podatke kada Wi‑Fi nema pristup internetu. Može da vam bude naplaćena potrošnja podataka."</string>
@@ -896,7 +895,7 @@
<string name="wifi_configure_settings_preference_title" msgid="2678534679408777268">"Podešavanja Wi‑Fi-ja"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="5714892572614655675">"Wi‑Fi se automatski uključuje ponovo"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_off" msgid="286904094152909651">"Wi‑Fi se ne uključuje ponovo automatski"</string>
- <string name="wifi_access_points" msgid="1647976498906871869">"Wi-Fi mreže"</string>
+ <string name="wifi_access_points" msgid="1647976498906871869">"WiFi mreže"</string>
<string name="wifi_menu_more_options" msgid="8318269834264035524">"Još opcija"</string>
<string name="wifi_menu_p2p" msgid="4945665601551289791">"Wi‑Fi Direct"</string>
<string name="wifi_menu_scan" msgid="9082691677803181629">"Skeniraj"</string>
@@ -906,14 +905,14 @@
<string name="wifi_menu_remember" msgid="717257200269700641">"Zapamti mrežu"</string>
<string name="wifi_menu_forget" msgid="7561140554450163075">"Zaboravi mrežu"</string>
<string name="wifi_menu_modify" msgid="4080178040721021101">"Izmeni mrežu"</string>
- <string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"Da biste videli dostupne mreže, uključite Wi-Fi."</string>
- <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"Traženje Wi-Fi mreža..."</string>
+ <string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"Da biste videli dostupne mreže, uključite WiFi."</string>
+ <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"Traženje WiFi mreža..."</string>
<string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"Nemate dozvolu da menjate Wi‑Fi mrežu."</string>
<string name="wifi_more" msgid="3538241640407382185">"Još"</string>
<string name="wifi_setup_wps" msgid="6730131677695521321">"Automatsko podešavanje (WPS)"</string>
- <string name="wifi_settings_scanning_required_title" msgid="3593457187659922490">"Želite li da uključite Wi-Fi skeniranje?"</string>
+ <string name="wifi_settings_scanning_required_title" msgid="3593457187659922490">"Želite li da uključite WiFi skeniranje?"</string>
<string name="wifi_settings_scanning_required_summary" msgid="7469610959462708782">"Da bi se automatski uključivao Wi‑Fi, prvo treba da uključite Wi‑Fi skeniranje."</string>
- <string name="wifi_settings_scanning_required_info" msgid="5913535073390607386">"Wi-Fi skeniranje omogućava aplikacijama i uslugama da traže Wi‑Fi mreže u bilo kom trenutku, čak i kada je Wi‑Fi isključen. Ovo, na primer, može da se koristi za poboljšanje funkcija i usluga zasnovanih na lokaciji."</string>
+ <string name="wifi_settings_scanning_required_info" msgid="5913535073390607386">"WiFi skeniranje omogućava aplikacijama i uslugama da traže Wi‑Fi mreže u bilo kom trenutku, čak i kada je Wi‑Fi isključen. Ovo, na primer, može da se koristi za poboljšanje funkcija i usluga zasnovanih na lokaciji."</string>
<string name="wifi_settings_scanning_required_turn_on" msgid="4327570180594277049">"Uključi"</string>
<string name="wifi_settings_scanning_required_enabled" msgid="3336102100425307040">"Wi‑Fi skeniranje je uključeno"</string>
<string name="wifi_show_advanced" msgid="8199779277168030597">"Napredne opcije"</string>
@@ -945,7 +944,7 @@
<string name="wifi_ap_choose_auto" msgid="7927637960569365785">"Automatski"</string>
<string name="wifi_ap_choose_2G" msgid="43198403259714736">"Opseg od 2,4 GHz"</string>
<string name="wifi_ap_choose_5G" msgid="2624859713183683146">"Opseg od 5,0 GHz"</string>
- <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"Prednost se daje opsegu od 5.0 GHz"</string>
+ <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"Prednost ima opseg od 5,0 GHz"</string>
<string name="wifi_ap_2G" msgid="5793110086517338494">"2,4 GHz"</string>
<string name="wifi_ap_5G" msgid="4584892544393675403">"5,0 GHz"</string>
<string name="wifi_ap_band_select_one" msgid="4409754936554360355">"Izaberite barem jedan opseg za Wi‑Fi hotspot:"</string>
@@ -963,8 +962,8 @@
<string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"Čitanje QR koda nije uspelo. Ponovo centrirajte kôd, pa probajte ponovo"</string>
<string name="wifi_dpp_failure_authentication_or_configuration" msgid="9142051662156233679">"Probajte ponovo. Ako se problem nastavi, kontaktirajte proizvođača uređaja"</string>
<string name="wifi_dpp_failure_not_compatible" msgid="4320027179973678283">"Došlo je do greške"</string>
- <string name="wifi_dpp_failure_timeout" msgid="5060065168142109420">"Uverite se da je uređaj priključen na izvor napajanja, napunjen i uključen"</string>
- <string name="wifi_dpp_failure_generic" msgid="7840142544736640189">"Uverite se da je uređaj priključen na izvor napajanja, napunjen i uključen. Ako se problem nastavi, kontaktirajte proizvođača uređaja"</string>
+ <string name="wifi_dpp_failure_timeout" msgid="5060065168142109420">"Uverite se da je uređaj priključen na struju, napunjen i uključen"</string>
+ <string name="wifi_dpp_failure_generic" msgid="7840142544736640189">"Uverite se da je uređaj priključen na struju, napunjen i uključen. Ako se problem nastavi, kontaktirajte proizvođača uređaja"</string>
<string name="wifi_dpp_failure_not_supported" msgid="111779621766171626">"Ovaj uređaj ne podržava dodavanje mreže „<xliff:g id="SSID">%1$s</xliff:g>“"</string>
<string name="wifi_dpp_check_connection_try_again" msgid="7144663015219170999">"Proverite vezu i probajte ponovo"</string>
<string name="wifi_dpp_choose_network" msgid="6251424431594491691">"Odaberite mrežu"</string>
@@ -979,9 +978,9 @@
<string name="wifi_dpp_connecting" msgid="4229290407210299897">"Povezuje se…"</string>
<string name="wifi_dpp_share_hotspot" msgid="847987212473038179">"Delite hotspot"</string>
<string name="wifi_dpp_lockscreen_title" msgid="3910665850075275963">"Potvrdite da ste to vi"</string>
- <string name="wifi_dpp_wifi_password" msgid="8007558344032612455">"Lozinka za Wi-Fi: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
+ <string name="wifi_dpp_wifi_password" msgid="8007558344032612455">"Lozinka za WiFi: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
<string name="wifi_dpp_hotspot_password" msgid="6172326289042241924">"Lozinka hotspota: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
- <string name="wifi_dpp_add_device" msgid="1347056725253936358">"Dodajte uređaj"</string>
+ <string name="wifi_dpp_add_device" msgid="1347056725253936358">"Dodaj uređaj"</string>
<string name="wifi_dpp_connect_network_using_qr_code" msgid="115993715600532357">"Povežite se na ovu mrežu pomoću QR koda"</string>
<string name="retry" msgid="8500839563577344702">"Probaj ponovo"</string>
<string name="wifi_shared" msgid="5054256778276524960">"Deli sa drugim korisnicima uređaja"</string>
@@ -998,7 +997,7 @@
<string name="wifi_wps_available_second_item" msgid="5703265526619705185">" (WPS je dostupan)"</string>
<string name="wifi_carrier_connect" msgid="7202618367339982884">"Wi‑Fi mreža mobilnog operatera"</string>
<string name="wifi_carrier_content" msgid="3467402515071949783">"Povežite se preko <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="wifi_scan_always_turnon_message" msgid="7811846312032594248">"Zbog poboljšanja preciznosti lokacije i u druge svrhe, <xliff:g id="APP_NAME">%1$s</xliff:g> želi da uključi skeniranje mreže čak i kada je Wi-Fi isključen.\n\nŽelite li da dozvolite ovo za sve aplikacije koje žele da skeniraju?"</string>
+ <string name="wifi_scan_always_turnon_message" msgid="7811846312032594248">"Zbog poboljšanja preciznosti lokacije i u druge svrhe, <xliff:g id="APP_NAME">%1$s</xliff:g> želi da uključi skeniranje mreže čak i kada je WiFi isključen.\n\nŽelite li da dozvolite ovo za sve aplikacije koje žele da skeniraju?"</string>
<string name="wifi_scan_always_turnoff_message" msgid="556993843641750002">"Da biste ovo isključili, idite na Napredno u preklopnom meniju."</string>
<string name="wifi_scan_always_confirm_allow" msgid="8857664849515496237">"Dozvoli"</string>
<string name="wifi_scan_always_confirm_deny" msgid="6190909841125369403">"Odbij"</string>
@@ -1014,7 +1013,7 @@
<string name="lost_internet_access_cancel" msgid="6577871064062518744">"Ostani na Wi‑Fi-ju"</string>
<string name="lost_internet_access_persist" msgid="6368659013482055611">"Ne prikazuj ponovo"</string>
<string name="wifi_connect" msgid="5653612760223533650">"Poveži"</string>
- <string name="wifi_turned_on_message" msgid="3377779146238242894">"Wi-Fi je uključen"</string>
+ <string name="wifi_turned_on_message" msgid="3377779146238242894">"WiFi je uključen"</string>
<!-- no translation found for wifi_connected_to_message (2875589636437599620) -->
<skip />
<string name="wifi_connecting" msgid="384192498836395892">"Povezuje se…"</string>
@@ -1035,7 +1034,7 @@
<item quantity="few">%d mreže</item>
<item quantity="other">%d mreža</item>
</plurals>
- <string name="wifi_advanced_titlebar" msgid="4899310977865228904">"Napredna Wi-Fi podešavanja"</string>
+ <string name="wifi_advanced_titlebar" msgid="4899310977865228904">"Napredna WiFi podešavanja"</string>
<string name="wifi_advanced_ssid_title" msgid="4229741334913894856">"SSID"</string>
<string name="wifi_advanced_mac_address_title" msgid="1162782083754021737">"MAC adresa"</string>
<string name="wifi_advanced_ip_address_title" msgid="2708185994512829071">"IP adresa"</string>
@@ -1075,7 +1074,7 @@
<string name="wifi_p2p_cancel_connect_title" msgid="2465200999145769427">"Želite li da otkažete pozivnicu?"</string>
<string name="wifi_p2p_cancel_connect_message" msgid="3752679335020392154">"Želite li da otkažete pozivnicu za povezivanje sa uređajem <xliff:g id="PEER_NAME">%1$s</xliff:g>?"</string>
<string name="wifi_p2p_delete_group_message" msgid="3206660449067701089">"Želite li da zaboravite ovu grupu?"</string>
- <string name="wifi_hotspot_checkbox_text" msgid="12062341344410520">"Wi-Fi hotspot"</string>
+ <string name="wifi_hotspot_checkbox_text" msgid="12062341344410520">"WiFi hotspot"</string>
<string name="wifi_hotspot_off_subtext" msgid="6177054857136221058">"Ni internet ni sadržaj se ne dele sa drugim uređajima"</string>
<string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="71421730039785897">"Internet veza ovog tableta se deli preko hotspota"</string>
<string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="8914285514605049879">"Internet veza ovog telefona se deli preko hotspota"</string>
@@ -1094,11 +1093,11 @@
<string name="wifi_tether_stopping" msgid="7478561853791953349">"Isključivanje hotspota..."</string>
<string name="wifi_tether_enabled_subtext" msgid="7534760116478734006">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> je aktivan"</string>
<string name="wifi_tether_failed_subtext" msgid="3501001612207106">"Greška prenosnog Wi‑Fi hotspota"</string>
- <string name="wifi_tether_configure_ap_text" msgid="4081852770996455902">"Podesi Wi-Fi hotspot"</string>
+ <string name="wifi_tether_configure_ap_text" msgid="4081852770996455902">"Podesi WiFi hotspot"</string>
<string name="wifi_hotspot_configure_ap_text" msgid="1000003286253019522">"Podešavanje Wi‑Fi hotspota"</string>
<string name="wifi_hotspot_configure_ap_text_summary" msgid="2303120188509955656">"AndroidAP WPA2 PSK hotspot"</string>
<string name="wifi_tether_configure_ssid_default" msgid="1722238925876152663">"AndroidHotspot"</string>
- <string name="wifi_calling_settings_title" msgid="626821542308601806">"Pozivanje preko Wi-Fi-ja"</string>
+ <string name="wifi_calling_settings_title" msgid="626821542308601806">"Pozivanje preko WiFi-ja"</string>
<string name="wifi_calling_suggestion_title" msgid="1402265373543523970">"Produžite pozive pomoću Wi‑Fi-ja"</string>
<string name="wifi_calling_suggestion_summary" msgid="198402175473169630">"Uklj. pozivanje preko Wi‑Fi-ja da proširite pokrivenost"</string>
<string name="wifi_calling_mode_title" msgid="3350624859819920176">"Podešavanje pozivanja"</string>
@@ -1113,27 +1112,30 @@
<item msgid="742811521969300868">"@*android:string/wfc_mode_wifi_only_summary"</item>
</string-array>
<string-array name="wifi_calling_mode_choices_v2">
- <item msgid="9149346657812979257">"Wi-Fi"</item>
+ <item msgid="9149346657812979257">"WiFi"</item>
<item msgid="4421333712484542489">"Mobilni podaci"</item>
- <item msgid="6007360612667098926">"Samo Wi-Fi"</item>
+ <item msgid="6007360612667098926">"Samo WiFi"</item>
</string-array>
<string-array name="wifi_calling_mode_choices_without_wifi_only">
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"WiFi"</item>
+ <item msgid="2271962426654621656">"Mobilni podaci"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Ako je Wi‑Fi nedostupan, koristite mobilnu mrežu"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Ako mobilna mreža nije dostupna, koristi Wi‑Fi"</string>
- <string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Pozivanje preko Wi-Fi-ja. Ako se Wi‑Fi veza izgubi, poziv će se završiti."</string>
- <string name="wifi_calling_off_explanation" msgid="1653424723742898015">"Kada je pozivanje preko Wi-Fi-ja uključeno, telefon može da preusmerava pozive preko Wi-Fi mreža ili mreže mobilnog operatera u zavisnosti od toga koje ste podešavanje izabrali i koji signal je jači. Pre nego što uključite ovu funkciju, informišite se kod mobilnog operatera o naknadama i drugim detaljima.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
+ <string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Pozivanje preko WiFi-ja. Ako se Wi‑Fi veza izgubi, poziv će se završiti."</string>
+ <string name="wifi_calling_off_explanation" msgid="1653424723742898015">"Kada je pozivanje preko WiFi-ja uključeno, telefon može da preusmerava pozive preko WiFi mreža ili mreže mobilnog operatera u zavisnosti od toga koje ste podešavanje izabrali i koji signal je jači. Pre nego što uključite ovu funkciju, informišite se kod mobilnog operatera o naknadama i drugim detaljima.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="8648609693875720408"></string>
<string name="emergency_address_title" msgid="5779915349686787024">"Adresa za hitne slučajeve"</string>
- <string name="emergency_address_summary" msgid="478668478569851714">"Koristi se kao vaša lokacija kada uputite hitni poziv pomoću Wi-Fi-ja"</string>
+ <string name="emergency_address_summary" msgid="478668478569851714">"Koristi se kao vaša lokacija kada uputite hitni poziv pomoću WiFi-ja"</string>
<string name="private_dns_help_message" msgid="7633526525131196650"><annotation id="url">"Saznajte više"</annotation>" o funkcijama Privatnog DNS-a"</string>
<string name="wifi_calling_pref_managed_by_carrier" msgid="5458050015417972072">"Mobilni operater upravlja podešavanjem"</string>
- <string name="wifi_calling_settings_activation_instructions" msgid="2863642668648110908">"Aktivirajte Pozivanje preko Wi-Fi-ja"</string>
- <string name="wifi_calling_turn_on" msgid="1212277809455062043">"Uključite pozivanje preko Wi-Fi-ja"</string>
- <string name="wifi_calling_not_supported" msgid="216781767605669775">"Pozivanje preko Wi-Fi-ja nije podržano za %1$s"</string>
+ <string name="wifi_calling_settings_activation_instructions" msgid="2863642668648110908">"Aktivirajte Pozivanje preko WiFi-ja"</string>
+ <string name="wifi_calling_turn_on" msgid="1212277809455062043">"Uključite pozivanje preko WiFi-ja"</string>
+ <string name="wifi_calling_not_supported" msgid="216781767605669775">"Pozivanje preko WiFi-ja nije podržano za %1$s"</string>
<string name="carrier" msgid="3413463182542176886">"Mobilni operater"</string>
<string name="display_settings_title" msgid="1243571562133261601">"Prikaz"</string>
<string name="sound_settings" msgid="3306063041029638807">"Zvuk"</string>
@@ -1374,7 +1376,7 @@
<string name="status_signal_strength" msgid="4302597886933728789">"Jačina signala"</string>
<string name="status_roaming" msgid="5191044997355099561">"Roming"</string>
<string name="status_operator" msgid="6017986100643755390">"Mreža"</string>
- <string name="status_wifi_mac_address" msgid="3868452167971295995">"Wi-Fi MAC adresa"</string>
+ <string name="status_wifi_mac_address" msgid="3868452167971295995">"WiFi MAC adresa"</string>
<string name="status_bt_address" msgid="460568179311735657">"Bluetooth adresa"</string>
<string name="status_serial_number" msgid="8257722124627415159">"Serijski broj"</string>
<string name="status_up_time" msgid="77128395333934087">"Vreme rada"</string>
@@ -1390,7 +1392,7 @@
<string name="memory_media_usage" msgid="2744652206722240527">"Mediji"</string>
<string name="memory_downloads_usage" msgid="7039979723012065168">"Preuzimanja"</string>
<string name="memory_dcim_usage" msgid="599009211606524732">"Slike, video snimci"</string>
- <string name="memory_music_usage" msgid="809605300042546279">"Audio (muzika, zvukovi zvona, potkasti itd.)"</string>
+ <string name="memory_music_usage" msgid="809605300042546279">"Audio (muzika, zvukovi zvona, podkasti itd.)"</string>
<string name="memory_media_misc_usage" msgid="6258827529046910705">"Druge datoteke"</string>
<string name="memory_media_cache_usage" msgid="1307620682751377717">"Keširani podaci"</string>
<string name="sd_eject" product="nosdcard" msgid="3016608823130472449">"Isklj. deljene memorije"</string>
@@ -1435,7 +1437,7 @@
<string name="storage_menu_set_up" msgid="2849170579745958513">"Podesi"</string>
<string name="storage_menu_explore" msgid="3733439525636202662">"Istraži"</string>
<string name="storage_menu_free" msgid="6586253660759145508">"Oslobodite prostor"</string>
- <string name="storage_menu_manage" msgid="461380717863926516">"Upravljaj skladištenjem"</string>
+ <string name="storage_menu_manage" msgid="461380717863926516">"Upravljaj memorijskim prostorom"</string>
<string name="storage_title_usb" msgid="2015671467177303099">"USB uređaj je povezan sa računarom"</string>
<string name="usb_connection_category" msgid="2888975803638116041">"Poveži kao"</string>
<string name="usb_mtp_title" msgid="6893938968831995500">"Medijski uređaj (MTP)"</string>
@@ -1584,10 +1586,10 @@
<string name="error_adding_apn_type" msgid="671634520340569678">"Mobilni operater ne dozvoljava nazive pristupnih tačaka tipa %s."</string>
<string name="restore_default_apn" msgid="7195266404077471007">"Vraćanje podrazumevanih podešavanja naziva pristupne tačke."</string>
<string name="menu_restore" msgid="3799288817317293115">"Resetuj na podrazumevano"</string>
- <string name="restore_default_apn_completed" msgid="5671734152740058937">"Ponovno postavljanje podrazumevanih podešavanja naziva pristupne tačke je završeno"</string>
+ <string name="restore_default_apn_completed" msgid="5671734152740058937">"Ponovno postavljanje podrazumevanih podešavanja naziva pristupne tačke je završeno."</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"Opcije za resetovanje"</string>
<string name="reset_dashboard_summary" msgid="8778383341461126642">"Mreža, aplikacije ili uređaj mogu da se resetuju"</string>
- <string name="reset_network_title" msgid="8944059136930806211">"Resetuj Wi-Fi, mobilnu mrežu i Bluetooth"</string>
+ <string name="reset_network_title" msgid="8944059136930806211">"Resetuj WiFi, mobilnu mrežu i Bluetooth"</string>
<string name="reset_network_desc" msgid="4982633363916261109">"Ovim resetujete sva podešavanja mreže, uključujući:\n\n"<li>"Wi‑Fi"</li>\n<li>"Mobilne podatke"</li>\n<li>"Bluetooth"</li></string>
<string name="reset_esim_title" msgid="7630781767040831893">"Obriši preuzete SIM kartice"</string>
<string name="reset_esim_desc" msgid="433226911566802">"Da biste preuzeli zamenske SIM kartice, kontaktirajte mobilnog operatera. Time se neće otkazati nijedan tarifni paket."</string>
@@ -1627,22 +1629,22 @@
<string name="master_clear_progress_text" msgid="5418958116008976218">"Sačekajte..."</string>
<string name="call_settings_title" msgid="5033906789261282752">"Podešavanja poziva"</string>
<string name="call_settings_summary" msgid="2119161087671450035">"Podešavanje glasovne pošte, preusmeravanja poziva, stavljanja poziva na čekanje, ID-a pozivaoca"</string>
- <string name="tether_settings_title_usb" msgid="4265582654602420357">"USB Internet povezivanje"</string>
+ <string name="tether_settings_title_usb" msgid="4265582654602420357">"USB privezivanje"</string>
<string name="tether_settings_title_wifi" msgid="2060965130234484613">"Prenosni hotspot"</string>
<string name="tether_settings_title_bluetooth" msgid="1999590158102569959">"Bluetooth privezivanje"</string>
- <string name="tether_settings_title_usb_bluetooth" msgid="1159128764162788159">"Povezivanje sa internetom"</string>
+ <string name="tether_settings_title_usb_bluetooth" msgid="1159128764162788159">"Privezivanje"</string>
<string name="tether_settings_title_all" msgid="6935843543433954181">"Hotspot i privezivanje"</string>
<string name="tether_settings_summary_hotspot_on_tether_on" msgid="1289593649526514499">"Hotspot je uključen, privezivanje"</string>
<string name="tether_settings_summary_hotspot_on_tether_off" msgid="8010689354668285422">"Hotspot je uključen"</string>
<string name="tether_settings_summary_hotspot_off_tether_on" msgid="1349909238672649877">"Privezivanje"</string>
<string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"Nije moguće privezivanje niti korišćenje prenosivih hotspotova dok je Ušteda podataka uključena"</string>
<string name="usb_title" msgid="7480927657535578688">"USB"</string>
- <string name="usb_tethering_button_text" msgid="6242228383142012332">"USB povezivanje"</string>
+ <string name="usb_tethering_button_text" msgid="6242228383142012332">"USB privezivanje"</string>
<string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Deljenje internet veze telefona preko USB-a"</string>
<string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"Deljenje internet veze tableta preko USB-a"</string>
<string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"Bluetooth privezivanje"</string>
<string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"Delite internet vezu tableta preko Bluetooth-a"</string>
- <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Delite internet vezu telefona preko Bluetooth-a"</string>
+ <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Deljenje internet veze telefona preko Bluetooth-a"</string>
<string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"Internet veza uređaja <xliff:g id="DEVICE_NAME">%1$d</xliff:g> se deli preko Bluetooth-a"</string>
<string name="bluetooth_tethering_overflow_error" msgid="6946561351369376943">"Privezivanje na više od <xliff:g id="MAXCONNECTION">%1$d</xliff:g> uređaja nije moguće."</string>
<string name="bluetooth_untether_blank" msgid="5428300773782256084">"Internet veza sa uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g> će biti prekinuta."</string>
@@ -1656,7 +1658,7 @@
<string name="sms_change_default_no_previous_dialog_text" msgid="4680224695080527907">"Želite li da koristite <xliff:g id="NEW_APP">%s</xliff:g> kao aplikaciju za SMS?"</string>
<string name="network_scorer_picker_title" msgid="1691073966560952916">"Dobavljač ocene mreže"</string>
<string name="network_scorer_picker_none_preference" msgid="6448280557733231737">"Ništa"</string>
- <string name="network_scorer_change_active_dialog_title" msgid="4274159562371475090">"Želite da promenite Wi‑Fi assistant-a?"</string>
+ <string name="network_scorer_change_active_dialog_title" msgid="4274159562371475090">"Želite da promenite Wi‑Fi pomoćnik?"</string>
<string name="network_scorer_change_active_dialog_text" msgid="4264089809189760730">"Želite li da koristite aplikaciju <xliff:g id="NEW_APP">%1$s</xliff:g> umesto aplikacije <xliff:g id="CURRENT_APP">%2$s</xliff:g> za upravljanje mrežnim vezama?"</string>
<string name="network_scorer_change_active_no_previous_dialog_text" msgid="6394483538843474495">"Želite li da koristite aplikaciju <xliff:g id="NEW_APP">%s</xliff:g> za upravljanje mrežnim vezama?"</string>
<string name="mobile_unknown_sim_operator" msgid="872589370085135817">"Nepoznati SIM operater"</string>
@@ -1674,7 +1676,7 @@
</plurals>
<string name="location_category_recent_location_access" msgid="286059523360285026">"Nedavni pristup lokaciji"</string>
<string name="location_recent_location_access_view_details" msgid="2051602261436245905">"Prikaži detalje"</string>
- <string name="location_no_recent_apps" msgid="77502059586413278">"Nijedna aplikacija nije skoro tražila lokaciju"</string>
+ <string name="location_no_recent_apps" msgid="77502059586413278">"Nijedna aplikacija nije nedavno tražila lokaciju"</string>
<string name="location_no_recent_accesses" msgid="6289916310397279890">"Nijedna aplikacija nije nedavno pristupila lokaciji"</string>
<string name="location_high_battery_use" msgid="7177199869979522663">"Velika potrošnja baterije"</string>
<string name="location_low_battery_use" msgid="5030448574501435888">"Mala potrošnja baterije"</string>
@@ -1684,9 +1686,9 @@
<string name="location_scanning_bluetooth_always_scanning_title" msgid="196241746742607453">"Bluetooth skeniranje"</string>
<string name="location_scanning_bluetooth_always_scanning_description" msgid="3796673798637848690">"Dozvolite aplikacijama i uslugama da traže uređaje u blizini u svakom trenutku, čak i kada je Bluetooth isključen. Ovo može da se koristi, na primer, za poboljšanje funkcija i usluga zasnovanih na lokaciji."</string>
<string name="managed_profile_location_services" msgid="224925483299159541">"Usluge lokacije za posao"</string>
- <string name="location_network_based" msgid="1535812159327454835">"Lokac. na osnovu Wi-Fi i mob. mreže"</string>
+ <string name="location_network_based" msgid="1535812159327454835">"Lokac. na osnovu WiFi i mob. mreže"</string>
<string name="location_neighborhood_level" msgid="8459352741296587916">"Neka apl. koriste Google-ovu uslugu lociranja za brže određivanje lokacije. Anonimni podaci o lokaciji prikupljaće se i slati Google-u."</string>
- <string name="location_neighborhood_level_wifi" msgid="6120133551482003840">"Lokacija se određuje pomoću Wi-Fi-ja"</string>
+ <string name="location_neighborhood_level_wifi" msgid="6120133551482003840">"Lokacija se određuje pomoću WiFi-ja"</string>
<string name="location_gps" msgid="688049341158297763">"GPS sateliti"</string>
<string name="location_street_level" product="tablet" msgid="4459804798444296650">"Neka aplikacije koriste GPS na tabletu kako bi tačno odredile vašu lokaciju"</string>
<string name="location_street_level" product="default" msgid="7407688345675450051">"Neka aplikacije koriste GPS na telefonu kako bi tačno odredile vašu lokaciju"</string>
@@ -1744,18 +1746,18 @@
<string name="lockpassword_choose_your_password_header_for_face" msgid="8823110536502072216">"Potvrda identiteta licem zahteva lozinku"</string>
<string name="lockpassword_choose_your_pattern_header_for_face" msgid="5563793748503883666">"Potvrda identiteta licem zahteva šablon"</string>
<string name="lockpassword_choose_your_pin_header_for_face" msgid="7238352632535405068">"Potvrda identiteta licem zahteva PIN"</string>
- <string name="lockpassword_confirm_your_pattern_generic" msgid="6146545393074070916">"Upotrebite šablon za uređaj da biste nastavili"</string>
+ <string name="lockpassword_confirm_your_pattern_generic" msgid="6146545393074070916">"Koristite šablon za uređaj da biste nastavili"</string>
<string name="lockpassword_confirm_your_pin_generic" msgid="8732268389177735264">"Unesite PIN uređaja da biste nastavili"</string>
<string name="lockpassword_confirm_your_password_generic" msgid="6304552647060899594">"Unesite lozinku uređaja da biste nastavili"</string>
- <string name="lockpassword_confirm_your_pattern_generic_profile" msgid="3074250084050465513">"Upotrebite šablon za profil za Work da biste nastavili"</string>
- <string name="lockpassword_confirm_your_pin_generic_profile" msgid="6037908971086439523">"Unesite PIN za profil za Work da biste nastavili"</string>
- <string name="lockpassword_confirm_your_password_generic_profile" msgid="2646162490703489685">"Unesite lozinku za profil za Work da biste nastavili"</string>
+ <string name="lockpassword_confirm_your_pattern_generic_profile" msgid="3074250084050465513">"Koristite šablon za poslovni profil da biste nastavili"</string>
+ <string name="lockpassword_confirm_your_pin_generic_profile" msgid="6037908971086439523">"Unesite PIN za poslovni profil da biste nastavili"</string>
+ <string name="lockpassword_confirm_your_password_generic_profile" msgid="2646162490703489685">"Unesite lozinku za poslovni profil da biste nastavili"</string>
<string name="lockpassword_strong_auth_required_device_pattern" msgid="1014214190135045781">"Radi veće bezbednosti koristite šablon za uređaj"</string>
<string name="lockpassword_strong_auth_required_device_pin" msgid="24030584350601016">"Radi veće bezbednosti unesite PIN za uređaj"</string>
<string name="lockpassword_strong_auth_required_device_password" msgid="7746588206458754598">"Radi veće bezbednosti unesite lozinku za uređaj"</string>
- <string name="lockpassword_strong_auth_required_work_pattern" msgid="6861154706098327320">"Radi veće bezbednosti koristite šablon za Work"</string>
- <string name="lockpassword_strong_auth_required_work_pin" msgid="6306902249365524526">"Radi veće bezbednosti unesite PIN za Work"</string>
- <string name="lockpassword_strong_auth_required_work_password" msgid="2917338218971012776">"Radi veće bezbednosti unesite lozinku za Work"</string>
+ <string name="lockpassword_strong_auth_required_work_pattern" msgid="6861154706098327320">"Radi veće bezbednosti koristite šablon za posao"</string>
+ <string name="lockpassword_strong_auth_required_work_pin" msgid="6306902249365524526">"Radi veće bezbednosti unesite poslovni PIN"</string>
+ <string name="lockpassword_strong_auth_required_work_password" msgid="2917338218971012776">"Radi veće bezbednosti unesite poslovnu lozinku"</string>
<string name="lockpassword_confirm_your_pattern_details_frp" msgid="1085862410379709928">"Telefon je resetovan na fabrička podešavanja. Da biste ga koristili, unesite prethodni šablon."</string>
<string name="lockpassword_confirm_your_pin_details_frp" msgid="6849889353126558761">"Telefon je resetovan na fabrička podešavanja. Da biste ga koristili, unesite prethodni PIN."</string>
<string name="lockpassword_confirm_your_password_details_frp" msgid="3239944795659418737">"Telefon je resetovan na fabrička podešavanja. Da biste ga koristili, unesite prethodnu lozinku."</string>
@@ -1792,13 +1794,13 @@
<string name="lockpattern_settings_help_how_to_record" msgid="6037403647312543908">"Kako nacrtati šablon za otključavanje"</string>
<string name="lockpattern_too_many_failed_confirmation_attempts" msgid="3043127997770535921">"Previše netačnih pokušaja. Probajte ponovo za <xliff:g id="NUMBER">%d</xliff:g> sek."</string>
<string name="activity_not_found" msgid="3492413375341165453">"Aplikacija nije instalirana na telefonu."</string>
- <string name="lock_settings_profile_title" msgid="3928992050074556160">"Bezbednost profila za Work"</string>
- <string name="lock_settings_profile_screen_lock_title" msgid="285267471459162203">"Zaključavanje ekrana za profil za Work"</string>
+ <string name="lock_settings_profile_title" msgid="3928992050074556160">"Bezbednost poslovnog profila"</string>
+ <string name="lock_settings_profile_screen_lock_title" msgid="285267471459162203">"Zaključavanje ekrana za poslovni profil"</string>
<string name="lock_settings_profile_unification_title" msgid="2629698644191935287">"Koristi jedno zaključavanje"</string>
- <string name="lock_settings_profile_unification_summary" msgid="4797188229308317207">"Koristite jedno zaključavanje ekrana za profil za Work i uređaj"</string>
+ <string name="lock_settings_profile_unification_summary" msgid="4797188229308317207">"Koristite jedno zaključavanje ekrana za poslovni profil i uređaj"</string>
<string name="lock_settings_profile_unification_dialog_title" msgid="1690211342491067179">"Želite li da koristite jedno zaključavanje?"</string>
- <string name="lock_settings_profile_unification_dialog_body" msgid="8629158560032603101">"Uređaj će koristiti zaključavanje ekrana za Work profil. Smernice za Work će se primenjivati na oba zaključavanja."</string>
- <string name="lock_settings_profile_unification_dialog_uncompliant_body" msgid="1217609779267643474">"Zaključavanje ekrana za profil za Work nije u skladu sa bezbednosnim zahtevima vaše organizacije. Možete da koristite isto zaključavanje ekrana za uređaj i profil za Work, ali će se primenjivati sve smernice za zaključavanje ekrana za Work."</string>
+ <string name="lock_settings_profile_unification_dialog_body" msgid="8629158560032603101">"Uređaj će koristiti zaključavanje ekrana za poslovni profil. Smernice za posao će se primenjivati na oba zaključavanja."</string>
+ <string name="lock_settings_profile_unification_dialog_uncompliant_body" msgid="1217609779267643474">"Zaključavanje ekrana za poslovni profil nije u skladu sa bezbednosnim zahtevima vaše organizacije. Možete da koristite isto zaključavanje ekrana za uređaj i poslovni profil, ali će se primenjivati sve smernice za zaključavanje ekrana za posao."</string>
<string name="lock_settings_profile_unification_dialog_confirm" msgid="888942752619181804">"Koristi jedno zaključavanje"</string>
<string name="lock_settings_profile_unification_dialog_uncompliant_confirm" msgid="8046452284593057185">"Koristi jedno zaključavanje"</string>
<string name="lock_settings_profile_unified_summary" msgid="5347244550751740962">"Isto kao zaključavanje ekrana uređaja"</string>
@@ -1992,7 +1994,7 @@
<string name="show_ime_summary" msgid="3246628154011464373">"Zadrži je na ekranu dok je fizička tastatura aktivna"</string>
<string name="keyboard_shortcuts_helper" msgid="6574386807271399788">"Pomoć za tasterske prečice"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="8024313306403779742">"Prikaz dostupnih prečica"</string>
- <string name="language_and_input_for_work_category_title" msgid="2053255944038892588">"Tastature i alatke za profil za Work"</string>
+ <string name="language_and_input_for_work_category_title" msgid="2053255944038892588">"Tastature i alatke za poslovni profil"</string>
<string name="virtual_keyboards_for_work_title" msgid="3968291646938204523">"Virtuelna tastatura za posao"</string>
<string name="default_keyboard_layout" msgid="9171704064451242230">"Podrazumevano"</string>
<string name="pointer_speed" msgid="800691982011350432">"Brzina pokazivača"</string>
@@ -2114,9 +2116,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Vibriranje obaveštenja"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Vibriranje zvona"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Vibracija pri dodiru"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Koristi uslugu"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Koristi korekciju boja"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Koristi natpise"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Koristi uslugu"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Koristi korekciju boja"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Koristi titl"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Nastavi"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Slušni aparati"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Nije povezan nijedan slušni aparat"</string>
@@ -2286,8 +2288,8 @@
<!-- no translation found for battery_stats_last_duration (8190573267292309839) -->
<skip />
<string name="awake" msgid="8956720170442161285">"Vreme buđenja uređaja"</string>
- <string name="wifi_on_time" msgid="2487820618265936068">"Vreme od uključivanja Wi-Fi mreže"</string>
- <string name="bluetooth_on_time" msgid="6400569492287292639">"Vreme od uključivanja Wi-Fi mreže"</string>
+ <string name="wifi_on_time" msgid="2487820618265936068">"Vreme od uključivanja WiFi mreže"</string>
+ <string name="bluetooth_on_time" msgid="6400569492287292639">"Vreme od uključivanja WiFi mreže"</string>
<string name="advanced_battery_title" msgid="5026866913848464170">"Potrošnja baterije"</string>
<string name="history_details_title" msgid="8608193822257799936">"Detalji istorije"</string>
<string name="battery_details_title" msgid="5358230551490703067">"Potrošnja baterije"</string>
@@ -2304,7 +2306,7 @@
<string name="battery_tip_smart_battery_title" product="tablet" msgid="203494973250969040">"Produžite trajanje baterije tableta"</string>
<string name="battery_tip_smart_battery_title" product="device" msgid="7419448992583346364">"Produžite trajanje baterije uređaja"</string>
<string name="battery_tip_smart_battery_summary" msgid="5344821856478265778">"Uključite menadžer baterije"</string>
- <string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"Uključi uštedu baterije"</string>
+ <string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"Uključite uštedu baterije"</string>
<string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Baterija može da se isprazni ranije nego obično"</string>
<string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"Ušteda baterije je uključena"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"Neke funkcije mogu da budu ograničene"</string>
@@ -2409,7 +2411,7 @@
<string name="usage_type_cpu_foreground" msgid="5496661858574622156">"Procesor u prednjem planu"</string>
<string name="usage_type_wake_lock" msgid="6729977238748413476">"Zadrži van stanja spavanja"</string>
<string name="usage_type_gps" msgid="5914062195732419196">"GPS"</string>
- <string name="usage_type_wifi_running" msgid="4192567991891907030">"Wi-Fi je aktivan"</string>
+ <string name="usage_type_wifi_running" msgid="4192567991891907030">"WiFi je aktivan"</string>
<string name="usage_type_phone" product="tablet" msgid="4279605085824633501">"Tablet"</string>
<string name="usage_type_phone" product="default" msgid="3901842461077646153">"Telefon"</string>
<string name="usage_type_data_send" msgid="6339880867171142725">"Poslati mobilni paketi"</string>
@@ -2430,7 +2432,7 @@
<string name="battery_action_app_details" msgid="1077011181969550402">"Informacije o aplikaciji"</string>
<string name="battery_action_app_settings" msgid="587998773852488539">"Podešavanja aplikacija"</string>
<string name="battery_action_display" msgid="4887913003634317465">"Podešavanja ekrana"</string>
- <string name="battery_action_wifi" msgid="7123520587925323824">"Wi-Fi podešavanja"</string>
+ <string name="battery_action_wifi" msgid="7123520587925323824">"WiFi podešavanja"</string>
<string name="battery_action_bluetooth" msgid="718594420017519807">"Podešavanja za Bluetooth"</string>
<string name="battery_desc_voice" msgid="4731966028374974986">"Baterija koju koriste glasovni pozivi"</string>
<string name="battery_desc_standby" product="tablet" msgid="2941777996429933419">"Iskorišćena baterija kada je tablet neaktivan"</string>
@@ -2441,8 +2443,8 @@
<string name="battery_desc_camera" msgid="517966830222999462">"Procenat baterije koji troši kamera"</string>
<string name="battery_desc_display" msgid="6701005808894183097">"Baterija koju koristi ekran i pozadinsko svetlo"</string>
<string name="battery_sugg_display" msgid="6366790848514389990">"Smanjite osvetljenost ekrana i/ili vreme do gašenja"</string>
- <string name="battery_desc_wifi" msgid="3497535902126253386">"Baterija koju koristi Wi-Fi"</string>
- <string name="battery_sugg_wifi" msgid="3796329601134263039">"Isključite Wi-Fi kada ga ne koristite ili kada nije dostupan"</string>
+ <string name="battery_desc_wifi" msgid="3497535902126253386">"Baterija koju koristi WiFi"</string>
+ <string name="battery_sugg_wifi" msgid="3796329601134263039">"Isključite WiFi kada ga ne koristite ili kada nije dostupan"</string>
<string name="battery_desc_bluetooth" msgid="3468061900485447679">"Baterija koju koristi Bluetooth"</string>
<string name="battery_sugg_bluetooth_basic" msgid="6353294067057749310">"Isključite Bluetooth kada ga ne koristite"</string>
<string name="battery_sugg_bluetooth_headset" msgid="2421931037149315202">"Pokušajte da se povežete sa drugim Bluetooth uređajem"</string>
@@ -2495,7 +2497,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Uključi"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Koristi Uštedu baterije"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Koristi uštedu baterije"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Automatski uključi"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Nikada"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"na <xliff:g id="PERCENT">%1$s</xliff:g> baterije"</string>
@@ -2573,7 +2575,7 @@
<string name="credential_storage_type_software" msgid="1335905150062717150">"Samo softverski"</string>
<string name="credentials_settings_not_available" msgid="5490259681690183274">"Akreditivi nisu dostupni za ovog korisnika"</string>
<string name="credential_for_vpn_and_apps" msgid="2462642486949593841">"Instalirano za VPN i aplikacije"</string>
- <string name="credential_for_wifi" msgid="2903295786961726388">"Instalirano za Wi-Fi"</string>
+ <string name="credential_for_wifi" msgid="2903295786961726388">"Instalirano za WiFi"</string>
<string name="credentials_reset_hint" msgid="3484350477764088169">"Želite li da uklonite sav sadržaj?"</string>
<string name="credentials_erased" msgid="7287088033523869085">"Skladište akreditiva je izbrisano."</string>
<string name="credentials_not_erased" msgid="9137227570738627637">"Nije moguće obrisati skladište akreditiva."</string>
@@ -2586,7 +2588,7 @@
<string name="backup_section_title" msgid="8177209731777904656">"Rezervna kopija i resetovanje"</string>
<string name="personal_data_section_title" msgid="9161854418510071558">"Lični podaci"</string>
<string name="backup_data_title" msgid="4461508563849583624">"Pravljenje rezervnih kopija podataka"</string>
- <string name="backup_data_summary" msgid="555459891017933746">"Pravi rezervne kopije podataka o aplikacijama, Wi-Fi lozinki i drugih podešavanja na Google serverima"</string>
+ <string name="backup_data_summary" msgid="555459891017933746">"Pravi rezervne kopije podataka o aplikacijama, WiFi lozinki i drugih podešavanja na Google serverima"</string>
<string name="backup_configure_account_title" msgid="1534734650559070294">"Rezervna kopija naloga"</string>
<string name="backup_data_management_title" msgid="6299288795610243508">"Upravljajte nalogom za rezervne kopije"</string>
<string name="include_app_data_title" msgid="6117211611131913293">"Uvrštavanje podataka aplikacija"</string>
@@ -2595,11 +2597,11 @@
<string name="backup_inactive_title" msgid="5513496915638307750">"Usluga pravljenja rezervnih kopija nije aktivna"</string>
<string name="backup_configure_account_default_summary" msgid="5718298066335006412">"Trenutno nijedan nalog ne čuva rezervne kopije podataka"</string>
<string name="backup_erase_dialog_title" msgid="8178424339104463014"></string>
- <string name="backup_erase_dialog_message" msgid="8767843355330070902">"Želite li da zaustavite pravljenje rezervnih kopija Wi-Fi lozinki, obeleživača, ostalih podešavanja i podataka o aplikacijama, kao i da izbrišete sve kopije na Google serverima?"</string>
- <string name="fullbackup_erase_dialog_message" msgid="2588536036471144070">"Želite li da zaustavite pravljenje rezervnih kopija podataka uređaja (poput Wi-Fi lozinki i istorije poziva) i podataka aplikacija (poput podešavanja i datoteka sačuvanih u aplikacijama) i izbrišete sve kopije na udaljenim serverima?"</string>
- <string name="fullbackup_data_summary" msgid="406274198094268556">"Automatski pravite rezervne kopije podataka uređaja (poput Wi-Fi lozinki i istorije poziva) i podataka aplikacija (poput podešavanja i datoteka sačuvanih u aplikacijama) daljinski.\n\nKada uključite automatsko pravljenje rezervnih kopija, podaci uređaja i aplikacija se povremeno čuvaju daljinski. Podaci aplikacija mogu da budu bilo koji podaci koje je aplikacija sačuvala (na osnovu podešavanja programera), uključujući potencijalno osetljive podatke kao što su kontakti, poruke i slike."</string>
+ <string name="backup_erase_dialog_message" msgid="8767843355330070902">"Želite li da zaustavite pravljenje rezervnih kopija WiFi lozinki, obeleživača, ostalih podešavanja i podataka o aplikacijama, kao i da izbrišete sve kopije na Google serverima?"</string>
+ <string name="fullbackup_erase_dialog_message" msgid="2588536036471144070">"Želite li da zaustavite pravljenje rezervnih kopija podataka uređaja (poput WiFi lozinki i istorije poziva) i podataka aplikacija (poput podešavanja i datoteka sačuvanih u aplikacijama) i izbrišete sve kopije na udaljenim serverima?"</string>
+ <string name="fullbackup_data_summary" msgid="406274198094268556">"Automatski pravite rezervne kopije podataka uređaja (poput WiFi lozinki i istorije poziva) i podataka aplikacija (poput podešavanja i datoteka sačuvanih u aplikacijama) daljinski.\n\nKada uključite automatsko pravljenje rezervnih kopija, podaci uređaja i aplikacija se povremeno čuvaju daljinski. Podaci aplikacija mogu da budu bilo koji podaci koje je aplikacija sačuvala (na osnovu podešavanja programera), uključujući potencijalno osetljive podatke kao što su kontakti, poruke i slike."</string>
<string name="device_admin_settings_title" msgid="2074319456047334589">"Podešavanja administratora uređaja"</string>
- <string name="active_device_admin_msg" msgid="6929247869516924549">"Aplikacija za administratore uređaja"</string>
+ <string name="active_device_admin_msg" msgid="6929247869516924549">"Aplikacija za administratora uređaja"</string>
<string name="remove_device_admin" msgid="4413438593788336400">"Deaktiviraj ovu aplikaciju za administratora uređaja"</string>
<string name="uninstall_device_admin" msgid="9017499299961719830">"Deinstaliraj aplikaciju"</string>
<string name="remove_and_uninstall_device_admin" msgid="5607703579731496253">"Deaktiviraj i deinstaliraj"</string>
@@ -2614,7 +2616,7 @@
<string name="add_device_admin" msgid="1621152410207260584">"Aktiviraj ovu aplikaciju za administratore uređaja"</string>
<string name="device_admin_add_title" msgid="6097881332139146897">"Administrator uređaja"</string>
<string name="device_admin_warning" msgid="4421817419326480449">"Aktiviranje ove aplikacije za administratore omogućiće aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g> da obavi sledeće operacije:"</string>
- <string name="device_admin_status" msgid="5424944611789040723">"Ova aplikacija za administratore je aktivna i omogućava aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g> da obavi sledeće operacije:"</string>
+ <string name="device_admin_status" msgid="5424944611789040723">"Ova aplikacija za administratora je aktivna i omogućava aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g> da obavi sledeće operacije:"</string>
<string name="profile_owner_add_title" msgid="735805919754362791">"Aktivirati Menadžera profila?"</string>
<string name="adding_profile_owner_warning" msgid="1284541194547382194">"Ako nastavite, korisnikom će upravljati administrator, koji će možda moći da čuva i povezane podatke, pored ličnih podataka.\n\nAdministrator može da prati podešavanja, pristup, aplikacije i podatke povezane sa ovim korisnikom, uključujući aktivnosti na mreži i informacije o lokaciji uređaja, kao i da upravlja njima."</string>
<string name="admin_disabled_other_options" msgid="8097063307730025707">"Administrator je onemogućio druge opcije"</string>
@@ -2632,10 +2634,10 @@
<string name="sync_is_failing" msgid="8284618104132302644">"Sinhronizacija trenutno ima problema. Uskoro će se vratiti."</string>
<string name="add_account_label" msgid="4461298847239641874">"Dodaj nalog"</string>
<string name="managed_profile_not_available_label" msgid="8784246681719821917">"Poslovni profil još uvek nije dostupan"</string>
- <string name="work_mode_label" msgid="6845849194740195757">"Profil za Work"</string>
+ <string name="work_mode_label" msgid="6845849194740195757">"Poslovni profil"</string>
<string name="work_mode_on_summary" msgid="1682781113156323592">"Ovim upravlja organizacija"</string>
<string name="work_mode_off_summary" msgid="1688885392211178315">"Aplikacije i obaveštenja su isključeni"</string>
- <string name="remove_managed_profile_label" msgid="4625542553784793536">"Ukloni profil za posao"</string>
+ <string name="remove_managed_profile_label" msgid="4625542553784793536">"Ukloni poslovni profil"</string>
<string name="background_data" msgid="8275750862371471171">"Podaci o pozadini"</string>
<string name="background_data_summary" msgid="799640633948841990">"Aplikacije uvek mogu da sinhronizuju, šalju i primaju podatke"</string>
<string name="background_data_dialog_title" msgid="8306650658158895976">"Želite da onemogućite pozadinske podatke?"</string>
@@ -2716,7 +2718,7 @@
<string name="data_usage_disable_mobile_limit" msgid="1937796699758613667">"Podesi ograničenje za mobil. pod."</string>
<string name="data_usage_disable_4g_limit" msgid="7131367986548147266">"Podesi ograničenje za 4G podatke"</string>
<string name="data_usage_disable_3g_limit" msgid="6746819313032692220">"Podesi ograničenje za 2G-3G podatke"</string>
- <string name="data_usage_disable_wifi_limit" msgid="8214267551888018353">"Ograniči Wi-Fi podatke"</string>
+ <string name="data_usage_disable_wifi_limit" msgid="8214267551888018353">"Ograniči WiFi podatke"</string>
<string name="data_usage_tab_wifi" msgid="7224124683039634055">"Wi‑Fi"</string>
<string name="data_usage_tab_ethernet" msgid="5053077378022543867">"Eternet"</string>
<string name="data_usage_tab_mobile" msgid="540101181815160147">"Mobilni"</string>
@@ -2751,9 +2753,9 @@
<string name="data_usage_limit_dialog_mobile" product="tablet" msgid="2000713577999830647">"Tablet će isključiti mobilne podatke čim dostigne ograničenje koje ste podesili.\n\nPošto potrošnju podataka meri tablet, a mobilni operater može drugačije da računa potrošnju, razmislite o tome da podesite niže ograničenje."</string>
<string name="data_usage_limit_dialog_mobile" product="default" msgid="943546278705619205">"Telefon će isključiti mobilne podatke čim dostigne ograničenje koje ste podesili.\n\nPošto potrošnju podataka meri telefon, a mobilni operater može drugačije da računa potrošnju, razmislite o tome da podesite niže ograničenje."</string>
<string name="data_usage_restrict_background_title" msgid="3568746530413220844">"Želite li da ograničite pozadinske podatke?"</string>
- <string name="data_usage_restrict_background" msgid="995811034744808575">"Ako ograničite mobilne pozadinske podatke, neke aplikacije i usluge neće funkcionisati ako niste povezani sa Wi-Fi-jem."</string>
- <string name="data_usage_restrict_background_multiuser" product="tablet" msgid="6032810839234864814">"Ako ograničite mobilne pozadinske podatke, neke aplikacije i usluge neće funkcionisati ako niste povezani sa Wi-Fi-jem.\n\nOvo podešavanje utiče na sve korisnike na ovom tabletu."</string>
- <string name="data_usage_restrict_background_multiuser" product="default" msgid="6846901756455789858">"Ako ograničite mobilne pozadinske podatke, neke aplikacije i usluge neće funkcionisati ako niste povezani sa Wi-Fi-jem.\n\nOvo podešavanje utiče na sve korisnike na ovom telefonu."</string>
+ <string name="data_usage_restrict_background" msgid="995811034744808575">"Ako ograničite mobilne pozadinske podatke, neke aplikacije i usluge neće funkcionisati ako niste povezani sa WiFi-jem."</string>
+ <string name="data_usage_restrict_background_multiuser" product="tablet" msgid="6032810839234864814">"Ako ograničite mobilne pozadinske podatke, neke aplikacije i usluge neće funkcionisati ako niste povezani sa WiFi-jem.\n\nOvo podešavanje utiče na sve korisnike na ovom tabletu."</string>
+ <string name="data_usage_restrict_background_multiuser" product="default" msgid="6846901756455789858">"Ako ograničite mobilne pozadinske podatke, neke aplikacije i usluge neće funkcionisati ako niste povezani sa WiFi-jem.\n\nOvo podešavanje utiče na sve korisnike na ovom telefonu."</string>
<string name="data_usage_sweep_warning" msgid="4646401408698778092"><font size="12">"upoz."</font>\n<font size="18">"<xliff:g id="NUMBER">^1</xliff:g>"</font>" "<font size="9">"<xliff:g id="UNIT">^2</xliff:g>"</font></string>
<string name="data_usage_sweep_limit" msgid="6101105504557548269"><font size="12">"ogran."</font>\n<font size="18">"<xliff:g id="NUMBER">^1</xliff:g>"</font>" "<font size="9">"<xliff:g id="UNIT">^2</xliff:g>"</font></string>
<string name="data_usage_uninstalled_apps" msgid="4152786786140875769">"Uklonjene aplikacije"</string>
@@ -2766,7 +2768,7 @@
<string name="data_usage_metered_body" msgid="1342905101297753439">"Mreže sa ograničenjem se tretiraju kao mobilne mreže kada postoji ograničenje za pozadinske podatke. Aplikacije mogu da vas upozore kada nameravate da koristite te mreže za velika preuzimanja."</string>
<string name="data_usage_metered_mobile" msgid="3675591449158207593">"Mobilne mreže"</string>
<string name="data_usage_metered_wifi" msgid="2955256408132426720">"Wi‑Fi mreže sa ograničenjem"</string>
- <string name="data_usage_metered_wifi_disabled" msgid="5771083253782103415">"Da biste izabrali mreže sa ograničenjem, uključite Wi-Fi."</string>
+ <string name="data_usage_metered_wifi_disabled" msgid="5771083253782103415">"Da biste izabrali mreže sa ograničenjem, uključite WiFi."</string>
<string name="data_usage_metered_auto" msgid="7924116401382629319">"Automatski"</string>
<string name="data_usage_metered_yes" msgid="7333744880035386073">"Sa ograničenjem"</string>
<string name="data_usage_metered_no" msgid="1961524615778610008">"Bez ograničenja"</string>
@@ -2875,7 +2877,7 @@
<item quantity="other"><xliff:g id="MANAGING_DOMAIN_1">%s</xliff:g> su instalirala autoritete za izdavanje sertifikata na uređaju, što može da im omogući da prate aktivnosti uređaja na mreži, uključujući imejlove, aplikacije i bezbedne veb-sajtove.\n\nKontaktirajte administratora da biste dobili više informacija o ovim sertifikatima.</item>
</plurals>
<plurals name="ssl_ca_cert_info_message" formatted="false" msgid="8271858091418779584">
- <item quantity="one"><xliff:g id="MANAGING_DOMAIN_1">%s</xliff:g> je instalirao autoritete za izdavanje sertifikata za profil za Work, što može da mu omogući da prati aktivnosti na poslovnoj mreži, uključujući imejlove, aplikacije i bezbedne veb-sajtove.\n\nKontaktirajte administratora da biste dobili više informacija o ovim sertifikatima.</item>
+ <item quantity="one"><xliff:g id="MANAGING_DOMAIN_1">%s</xliff:g> je instalirao autoritete za izdavanje sertifikata za poslovni profil, što može da mu omogući da prati aktivnosti na poslovnoj mreži, uključujući imejlove, aplikacije i bezbedne veb-sajtove.\n\nKontaktirajte administratora da biste dobili više informacija o ovim sertifikatima.</item>
<item quantity="few"><xliff:g id="MANAGING_DOMAIN_1">%s</xliff:g> su instalirala autoritete za izdavanje sertifikata na uređaju, što može da im omogući da prate aktivnosti uređaja na mreži, uključujući imejlove, aplikacije i bezbedne veb-sajtove.\n\nKontaktirajte administratora da biste dobili više informacija o ovim sertifikatima.</item>
<item quantity="other"><xliff:g id="MANAGING_DOMAIN_1">%s</xliff:g> su instalirala autoritete za izdavanje sertifikata na uređaju, što može da im omogući da prate aktivnosti uređaja na mreži, uključujući imejlove, aplikacije i bezbedne veb-sajtove.\n\nKontaktirajte administratora da biste dobili više informacija o ovim sertifikatima.</item>
</plurals>
@@ -3100,7 +3102,7 @@
<string name="keywords_flashlight" msgid="7733996050628473024">"Baterijska lampa, svetlo, lampa"</string>
<string name="keywords_change_wifi_state" msgid="7697524907886303535">"wifi, wi-fi, uključi/isključi, kontrola"</string>
<string name="keywords_more_mobile_networks" msgid="5605342743169059942">"mobilna mreža, mobilni podaci, mobilni operater, bežično, podaci, 4g, 3g, 2g, lte"</string>
- <string name="keywords_wifi_calling" msgid="3554052148729818521">"WiFi, Wi-Fi, poziv, pozivanje"</string>
+ <string name="keywords_wifi_calling" msgid="3554052148729818521">"WiFi, WiFi, poziv, pozivanje"</string>
<string name="keywords_display" msgid="355147521915213375">"ekran, dodirni ekran"</string>
<string name="keywords_display_brightness_level" msgid="7649410848561920512">"zatamni ekran, dodirni ekran, baterija, svetlo"</string>
<string name="keywords_display_night_display" msgid="3647370193110044967">"zatamni ekran, noć, senka, treća smena, osvetljenost, boja ekrana, boja"</string>
@@ -3132,7 +3134,7 @@
<string name="keywords_color_temperature" msgid="2255253972992035046">"boja, temperatura, D65, D73, bela, žuta, plava, topla, hladna"</string>
<string name="keywords_lockscreen" msgid="4936846554280830394">"prevlačenje za otključavanje, lozinka, šablon, PIN"</string>
<string name="keywords_profile_challenge" msgid="8653718001253979611">"work izazov, work, profil"</string>
- <string name="keywords_unification" msgid="2020759909366983593">"profil za Work, profil kojim se upravlja, objedini, objedinjavanje, Work, profil"</string>
+ <string name="keywords_unification" msgid="2020759909366983593">"poslovni profil, profil kojim se upravlja, objedini, objedinjavanje, posao, profil"</string>
<string name="keywords_gesture" msgid="5031323247529869644">"pokreti"</string>
<string name="keywords_payment_settings" msgid="4745023716567666052">"platite, dodirnite, plaćanja"</string>
<string name="keywords_backup" msgid="7433356270034921627">"rezervna kopija, praviti rezervnu kopiju"</string>
@@ -3188,7 +3190,7 @@
<string name="other_sound_settings" msgid="5250376066099818676">"Drugi zvukovi"</string>
<string name="dial_pad_tones_title" msgid="8877212139988655769">"Tonovi numeričke tastature"</string>
<string name="screen_locking_sounds_title" msgid="4407110895465866809">"Zvukovi zaključavanja ekrana"</string>
- <string name="charging_sounds_title" msgid="5070437987230894287">"Menjajući zvuci i vibracija"</string>
+ <string name="charging_sounds_title" msgid="5070437987230894287">"Zvukovi i vibracija punjenja"</string>
<string name="docking_sounds_title" msgid="2573137471605541366">"Zvukovi montiranja"</string>
<string name="touch_sounds_title" msgid="165237488496165652">"Zvukovi pri dodiru"</string>
<string name="vibrate_on_touch_title" msgid="6360155469279157684">"Vibracija pri dodiru"</string>
@@ -3253,10 +3255,10 @@
<string name="zen_mode_block_effects_screen_off" msgid="6380935819882837552">"Kada je ekran isključen"</string>
<string name="zen_mode_block_effect_sound" msgid="1499243540186357631">"Isključi zvuk i vibraciju"</string>
<string name="zen_mode_block_effect_intent" msgid="5666951244667422668">"Ne uključuj ekran"</string>
- <string name="zen_mode_block_effect_light" msgid="8679333758037487644">"Ne koristi treperenje lampice"</string>
+ <string name="zen_mode_block_effect_light" msgid="8679333758037487644">"Ne treperi lampicom"</string>
<string name="zen_mode_block_effect_peek" msgid="6075662813575910221">"Ne prikazuj iskačuća obaveštenja na ekranu"</string>
<string name="zen_mode_block_effect_status" msgid="6516614225115681068">"Sakrij ikone statusne trake u vrhu"</string>
- <string name="zen_mode_block_effect_badge" msgid="3891743027347075136">"Sakrij tačke za obav. na ikonama apl."</string>
+ <string name="zen_mode_block_effect_badge" msgid="3891743027347075136">"Sakrij tačke za obaveštenja na ikonama aplikacija"</string>
<string name="zen_mode_block_effect_ambient" msgid="6382013125863616197">"Ne budi zbog obaveštenja"</string>
<string name="zen_mode_block_effect_list" msgid="6081548478844912181">"Ne prikazuj na listi obaveštenja"</string>
<string name="zen_mode_block_effect_summary_none" msgid="7166175186759564510">"Nikad"</string>
@@ -3314,7 +3316,7 @@
<string name="zen_custom_settings_notifications_header" msgid="7469592764589354302">"Obaveštenja"</string>
<string name="zen_custom_settings_duration_header" msgid="1806465684026300942">"Trajanje"</string>
<string name="zen_msg_event_reminder_title" msgid="8685224436389816905">"Poruke, događaji i podsetnici"</string>
- <string name="zen_msg_event_reminder_footer" msgid="164400918479831580">"Kada je uključen režim Ne uznemiravaj, zvukovi obaveštenja za poruke, podsetnike i događaje će biti isključeni, osim za stavke koje ste dozvolili iznad. Možete da prilagodite podešavanja da biste dozvolili prijateljima, članovima porodice ili drugim kontaktima da vas kontaktiraju."</string>
+ <string name="zen_msg_event_reminder_footer" msgid="164400918479831580">"Kada je uključen režim Ne uznemiravaj, zvukovi obaveštenja za poruke, podsetnike i događaje će biti isključeni, osim za stavke koje ste dozvolili iznad. Možete da prilagodite podešavanja i dozvolite prijateljima, članovima porodice ili drugim kontaktima da dopru do vas."</string>
<string name="zen_onboarding_ok" msgid="6403635918125323678">"Gotovo"</string>
<string name="zen_onboarding_settings" msgid="1416466597876383322">"Podešavanja"</string>
<string name="zen_onboarding_new_setting_title" msgid="3622673375041304362">"Bez zvučnog signala ili vizuelnog obaveštenja"</string>
@@ -3322,16 +3324,16 @@
<string name="zen_onboarding_new_setting_summary" msgid="8264430315983860075">"Nećete videti niti čuti obaveštenja. Pozivi od kontakata sa zvezdicom i ponovnih pozivalaca su dozvoljeni."</string>
<string name="zen_onboarding_current_setting_summary" msgid="3569246708507270821">"(trenutno podešavanje)"</string>
<string name="zen_onboarding_dnd_visual_disturbances_header" msgid="7584229011611927613">"Želite li da promenite podešavanja obaveštenja za režim Ne uznemiravaj?"</string>
- <string name="sound_work_settings" msgid="4140215240360927923">"Zvuci za profil za Work"</string>
+ <string name="sound_work_settings" msgid="4140215240360927923">"Zvuci za poslovni profil"</string>
<string name="work_use_personal_sounds_title" msgid="531727195073003599">"Koristi zvuke ličnog profila"</string>
- <string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"Zvukovi profila za Work su isti kao i zvukovi za lične profile"</string>
- <string name="work_ringtone_title" msgid="5499360583947410224">"Melodija zvona za telefon za Work"</string>
+ <string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"Zvukovi poslovnog profila su isti kao i zvukovi za lične profile"</string>
+ <string name="work_ringtone_title" msgid="5499360583947410224">"Melodija zvona poslovnog telefona"</string>
<string name="work_notification_ringtone_title" msgid="8059159087214025757">"Podrazumevani zvuk obaveštenja za posao"</string>
<string name="work_alarm_ringtone_title" msgid="5328487181385375130">"Podrazumevani zvuk alarma za posao"</string>
<string name="work_sound_same_as_personal" msgid="7728560881697159758">"Isto kao i za lični profil"</string>
<string name="work_sync_dialog_title" msgid="4799120971202956837">"Želite li da zamenite zvukove?"</string>
<string name="work_sync_dialog_yes" msgid="2110726233746476066">"Zameni"</string>
- <string name="work_sync_dialog_message" msgid="944233463059129156">"Zvuci sa ličnog profila će se koristiti za profil za Work"</string>
+ <string name="work_sync_dialog_message" msgid="944233463059129156">"Zvuci sa ličnog profila će se koristiti za poslovni profil"</string>
<string name="ringtones_install_custom_sound_title" msgid="210551218424553671">"Dodati prilagođeni zvuk?"</string>
<string name="ringtones_install_custom_sound_content" msgid="6683649115132255452">"Ova datoteka će biti kopirana u direktorijum <xliff:g id="FOLDER_NAME">%s</xliff:g>"</string>
<string name="ringtones_category_preference_title" msgid="4491932700769815470">"Melodije zvona"</string>
@@ -3340,7 +3342,7 @@
<string name="recent_notifications" msgid="8125865995065032049">"Nedavno poslato"</string>
<string name="recent_notifications_see_all_title" msgid="4089007770442871469">"Pogledajte sve iz poslednjih 7 dana"</string>
<string name="advanced_section_header" msgid="984680389373090015">"Napredna"</string>
- <string name="profile_section_header" msgid="5471479005472037417">"Obaveštenja za Work"</string>
+ <string name="profile_section_header" msgid="5471479005472037417">"Poslovna obaveštenja"</string>
<string name="asst_capability_prioritizer_title" msgid="3488284760645922160">"Automatsko davanje prioriteta za obaveštenja"</string>
<string name="asst_capability_prioritizer_summary" msgid="3525640645743790796">"Automatski isključuje zvuk i postavlja na dno manje važna obaveštenja"</string>
<string name="asst_capabilities_actions_replies_title" msgid="3929395108744251338">"Pametne radnje i odgovori"</string>
@@ -3362,14 +3364,14 @@
<string name="swipe_direction_rtl" msgid="4521416787262888813">"Prevucite ulevo da biste odbacili, udesno da bi se prikazao meni"</string>
<string name="notification_pulse_title" msgid="4861418327614907116">"Uključi treperenje lampice"</string>
<string name="lock_screen_notifications_title" msgid="6889072265118747835">"Na zaključanom ekranu"</string>
- <string name="locked_work_profile_notification_title" msgid="8307025804986190658">"Kada je profil za Work zaključan"</string>
+ <string name="locked_work_profile_notification_title" msgid="8307025804986190658">"Kada je poslovni profil zaključan"</string>
<string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"Prikaži sav sadržaj obaveštenja"</string>
<string name="lock_screen_notifications_summary_hide" msgid="3668806866535260143">"Sakrij osetljiv sadržaj"</string>
<string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"Ne prikazuj nikakva obaveštenja"</string>
<string name="lock_screen_notifications_interstitial_message" msgid="4230189215124387818">"Kada je uređaj zaključan, kako želite da se obaveštenja prikazuju?"</string>
<string name="lock_screen_notifications_interstitial_title" msgid="2832587379332443505">"Obaveštenja"</string>
- <string name="lock_screen_notifications_summary_show_profile" msgid="8908775469657073273">"Prikazuj sav sadržaj obaveštenja o profilu za Work"</string>
- <string name="lock_screen_notifications_summary_hide_profile" msgid="7898086300511010591">"Sakrij osetljiv sadržaj profila za Work"</string>
+ <string name="lock_screen_notifications_summary_show_profile" msgid="8908775469657073273">"Prikazuj sav sadržaj obaveštenja o poslovnom profilu"</string>
+ <string name="lock_screen_notifications_summary_hide_profile" msgid="7898086300511010591">"Sakrij osetljiv sadržaj poslovnog profila"</string>
<string name="lock_screen_notifications_interstitial_message_profile" msgid="3324187664458600354">"Kada je uređaj zaključan, kako želite da se prikazuju obaveštenja o profilu?"</string>
<string name="lock_screen_notifications_interstitial_title_profile" msgid="4043621508889929254">"Obaveštenja o profilu"</string>
<string name="notifications_title" msgid="8334011924253810654">"Obaveštenja"</string>
@@ -3403,7 +3405,7 @@
<string name="notifications_sent_weekly" msgid="5859675428990259432">"~<xliff:g id="NUMBER">%1$s</xliff:g> nedeljno"</string>
<string name="notifications_sent_never" msgid="237997329598144638">"Nikad"</string>
<string name="manage_notification_access_title" msgid="5348743662189787547">"Pristup obaveštenjima"</string>
- <string name="work_profile_notification_access_blocked_summary" msgid="8148871282484870576">"Pristup obaveštenjima profila za Work je blokiran"</string>
+ <string name="work_profile_notification_access_blocked_summary" msgid="8148871282484870576">"Pristup obaveštenjima poslovnog profila je blokiran"</string>
<string name="manage_notification_access_summary_zero" msgid="236809421271593016">"Aplikacije ne mogu da čitaju obaveštenja"</string>
<plurals name="manage_notification_access_summary_nonzero" formatted="false" msgid="8496218948429646792">
<item quantity="one">%d aplikacija može da čita obaveštenja</item>
@@ -3489,7 +3491,7 @@
<string name="zen_mode_add_time_rule" msgid="5999467757140524729">"Dodajte vremenski raspored"</string>
<string name="zen_mode_delete_rule" msgid="2292933835997203801">"Izbriši raspored"</string>
<string name="zen_mode_choose_rule_type" msgid="8877138307319450306">"Odaberite tip rasporeda"</string>
- <string name="zen_mode_delete_rule_confirmation" msgid="2646596466259025978">"Želite li da izbrišete pravilo „<xliff:g id="RULE">%1$s</xliff:g>“?"</string>
+ <string name="zen_mode_delete_rule_confirmation" msgid="2646596466259025978">"Želite da izbrišete pravilo „<xliff:g id="RULE">%1$s</xliff:g>“?"</string>
<string name="zen_mode_delete_rule_button" msgid="611058106279881991">"Izbriši"</string>
<string name="zen_mode_rule_type_unknown" msgid="2819480113355191421">"Nepoznato"</string>
<string name="zen_mode_app_set_behavior" msgid="8597398780262575571">"Ova podešavanja trenutno ne mogu da se menjaju. Aplikacija (<xliff:g id="APP_NAME">%1$s</xliff:g>) je automatski uključila režim Ne uznemiravaj sa prilagođenim ponašanjem."</string>
@@ -3526,7 +3528,7 @@
<string name="zen_mode_calls" msgid="1844534357711539325">"Dozvoli pozive"</string>
<string name="zen_mode_calls_title" msgid="2024387562355793661">"Pozivi"</string>
<string name="zen_mode_calls_footer" msgid="6319824006810688433">"Da biste bili sigurni da će se dozvoljeni pozivi čuti, proverite da li je uređaj podešen da zvoni, vibrira ili je u nečujnom režimu."</string>
- <string name="zen_mode_custom_calls_footer" msgid="7329231648477682337">"Dolazni pozivi su blokirani za „<xliff:g id="SCHEDULE_NAME">%1$s</xliff:g>“. Možete da prilagodite podešavanja da biste dozvolili prijateljima, članovima porodice ili drugim kontaktima da vas kontaktiraju."</string>
+ <string name="zen_mode_custom_calls_footer" msgid="7329231648477682337">"Dolazni pozivi su blokirani za „<xliff:g id="SCHEDULE_NAME">%1$s</xliff:g>“. Možete da prilagodite podešavanja i dozvolite prijateljima, članovima porodice ili drugim kontaktima da dopru do vas."</string>
<string name="zen_mode_starred_contacts_title" msgid="7099621384597127058">"Kontakti sa zvezdicom"</string>
<plurals name="zen_mode_starred_contacts_summary_additional_contacts" formatted="false" msgid="1904181007981570805">
<item quantity="one">Još <xliff:g id="NUM_PEOPLE">%d</xliff:g> osoba</item>
@@ -3535,7 +3537,7 @@
</plurals>
<string name="zen_mode_messages" msgid="2908722562188394107">"Dozvoli poruke"</string>
<string name="zen_mode_messages_footer" msgid="5048951937714668561">"Da biste bili sigurni da će se dozvoljene poruke čuti, proverite da li je uređaj podešen da zvoni, vibrira ili je u nečujnom režimu."</string>
- <string name="zen_mode_custom_messages_footer" msgid="5566007423100361691">"Dolazne poruke su blokirane za „<xliff:g id="SCHEDULE_NAME">%1$s</xliff:g>“. Možete da prilagodite podešavanja da biste dozvolili prijateljima, članovima porodice ili drugim kontaktima da vas kontaktiraju."</string>
+ <string name="zen_mode_custom_messages_footer" msgid="5566007423100361691">"Dolazne poruke su blokirane za „<xliff:g id="SCHEDULE_NAME">%1$s</xliff:g>“. Možete da prilagodite podešavanja i dozvolite prijateljima, članovima porodice ili drugim kontaktima da dopru do vas."</string>
<string name="zen_mode_messages_title" msgid="786261471294055181">"SMS, MMS i aplikacije za razmenu poruka"</string>
<string name="zen_mode_from_anyone" msgid="7778836826814131083">"Od bilo koga"</string>
<string name="zen_mode_from_contacts" msgid="267034158294332688">"Samo od kontakata"</string>
@@ -3543,7 +3545,7 @@
<string name="zen_calls_summary_starred_repeat" msgid="9191394641577678207">"Od kontakata sa zvezdicom i ponovnih pozivalaca"</string>
<string name="zen_calls_summary_contacts_repeat" msgid="7747592096431111510">"Od kontakata i ponovnih pozivalaca"</string>
<string name="zen_calls_summary_repeat_only" msgid="8839703337232747964">"Samo od ponovnih pozivalaca"</string>
- <string name="zen_mode_from_none" msgid="7683889985618637010">"Ni od koga"</string>
+ <string name="zen_mode_from_none" msgid="7683889985618637010">"Niko"</string>
<string name="zen_mode_from_none_calls" msgid="2967739140346917546">"Ne dozvoli pozive"</string>
<string name="zen_mode_from_none_messages" msgid="9069143820057833634">"Ne dozvoljavaj nikakve poruke"</string>
<string name="zen_mode_alarms" msgid="5528707742250954290">"Dozvoli alarme"</string>
@@ -3610,7 +3612,7 @@
<string name="screen_pinning_unlock_pin" msgid="1441705536015645023">"Traži PIN pre otkačinjanja"</string>
<string name="screen_pinning_unlock_password" msgid="1017776884000170841">"Traži lozinku pre otkačinjanja"</string>
<string name="screen_pinning_unlock_none" msgid="9183040569733226911">"Zaključaj uređaj pre otkačinjanja"</string>
- <string name="opening_paragraph_delete_profile_unknown_company" msgid="2350380017136403670">"Ovim profilom za Work upravlja:"</string>
+ <string name="opening_paragraph_delete_profile_unknown_company" msgid="2350380017136403670">"Ovim poslovnim profilom upravlja:"</string>
<string name="managing_admin" msgid="3212584016377581608">"Upravlja <xliff:g id="ADMIN_APP_LABEL">%s</xliff:g>"</string>
<string name="experimental_preference" msgid="5903223408406906322">"(Eksperimentalno)"</string>
<string name="encryption_interstitial_header" msgid="3298397268731647519">"Bezbedno pokretanje"</string>
@@ -3768,8 +3770,8 @@
<string name="high_power_off" msgid="5906679734326490426">"Optimizacija korišćenja baterije"</string>
<string name="high_power_system" msgid="739584574711292753">"Optimizacija baterije nije dostupna"</string>
<string name="high_power_desc" msgid="333756885680362741">"Ne primenjujte optimizaciju baterije. Može brže da isprazni bateriju."</string>
- <string name="high_power_prompt_title" msgid="2805745781720454052">"Želite li da dozvolite da aplikacija uvek bude aktivna u pozadini?"</string>
- <string name="high_power_prompt_body" msgid="8067395096053552289">"Ako dozvolite da aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> uvek bude aktivna u pozadini, to može da smanji trajanje baterije. \n\nKasnije možete to da promenite u odeljku Podešavanja > Aplikacije i obaveštenja."</string>
+ <string name="high_power_prompt_title" msgid="2805745781720454052">"Dozvoljavate da aplikacija uvek bude aktivna u pozadini?"</string>
+ <string name="high_power_prompt_body" msgid="8067395096053552289">"Ako dozvolite da aplikacija <xliff:g id="APP_NAME">%1$s</xliff:g> uvek bude aktivna u pozadini, to može da skrati trajanje baterije. \n\nKasnije možete to da promenite u odeljku Podešavanja > Aplikacije i obaveštenja."</string>
<string name="battery_summary" msgid="4345690800899981339">"Potrošeno je <xliff:g id="PERCENTAGE">%1$s</xliff:g> od poslednjeg potpunog punjenja"</string>
<string name="battery_power_management" msgid="2853925857548647969">"Upravljanje napajanjem"</string>
<string name="no_battery_summary" msgid="4105932628367471314">"Baterija nije korišćena od poslednjeg potpunog punjenja"</string>
@@ -3855,7 +3857,7 @@
<string name="ignore_optimizations_off_desc" msgid="5598702251817814289">"Preporučeno za duže trajanje baterije"</string>
<string name="ignore_optimizations_title" msgid="7924345545276166305">"Želite li da dozvolite aplikaciji <xliff:g id="APP">%s</xliff:g> da ignoriše optimizacije baterije?"</string>
<string name="app_list_preference_none" msgid="7100409177446935028">"Ništa"</string>
- <string name="work_profile_usage_access_warning" msgid="403208064382097510">"Isključivanje pristupa korišćenju za ovu aplikaciju ne sprečava administratora da prati potrošnju podataka za aplikacije na profilu za Work"</string>
+ <string name="work_profile_usage_access_warning" msgid="403208064382097510">"Isključivanje pristupa korišćenju za ovu aplikaciju ne sprečava administratora da prati potrošnju podataka za aplikacije na poslovnom profilu"</string>
<string name="accessibility_lock_screen_progress" msgid="8242917828598820049">"Upotrebljeni znakovi: <xliff:g id="COUNT_0">%1$d</xliff:g> od <xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
<string name="draw_overlay" msgid="2878665072530660668">"Prikaz preko drugih aplikacija"</string>
<string name="system_alert_window_settings" msgid="3024330223417646567">"Prikaz preko drugih aplikacija"</string>
@@ -3939,7 +3941,7 @@
<string name="disabled_by_policy_title_suspend_packages" msgid="4254714213391802322">"Ne možete da otvorite ovu aplikaciju"</string>
<string name="default_admin_support_msg" msgid="5789424433689798637">"Ako imate pitanja, obratite se IT administratoru"</string>
<string name="admin_support_more_info" msgid="8737842638087863477">"Još detalja"</string>
- <string name="admin_profile_owner_message" msgid="3199544166281052845">"Administrator može da nadgleda aplikacije i podatke povezane sa profilom za Work, uključujući podešavanja, dozvole, korporativni pristup, aktivnosti na mreži i informacije o lokaciji uređaja, kao i da upravlja njima."</string>
+ <string name="admin_profile_owner_message" msgid="3199544166281052845">"Administrator može da nadgleda aplikacije i podatke povezane sa poslovnim profilom, uključujući podešavanja, dozvole, korporativni pristup, aktivnosti na mreži i informacije o lokaciji uređaja, kao i da upravlja njima."</string>
<string name="admin_profile_owner_user_message" msgid="2991249382056855531">"Administrator može da nadgleda aplikacije i podatke povezane sa ovim korisnikom, uključujući podešavanja, dozvole, korporativni pristup, aktivnosti na mreži i informacije o lokaciji uređaja, kao i da upravlja njima."</string>
<string name="admin_device_owner_message" msgid="1823477572459610869">"Administrator može da prati aplikacije i podatke povezane sa ovim uređajem, uključujući podešavanja, dozvole, korporativni pristup, aktivnosti na mreži i informacije o lokaciji uređaja, kao i da upravlja njima."</string>
<string name="condition_turn_off" msgid="4395150881365143558">"Isključi"</string>
@@ -3958,7 +3960,7 @@
<string name="condition_cellular_summary" msgid="3607459310548343777">"Internet je dostupan samo preko Wi‑Fi mreže"</string>
<string name="condition_bg_data_title" msgid="184684435298857712">"Ušteda podataka"</string>
<string name="condition_bg_data_summary" msgid="5194942860807136682">"Funkcije su ograničene"</string>
- <string name="condition_work_title" msgid="9046811302347490371">"Profil za Work je isključen"</string>
+ <string name="condition_work_title" msgid="9046811302347490371">"Poslovni profil je isključen"</string>
<string name="condition_work_summary" msgid="5586134491975748565">"Za aplikacije i obaveštenja"</string>
<string name="condition_device_muted_action_turn_on_sound" msgid="5849285946804815263">"Uključi zvuk"</string>
<string name="condition_device_muted_title" msgid="3930542786434609976">"Zvuk zvona je isključen"</string>
@@ -3996,12 +3998,12 @@
<string name="usage" msgid="9172908720164431622">"Potrošnja"</string>
<string name="cellular_data_usage" msgid="1236562234207782386">"Potrošnja mobil. podataka"</string>
<string name="app_cellular_data_usage" msgid="8499761516172121957">"Korišćenje podataka aplikacije"</string>
- <string name="wifi_data_usage" msgid="275569900562265895">"Potrošnja Wi-Fi podataka"</string>
+ <string name="wifi_data_usage" msgid="275569900562265895">"Potrošnja WiFi podataka"</string>
<string name="ethernet_data_usage" msgid="747614925362556718">"Potrošnja podataka na eternetu"</string>
- <string name="wifi" msgid="1586738489862966138">"Wi-Fi"</string>
+ <string name="wifi" msgid="1586738489862966138">"WiFi"</string>
<string name="ethernet" msgid="2365753635113154667">"Eternet"</string>
<string name="cell_data_template" msgid="5473177306229738078">"<xliff:g id="AMOUNT">^1</xliff:g> mobilnih podataka"</string>
- <string name="wifi_data_template" msgid="3146090439147042068">"<xliff:g id="AMOUNT">^1</xliff:g> Wi-Fi podataka"</string>
+ <string name="wifi_data_template" msgid="3146090439147042068">"<xliff:g id="AMOUNT">^1</xliff:g> WiFi podataka"</string>
<string name="ethernet_data_template" msgid="6414118030827090119">"<xliff:g id="AMOUNT">^1</xliff:g> podataka na eternetu"</string>
<string name="billing_cycle" msgid="5740717948341713190">"Upozorenje za podatke i ograničenje"</string>
<string name="app_usage_cycle" msgid="213483325132959663">"Ciklus potrošnje podataka apl."</string>
@@ -4017,7 +4019,7 @@
</plurals>
<string name="operator_warning" msgid="4676042739221117031">"Obračun podataka kod mobilnog operatera se možda razlikuje od obračuna uređaja."</string>
<string name="data_used_template" msgid="761605393453849477">"Potrošili ste <xliff:g id="ID_1">%1$s</xliff:g>"</string>
- <string name="set_data_warning" msgid="8115980184415563941">"Podešavanje upozorenja o podacima"</string>
+ <string name="set_data_warning" msgid="8115980184415563941">"Podesi upozorenje o podacima"</string>
<string name="data_warning" msgid="2699207195535036240">"Upozorenje za potrošnju podataka"</string>
<string name="data_warning_footnote" msgid="965724845580257305">"Upozorenje za potrošnju podataka i ograničenje potrošnje podataka aktivira merenje uređaja. To može da se razlikuje od merenja mobilnog operatera."</string>
<string name="set_data_limit" msgid="5043770023229990674">"Podesi ograničenje za podatke"</string>
@@ -4074,7 +4076,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Ako je uređaj zaključan, spreči unos odgovora ili drugog teksta u obaveštenja"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Podrazumevana provera pravopisa"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Izaberite proveru pravopisa"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Koristi proveru pravopisa"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Koristi proveru pravopisa"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Nije izabrano"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(nijedno)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4171,7 +4173,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Da bi oslobodio memorijski prostor, menadžer memorijskog prostora uklanja rezervne kopije slika i video snimaka sa uređaja."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Uklonite slike i video"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Menadžer memorijskog prostora"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Koristi Menadžer memorijskog prostora"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Koristi menadžer memorijskog prostora"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatska"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Ručna"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Oslobodi prostor"</string>
@@ -4267,11 +4269,11 @@
<string name="enterprise_privacy_input_method_name" msgid="439610095825218563">"Podešeno je na <xliff:g id="APP_LABEL">%s</xliff:g>"</string>
<string name="enterprise_privacy_always_on_vpn_device" msgid="2022700916516458213">"Stalno uključen VPN je uključen"</string>
<string name="enterprise_privacy_always_on_vpn_personal" msgid="5644065780843002044">"Stalno uključen VPN je uključen na ličnom profilu"</string>
- <string name="enterprise_privacy_always_on_vpn_work" msgid="6443089897985373564">"Stalno uključen VPN je uključen na profilu za Work"</string>
+ <string name="enterprise_privacy_always_on_vpn_work" msgid="6443089897985373564">"Stalno uključen VPN je uključen na poslovnom profilu"</string>
<string name="enterprise_privacy_global_http_proxy" msgid="3862135895716080830">"Globalni HTTP proksi je podešen"</string>
<string name="enterprise_privacy_ca_certs_device" msgid="7715658848470643878">"Pouzdani akreditivi"</string>
<string name="enterprise_privacy_ca_certs_personal" msgid="1356447417193483802">"Pouzdani akreditivi na ličnom profilu"</string>
- <string name="enterprise_privacy_ca_certs_work" msgid="836419648894546893">"Pouzdani akreditivi na profilu za Work"</string>
+ <string name="enterprise_privacy_ca_certs_work" msgid="836419648894546893">"Pouzdani akreditivi na poslovnom profilu"</string>
<plurals name="enterprise_privacy_number_ca_certs" formatted="false" msgid="7953528945502561752">
<item quantity="one">Najmanje <xliff:g id="COUNT_1">%d</xliff:g> CA sertifikat</item>
<item quantity="few">Najmanje <xliff:g id="COUNT_1">%d</xliff:g> CA sertifikata</item>
@@ -4280,7 +4282,7 @@
<string name="enterprise_privacy_lock_device" msgid="1533125067038409945">"Administrator može da zaključava uređaj i resetuje lozinku"</string>
<string name="enterprise_privacy_wipe_device" msgid="7555287990273929922">"Administrator može da briše sve podatke sa uređaja"</string>
<string name="enterprise_privacy_failed_password_wipe_device" msgid="4101502079202483156">"Neuspeli pokušaji unosa lozinke pre brisanja svih podataka sa uređaja"</string>
- <string name="enterprise_privacy_failed_password_wipe_work" msgid="2881646286634693392">"Neuspeli pokušaji unosa lozinke pre brisanja podataka sa profila za Work"</string>
+ <string name="enterprise_privacy_failed_password_wipe_work" msgid="2881646286634693392">"Neuspeli pokušaji unosa lozinke pre brisanja podataka sa poslovnog profila"</string>
<plurals name="enterprise_privacy_number_failed_password_wipe" formatted="false" msgid="562550414712223382">
<item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> pokušaj</item>
<item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> pokušaja</item>
@@ -4382,9 +4384,9 @@
<string name="unknown_unavailability_setting_summary" msgid="5785931810977403534">"Podešavanje je nedostupno"</string>
<string name="my_device_info_account_preference_title" msgid="7965847995028952373">"Nalog"</string>
<string name="my_device_info_device_name_preference_title" msgid="7384446683248009296">"Naziv uređaja"</string>
- <string name="change_wifi_state_title" msgid="5140754955787584174">"Kontrola Wi-Fi veze"</string>
- <string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"Omogućite da aplikacija kontroliše Wi-Fi"</string>
- <string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Omogućite da ova aplikacija uključi ili isključi Wi-Fi, traži i povezuje se na Wi-Fi mreže, dodaje i uklanja mreže ili pokreće samo lokalni hotspot"</string>
+ <string name="change_wifi_state_title" msgid="5140754955787584174">"Kontrola WiFi veze"</string>
+ <string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"Omogućite da aplikacija kontroliše WiFi"</string>
+ <string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Omogućite da ova aplikacija uključi ili isključi WiFi, traži i povezuje se na WiFi mreže, dodaje i uklanja mreže ili pokreće samo lokalni hotspot"</string>
<string name="media_output_title" msgid="8710632337456601848">"Puštaj medijski sadržaj na"</string>
<string name="media_output_default_summary" msgid="3159237976830415584">"Ovaj uređaj"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"Telefon"</string>
@@ -4408,7 +4410,7 @@
<string name="prevent_ringing_option_mute_summary" msgid="3509459199090688328">"Uključeno (zvuk je isključen)"</string>
<string name="prevent_ringing_option_none_summary" msgid="5152618221093037451">"Isključeno"</string>
<string name="pref_title_network_details" msgid="3971074015034595956">"Detalji o mreži"</string>
- <string name="about_phone_device_name_warning" msgid="9088572775969880106">"Ime uređaja vide aplikacije na telefonu. Mogu da ga vide i drugi ljudi kad se povežete sa Bluetooth uređajima ili podesite Wi-Fi hotspot."</string>
+ <string name="about_phone_device_name_warning" msgid="9088572775969880106">"Ime uređaja vide aplikacije na telefonu. Mogu da ga vide i drugi ljudi kad se povežete sa Bluetooth uređajima ili podesite WiFi hotspot."</string>
<string name="devices_title" msgid="4768432575951993648">"Uređaji"</string>
<string name="homepage_all_settings" msgid="3201220879559136116">"Sva podešavanja"</string>
<string name="homepage_personal_settings" msgid="7472638597249114564">"Predlozi"</string>
@@ -4554,7 +4556,7 @@
<string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"Želite li da uklonite ovaj predlog?"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"Predlog je uklonjen"</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"Opozovi"</string>
- <string name="low_storage_summary" msgid="4562224870189133400">"Preostalo je malo slobodnog memorijskog prostora. <xliff:g id="PERCENTAGE">%1$s</xliff:g> je iskorišćeno – <xliff:g id="FREE_SPACE">%2$s</xliff:g> je slobodno"</string>
+ <string name="low_storage_summary" msgid="4562224870189133400">"Nema mnogo prostora. <xliff:g id="PERCENTAGE">%1$s</xliff:g> je iskorišćeno – <xliff:g id="FREE_SPACE">%2$s</xliff:g> je slobodno"</string>
<string name="contextual_card_feedback_send" msgid="8698649023854350623">"Pošaljite povratne informacije"</string>
<string name="contextual_card_feedback_confirm_message" msgid="3987973028353264878">"Želite li da nam pošaljete povratne informacije za ovaj predlog?"</string>
<string name="copyable_slice_toast" msgid="1357518174923789947">"Kopirano je u privremenu memoriju: <xliff:g id="COPY_CONTENT">%1$s</xliff:g>"</string>
@@ -4600,5 +4602,5 @@
<string name="automatic_system_heap_dump_summary" msgid="4962129546638974661">"Automatski snima dinamički deo memorije za Android sistem kada koristi previše memorije"</string>
<string name="wifi_disconnect_button_text" msgid="787688024070426706">"Prekini vezu"</string>
<string name="wfc_disclaimer_emergency_limitation_title_text" msgid="26884532087670844">"Hitni pozivi"</string>
- <string name="wfc_disclaimer_emergency_limitation_desc_text" msgid="8726152486964822599">"Mobilni operater ne podržava hitne pozive pomoću funkcije Pozivanje preko Wi-Fi-ja.\nUređaj automatski prelazi na mobilnu mrežu da bi uputio hitan poziv.\nHitni pozivi su mogući samo u oblastima pokrivenim mobilnom mrežom."</string>
+ <string name="wfc_disclaimer_emergency_limitation_desc_text" msgid="8726152486964822599">"Mobilni operater ne podržava hitne pozive pomoću funkcije Pozivanje preko WiFi-ja.\nUređaj automatski prelazi na mobilnu mrežu da bi uputio hitan poziv.\nHitni pozivi su mogući samo u oblastima pokrivenim mobilnom mrežom."</string>
</resources>
diff --git a/tests/CarDeveloperOptions/res/values-be/arrays.xml b/tests/CarDeveloperOptions/res/values-be/arrays.xml
index c8aaf44..d08aa63 100644
--- a/tests/CarDeveloperOptions/res/values-be/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-be/arrays.xml
@@ -29,7 +29,15 @@
<item msgid="5194868215515664953">"Ціхі акіян"</item>
<item msgid="7044520255415007865">"Усе"</item>
</string-array>
- <!-- no translation found for screen_timeout_entries:0 (8596143519087753804) -->
+ <string-array name="screen_timeout_entries">
+ <item msgid="8596143519087753804">"15 секунд"</item>
+ <item msgid="772029947136115322">"30 секунд"</item>
+ <item msgid="8743663928349474087">"1 хвіліна"</item>
+ <item msgid="1506508631223164814">"2 хвіліны"</item>
+ <item msgid="8664703938127907662">"5 хвілін"</item>
+ <item msgid="5827960506924849753">"10 хвілін"</item>
+ <item msgid="6677424950124253938">"30 хвілін"</item>
+ </string-array>
<string-array name="dream_timeout_entries">
<item msgid="6487043225269853023">"Ніколі"</item>
<item msgid="2517785806387977252">"15 секунд"</item>
@@ -99,7 +107,12 @@
<item msgid="4646663015449312554">"Даступна"</item>
<item msgid="3230556734162006146">"Выхад за дазволеныя межы"</item>
</string-array>
- <!-- no translation found for bluetooth_visibility_timeout_entries:1 (2759776603549270587) -->
+ <string-array name="bluetooth_visibility_timeout_entries">
+ <item msgid="8247986727324120082">"2 хвіліны"</item>
+ <item msgid="2759776603549270587">"5 хвілін"</item>
+ <item msgid="167772676068860015">"1 гадзіна"</item>
+ <item msgid="5985477119043628504">"Ніколі не ўключаць тайм-аўт"</item>
+ </string-array>
<string-array name="bluetooth_max_connected_audio_devices">
<item msgid="3800257971619063588">"Выкарыстоўваць стандартныя налады сістэмы: <xliff:g id="DEFAULT_BLUETOOTH_MAX_CONNECTED_AUDIO_DEVICES">%1$d</xliff:g>"</item>
<item msgid="8572230405241423895">"1"</item>
@@ -206,15 +219,156 @@
<item msgid="8563996233342430477">"Медыя"</item>
<item msgid="5323851085993963783">"Прылада"</item>
</string-array>
- <!-- no translation found for app_ops_summaries:46 (4933375960222609935) -->
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
- <!-- no translation found for app_ops_labels:48 (8291198322681891160) -->
+ <string-array name="app_ops_summaries">
+ <item msgid="2585253854462134715">"прыблiзнае месцазнаходжанне"</item>
+ <item msgid="1830619568689922920">"дакладнае месцазнаходжанне"</item>
+ <item msgid="3317274469481923141">"GPS"</item>
+ <item msgid="8931785990160383356">"вібрацыя"</item>
+ <item msgid="8632513128515114092">"чытанне кантактаў"</item>
+ <item msgid="3741042113569620272">"змяніць кантакты"</item>
+ <item msgid="4204420969709009931">"чытанне гiсторыi выклікаў"</item>
+ <item msgid="2260380357119423209">"змены ў гiсторыi выклікаў"</item>
+ <item msgid="6550710385014530934">"чытанне календара"</item>
+ <item msgid="3575906174264853951">"змяніць каляндар"</item>
+ <item msgid="4319843242568057174">"сканаванне Wi-Fi"</item>
+ <item msgid="2981791890467303819">"апавяшчэнне"</item>
+ <item msgid="6617825156152476692">"сканаванне па сотавым"</item>
+ <item msgid="8865260890611559753">"патэлефанаваць па нумары"</item>
+ <item msgid="3254999273961542982">"чытаць SMS"</item>
+ <item msgid="7711446453028825171">"напісаць SMS"</item>
+ <item msgid="6123238544099198034">"атрымліваць SMS"</item>
+ <item msgid="838342167431596036">"атрымліваць экстранныя SMS"</item>
+ <item msgid="8554432731560956686">"атрымліваць MMS"</item>
+ <item msgid="7464863464299515059">"атрымаць WAP Push"</item>
+ <item msgid="310463075729606765">"Адправiць SMS"</item>
+ <item msgid="7338021933527689514">"чытанне ICC SMS"</item>
+ <item msgid="6130369335466613036">"напiсаць ICC SMS"</item>
+ <item msgid="6536865581421670942">"змяніць налады"</item>
+ <item msgid="4547203129183558973">"намалюйце ўверсе"</item>
+ <item msgid="9080347512916542840">"доступ да паведамленняў"</item>
+ <item msgid="5332718516635907742">"камера"</item>
+ <item msgid="6098422447246167852">"запісваць аўдыё"</item>
+ <item msgid="9182794235292595296">"прайграць аўдыё"</item>
+ <item msgid="8760743229597702019">"счытаць буфер абмену"</item>
+ <item msgid="2266923698240538544">"змяніць буфер абмену"</item>
+ <item msgid="1801619438618539275">"мультымедыйныя кнопкі"</item>
+ <item msgid="31588119965784465">"аўдыёфокус"</item>
+ <item msgid="7565226799008076833">"асноўны рэгулятар гучнасці"</item>
+ <item msgid="5420704980305018295">"гучнасць голаса"</item>
+ <item msgid="5797363115508970204">"гучнасць званка"</item>
+ <item msgid="8233154098550715999">"гучнасць прайгравальніка"</item>
+ <item msgid="5196715605078153950">"гучнасць будзільніка"</item>
+ <item msgid="394030698764284577">"гучнасць апавяшчэнняў"</item>
+ <item msgid="8952898972491680178">"гучнасць Bluetooth"</item>
+ <item msgid="8506227454543690851">"не ўваходзіць у рэжым сна"</item>
+ <item msgid="1108160036049727420">"сачыць за вызначэннем месцазнаходжання"</item>
+ <item msgid="1496205959751719491">"сачыць за энергазатратным вызначэннем месцазнаходжання"</item>
+ <item msgid="3776296279910987380">"атрымліваць статыстыку выкарыстання"</item>
+ <item msgid="8827100324471975602">"адключаць/уключаць мікрафон"</item>
+ <item msgid="6880736730520126864">"паказваць усплывальнае паведамленне"</item>
+ <item msgid="4933375960222609935">"праецыраваць мультымедыя"</item>
+ <item msgid="8357907018938895462">"актываваць VPN"</item>
+ <item msgid="8143812849911310973">"запісваць шпалеры"</item>
+ <item msgid="6266277260961066535">"дапаможная структура"</item>
+ <item msgid="7715498149883482300">"дапаможны здымак экрана"</item>
+ <item msgid="4046679376726313293">"чытаць стан тэлефона"</item>
+ <item msgid="6329507266039719587">"дадаваць галасавое паведамленне"</item>
+ <item msgid="7692440726415391408">"выкарыстоўваць пратакол SIP"</item>
+ <item msgid="8572453398128326267">"апрацоўваць выходны выклік"</item>
+ <item msgid="7775674394089376306">"адбітак пальца"</item>
+ <item msgid="3182815133441738779">"датчыкі цела"</item>
+ <item msgid="2793100005496829513">"чытаць мабільныя трансляцыі"</item>
+ <item msgid="2633626056029384366">"імітаваць месцазнаходжанне"</item>
+ <item msgid="8356842191824684631">"чытаць сховішча"</item>
+ <item msgid="5671906070163291500">"пісаць на сховішча"</item>
+ <item msgid="2791955098549340418">"уключаць экран"</item>
+ <item msgid="5599435119609178367">"атрымліваць уліковыя запісы"</item>
+ <item msgid="1165623660533024666">"выконваць у фонавым рэжыме"</item>
+ <item msgid="6423861043647911030">"гучнасць для спецыяльных магчымасцей"</item>
+ </string-array>
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Месцазнаходжанне"</item>
+ <item msgid="6656077694190491067">"Месцазнаходжанне"</item>
+ <item msgid="8790228218278477369">"Месцазнаходжанне"</item>
+ <item msgid="7836406246005211990">"Вібрацыя"</item>
+ <item msgid="3951439024549922598">"Чытанне кантактаў"</item>
+ <item msgid="8802152411647068">"Змяніць кантакты"</item>
+ <item msgid="229544934599698735">"Чытанне гiсторыi выклікаў"</item>
+ <item msgid="7396102294405899613">"Змяненне запісаў у гiсторыi выклікаў"</item>
+ <item msgid="3597797992398484655">"Чытанне календара"</item>
+ <item msgid="2705975774250907343">"Змена календара"</item>
+ <item msgid="4668747371441932697">"Месцазнаходжанне"</item>
+ <item msgid="1487578921720243646">"Апублiкаваць апавяшчэнне"</item>
+ <item msgid="4636080349724146638">"Месцазнаходжанне"</item>
+ <item msgid="673510900286463926">"Патэлефанаваць па нумары"</item>
+ <item msgid="542083422784609790">"Чытаць SMS/MMS"</item>
+ <item msgid="1033780373029588436">"Пісаць SMS/MMS"</item>
+ <item msgid="5647111115517787488">"Прыём SMS/MMS"</item>
+ <item msgid="8591105601108455893">"Прыём SMS/MMS"</item>
+ <item msgid="7730995008517841903">"Прыём SMS/MMS"</item>
+ <item msgid="2613033109026626086">"Прыём SMS/MMS"</item>
+ <item msgid="3037159047591081136">"Адправiць SMS/MMS"</item>
+ <item msgid="4726682243833913568">"Чытаць SMS/MMS"</item>
+ <item msgid="6555678522277865572">"Пісаць SMS/MMS"</item>
+ <item msgid="6981734935578130884">"Змена налад"</item>
+ <item msgid="8705854389991425629">"Намалюйце ўверсе"</item>
+ <item msgid="5861356020344153651">"Доступ да паведамленняў"</item>
+ <item msgid="78432174621628659">"Камера"</item>
+ <item msgid="3986116419882154794">"Запісаць аўдыё"</item>
+ <item msgid="4516840825756409490">"Прайграванне аўдыё"</item>
+ <item msgid="6811712502798183957">"Счытаць буфер абмену"</item>
+ <item msgid="2780369012602289114">"Змяніць буфер абмену"</item>
+ <item msgid="2331359440170850868">"Мультымедыйныя кнопкі"</item>
+ <item msgid="6133599737122751231">"Аўдыёфокус"</item>
+ <item msgid="6844485713404805301">"Асноўны рэгулятар гучнасці"</item>
+ <item msgid="1600379420669104929">"Гучнасць голаса"</item>
+ <item msgid="6296768210470214866">"Гучнасць званка"</item>
+ <item msgid="510690696071629241">"Гучнасць медыя"</item>
+ <item msgid="406861638631430109">"Гучнасць будзільніка"</item>
+ <item msgid="4715864795872233884">"Гучнасць апавяшчэнняў"</item>
+ <item msgid="2311478519251301183">"Гучнасць Bluetooth"</item>
+ <item msgid="5133991377896747027">"Не ўвах. у рэжым сна"</item>
+ <item msgid="2464189519136248621">"Месцазнаходжанне"</item>
+ <item msgid="2062677934050803037">"Месцазнаходжанне"</item>
+ <item msgid="1735171933192715957">"Атрымаць статыстыку выкарыстання"</item>
+ <item msgid="1014093788778383554">"Адключаць/уключаць мікрафон"</item>
+ <item msgid="4199297950608622850">"Паказваць усплывальнае паведамленне"</item>
+ <item msgid="2527962435313398821">"Праецыраваць мультымедыя"</item>
+ <item msgid="5117506254221861929">"Актываваць VPN"</item>
+ <item msgid="8291198322681891160">"Запісаць шпалеры"</item>
+ <item msgid="7106921284621230961">"Дапаможная структура"</item>
+ <item msgid="4496533640894624799">"Дапаможны здымак экрана"</item>
+ <item msgid="2598847264853993611">"Чытаць стан тэлефона"</item>
+ <item msgid="9215610846802973353">"Дадаваць галасавое паведамленне"</item>
+ <item msgid="9186411956086478261">"Выкарыстоўваць пратакол SIP"</item>
+ <item msgid="6884763100104539558">"Апрацоўваць выходны выклік"</item>
+ <item msgid="125513972170580692">"Адбітак пальца"</item>
+ <item msgid="2556071024281275619">"Датчыкі цела"</item>
+ <item msgid="617168514928339387">"Чытаць мабільныя трансляцыі"</item>
+ <item msgid="7134693570516523585">"Імітаваць месцазнаходжанне"</item>
+ <item msgid="7224489175375229399">"Чытаць сховішча"</item>
+ <item msgid="8472735063903258202">"Пісаць на сховішча"</item>
+ <item msgid="4069276819909595110">"Уключаць экран"</item>
+ <item msgid="1228338896751121025">"Атрымліваць уліковыя запісы"</item>
+ <item msgid="3181581793459233672">"Выконваць у фонавым рэжыме"</item>
+ <item msgid="2340936043025374076">"Гучнасць для спецыяльных магчымасцей"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Кароткая"</item>
<item msgid="4816511817309094890">"Сярэдняя"</item>
<item msgid="8305084671259331134">"Доўгая"</item>
</string-array>
- <!-- no translation found for captioning_typeface_selector_titles:4 (1487203730637617924) -->
+ <string-array name="captioning_typeface_selector_titles">
+ <item msgid="6928465258504250174">"Стандартны"</item>
+ <item msgid="4147246073737933622">"Без засечак"</item>
+ <item msgid="3117680749167407907">"Без засечак сцягнуты"</item>
+ <item msgid="6529379119163117545">"Без засечак монашырынны"</item>
+ <item msgid="1487203730637617924">"З засечкамі"</item>
+ <item msgid="4937790671987480464">"З засечкамі монашырынны"</item>
+ <item msgid="4448481989108928248">"Нефармальны"</item>
+ <item msgid="4627069151979553527">"Курсіўны"</item>
+ <item msgid="6896773537705206194">"Капітэль"</item>
+ </string-array>
<string-array name="captioning_font_size_selector_titles">
<item msgid="1680223634161592855">"Вельмі дробны"</item>
<item msgid="5091603983404027034">"Дробны"</item>
@@ -222,14 +376,28 @@
<item msgid="2784236342175159295">"Вялікі"</item>
<item msgid="218913203203160606">"Вельмі вялікі"</item>
</string-array>
- <!-- no translation found for captioning_edge_type_selector_titles:4 (8019330250538856521) -->
+ <string-array name="captioning_edge_type_selector_titles">
+ <item msgid="3865198759294188069">"Стандартны"</item>
+ <item msgid="6488643537808152001">"Няма"</item>
+ <item msgid="552332815156010137">"Контур"</item>
+ <item msgid="7187891159463789272">"Цень"</item>
+ <item msgid="8019330250538856521">"Прыўзняты"</item>
+ <item msgid="8987385315647049787">"Уціснуты"</item>
+ </string-array>
<string-array name="captioning_opacity_selector_titles">
<item msgid="313003243371588365">"25%"</item>
<item msgid="4665048002584838262">"50 %"</item>
<item msgid="1874668269931014581">"75%"</item>
<item msgid="6462911487571123954">"100 %"</item>
</string-array>
- <!-- no translation found for captioning_preset_selector_titles:2 (5891360837786277638) -->
+ <string-array name="captioning_preset_selector_titles">
+ <item msgid="326819345272910536">"Ужываць стандартныя налады праграмы"</item>
+ <item msgid="8611890312638868524">"Белы на чорным"</item>
+ <item msgid="5891360837786277638">"Чорны на белым"</item>
+ <item msgid="2798457065945456853">"Жоўты на чорным"</item>
+ <item msgid="5799049811524553967">"Жоўты на сінім"</item>
+ <item msgid="3673930830658169860">"Карыстальніцкія"</item>
+ </string-array>
<string-array name="vpn_types_long">
<item msgid="6566768880689730097">"PPTP VPN"</item>
<item msgid="1349760781118368659">"L2TP/IPSec VPN з загадзя размеркаванымі ключамі"</item>
@@ -238,7 +406,10 @@
<item msgid="3319427315593649917">"IPSec VPN з сертыфікатамі і аўтэнтыфікацыяй Xauth"</item>
<item msgid="8258927774145391041">"IPSec VPN з сертыфікатамі і гібрыднай аўтэнтыфікацыяй"</item>
</string-array>
- <!-- no translation found for vpn_proxy_settings:0 (2958623927055120839) -->
+ <string-array name="vpn_proxy_settings">
+ <item msgid="2958623927055120839">"Няма"</item>
+ <item msgid="1157046369795346308">"Кіраўніцтва"</item>
+ </string-array>
<string-array name="vpn_states">
<item msgid="5408915841694583740">"Адключана"</item>
<item msgid="8754480102834556765">"Ініцыялізацыя..."</item>
@@ -252,9 +423,19 @@
<item msgid="7718817231348607934">"Нiколi не дазваляць"</item>
<item msgid="8184570120217958741">"Заўсёды дазваляць"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Звычайны"</item>
+ <item msgid="5101233285497327432">"Умераны"</item>
+ <item msgid="1555861583162930714">"Нізкая"</item>
+ <item msgid="1719683776264798117">"Крытычны"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Звычайны"</item>
+ <item msgid="6107138933849816768">"Умераны"</item>
+ <item msgid="182695359839047859">"Нізкая"</item>
+ <item msgid="8577246509202964244">"Крытычны"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Пастаянны"</item>
<item msgid="167418068739176448">"Папулярная дзейнасць"</item>
@@ -296,7 +477,7 @@
<item msgid="1008268820118852416">"Безлімітная"</item>
</string-array>
<string-array name="wifi_privacy_entries">
- <item msgid="6545683814310036454">"Выкарыстоўваць выпадковы MAC-адрас (стандартна)"</item>
+ <item msgid="6545683814310036454">"Выпадковы MAC-адрас (стандартна)"</item>
<item msgid="214234417308375326">"Выкарыстоўваць прыладу MAC"</item>
</string-array>
<string-array name="wifi_hidden_entries">
diff --git a/tests/CarDeveloperOptions/res/values-be/strings.xml b/tests/CarDeveloperOptions/res/values-be/strings.xml
index cec1ae7..8edf7d5 100644
--- a/tests/CarDeveloperOptions/res/values-be/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-be/strings.xml
@@ -55,7 +55,7 @@
<string name="radio_info_ims_reg_status_not_registered" msgid="1286050699734226077">"Не зарэгістраваны"</string>
<string name="radio_info_ims_feature_status_available" msgid="2040629393134756058">"Даступны"</string>
<string name="radio_info_ims_feature_status_unavailable" msgid="3348223769202693596">"Недаступны"</string>
- <string name="radio_info_ims_reg_status" msgid="4771711884059371514">"Рэгістрацыя IMS: <xliff:g id="STATUS">%1$s</xliff:g>\nГолас па LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nГолас па WiFi: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nВідэавыклік: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nІнтэрфейс UT: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
+ <string name="radio_info_ims_reg_status" msgid="4771711884059371514">"Рэгістрацыя IMS: <xliff:g id="STATUS">%1$s</xliff:g>\nГаласавая сувязь па LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nГаласавая сувязь па Wi-Fi: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nВідэавыклікі: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nІнтэрфейс UT: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
<string name="radioInfo_service_in" msgid="1297020186765943857">"Працуе"</string>
<string name="radioInfo_service_out" msgid="8460363463722476510">"Не працуе"</string>
<string name="radioInfo_service_emergency" msgid="7674989004735662599">"Толькі экстранныя выклікі"</string>
@@ -85,8 +85,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Павелічэнне або памяншэнне тэксту на экране."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Паменшыць"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Павялічыць"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Прыклад тэксту"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Чараўнік краіны Оз"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Раздзел 11. Цудоўны Смарагдавы Горад у краіне Оз"</string>
@@ -210,7 +209,7 @@
<string name="proxy_error_empty_port" msgid="8034561724923076215">"Трэба запоўніць поле порта."</string>
<string name="proxy_error_empty_host_set_port" msgid="8471455809508588255">"Поле парта павінна быць пустым, калі поле хоста пустое."</string>
<string name="proxy_error_invalid_port" msgid="4046559920586100637">"Вы ўвялі несапраўднае імя порта."</string>
- <string name="proxy_warning_limited_support" msgid="9026539134219095768">"Проксі HTTP выкарыстоўваецца браўзэрам, але ён не можа выкарыстоўвацца іншымі прыкладаннямi"</string>
+ <string name="proxy_warning_limited_support" msgid="9026539134219095768">"Проксі HTTP выкарыстоўваецца браўзерам, але не можа выкарыстоўвацца іншымі праграмамі."</string>
<string name="proxy_url_title" msgid="882042361706435904">"URL аўтаканфіг. проксі: "</string>
<string name="radio_info_dl_kbps" msgid="2903778264453410272">"Паласа прапускання спампоўкі (кбіт/с):"</string>
<string name="radio_info_ul_kbps" msgid="3802245899811732716">"Паласа прапускання запампоўкі (кбіт/с):"</string>
@@ -353,16 +352,16 @@
<string name="time_picker_title" msgid="1596400307061268660">"Час"</string>
<string name="lock_after_timeout" msgid="7755520959071097304">"Аўтаматычная блакіроўка"</string>
<string name="lock_after_timeout_summary" msgid="3160517585613694740">"<xliff:g id="TIMEOUT_STRING">%1$s</xliff:g> пасля сну"</string>
- <string name="lock_immediately_summary_with_exception" msgid="6442552135409347556">"Адразу ж пасля сну, за выключэннем выпадкаў, калі экран разблакіруецца функцыяй <xliff:g id="TRUST_AGENT_NAME">%1$s</xliff:g>"</string>
- <string name="lock_after_timeout_summary_with_exception" msgid="7218267834086717545">"<xliff:g id="TIMEOUT_STRING">%1$s</xliff:g> пасля сну, за выключэннем выпадкаў, калі экран разблакіруецца функцыяй <xliff:g id="TRUST_AGENT_NAME">%2$s</xliff:g>"</string>
+ <string name="lock_immediately_summary_with_exception" msgid="6442552135409347556">"Адразу пасля сну акрамя выпадкаў, калі экран застаецца разблакіраваным функцыяй <xliff:g id="TRUST_AGENT_NAME">%1$s</xliff:g>"</string>
+ <string name="lock_after_timeout_summary_with_exception" msgid="7218267834086717545">"<xliff:g id="TIMEOUT_STRING">%1$s</xliff:g> пасля сну акрамя выпадкаў, калі экран застаецца разблакіраваным функцыяй <xliff:g id="TRUST_AGENT_NAME">%2$s</xliff:g>"</string>
<string name="show_owner_info_on_lockscreen_label" msgid="4510756693837171575">"Паказаць інфармацыю аб уладальніку на экране блакавання"</string>
<string name="owner_info_settings_title" msgid="2537966178998339896">"Тэкст на экране блакіроўкі"</string>
<string name="security_enable_widgets_title" msgid="1701510007926738088">"Уключыць віджэты"</string>
<string name="security_enable_widgets_disabled_summary" msgid="4408176087132339331">"Адключана адміністратарам"</string>
- <string name="lockdown_settings_title" msgid="4534779922580115990">"Паказаць параметр блакіроўкі"</string>
+ <string name="lockdown_settings_title" msgid="4534779922580115990">"Паказваць кнопку блакіроўкі"</string>
<string name="lockdown_settings_summary" msgid="7270756909878256174">"Дадаць у меню кнопкі сілкавання функцыю, якая выключае разумную блакіроўку, разблакіроўку адбіткам пальца і апавяшчэнні на экране блакіроўкі"</string>
- <string name="trust_agents_extend_unlock_title" msgid="3582017561316089951">"Давераныя агенты падаўжаюць разблакіроўку"</string>
- <string name="trust_agents_extend_unlock_summary" msgid="3543997596586078084">"Калі функцыя ўключана, давераныя агенты будуць даўжэй трымаць прыладу разблакіраванай, аднак не змогуць разблакіраваць ужо заблакіраваную прыладу."</string>
+ <string name="trust_agents_extend_unlock_title" msgid="3582017561316089951">"Даверчыя агенты падаўжаюць разблакіроўку"</string>
+ <string name="trust_agents_extend_unlock_summary" msgid="3543997596586078084">"Калі функцыя ўключана, даверчыя агенты будуць даўжэй трымаць прыладу разблакіраванай, аднак не змогуць разблакіраваць ужо заблакіраваную прыладу."</string>
<string name="trust_lost_locks_screen_title" msgid="3094736590690459372">"Блакіраваць экран, калі давер страчаны"</string>
<string name="trust_lost_locks_screen_summary" msgid="2058567484625606803">"Пры ўключанай функцыі прылада будзе заблакіравана, калі страціць давер апошні агент"</string>
<string name="owner_info_settings_summary" msgid="4208702251226725583">"Няма"</string>
@@ -373,7 +372,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Звесткi профiлю"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Уліковыя запісы"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Месцазнаходжанне"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Выкарыстаць месцазнаходжанне"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Выкарыстоўваць месцазнаходжанне"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Выкл."</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">Укл. – <xliff:g id="COUNT_1">%1$d</xliff:g> праграма мае доступ да вызначэння месцазнаходжання</item>
@@ -468,14 +467,14 @@
<string name="go_back_button_label" msgid="7310586887969860472">"Назад"</string>
<string name="skip_lock_screen_dialog_button_label" msgid="6706047245716780006">"Прапусціць"</string>
<string name="cancel_lock_screen_dialog_button_label" msgid="2534925227627658819">"Скасаваць"</string>
- <string name="security_settings_fingerprint_enroll_find_sensor_title" msgid="8909829699273726469">"Дакраніцеся да сэнсара"</string>
+ <string name="security_settings_fingerprint_enroll_find_sensor_title" msgid="8909829699273726469">"Дакраніцеся да сканера"</string>
<string name="security_settings_fingerprint_enroll_find_sensor_message" msgid="581120963079780740">"Ён на задняй панэлі тэлефона. Карыстайцеся ўказальным пальцам."</string>
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="7835824123269738540">"Малюнак, які паказвае, дзе размяшчаецца датчык адбіткаў пальцаў на прыладзе"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="3519748398694308901">"Імя"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="3428927518029038956">"ОК"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="4312297515772004580">"Выдаліць"</string>
- <string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"Дакраніцеся да сэнсара"</string>
- <string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Прыкладзіце палец да сэнсара і ўтрымлівайце яго, пакуль не адчуеце вібрацыю"</string>
+ <string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"Дакраніцеся да сканера"</string>
+ <string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Прыкладзіце палец да сканера і ўтрымлівайце яго, пакуль не адчуеце вібрацыю"</string>
<string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"Падыміце і дакраніцеся зноў"</string>
<string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Дакраніцеся некалькі разоў, каб адбітак быў больш дакладны"</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"Адбітак пальца дададзены"</string>
@@ -646,13 +645,13 @@
<string name="unlock_footer_none_complexity_requested" msgid="1669550050597044896">"<xliff:g id="APP_NAME">%1$s</xliff:g> рэкамендуе ўсталяваць новую блакіроўку экрана"</string>
<string name="lock_failed_attempts_before_wipe" msgid="7565412834122130877">"Паўтарыце спробу. Спроба <xliff:g id="CURRENT_ATTEMPTS">%1$d</xliff:g> з дапушчальных <xliff:g id="TOTAL_ATTEMPTS">%2$d</xliff:g>."</string>
<string name="lock_last_attempt_before_wipe_warning_title" msgid="7853820095898368793">"Вашы даныя будуць выдалены"</string>
- <string name="lock_last_pattern_attempt_before_wipe_device" msgid="1021644947949306054">"Калі вы ўведзяце няправільны графічны ключ яшчэ раз, даныя з гэтай прылады будуць выдалены"</string>
+ <string name="lock_last_pattern_attempt_before_wipe_device" msgid="1021644947949306054">"Калі вы ўведзяце няправільны ўзор разблакіроўкі яшчэ раз, даныя з гэтай прылады будуць выдалены"</string>
<string name="lock_last_pin_attempt_before_wipe_device" msgid="3823600293847594141">"Калі вы ўведзяце няправільны PIN-код яшчэ раз, даныя з гэтай прылады будуць выдалены"</string>
<string name="lock_last_password_attempt_before_wipe_device" msgid="3548966006264835462">"Калі вы ўведзяце няправільны пароль яшчэ раз, даныя з гэтай прылады будуць выдалены"</string>
- <string name="lock_last_pattern_attempt_before_wipe_user" msgid="5194192938934564218">"Калі вы яшчэ раз уведзяце няправільны графічны ключ, гэты карыстальнік будзе выдалены"</string>
+ <string name="lock_last_pattern_attempt_before_wipe_user" msgid="5194192938934564218">"Калі вы яшчэ раз уведзяце няправільны ўзор разблакіроўкі, гэты карыстальнік будзе выдалены"</string>
<string name="lock_last_pin_attempt_before_wipe_user" msgid="7833852187363499906">"Калі вы яшчэ раз уведзяце няправільны PIN-код, гэты карыстальнік будзе выдалены"</string>
<string name="lock_last_password_attempt_before_wipe_user" msgid="8979742220140001204">"Калі вы яшчэ раз уведзяце няправільны пароль, гэты карыстальнік будзе выдалены"</string>
- <string name="lock_last_pattern_attempt_before_wipe_profile" msgid="3877613047631174576">"Калі вы яшчэ раз уведзяце няправільны графічны ключ, ваш рабочы профіль і звязаныя з ім даныя будуць выдалены"</string>
+ <string name="lock_last_pattern_attempt_before_wipe_profile" msgid="3877613047631174576">"Калі вы яшчэ раз уведзяце няправільны ўзор разблакіроўкі, ваш рабочы профіль і звязаныя з ім даныя будуць выдалены"</string>
<string name="lock_last_pin_attempt_before_wipe_profile" msgid="8132438288175428168">"Калі вы яшчэ раз уведзяце няправільны PIN-код, ваш рабочы профіль і звязаныя з ім даныя будуць выдалены"</string>
<string name="lock_last_password_attempt_before_wipe_profile" msgid="1535128774464384305">"Калі вы яшчэ раз уведзяце няправільны пароль, ваш рабочы профіль і звязаныя з ім даныя будуць выдалены"</string>
<string name="lock_failed_attempts_now_wiping_device" msgid="8662360098784762828">"Занадта шмат няўдалых спроб. Даныя з гэтай прылады будуць выдалены."</string>
@@ -750,14 +749,14 @@
<item quantity="many"><xliff:g id="COUNT_1">%d</xliff:g> актыўных праграм</item>
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> актыўнай праграмы</item>
</plurals>
- <string name="manage_trust_agents" msgid="8129970926213142261">"Давераныя агенты"</string>
+ <string name="manage_trust_agents" msgid="8129970926213142261">"Даверчыя агенты"</string>
<string name="disabled_because_no_backup_security" msgid="8127039979909203528">"Перад выкарыстаннем задайце блакіроўку экрана"</string>
<string name="manage_trust_agents_summary" msgid="2023116850759962248">"Няма"</string>
<plurals name="manage_trust_agents_summary_on" formatted="false" msgid="5550538038916606097">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> актыўны давераны агент</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> актыўныя давераныя агенты</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> актыўных давераных агентаў</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> актыўнага даверанага агента</item>
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> актыўны даверчы агент</item>
+ <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> актыўныя даверчыя агенты</item>
+ <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> актыўных даверчых агентаў</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> актыўнага даверчага агента</item>
</plurals>
<string name="bluetooth_quick_toggle_title" msgid="7410319268406112792">"Bluetooth"</string>
<string name="bluetooth_quick_toggle_summary" msgid="3951769568065428093">"Уключыць Bluetooth"</string>
@@ -795,7 +794,7 @@
<string name="bluetooth_device_context_connect" msgid="1812090541371432890">"Падключыцца"</string>
<string name="bluetooth_device_context_disconnect" msgid="8085015949275771802">"Адключыць"</string>
<string name="bluetooth_device_context_pair_connect" msgid="1503322591778810032">"Спарыць і падключыць"</string>
- <string name="bluetooth_device_context_unpair" msgid="250588431708253041">"Разарваць пару"</string>
+ <string name="bluetooth_device_context_unpair" msgid="250588431708253041">"Разлучыць"</string>
<string name="bluetooth_device_context_disconnect_unpair" msgid="4519151805677280077">"Адключыць і разарваць пару"</string>
<string name="bluetooth_device_context_connect_advanced" msgid="423463405499392444">"Параметры..."</string>
<string name="bluetooth_menu_advanced" msgid="7566858513372603652">"Пашыраныя налады"</string>
@@ -871,7 +870,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Уключыць Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Выкарыстоўваць Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Выкарыстоўваць Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Налады Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Усталяванне бесправадных кропак доступу і кіраванне iмi"</string>
@@ -881,10 +880,10 @@
<string name="wifi_error" msgid="5605801874484465557">"Памылка"</string>
<string name="wifi_sap_no_channel_error" msgid="6881796988574851628">"Дыяпазон 5 ГГц недаступны ў гэтай краіне"</string>
<string name="wifi_in_airplane_mode" msgid="4729571191578262246">"У рэжыме палёту"</string>
- <string name="wifi_notify_open_networks" msgid="4782239203624619655">"Апавяшчэнне пра адкрытыя сеткі"</string>
+ <string name="wifi_notify_open_networks" msgid="4782239203624619655">"Апавяшчаць пра адкрытыя сеткі"</string>
<string name="wifi_notify_open_networks_summary" msgid="1383681260705466715">"Апавяшчаць, калі даступная высакаякасная сетка агульнага доступу"</string>
<string name="wifi_wakeup" msgid="4963732992164721548">"Уключаць Wi‑Fi аўтаматычна"</string>
- <string name="wifi_wakeup_summary" msgid="1152699417411690">"Wi‑Fi будзе ўключацца аўтаматычна побач з захаванымі высакаякаснымі сеткамі, напрыклад вашай дамашняй сеткай"</string>
+ <string name="wifi_wakeup_summary" msgid="1152699417411690">"Wi‑Fi будзе ўключацца аўтаматычна побач з захаванымі высакаякаснымі сеткамі, напрыклад у вашай дамашняй сетцы"</string>
<string name="wifi_wakeup_summary_no_location" msgid="3007457288587966962">"Недаступна, таму што выключана вызначэнне месцазнаходжання. Уключыце "<annotation id="link">"Вызначаць месцазнаходжанне"</annotation>"."</string>
<string name="wifi_wakeup_summary_scanning_disabled" msgid="6820040651529910914">"Недаступна, бо выключаны пошук сетак Wi-Fi"</string>
<string name="wifi_wakeup_summary_scoring_disabled" msgid="7067018832237903151">"Для выкарыстання функцыі выберыце пастаўшчыка паслугі ацэнкі сеткі"</string>
@@ -940,7 +939,7 @@
<string name="wifi_ssid_hint" msgid="5010024648106585165">"Увядзіце SSID"</string>
<string name="wifi_security" msgid="9136702039496152831">"Бяспека"</string>
<string name="wifi_hidden_network" msgid="6647772204699776833">"Схаваная сетка"</string>
- <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Калі маршрутызатар не перадае ідэнтыфікатар сеткі, але дапускаецца падключэнне да яе ў будучыні, сетку можна \"схаваць\".\n\nГэта пагражае бяспецы, таму што тэлефон будзе рэгулярна перадаваць сігнал для пошуку сеткі.\n\n\"Схаваная\" сетка не зменіць налады маршрутызатара."</string>
+ <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Калі маршрутызатар не перадае ідэнтыфікатар сеткі, але дапускаецца падключэнне да яе ў будучыні, сетку можна схаваць.\n\nГэта пагражае бяспецы, таму што тэлефон будзе рэгулярна перадаваць сігнал для пошуку сеткі.\n\nСхаваная сетка не зменіць налады маршрутызатара."</string>
<string name="wifi_signal" msgid="696548364467704808">"Магутнасць сігналу"</string>
<string name="wifi_status" msgid="3439931558930689940">"Стан"</string>
<string name="tx_wifi_speed" msgid="2571810085003261073">"Хуткасць перадачы даных"</string>
@@ -1139,7 +1138,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Мабільны інтэрнэт"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Калі Wi‑Fi недаступны, выкарыстоўвайце мабільную сетку"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Калі мабільная сетка недаступная, выкарыстоўвайце Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Выклікайце праз Wi‑Fi. Калі сігналу Wi‑Fi няма, выклік завяршаецца."</string>
@@ -1163,8 +1165,7 @@
<string name="incoming_call_volume_title" msgid="4736570528754310450">"Рынгтон"</string>
<string name="notification_volume_title" msgid="6022562909288085275">"Апавяшчэнне"</string>
<string name="checkbox_notification_same_as_incoming_call" msgid="7312942422655861175">"Выкарыстоўваць гучнасць уваходных выклікаў для паведамленняў"</string>
- <!-- no translation found for home_work_profile_not_supported (6137073723297076818) -->
- <skip />
+ <string name="home_work_profile_not_supported" msgid="6137073723297076818">"Працоўныя профілі не падтрымліваюцца"</string>
<string name="notification_sound_dialog_title" msgid="6653341809710423276">"Гук паведамлення па змаўчаннi"</string>
<string name="media_volume_title" msgid="1030438549497800914">"Мультымедыя"</string>
<string name="media_volume_summary" msgid="3142433516297061652">"Вызначыць гучнасць для музыкі і відэа"</string>
@@ -1245,8 +1246,8 @@
<string name="adaptive_sleep_summary_off" msgid="2891586225954973431">"Выключана"</string>
<string name="adaptive_sleep_description" msgid="812673735459170009">"Не дазваляе экрану выключацца, калі на яго глядзяць"</string>
<string name="adaptive_sleep_privacy" msgid="5706802215479902623">"Адаптыўны рэжым з дапамогай пярэдняй камеры вызначае, калі хто-небудзь глядзіць на экран. Функцыя працуе толькі на прыладзе: відарысы не захоўваюцца і не адпраўляюцца ў Google."</string>
- <string name="night_display_title" msgid="1305002424893349814">"Начны рэжым"</string>
- <string name="night_display_text" msgid="5330502493684652527">"У начным рэжыме экран будзе мець бурштынавае адценне. Так вам будзе зручней глядзець на экран пры цьмяным асвятленні, а таксама лягчэй заснуць."</string>
+ <string name="night_display_title" msgid="1305002424893349814">"Начная падсветка"</string>
+ <string name="night_display_text" msgid="5330502493684652527">"У рэжыме Начной падсветкі экран будзе мець бурштынавае адценне. Так вам будзе зручней глядзець на экран пры цьмяным асвятленні, а таксама лягчэй заснуць."</string>
<string name="night_display_auto_mode_title" msgid="8493573087102481588">"Расклад"</string>
<string name="night_display_auto_mode_never" msgid="2897444637217807088">"Ніколі"</string>
<string name="night_display_auto_mode_custom" msgid="1400891076453963151">"Уключаецца ў вызначаны час"</string>
@@ -1269,7 +1270,7 @@
<string name="night_display_activation_off_twilight" msgid="6846727701281556110">"Выключыць да вечара"</string>
<string name="night_display_activation_on_custom" msgid="4761140206778957611">"Уключыць да <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="night_display_activation_off_custom" msgid="4207238846687792731">"Выключыць да <xliff:g id="ID_1">%1$s</xliff:g>"</string>
- <string name="night_display_not_currently_on" msgid="1436588493764429281">"Начны рэжым не ўключаны"</string>
+ <string name="night_display_not_currently_on" msgid="1436588493764429281">"Начная падсветка не ўключана"</string>
<string name="screen_timeout" msgid="1700950247634525588">"Рэжым сну"</string>
<string name="screen_timeout_title" msgid="150117777762864112">"Экран выключаецца"</string>
<string name="screen_timeout_summary" msgid="8644192861778491060">"Пасля бяздзейнасці: <xliff:g id="TIMEOUT_DESCRIPTION">%1$s</xliff:g>"</string>
@@ -1410,7 +1411,7 @@
<string name="memory_media_usage" msgid="2744652206722240527">"Медыя"</string>
<string name="memory_downloads_usage" msgid="7039979723012065168">"Спампаваць"</string>
<string name="memory_dcim_usage" msgid="599009211606524732">"Выявы, відэа"</string>
- <string name="memory_music_usage" msgid="809605300042546279">"Аўдыё (музыка, рынгтоны, падкасты і г. д.)"</string>
+ <string name="memory_music_usage" msgid="809605300042546279">"Аўдыя (музыка, рынгтоны, падкасты і г. д.)"</string>
<string name="memory_media_misc_usage" msgid="6258827529046910705">"Іншыя файлы"</string>
<string name="memory_media_cache_usage" msgid="1307620682751377717">"Кэшаваныя дадзеныя"</string>
<string name="sd_eject" product="nosdcard" msgid="3016608823130472449">"Адключыць сумеснае сховішча"</string>
@@ -1565,7 +1566,7 @@
<string name="battery_level_title" msgid="5207775387973771646">"Узровень батарэі"</string>
<string name="apn_settings" msgid="8130776653826271664">"APN"</string>
<string name="apn_edit" msgid="4350571070853305357">"Змянiць кропку доступу"</string>
- <string name="apn_not_set" msgid="5344235604466825691">"Не задана"</string>
+ <string name="apn_not_set" msgid="5344235604466825691">"Не зададзена"</string>
<string name="apn_name" msgid="8431432886706852226">"Назва"</string>
<string name="apn_apn" msgid="190519449579357696">"APN"</string>
<string name="apn_http_proxy" msgid="8816906767987944465">"Проксі"</string>
@@ -1604,7 +1605,7 @@
<string name="error_adding_apn_type" msgid="671634520340569678">"Аператар не дазваляе дадаваць APN тыпу %s."</string>
<string name="restore_default_apn" msgid="7195266404077471007">"Аднаўленне параметраў APN па змаўчанні"</string>
<string name="menu_restore" msgid="3799288817317293115">"Скінуць налады"</string>
- <string name="restore_default_apn_completed" msgid="5671734152740058937">"Скід налад кропкі доступу па змаўчанні завершаны."</string>
+ <string name="restore_default_apn_completed" msgid="5671734152740058937">"Стандартныя налады адноўлены."</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"Параметры скіду"</string>
<string name="reset_dashboard_summary" msgid="8778383341461126642">"Налады сеткі, праграмы або прылады могуць быць скінуты"</string>
<string name="reset_network_title" msgid="8944059136930806211">"Скінуць налады Wi-Fi, мабільнай перадачы даных і Bluetooth"</string>
@@ -1695,7 +1696,7 @@
</plurals>
<string name="location_category_recent_location_access" msgid="286059523360285026">"Доступ да апошняга вызначэння месцазнаходжання"</string>
<string name="location_recent_location_access_view_details" msgid="2051602261436245905">"Паказаць падрабязныя звесткі"</string>
- <string name="location_no_recent_apps" msgid="77502059586413278">"У апошні час запытаў ад дадаткаў на вызначэнне месцазнаходжання не паступала"</string>
+ <string name="location_no_recent_apps" msgid="77502059586413278">"У апошні час праграмы не запытвалі інфармацыю пра месцазнаходжанне"</string>
<string name="location_no_recent_accesses" msgid="6289916310397279890">"У апошні час ніводная праграма не атрымлівала доступу да звестак пра месцазнаходжанне"</string>
<string name="location_high_battery_use" msgid="7177199869979522663">"Выс. узровень выкарыст. акум."</string>
<string name="location_low_battery_use" msgid="5030448574501435888">"Нізкі ўзровень выкарыст. акум."</string>
@@ -1728,13 +1729,13 @@
<string name="contributors_title" msgid="6800028420806884340">"Удзельнікі"</string>
<string name="manual" msgid="5431859421432581357">"Кіраўніцтва"</string>
<string name="regulatory_labels" msgid="380968489247381025">"Ярлыкі сертыфікацыі"</string>
- <string name="safety_and_regulatory_info" msgid="7113766428000920132">"Кіраўніцтва па эксплуатацыі і бяспецы"</string>
+ <string name="safety_and_regulatory_info" msgid="7113766428000920132">"Інфармацыя па эксплуатацыі і бяспецы"</string>
<string name="copyright_title" msgid="3847703367689932190">"Аўтарскія правы"</string>
<string name="license_title" msgid="7582145947873528540">"Ліцэнзія"</string>
<string name="terms_title" msgid="1804549588198223771">"Правілы і ўмовы"</string>
<string name="webview_license_title" msgid="8244960025549725051">"Сістэмная ліцэнзія WebView"</string>
<string name="wallpaper_attributions" msgid="2941987966332943253">"Шпалеры"</string>
- <string name="wallpaper_attributions_values" msgid="4461979853894606323">"Пастаўшчыкі спадарожнікавых выяў:\n©2014 CNES / Astrium, DigitalGlobe, Bluesky"</string>
+ <string name="wallpaper_attributions_values" msgid="4461979853894606323">"Спадарожнікавыя фота:\n©2014 CNES / Astrium, DigitalGlobe, Bluesky"</string>
<string name="settings_manual_activity_title" msgid="7599911755054286789">"Кіраўніцтва"</string>
<string name="settings_manual_activity_unavailable" msgid="4872502775018655343">"Не атрымлiваецца загрузіць кіраўніцтва."</string>
<string name="settings_license_activity_title" msgid="1099045216283677608">"Ліцэнзіі трэціх бакоў"</string>
@@ -1803,11 +1804,11 @@
<string name="lockpattern_settings_title" msgid="5152005866870766842">"Камбінацыя разблакоўкі"</string>
<string name="lockpattern_settings_enable_title" msgid="8508410891939268080">"Патрабаваць камбінацыю разблакавання"</string>
<string name="lockpattern_settings_enable_summary" msgid="8027605503917737512">"Патрабаваць камбінацыю разблакоўкі, каб разблакаваць экран"</string>
- <string name="lockpattern_settings_enable_visible_pattern_title" msgid="4935583222709647096">"Зрабіць шаблон бачным"</string>
+ <string name="lockpattern_settings_enable_visible_pattern_title" msgid="4935583222709647096">"Зрабіць узор бачным"</string>
<string name="lockpattern_settings_enable_visible_pattern_title_profile" msgid="5338893138982642228">"Зрабіць узор разблакіроўкі профілю бачным"</string>
<string name="lockpattern_settings_enable_tactile_feedback_title" msgid="3203621862806531947">"Вібрацыя пры дотыку"</string>
<string name="lockpattern_settings_enable_power_button_instantly_locks" msgid="5890335732200257777">"Блакір. кнопкай сілкавання"</string>
- <string name="lockpattern_settings_power_button_instantly_locks_summary" msgid="1279989004145567840">"За выключэннем выпадкаў, калі экран разблакіруецца функцыяй <xliff:g id="TRUST_AGENT_NAME">%1$s</xliff:g>"</string>
+ <string name="lockpattern_settings_power_button_instantly_locks_summary" msgid="1279989004145567840">"Акрамя выпадкаў, калі экран застаецца разблакіраваным функцыяй <xliff:g id="TRUST_AGENT_NAME">%1$s</xliff:g>"</string>
<string name="lockpattern_settings_choose_lock_pattern" msgid="9042142745571386381">"Усталяваць камбінацыю разблакоўкі"</string>
<string name="lockpattern_settings_change_lock_pattern" msgid="1456643060737114885">"Змяніць камбінацыю разблакоўкі"</string>
<string name="lockpattern_settings_help_how_to_record" msgid="6037403647312543908">"Як зрабіць камбінацыю разблакоўкі"</string>
@@ -1839,7 +1840,7 @@
<string name="advanced_settings_summary" msgid="5912237062506771716">"Уключыць дадатковыя параметры налад"</string>
<string name="application_info_label" msgid="3886253474964599105">"Звесткі пра праграмы"</string>
<string name="storage_label" msgid="1109537840103290384">"Сховішча"</string>
- <string name="auto_launch_label" msgid="47089737922907379">"Стандартна адкрываць"</string>
+ <string name="auto_launch_label" msgid="47089737922907379">"Адкрываць стандартна"</string>
<string name="auto_launch_label_generic" msgid="7865828543459493308">"Па змаўчанні"</string>
<string name="screen_compatibility_label" msgid="3638271673726075815">"Сумяшчальнасць экрана"</string>
<string name="permissions_label" msgid="7341733648403464213">"Дазволы"</string>
@@ -1870,7 +1871,7 @@
<string name="app_factory_reset" msgid="8718986000278776272">"Выдаліць абнаўленні"</string>
<string name="auto_launch_enable_text" msgid="3372898942144027341">"Вы выбралi запуск гэтага дадатку па змаўчаннi для некаторых дзеянняў."</string>
<string name="always_allow_bind_appwidgets_text" msgid="2286211654774611037">"Вы дазволілі гэтаму дадатку ствараць віджэты і атрымліваць доступ да іх даных."</string>
- <string name="auto_launch_disable_text" msgid="8560921288036801416">"Параметры па змаўчанні не ўсталяваныя"</string>
+ <string name="auto_launch_disable_text" msgid="8560921288036801416">"Стандартныя налады не зададзены"</string>
<string name="clear_activities" msgid="2068014972549235347">"Скінуць налады па змаўчанні"</string>
<string name="screen_compatibility_text" msgid="1768064020294301496">"Магчыма, гэта прыкладанне не разлічана для вашага экрана. Наладзьце яго."</string>
<string name="ask_compatibility" msgid="6687958195768084807">"Запытваць падчас запуску"</string>
@@ -2136,9 +2137,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Вібрацыя пры апавяшчэнні"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Вібрацыя пры выкліку"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Вібрацыя пры націсканні"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Карыстанне сэрвісам"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Карыстанне карэкцыяй колераў"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Карыстанне цітрамі"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Выкарыстоўваць сэрвіс"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Выкарыстоўваць карэкцыю колераў"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Выкарыстоўваць субцітры"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Далей"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Слыхавы апарат"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Няма падключаных слыхавых апаратаў"</string>
@@ -2248,10 +2249,10 @@
<string name="print_settings" msgid="7886184656544483072">"Друк"</string>
<string name="print_settings_summary_no_service" msgid="634173687975841526">"Выключана"</string>
<plurals name="print_settings_summary" formatted="false" msgid="7580293760281445137">
- <item quantity="one">Уключана <xliff:g id="COUNT">%1$d</xliff:g> служба друку</item>
- <item quantity="few">Уключаны <xliff:g id="COUNT">%1$d</xliff:g> службы друку</item>
- <item quantity="many">Уключаны <xliff:g id="COUNT">%1$d</xliff:g> служб друку</item>
- <item quantity="other">Уключаны <xliff:g id="COUNT">%1$d</xliff:g> службы друку</item>
+ <item quantity="one">Уключаны <xliff:g id="COUNT">%1$d</xliff:g> сэрвіс друку</item>
+ <item quantity="few">Уключаны <xliff:g id="COUNT">%1$d</xliff:g> сэрвісы друку</item>
+ <item quantity="many">Уключаны <xliff:g id="COUNT">%1$d</xliff:g> сэрвісаў друку</item>
+ <item quantity="other">Уключаны <xliff:g id="COUNT">%1$d</xliff:g> сэрвісу друку</item>
</plurals>
<plurals name="print_jobs_summary" formatted="false" msgid="6180308415569432845">
<item quantity="one"><xliff:g id="COUNT">%1$d</xliff:g> заданне друку</item>
@@ -2259,14 +2260,14 @@
<item quantity="many"><xliff:g id="COUNT">%1$d</xliff:g> заданняў друку</item>
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> задання друку</item>
</plurals>
- <string name="print_settings_title" msgid="2886445296786932763">"Службы друку"</string>
+ <string name="print_settings_title" msgid="2886445296786932763">"Сэрвісы друку"</string>
<string name="print_no_services_installed" msgid="3387777739528003794">"Няма ўсталяваных службаў"</string>
<string name="print_no_printers_found" msgid="5090925427392294881">"Прынтараў не знойдзена"</string>
<string name="print_menu_item_settings" msgid="2654804159012579508">"Налады"</string>
<string name="print_menu_item_add_printers" msgid="8198201275621756510">"Дадаць прынтары"</string>
<string name="print_feature_state_on" msgid="1838010230650403367">"Уключана"</string>
<string name="print_feature_state_off" msgid="208580346723223688">"Выключана"</string>
- <string name="print_menu_item_add_service" msgid="6803000110578493782">"Дадаць службу"</string>
+ <string name="print_menu_item_add_service" msgid="6803000110578493782">"Дадаць сэрвіс"</string>
<string name="print_menu_item_add_printer" msgid="8529196211179574921">"Дадаць прынтар"</string>
<string name="print_menu_item_search" msgid="1165316329772287360">"Пошук"</string>
<string name="print_searching_for_printers" msgid="6538687129687642542">"Пошук прынтараў"</string>
@@ -2500,7 +2501,7 @@
<string name="battery_detail_since_full_charge" msgid="3814176986148084378">"Разбіўка з моманту апошняй поўнай зарадкі"</string>
<string name="battery_last_full_charge" msgid="5624033030647170717">"Апошняя поўная зарадка"</string>
<string name="battery_full_charge_last" msgid="4614554109170251301">"Прыблізны час працы пры поўным зарадзе акумулятара"</string>
- <string name="battery_footer_summary" msgid="4828444679643906943">"Даныя аб выкарыстанні батарэі з\'яўляюцца прыблізнымі і могуць змяняцца ў залежнасці ад выкарыстання"</string>
+ <string name="battery_footer_summary" msgid="4828444679643906943">"Даныя аб выкарыстанні акумулятара з\'яўляюцца прыблізнымі і могуць змяняцца ў залежнасці ад канкрэтных умоў"</string>
<string name="battery_detail_foreground" msgid="6616408559186553085">"У актыўным рэжыме"</string>
<string name="battery_detail_background" msgid="7938146832943604280">"У фонавым рэжыме"</string>
<string name="battery_detail_power_usage" msgid="3606930232257489212">"Выкарыстанне зараду"</string>
@@ -2532,7 +2533,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Уключыць"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Карыстанне функцыяй эканоміі зараду"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Выкарыстоўваць Эканомію зараду"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Уключаць аўтаматычна"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Ніколі"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"пры ўзроўні зараду акумулятара <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
@@ -2997,7 +2998,7 @@
<string name="nfc_payment_how_it_works" msgid="7607901964687787177">"Як гэта працуе"</string>
<string name="nfc_payment_no_apps" msgid="8844440783395420860">"Плаціце ў крамах з дапамогай свайго тэлефона"</string>
<string name="nfc_payment_default" msgid="7869273092463612271">"Стандартны спосаб аплаты"</string>
- <string name="nfc_payment_default_not_set" msgid="955804193510335338">"Не задана"</string>
+ <string name="nfc_payment_default_not_set" msgid="955804193510335338">"Не зададзена"</string>
<string name="nfc_payment_app_and_desc" msgid="102312684211458190">"<xliff:g id="APP">%1$s</xliff:g> – <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
<string name="nfc_payment_use_default" msgid="3098724195746409476">"Выкарыстоўваць стандартную праграму"</string>
<string name="nfc_payment_favor_default" msgid="7555356982142464260">"Заўсёды"</string>
@@ -3230,7 +3231,7 @@
<string name="other_sound_settings" msgid="5250376066099818676">"Іншыя гукі"</string>
<string name="dial_pad_tones_title" msgid="8877212139988655769">"Гукі панэлі набору"</string>
<string name="screen_locking_sounds_title" msgid="4407110895465866809">"Гукі блакіроўкі экрана"</string>
- <string name="charging_sounds_title" msgid="5070437987230894287">"Сігнал зарадкі і вібрацыя"</string>
+ <string name="charging_sounds_title" msgid="5070437987230894287">"Гукі і вібрацыя пры зарадцы"</string>
<string name="docking_sounds_title" msgid="2573137471605541366">"Гукі док-станцыі"</string>
<string name="touch_sounds_title" msgid="165237488496165652">"Гукі пры дотыку"</string>
<string name="vibrate_on_touch_title" msgid="6360155469279157684">"Вібрацыя пры націсканні"</string>
@@ -3393,10 +3394,10 @@
<string name="hide_silent_icons_title" msgid="1070905516921542662">"Хаваць значкі стану для апавяшчэнняў без гуку"</string>
<string name="hide_silent_icons_summary" msgid="2624346914488256888">"Хаваць значкі для апавяшчэнняў без гуку на панэлі стану"</string>
<string name="notification_badging_title" msgid="6311699476970264712">"Паказваць значкі апавяшчэнняў"</string>
- <string name="notification_bubbles_title" msgid="9196562435741861317">"Дыялогі"</string>
+ <string name="notification_bubbles_title" msgid="9196562435741861317">"Усплывальныя апавяшчэнні"</string>
<string name="notification_bubbles_summary" msgid="4624512775901949578">"Адусюль атрымлівайце хуткі доступ да змесціва праграмы з дапамогай зменлівых спалучэнняў клавіш"</string>
<string name="bubbles_feature_education" msgid="8979109826818881018">"Некаторыя апавяшчэнні і іншае змесціва могуць паказвацца на экране ў выглядзе дыялогаў. Каб адкрыць дыялог, націсніце на яго. Каб закрыць дыялог, перацягніце яго ўніз экрана."</string>
- <string name="bubbles_app_toggle_title" msgid="6401217027603326439">"Дыялогі"</string>
+ <string name="bubbles_app_toggle_title" msgid="6401217027603326439">"Усплывальныя апавяшчэнні"</string>
<string name="bubbles_app_toggle_summary" msgid="7707611139796553855">"Дазваляе праграме \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" паказваць некаторыя апавяшчэнні ў выглядзе дыялогаў"</string>
<string name="bubbles_feature_disabled_dialog_title" msgid="3375452386012079293">"Уключыце дыялогі"</string>
<string name="bubbles_feature_disabled_dialog_text" msgid="326945485806386477">"Каб уключыць дыялогі для гэтай праграмы, уключыце дыялогі для прылады. Гэта паўплывае на іншыя праграмы, у якіх вы раней уключалі дыялогі."</string>
@@ -3408,7 +3409,7 @@
<string name="notification_pulse_title" msgid="4861418327614907116">"Мігценне святла"</string>
<string name="lock_screen_notifications_title" msgid="6889072265118747835">"На экране блакіроўкі"</string>
<string name="locked_work_profile_notification_title" msgid="8307025804986190658">"Працоўны профіль заблакіраваны"</string>
- <string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"Паказваць усё змесціва ў апавяшчэннях"</string>
+ <string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"Паказваць усе апавяшчэнні"</string>
<string name="lock_screen_notifications_summary_hide" msgid="3668806866535260143">"Схаваць канфідэнцыяльныя даныя"</string>
<string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"Ніколі не паказваць апавяшчэнні"</string>
<string name="lock_screen_notifications_interstitial_message" msgid="4230189215124387818">"Як павінны паказвацца апавяшчэнні, калі прылада заблакіравана?"</string>
@@ -3691,7 +3692,7 @@
<string name="imei_information_title" msgid="7666097743700170757">"Інфармацыя IMEI"</string>
<string name="imei_information_summary" msgid="716516316022275083">"Інфармацыя, звязаная з IMEI (міжнародным ідэнтыфікатарам мабільнага абсталявання)"</string>
<string name="slot_number" msgid="785422579177068698">"(Слот<xliff:g id="SLOT_NUM">%1$d</xliff:g>)"</string>
- <string name="launch_by_default" msgid="6106985160202769725">"Адкрываць па змаўчанні"</string>
+ <string name="launch_by_default" msgid="6106985160202769725">"Адкрываць стандартна"</string>
<string name="app_launch_domain_links_title" msgid="2987289657348349133">"Адкрыццё спасылак"</string>
<string name="app_launch_open_domain_urls_title" msgid="8595126859922391331">"Адкрыць спасылкі, якія падтрымліваюцца"</string>
<string name="app_launch_open_domain_urls_summary" msgid="6803029846855502366">"Адкрываць без запыту"</string>
@@ -3705,8 +3706,7 @@
<string name="change" msgid="41563753961948554">"Змяніць"</string>
<string name="change_storage" msgid="2064045078609862770">"Змяніць сховішча"</string>
<string name="notifications_label" msgid="2792398288062643318">"Апавяшчэнні"</string>
- <!-- no translation found for notifications_enabled (439339392141736137) -->
- <skip />
+ <string name="notifications_enabled" msgid="439339392141736137">"Уключана"</string>
<string name="notifications_enabled_with_info" msgid="7706460489443809452">"<xliff:g id="NOTIFICATIONS_SENT">%1$s</xliff:g> / <xliff:g id="NOTIFICATIONS_CATEGORIES_OFF">%2$s</xliff:g>"</string>
<string name="notifications_disabled" msgid="316658185757688983">"Выключана"</string>
<string name="notifications_partly_blocked" msgid="6330451240669068819">"Адключаны катэгорыі: <xliff:g id="COUNT_0">%1$d</xliff:g> з <xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
@@ -3950,7 +3950,7 @@
<string name="camera_gesture_desc" msgid="7751841175916789527">"Адкрыйце дадатак камеры, двойчы павярнуўшы сваё запясце"</string>
<string name="camera_double_tap_power_gesture_title" msgid="8874747801078147525">"Каб адкр. кам., двойчы кран. кнопку сіл."</string>
<string name="camera_double_tap_power_gesture_desc" msgid="6166349645433682873">"Хутка адкрыць камеру без разблакіроўкі экрана"</string>
- <string name="screen_zoom_title" msgid="164369086350486104">"Памер дысплэя"</string>
+ <string name="screen_zoom_title" msgid="164369086350486104">"Памер элементаў дысплэя"</string>
<string name="screen_zoom_short_summary" msgid="5508079362742276703">"Павелічэнне або памяншэнне элементаў на экране"</string>
<string name="screen_zoom_keywords" msgid="8358462497896524092">"шчыльнасць дысплэя, маштаб экрана, маштаб, маштабаванне"</string>
<string name="screen_zoom_summary" msgid="5294003755961312560">"Павелічэнне або памяншэнне элементаў на экране. Размяшчэнне некаторых праграм на вашым экране можа змяніцца."</string>
@@ -3993,7 +3993,7 @@
<string name="backup_disabled" msgid="6941165814784765643">"Рэзервовае капіраванне адключана"</string>
<string name="android_version_summary" msgid="2192751442789395445">"Абноўлена да версіі Android <xliff:g id="VERSION">%1$s</xliff:g>"</string>
<string name="android_version_pending_update_summary" msgid="3554543810520655076">"Ёсць абнаўленне"</string>
- <string name="disabled_by_policy_title" msgid="1238318274952958846">"Дзеянне не дапускаецца"</string>
+ <string name="disabled_by_policy_title" msgid="1238318274952958846">"Дзеянне забаронена"</string>
<string name="disabled_by_policy_title_adjust_volume" msgid="7094547090629203316">"Не ўдалося змяніць гучнасць"</string>
<string name="disabled_by_policy_title_outgoing_calls" msgid="3805836913095496278">"Выклікі забаронены"</string>
<string name="disabled_by_policy_title_sms" msgid="1453236584236681105">"Адпраўка SMS забаронена"</string>
@@ -4028,9 +4028,9 @@
<string name="condition_device_muted_summary" msgid="3101055117680109021">"Для выклікаў і апавяшчэнняў"</string>
<string name="condition_device_vibrate_title" msgid="5712659354868872338">"Толькі вібрацыя"</string>
<string name="condition_device_vibrate_summary" msgid="9073880731894828604">"Для выклікаў і апавяшчэнняў"</string>
- <string name="night_display_suggestion_title" msgid="4222839610992282188">"Глядзець графік начнога рэжыму"</string>
+ <string name="night_display_suggestion_title" msgid="4222839610992282188">"Задаць расклад Начной падсветкі"</string>
<string name="night_display_suggestion_summary" msgid="1754361016383576916">"Аўтаматычна мяняць колер экрана ўвечары"</string>
- <string name="condition_night_display_title" msgid="9171491784857160135">"Начны рэжым уключаны"</string>
+ <string name="condition_night_display_title" msgid="9171491784857160135">"Начная падсветка ўключана"</string>
<string name="condition_night_display_summary" msgid="7885776986937527558">"Бурштынавы колер экрана"</string>
<string name="condition_grayscale_title" msgid="1226351649203551299">"Адценні шэрага"</string>
<string name="condition_grayscale_summary" msgid="749172886527349546">"Паказ толькі ў шэрым колеры"</string>
@@ -4061,7 +4061,7 @@
<string name="usage" msgid="9172908720164431622">"Выкарыстанне"</string>
<string name="cellular_data_usage" msgid="1236562234207782386">"Выкарыстанне мабільнага трафіку"</string>
<string name="app_cellular_data_usage" msgid="8499761516172121957">"Выкарыстанне трафіка"</string>
- <string name="wifi_data_usage" msgid="275569900562265895">"Выкарыстанне трафіка Wi-Fi"</string>
+ <string name="wifi_data_usage" msgid="275569900562265895">"Выкарыстанне трафіка сеткай Wi-Fi"</string>
<string name="ethernet_data_usage" msgid="747614925362556718">"Выкарыстанне даных Ethernet"</string>
<string name="wifi" msgid="1586738489862966138">"Wi-Fi"</string>
<string name="ethernet" msgid="2365753635113154667">"Ethernet"</string>
@@ -4142,7 +4142,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Калі прылада заблакіравана, не дазваляць набіраць адказы або іншы тэкст у апавяшчэннях"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Стандартная праверка правапісу"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Праверка правапісу"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Уключыць праверку правапісу"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Выкарыстоўваць праверку правапісу"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Не выбрана"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(няма)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4243,7 +4243,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Каб вызваліць месца ў сховішчы, Менеджар сховішча выдаляе фота і відэа, для якіх створаны рэзервовыя копіі, з вашай прылады."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Выдаліць фота і відэа"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Менеджар сховішча"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Карыстанне менеджарам сховішча"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Выкарыстоўваць менеджар сховішча"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Аўтаматычна"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Уручную"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Вызваліць месца"</string>
@@ -4464,7 +4464,7 @@
<string name="change_wifi_state_title" msgid="5140754955787584174">"Кіраванне наладамі Wi-Fi"</string>
<string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"Дазволіць праграме кіраваць наладамі Wi-Fi"</string>
<string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Дазволіць гэтай праграме ўключаць ці выключаць Wi-Fi, шукаць сеткі Wi-Fi і падключацца да іх, дадаваць або выдаляць сеткі ці запускаць лакальны хот-спот"</string>
- <string name="media_output_title" msgid="8710632337456601848">"Прайграваць медыяфайлы на"</string>
+ <string name="media_output_title" msgid="8710632337456601848">"Дзе прайграваць"</string>
<string name="media_output_default_summary" msgid="3159237976830415584">"Гэта прылада"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"Тэлефон"</string>
<string name="media_output_summary" product="tablet" msgid="6672024060360538526">"Планшэт"</string>
diff --git a/tests/CarDeveloperOptions/res/values-bg/arrays.xml b/tests/CarDeveloperOptions/res/values-bg/arrays.xml
index f42800f..d5488d5 100644
--- a/tests/CarDeveloperOptions/res/values-bg/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-bg/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"пускане на заден план"</item>
<item msgid="6423861043647911030">"сила на звука за услугите за достъпност"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Местоположение"</item>
+ <item msgid="6656077694190491067">"Местоположение"</item>
+ <item msgid="8790228218278477369">"Местоположение"</item>
+ <item msgid="7836406246005211990">"Вибриране"</item>
+ <item msgid="3951439024549922598">"Четене на контактите"</item>
+ <item msgid="8802152411647068">"Промяна на контактите"</item>
+ <item msgid="229544934599698735">"Четене на списъка с обажданията"</item>
+ <item msgid="7396102294405899613">"Промяна на списъка с обажданията"</item>
+ <item msgid="3597797992398484655">"Четене на календара"</item>
+ <item msgid="2705975774250907343">"Промяна на календара"</item>
+ <item msgid="4668747371441932697">"Местоположение"</item>
+ <item msgid="1487578921720243646">"Публикуване на известие"</item>
+ <item msgid="4636080349724146638">"Местоположение"</item>
+ <item msgid="673510900286463926">"Обаждане по телефона"</item>
+ <item msgid="542083422784609790">"Четене на SMS/MMS"</item>
+ <item msgid="1033780373029588436">"Писане на SMS/MMS"</item>
+ <item msgid="5647111115517787488">"Получаване на SMS/MMS"</item>
+ <item msgid="8591105601108455893">"Получаване на SMS/MMS"</item>
+ <item msgid="7730995008517841903">"Получаване на SMS/MMS"</item>
+ <item msgid="2613033109026626086">"Получаване на SMS/MMS"</item>
+ <item msgid="3037159047591081136">"Изпращане на SMS/MMS"</item>
+ <item msgid="4726682243833913568">"Четене на SMS/MMS"</item>
+ <item msgid="6555678522277865572">"Писане на SMS/MMS"</item>
+ <item msgid="6981734935578130884">"Промяна на настройките"</item>
+ <item msgid="8705854389991425629">"Рисуване върху елемент"</item>
+ <item msgid="5861356020344153651">"Достъп до известията"</item>
+ <item msgid="78432174621628659">"Камера"</item>
+ <item msgid="3986116419882154794">"Запис на звук"</item>
+ <item msgid="4516840825756409490">"Възпроизвеждане на звук"</item>
+ <item msgid="6811712502798183957">"Четене на буферната памет"</item>
+ <item msgid="2780369012602289114">"Промяна на буферната памет"</item>
+ <item msgid="2331359440170850868">"Бутони за мултимедия"</item>
+ <item msgid="6133599737122751231">"Фокусиране на звука"</item>
+ <item msgid="6844485713404805301">"Основна сила на звука"</item>
+ <item msgid="1600379420669104929">"Сила на звука за глас"</item>
+ <item msgid="6296768210470214866">"Сила на звука при звънене"</item>
+ <item msgid="510690696071629241">"Сила на звука за мултимедия"</item>
+ <item msgid="406861638631430109">"Сила на звука на будилника"</item>
+ <item msgid="4715864795872233884">"Сила на звука при известие"</item>
+ <item msgid="2311478519251301183">"Сила на звука за Bluetooth"</item>
+ <item msgid="5133991377896747027">"Оставяне в будно състояние"</item>
+ <item msgid="2464189519136248621">"Местоположение"</item>
+ <item msgid="2062677934050803037">"Местоположение"</item>
+ <item msgid="1735171933192715957">"Получаване на статистически данни за употребата"</item>
+ <item msgid="1014093788778383554">"Заглушаване/включване на микрофона"</item>
+ <item msgid="4199297950608622850">"Показване на съобщение в изскачащо прозорче"</item>
+ <item msgid="2527962435313398821">"Прожектиране на мултимедия"</item>
+ <item msgid="5117506254221861929">"Активиране на виртуална частна мрежа (VPN)"</item>
+ <item msgid="8291198322681891160">"Запис на тапет"</item>
+ <item msgid="7106921284621230961">"Структура за помощ"</item>
+ <item msgid="4496533640894624799">"Екранна снимка за помощ"</item>
+ <item msgid="2598847264853993611">"Четене на състоянието на телефона"</item>
+ <item msgid="9215610846802973353">"Добавяне на гласова поща"</item>
+ <item msgid="9186411956086478261">"Използване на SIP"</item>
+ <item msgid="6884763100104539558">"Обработване на изходящо обаждане"</item>
+ <item msgid="125513972170580692">"Отпечатък"</item>
+ <item msgid="2556071024281275619">"Телесни сензори"</item>
+ <item msgid="617168514928339387">"Четене на клетъчни излъчвания"</item>
+ <item msgid="7134693570516523585">"Мнимо местоположение"</item>
+ <item msgid="7224489175375229399">"Четене на хранилището"</item>
+ <item msgid="8472735063903258202">"Запис в хранилището"</item>
+ <item msgid="4069276819909595110">"Включване на екрана"</item>
+ <item msgid="1228338896751121025">"Създаване на профили"</item>
+ <item msgid="3181581793459233672">"Пускане на заден план"</item>
+ <item msgid="2340936043025374076">"Сила на звука за услугите за достъпност"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Кратко"</item>
<item msgid="4816511817309094890">"Средна важност"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Никога да не се разрешава"</item>
<item msgid="8184570120217958741">"Винаги да се разрешава"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Нормално"</item>
+ <item msgid="5101233285497327432">"Средно"</item>
+ <item msgid="1555861583162930714">"Ниска"</item>
+ <item msgid="1719683776264798117">"Критичнo"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Нормално"</item>
+ <item msgid="6107138933849816768">"Средно"</item>
+ <item msgid="182695359839047859">"Ниска"</item>
+ <item msgid="8577246509202964244">"Критичнo"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Постоянно"</item>
<item msgid="167418068739176448">"Водеща активност"</item>
diff --git a/tests/CarDeveloperOptions/res/values-bg/strings.xml b/tests/CarDeveloperOptions/res/values-bg/strings.xml
index 7d3fe5c..b5620d5 100644
--- a/tests/CarDeveloperOptions/res/values-bg/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-bg/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Намаляване или уголемяване на текста на екрана."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Намаляване на размера"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Увеличаване на размера"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Примерен текст"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Вълшебникът от Оз"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Глава 11: Удивителният изумруден град на Оз"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Инф. за потр. профил"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Профили"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Местоположение"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Използване на местоположението"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Използване на местоположението"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Изкл."</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Вкл. – <xliff:g id="COUNT_1">%1$d</xliff:g> приложения могат да осъществяват достъп до местоположението</item>
@@ -730,7 +729,7 @@
<string name="bluetooth_settings" msgid="5228032727293770389">"Bluetooth"</string>
<string name="bluetooth_settings_title" msgid="7261244857456521825">"Bluetooth"</string>
<string name="bluetooth_settings_summary" msgid="1221689092429277887">"Управление на връзки, задаване на име и откриваемост на устройство"</string>
- <string name="bluetooth_pairing_request" msgid="7221745525632573125">"Искате ли да сдвоите с/ъс „<xliff:g id="DEVICE_NAME">%1$s</xliff:g>“?"</string>
+ <string name="bluetooth_pairing_request" msgid="7221745525632573125">"Искате ли да сдвоите с(ъс) „<xliff:g id="DEVICE_NAME">%1$s</xliff:g>“?"</string>
<string name="bluetooth_pairing_key_msg" msgid="1139230917419961975">"Код за сдвояване с Bluetooth"</string>
<string name="bluetooth_enter_passkey_msg" msgid="6205151011298670207">"Въведете кода за сдвояване, след което натиснете „Return“ или „Enter“"</string>
<string name="bluetooth_enable_alphanumeric_pin" msgid="9138308197078115672">"ПИН кодът съдържа букви или символи"</string>
@@ -821,7 +820,7 @@
<string name="wifi_ask_disable" msgid="2146839060110412974">"<xliff:g id="REQUESTER">%s</xliff:g> иска да изключи Wi-Fi"</string>
<string name="art_verifier_for_debuggable_title" msgid="5223835619409464642">"Потвържд. на байткода за прил. с възможн. за отстр. на грешки"</string>
<string name="art_verifier_for_debuggable_summary" msgid="2204242476996701111">"Разрешаване на ART да потвърждава байткода за приложенията с възможност за отстраняване на грешки"</string>
- <string name="nfc_quick_toggle_title" msgid="4990697912813795002">"КБП"</string>
+ <string name="nfc_quick_toggle_title" msgid="4990697912813795002">"NFC"</string>
<string name="nfc_quick_toggle_summary" product="tablet" msgid="983451155092850657">"Разрешаване на обмен на данни, когато таблетът докосва друго устройство"</string>
<string name="nfc_quick_toggle_summary" product="default" msgid="7141056939052895142">"Разрешаване на обмен на данни, когато телефонът докосва друго устройство"</string>
<string name="nfc_disclaimer_title" msgid="4860231267351602970">"Включване на КБП"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Включване на Wi‑Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Използване на Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Използване на Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Настройки за Wi‑Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Задаване и управление на безжични точки за достъп"</string>
@@ -936,13 +935,13 @@
<string name="wifi_privacy_settings" msgid="4462092795794247809">"Поверителност"</string>
<string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"Рандомизиран MAC адрес"</string>
<string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"Добавяне на устройство"</string>
- <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"За да добавите устройството към „<xliff:g id="SSID">%1$s</xliff:g>“, центрирайте по-долу кода за бърза реакция"</string>
+ <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"За да добавите устройството към <xliff:g id="SSID">%1$s</xliff:g>, центрирайте по-долу кода за бърза реакция"</string>
<string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"Сканиране на кода за бърза реакция"</string>
- <string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"За да се свържете с „<xliff:g id="SSID">%1$s</xliff:g>“, центрирайте по-долу кода за бърза реакция"</string>
+ <string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"За да се свържете към <xliff:g id="SSID">%1$s</xliff:g>, центрирайте по-долу кода за бърза реакция"</string>
<string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"Присъединете се към Wi‑Fi мрежата, като сканирате код за бърза реакция"</string>
<string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Споделяне на Wi‑Fi мрежата"</string>
- <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"Сканирайте този код за бърза реакция, за да се свържете към „<xliff:g id="SSID">%1$s</xliff:g>“ и да споделите паролата"</string>
- <string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"Сканирайте този код за бърза реакция, за да се свържете към „<xliff:g id="SSID">%1$s</xliff:g>“"</string>
+ <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"Сканирайте този код за бърза реакция, за да се свържете към <xliff:g id="SSID">%1$s</xliff:g> и да споделите паролата"</string>
+ <string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"Сканирайте този код за бърза реакция, за да се свържете към <xliff:g id="SSID">%1$s</xliff:g>"</string>
<string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"Кодът за бърза реакция не можа да бъде прочетен. Центрирайте го отново и опитайте пак"</string>
<string name="wifi_dpp_failure_authentication_or_configuration" msgid="9142051662156233679">"Опитайте отново. Ако проблемът не се отстрани, свържете се с производителя на устройството."</string>
<string name="wifi_dpp_failure_not_compatible" msgid="4320027179973678283">"Нещо се обърка"</string>
@@ -952,11 +951,11 @@
<string name="wifi_dpp_check_connection_try_again" msgid="7144663015219170999">"Проверете връзката и опитайте отново"</string>
<string name="wifi_dpp_choose_network" msgid="6251424431594491691">"Избиране на мрежа"</string>
<string name="wifi_dpp_choose_network_to_connect_device" msgid="6385259857886784285">"За да свържете устройството си, изберете мрежа"</string>
- <string name="wifi_dpp_add_device_to_wifi" msgid="6454198064645462446">"Да се добави ли това устройство към „<xliff:g id="SSID">%1$s</xliff:g>“?"</string>
+ <string name="wifi_dpp_add_device_to_wifi" msgid="6454198064645462446">"Да се добави ли това устройство към <xliff:g id="SSID">%1$s</xliff:g>?"</string>
<string name="wifi_dpp_wifi_shared_with_device" msgid="5713765471758272471">"Wi-Fi мрежата бе споделена с устройството"</string>
<string name="wifi_dpp_add_another_device" msgid="3698441567235301565">"Добавяне на друго устройство"</string>
<string name="wifi_dpp_choose_different_network" msgid="128515107488187050">"Избиране на друга мрежа"</string>
- <string name="wifi_dpp_could_not_add_device" msgid="4966109556543584813">"Устройството не можа да се добави"</string>
+ <string name="wifi_dpp_could_not_add_device" msgid="4966109556543584813">"Устройството не бе добавено"</string>
<string name="wifi_dpp_device_found" msgid="6488461467496850841">"Открито е устройство"</string>
<string name="wifi_dpp_sharing_wifi_with_this_device" msgid="2540529164687476827">"Wi-Fi мрежата се споделя с това устройство…"</string>
<string name="wifi_dpp_connecting" msgid="4229290407210299897">"Свързва се…"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Мобилни данни"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Използване на мобилната мрежа, ако няма достъп до Wi‑Fi"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Използване на Wi‑Fi, ако мобилната мрежа не е налице"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Обаждане през Wi‑Fi. Ако връзката прекъсне, обаждането ще завърши."</string>
@@ -1207,7 +1209,7 @@
<string name="adaptive_sleep_summary_on" msgid="6670369739228487082">"Вкл. – Екранът няма да се изключи, ако гледате в него"</string>
<string name="adaptive_sleep_summary_off" msgid="2891586225954973431">"Изключено"</string>
<string name="adaptive_sleep_description" msgid="812673735459170009">"Предотвратява изключването на екрана ви, ако гледате в него."</string>
- <string name="adaptive_sleep_privacy" msgid="5706802215479902623">"Функцията „Адаптивен екран“ използва предната камера, за да види дали някой гледа в екрана. Тя работи на устройството и изображенията не се съхраняват, нито се изпращат до Google."</string>
+ <string name="adaptive_sleep_privacy" msgid="5706802215479902623">"Функцията „Адаптивен екран“ използва предната камера, за да установи дали някой гледа в екрана. Тя работи на устройството и изображенията не се съхраняват, нито се изпращат до Google."</string>
<string name="night_display_title" msgid="1305002424893349814">"Нощно осветление"</string>
<string name="night_display_text" msgid="5330502493684652527">"Функцията „Нощно осветление“ придава кехлибареножълт нюанс на екрана. Това подобрява видимостта му и четенето на него при слаба светлина и може да ви помогне да заспите по-лесно."</string>
<string name="night_display_auto_mode_title" msgid="8493573087102481588">"График"</string>
@@ -1565,7 +1567,7 @@
<string name="error_adding_apn_type" msgid="671634520340569678">"Операторът не позволява добавянето на имена на точки за достъп (APN) от типа „%s“."</string>
<string name="restore_default_apn" msgid="7195266404077471007">"Стандартните настройки за името на точката за достъп (APN) се възстановяват."</string>
<string name="menu_restore" msgid="3799288817317293115">"Възстановяване на стандартни"</string>
- <string name="restore_default_apn_completed" msgid="5671734152740058937">"Възстановяването на стандартните настройките за името на точката за достъп (APN) завърши."</string>
+ <string name="restore_default_apn_completed" msgid="5671734152740058937">"Възстановяването на стандартните настройки за името на точката за достъп (APN) завърши."</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"Опции за нулиране"</string>
<string name="reset_dashboard_summary" msgid="8778383341461126642">"Мрежата, приложенията или устройството могат да бъдат нулирани"</string>
<string name="reset_network_title" msgid="8944059136930806211">"Нулиране на настройките за Wi-Fi, мобилни данни и Bluetooth"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Вибриране при известия"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Вибриране при звънене"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Вибриране при докосване"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Използване на услугата"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Използване на корекция на цветовете"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Използване на надписи"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Използване на услугата"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Използване на корекция на цветовете"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Използване на надписи"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Напред"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Слухови апарати"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Няма свързани слухови апарати"</string>
@@ -2297,7 +2299,7 @@
</plurals>
<plurals name="battery_tip_restrict_summary" formatted="false" msgid="984148373944071669">
<item quantity="other">%2$d приложения използват батерията интензивно на заден план</item>
- <item quantity="one">%1$s приложение използва батерията интензивно на заден план</item>
+ <item quantity="one">Приложението %1$s използва батерията интензивно на заден план</item>
</plurals>
<plurals name="battery_tip_restrict_handled_summary" formatted="false" msgid="469696766640020557">
<item quantity="other">Тези приложения не могат да се изпълняват на заден план</item>
@@ -2307,9 +2309,9 @@
<item quantity="other">Да се ограничат ли %1$d приложения?</item>
<item quantity="one">Да се ограничи ли приложението?</item>
</plurals>
- <string name="battery_tip_restrict_app_dialog_message" msgid="6905822297507947381">"За да не изразходвате батерията, спрете използването й на заден план от <xliff:g id="APP">%1$s</xliff:g>. Това приложение може да не работи правилно и е възможно да има забавяне на известията."</string>
- <string name="battery_tip_restrict_apps_less_than_5_dialog_message" msgid="4225881888543582456">"За да не изразходвате батерията, спрете използването й на заден план от тези приложения. Ограничените приложения може да не работят правилно и е възможно да има забавяне на известията.\n\nПриложения:"</string>
- <string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"За да не изразходвате батерията, спрете използването й на заден план от тези приложения. Ограничените приложения може да не работят правилно и е възможно да има забавяне на известията.\n\nПриложения:\n<xliff:g id="APP_LIST">%1$s</xliff:g>."</string>
+ <string name="battery_tip_restrict_app_dialog_message" msgid="6905822297507947381">"За да не изразходвате батерията, спрете използването ѝ на заден план от <xliff:g id="APP">%1$s</xliff:g>. Това приложение може да не работи правилно и е възможно да има забавяне на известията."</string>
+ <string name="battery_tip_restrict_apps_less_than_5_dialog_message" msgid="4225881888543582456">"За да не изразходвате батерията, спрете използването ѝ на заден план от тези приложения. Ограничените приложения може да не работят правилно и е възможно да има забавяне на известията.\n\nПриложения:"</string>
+ <string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"За да не изразходвате батерията, спрете използването ѝ на заден план от тези приложения. Ограничените приложения може да не работят правилно и е възможно да има забавяне на известията.\n\nПриложения:\n<xliff:g id="APP_LIST">%1$s</xliff:g>."</string>
<string name="battery_tip_restrict_app_dialog_ok" msgid="2573410775701913487">"Ограничаване"</string>
<string name="battery_tip_unrestrict_app_dialog_title" msgid="812458516399125710">"Да се премахне ли ограничението?"</string>
<string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"Това приложение ще може да използва батерията на заден план. Тя може да се изтощи по-рано от очакваното."</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Включване"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Използване на режима за запазване на батерията"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Използване на режима за запазване на батерията"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Автоматично включване"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Никога"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"при <xliff:g id="PERCENT">%1$s</xliff:g> батерия"</string>
@@ -2970,7 +2972,7 @@
<string name="restriction_wifi_config_summary" msgid="2450206736438594690">"Разрешаване на промяна на настройките за Wi‑Fi и мобилни данни"</string>
<string name="restriction_bluetooth_config_title" msgid="34551118506640221">"Bluetooth"</string>
<string name="restriction_bluetooth_config_summary" msgid="5304900222614952895">"Разрешаване на промяна на сдвояванията и настройките на Bluetooth"</string>
- <string name="restriction_nfc_enable_title" msgid="5146674482590550598">"КБП"</string>
+ <string name="restriction_nfc_enable_title" msgid="5146674482590550598">"NFC"</string>
<string name="restriction_nfc_enable_summary_config" msgid="405349698260328073">"Разрешаване на обмен на данни, когато <xliff:g id="DEVICE_NAME">%1$s</xliff:g> докосне друго устройство с КБП"</string>
<string name="restriction_nfc_enable_summary" product="tablet" msgid="3292205836938064931">"Разрешаване на обмен на данни, когато таблетът докосва друго устройство"</string>
<string name="restriction_nfc_enable_summary" product="default" msgid="226439584043333608">"Разрешаване на обмен на данни, когато телефонът докосва друго устройство"</string>
@@ -3283,7 +3285,7 @@
<string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"Звуците за служебния и личния потребителски профил са едни и същи"</string>
<string name="work_ringtone_title" msgid="5499360583947410224">"Служебна мелодия на телефона"</string>
<string name="work_notification_ringtone_title" msgid="8059159087214025757">"Стандартен звук за служебните известия"</string>
- <string name="work_alarm_ringtone_title" msgid="5328487181385375130">"Стандартен звук за служебните будилници"</string>
+ <string name="work_alarm_ringtone_title" msgid="5328487181385375130">"Стандартен звук за служебните аларми"</string>
<string name="work_sound_same_as_personal" msgid="7728560881697159758">"Като за личния потребителски профил"</string>
<string name="work_sync_dialog_title" msgid="4799120971202956837">"Да се заменят ли звуците?"</string>
<string name="work_sync_dialog_yes" msgid="2110726233746476066">"Замяна"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Предотвратяване на въвеждането на отговори или друг текст в известията, когато устройството е заключено"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Стандартна правописна проверка"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Избор на правописна проверка"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Използване на проверка на правописа"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Използване на проверка на правописа"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Не е избрано"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(няма)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"За да ви помогне да освободите място за съхранение, мениджърът на хранилището премахва от устройството ви резервните копия на снимки и видеоклипове."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Премахване на снимките и видеоклиповете"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Мениджър на хранилището"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Използване на мениджъра на хранилището"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Използване на мениджъра на хранилището"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Автоматично"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Ръчни"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Освободете място сега"</string>
diff --git a/tests/CarDeveloperOptions/res/values-bn/arrays.xml b/tests/CarDeveloperOptions/res/values-bn/arrays.xml
index 3b10fdc..a76eda3 100644
--- a/tests/CarDeveloperOptions/res/values-bn/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-bn/arrays.xml
@@ -38,7 +38,16 @@
<item msgid="5827960506924849753">"১০ মিনিট"</item>
<item msgid="6677424950124253938">"৩০ মিনিট"</item>
</string-array>
- <!-- no translation found for dream_timeout_entries:7 (8271452751594598661) -->
+ <string-array name="dream_timeout_entries">
+ <item msgid="6487043225269853023">"কখনই নয়"</item>
+ <item msgid="2517785806387977252">"১৫ সেকেন্ড"</item>
+ <item msgid="6347954399441173672">"৩০ সেকেন্ড"</item>
+ <item msgid="4858305253279921789">"১ মিনিট"</item>
+ <item msgid="8109273437140044073">"২ মিনিট"</item>
+ <item msgid="2788593551142462622">"৫ মিনিট"</item>
+ <item msgid="8012672183888404961">"১০ মিনিট"</item>
+ <item msgid="8271452751594598661">"৩০ মিনিট"</item>
+ </string-array>
<string-array name="lock_after_timeout_entries">
<item msgid="2232921187970351881">"অবিলম্বে"</item>
<item msgid="2038544972632026612">"৫ সেকেন্ড"</item>
@@ -50,17 +59,47 @@
<item msgid="811192536981678974">"১০ মিনিট"</item>
<item msgid="7258394417241706272">"৩০ মিনিট"</item>
</string-array>
- <!-- no translation found for entries_font_size:0 (2340391964816059553) -->
- <!-- no translation found for entries_font_size:0 (6490061470416867723) -->
- <!-- no translation found for entries_font_size:2 (1714184661981538355) -->
- <!-- no translation found for entries_font_size:2 (1678068858001018666) -->
- <!-- no translation found for wifi_status:3 (5848277343965362748) -->
- <!-- no translation found for wifi_status_with_ssid:1 (6816207058895999545) -->
- <!-- no translation found for wifi_status_with_ssid:3 (7547609081339573756) -->
- <!-- no translation found for wifi_status_with_ssid:4 (5145158315060185414) -->
+ <string-array name="entries_font_size">
+ <item msgid="2340391964816059553">"ছোট"</item>
+ <item msgid="591935967183159581">"ডিফল্ট"</item>
+ <item msgid="1714184661981538355">"বড়"</item>
+ <item msgid="6195563047686707484">"বৃহত্তম"</item>
+ </string-array>
+ <string-array name="wifi_status">
+ <item msgid="1304883790721412351"></item>
+ <item msgid="4157625910392775808">"স্ক্যান করা হচ্ছে…"</item>
+ <item msgid="5597394826455877834">"কানেক্ট হচ্ছে..."</item>
+ <item msgid="5848277343965362748">"যাচাই করা হচ্ছে…"</item>
+ <item msgid="3391238031431440676">"আইপি অ্যাড্রেস প্রাপ্ত করা হচ্ছে..."</item>
+ <item msgid="5257597310494000224">"কানেক্ট আছে"</item>
+ <item msgid="8472497592913050396">"স্থগিত করা হয়েছে"</item>
+ <item msgid="1228072488815999109">"ডিসকানেক্ট হচ্ছে..."</item>
+ <item msgid="7253087004422991731">"ডিসকানেক্ট করা হয়েছে"</item>
+ <item msgid="4169850917304751227">"অসফল"</item>
+ <item msgid="6266658166690831131">"অবরুদ্ধ"</item>
+ <item msgid="4517230805854909775">"সাময়িকরূপে দুর্বল কানেকশন এড়ানো হচ্ছে"</item>
+ </string-array>
+ <string-array name="wifi_status_with_ssid">
+ <item msgid="4853670665485437464"></item>
+ <item msgid="6816207058895999545">"স্ক্যান করা হচ্ছে…"</item>
+ <item msgid="8058143476674427024">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> এর সাথে কানেক্ট হচ্ছে…"</item>
+ <item msgid="7547609081339573756">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>-এর সাথে যাচাই করা হচ্ছে…"</item>
+ <item msgid="5145158315060185414">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> থেকে আইপি অ্যাড্রেসের তথ্য সংগ্রহ করা হচ্ছে…"</item>
+ <item msgid="3283243151651124831">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> তে কানেক্ট হয়েছে"</item>
+ <item msgid="6600156231416890902">"স্থগিত করা হয়েছে"</item>
+ <item msgid="4133290864821295785">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> থেকে ডিসকানেক্ট হচ্ছে…"</item>
+ <item msgid="3980154971187953257">"ডিসকানেক্ট করা হয়েছে"</item>
+ <item msgid="2847316776634969068">"অসফল"</item>
+ <item msgid="4390990424746035383">"অবরুদ্ধ"</item>
+ <item msgid="3618248791367063949">"সাময়িকরূপে দুর্বল কানেকশন এড়ানো হচ্ছে"</item>
+ </string-array>
<!-- no translation found for wifi_tether_security:0 (5586343370515598801) -->
<!-- no translation found for wifi_tether_security:1 (6136336549994615745) -->
- <!-- no translation found for wifi_p2p_wps_setup:0 (5390235347963255303) -->
+ <string-array name="wifi_p2p_wps_setup">
+ <item msgid="5390235347963255303">"পুশ বোতাম"</item>
+ <item msgid="7401896200768713930">"চেনা ডিভাইস থেকে পিন"</item>
+ <item msgid="4526848028011846710">"এই ডিভাইস থেকে পিন"</item>
+ </string-array>
<string-array name="wifi_p2p_status">
<item msgid="8741947238021758201">"কানেক্ট আছে"</item>
<item msgid="983792611851499732">"আমন্ত্রিত"</item>
@@ -82,8 +121,13 @@
<item msgid="1644506614010085798">"৪"</item>
<item msgid="3132506679404897150">"৫"</item>
</string-array>
- <!-- no translation found for wifi_signal:1 (7882129634982603782) -->
- <!-- no translation found for wifi_signal:4 (999948812884919584) -->
+ <string-array name="wifi_signal">
+ <item msgid="1709949377823900951">"খারাপ"</item>
+ <item msgid="7882129634982603782">"খারাপ"</item>
+ <item msgid="6457357501905996224">"ঠিকঠাক"</item>
+ <item msgid="405271628162918841">"ভাল"</item>
+ <item msgid="999948812884919584">"খুব ভাল"</item>
+ </string-array>
<string-array name="data_usage_data_range">
<item msgid="8986775481492954015">"গত ৩০ দিন"</item>
<item msgid="3211287705232736964">"ব্যবহার চক্র সেট করুন..."</item>
@@ -119,7 +163,10 @@
<item msgid="7330627471456865502">"MSCHAPV2"</item>
<item msgid="6255179395132581882">"GTC"</item>
</string-array>
- <!-- no translation found for wifi_ip_settings:1 (4377002609760712163) -->
+ <string-array name="wifi_ip_settings">
+ <item msgid="2717196390555072244">"DHCP"</item>
+ <item msgid="4377002609760712163">"স্ট্যাটিক"</item>
+ </string-array>
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"কোনো কিছুই নয়"</item>
<item msgid="1464741437353223198">"ম্যানুয়াল"</item>
@@ -239,11 +286,73 @@
<item msgid="1165623660533024666">"পটভূমি্তে অ্যাপ্স চলছে"</item>
<item msgid="6423861043647911030">"অ্যাক্সেসযোগ্যতার ভলিউম"</item>
</string-array>
- <!-- no translation found for app_ops_labels:3 (7836406246005211990) -->
- <!-- no translation found for app_ops_labels:4 (3951439024549922598) -->
- <!-- no translation found for app_ops_labels:8 (3597797992398484655) -->
- <!-- no translation found for app_ops_labels:20 (3037159047591081136) -->
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"লোকেশন"</item>
+ <item msgid="6656077694190491067">"লোকেশন"</item>
+ <item msgid="8790228218278477369">"লোকেশন"</item>
+ <item msgid="7836406246005211990">"ভাইব্রেট"</item>
+ <item msgid="3951439024549922598">"পরিচিতি পড়ুন"</item>
+ <item msgid="8802152411647068">"পরিচিতি পরিবর্তন করুন"</item>
+ <item msgid="229544934599698735">"কল লগ পড়ুন"</item>
+ <item msgid="7396102294405899613">"কল লগ পরিবর্তন করুন"</item>
+ <item msgid="3597797992398484655">"ক্যালেন্ডার পড়ুন"</item>
+ <item msgid="2705975774250907343">"ক্যালেন্ডারে পরিবর্তন করুন"</item>
+ <item msgid="4668747371441932697">"লোকেশন"</item>
+ <item msgid="1487578921720243646">"বিজ্ঞপ্তি পোস্ট করুন"</item>
+ <item msgid="4636080349724146638">"লোকেশন"</item>
+ <item msgid="673510900286463926">"ফোন করুন"</item>
+ <item msgid="542083422784609790">"SMS/MMS পড়ুন"</item>
+ <item msgid="1033780373029588436">"SMS/MMS লিখুন"</item>
+ <item msgid="5647111115517787488">"SMS/MMS পান"</item>
+ <item msgid="8591105601108455893">"SMS/MMS পান"</item>
+ <item msgid="7730995008517841903">"SMS/MMS পান"</item>
+ <item msgid="2613033109026626086">"SMS/MMS পান"</item>
+ <item msgid="3037159047591081136">"এসএমএস বা এমএমএস পাঠান"</item>
+ <item msgid="4726682243833913568">"SMS/MMS পড়ুন"</item>
+ <item msgid="6555678522277865572">"SMS/MMS লিখুন"</item>
+ <item msgid="6981734935578130884">"সেটিংস সংশোধন করুন"</item>
+ <item msgid="8705854389991425629">"উপরে অঙ্কন করুন"</item>
+ <item msgid="5861356020344153651">"বিজ্ঞপ্তিগুলি অ্যাক্সেস করুন"</item>
+ <item msgid="78432174621628659">"ক্যামেরা"</item>
+ <item msgid="3986116419882154794">"অডিও রেকর্ড"</item>
+ <item msgid="4516840825756409490">"অডিও প্লে করুন"</item>
+ <item msgid="6811712502798183957">"ক্লিপবোর্ড পড়ুন"</item>
+ <item msgid="2780369012602289114">"ক্লিপবোর্ড সংশোধন করুন"</item>
+ <item msgid="2331359440170850868">"মিডিয়া বোতামগুলি"</item>
+ <item msgid="6133599737122751231">"অডিও ফোকাস"</item>
+ <item msgid="6844485713404805301">"মাস্টার ভলিউম"</item>
+ <item msgid="1600379420669104929">"ভয়েস ভলিউম"</item>
+ <item msgid="6296768210470214866">"রিং ভলিউম"</item>
+ <item msgid="510690696071629241">"মিডিয়া ভলিউম"</item>
+ <item msgid="406861638631430109">"অ্যালার্মের ভলিউম"</item>
+ <item msgid="4715864795872233884">"বিজ্ঞপ্তির ভলিউম"</item>
+ <item msgid="2311478519251301183">"ব্লুটুথ এর ভলিউম"</item>
+ <item msgid="5133991377896747027">"জাগ্রত রাখুন"</item>
+ <item msgid="2464189519136248621">"লোকেশন"</item>
+ <item msgid="2062677934050803037">"লোকেশন"</item>
+ <item msgid="1735171933192715957">"ব্যবহারের পরিসংখ্যান পান"</item>
+ <item msgid="1014093788778383554">"মাইক্রোফোন মিউট/সশব্দ করুন"</item>
+ <item msgid="4199297950608622850">"টোস্ট দেখান"</item>
+ <item msgid="2527962435313398821">"মিডিয়াতে অভিক্ষেপ করুন"</item>
+ <item msgid="5117506254221861929">"VPN সক্রিয় করুন"</item>
+ <item msgid="8291198322681891160">"লেখার ওয়ালপেপার"</item>
+ <item msgid="7106921284621230961">"পরিকাঠামোর সহায়তা"</item>
+ <item msgid="4496533640894624799">"স্ক্রিনশটে সহায়তা"</item>
+ <item msgid="2598847264853993611">"ফোনের অবস্থা পড়ুন"</item>
+ <item msgid="9215610846802973353">"ভয়েসমেল যোগ করুন"</item>
+ <item msgid="9186411956086478261">"SIP ব্যবহার করুন"</item>
+ <item msgid="6884763100104539558">"আউটগোয়িং কলের প্রক্রিয়া করুন"</item>
+ <item msgid="125513972170580692">"আঙ্গুলের ছাপ"</item>
+ <item msgid="2556071024281275619">"শরীরের সেন্সরগুলি"</item>
+ <item msgid="617168514928339387">"সেলে সম্প্রচারগুলি পড়ুন"</item>
+ <item msgid="7134693570516523585">"ছদ্ম লোকেশন"</item>
+ <item msgid="7224489175375229399">"সঞ্চয়স্থানে পড়ুন"</item>
+ <item msgid="8472735063903258202">"সঞ্চয়স্থানে লিখুন"</item>
+ <item msgid="4069276819909595110">"স্ক্রিন চালু করুন"</item>
+ <item msgid="1228338896751121025">"অ্যাকাউন্ট পেয়ে যান"</item>
+ <item msgid="3181581793459233672">"পটভূমিতে অ্যাপ্স চলছে"</item>
+ <item msgid="2340936043025374076">"অ্যাক্সেসযোগ্যতার ভলিউম"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"স্বল্প"</item>
<item msgid="4816511817309094890">"মাঝারি"</item>
@@ -260,7 +369,13 @@
<item msgid="4627069151979553527">"কার্সিভ"</item>
<item msgid="6896773537705206194">"Small Capitals"</item>
</string-array>
- <!-- no translation found for captioning_font_size_selector_titles:3 (2784236342175159295) -->
+ <string-array name="captioning_font_size_selector_titles">
+ <item msgid="1680223634161592855">"অতি ক্ষুদ্র"</item>
+ <item msgid="5091603983404027034">"ক্ষুদ্র"</item>
+ <item msgid="176844712416932112">"Normal"</item>
+ <item msgid="2784236342175159295">"বড়"</item>
+ <item msgid="218913203203160606">"খুব বড়"</item>
+ </string-array>
<string-array name="captioning_edge_type_selector_titles">
<item msgid="3865198759294188069">"ডিফল্ট"</item>
<item msgid="6488643537808152001">"কোনো কিছুই নয়"</item>
@@ -275,7 +390,14 @@
<item msgid="1874668269931014581">"৭৫%"</item>
<item msgid="6462911487571123954">"১০০%"</item>
</string-array>
- <!-- no translation found for captioning_preset_selector_titles:2 (5891360837786277638) -->
+ <string-array name="captioning_preset_selector_titles">
+ <item msgid="326819345272910536">"অ্যাপের ডিফল্টগুলি ব্যবহার করুন"</item>
+ <item msgid="8611890312638868524">"কালোর উপর সাদা"</item>
+ <item msgid="5891360837786277638">"সাদার উপর কালো"</item>
+ <item msgid="2798457065945456853">"কালোর উপর হলুদ"</item>
+ <item msgid="5799049811524553967">"নীলের উপর হলুদ"</item>
+ <item msgid="3673930830658169860">"কাস্টম"</item>
+ </string-array>
<string-array name="vpn_types_long">
<item msgid="6566768880689730097">"PPTP VPN"</item>
<item msgid="1349760781118368659">"আগে থেকে শেয়ার করা কীগুলির সাথে L2TP/IPSec VPN"</item>
@@ -288,15 +410,32 @@
<item msgid="2958623927055120839">"কোনো কিছুই নয়"</item>
<item msgid="1157046369795346308">"ম্যানুয়াল"</item>
</string-array>
- <!-- no translation found for vpn_states:4 (9135049670787351881) -->
+ <string-array name="vpn_states">
+ <item msgid="5408915841694583740">"ডিসকানেক্ট করা হয়েছে"</item>
+ <item msgid="8754480102834556765">"আরম্ভ হচ্ছে..."</item>
+ <item msgid="3351334355574270250">"কানেক্ট হচ্ছে..."</item>
+ <item msgid="8303882153995748352">"কানেক্ট আছে"</item>
+ <item msgid="9135049670787351881">"টাইম-আউট"</item>
+ <item msgid="2124868417182583926">"অসফল"</item>
+ </string-array>
<string-array name="security_settings_premium_sms_values">
<item msgid="1164265643455394443">"জিজ্ঞাসা করুন"</item>
<item msgid="7718817231348607934">"কখনো অনুমতি দেবেন না"</item>
<item msgid="8184570120217958741">"সর্বদা অনুমতি দিন"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"সাধারণ"</item>
+ <item msgid="5101233285497327432">"মাঝারি"</item>
+ <item msgid="1555861583162930714">"কম করুন"</item>
+ <item msgid="1719683776264798117">"জটিল"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"স্বাভাবিক"</item>
+ <item msgid="6107138933849816768">"মাঝারি"</item>
+ <item msgid="182695359839047859">"কম করুন"</item>
+ <item msgid="8577246509202964244">"জটিল"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"ক্রমাগত"</item>
<item msgid="167418068739176448">"শীর্ষ অ্যাক্টিভিটি"</item>
@@ -335,10 +474,10 @@
<string-array name="wifi_metered_entries">
<item msgid="4329206416008519163">"অটোমেটিক শনাক্ত হতে দিন"</item>
<item msgid="773943026484148895">"মিটারিং চালু রাখুন"</item>
- <item msgid="1008268820118852416">"মিটারিং এর দরকার নেই"</item>
+ <item msgid="1008268820118852416">"মিটারিং বন্ধ রাখুন"</item>
</string-array>
<string-array name="wifi_privacy_entries">
- <item msgid="6545683814310036454">"র্যান্ডমাইজ করা MAC (ডিফল্ট)"</item>
+ <item msgid="6545683814310036454">"র্যান্ডমাইজ করা MAC ব্যবহার করুন (ডিফল্ট)"</item>
<item msgid="214234417308375326">"MAC ডিভাইস ব্যবহার করুন"</item>
</string-array>
<string-array name="wifi_hidden_entries">
diff --git a/tests/CarDeveloperOptions/res/values-bn/strings.xml b/tests/CarDeveloperOptions/res/values-bn/strings.xml
index 8626cab..922094d 100644
--- a/tests/CarDeveloperOptions/res/values-bn/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-bn/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"স্ক্রিনের টেক্সট ছোট বা বড় করুন।"</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"আরো ছোট করুন"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"আরো বড় করুন"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"স্যাম্পেল টেক্সট"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"দ্যা ওয়ান্ডারফুল উইজার্ড অফ অজ"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"অধ্যায় ১১: দ্যা ওয়ান্ডারফুল এমারল্ড সিটি অফ ওজ"</string>
@@ -128,7 +127,7 @@
<string name="bluetooth_notif_title" msgid="5090288898529286011">"যুক্ত করার অনুরোধ"</string>
<string name="bluetooth_notif_message" msgid="6612367890895077938">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> এর সঙ্গে যুক্ত করতে আলতো চাপুন৷"</string>
<string name="bluetooth_show_received_files" msgid="5060846395852236652">"ফাইল গ্রহণ করা হয়েছে"</string>
- <string name="bluetooth_show_files_received_via_bluetooth" msgid="1699095577431389560">"ব্লুটুথের মাধ্যমে পেয়ে থাকা ফাইল"</string>
+ <string name="bluetooth_show_files_received_via_bluetooth" msgid="1699095577431389560">"ব্লুটুথের মাধ্যমে পাওয়া ফাইল"</string>
<string name="device_picker" msgid="8345264486071697705">"ব্লুটুথ ডিভাইস বাছুন"</string>
<string name="bluetooth_ask_enablement" msgid="8716802066127746062">"<xliff:g id="APP_NAME">%1$s</xliff:g> ব্লুটুথ চালু করতে চাইছে"</string>
<string name="bluetooth_ask_disablement" msgid="7125319551097350783">"<xliff:g id="APP_NAME">%1$s</xliff:g> ব্লুটুথ বন্ধ করতে চাইছে"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"প্রোফাইল তথ্য"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"অ্যাকাউন্টগুলি"</string>
<string name="location_settings_title" msgid="2707201457572301030">"লোকেশন"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"লোকেশন ব্যবহার করুন"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"লোকেশন ব্যবহার করুন"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"বন্ধ আছে"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">চালু আছে - <xliff:g id="COUNT_1">%1$d</xliff:g>টি অ্যাপ লোকেশন অ্যাক্সেস করতে পারবে</item>
@@ -713,7 +712,7 @@
<string name="lockpattern_tutorial_continue_label" msgid="8474690922559443018">"পরবর্তী"</string>
<string name="lock_setup" msgid="8710689848703935088">"সেটআপ সম্পূর্ণ।"</string>
<string name="manage_device_admin" msgid="322047441168191695">"ডিভাইস প্রশাসক অ্যাপ"</string>
- <string name="number_of_device_admins_none" msgid="8519193548630223132">"কোনো সক্রিয় অ্যাপ নেই"</string>
+ <string name="number_of_device_admins_none" msgid="8519193548630223132">"কোনও সক্রিয় অ্যাপ নেই"</string>
<plurals name="number_of_device_admins" formatted="false" msgid="6445613288828151224">
<item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g>টি অ্যাপ সক্রিয় আছে</item>
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g>টি অ্যাপ সক্রিয় আছে</item>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"ওয়াই-ফাই"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"ওয়াই-ফাই চালু করুন"</string>
<string name="wifi_settings" msgid="7486492317310514109">"ওয়াই-ফাই"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"ওয়াই-ফাই ব্যবহার করুন"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"ওয়াই-ফাই ব্যবহার করুন"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"ওয়াই-ফাই সেটিংস"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"ওয়াই-ফাই"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"ওয়্যারলেস অ্যাক্সেস পয়েন্ট সেট-আপ ও পরিচালনা করুন"</string>
@@ -889,7 +888,7 @@
<string name="wifi_menu_remember" msgid="717257200269700641">"নেটওয়ার্ক মনে রাখুন"</string>
<string name="wifi_menu_forget" msgid="7561140554450163075">"নেটওয়ার্ক ভুলে যান"</string>
<string name="wifi_menu_modify" msgid="4080178040721021101">"নেটওয়ার্ক পরিবর্তন করুন"</string>
- <string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"উপলব্ধ নেটওয়ার্কগুলি দেখতে, ওয়াই-ফাই চালু করুন।"</string>
+ <string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"উপলভ্য নেটওয়ার্কগুলি দেখতে, ওয়াই-ফাই চালু করুন।"</string>
<string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"ওয়াই-ফাই নেটওয়ার্কগুলির জন্য সার্চ করা হচ্ছে..."</string>
<string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"ওয়াই-ফাই নেটওয়ার্ক পরিবর্তন করার অনুমতি আপনার নেই।"</string>
<string name="wifi_more" msgid="3538241640407382185">"আরো"</string>
@@ -971,7 +970,7 @@
<string name="wifi_unchanged" msgid="6804964646942333992">"(অপরিবর্তিত)"</string>
<string name="wifi_unspecified" msgid="893491188483500809">"অনুগ্রহ করে বেছে নিন"</string>
<string name="wifi_multiple_cert_added" msgid="7986200585749147204">"(একাধিক সার্টিফিকেট যোগ করা হয়েছে)"</string>
- <string name="wifi_use_system_certs" msgid="4794489370929885022">"সিস্টেমের শংসাপত্রগুলি ব্যবহার করুন"</string>
+ <string name="wifi_use_system_certs" msgid="4794489370929885022">"সিস্টেমের সার্টিফিকেটগুলি ব্যবহার করুন"</string>
<string name="wifi_do_not_provide_eap_user_cert" msgid="4044301449482425250">"প্রদান করবেন না"</string>
<string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"যাচাই করবেন না"</string>
<string name="wifi_do_not_validate_eap_server_warning" msgid="3895397996759837323">"কোনও সার্টিফিকেট নির্দিষ্ট করা নেই৷ আপনার কানেকশন ব্যক্তিগত করা হবে না৷"</string>
@@ -1046,7 +1045,7 @@
<string name="wifi_p2p_persist_network" msgid="1110453878886476660">"এই সংযোগটি মনে রাখুন"</string>
<string name="wifi_p2p_menu_search" msgid="8207638860263805291">"ডিভাইসগুলির জন্য খুঁজুন"</string>
<string name="wifi_p2p_menu_searching" msgid="7443249001543208106">"সার্চ করছে..."</string>
- <string name="wifi_p2p_menu_rename" msgid="2129974878377065488">"ডিভাইস পুনঃনামকরণ করুন"</string>
+ <string name="wifi_p2p_menu_rename" msgid="2129974878377065488">"ডিভাইসের নাম পরিবর্তন করুন"</string>
<string name="wifi_p2p_peer_devices" msgid="8232126067045093382">"পিয়ার ডিভাইসগুলি"</string>
<string name="wifi_p2p_remembered_groups" msgid="1356458238836730346">"স্মরণ রাখা গোষ্ঠীসমূহ"</string>
<string name="wifi_p2p_failed_connect_message" msgid="6103436959132424093">"কানেক্ট করা যায়নি৷"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"ওয়াই-ফাই"</item>
+ <item msgid="2271962426654621656">"মোবাইল"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"ওয়াই-ফাই উপলভ্য না থাকলে, মোবাইল নেটওয়ার্ক ব্যবহার করুন"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"মোবাইল নেটওয়ার্ক উপলভ্য না থাকলে, ওয়াই-ফাই ব্যবহার করুন"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"ওয়াই-ফাইয়ের মাধ্যমে কল করুন। ওয়াই-ফাই বিঘ্নিত হলে, কল বন্ধ হয়ে যাবে।"</string>
@@ -1166,7 +1168,7 @@
<string name="accessibility_category_personal" msgid="1423427301759058762">"ব্যক্তিগত প্রোফাইল অ্যাকাউন্টগুলি"</string>
<string name="accessibility_work_account_title" msgid="3195468574776888011">"কাজের অ্যাকাউন্ট - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
<string name="accessibility_personal_account_title" msgid="7251761883688839354">"ব্যক্তিগত অ্যাকাউন্ট - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
- <string name="search_settings" msgid="5809250790214921377">"সার্চ"</string>
+ <string name="search_settings" msgid="5809250790214921377">"Search"</string>
<string name="display_settings" msgid="1045535829232307190">"ডিসপ্লে"</string>
<string name="accelerometer_title" msgid="2427487734964971453">"অটো-রোটেট স্ক্রিন"</string>
<string name="color_mode_title" msgid="8164858320869449142">"রঙ"</string>
@@ -1524,8 +1526,8 @@
<string name="storage_wizard_ready_v2_internal_moved_body" msgid="4133133596316768033">"আপনার কন্টেন্ট <xliff:g id="NAME_0">^1</xliff:g>-এ সরানো হয়েছে। \n\nএই <xliff:g id="NAME_1">^2</xliff:g>টি পরিচালনা করতে "<b>"সেটিংস > স্টোরেজে"</b>" যান।"</string>
<string name="battery_status_title" msgid="8731200319740671905">"ব্যাটারি স্থিতি"</string>
<string name="battery_level_title" msgid="5207775387973771646">"ব্যাটারি স্তর"</string>
- <string name="apn_settings" msgid="8130776653826271664">"APNগুলি"</string>
- <string name="apn_edit" msgid="4350571070853305357">"অ্যাক্সেস পয়েন্ট সম্পাদনা করুন"</string>
+ <string name="apn_settings" msgid="8130776653826271664">"APN"</string>
+ <string name="apn_edit" msgid="4350571070853305357">"অ্যাক্সেস পয়েন্ট এডিট করুন"</string>
<string name="apn_not_set" msgid="5344235604466825691">"সেট করা নেই"</string>
<string name="apn_name" msgid="8431432886706852226">"নাম"</string>
<string name="apn_apn" msgid="190519449579357696">"APN"</string>
@@ -1544,14 +1546,14 @@
<string name="apn_auth_type_pap" msgid="6155876141679480864">"PAP"</string>
<string name="apn_auth_type_chap" msgid="5484031368454788686">"CHAP"</string>
<string name="apn_auth_type_pap_chap" msgid="2977833804460109203">"PAP বা CHAP"</string>
- <string name="apn_type" msgid="6725346490902871146">"APN এর প্রকার"</string>
+ <string name="apn_type" msgid="6725346490902871146">"APN-এর প্রকার"</string>
<string name="apn_protocol" msgid="1240197323563960912">"APN প্রোটোকল"</string>
<string name="apn_roaming_protocol" msgid="6913336248771263497">"APN রোমিং প্রোটোকল"</string>
<string name="carrier_enabled" msgid="1819916725305365581">"APN সক্ষম/অক্ষম করুন"</string>
<string name="carrier_enabled_summaryOn" msgid="6219221535461945771">"APN সক্ষম"</string>
<string name="carrier_enabled_summaryOff" msgid="4093019532796386622">"APN অক্ষম"</string>
<string name="bearer" msgid="4378444317087536401">"বিয়ারার"</string>
- <string name="mvno_type" msgid="3150755279048149624">"MVNO প্রকারের"</string>
+ <string name="mvno_type" msgid="3150755279048149624">"MVNO প্রকার"</string>
<string name="mvno_match_data" msgid="629287305803195245">"MVNO মান"</string>
<string name="menu_delete" msgid="8646081395424055735">"APN মুছে দিন"</string>
<string name="menu_new" msgid="7529219814721969024">"নতুন APN"</string>
@@ -1565,8 +1567,8 @@
<string name="error_adding_apn_type" msgid="671634520340569678">"পরিষেবা প্রদানকারী %s এর মতো APN যোগ করার অনুমতি দেয়নি।"</string>
<string name="restore_default_apn" msgid="7195266404077471007">"ডিফল্ট APN সেটিংস পুনরুদ্ধার করা হচ্ছে।"</string>
<string name="menu_restore" msgid="3799288817317293115">"ডিফল্টে রিসেট করুন"</string>
- <string name="restore_default_apn_completed" msgid="5671734152740058937">"ডিফল্ট APN সেটিংস আবার সেট করা সম্পন্ন হয়েছে।"</string>
- <string name="reset_dashboard_title" msgid="7084966342252178530">"রিসেটের বিকল্পগুলি"</string>
+ <string name="restore_default_apn_completed" msgid="5671734152740058937">"ডিফল্ট APN সেটিংস রিসেট করা হয়েছে।"</string>
+ <string name="reset_dashboard_title" msgid="7084966342252178530">"রিসেট করার বিকল্প"</string>
<string name="reset_dashboard_summary" msgid="8778383341461126642">"নেটওয়ার্ক, অ্যাপ, অথবা ডিভাইস রিসেট করা যায়"</string>
<string name="reset_network_title" msgid="8944059136930806211">"ওয়াই-ফাই, মোবাইল ও ব্লুটুথ রিসেট"</string>
<string name="reset_network_desc" msgid="4982633363916261109">"এগুলি সহ সমস্ত নেটওয়ার্ক সেটিংস আবার সেট করবে:\n\n"<li>"ওয়াই ফাই "</li>\n<li>"সেলুলার ডাটা "</li>\n<li>"ব্লুটুথ"</li></string>
@@ -1789,7 +1791,7 @@
<string name="applications_settings_header" msgid="3766501606045211098">"অ্যাপ সেটিংস"</string>
<string name="install_applications" msgid="7745902974984889179">"অজানা উৎসগুলি"</string>
<string name="install_applications_title" msgid="8164828577588659496">"সব অ্যাপ্লিকেশান উৎসকে অনুমতি দিন"</string>
- <string name="recent_app_category_title" msgid="7688788038277126727">"সম্প্রতি চালু করা অ্যাপ"</string>
+ <string name="recent_app_category_title" msgid="7688788038277126727">"সম্প্রতি ব্যবহার করা অ্যাপ"</string>
<string name="see_all_apps_title" msgid="6435061912110347474">"<xliff:g id="COUNT">%1$d</xliff:g>টি অ্যাপের সবকটি দেখুন"</string>
<string name="install_all_warning" product="tablet" msgid="4580699862358542727">"অজানা অ্যাপের দ্বারা আপনার ট্যাবলেট এবং ব্যক্তিগত তথ্য আক্রান্ত হওয়ার সম্ভাবনা সবচেয়ে বেশি। এই উৎস থেকে আসা অ্যাপগুলি ইনস্টল করে আপনি সম্মত হচ্ছেন যে সেগুলি ব্যবহারের ফলে আপনার ট্যাবলেটের কোনো ক্ষতি হলে বা ডেটা হারিয়ে গেলে তার জন্য আপনিই দায়ী থাকবেন।"</string>
<string name="install_all_warning" product="default" msgid="7445839116997296358">"অজানা অ্যাপের দ্বারা আপনার ফোন এবং ব্যক্তিগত তথ্য আক্রান্ত হওয়ার সম্ভাবনা সবচেয়ে বেশি। এই উৎস থেকে আসা অ্যাপগুলি ইনস্টল করে আপনি সম্মত হচ্ছেন যে সেগুলি ব্যবহারের ফলে আপনার ফোনের কোনো ক্ষতি হলে বা ডেটা হারিয়ে গেলে তার জন্য আপনিই দায়ী থাকবেন।"</string>
@@ -1888,7 +1890,7 @@
<string name="app_disable_dlg_positive" msgid="5508828271100168073">"অ্যাপ্লিকেশান অক্ষম করুন"</string>
<string name="app_disable_dlg_text" msgid="9221864774943530281">"আপনি এই অ্যাপ বন্ধ করে দিলে, Android এবং অন্যান্য অ্যাপ যেভাবে কাজ করার কথা সেইভাবে আর নাও কাজ করতে পারে। মনে রাখবেন যে এই অ্যাপ আপনার ডিভাইসে আগে থেকেই ইনস্টল করা আছে বলে এটি আপনি মুছে ফেলতে পারবেন না। বন্ধ করার মাধ্যমে, আপনি অ্যাপটিকে বন্ধ করে লুকিয়ে রাখতে পারেন।"</string>
<string name="app_disable_notifications_dlg_title" msgid="699530661413553928">"বিজ্ঞপ্তিগুলি বন্ধ করবেন?"</string>
- <string name="app_install_details_group_title" msgid="2909597319422976921">"স্টোর"</string>
+ <string name="app_install_details_group_title" msgid="2909597319422976921">"Store"</string>
<string name="app_install_details_title" msgid="6954953384372934881">"অ্যাপের বিশদ বিবরণ"</string>
<string name="app_install_details_summary" msgid="6612222941121363940">"অ্যাপটিকে <xliff:g id="APP_STORE">%1$s</xliff:g> থেকে ইনস্টল করা হয়েছে"</string>
<string name="instant_app_details_summary" msgid="6384264315914966114">"<xliff:g id="APP_STORE">%1$s</xliff:g> সম্পর্কে আরও তথ্য"</string>
@@ -1970,7 +1972,7 @@
<string name="show_ime" msgid="7322620473198763563">"ভার্চুয়াল কীবোর্ড দেখুন"</string>
<string name="show_ime_summary" msgid="3246628154011464373">"ফিজিক্যাল কীবোর্ড সক্রিয় থাকার সময় এটিকে স্ক্রীনে রাখুন"</string>
<string name="keyboard_shortcuts_helper" msgid="6574386807271399788">"কীবোর্ড শর্টকাট সাহায্যকারী"</string>
- <string name="keyboard_shortcuts_helper_summary" msgid="8024313306403779742">"উপলব্ধ শর্টকাটগুলি দেখান"</string>
+ <string name="keyboard_shortcuts_helper_summary" msgid="8024313306403779742">"উপলভ্য শর্টকাটগুলি দেখান"</string>
<string name="language_and_input_for_work_category_title" msgid="2053255944038892588">"অফিসের প্রোফাইলের কীবোর্ড ও টুল"</string>
<string name="virtual_keyboards_for_work_title" msgid="3968291646938204523">"অফিসের জন্য ভার্চুয়াল কীবোর্ড"</string>
<string name="default_keyboard_layout" msgid="9171704064451242230">"ডিফল্ট"</string>
@@ -2036,7 +2038,7 @@
<string name="accessibility_settings_title" msgid="1687226556576913576">"সহজ ব্যবহার সেটিংস"</string>
<string name="accessibility_settings_summary" msgid="5742379519336396561">"স্ক্রিন রিডার, ডিসপ্লে, ইন্টারঅ্যাকশন নিয়ন্ত্রণগুলি"</string>
<string name="vision_settings_title" msgid="7315352351051423944">"দৃষ্টিশক্তি সেটিংস"</string>
- <string name="vision_settings_description" msgid="3476589459009287332">"আপনি এই ডিভাইসটি নিজের পছন্দমত সেট করতে পারেন৷ এই অ্যাক্সেসযোগ্যতার বৈশিষ্ট্যগুলি পরে সেটিংসে গিয়ে পরিবর্তন করা যাবে৷"</string>
+ <string name="vision_settings_description" msgid="3476589459009287332">"আপনি এই ডিভাইসটি নিজের পছন্দমত সেট করতে পারেন৷ এই অ্যাক্সেসিবিলিটি বৈশিষ্ট্যগুলি পরে সেটিংসে গিয়ে পরিবর্তন করা যাবে৷"</string>
<string name="vision_settings_suggestion_title" msgid="7268661419110951128">"হরফের মাপ পরিবর্তন করুন"</string>
<string name="screen_reader_category_title" msgid="6300714148519645544">"স্ক্রিন রিডার"</string>
<string name="audio_and_captions_category_title" msgid="6140472938769619212">"অডিও এবং অন-স্ক্রিন পাঠ্য"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"বিজ্ঞপ্তির ভাইব্রেশন"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"রিং ভাইব্রেশন"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"স্পর্শ করলে ভাইব্রেশন"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"পরিষেবা ব্যবহার করুন"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"কালার কারেকশন ব্যবহার করুন"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"ক্যাপশন ব্যবহার করুন"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"পরিষেবা ব্যবহার করুন"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"কালার কারেকশন ব্যবহার করুন"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"ক্যাপশন ব্যবহার করুন"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"এগিয়ে যান"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"হিয়ারিং এড"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"কোনও হিয়ারিং এড কানেক্ট করা নেই"</string>
@@ -2209,7 +2211,7 @@
<string name="print_feature_state_off" msgid="208580346723223688">"বন্ধ করুন"</string>
<string name="print_menu_item_add_service" msgid="6803000110578493782">"পরিষেবা যোগ করুন"</string>
<string name="print_menu_item_add_printer" msgid="8529196211179574921">"প্রিন্টার যোগ করুন"</string>
- <string name="print_menu_item_search" msgid="1165316329772287360">"সার্চ করুন"</string>
+ <string name="print_menu_item_search" msgid="1165316329772287360">"Search"</string>
<string name="print_searching_for_printers" msgid="6538687129687642542">"প্রিন্টার খোঁজা হচ্ছে"</string>
<string name="print_service_disabled" msgid="6376344992705893436">"পরিষেবা অক্ষমিত"</string>
<string name="print_print_jobs" msgid="7357841034181762157">"প্রিন্ট কাজগুলি"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"চালু করুন"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"ব্যাটারি সেভার ব্যবহার করুন"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"ব্যাটারি সেভার ব্যবহার করুন"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"স্বয়ংক্রিয়ভাবে চালু হবে"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"কখনও নয়"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"<xliff:g id="PERCENT">%1$s</xliff:g>ব্যাটারি আছে"</string>
@@ -2617,7 +2619,7 @@
<string name="sync_one_time_sync" msgid="6005174168405784256">"এখনই সিঙ্ক করতে আলতো চাপুন<xliff:g id="LAST_SYNC_TIME">
%1$s</xliff:g>"</string>
<string name="sync_gmail" msgid="4457967084840001296">"Gmail"</string>
- <string name="sync_calendar" msgid="6573708019827519372">"ক্যালেন্ডার"</string>
+ <string name="sync_calendar" msgid="6573708019827519372">"Calendar"</string>
<string name="sync_contacts" msgid="5687434785723746534">"পরিচিতিগুলি"</string>
<string name="sync_plug" msgid="6703804441408427257"><font fgcolor="#ffffffff">"Google সমন্বয়ে স্বাগতম!"</font>" \nআপনি যেখানেই থাকুন না কেন আপনার পরিচিতি, অ্যাপয়েন্টমেন্ট, এবং আরো অনেক কিছু অ্যাক্সেস করার জন্য ডেটা সিঙ্ক করতে একটি Google এর একটি পদক্ষেপ।"</string>
<string name="header_application_sync_settings" msgid="4581847153669774489">"অ্যাপ্লিকেশান সমন্বয় সেটিংস"</string>
@@ -2669,7 +2671,7 @@
<string name="data_usage_cellular_data_summary" msgid="9162777397135709280">"সীমায় পৌঁছে বিরতি দেওয়া হয়েছে"</string>
<string name="account_settings_menu_auto_sync" msgid="2673669556006027506">"ডেটা স্বতঃসিঙ্ক"</string>
<string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"ব্যক্তিগত ডেটা স্বতঃসিঙ্ক"</string>
- <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"কার্যের ডাটা স্বতঃ সিঙ্ক"</string>
+ <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"কাজের ডেটা নিজে থেকে সিঙ্ক"</string>
<string name="data_usage_change_cycle" msgid="447761920472170031">"চক্র পরিবর্তন করুন..."</string>
<string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"ডেটা ব্যবহারের চক্র আবার সেট করতে মাসের দিন:"</string>
<string name="data_usage_empty" msgid="7981405723435034032">"এই সময়ের মধ্যে কোনো অ্যাপ্লিকেশান ডেট ব্যবহার করবে না।"</string>
@@ -2900,12 +2902,12 @@
<string name="user_exit_guest_confirm_title" msgid="4767911571671099844">"অতিথি সরাবেন?"</string>
<string name="user_exit_guest_confirm_message" msgid="6955182181145748919">"এই সেশনের সব অ্যাপ্লিকেশান ও ডেটা মুছে ফেলা হবে।"</string>
<string name="user_exit_guest_dialog_remove" msgid="1878866060881115716">"সরান"</string>
- <string name="user_enable_calling" msgid="864760054792249503">"ফোন কলগুলিকে চালু করুন"</string>
- <string name="user_enable_calling_sms" msgid="3450252891736718793">"ফোন কলগুলিকে এবং SMS চালু করবেন?"</string>
+ <string name="user_enable_calling" msgid="864760054792249503">"ফোন কলের সুবিধা চালু করুন"</string>
+ <string name="user_enable_calling_sms" msgid="3450252891736718793">"ফোন কল এবং এসএমএস চালু করবেন?"</string>
<string name="user_remove_user" msgid="3687544420125911166">"ব্যবহারকারীর অ্যাকাউন্ট মুছে দিন"</string>
<string name="user_enable_calling_confirm_title" msgid="1141612415529158542">"ফোন কলগুলিকে চালু করবেন?"</string>
<string name="user_enable_calling_confirm_message" msgid="2490126715153125970">"কলের ইতিহাস এই ব্যবহারকারীর সাথে শেয়ার করা হবে।"</string>
- <string name="user_enable_calling_and_sms_confirm_title" msgid="4153856398523366976">"ফোন কলগুলিকে এবং SMS চালু করবেন?"</string>
+ <string name="user_enable_calling_and_sms_confirm_title" msgid="4153856398523366976">"ফোন কল এবং এসএমএস চালু করবেন?"</string>
<string name="user_enable_calling_and_sms_confirm_message" msgid="3278802798876095734">"কল ও SMS ইতিহাস এই ব্যবহারকারীর সাথে শেয়ার করা হবে।"</string>
<string name="emergency_info_title" msgid="1522609271881425375">"জরুরি তথ্য"</string>
<string name="emergency_info_summary" msgid="7280464759837387342">"<xliff:g id="USER_NAME">%1$s</xliff:g>-এর তথ্য ও পরিচিতি"</string>
@@ -2915,12 +2917,12 @@
<string name="nfc_payment_settings_title" msgid="5070077706735415291">"ট্যাপ করে পে করা"</string>
<string name="nfc_payment_how_it_works" msgid="7607901964687787177">"এটি কীভাবে কাজ করে"</string>
<string name="nfc_payment_no_apps" msgid="8844440783395420860">"আপনার ফোন দিয়ে অর্থপ্রদান করুন"</string>
- <string name="nfc_payment_default" msgid="7869273092463612271">"অর্থপ্রদান ডিফল্ট"</string>
+ <string name="nfc_payment_default" msgid="7869273092463612271">"পেমেন্ট ডিফল্ট"</string>
<string name="nfc_payment_default_not_set" msgid="955804193510335338">"সেট করা নেই"</string>
<string name="nfc_payment_app_and_desc" msgid="102312684211458190">"<xliff:g id="APP">%1$s</xliff:g> - <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
<string name="nfc_payment_use_default" msgid="3098724195746409476">"ডিফল্ট ব্যবহার করুন"</string>
<string name="nfc_payment_favor_default" msgid="7555356982142464260">"সবসময়"</string>
- <string name="nfc_payment_favor_open" msgid="3739055715000436749">"অন্য কোনো অর্থপ্রদান অ্যাপ্লিকেশান খুলে থাকার সময় ব্যতিত"</string>
+ <string name="nfc_payment_favor_open" msgid="3739055715000436749">"অন্য কোনও পেমেন্ট অ্যাপ খোলা না থাকলে"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"ট্যাপ করে অর্থপ্রদান করুন টার্মিন্যালে, এর মাধ্যমে পেমেন্ট করুন:"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"টার্মিনালে পেমেন্টের পদ্ধতি"</string>
<string name="nfc_how_it_works_content" msgid="9174575836302449343">"একটি পেমেন্টের অ্যাপ্লিকেশান সেট-আপ করুন৷ তারপরে যোগাযোগহীন চিহ্ন সহ কোনো টার্মিনালের উপর শুধু আপনার ফোনের পিছনের দিকটি ধরুন৷"</string>
@@ -3039,7 +3041,7 @@
<string name="connected_devices_dashboard_no_driving_mode_summary" msgid="3524409078596318803">"ব্লুটুথ, এনএফসি"</string>
<string name="connected_devices_dashboard_no_driving_mode_no_nfc_summary" msgid="7881286613528299400">"ব্লুটুথ"</string>
<string name="app_and_notification_dashboard_title" msgid="8448096608058843730">"অ্যাপ ও বিজ্ঞপ্তি"</string>
- <string name="app_and_notification_dashboard_summary" msgid="4165181440955038145">"অ্যাসিস্ট্যান্ট, সাম্প্রতিক অ্যাপ, ডিফল্ট অ্যাপ"</string>
+ <string name="app_and_notification_dashboard_summary" msgid="4165181440955038145">"Assistant, সাম্প্রতিক অ্যাপ, ডিফল্ট অ্যাপ"</string>
<string name="notification_settings_work_profile" msgid="7190550347842400029">"কাজের প্রোফাইলে অ্যাপের জন্য বিজ্ঞপ্তি অ্যাক্সেস উপলভ্য নয়।"</string>
<string name="account_dashboard_title" msgid="4734300939532555885">"অ্যাকাউন্ট"</string>
<string name="account_dashboard_default_summary" msgid="6822549669771936206">"কোনও অ্যাকাউন্ট যোগ করা হয়নি"</string>
@@ -3358,7 +3360,7 @@
<string name="notifications_sent_daily" msgid="6874886521964822824">"দৈনিক ~<xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="notifications_sent_weekly" msgid="5859675428990259432">"প্রতি সপ্তাহে ~<xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="notifications_sent_never" msgid="237997329598144638">"কখনও না"</string>
- <string name="manage_notification_access_title" msgid="5348743662189787547">"বিজ্ঞপ্তির অ্যাক্সেস"</string>
+ <string name="manage_notification_access_title" msgid="5348743662189787547">"বিজ্ঞপ্তি অ্যাক্সেস"</string>
<string name="work_profile_notification_access_blocked_summary" msgid="8148871282484870576">"কর্মস্থলের প্রোফাইলের বিজ্ঞপ্তিতে অ্যাক্সেস ব্লক করা হয়েছে"</string>
<string name="manage_notification_access_summary_zero" msgid="236809421271593016">"অ্যাপ্লিকেশানগুলি বিজ্ঞপ্তি পড়তে পারে না"</string>
<plurals name="manage_notification_access_summary_nonzero" formatted="false" msgid="8496218948429646792">
@@ -3675,7 +3677,7 @@
<string name="default_app" msgid="8861276008866619872">"(ডিফল্ট)"</string>
<string name="system_app" msgid="4111402206594443265">"(সিস্টেম)"</string>
<string name="system_default_app" msgid="1454719098589351197">"(সিস্টেম ডিফল্ট)"</string>
- <string name="apps_storage" msgid="5658466038269046038">"অ্যাপ্লিকেশনের স্টোরেজ"</string>
+ <string name="apps_storage" msgid="5658466038269046038">"অ্যাপ স্টোরেজ"</string>
<string name="usage_access" msgid="2023443456361489516">"ব্যবহারের তথ্যে অ্যাক্সেস"</string>
<string name="permit_usage_access" msgid="3321727608629752758">"ব্যবহার অ্যাক্সেসের অনুমতি"</string>
<string name="app_usage_preference" msgid="5691545073101551727">"পছন্দের অ্যাপ্লিকেশানগুলির ব্যবহার"</string>
@@ -3707,10 +3709,10 @@
<string name="high_power_filter_on" msgid="5294209328473386403">"অপ্টিমাইজ করা নেই"</string>
<string name="high_power_on" msgid="3573501822510580334">"অপ্টিমাইজ করা নেই"</string>
<string name="high_power_off" msgid="5906679734326490426">"ব্যাটারির ব্যবহার অপ্টিমাইজ করা হচ্ছে"</string>
- <string name="high_power_system" msgid="739584574711292753">"ব্যাটারি অপ্টিমাইজেশান উপলব্ধ নেই"</string>
+ <string name="high_power_system" msgid="739584574711292753">"ব্যাটারি অপ্টিমাইজেশান উপলভ্য নেই"</string>
<string name="high_power_desc" msgid="333756885680362741">"ব্যাটারি অপ্টিমাইজেশান প্রয়োগ করবেন না। আরো দ্রুত আপনার ব্যাটারির চার্জ শেষ হয়ে যেতে পারে৷"</string>
<string name="high_power_prompt_title" msgid="2805745781720454052">"অ্যাপটিকে সবসময় পটভূমিতে চালু রাখবেন?"</string>
- <string name="high_power_prompt_body" msgid="8067395096053552289">"<xliff:g id="APP_NAME">%1$s</xliff:g> কে সবসময় পটভূমিতে চালু রাখলে ব্যাটারির ক্ষমতা কমে যেতে পারে। \n\nআপনি পরে সেটিংস > অ্যাপ্স ও বিজ্ঞপ্তি থেকে এটি পরিবর্তন করতে পারেন।"</string>
+ <string name="high_power_prompt_body" msgid="8067395096053552289">"<xliff:g id="APP_NAME">%1$s</xliff:g>-কে সবসময় পটভূমিতে চালু রাখলে ব্যাটারি বেশিদিন নাও টিকতে পারে। \n\nআপনি পরে সেটিংস > অ্যাপ ও বিজ্ঞপ্তি বিকল্প থেকে এটি পরিবর্তন করতে পারেন।"</string>
<string name="battery_summary" msgid="4345690800899981339">"শেষ বার সম্পূর্ণ চার্জ করার পর থেকে <xliff:g id="PERCENTAGE">%1$s</xliff:g> ব্যবহার হয়েছে"</string>
<string name="battery_power_management" msgid="2853925857548647969">"শক্তি পরিচালনা"</string>
<string name="no_battery_summary" msgid="4105932628367471314">"শেষ সম্পূর্ণ চার্জ করার সময় থেকে কোনো ব্যাটারি ব্যবহার করা হয়নি"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"যদি ডিভাইসটি লক থাকে তাহলে, বিজ্ঞপ্তিগুলির মধ্যে উত্তর বা অন্যান্য পাঠ্য লেখা আটকায়"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"ডিফল্ট বানান পরিক্ষক"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"বানান পরীক্ষক চয়ন করুন"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"বানান পরিক্ষক ব্যবহার করুন"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"বানান-পরীক্ষক ফিচার ব্যবহার করুন"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"নির্বাচন করা হয়নি"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(কোনো কিছুই নয়)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4069,7 +4071,7 @@
<string name="premium_sms_warning" msgid="7604011651486294515">"প্রিমিয়াম SMS এর জন্য অর্থ খরচ হতে পারে এবং আপনার পরিষেবা প্রদানকারীর বিলে যোগ করা হবে৷ আপনি যদি কোনো অ্যাপ্লিকেশানের জন্য অনুমতি সক্ষম করেন তাহলে আপনি সেই অ্যাপ্লিকেশানটি ব্যবহার করে প্রিমিয়াম SMS পাঠাতে পারবেন৷"</string>
<string name="premium_sms_access" msgid="4550027460595822851">"প্রিমিয়াম SMS অ্যাক্সেস"</string>
<string name="bluetooth_disabled" msgid="6588102116819268238">"বন্ধ আছে"</string>
- <string name="bluetooth_connected_summary" msgid="439920840053965217">"<xliff:g id="ID_1">%1$s</xliff:g> এর সাথে কানেক্ট আছে"</string>
+ <string name="bluetooth_connected_summary" msgid="439920840053965217">"<xliff:g id="ID_1">%1$s</xliff:g>-এ কানেক্ট আছে"</string>
<string name="bluetooth_connected_multiple_devices_summary" msgid="596205630653123250">"একাধিক ডিভাইসের সাথে কানেক্ট আছে"</string>
<string name="demo_mode" msgid="3831081808592541104">"সিস্টেম UI ডেমো মোড"</string>
<string name="dark_ui_mode" msgid="703844190192599217">"থিম"</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"স্টোরেজ খালি করার কাজে সাহায্য করার জন্য, স্টোরেজ ম্যানেজার আপনার ডিভাইস থেকে ব্যাক-আপ নেওয়া ফটো এবং ভিডিওগুলিকে সরিয়ে দেয়৷"</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"ফটো এবং ভিডিওগুলিকে সরান"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"সঞ্চয়স্থানের পরিচালক"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"স্টোরেজ পরিচালক ব্যবহার করুন"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"স্টোরেজ ম্যানেজার ব্যবহার করুন"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"অটোমেটিক"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"ম্যানুয়াল"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"এখনই জায়গা খালি করুন"</string>
@@ -4153,7 +4155,7 @@
<string name="instant_apps_settings" msgid="879003203555847537">"ঝটপট অ্যাপের পছন্দগুলি"</string>
<string name="domain_url_section_title" msgid="206403507921518321">"ইনস্টল করা অ্যাপ"</string>
<string name="automatic_storage_manager_activation_warning" msgid="2630083316417707308">"আপনার স্টোরেজ এখন স্টোরেজ ম্যানেজারের দ্বারা পরিচালিত হচ্ছে"</string>
- <string name="account_for_section_header" msgid="5975241715840642563">"<xliff:g id="USER_NAME">%1$s</xliff:g> এর অ্যাকাউন্ট"</string>
+ <string name="account_for_section_header" msgid="5975241715840642563">"<xliff:g id="USER_NAME">%1$s</xliff:g>-এর অ্যাকাউন্ট"</string>
<string name="configure_section_header" msgid="6988981883075615136">"কনফিগার"</string>
<string name="auto_sync_account_title" msgid="2394463123733529506">"ডেটা অটোমেটিক সিঙ্ক হবে"</string>
<string name="auto_sync_personal_account_title" msgid="6844465157916100655">"ব্যাক্তিগত ডেটা অটোমেটিক সিঙ্ক করুন"</string>
@@ -4236,8 +4238,8 @@
<string name="storage_photos_videos" msgid="1890829312367477559">"ফটো এবং ভিডিওগুলি"</string>
<string name="storage_music_audio" msgid="3661289086715297149">"মিউজিক ও অডিও"</string>
<string name="storage_games" msgid="7740038143749092373">"গেম"</string>
- <string name="storage_other_apps" msgid="3202407095387420842">"অন্যান্য অ্যাপ্লিকেশান"</string>
- <string name="storage_files" msgid="2087824267937487880">"ফাইল"</string>
+ <string name="storage_other_apps" msgid="3202407095387420842">"অন্যান্য অ্যাপ"</string>
+ <string name="storage_files" msgid="2087824267937487880">"Files"</string>
<string name="storage_size_large_alternate" msgid="1317796542509105857">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" "<font size="20">"<xliff:g id="UNIT">^2</xliff:g>"</font></small>""</string>
<string name="storage_volume_total" msgid="5021484171514159913">"<xliff:g id="TOTAL">%1$s</xliff:g> এর মধ্যে ব্যবহার হয়েছে"</string>
<string name="storage_percent_full" msgid="6924662861545958442">"ব্যবহৃত"</string>
@@ -4323,7 +4325,7 @@
<string name="battery_suggestion_summary" msgid="2669070349482656490"></string>
<string name="gesture_prevent_ringing_screen_title" msgid="4173494225145223638">"রিং হওয়া বন্ধ করুন"</string>
<string name="gesture_prevent_ringing_title" msgid="8827963588425673557">"রিং হওয়া বন্ধ করতে পাওয়ার ও ভলিউম বাড়ানোর বোতাম একসাথে প্রেস করুন"</string>
- <string name="gesture_prevent_ringing_sound_title" msgid="8642330448721033641">"রিং হওয়া আটকানোর শর্টকাট"</string>
+ <string name="gesture_prevent_ringing_sound_title" msgid="8642330448721033641">"রিংয়ের আরওয়াজ আটকানোর শর্টকাট"</string>
<string name="prevent_ringing_option_vibrate" msgid="6456505293904544108">"ভাইব্রেশন হতে দিন"</string>
<string name="prevent_ringing_option_mute" msgid="53662688921253613">"মিউট করুন"</string>
<string name="prevent_ringing_option_none" msgid="1450985763137666231">"যেমন আছে থাক"</string>
@@ -4425,7 +4427,7 @@
<string name="preferred_network_mode_summary" msgid="388957154320426335">"নেটওয়ার্ক অপারেটিং মোড পরিবর্তন করুন"</string>
<string name="preferred_network_mode_dialogtitle" msgid="5448698073828567428">"পছন্দের নেটওয়ার্ক"</string>
<string name="carrier_settings_euicc" msgid="7723199738771996732">"পরিষেবা প্রদানকারী"</string>
- <string name="carrier_settings_version" msgid="2657511289029828425">"সেটিংসের ভার্সন"</string>
+ <string name="carrier_settings_version" msgid="2657511289029828425">"সেটিংস ভার্সন"</string>
<string name="call_category" msgid="3418535202893644015">"কল করা হচ্ছে"</string>
<string name="video_calling_settings_title" msgid="8011841542502156112">"পরিষেবা প্রদানকারীর ভিডিও কলিং"</string>
<string name="cdma_system_select_title" msgid="5620679296177526467">"সিস্টেমের বেছে নেওয়া"</string>
@@ -4471,7 +4473,7 @@
<string name="privacy_dashboard_title" msgid="8764930992456607513">"গোপনীয়তা"</string>
<string name="privacy_dashboard_summary" msgid="7916431309860824945">"অনুমতি, অ্যাকাউন্ট অ্যাক্টিভিটি, ব্যক্তিগত ডেটা"</string>
<string name="contextual_card_dismiss_remove" msgid="1750420285615827309">"সরান"</string>
- <string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"রাখুন"</string>
+ <string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"Keep"</string>
<string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"সাজেশনটি সরাতে চান?"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"সাজেশন সরিয়ে দেওয়া হয়েছে"</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"আগের অবস্থায় ফিরে যান"</string>
diff --git a/tests/CarDeveloperOptions/res/values-bs/arrays.xml b/tests/CarDeveloperOptions/res/values-bs/arrays.xml
index 1890771..3f5b753 100644
--- a/tests/CarDeveloperOptions/res/values-bs/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-bs/arrays.xml
@@ -72,7 +72,7 @@
<item msgid="5848277343965362748">"Autentifikacija..."</item>
<item msgid="3391238031431440676">"Dobivanje IP adrese…"</item>
<item msgid="5257597310494000224">"Povezano"</item>
- <item msgid="8472497592913050396">"Suspendirano"</item>
+ <item msgid="8472497592913050396">"Obustavljeno"</item>
<item msgid="1228072488815999109">"Prekidanje veze…"</item>
<item msgid="7253087004422991731">"Isključena"</item>
<item msgid="4169850917304751227">"Neuspješno"</item>
@@ -85,8 +85,8 @@
<item msgid="8058143476674427024">"Povezivanje na mrežu <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</item>
<item msgid="7547609081339573756">"Autentifikacija s mrežom <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
<item msgid="5145158315060185414">"Dohvaćanje IP adrese s mreže <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
- <item msgid="3283243151651124831">"Povezano na mrežu <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</item>
- <item msgid="6600156231416890902">"Suspendirano"</item>
+ <item msgid="3283243151651124831">"Povezano s mrežom <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</item>
+ <item msgid="6600156231416890902">"Obustavljeno"</item>
<item msgid="4133290864821295785">"Prekidanje veze s mrežom <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
<item msgid="3980154971187953257">"Isključena"</item>
<item msgid="2847316776634969068">"Neuspješno"</item>
@@ -202,7 +202,7 @@
<item msgid="3778273775365258534">"IS95A"</item>
</string-array>
<string-array name="mvno_type_entries">
- <item msgid="6984770764726663331">"Nema"</item>
+ <item msgid="6984770764726663331">"Ništa"</item>
<item msgid="1469208769491004112">"SPN"</item>
<item msgid="7556656048009090524">"IMSI"</item>
<item msgid="8636516530542473799">"GID"</item>
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"radi u pozadini"</item>
<item msgid="6423861043647911030">"jačina zvuka za pristupačnost"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Lokacija"</item>
+ <item msgid="6656077694190491067">"Lokacija"</item>
+ <item msgid="8790228218278477369">"Lokacija"</item>
+ <item msgid="7836406246005211990">"Vibriranje"</item>
+ <item msgid="3951439024549922598">"Čitaj kontakte"</item>
+ <item msgid="8802152411647068">"Promijeni kontakte"</item>
+ <item msgid="229544934599698735">"Čitaj zapisnik poziva"</item>
+ <item msgid="7396102294405899613">"Promijeni zapisnik poziva"</item>
+ <item msgid="3597797992398484655">"Čitanje kalendara"</item>
+ <item msgid="2705975774250907343">"Promijeni kalendar"</item>
+ <item msgid="4668747371441932697">"Lokacija"</item>
+ <item msgid="1487578921720243646">"Objavi obavještenje"</item>
+ <item msgid="4636080349724146638">"Lokacija"</item>
+ <item msgid="673510900286463926">"Pozovi telefon"</item>
+ <item msgid="542083422784609790">"Pročitaj SMS/MMS"</item>
+ <item msgid="1033780373029588436">"Piši SMS/MMS"</item>
+ <item msgid="5647111115517787488">"Primi SMS/MMS"</item>
+ <item msgid="8591105601108455893">"Primi SMS/MMS"</item>
+ <item msgid="7730995008517841903">"Primi SMS/MMS"</item>
+ <item msgid="2613033109026626086">"Primi SMS/MMS"</item>
+ <item msgid="3037159047591081136">"Slanje SMS-a/MMS-a"</item>
+ <item msgid="4726682243833913568">"Pročitaj SMS/MMS"</item>
+ <item msgid="6555678522277865572">"Piši SMS/MMS"</item>
+ <item msgid="6981734935578130884">"Promijeni postavke"</item>
+ <item msgid="8705854389991425629">"Crtaj preko"</item>
+ <item msgid="5861356020344153651">"Pristup obavještenjima"</item>
+ <item msgid="78432174621628659">"Fotoaparat"</item>
+ <item msgid="3986116419882154794">"Snimi zvuk"</item>
+ <item msgid="4516840825756409490">"Reproduciraj zvuk"</item>
+ <item msgid="6811712502798183957">"Pročitaj sadržaj međumemorije"</item>
+ <item msgid="2780369012602289114">"Promijeni međumemoriju"</item>
+ <item msgid="2331359440170850868">"Dugmad za medije"</item>
+ <item msgid="6133599737122751231">"Audio fokus"</item>
+ <item msgid="6844485713404805301">"Centar za upravljanje zvukom"</item>
+ <item msgid="1600379420669104929">"Jačina glasa"</item>
+ <item msgid="6296768210470214866">"Jačina zvuka zvona"</item>
+ <item msgid="510690696071629241">"Jačina zvuka medija"</item>
+ <item msgid="406861638631430109">"Jačina zvuka alarma"</item>
+ <item msgid="4715864795872233884">"Jačina zvuka za obavještenja"</item>
+ <item msgid="2311478519251301183">"Jačina zvuka za Bluetooth vezu"</item>
+ <item msgid="5133991377896747027">"Drži aktivnim"</item>
+ <item msgid="2464189519136248621">"Lokacija"</item>
+ <item msgid="2062677934050803037">"Lokacija"</item>
+ <item msgid="1735171933192715957">"Preuzmi statistiku korištenja"</item>
+ <item msgid="1014093788778383554">"Isključi/uključi mikrofon"</item>
+ <item msgid="4199297950608622850">"Prikaži toast poruku"</item>
+ <item msgid="2527962435313398821">"Projektuj sadržaj medija"</item>
+ <item msgid="5117506254221861929">"Aktiviraj VPN"</item>
+ <item msgid="8291198322681891160">"Pozadinska slika za pisanje"</item>
+ <item msgid="7106921284621230961">"Asistent za podešavanje strukture"</item>
+ <item msgid="4496533640894624799">"Asistent za snimak ekrana"</item>
+ <item msgid="2598847264853993611">"Čitaj podatke o stanju telefona"</item>
+ <item msgid="9215610846802973353">"Dodaj govornu poštu"</item>
+ <item msgid="9186411956086478261">"Koristi SIP"</item>
+ <item msgid="6884763100104539558">"Procesiraj odlazni poziv"</item>
+ <item msgid="125513972170580692">"Otisak prsta"</item>
+ <item msgid="2556071024281275619">"Tjelesni senzori"</item>
+ <item msgid="617168514928339387">"Čita informacije info servisā"</item>
+ <item msgid="7134693570516523585">"Lažna lokacija"</item>
+ <item msgid="7224489175375229399">"Čitaj sadržaj pohrane"</item>
+ <item msgid="8472735063903258202">"Piši u pohranu"</item>
+ <item msgid="4069276819909595110">"Uključi ekran"</item>
+ <item msgid="1228338896751121025">"Pregledaj račune"</item>
+ <item msgid="3181581793459233672">"Radi u pozadini"</item>
+ <item msgid="2340936043025374076">"Jačina zvuka za pristupačnost"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Kratko"</item>
<item msgid="4816511817309094890">"Srednja"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Nikada ne dozvoli"</item>
<item msgid="8184570120217958741">"Uvijek dozvoli"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normalno"</item>
+ <item msgid="5101233285497327432">"Umjerena"</item>
+ <item msgid="1555861583162930714">"Nisko"</item>
+ <item msgid="1719683776264798117">"Kritična"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normalna"</item>
+ <item msgid="6107138933849816768">"Umjerena"</item>
+ <item msgid="182695359839047859">"Nisko"</item>
+ <item msgid="8577246509202964244">"Kritično"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Uporna"</item>
<item msgid="167418068739176448">"Maksimalna aktivnost"</item>
@@ -377,9 +453,9 @@
<item msgid="6248998242443333892">"Keširano (prazno)"</item>
</string-array>
<string-array name="color_picker">
- <item msgid="3151827842194201728">"Teal"</item>
+ <item msgid="3151827842194201728">"Plavozelena"</item>
<item msgid="3228505970082457852">"Plava"</item>
- <item msgid="6590260735734795647">"Indigo"</item>
+ <item msgid="6590260735734795647">"Indigoplava"</item>
<item msgid="3521763377357218577">"Ljubičasta"</item>
<item msgid="5932337981182999919">"Ružičasta"</item>
<item msgid="5642914536624000094">"Crvena"</item>
diff --git a/tests/CarDeveloperOptions/res/values-bs/strings.xml b/tests/CarDeveloperOptions/res/values-bs/strings.xml
index 372210d..c8883da 100644
--- a/tests/CarDeveloperOptions/res/values-bs/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-bs/strings.xml
@@ -67,7 +67,7 @@
<string name="radioInfo_data_disconnected" msgid="5311119240521915279">"Isključena"</string>
<string name="radioInfo_data_connecting" msgid="47095003276717745">"Povezivanje"</string>
<string name="radioInfo_data_connected" msgid="3755289851642913750">"Povezano"</string>
- <string name="radioInfo_data_suspended" msgid="5013451375409737795">"Suspendirano"</string>
+ <string name="radioInfo_data_suspended" msgid="5013451375409737795">"Obustavljeno"</string>
<string name="radioInfo_unknown" msgid="3148839102896278859">"Nepoznato"</string>
<string name="radioInfo_display_packets" msgid="5472652398031589527">"paketi"</string>
<string name="radioInfo_display_bytes" msgid="2357292401820837630">"bajtova"</string>
@@ -84,8 +84,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Smanjite ili povećajte tekst na ekranu."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Napravi manji"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Napravi veći"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Uzorak teksta"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Čarobnjak iz Oza"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Poglavlje 11: Smaragdni grad Oz"</string>
@@ -279,8 +278,8 @@
<string name="dlg_remove_locales_error_title" msgid="9090578326002163975">"Ne mogu se ukloniti svi jezici"</string>
<string name="dlg_remove_locales_error_message" msgid="6799897638891903618">"Zadržite najmanje jedan preferirani jezik"</string>
<string name="locale_not_translated" msgid="7943669576006420058">"Možda nije dostupno u nekim aplikacijama"</string>
- <string name="action_drag_label_move_up" msgid="2074064283966078352">"Pomjeri prema gore"</string>
- <string name="action_drag_label_move_down" msgid="1367989732445492291">"Pomjeri prema dolje"</string>
+ <string name="action_drag_label_move_up" msgid="2074064283966078352">"Pomjeri nagore"</string>
+ <string name="action_drag_label_move_down" msgid="1367989732445492291">"Pomjeri nadolje"</string>
<string name="action_drag_label_move_top" msgid="2033098833739345957">"Pomjeri na vrh"</string>
<string name="action_drag_label_move_bottom" msgid="5583190721915611567">"Pomjeri na dno"</string>
<string name="action_drag_label_remove" msgid="3362982836323040394">"Ukloni jezik"</string>
@@ -366,12 +365,12 @@
<string name="owner_info_settings_summary" msgid="4208702251226725583">"Ništa"</string>
<string name="owner_info_settings_status" msgid="8049975536717685126">"<xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
<string name="owner_info_settings_edit_text_hint" msgid="2250029417257939706">"Npr. Edinov Android."</string>
- <string name="user_info_settings_title" msgid="1125111518759995748">"Podaci o korisniku"</string>
+ <string name="user_info_settings_title" msgid="1125111518759995748">"Informacije o korisniku"</string>
<string name="show_profile_info_on_lockscreen_label" msgid="5204282771893683026">"Prikazuj informacije o profilu na zaključ. ekranu"</string>
- <string name="profile_info_settings_title" msgid="4855892878512562551">"Podaci o profilu"</string>
+ <string name="profile_info_settings_title" msgid="4855892878512562551">"Informacije o profilu"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Računi"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Lokacija"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Koristi lokaciju"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Koristi lokaciju"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Isključeno"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">Uključeno – <xliff:g id="COUNT_1">%1$d</xliff:g> aplikacija može pristupiti lokaciji</item>
@@ -445,8 +444,8 @@
<string name="security_settings_fingerprint_enroll_introduction_title" msgid="889558002683900544">"Otključavanje otiskom prsta"</string>
<string name="security_settings_fingerprint_enroll_introduction_title_unlock_disabled" msgid="7915504118657864429">"Koristite otisak prsta"</string>
<string name="security_settings_fingerprint_enroll_introduction_message" msgid="5586198131986682472">"Samo dodirnite senzor za otisak prsta da otključate telefon, odobrite kupovinu ili da se prijavite u aplikaciju. Pazite čije otiske prsta dodajete. Samo jedan dodani otisak može izvršiti sve navedeno.\n\nNapomena: Vaš otisak prsta može biti manje siguran od jakog uzorka ili PIN-a."</string>
- <string name="security_settings_fingerprint_enroll_introduction_message_unlock_disabled" msgid="1640839304679275468">"Pomoću otiska prsta otključavajte telefon ili odobravajte kupovinu.\n\nNapomena: otisak prsta ne možete koristiti za otključavanje ovog uređaja. Za više informacija, obratite se administratoru svoje organizacije"</string>
- <string name="security_settings_fingerprint_enroll_introduction_message_setup" msgid="6734490666593320711">"Pomoću otiska prsta otključavajte telefon ili odobravajte kupovinu.\n\nNapomena: otisak vašeg prsta može biti manje siguran od jakog uzorka ili PIN-a."</string>
+ <string name="security_settings_fingerprint_enroll_introduction_message_unlock_disabled" msgid="1640839304679275468">"Koristite otisak prsta da otključate telefon ili odobrite kupovinu.\n\nNapomena: otisak prsta ne možete koristiti za otključavanje ovog uređaja. Za više informacija, obratite se administratoru svoje organizacije"</string>
+ <string name="security_settings_fingerprint_enroll_introduction_message_setup" msgid="6734490666593320711">"Koristite otisak prsta da otključate telefon ili odobrite kupovinu.\n\nNapomena: otisak vašeg prsta može biti manje siguran od jakog uzorka ili PIN-a."</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel" msgid="9168637333731599827">"Otkaži"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue" msgid="271662150372486535">"Nastavi"</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel_setup" msgid="756928427429893070">"Preskoči"</string>
@@ -457,9 +456,9 @@
<string name="lock_screen_intro_skip_dialog_text_frp" product="tablet" msgid="7553945981266845264">"Funkcije za zaštitu uređaja neće se uključiti. Nećete moći spriječiti druge osobe da koriste ovaj tablet ako ga izgubite, ako vam ga ukradu ili ga vratite na početne postavke."</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="device" msgid="1378243257238015603">"Funkcije za zaštitu uređaja neće se uključiti. Nećete moći spriječiti druge osobe da koriste ovaj uređaj ako ga izgubite, ako vam ga ukradu ili ga vratite na početne postavke."</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="default" msgid="8395540117461339748">"Funkcije za zaštitu uređaja neće se uključiti. Nećete moći spriječiti druge osobe da koriste ovaj telefon ako ga izgubite, ako vam ga ukradu ili ga vratite na početne postavke."</string>
- <string name="lock_screen_intro_skip_dialog_text" product="tablet" msgid="7572334562915795226">"Funkcije za zaštitu uređaja neće se uključiti. Nećete moći spriječiti druge osobe da koriste ovaj tablet ako ga izgubite ili vam ga ukradu."</string>
- <string name="lock_screen_intro_skip_dialog_text" product="device" msgid="3819285334459763813">"Funkcije za zaštitu uređaja neće se uključiti. Nećete moći spriječiti druge osobe da koriste ovaj uređaj ako ga izgubite ili vam ga ukradu."</string>
- <string name="lock_screen_intro_skip_dialog_text" product="default" msgid="5361573789585652826">"Funkcije za zaštitu uređaja neće se uključiti. Nećete moći spriječiti druge osobe da koriste ovaj telefon ako ga izgubite ili vam ga ukradu."</string>
+ <string name="lock_screen_intro_skip_dialog_text" product="tablet" msgid="7572334562915795226">"Funkcije za zaštitu uređaja neće se uključiti. Nećete moći spriječiti druge osobe da koriste ovaj tablet ako ga izgubite ili ga neko ukrade."</string>
+ <string name="lock_screen_intro_skip_dialog_text" product="device" msgid="3819285334459763813">"Funkcije za zaštitu uređaja neće se uključiti. Nećete moći spriječiti druge osobe da koriste ovaj uređaj ako ga izgubite ili ga neko ukrade."</string>
+ <string name="lock_screen_intro_skip_dialog_text" product="default" msgid="5361573789585652826">"Funkcije za zaštitu uređaja neće se uključiti. Nećete moći spriječiti druge osobe da koriste ovaj telefon ako ga izgubite ili ga neko ukrade."</string>
<string name="skip_anyway_button_label" msgid="4437815969645175429">"Ipak preskoči"</string>
<string name="go_back_button_label" msgid="7310586887969860472">"Nazad"</string>
<string name="skip_lock_screen_dialog_button_label" msgid="6706047245716780006">"Preskoči"</string>
@@ -479,12 +478,12 @@
<string name="security_settings_fingerprint_enroll_enrolling_skip" msgid="1473280156532146933">"Uradit ću to kasnije"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_title" msgid="2816424026528101690">"Preskočiti postavljanje otiska prsta?"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_message" msgid="8139299964344809780">"Odabrali ste da koristite otisak prsta kao jedan od načina za otključavanja telefona. Ukoliko sada preskočite ovaj korak, morat ćete ga postaviti kasnije. Postavka traje otprilike samo jednu minutu."</string>
- <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="tablet" msgid="1384438077720821127">"Zaštitite tablet zaključavanjem ekrana tako da ga niko ne može koristiti ako ga izgubite ili vam ga ukradu. Zaključavanje ekrana vam je potrebno i za postavljanje otiska prsta. Dodirnite Otkaži, a zatim postavite PIN ili odaberite drugu opciju zaključavanja ekrana."</string>
- <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="device" msgid="7207112623501771824">"Zaštitite uređaj zaključavanjem ekrana tako da ga niko ne može koristiti ako ga izgubite ili vam ga ukradu. Zaključavanje ekrana vam je potrebno i za postavljanje otiska prsta. Dodirnite Otkaži, a zatim postavite PIN ili odaberite drugu opciju zaključavanja ekrana."</string>
- <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="default" msgid="7623975730623531606">"Zaštitite telefon zaključavanjem ekrana tako da ga niko ne može koristiti ako ga izgubite ili vam ga ukradu. Zaključavanje ekrana vam je potrebno i za postavljanje otiska prsta. Dodirnite Otkaži, a zatim postavite PIN ili odaberite drugu opciju zaključavanja ekrana."</string>
- <string name="face_lock_screen_setup_skip_dialog_text" product="tablet" msgid="2998863111689476550">"Zaštitite tablet zaključavanjem ekrana tako da ga niko ne može koristiti ako ga izgubite ili vam ga ukradu. Zaključavanje ekrana vam je potrebno i za postavljanje autentifikacije licem. Dodirnite Otkaži, a zatim postavite PIN ili odaberite drugu opciju zaključavanja ekrana."</string>
- <string name="face_lock_screen_setup_skip_dialog_text" product="device" msgid="6780557259734235952">"Zaštitite uređaj zaključavanjem ekrana tako da ga niko ne može koristiti ako ga izgubite ili vam ga ukradu. Zaključavanje ekrana vam je potrebno i za postavljanje autentifikacije licem. Dodirnite Otkaži, a zatim postavite PIN ili odaberite drugu opciju zaključavanja ekrana."</string>
- <string name="face_lock_screen_setup_skip_dialog_text" product="default" msgid="8541640018478926775">"Zaštitite telefon zaključavanjem ekrana tako da ga niko ne može koristiti ako ga izgubite ili vam ga ukradu. Zaključavanje ekrana vam je potrebno i za postavljanje autentifikacije licem. Dodirnite Otkaži, a zatim postavite PIN ili odaberite drugu opciju zaključavanja ekrana."</string>
+ <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="tablet" msgid="1384438077720821127">"Zaštitite tablet zaključavanjem ekrana tako da ga niko ne može koristiti ako ga izgubite ili ga neko ukrade. Zaključavanje ekrana vam je potrebno i za postavljanje otiska prsta. Dodirnite Otkaži, a zatim postavite PIN ili odaberite drugu opciju zaključavanja ekrana."</string>
+ <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="device" msgid="7207112623501771824">"Zaštitite uređaj zaključavanjem ekrana tako da ga niko ne može koristiti ako ga izgubite ili ga neko ukrade. Zaključavanje ekrana vam je potrebno i za postavljanje otiska prsta. Dodirnite Otkaži, a zatim postavite PIN ili odaberite drugu opciju zaključavanja ekrana."</string>
+ <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="default" msgid="7623975730623531606">"Zaštitite telefon zaključavanjem ekrana tako da ga niko ne može koristiti ako ga izgubite ili ga neko ukrade. Zaključavanje ekrana vam je potrebno i za postavljanje otiska prsta. Dodirnite Otkaži, a zatim postavite PIN ili odaberite drugu opciju zaključavanja ekrana."</string>
+ <string name="face_lock_screen_setup_skip_dialog_text" product="tablet" msgid="2998863111689476550">"Zaštitite tablet zaključavanjem ekrana tako da ga niko ne može koristiti ako ga izgubite ili ga neko ukrade. Zaključavanje ekrana vam je potrebno i za postavljanje autentifikacije licem. Dodirnite Otkaži, a zatim postavite PIN ili odaberite drugu opciju zaključavanja ekrana."</string>
+ <string name="face_lock_screen_setup_skip_dialog_text" product="device" msgid="6780557259734235952">"Zaštitite uređaj zaključavanjem ekrana tako da ga niko ne može koristiti ako ga izgubite ili ga neko ukrade. Zaključavanje ekrana vam je potrebno i za postavljanje autentifikacije licem. Dodirnite Otkaži, a zatim postavite PIN ili odaberite drugu opciju zaključavanja ekrana."</string>
+ <string name="face_lock_screen_setup_skip_dialog_text" product="default" msgid="8541640018478926775">"Zaštitite telefon zaključavanjem ekrana tako da ga niko ne može koristiti ako ga izgubite ili ga neko ukrade. Zaključavanje ekrana vam je potrebno i za postavljanje autentifikacije licem. Dodirnite Otkaži, a zatim postavite PIN ili odaberite drugu opciju zaključavanja ekrana."</string>
<string name="lock_screen_pin_skip_title" msgid="8217519439213393785">"Preskočiti postavljanje PIN-a?"</string>
<string name="lock_screen_password_skip_title" msgid="3725788215672959827">"Preskočiti postavljanje lozinke?"</string>
<string name="lock_screen_pattern_skip_title" msgid="4237030500353932005">"Preskočiti postavljanje uzorka?"</string>
@@ -735,8 +734,8 @@
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> aktivnih aplikacija</item>
</plurals>
<string name="manage_trust_agents" msgid="8129970926213142261">"Pouzdani agenti"</string>
- <string name="disabled_because_no_backup_security" msgid="8127039979909203528">"Da ovo koristite, prvo postavite zaključavanje ekrana"</string>
- <string name="manage_trust_agents_summary" msgid="2023116850759962248">"Nema"</string>
+ <string name="disabled_because_no_backup_security" msgid="8127039979909203528">"Da biste ovo koristili, prvo postavite zaključavanje ekrana"</string>
+ <string name="manage_trust_agents_summary" msgid="2023116850759962248">"Ništa"</string>
<plurals name="manage_trust_agents_summary_on" formatted="false" msgid="5550538038916606097">
<item quantity="one"><xliff:g id="COUNT">%d</xliff:g> aktivni pouzdani agent</item>
<item quantity="few"><xliff:g id="COUNT">%d</xliff:g> aktivna pouzdana agenta</item>
@@ -747,7 +746,7 @@
<string name="bluetooth_settings" msgid="5228032727293770389">"Bluetooth"</string>
<string name="bluetooth_settings_title" msgid="7261244857456521825">"Bluetooth"</string>
<string name="bluetooth_settings_summary" msgid="1221689092429277887">"Upravljajte vezama, postavite ime uređaja i vidljivost"</string>
- <string name="bluetooth_pairing_request" msgid="7221745525632573125">"Upariti sa uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
+ <string name="bluetooth_pairing_request" msgid="7221745525632573125">"Upariti s uređajem <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="bluetooth_pairing_key_msg" msgid="1139230917419961975">"Kod za Bluetooth uparivanje"</string>
<string name="bluetooth_enter_passkey_msg" msgid="6205151011298670207">"Upišite kod za uparivanje, zatim pritisnite Return ili Enter"</string>
<string name="bluetooth_enable_alphanumeric_pin" msgid="9138308197078115672">"PIN sadrži slova ili simbole"</string>
@@ -769,7 +768,7 @@
<string name="bluetooth_preference_paired_dialog_internet_option" msgid="3693599743477470469">"Internet veza"</string>
<string name="bluetooth_preference_paired_dialog_keyboard_option" msgid="4627309436489645755">"Tastatura"</string>
<string name="bluetooth_preference_paired_dialog_contacts_option" msgid="5290994459307558039">"Kontakti i historija poziva"</string>
- <string name="bluetooth_pairing_dialog_title" msgid="7900515495932064945">"Upariti sa ovim uređajem?"</string>
+ <string name="bluetooth_pairing_dialog_title" msgid="7900515495932064945">"Upariti s ovim uređajem?"</string>
<string name="bluetooth_pairing_dialog_sharing_phonebook_title" msgid="7395493311980018460">"Podijeliti telefonski imenik?"</string>
<string name="bluetooth_pairing_dialog_contants_request" msgid="2103132762434487717">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> želi pristupiti vašim kontaktima i historiji poziva."</string>
<string name="bluetooth_pairing_dialog_paring_request" msgid="5513953935086446387">"Uređaj <xliff:g id="DEVICE_NAME">%1$s</xliff:g> želi uparivanje putem Bluetootha. Nakon povezivanja imat će pristup vašim kontaktima i historiji poziva."</string>
@@ -840,11 +839,11 @@
<string name="art_verifier_for_debuggable_summary" msgid="2204242476996701111">"Dopustite ART-u da potvrdi bajtni kôd za aplikacije iz kojih se mogu uklanjati greške"</string>
<string name="nfc_quick_toggle_title" msgid="4990697912813795002">"NFC"</string>
<string name="nfc_quick_toggle_summary" product="tablet" msgid="983451155092850657">"Dopusti razmjenu podataka kada tablet dodirne drugi uređaj"</string>
- <string name="nfc_quick_toggle_summary" product="default" msgid="7141056939052895142">"Omogućavanje razmjene podataka kada telefon dodirne drugi uređaj"</string>
+ <string name="nfc_quick_toggle_summary" product="default" msgid="7141056939052895142">"Dozvolite razmjenu podataka kada telefon dodirne drugi uređaj"</string>
<string name="nfc_disclaimer_title" msgid="4860231267351602970">"Uključite NFC"</string>
<string name="nfc_disclaimer_content" msgid="3066113577854565782">"NFC razmjenjuje podatke između ovog i drugih uređaja ili ciljeva u blizini, kao što su terminali za plaćanje, čitači pristupa i interaktivni oglasi ili oznake."</string>
<string name="nfc_secure_settings_title" msgid="5153751163174916581">"Osiguraj NFC"</string>
- <string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"Dozvoli NFC plaćanje i korištenje u javnom prijevozu samo kada je ekran otključan"</string>
+ <string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"Dozvoli korištenje NFC-a za plaćanje i u javnom prijevozu samo kada je ekran otključan"</string>
<string name="android_beam_settings_title" msgid="3083436415873738389">"Android Beam"</string>
<string name="android_beam_on_summary" msgid="8068287225180474199">"Spremno za prijenos sadržaja aplikacije putem NFC-a"</string>
<string name="android_beam_off_summary" msgid="7365818039159364600">"Isključeno"</string>
@@ -854,7 +853,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Uključite Wi‑Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Koristi WiFi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Koristi WiFi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"WiFi postavke"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"WiFi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Podešavanje bežičnih pristupnih tačaka i upravljanje njima"</string>
@@ -879,7 +878,7 @@
<string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"Za korištenje funkcije odaberite ocjenjivača mreže"</string>
<string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"Za korištenje funkcije odaberite kompatibilnog ocjenjivača mreže"</string>
<string name="wifi_install_credentials" msgid="5650088113710858289">"Instaliranje certifikata"</string>
- <string name="wifi_scan_notify_text" msgid="7614101215028336927">"Kako bi poboljšale preciznost lokacije, aplikacije i usluge mogu i dalje uvijek skenirati WiFi mreže, čak i kada je WiFi isključen. Ovim se, naprimjer, mogu poboljšati funkcije i usluge zasnovane na lokaciji. Ovo možete izmijeniti u <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>postavkama skeniranja<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
+ <string name="wifi_scan_notify_text" msgid="7614101215028336927">"Kako bi poboljšale preciznost lokacije, aplikacije i usluge i dalje mogu skenirati WiFi mreže bilo kada, čak i kada je WiFi isključen. Ovim se, naprimjer, mogu poboljšati funkcije i usluge zasnovane na lokaciji. Ovo možete izmijeniti u <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>postavkama skeniranja<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
<string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"Radi poboljšanja preciznosti lociranja, uključite skeniranje WiFi mreža u <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>postavkama skeniranja<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
<string name="wifi_scan_notify_remember_choice" msgid="1235445971400237444">"Ne prikazuj ponovo"</string>
<string name="wifi_setting_sleep_policy_title" msgid="2120785188625932076">"Zadrži WiFi uključenim tokom mirovanja"</string>
@@ -954,7 +953,7 @@
<string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"Nasumično odabrani MAC"</string>
<string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"Dodajte uređaj"</string>
<string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"Centrirajte QR kôd ispod da uređaj dodate na mrežu “<xliff:g id="SSID">%1$s</xliff:g>”"</string>
- <string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"Skeniraj QR kôd"</string>
+ <string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"Skenirajte QR kôd"</string>
<string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"Centrirajte QR kôd ispod da se povežete na mrežu “<xliff:g id="SSID">%1$s</xliff:g>”"</string>
<string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"Skenirajte QR kôd da se pridružite WiFi mreži"</string>
<string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Dijeljenje WiFi mreže"</string>
@@ -1121,7 +1120,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"WiFi"</item>
+ <item msgid="2271962426654621656">"Mobilna mreža"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Ako WiFi nije dostupan, koristi mobilnu mrežu"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Ako mobilna mreža nije dostupna, koristi WiFi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Pozivanje putem WiFi-ja. Ako se izgubi WiFi, poziv će se prekinuti."</string>
@@ -1129,7 +1131,7 @@
<string name="wifi_calling_off_explanation_2" msgid="8648609693875720408"></string>
<string name="emergency_address_title" msgid="5779915349686787024">"Adresa za hitne slučajeve"</string>
<string name="emergency_address_summary" msgid="478668478569851714">"Koristi se kao vaša lokacija prilikom hitnog poziva putem Wi‑Fi mreže"</string>
- <string name="private_dns_help_message" msgid="7633526525131196650"><annotation id="url">"Saznajte više"</annotation>" o funkcijama Privatnog DNS-a"</string>
+ <string name="private_dns_help_message" msgid="7633526525131196650"><annotation id="url">"Saznajte više"</annotation>" o funkcijama privatnog DNS-a"</string>
<string name="wifi_calling_pref_managed_by_carrier" msgid="5458050015417972072">"Postavkom upravlja mobilni operater"</string>
<string name="wifi_calling_settings_activation_instructions" msgid="2863642668648110908">"Aktivirajte pozivanje putem WiFi-ja"</string>
<string name="wifi_calling_turn_on" msgid="1212277809455062043">"Uključite pozivanje putem WiFi-ja"</string>
@@ -1282,7 +1284,7 @@
<string name="doze_always_on_title" msgid="8555184965031789941">"Uvijek uključeno"</string>
<string name="doze_always_on_summary" msgid="7654436900436328950">"Prikaz vremena, ikona obavještenja i drugih informacija. Veća potrošnja baterije."</string>
<string name="title_font_size" msgid="5021464556860010851">"Veličina fonta"</string>
- <string name="short_summary_font_size" msgid="4141077908728522946">"Povećavanje ili umanjivanje teksta"</string>
+ <string name="short_summary_font_size" msgid="4141077908728522946">"Povećajte ili smanjite tekst"</string>
<string name="sim_lock_settings" msgid="1986924650622642189">"Postavke zaključavanja SIM kartice"</string>
<string name="sim_lock_settings_category" msgid="1126759898277681516">"Zaključavanje SIM kartice"</string>
<string name="sim_lock_settings_summary_off" msgid="348656447968142307">"Isključeno"</string>
@@ -1434,7 +1436,7 @@
<string name="storage_menu_forget" msgid="4345021250834642640">"Zaboraviti"</string>
<string name="storage_menu_set_up" msgid="2849170579745958513">"Postavi"</string>
<string name="storage_menu_explore" msgid="3733439525636202662">"Istraži"</string>
- <string name="storage_menu_free" msgid="6586253660759145508">"Oslobodi prostor"</string>
+ <string name="storage_menu_free" msgid="6586253660759145508">"Oslobodite prostor"</string>
<string name="storage_menu_manage" msgid="461380717863926516">"Upravljaj prostorom za pohranu"</string>
<string name="storage_title_usb" msgid="2015671467177303099">"Veza s računarom preko USB-a"</string>
<string name="usb_connection_category" msgid="2888975803638116041">"Poveži kao"</string>
@@ -1546,7 +1548,7 @@
<string name="apn_settings" msgid="8130776653826271664">"APN-ovi"</string>
<string name="apn_edit" msgid="4350571070853305357">"Uredi pristupnu tačku"</string>
<string name="apn_not_set" msgid="5344235604466825691">"Nije postavljeno"</string>
- <string name="apn_name" msgid="8431432886706852226">"Ime"</string>
+ <string name="apn_name" msgid="8431432886706852226">"Naziv"</string>
<string name="apn_apn" msgid="190519449579357696">"APN"</string>
<string name="apn_http_proxy" msgid="8816906767987944465">"Proksi"</string>
<string name="apn_http_port" msgid="5789193688960075486">"Priključak"</string>
@@ -1564,8 +1566,8 @@
<string name="apn_auth_type_chap" msgid="5484031368454788686">"CHAP"</string>
<string name="apn_auth_type_pap_chap" msgid="2977833804460109203">"PAP ili CHAP"</string>
<string name="apn_type" msgid="6725346490902871146">"Vrsta APN-a"</string>
- <string name="apn_protocol" msgid="1240197323563960912">"APN protokol"</string>
- <string name="apn_roaming_protocol" msgid="6913336248771263497">"Protokol za APN roming"</string>
+ <string name="apn_protocol" msgid="1240197323563960912">"Protokol APN-a"</string>
+ <string name="apn_roaming_protocol" msgid="6913336248771263497">"Protokol APN-a za roming"</string>
<string name="carrier_enabled" msgid="1819916725305365581">"Omogući/onemogući APN"</string>
<string name="carrier_enabled_summaryOn" msgid="6219221535461945771">"APN omogućen"</string>
<string name="carrier_enabled_summaryOff" msgid="4093019532796386622">"APN onemogućen"</string>
@@ -1584,7 +1586,7 @@
<string name="error_adding_apn_type" msgid="671634520340569678">"Operater ne dozvoljava dodavanje APN-a tipa %s."</string>
<string name="restore_default_apn" msgid="7195266404077471007">"Vraćanje zadanih postavki za APN."</string>
<string name="menu_restore" msgid="3799288817317293115">"Vrati na zadano"</string>
- <string name="restore_default_apn_completed" msgid="5671734152740058937">"Vraćanje zadanih postavki za APN dovršeno."</string>
+ <string name="restore_default_apn_completed" msgid="5671734152740058937">"Vraćanje zadanih postavki za APN je završeno."</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"Opcije vraćanja na zadano"</string>
<string name="reset_dashboard_summary" msgid="8778383341461126642">"Mreža, aplikacije ili uređaj mogu se vratiti na zadano"</string>
<string name="reset_network_title" msgid="8944059136930806211">"Vrati WiFi, mobilnu i Bluetooth vezu na zadano"</string>
@@ -1603,11 +1605,11 @@
<string name="master_clear_title" msgid="1560712943955904673">"Izbriši sve podatke (vraćanje na fabričke postavke)"</string>
<string name="master_clear_short_title" msgid="919098101581335101">"Potpuno izbriši sve podatke"</string>
<string name="master_clear_desc" product="tablet" msgid="3432373610755760899">"Na ovaj način će se izbrisati svi podaci "<b>"interne memorije"</b>" tableta, uključujući:\n\n"<li>"Google račun"</li>\n<li>"sistemske i aplikacijske podatke i postavke"</li>\n<li>"preuzete aplikacije"</li></string>
- <string name="master_clear_desc" product="default" msgid="8765543541962866697">"Na ovaj način će se izbrisati svi podaci "<b>"interne memorije"</b>" telefona, uključujući:\n\n"<li>"Google račun"</li>\n<li>"sistemske i aplikacijske podatke i postavke"</li>\n<li>"preuzete aplikacije"</li></string>
+ <string name="master_clear_desc" product="default" msgid="8765543541962866697">"Na ovaj način će se izbrisati svi podaci "<b>"interne memorije"</b>" telefona, uključujući:\n\n"<li>"vaš Google račun"</li>\n<li>"podatke i postavke sistema i aplikacija"</li>\n<li>"preuzete aplikacije"</li></string>
<string name="master_clear_accounts" product="default" msgid="3432884235445405376">\n\n"Trenutno ste prijavljeni u sljedeće račune:\n"</string>
<string name="master_clear_other_users_present" product="default" msgid="5993259656117566767">\n\n"Drugi korisnici su prisutni na ovom uređaju.\n"</string>
<string name="master_clear_desc_also_erases_external" msgid="3947303501615091903"><li>"muziku"</li>\n<li>"fotografije"</li>\n<li>"ostale korisničke podatke"</li></string>
- <string name="master_clear_desc_also_erases_esim" msgid="4497260499055258773"><li>"eSIM kartice"</li></string>
+ <string name="master_clear_desc_also_erases_esim" msgid="4497260499055258773"><li>"eSIM-ove"</li></string>
<string name="master_clear_desc_no_cancel_mobile_plan" msgid="6072668588881679461">\n\n"Ovim se neće otkazati vaš plan usluga mobilnog operatera."</string>
<string name="master_clear_desc_erase_external_storage" product="nosdcard" msgid="2723272952715259307">\n\n"Da biste izbrisali muziku, slike i ostale korisničke podatke, "<b>"USB pohrana"</b>" treba biti izbrisana."</string>
<string name="master_clear_desc_erase_external_storage" product="default" msgid="9003555775524798797">\n\n"Da biste izbrisali muziku, slike i ostale korisničke podatke, "<b>"SD kartica"</b>" treba biti izbrisana."</string>
@@ -1664,7 +1666,7 @@
<string name="mobile_insert_sim_card" msgid="7594550403454243732">"Umetnite SIM karticu i ponovo pokrenite uređaj"</string>
<string name="mobile_connect_to_internet" msgid="6031886097365170913">"Povežite se na Internet"</string>
<string name="location_title" msgid="8664674161765477168">"Moja lokacija"</string>
- <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"Lokacija za profil za Work"</string>
+ <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"Lokacija za poslovni profil"</string>
<string name="location_app_level_permissions" msgid="1298041503927632960">"Odobrenje za aplikaciju"</string>
<string name="location_app_permission_summary_location_off" msgid="541372845344796336">"Lokacija je isključena"</string>
<plurals name="location_app_permission_summary_location_on" formatted="false" msgid="7904821382328758218">
@@ -1680,9 +1682,9 @@
<string name="location_low_battery_use" msgid="5030448574501435888">"Niska potrošnja baterije"</string>
<string name="location_scanning_screen_title" msgid="7663329319689413454">"Skeniranje WiFi-ja i Bluetootha"</string>
<string name="location_scanning_wifi_always_scanning_title" msgid="6750542206763112172">"Skeniranje WiFi mreže"</string>
- <string name="location_scanning_wifi_always_scanning_description" msgid="4956048135941851712">"Dozvolite aplikacijama i uslugama da skeniraju WiFi mreže u svakom trenutku, čak i kada je WiFi mreža isključena. Ovim se naprimjer mogu poboljšati funkcije i usluge zasnovane na lokaciji."</string>
+ <string name="location_scanning_wifi_always_scanning_description" msgid="4956048135941851712">"Dozvolite aplikacijama i uslugama da skeniraju WiFi mreže u svakom trenutku, čak i kada je WiFi mreža isključena. Ovim se, naprimjer, mogu poboljšati funkcije i usluge zasnovane na lokaciji."</string>
<string name="location_scanning_bluetooth_always_scanning_title" msgid="196241746742607453">"Skeniranje Bluetootha"</string>
- <string name="location_scanning_bluetooth_always_scanning_description" msgid="3796673798637848690">"Dozvolite aplikacijama i uslugama da skeniraju uređaje u blizini u svakom trenutku, čak i kada je Bluetooth isključen. Ovim se naprimjer mogu poboljšati funkcije i usluge zasnovane na lokaciji."</string>
+ <string name="location_scanning_bluetooth_always_scanning_description" msgid="3796673798637848690">"Dozvolite aplikacijama i uslugama da skeniraju uređaje u blizini u svakom trenutku, čak i kada je Bluetooth isključen. Ovim se, naprimjer, mogu poboljšati funkcije i usluge zasnovane na lokaciji."</string>
<string name="managed_profile_location_services" msgid="224925483299159541">"Usluge lokacije za posao"</string>
<string name="location_network_based" msgid="1535812159327454835">"Lokacija Wi-Fi i mob. mreža"</string>
<string name="location_neighborhood_level" msgid="8459352741296587916">"Omogućava da aplikacije koriste Googleovu uslugu lokacije kako bi brže procijenile vašu lokaciju. Anonimni podaci o lokaciji se prikupljaju i šalju Googleu."</string>
@@ -2090,7 +2092,7 @@
<string name="accessibility_power_button_ends_call_prerefence_title" msgid="6172987104538172869">"Dugme uklj./isklj. prekida poziv"</string>
<string name="accessibility_toggle_large_pointer_icon_title" msgid="9127905775116570565">"Veliki pokazivač miša"</string>
<string name="accessibility_disable_animations" msgid="8378441317115710009">"Uklanjanje animacija"</string>
- <string name="accessibility_toggle_master_mono_title" msgid="899550848196702565">"Mono audio"</string>
+ <string name="accessibility_toggle_master_mono_title" msgid="899550848196702565">"Mono zvuk"</string>
<string name="accessibility_toggle_master_mono_summary" msgid="3847052868469033235">"Kombiniranje kanala prilikom reprodukcije zvuka"</string>
<string name="accessibility_toggle_master_balance_title" msgid="8723492001092647562">"Audio balans"</string>
<string name="accessibility_toggle_master_balance_left_label" msgid="8531986342666527970">"Lijevo"</string>
@@ -2114,9 +2116,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Vibracija obavještenja"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Vibracija pri zvonu"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Vibracija pri dodiru"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Koristi uslugu"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Koristi ispravku boje"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Koristi natpise"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Koristi uslugu"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Koristi ispravku boje"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Koristi titlove"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Nastavi"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Slušni aparat"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Nije povezan nijedan slušni aparat"</string>
@@ -2187,7 +2189,7 @@
<string name="captioning_edge_color" msgid="4330622137047993780">"Boja rubova"</string>
<string name="captioning_edge_type" msgid="4414946407430588162">"Vrsta rubova"</string>
<string name="captioning_typeface" msgid="7893208796949341767">"Porodica fontova"</string>
- <string name="captioning_preview_text" msgid="4877753964772618049">"Stilovi će izgledati ovako"</string>
+ <string name="captioning_preview_text" msgid="4877753964772618049">"Titlovi će izgledati ovako"</string>
<string name="captioning_preview_characters" msgid="6469599599352973561">"Aa"</string>
<string name="locale_default" msgid="910074908458214054">"Zadano"</string>
<string name="color_title" msgid="132875486061816584">"Boja"</string>
@@ -2305,13 +2307,13 @@
<string name="battery_tip_smart_battery_title" product="device" msgid="7419448992583346364">"Poboljšajte vijek trajanja baterije uređaja"</string>
<string name="battery_tip_smart_battery_summary" msgid="5344821856478265778">"Uključite Upravitelja baterije"</string>
<string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"Uključite Uštedu baterije"</string>
- <string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Baterija bi vam se mogla isprazniti prije nego obično"</string>
+ <string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Baterija bi vam se mogla isprazniti brže nego obično"</string>
<string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"Uključena je Ušteda baterije"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"Neke funkcije mogu biti ograničene"</string>
<string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Koristili ste telefon više nego obično"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"Koristili ste tablet više nego obično"</string>
<string name="battery_tip_high_usage_title" product="device" msgid="8304138287288309490">"Koristili ste uređaj više nego obično"</string>
- <string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"Moguće je da će se baterija isprazniti brže nego obično"</string>
+ <string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"Baterija bi vam se mogla isprazniti brže nego obično"</string>
<string name="battery_tip_dialog_message" product="default" msgid="8453700079047810964">"Vaš telefon je korišten više nego obično. Baterija se može istrošiti brže nego što je predviđeno.\n\nNajviše korištene aplikacije od potpunog punjenja:"</string>
<string name="battery_tip_dialog_message" product="tablet" msgid="6489981050645444068">"Vaš tablet je korišten više nego obično. Baterija se može istrošiti brže nego što je predviđeno.\n\nNajviše korištene aplikacije od potpunog punjenja:"</string>
<string name="battery_tip_dialog_message" product="device" msgid="6348123094674390337">"Vaš uređaj je korišten više nego obično. Baterija se može istrošiti brže nego što je predviđeno.\n\nNajviše korištene aplikacije od potpunog punjenja:"</string>
@@ -2345,13 +2347,13 @@
<string name="battery_tip_restrict_apps_less_than_5_dialog_message" msgid="4225881888543582456">"Da uštedite bateriju, spriječite ove aplikacije da koriste bateriju u pozadini. Moguće je da aplikacije s ograničenjem neće raditi pravilno i da će obavještenja kasniti.\n\nAplikacije:"</string>
<string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"Da uštedite bateriju, spriječite ove aplikacije da koriste bateriju u pozadini. Moguće je da aplikacije s ograničenjem neće raditi pravilno i da će obavještenja kasniti.\n\nAplikacije:\n<xliff:g id="APP_LIST">%1$s</xliff:g>."</string>
<string name="battery_tip_restrict_app_dialog_ok" msgid="2573410775701913487">"Ograniči"</string>
- <string name="battery_tip_unrestrict_app_dialog_title" msgid="812458516399125710">"Želite ukloniti ograničenje?"</string>
+ <string name="battery_tip_unrestrict_app_dialog_title" msgid="812458516399125710">"Ukloniti ograničenje?"</string>
<string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"Ova aplikacija će moći koristiti bateriju u pozadini. Vaša baterija bi se mogla isprazniti prije nego što očekujete."</string>
<string name="battery_tip_unrestrict_app_dialog_ok" msgid="9154938931448151479">"Ukloni"</string>
<string name="battery_tip_unrestrict_app_dialog_cancel" msgid="7331148618292397166">"Otkaži"</string>
- <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"Vaše aplikacije troše bateriju uobičajenom brzinom. Ako prebrzo troše bateriju, telefon će predložiti radnje koje možete preduzeti.\n\nUvijek možete uključiti Uštedu baterije ako je baterija skoro prazna."</string>
- <string name="battery_tip_dialog_summary_message" product="tablet" msgid="1721081030632329647">"Vaše aplikacije troše bateriju uobičajenom brzinom. Ako prebrzo troše bateriju, tablet će predložiti radnje koje možete preduzeti.\n\nUvijek možete uključiti Uštedu baterije ako je baterija skoro prazna."</string>
- <string name="battery_tip_dialog_summary_message" product="device" msgid="146872407040848465">"Vaše aplikacije troše bateriju uobičajenom brzinom. Ako prebrzo troše bateriju, uređaj će predložiti radnje koje možete preduzeti.\n\nUvijek možete uključiti Uštedu baterije ako je baterija skoro prazna."</string>
+ <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"Vaše aplikacije troše bateriju uobičajenom brzinom. Ako aplikacije budu prebrzo trošile bateriju, telefon će predložiti radnje koje možete preduzeti.\n\nUvijek možete uključiti Uštedu baterije ako je baterija skoro prazna."</string>
+ <string name="battery_tip_dialog_summary_message" product="tablet" msgid="1721081030632329647">"Vaše aplikacije troše bateriju uobičajenom brzinom. Ako aplikacije budu prebrzo trošile bateriju, tablet će predložiti radnje koje možete preduzeti.\n\nUvijek možete uključiti Uštedu baterije ako je baterija skoro prazna."</string>
+ <string name="battery_tip_dialog_summary_message" product="device" msgid="146872407040848465">"Vaše aplikacije troše bateriju uobičajenom brzinom. Ako aplikacije budu prebrzo trošile bateriju, uređaj će predložiti radnje koje možete preduzeti.\n\nUvijek možete uključiti Uštedu baterije ako je baterija skoro prazna."</string>
<string name="smart_battery_manager_title" msgid="5744035036663849515">"Upravitelj baterije"</string>
<string name="smart_battery_title" msgid="4919670408532804351">"Automatsko upravljanje aplikacijama"</string>
<string name="smart_battery_summary" msgid="640027046471198174">"Ograničite upotrebu baterije za aplikacije koje ne koristite često"</string>
@@ -2495,7 +2497,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Uključi"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Koristi Uštedu baterije"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Koristi Uštedu baterije"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Automatsko uključivanje"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Nikad"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"na <xliff:g id="PERCENT">%1$s</xliff:g> baterije"</string>
@@ -2773,7 +2775,7 @@
<string name="data_usage_disclaimer" msgid="4683321532922590425">"Obračun podataka operatera može se razlikovati od obračuna vašeg uređaja."</string>
<string name="cryptkeeper_emergency_call" msgid="4625420047524693116">"Poziv za hitne slučajeve"</string>
<string name="cryptkeeper_return_to_call" msgid="4433942821196822815">"Vrati se na poziv"</string>
- <string name="vpn_name" msgid="3538818658670774080">"Ime"</string>
+ <string name="vpn_name" msgid="3538818658670774080">"Naziv"</string>
<string name="vpn_type" msgid="6389116710008658550">"Vrsta"</string>
<string name="vpn_server" msgid="5216559017318406820">"Adresa servera"</string>
<string name="vpn_mppe" msgid="4027660356538086985">"PPP šifriranje (MPPE)"</string>
@@ -2823,15 +2825,15 @@
<string name="vpn_create" msgid="2477570636472897359">"Dodaj VPN profil"</string>
<string name="vpn_menu_edit" msgid="8061437799373333593">"Uredi profil"</string>
<string name="vpn_menu_delete" msgid="4128305800374946877">"Izbriši profil"</string>
- <string name="vpn_menu_lockdown" msgid="6951452279924808089">"Uvijek aktivni VPN"</string>
- <string name="vpn_no_vpns_added" msgid="6616183541896197147">"Nema dodanih VPN-ova"</string>
+ <string name="vpn_menu_lockdown" msgid="6951452279924808089">"Uvijek aktivan VPN"</string>
+ <string name="vpn_no_vpns_added" msgid="6616183541896197147">"Nije dodan nijedan VPN"</string>
<string name="vpn_always_on_summary" msgid="3639994551631437397">"Ostanite stalno povezani na VPN"</string>
<string name="vpn_always_on_summary_not_supported" msgid="9077720997795965133">"Ova aplikacija ne podržava ovu funkciju"</string>
<string name="vpn_always_on_summary_active" msgid="8962619701962239088">"Funkcija Uvijek uključeno je aktivna"</string>
<string name="vpn_require_connection" msgid="5413746839457797350">"Blokiraj veze bez VPN-a"</string>
<string name="vpn_require_connection_title" msgid="8361434328767853717">"Treba li zahtijevati VPN vezu?"</string>
<string name="vpn_lockdown_summary" msgid="6770030025737770861">"Odaberite VPN profil s kojim će uvijek biti uspostavljena veza. Mrežni saobraćaj će biti dopušten samo kad je uspostavljena veza s tim VPN-om."</string>
- <string name="vpn_lockdown_none" msgid="3789288793603394679">"Nema"</string>
+ <string name="vpn_lockdown_none" msgid="3789288793603394679">"Ništa"</string>
<string name="vpn_lockdown_config_error" msgid="8761770968704589885">"Uvijek aktivni VPN zahtijeva IP adresu i za server i za DNS."</string>
<string name="vpn_no_network" msgid="8313250136194588023">"Nema mrežne veze. Pokušajte ponovo kasnije."</string>
<string name="vpn_disconnected" msgid="4597953053220332539">"Isključeni ste iz VPN-a"</string>
@@ -2853,7 +2855,7 @@
<string name="n_cacrts" msgid="7539893176217891549">"%d CA certifikati"</string>
<string name="user_credential_title" msgid="6237611303219831419">"Detalji o akreditivima"</string>
<string name="user_credential_removed" msgid="6243576567538844852">"Uklonjeni akreditiv: <xliff:g id="CREDENTIAL_NAME">%s</xliff:g>"</string>
- <string name="user_credential_none_installed" msgid="4129252817676332368">"Nisu instalirani korisnički akreditivi"</string>
+ <string name="user_credential_none_installed" msgid="4129252817676332368">"Nije instaliran nijedan korisnički akreditiv"</string>
<string name="spellcheckers_settings_title" msgid="1687210427248364327">"Provjera pravopisa"</string>
<string name="spellcheckers_settings_for_work_title" msgid="7461318390801573022">"Provjera pravopisa za posao"</string>
<string name="current_backup_pw_prompt" msgid="8914812770233159610">"Ovdje unesite trenutnu lozinku za sigurnosnu kopiju čitavog sistema"</string>
@@ -2908,7 +2910,7 @@
<string name="user_add_user_item_title" msgid="6835385073795492410">"Korisnik"</string>
<string name="user_add_profile_item_title" msgid="4932743891449790664">"Ograničeni profil"</string>
<string name="user_add_user_title" msgid="2320897397066676472">"Dodati novog korisnika?"</string>
- <string name="user_add_user_message_long" msgid="686637203224195465">"Za dijeljenje ovog uređaja s drugima možete napraviti dodatne korisnike. Svaki korisnik ima svoj prostor koji može prilagoditi pomoću aplikacija, pozadinske slike i slično. Korisnici također mogu prilagoditi postavke uređaja koje utiču na sve ostale korisnike, kao što je WiFi.\n\nKada dodate novog korisnika, ta osoba treba postaviti svoj prostor.\n\nSvaki korisnik može ažurirati aplikacije za sve ostale korisnike. Postavke i usluge pristupačnosti možda se neće prenijeti na novog korisnika."</string>
+ <string name="user_add_user_message_long" msgid="686637203224195465">"Ovaj uređaj možete dijeliti s drugima ako napravite dodatne korisnike. Svaki korisnik ima svoj prostor koji može prilagoditi pomoću aplikacija, pozadinske slike i slično. Korisnici također mogu prilagoditi postavke uređaja koje utiču na sve ostale korisnike, kao što je WiFi.\n\nKada dodate novog korisnika, ta osoba treba postaviti svoj prostor.\n\nSvaki korisnik može ažurirati aplikacije za sve ostale korisnike. Postavke i usluge pristupačnosti možda se neće prenijeti na novog korisnika."</string>
<string name="user_add_user_message_short" msgid="1802594476285458254">"Kada dodate novog korisnika, ta osoba treba postaviti svoj prostor. \n\n Svaki korisnik može ažurirati aplikacije za sve ostale korisnike."</string>
<string name="user_setup_dialog_title" msgid="6748950002206392396">"Postaviti korisnika sada?"</string>
<string name="user_setup_dialog_message" msgid="2988559933258353919">"Provjerite može li osoba uzeti uređaj i postaviti svoj prostor"</string>
@@ -2941,8 +2943,8 @@
<string name="user_exit_guest_confirm_message" msgid="6955182181145748919">"Sve aplikacije i podaci iz ove sesije će biti izbrisani."</string>
<string name="user_exit_guest_dialog_remove" msgid="1878866060881115716">"Ukloniti"</string>
<string name="user_enable_calling" msgid="864760054792249503">"Uključi telefonske pozive"</string>
- <string name="user_enable_calling_sms" msgid="3450252891736718793">"Uključivanje telefonskih poziva i SMS-ova"</string>
- <string name="user_remove_user" msgid="3687544420125911166">"Brisanje korisnika"</string>
+ <string name="user_enable_calling_sms" msgid="3450252891736718793">"Uključi telefonske pozive i SMS-ove"</string>
+ <string name="user_remove_user" msgid="3687544420125911166">"Izbriši korisnika"</string>
<string name="user_enable_calling_confirm_title" msgid="1141612415529158542">"Uključiti telefonske pozive?"</string>
<string name="user_enable_calling_confirm_message" msgid="2490126715153125970">"Historija poziva će se dijeliti s ovim korisnikom."</string>
<string name="user_enable_calling_and_sms_confirm_title" msgid="4153856398523366976">"Uključiti telefonske pozive i SMS-ove?"</string>
@@ -2958,12 +2960,12 @@
<string name="nfc_payment_default" msgid="7869273092463612271">"Zadana aplikacija za plaćanje"</string>
<string name="nfc_payment_default_not_set" msgid="955804193510335338">"Nije postavljeno"</string>
<string name="nfc_payment_app_and_desc" msgid="102312684211458190">"<xliff:g id="APP">%1$s</xliff:g> – <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
- <string name="nfc_payment_use_default" msgid="3098724195746409476">"Koristiti zadanu aplikaciju"</string>
+ <string name="nfc_payment_use_default" msgid="3098724195746409476">"Koristi zadanu aplikaciju"</string>
<string name="nfc_payment_favor_default" msgid="7555356982142464260">"Uvijek"</string>
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"Osim kada je otvorena druga aplikacija za plaćanje"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"Na terminalu \"Dodirni i plati\" plaćajte pomoću:"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"Plaćanje na terminalu"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Postavite aplikaciju za plaćanje, zatim jednostavno prislonite poleđinu svog telefona uz bilo koji terminal označen simbolom beskontaktne komunikacije."</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Postavite aplikaciju za plaćanje, zatim jednostavno prislonite poleđinu svog telefona uz bilo koji terminal označen simbolom beskontaktnog povezivanja."</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"Razumijem"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"Više..."</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"Želite li da ga postavite kao željeni izbor?"</string>
@@ -2989,7 +2991,7 @@
<string name="call_manager_title" msgid="1118074011469650421">"Upravitelj za pozive"</string>
<!-- no translation found for call_manager_summary (1232655174841493040) -->
<skip />
- <string name="cell_broadcast_settings" msgid="5750066270993255966">"Poruke upozorenja"</string>
+ <string name="cell_broadcast_settings" msgid="5750066270993255966">"Hitna upozorenja"</string>
<string name="network_operators_settings" msgid="7822337582828465633">"Mrežni operateri"</string>
<string name="access_point_names" msgid="7992382237358800596">"Nazivi pristupnih tačaka"</string>
<string name="enhanced_4g_lte_mode_title" msgid="1624079276378568594">"VoLTE"</string>
@@ -2997,7 +2999,7 @@
<string name="enhanced_4g_lte_mode_title_4g_calling" msgid="1262729135500839141">"Pozivanje putem 4G mreže"</string>
<string name="enhanced_4g_lte_mode_summary" msgid="4515503153340557170">"Koristite LTE usluge za poboljšanje glasovne i drugih komunikacija (preporučeno)"</string>
<string name="enhanced_4g_lte_mode_summary_4g_calling" msgid="1006226172299077404">"Koristi usluge 4G mreže za poboljšanje glasovne i drugih komunikacija (preporučeno)"</string>
- <string name="preferred_network_type_title" msgid="1980819233332592332">"Tip preferirane mreže"</string>
+ <string name="preferred_network_type_title" msgid="1980819233332592332">"Preferirana vrsta mreže"</string>
<string name="preferred_network_type_summary" msgid="8828375904939960006">"LTE (preporučeno)"</string>
<string name="work_sim_title" msgid="2885654516046971985">"SIM za Work"</string>
<string name="user_restrictions_title" msgid="6454305007320972740">"Aplikacija i pristup sadržaju"</string>
@@ -3011,9 +3013,9 @@
<string name="restriction_bluetooth_config_title" msgid="34551118506640221">"Bluetooth"</string>
<string name="restriction_bluetooth_config_summary" msgid="5304900222614952895">"Dozvoli izmjenu Bluetooth uparivanja i postavki"</string>
<string name="restriction_nfc_enable_title" msgid="5146674482590550598">"NFC"</string>
- <string name="restriction_nfc_enable_summary_config" msgid="405349698260328073">"Dozvoli razmjenu podataka kada <xliff:g id="DEVICE_NAME">%1$s</xliff:g> dodiruje drugi NFC uređaj"</string>
+ <string name="restriction_nfc_enable_summary_config" msgid="405349698260328073">"Dozvolite razmjenu podataka kada <xliff:g id="DEVICE_NAME">%1$s</xliff:g> dodiruje drugi NFC uređaj"</string>
<string name="restriction_nfc_enable_summary" product="tablet" msgid="3292205836938064931">"Dopušta razmjenu podataka kada tablet dodirne drugi uređaj"</string>
- <string name="restriction_nfc_enable_summary" product="default" msgid="226439584043333608">"Omogućavanje razmjene podataka kada telefon dodirne drugi uređaj"</string>
+ <string name="restriction_nfc_enable_summary" product="default" msgid="226439584043333608">"Dozvolite razmjenu podataka kada telefon dodirne drugi uređaj"</string>
<string name="restriction_location_enable_title" msgid="358506740636434856">"Lokacija"</string>
<string name="restriction_location_enable_summary" msgid="4159500201124004463">"Omogućava da aplikacije koriste informacije o lokaciji"</string>
<string name="wizard_back" msgid="223654213898117594">"Nazad"</string>
@@ -3029,11 +3031,11 @@
<string name="sim_cards_changed_message" msgid="1012486903583092731">"SIM kartice su promijenjene"</string>
<string name="sim_cards_changed_message_summary" msgid="5753692480107865077">"Dodirnite za podešavanje aktivnosti"</string>
<string name="sim_cellular_data_unavailable" msgid="1832472508352891641">"Prijenos podataka na mobilnoj mreži je nedostupan"</string>
- <string name="sim_cellular_data_unavailable_summary" msgid="3093797406601964131">"Dodirnite za odabir SIM kartice za prijenos podataka"</string>
+ <string name="sim_cellular_data_unavailable_summary" msgid="3093797406601964131">"Dodirnite za odabir SIM-a za prijenos podataka"</string>
<string name="sim_calls_always_use" msgid="5322696995795851734">"Uvijek koristi ovo za pozive"</string>
<string name="select_sim_for_data" msgid="2099705792885526394">"Odaberite SIM za podatke"</string>
<string name="select_sim_for_sms" msgid="2481682560233370731">"Odaberite SIM za SMS"</string>
- <string name="data_switch_started" msgid="4517966162053949265">"Prebacuje se SIM kartica za prijenos podataka. Ovo može potrajati najviše jednu minutu..."</string>
+ <string name="data_switch_started" msgid="4517966162053949265">"Prebacuje se SIM za prijenos podataka. Ovo može potrajati najviše jednu minutu..."</string>
<string name="select_sim_for_calls" msgid="131091573472832807">"Poziv putem"</string>
<string name="sim_select_card" msgid="5558215843972182767">"Odaberite SIM karticu"</string>
<string name="sim_card_number_title" msgid="8808663374497085634">"SIM <xliff:g id="CARD_NUMBER">%1$d</xliff:g>"</string>
@@ -3163,9 +3165,9 @@
<string name="keywords_default_payment_app" msgid="845369409578423996">"plaćanje, zadano"</string>
<string name="keywords_ambient_display" msgid="8835182491798487184">"dolazno obavještenje"</string>
<string name="keywords_hotspot_tethering" msgid="1723591462602613867">"povezivanje putem usb uređaja, povezivanje putem bluetooth uređaja, wifi pristupna tačka"</string>
- <string name="keywords_touch_vibration" msgid="2081175517528255224">"haptika, vibriranje, ekran, osjetljivost"</string>
- <string name="keywords_ring_vibration" msgid="4210509151866460210">"haptika, vibriranje, telefon, poziv, osjetljivost, zvono"</string>
- <string name="keywords_notification_vibration" msgid="1077515502086745166">"haptika, vibriranje, osjetljivost"</string>
+ <string name="keywords_touch_vibration" msgid="2081175517528255224">"haptička tehnologija, vibriranje, ekran, osjetljivost"</string>
+ <string name="keywords_ring_vibration" msgid="4210509151866460210">"haptička tehnologija, vibriranje, telefon, poziv, osjetljivost, zvono"</string>
+ <string name="keywords_notification_vibration" msgid="1077515502086745166">"haptička tehnologija, vibriranje, osjetljivost"</string>
<string name="keywords_battery_saver_sticky" msgid="8733804259716284872">"ušteda baterije, ljepljivo, istrajnost, ušteda energije, baterija"</string>
<string name="default_sound" msgid="6675629744816442953">"Podrazumijevani zvuk"</string>
<string name="sound_settings_summary" msgid="8467549670633195109">"Jačina zvuka zvona je na <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
@@ -3188,9 +3190,9 @@
<string name="other_sound_settings" msgid="5250376066099818676">"Drugi zvukovi"</string>
<string name="dial_pad_tones_title" msgid="8877212139988655769">"Tonovi tastature telefona"</string>
<string name="screen_locking_sounds_title" msgid="4407110895465866809">"Zvukovi zaključavanja ekrana"</string>
- <string name="charging_sounds_title" msgid="5070437987230894287">"Zvukovi/vibracija pri punjenju"</string>
+ <string name="charging_sounds_title" msgid="5070437987230894287">"Zvukovi/vibracija prilikom punjenja"</string>
<string name="docking_sounds_title" msgid="2573137471605541366">"Zvukovi priključne stanice"</string>
- <string name="touch_sounds_title" msgid="165237488496165652">"Zvukovi pri dodiru"</string>
+ <string name="touch_sounds_title" msgid="165237488496165652">"Zvukovi dodira"</string>
<string name="vibrate_on_touch_title" msgid="6360155469279157684">"Vibracija pri dodiru"</string>
<string name="vibrate_on_touch_summary" msgid="5504424764028676043">"Haptičke povratne informacije za dodir, tastaturu i drugo"</string>
<string name="dock_audio_media_title" msgid="1859521680502040781">"Zvučnik priključne stanice reprodukuje zvuk"</string>
@@ -3200,7 +3202,7 @@
<string name="emergency_tone_alert" msgid="907868135091891015">"Tonovi"</string>
<string name="emergency_tone_vibrate" msgid="5020068066905681181">"Vibracije"</string>
<string name="boot_sounds_title" msgid="7583926202411353620">"Uključivanje zvukova"</string>
- <string name="live_caption_title" msgid="7926591158657997051">"Titlovanje uživo"</string>
+ <string name="live_caption_title" msgid="7926591158657997051">"Automatski titlovi"</string>
<string name="live_caption_summary" msgid="9064771862352393125">"Automatski titluj medije"</string>
<string name="zen_mode_settings_summary_off" msgid="6929319200478424962">"Nikada"</string>
<plurals name="zen_mode_settings_summary_on" formatted="false" msgid="6061723291126091396">
@@ -3234,7 +3236,7 @@
<string name="zen_mode_summary_combination" msgid="6960111215170691605">"<xliff:g id="MODE">%1$s</xliff:g>: <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="zen_mode_visual_interruptions_settings_title" msgid="8378266552787406849">"Blokiranje vizuelnih ometanja"</string>
<string name="zen_mode_visual_signals_settings_subtitle" msgid="6608239691864638854">"Dozvolite vizualnu signalizaciju"</string>
- <string name="zen_mode_settings_category" msgid="5601680733422424922">"Kada je uključen način rada Ne ometaj"</string>
+ <string name="zen_mode_settings_category" msgid="5601680733422424922">"Kada je uključena funkcija Ne ometaj"</string>
<string name="zen_mode_restrict_notifications_title" msgid="7486753018073540477">"Ograničite obavještenja"</string>
<string name="zen_mode_restrict_notifications_mute" msgid="2673665450311184875">"Obavještenja bez zvuka"</string>
<string name="zen_mode_restrict_notifications_mute_summary" msgid="1696217042353376674">"Obavještenja ćete vidjeti na ekranu"</string>
@@ -3255,8 +3257,8 @@
<string name="zen_mode_block_effect_intent" msgid="5666951244667422668">"Nemoj uključivati ekran"</string>
<string name="zen_mode_block_effect_light" msgid="8679333758037487644">"Nemoj bljeskati"</string>
<string name="zen_mode_block_effect_peek" msgid="6075662813575910221">"Nemoj isticati obavještenja na ekranu"</string>
- <string name="zen_mode_block_effect_status" msgid="6516614225115681068">"Sakrij ikone stat. trake u vrhu ekrana"</string>
- <string name="zen_mode_block_effect_badge" msgid="3891743027347075136">"Sakrij tačke za obavj. na ikonama apl."</string>
+ <string name="zen_mode_block_effect_status" msgid="6516614225115681068">"Sakrij ikone statusne trake na vrhu ekrana"</string>
+ <string name="zen_mode_block_effect_badge" msgid="3891743027347075136">"Sakrij tačke za obavještenja na ikonama aplikacija"</string>
<string name="zen_mode_block_effect_ambient" msgid="6382013125863616197">"Nemoj buditi zbog obavještenja"</string>
<string name="zen_mode_block_effect_list" msgid="6081548478844912181">"Sakrij s liste obavještenja"</string>
<string name="zen_mode_block_effect_summary_none" msgid="7166175186759564510">"Nikada"</string>
@@ -3265,7 +3267,7 @@
<string name="zen_mode_block_effect_summary_sound" msgid="4907185880913861880">"Zvuk i vibracija"</string>
<string name="zen_mode_block_effect_summary_some" msgid="6035118904496072665">"Zvuk, vibracija i neki vizuelni znakovi obavještenja"</string>
<string name="zen_mode_block_effect_summary_all" msgid="2830443565687247759">"Zvuk, vibracija i vizuelni znakovi obavještenja"</string>
- <string name="zen_mode_blocked_effects_footer" msgid="4375156159613413924">"Obavještenja koja su potrebna za osnovne radnje i status telefona nikada se neće sakriti"</string>
+ <string name="zen_mode_blocked_effects_footer" msgid="4375156159613413924">"Obavještenja koja su potrebna za osnovne radnje i status telefona se nikada neće sakriti"</string>
<string name="zen_mode_no_exceptions" msgid="3099578343994492857">"Ništa"</string>
<string name="zen_mode_other_options" msgid="7216192179063769057">"druge opcije"</string>
<string name="zen_mode_add" msgid="2533484377786927366">"Dodaj"</string>
@@ -3273,7 +3275,7 @@
<string name="zen_mode_button_turn_on" msgid="1097964136225943415">"Uključi sada"</string>
<string name="zen_mode_button_turn_off" msgid="3990967728457149454">"Isključi sada"</string>
<string name="zen_mode_settings_dnd_manual_end_time" msgid="4307574188962071429">"Način rada Ne ometaj će biti uključen do <xliff:g id="FORMATTED_TIME">%s</xliff:g>"</string>
- <string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"Način rada Ne ometaj će biti uključen dok ga ne isključite"</string>
+ <string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"Funkcija Ne ometaj će biti uključena dok je ne isključite"</string>
<string name="zen_mode_settings_dnd_automatic_rule" msgid="2843297614114625408">"Način rada Ne ometaj je automatski uključen na osnovu rasporeda (<xliff:g id="RULE_NAME">%s</xliff:g>)"</string>
<string name="zen_mode_settings_dnd_automatic_rule_app" msgid="5103454923160912313">"Način rada Ne ometaj je automatski uključila aplikacija (<xliff:g id="APP_NAME">%s</xliff:g>)"</string>
<string name="zen_mode_settings_dnd_custom_settings_footer" msgid="6335108298640066560">"Način rada Ne ometaj je uključen za <xliff:g id="RULE_NAMES">%s</xliff:g> zajedno sa zadanim postavkama."</string>
@@ -3323,7 +3325,7 @@
<string name="zen_onboarding_current_setting_summary" msgid="3569246708507270821">"(Trenutna postavka)"</string>
<string name="zen_onboarding_dnd_visual_disturbances_header" msgid="7584229011611927613">"Promijeniti postavke obavještenja načina rada Ne ometaj?"</string>
<string name="sound_work_settings" msgid="4140215240360927923">"Zvukovi radnog profila"</string>
- <string name="work_use_personal_sounds_title" msgid="531727195073003599">"Koristite zvukove ličnog profila"</string>
+ <string name="work_use_personal_sounds_title" msgid="531727195073003599">"Koristi zvukove ličnog profila"</string>
<string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"Zvukovi su isti za radni i lični profil"</string>
<string name="work_ringtone_title" msgid="5499360583947410224">"Melodija zvona radnog telefona"</string>
<string name="work_notification_ringtone_title" msgid="8059159087214025757">"Zadani zvuk radnih obavještenja"</string>
@@ -3468,8 +3470,8 @@
<string name="notification_content_block_summary" msgid="2743896875255591743">"Nikad ne prikazuj obavještenja u nijansi ili na perifernim uređajima"</string>
<string name="notification_badge_title" msgid="8989086619255666442">"Dozvoli tačku za obavještenja"</string>
<string name="notification_channel_badge_title" msgid="8228215248332054612">"Prikaži tačku za obavještenja"</string>
- <string name="app_notification_override_dnd_title" msgid="1757042206738172601">"Zamijeni način rada Ne ometaj"</string>
- <string name="app_notification_override_dnd_summary" msgid="3152957611171210980">"Dozvolite da se obavještenja nastave pojavljivati kada je uključen način rada Ne ometaj"</string>
+ <string name="app_notification_override_dnd_title" msgid="1757042206738172601">"Zanemari način rada Ne ometaj"</string>
+ <string name="app_notification_override_dnd_summary" msgid="3152957611171210980">"Dozvoli da se obavještenja nastave pojavljivati kada je uključen način rada Ne ometaj"</string>
<string name="app_notification_visibility_override_title" msgid="2349335170165637672">"Na zaključavanju ekrana"</string>
<string name="app_notification_row_banned" msgid="2079325338122151677">"Blokirano"</string>
<string name="app_notification_row_priority" msgid="432299064888787236">"Prioritetna"</string>
@@ -3551,7 +3553,7 @@
<string name="zen_mode_media" msgid="3701280649874724055">"Reproduciraj zvukove medija"</string>
<string name="zen_mode_media_list" msgid="509327580522287125">"mediji"</string>
<string name="zen_mode_system" msgid="597437265986355038">"Dozvoli zvukove dodira"</string>
- <string name="zen_mode_system_list" msgid="480192458506838077">"zvuci dodira"</string>
+ <string name="zen_mode_system_list" msgid="480192458506838077">"zvukovi dodira"</string>
<string name="zen_mode_reminders" msgid="7560664194610054038">"Dozvoli podsjetnike"</string>
<string name="zen_mode_reminders_list" msgid="7347061314032326677">"podsjetnici"</string>
<string name="zen_mode_events" msgid="5784076928339534984">"Dozvoli događaje"</string>
@@ -3751,7 +3753,7 @@
<string name="process_format" msgid="8575347150598564509">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="COUNT">%2$d</xliff:g>)"</string>
<string name="high_power_apps" msgid="2518319744362028920">"Optimizacija baterije"</string>
<string name="additional_battery_info" msgid="6877663897819271203">"Obavještenja o upotrebi"</string>
- <string name="show_all_apps" msgid="5442552004569634846">"Prikaži potpuno korištenje uređaja"</string>
+ <string name="show_all_apps" msgid="5442552004569634846">"Prikaži korištenje cijelog uređaja"</string>
<string name="hide_extra_apps" msgid="6798261081113299441">"Prikaži korištenje aplikacije"</string>
<plurals name="power_high_usage_summary" formatted="false" msgid="4658343710126205199">
<item quantity="one"><xliff:g id="NUMBER">%2$d</xliff:g> aplikacija se ne ponaša kako treba</item>
@@ -3889,7 +3891,7 @@
<string name="camera_double_tap_power_gesture_title" msgid="8874747801078147525">"Dva pritiska na napajanje za kameru"</string>
<string name="camera_double_tap_power_gesture_desc" msgid="6166349645433682873">"Brzo otvaranje fotoaparata bez otključavanja ekrana"</string>
<string name="screen_zoom_title" msgid="164369086350486104">"Veličina prikaza"</string>
- <string name="screen_zoom_short_summary" msgid="5508079362742276703">"Povećavanje ili umanjivanje objekata na ekranu"</string>
+ <string name="screen_zoom_short_summary" msgid="5508079362742276703">"Povećajte ili smanjite stavke na ekranu"</string>
<string name="screen_zoom_keywords" msgid="8358462497896524092">"gustoća prikaza, uvećanje ekrana, promijeni veličinu, mijenjanje veličine"</string>
<string name="screen_zoom_summary" msgid="5294003755961312560">"Smanjite ili povećajte stavke na ekranu. Neke aplikacije s vašeg ekrana mogu promijeniti svoj položaj."</string>
<string name="screen_zoom_preview_title" msgid="2924312934036753091">"Pregled"</string>
@@ -3996,14 +3998,14 @@
<string name="usage" msgid="9172908720164431622">"Potrošnja"</string>
<string name="cellular_data_usage" msgid="1236562234207782386">"Prijenos podataka na mobilnoj mreži"</string>
<string name="app_cellular_data_usage" msgid="8499761516172121957">"Prijenos podataka u aplikaciji"</string>
- <string name="wifi_data_usage" msgid="275569900562265895">"Potrošnja WiFi podataka"</string>
+ <string name="wifi_data_usage" msgid="275569900562265895">"Prijenos podataka putem WiFi-ja"</string>
<string name="ethernet_data_usage" msgid="747614925362556718">"Prijenos podataka putem Etherneta"</string>
<string name="wifi" msgid="1586738489862966138">"WiFi"</string>
<string name="ethernet" msgid="2365753635113154667">"Ethernet"</string>
<string name="cell_data_template" msgid="5473177306229738078">"<xliff:g id="AMOUNT">^1</xliff:g> putem prijenosa podataka"</string>
<string name="wifi_data_template" msgid="3146090439147042068">"<xliff:g id="AMOUNT">^1</xliff:g> WiFi podataka"</string>
<string name="ethernet_data_template" msgid="6414118030827090119">"<xliff:g id="AMOUNT">^1</xliff:g> ethernet podataka"</string>
- <string name="billing_cycle" msgid="5740717948341713190">"Upozorenje o podacima i ograničenje"</string>
+ <string name="billing_cycle" msgid="5740717948341713190">"Upozorenje o prijenosu pod. i ograničenje"</string>
<string name="app_usage_cycle" msgid="213483325132959663">"Ciklus prijenosa podataka u aplikaciji"</string>
<string name="cell_data_warning" msgid="8902740337286652689">"Upozorenje o prijenosu podataka: <xliff:g id="ID_1">^1</xliff:g>"</string>
<string name="cell_data_limit" msgid="3175933829235314233">"Ograničenje prijenosa podataka: <xliff:g id="ID_1">^1</xliff:g>"</string>
@@ -4017,18 +4019,18 @@
</plurals>
<string name="operator_warning" msgid="4676042739221117031">"Obračun podataka koji vrši operater se može razlikovati od obračuna koji vrši uređaj."</string>
<string name="data_used_template" msgid="761605393453849477">"Iskorišteno je <xliff:g id="ID_1">%1$s</xliff:g>"</string>
- <string name="set_data_warning" msgid="8115980184415563941">"Postavi upozorenje o potrošnji"</string>
- <string name="data_warning" msgid="2699207195535036240">"Upozorenje o podacima"</string>
+ <string name="set_data_warning" msgid="8115980184415563941">"Postavi upozor. o prij. podat."</string>
+ <string name="data_warning" msgid="2699207195535036240">"Upozorenje o prijenosu podataka"</string>
<string name="data_warning_footnote" msgid="965724845580257305">"Uređaj mjeri upozorenje o prijenosu podataka i ograničenje prijenosa podataka. Ovo se može razlikovati od prijenosa podataka kojeg je izmjerio mobilni operater."</string>
- <string name="set_data_limit" msgid="5043770023229990674">"Postavi ograničenje potrošnje"</string>
+ <string name="set_data_limit" msgid="5043770023229990674">"Postavi ogranič. prij. podat."</string>
<string name="data_limit" msgid="5793521160051596228">"Ograničenje prijenosa podataka"</string>
<string name="data_usage_template" msgid="6848274347956096882">"<xliff:g id="ID_1">%1$s</xliff:g> iskorišteno <xliff:g id="ID_2">%2$s</xliff:g>"</string>
<string name="configure" msgid="8232696842838580549">"Konfiguracija"</string>
<string name="data_usage_other_apps" msgid="7002491980141402084">"Ostale aplikacije uključene u korištenje"</string>
<plurals name="data_saver_unrestricted_summary" formatted="false" msgid="6046013861315713697">
- <item quantity="one"><xliff:g id="COUNT">%1$d</xliff:g> aplikacija smije upotrebljavati neograničen prijenos podataka kada je Ušteda podataka uključena</item>
- <item quantity="few"><xliff:g id="COUNT">%1$d</xliff:g> aplikacije smiju upotrebljavati neograničen prijenos podataka kada je Ušteda podataka uključena</item>
- <item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> aplikacija smije upotrebljavati neograničen prijenos podataka kada je Ušteda podataka uključena</item>
+ <item quantity="one"><xliff:g id="COUNT">%1$d</xliff:g> aplikacija smije upotrebljavati neograničen prijenos podataka kada je uključena Ušteda podataka</item>
+ <item quantity="few"><xliff:g id="COUNT">%1$d</xliff:g> aplikacije smiju upotrebljavati neograničen prijenos podataka kada je uključena Ušteda podataka</item>
+ <item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> aplikacija smije upotrebljavati neograničen prijenos podataka kada je uključena Ušteda podataka</item>
</plurals>
<string name="data_usage_title" msgid="7874606430902201083">"Primarni plan prijenosa podataka"</string>
<string name="data_usage_wifi_title" msgid="7161828479387766556">"Wi‑Fi podaci"</string>
@@ -4056,7 +4058,7 @@
<string name="data_saver_off" msgid="7439439787358504018">"Isključeno"</string>
<string name="data_saver_switch_title" msgid="8244008132112735207">"Koristi funkciju Ušteda podataka"</string>
<string name="unrestricted_app_title" msgid="4390661122069905122">"Neograničen prijenos podataka"</string>
- <string name="unrestricted_app_summary" msgid="2829141815077800483">"Dozvolite neograničen pristup podacima kada je Ušteda podataka uključena"</string>
+ <string name="unrestricted_app_summary" msgid="2829141815077800483">"Dozvolite neograničen pristup podacima kada je uključena Ušteda podataka"</string>
<string name="home_app" msgid="3695063566006954160">"Aplikacija na početnom ekranu"</string>
<string name="no_default_home" msgid="1518949210961918497">"Nema zadane početne aplikacije"</string>
<string name="lockpattern_settings_require_cred_before_startup" msgid="63693894094570367">"Sigurno pokretanje"</string>
@@ -4074,7 +4076,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Ako je uređaj zaključan, spriječiti kucanje odgovora ili drugog teksta u obavijestima"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Zadani kontrolor pravopisa"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Odaberite provjeru pravopisa"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Koristi provjeru pravopisa"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Koristi provjeru pravopisa"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Nije odabrano"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(ništa)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4138,7 +4140,7 @@
<string name="bluetooth_disabled" msgid="6588102116819268238">"Isključeno"</string>
<string name="bluetooth_connected_summary" msgid="439920840053965217">"Povezan s uređajem <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_multiple_devices_summary" msgid="596205630653123250">"Povezan s više uređaja"</string>
- <string name="demo_mode" msgid="3831081808592541104">"Način demonstracije Sistemskog UI-a"</string>
+ <string name="demo_mode" msgid="3831081808592541104">"Način rada za demonstraciju Sistemskog UI-a"</string>
<string name="dark_ui_mode" msgid="703844190192599217">"Tema"</string>
<string name="dark_ui_mode_title" msgid="8774932716427742413">"Odabir teme"</string>
<string name="dark_ui_settings_light_summary" msgid="5219102347744462812">"Ova postavka se odnosi i na aplikacije"</string>
@@ -4171,7 +4173,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Radi lakšeg oslobađanja prostora za pohranu, upravitelj pohranom s vašeg uređaja uklanja sigurnosne kopije fotografija i videozapisa."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Ukloni fotografije i videozapise"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Upravitelj prostora za pohranu"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Koristi Upravitelja pohrane"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Koristi Upravitelja pohrane"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatski"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Ručno"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Oslobodite prostor odmah"</string>
@@ -4218,7 +4220,7 @@
<string name="oem_lock_info_message" msgid="5090850412279403901">"Ponovo pokrenite uređaj da omogućite funkciju zaštite uređaja."</string>
<string name="automatic_storage_manager_freed_bytes" msgid="7360443072390107772">"<xliff:g id="SIZE">%1$s</xliff:g> je ukupno na raspolaganju\n\nPosljednji put je pokrenuto <xliff:g id="DATE">%2$s</xliff:g>"</string>
<string name="web_action_enable_title" msgid="4462106633708675959">"Instant aplikacije"</string>
- <string name="web_action_enable_summary" msgid="1729016644691793085">"Otvaranje linkova u aplikacijama, čak iako nisu instalirane"</string>
+ <string name="web_action_enable_summary" msgid="1729016644691793085">"Otvaraj linkove u aplikacijama, čak i ako nisu instalirane"</string>
<string name="web_action_section_title" msgid="5563229447734734662">"Instant aplikacije"</string>
<string name="instant_apps_settings" msgid="879003203555847537">"Postavke instant aplikacija"</string>
<string name="domain_url_section_title" msgid="206403507921518321">"Instalirane aplikacije"</string>
@@ -4241,12 +4243,12 @@
<string name="enterprise_privacy_exposure_changes_category" msgid="1877045221796512001">"Izmjene koje je izvršio adminstrator vaše organizacije"</string>
<string name="enterprise_privacy_device_access_category" msgid="2967602674816237833">"Vaš pristup ovom uređaju"</string>
<string name="enterprise_privacy_enterprise_data" msgid="6551504749971424942">"Podaci koji su povezani s vašim računom, kao što su e-pošta ili kalendar"</string>
- <string name="enterprise_privacy_installed_packages" msgid="4376014821459811800">"Spisak aplikacija na vašem uređaju"</string>
+ <string name="enterprise_privacy_installed_packages" msgid="4376014821459811800">"Lista aplikacija na vašem uređaju"</string>
<string name="enterprise_privacy_usage_stats" msgid="445762931318731975">"Utrošeno vrijeme i podaci za svaku aplikaciju"</string>
<string name="enterprise_privacy_network_logs" msgid="5427398751599441159">"Najskoriji zapis mrežnog saobraćaja"</string>
<string name="enterprise_privacy_bug_reports" msgid="283443567328836380">"Najnoviji izvještaj o greškama"</string>
<string name="enterprise_privacy_security_logs" msgid="8936969480449604726">"Najnoviji zapisnik o aktivnostima"</string>
- <string name="enterprise_privacy_none" msgid="5990646476868794882">"Nema"</string>
+ <string name="enterprise_privacy_none" msgid="5990646476868794882">"Ništa"</string>
<string name="enterprise_privacy_enterprise_installed_packages" msgid="6575025134782391212">"Aplikacije su instalirane"</string>
<string name="enterprise_privacy_apps_count_estimation_info" msgid="5020730108878608500">"Broj aplikacija je samo procjena. Možda nisu obuhvaćene aplikacije koje su instalirane izvan Play trgovine."</string>
<plurals name="enterprise_privacy_number_packages_lower_bound" formatted="false" msgid="5161417161943060602">
@@ -4385,7 +4387,7 @@
<string name="change_wifi_state_title" msgid="5140754955787584174">"Upravljanje WiFi mrežom"</string>
<string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"family link da upravlja WiFi mrežom"</string>
<string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Dozvolite ovoj aplikaciji da uključi ili isključi WiFi, skenira i konektuje se na WiFi, doda ili ukloni mreže, te pokrene lokalnu pristupnu tačku"</string>
- <string name="media_output_title" msgid="8710632337456601848">"Reproduciranje medija"</string>
+ <string name="media_output_title" msgid="8710632337456601848">"Reprodukcija medija na"</string>
<string name="media_output_default_summary" msgid="3159237976830415584">"Ovaj uređaj"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"Telefon"</string>
<string name="media_output_summary" product="tablet" msgid="6672024060360538526">"Tablet"</string>
@@ -4499,9 +4501,9 @@
<string name="mobile_network_erase_sim_dialog_progress" msgid="4881754030959536493">"Brisanje SIM-a…"</string>
<string name="mobile_network_erase_sim_error_dialog_title" msgid="9026625253242102706">"Nije moguće izbrisati SIM"</string>
<string name="mobile_network_erase_sim_error_dialog_body" msgid="5955463559366034787">"Nije moguće izbrisati ovaj SIM zbog greške.\n\nPonovo pokrenite uređaj i pokušajte ponovo."</string>
- <string name="preferred_network_mode_title" msgid="8324526359482124770">"Vrsta preferirane mreže"</string>
+ <string name="preferred_network_mode_title" msgid="8324526359482124770">"Preferirana vrsta mreže"</string>
<string name="preferred_network_mode_summary" msgid="388957154320426335">"Promijenite način rada mreže"</string>
- <string name="preferred_network_mode_dialogtitle" msgid="5448698073828567428">"Vrsta preferirane mreže"</string>
+ <string name="preferred_network_mode_dialogtitle" msgid="5448698073828567428">"Preferirana vrsta mreže"</string>
<string name="carrier_settings_euicc" msgid="7723199738771996732">"Operater"</string>
<string name="carrier_settings_version" msgid="2657511289029828425">"Verzija postavki"</string>
<string name="call_category" msgid="3418535202893644015">"Pozivanje"</string>
diff --git a/tests/CarDeveloperOptions/res/values-ca/arrays.xml b/tests/CarDeveloperOptions/res/values-ca/arrays.xml
index 593c847..2ff467c 100644
--- a/tests/CarDeveloperOptions/res/values-ca/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-ca/arrays.xml
@@ -257,7 +257,7 @@
<item msgid="5420704980305018295">"volum de la veu"</item>
<item msgid="5797363115508970204">"volum del to"</item>
<item msgid="8233154098550715999">"volum de multimèdia"</item>
- <item msgid="5196715605078153950">"volum de l\'alarma"</item>
+ <item msgid="5196715605078153950">"volum d\'alarma"</item>
<item msgid="394030698764284577">"volum de notificació"</item>
<item msgid="8952898972491680178">"volum del Bluetooth"</item>
<item msgid="8506227454543690851">"mantén actiu"</item>
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"executar en segon pla"</item>
<item msgid="6423861043647911030">"volum d\'accessibilitat"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Ubicació"</item>
+ <item msgid="6656077694190491067">"Ubicació"</item>
+ <item msgid="8790228218278477369">"Ubicació"</item>
+ <item msgid="7836406246005211990">"Vibració"</item>
+ <item msgid="3951439024549922598">"Llegeix els contactes"</item>
+ <item msgid="8802152411647068">"Modifica els contactes"</item>
+ <item msgid="229544934599698735">"Llegeix el registre de trucades"</item>
+ <item msgid="7396102294405899613">"Modifica el registre de trucades"</item>
+ <item msgid="3597797992398484655">"Llegeix el calendari"</item>
+ <item msgid="2705975774250907343">"Modifica el calendari"</item>
+ <item msgid="4668747371441932697">"Ubicació"</item>
+ <item msgid="1487578921720243646">"Notificació de la publicació"</item>
+ <item msgid="4636080349724146638">"Ubicació"</item>
+ <item msgid="673510900286463926">"Trucada"</item>
+ <item msgid="542083422784609790">"Llegeix SMS/MMS"</item>
+ <item msgid="1033780373029588436">"Escriu SMS/MMS"</item>
+ <item msgid="5647111115517787488">"Rep SMS/MMS"</item>
+ <item msgid="8591105601108455893">"Rep SMS/MMS"</item>
+ <item msgid="7730995008517841903">"Rep SMS/MMS"</item>
+ <item msgid="2613033109026626086">"Rep SMS/MMS"</item>
+ <item msgid="3037159047591081136">"Envia SMS/MMS"</item>
+ <item msgid="4726682243833913568">"Llegeix SMS/MMS"</item>
+ <item msgid="6555678522277865572">"Escriu SMS/MMS"</item>
+ <item msgid="6981734935578130884">"Modifica la configuració"</item>
+ <item msgid="8705854389991425629">"Dibuixa a sobre"</item>
+ <item msgid="5861356020344153651">"Accedeix a les notificacions"</item>
+ <item msgid="78432174621628659">"Càmera"</item>
+ <item msgid="3986116419882154794">"Grava l\'àudio"</item>
+ <item msgid="4516840825756409490">"Reprodueix l\'àudio"</item>
+ <item msgid="6811712502798183957">"Llegeix el porta-retalls"</item>
+ <item msgid="2780369012602289114">"Modifica el porta-retalls"</item>
+ <item msgid="2331359440170850868">"Botons de multimèdia"</item>
+ <item msgid="6133599737122751231">"Enfocament de l\'àudio"</item>
+ <item msgid="6844485713404805301">"Volum general"</item>
+ <item msgid="1600379420669104929">"Volum de la veu"</item>
+ <item msgid="6296768210470214866">"Volum del to"</item>
+ <item msgid="510690696071629241">"Volum de multimèdia"</item>
+ <item msgid="406861638631430109">"Volum d\'alarma"</item>
+ <item msgid="4715864795872233884">"Volum de notificació"</item>
+ <item msgid="2311478519251301183">"Volum del Bluetooth"</item>
+ <item msgid="5133991377896747027">"Mantén actiu"</item>
+ <item msgid="2464189519136248621">"Ubicació"</item>
+ <item msgid="2062677934050803037">"Ubicació"</item>
+ <item msgid="1735171933192715957">"Obtenir estadístiques d\'ús"</item>
+ <item msgid="1014093788778383554">"Silencia / deixa de silenciar el micròfon"</item>
+ <item msgid="4199297950608622850">"Mostrar l\'avís"</item>
+ <item msgid="2527962435313398821">"Projectar fitxers multimèdia"</item>
+ <item msgid="5117506254221861929">"Activar la VPN"</item>
+ <item msgid="8291198322681891160">"Fons de pantalla d\'escriptura"</item>
+ <item msgid="7106921284621230961">"Estructura d\'assistència"</item>
+ <item msgid="4496533640894624799">"Captura de pantalla d\'assistència"</item>
+ <item msgid="2598847264853993611">"Consultar l\'estat del telèfon"</item>
+ <item msgid="9215610846802973353">"Afegir missatges de veu"</item>
+ <item msgid="9186411956086478261">"Utilitzar el protocol SIP"</item>
+ <item msgid="6884763100104539558">"Processar les trucades sortints"</item>
+ <item msgid="125513972170580692">"Empremta digital"</item>
+ <item msgid="2556071024281275619">"Sensors corporals"</item>
+ <item msgid="617168514928339387">"Consultar les difusions mòbils"</item>
+ <item msgid="7134693570516523585">"Ubicació simulada"</item>
+ <item msgid="7224489175375229399">"Consultar l\'emmagatzematge"</item>
+ <item msgid="8472735063903258202">"Fer canvis a l\'emmagatzematge"</item>
+ <item msgid="4069276819909595110">"Activar la pantalla"</item>
+ <item msgid="1228338896751121025">"Obtenir comptes"</item>
+ <item msgid="3181581793459233672">"Executar en segon pla"</item>
+ <item msgid="2340936043025374076">"Volum d\'accessibilitat"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Breu"</item>
<item msgid="4816511817309094890">"Mitjana"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"No permetis mai"</item>
<item msgid="8184570120217958741">"Permet sempre"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normal"</item>
+ <item msgid="5101233285497327432">"Moderada"</item>
+ <item msgid="1555861583162930714">"Baixa"</item>
+ <item msgid="1719683776264798117">"Crítica"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normal"</item>
+ <item msgid="6107138933849816768">"Moderada"</item>
+ <item msgid="182695359839047859">"Baixa"</item>
+ <item msgid="8577246509202964244">"Crítica"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Persistent"</item>
<item msgid="167418068739176448">"Activitat principal"</item>
diff --git a/tests/CarDeveloperOptions/res/values-ca/strings.xml b/tests/CarDeveloperOptions/res/values-ca/strings.xml
index 3ba237f..d18927f 100644
--- a/tests/CarDeveloperOptions/res/values-ca/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-ca/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Amplia o redueix la mida del text de la pantalla."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Redueix"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Amplia"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Text de mostra"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"El meravellós mag d\'Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Capítol 11: La meravellosa Ciutat Maragda d\'Oz"</string>
@@ -364,12 +363,12 @@
<string name="owner_info_settings_summary" msgid="4208702251226725583">"Cap"</string>
<string name="owner_info_settings_status" msgid="8049975536717685126">"<xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
<string name="owner_info_settings_edit_text_hint" msgid="2250029417257939706">"P. ex., Android del Lluís"</string>
- <string name="user_info_settings_title" msgid="1125111518759995748">"Info. de l\'usuari"</string>
+ <string name="user_info_settings_title" msgid="1125111518759995748">"Informació de l\'usuari"</string>
<string name="show_profile_info_on_lockscreen_label" msgid="5204282771893683026">"Mostra la inf. de perfil a la pantalla de bloqueig"</string>
<string name="profile_info_settings_title" msgid="4855892878512562551">"Informació de perfil"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Comptes"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Ubicació"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Utilitza la ubicació"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Utilitza la ubicació"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Desactivat"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Activada - <xliff:g id="COUNT_1">%1$d</xliff:g> aplicacions poden accedir a la ubicació</item>
@@ -421,7 +420,7 @@
<string name="security_settings_face_settings_use_face_unlock_phone" msgid="318274519126401671">"Desbloqueja el dispositiu"</string>
<string name="security_settings_face_settings_use_face_for_apps" msgid="5479369083370664351">"Inici de sessió i pagaments"</string>
<string name="security_settings_face_settings_require_attention" msgid="2755140150841557225">"Obre els ulls per desbloquejar"</string>
- <string name="security_settings_face_settings_require_attention_details" msgid="2557060433599942587">"Els ulls han d\'estar oberts durant l\'autenticació facial"</string>
+ <string name="security_settings_face_settings_require_attention_details" msgid="2557060433599942587">"Quan utilitzis l\'autenticació facial, has de tenir els ulls oberts"</string>
<string name="security_settings_face_settings_require_confirmation" msgid="7312024271060416438">"Requereix sempre confirmació"</string>
<string name="security_settings_face_settings_require_confirmation_details" msgid="8740564864091803429">"En autenticar en aplicacions, requereix sempre confirmació"</string>
<string name="security_settings_face_settings_remove_face_data" msgid="2821359954483136239">"Suprimeix les dades facials"</string>
@@ -461,13 +460,13 @@
<string name="skip_lock_screen_dialog_button_label" msgid="6706047245716780006">"Omet"</string>
<string name="cancel_lock_screen_dialog_button_label" msgid="2534925227627658819">"Cancel·la"</string>
<string name="security_settings_fingerprint_enroll_find_sensor_title" msgid="8909829699273726469">"Toca el sensor"</string>
- <string name="security_settings_fingerprint_enroll_find_sensor_message" msgid="581120963079780740">"És a la part posterior del telèfon. Fes servir el dit índex."</string>
+ <string name="security_settings_fingerprint_enroll_find_sensor_message" msgid="581120963079780740">"És a la part posterior del telèfon. Utilitza el dit índex."</string>
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="7835824123269738540">"Il·lustració amb la ubicació del sensor d\'empremtes digitals i de dispositiu"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="3519748398694308901">"Nom"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="3428927518029038956">"D\'acord"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="4312297515772004580">"Suprimeix"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"Toca el sensor"</string>
- <string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Col·loca el dit al sensor i aixeca\'l quan notis una vibració"</string>
+ <string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Col·loca el dit al sensor i aixeca\'l quan notis una vibració."</string>
<string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"Aixeca el dit i toca de nou"</string>
<string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Continua aixecant el dit per afegir les diferents parts de l\'empremta digital"</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"Empremta digital afegida"</string>
@@ -487,9 +486,9 @@
<string name="security_settings_fingerprint_enroll_setup_screen_lock" msgid="9036983528330627756">"Configura el bloqueig de pantalla"</string>
<string name="security_settings_fingerprint_enroll_done" msgid="4111289529758845926">"Fet"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"Això no és el sensor"</string>
- <string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"Toca el sensor situat a la part posterior amb el dit índex."</string>
+ <string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"Toca el sensor situat a la part posterior del telèfon. Utilitza el dit índex."</string>
<string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"No s\'ha completat el registre"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"S\'ha esgotat el temps d\'espera per inscriure l\'empremta digital. Torna-ho a provar."</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"S\'ha esgotat el límit de temps per inscriure l\'empremta digital. Torna-ho a provar."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"El registre de l\'empremta digital no ha funcionat. Torna-ho a provar o fes servir un altre dit."</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"Afegeix-ne una altra"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"Següent"</string>
@@ -549,7 +548,7 @@
<string name="setup_lock_settings_picker_title" product="tablet" msgid="2429667472335773519">"Protegeix la tauleta"</string>
<string name="setup_lock_settings_picker_title" product="device" msgid="4739290104106645233">"Protegeix el dispositiu"</string>
<string name="setup_lock_settings_picker_title" product="default" msgid="3911582328576859628">"Protegeix el telèfon"</string>
- <string name="lock_settings_picker_biometrics_added_security_message" msgid="799453282539387294">"Defineix un bloqueig de pantalla alternatiu per a més seguretat"</string>
+ <string name="lock_settings_picker_biometrics_added_security_message" msgid="799453282539387294">"Per a més seguretat, defineix un bloqueig de pantalla alternatiu"</string>
<string name="setup_lock_settings_picker_message" product="tablet" msgid="7230799135599877804">"Activa les funcions de protecció del dispositiu per impedir que altres persones utilitzin aquesta tauleta sense permís. Tria el bloqueig de pantalla que vulguis utilitzar."</string>
<string name="setup_lock_settings_picker_message" product="device" msgid="2098404520816295371">"Activa les funcions de protecció del dispositiu per impedir que altres persones el facin servir sense permís. Tria el bloqueig de pantalla que vulguis utilitzar."</string>
<string name="setup_lock_settings_picker_message" product="default" msgid="2003984443953672040">"Activa les funcions de protecció del dispositiu per impedir que altres persones utilitzin aquest telèfon sense permís. Tria el bloqueig de pantalla que vulguis utilitzar."</string>
@@ -719,7 +718,7 @@
<item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> aplicació activa</item>
</plurals>
<string name="manage_trust_agents" msgid="8129970926213142261">"Agents de confiança"</string>
- <string name="disabled_because_no_backup_security" msgid="8127039979909203528">"Per utilitzar aquesta opció, has de configurar un bloqueig de pantalla"</string>
+ <string name="disabled_because_no_backup_security" msgid="8127039979909203528">"Per utilitzar aquesta opció, has de definir un bloqueig de pantalla"</string>
<string name="manage_trust_agents_summary" msgid="2023116850759962248">"Cap"</string>
<plurals name="manage_trust_agents_summary_on" formatted="false" msgid="5550538038916606097">
<item quantity="other"><xliff:g id="COUNT">%d</xliff:g> agents de confiança actius</item>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Activa la Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Utilitza la Wi‑Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Utilitza la Wi‑Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Configuració de Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Configura i gestiona els punts d\'accés sense fil"</string>
@@ -876,7 +875,7 @@
<string name="wifi_cellular_data_fallback_title" msgid="5067241930716252665">"Canvia automàticament a dades mòbils"</string>
<string name="wifi_cellular_data_fallback_summary" msgid="2721467405851519769">"Utilitza dades mòbils quan la Wi-Fi no tingui accés a Internet. És possible que s\'hi apliquin càrrecs per ús de dades."</string>
<string name="wifi_add_network" msgid="4094957940791876640">"Afegeix una xarxa"</string>
- <string name="wifi_configure_settings_preference_title" msgid="2678534679408777268">"Preferències de la Wi‑Fi"</string>
+ <string name="wifi_configure_settings_preference_title" msgid="2678534679408777268">"Preferències de Wi‑Fi"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="5714892572614655675">"La Wi‑Fi es torna a connectar automàticament"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_off" msgid="286904094152909651">"La Wi‑Fi no es torna a activar automàticament"</string>
<string name="wifi_access_points" msgid="1647976498906871869">"Xarxes Wi-Fi"</string>
@@ -906,7 +905,7 @@
<string name="wifi_ssid_hint" msgid="5010024648106585165">"Introdueix l\'SSID"</string>
<string name="wifi_security" msgid="9136702039496152831">"Seguretat"</string>
<string name="wifi_hidden_network" msgid="6647772204699776833">"Xarxa amagada"</string>
- <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Si el teu encaminador no emet cap identificador de xarxa, però vols connectar-t\'hi més endavant, pots configurar la xarxa com a oculta.\n\nAixò pot crear un risc de seguretat perquè el telèfon emetrà el senyal per trobar la xarxa de manera regular.\n\nConfigurar la xarxa com a oculta no canviarà la configuració del teu encaminador."</string>
+ <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Si el teu encaminador no emet cap identificador de xarxa, però vols connectar-t\'hi més endavant, pots configurar la xarxa com a oculta.\n\nAixò pot crear un risc de seguretat perquè el telèfon emetrà el senyal de manera regular per trobar la xarxa.\n\nConfigurar la xarxa com a oculta no canviarà la configuració del teu encaminador."</string>
<string name="wifi_signal" msgid="696548364467704808">"Intensitat del senyal"</string>
<string name="wifi_status" msgid="3439931558930689940">"Estat"</string>
<string name="tx_wifi_speed" msgid="2571810085003261073">"Transmet la velocitat de l\'enllaç"</string>
@@ -928,7 +927,7 @@
<string name="wifi_ap_choose_auto" msgid="7927637960569365785">"Automàtica"</string>
<string name="wifi_ap_choose_2G" msgid="43198403259714736">"Banda de 2,4 GHz"</string>
<string name="wifi_ap_choose_5G" msgid="2624859713183683146">"Banda de 5,0 GHz"</string>
- <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"Preferència per la banda de 5,0 GHz"</string>
+ <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"Banda de 5,0 GHz preferida"</string>
<string name="wifi_ap_2G" msgid="5793110086517338494">"2,4 GHz"</string>
<string name="wifi_ap_5G" msgid="4584892544393675403">"5,0 GHz"</string>
<string name="wifi_ap_band_select_one" msgid="4409754936554360355">"Tria almenys una banda per al punt d\'accés Wi-Fi:"</string>
@@ -973,7 +972,7 @@
<string name="wifi_multiple_cert_added" msgid="7986200585749147204">"(S\'han afegit diversos certificats)"</string>
<string name="wifi_use_system_certs" msgid="4794489370929885022">"Utilitza certificats del sistema"</string>
<string name="wifi_do_not_provide_eap_user_cert" msgid="4044301449482425250">"No proporcionis un certificat d\'usuari"</string>
- <string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"No validis el servidor d\'EAP"</string>
+ <string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"No validis"</string>
<string name="wifi_do_not_validate_eap_server_warning" msgid="3895397996759837323">"No s\'ha especificat cap certificat. La connexió no serà privada."</string>
<string name="wifi_ssid_too_long" msgid="34911971389775920">"El nom de la xarxa és massa llarg."</string>
<string name="wifi_no_domain_warning" msgid="735859919311067606">"Has d\'especificar un domini."</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi‑Fi"</item>
+ <item msgid="2271962426654621656">"Dades mòbils"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Si no pots fer servir la Wi‑Fi, utilitza la xarxa mòbil"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Si no pots fer servir la xarxa mòbil, utilitza la Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Trucades per Wi‑Fi. Si perds la connexió, la trucada finalitzarà."</string>
@@ -1136,7 +1138,7 @@
<string name="dtmf_tone_enable_title" msgid="3797301105270314782">"So en marcar el número"</string>
<string name="sound_effects_enable_title" msgid="3693756476729696246">"Toca els sons"</string>
<string name="lock_sounds_enable_title" msgid="6456726219456531315">"So de bloqueig de pantalla"</string>
- <string name="audio_record_proc_title" msgid="5772134576781468721">"Cancel·lació de sorolls"</string>
+ <string name="audio_record_proc_title" msgid="5772134576781468721">"Reducció del soroll"</string>
<string name="volume_media_description" msgid="3659485559976891268">"Música, vídeos, jocs i altres fitxers multimèdia"</string>
<string name="volume_ring_description" msgid="1975431532517579212">"So de trucada i notificacions"</string>
<string name="volume_notification_description" msgid="8871940450828766751">"Notificacions"</string>
@@ -1218,7 +1220,7 @@
<string name="night_display_end_time_title" msgid="2760793157124245911">"Hora de finalització"</string>
<string name="night_display_status_title" msgid="1727020934735770319">"Estat"</string>
<string name="night_display_temperature_title" msgid="8375126629902616296">"Intensitat"</string>
- <string name="night_display_summary_off" msgid="8850539785332228069">"Desactivada / <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="night_display_summary_off" msgid="8850539785332228069">"Desactivat / <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="night_display_summary_off_auto_mode_never" msgid="8618824386434992487">"No s\'activarà mai automàticament"</string>
<string name="night_display_summary_off_auto_mode_custom" msgid="596847003171394411">"S\'activarà automàticament a les <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="night_display_summary_off_auto_mode_twilight" msgid="4071750976585359952">"S\'activarà automàticament al vespre"</string>
@@ -1284,7 +1286,7 @@
<string name="sim_reenter_new" msgid="5692585822458989725">"Torna a escriure el PIN nou"</string>
<string name="sim_change_pin" msgid="1674620855223900785">"PIN de la SIM"</string>
<string name="sim_bad_pin" msgid="2409776007569751629">"PIN incorrecte"</string>
- <string name="sim_pins_dont_match" msgid="1076283313667637902">"Els codis PIN no coincideixen"</string>
+ <string name="sim_pins_dont_match" msgid="1076283313667637902">"Els PIN no coincideixen"</string>
<string name="sim_change_failed" msgid="8874765697694275459">"No es pot canviar el PIN.\nÉs possible que sigui incorrecte."</string>
<string name="sim_change_succeeded" msgid="8802418023120614533">"PIN de la SIM canviat correctament"</string>
<string name="sim_lock_failed" msgid="7949781515066772755">"No es pot canviar l\'estat de bloqueig de la targeta SD.\nÉs possible que el PIN sigui incorrecte."</string>
@@ -1315,7 +1317,7 @@
<string name="hardware_revision" msgid="3315744162524354246">"Versió del maquinari"</string>
<string name="fcc_equipment_id" msgid="8681995718533066093">"Id. de l\'equip"</string>
<string name="baseband_version" msgid="9115560821840757786">"Versió de banda base"</string>
- <string name="kernel_version" msgid="8226014277756019297">"Versió del kernel"</string>
+ <string name="kernel_version" msgid="8226014277756019297">"Versió de kernel"</string>
<string name="build_number" msgid="8648447688306248633">"Número de compilació"</string>
<string name="module_version" msgid="1127871672527968730">"Versions del mòdul principal"</string>
<string name="device_info_not_available" msgid="3762481874992799474">"No disponible"</string>
@@ -1428,7 +1430,7 @@
<string name="storage_other_users" msgid="1055693465220962928">"Altres usuaris"</string>
<string name="storage_internal_title" msgid="7969898703086593200">"Emmagatzematge del dispositiu"</string>
<string name="storage_external_title" msgid="3308178326521953306">"Emmagatzematge portàtil"</string>
- <string name="storage_volume_summary" msgid="3938298080954984809">"S\'han utilitzat <xliff:g id="USED">%1$s</xliff:g> d\'un total de <xliff:g id="TOTAL">%2$s</xliff:g>"</string>
+ <string name="storage_volume_summary" msgid="3938298080954984809">"<xliff:g id="USED">%1$s</xliff:g> en ús de <xliff:g id="TOTAL">%2$s</xliff:g>"</string>
<string name="storage_size_large" msgid="2252229139037320440">"<xliff:g id="NUMBER">^1</xliff:g>"<small><small>" <xliff:g id="UNIT">^2</xliff:g>"</small></small>""</string>
<string name="storage_volume_used" msgid="6762683251427947210">"En ús de: <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
<string name="storage_volume_used_total" msgid="1915664465366569853">"Total utilitzat de: <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
@@ -1536,7 +1538,7 @@
<string name="apn_server" msgid="625116221513279678">"Servidor"</string>
<string name="apn_mmsc" msgid="4621771343217824216">"MMSC"</string>
<string name="apn_mms_proxy" msgid="636948562860444714">"Servidor intermediari MMS"</string>
- <string name="apn_mms_port" msgid="6606572282014819299">"Port per a MMS"</string>
+ <string name="apn_mms_port" msgid="6606572282014819299">"Port MMS"</string>
<string name="apn_mcc" msgid="9138301167194779180">"MCC"</string>
<string name="apn_mnc" msgid="1276161191283274976">"MNC"</string>
<string name="apn_auth_type" msgid="4286147728662523362">"Tipus d\'autenticació"</string>
@@ -1547,11 +1549,11 @@
<string name="apn_type" msgid="6725346490902871146">"Tipus d\'APN"</string>
<string name="apn_protocol" msgid="1240197323563960912">"Protocol APN"</string>
<string name="apn_roaming_protocol" msgid="6913336248771263497">"Protocol d\'itinerància d\'APN"</string>
- <string name="carrier_enabled" msgid="1819916725305365581">"Activa/desactiva APN"</string>
+ <string name="carrier_enabled" msgid="1819916725305365581">"Activa/Desactiva APN"</string>
<string name="carrier_enabled_summaryOn" msgid="6219221535461945771">"APN activat"</string>
<string name="carrier_enabled_summaryOff" msgid="4093019532796386622">"APN desactivat"</string>
- <string name="bearer" msgid="4378444317087536401">"Tipus de connexió"</string>
- <string name="mvno_type" msgid="3150755279048149624">"Tipus de MVNO"</string>
+ <string name="bearer" msgid="4378444317087536401">"Portador"</string>
+ <string name="mvno_type" msgid="3150755279048149624">"Tipus d\'OMV"</string>
<string name="mvno_match_data" msgid="629287305803195245">"Valor de MVNO"</string>
<string name="menu_delete" msgid="8646081395424055735">"Suprimeix l\'APN"</string>
<string name="menu_new" msgid="7529219814721969024">"APN nou"</string>
@@ -1565,7 +1567,7 @@
<string name="error_adding_apn_type" msgid="671634520340569678">"L\'operador no permet afegir APN de tipus %s."</string>
<string name="restore_default_apn" msgid="7195266404077471007">"S\'està restaurant la configuració predeterminada d\'APN."</string>
<string name="menu_restore" msgid="3799288817317293115">"Restableix valors predeterminats"</string>
- <string name="restore_default_apn_completed" msgid="5671734152740058937">"S\'ha restablert la configuració predeterminada d\'APN."</string>
+ <string name="restore_default_apn_completed" msgid="5671734152740058937">"S\'ha restablert la configuració d\'APN predeterminada."</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"Opcions de restabliment"</string>
<string name="reset_dashboard_summary" msgid="8778383341461126642">"Es poden restablir la xarxa, les aplicacions o el dispositiu"</string>
<string name="reset_network_title" msgid="8944059136930806211">"Restableix Wi-Fi, dades mòbils i Bluetooth"</string>
@@ -1584,7 +1586,7 @@
<string name="master_clear_title" msgid="1560712943955904673">"Esborra totes les dades (restabliment de les dades de fàbrica)"</string>
<string name="master_clear_short_title" msgid="919098101581335101">"Esborra totes les dades"</string>
<string name="master_clear_desc" product="tablet" msgid="3432373610755760899">"Aquesta acció esborrarà totes les dades de l\'"<b>"emmagatzematge intern"</b>" de la tauleta, com ara:\n\n"<li>"el teu Compte de Google"</li>\n<li>"les dades i la configuració del sistema i de les aplicacions"</li>\n<li>"les aplicacions baixades"</li></string>
- <string name="master_clear_desc" product="default" msgid="8765543541962866697">"Aquesta acció esborrarà totes les dades de l\'"<b>"emmagatzematge intern"</b>" del telèfon, com ara:\n\n"<li>"El teu Compte de Google"</li>\n<li>"Les dades i la configuració del sistema i de les aplicacions"</li>\n<li>"Les aplicacions baixades"</li></string>
+ <string name="master_clear_desc" product="default" msgid="8765543541962866697">"S\'esborraran totes les dades de l\'"<b>"emmagatzematge intern"</b>" del telèfon, inclosos:\n\n"<li>"El teu Compte de Google"</li>\n<li>"Les dades i la configuració del sistema i de les aplicacions"</li>\n<li>"Les aplicacions baixades"</li></string>
<string name="master_clear_accounts" product="default" msgid="3432884235445405376">\n\n"Tens la sessió iniciada als comptes següents:\n"</string>
<string name="master_clear_other_users_present" product="default" msgid="5993259656117566767">\n\n"En aquest dispositiu hi ha altres usuaris.\n"</string>
<string name="master_clear_desc_also_erases_external" msgid="3947303501615091903"><li>"Música"</li>\n<li>"Fotos"</li>\n<li>"Altres dades de l\'usuari"</li></string>
@@ -1613,7 +1615,7 @@
<string name="tether_settings_title_bluetooth" msgid="1999590158102569959">"Compartició de xarxa per Bluetooth"</string>
<string name="tether_settings_title_usb_bluetooth" msgid="1159128764162788159">"Compartició de xarxa"</string>
<string name="tether_settings_title_all" msgid="6935843543433954181">"Punt d\'accés Wi-Fi i compartició de xarxa"</string>
- <string name="tether_settings_summary_hotspot_on_tether_on" msgid="1289593649526514499">"Punt d\'accés Wi-Fi i compartició de xarxa activats"</string>
+ <string name="tether_settings_summary_hotspot_on_tether_on" msgid="1289593649526514499">"Punt d\'accés Wi-Fi activat, compartició de xarxa"</string>
<string name="tether_settings_summary_hotspot_on_tether_off" msgid="8010689354668285422">"Punt d\'accés Wi-Fi activat"</string>
<string name="tether_settings_summary_hotspot_off_tether_on" msgid="1349909238672649877">"Compartició de xarxa"</string>
<string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"No es pot compartir la xarxa ni utilitzar punts d\'accés Wi-Fi mentre la funció Economitzador de dades està activada"</string>
@@ -1645,8 +1647,8 @@
<string name="mobile_insert_sim_card" msgid="7594550403454243732">"Insereix la targeta SIM i reinicia"</string>
<string name="mobile_connect_to_internet" msgid="6031886097365170913">"Connecta a Internet"</string>
<string name="location_title" msgid="8664674161765477168">"La meva ubicació"</string>
- <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"Ubicació perfil de treball"</string>
- <string name="location_app_level_permissions" msgid="1298041503927632960">"Permís d\'aplicacions"</string>
+ <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"Ubicació per al perfil de treball"</string>
+ <string name="location_app_level_permissions" msgid="1298041503927632960">"Permisos de les aplicacions"</string>
<string name="location_app_permission_summary_location_off" msgid="541372845344796336">"La ubicació està desactivada"</string>
<plurals name="location_app_permission_summary_location_on" formatted="false" msgid="7904821382328758218">
<item quantity="other">Aplicacions que tenen accés il·limitat: <xliff:g id="BACKGROUND_LOCATION_APP_COUNT_2">%1$d</xliff:g> de <xliff:g id="TOTAL_LOCATION_APP_COUNT_3">%2$d</xliff:g></item>
@@ -1679,7 +1681,7 @@
<string name="location_access_summary" msgid="6919495149026354355">"Permet que les aplicacions que hagin demanat permís utilitzin la informació sobre la ubicació"</string>
<string name="location_sources_heading" msgid="8526658357120282741">"Fonts d\'ubicació"</string>
<string name="about_settings" product="tablet" msgid="4869626690708456341">"Informació sobre la tauleta"</string>
- <string name="about_settings" product="default" msgid="6019547763377294261">"Informació sobre el telèfon"</string>
+ <string name="about_settings" product="default" msgid="6019547763377294261">"Informació del telèfon"</string>
<string name="about_settings" product="device" msgid="1770438316234693655">"Informació sobre el dispositiu"</string>
<string name="about_settings" product="emulator" msgid="4497482494770487014">"Sobre el dispositiu emulat"</string>
<string name="about_settings_summary" msgid="4506081667462281647">"Mostra informació legal, estat, versió de programari"</string>
@@ -1706,8 +1708,8 @@
<string name="confirm_device_credential_use_alternate_method" msgid="1279869272895739941">"Utilitza un altre mètode"</string>
<string name="lockpassword_choose_your_screen_lock_header" msgid="6283518876031424798">"Defineix un bloqueig de pantalla"</string>
<string name="lockpassword_choose_your_password_message" msgid="2838273977481046536">"Per motius de seguretat, cal que defineixis una contrasenya"</string>
- <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="4921343500484160894">"Defineix una contrasenya"</string>
- <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="314870151462139417">"Defineix un patró"</string>
+ <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="4921343500484160894">"Per utilitzar l\'empremta, defineix una contrasenya"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="314870151462139417">"Per utilitzar l\'empremta, defineix un patró"</string>
<string name="lockpassword_choose_your_pin_message" msgid="8942598950627277885">"Per motius de seguretat, cal que defineixis un PIN"</string>
<string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1102927520952116303">"Per utilitzar l\'empremta, defineix un PIN"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="1503075455752279687">"Per motius de seguretat, cal que defineixis un patró"</string>
@@ -1715,7 +1717,7 @@
<string name="lockpassword_confirm_your_pattern_header" msgid="7137526922696316545">"Confirma el patró"</string>
<string name="lockpassword_confirm_your_pin_header" msgid="4335593948303036343">"Torna a introduir el PIN"</string>
<string name="lockpassword_confirm_passwords_dont_match" msgid="1783767008133345784">"Les contrasenyes no coincideixen"</string>
- <string name="lockpassword_confirm_pins_dont_match" msgid="5444357293637748942">"Els codis PIN no coincideixen"</string>
+ <string name="lockpassword_confirm_pins_dont_match" msgid="5444357293637748942">"Els PIN no coincideixen"</string>
<string name="lockpassword_draw_your_pattern_again_header" msgid="9017394036814402348">"Torna a dibuixar el patró"</string>
<string name="lockpassword_choose_lock_generic_header" msgid="4418423132980560119">"Mètode de desbloqueig"</string>
<string name="lockpassword_password_set_toast" msgid="601928982984489868">"La contrasenya s\'ha definit"</string>
@@ -1762,7 +1764,7 @@
<string name="lockpattern_settings_title" msgid="5152005866870766842">"Patró de desbloqueig"</string>
<string name="lockpattern_settings_enable_title" msgid="8508410891939268080">"Requereix un patró"</string>
<string name="lockpattern_settings_enable_summary" msgid="8027605503917737512">"Cal dibuixar el patró per desbloquejar la pantalla"</string>
- <string name="lockpattern_settings_enable_visible_pattern_title" msgid="4935583222709647096">"Mostra el patró"</string>
+ <string name="lockpattern_settings_enable_visible_pattern_title" msgid="4935583222709647096">"Fes que el patró sigui visible"</string>
<string name="lockpattern_settings_enable_visible_pattern_title_profile" msgid="5338893138982642228">"Mostra el patró del perfil"</string>
<string name="lockpattern_settings_enable_tactile_feedback_title" msgid="3203621862806531947">"Vibra en tocar"</string>
<string name="lockpattern_settings_enable_power_button_instantly_locks" msgid="5890335732200257777">"El botó d\'engegada bloqueja"</string>
@@ -1800,7 +1802,7 @@
<string name="storage_label" msgid="1109537840103290384">"Emmagatzematge"</string>
<string name="auto_launch_label" msgid="47089737922907379">"Obrir de manera determinada"</string>
<string name="auto_launch_label_generic" msgid="7865828543459493308">"Valors predeterminats"</string>
- <string name="screen_compatibility_label" msgid="3638271673726075815">"Compatibilitat amb la pantalla"</string>
+ <string name="screen_compatibility_label" msgid="3638271673726075815">"Compatibilitat de la pantalla"</string>
<string name="permissions_label" msgid="7341733648403464213">"Permisos"</string>
<string name="cache_header_label" msgid="3202284481380361966">"Memòria cau"</string>
<string name="clear_cache_btn_text" msgid="107507684844780651">"Esborra memòria cau"</string>
@@ -1842,7 +1844,7 @@
<string name="default_emergency_app" msgid="286530070173495823">"Aplicació en casos d\'emergència"</string>
<string name="reset_app_preferences" msgid="1426500030595212077">"Restableix les preferències d\'aplicacions"</string>
<string name="reset_app_preferences_title" msgid="792909865493673598">"Restablir les preferències d\'aplicacions?"</string>
- <string name="reset_app_preferences_desc" msgid="7935273005301096031">"Es restabliran les preferències de:\n\n "<li>"Aplicacions desactivades"</li>\n" "<li>"Notificacions d\'aplicacions desactivades"</li>\n" "<li>"Aplicacions predeterminades per a accions"</li>\n" "<li>"Restriccions de dades en segon pla per a aplicacions"</li>\n" "<li>"Restriccions de permisos"</li>\n\n" No es perdran les dades de les aplicacions."</string>
+ <string name="reset_app_preferences_desc" msgid="7935273005301096031">"Es restabliran totes les preferències de:\n\n "<li>"Aplicacions desactivades"</li>\n" "<li>"Notificacions d\'aplicacions desactivades"</li>\n" "<li>"Aplicacions predeterminades per a accions"</li>\n" "<li>"Restriccions de dades en segon pla per a aplicacions"</li>\n" "<li>"Restriccions de permisos"</li>\n\n" No es perdran les dades de les aplicacions."</string>
<string name="reset_app_preferences_button" msgid="2041894727477934656">"Restableix aplicacions"</string>
<string name="manage_space_text" msgid="6166469422303124302">"Gestiona l\'espai"</string>
<string name="filter" msgid="2426943916212457962">"Filtra"</string>
@@ -2046,7 +2048,7 @@
<string name="experimental_category_title" msgid="3797000069740110717">"Experimental"</string>
<string name="feature_flags_dashboard_title" msgid="3153034144122754381">"Marques de funcions"</string>
<string name="talkback_title" msgid="3717960404234260050">"Talkback"</string>
- <string name="talkback_summary" msgid="6602857105831641574">"Lector de pantalla destinat principalment a persones invidents i amb problemes de visió"</string>
+ <string name="talkback_summary" msgid="6602857105831641574">"Lector de pantalla destinat principalment a persones invidents i amb poca visió"</string>
<string name="select_to_speak_summary" msgid="7514180457557735421">"Toca els elements de la pantalla per sentir-los en veu alta"</string>
<string name="accessibility_captioning_title" msgid="5878371993023439642">"Subtítols"</string>
<string name="accessibility_screen_magnification_title" msgid="7250949681883917360">"Ampliació"</string>
@@ -2084,7 +2086,7 @@
<string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"Tria el temps que necessites per llegir els missatges que es mostren temporalment.\n\nNo totes les aplicacions admeten aquesta opció de configuració."</string>
<string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"Selecciona el temps que vols tenir per llegir els missatges que es mostren temporalment i et demanen que duguis a terme una acció.\n\nAquesta opció no és compatible amb totes les aplicacions."</string>
<string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"Retard en mantenir premut"</string>
- <string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"Inversió dels colors"</string>
+ <string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"Inversió de colors"</string>
<string name="accessibility_display_inversion_preference_subtitle" msgid="69291255322175323">"Pot afectar el rendiment"</string>
<string name="accessibility_autoclick_preference_title" msgid="9164599088410340405">"Temps de permanència"</string>
<string name="accessibility_autoclick_description" msgid="5492414927846407499">"Si utilitzes un ratolí, pots configurar-lo perquè el cursor faci accions automàticament quan deixi de moure\'s durant un determinat període de temps."</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Vibració de les notificacions"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Vibració de les trucades"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Vibració en tocar"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Utilitza el servei"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Utilitza la correcció del color"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Utilitza subtítols"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Utilitza el servei"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Utilitza la correcció de color"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Utilitza subtítols"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Continua"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Audiòfons"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"No hi ha cap audiòfon connectat"</string>
@@ -2266,7 +2268,7 @@
<string name="controls_subtitle" msgid="6920199888882834620">"Redueix el consum de la bateria"</string>
<string name="packages_subtitle" msgid="6506269487892204413">"Paquets inclosos"</string>
<string name="battery_tip_summary_title" msgid="2750922152518825526">"Les aplicacions funcionen correctament"</string>
- <string name="battery_tip_summary_summary" product="default" msgid="6294900413896440006">"El telèfon fa un ús normal de la bateria en segon pla"</string>
+ <string name="battery_tip_summary_summary" product="default" msgid="6294900413896440006">"El telèfon té un ús normal de la bateria en segon pla"</string>
<string name="battery_tip_summary_summary" product="tablet" msgid="5280099016800644130">"La tauleta fa un ús normal de la bateria en segon pla"</string>
<string name="battery_tip_summary_summary" product="device" msgid="4459840492610842705">"El dispositiu fa un ús normal de la bateria en segon pla"</string>
<string name="battery_tip_low_battery_title" msgid="6784043681672161175">"La bateria té poca capacitat"</string>
@@ -2276,13 +2278,13 @@
<string name="battery_tip_smart_battery_title" product="device" msgid="7419448992583346364">"Millora la durada de la bateria del dispositiu"</string>
<string name="battery_tip_smart_battery_summary" msgid="5344821856478265778">"Activa el gestor de bateria"</string>
<string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"Activa l\'estalvi de bateria"</string>
- <string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"És possible que la bateria s\'esgoti abans del que és habitual"</string>
+ <string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Pot ser que la bateria s\'esgoti massa ràpid"</string>
<string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"S\'ha activat l\'estalvi de bateria"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"És possible que algunes funcions estiguin limitades"</string>
<string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"El telèfon s\'ha utilitzat més del que és habitual"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"La tauleta s\'ha utilitzat més del que és habitual"</string>
<string name="battery_tip_high_usage_title" product="device" msgid="8304138287288309490">"El dispositiu s\'ha utilitzat més del que és habitual"</string>
- <string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"És possible que la bateria s\'esgoti abans del que és habitual"</string>
+ <string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"Pot ser que la bateria s\'esgoti massa ràpid"</string>
<string name="battery_tip_dialog_message" product="default" msgid="8453700079047810964">"El telèfon s\'ha fet servir més del que és habitual i és possible que la bateria s\'esgoti abans del previst.\n\nAquestes són les aplicacions que han consumit més bateria des de la càrrega completa:"</string>
<string name="battery_tip_dialog_message" product="tablet" msgid="6489981050645444068">"La tauleta s\'ha fet servir més del que és habitual. És possible que la bateria s\'esgoti abans del previst.\n\nAquestes són les aplicacions que han fet servir més bateria des de la càrrega completa:"</string>
<string name="battery_tip_dialog_message" product="device" msgid="6348123094674390337">"El dispositiu s\'ha fet servir més del que és habitual. És possible que la bateria s\'esgoti abans del previst.\n\nAquestes són les aplicacions que han fet servir més bateria des de la càrrega completa:"</string>
@@ -2297,7 +2299,7 @@
</plurals>
<plurals name="battery_tip_restrict_summary" formatted="false" msgid="984148373944071669">
<item quantity="other">%2$d aplicacions consumeixen molta bateria en segon pla</item>
- <item quantity="one">%1$s aplicació consumeix molta bateria en segon pla</item>
+ <item quantity="one">%1$s consumeix molta bateria en segon pla</item>
</plurals>
<plurals name="battery_tip_restrict_handled_summary" formatted="false" msgid="469696766640020557">
<item quantity="other">Aquestes aplicacions no es poden executar en segon pla</item>
@@ -2312,7 +2314,7 @@
<string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"Per estalviar bateria, impedeix que aquestes aplicacions consumeixin bateria en segon pla. És possible que les aplicacions restringides no funcionin correctament i que en rebis les notificacions amb retard.\n\nAplicacions:<xliff:g id="APP_LIST">%1$s</xliff:g>\n."</string>
<string name="battery_tip_restrict_app_dialog_ok" msgid="2573410775701913487">"Restringeix"</string>
<string name="battery_tip_unrestrict_app_dialog_title" msgid="812458516399125710">"Vols suprimir la restricció?"</string>
- <string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"Aquesta aplicació podrà consumir bateria en segon pla, cosa que pot provocar que s\'esgoti abans del previst."</string>
+ <string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"Aquesta aplicació podrà utilitzar bateria en segon pla, cosa que pot provocar que s\'esgoti abans del previst."</string>
<string name="battery_tip_unrestrict_app_dialog_ok" msgid="9154938931448151479">"Suprimeix"</string>
<string name="battery_tip_unrestrict_app_dialog_cancel" msgid="7331148618292397166">"Cancel·la"</string>
<string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"Les teves aplicacions utilitzen una quantitat normal de bateria. Si n\'utilitzen massa, el telèfon et suggerirà mesures per evitar-ho.\n\nSi tens poca bateria, sempre pots activar l\'estalvi de bateria."</string>
@@ -2333,7 +2335,7 @@
<string name="restricted_app_detail_footer" msgid="482460517275754465">"Aquestes aplicacions han estat consumint bateria en segon pla. És possible que les aplicacions restringides no funcionin correctament i que en rebis les notificacions amb retard."</string>
<string name="battery_auto_restriction_title" msgid="488905332794794076">"Utilitza el gestor de bateria"</string>
<string name="battery_auto_restriction_summary" msgid="1638072655581821837">"Detecta quan les aplicacions consumeixen bateria"</string>
- <string name="battery_manager_on" msgid="5626982529932239656">"Activat: es detecta el consum de bateria de les aplicacions"</string>
+ <string name="battery_manager_on" msgid="5626982529932239656">"Activat / Es detecta el consum de bateria de les aplicacions"</string>
<string name="battery_manager_off" msgid="9114027524232450371">"Desactivat"</string>
<plurals name="battery_manager_app_restricted" formatted="false" msgid="6721813588142691216">
<item quantity="other">S\'han restringit %1$d aplicacions</item>
@@ -2428,8 +2430,8 @@
<string name="battery_last_full_charge" msgid="5624033030647170717">"Última càrrega completa"</string>
<string name="battery_full_charge_last" msgid="4614554109170251301">"Durada aproximada de la càrrega completa"</string>
<string name="battery_footer_summary" msgid="4828444679643906943">"Les dades d\'ús de la bateria són aproximades i poden variar en funció de l\'ús"</string>
- <string name="battery_detail_foreground" msgid="6616408559186553085">"Durant l\'ús actiu"</string>
- <string name="battery_detail_background" msgid="7938146832943604280">"En segon pla"</string>
+ <string name="battery_detail_foreground" msgid="6616408559186553085">"Mentre està en ús actiu"</string>
+ <string name="battery_detail_background" msgid="7938146832943604280">"Mentre està segon pla"</string>
<string name="battery_detail_power_usage" msgid="3606930232257489212">"Ús de la bateria"</string>
<string name="battery_detail_info_title" msgid="4617514228447481336">"Des de la càrrega completa"</string>
<string name="battery_detail_manage_title" msgid="745194290572617507">"Gestiona l\'ús de la bateria"</string>
@@ -2452,14 +2454,14 @@
<string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"L\'estalvi de bateria s\'activa si és probable que et quedis sense bateria abans de la càrrega habitual següent"</string>
<string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"S\'activarà quan quedi un <xliff:g id="PERCENT">%1$s</xliff:g> de bateria"</string>
<string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Defineix una programació"</string>
- <string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"Desactiva quan la càrrega estigui completa"</string>
- <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"L\'estalvi de bateria es desactivarà quan el telèfon tingui un <xliff:g id="PERCENT">%1$s</xliff:g> de bateria"</string>
+ <string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"Desactiva quan estigui carregada per complet"</string>
+ <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"L\'estalvi de bateria es desactiva quan el telèfon té un <xliff:g id="PERCENT">%1$s</xliff:g> de bateria"</string>
<string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"L\'estalvi de bateria es desactivarà quan la tauleta tingui un <xliff:g id="PERCENT">%1$s</xliff:g> de bateria"</string>
<string name="battery_saver_sticky_description_new" product="device" msgid="5056520668081504111">"L\'estalvi de bateria es desactivarà quan el dispositiu tingui un <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Activa"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Utilitza el mode d\'estalvi de bateria"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Utilitza Estalvi de bateria"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Activa automàticament"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Mai"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"percentatge de bateria: <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
@@ -2561,10 +2563,10 @@
<string name="backup_erase_dialog_title" msgid="8178424339104463014"></string>
<string name="backup_erase_dialog_message" msgid="8767843355330070902">"Vols deixar de crear còpies de seguretat de les contrasenyes de Wi-Fi, de les adreces d\'interès, d\'altres opcions i dades d\'aplicacions i, a més, esborrar totes les còpies dels servidors de Google?"</string>
<string name="fullbackup_erase_dialog_message" msgid="2588536036471144070">"Vols deixar de crear còpies de seguretat de les dades del dispositiu (com ara les contrasenyes de Wi-Fi o l\'historial de trucades) i de les aplicacions (com ara les configuracions i els fitxers que desin) i, a més, esborrar totes les còpies dels servidors remots?"</string>
- <string name="fullbackup_data_summary" msgid="406274198094268556">"Crea còpies de seguretat automàtiques de les dades del dispositiu (com ara les contrasenyes de la Wi-Fi o l\'historial de trucades) i de les aplicacions (com ara les configuracions i els fitxers que desin) de manera remota.\n\nQuan activis les còpies de seguretat automàtiques, les dades dels dispositius i de les aplicacions s\'emmagatzemaran periòdicament de manera remota. Les dades de les aplicacions poden ser qualsevol informació que desin (en funció de la configuració del desenvolupador), incloses les dades potencialment confidencials, com ara contactes, missatges i fotos."</string>
+ <string name="fullbackup_data_summary" msgid="406274198094268556">"Crea còpies de seguretat automàtiques de les dades del dispositiu (com ara les contrasenyes de la Wi-Fi o l\'historial de trucades) i de les aplicacions (com ara les configuracions i els fitxers que desin) de manera remota.\n\nQuan activis les còpies de seguretat automàtiques, les dades dels dispositius i de les aplicacions s\'emmagatzemaran periòdicament de manera remota. Les dades de les aplicacions poden ser qualsevol mena de dada que hagi desat una aplicació (en funció de la configuració del desenvolupador), incloses les dades potencialment confidencials, com ara contactes, missatges i fotos."</string>
<string name="device_admin_settings_title" msgid="2074319456047334589">"Configuració de l\'administrador del dispositiu"</string>
<string name="active_device_admin_msg" msgid="6929247869516924549">"Aplicació d\'administració del dispositiu"</string>
- <string name="remove_device_admin" msgid="4413438593788336400">"Desactiva aquesta aplicació d\'administració del dispositiu"</string>
+ <string name="remove_device_admin" msgid="4413438593788336400">"Desactiva l\'aplicació d\'administració d\'aquest dispositiu"</string>
<string name="uninstall_device_admin" msgid="9017499299961719830">"Desinstal·la l\'aplicació"</string>
<string name="remove_and_uninstall_device_admin" msgid="5607703579731496253">"Desactiva i desinstal·la"</string>
<string name="select_device_admin_msg" msgid="4173769638399075387">"Aplicacions d\'administració del dispositiu"</string>
@@ -2669,7 +2671,7 @@
<string name="data_usage_cellular_data_summary" msgid="9162777397135709280">"En pausa al límit"</string>
<string name="account_settings_menu_auto_sync" msgid="2673669556006027506">"Sincronització automàtica de dades"</string>
<string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"Sincr. dades personals autom."</string>
- <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Sincron. dades feina automàt."</string>
+ <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Sincr. dades treball autom."</string>
<string name="data_usage_change_cycle" msgid="447761920472170031">"Canvia el cicle..."</string>
<string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"Dia del mes per restablir el cicle d\'ús de dades:"</string>
<string name="data_usage_empty" msgid="7981405723435034032">"Cap aplicació no ha utilitzat dades en aquest període."</string>
@@ -2797,7 +2799,7 @@
<string name="vpn_lockdown_summary" msgid="6770030025737770861">"Selecciona un perfil de VPN per estar-hi sempre connectat. El trànsit de la xarxa només es permetrà quan estiguis connectat a aquesta VPN."</string>
<string name="vpn_lockdown_none" msgid="3789288793603394679">"Cap"</string>
<string name="vpn_lockdown_config_error" msgid="8761770968704589885">"Per tenir la VPN sempre activada cal una adreça IP per al servidor i per al DNS."</string>
- <string name="vpn_no_network" msgid="8313250136194588023">"No hi ha cap connexió de xarxa. Torna-ho a provar més tard."</string>
+ <string name="vpn_no_network" msgid="8313250136194588023">"No hi ha cap connexió a la xarxa. Torna-ho a provar més tard."</string>
<string name="vpn_disconnected" msgid="4597953053220332539">"T\'has desconnectat de la VPN"</string>
<string name="vpn_disconnected_summary" msgid="3784118965271376808">"Cap"</string>
<string name="vpn_missing_cert" msgid="2713254242731992902">"Falta un certificat. Prova d\'editar el perfil."</string>
@@ -2868,10 +2870,10 @@
<string name="user_add_user_item_title" msgid="6835385073795492410">"Usuari"</string>
<string name="user_add_profile_item_title" msgid="4932743891449790664">"Perfil restringit"</string>
<string name="user_add_user_title" msgid="2320897397066676472">"Vols afegir un usuari nou?"</string>
- <string name="user_add_user_message_long" msgid="686637203224195465">"Pots compartir aquest dispositiu amb altres usuaris creant usuaris addicionals. Cada usuari té el seu propi espai, que pot personalitzar amb aplicacions i fons de pantalla, entre d\'altres. Els usuaris també poden ajustar opcions de configuració del dispositiu, com ara la Wi-Fi, que afecten els altres usuaris.\n\nQuan afegeixis un usuari nou, haurà de configurar el seu espai.\n\nTots els usuaris poden actualitzar les aplicacions de la resta. És possible que la configuració i els serveis d\'accessibilitat no es transfereixin a l\'usuari nou."</string>
+ <string name="user_add_user_message_long" msgid="686637203224195465">"Pots compartir aquest dispositiu amb altres persones creant usuaris addicionals. Cada usuari té el seu propi espai, que pot personalitzar amb aplicacions i fons de pantalla, entre d\'altres. Els usuaris també poden ajustar opcions de configuració del dispositiu, com ara la Wi-Fi, que afecten els altres usuaris.\n\nQuan afegeixis un usuari nou, haurà de configurar el seu espai.\n\nTots els usuaris poden actualitzar les aplicacions de la resta. És possible que la configuració i els serveis d\'accessibilitat no es transfereixin a l\'usuari nou."</string>
<string name="user_add_user_message_short" msgid="1802594476285458254">"Quan s\'afegeix un usuari nou, aquest usuari ha de configurar el seu espai.\n\nQualsevol usuari pot actualitzar les aplicacions dels altres usuaris."</string>
<string name="user_setup_dialog_title" msgid="6748950002206392396">"Vols configurar l\'usuari ara?"</string>
- <string name="user_setup_dialog_message" msgid="2988559933258353919">"Comprova que l\'usuari pugui accedir al dispositiu i configurar el seu espai."</string>
+ <string name="user_setup_dialog_message" msgid="2988559933258353919">"Assegura\'t que la persona estigui disponible per accedir al dispositiu i configurar el seu espai."</string>
<string name="user_setup_profile_dialog_message" msgid="7611900802824048526">"Vols configurar el perfil ara?"</string>
<string name="user_setup_button_setup_now" msgid="4941459406266856176">"Configura ara"</string>
<string name="user_setup_button_setup_later" msgid="6596031428556518752">"Ara no"</string>
@@ -2920,10 +2922,10 @@
<string name="nfc_payment_app_and_desc" msgid="102312684211458190">"<xliff:g id="APP">%1$s</xliff:g> - <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
<string name="nfc_payment_use_default" msgid="3098724195746409476">"Utilitza l\'aplicació predeterminada"</string>
<string name="nfc_payment_favor_default" msgid="7555356982142464260">"Sempre"</string>
- <string name="nfc_payment_favor_open" msgid="3739055715000436749">"Excepte quan hi hagi oberta una altra aplicació de pagament"</string>
+ <string name="nfc_payment_favor_open" msgid="3739055715000436749">"Excepte quan hi hagi oberta una altra aplicació per pagar"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"En un terminal que tingui la funció Toca i paga, paga amb:"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"Pagar a la terminal"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Configura una aplicació de pagament. A continuació, apropa la part posterior del telèfon a un terminal amb el símbol de pagament sense contacte."</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Configura una aplicació per pagar. A continuació, apropa la part posterior del telèfon a un terminal amb el símbol de pagament sense contacte."</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"Entesos"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"Més..."</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"Vols establir-ho com a preferència?"</string>
@@ -3046,7 +3048,7 @@
<string name="app_default_dashboard_title" msgid="6575301028225232193">"Aplicacions predeterminades"</string>
<string name="system_dashboard_summary" msgid="6582464466735779394">"Idiomes, gestos, hora, còpia de seguretat"</string>
<string name="search_results_title" msgid="4160717656435503940">"Configuració"</string>
- <string name="keywords_wifi" msgid="8477688080895466846">"wi-fi, Wi-Fi, connexió de xarxa, Internet, sense fil, dades, wifi"</string>
+ <string name="keywords_wifi" msgid="8477688080895466846">"wi-fi, Wi-Fi, connexió a la xarxa, Internet, sense fil, dades, wifi"</string>
<string name="keywords_wifi_notify_open_networks" msgid="1031260564121854773">"notificació Wi‑Fi, notificació wifi"</string>
<string name="keywords_auto_brightness" msgid="5007188989783072428">"Brillantor adaptativa"</string>
<string name="keywords_vibrate_on_touch" msgid="3615173661462446877">"aturar la vibració, tocar, teclat"</string>
@@ -3135,10 +3137,10 @@
<string name="media_volume_option_title" msgid="3553411883305505682">"Volum de multimèdia"</string>
<string name="remote_media_volume_option_title" msgid="6355710054191873836">"Volum emès"</string>
<string name="call_volume_option_title" msgid="5028003296631037334">"Volum de trucada"</string>
- <string name="alarm_volume_option_title" msgid="3184076022438477047">"Volum de l\'alarma"</string>
+ <string name="alarm_volume_option_title" msgid="3184076022438477047">"Volum d\'alarma"</string>
<string name="ring_volume_option_title" msgid="2038924918468372264">"Volum del to"</string>
<string name="notification_volume_option_title" msgid="1358512611511348260">"Volum de notificació"</string>
- <string name="ringtone_title" msgid="1409086028485922583">"So de trucada"</string>
+ <string name="ringtone_title" msgid="1409086028485922583">"So de trucada del telèfon"</string>
<string name="notification_ringtone_title" msgid="2932960620843976285">"So de notificació predeterminat"</string>
<string name="notification_unknown_sound_title" msgid="8043718667804838398">"So de l\'aplicació"</string>
<string name="notification_sound_default" msgid="2664544380802426260">"So de notificació predeterminat"</string>
@@ -3231,7 +3233,7 @@
<string name="zen_mode_button_turn_on" msgid="1097964136225943415">"Activa ara"</string>
<string name="zen_mode_button_turn_off" msgid="3990967728457149454">"Desactiva ara"</string>
<string name="zen_mode_settings_dnd_manual_end_time" msgid="4307574188962071429">"El mode No molestis està activat fins a les <xliff:g id="FORMATTED_TIME">%s</xliff:g>"</string>
- <string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"El mode No molestis continuarà activat fins que no el desactivis"</string>
+ <string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"El mode No molestis es manté activat fins que no el desactivis"</string>
<string name="zen_mode_settings_dnd_automatic_rule" msgid="2843297614114625408">"Una programació (<xliff:g id="RULE_NAME">%s</xliff:g>) ha activat automàticament el mode No molestis"</string>
<string name="zen_mode_settings_dnd_automatic_rule_app" msgid="5103454923160912313">"Una aplicació (<xliff:g id="APP_NAME">%s</xliff:g>) ha activat automàticament el mode No molestis"</string>
<string name="zen_mode_settings_dnd_custom_settings_footer" msgid="6335108298640066560">"El mode No molestis està activat per a <xliff:g id="RULE_NAMES">%s</xliff:g> amb una configuració personalitzada."</string>
@@ -3383,7 +3385,7 @@
<string name="display_vr_pref_low_persistence" msgid="3132583929174794245">"Redueix el desenfocament (recomanat)"</string>
<string name="display_vr_pref_off" msgid="4681320968818852691">"Redueix el parpelleig"</string>
<string name="picture_in_picture_title" msgid="4960733106166035448">"Pantalla en pantalla"</string>
- <string name="picture_in_picture_empty_text" msgid="8664071475324685241">"Cap de les aplicacions instal·lades no admet la funció de pantalla en pantalla"</string>
+ <string name="picture_in_picture_empty_text" msgid="8664071475324685241">"Cap de les aplicacions instal·lades no admet pantalla en pantalla"</string>
<string name="picture_in_picture_keywords" msgid="7326958702002259262">"pip imatge en"</string>
<string name="picture_in_picture_app_detail_title" msgid="3916189052657425936">"Pantalla en pantalla"</string>
<string name="picture_in_picture_app_detail_switch" msgid="747422998967185418">"Permet Pantalla en pantalla"</string>
@@ -3546,7 +3548,7 @@
<string name="zen_mode_screen_off" msgid="84211490206459038">"Quan la pantalla estigui apagada"</string>
<string name="zen_mode_screen_off_summary" msgid="8592179073243001267">"Permet que les notificacions silenciades pel mode No molestis encenguin la pantalla i facin parpellejar el llum"</string>
<string name="zen_mode_screen_off_summary_no_led" msgid="7255874108150630145">"Permet que les notificacions silenciades pel mode No molestis encenguin la pantalla"</string>
- <string name="notification_app_settings_button" msgid="3651180424198580907">"Configuració de les notificacions"</string>
+ <string name="notification_app_settings_button" msgid="3651180424198580907">"Configuració de notificacions"</string>
<string name="suggestion_button_text" msgid="5783566542423813847">"D\'acord"</string>
<string name="device_feedback" msgid="4042352891448769818">"Envia suggeriments sobre el dispositiu"</string>
<string name="restr_pin_enter_admin_pin" msgid="8577847751493521230">"Introdueix el PIN d\'administrador"</string>
@@ -3695,7 +3697,7 @@
<string name="high_power_apps" msgid="2518319744362028920">"Optimització de la bateria"</string>
<string name="additional_battery_info" msgid="6877663897819271203">"Alertes d\'ús"</string>
<string name="show_all_apps" msgid="5442552004569634846">"Mostra l\'ús complet del dispositiu"</string>
- <string name="hide_extra_apps" msgid="6798261081113299441">"Mostra ús de les aplicacions"</string>
+ <string name="hide_extra_apps" msgid="6798261081113299441">"Mostra l\'ús de les aplicacions"</string>
<plurals name="power_high_usage_summary" formatted="false" msgid="4658343710126205199">
<item quantity="other"><xliff:g id="NUMBER">%2$d</xliff:g> aplicacions s\'estan comportant de manera anòmala</item>
<item quantity="one"><xliff:g id="APP">%1$s</xliff:g> s\'està comportant de manera anòmala</item>
@@ -3744,7 +3746,7 @@
<string name="usb_control_device" msgid="9154790265254725254">"Aquest dispositiu"</string>
<string name="usb_switching" msgid="1230386065163529904">"S\'està canviant..."</string>
<string name="usb_switching_failed" msgid="6857722544186145439">"No s\'ha pogut canviar"</string>
- <string name="usb_summary_charging_only" msgid="4118449308708872339">"Càrrega del dispositiu"</string>
+ <string name="usb_summary_charging_only" msgid="4118449308708872339">"Càrregant el dispositiu"</string>
<string name="usb_summary_power_only" msgid="3552240122641051107">"Càrrega de dispositius connectats"</string>
<string name="usb_summary_file_transfers" msgid="7805342797099821502">"Transferència de fitxers"</string>
<string name="usb_summary_tether" msgid="778845069037366883">"Compartició de xarxa per USB"</string>
@@ -3761,7 +3763,7 @@
<string name="assist_access_screenshot_title" msgid="1991014038776117688">"Utilitza una captura de pantalla"</string>
<string name="assist_access_screenshot_summary" msgid="3010943864000489424">"Permet que l\'aplicació d\'assistència accedeixi a una imatge de la pantalla"</string>
<string name="assist_flash_title" msgid="8852484250748551092">"Fes centellejar la pantalla"</string>
- <string name="assist_flash_summary" msgid="6697095786317559129">"Fa centellejar les vores de la pantalla quan l\'aplicació d\'assistència accedeix al text d\'una pantalla o d\'una captura de pantalla"</string>
+ <string name="assist_flash_summary" msgid="6697095786317559129">"Fa centellejar les vores de la pantalla quan l\'aplicació d\'assistència accedeix al text de la pantalla o a la captura de pantalla"</string>
<string name="assist_footer" msgid="7030121180457472165">"Les aplicacions d\'assistència et poden ajudar en funció de la informació que es mostri a la pantalla. Algunes aplicacions admeten tant el menú d\'aplicacions com els serveis d\'entrada de veu per oferir-te una assistència integrada."</string>
<string name="average_memory_use" msgid="5333366040118953945">"Ús mitjà de la memòria"</string>
<string name="maximum_memory_use" msgid="6509872438499846077">"Ús màxim de la memòria"</string>
@@ -3856,11 +3858,11 @@
<string name="notification_summary_none" msgid="5003043219430054784">"Activades per a totes les aplicacions"</string>
<string name="apps_summary" msgid="8355759446490212195">"S\'han instal·lat <xliff:g id="COUNT">%1$d</xliff:g> aplicacions"</string>
<string name="apps_summary_example" msgid="3011143598675185269">"24 aplicacions instal·lades"</string>
- <string name="storage_summary" msgid="4835916510511133784">"Espai utilitzat: <xliff:g id="PERCENTAGE">%1$s</xliff:g>. Espai lliure: <xliff:g id="FREE_SPACE">%2$s</xliff:g>"</string>
- <string name="storage_summary_with_sdcard" msgid="8742907204848352697">"Emmagatzematge intern: <xliff:g id="PERCENTAGE">%1$s</xliff:g> utilitzat, <xliff:g id="FREE_SPACE">%2$s</xliff:g> lliure"</string>
+ <string name="storage_summary" msgid="4835916510511133784">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> utilitzat - <xliff:g id="FREE_SPACE">%2$s</xliff:g> lliures"</string>
+ <string name="storage_summary_with_sdcard" msgid="8742907204848352697">"Emmagatzematge intern: <xliff:g id="PERCENTAGE">%1$s</xliff:g> utilitzat, <xliff:g id="FREE_SPACE">%2$s</xliff:g> lliures"</string>
<string name="display_summary" msgid="5725269449657325797">"Entra en repòs després de <xliff:g id="TIMEOUT_DESCRIPTION">%1$s</xliff:g> d\'inactivitat"</string>
<string name="display_dashboard_summary" msgid="7678566148167010682">"Fons de pantalla, repòs, mida de la lletra"</string>
- <string name="display_dashboard_summary_with_style" msgid="8981059474501210956">"Estils i fons de pantalla, repòs, mida de la lletra"</string>
+ <string name="display_dashboard_summary_with_style" msgid="8981059474501210956">"Estils i fons de pantalla, repòs, mida del tipus de lletra"</string>
<string name="display_dashboard_nowallpaper_summary" msgid="8612534364908229000">"Repòs, mida de la lletra"</string>
<string name="display_summary_example" msgid="4555020581960719296">"Entra en repòs després de 10 minuts d\'inactivitat"</string>
<string name="memory_summary" msgid="9121871336058042600">"Ús mitjà de memòria: <xliff:g id="USED_MEMORY">%1$s</xliff:g> de <xliff:g id="TOTAL_MEMORY">%2$s</xliff:g>"</string>
@@ -3955,7 +3957,7 @@
<string name="data_used_template" msgid="761605393453849477">"Dades utilitzades: <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="set_data_warning" msgid="8115980184415563941">"Defineix advertiment de dades"</string>
<string name="data_warning" msgid="2699207195535036240">"Advertiment de dades"</string>
- <string name="data_warning_footnote" msgid="965724845580257305">"L\'advertiment de dades i el límit de dades es basen en els càlculs del dispositiu, que és possible que no coincideixin amb les dades de l\'operador."</string>
+ <string name="data_warning_footnote" msgid="965724845580257305">"L\'advertiment de dades i el límit de dades es basen en els càlculs del dispositiu, i és possible que no coincideixin amb les dades de l\'operador."</string>
<string name="set_data_limit" msgid="5043770023229990674">"Defineix un límit de dades"</string>
<string name="data_limit" msgid="5793521160051596228">"Límit de dades"</string>
<string name="data_usage_template" msgid="6848274347956096882">"Dades utilitzades: <xliff:g id="ID_1">%1$s</xliff:g> (<xliff:g id="ID_2">%2$s</xliff:g>)"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Si el dispositiu està bloquejat, impedeix que s\'escriguin respostes o altres textos a les notificacions"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Corrector predeterminat"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Tria un corrector ortogràfic"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Utilitza el corrector ortogràfic"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Utilitza el corrector ortogràfic"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"No s\'ha seleccionat"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(cap)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Per alliberar espai, el gestor d\'emmagatzematge suprimeix del dispositiu les còpies de seguretat de fotos i vídeos."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Suprimeix fotos i vídeos amb"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Gestor d\'emmagatzematge"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Utilitza el gestor d\'emmagatzematge"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Utilitza el gestor d\'emmagatzematge"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automàtica"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manual"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Allibera espai ara"</string>
@@ -4119,12 +4121,12 @@
<string name="swipe_up_to_switch_apps_suggestion_title" msgid="7641846365137536128">"Prova el botó d\'inici nou"</string>
<string name="swipe_up_to_switch_apps_suggestion_summary" msgid="7338653224520387852">"Activa el gest nou per canviar d\'aplicació"</string>
<string name="ambient_display_title" product="default" msgid="6785677099744344088">"Doble toc per consultar el telèfon"</string>
- <string name="ambient_display_title" product="tablet" msgid="1106285490888683613">"Per consultar la tauleta, fes-hi doble toc"</string>
- <string name="ambient_display_title" product="device" msgid="5064644474876041478">"Per consultar el dispositiu, fes-hi doble toc"</string>
+ <string name="ambient_display_title" product="tablet" msgid="1106285490888683613">"Doble toc per consultar la tauleta"</string>
+ <string name="ambient_display_title" product="device" msgid="5064644474876041478">"Doble toc per consultar el dispositiu"</string>
<string name="ambient_display_summary" msgid="4882910328216411109">"Per veure l\'hora, les notificacions i altres dades, fes doble toc a la pantalla."</string>
- <string name="ambient_display_pickup_title" product="default" msgid="7141652156907066938">"Aixeca per consultar-lo"</string>
- <string name="ambient_display_pickup_title" product="tablet" msgid="1555456400210301959">"Per consultar la tauleta, aixeca-la"</string>
- <string name="ambient_display_pickup_title" product="device" msgid="2480126522988135037">"Aixeca el dispositiu per consultar-lo"</string>
+ <string name="ambient_display_pickup_title" product="default" msgid="7141652156907066938">"Aixeca per consultar el telèfon"</string>
+ <string name="ambient_display_pickup_title" product="tablet" msgid="1555456400210301959">"Aixeca per consultar la tauleta"</string>
+ <string name="ambient_display_pickup_title" product="device" msgid="2480126522988135037">"Aixeca per consultar el dispositiu"</string>
<string name="ambient_display_wake_screen_title" msgid="3376988352851077102">"Activa la pantalla"</string>
<string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"Per veure l\'hora, les notificacions i altres dades, agafa el telèfon."</string>
<string name="ambient_display_pickup_summary" product="tablet" msgid="1077745287100012928">"Per veure l\'hora, les notificacions i altres dades, agafa la tauleta."</string>
@@ -4308,7 +4310,7 @@
<string name="change_wifi_state_title" msgid="5140754955787584174">"Control de la Wi-Fi"</string>
<string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"Permet que l\'aplicació controli la Wi-Fi"</string>
<string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Permet que aquesta aplicació activi o desactivi la Wi-Fi, cerqui xarxes Wi-Fi, s\'hi connecti, n\'afegeixi o en suprimeixi, o que iniciï un punt d\'accés Wi-Fi només local"</string>
- <string name="media_output_title" msgid="8710632337456601848">"Reprodueix el contingut multimèdia a"</string>
+ <string name="media_output_title" msgid="8710632337456601848">"Reprodueix contingut multimèdia a"</string>
<string name="media_output_default_summary" msgid="3159237976830415584">"Aquest dispositiu"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"Telèfon"</string>
<string name="media_output_summary" product="tablet" msgid="6672024060360538526">"Tauleta"</string>
@@ -4324,7 +4326,7 @@
<string name="gesture_prevent_ringing_screen_title" msgid="4173494225145223638">"Impedeix els sons"</string>
<string name="gesture_prevent_ringing_title" msgid="8827963588425673557">"Prem els botons d\'engegada i d\'apujar el volum alhora per"</string>
<string name="gesture_prevent_ringing_sound_title" msgid="8642330448721033641">"Drecera per impedir que soni"</string>
- <string name="prevent_ringing_option_vibrate" msgid="6456505293904544108">"Activar la vibració"</string>
+ <string name="prevent_ringing_option_vibrate" msgid="6456505293904544108">"Vibrar"</string>
<string name="prevent_ringing_option_mute" msgid="53662688921253613">"Silenciar"</string>
<string name="prevent_ringing_option_none" msgid="1450985763137666231">"No fer res"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="7961818570574683926">"Activat (vibració)"</string>
@@ -4443,7 +4445,7 @@
<string name="mobile_network_mode_error" msgid="6818434186286086554">"El mode de xarxa <xliff:g id="NETWORKMODEID">%1$d</xliff:g> no és vàlid. Ignora."</string>
<string name="mobile_network_apn_title" msgid="5628635067747404382">"Noms de punts d\'accés"</string>
<string name="manual_mode_disallowed_summary" msgid="799800630000340665">"No està disponible quan està connectat a <xliff:g id="CARRIER">%1$s</xliff:g>"</string>
- <string name="emergency_info_contextual_card_summary" msgid="5541444321969803486">"Informació mèdica, contactes d\'emergència"</string>
+ <string name="emergency_info_contextual_card_summary" msgid="5541444321969803486">"Informació mèdica i contactes d\'emergència"</string>
<string name="see_more" msgid="7463940160389802632">"Mostra\'n més"</string>
<string name="see_less" msgid="3718892257002813387">"Mostra\'n menys"</string>
<string name="network_connection_request_dialog_title" msgid="3150489262902506588">"Dispositiu per fer servir amb <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
@@ -4475,7 +4477,7 @@
<string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"Vols suprimir aquest suggeriment?"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"S\'ha suprimit el suggeriment"</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"Desfés"</string>
- <string name="low_storage_summary" msgid="4562224870189133400">"Queda poc espai d\'emmagatzematge: <xliff:g id="PERCENTAGE">%1$s</xliff:g> utilitzat; <xliff:g id="FREE_SPACE">%2$s</xliff:g> lliure"</string>
+ <string name="low_storage_summary" msgid="4562224870189133400">"Queda poc espai d\'emmagatzematge: <xliff:g id="PERCENTAGE">%1$s</xliff:g> utilitzat; <xliff:g id="FREE_SPACE">%2$s</xliff:g> lliures"</string>
<string name="contextual_card_feedback_send" msgid="8698649023854350623">"Envia suggeriments"</string>
<string name="contextual_card_feedback_confirm_message" msgid="3987973028353264878">"Vols enviar-nos algun comentari sobre aquest suggeriment?"</string>
<string name="copyable_slice_toast" msgid="1357518174923789947">"S\'ha copiat <xliff:g id="COPY_CONTENT">%1$s</xliff:g> al porta-retalls."</string>
diff --git a/tests/CarDeveloperOptions/res/values-cs/arrays.xml b/tests/CarDeveloperOptions/res/values-cs/arrays.xml
index 815a6f0..88ea3e6 100644
--- a/tests/CarDeveloperOptions/res/values-cs/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-cs/arrays.xml
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"Nepovolit nikdy"</item>
<item msgid="8184570120217958741">"Vždy povolit"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normální"</item>
+ <item msgid="5101233285497327432">"Střední"</item>
+ <item msgid="1555861583162930714">"Nízká"</item>
+ <item msgid="1719683776264798117">"Kritické"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normální"</item>
+ <item msgid="6107138933849816768">"Střední"</item>
+ <item msgid="182695359839047859">"Nízká"</item>
+ <item msgid="8577246509202964244">"Kritické"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Trvalé"</item>
<item msgid="167418068739176448">"Nejvyšší aktivita"</item>
@@ -467,7 +477,7 @@
<item msgid="1008268820118852416">"Považovat za neměřenou síť"</item>
</string-array>
<string-array name="wifi_privacy_entries">
- <item msgid="6545683814310036454">"Použít náhodně vygenerovanou adresu MAC"</item>
+ <item msgid="6545683814310036454">"Použít náhodnou MAC (výchozí)"</item>
<item msgid="214234417308375326">"Použít adresu MAC zařízení"</item>
</string-array>
<string-array name="wifi_hidden_entries">
diff --git a/tests/CarDeveloperOptions/res/values-cs/strings.xml b/tests/CarDeveloperOptions/res/values-cs/strings.xml
index 77d05bb..35afc5b 100644
--- a/tests/CarDeveloperOptions/res/values-cs/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-cs/strings.xml
@@ -85,8 +85,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Umožňuje zvětšit nebo zmenšit text na obrazovce."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Zmenšit"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Zvětšit"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Příliš žluťoučký kůň úpěl ďábelské ódy."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Ukázkový text"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Čaroděj ze země Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Kapitola 11: Smaragdové město v zemi Oz"</string>
@@ -373,7 +372,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Informace o profilu"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Účty"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Poloha"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Používat polohu"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Používat polohu"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Vypnuto"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="few">Zapnuto – <xliff:g id="COUNT_1">%1$d</xliff:g> aplikace mají přístup k poloze</item>
@@ -804,7 +803,7 @@
<string name="bluetooth_scanning_on_info_message" msgid="5460370815156050550">"Když je zapnuté připojení Bluetooth, zařízení může komunikovat s ostatními zařízeními Bluetooth v okolí.\n\nZa účelem vylepšení funkcí mohou aplikace a služby nadále vyhledávat zařízení v okolí, i když je Bluetooth vypnuté. Lze tak například vylepšit funkce založené na poloze. Toto chování můžete změnit v "<annotation id="link">"nastavení vyhledávání"</annotation>"."</string>
<string name="ble_scan_notify_text" msgid="6290170236546386932">"Za účelem zvýšení přesnosti určování polohy mohou systémové aplikace a služby neustále vyhledávat zařízení Bluetooth. Toto chování můžete změnit v <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>nastavení vyhledávání<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
<string name="bluetooth_connect_failed" msgid="1151234676456333786">"Nelze se připojit. Zkuste to znovu."</string>
- <string name="device_details_title" msgid="726517818032923222">"Podrobnosti o zařízení"</string>
+ <string name="device_details_title" msgid="726517818032923222">"O zařízení"</string>
<string name="bluetooth_device_mac_address" msgid="5328203122581150405">"Adresa Bluetooth zařízení: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_unpair_dialog_title" msgid="3669848977755142047">"Zapomenout zařízení?"</string>
<string name="bluetooth_unpair_dialog_body" product="default" msgid="5998071227980078077">"Telefon již nebude spárován se zařízením <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
@@ -871,7 +870,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Zapnout Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Používat Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Používat Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Nastavení Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Umožňuje nastavit a spravovat přístupové body bezdrátové sítě"</string>
@@ -1139,7 +1138,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Mobilní"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Pokud Wi-Fi není k dispozici, použít mobilní síť"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Pokud mobilní síť nebude k dispozici, použít Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Volání přes Wi‑Fi. Pokud bude signál Wi-Fi ztracen, hovor skončí."</string>
@@ -1160,7 +1162,7 @@
<string name="ring_volume_title" msgid="5874791723449821646">"Hlasitost vyzvánění"</string>
<string name="vibrate_in_silent_title" msgid="2314667015729841220">"Vibrovat v tichém režimu"</string>
<string name="notification_sound_title" msgid="6812164482799723931">"Výchozí zvuk oznámení"</string>
- <string name="incoming_call_volume_title" msgid="4736570528754310450">"Vyzváněcí tón"</string>
+ <string name="incoming_call_volume_title" msgid="4736570528754310450">"Vyzvánění"</string>
<string name="notification_volume_title" msgid="6022562909288085275">"Oznámení"</string>
<string name="checkbox_notification_same_as_incoming_call" msgid="7312942422655861175">"Použije hlasitost příchozích hovorů také pro oznámení"</string>
<string name="home_work_profile_not_supported" msgid="6137073723297076818">"Nepodporuje pracovní profily"</string>
@@ -1675,7 +1677,7 @@
<string name="sms_change_default_no_previous_dialog_text" msgid="4680224695080527907">"Chcete pro zprávy SMS používat aplikaci <xliff:g id="NEW_APP">%s</xliff:g>?"</string>
<string name="network_scorer_picker_title" msgid="1691073966560952916">"Poskytovatel hodnocení sítí"</string>
<string name="network_scorer_picker_none_preference" msgid="6448280557733231737">"Žádné"</string>
- <string name="network_scorer_change_active_dialog_title" msgid="4274159562371475090">"Změnit nastavení Google Wi-Fi Assistant?"</string>
+ <string name="network_scorer_change_active_dialog_title" msgid="4274159562371475090">"Změnit asistenta pro Wi-Fi?"</string>
<string name="network_scorer_change_active_dialog_text" msgid="4264089809189760730">"Chcete spravovat síťová připojení pomocí aplikace <xliff:g id="NEW_APP">%1$s</xliff:g> namísto aplikace <xliff:g id="CURRENT_APP">%2$s</xliff:g>?"</string>
<string name="network_scorer_change_active_no_previous_dialog_text" msgid="6394483538843474495">"Chcete spravovat síťová připojení pomocí aplikace <xliff:g id="NEW_APP">%s</xliff:g>?"</string>
<string name="mobile_unknown_sim_operator" msgid="872589370085135817">"Operátor SIM karty není znám"</string>
@@ -2031,7 +2033,7 @@
<string name="user_dict_settings_add_menu_title" msgid="1553743292556229909">"Přidat"</string>
<string name="user_dict_settings_add_dialog_title" msgid="5447922936256448695">"Přidat do slovníku"</string>
<string name="user_dict_settings_add_screen_title" msgid="8164998107273393830">"Fráze"</string>
- <string name="user_dict_settings_add_dialog_more_options" msgid="577584009496650183">"Více možností"</string>
+ <string name="user_dict_settings_add_dialog_more_options" msgid="577584009496650183">"Další možnosti"</string>
<string name="user_dict_settings_add_dialog_less_options" msgid="5678408488188525719">"Méně možností"</string>
<string name="user_dict_settings_add_dialog_confirm" msgid="7279673661732968137">"OK"</string>
<string name="user_dict_settings_add_word_option_name" msgid="5310204485783762787">"Slovo:"</string>
@@ -2135,9 +2137,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Vibrace při oznámení"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Vibrace při vyzvánění"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Vibrace dotykové obrazovky"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Používat službu"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Používat korekci barev"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Používat titulky"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Používat službu"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Používat korekci barev"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Používat titulky"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Pokračovat"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Naslouchátka"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Nejsou připojena žádná naslouchátka"</string>
@@ -2337,7 +2339,7 @@
<string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Baterie se možná vybije dříve než obvykle"</string>
<string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"Spořič baterie je zapnutý"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"Některé funkce mohou být omezeny"</string>
- <string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Telefon byl využíván víc než obvykle"</string>
+ <string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Telefon využíván víc než obvykle"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"Tablet byl využíván víc než obvykle"</string>
<string name="battery_tip_high_usage_title" product="device" msgid="8304138287288309490">"Zařízení bylo využíváno víc než obvykle"</string>
<string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"Baterie se možná vybije dříve než obvykle"</string>
@@ -2531,7 +2533,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Zapnout"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Používat spořič baterie"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Používat spořič baterie"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Zapnout automaticky"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Nikdy"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"při <xliff:g id="PERCENT">%1$s</xliff:g> baterie"</string>
@@ -2741,7 +2743,7 @@
<string name="data_usage_cellular_data_summary" msgid="9162777397135709280">"Pozastaveno při limitu"</string>
<string name="account_settings_menu_auto_sync" msgid="2673669556006027506">"Autom. synchronizovat data"</string>
<string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"Autom. synch. osobní data"</string>
- <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Autom. synch. pracovní data"</string>
+ <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Autosynchronizace pracovních dat"</string>
<string name="data_usage_change_cycle" msgid="447761920472170031">"Změnit cyklus..."</string>
<string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"Den v měsíci, kdy se má obnovit počítání datových přenosů:"</string>
<string name="data_usage_empty" msgid="7981405723435034032">"V tomto období nevyužily datové připojení žádné aplikace."</string>
@@ -3220,7 +3222,7 @@
<string name="alarm_volume_option_title" msgid="3184076022438477047">"Hlasitost budíku"</string>
<string name="ring_volume_option_title" msgid="2038924918468372264">"Hlasitost vyzvánění"</string>
<string name="notification_volume_option_title" msgid="1358512611511348260">"Hlasitost oznámení"</string>
- <string name="ringtone_title" msgid="1409086028485922583">"Vyzváněcí tón telefonu"</string>
+ <string name="ringtone_title" msgid="1409086028485922583">"Vyzvánění telefonu"</string>
<string name="notification_ringtone_title" msgid="2932960620843976285">"Výchozí zvuk oznámení"</string>
<string name="notification_unknown_sound_title" msgid="8043718667804838398">"Zvuk z aplikace"</string>
<string name="notification_sound_default" msgid="2664544380802426260">"Výchozí zvuk oznámení"</string>
@@ -3369,7 +3371,7 @@
<string name="sound_work_settings" msgid="4140215240360927923">"Zvuky pracovního profilu"</string>
<string name="work_use_personal_sounds_title" msgid="531727195073003599">"Použít zvuky osobního profilu"</string>
<string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"Zvuky pracovního a osobního profilu jsou stejné"</string>
- <string name="work_ringtone_title" msgid="5499360583947410224">"Vyzváněcí tón prac. telefonu"</string>
+ <string name="work_ringtone_title" msgid="5499360583947410224">"Vyzvánění prac. telefonu"</string>
<string name="work_notification_ringtone_title" msgid="8059159087214025757">"Výchozí zvuk pracovního oznámení"</string>
<string name="work_alarm_ringtone_title" msgid="5328487181385375130">"Výchozí zvuk pracovního budíku"</string>
<string name="work_sound_same_as_personal" msgid="7728560881697159758">"Stejné jako v osobním profilu"</string>
@@ -3378,7 +3380,7 @@
<string name="work_sync_dialog_message" msgid="944233463059129156">"Pro pracovní profil budou použity zvuky z osobního profilu"</string>
<string name="ringtones_install_custom_sound_title" msgid="210551218424553671">"Přidat vlastní zvuk?"</string>
<string name="ringtones_install_custom_sound_content" msgid="6683649115132255452">"Soubor bude zkopírován do složky <xliff:g id="FOLDER_NAME">%s</xliff:g>"</string>
- <string name="ringtones_category_preference_title" msgid="4491932700769815470">"Vyzváněcí tóny"</string>
+ <string name="ringtones_category_preference_title" msgid="4491932700769815470">"Vyzvánění"</string>
<string name="other_sound_category_preference_title" msgid="2045757472469840859">"Další zvuky a vibrace"</string>
<string name="configure_notification_settings" msgid="291914315140851270">"Oznámení"</string>
<string name="recent_notifications" msgid="8125865995065032049">"Nedávno odeslané"</string>
@@ -3407,7 +3409,7 @@
<string name="notification_pulse_title" msgid="4861418327614907116">"Blikání kontrolky"</string>
<string name="lock_screen_notifications_title" msgid="6889072265118747835">"Na obrazovce uzamčení"</string>
<string name="locked_work_profile_notification_title" msgid="8307025804986190658">"Když je profil uzamčen"</string>
- <string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"Zobrazit veškerý obsah oznámení"</string>
+ <string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"Zobrazovat veškerý obsah oznámení"</string>
<string name="lock_screen_notifications_summary_hide" msgid="3668806866535260143">"Skrýt citlivý obsah"</string>
<string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"Oznámení vůbec nezobrazovat"</string>
<string name="lock_screen_notifications_interstitial_message" msgid="4230189215124387818">"Jak chcete zobrazovat oznámení, když bude zařízení uzamčeno?"</string>
@@ -3427,11 +3429,11 @@
<string name="notification_importance_low" msgid="7609797151662295364">"Zobrazovat tiše"</string>
<string name="notification_importance_default" msgid="4091563759103917166">"Vydat zvukový signál"</string>
<string name="notification_importance_high" msgid="7973764540402436656">"Vydat zvukový signál a vyskočit na obrazovku"</string>
- <string name="notification_importance_high_silent" msgid="3177662759865661155">"Vyskočit na obrazovce"</string>
+ <string name="notification_importance_high_silent" msgid="3177662759865661155">"Vyskakování na obrazovce"</string>
<string name="notification_importance_min_title" msgid="705872537330744154">"Minimalizovat"</string>
<string name="notification_importance_low_title" msgid="2956199021781786232">"Střední"</string>
<string name="notification_importance_default_title" msgid="7985549807203332482">"Vysoká"</string>
- <string name="notification_importance_high_title" msgid="7258373094258585858">"Vyskočit na obrazovce"</string>
+ <string name="notification_importance_high_title" msgid="7258373094258585858">"Vyskakování na obrazovce"</string>
<string name="notification_block_title" msgid="2570364198866886906">"Blok"</string>
<string name="notification_silence_title" msgid="6959637402003838093">"Zobrazovat tiše"</string>
<string name="notification_alert_title" msgid="750683027055192648">"Upozornění"</string>
@@ -3806,7 +3808,7 @@
<string name="memory_avg_desc" msgid="1200185697910086968">"Průměrně <xliff:g id="MEMORY">%1$s</xliff:g>"</string>
<string name="memory_use_running_format" msgid="3741170402563292232">"<xliff:g id="MEMORY">%1$s</xliff:g> / <xliff:g id="RUNNING">%2$s</xliff:g>"</string>
<string name="process_format" msgid="8575347150598564509">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="COUNT">%2$d</xliff:g>)"</string>
- <string name="high_power_apps" msgid="2518319744362028920">"Optimalizace výdrže bat."</string>
+ <string name="high_power_apps" msgid="2518319744362028920">"Optimalizace baterie"</string>
<string name="additional_battery_info" msgid="6877663897819271203">"Upozornění na využití"</string>
<string name="show_all_apps" msgid="5442552004569634846">"Zobrazit úplné využití zařízení"</string>
<string name="hide_extra_apps" msgid="6798261081113299441">"Zobrazit využití aplikací"</string>
@@ -3880,7 +3882,7 @@
<string name="assist_access_screenshot_summary" msgid="3010943864000489424">"Asistenční aplikace bude mít přístup k obrazu na obrazovce"</string>
<string name="assist_flash_title" msgid="8852484250748551092">"Zablikání obrazovky"</string>
<string name="assist_flash_summary" msgid="6697095786317559129">"Když asistenční aplikace z obrazovky nebo snímku obrazovky získá text, okraje obrazovky zablikají"</string>
- <string name="assist_footer" msgid="7030121180457472165">"Asistenční aplikace vám může pomoci na základě informací na zobrazené obrazovce. Některé aplikace podporují Launcher i hlasový vstup a nabízejí integrovanou asistenci."</string>
+ <string name="assist_footer" msgid="7030121180457472165">"Asistenční aplikace vám mohou pomoci na základě informací na zobrazené obrazovce. Některé aplikace podporují Launcher i hlasový vstup a nabízejí integrovanou asistenci."</string>
<string name="average_memory_use" msgid="5333366040118953945">"Průměrné využití paměti"</string>
<string name="maximum_memory_use" msgid="6509872438499846077">"Maximální využití paměti"</string>
<string name="memory_usage" msgid="7963253555330830906">"Využití paměti"</string>
@@ -3991,7 +3993,7 @@
<string name="backup_disabled" msgid="6941165814784765643">"Zálohování bylo zakázáno"</string>
<string name="android_version_summary" msgid="2192751442789395445">"Aktualizováno na Android <xliff:g id="VERSION">%1$s</xliff:g>"</string>
<string name="android_version_pending_update_summary" msgid="3554543810520655076">"K dispozici je aktualizace"</string>
- <string name="disabled_by_policy_title" msgid="1238318274952958846">"Akce není povolena."</string>
+ <string name="disabled_by_policy_title" msgid="1238318274952958846">"Akce není povolena"</string>
<string name="disabled_by_policy_title_adjust_volume" msgid="7094547090629203316">"Hlasitost nelze změnit"</string>
<string name="disabled_by_policy_title_outgoing_calls" msgid="3805836913095496278">"Volání není povoleno"</string>
<string name="disabled_by_policy_title_sms" msgid="1453236584236681105">"Zprávy SMS nejsou povoleny"</string>
@@ -4140,7 +4142,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Pokud je zařízení zamknuté, zakázat psaní odpovědí a jiných textů do oznámení"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Výchozí kontrola pravopisu"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Výběr kontroly pravopisu"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Použít kontrolu pravopisu"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Používat kontrolu pravopisu"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Nevybráno"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(žádný)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4182,7 +4184,7 @@
<string name="display_cutout_emulation_keywords" msgid="6795671536772871439">"výřez displeje"</string>
<string name="overlay_option_device_default" msgid="165508753381657697">"Výchozí nastavení zařízení"</string>
<string name="overlay_toast_failed_to_apply" msgid="5692251825129250040">"Překrytí se nepodařilo použít"</string>
- <string name="special_access" msgid="1453926335914696206">"Přístup ke spec. aplikacím"</string>
+ <string name="special_access" msgid="1453926335914696206">"Přístupy pro aplikace"</string>
<plurals name="special_access_summary" formatted="false" msgid="5182092345063909346">
<item quantity="few"><xliff:g id="COUNT">%d</xliff:g> aplikace mohou využívat neomezená data</item>
<item quantity="many"><xliff:g id="COUNT">%d</xliff:g> aplikace může využívat neomezená data</item>
@@ -4241,7 +4243,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Správce úložiště vám pomůže uvolnit místo v úložišti tím, že ze zařízení odstraní zálohované fotky a videa."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Odstranit fotky a videa"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Správce úložiště"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Používat správce úložiště"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Používat správce úložiště"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automaticky"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Ruční"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Uvolnit místo"</string>
@@ -4273,8 +4275,8 @@
<string name="ambient_display_tap_screen_title" product="tablet" msgid="6434521782016864148">"Kontrola tabletu klepnutím"</string>
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"Kontrola zařízení klepnutím"</string>
<string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"Chcete-li zobrazit čas, oznámení a další informace, klepněte na obrazovku."</string>
- <string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"Otisk prstu pro oznámení"</string>
- <string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"Přejeďte po otisku"</string>
+ <string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"Sejmout otisk prstu pro zobrazení oznámení"</string>
+ <string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"Sejmout otisk prstu"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"Chcete-li zkontrolovat oznámení, přejeďte prstem dolů po snímači otisků prstů na zadní straně telefonu."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"Chcete-li zkontrolovat oznámení, přejeďte prstem dolů po snímači otisků prstů na zadní straně tabletu."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="7950264130913070035">"Chcete-li zkontrolovat oznámení, přejeďte prstem dolů po snímači otisků prstů na zadní straně zařízení."</string>
@@ -4462,7 +4464,7 @@
<string name="change_wifi_state_title" msgid="5140754955787584174">"Ovládání sítí Wi-Fi"</string>
<string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"Povolit aplikaci ovládat Wi-Fi"</string>
<string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Povolte této aplikaci zapínat a vypínat Wi-Fi, vyhledávat sítě Wi-Fi a připojovat se k nim, přidávat nebo odstraňovat sítě nebo nastavit místní hotspot"</string>
- <string name="media_output_title" msgid="8710632337456601848">"Přehrávat média v"</string>
+ <string name="media_output_title" msgid="8710632337456601848">"Kde přehrávat média"</string>
<string name="media_output_default_summary" msgid="3159237976830415584">"Toto zařízení"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"Telefon"</string>
<string name="media_output_summary" product="tablet" msgid="6672024060360538526">"Tablet"</string>
@@ -4476,7 +4478,7 @@
<string name="battery_suggestion_title" product="default" msgid="3295786171830183688">"Zvyšte životnost baterie telefonu"</string>
<string name="battery_suggestion_summary" msgid="2669070349482656490"></string>
<string name="gesture_prevent_ringing_screen_title" msgid="4173494225145223638">"Blokování vyzvánění"</string>
- <string name="gesture_prevent_ringing_title" msgid="8827963588425673557">"Stisknutí vypínače a zvýšení hlasitosti znamená:"</string>
+ <string name="gesture_prevent_ringing_title" msgid="8827963588425673557">"Současné stisknutí vypínače a tlačítka zvýšení hlasitosti umožní:"</string>
<string name="gesture_prevent_ringing_sound_title" msgid="8642330448721033641">"Zkratka k vypnutí vyzvánění"</string>
<string name="prevent_ringing_option_vibrate" msgid="6456505293904544108">"Vibrovat"</string>
<string name="prevent_ringing_option_mute" msgid="53662688921253613">"Ztlumit"</string>
@@ -4633,7 +4635,7 @@
<string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"Odstranit tento návrh?"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"Návrh byl odebrán"</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"Zpět"</string>
- <string name="low_storage_summary" msgid="4562224870189133400">"V úložišti je málo místa. Využito <xliff:g id="PERCENTAGE">%1$s</xliff:g> – volné místo: <xliff:g id="FREE_SPACE">%2$s</xliff:g>"</string>
+ <string name="low_storage_summary" msgid="4562224870189133400">"Málo místa. Využito: <xliff:g id="PERCENTAGE">%1$s</xliff:g> – volné: <xliff:g id="FREE_SPACE">%2$s</xliff:g>"</string>
<string name="contextual_card_feedback_send" msgid="8698649023854350623">"Odeslat zpětnou vazbu"</string>
<string name="contextual_card_feedback_confirm_message" msgid="3987973028353264878">"Chtěli byste nám k tomuto návrhu poskytnout zpětnou vazbu?"</string>
<string name="copyable_slice_toast" msgid="1357518174923789947">"<xliff:g id="COPY_CONTENT">%1$s</xliff:g> – zkopírováno do schránky"</string>
diff --git a/tests/CarDeveloperOptions/res/values-da/arrays.xml b/tests/CarDeveloperOptions/res/values-da/arrays.xml
index 11985ea..63b7058 100644
--- a/tests/CarDeveloperOptions/res/values-da/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-da/arrays.xml
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"Tillad aldrig"</item>
<item msgid="8184570120217958741">"Tillad altid"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normal"</item>
+ <item msgid="5101233285497327432">"Moderat"</item>
+ <item msgid="1555861583162930714">"Lav"</item>
+ <item msgid="1719683776264798117">"Kritisk"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normal"</item>
+ <item msgid="6107138933849816768">"Moderat"</item>
+ <item msgid="182695359839047859">"Lav"</item>
+ <item msgid="8577246509202964244">"Kritisk"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Vedvarende"</item>
<item msgid="167418068739176448">"Topaktivitet"</item>
diff --git a/tests/CarDeveloperOptions/res/values-da/strings.xml b/tests/CarDeveloperOptions/res/values-da/strings.xml
index 5c97281..469b146 100644
--- a/tests/CarDeveloperOptions/res/values-da/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-da/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Gør teksten på skærmen mindre eller større."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Formindsk"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Forstør"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Eksempeltekst"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Den vidunderlige troldmand fra Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Kapitel 11: Den vidunderlige smaragdby i Oz"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Profiloplysninger"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Konti"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Placering"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Brug placering"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Brug placering"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Fra"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">Til – <xliff:g id="COUNT_1">%1$d</xliff:g> app har adgang til din placering</item>
@@ -504,7 +503,7 @@
<string name="fingerprint_delete_message" msgid="5895802741486967970">"Vil du slette dette fingeraftryk?"</string>
<string name="fingerprint_last_delete_message" msgid="3346252479778971442">"Du vil ikke kunne bruge dine fingeraftryk til at låse din telefon op, godkende køb eller logge ind på apps"</string>
<string name="fingerprint_last_delete_message_profile_challenge" msgid="5385095150532247025">"Du vil ikke kunne bruge dine fingeraftryk til at låse din arbejdsprofil op, godkende køb eller logge ind på arbejdsapps"</string>
- <string name="fingerprint_last_delete_confirm" msgid="7984595457589664004">"Ja, fjern det"</string>
+ <string name="fingerprint_last_delete_confirm" msgid="7984595457589664004">"Ja, fjern"</string>
<string name="crypt_keeper_settings_title" msgid="839783588093862748">"Kryptering"</string>
<string name="crypt_keeper_encrypt_title" product="tablet" msgid="2292129135369853167">"Krypter tablet"</string>
<string name="crypt_keeper_encrypt_title" product="default" msgid="3110852053238357832">"Kryptér telefon"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Slå Wi-Fi til"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Brug Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Brug Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Indstillinger for Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Konfiguration og administration af trådløse adgangspunkter"</string>
@@ -910,7 +909,7 @@
<string name="wifi_signal" msgid="696548364467704808">"Signalstyrke"</string>
<string name="wifi_status" msgid="3439931558930689940">"Status"</string>
<string name="tx_wifi_speed" msgid="2571810085003261073">"Overførselshastighed"</string>
- <string name="rx_wifi_speed" msgid="7392873246110937187">"Modtag linkhastighed"</string>
+ <string name="rx_wifi_speed" msgid="7392873246110937187">"Modtagelseshastighed"</string>
<string name="wifi_frequency" msgid="6132852924995724246">"Frekvens"</string>
<string name="wifi_ip_address" msgid="5572539114989914831">"IP-adresse"</string>
<string name="passpoint_label" msgid="7429247462404128615">"Gemt via"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Mobil"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Brug mobilnetværk, hvis der ikk er nogen Wi-Fi-forbindelse"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Brug Wi-Fi, hvis mobilnetværket ikke er tilgængeligt"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Ring via Wi‑Fi. Opkaldet afsluttes, hvis Wi-Fi-forbindelsen afbrydes."</string>
@@ -2046,7 +2048,7 @@
<string name="experimental_category_title" msgid="3797000069740110717">"Eksperimentel"</string>
<string name="feature_flags_dashboard_title" msgid="3153034144122754381">"Aktivering og deaktivering af demofunktioner"</string>
<string name="talkback_title" msgid="3717960404234260050">"TalkBack"</string>
- <string name="talkback_summary" msgid="6602857105831641574">"Skærmlæseren er primært til blinde og svagtseende brugere"</string>
+ <string name="talkback_summary" msgid="6602857105831641574">"Skærmlæser primært til blinde og svagtseende brugere"</string>
<string name="select_to_speak_summary" msgid="7514180457557735421">"Tryk på elementer på din skærm for at få dem læst op"</string>
<string name="accessibility_captioning_title" msgid="5878371993023439642">"Undertekster"</string>
<string name="accessibility_screen_magnification_title" msgid="7250949681883917360">"Forstørrelse"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Vibration ved notifikation"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Vibration ved opkald"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Vibration ved berøring"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Brug tjenesten"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Brug farvekorrigering"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Brug undertekster"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Brug tjenesten"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Brug farvekorrigering"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Brug undertekster"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Fortsæt"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Høreapparater"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Der er ikke tilknyttet nogen høreapparater"</string>
@@ -2276,13 +2278,13 @@
<string name="battery_tip_smart_battery_title" product="device" msgid="7419448992583346364">"Forlæng enhedens batteritid"</string>
<string name="battery_tip_smart_battery_summary" msgid="5344821856478265778">"Aktivér batteriadministration"</string>
<string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"Aktivér batterisparefunktionen"</string>
- <string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Enheden løber muligvis tør for batteri hurtigere end forventet"</string>
+ <string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Batteriet aflades muligvis hurtigere end normalt"</string>
<string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"Batterisparefunktion er aktiveret"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"Nogle funktioner kan være begrænsede"</string>
<string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Telefonen er blevet brugt mere end normalt"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"Din tablet er blevet brugt mere end normalt"</string>
<string name="battery_tip_high_usage_title" product="device" msgid="8304138287288309490">"Enheden er blevet brugt mere end normalt"</string>
- <string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"Enheden løber muligvis tør for batteri hurtigere end forventet"</string>
+ <string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"Batteriet aflades muligvis hurtigere end normalt"</string>
<string name="battery_tip_dialog_message" product="default" msgid="8453700079047810964">"Din telefon er blevet brugt mere end normalt. Telefonen løber muligvis tør for batteri hurtigere end forventet.\n\nDe mest anvendte apps siden sidste fulde opladning:"</string>
<string name="battery_tip_dialog_message" product="tablet" msgid="6489981050645444068">"Din tablet er blevet brugt mere end normalt. Din tablet løber muligvis tør for batteri hurtigere end forventet.\n\nDe mest anvendte apps siden sidste fulde opladning:"</string>
<string name="battery_tip_dialog_message" product="device" msgid="6348123094674390337">"Din enhed er blevet brugt mere end normalt. Enheden løber muligvis tør for batteri hurtigere end forventet.\n\nDe mest anvendte apps siden sidste fulde opladning:"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Aktivér"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Brug batterisparefunktionen"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Brug batterisparefunktionen"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Slå automatisk til"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Aldrig"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"ved batteriniveau på <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
@@ -3145,13 +3147,13 @@
<string name="alarm_ringtone_title" msgid="6411326147408635902">"Standardlyd for alarmer"</string>
<string name="vibrate_when_ringing_title" msgid="2757996559847126952">"Vibrer ved opkald"</string>
<string name="other_sound_settings" msgid="5250376066099818676">"Andre lyde"</string>
- <string name="dial_pad_tones_title" msgid="8877212139988655769">"Toner for numerisk tastatur"</string>
+ <string name="dial_pad_tones_title" msgid="8877212139988655769">"Toner for tastatur"</string>
<string name="screen_locking_sounds_title" msgid="4407110895465866809">"Lyd ved skærmlås"</string>
<string name="charging_sounds_title" msgid="5070437987230894287">"Lyd og vibration ved opladning"</string>
<string name="docking_sounds_title" msgid="2573137471605541366">"Lyde for dockingstation"</string>
<string name="touch_sounds_title" msgid="165237488496165652">"Lyd ved berøring"</string>
<string name="vibrate_on_touch_title" msgid="6360155469279157684">"Vibration ved berøring"</string>
- <string name="vibrate_on_touch_summary" msgid="5504424764028676043">"Feedback ved berøring for tryk, tastatur og meget mere"</string>
+ <string name="vibrate_on_touch_summary" msgid="5504424764028676043">"Feedback ved berøring for tryk, tastatur og mere"</string>
<string name="dock_audio_media_title" msgid="1859521680502040781">"Dockhøjttaler afspiller"</string>
<string name="dock_audio_media_disabled" msgid="4300752306178486302">"Al lyd"</string>
<string name="dock_audio_media_enabled" msgid="2873275045878628153">"Kun medielyd"</string>
@@ -3631,7 +3633,7 @@
<string name="runtime_permissions_summary_no_permissions_requested" msgid="3901636077467389637">"Der er ikke anmodet om nogen tilladelser"</string>
<string name="filter_all_apps" msgid="4042756539846043675">"Alle apps"</string>
<string name="filter_enabled_apps" msgid="5888459261768538489">"Installerede aps"</string>
- <string name="filter_instant_apps" msgid="8087483282854072366">"Instant apps"</string>
+ <string name="filter_instant_apps" msgid="8087483282854072366">"Instant-apps"</string>
<string name="filter_personal_apps" msgid="3473268022652904457">"Personlig"</string>
<string name="filter_work_apps" msgid="4202483998339465542">"Arbejde"</string>
<string name="filter_notif_all_apps" msgid="1862666327228804896">"Apps: Alle"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Der skal ikke kunne skrives svar eller anden tekst i notifikationer, når enheden er låst."</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Standardstavekontrol"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Vælg stavekontrol"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Brug stavekontrol"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Brug stavekontrol"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Ikke valgt"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(ingen)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"For at hjælpe med at frigøre lagerplads fjerner lagerstyringen sikkerhedskopierede billeder og videoer fra din enhed."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Fjern billeder og videoer"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Lagerstyring"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Brug lagerstyring"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Brug lageradministratoren"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatisk"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manuel"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Frigør plads nu"</string>
@@ -4147,9 +4149,9 @@
<string name="oem_unlock_enable_disabled_summary_sim_locked_device" msgid="5223278198179877704">"Indstillingen er ikke tilgængelig på SIM-låste enheder"</string>
<string name="oem_lock_info_message" msgid="5090850412279403901">"Genstart enheden for at aktivere funktionen Enhedsbeskyttelse."</string>
<string name="automatic_storage_manager_freed_bytes" msgid="7360443072390107772">"<xliff:g id="SIZE">%1$s</xliff:g> blev frigjort\n\nSidst kørt den <xliff:g id="DATE">%2$s</xliff:g>"</string>
- <string name="web_action_enable_title" msgid="4462106633708675959">"Instant apps"</string>
+ <string name="web_action_enable_title" msgid="4462106633708675959">"Instant-apps"</string>
<string name="web_action_enable_summary" msgid="1729016644691793085">"Åbn links i apps – selv hvis de ikke er installeret"</string>
- <string name="web_action_section_title" msgid="5563229447734734662">"Instant apps"</string>
+ <string name="web_action_section_title" msgid="5563229447734734662">"Instant-apps"</string>
<string name="instant_apps_settings" msgid="879003203555847537">"Præferencer for Instant Apps"</string>
<string name="domain_url_section_title" msgid="206403507921518321">"Installerede aps"</string>
<string name="automatic_storage_manager_activation_warning" msgid="2630083316417707308">"Din lagerplads administreres nu af lageradministratoren"</string>
@@ -4242,7 +4244,7 @@
<string name="storage_volume_total" msgid="5021484171514159913">"Anvendt lagerplads ud af <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
<string name="storage_percent_full" msgid="6924662861545958442">"brugt"</string>
<string name="clear_instant_app_data" msgid="3673669086522890405">"Ryd appen"</string>
- <string name="clear_instant_app_confirmation" msgid="1778553115373698061">"Vil du fjerne denne instant app?"</string>
+ <string name="clear_instant_app_confirmation" msgid="1778553115373698061">"Vil du fjerne denne instant-app?"</string>
<string name="launch_instant_app" msgid="5251693061228352333">"Åbn"</string>
<string name="game_storage_settings" msgid="6856911551799175914">"Spil"</string>
<string name="audio_files_title" msgid="3073879661731363935">"Lydfiler"</string>
@@ -4265,7 +4267,7 @@
<string name="storage_manager_indicator" msgid="4255140732848476875">"Lagerstyring: <xliff:g id="STATUS">^1</xliff:g>"</string>
<string name="storage_manager_indicator_off" msgid="6404056007102580777">"Fra"</string>
<string name="storage_manager_indicator_on" msgid="5295306384982062320">"Til"</string>
- <string name="install_type_instant" msgid="6248487669862821874">"Instant app"</string>
+ <string name="install_type_instant" msgid="6248487669862821874">"Instant-app"</string>
<string name="automatic_storage_manager_deactivation_warning" msgid="7867793739491286374">"Slå lagerstyring fra?"</string>
<string name="storage_movies_tv" msgid="7282484273991655296">"Film- og tv-apps"</string>
<string name="carrier_provisioning" msgid="3309125279191534469">"Oplysninger om mobilselskab"</string>
@@ -4341,7 +4343,7 @@
<string name="network_connecting" msgid="8798611458457547110">"Opretter forbindelse…"</string>
<string name="network_could_not_connect" msgid="552874922030763713">"Der kunne ikke oprettes forbindelse"</string>
<string name="empty_networks_list" msgid="5170020017144403884">"Der blev ikke fundet nogen netværk."</string>
- <string name="network_query_error" msgid="525635151099480463">"Der kunne ikke findes nogen netværk. Prøv igen."</string>
+ <string name="network_query_error" msgid="525635151099480463">"Der blev ikke fundet nogen netværk. Prøv igen."</string>
<string name="forbidden_network" msgid="8493827960968261182">"(forbudt)"</string>
<string name="no_sim_card" msgid="3708682108324275635">"Intet SIM-kort"</string>
<string name="preferred_network_mode_wcdma_perf_summary" msgid="6899270534608086704">"Foretrukken netværkstilstand: WCDMA foretrækkes"</string>
diff --git a/tests/CarDeveloperOptions/res/values-de/arrays.xml b/tests/CarDeveloperOptions/res/values-de/arrays.xml
index 4ee4f1b..7b5df1a 100644
--- a/tests/CarDeveloperOptions/res/values-de/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-de/arrays.xml
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"Nie zulassen"</item>
<item msgid="8184570120217958741">"Immer zulassen"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normal"</item>
+ <item msgid="5101233285497327432">"Mittelmäßig"</item>
+ <item msgid="1555861583162930714">"Niedrig"</item>
+ <item msgid="1719683776264798117">"Kritisch"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Mittel"</item>
+ <item msgid="6107138933849816768">"Moderat"</item>
+ <item msgid="182695359839047859">"Niedrig"</item>
+ <item msgid="8577246509202964244">"Kritisch"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Permanent"</item>
<item msgid="167418068739176448">"Topaktivität"</item>
diff --git a/tests/CarDeveloperOptions/res/values-de/strings.xml b/tests/CarDeveloperOptions/res/values-de/strings.xml
index 3c8be5f..5a08bef 100644
--- a/tests/CarDeveloperOptions/res/values-de/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-de/strings.xml
@@ -80,7 +80,7 @@
<string name="sdcard_format" product="default" msgid="4831611387627849108">"SD-Karte löschen"</string>
<string name="preview_pager_content_description" msgid="5731599395893090038">"Vorschau"</string>
<string name="preview_page_indicator_content_description" msgid="3192955679074998362">"Vorschau, Seite <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> von <xliff:g id="NUM_PAGES">%2$d</xliff:g>"</string>
- <string name="font_size_summary" msgid="9120023206321191067">"Text auf dem Display verkleinern oder vergrößern."</string>
+ <string name="font_size_summary" msgid="9120023206321191067">"Lege fest, wie groß Text angezeigt wird."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Verkleinern"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Vergrößern"</string>
<string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
@@ -368,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Profilinformationen"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Konten"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Standort"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Standort verwenden"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Standortdienst aktivieren"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Aus"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Ein – <xliff:g id="COUNT_1">%1$d</xliff:g> Apps können auf den Standort zugreifen</item>
@@ -449,12 +449,12 @@
<string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"Fingerabdruck überspringen?"</string>
<string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"Die Fingerabdruck-Einrichtung dauert nur ein, zwei Minuten. Wenn du sie jetzt überspringst, kannst du sie später über die Einstellungen nachholen."</string>
<string name="lock_screen_intro_skip_title" msgid="5307431665496346914">"Displaysperre überspringen?"</string>
- <string name="lock_screen_intro_skip_dialog_text_frp" product="tablet" msgid="7553945981266845264">"Die Geräteschutzfunktionen werden nicht aktiviert. Du kannst dann nicht verhindern, dass andere Personen dieses Tablet verwenden, falls es verloren geht, gestohlen oder zurückgesetzt wird."</string>
- <string name="lock_screen_intro_skip_dialog_text_frp" product="device" msgid="1378243257238015603">"Die Geräteschutzfunktionen werden nicht aktiviert. Du kannst dann nicht verhindern, dass andere Personen dieses Gerät verwenden, falls es verloren geht, gestohlen oder zurückgesetzt wird."</string>
- <string name="lock_screen_intro_skip_dialog_text_frp" product="default" msgid="8395540117461339748">"Die Geräteschutzfunktionen werden nicht aktiviert. Du kannst dann nicht verhindern, dass andere Personen dieses Smartphone verwenden, falls es verloren geht, gestohlen oder zurückgesetzt wird."</string>
- <string name="lock_screen_intro_skip_dialog_text" product="tablet" msgid="7572334562915795226">"Die Geräteschutzfunktionen werden nicht aktiviert. Du kannst dann nicht verhindern, dass andere Personen dieses Tablet verwenden, falls es verloren geht oder gestohlen wird."</string>
- <string name="lock_screen_intro_skip_dialog_text" product="device" msgid="3819285334459763813">"Die Geräteschutzfunktionen werden nicht aktiviert. Du kannst dann nicht verhindern, dass andere Personen dieses Gerät verwenden, falls es verloren geht oder gestohlen wird."</string>
- <string name="lock_screen_intro_skip_dialog_text" product="default" msgid="5361573789585652826">"Die Geräteschutzfunktionen werden nicht aktiviert. Du kannst dann nicht verhindern, dass andere Personen dieses Smartphone verwenden, falls es verloren geht oder gestohlen wird."</string>
+ <string name="lock_screen_intro_skip_dialog_text_frp" product="tablet" msgid="7553945981266845264">"Die Schutzfunktionen für dein Mobilgerät werden nicht aktiviert. Du kannst dann nicht verhindern, dass andere Personen dieses Tablet verwenden, falls es verloren geht, gestohlen oder zurückgesetzt wird."</string>
+ <string name="lock_screen_intro_skip_dialog_text_frp" product="device" msgid="1378243257238015603">"Die Schutzfunktionen für dein Mobilgerät werden nicht aktiviert. Du kannst dann nicht verhindern, dass andere Personen dieses Gerät verwenden, falls es verloren geht, gestohlen oder zurückgesetzt wird."</string>
+ <string name="lock_screen_intro_skip_dialog_text_frp" product="default" msgid="8395540117461339748">"Die Schutzfunktionen für dein Mobilgerät werden nicht aktiviert. Du kannst dann nicht verhindern, dass andere Personen dieses Smartphone verwenden, falls es verloren geht, gestohlen oder zurückgesetzt wird."</string>
+ <string name="lock_screen_intro_skip_dialog_text" product="tablet" msgid="7572334562915795226">"Die Schutzfunktionen für dein Mobilgerät werden nicht aktiviert. Du kannst dann nicht verhindern, dass andere Personen dieses Tablet verwenden, falls es verloren geht oder gestohlen wird."</string>
+ <string name="lock_screen_intro_skip_dialog_text" product="device" msgid="3819285334459763813">"Die Schutzfunktionen für dein Mobilgerät werden nicht aktiviert. Du kannst dann nicht verhindern, dass andere Personen dieses Gerät verwenden, falls es verloren geht oder gestohlen wird."</string>
+ <string name="lock_screen_intro_skip_dialog_text" product="default" msgid="5361573789585652826">"Die Schutzfunktionen für dein Mobilgerät werden nicht aktiviert. Du kannst dann nicht verhindern, dass andere Personen dieses Smartphone verwenden, falls es verloren geht oder gestohlen wird."</string>
<string name="skip_anyway_button_label" msgid="4437815969645175429">"Trotzdem überspringen"</string>
<string name="go_back_button_label" msgid="7310586887969860472">"Zurück"</string>
<string name="skip_lock_screen_dialog_button_label" msgid="6706047245716780006">"Überspringen"</string>
@@ -468,7 +468,7 @@
<string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"Sensor berühren"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Lege deinen Finger auf den Sensor und hebe ihn an, wenn du eine Vibration spürst."</string>
<string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"Anheben und erneut berühren"</string>
- <string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Ändere zur vollständige Erfassung jedes Mal ein wenig die Position deines Fingers"</string>
+ <string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Lege den Finger immer wieder in leicht geänderter Position auf, bis der Abdruck vollständig erfasst ist."</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"Fingerabdruck hinzugefügt"</string>
<string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"Wenn du dieses Symbol siehst, kannst du deinen Fingerabdruck verwenden, um dich zu identifizieren oder einen Kauf zu autorisieren."</string>
<string name="security_settings_fingerprint_enroll_enrolling_skip" msgid="1473280156532146933">"Später"</string>
@@ -487,7 +487,7 @@
<string name="security_settings_fingerprint_enroll_done" msgid="4111289529758845926">"Fertig"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"Das ist nicht der Sensor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"Sensor auf Rückseite mit Zeigefinger berühren."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"Registrierung wurde nicht abgeschlossen."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"Registrierung wurde nicht abgeschlossen"</string>
<string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Zeitüberschreitung bei Fingerabdruckregistrierung. Bitte versuche es noch einmal."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"Fehler bei Fingerabdruckregistrierung. Versuche es erneut oder verwende einen anderen Finger."</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"Weiteren hinzufügen"</string>
@@ -549,9 +549,9 @@
<string name="setup_lock_settings_picker_title" product="device" msgid="4739290104106645233">"Gerät schützen"</string>
<string name="setup_lock_settings_picker_title" product="default" msgid="3911582328576859628">"Smartphone schützen"</string>
<string name="lock_settings_picker_biometrics_added_security_message" msgid="799453282539387294">"Richte für zusätzliche Sicherheit eine alternative Displaysperre ein"</string>
- <string name="setup_lock_settings_picker_message" product="tablet" msgid="7230799135599877804">"Du kannst verhindern, dass andere Personen dieses Tablet ohne deine Erlaubnis verwenden, indem du die Geräteschutzfunktionen aktivierst. Wähle eine Displaysperre aus."</string>
- <string name="setup_lock_settings_picker_message" product="device" msgid="2098404520816295371">"Du kannst verhindern, dass andere Personen dieses Gerät ohne deine Erlaubnis verwenden, indem du die Geräteschutzfunktionen aktivierst. Wähle eine Displaysperre aus."</string>
- <string name="setup_lock_settings_picker_message" product="default" msgid="2003984443953672040">"Du kannst verhindern, dass andere Personen dieses Smartphone ohne deine Erlaubnis verwenden, indem du die Geräteschutzfunktionen aktivierst. Wähle eine Displaysperre aus."</string>
+ <string name="setup_lock_settings_picker_message" product="tablet" msgid="7230799135599877804">"Du kannst verhindern, dass andere Personen dieses Tablet ohne deine Erlaubnis verwenden, indem du die Schutzfunktionen für dein Mobilgerät aktivierst. Wähle eine Displaysperre aus."</string>
+ <string name="setup_lock_settings_picker_message" product="device" msgid="2098404520816295371">"Du kannst verhindern, dass andere Personen dieses Gerät ohne deine Erlaubnis verwenden, indem du die Schutzfunktionen für dein Mobilgerät aktivierst. Wähle eine Displaysperre aus."</string>
+ <string name="setup_lock_settings_picker_message" product="default" msgid="2003984443953672040">"Du kannst verhindern, dass andere Personen dieses Smartphone ohne deine Erlaubnis verwenden, indem du die Schutzfunktionen für dein Mobilgerät aktivierst. Wähle eine Displaysperre aus."</string>
<string name="lock_settings_picker_fingerprint_message" msgid="1344567476145156885">"Alternative Methode für die Displaysperre auswählen"</string>
<string name="lock_settings_picker_face_message" msgid="6413145626861812959">"Alternative Methode für die Displaysperre auswählen"</string>
<string name="setup_lock_settings_options_button_label" msgid="4197315143877977385">"Optionen für die Displaysperre"</string>
@@ -595,8 +595,8 @@
<string name="unlock_disable_lock_title" msgid="3508492427073600294">"Displaysperre deaktivieren"</string>
<string name="unlock_disable_frp_warning_title" msgid="5858589970505254193">"Geräteschutz entfernen?"</string>
<string name="unlock_disable_frp_warning_title_profile" msgid="3814123014295965266">"Profilschutz entfernen?"</string>
- <string name="unlock_disable_frp_warning_content_pattern" msgid="1843950215687159135">"Wenn du dein Muster entfernst, funktionieren die Funktionen zum Geräteschutz nicht."</string>
- <string name="unlock_disable_frp_warning_content_pattern_fingerprint" msgid="8846957650251741548">"Wenn du dein Muster entfernst, funktionieren die Funktionen zum Geräteschutz nicht.<xliff:g id="EMPTY_LINE">
+ <string name="unlock_disable_frp_warning_content_pattern" msgid="1843950215687159135">"Der Geräteschutz funktioniert ohne dein Muster nicht."</string>
+ <string name="unlock_disable_frp_warning_content_pattern_fingerprint" msgid="8846957650251741548">"Der Geräteschutz funktioniert ohne dein Muster nicht.<xliff:g id="EMPTY_LINE">
</xliff:g>Deine gespeicherten Fingerabdrücke werden ebenfalls von diesem Gerät entfernt und du kannst mit ihnen weder dein Smartphone entsperren noch Käufe autorisieren oder dich in Apps anmelden."</string>
<string name="unlock_disable_frp_warning_content_pin" msgid="6760473271034592796">"Der Geräteschutz funktioniert ohne deine PIN nicht."</string>
@@ -718,7 +718,7 @@
<item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> aktive App</item>
</plurals>
<string name="manage_trust_agents" msgid="8129970926213142261">"Trust Agents"</string>
- <string name="disabled_because_no_backup_security" msgid="8127039979909203528">"Lege zunächst eine Displaysperre fest, damit du die Option verwenden kannst."</string>
+ <string name="disabled_because_no_backup_security" msgid="8127039979909203528">"Lege zuerst eine Displaysperre fest, damit du die Option verwenden kannst."</string>
<string name="manage_trust_agents_summary" msgid="2023116850759962248">"Keine"</string>
<plurals name="manage_trust_agents_summary_on" formatted="false" msgid="5550538038916606097">
<item quantity="other"><xliff:g id="COUNT">%d</xliff:g> aktive Trust Agents</item>
@@ -741,7 +741,7 @@
) -->
<string name="bluetooth_incoming_pairing_msg" msgid="940451919337185024">"Von:<br><b><xliff:g id="DEVICE_NAME">%1$s</xliff:g></b><br><br> Mit diesem Gerät koppeln?"</string>
<string name="bluetooth_display_passkey_pin_msg" msgid="5909423849232791647">"Gib zur Kopplung mit <xliff:g id="BOLD1_0"><br><b></xliff:g><xliff:g id="DEVICE_NAME">%1$s</xliff:g><xliff:g id="END_BOLD1"></b><br><br></xliff:g> <xliff:g id="BOLD2_1"><br><b></xliff:g><xliff:g id="PASSKEY">%2$s</xliff:g><xliff:g id="END_BOLD2"></b></xliff:g> ein und drücke anschließend die Eingabetaste."</string>
- <string name="bluetooth_pairing_shares_phonebook" msgid="7474404818877079813">"Zugriff auf deine Kontakte und deine Anrufliste zulassen"</string>
+ <string name="bluetooth_pairing_shares_phonebook" msgid="7474404818877079813">"Zugriff auf meine Kontakte und meine Anrufliste zulassen"</string>
<string name="bluetooth_error_title" msgid="5718761586633101960"></string>
<string name="bluetooth_connecting_error_message" msgid="8473359363469518478">"Keine Verbindung zu <xliff:g id="DEVICE_NAME">%1$s</xliff:g> möglich"</string>
<string name="bluetooth_preference_scan_title" msgid="457781003962324807">"Scan nach Geräten"</string>
@@ -806,7 +806,7 @@
<string name="wifi_display_status_connected" msgid="85692409327461403">"Verbunden"</string>
<string name="wifi_display_status_in_use" msgid="7646114501132773174">"In Verwendung"</string>
<string name="wifi_display_status_not_available" msgid="5600448733204688205">"Nicht verfügbar"</string>
- <string name="wifi_display_details" msgid="6379855523460749126">"Display-Einstellungen"</string>
+ <string name="wifi_display_details" msgid="6379855523460749126">"Displayeinstellungen"</string>
<string name="wifi_display_options_title" msgid="4587264519668872213">"Optionen für kabellose Übertragung (WiDi)"</string>
<string name="wifi_display_options_forget" msgid="7882982544626742073">"Entfernen"</string>
<string name="wifi_display_options_done" msgid="5922060890309265817">"Fertig"</string>
@@ -837,7 +837,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"WLAN"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"WLAN aktivieren"</string>
<string name="wifi_settings" msgid="7486492317310514109">"WLAN"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"WLAN verwenden"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"WLAN aktivieren"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"WLAN-Einstellungen"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"WLAN"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"WLAN-Zugangspunkte festlegen und verwalten"</string>
@@ -863,7 +863,7 @@
<string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"Für diese Funktion musst du zuerst einen kompatiblen Anbieter von Netzwerkbewertungen auswählen"</string>
<string name="wifi_install_credentials" msgid="5650088113710858289">"Zertifikate installieren"</string>
<string name="wifi_scan_notify_text" msgid="7614101215028336927">"Zur Verbesserung der Standortgenauigkeit können Apps und Dienste weiter nach WLANs suchen, auch wenn die WLAN-Funktion deaktiviert ist. Dadurch können beispielsweise standortbasierte Funktionen und Dienste verbessert werden. Dies lässt sich in den <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>Sucheinstellungen<xliff:g id="LINK_END_1">LINK_END</xliff:g> ändern."</string>
- <string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"Um die Standortgenauigkeit zu erhöhen, aktiviere die WLAN-Suche in den <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>Sucheinstellungen<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
+ <string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"Aktiviere zur Erhöhung der Standortgenauigkeit die WLAN-Suche in den <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>Sucheinstellungen<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
<string name="wifi_scan_notify_remember_choice" msgid="1235445971400237444">"Nicht mehr anzeigen"</string>
<string name="wifi_setting_sleep_policy_title" msgid="2120785188625932076">"WLAN im Ruhemodus aktiviert lassen"</string>
<string name="wifi_setting_on_during_sleep_title" msgid="856670183023402715">"WLAN im Ruhemodus aktiviert"</string>
@@ -890,7 +890,7 @@
<string name="wifi_menu_forget" msgid="7561140554450163075">"Netzwerk entfernen"</string>
<string name="wifi_menu_modify" msgid="4080178040721021101">"Netzwerk ändern"</string>
<string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"WLAN aktivieren, um verfügbare Netze abzurufen"</string>
- <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"Suche nach WLAN-Netzwerken läuft…"</string>
+ <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"Suche nach WLAN läuft…"</string>
<string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"Du verfügst nicht über die Berechtigung zum Ändern des WLAN-Netzwerks."</string>
<string name="wifi_more" msgid="3538241640407382185">"Mehr"</string>
<string name="wifi_setup_wps" msgid="6730131677695521321">"Automatisches Setup (WPS)"</string>
@@ -1040,7 +1040,7 @@
<string name="wifi_dns1" msgid="5250809981658822505">"DNS 1"</string>
<string name="wifi_dns2" msgid="1905876166783761641">"DNS 2"</string>
<string name="wifi_gateway" msgid="7455334454444443397">"Gateway"</string>
- <string name="wifi_network_prefix_length" msgid="1941206966133010633">"Länge Netzwerkpräfix"</string>
+ <string name="wifi_network_prefix_length" msgid="1941206966133010633">"Länge d. Netzwerkpräfixes"</string>
<string name="wifi_p2p_settings_title" msgid="3213180637906683308">"Wi-Fi Direct"</string>
<string name="wifi_p2p_device_info" msgid="4717490498956029237">"Geräte-Informationen"</string>
<string name="wifi_p2p_persist_network" msgid="1110453878886476660">"Diese Verbindung speichern"</string>
@@ -1103,7 +1103,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"WLAN"</item>
+ <item msgid="2271962426654621656">"Mobil"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Mobilfunknetz nutzen, wenn WLAN nicht verfügbar ist"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Bei nicht verfügbarem Mobilfunknetz WLAN verwenden"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Anruf über WLAN. Bei Abbruch der WLAN-Verbindung endet der Anruf."</string>
@@ -1201,7 +1204,7 @@
<string name="auto_brightness_off_summary" msgid="6162650416289359104">"Nicht an Lichtverhältnisse anpassen"</string>
<string name="auto_brightness_very_high_summary" msgid="7202032980509583918">"Erhöhter Akkuverbrauch"</string>
<string name="auto_brightness_disclaimer" msgid="5416696351199148809">"\"Helligkeit an Lichtverhältnisse anpassen\": Ist diese Funktion aktiviert, kannst du die Helligkeit dennoch vorübergehend ändern."</string>
- <string name="auto_brightness_description" msgid="8209140379089535411">"Die Helligkeit des Displays passt sich automatisch an deine Umgebung und deine Aktivitäten an. Mit dem Schieberegler kannst du manuell nachjustieren und \"Automatische Helligkeit\" merkt sich deine Präferenz."</string>
+ <string name="auto_brightness_description" msgid="8209140379089535411">"Die Helligkeit des Displays passt sich automatisch an deine Umgebung und deine Aktivitäten an. Mit dem Schieberegler kannst du manuell nachjustieren und die Funktion \"Automatische Helligkeit\" merkt sich deine Präferenz."</string>
<string name="display_white_balance_title" msgid="5747260735311935143">"Weißabgleich des Bildschirms"</string>
<string name="adaptive_sleep_title" msgid="3237620948260957018">"Screen Aware"</string>
<string name="adaptive_sleep_summary_on" msgid="6670369739228487082">"An/Der Bildschirm wird nicht ausgeschaltet, wenn du ihn ansiehst"</string>
@@ -1565,7 +1568,7 @@
<string name="error_adding_apn_type" msgid="671634520340569678">"Der Anbieter erlaubt das Hinzufügen von APNs des Typs %s nicht."</string>
<string name="restore_default_apn" msgid="7195266404077471007">"Standard-APN-Einstellungen werden wiederhergestellt"</string>
<string name="menu_restore" msgid="3799288817317293115">"Auf Standard zurücksetzen"</string>
- <string name="restore_default_apn_completed" msgid="5671734152740058937">"Zurücksetzen auf Standard-APN-Einstellungen abgeschlossen"</string>
+ <string name="restore_default_apn_completed" msgid="5671734152740058937">"Zurücksetzen auf Standard-APN-Einstellungen abgeschlossen."</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"Optionen zum Zurücksetzen"</string>
<string name="reset_dashboard_summary" msgid="8778383341461126642">"Zurückgesetzt werden können das Netzwerk, Apps und das Gerät"</string>
<string name="reset_network_title" msgid="8944059136930806211">"WLAN, mobile Daten & Bluetooth zurücksetzen"</string>
@@ -1581,7 +1584,7 @@
<string name="reset_network_complete_toast" msgid="128225929536005495">"Die Netzwerkeinstellungen wurden zurückgesetzt."</string>
<string name="reset_esim_error_title" msgid="4728931209471875632">"SIMs können nicht gelöscht werden"</string>
<string name="reset_esim_error_msg" msgid="4716366079119742235">"Heruntergeladene SIMs können aufgrund eines Fehlers nicht gelöscht werden.\n\nStarte das Gerät neu und versuche es noch einmal."</string>
- <string name="master_clear_title" msgid="1560712943955904673">"Alle Daten löschen (Auslieferungszustand)"</string>
+ <string name="master_clear_title" msgid="1560712943955904673">"Alle Daten löschen (auf Werkseinstellungen zurücksetzen)"</string>
<string name="master_clear_short_title" msgid="919098101581335101">"Alle Daten löschen"</string>
<string name="master_clear_desc" product="tablet" msgid="3432373610755760899">"Hierdurch werden alle Daten aus dem "<b>"internen Speicher"</b>" deines Tablets gelöscht, wie z. B. die Folgenden:\n\n"<li>"Dein Google-Konto"</li>\n<li>"System- und App-Daten sowie entsprechende Einstellungen"</li>\n<li>"Heruntergeladene Apps"</li></string>
<string name="master_clear_desc" product="default" msgid="8765543541962866697">"Hierdurch werden alle Daten aus dem "<b>"internen Speicher"</b>" deines Smartphones gelöscht, wie z. B. die Folgenden:\n\n"<li>"Dein Google-Konto"</li>\n<li>"System- und App-Daten sowie entsprechende Einstellungen"</li>\n<li>"Heruntergeladene Apps"</li></string>
@@ -1673,7 +1676,7 @@
<string name="assisted_gps" msgid="5411780261117055175">"Unterstütztes GPS verwenden"</string>
<string name="assisted_gps_enabled" msgid="2561022181775725369">"Server zur Unterstützung von GPS verwenden (zur Verringerung der Netzwerkauslastung nicht auswählen)"</string>
<string name="assisted_gps_disabled" msgid="6448758788217415937">"Server zur Unterstützung von GPS verwenden (zur Verbesserung der GPS-Leistung deaktivieren)"</string>
- <string name="use_location_title" msgid="7724788634359496634">"Standort & Google-Suche"</string>
+ <string name="use_location_title" msgid="7724788634359496634">"Standort & Google Suche"</string>
<string name="use_location_summary" msgid="7396716606067400283">"Google darf Suchergebnisse und andere Dienste an meinen Standort anpassen"</string>
<string name="location_access_title" msgid="8587974819606800029">"Zugriff auf meinen Standort"</string>
<string name="location_access_summary" msgid="6919495149026354355">"Meine Standortdaten dürfen von Apps verwendet werden, die ich dazu berechtigt habe."</string>
@@ -1706,15 +1709,15 @@
<string name="confirm_device_credential_use_alternate_method" msgid="1279869272895739941">"Alternative Methode verwenden"</string>
<string name="lockpassword_choose_your_screen_lock_header" msgid="6283518876031424798">"Displaysperre einrichten"</string>
<string name="lockpassword_choose_your_password_message" msgid="2838273977481046536">"Richte zur Sicherheit ein Passwort ein"</string>
- <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="4921343500484160894">"Passwort festlegen, um Fingerabdruck zu verwenden"</string>
- <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="314870151462139417">"Muster festlegen, um Fingerabdruck zu verwenden"</string>
+ <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="4921343500484160894">"Für Fingerabdruck Passwort festlegen"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="314870151462139417">"Für Fingerabdruck Muster festlegen"</string>
<string name="lockpassword_choose_your_pin_message" msgid="8942598950627277885">"Richte zur Sicherheit eine PIN ein"</string>
- <string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1102927520952116303">"PIN festlegen, um Fingerabdruck zu verwenden"</string>
+ <string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1102927520952116303">"Für Fingerabdruck PIN festlegen"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="1503075455752279687">"Richte zur Sicherheit ein Muster ein"</string>
<string name="lockpassword_confirm_your_password_header" msgid="9055242184126838887">"Passwort noch einmal eingeben"</string>
<string name="lockpassword_confirm_your_pattern_header" msgid="7137526922696316545">"Muster bestätigen"</string>
<string name="lockpassword_confirm_your_pin_header" msgid="4335593948303036343">"PIN noch einmal eingeben"</string>
- <string name="lockpassword_confirm_passwords_dont_match" msgid="1783767008133345784">"Die Passwörter stimmen nicht überein."</string>
+ <string name="lockpassword_confirm_passwords_dont_match" msgid="1783767008133345784">"Die Passwörter stimmen nicht überein"</string>
<string name="lockpassword_confirm_pins_dont_match" msgid="5444357293637748942">"Die PINs stimmen nicht überein"</string>
<string name="lockpassword_draw_your_pattern_again_header" msgid="9017394036814402348">"Muster noch einmal zeichnen"</string>
<string name="lockpassword_choose_lock_generic_header" msgid="4418423132980560119">"Sperre einrichten"</string>
@@ -2093,9 +2096,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Vibration bei Benachrichtigungseingang"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Vibration bei Klingeln"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Vibration bei Bildschirmberührung"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Dienst aktivieren"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Farbkorrektur aktivieren"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Untertitel aktivieren"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Dienst aktivieren"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Farbkorrektur aktivieren"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Untertitel aktivieren"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Weiter"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Hörhilfen"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Keine Hörhilfen verbunden"</string>
@@ -2231,7 +2234,7 @@
<string name="power_usage_level_and_status" msgid="8873534076894160727">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g>"</string>
<string name="power_discharge_remaining" msgid="3461915627093471868">"Noch <xliff:g id="REMAIN">%1$s</xliff:g>"</string>
<string name="power_charge_remaining" msgid="2730510256218879651">"Verbleibende Ladezeit: <xliff:g id="UNTIL_CHARGED">%1$s</xliff:g>"</string>
- <string name="background_activity_title" msgid="7207836362312111483">"Hintergrundnutzung einschränken"</string>
+ <string name="background_activity_title" msgid="7207836362312111483">"Einschränkung der Hintergrundnutzung"</string>
<string name="background_activity_summary" msgid="582372194738538145">"App darf im Hintergrund ausgeführt werden"</string>
<string name="background_activity_summary_disabled" msgid="457944930942085876">"App darf nicht im Hintergrund ausgeführt werden"</string>
<string name="background_activity_summary_whitelisted" msgid="4713321059375873828">"Hintergrundnutzung kann nicht eingeschränkt werden"</string>
@@ -2307,12 +2310,12 @@
<item quantity="other">%1$d Apps einschränken?</item>
<item quantity="one">App einschränken?</item>
</plurals>
- <string name="battery_tip_restrict_app_dialog_message" msgid="6905822297507947381">"Um den Akku zu schonen, verhindere, dass <xliff:g id="APP">%1$s</xliff:g> im Hintergrund Strom verbraucht. Eventuell funktioniert die App dann nicht mehr richtig und Benachrichtigungen werden verzögert angezeigt."</string>
- <string name="battery_tip_restrict_apps_less_than_5_dialog_message" msgid="4225881888543582456">"Um den Akku zu schonen, verhindere, dass diese Apps im Hintergrund Strom verbrauchen. Eventuell funktionieren sie dann nicht mehr richtig und Benachrichtigungen werden verzögert angezeigt.\n\nApps:"</string>
- <string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"Um den Akku zu schonen, verhindere, dass diese Apps im Hintergrund Strom verbrauchen. Eventuell funktionieren sie dann nicht mehr richtig und Benachrichtigungen werden verzögert angezeigt.\n\nApps:\n<xliff:g id="APP_LIST">%1$s</xliff:g>."</string>
+ <string name="battery_tip_restrict_app_dialog_message" msgid="6905822297507947381">"Um den Akku zu schonen, kannst du verhindern, dass <xliff:g id="APP">%1$s</xliff:g> im Hintergrund Strom verbraucht. Eventuell funktioniert die App dann nicht mehr richtig und Benachrichtigungen werden verzögert angezeigt."</string>
+ <string name="battery_tip_restrict_apps_less_than_5_dialog_message" msgid="4225881888543582456">"Um den Akku zu schonen, kannst du verhindern, dass diese Apps im Hintergrund Strom verbrauchen. Eventuell funktionieren sie dann nicht mehr richtig und Benachrichtigungen werden verzögert angezeigt.\n\nApps:"</string>
+ <string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"Um den Akku zu schonen, kannst du verhindern, dass diese Apps im Hintergrund Strom verbrauchen. Eventuell funktionieren sie dann nicht mehr richtig und Benachrichtigungen werden verzögert angezeigt.\n\nApps:\n<xliff:g id="APP_LIST">%1$s</xliff:g>."</string>
<string name="battery_tip_restrict_app_dialog_ok" msgid="2573410775701913487">"Einschränken"</string>
<string name="battery_tip_unrestrict_app_dialog_title" msgid="812458516399125710">"Beschränkung entfernen?"</string>
- <string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"Diese App läuft im Hintergrund und beansprucht dabei den Akku. Er könnte deshalb früher als erwartet leer sein."</string>
+ <string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"Diese App kann dann im Hintergrund laufen und beansprucht dabei den Akku. Er könnte deshalb früher als erwartet leer sein."</string>
<string name="battery_tip_unrestrict_app_dialog_ok" msgid="9154938931448151479">"Entfernen"</string>
<string name="battery_tip_unrestrict_app_dialog_cancel" msgid="7331148618292397166">"Abbrechen"</string>
<string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"Der Akkuverbrauch durch Apps ist zurzeit normal. Falls der Akku zu stark beansprucht wird, werden dir mögliche Maßnahmen vorgeschlagen.\n\nBei niedrigem Akkustand kannst du jederzeit den Energiesparmodus aktivieren."</string>
@@ -2447,9 +2450,9 @@
<string name="battery_saver" msgid="3989710213758938398">"Energiesparmodus"</string>
<string name="battery_saver_auto_title" msgid="4158659069641849952">"Automatisch aktivieren"</string>
<string name="battery_saver_auto_no_schedule" msgid="739814529432092706">"Keine Aktivierung nach Zeitplan"</string>
- <string name="battery_saver_auto_routine" msgid="886514412067906980">"Anhand deiner üblichen Abläufe"</string>
+ <string name="battery_saver_auto_routine" msgid="886514412067906980">"Anhand meiner üblichen Abläufe"</string>
<string name="battery_saver_auto_percentage" msgid="5791982309331921556">"Anhand des Ladestands"</string>
- <string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"Der Energiesparmodus wird automatisch aktiviert, wenn offenbar wird, dass der Akku wahrscheinlich nicht bis zum nächsten Aufladen hält (ermittelt anhand deines üblichen Aufladezeitpunkts)."</string>
+ <string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"Der Energiesparmodus wird automatisch aktiviert, wenn der Akku wahrscheinlich nicht bis zum nächsten Aufladen hält (ermittelt anhand deines üblichen Aufladezeitpunkts)."</string>
<string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"Wird bei <xliff:g id="PERCENT">%1$s</xliff:g> aktiviert"</string>
<string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Zeitplan festlegen"</string>
<string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"Bei vollem Akku ausschalten"</string>
@@ -2459,7 +2462,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Aktivieren"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Energiesparmodus aktivieren"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Energiesparmodus aktivieren"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Automatisch aktivieren"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Nie"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"bei <xliff:g id="PERCENT">%1$s</xliff:g> Akku"</string>
@@ -2710,7 +2713,7 @@
<string name="data_usage_cycle_editor_subtitle" msgid="6043098041946166597">"Jeden Monat zurücksetzen am:"</string>
<string name="data_usage_cycle_editor_positive" msgid="9155752056537811646">"Übernehmen"</string>
<string name="data_usage_warning_editor_title" msgid="1431385383278389290">"Warnung für Datenverbrauch festlegen"</string>
- <string name="data_usage_limit_editor_title" msgid="1687908662154108293">"Limit festlegen"</string>
+ <string name="data_usage_limit_editor_title" msgid="1687908662154108293">"Datenlimit festlegen"</string>
<string name="data_usage_limit_dialog_title" msgid="8804760847110131518">"Datennutzung begrenzen"</string>
<string name="data_usage_limit_dialog_mobile" product="tablet" msgid="2000713577999830647">"Mobile Daten werden deaktiviert, sobald das von dir festgelegte Limit erreicht wurde.\n\nDer dabei angesetzte Wert wird von deinem Tablet berechnet und kann von der Messung des genutzten Datenvolumens durch deinen Mobilfunkanbieter abweichen. Daher empfiehlt es sich, einen eher etwas niedrigeren Limitwert anzugeben."</string>
<string name="data_usage_limit_dialog_mobile" product="default" msgid="943546278705619205">"Mobile Daten werden deaktiviert, sobald das von dir festgelegte Limit erreicht wurde.\n\nDer dabei angesetzte Wert wird von deinem Smartphone berechnet und kann von der Messung des genutzten Datenvolumens durch deinen Mobilfunkanbieter abweichen. Daher empfiehlt es sich, einen eher etwas niedrigeren Limitwert anzugeben."</string>
@@ -2901,7 +2904,7 @@
<string name="user_exit_guest_confirm_message" msgid="6955182181145748919">"Alle Apps und Daten in dieser Sitzung werden gelöscht."</string>
<string name="user_exit_guest_dialog_remove" msgid="1878866060881115716">"Entfernen"</string>
<string name="user_enable_calling" msgid="864760054792249503">"Telefonieren zulassen"</string>
- <string name="user_enable_calling_sms" msgid="3450252891736718793">"Telefonieren & SMS zulassen?"</string>
+ <string name="user_enable_calling_sms" msgid="3450252891736718793">"Telefonieren & SMS zulassen"</string>
<string name="user_remove_user" msgid="3687544420125911166">"Nutzer löschen"</string>
<string name="user_enable_calling_confirm_title" msgid="1141612415529158542">"Telefonieren zulassen?"</string>
<string name="user_enable_calling_confirm_message" msgid="2490126715153125970">"Die Anrufliste wird für diesen Nutzer freigegeben."</string>
@@ -3097,7 +3100,7 @@
<string name="keywords_backup" msgid="7433356270034921627">"Sicherung, sicherung"</string>
<string name="keywords_assist_gesture_launch" msgid="2711433664837843513">"bewegung, geste, touch-geste"</string>
<string name="keywords_face_unlock" msgid="651615819291927262">"Face, Unlock, Gesichtserkennung, Anmeldung"</string>
- <string name="keywords_imei_info" msgid="4325847870422053408">"imei, meid, min, prl version, imei sv"</string>
+ <string name="keywords_imei_info" msgid="4325847870422053408">"imei, meid, Min., prl version, imei sv"</string>
<string name="keywords_sim_status" msgid="3852088576719874387">"netzwerk, status des mobilfunknetz, servicestatus, signalstärke, art des mobilfunknetzes, roaming, iccid"</string>
<string name="keywords_model_and_hardware" msgid="2743197096210895251">"seriennummer, hardwareversion"</string>
<string name="keywords_android_version" msgid="4842749998088987740">"stand der sicherheitsupdates android, baseband version, kernel version"</string>
@@ -3150,7 +3153,7 @@
<string name="charging_sounds_title" msgid="5070437987230894287">"Töne und Vibration beim Aufladen"</string>
<string name="docking_sounds_title" msgid="2573137471605541366">"Docking-Sounds"</string>
<string name="touch_sounds_title" msgid="165237488496165652">"Töne bei Berührung"</string>
- <string name="vibrate_on_touch_title" msgid="6360155469279157684">"Vibration bei Displayberührung"</string>
+ <string name="vibrate_on_touch_title" msgid="6360155469279157684">"Vibration bei Berührung"</string>
<string name="vibrate_on_touch_summary" msgid="5504424764028676043">"Haptisches Feedback beim Tippen, bei der Tastaturnutzung und mehr"</string>
<string name="dock_audio_media_title" msgid="1859521680502040781">"Dock-Lautsprecherwiedergabe"</string>
<string name="dock_audio_media_disabled" msgid="4300752306178486302">"Alle Audioquellen"</string>
@@ -3231,7 +3234,7 @@
<string name="zen_mode_button_turn_on" msgid="1097964136225943415">"Jetzt aktivieren"</string>
<string name="zen_mode_button_turn_off" msgid="3990967728457149454">"Jetzt deaktivieren"</string>
<string name="zen_mode_settings_dnd_manual_end_time" msgid="4307574188962071429">"\"Bitte nicht stören\" ist aktiviert bis <xliff:g id="FORMATTED_TIME">%s</xliff:g>"</string>
- <string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"\"Bitte nicht stören\" bleibt aktiviert, bis du es deaktivierst"</string>
+ <string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"\"Bitte nicht stören\" bleibt aktiviert, bis du es deaktivierst."</string>
<string name="zen_mode_settings_dnd_automatic_rule" msgid="2843297614114625408">"\"Bitte nicht stören\" wurde automatisch durch einen Zeitplan (<xliff:g id="RULE_NAME">%s</xliff:g>) aktiviert"</string>
<string name="zen_mode_settings_dnd_automatic_rule_app" msgid="5103454923160912313">"\"Bitte nicht stören\" wurde automatisch durch eine App (<xliff:g id="APP_NAME">%s</xliff:g>) aktiviert"</string>
<string name="zen_mode_settings_dnd_custom_settings_footer" msgid="6335108298640066560">"\"Bitte nicht stören\" ist mit benutzerdefinierten Einstellungen für \"<xliff:g id="RULE_NAMES">%s</xliff:g>\" aktiviert."</string>
@@ -3319,7 +3322,7 @@
<string name="notification_pulse_title" msgid="4861418327614907116">"Benachrichtigungslicht blinkt"</string>
<string name="lock_screen_notifications_title" msgid="6889072265118747835">"Auf dem Sperrbildschirm"</string>
<string name="locked_work_profile_notification_title" msgid="8307025804986190658">"Wenn das Arbeitsprofil gesperrt ist"</string>
- <string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"Alle Benachrichtigungen anzeigen"</string>
+ <string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"Gesamten Benachrichtigungsinhalt anzeigen"</string>
<string name="lock_screen_notifications_summary_hide" msgid="3668806866535260143">"Vertrauliche Inhalte ausblenden"</string>
<string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"Keine Benachrichtigungen anzeigen"</string>
<string name="lock_screen_notifications_interstitial_message" msgid="4230189215124387818">"Wie sollen Benachrichtigungen angezeigt werden, wenn dein Gerät gesperrt ist?"</string>
@@ -3468,7 +3471,7 @@
<string name="zen_mode_schedule_rule_days_all" msgid="8814173364016139675">"Täglich"</string>
<string name="zen_mode_schedule_alarm_title" msgid="2078194049274875023">"Wecker kann Schlusszeit außer Kraft setzen"</string>
<string name="zen_mode_schedule_alarm_summary" msgid="5556997989911412070">"Zeitplan wird deaktiviert, wenn ein Wecker klingelt"</string>
- <string name="zen_mode_custom_behavior_title" msgid="8908861697886331001">"\"Bitte nicht stören\"-Verhalten"</string>
+ <string name="zen_mode_custom_behavior_title" msgid="8908861697886331001">"\"Bitte nicht stören\"-Modus"</string>
<string name="zen_mode_custom_behavior_summary_default" msgid="3509865340195397447">"Standardeinstellungen verwenden"</string>
<string name="zen_mode_custom_behavior_summary" msgid="7206909852887332604">"Benutzerdefinierte Einstellungen festlegen"</string>
<string name="zen_mode_custom_behavior_category_title" msgid="7451686525113262087">"Für \"<xliff:g id="SCHEDULE_NAME">%1$s</xliff:g>\""</string>
@@ -3710,7 +3713,7 @@
<string name="high_power_system" msgid="739584574711292753">"Akku-Optimierung nicht verfügbar"</string>
<string name="high_power_desc" msgid="333756885680362741">"Keine Optimierung bezüglich der Akkuleistung anwenden. Dein Akku entleert sich hierdurch möglicherweise schneller."</string>
<string name="high_power_prompt_title" msgid="2805745781720454052">"Soll die App immer im Hintergrund ausgeführt werden?"</string>
- <string name="high_power_prompt_body" msgid="8067395096053552289">"Wenn du erlaubst, dass \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" dauerhaft im Hintergrund ausgeführt wird, kann dies die Akkulaufzeit verringern. \n\nDu kannst diese Einstellung jederzeit unter \"Einstellungen\" > \"Apps & Benachrichtigungen\" ändern."</string>
+ <string name="high_power_prompt_body" msgid="8067395096053552289">"Wenn du erlaubst, dass die App \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" dauerhaft im Hintergrund ausgeführt wird, kann dies die Akkulaufzeit verringern. \n\nDu kannst diese Einstellung jederzeit unter \"Einstellungen\" > \"Apps & Benachrichtigungen\" ändern."</string>
<string name="battery_summary" msgid="4345690800899981339">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> Verbrauch seit der letzten vollständigen Aufladung"</string>
<string name="battery_power_management" msgid="2853925857548647969">"Energiespareinstellungen"</string>
<string name="no_battery_summary" msgid="4105932628367471314">"Kein Verbrauch seit dem letzten vollen Aufladen"</string>
@@ -3762,7 +3765,7 @@
<string name="assist_access_screenshot_summary" msgid="3010943864000489424">"Der Assistent-App den Zugriff auf eine Aufnahme deines Bildschirms gestatten"</string>
<string name="assist_flash_title" msgid="8852484250748551092">"Bildschirm kurz aufleuchten lassen"</string>
<string name="assist_flash_summary" msgid="6697095786317559129">"Bildschirmränder kurz aufleuchten lassen, wenn Assistent-App auf Bildschirm-Text oder Screenshot zugreift"</string>
- <string name="assist_footer" msgid="7030121180457472165">"Assistent-Apps können dir bei bestimmten Dingen helfen. Dazu greifen sie auf die Informationen zu, die aktuell auf deinem Bildschirm angezeigt werden. Für eine integrierte Unterstützung unterstützen einige Apps sowohl Launcher- als auch Spracheingabedienste."</string>
+ <string name="assist_footer" msgid="7030121180457472165">"Assistent-Apps können dir bei bestimmten Dingen helfen. Dazu greifen sie auf die Informationen zu, die aktuell auf deinem Bildschirm angezeigt werden. Damit sie dir eine umfassende Hilfe sind, unterstützen einige Apps sowohl Launcher- als auch Spracheingabedienste."</string>
<string name="average_memory_use" msgid="5333366040118953945">"Durchschnittl. Speicherverbrauch"</string>
<string name="maximum_memory_use" msgid="6509872438499846077">"Maximaler Speicherverbrauch"</string>
<string name="memory_usage" msgid="7963253555330830906">"Speicherverbrauch"</string>
@@ -4008,7 +4011,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Wenn das Gerät gesperrt ist, ist das Schreiben von Antworten oder anderen Texten in Nachrichten nicht möglich"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Standardrechtschreibprüfung"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Rechtschreibprüfung wählen"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Rechtschreibprüfung verwenden"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Rechtschreibprüfung aktivieren"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Nicht ausgewählt"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(keine)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4104,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Zur Freigabe von Speicherplatz entfernt der Speichermanager Back-ups von Fotos und Videos von deinem Gerät."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Fotos & Videos entfernen"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Speichermanager"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Speichermanager aktivieren"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Speichermanager aktivieren"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatisch"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manuell"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Jetzt Speicherplatz freigeben"</string>
@@ -4121,18 +4124,18 @@
<string name="ambient_display_title" product="default" msgid="6785677099744344088">"Für Blick aufs Display doppeltippen"</string>
<string name="ambient_display_title" product="tablet" msgid="1106285490888683613">"Doppeltippen für schnellen Blick auf das Display des Tablets"</string>
<string name="ambient_display_title" product="device" msgid="5064644474876041478">"Doppeltippen für schnellen Blick auf das Display des Geräts"</string>
- <string name="ambient_display_summary" msgid="4882910328216411109">"Wenn auf den Bildschirm doppelgetippt wird, werden die Uhrzeit, Benachrichtigungen und andere Informationen angezeigt"</string>
- <string name="ambient_display_pickup_title" product="default" msgid="7141652156907066938">"Für Blick aufs Display Smartphone in die Hand nehmen"</string>
+ <string name="ambient_display_summary" msgid="4882910328216411109">"Wenn du auf den Bildschirm doppeltippst, werden die Uhrzeit, Benachrichtigungen und andere Informationen angezeigt."</string>
+ <string name="ambient_display_pickup_title" product="default" msgid="7141652156907066938">"Beim Hochheben Display aktivieren"</string>
<string name="ambient_display_pickup_title" product="tablet" msgid="1555456400210301959">"Tablet hochnehmen, um das Display anzusehen"</string>
<string name="ambient_display_pickup_title" product="device" msgid="2480126522988135037">"Gerät hochnehmen, um das Display anzusehen"</string>
<string name="ambient_display_wake_screen_title" msgid="3376988352851077102">"Bildschirm aktivieren"</string>
- <string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"Wenn das Smartphone in die Hand genommen wird, werden die Uhrzeit, Benachrichtigungen und andere Informationen angezeigt"</string>
- <string name="ambient_display_pickup_summary" product="tablet" msgid="1077745287100012928">"Wenn das Tablet in die Hand genommen wird, werden die Uhrzeit, Benachrichtigungen und andere Informationen angezeigt"</string>
- <string name="ambient_display_pickup_summary" product="device" msgid="404199660076598026">"Wenn das Gerät in die Hand genommen wird, werden die Uhrzeit, Benachrichtigungen und andere Informationen angezeigt"</string>
+ <string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"Wenn du das Smartphone in die Hand nimmst, werden die Uhrzeit, Benachrichtigungen und andere Informationen angezeigt."</string>
+ <string name="ambient_display_pickup_summary" product="tablet" msgid="1077745287100012928">"Wenn du das Tablet in die Hand nimmst, werden die Uhrzeit, Benachrichtigungen und andere Informationen angezeigt."</string>
+ <string name="ambient_display_pickup_summary" product="device" msgid="404199660076598026">"Wenn du das Gerät in die Hand nimmst, werden die Uhrzeit, Benachrichtigungen und andere Informationen angezeigt."</string>
<string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"Tippen, um Informationen auf dem Smartphone anzusehen"</string>
<string name="ambient_display_tap_screen_title" product="tablet" msgid="6434521782016864148">"Tippen, um Informationen auf dem Tablet anzusehen"</string>
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"Tippen, um Informationen auf dem Gerät anzusehen"</string>
- <string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"Wenn auf den Bildschirm getippt wird, werden die Uhrzeit, Benachrichtigungen und andere Informationen angezeigt"</string>
+ <string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"Wenn du auf den Bildschirm tippst, werden die Uhrzeit, Benachrichtigungen und andere Informationen angezeigt."</string>
<string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"Benachrichtigungen durch Wischen über Fingerabdrucksensor öffnen"</string>
<string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"Fingerabdrucksensor verwenden"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"Zum Lesen von Benachrichtigungen über den Fingerabdrucksensor auf der Rückseite des Smartphones nach unten wischen"</string>
@@ -4249,15 +4252,15 @@
<string name="app_info_storage_title" msgid="6643391804949509308">"Belegter Speicherplatz"</string>
<string name="webview_uninstalled_for_user" msgid="3407952144444040557">"(für Nutzer <xliff:g id="USER">%s</xliff:g> deinstalliert)"</string>
<string name="webview_disabled_for_user" msgid="8057805373224993504">"(für Nutzer <xliff:g id="USER">%s</xliff:g> deaktiviert)"</string>
- <string name="autofill_app" msgid="3990765434980280073">"AutoFill-Dienst"</string>
+ <string name="autofill_app" msgid="3990765434980280073">"Dienst für automatisches Ausfüllen"</string>
<string name="autofill_keywords" msgid="7717726766232862218">"automatisch, ausfüllen, füllen, autofill"</string>
- <string name="autofill_confirmation_message" msgid="1385894598730361304">"<b>Nur für vertrauenswürdige Apps</b> <br/> <br/> <xliff:g id=app_name example=Google Autofill>%1$s</xliff:g> greift auf die Displayanzeige zu, um zu bestimmen, welche Felder automatisch ausgefüllt werden können. AutoFill sollte daher nur für vertrauenswürdige Apps zugelassen werden."</string>
- <string name="debug_autofill_category" msgid="6262526615416295645">"AutoFill"</string>
+ <string name="autofill_confirmation_message" msgid="1385894598730361304">"<b>Nur für vertrauenswürdige Apps</b> <br/> <br/> <xliff:g id=app_name example=Automatisches Ausfüllen von Google>%1$s</xliff:g> greift auf die Displayanzeige zu, um zu bestimmen, welche Felder automatisch ausgefüllt werden können. Es sollte daher nur für vertrauenswürdige Apps zugelassen werden."</string>
+ <string name="debug_autofill_category" msgid="6262526615416295645">"Automatisches Ausfüllen"</string>
<string name="autofill_logging_level_title" msgid="2577340324541102626">"Protokollierungsebene"</string>
<string name="autofill_max_partitions" msgid="125269645910590057">"Maximale Zahl von Anfragen pro Sitzung"</string>
<string name="autofill_max_visible_datasets" msgid="2791081640248423492">"Maximale Zahl sichtbarer Datensätze"</string>
<string name="autofill_reset_developer_options" msgid="7208417230269613101">"Auf Standardwerte zurücksetzen"</string>
- <string name="autofill_reset_developer_options_complete" msgid="5686061993002179524">"Die AutoFill-Optionen für Entwickler wurden zurückgesetzt"</string>
+ <string name="autofill_reset_developer_options_complete" msgid="5686061993002179524">"Die Optionen zum automatischen Ausfüllen für Entwickler wurden zurückgesetzt"</string>
<string name="device_theme" msgid="8992291311481135893">"Gerätedesign"</string>
<string name="default_theme" msgid="5986996377385956138">"Standard"</string>
<string name="show_operator_name_title" msgid="5056163028128447308">"Netzwerkname"</string>
@@ -4308,7 +4311,7 @@
<string name="change_wifi_state_title" msgid="5140754955787584174">"WLAN-Steuerung"</string>
<string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"App darf WLAN steuern"</string>
<string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Erlaubt der App das WLAN zu aktivieren oder zu deaktivieren, nach WLANs zu scannen und eine Verbindung zu ihnen herstellen, Netzwerke hinzuzufügen oder zu entfernen oder einen lokal beschränkten Hotspot zu starten"</string>
- <string name="media_output_title" msgid="8710632337456601848">"Medien hier abspielen"</string>
+ <string name="media_output_title" msgid="8710632337456601848">"Medien hier abspielen:"</string>
<string name="media_output_default_summary" msgid="3159237976830415584">"Dieses Gerät"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"Smartphone"</string>
<string name="media_output_summary" product="tablet" msgid="6672024060360538526">"Tablet"</string>
diff --git a/tests/CarDeveloperOptions/res/values-el/arrays.xml b/tests/CarDeveloperOptions/res/values-el/arrays.xml
index 6b208c6..707b98e 100644
--- a/tests/CarDeveloperOptions/res/values-el/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-el/arrays.xml
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"Να μην επιτρέπεται ποτέ"</item>
<item msgid="8184570120217958741">"Να επιτρέπεται πάντα"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Κανονική"</item>
+ <item msgid="5101233285497327432">"Μέτρια"</item>
+ <item msgid="1555861583162930714">"Χαμηλή"</item>
+ <item msgid="1719683776264798117">"Σημαντική"</item>
+ <item msgid="1567326459340152525">";"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Κανονική"</item>
+ <item msgid="6107138933849816768">"Μέτρια"</item>
+ <item msgid="182695359839047859">"Χαμηλή"</item>
+ <item msgid="8577246509202964244">"Κρίσιμη"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Συνεχής"</item>
<item msgid="167418068739176448">"Κορυφαία δραστηριότητα"</item>
@@ -463,8 +473,8 @@
</string-array>
<string-array name="wifi_metered_entries">
<item msgid="4329206416008519163">"Αυτόματος εντοπισμός"</item>
- <item msgid="773943026484148895">"Χρήση ως δικτύου με περιορισμούς"</item>
- <item msgid="1008268820118852416">"Χρήση ως δικτύου χωρίς περιορισμούς"</item>
+ <item msgid="773943026484148895">"Χρήση ως δικτύου με ογκοχρέωση"</item>
+ <item msgid="1008268820118852416">"Χρήση ως δικτύου χωρίς ογκοχρέωση"</item>
</string-array>
<string-array name="wifi_privacy_entries">
<item msgid="6545683814310036454">"Χρήση τυχαίου MAC (προεπιλογή)"</item>
diff --git a/tests/CarDeveloperOptions/res/values-el/strings.xml b/tests/CarDeveloperOptions/res/values-el/strings.xml
index 94f7c3b..cd2c744 100644
--- a/tests/CarDeveloperOptions/res/values-el/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-el/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Κάντε το κείμενο στην οθόνη μικρότερο ή μεγαλύτερο."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Να γίνουν μικρότερα"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Να γίνουν μεγαλύτερα"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Δείγμα κειμένου"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Ο Θαυμάσιος Μάγος του Οζ"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Κεφάλαιο 11: Η Θαυμάσια Πόλη Έμεραλντ του Οζ"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Πληροφορίες προφίλ"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Λογαριασμοί"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Τοποθεσία"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Χρήση τοποθεσίας"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Χρήση τοποθεσίας"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Απενεργοποίηση"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Ενεργό - <xliff:g id="COUNT_1">%1$d</xliff:g> εφαρμογές μπορούν να αποκτήσουν πρόσβαση στην τοποθεσία</item>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Ενεργοποίηση Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Χρήση Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Χρήση Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Ρυθμίσεις Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Ορισμός & διαχείριση ασύρματων σημείων πρόσβασης"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Δίκτυο κινητής τηλεφωνίας"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Όταν το Wi‑Fi δεν είναι διαθέσιμο, χρήση δικτύου κινητής τηλεφωνίας."</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Εάν το δίκτυο κινητής τηλεφωνίας δεν είναι διαθέσιμο, χρήση Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Κλήση μέσω Wi‑Fi. Εάν χαθεί η σύνδεση Wi‑Fi, η κλήση τερματίζεται."</string>
@@ -1335,7 +1337,7 @@
<string name="status_number_sim_slot" product="tablet" msgid="4518232285651165459">"MDN (υποδοχή sim %1$d)"</string>
<string name="status_number_sim_slot" product="default" msgid="3660851494421332328">"Αριθμ. τηλ. (υποδοχή sim %1$d)"</string>
<string name="status_number_sim_status" product="tablet" msgid="8069693515860290952">"MDN στη SIM"</string>
- <string name="status_number_sim_status" product="default" msgid="6602562692270457610">"Αριθμός τηλεφώνουν στη SIM"</string>
+ <string name="status_number_sim_status" product="default" msgid="6602562692270457610">"Αριθμός τηλεφώνου στη SIM"</string>
<string name="status_min_number" msgid="8346889546673707777">"ΛΕΠΤΟ"</string>
<string name="status_msid_number" msgid="7808175928664357661">"MSID"</string>
<string name="status_prl_version" msgid="5634561205739199042">"Έκδοση PRL"</string>
@@ -1415,7 +1417,7 @@
<string name="storage_menu_forget" msgid="4345021250834642640">"Διαγραφή"</string>
<string name="storage_menu_set_up" msgid="2849170579745958513">"Ρύθμιση"</string>
<string name="storage_menu_explore" msgid="3733439525636202662">"Εξερεύνηση"</string>
- <string name="storage_menu_free" msgid="6586253660759145508">"Ελευθερώστε χώρο"</string>
+ <string name="storage_menu_free" msgid="6586253660759145508">"Απελευθερώστε χώρο"</string>
<string name="storage_menu_manage" msgid="461380717863926516">"Διαχείριση αποθηκευτικού χώρου"</string>
<string name="storage_title_usb" msgid="2015671467177303099">"Σύνδεση υπολογιστή μέσω USB"</string>
<string name="usb_connection_category" msgid="2888975803638116041">"Σύνδεση ως"</string>
@@ -1608,9 +1610,9 @@
<string name="master_clear_progress_text" msgid="5418958116008976218">"Περιμένετε…"</string>
<string name="call_settings_title" msgid="5033906789261282752">"Ρυθμίσεις κλήσης"</string>
<string name="call_settings_summary" msgid="2119161087671450035">"Ορισμ.αυτόμ.τηλεφ., προώθ.κλήσης, αναμ.κλήσης, αναγν.κλήσ."</string>
- <string name="tether_settings_title_usb" msgid="4265582654602420357">"Πρόσδεση USB"</string>
+ <string name="tether_settings_title_usb" msgid="4265582654602420357">"Σύνδεση USB"</string>
<string name="tether_settings_title_wifi" msgid="2060965130234484613">"Φορητό σημείο πρόσβασης"</string>
- <string name="tether_settings_title_bluetooth" msgid="1999590158102569959">"Πρόσδεση Bluetooth"</string>
+ <string name="tether_settings_title_bluetooth" msgid="1999590158102569959">"Σύνδεση με Bluetooth"</string>
<string name="tether_settings_title_usb_bluetooth" msgid="1159128764162788159">"Πρόσδεση"</string>
<string name="tether_settings_title_all" msgid="6935843543433954181">"Σημ. πρόσβ. Wi-Fi/σύνδεση"</string>
<string name="tether_settings_summary_hotspot_on_tether_on" msgid="1289593649526514499">"Το σημείο πρόσβασης είναι ενεργό, σε σύνδεση"</string>
@@ -1618,10 +1620,10 @@
<string name="tether_settings_summary_hotspot_off_tether_on" msgid="1349909238672649877">"Σύνδεση"</string>
<string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"Δεν είναι δυνατή η σύνδεση σε φορητό σημείο πρόσβασης Wi-Fi, ενώ είναι ενεργοποιημένη η Εξοικονόμηση δεδομένων"</string>
<string name="usb_title" msgid="7480927657535578688">"USB"</string>
- <string name="usb_tethering_button_text" msgid="6242228383142012332">"Πρόσδεση USB"</string>
- <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Μοιραστείτε τη σύνδεση του τηλεφώνου στο διαδίκτυο μέσω USB"</string>
+ <string name="usb_tethering_button_text" msgid="6242228383142012332">"Σύνδεση USB"</string>
+ <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Κοινή χρήση της σύνδεσης του τηλεφώνου στο διαδίκτυο μέσω USB"</string>
<string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"Μοιραστείτε τη σύνδεση του tablet στο διαδίκτυο μέσω USB"</string>
- <string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"Πρόσδεση Bluetooth"</string>
+ <string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"Σύνδεση με Bluetooth"</string>
<string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"Κοινή χρήση της σύνδεσης του tablet στο διαδίκτυο μέσω Bluetooth"</string>
<string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Κοινή χρήση της σύνδεσης του τηλεφώνου στο διαδίκτυο μέσω Bluetooth"</string>
<string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"Κοινή χρήση σύνδεσης της συσκευής <xliff:g id="DEVICE_NAME">%1$d</xliff:g> στο διαδίκτυο μέσω Bluetooth"</string>
@@ -2083,7 +2085,7 @@
<string name="accessibility_control_timeout_preference_title" msgid="2771808346038759474">"Ώρα για την εκτέλεση ενεργειών"</string>
<string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"Επιλέξτε το χρονικό διάστημα για το οποίο θέλετε να εμφανίζονται τα μηνύματα που θα πρέπει να διαβάζετε, αλλά τα οποία είναι ορατά μόνο προσωρινά.\n\nΑυτή η ρύθμιση δεν υποστηρίζεται από όλες τις εφαρμογές."</string>
<string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"Επιλέξτε το χρονικό διάστημα για το οποίο θέλετε να εμφανίζονται τα μηνύματα που σας ζητούν να προβείτε σε κάποια ενέργεια, αλλά τα οποία είναι ορατά μόνο προσωρινά.\n\nΑυτή η ρύθμιση δεν υποστηρίζεται από όλες τις εφαρμογές."</string>
- <string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"Καθυστέρηση παρατετ. αγγίγματος"</string>
+ <string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"Διάρκεια παρατεταμένου αγγίγματος"</string>
<string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"Αντιστροφή χρωμάτων"</string>
<string name="accessibility_display_inversion_preference_subtitle" msgid="69291255322175323">"Ενδέχεται να επηρεάσει την απόδοση"</string>
<string name="accessibility_autoclick_preference_title" msgid="9164599088410340405">"Χρόνος παραμονής"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Δόνηση ειδοποίησης"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Δόνηση κλήσης"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Δόνηση αφής"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Χρήση υπηρεσίας"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Χρήση διόρθωσης χρωμάτων"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Χρήση υποτίτλων"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Χρήση υπηρεσίας"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Χρήση διόρθωσης χρωμάτων"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Χρήση υποτίτλων"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Συνέχεια"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Ακουστικά βοηθήματα"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Δεν έχουν συνδεθεί ακουστικά βοηθήματα"</string>
@@ -2449,7 +2451,7 @@
<string name="battery_saver_auto_no_schedule" msgid="739814529432092706">"Δεν υπάρχει πρόγραμμα"</string>
<string name="battery_saver_auto_routine" msgid="886514412067906980">"Με βάση τη ρουτίνα σας"</string>
<string name="battery_saver_auto_percentage" msgid="5791982309331921556">"Βάσει ποσοστού"</string>
- <string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"Η εξοικονόμηση μπαταρίας ενεργοποιείται όταν υπάρχει σημαντική πιθανότητα εξάντλησης της μπαταρίας σας πριν την επόμενη τυπική φόρτιση"</string>
+ <string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"Η εξοικονόμηση μπαταρίας ενεργοποιείται όταν υπάρχει σημαντική πιθανότητα εξάντλησης της μπαταρίας σας πριν την επόμενη κανονική φόρτιση"</string>
<string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"Θα ενεργοποιηθεί στο <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Ορίστε ένα πρόγραμμα"</string>
<string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"Απενεργοποίηση κατά την πλήρη φόρτιση"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Ενεργοποίηση"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Χρήση Εξοικονόμησης μπαταρίας"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Χρήση Εξοικονόμησης μπαταρίας"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Αυτόματη ενεργοποίηση"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Ποτέ"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"στο <xliff:g id="PERCENT">%1$s</xliff:g> της μπαταρίας"</string>
@@ -2732,7 +2734,7 @@
<string name="data_usage_metered_wifi" msgid="2955256408132426720">"Δίκτυα Wi‑Fi με βάση τη χρήση"</string>
<string name="data_usage_metered_wifi_disabled" msgid="5771083253782103415">"Για επιλογή δικτύων με βάση τη χρήση, ενεργοποιήστε το Wi-Fi."</string>
<string name="data_usage_metered_auto" msgid="7924116401382629319">"Αυτόματα"</string>
- <string name="data_usage_metered_yes" msgid="7333744880035386073">"Με περιορισμούς"</string>
+ <string name="data_usage_metered_yes" msgid="7333744880035386073">"Με ογκοχρέωση"</string>
<string name="data_usage_metered_no" msgid="1961524615778610008">"Χωρίς περιορισμούς"</string>
<string name="data_usage_disclaimer" msgid="4683321532922590425">"Ο υπολογισμός δεδ.της εταιρείας κιν.τηλ. μπορεί να διαφέρει από τη συσκευή σας."</string>
<string name="cryptkeeper_emergency_call" msgid="4625420047524693116">"Κλήση έκτακτης ανάγκης"</string>
@@ -2868,7 +2870,7 @@
<string name="user_add_user_item_title" msgid="6835385073795492410">"Χρήστης"</string>
<string name="user_add_profile_item_title" msgid="4932743891449790664">"Προφίλ περιορ. πρόσβασης"</string>
<string name="user_add_user_title" msgid="2320897397066676472">"Προσθήκη νέου χρήστη;"</string>
- <string name="user_add_user_message_long" msgid="686637203224195465">"Μπορείτε να μοιραστείτε αυτήν τη συσκευή με άλλα άτομα, δημιουργώντας επιπλέον χρήστες. Κάθε χρήστης θα έχει το δικό του χώρο, τον οποίο μπορεί να προσαρμόσει με τις δικές του εφαρμογές, ταπετσαρία κ.λπ. Οι χρήστες μπορούν επίσης να προσαρμόσουν ρυθμίσεις της συσκευής, όπως το Wi‑Fi, που επηρεάζουν τους πάντες.\n\nΚατά την προσθήκη ενός νέου χρήστη, αυτός θα πρέπει να ρυθμίσει τον χώρο του.\n\nΟποιοσδήποτε χρήστης μπορεί να ενημερώσει τις εφαρμογές για όλους τους άλλους χρήστες. Οι ρυθμίσεις και οι υπηρεσίες προσβασιμότητας ενδέχεται να μην μεταφερθούν στον νέο χρήστη"</string>
+ <string name="user_add_user_message_long" msgid="686637203224195465">"Μπορείτε να μοιραστείτε αυτήν τη συσκευή με άλλα άτομα, δημιουργώντας επιπλέον χρήστες. Κάθε χρήστης θα έχει το δικό του χώρο, τον οποίο μπορεί να προσαρμόσει με τις δικές του εφαρμογές, ταπετσαρία κ.λπ. Οι χρήστες μπορούν επίσης να προσαρμόσουν ρυθμίσεις της συσκευής, όπως το Wi‑Fi, που επηρεάζουν τους πάντες.\n\nΚατά την προσθήκη ενός νέου χρήστη, αυτός θα πρέπει να ρυθμίσει τον χώρο του.\n\nΟποιοσδήποτε χρήστης μπορεί να ενημερώσει τις εφαρμογές για όλους τους άλλους χρήστες. Οι ρυθμίσεις και οι υπηρεσίες προσβασιμότητας ενδέχεται να μην μεταφερθούν στον νέο χρήστη."</string>
<string name="user_add_user_message_short" msgid="1802594476285458254">"Κατά την προσθήκη ενός νέου χρήστη, αυτός θα πρέπει να ρυθμίσει το χώρο του.\n\nΟποιοσδήποτε χρήστης μπορεί να ενημερώσει τις εφαρμογές για όλους τους άλλους χρήστες."</string>
<string name="user_setup_dialog_title" msgid="6748950002206392396">"Να γίνει ρύθμιση χρήστη τώρα;"</string>
<string name="user_setup_dialog_message" msgid="2988559933258353919">"Βεβαιωθείτε ότι ο χρήστης μπορεί να πάρει τη συσκευή και ρυθμίστε το χώρο του"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Αν η συσκευή είναι κλειδωμένη, να αποτρέπεται η πληκτρολόγηση απαντήσεων ή άλλου κειμένου στις ειδοποιήσεις"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Προεπιλ. ορθογραφικός έλεγχος"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Επιλογή ορθογραφικού ελέγχου"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Χρήση ορθογραφικού ελέγχου"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Χρήση ορθογραφικού ελέγχου"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Δεν έχει επιλεγεί"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(κανένας)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,10 +4103,10 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Η Διαχείριση αποθηκευτικού χώρου βοηθά στην απελευθέρωση αποθηκευτικού χώρου καταργώντας από τη συσκευή σας φωτογραφίες και βίντεο για τα οποία έχουν δημιουργηθεί αντίγραφα ασφαλείας."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Κατάργηση φωτογραφιών και βίντεο"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Διαχείριση αποθηκευτικού χώρου"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Χρήση Διαχείρισης αποθηκευτικού χώρου"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Χρήση Διαχειριστή αποθηκευτικού χώρου"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Αυτόματο"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Εγχειρίδιο χρήσης"</string>
- <string name="deletion_helper_preference_title" msgid="797270307034242206">"Ελευθερώστε χώρο τώρα"</string>
+ <string name="deletion_helper_preference_title" msgid="797270307034242206">"Απελευθερώστε χώρο τώρα"</string>
<string name="gesture_preference_title" msgid="583646591518373785">"Κινήσεις"</string>
<string name="gesture_preference_summary" product="default" msgid="2990736567599191163">"Γρήγορες κινήσεις για τον έλεγχο του τηλεφώνου σας"</string>
<string name="gesture_preference_summary" product="tablet" msgid="8303793594714075580">"Γρήγορες κινήσεις για τον έλεγχο του tablet"</string>
@@ -4132,7 +4134,7 @@
<string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"Πατήστε για έλεγχο του τηλεφώνου"</string>
<string name="ambient_display_tap_screen_title" product="tablet" msgid="6434521782016864148">"Πατήστε για έλεγχο του tablet"</string>
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"Πατήστε για έλεγχο της συσκευής"</string>
- <string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"Πατήστε την οθόνη για να ελέγξετε την ώρα, τις ειδοποιήσεις και άλλες πληροφορίες."</string>
+ <string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"Πατήστε την οθόνη για να δείτε την ώρα, τις ειδοποιήσεις και άλλες πληροφορίες."</string>
<string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"Σύρετε στον αισθητήρα δακτυλικών αποτυπωμάτων για ειδοποιήσεις"</string>
<string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"Ολίσθηση δακτυλ. αποτυπ."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"Για να ελέγξετε τις ειδοποιήσεις σας, σύρετε προς τα κάτω στον αισθητήρα δακτυλικών αποτυπωμάτων στο πίσω μέρος του τηλεφώνου."</string>
diff --git a/tests/CarDeveloperOptions/res/values-en-rAU/arrays.xml b/tests/CarDeveloperOptions/res/values-en-rAU/arrays.xml
index f718198..b001bdd 100644
--- a/tests/CarDeveloperOptions/res/values-en-rAU/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-en-rAU/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"run in background"</item>
<item msgid="6423861043647911030">"accessibility volume"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Location"</item>
+ <item msgid="6656077694190491067">"Location"</item>
+ <item msgid="8790228218278477369">"Location"</item>
+ <item msgid="7836406246005211990">"Vibrate"</item>
+ <item msgid="3951439024549922598">"Read contacts"</item>
+ <item msgid="8802152411647068">"Modify contacts"</item>
+ <item msgid="229544934599698735">"Read call log"</item>
+ <item msgid="7396102294405899613">"Modify call log"</item>
+ <item msgid="3597797992398484655">"Read calendar"</item>
+ <item msgid="2705975774250907343">"Modify calendar"</item>
+ <item msgid="4668747371441932697">"Location"</item>
+ <item msgid="1487578921720243646">"Post notification"</item>
+ <item msgid="4636080349724146638">"Location"</item>
+ <item msgid="673510900286463926">"Call phone"</item>
+ <item msgid="542083422784609790">"Read SMS/MMS"</item>
+ <item msgid="1033780373029588436">"Write SMS/MMS"</item>
+ <item msgid="5647111115517787488">"Receive SMS/MMS"</item>
+ <item msgid="8591105601108455893">"Receive SMS/MMS"</item>
+ <item msgid="7730995008517841903">"Receive SMS/MMS"</item>
+ <item msgid="2613033109026626086">"Receive SMS/MMS"</item>
+ <item msgid="3037159047591081136">"Send SMS/MMS"</item>
+ <item msgid="4726682243833913568">"Read SMS/MMS"</item>
+ <item msgid="6555678522277865572">"Write SMS/MMS"</item>
+ <item msgid="6981734935578130884">"Modify settings"</item>
+ <item msgid="8705854389991425629">"Draw on top"</item>
+ <item msgid="5861356020344153651">"Access notifications"</item>
+ <item msgid="78432174621628659">"Camera"</item>
+ <item msgid="3986116419882154794">"Record audio"</item>
+ <item msgid="4516840825756409490">"Play audio"</item>
+ <item msgid="6811712502798183957">"Read clipboard"</item>
+ <item msgid="2780369012602289114">"Modify clipboard"</item>
+ <item msgid="2331359440170850868">"Media buttons"</item>
+ <item msgid="6133599737122751231">"Audio focus"</item>
+ <item msgid="6844485713404805301">"Master volume"</item>
+ <item msgid="1600379420669104929">"Voice volume"</item>
+ <item msgid="6296768210470214866">"Ring volume"</item>
+ <item msgid="510690696071629241">"Media volume"</item>
+ <item msgid="406861638631430109">"Alarm volume"</item>
+ <item msgid="4715864795872233884">"Notification volume"</item>
+ <item msgid="2311478519251301183">"Bluetooth volume"</item>
+ <item msgid="5133991377896747027">"Keep awake"</item>
+ <item msgid="2464189519136248621">"Location"</item>
+ <item msgid="2062677934050803037">"Location"</item>
+ <item msgid="1735171933192715957">"Get usage stats"</item>
+ <item msgid="1014093788778383554">"Mute/unmute microphone"</item>
+ <item msgid="4199297950608622850">"Show toast"</item>
+ <item msgid="2527962435313398821">"Project media"</item>
+ <item msgid="5117506254221861929">"Activate VPN"</item>
+ <item msgid="8291198322681891160">"Write wallpaper"</item>
+ <item msgid="7106921284621230961">"Assist structure"</item>
+ <item msgid="4496533640894624799">"Assist screenshot"</item>
+ <item msgid="2598847264853993611">"Read phone state"</item>
+ <item msgid="9215610846802973353">"Add voicemail"</item>
+ <item msgid="9186411956086478261">"Use sip"</item>
+ <item msgid="6884763100104539558">"Process outgoing call"</item>
+ <item msgid="125513972170580692">"Fingerprint"</item>
+ <item msgid="2556071024281275619">"Body sensors"</item>
+ <item msgid="617168514928339387">"Read mobile broadcasts"</item>
+ <item msgid="7134693570516523585">"Mock location"</item>
+ <item msgid="7224489175375229399">"Read storage"</item>
+ <item msgid="8472735063903258202">"Write storage"</item>
+ <item msgid="4069276819909595110">"Turn on screen"</item>
+ <item msgid="1228338896751121025">"Get accounts"</item>
+ <item msgid="3181581793459233672">"Run in background"</item>
+ <item msgid="2340936043025374076">"Accessibility volume"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Short"</item>
<item msgid="4816511817309094890">"Medium"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Never allow"</item>
<item msgid="8184570120217958741">"Always allow"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normal"</item>
+ <item msgid="5101233285497327432">"Moderate"</item>
+ <item msgid="1555861583162930714">"Low"</item>
+ <item msgid="1719683776264798117">"Critical"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normal"</item>
+ <item msgid="6107138933849816768">"Moderate"</item>
+ <item msgid="182695359839047859">"Low"</item>
+ <item msgid="8577246509202964244">"Critical"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Persistent"</item>
<item msgid="167418068739176448">"Top activity"</item>
diff --git a/tests/CarDeveloperOptions/res/values-en-rAU/strings.xml b/tests/CarDeveloperOptions/res/values-en-rAU/strings.xml
index 26efa62..09cc8f9 100644
--- a/tests/CarDeveloperOptions/res/values-en-rAU/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-en-rAU/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Make the text on screen smaller or larger."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Make smaller"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Make larger"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Sample text"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"The Wonderful Wizard of Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Chapter 11: The Wonderful Emerald City of Oz"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Profile info"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Accounts"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Location"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Use location"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Use location"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Off"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">On – <xliff:g id="COUNT_1">%1$d</xliff:g> apps can access location</item>
@@ -461,7 +460,7 @@
<string name="skip_lock_screen_dialog_button_label" msgid="6706047245716780006">"Skip"</string>
<string name="cancel_lock_screen_dialog_button_label" msgid="2534925227627658819">"Cancel"</string>
<string name="security_settings_fingerprint_enroll_find_sensor_title" msgid="8909829699273726469">"Touch the sensor"</string>
- <string name="security_settings_fingerprint_enroll_find_sensor_message" msgid="581120963079780740">"It’s on the back of your phone. Use your index finger."</string>
+ <string name="security_settings_fingerprint_enroll_find_sensor_message" msgid="581120963079780740">"It\'s on the back of your phone. Use your index finger."</string>
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="7835824123269738540">"Illustration with device and fingerprint sensor location"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="3519748398694308901">"Name"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="3428927518029038956">"OK"</string>
@@ -502,7 +501,7 @@
<string name="fingerprint_last_delete_title" msgid="3104596858161269635">"Remove all fingerprints?"</string>
<string name="fingerprint_delete_title" msgid="3120894112324235536">"Remove \'<xliff:g id="FINGERPRINT_ID">%1$s</xliff:g>\'"</string>
<string name="fingerprint_delete_message" msgid="5895802741486967970">"Do you want to delete this fingerprint?"</string>
- <string name="fingerprint_last_delete_message" msgid="3346252479778971442">"You won\'t be able to use your fingerprints to unlock your phone, authorise purchases or sign in to apps"</string>
+ <string name="fingerprint_last_delete_message" msgid="3346252479778971442">"You won\'t be able to use your fingerprints to unlock your phone, authorise purchases, or sign in to apps"</string>
<string name="fingerprint_last_delete_message_profile_challenge" msgid="5385095150532247025">"You won\'t be able to use your fingerprints to unlock your work profile, authorise purchases or sign in to work apps"</string>
<string name="fingerprint_last_delete_confirm" msgid="7984595457589664004">"Yes, remove"</string>
<string name="crypt_keeper_settings_title" msgid="839783588093862748">"Encryption"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Turn on Wi‑Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Use Wi‑Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Use Wi‑Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi‑Fi settings"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Set up & manage wireless access points"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Mobile"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"If Wi‑Fi is unavailable, use mobile network"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"If mobile network is unavailable, use Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Call over Wi‑Fi. If Wi‑Fi is lost, call will end."</string>
@@ -1568,23 +1570,23 @@
<string name="restore_default_apn_completed" msgid="5671734152740058937">"Reset default APN settings completed"</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"Reset options"</string>
<string name="reset_dashboard_summary" msgid="8778383341461126642">"Network, apps or device can be reset"</string>
- <string name="reset_network_title" msgid="8944059136930806211">"Reset Wi-Fi, mobile & Bluetooth"</string>
+ <string name="reset_network_title" msgid="8944059136930806211">"Reset wi-fi, mobile and Bluetooth"</string>
<string name="reset_network_desc" msgid="4982633363916261109">"This will reset all network settings, including:\n\n"<li>"Wi‑Fi"</li>\n<li>"Mobile data"</li>\n<li>"Bluetooth"</li></string>
<string name="reset_esim_title" msgid="7630781767040831893">"Erase downloaded SIMs"</string>
- <string name="reset_esim_desc" msgid="433226911566802">"To download replacement SIMs, contact your operator. This won’t cancel any mobile service plans."</string>
+ <string name="reset_esim_desc" msgid="433226911566802">"To download replacement SIMs, contact your carrier. This won\'t cancel any mobile service plans."</string>
<string name="reset_network_button_text" msgid="4293271046867912819">"Reset settings"</string>
- <string name="reset_network_final_desc" msgid="2463817067048751373">"Reset all network settings? You can’t undo this action."</string>
- <string name="reset_network_final_desc_esim" msgid="4676436976372555750">"Reset all network settings and delete downloaded SIMs? You can’t undo this action."</string>
+ <string name="reset_network_final_desc" msgid="2463817067048751373">"Reset all network settings? You can\'t undo this action."</string>
+ <string name="reset_network_final_desc_esim" msgid="4676436976372555750">"Reset all network settings and erase downloaded SIMs? You can\'t undo this action."</string>
<string name="reset_network_final_button_text" msgid="345255333127794393">"Reset settings"</string>
<string name="reset_network_confirm_title" msgid="2432145031070536008">"Reset?"</string>
<string name="network_reset_not_available" msgid="6146655531868016281">"Network reset is not available for this user"</string>
<string name="reset_network_complete_toast" msgid="128225929536005495">"Network settings have been reset"</string>
<string name="reset_esim_error_title" msgid="4728931209471875632">"Can’t delete SIMs"</string>
<string name="reset_esim_error_msg" msgid="4716366079119742235">"Downloaded SIMs can’t be deleted due to an error.\n\nRestart your device and try again."</string>
- <string name="master_clear_title" msgid="1560712943955904673">"Erase all data (factory reset)"</string>
- <string name="master_clear_short_title" msgid="919098101581335101">"Erase all data (factory reset)"</string>
+ <string name="master_clear_title" msgid="1560712943955904673">"Delete all data (factory reset)"</string>
+ <string name="master_clear_short_title" msgid="919098101581335101">"Delete all data (factory reset)"</string>
<string name="master_clear_desc" product="tablet" msgid="3432373610755760899">"This will erase all data from your tablet’s "<b>"internal storage"</b>", including:\n\n"<li>"Your Google Account"</li>\n<li>"System and app data and settings"</li>\n<li>"Downloaded apps"</li></string>
- <string name="master_clear_desc" product="default" msgid="8765543541962866697">"This will erase all data from your phone’s "<b>"internal storage"</b>", including:\n\n"<li>"Your Google Account"</li>\n<li>"System and app data and settings"</li>\n<li>"Downloaded apps"</li></string>
+ <string name="master_clear_desc" product="default" msgid="8765543541962866697">"This will erase all data from your phone\'s "<b>"internal storage"</b>", including:\n\n"<li>"Your Google Account"</li>\n<li>"System and app data and settings"</li>\n<li>"Downloaded apps"</li></string>
<string name="master_clear_accounts" product="default" msgid="3432884235445405376">\n\n"You are currently signed in to the following accounts:\n"</string>
<string name="master_clear_other_users_present" product="default" msgid="5993259656117566767">\n\n"There are other users present on this device.\n"</string>
<string name="master_clear_desc_also_erases_external" msgid="3947303501615091903"><li>"Music"</li>\n<li>"Photos"</li>\n<li>"Other user data"</li></string>
@@ -1598,8 +1600,8 @@
<string name="erase_external_storage_description" product="default" msgid="5029355708082861798">"Erase all the data on the SD card, such as music or photos"</string>
<string name="master_clear_button_text" product="tablet" msgid="8000547818499182920">"Delete all data"</string>
<string name="master_clear_button_text" product="default" msgid="8000547818499182920">"Delete all data"</string>
- <string name="master_clear_final_desc" msgid="5189365498015339294">"All of your personal information and downloaded apps will be deleted. You can’t undo this action."</string>
- <string name="master_clear_final_desc_esim" msgid="3058919823436953662">"All of your personal information, including downloaded apps & SIMs, will be deleted. You can’t undo this action."</string>
+ <string name="master_clear_final_desc" msgid="5189365498015339294">"All of your personal information and downloaded apps will be deleted. You can\'t undo this action."</string>
+ <string name="master_clear_final_desc_esim" msgid="3058919823436953662">"All of your personal information, including downloaded apps & SIMs, will be deleted. You can\'t undo this action."</string>
<string name="master_clear_final_button_text" msgid="866772743886027768">"Erase everything"</string>
<string name="master_clear_failed" msgid="7588397453984229892">"No reset was performed because the System Clear service isn\'t available."</string>
<string name="master_clear_confirm_title" msgid="698328669893512402">"Erase all data?"</string>
@@ -2062,7 +2064,7 @@
<string name="accessibility_global_gesture_preference_title" msgid="3842279082831426816">"Volume key shortcut"</string>
<string name="accessibility_shortcut_service_title" msgid="3516052294376744060">"Shortcut service"</string>
<string name="accessibility_shortcut_service_on_lock_screen_title" msgid="1279441617927949980">"Allow from lock screen"</string>
- <string name="accessibility_shortcut_description" msgid="1427049334225166395">"When the shortcut is on, you can press both volume keys for 3 seconds to start an accessibility feature."</string>
+ <string name="accessibility_shortcut_description" msgid="1427049334225166395">"When the shortcut is on, you can press both volume keys for three seconds to start an accessibility feature."</string>
<string name="accessibility_toggle_high_text_contrast_preference_title" msgid="5652244684961877255">"High-contrast text"</string>
<string name="accessibility_toggle_screen_magnification_auto_update_preference_title" msgid="2466317284195934003">"Auto update screen magnification"</string>
<string name="accessibility_toggle_screen_magnification_auto_update_preference_summary" msgid="6625473745911276917">"Update screen magnification on app transitions"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Notification vibration"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Ring vibration"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Touch vibration"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Use service"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Use colour correction"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Use captions"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Use service"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Use colour correction"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Use captions"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Continue"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Hearing aids"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"No hearing aids connected"</string>
@@ -2200,7 +2202,7 @@
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> print jobs</item>
<item quantity="one">1 print job</item>
</plurals>
- <string name="print_settings_title" msgid="2886445296786932763">"Printing services"</string>
+ <string name="print_settings_title" msgid="2886445296786932763">"Print services"</string>
<string name="print_no_services_installed" msgid="3387777739528003794">"No services installed"</string>
<string name="print_no_printers_found" msgid="5090925427392294881">"No printers found"</string>
<string name="print_menu_item_settings" msgid="2654804159012579508">"Settings"</string>
@@ -2315,12 +2317,12 @@
<string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"This app will be able to use battery in the background. Your battery may run out sooner than expected."</string>
<string name="battery_tip_unrestrict_app_dialog_ok" msgid="9154938931448151479">"Remove"</string>
<string name="battery_tip_unrestrict_app_dialog_cancel" msgid="7331148618292397166">"Cancel"</string>
- <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"Your apps are using a normal amount of battery. If apps use too much battery, your phone will suggest actions that you can take.\n\nYou can always turn on Battery Saver if you’re running low on battery."</string>
+ <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"Your apps are using a normal amount of battery. If apps use too much battery, your phone will suggest actions you can take.\n\nYou can always turn on Battery Saver if you\'re running low on battery."</string>
<string name="battery_tip_dialog_summary_message" product="tablet" msgid="1721081030632329647">"Your apps are using a normal amount of battery. If apps use too much battery, your tablet will suggest actions that you can take.\n\nYou can always turn on Battery Saver if you’re running low on battery."</string>
<string name="battery_tip_dialog_summary_message" product="device" msgid="146872407040848465">"Your apps are using a normal amount of battery. If apps use too much battery, your device will suggest actions that you can take.\n\nYou can always turn on Battery Saver if you’re running low on battery."</string>
<string name="smart_battery_manager_title" msgid="5744035036663849515">"Battery Manager"</string>
<string name="smart_battery_title" msgid="4919670408532804351">"Manage apps automatically"</string>
- <string name="smart_battery_summary" msgid="640027046471198174">"Limit battery for apps that you don’t use often"</string>
+ <string name="smart_battery_summary" msgid="640027046471198174">"Limit battery for apps that you don\'t use often"</string>
<string name="smart_battery_footer" product="default" msgid="3971715848890205632">"When Battery Manager detects that apps are draining battery, you’ll have the option to restrict these apps. Restricted apps may not work properly and notifications may be delayed."</string>
<string name="smart_battery_footer" product="tablet" msgid="3971715848890205632">"When Battery Manager detects that apps are draining battery, you’ll have the option to restrict these apps. Restricted apps may not work properly and notifications may be delayed."</string>
<string name="smart_battery_footer" product="device" msgid="3971715848890205632">"When Battery Manager detects that apps are draining battery, you’ll have the option to restrict these apps. Restricted apps may not work properly and notifications may be delayed."</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Turn on"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Use Battery Saver"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Use Battery Saver"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Turn on automatically"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Never"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"at <xliff:g id="PERCENT">%1$s</xliff:g> battery"</string>
@@ -2713,7 +2715,7 @@
<string name="data_usage_limit_editor_title" msgid="1687908662154108293">"Set data usage limit"</string>
<string name="data_usage_limit_dialog_title" msgid="8804760847110131518">"Limiting data usage"</string>
<string name="data_usage_limit_dialog_mobile" product="tablet" msgid="2000713577999830647">"Your tablet will turn off mobile data once it reaches the limit you set.\n\nSince data usage is measured by your tablet, and your operator may account for usage differently, consider setting a conservative limit."</string>
- <string name="data_usage_limit_dialog_mobile" product="default" msgid="943546278705619205">"Your phone will turn off mobile data once it reaches the limit that you set.\n\nSince data usage is measured by your phone, and your operator may account for usage differently, consider setting a conservative limit."</string>
+ <string name="data_usage_limit_dialog_mobile" product="default" msgid="943546278705619205">"Your phone will turn off mobile data once it reaches the limit you set.\n\nSince data usage is measured by your phone, and your carrier may account for usage differently, consider setting a conservative limit."</string>
<string name="data_usage_restrict_background_title" msgid="3568746530413220844">"Restrict background data?"</string>
<string name="data_usage_restrict_background" msgid="995811034744808575">"If you restrict background mobile data, some apps and services won’t work unless you’re connected to Wi‑Fi."</string>
<string name="data_usage_restrict_background_multiuser" product="tablet" msgid="6032810839234864814">"If you restrict background mobile data, some apps and services won’t work unless you’re connected to Wi‑Fi.\n\nThis setting affects all users on this tablet."</string>
@@ -2933,7 +2935,7 @@
<string name="restriction_menu_reset" msgid="3642252461410370554">"Remove restrictions"</string>
<string name="restriction_menu_change_pin" msgid="592512748243421101">"Change PIN"</string>
<string name="app_notifications_switch_label" msgid="670683308275498821">"Show notifications"</string>
- <string name="help_label" msgid="1296484776243905646">"Help & feedback"</string>
+ <string name="help_label" msgid="1296484776243905646">"Help and feedback"</string>
<string name="support_summary" msgid="3278943815956130740">"Help articles, phone & chat, getting started"</string>
<string name="user_account_title" msgid="2108666882630552859">"Account for content"</string>
<string name="user_picture_title" msgid="6664602422948159123">"Photo ID"</string>
@@ -3940,7 +3942,7 @@
<string name="cell_data_template" msgid="5473177306229738078">"<xliff:g id="AMOUNT">^1</xliff:g> mobile data"</string>
<string name="wifi_data_template" msgid="3146090439147042068">"<xliff:g id="AMOUNT">^1</xliff:g> Wi-Fi data"</string>
<string name="ethernet_data_template" msgid="6414118030827090119">"<xliff:g id="AMOUNT">^1</xliff:g> ethernet data"</string>
- <string name="billing_cycle" msgid="5740717948341713190">"Data warning & limit"</string>
+ <string name="billing_cycle" msgid="5740717948341713190">"Data warning and limit"</string>
<string name="app_usage_cycle" msgid="213483325132959663">"App data usage cycle"</string>
<string name="cell_data_warning" msgid="8902740337286652689">"<xliff:g id="ID_1">^1</xliff:g> data warning"</string>
<string name="cell_data_limit" msgid="3175933829235314233">"<xliff:g id="ID_1">^1</xliff:g> data limit"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"If device is locked, prevent typing replies or other text in notifications"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Default spell checker"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Choose spell checker"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Use spell checker"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Use spellchecker"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Not selected"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(none)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4098,10 +4100,10 @@
<item quantity="one">1 second</item>
</plurals>
<string name="automatic_storage_manager_settings" msgid="2403621409625820182">"Manage storage"</string>
- <string name="automatic_storage_manager_text" msgid="4270379105066667493">"To help free up storage space, storage manager removes backed up photos and videos from your device."</string>
+ <string name="automatic_storage_manager_text" msgid="4270379105066667493">"To help free up storage space, storage manager removes backed-up photos and videos from your device."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Remove photos & videos"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Storage manager"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Use Storage Manager"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Use storage Manager"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatic"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manual"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Free up space now"</string>
@@ -4267,7 +4269,7 @@
<string name="storage_manager_indicator_on" msgid="5295306384982062320">"On"</string>
<string name="install_type_instant" msgid="6248487669862821874">"Instant app"</string>
<string name="automatic_storage_manager_deactivation_warning" msgid="7867793739491286374">"Turn off the storage manager?"</string>
- <string name="storage_movies_tv" msgid="7282484273991655296">"Movie & TV apps"</string>
+ <string name="storage_movies_tv" msgid="7282484273991655296">"Movie and TV apps"</string>
<string name="carrier_provisioning" msgid="3309125279191534469">"Operator Provisioning Info"</string>
<string name="trigger_carrier_provisioning" msgid="6284005970057901477">"Trigger Operator Provisioning"</string>
<string name="zen_suggestion_title" msgid="2134699720214231950">"Update Do Not Disturb"</string>
diff --git a/tests/CarDeveloperOptions/res/values-en-rCA/arrays.xml b/tests/CarDeveloperOptions/res/values-en-rCA/arrays.xml
index f718198..3202796 100644
--- a/tests/CarDeveloperOptions/res/values-en-rCA/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-en-rCA/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"run in background"</item>
<item msgid="6423861043647911030">"accessibility volume"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Location"</item>
+ <item msgid="6656077694190491067">"Location"</item>
+ <item msgid="8790228218278477369">"Location"</item>
+ <item msgid="7836406246005211990">"Vibrate"</item>
+ <item msgid="3951439024549922598">"Read contacts"</item>
+ <item msgid="8802152411647068">"Modify contacts"</item>
+ <item msgid="229544934599698735">"Read call log"</item>
+ <item msgid="7396102294405899613">"Modify call log"</item>
+ <item msgid="3597797992398484655">"Read calendar"</item>
+ <item msgid="2705975774250907343">"Modify calendar"</item>
+ <item msgid="4668747371441932697">"Location"</item>
+ <item msgid="1487578921720243646">"Post notification"</item>
+ <item msgid="4636080349724146638">"Location"</item>
+ <item msgid="673510900286463926">"Call phone"</item>
+ <item msgid="542083422784609790">"Read SMS/MMS"</item>
+ <item msgid="1033780373029588436">"Write SMS/MMS"</item>
+ <item msgid="5647111115517787488">"Receive SMS/MMS"</item>
+ <item msgid="8591105601108455893">"Receive SMS/MMS"</item>
+ <item msgid="7730995008517841903">"Receive SMS/MMS"</item>
+ <item msgid="2613033109026626086">"Receive SMS/MMS"</item>
+ <item msgid="3037159047591081136">"Send SMS/MMS"</item>
+ <item msgid="4726682243833913568">"Read SMS/MMS"</item>
+ <item msgid="6555678522277865572">"Write SMS/MMS"</item>
+ <item msgid="6981734935578130884">"Modify settings"</item>
+ <item msgid="8705854389991425629">"Draw on top"</item>
+ <item msgid="5861356020344153651">"Access notifications"</item>
+ <item msgid="78432174621628659">"Camera"</item>
+ <item msgid="3986116419882154794">"Record audio"</item>
+ <item msgid="4516840825756409490">"Play audio"</item>
+ <item msgid="6811712502798183957">"Read clipboard"</item>
+ <item msgid="2780369012602289114">"Modify clipboard"</item>
+ <item msgid="2331359440170850868">"Media buttons"</item>
+ <item msgid="6133599737122751231">"Audio focus"</item>
+ <item msgid="6844485713404805301">"Master volume"</item>
+ <item msgid="1600379420669104929">"Voice volume"</item>
+ <item msgid="6296768210470214866">"Ring volume"</item>
+ <item msgid="510690696071629241">"Media volume"</item>
+ <item msgid="406861638631430109">"Alarm volume"</item>
+ <item msgid="4715864795872233884">"Notification volume"</item>
+ <item msgid="2311478519251301183">"Bluetooth volume"</item>
+ <item msgid="5133991377896747027">"Keep awake"</item>
+ <item msgid="2464189519136248621">"Location"</item>
+ <item msgid="2062677934050803037">"Location"</item>
+ <item msgid="1735171933192715957">"Get usage stats"</item>
+ <item msgid="1014093788778383554">"Mute/unmute microphone"</item>
+ <item msgid="4199297950608622850">"Show toast"</item>
+ <item msgid="2527962435313398821">"Project media"</item>
+ <item msgid="5117506254221861929">"Activate VPN"</item>
+ <item msgid="8291198322681891160">"Write wallpaper"</item>
+ <item msgid="7106921284621230961">"Assist structure"</item>
+ <item msgid="4496533640894624799">"Assist screenshot"</item>
+ <item msgid="2598847264853993611">"Read phone state"</item>
+ <item msgid="9215610846802973353">"Add voicemail"</item>
+ <item msgid="9186411956086478261">"Use sip"</item>
+ <item msgid="6884763100104539558">"Process outgoing call"</item>
+ <item msgid="125513972170580692">"Fingerprint"</item>
+ <item msgid="2556071024281275619">"Body sensors"</item>
+ <item msgid="617168514928339387">"Read mobile broadcasts"</item>
+ <item msgid="7134693570516523585">"Mock location"</item>
+ <item msgid="7224489175375229399">"Read storage"</item>
+ <item msgid="8472735063903258202">"Write storage"</item>
+ <item msgid="4069276819909595110">"Turn on screen"</item>
+ <item msgid="1228338896751121025">"Get accounts"</item>
+ <item msgid="3181581793459233672">"Run in background"</item>
+ <item msgid="2340936043025374076">"Accessibility volume"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Short"</item>
<item msgid="4816511817309094890">"Medium"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Never allow"</item>
<item msgid="8184570120217958741">"Always allow"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normal"</item>
+ <item msgid="5101233285497327432">"Moderate"</item>
+ <item msgid="1555861583162930714">"Low"</item>
+ <item msgid="1719683776264798117">"Critical"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normal"</item>
+ <item msgid="6107138933849816768">"Moderate"</item>
+ <item msgid="182695359839047859">"Low"</item>
+ <item msgid="8577246509202964244">"Critical"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Persistent"</item>
<item msgid="167418068739176448">"Top activity"</item>
@@ -401,7 +477,7 @@
<item msgid="1008268820118852416">"Treat as unmetered"</item>
</string-array>
<string-array name="wifi_privacy_entries">
- <item msgid="6545683814310036454">"Use randomised MAC (default)"</item>
+ <item msgid="6545683814310036454">"Use randomized MAC (default)"</item>
<item msgid="214234417308375326">"Use device MAC"</item>
</string-array>
<string-array name="wifi_hidden_entries">
diff --git a/tests/CarDeveloperOptions/res/values-en-rCA/strings.xml b/tests/CarDeveloperOptions/res/values-en-rCA/strings.xml
index 90f6710..9a33902 100644
--- a/tests/CarDeveloperOptions/res/values-en-rCA/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-en-rCA/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Make the text on screen smaller or larger."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Make smaller"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Make larger"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Sample text"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"The Wonderful Wizard of Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Chapter 11: The Wonderful Emerald City of Oz"</string>
@@ -163,7 +162,7 @@
<string name="bluetooth_map_acceptance_dialog_text" msgid="736507842082640410">"%1$s wants to access your messages. Give access to %2$s?"</string>
<string name="bluetooth_sap_request" msgid="6318039677671263261">"SIM access request"</string>
<string name="bluetooth_sap_acceptance_dialog_text" msgid="1909352413109340355">"<xliff:g id="DEVICE_NAME_0">%1$s</xliff:g> wants to access your SIM card. Granting access to the SIM card will disable data connectivity on your device for the duration of the connection. Give access to <xliff:g id="DEVICE_NAME_1">%2$s?</xliff:g>"</string>
- <string name="bluetooth_device_name_summary" msgid="8661066392056595005">"Visible as \'<xliff:g id="DEVICE_NAME">^1</xliff:g>\' to other devices"</string>
+ <string name="bluetooth_device_name_summary" msgid="8661066392056595005">"Visible as \"<xliff:g id="DEVICE_NAME">^1</xliff:g>\" to other devices"</string>
<string name="bluetooth_off_footer" msgid="7658444560543730571">"Turn on Bluetooth to connect to other devices."</string>
<string name="bluetooth_paired_device_title" msgid="8361860197780425286">"Your devices"</string>
<string name="bluetooth_pairing_page_title" msgid="9053463656712597709">"Pair new device"</string>
@@ -303,7 +302,7 @@
<string name="settings_shortcut" msgid="4503714880251502167">"Settings shortcut"</string>
<string name="airplane_mode" msgid="4508870277398231073">"Airplane mode"</string>
<string name="wireless_networks_settings_title" msgid="4298430520189173949">"Wireless & networks"</string>
- <string name="radio_controls_summary" msgid="4596981962167684814">"Manage Wi‑Fi, Bluetooth, airplane mode, mobile networks, & VPNs"</string>
+ <string name="radio_controls_summary" msgid="4596981962167684814">"Manage Wi‑Fi, Bluetooth, Airplane mode, mobile networks and VPNs"</string>
<string name="cellular_data_title" msgid="7909624119432695022">"Mobile data"</string>
<string name="calls_title" msgid="875693497825736550">"Allow calls"</string>
<string name="sms_messages_title" msgid="934188835214592753">"SMS messages"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Profile info"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Accounts"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Location"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Use location"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Use location"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Off"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">On – <xliff:g id="COUNT_1">%1$d</xliff:g> apps can access location</item>
@@ -402,9 +401,9 @@
<string name="security_settings_face_enroll_introduction_cancel" msgid="4190924649721437238">"Cancel"</string>
<string name="security_settings_face_enroll_introduction_title" msgid="6073249653318265486">"Unlock with your face"</string>
<string name="security_settings_face_enroll_introduction_title_unlock_disabled" msgid="9223270521083202896">"Use your face to authenticate"</string>
- <string name="security_settings_face_enroll_introduction_message" msgid="484806903869220184">"Use your face to unlock your phone, authorise purchases or sign in to apps."</string>
+ <string name="security_settings_face_enroll_introduction_message" msgid="484806903869220184">"Use your face to unlock your phone, authorize purchases or sign in to apps."</string>
<string name="security_settings_face_enroll_introduction_message_unlock_disabled" msgid="2850101281254663082">"Use your face to unlock your phone or approve purchases.\n\nNote: You can’t use your face to unlock this device. For more information, contact your organisation’s admin."</string>
- <string name="security_settings_face_enroll_introduction_message_setup" msgid="4533297059466270074">"Use your face to unlock your phone, authorise purchases or sign in to apps"</string>
+ <string name="security_settings_face_enroll_introduction_message_setup" msgid="4533297059466270074">"Use your face to unlock your phone, authorize purchases or sign in to apps"</string>
<string name="security_settings_face_enroll_introduction_footer_message" msgid="7764021721107723266"></string>
<string name="security_settings_face_enroll_repeat_title" msgid="2507710348140837875">"Centre your face in the circle"</string>
<string name="security_settings_face_enroll_enrolling_skip" msgid="4346077260378772613">"Do it later"</string>
@@ -440,7 +439,7 @@
<string name="security_settings_fingerprint_preference_summary_none" msgid="3613424536269750172"></string>
<string name="security_settings_fingerprint_enroll_introduction_title" msgid="889558002683900544">"Unlock with fingerprint"</string>
<string name="security_settings_fingerprint_enroll_introduction_title_unlock_disabled" msgid="7915504118657864429">"Use your fingerprint"</string>
- <string name="security_settings_fingerprint_enroll_introduction_message" msgid="5586198131986682472">"Just touch the fingerprint sensor to unlock your phone, authorise purchases or sign in to apps. Be careful whose fingerprints you add. Even one added print can do any of these things.\n\nNote: Your fingerprint may be less secure than a strong pattern or PIN."</string>
+ <string name="security_settings_fingerprint_enroll_introduction_message" msgid="5586198131986682472">"Just touch the fingerprint sensor to unlock your phone, authorize purchases or sign in to apps. Be careful whose fingerprints you add. Even one added print can do any of these things.\n\nNote: Your fingerprint may be less secure than a strong pattern or PIN."</string>
<string name="security_settings_fingerprint_enroll_introduction_message_unlock_disabled" msgid="1640839304679275468">"Use your fingerprint to unlock your phone or approve purchases.\n\nNote: You can’t use your fingerprint to unlock this device. For more information, contact your organisation’s admin."</string>
<string name="security_settings_fingerprint_enroll_introduction_message_setup" msgid="6734490666593320711">"Use your fingerprint to unlock your phone or approve purchases.\n\nNote: Your fingerprint may be less secure than a strong pattern or PIN."</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel" msgid="9168637333731599827">"Cancel"</string>
@@ -461,7 +460,7 @@
<string name="skip_lock_screen_dialog_button_label" msgid="6706047245716780006">"Skip"</string>
<string name="cancel_lock_screen_dialog_button_label" msgid="2534925227627658819">"Cancel"</string>
<string name="security_settings_fingerprint_enroll_find_sensor_title" msgid="8909829699273726469">"Touch the sensor"</string>
- <string name="security_settings_fingerprint_enroll_find_sensor_message" msgid="581120963079780740">"It’s on the back of your phone. Use your index finger."</string>
+ <string name="security_settings_fingerprint_enroll_find_sensor_message" msgid="581120963079780740">"It\'s on the back of your phone. Use your index finger."</string>
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="7835824123269738540">"Illustration with device and fingerprint sensor location"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="3519748398694308901">"Name"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="3428927518029038956">"OK"</string>
@@ -493,8 +492,8 @@
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"Fingerprint enrolment didn\'t work. Try again or use a different finger."</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"Add another"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"Next"</string>
- <string name="security_settings_fingerprint_enroll_disclaimer" msgid="5831834311961551423">"In addition to unlocking your phone, you can also use your fingerprint to authorise purchases and app access. "<annotation id="url">"Learn more"</annotation></string>
- <string name="security_settings_fingerprint_enroll_disclaimer_lockscreen_disabled" msgid="7954742554236652690">" The screen lock option is disabled. To find out more, contact your organisation\'s admin. "<annotation id="admin_details">"More details"</annotation>\n\n"You can still use your fingerprint to authorise purchases and app access. "<annotation id="url">"Learn more"</annotation></string>
+ <string name="security_settings_fingerprint_enroll_disclaimer" msgid="5831834311961551423">"In addition to unlocking your phone, you can also use your fingerprint to authorize purchases and app access. "<annotation id="url">"Learn more"</annotation></string>
+ <string name="security_settings_fingerprint_enroll_disclaimer_lockscreen_disabled" msgid="7954742554236652690">" The screen lock option is disabled. To learn more, contact your organization\'s admin. "<annotation id="admin_details">"More details"</annotation>\n\n"You can still use your fingerprint to authorize purchases and app access. "<annotation id="url">"Learn more"</annotation></string>
<string name="security_settings_fingerprint_enroll_lift_touch_again" msgid="1670703069782212223">"Lift finger, then touch sensor again"</string>
<string name="fingerprint_add_max" msgid="2939393314646115661">"You can add up to <xliff:g id="COUNT">%d</xliff:g> fingerprints"</string>
<string name="fingerprint_intro_error_max" msgid="3247720976621039437">"You’ve added the maximum number of fingerprints"</string>
@@ -502,8 +501,8 @@
<string name="fingerprint_last_delete_title" msgid="3104596858161269635">"Remove all fingerprints?"</string>
<string name="fingerprint_delete_title" msgid="3120894112324235536">"Remove \'<xliff:g id="FINGERPRINT_ID">%1$s</xliff:g>\'"</string>
<string name="fingerprint_delete_message" msgid="5895802741486967970">"Do you want to delete this fingerprint?"</string>
- <string name="fingerprint_last_delete_message" msgid="3346252479778971442">"You won\'t be able to use your fingerprints to unlock your phone, authorise purchases or sign in to apps"</string>
- <string name="fingerprint_last_delete_message_profile_challenge" msgid="5385095150532247025">"You won\'t be able to use your fingerprints to unlock your work profile, authorise purchases or sign in to work apps"</string>
+ <string name="fingerprint_last_delete_message" msgid="3346252479778971442">"You won\'t be able to use your fingerprints to unlock your phone, authorize purchases or sign in to apps"</string>
+ <string name="fingerprint_last_delete_message_profile_challenge" msgid="5385095150532247025">"You won\'t be able to use your fingerprints to unlock your work profile, authorize purchases or sign in to work apps"</string>
<string name="fingerprint_last_delete_confirm" msgid="7984595457589664004">"Yes, remove"</string>
<string name="crypt_keeper_settings_title" msgid="839783588093862748">"Encryption"</string>
<string name="crypt_keeper_encrypt_title" product="tablet" msgid="2292129135369853167">"Encrypt tablet"</string>
@@ -599,35 +598,35 @@
<string name="unlock_disable_frp_warning_content_pattern" msgid="1843950215687159135">"Device protection features will not work without your pattern."</string>
<string name="unlock_disable_frp_warning_content_pattern_fingerprint" msgid="8846957650251741548">"Device protection features will not work without your pattern.<xliff:g id="EMPTY_LINE">
-</xliff:g>Your saved fingerprints will also be removed from this device and you won\'t be able to unlock your phone, authorise purchases or sign in to apps with them."</string>
+</xliff:g>Your saved fingerprints will also be removed from this device and you won\'t be able to unlock your phone, authorize purchases or sign in to apps with them."</string>
<string name="unlock_disable_frp_warning_content_pin" msgid="6760473271034592796">"Device protection features will not work without your PIN."</string>
<string name="unlock_disable_frp_warning_content_pin_fingerprint" msgid="4384632309103635233">"Device protection features will not work without your PIN.<xliff:g id="EMPTY_LINE">
-</xliff:g>Your saved fingerprints will also be removed from this device and you won\'t be able to unlock your phone, authorise purchases or sign in to apps with them."</string>
+</xliff:g>Your saved fingerprints will also be removed from this device and you won\'t be able to unlock your phone, authorize purchases or sign in to apps with them."</string>
<string name="unlock_disable_frp_warning_content_password" msgid="854665587186358170">"Device protection features will not work without your password."</string>
<string name="unlock_disable_frp_warning_content_password_fingerprint" msgid="218143910981979545">"Device protection features will not work without your password.<xliff:g id="EMPTY_LINE">
-</xliff:g>Your saved fingerprints will also be removed from this device and you won\'t be able to unlock your phone, authorise purchases or sign in to apps with them."</string>
+</xliff:g>Your saved fingerprints will also be removed from this device and you won\'t be able to unlock your phone, authorize purchases or sign in to apps with them."</string>
<string name="unlock_disable_frp_warning_content_unknown" msgid="3570135744390201244">"Device protection features will not work without your screen lock."</string>
<string name="unlock_disable_frp_warning_content_unknown_fingerprint" msgid="5775815077478538855">"Device protection features will not work without your screen lock.<xliff:g id="EMPTY_LINE">
-</xliff:g>Your saved fingerprints will also be removed from this device and you won\'t be able to unlock your phone, authorise purchases or sign in to apps with them."</string>
+</xliff:g>Your saved fingerprints will also be removed from this device and you won\'t be able to unlock your phone, authorize purchases or sign in to apps with them."</string>
<string name="unlock_disable_frp_warning_content_pattern_profile" msgid="2369992898062808499">"Profile protection features will not work without your pattern."</string>
<string name="unlock_disable_frp_warning_content_pattern_fingerprint_profile" msgid="8511105093090018735">"Profile protection features will not work without your pattern.<xliff:g id="EMPTY_LINE">
-</xliff:g>Your saved fingerprints will also be removed from this profile and you won\'t be able to unlock your profile, authorise purchases or sign in to apps with them."</string>
+</xliff:g>Your saved fingerprints will also be removed from this profile and you won\'t be able to unlock your profile, authorize purchases or sign in to apps with them."</string>
<string name="unlock_disable_frp_warning_content_pin_profile" msgid="7114165651000498040">"Profile protection features will not work without your PIN."</string>
<string name="unlock_disable_frp_warning_content_pin_fingerprint_profile" msgid="5118210431544156122">"Profile protection features will not work without your PIN.<xliff:g id="EMPTY_LINE">
-</xliff:g>Your saved fingerprints will also be removed from this profile and you won\'t be able to unlock your profile, authorise purchases or sign in to apps with them."</string>
+</xliff:g>Your saved fingerprints will also be removed from this profile and you won\'t be able to unlock your profile, authorize purchases or sign in to apps with them."</string>
<string name="unlock_disable_frp_warning_content_password_profile" msgid="3989497526180082037">"Profile protection features will not work without your password."</string>
<string name="unlock_disable_frp_warning_content_password_fingerprint_profile" msgid="8360485354164416198">"Profile protection features will not work without your password.<xliff:g id="EMPTY_LINE">
-</xliff:g>Your saved fingerprints will also be removed from this profile and you won\'t be able to unlock your profile, authorise purchases or sign in to apps with them."</string>
+</xliff:g>Your saved fingerprints will also be removed from this profile and you won\'t be able to unlock your profile, authorize purchases or sign in to apps with them."</string>
<string name="unlock_disable_frp_warning_content_unknown_profile" msgid="4066001421137974082">"Profile protection features will not work without your screen lock."</string>
<string name="unlock_disable_frp_warning_content_unknown_fingerprint_profile" msgid="1201259228331105948">"Profile protection features will not work without your screen lock.<xliff:g id="EMPTY_LINE">
-</xliff:g>Your saved fingerprints will also be removed from this profile and you won\'t be able to unlock your profile, authorise purchases or sign in to apps with them."</string>
+</xliff:g>Your saved fingerprints will also be removed from this profile and you won\'t be able to unlock your profile, authorize purchases or sign in to apps with them."</string>
<string name="unlock_disable_frp_warning_ok" msgid="2373890505202766456">"Yes, remove"</string>
<string name="unlock_change_lock_pattern_title" msgid="7622476883851319877">"Change unlock pattern"</string>
<string name="unlock_change_lock_pin_title" msgid="6671224158800812238">"Change unlock PIN"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Turn on Wi‑Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Use Wi‑Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Use Wi‑Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi‑Fi settings"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Set up & manage wireless access points"</string>
@@ -941,8 +940,8 @@
<string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"Centre the QR code below to connect to \'<xliff:g id="SSID">%1$s</xliff:g>\'"</string>
<string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"Join Wi‑Fi by scanning a QR code"</string>
<string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Share Wi‑Fi"</string>
- <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"Scan this QR code to connect to \'<xliff:g id="SSID">%1$s</xliff:g>\' and share the password"</string>
- <string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"Scan this QR code to connect to \'<xliff:g id="SSID">%1$s</xliff:g>\'"</string>
+ <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"Scan this QR code to connect to \"<xliff:g id="SSID">%1$s</xliff:g>\" and share the password"</string>
+ <string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"Scan this QR code to connect to \"<xliff:g id="SSID">%1$s</xliff:g>\""</string>
<string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"Couldn’t read QR code. Re-centre code and try again"</string>
<string name="wifi_dpp_failure_authentication_or_configuration" msgid="9142051662156233679">"Try again. If the issue continues, contact the device manufacturer"</string>
<string name="wifi_dpp_failure_not_compatible" msgid="4320027179973678283">"Something went wrong"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Mobile"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"If Wi‑Fi is unavailable, use mobile network"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"If mobile network is unavailable, use Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Call over Wi‑Fi. If Wi‑Fi is lost, call will end."</string>
@@ -1568,13 +1570,13 @@
<string name="restore_default_apn_completed" msgid="5671734152740058937">"Reset default APN settings completed"</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"Reset options"</string>
<string name="reset_dashboard_summary" msgid="8778383341461126642">"Network, apps or device can be reset"</string>
- <string name="reset_network_title" msgid="8944059136930806211">"Reset Wi-Fi, mobile & Bluetooth"</string>
+ <string name="reset_network_title" msgid="8944059136930806211">"Reset Wi-Fi, mobile and Bluetooth"</string>
<string name="reset_network_desc" msgid="4982633363916261109">"This will reset all network settings, including:\n\n"<li>"Wi‑Fi"</li>\n<li>"Mobile data"</li>\n<li>"Bluetooth"</li></string>
<string name="reset_esim_title" msgid="7630781767040831893">"Erase downloaded SIMs"</string>
- <string name="reset_esim_desc" msgid="433226911566802">"To download replacement SIMs, contact your operator. This won’t cancel any mobile service plans."</string>
+ <string name="reset_esim_desc" msgid="433226911566802">"To download replacement SIMs, contact your carrier. This won\'t cancel any mobile service plans."</string>
<string name="reset_network_button_text" msgid="4293271046867912819">"Reset settings"</string>
- <string name="reset_network_final_desc" msgid="2463817067048751373">"Reset all network settings? You can’t undo this action."</string>
- <string name="reset_network_final_desc_esim" msgid="4676436976372555750">"Reset all network settings and delete downloaded SIMs? You can’t undo this action."</string>
+ <string name="reset_network_final_desc" msgid="2463817067048751373">"Reset all network settings? You can\'t undo this action"</string>
+ <string name="reset_network_final_desc_esim" msgid="4676436976372555750">"Reset all network settings and erase downloaded SIMs? You can\'t undo this action"</string>
<string name="reset_network_final_button_text" msgid="345255333127794393">"Reset settings"</string>
<string name="reset_network_confirm_title" msgid="2432145031070536008">"Reset?"</string>
<string name="network_reset_not_available" msgid="6146655531868016281">"Network reset is not available for this user"</string>
@@ -1584,7 +1586,7 @@
<string name="master_clear_title" msgid="1560712943955904673">"Erase all data (factory reset)"</string>
<string name="master_clear_short_title" msgid="919098101581335101">"Erase all data (factory reset)"</string>
<string name="master_clear_desc" product="tablet" msgid="3432373610755760899">"This will erase all data from your tablet’s "<b>"internal storage"</b>", including:\n\n"<li>"Your Google Account"</li>\n<li>"System and app data and settings"</li>\n<li>"Downloaded apps"</li></string>
- <string name="master_clear_desc" product="default" msgid="8765543541962866697">"This will erase all data from your phone’s "<b>"internal storage"</b>", including:\n\n"<li>"Your Google Account"</li>\n<li>"System and app data and settings"</li>\n<li>"Downloaded apps"</li></string>
+ <string name="master_clear_desc" product="default" msgid="8765543541962866697">"This will erase all data from your phone\'s "<b>"internal storage"</b>", including:\n\n"<li>"Your Google Account"</li>\n<li>"System and app data and settings"</li>\n<li>"Downloaded apps"</li></string>
<string name="master_clear_accounts" product="default" msgid="3432884235445405376">\n\n"You are currently signed in to the following accounts:\n"</string>
<string name="master_clear_other_users_present" product="default" msgid="5993259656117566767">\n\n"There are other users present on this device.\n"</string>
<string name="master_clear_desc_also_erases_external" msgid="3947303501615091903"><li>"Music"</li>\n<li>"Photos"</li>\n<li>"Other user data"</li></string>
@@ -1596,10 +1598,10 @@
<string name="erase_external_storage" product="default" msgid="194249742376770215">"Erase SD card"</string>
<string name="erase_external_storage_description" product="nosdcard" msgid="8020275102431496261">"Erase all the data on the internal USB storage, such as music or photos"</string>
<string name="erase_external_storage_description" product="default" msgid="5029355708082861798">"Erase all the data on the SD card, such as music or photos"</string>
- <string name="master_clear_button_text" product="tablet" msgid="8000547818499182920">"Delete all data"</string>
- <string name="master_clear_button_text" product="default" msgid="8000547818499182920">"Delete all data"</string>
- <string name="master_clear_final_desc" msgid="5189365498015339294">"All of your personal information and downloaded apps will be deleted. You can’t undo this action."</string>
- <string name="master_clear_final_desc_esim" msgid="3058919823436953662">"All of your personal information, including downloaded apps & SIMs, will be deleted. You can’t undo this action."</string>
+ <string name="master_clear_button_text" product="tablet" msgid="8000547818499182920">"Erase all data"</string>
+ <string name="master_clear_button_text" product="default" msgid="8000547818499182920">"Erase all data"</string>
+ <string name="master_clear_final_desc" msgid="5189365498015339294">"All of your personal information and downloaded apps will be deleted. You can\'t undo this action."</string>
+ <string name="master_clear_final_desc_esim" msgid="3058919823436953662">"All of your personal information, including downloaded apps and SIMs, will be deleted. You can\'t undo this action."</string>
<string name="master_clear_final_button_text" msgid="866772743886027768">"Erase everything"</string>
<string name="master_clear_failed" msgid="7588397453984229892">"No reset was performed because the System Clear service isn\'t available."</string>
<string name="master_clear_confirm_title" msgid="698328669893512402">"Erase all data?"</string>
@@ -1671,8 +1673,8 @@
<string name="location_street_level" product="tablet" msgid="4459804798444296650">"Let apps use GPS on your tablet to pinpoint your location"</string>
<string name="location_street_level" product="default" msgid="7407688345675450051">"Let apps use GPS on your phone to pinpoint your location"</string>
<string name="assisted_gps" msgid="5411780261117055175">"Use assisted GPS"</string>
- <string name="assisted_gps_enabled" msgid="2561022181775725369">"Use server to assist GPS (un-tick to reduce network usage)"</string>
- <string name="assisted_gps_disabled" msgid="6448758788217415937">"Use server to assist GPS (un-tick to improve GPS performance)"</string>
+ <string name="assisted_gps_enabled" msgid="2561022181775725369">"Use server to assist GPS (uncheck to reduce network usage)"</string>
+ <string name="assisted_gps_disabled" msgid="6448758788217415937">"Use server to assist GPS (uncheck to improve GPS performance)"</string>
<string name="use_location_title" msgid="7724788634359496634">"Location & Google search"</string>
<string name="use_location_summary" msgid="7396716606067400283">"Let Google use your location to improve search results and other services"</string>
<string name="location_access_title" msgid="8587974819606800029">"Access to my location"</string>
@@ -2039,7 +2041,7 @@
<string name="vision_settings_description" msgid="3476589459009287332">"You can customise this device to fit your needs. These accessibility features can be changed later in Settings."</string>
<string name="vision_settings_suggestion_title" msgid="7268661419110951128">"Change font size"</string>
<string name="screen_reader_category_title" msgid="6300714148519645544">"Screen readers"</string>
- <string name="audio_and_captions_category_title" msgid="6140472938769619212">"Audio & on-screen text"</string>
+ <string name="audio_and_captions_category_title" msgid="6140472938769619212">"Audio and on-screen text"</string>
<string name="display_category_title" msgid="545168481672250195">"Display"</string>
<string name="interaction_control_category_title" msgid="8775039211811947683">"Interaction controls"</string>
<string name="user_installed_services_category_title" msgid="4288689493753221319">"Downloaded services"</string>
@@ -2062,7 +2064,7 @@
<string name="accessibility_global_gesture_preference_title" msgid="3842279082831426816">"Volume key shortcut"</string>
<string name="accessibility_shortcut_service_title" msgid="3516052294376744060">"Shortcut service"</string>
<string name="accessibility_shortcut_service_on_lock_screen_title" msgid="1279441617927949980">"Allow from lock screen"</string>
- <string name="accessibility_shortcut_description" msgid="1427049334225166395">"When the shortcut is on, you can press both volume keys for 3 seconds to start an accessibility feature."</string>
+ <string name="accessibility_shortcut_description" msgid="1427049334225166395">"When the shortcut is on, you can press both volume keys for three seconds to start an accessibility feature."</string>
<string name="accessibility_toggle_high_text_contrast_preference_title" msgid="5652244684961877255">"High-contrast text"</string>
<string name="accessibility_toggle_screen_magnification_auto_update_preference_title" msgid="2466317284195934003">"Auto update screen magnification"</string>
<string name="accessibility_toggle_screen_magnification_auto_update_preference_summary" msgid="6625473745911276917">"Update screen magnification on app transitions"</string>
@@ -2083,7 +2085,7 @@
<string name="accessibility_control_timeout_preference_title" msgid="2771808346038759474">"Time to take action"</string>
<string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"Choose how long to show messages that you need to read, but are visible only temporarily.\n\nNot all apps support this setting."</string>
<string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"Choose how long to show messages that ask you to take action, but are visible only temporarily.\n\nNot all apps support this setting."</string>
- <string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"Touch & hold delay"</string>
+ <string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"Touch and hold delay"</string>
<string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"Colour inversion"</string>
<string name="accessibility_display_inversion_preference_subtitle" msgid="69291255322175323">"May affect performance"</string>
<string name="accessibility_autoclick_preference_title" msgid="9164599088410340405">"Dwell timing"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Notification vibration"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Ring vibration"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Touch vibration"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Use service"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Use colour correction"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Use captions"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Use service"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Use colour correction"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Use captions"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Continue"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Hearing aids"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"No hearing aids connected"</string>
@@ -2137,7 +2139,7 @@
<string name="accessibility_vibration_summary_off" msgid="2894044066550518676">"Ring & notification set to off"</string>
<string name="accessibility_vibration_summary_low" msgid="2884160616131878204">"Ring & notification set to low"</string>
<string name="accessibility_vibration_summary_medium" msgid="3141272492346527298">"Ring & notification set to medium"</string>
- <string name="accessibility_vibration_summary_high" msgid="4188677504368202861">"Ring & notification set to high"</string>
+ <string name="accessibility_vibration_summary_high" msgid="4188677504368202861">"Ring and notification set to high"</string>
<string name="accessibility_vibration_intensity_off" msgid="4427927348723998194">"Off"</string>
<string name="accessibility_vibration_intensity_low" msgid="8250688473513963211">"Low"</string>
<string name="accessibility_vibration_intensity_medium" msgid="2249931147940383011">"Medium"</string>
@@ -2200,7 +2202,7 @@
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> print jobs</item>
<item quantity="one">1 print job</item>
</plurals>
- <string name="print_settings_title" msgid="2886445296786932763">"Printing services"</string>
+ <string name="print_settings_title" msgid="2886445296786932763">"Print services"</string>
<string name="print_no_services_installed" msgid="3387777739528003794">"No services installed"</string>
<string name="print_no_printers_found" msgid="5090925427392294881">"No printers found"</string>
<string name="print_menu_item_settings" msgid="2654804159012579508">"Settings"</string>
@@ -2237,7 +2239,7 @@
<string name="background_activity_summary_whitelisted" msgid="4713321059375873828">"Background usage can’t be restricted"</string>
<string name="background_activity_warning_dialog_title" msgid="2170790412855899678">"Limit background activity?"</string>
<string name="background_activity_warning_dialog_text" msgid="8242749826732375096">"If you limit background activity for an app, it may misbehave"</string>
- <string name="background_activity_disabled_dialog_text" msgid="4234598000779459640">"Since this app is not set to optimise battery, you can’t restrict it.\n\nTo restrict the app, first turn on battery optimisation."</string>
+ <string name="background_activity_disabled_dialog_text" msgid="4234598000779459640">"Since this app is not set to optimize battery, you can\'t restrict it.\n\nTo restrict the app, first turn on battery optimization."</string>
<string name="device_screen_usage" msgid="4470485475363132750">"Screen usage since full charge"</string>
<string name="power_usage_list_summary" msgid="4314438658308211057">"Battery usage since full charge"</string>
<string name="screen_usage_summary" msgid="263396144684078341">"Amount of time screen has been on since full charge"</string>
@@ -2315,12 +2317,12 @@
<string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"This app will be able to use battery in the background. Your battery may run out sooner than expected."</string>
<string name="battery_tip_unrestrict_app_dialog_ok" msgid="9154938931448151479">"Remove"</string>
<string name="battery_tip_unrestrict_app_dialog_cancel" msgid="7331148618292397166">"Cancel"</string>
- <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"Your apps are using a normal amount of battery. If apps use too much battery, your phone will suggest actions that you can take.\n\nYou can always turn on Battery Saver if you’re running low on battery."</string>
+ <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"Your apps are using a normal amount of battery. If apps use too much battery, your phone will suggest actions you can take.\n\nYou can always turn on Battery Saver if you\'re running low on battery."</string>
<string name="battery_tip_dialog_summary_message" product="tablet" msgid="1721081030632329647">"Your apps are using a normal amount of battery. If apps use too much battery, your tablet will suggest actions that you can take.\n\nYou can always turn on Battery Saver if you’re running low on battery."</string>
<string name="battery_tip_dialog_summary_message" product="device" msgid="146872407040848465">"Your apps are using a normal amount of battery. If apps use too much battery, your device will suggest actions that you can take.\n\nYou can always turn on Battery Saver if you’re running low on battery."</string>
<string name="smart_battery_manager_title" msgid="5744035036663849515">"Battery Manager"</string>
<string name="smart_battery_title" msgid="4919670408532804351">"Manage apps automatically"</string>
- <string name="smart_battery_summary" msgid="640027046471198174">"Limit battery for apps that you don’t use often"</string>
+ <string name="smart_battery_summary" msgid="640027046471198174">"Limit battery for apps you don\'t use often"</string>
<string name="smart_battery_footer" product="default" msgid="3971715848890205632">"When Battery Manager detects that apps are draining battery, you’ll have the option to restrict these apps. Restricted apps may not work properly and notifications may be delayed."</string>
<string name="smart_battery_footer" product="tablet" msgid="3971715848890205632">"When Battery Manager detects that apps are draining battery, you’ll have the option to restrict these apps. Restricted apps may not work properly and notifications may be delayed."</string>
<string name="smart_battery_footer" product="device" msgid="3971715848890205632">"When Battery Manager detects that apps are draining battery, you’ll have the option to restrict these apps. Restricted apps may not work properly and notifications may be delayed."</string>
@@ -2400,7 +2402,7 @@
<string name="battery_desc_standby" product="tablet" msgid="2941777996429933419">"Battery used when tablet is idle"</string>
<string name="battery_desc_standby" product="default" msgid="8889482616564520287">"Battery used when phone is idle"</string>
<string name="battery_desc_radio" msgid="5119078473833865414">"Battery used by mobile radio"</string>
- <string name="battery_sugg_radio" msgid="3616364509738133415">"Switch to airplane mode to save power in areas with no cell coverage"</string>
+ <string name="battery_sugg_radio" msgid="3616364509738133415">"Switch to Airplane mode to save power in areas with no cell coverage"</string>
<string name="battery_desc_flashlight" msgid="4574819522143720917">"Battery used by the flashlight"</string>
<string name="battery_desc_camera" msgid="517966830222999462">"Battery used by the camera"</string>
<string name="battery_desc_display" msgid="6701005808894183097">"Battery used by the display and backlight"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Turn on"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Use Battery Saver"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Use Battery Saver"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Turn on automatically"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Never"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"at <xliff:g id="PERCENT">%1$s</xliff:g> battery"</string>
@@ -2648,7 +2650,7 @@
<string name="select_all" msgid="452240217913675728">"Select all"</string>
<string name="data_usage_summary_title" msgid="7288431048564861043">"Data usage"</string>
<string name="data_usage_app_summary_title" msgid="8277327968906074983">"Mobile data & Wi‑Fi"</string>
- <string name="data_usage_accounting" msgid="4681642832010140640">"Operator data accounting may differ from your device."</string>
+ <string name="data_usage_accounting" msgid="4681642832010140640">"Carrier data accounting may differ from your device."</string>
<string name="data_usage_app" msgid="4995297799363021198">"App usage"</string>
<string name="data_usage_app_info_label" msgid="5358288895158910477">"APP INFO"</string>
<string name="data_usage_cellular_data" msgid="3509117353455285808">"Mobile data"</string>
@@ -2713,7 +2715,7 @@
<string name="data_usage_limit_editor_title" msgid="1687908662154108293">"Set data usage limit"</string>
<string name="data_usage_limit_dialog_title" msgid="8804760847110131518">"Limiting data usage"</string>
<string name="data_usage_limit_dialog_mobile" product="tablet" msgid="2000713577999830647">"Your tablet will turn off mobile data once it reaches the limit you set.\n\nSince data usage is measured by your tablet, and your operator may account for usage differently, consider setting a conservative limit."</string>
- <string name="data_usage_limit_dialog_mobile" product="default" msgid="943546278705619205">"Your phone will turn off mobile data once it reaches the limit that you set.\n\nSince data usage is measured by your phone, and your operator may account for usage differently, consider setting a conservative limit."</string>
+ <string name="data_usage_limit_dialog_mobile" product="default" msgid="943546278705619205">"Your phone will turn off mobile data once it reaches the limit you set.\n\nSince data usage is measured by your phone, and your carrier may account for usage differently, consider setting a conservative limit."</string>
<string name="data_usage_restrict_background_title" msgid="3568746530413220844">"Restrict background data?"</string>
<string name="data_usage_restrict_background" msgid="995811034744808575">"If you restrict background mobile data, some apps and services won’t work unless you’re connected to Wi‑Fi."</string>
<string name="data_usage_restrict_background_multiuser" product="tablet" msgid="6032810839234864814">"If you restrict background mobile data, some apps and services won’t work unless you’re connected to Wi‑Fi.\n\nThis setting affects all users on this tablet."</string>
@@ -2734,7 +2736,7 @@
<string name="data_usage_metered_auto" msgid="7924116401382629319">"Automatic"</string>
<string name="data_usage_metered_yes" msgid="7333744880035386073">"Metered"</string>
<string name="data_usage_metered_no" msgid="1961524615778610008">"Not metered"</string>
- <string name="data_usage_disclaimer" msgid="4683321532922590425">"Operator data accounting may differ from your device."</string>
+ <string name="data_usage_disclaimer" msgid="4683321532922590425">"Carrier data accounting may differ from your device."</string>
<string name="cryptkeeper_emergency_call" msgid="4625420047524693116">"Emergency call"</string>
<string name="cryptkeeper_return_to_call" msgid="4433942821196822815">"Return to call"</string>
<string name="vpn_name" msgid="3538818658670774080">"Name"</string>
@@ -2933,7 +2935,7 @@
<string name="restriction_menu_reset" msgid="3642252461410370554">"Remove restrictions"</string>
<string name="restriction_menu_change_pin" msgid="592512748243421101">"Change PIN"</string>
<string name="app_notifications_switch_label" msgid="670683308275498821">"Show notifications"</string>
- <string name="help_label" msgid="1296484776243905646">"Help & feedback"</string>
+ <string name="help_label" msgid="1296484776243905646">"Help and feedback"</string>
<string name="support_summary" msgid="3278943815956130740">"Help articles, phone & chat, getting started"</string>
<string name="user_account_title" msgid="2108666882630552859">"Account for content"</string>
<string name="user_picture_title" msgid="6664602422948159123">"Photo ID"</string>
@@ -3692,7 +3694,7 @@
<string name="memory_avg_desc" msgid="1200185697910086968">"Average <xliff:g id="MEMORY">%1$s</xliff:g>"</string>
<string name="memory_use_running_format" msgid="3741170402563292232">"<xliff:g id="MEMORY">%1$s</xliff:g> / <xliff:g id="RUNNING">%2$s</xliff:g>"</string>
<string name="process_format" msgid="8575347150598564509">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="COUNT">%2$d</xliff:g>)"</string>
- <string name="high_power_apps" msgid="2518319744362028920">"Battery optimisation"</string>
+ <string name="high_power_apps" msgid="2518319744362028920">"Battery optimization"</string>
<string name="additional_battery_info" msgid="6877663897819271203">"Usage alerts"</string>
<string name="show_all_apps" msgid="5442552004569634846">"Show full device usage"</string>
<string name="hide_extra_apps" msgid="6798261081113299441">"Show app usage"</string>
@@ -3706,9 +3708,9 @@
</plurals>
<string name="high_power_filter_on" msgid="5294209328473386403">"Not optimised"</string>
<string name="high_power_on" msgid="3573501822510580334">"Not optimised"</string>
- <string name="high_power_off" msgid="5906679734326490426">"Optimising battery use"</string>
- <string name="high_power_system" msgid="739584574711292753">"Battery optimisation not available"</string>
- <string name="high_power_desc" msgid="333756885680362741">"Don’t apply battery optimisation. May drain your battery more quickly."</string>
+ <string name="high_power_off" msgid="5906679734326490426">"Optimizing battery use"</string>
+ <string name="high_power_system" msgid="739584574711292753">"Battery optimization not available"</string>
+ <string name="high_power_desc" msgid="333756885680362741">"Don\'t apply battery optimization. May drain your battery more quickly."</string>
<string name="high_power_prompt_title" msgid="2805745781720454052">"Let app always run in background?"</string>
<string name="high_power_prompt_body" msgid="8067395096053552289">"Allowing <xliff:g id="APP_NAME">%1$s</xliff:g> to always run in the background may reduce battery life. \n\nYou can change this later from Settings > Apps & notifications."</string>
<string name="battery_summary" msgid="4345690800899981339">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> use since last full charge"</string>
@@ -3908,7 +3910,7 @@
<string name="night_display_suggestion_summary" msgid="1754361016383576916">"Automatically tint screen every night"</string>
<string name="condition_night_display_title" msgid="9171491784857160135">"Night Light is on"</string>
<string name="condition_night_display_summary" msgid="7885776986937527558">"Screen tinted amber"</string>
- <string name="condition_grayscale_title" msgid="1226351649203551299">"Grey scale"</string>
+ <string name="condition_grayscale_title" msgid="1226351649203551299">"Greyscale"</string>
<string name="condition_grayscale_summary" msgid="749172886527349546">"Display only in grey colour"</string>
<string name="homepage_condition_footer_content_description" msgid="3563606465924396342">"Collapse"</string>
<string name="suggestions_title_v2" msgid="1959786223276927042">"Suggested for You"</string>
@@ -3940,7 +3942,7 @@
<string name="cell_data_template" msgid="5473177306229738078">"<xliff:g id="AMOUNT">^1</xliff:g> mobile data"</string>
<string name="wifi_data_template" msgid="3146090439147042068">"<xliff:g id="AMOUNT">^1</xliff:g> Wi-Fi data"</string>
<string name="ethernet_data_template" msgid="6414118030827090119">"<xliff:g id="AMOUNT">^1</xliff:g> ethernet data"</string>
- <string name="billing_cycle" msgid="5740717948341713190">"Data warning & limit"</string>
+ <string name="billing_cycle" msgid="5740717948341713190">"Data warning and limit"</string>
<string name="app_usage_cycle" msgid="213483325132959663">"App data usage cycle"</string>
<string name="cell_data_warning" msgid="8902740337286652689">"<xliff:g id="ID_1">^1</xliff:g> data warning"</string>
<string name="cell_data_limit" msgid="3175933829235314233">"<xliff:g id="ID_1">^1</xliff:g> data limit"</string>
@@ -3951,7 +3953,7 @@
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> restrictions</item>
<item quantity="one">1 restriction</item>
</plurals>
- <string name="operator_warning" msgid="4676042739221117031">"Operator data accounting may differ from device accounting"</string>
+ <string name="operator_warning" msgid="4676042739221117031">"Carrier data accounting may differ from device accounting"</string>
<string name="data_used_template" msgid="761605393453849477">"<xliff:g id="ID_1">%1$s</xliff:g> used"</string>
<string name="set_data_warning" msgid="8115980184415563941">"Set data warning"</string>
<string name="data_warning" msgid="2699207195535036240">"Data warning"</string>
@@ -4004,11 +4006,11 @@
<string name="battery_saver_off_summary" msgid="8736555723004299721">"Off"</string>
<string name="battery_saver_button_turn_on" msgid="3748696527267573793">"Turn on now"</string>
<string name="battery_saver_button_turn_off" msgid="2912950982503267828">"Turn off now"</string>
- <string name="not_battery_optimizing" msgid="2616044774307734160">"Not using battery optimisation"</string>
+ <string name="not_battery_optimizing" msgid="2616044774307734160">"Not using battery optimization"</string>
<string name="lockscreen_remote_input" msgid="3363310613165354434">"If device is locked, prevent typing replies or other text in notifications"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Default spell checker"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Choose spell checker"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Use spell checker"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Use spellchecker"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Not selected"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(none)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4098,10 +4100,10 @@
<item quantity="one">1 second</item>
</plurals>
<string name="automatic_storage_manager_settings" msgid="2403621409625820182">"Manage storage"</string>
- <string name="automatic_storage_manager_text" msgid="4270379105066667493">"To help free up storage space, storage manager removes backed up photos and videos from your device."</string>
+ <string name="automatic_storage_manager_text" msgid="4270379105066667493">"To help free up storage space, storage manager removes backed-up photos and videos from your device."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Remove photos & videos"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Storage manager"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Use Storage Manager"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Use storage Manager"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatic"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manual"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Free up space now"</string>
@@ -4267,7 +4269,7 @@
<string name="storage_manager_indicator_on" msgid="5295306384982062320">"On"</string>
<string name="install_type_instant" msgid="6248487669862821874">"Instant app"</string>
<string name="automatic_storage_manager_deactivation_warning" msgid="7867793739491286374">"Turn off the storage manager?"</string>
- <string name="storage_movies_tv" msgid="7282484273991655296">"Movie & TV apps"</string>
+ <string name="storage_movies_tv" msgid="7282484273991655296">"Movie and TV apps"</string>
<string name="carrier_provisioning" msgid="3309125279191534469">"Operator Provisioning Info"</string>
<string name="trigger_carrier_provisioning" msgid="6284005970057901477">"Trigger Operator Provisioning"</string>
<string name="zen_suggestion_title" msgid="2134699720214231950">"Update Do Not Disturb"</string>
diff --git a/tests/CarDeveloperOptions/res/values-en-rGB/arrays.xml b/tests/CarDeveloperOptions/res/values-en-rGB/arrays.xml
index f718198..b001bdd 100644
--- a/tests/CarDeveloperOptions/res/values-en-rGB/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-en-rGB/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"run in background"</item>
<item msgid="6423861043647911030">"accessibility volume"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Location"</item>
+ <item msgid="6656077694190491067">"Location"</item>
+ <item msgid="8790228218278477369">"Location"</item>
+ <item msgid="7836406246005211990">"Vibrate"</item>
+ <item msgid="3951439024549922598">"Read contacts"</item>
+ <item msgid="8802152411647068">"Modify contacts"</item>
+ <item msgid="229544934599698735">"Read call log"</item>
+ <item msgid="7396102294405899613">"Modify call log"</item>
+ <item msgid="3597797992398484655">"Read calendar"</item>
+ <item msgid="2705975774250907343">"Modify calendar"</item>
+ <item msgid="4668747371441932697">"Location"</item>
+ <item msgid="1487578921720243646">"Post notification"</item>
+ <item msgid="4636080349724146638">"Location"</item>
+ <item msgid="673510900286463926">"Call phone"</item>
+ <item msgid="542083422784609790">"Read SMS/MMS"</item>
+ <item msgid="1033780373029588436">"Write SMS/MMS"</item>
+ <item msgid="5647111115517787488">"Receive SMS/MMS"</item>
+ <item msgid="8591105601108455893">"Receive SMS/MMS"</item>
+ <item msgid="7730995008517841903">"Receive SMS/MMS"</item>
+ <item msgid="2613033109026626086">"Receive SMS/MMS"</item>
+ <item msgid="3037159047591081136">"Send SMS/MMS"</item>
+ <item msgid="4726682243833913568">"Read SMS/MMS"</item>
+ <item msgid="6555678522277865572">"Write SMS/MMS"</item>
+ <item msgid="6981734935578130884">"Modify settings"</item>
+ <item msgid="8705854389991425629">"Draw on top"</item>
+ <item msgid="5861356020344153651">"Access notifications"</item>
+ <item msgid="78432174621628659">"Camera"</item>
+ <item msgid="3986116419882154794">"Record audio"</item>
+ <item msgid="4516840825756409490">"Play audio"</item>
+ <item msgid="6811712502798183957">"Read clipboard"</item>
+ <item msgid="2780369012602289114">"Modify clipboard"</item>
+ <item msgid="2331359440170850868">"Media buttons"</item>
+ <item msgid="6133599737122751231">"Audio focus"</item>
+ <item msgid="6844485713404805301">"Master volume"</item>
+ <item msgid="1600379420669104929">"Voice volume"</item>
+ <item msgid="6296768210470214866">"Ring volume"</item>
+ <item msgid="510690696071629241">"Media volume"</item>
+ <item msgid="406861638631430109">"Alarm volume"</item>
+ <item msgid="4715864795872233884">"Notification volume"</item>
+ <item msgid="2311478519251301183">"Bluetooth volume"</item>
+ <item msgid="5133991377896747027">"Keep awake"</item>
+ <item msgid="2464189519136248621">"Location"</item>
+ <item msgid="2062677934050803037">"Location"</item>
+ <item msgid="1735171933192715957">"Get usage stats"</item>
+ <item msgid="1014093788778383554">"Mute/unmute microphone"</item>
+ <item msgid="4199297950608622850">"Show toast"</item>
+ <item msgid="2527962435313398821">"Project media"</item>
+ <item msgid="5117506254221861929">"Activate VPN"</item>
+ <item msgid="8291198322681891160">"Write wallpaper"</item>
+ <item msgid="7106921284621230961">"Assist structure"</item>
+ <item msgid="4496533640894624799">"Assist screenshot"</item>
+ <item msgid="2598847264853993611">"Read phone state"</item>
+ <item msgid="9215610846802973353">"Add voicemail"</item>
+ <item msgid="9186411956086478261">"Use sip"</item>
+ <item msgid="6884763100104539558">"Process outgoing call"</item>
+ <item msgid="125513972170580692">"Fingerprint"</item>
+ <item msgid="2556071024281275619">"Body sensors"</item>
+ <item msgid="617168514928339387">"Read mobile broadcasts"</item>
+ <item msgid="7134693570516523585">"Mock location"</item>
+ <item msgid="7224489175375229399">"Read storage"</item>
+ <item msgid="8472735063903258202">"Write storage"</item>
+ <item msgid="4069276819909595110">"Turn on screen"</item>
+ <item msgid="1228338896751121025">"Get accounts"</item>
+ <item msgid="3181581793459233672">"Run in background"</item>
+ <item msgid="2340936043025374076">"Accessibility volume"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Short"</item>
<item msgid="4816511817309094890">"Medium"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Never allow"</item>
<item msgid="8184570120217958741">"Always allow"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normal"</item>
+ <item msgid="5101233285497327432">"Moderate"</item>
+ <item msgid="1555861583162930714">"Low"</item>
+ <item msgid="1719683776264798117">"Critical"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normal"</item>
+ <item msgid="6107138933849816768">"Moderate"</item>
+ <item msgid="182695359839047859">"Low"</item>
+ <item msgid="8577246509202964244">"Critical"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Persistent"</item>
<item msgid="167418068739176448">"Top activity"</item>
diff --git a/tests/CarDeveloperOptions/res/values-en-rGB/strings.xml b/tests/CarDeveloperOptions/res/values-en-rGB/strings.xml
index 26efa62..d06d9ab 100644
--- a/tests/CarDeveloperOptions/res/values-en-rGB/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-en-rGB/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Make the text on screen smaller or larger."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Make smaller"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Make larger"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Sample text"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"The Wonderful Wizard of Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Chapter 11: The Wonderful Emerald City of Oz"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Profile info"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Accounts"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Location"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Use location"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Use location"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Off"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">On – <xliff:g id="COUNT_1">%1$d</xliff:g> apps can access location</item>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Turn on Wi‑Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Use Wi‑Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Use Wi‑Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi‑Fi settings"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Set up & manage wireless access points"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Mobile"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"If Wi‑Fi is unavailable, use mobile network"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"If mobile network is unavailable, use Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Call over Wi‑Fi. If Wi‑Fi is lost, call will end."</string>
@@ -1581,8 +1583,8 @@
<string name="reset_network_complete_toast" msgid="128225929536005495">"Network settings have been reset"</string>
<string name="reset_esim_error_title" msgid="4728931209471875632">"Can’t delete SIMs"</string>
<string name="reset_esim_error_msg" msgid="4716366079119742235">"Downloaded SIMs can’t be deleted due to an error.\n\nRestart your device and try again."</string>
- <string name="master_clear_title" msgid="1560712943955904673">"Erase all data (factory reset)"</string>
- <string name="master_clear_short_title" msgid="919098101581335101">"Erase all data (factory reset)"</string>
+ <string name="master_clear_title" msgid="1560712943955904673">"Delete all data (factory reset)"</string>
+ <string name="master_clear_short_title" msgid="919098101581335101">"Delete all data (factory reset)"</string>
<string name="master_clear_desc" product="tablet" msgid="3432373610755760899">"This will erase all data from your tablet’s "<b>"internal storage"</b>", including:\n\n"<li>"Your Google Account"</li>\n<li>"System and app data and settings"</li>\n<li>"Downloaded apps"</li></string>
<string name="master_clear_desc" product="default" msgid="8765543541962866697">"This will erase all data from your phone’s "<b>"internal storage"</b>", including:\n\n"<li>"Your Google Account"</li>\n<li>"System and app data and settings"</li>\n<li>"Downloaded apps"</li></string>
<string name="master_clear_accounts" product="default" msgid="3432884235445405376">\n\n"You are currently signed in to the following accounts:\n"</string>
@@ -2062,7 +2064,7 @@
<string name="accessibility_global_gesture_preference_title" msgid="3842279082831426816">"Volume key shortcut"</string>
<string name="accessibility_shortcut_service_title" msgid="3516052294376744060">"Shortcut service"</string>
<string name="accessibility_shortcut_service_on_lock_screen_title" msgid="1279441617927949980">"Allow from lock screen"</string>
- <string name="accessibility_shortcut_description" msgid="1427049334225166395">"When the shortcut is on, you can press both volume keys for 3 seconds to start an accessibility feature."</string>
+ <string name="accessibility_shortcut_description" msgid="1427049334225166395">"When the shortcut is on, you can press both volume keys for three seconds to start an accessibility feature."</string>
<string name="accessibility_toggle_high_text_contrast_preference_title" msgid="5652244684961877255">"High-contrast text"</string>
<string name="accessibility_toggle_screen_magnification_auto_update_preference_title" msgid="2466317284195934003">"Auto update screen magnification"</string>
<string name="accessibility_toggle_screen_magnification_auto_update_preference_summary" msgid="6625473745911276917">"Update screen magnification on app transitions"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Notification vibration"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Ring vibration"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Touch vibration"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Use service"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Use colour correction"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Use captions"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Use service"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Use colour correction"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Use captions"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Continue"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Hearing aids"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"No hearing aids connected"</string>
@@ -2200,7 +2202,7 @@
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> print jobs</item>
<item quantity="one">1 print job</item>
</plurals>
- <string name="print_settings_title" msgid="2886445296786932763">"Printing services"</string>
+ <string name="print_settings_title" msgid="2886445296786932763">"Print services"</string>
<string name="print_no_services_installed" msgid="3387777739528003794">"No services installed"</string>
<string name="print_no_printers_found" msgid="5090925427392294881">"No printers found"</string>
<string name="print_menu_item_settings" msgid="2654804159012579508">"Settings"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Turn on"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Use Battery Saver"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Use Battery Saver"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Turn on automatically"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Never"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"at <xliff:g id="PERCENT">%1$s</xliff:g> battery"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"If device is locked, prevent typing replies or other text in notifications"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Default spell checker"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Choose spell checker"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Use spell checker"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Use spellchecker"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Not selected"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(none)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4098,10 +4100,10 @@
<item quantity="one">1 second</item>
</plurals>
<string name="automatic_storage_manager_settings" msgid="2403621409625820182">"Manage storage"</string>
- <string name="automatic_storage_manager_text" msgid="4270379105066667493">"To help free up storage space, storage manager removes backed up photos and videos from your device."</string>
+ <string name="automatic_storage_manager_text" msgid="4270379105066667493">"To help free up storage space, storage manager removes backed-up photos and videos from your device."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Remove photos & videos"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Storage manager"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Use Storage Manager"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Use storage Manager"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatic"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manual"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Free up space now"</string>
diff --git a/tests/CarDeveloperOptions/res/values-en-rIN/arrays.xml b/tests/CarDeveloperOptions/res/values-en-rIN/arrays.xml
index f718198..b001bdd 100644
--- a/tests/CarDeveloperOptions/res/values-en-rIN/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-en-rIN/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"run in background"</item>
<item msgid="6423861043647911030">"accessibility volume"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Location"</item>
+ <item msgid="6656077694190491067">"Location"</item>
+ <item msgid="8790228218278477369">"Location"</item>
+ <item msgid="7836406246005211990">"Vibrate"</item>
+ <item msgid="3951439024549922598">"Read contacts"</item>
+ <item msgid="8802152411647068">"Modify contacts"</item>
+ <item msgid="229544934599698735">"Read call log"</item>
+ <item msgid="7396102294405899613">"Modify call log"</item>
+ <item msgid="3597797992398484655">"Read calendar"</item>
+ <item msgid="2705975774250907343">"Modify calendar"</item>
+ <item msgid="4668747371441932697">"Location"</item>
+ <item msgid="1487578921720243646">"Post notification"</item>
+ <item msgid="4636080349724146638">"Location"</item>
+ <item msgid="673510900286463926">"Call phone"</item>
+ <item msgid="542083422784609790">"Read SMS/MMS"</item>
+ <item msgid="1033780373029588436">"Write SMS/MMS"</item>
+ <item msgid="5647111115517787488">"Receive SMS/MMS"</item>
+ <item msgid="8591105601108455893">"Receive SMS/MMS"</item>
+ <item msgid="7730995008517841903">"Receive SMS/MMS"</item>
+ <item msgid="2613033109026626086">"Receive SMS/MMS"</item>
+ <item msgid="3037159047591081136">"Send SMS/MMS"</item>
+ <item msgid="4726682243833913568">"Read SMS/MMS"</item>
+ <item msgid="6555678522277865572">"Write SMS/MMS"</item>
+ <item msgid="6981734935578130884">"Modify settings"</item>
+ <item msgid="8705854389991425629">"Draw on top"</item>
+ <item msgid="5861356020344153651">"Access notifications"</item>
+ <item msgid="78432174621628659">"Camera"</item>
+ <item msgid="3986116419882154794">"Record audio"</item>
+ <item msgid="4516840825756409490">"Play audio"</item>
+ <item msgid="6811712502798183957">"Read clipboard"</item>
+ <item msgid="2780369012602289114">"Modify clipboard"</item>
+ <item msgid="2331359440170850868">"Media buttons"</item>
+ <item msgid="6133599737122751231">"Audio focus"</item>
+ <item msgid="6844485713404805301">"Master volume"</item>
+ <item msgid="1600379420669104929">"Voice volume"</item>
+ <item msgid="6296768210470214866">"Ring volume"</item>
+ <item msgid="510690696071629241">"Media volume"</item>
+ <item msgid="406861638631430109">"Alarm volume"</item>
+ <item msgid="4715864795872233884">"Notification volume"</item>
+ <item msgid="2311478519251301183">"Bluetooth volume"</item>
+ <item msgid="5133991377896747027">"Keep awake"</item>
+ <item msgid="2464189519136248621">"Location"</item>
+ <item msgid="2062677934050803037">"Location"</item>
+ <item msgid="1735171933192715957">"Get usage stats"</item>
+ <item msgid="1014093788778383554">"Mute/unmute microphone"</item>
+ <item msgid="4199297950608622850">"Show toast"</item>
+ <item msgid="2527962435313398821">"Project media"</item>
+ <item msgid="5117506254221861929">"Activate VPN"</item>
+ <item msgid="8291198322681891160">"Write wallpaper"</item>
+ <item msgid="7106921284621230961">"Assist structure"</item>
+ <item msgid="4496533640894624799">"Assist screenshot"</item>
+ <item msgid="2598847264853993611">"Read phone state"</item>
+ <item msgid="9215610846802973353">"Add voicemail"</item>
+ <item msgid="9186411956086478261">"Use sip"</item>
+ <item msgid="6884763100104539558">"Process outgoing call"</item>
+ <item msgid="125513972170580692">"Fingerprint"</item>
+ <item msgid="2556071024281275619">"Body sensors"</item>
+ <item msgid="617168514928339387">"Read mobile broadcasts"</item>
+ <item msgid="7134693570516523585">"Mock location"</item>
+ <item msgid="7224489175375229399">"Read storage"</item>
+ <item msgid="8472735063903258202">"Write storage"</item>
+ <item msgid="4069276819909595110">"Turn on screen"</item>
+ <item msgid="1228338896751121025">"Get accounts"</item>
+ <item msgid="3181581793459233672">"Run in background"</item>
+ <item msgid="2340936043025374076">"Accessibility volume"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Short"</item>
<item msgid="4816511817309094890">"Medium"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Never allow"</item>
<item msgid="8184570120217958741">"Always allow"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normal"</item>
+ <item msgid="5101233285497327432">"Moderate"</item>
+ <item msgid="1555861583162930714">"Low"</item>
+ <item msgid="1719683776264798117">"Critical"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normal"</item>
+ <item msgid="6107138933849816768">"Moderate"</item>
+ <item msgid="182695359839047859">"Low"</item>
+ <item msgid="8577246509202964244">"Critical"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Persistent"</item>
<item msgid="167418068739176448">"Top activity"</item>
diff --git a/tests/CarDeveloperOptions/res/values-en-rIN/strings.xml b/tests/CarDeveloperOptions/res/values-en-rIN/strings.xml
index 26efa62..74ec028 100644
--- a/tests/CarDeveloperOptions/res/values-en-rIN/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-en-rIN/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Make the text on screen smaller or larger."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Make smaller"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Make larger"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Sample text"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"The Wonderful Wizard of Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Chapter 11: The Wonderful Emerald City of Oz"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Profile info"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Accounts"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Location"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Use location"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Use location"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Off"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">On – <xliff:g id="COUNT_1">%1$d</xliff:g> apps can access location</item>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Turn on Wi‑Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Use Wi‑Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Use Wi‑Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi‑Fi settings"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Set up & manage wireless access points"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Mobile"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"If Wi‑Fi is unavailable, use mobile network"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"If mobile network is unavailable, use Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Call over Wi‑Fi. If Wi‑Fi is lost, call will end."</string>
@@ -1568,7 +1570,7 @@
<string name="restore_default_apn_completed" msgid="5671734152740058937">"Reset default APN settings completed"</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"Reset options"</string>
<string name="reset_dashboard_summary" msgid="8778383341461126642">"Network, apps or device can be reset"</string>
- <string name="reset_network_title" msgid="8944059136930806211">"Reset Wi-Fi, mobile & Bluetooth"</string>
+ <string name="reset_network_title" msgid="8944059136930806211">"Reset Wi-Fi, mobile and Bluetooth"</string>
<string name="reset_network_desc" msgid="4982633363916261109">"This will reset all network settings, including:\n\n"<li>"Wi‑Fi"</li>\n<li>"Mobile data"</li>\n<li>"Bluetooth"</li></string>
<string name="reset_esim_title" msgid="7630781767040831893">"Erase downloaded SIMs"</string>
<string name="reset_esim_desc" msgid="433226911566802">"To download replacement SIMs, contact your operator. This won’t cancel any mobile service plans."</string>
@@ -1576,13 +1578,13 @@
<string name="reset_network_final_desc" msgid="2463817067048751373">"Reset all network settings? You can’t undo this action."</string>
<string name="reset_network_final_desc_esim" msgid="4676436976372555750">"Reset all network settings and delete downloaded SIMs? You can’t undo this action."</string>
<string name="reset_network_final_button_text" msgid="345255333127794393">"Reset settings"</string>
- <string name="reset_network_confirm_title" msgid="2432145031070536008">"Reset?"</string>
+ <string name="reset_network_confirm_title" msgid="2432145031070536008">"Want to reset?"</string>
<string name="network_reset_not_available" msgid="6146655531868016281">"Network reset is not available for this user"</string>
<string name="reset_network_complete_toast" msgid="128225929536005495">"Network settings have been reset"</string>
<string name="reset_esim_error_title" msgid="4728931209471875632">"Can’t delete SIMs"</string>
<string name="reset_esim_error_msg" msgid="4716366079119742235">"Downloaded SIMs can’t be deleted due to an error.\n\nRestart your device and try again."</string>
- <string name="master_clear_title" msgid="1560712943955904673">"Erase all data (factory reset)"</string>
- <string name="master_clear_short_title" msgid="919098101581335101">"Erase all data (factory reset)"</string>
+ <string name="master_clear_title" msgid="1560712943955904673">"Delete all data (factory reset)"</string>
+ <string name="master_clear_short_title" msgid="919098101581335101">"Delete all data (factory reset)"</string>
<string name="master_clear_desc" product="tablet" msgid="3432373610755760899">"This will erase all data from your tablet’s "<b>"internal storage"</b>", including:\n\n"<li>"Your Google Account"</li>\n<li>"System and app data and settings"</li>\n<li>"Downloaded apps"</li></string>
<string name="master_clear_desc" product="default" msgid="8765543541962866697">"This will erase all data from your phone’s "<b>"internal storage"</b>", including:\n\n"<li>"Your Google Account"</li>\n<li>"System and app data and settings"</li>\n<li>"Downloaded apps"</li></string>
<string name="master_clear_accounts" product="default" msgid="3432884235445405376">\n\n"You are currently signed in to the following accounts:\n"</string>
@@ -2039,7 +2041,7 @@
<string name="vision_settings_description" msgid="3476589459009287332">"You can customise this device to fit your needs. These accessibility features can be changed later in Settings."</string>
<string name="vision_settings_suggestion_title" msgid="7268661419110951128">"Change font size"</string>
<string name="screen_reader_category_title" msgid="6300714148519645544">"Screen readers"</string>
- <string name="audio_and_captions_category_title" msgid="6140472938769619212">"Audio & on-screen text"</string>
+ <string name="audio_and_captions_category_title" msgid="6140472938769619212">"Audio and on-screen text"</string>
<string name="display_category_title" msgid="545168481672250195">"Display"</string>
<string name="interaction_control_category_title" msgid="8775039211811947683">"Interaction controls"</string>
<string name="user_installed_services_category_title" msgid="4288689493753221319">"Downloaded services"</string>
@@ -2062,7 +2064,7 @@
<string name="accessibility_global_gesture_preference_title" msgid="3842279082831426816">"Volume key shortcut"</string>
<string name="accessibility_shortcut_service_title" msgid="3516052294376744060">"Shortcut service"</string>
<string name="accessibility_shortcut_service_on_lock_screen_title" msgid="1279441617927949980">"Allow from lock screen"</string>
- <string name="accessibility_shortcut_description" msgid="1427049334225166395">"When the shortcut is on, you can press both volume keys for 3 seconds to start an accessibility feature."</string>
+ <string name="accessibility_shortcut_description" msgid="1427049334225166395">"When the shortcut is on, you can press both volume keys for three seconds to start an accessibility feature."</string>
<string name="accessibility_toggle_high_text_contrast_preference_title" msgid="5652244684961877255">"High-contrast text"</string>
<string name="accessibility_toggle_screen_magnification_auto_update_preference_title" msgid="2466317284195934003">"Auto update screen magnification"</string>
<string name="accessibility_toggle_screen_magnification_auto_update_preference_summary" msgid="6625473745911276917">"Update screen magnification on app transitions"</string>
@@ -2083,7 +2085,7 @@
<string name="accessibility_control_timeout_preference_title" msgid="2771808346038759474">"Time to take action"</string>
<string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"Choose how long to show messages that you need to read, but are visible only temporarily.\n\nNot all apps support this setting."</string>
<string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"Choose how long to show messages that ask you to take action, but are visible only temporarily.\n\nNot all apps support this setting."</string>
- <string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"Touch & hold delay"</string>
+ <string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"Touch and hold delay"</string>
<string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"Colour inversion"</string>
<string name="accessibility_display_inversion_preference_subtitle" msgid="69291255322175323">"May affect performance"</string>
<string name="accessibility_autoclick_preference_title" msgid="9164599088410340405">"Dwell timing"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Notification vibration"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Ring vibration"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Touch vibration"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Use service"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Use colour correction"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Use captions"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Use service"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Use colour correction"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Use captions"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Continue"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Hearing aids"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"No hearing aids connected"</string>
@@ -2137,7 +2139,7 @@
<string name="accessibility_vibration_summary_off" msgid="2894044066550518676">"Ring & notification set to off"</string>
<string name="accessibility_vibration_summary_low" msgid="2884160616131878204">"Ring & notification set to low"</string>
<string name="accessibility_vibration_summary_medium" msgid="3141272492346527298">"Ring & notification set to medium"</string>
- <string name="accessibility_vibration_summary_high" msgid="4188677504368202861">"Ring & notification set to high"</string>
+ <string name="accessibility_vibration_summary_high" msgid="4188677504368202861">"Ring and notification set to high"</string>
<string name="accessibility_vibration_intensity_off" msgid="4427927348723998194">"Off"</string>
<string name="accessibility_vibration_intensity_low" msgid="8250688473513963211">"Low"</string>
<string name="accessibility_vibration_intensity_medium" msgid="2249931147940383011">"Medium"</string>
@@ -2200,7 +2202,7 @@
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> print jobs</item>
<item quantity="one">1 print job</item>
</plurals>
- <string name="print_settings_title" msgid="2886445296786932763">"Printing services"</string>
+ <string name="print_settings_title" msgid="2886445296786932763">"Print services"</string>
<string name="print_no_services_installed" msgid="3387777739528003794">"No services installed"</string>
<string name="print_no_printers_found" msgid="5090925427392294881">"No printers found"</string>
<string name="print_menu_item_settings" msgid="2654804159012579508">"Settings"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Turn on"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Use Battery Saver"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Use Battery Saver"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Turn on automatically"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Never"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"at <xliff:g id="PERCENT">%1$s</xliff:g> battery"</string>
@@ -2933,7 +2935,7 @@
<string name="restriction_menu_reset" msgid="3642252461410370554">"Remove restrictions"</string>
<string name="restriction_menu_change_pin" msgid="592512748243421101">"Change PIN"</string>
<string name="app_notifications_switch_label" msgid="670683308275498821">"Show notifications"</string>
- <string name="help_label" msgid="1296484776243905646">"Help & feedback"</string>
+ <string name="help_label" msgid="1296484776243905646">"Help and feedback"</string>
<string name="support_summary" msgid="3278943815956130740">"Help articles, phone & chat, getting started"</string>
<string name="user_account_title" msgid="2108666882630552859">"Account for content"</string>
<string name="user_picture_title" msgid="6664602422948159123">"Photo ID"</string>
@@ -3940,7 +3942,7 @@
<string name="cell_data_template" msgid="5473177306229738078">"<xliff:g id="AMOUNT">^1</xliff:g> mobile data"</string>
<string name="wifi_data_template" msgid="3146090439147042068">"<xliff:g id="AMOUNT">^1</xliff:g> Wi-Fi data"</string>
<string name="ethernet_data_template" msgid="6414118030827090119">"<xliff:g id="AMOUNT">^1</xliff:g> ethernet data"</string>
- <string name="billing_cycle" msgid="5740717948341713190">"Data warning & limit"</string>
+ <string name="billing_cycle" msgid="5740717948341713190">"Data warning and limit"</string>
<string name="app_usage_cycle" msgid="213483325132959663">"App data usage cycle"</string>
<string name="cell_data_warning" msgid="8902740337286652689">"<xliff:g id="ID_1">^1</xliff:g> data warning"</string>
<string name="cell_data_limit" msgid="3175933829235314233">"<xliff:g id="ID_1">^1</xliff:g> data limit"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"If device is locked, prevent typing replies or other text in notifications"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Default spell checker"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Choose spell checker"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Use spell checker"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Use spellchecker"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Not selected"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(none)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4098,10 +4100,10 @@
<item quantity="one">1 second</item>
</plurals>
<string name="automatic_storage_manager_settings" msgid="2403621409625820182">"Manage storage"</string>
- <string name="automatic_storage_manager_text" msgid="4270379105066667493">"To help free up storage space, storage manager removes backed up photos and videos from your device."</string>
+ <string name="automatic_storage_manager_text" msgid="4270379105066667493">"To help free up storage space, storage manager removes backed-up photos and videos from your device."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Remove photos & videos"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Storage manager"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Use Storage Manager"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Use storage Manager"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatic"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manual"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Free up space now"</string>
@@ -4267,7 +4269,7 @@
<string name="storage_manager_indicator_on" msgid="5295306384982062320">"On"</string>
<string name="install_type_instant" msgid="6248487669862821874">"Instant app"</string>
<string name="automatic_storage_manager_deactivation_warning" msgid="7867793739491286374">"Turn off the storage manager?"</string>
- <string name="storage_movies_tv" msgid="7282484273991655296">"Movie & TV apps"</string>
+ <string name="storage_movies_tv" msgid="7282484273991655296">"Movie and TV apps"</string>
<string name="carrier_provisioning" msgid="3309125279191534469">"Operator Provisioning Info"</string>
<string name="trigger_carrier_provisioning" msgid="6284005970057901477">"Trigger Operator Provisioning"</string>
<string name="zen_suggestion_title" msgid="2134699720214231950">"Update Do Not Disturb"</string>
diff --git a/tests/CarDeveloperOptions/res/values-en-rXC/strings.xml b/tests/CarDeveloperOptions/res/values-en-rXC/strings.xml
index a8c34fd..089ffcb 100644
--- a/tests/CarDeveloperOptions/res/values-en-rXC/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-en-rXC/strings.xml
@@ -368,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Profile info"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Accounts"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Location"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Use location"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Use location"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Off"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">On - <xliff:g id="COUNT_1">%1$d</xliff:g> apps can access location</item>
@@ -836,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Turn on Wi‑Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Use Wi‑Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Use Wi‑Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi‑Fi settings"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Set up & manage wireless access points"</string>
@@ -2095,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Notification vibration"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Ring vibration"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Touch vibration"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Use service"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Use color correction"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Use captions"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Use service"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Use color correction"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Use captions"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Continue"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Hearing aids"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"No hearing aids connected"</string>
@@ -2461,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Turn on"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Use Battery Saver"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Use Battery Saver"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Turn on automatically"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Never"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"at <xliff:g id="PERCENT">%1$s</xliff:g> battery"</string>
@@ -4010,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"If device is locked, prevent typing replies or other text in notifications"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Default spell checker"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Choose spell checker"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Use spell checker"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Use spell checker"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Not selected"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(none)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4103,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"To help free up storage space, storage manager removes backed up photos and videos from your device."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Remove photos & videos"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Storage manager"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Use Storage manager"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Use Storage manager"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatic"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manual"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Free up space now"</string>
diff --git a/tests/CarDeveloperOptions/res/values-es-rUS/arrays.xml b/tests/CarDeveloperOptions/res/values-es-rUS/arrays.xml
index 195115c..490207d 100644
--- a/tests/CarDeveloperOptions/res/values-es-rUS/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-es-rUS/arrays.xml
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"No permitir nunca"</item>
<item msgid="8184570120217958741">"Permitir siempre"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normal"</item>
+ <item msgid="5101233285497327432">"Moderado"</item>
+ <item msgid="1555861583162930714">"Baja"</item>
+ <item msgid="1719683776264798117">"Crítico"</item>
+ <item msgid="1567326459340152525">"Desconocido"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normal"</item>
+ <item msgid="6107138933849816768">"Moderado"</item>
+ <item msgid="182695359839047859">"Baja"</item>
+ <item msgid="8577246509202964244">"Crítico"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Persistente"</item>
<item msgid="167418068739176448">"Actividad principal"</item>
@@ -467,7 +477,7 @@
<item msgid="1008268820118852416">"Tratar como red sin tarifa plana"</item>
</string-array>
<string-array name="wifi_privacy_entries">
- <item msgid="6545683814310036454">"Usar MAC aleatoria (predeterminada)"</item>
+ <item msgid="6545683814310036454">"Usar MAC aleatoria (pred.)"</item>
<item msgid="214234417308375326">"Usar MAC del dispositivo"</item>
</string-array>
<string-array name="wifi_hidden_entries">
diff --git a/tests/CarDeveloperOptions/res/values-es-rUS/strings.xml b/tests/CarDeveloperOptions/res/values-es-rUS/strings.xml
index eacce38..176de20 100644
--- a/tests/CarDeveloperOptions/res/values-es-rUS/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-es-rUS/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Aumenta o reduce el tamaño del texto en pantalla."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Reducir el tamaño"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Aumentar el tamaño"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Texto de muestra"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"El maravilloso mago de Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Capítulo 11: La maravillosa Ciudad Esmeralda de Oz"</string>
@@ -114,7 +113,7 @@
<string name="bluetooth_disconnect_all_profiles" product="device" msgid="4707569949253450208">"Tu dispositivo se desconectará de <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_disconnect_dialog_ok" msgid="4183522987246110145">"Desconectar"</string>
<string name="bluetooth_empty_list_user_restricted" msgid="3616298363281495777">"No tienes permiso para cambiar la configuración de Bluetooth."</string>
- <string name="bluetooth_pairing_pref_title" msgid="2904954138013884029">"Sincronizar dispositivo nuevo"</string>
+ <string name="bluetooth_pairing_pref_title" msgid="2904954138013884029">"Vincular dispositivo nuevo"</string>
<string name="bluetooth_is_visible_message" msgid="6341088682252805612">"Los dispositivos cercanos podrán ver tu <xliff:g id="DEVICE_NAME">%1$s</xliff:g> si está abierta la configuración de Bluetooth."</string>
<string name="bluetooth_footer_mac_message" product="default" msgid="335341476746836260">"Dirección Bluetooth del teléfono: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_footer_mac_message" product="tablet" msgid="6033609611245782463">"Dirección Bluetooth de la tablet: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
@@ -166,7 +165,7 @@
<string name="bluetooth_device_name_summary" msgid="8661066392056595005">"Visible como \"<xliff:g id="DEVICE_NAME">^1</xliff:g>\" para otros dispositivos"</string>
<string name="bluetooth_off_footer" msgid="7658444560543730571">"Activa el Bluetooth para establecer conexión con otros dispositivos."</string>
<string name="bluetooth_paired_device_title" msgid="8361860197780425286">"Tus dispositivos"</string>
- <string name="bluetooth_pairing_page_title" msgid="9053463656712597709">"Sincronizar dispositivo nuevo"</string>
+ <string name="bluetooth_pairing_page_title" msgid="9053463656712597709">"Vincular dispositivo nuevo"</string>
<string name="bluetooth_pref_summary" product="tablet" msgid="3601662966604648212">"Permite que la tablet se comunique con dispositivos Bluetooth cercanos"</string>
<string name="bluetooth_pref_summary" product="device" msgid="2286727776570956969">"Permite que el dispositivo se comunique con dispositivos Bluetooth cercanos"</string>
<string name="bluetooth_pref_summary" product="default" msgid="863659221858781186">"Permite que el teléfono se comunique con dispositivos Bluetooth cercanos"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Datos del perfil"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Cuentas"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Ubicación"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Usar ubicación"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Usar ubicación"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Desactivada"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Activada - <xliff:g id="COUNT_1">%1$d</xliff:g> apps pueden acceder a la ubicación</item>
@@ -407,11 +406,11 @@
<string name="security_settings_face_enroll_introduction_message_setup" msgid="4533297059466270074">"Usa tu rostro para desbloquear el teléfono, autorizar compras o acceder a las apps"</string>
<string name="security_settings_face_enroll_introduction_footer_message" msgid="7764021721107723266"></string>
<string name="security_settings_face_enroll_repeat_title" msgid="2507710348140837875">"Centra el rostro en el círculo"</string>
- <string name="security_settings_face_enroll_enrolling_skip" msgid="4346077260378772613">"Hacerlo más tarde"</string>
+ <string name="security_settings_face_enroll_enrolling_skip" msgid="4346077260378772613">"Más tarde"</string>
<string name="face_add_max" msgid="8870899421165189413">"Puedes agregar hasta <xliff:g id="COUNT">%d</xliff:g> rostros"</string>
<string name="face_intro_error_max" msgid="4024147799079828937">"Agregaste la cantidad máxima permitida de rostros"</string>
<string name="face_intro_error_unknown" msgid="3241592604198351134">"No se pueden agregar más rostros"</string>
- <string name="security_settings_face_enroll_error_dialog_title" msgid="3933492758701563051">"No se completó el registro"</string>
+ <string name="security_settings_face_enroll_error_dialog_title" msgid="3933492758701563051">"No se completó la inscripción"</string>
<string name="security_settings_face_enroll_dialog_ok" msgid="1078348922734845090">"Aceptar"</string>
<string name="security_settings_face_enroll_error_timeout_dialog_message" msgid="4917894418448325405">"Se alcanzó el límite de tiempo para el registro de rostros. Vuelve a intentarlo."</string>
<string name="security_settings_face_enroll_error_generic_dialog_message" msgid="5160473187142616862">"No funcionó el registro de rostros."</string>
@@ -472,7 +471,7 @@
<string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Sigue levantando el dedo para agregar diferentes partes de la huella digital."</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"Se agregó la huella digital"</string>
<string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"Cuando veas este ícono, usa tu huella digital para identificarte o aprobar compras."</string>
- <string name="security_settings_fingerprint_enroll_enrolling_skip" msgid="1473280156532146933">"Hacerlo más tarde"</string>
+ <string name="security_settings_fingerprint_enroll_enrolling_skip" msgid="1473280156532146933">"Más tarde"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_title" msgid="2816424026528101690">"¿Omitir configuración de huella digital?"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_message" msgid="8139299964344809780">"Decidiste usar la huella digital como una de las formas para desbloquear el teléfono. Si omites este paso, tendrás que configurarla más tarde. La configuración tarda un minuto aproximadamente."</string>
<string name="fingerprint_lock_screen_setup_skip_dialog_text" product="tablet" msgid="1384438077720821127">"Protege la tablet con una opción de bloqueo de pantalla para que nadie pueda usarla si la pierdes o te la roban. Además, tienes que establecer una opción de bloqueo de pantalla para configurar la huella digital. Presiona Cancelar y, luego, establece un PIN o elige otra opción de bloqueo de pantalla."</string>
@@ -488,8 +487,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="4111289529758845926">"Listo"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"Ese no es el sensor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"Toca el sensor en la parte posterior del teléfono con el dedo índice."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"No se completó el registro"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Se alcanzó el límite de tiempo para el registro de huellas digitales. Vuelve a intentarlo."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"No se completó la inscripción"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Se alcanzó el límite de tiempo para la inscripción de huellas digitales. Vuelve a intentarlo."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"El registro de huellas digitales no funcionó. Vuelve a intentarlo o usa otro dedo."</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"Agregar otra huella digital"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"Siguiente"</string>
@@ -827,7 +826,7 @@
<string name="nfc_disclaimer_title" msgid="4860231267351602970">"Activa NFC"</string>
<string name="nfc_disclaimer_content" msgid="3066113577854565782">"NFC intercambia datos entre este dispositivo y otras orientaciones o dispositivos cercanos, como terminales de pago, lectores de acceso o etiquetas."</string>
<string name="nfc_secure_settings_title" msgid="5153751163174916581">"Proteger NFC"</string>
- <string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"Permitir uso de pagos NFC y Transit solo cuando la pantalla está desbloqueada"</string>
+ <string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"Permitir el uso de NFC en pagos y transporte público solo cuando la pantalla está desbloqueada"</string>
<string name="android_beam_settings_title" msgid="3083436415873738389">"Android Beam"</string>
<string name="android_beam_on_summary" msgid="8068287225180474199">"Listo para transmitir contenido de aplicaciones por NFC"</string>
<string name="android_beam_off_summary" msgid="7365818039159364600">"Desactivada"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Activar Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Usar Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Usar Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Configuración de Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Configurar y administrar los puntos de acceso de teléfonos inalámbricos"</string>
@@ -889,7 +888,7 @@
<string name="wifi_menu_remember" msgid="717257200269700641">"Recordar red"</string>
<string name="wifi_menu_forget" msgid="7561140554450163075">"Olvidar red"</string>
<string name="wifi_menu_modify" msgid="4080178040721021101">"Modificar red"</string>
- <string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"Para ver las redes disponibles, activa Wi-Fi."</string>
+ <string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"Para ver las redes disponibles, activa el Wi-Fi."</string>
<string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"Buscando redes Wi-Fi…"</string>
<string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"No tienes permiso para cambiar la red Wi‑Fi."</string>
<string name="wifi_more" msgid="3538241640407382185">"Más"</string>
@@ -906,11 +905,11 @@
<string name="wifi_ssid_hint" msgid="5010024648106585165">"Ingresa el SSID"</string>
<string name="wifi_security" msgid="9136702039496152831">"Seguridad"</string>
<string name="wifi_hidden_network" msgid="6647772204699776833">"Red oculta"</string>
- <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Si tu router no emite un ID de red, pero quieres conectarte a la red en el futuro, configúrala para que esté oculta.\n\nEs posible que esta acción suponga un riesgo de seguridad, ya que tu teléfono emitirá su señal de forma regular para buscar la red.\n\nSi configuras la red para que esté oculta, no se modificarán los ajustes del router."</string>
+ <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Si el router no emite un ID de red, pero quieres conectarte a la red en el futuro, configúrala para que esté oculta.\n\nEs posible que esta acción implique riesgos de seguridad porque el teléfono emitirá la señal regularmente para buscar la red.\n\nSi configuras la red para que esté oculta, no se modificarán los ajustes del router."</string>
<string name="wifi_signal" msgid="696548364467704808">"Potencia de la señal"</string>
<string name="wifi_status" msgid="3439931558930689940">"Estado"</string>
- <string name="tx_wifi_speed" msgid="2571810085003261073">"Transmitir velocidad de vínculo"</string>
- <string name="rx_wifi_speed" msgid="7392873246110937187">"Recibir velocidad de vínculo"</string>
+ <string name="tx_wifi_speed" msgid="2571810085003261073">"Velocidad enlace de transmisión"</string>
+ <string name="rx_wifi_speed" msgid="7392873246110937187">"Velocidad enlace de recepción"</string>
<string name="wifi_frequency" msgid="6132852924995724246">"Frecuencia"</string>
<string name="wifi_ip_address" msgid="5572539114989914831">"Dirección IP"</string>
<string name="passpoint_label" msgid="7429247462404128615">"Se guardó mediante"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Móvil"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Si no hay ninguna red Wi-Fi disponible, usa una red móvil"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Si la red móvil no está disponible, usa Wi-Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Llamar mediante Wi-Fi. La llamada finalizará si se pierde la conexión."</string>
@@ -1584,7 +1586,7 @@
<string name="master_clear_title" msgid="1560712943955904673">"Borrar todos los datos (restablecer la configuración de fábrica)"</string>
<string name="master_clear_short_title" msgid="919098101581335101">"Borrar todos los datos"</string>
<string name="master_clear_desc" product="tablet" msgid="3432373610755760899">"Esta acción borrará todos los datos del "<b>"almacenamiento interno"</b>" de tu tablet, como\n\n"<li>"Tu Cuenta de Google"</li>\n<li>"Los datos y la configuración del sistema y de las apps"</li>\n<li>"Las apps descargadas"</li></string>
- <string name="master_clear_desc" product="default" msgid="8765543541962866697">"Esta acción borrará todos los datos del "<b>"almacenamiento interno"</b>" de tu teléfono, como\n\n"<li>"Tu Cuenta de Google"</li>\n<li>"Los datos y la configuración del sistema y de las apps"</li>\n<li>"Las apps descargadas"</li></string>
+ <string name="master_clear_desc" product="default" msgid="8765543541962866697">"Se borrarán todos los datos del "<b>"almacenamiento interno"</b>" del teléfono, por ejemplo:\n\n"<li>"Tu Cuenta de Google"</li>\n<li>"Los datos y la configuración del sistema y de las apps"</li>\n<li>"Las apps descargadas"</li></string>
<string name="master_clear_accounts" product="default" msgid="3432884235445405376">\n\n"Accediste a las siguientes cuentas:\n"</string>
<string name="master_clear_other_users_present" product="default" msgid="5993259656117566767">\n\n"Hay otros usuarios presentes en este dispositivo.\n"</string>
<string name="master_clear_desc_also_erases_external" msgid="3947303501615091903"><li>"Música"</li>\n<li>"Fotos"</li>\n<li>"Otros datos de usuario"</li></string>
@@ -2053,7 +2055,7 @@
<string name="accessibility_screen_magnification_gestures_title" msgid="9199287875401817974">"Ampliar presionando tres veces"</string>
<string name="accessibility_screen_magnification_navbar_title" msgid="400655612610761242">"Ampliar con el botón"</string>
<string name="accessibility_screen_magnification_state_navbar_gesture" msgid="1863831350878995600">"Ampliar con el botón y al presionar tres veces"</string>
- <string name="accessibility_preference_magnification_summary" msgid="753307741814376312">"Ampliar la pantalla"</string>
+ <string name="accessibility_preference_magnification_summary" msgid="753307741814376312">"Amplía la pantalla"</string>
<string name="accessibility_screen_magnification_short_summary" msgid="5698545174944494486">"Presiona tres veces para ampliar"</string>
<string name="accessibility_screen_magnification_navbar_short_summary" msgid="5418767043532322397">"Presiona un botón para ampliar"</string>
<string name="accessibility_screen_magnification_summary" msgid="3363006902079431772"><b>"Para ampliar"</b>", presiona la pantalla 3 veces rápidamente \n"<ul><li>"Arrastra 2 o más dedos para desplazarte."</li>\n<li>"Pellizca con 2 o más dedos para ajustar el zoom."</li></ul>\n\n<b>"Para hacer zoom de manera temporal"</b>", presiona la pantalla 3 veces rápidamente y mantén presionado la última vez.\n"<ul><li>"Arrastra el dedo para moverte por la pantalla."</li>\n<li>"Levanta el dedo para alejar la imagen."</li></ul>\n\n"No se puede ampliar el teclado ni la barra de navegación."</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Vibración de las notificaciones"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Vibración del tono"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Vibración táctil"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Usar el servicio"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Usar la corrección de color"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Usar subtítulos"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Usar el servicio"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Usar la corrección de colores"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Usar subtítulos"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Continuar"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Audífonos"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"No hay audífonos conectados"</string>
@@ -2315,9 +2317,9 @@
<string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"Esta app podrá usar la batería en segundo plano. La batería podría agotarse antes de lo esperado."</string>
<string name="battery_tip_unrestrict_app_dialog_ok" msgid="9154938931448151479">"Quitar"</string>
<string name="battery_tip_unrestrict_app_dialog_cancel" msgid="7331148618292397166">"Cancelar"</string>
- <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"La cantidad de batería que usan tus apps es normal. Si consumen demasiada batería, el teléfono te recomendará acciones.\n\nSi tienes poca batería, también puedes activar el Ahorro de batería."</string>
- <string name="battery_tip_dialog_summary_message" product="tablet" msgid="1721081030632329647">"La cantidad de batería que usan tus apps es normal. Si consumen demasiada batería, la tablet te recomendará acciones.\n\nSi tienes poca batería, también puedes activar el Ahorro de batería."</string>
- <string name="battery_tip_dialog_summary_message" product="device" msgid="146872407040848465">"La cantidad de batería que usan tus apps es normal. Si consumen demasiada batería, el dispositivo te recomendará acciones.\n\nSi tienes poca batería, también puedes activar el Ahorro de batería."</string>
+ <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"Tus apps consumen una cantidad normal de batería. Si consumen demasiada batería, el teléfono te recomendará acciones.\n\nSi tienes poca batería, también puedes activar el Ahorro de batería."</string>
+ <string name="battery_tip_dialog_summary_message" product="tablet" msgid="1721081030632329647">"Tus apps consumen una cantidad normal de batería. Si consumen demasiada batería, la tablet te recomendará acciones.\n\nSi tienes poca batería, también puedes activar el Ahorro de batería."</string>
+ <string name="battery_tip_dialog_summary_message" product="device" msgid="146872407040848465">"Tus apps consumen una cantidad normal de batería. Si consumen demasiada batería, el dispositivo te recomendará acciones.\n\nSi tienes poca batería, también puedes activar el Ahorro de batería."</string>
<string name="smart_battery_manager_title" msgid="5744035036663849515">"Administrador de batería"</string>
<string name="smart_battery_title" msgid="4919670408532804351">"Administra apps automáticamente"</string>
<string name="smart_battery_summary" msgid="640027046471198174">"Limitar el consumo de batería de las apps que no uses con frecuencia"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Activar"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Usar la función Ahorro de batería"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Usar la función Ahorro de batería"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Activar automáticamente"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Nunca"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"con <xliff:g id="PERCENT">%1$s</xliff:g> de batería"</string>
@@ -2529,7 +2531,7 @@
<string name="credentials_reset_summary" msgid="7622528359699428555">"Quitar todos los certificados"</string>
<string name="trusted_credentials" msgid="6989242522455395200">"Credenciales de confianza"</string>
<string name="trusted_credentials_summary" msgid="7411781319056251582">"Mostrar certificados de CA de confianza"</string>
- <string name="user_credentials" msgid="8365731467650306757">"Credenciales del usuario"</string>
+ <string name="user_credentials" msgid="8365731467650306757">"Credenciales de usuario"</string>
<string name="user_credentials_summary" msgid="7350223899317423252">"Ver y modificar las credenciales guardadas"</string>
<string name="advanced_security_title" msgid="286883005673855845">"Configuración avanzada"</string>
<string name="credential_storage_type" msgid="2585337320206095255">"Tipo de almacenamiento"</string>
@@ -2754,7 +2756,7 @@
<string name="vpn_username" msgid="5357878823189445042">"Nombre de usuario"</string>
<string name="vpn_password" msgid="5325943601523662246">"Contraseña"</string>
<string name="vpn_save_login" msgid="6215503139606646915">"Guardar información de la cuenta"</string>
- <string name="vpn_not_used" msgid="2889520789132261454">"(no se utiliza)"</string>
+ <string name="vpn_not_used" msgid="2889520789132261454">"(No se utiliza)"</string>
<string name="vpn_no_ca_cert" msgid="486605757354800838">"(no verificar el servidor)"</string>
<string name="vpn_no_server_cert" msgid="679622228649855629">"(recibido desde el servidor)"</string>
<string name="vpn_always_on_invalid_reason_type" msgid="165810330614905489">"Este tipo de VPN no puede permanecer conectada todo el tiempo"</string>
@@ -3438,7 +3440,7 @@
<string name="zen_mode_add_event_rule" msgid="1398181272397489506">"Agregar programa de eventos"</string>
<string name="zen_mode_add_time_rule" msgid="5999467757140524729">"Agregar programa de tiempo"</string>
<string name="zen_mode_delete_rule" msgid="2292933835997203801">"Borrar programa"</string>
- <string name="zen_mode_choose_rule_type" msgid="8877138307319450306">"Elegir tipo de programa"</string>
+ <string name="zen_mode_choose_rule_type" msgid="8877138307319450306">"Elegir el tipo de programa"</string>
<string name="zen_mode_delete_rule_confirmation" msgid="2646596466259025978">"¿Quieres borrar la regla \"<xliff:g id="RULE">%1$s</xliff:g>\"?"</string>
<string name="zen_mode_delete_rule_button" msgid="611058106279881991">"Borrar"</string>
<string name="zen_mode_rule_type_unknown" msgid="2819480113355191421">"Desconocido"</string>
@@ -3707,7 +3709,7 @@
<string name="high_power_off" msgid="5906679734326490426">"Optimizando el uso de la batería"</string>
<string name="high_power_system" msgid="739584574711292753">"Optimización de la batería no disponible"</string>
<string name="high_power_desc" msgid="333756885680362741">"No se aplica la optimización de la batería, por lo que se puede agotar más rápido."</string>
- <string name="high_power_prompt_title" msgid="2805745781720454052">"¿Deseas permitir que la app se ejecute siempre en segundo plano?"</string>
+ <string name="high_power_prompt_title" msgid="2805745781720454052">"¿Permitir que la app se ejecute siempre en segundo plano?"</string>
<string name="high_power_prompt_body" msgid="8067395096053552289">"Si permites que <xliff:g id="APP_NAME">%1$s</xliff:g> se ejecute siempre en segundo plano, es posible que se reduzca la duración de la batería. \n\nPuedes cambiar esta opción más tarde en Configuración > Apps y notificaciones."</string>
<string name="battery_summary" msgid="4345690800899981339">"Se usó el <xliff:g id="PERCENTAGE">%1$s</xliff:g> desde la última carga completa"</string>
<string name="battery_power_management" msgid="2853925857548647969">"Administración de energía"</string>
@@ -3800,7 +3802,7 @@
<string name="system_alert_window_apps_title" msgid="9188448296493699566">"Aplicaciones"</string>
<string name="system_alert_window_access_title" msgid="5187343732185369675">"Mostrar sobre otras apps"</string>
<string name="permit_draw_overlay" msgid="9039092257052422344">"Permitir mostrar sobre otras apps"</string>
- <string name="allow_overlay_description" msgid="6669524816705082807">"Permite que esta app se muestre sobre otras en uso. Es posible que interfiera con el uso de esas apps o cambie afecte su apariencia o el comportamiento."</string>
+ <string name="allow_overlay_description" msgid="6669524816705082807">"Permite que esta app se muestre sobre otras en uso. Es posible que interfiera con el uso de esas apps, afecte su apariencia o modifique el comportamiento."</string>
<string name="keywords_vr_listener" msgid="5312633527788917750">"rv, procesador de realidad virtual, estéreo, servicio de ayuda"</string>
<string name="keywords_system_alert_window" msgid="3936658600272194599">"sistema, alerta, ventana, cuadro de diálogo, mostrar sobre otras apps"</string>
<string name="overlay_settings" msgid="3325154759946433666">"Mostrar sobre otras apps"</string>
@@ -4006,7 +4008,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Si el dispositivo está bloqueado, evita la escritura de respuestas y otros textos en las notificaciones"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Corrector predeterminado"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Elegir corrector ortográfico"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Usar el corrector ortográfico"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Usar el corrector ortográfico"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Sin seleccionar"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(ninguno)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4099,7 +4101,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"El administrador de almacenamiento quita de tu dispositivo las fotos y los videos con copia de seguridad para liberar espacio de almacenamiento."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Quitar fotos y videos"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Administrador de almacenamiento"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Usar el Administrador de almacenamiento"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Usar el Administrador de almacenamiento"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automático"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manual"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Liberar espacio ahora"</string>
diff --git a/tests/CarDeveloperOptions/res/values-es/arrays.xml b/tests/CarDeveloperOptions/res/values-es/arrays.xml
index d728216..81d4f62 100644
--- a/tests/CarDeveloperOptions/res/values-es/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-es/arrays.xml
@@ -71,7 +71,7 @@
<item msgid="5597394826455877834">"Conectando…"</item>
<item msgid="5848277343965362748">"Autenticando..."</item>
<item msgid="3391238031431440676">"Obteniendo dirección IP…"</item>
- <item msgid="5257597310494000224">"Conectada"</item>
+ <item msgid="5257597310494000224">"Conectado"</item>
<item msgid="8472497592913050396">"Suspendido"</item>
<item msgid="1228072488815999109">"Desconectando…"</item>
<item msgid="7253087004422991731">"Desconectado"</item>
@@ -101,7 +101,7 @@
<item msgid="4526848028011846710">"PIN del dispositivo"</item>
</string-array>
<string-array name="wifi_p2p_status">
- <item msgid="8741947238021758201">"Conectada"</item>
+ <item msgid="8741947238021758201">"Conectado"</item>
<item msgid="983792611851499732">"Invitado"</item>
<item msgid="5438273405428201793">"Con error"</item>
<item msgid="4646663015449312554">"Disponible"</item>
@@ -170,7 +170,7 @@
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"Ninguna"</item>
<item msgid="1464741437353223198">"Manual"</item>
- <item msgid="5793600062487886090">"Proxy autoconfigurado"</item>
+ <item msgid="5793600062487886090">"Proxy configurado automáticamente"</item>
</string-array>
<string-array name="apn_auth_entries">
<item msgid="7099647881902405997">"Ninguna"</item>
@@ -257,7 +257,7 @@
<item msgid="5420704980305018295">"volumen de la voz"</item>
<item msgid="5797363115508970204">"volumen del tono"</item>
<item msgid="8233154098550715999">"volumen de multimedia"</item>
- <item msgid="5196715605078153950">"volumen de la alarma"</item>
+ <item msgid="5196715605078153950">"volumen de alarma"</item>
<item msgid="394030698764284577">"volumen de las notificaciones"</item>
<item msgid="8952898972491680178">"volumen de Bluetooth"</item>
<item msgid="8506227454543690851">"mantener activo"</item>
@@ -324,7 +324,7 @@
<item msgid="1600379420669104929">"Volumen de la voz"</item>
<item msgid="6296768210470214866">"Volumen del tono"</item>
<item msgid="510690696071629241">"Volumen de multimedia"</item>
- <item msgid="406861638631430109">"Volumen de la alarma"</item>
+ <item msgid="406861638631430109">"Volumen de alarma"</item>
<item msgid="4715864795872233884">"Volumen de notificaciones"</item>
<item msgid="2311478519251301183">"Volumen de Bluetooth"</item>
<item msgid="5133991377896747027">"Activo"</item>
@@ -414,7 +414,7 @@
<item msgid="5408915841694583740">"Desconectado"</item>
<item msgid="8754480102834556765">"Iniciando..."</item>
<item msgid="3351334355574270250">"Conectando…"</item>
- <item msgid="8303882153995748352">"Conectada"</item>
+ <item msgid="8303882153995748352">"Conectado"</item>
<item msgid="9135049670787351881">"Tiempo de espera"</item>
<item msgid="2124868417182583926">"Con error"</item>
</string-array>
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"No permitir nunca"</item>
<item msgid="8184570120217958741">"Permitir siempre"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normal"</item>
+ <item msgid="5101233285497327432">"Moderada"</item>
+ <item msgid="1555861583162930714">"Baja"</item>
+ <item msgid="1719683776264798117">"Crítico"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normal"</item>
+ <item msgid="6107138933849816768">"Moderado"</item>
+ <item msgid="182695359839047859">"Baja"</item>
+ <item msgid="8577246509202964244">"Crítico"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Persistente"</item>
<item msgid="167418068739176448">"Actividad principal"</item>
@@ -446,14 +456,14 @@
<item msgid="3151827842194201728">"Verde azulado"</item>
<item msgid="3228505970082457852">"Azul"</item>
<item msgid="6590260735734795647">"Índigo"</item>
- <item msgid="3521763377357218577">"Violeta"</item>
+ <item msgid="3521763377357218577">"Morado"</item>
<item msgid="5932337981182999919">"Rosa"</item>
<item msgid="5642914536624000094">"Rojo"</item>
</string-array>
<string-array name="automatic_storage_management_days">
- <item msgid="2860293514533486236">"Más de 30 días de antigüedad"</item>
- <item msgid="8699273238891265610">"Más de 60 días de antigüedad"</item>
- <item msgid="8346279419423837266">"Más de 90 días de antigüedad"</item>
+ <item msgid="2860293514533486236">"De más de 30 días de antigüedad"</item>
+ <item msgid="8699273238891265610">"De más de 60 días de antigüedad"</item>
+ <item msgid="8346279419423837266">"De más de 90 días de antigüedad"</item>
</string-array>
<!-- no translation found for swipe_direction_titles:0 (6583090603341402282) -->
<!-- no translation found for swipe_direction_titles:1 (4965730704403236310) -->
diff --git a/tests/CarDeveloperOptions/res/values-es/strings.xml b/tests/CarDeveloperOptions/res/values-es/strings.xml
index fdbbdf2..e8566b4 100644
--- a/tests/CarDeveloperOptions/res/values-es/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-es/strings.xml
@@ -23,8 +23,8 @@
<string name="deny" msgid="3998166389989144025">"Denegar"</string>
<string name="device_info_default" msgid="1548919563979154348">"Desconocido"</string>
<plurals name="show_dev_countdown" formatted="false" msgid="3953785659137161981">
- <item quantity="other">Solo te quedan <xliff:g id="STEP_COUNT_1">%1$d</xliff:g> pasos de ser un desarrollador.</item>
- <item quantity="one">Solo te queda <xliff:g id="STEP_COUNT_0">%1$d</xliff:g> paso de ser un desarrollador.</item>
+ <item quantity="other">Estás a <xliff:g id="STEP_COUNT_1">%1$d</xliff:g> pasos de ser desarrollador.</item>
+ <item quantity="one">Estás a <xliff:g id="STEP_COUNT_0">%1$d</xliff:g> paso de ser desarrollador.</item>
</plurals>
<string name="show_dev_on" msgid="9075712234786224065">"¡Ahora están activadas las opciones para desarrolladores!"</string>
<string name="show_dev_already" msgid="7665948832405148689">"Las opciones para desarrolladores ya están activadas."</string>
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Aumenta o disminuye el tamaño del texto de la pantalla."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Reducir el tamaño"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Aumentar el tamaño"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Texto de ejemplo"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"El maravilloso mago de Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Capítulo 11: La maravillosa Ciudad Esmeralda de Oz"</string>
@@ -128,7 +127,7 @@
<string name="bluetooth_notif_title" msgid="5090288898529286011">"Solicitud de vinculación"</string>
<string name="bluetooth_notif_message" msgid="6612367890895077938">"Toca para vincular con <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_show_received_files" msgid="5060846395852236652">"Archivos recibidos"</string>
- <string name="bluetooth_show_files_received_via_bluetooth" msgid="1699095577431389560">"Archivos recibidos (Bluetooth)"</string>
+ <string name="bluetooth_show_files_received_via_bluetooth" msgid="1699095577431389560">"Archivos recibidos por Bluetooth"</string>
<string name="device_picker" msgid="8345264486071697705">"Seleccionar dispositivo Bluetooth"</string>
<string name="bluetooth_ask_enablement" msgid="8716802066127746062">"<xliff:g id="APP_NAME">%1$s</xliff:g> quiere activar el Bluetooth"</string>
<string name="bluetooth_ask_disablement" msgid="7125319551097350783">"<xliff:g id="APP_NAME">%1$s</xliff:g> quiere desactivar el Bluetooth"</string>
@@ -197,7 +196,7 @@
<string name="proxy_settings_title" msgid="6014901859338211713">"Proxy"</string>
<string name="proxy_clear_text" msgid="498317431076294101">"Borrar"</string>
<string name="proxy_port_label" msgid="8285157632538848509">"Puerto del proxy"</string>
- <string name="proxy_exclusionlist_label" msgid="8179084955547941904">"Saltarproxy para"</string>
+ <string name="proxy_exclusionlist_label" msgid="8179084955547941904">"Saltar proxy para"</string>
<string name="proxy_defaultView_text" msgid="5785775257042403261">"Restaurar valores predeterminados"</string>
<string name="proxy_action_text" msgid="814511434843981413">"Listo"</string>
<string name="proxy_hostname_label" msgid="6798891831427287847">"Nombre de host del proxy"</string>
@@ -209,7 +208,7 @@
<string name="proxy_error_empty_host_set_port" msgid="8471455809508588255">"El campo de puerto debe estar vacío si el campo de host también lo está."</string>
<string name="proxy_error_invalid_port" msgid="4046559920586100637">"El puerto que has introducido no es válido."</string>
<string name="proxy_warning_limited_support" msgid="9026539134219095768">"El navegador utiliza el proxy HTTP, pero otras aplicaciones no pueden usarlo."</string>
- <string name="proxy_url_title" msgid="882042361706435904">"URL PAC "</string>
+ <string name="proxy_url_title" msgid="882042361706435904">"URL de archivo PAC "</string>
<string name="radio_info_dl_kbps" msgid="2903778264453410272">"Ancho de banda de bajada (Kbps):"</string>
<string name="radio_info_ul_kbps" msgid="3802245899811732716">"Ancho de banda de subida (Kbps):"</string>
<string name="radio_info_signal_location_label" msgid="6788144906873498013">"Información sobre la ubicación del teléfono (obsoleto):"</string>
@@ -317,14 +316,14 @@
<string name="roaming_warning" msgid="5488050911277592868">"El coste de este servicio puede ser significativo."</string>
<string name="roaming_warning_multiuser" product="tablet" msgid="7090388691615686893">"Al permitir la itinerancia de datos, los costes de itinerancia que deberás asumir pueden ser significativos.\n\nEsta configuración afecta a todos los usuarios de este tablet."</string>
<string name="roaming_warning_multiuser" product="default" msgid="6999819541078827556">"Al permitir la itinerancia de datos, los costes de itinerancia que deberás asumir pueden ser significativos.\n\nEsta configuración afecta a todos los usuarios de este teléfono."</string>
- <string name="roaming_reenable_title" msgid="6985082191178297921">"¿Permitir la itinerancia de datos?"</string>
+ <string name="roaming_reenable_title" msgid="6985082191178297921">"¿Permitir itinerancia de datos?"</string>
<string name="networks" msgid="3073876464102136771">"Selección de operador"</string>
<string name="sum_carrier_select" msgid="8964744180598499121">"Selecciona un operador de red"</string>
<string name="date_and_time_settings_title" msgid="7827088656940910631">"Fecha y hora"</string>
<string name="date_and_time_settings_title_setup_wizard" msgid="1573030770187844365">"Establecer fecha y hora"</string>
<string name="date_and_time_settings_summary" msgid="4617979434474713417">"Establecer fecha, hora, zona horaria y formatos"</string>
- <string name="date_time_auto" msgid="2679132152303750218">"Usar hora de la red"</string>
- <string name="zone_auto_title" msgid="5500880975376882488">"Usar zona horaria proporcionada por la red"</string>
+ <string name="date_time_auto" msgid="2679132152303750218">"Usar la hora proporcionada por la red"</string>
+ <string name="zone_auto_title" msgid="5500880975376882488">"Usar la zona horaria proporcionada por la red"</string>
<string name="date_time_24hour_auto" msgid="7499659679134962547">"Usar la configuración regional predeterminada"</string>
<string name="date_time_24hour_title" msgid="6209923858891621283">"Formato de 24 horas"</string>
<string name="date_time_24hour" msgid="1265706705061608742">"Usar formato de 24 horas"</string>
@@ -356,7 +355,7 @@
<string name="security_enable_widgets_title" msgid="1701510007926738088">"Habilitar widgets"</string>
<string name="security_enable_widgets_disabled_summary" msgid="4408176087132339331">"Inhabilitado por el administrador"</string>
<string name="lockdown_settings_title" msgid="4534779922580115990">"Mostrar opción de bloqueo de seguridad"</string>
- <string name="lockdown_settings_summary" msgid="7270756909878256174">"Mostrar la opción del botón de encendido que desactiva Smart Lock, el desbloqueo con huella digital y las notificaciones en la pantalla de bloqueo"</string>
+ <string name="lockdown_settings_summary" msgid="7270756909878256174">"Muestra una opción al pulsar el botón de encendido que desactiva Smart Lock, el desbloqueo con huella digital y las notificaciones en la pantalla de bloqueo"</string>
<string name="trust_agents_extend_unlock_title" msgid="3582017561316089951">"Los agentes de confianza solo extienden el desbloqueo"</string>
<string name="trust_agents_extend_unlock_summary" msgid="3543997596586078084">"Si se habilita esta opción, los agentes de confianza mantendrán el dispositivo desbloqueado durante más tiempo, pero ya no podrán desbloquear un dispositivo bloqueado"</string>
<string name="trust_lost_locks_screen_title" msgid="3094736590690459372">"Bloquear pantalla si no hay confianza"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Información del perfil"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Cuentas"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Ubicación"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Utilizar ubicación"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Usar ubicación"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Desactivada"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Activada: <xliff:g id="COUNT_1">%1$d</xliff:g> aplicaciones tienen acceso a la ubicación</item>
@@ -413,20 +412,20 @@
<string name="face_intro_error_unknown" msgid="3241592604198351134">"No se pueden añadir más caras"</string>
<string name="security_settings_face_enroll_error_dialog_title" msgid="3933492758701563051">"Registro no completado"</string>
<string name="security_settings_face_enroll_dialog_ok" msgid="1078348922734845090">"Aceptar"</string>
- <string name="security_settings_face_enroll_error_timeout_dialog_message" msgid="4917894418448325405">"Se ha alcanzado el tiempo de registro de la cara. Vuelve a intentarlo."</string>
+ <string name="security_settings_face_enroll_error_timeout_dialog_message" msgid="4917894418448325405">"Se ha alcanzado el tiempo límite de registro de la cara. Vuelve a intentarlo."</string>
<string name="security_settings_face_enroll_error_generic_dialog_message" msgid="5160473187142616862">"El registro de la cara no ha funcionado."</string>
<string name="security_settings_face_enroll_finish_title" msgid="6800717857394410769">"Ya has terminado. Todo perfecto."</string>
<string name="security_settings_face_enroll_done" msgid="5409739233373490971">"Listo"</string>
<string name="security_settings_face_settings_use_face_category" msgid="1586532139528115416">"Usar la cara para"</string>
<string name="security_settings_face_settings_use_face_unlock_phone" msgid="318274519126401671">"Desbloq. dispositivo"</string>
- <string name="security_settings_face_settings_use_face_for_apps" msgid="5479369083370664351">"Inicio de sesión y pagos"</string>
+ <string name="security_settings_face_settings_use_face_for_apps" msgid="5479369083370664351">"Iniciar sesión y pagos"</string>
<string name="security_settings_face_settings_require_attention" msgid="2755140150841557225">"Ojos abiertos para desbloquear"</string>
<string name="security_settings_face_settings_require_attention_details" msgid="2557060433599942587">"Cuando uses la autenticación facial, abre los ojos"</string>
<string name="security_settings_face_settings_require_confirmation" msgid="7312024271060416438">"Pedir confirmación siempre"</string>
<string name="security_settings_face_settings_require_confirmation_details" msgid="8740564864091803429">"Pedir confirmación siempre al autenticarse en aplicaciones"</string>
<string name="security_settings_face_settings_remove_face_data" msgid="2821359954483136239">"Eliminar datos faciales"</string>
<string name="security_settings_face_settings_footer" msgid="4627175759990550715">"Puedes desbloquear el dispositivo y acceder a tus aplicaciones mediante el reconocimiento facial. "<annotation id="url">"Más información"</annotation></string>
- <string name="security_settings_face_settings_remove_dialog_title" msgid="5675319895815271094">"¿Quieres eliminar los datos faciales?"</string>
+ <string name="security_settings_face_settings_remove_dialog_title" msgid="5675319895815271094">"¿Eliminar los datos faciales?"</string>
<string name="security_settings_face_settings_remove_dialog_details" msgid="3754494807169276107">"Los datos grabados de la función Desbloqueo facial se eliminarán de manera segura y permanente. Una vez que se hayan eliminado, necesitarás el PIN, patrón o contraseña para desbloquear el teléfono, iniciar sesión en aplicaciones y confirmar pagos."</string>
<string name="security_settings_fingerprint_preference_title" msgid="4177132225930582928">"Huella digital"</string>
<string name="fingerprint_manage_category_title" msgid="1463406696801542090">"Administrar huellas"</string>
@@ -469,7 +468,7 @@
<string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"Toca el sensor"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Pon el dedo en el sensor y levántalo cuando notes una vibración"</string>
<string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"Levanta el dedo y toca de nuevo"</string>
- <string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Junta y separa el dedo varias veces para añadir las distintas partes de tu huella digital"</string>
+ <string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Sigue levantando el dedo para añadir diferentes partes de tu huella digital"</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"Huella digital añadida"</string>
<string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"Cuando veas este icono, utiliza tu huella digital para identificarte o aprobar compras"</string>
<string name="security_settings_fingerprint_enroll_enrolling_skip" msgid="1473280156532146933">"Hacerlo más adelante"</string>
@@ -489,7 +488,7 @@
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"¡Vaya! Ese no es el sensor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"Toca el sensor situado detrás del teléfono con el dedo índice."</string>
<string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"Registro no completado"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Se ha alcanzado el tiempo de registro de la huella digital. Vuelve a intentarlo."</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Se ha alcanzado el tiempo límite de registro de la huella digital. Vuelve a intentarlo."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"El registro de la huella digital no se ha realizado correctamente. Vuelve a intentarlo o utiliza otro dedo."</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"Añadir otra"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"Siguiente"</string>
@@ -501,7 +500,7 @@
<string name="fingerprint_intro_error_unknown" msgid="3975674268256524015">"No se pueden añadir más huellas digitales"</string>
<string name="fingerprint_last_delete_title" msgid="3104596858161269635">"¿Quitar todas las huellas?"</string>
<string name="fingerprint_delete_title" msgid="3120894112324235536">"Eliminar \"<xliff:g id="FINGERPRINT_ID">%1$s</xliff:g>\""</string>
- <string name="fingerprint_delete_message" msgid="5895802741486967970">"¿Quieres eliminar esta huella digital?"</string>
+ <string name="fingerprint_delete_message" msgid="5895802741486967970">"¿Eliminar esta huella digital?"</string>
<string name="fingerprint_last_delete_message" msgid="3346252479778971442">"No podrás utilizar tus huellas digitales para desbloquear el teléfono, autorizar compras o iniciar sesión en las aplicaciones"</string>
<string name="fingerprint_last_delete_message_profile_challenge" msgid="5385095150532247025">"No puedes utilizar tus huellas digitales para desbloquear el perfil de trabajo, autorizar compras o iniciar sesión en aplicaciones de trabajo"</string>
<string name="fingerprint_last_delete_confirm" msgid="7984595457589664004">"Sí, quitar"</string>
@@ -535,7 +534,7 @@
<string name="crypt_keeper_data_corrupt_title" msgid="6561535293845985713">"Descifrado incorrecto"</string>
<string name="crypt_keeper_data_corrupt_summary" product="tablet" msgid="7018748502706237323">"La contraseña que has introducido es correcta pero, lamentablemente, tus datos están dañados. \n\nPara seguir utilizando el tablet, debes restablecer el estado de fábrica. Al configurar el dispositivo después de este proceso, podrás restaurar los datos incluidos en la copia de seguridad de tu cuenta de Google."</string>
<string name="crypt_keeper_data_corrupt_summary" product="default" msgid="5798580588985326937">"La contraseña que has introducido es correcta pero, lamentablemente, tus datos están dañados. \n\nPara seguir utilizando el teléfono, debes restablecer el estado de fábrica. Al configurar el dispositivo después de este proceso, podrás restaurar los datos incluidos en la copia de seguridad de tu cuenta de Google."</string>
- <string name="crypt_keeper_switch_input_method" msgid="4744137470890459582">"Cambiar método de entrada"</string>
+ <string name="crypt_keeper_switch_input_method" msgid="4744137470890459582">"Cambiar método de introducción"</string>
<string name="suggested_lock_settings_title" msgid="1518155558803371661">"Protege tu teléfono"</string>
<string name="suggested_lock_settings_summary" product="tablet" msgid="1861066918594412519">"Añade bloqueo de pantalla para proteger el tablet"</string>
<string name="suggested_lock_settings_summary" product="device" msgid="7127114417250029182">"Añade bloqueo de pantalla para proteger el dispositivo"</string>
@@ -595,7 +594,7 @@
<string name="unlock_setup_wizard_fingerprint_details" msgid="6515136915205473675">"Una vez que hayas configurado un bloqueo de pantalla, podrás configurar también la huella digital en Ajustes > Seguridad."</string>
<string name="unlock_disable_lock_title" msgid="3508492427073600294">"Desactivar bloqueo pantalla"</string>
<string name="unlock_disable_frp_warning_title" msgid="5858589970505254193">"¿Quitar protección del dispositivo?"</string>
- <string name="unlock_disable_frp_warning_title_profile" msgid="3814123014295965266">"¿Quieres quitar la protección del perfil?"</string>
+ <string name="unlock_disable_frp_warning_title_profile" msgid="3814123014295965266">"¿Quitar la protección del perfil?"</string>
<string name="unlock_disable_frp_warning_content_pattern" msgid="1843950215687159135">"Las funciones de protección del dispositivo no funcionarán sin tu patrón."</string>
<string name="unlock_disable_frp_warning_content_pattern_fingerprint" msgid="8846957650251741548">"Las funciones de protección del dispositivo no funcionarán sin el patrón.<xliff:g id="EMPTY_LINE">
@@ -764,11 +763,11 @@
<string name="bluetooth_device_context_unpair" msgid="250588431708253041">"Desincronizar"</string>
<string name="bluetooth_device_context_disconnect_unpair" msgid="4519151805677280077">"Desconectar y desincronizar"</string>
<string name="bluetooth_device_context_connect_advanced" msgid="423463405499392444">"Opciones…"</string>
- <string name="bluetooth_menu_advanced" msgid="7566858513372603652">"Ajustes avanzados"</string>
+ <string name="bluetooth_menu_advanced" msgid="7566858513372603652">"Avanzado"</string>
<string name="bluetooth_advanced_titlebar" msgid="6459469494039004784">"Ajustes avanzados de Bluetooth"</string>
- <string name="bluetooth_empty_list_bluetooth_off" msgid="6255367297830430459">"Si se activa el Bluetooth, tu dispositivo se puede comunicar con otros dispositivos con Bluetooth cercanos"</string>
+ <string name="bluetooth_empty_list_bluetooth_off" msgid="6255367297830430459">"Cuando el Bluetooth está activado, tu dispositivo se puede comunicar con otros dispositivos con Bluetooth cercanos"</string>
<string name="bluetooth_scanning_on_info_message" msgid="5460370815156050550">"Si el Bluetooth está activado, el dispositivo se puede comunicar con otros dispositivos Bluetooth cercanos.\n\nPara mejorar la experiencia de uso del dispositivo, las aplicaciones y los servicios pueden seguir buscando dispositivos cercanos en cualquier momento, aunque el Bluetooth esté desactivado. Esta opción se puede utilizar, por ejemplo, para mejorar los servicios y funciones basados en la ubicación, y puedes cambiarla en los "<annotation id="link">"ajustes de búsqueda"</annotation>"."</string>
- <string name="ble_scan_notify_text" msgid="6290170236546386932">"Para mejorar la precisión de la ubicación, los servicios y las aplicaciones del sistema pueden detectar dispositivos Bluetooth aunque esta conexión esté desactivada. Puedes cambiar esta opción en los <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>ajustes de búsqueda<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
+ <string name="ble_scan_notify_text" msgid="6290170236546386932">"Para mejorar la precisión de la ubicación, los servicios y las aplicaciones del sistema pueden seguir detectando dispositivos Bluetooth. Puedes cambiar esta opción en los <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>ajustes de búsqueda de Bluetooth<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
<string name="bluetooth_connect_failed" msgid="1151234676456333786">"No se ha podido establecer conexión. Vuelve a intentarlo."</string>
<string name="device_details_title" msgid="726517818032923222">"Detalles del dispositivo"</string>
<string name="bluetooth_device_mac_address" msgid="5328203122581150405">"Dirección de Bluetooth del dispositivo: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
@@ -827,7 +826,7 @@
<string name="nfc_disclaimer_title" msgid="4860231267351602970">"Activar NFC"</string>
<string name="nfc_disclaimer_content" msgid="3066113577854565782">"La tecnología NFC permite intercambiar datos entre este dispositivo y otros dispositivos u objetivos cercanos, como terminales de pago, lectores de acceso y etiquetas o anuncios interactivos."</string>
<string name="nfc_secure_settings_title" msgid="5153751163174916581">"Proteger NFC"</string>
- <string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"Permitir uso de NFC en pagos y transporte público solo con la pantalla desbloqueada"</string>
+ <string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"Permite usar NFC en pagos y transporte público solo con la pantalla desbloqueada"</string>
<string name="android_beam_settings_title" msgid="3083436415873738389">"Android Beam"</string>
<string name="android_beam_on_summary" msgid="8068287225180474199">"Listo para compartir contenido de aplicaciones por NFC"</string>
<string name="android_beam_off_summary" msgid="7365818039159364600">"Desactivado"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Activar conexión Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Utilizar redes Wi‑Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Usar Wi‑Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Ajustes de Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Configurar y administrar puntos de acceso inalámbricos"</string>
@@ -847,7 +846,7 @@
<string name="wifi_error" msgid="5605801874484465557">"Error"</string>
<string name="wifi_sap_no_channel_error" msgid="6881796988574851628">"Banda de 5 GHz no disponible en este país"</string>
<string name="wifi_in_airplane_mode" msgid="4729571191578262246">"Modo avión"</string>
- <string name="wifi_notify_open_networks" msgid="4782239203624619655">"Notificaciones de redes abiertas"</string>
+ <string name="wifi_notify_open_networks" msgid="4782239203624619655">"Notificar redes abiertas"</string>
<string name="wifi_notify_open_networks_summary" msgid="1383681260705466715">"Recibir una notificación si hay una red pública de alta calidad disponible"</string>
<string name="wifi_wakeup" msgid="4963732992164721548">"Activar Wi-Fi automáticamente"</string>
<string name="wifi_wakeup_summary" msgid="1152699417411690">"La conexión Wi-Fi se volverá a activar automáticamente cerca de las redes de alta calidad guardadas, como la de tu casa"</string>
@@ -862,8 +861,8 @@
<string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"Para usar esta función, selecciona un proveedor de valoración de redes"</string>
<string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"Para usar esta función, selecciona un proveedor de valoración de redes compatible"</string>
<string name="wifi_install_credentials" msgid="5650088113710858289">"Instalar certificados"</string>
- <string name="wifi_scan_notify_text" msgid="7614101215028336927">"Para mejorar la precisión de la ubicación, las aplicaciones y los servicios pueden seguir buscando redes Wi‑Fi en cualquier momento, aunque esta conexión esté desactivada. Esta opción se puede utilizar, por ejemplo, para mejorar los servicios y funciones basados en la ubicación, y puedes cambiarla en los <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>ajustes de búsqueda<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
- <string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"Para mejorar la precisión de la ubicación, activa la búsqueda de redes Wi-Fi en los <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>ajustes de la búsqueda<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
+ <string name="wifi_scan_notify_text" msgid="7614101215028336927">"Para mejorar la precisión de la ubicación, las aplicaciones y los servicios pueden seguir buscando redes Wi‑Fi en cualquier momento incluso si el ajuste de Wi-Fi está desactivado. Esta opción se puede utilizar, por ejemplo, para mejorar los servicios y funciones basados en la ubicación. Puedes cambiar este ajuste en la <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>búsqueda de redes Wi-Fi<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
+ <string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"Para mejorar la precisión de la ubicación, activa la <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>búsqueda de redes Wi-Fi<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
<string name="wifi_scan_notify_remember_choice" msgid="1235445971400237444">"No volver a mostrar"</string>
<string name="wifi_setting_sleep_policy_title" msgid="2120785188625932076">"Usar Wi-Fi en suspensión"</string>
<string name="wifi_setting_on_during_sleep_title" msgid="856670183023402715">"Wi‑Fi activado en suspensión"</string>
@@ -883,7 +882,7 @@
<string name="wifi_menu_more_options" msgid="8318269834264035524">"Más opciones"</string>
<string name="wifi_menu_p2p" msgid="4945665601551289791">"Wi-Fi Direct"</string>
<string name="wifi_menu_scan" msgid="9082691677803181629">"Buscar"</string>
- <string name="wifi_menu_advanced" msgid="5984484498045511072">"Ajustes avanzados"</string>
+ <string name="wifi_menu_advanced" msgid="5984484498045511072">"Avanzado"</string>
<string name="wifi_menu_configure" msgid="52192491120701266">"Configurar"</string>
<string name="wifi_menu_connect" msgid="3984327567173931219">"Conectarse a la red"</string>
<string name="wifi_menu_remember" msgid="717257200269700641">"Recordar red"</string>
@@ -894,11 +893,11 @@
<string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"No tienes permiso para cambiar la red Wi‑Fi."</string>
<string name="wifi_more" msgid="3538241640407382185">"Más"</string>
<string name="wifi_setup_wps" msgid="6730131677695521321">"Configuración automática (WPS)"</string>
- <string name="wifi_settings_scanning_required_title" msgid="3593457187659922490">"¿Quieres activar la búsqueda de redes Wi‑Fi?"</string>
+ <string name="wifi_settings_scanning_required_title" msgid="3593457187659922490">"¿Activar la búsqueda de redes Wi‑Fi?"</string>
<string name="wifi_settings_scanning_required_summary" msgid="7469610959462708782">"Para que la conexión Wi‑Fi se active automáticamente, es necesario activar la búsqueda de redes Wi‑Fi."</string>
<string name="wifi_settings_scanning_required_info" msgid="5913535073390607386">"La búsqueda de redes Wi‑Fi permite que las aplicaciones y los servicios busquen redes Wi‑Fi en cualquier momento aunque la conexión Wi‑Fi esté desactivada. Se utiliza, por ejemplo, para mejorar los servicios y funciones basados en la ubicación."</string>
<string name="wifi_settings_scanning_required_turn_on" msgid="4327570180594277049">"Activar"</string>
- <string name="wifi_settings_scanning_required_enabled" msgid="3336102100425307040">"Se ha activado la búsqueda de redes Wi‑Fi"</string>
+ <string name="wifi_settings_scanning_required_enabled" msgid="3336102100425307040">"Búsqueda de redes Wi‑Fi activada"</string>
<string name="wifi_show_advanced" msgid="8199779277168030597">"Opciones avanzadas"</string>
<string name="wifi_advanced_toggle_description_expanded" msgid="1506697245302596510">"Lista desplegable Opciones Avanzadas. Tócala dos veces para ocultarla."</string>
<string name="wifi_advanced_toggle_description_collapsed" msgid="3014965593695454879">"Lista desplegable Opciones Avanzadas. Tócala dos veces para mostrarla."</string>
@@ -906,18 +905,18 @@
<string name="wifi_ssid_hint" msgid="5010024648106585165">"Introduce el SSID"</string>
<string name="wifi_security" msgid="9136702039496152831">"Seguridad"</string>
<string name="wifi_hidden_network" msgid="6647772204699776833">"Red oculta"</string>
- <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Si tu router no emite ningún identificador de red, pero quieres conectarte más adelante, puedes configurar la red como oculta.\n\nEsto puede suponer un riesgo para la seguridad, ya que el teléfono emitirá la señal de forma regular para buscar la red.\n\nConfigurar la red como oculta no cambiará la configuración del router."</string>
+ <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Si tu router no emite ningún ID de red, pero quieres conectarte a la red más adelante, puedes configurar la red como oculta.\n\nEsto puede suponer un riesgo para la seguridad, ya que el teléfono emitirá la señal de forma habitual para buscar la red.\n\nConfigurar la red como oculta no cambiará la configuración del router."</string>
<string name="wifi_signal" msgid="696548364467704808">"Intensidad de la señal"</string>
<string name="wifi_status" msgid="3439931558930689940">"Estado"</string>
- <string name="tx_wifi_speed" msgid="2571810085003261073">"Transmitir velocidad de enlace"</string>
- <string name="rx_wifi_speed" msgid="7392873246110937187">"Recibir velocidad de enlace"</string>
+ <string name="tx_wifi_speed" msgid="2571810085003261073">"Velocidad de enlace de transmisión"</string>
+ <string name="rx_wifi_speed" msgid="7392873246110937187">"Velocidad de enlace de recepción"</string>
<string name="wifi_frequency" msgid="6132852924995724246">"Frecuencia"</string>
<string name="wifi_ip_address" msgid="5572539114989914831">"Dirección IP"</string>
<string name="passpoint_label" msgid="7429247462404128615">"Guardada a través de"</string>
<string name="passpoint_content" msgid="340527524510304327">"Credenciales de <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="wifi_eap_method" msgid="3752116941487485859">"Método EAP"</string>
<string name="please_select_phase2" msgid="5848080896810435677">"Autenticación de fase 2"</string>
- <string name="wifi_eap_ca_cert" msgid="1496395241849383785">"Certificado de CA"</string>
+ <string name="wifi_eap_ca_cert" msgid="1496395241849383785">"Certificado AC"</string>
<string name="wifi_eap_domain" msgid="3298302320003640130">"Dominio"</string>
<string name="wifi_eap_user_cert" msgid="6786839531765719173">"Certificado de usuario"</string>
<string name="wifi_eap_identity" msgid="5280457017705738773">"Identidad"</string>
@@ -928,7 +927,7 @@
<string name="wifi_ap_choose_auto" msgid="7927637960569365785">"Automática"</string>
<string name="wifi_ap_choose_2G" msgid="43198403259714736">"Banda de 2,4 GHz"</string>
<string name="wifi_ap_choose_5G" msgid="2624859713183683146">"Banda de 5,0 GHz"</string>
- <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"Banda preferida: 5,0 GHz"</string>
+ <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"Banda de 5,0 GHz (preferida)"</string>
<string name="wifi_ap_2G" msgid="5793110086517338494">"2,4 GHz"</string>
<string name="wifi_ap_5G" msgid="4584892544393675403">"5,0 GHz"</string>
<string name="wifi_ap_band_select_one" msgid="4409754936554360355">"Selecciona al menos una banda para el punto de acceso Wi‑Fi:"</string>
@@ -936,13 +935,13 @@
<string name="wifi_privacy_settings" msgid="4462092795794247809">"Privacidad"</string>
<string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"Dirección MAC aleatoria"</string>
<string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"Añadir un dispositivo"</string>
- <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"Encuadra el código QR para añadir el dispositivo a \"<xliff:g id="SSID">%1$s</xliff:g>\""</string>
- <string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"Escanear código QR"</string>
- <string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"Encuadra el código QR para conectarte a \"<xliff:g id="SSID">%1$s</xliff:g>\""</string>
- <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"Escanea el código QR para conectarte al Wi‑Fi"</string>
+ <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"Encuadra el código QR abajo para añadir el dispositivo a \"<xliff:g id="SSID">%1$s</xliff:g>\""</string>
+ <string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"Escanea el código QR"</string>
+ <string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"Encuadra el código QR abajo para conectarte a \"<xliff:g id="SSID">%1$s</xliff:g>\""</string>
+ <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"Conéctate a la red Wi-Fi escaneando un código QR"</string>
<string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Compartir Wi‑Fi"</string>
- <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"Escanea el código QR con otro dispositivo para conectarlo a \"<xliff:g id="SSID">%1$s</xliff:g>\" y compartir la contraseña"</string>
- <string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"Escanea el código QR con otro dispositivo para conectarte a \"<xliff:g id="SSID">%1$s</xliff:g>\""</string>
+ <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"Escanea este código QR con otro dispositivo para conectarlo a \"<xliff:g id="SSID">%1$s</xliff:g>\" y compartir la contraseña"</string>
+ <string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"Escanea este código QR con otro dispositivo para conectarte a \"<xliff:g id="SSID">%1$s</xliff:g>\""</string>
<string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"No se ha podido leer el código QR. Encuadra bien el código y vuelve a intentarlo."</string>
<string name="wifi_dpp_failure_authentication_or_configuration" msgid="9142051662156233679">"Vuelve a intentarlo. Si el problema persiste, ponte en contacto con el fabricante del dispositivo"</string>
<string name="wifi_dpp_failure_not_compatible" msgid="4320027179973678283">"Ha habido un error"</string>
@@ -952,7 +951,7 @@
<string name="wifi_dpp_check_connection_try_again" msgid="7144663015219170999">"Comprueba la conexión y vuelve a intentarlo"</string>
<string name="wifi_dpp_choose_network" msgid="6251424431594491691">"Elegir red"</string>
<string name="wifi_dpp_choose_network_to_connect_device" msgid="6385259857886784285">"Elige una red para conectar tu dispositivo"</string>
- <string name="wifi_dpp_add_device_to_wifi" msgid="6454198064645462446">"¿Quieres añadir este dispositivo a \"<xliff:g id="SSID">%1$s</xliff:g>\"?"</string>
+ <string name="wifi_dpp_add_device_to_wifi" msgid="6454198064645462446">"¿Añadir este dispositivo a \"<xliff:g id="SSID">%1$s</xliff:g>\"?"</string>
<string name="wifi_dpp_wifi_shared_with_device" msgid="5713765471758272471">"Se ha compartido la red Wi‑Fi con el dispositivo"</string>
<string name="wifi_dpp_add_another_device" msgid="3698441567235301565">"Añadir otro dispositivo"</string>
<string name="wifi_dpp_choose_different_network" msgid="128515107488187050">"Elegir otra red"</string>
@@ -960,7 +959,7 @@
<string name="wifi_dpp_device_found" msgid="6488461467496850841">"Dispositivo encontrado"</string>
<string name="wifi_dpp_sharing_wifi_with_this_device" msgid="2540529164687476827">"Compartiendo Wi‑Fi con este dispositivo…"</string>
<string name="wifi_dpp_connecting" msgid="4229290407210299897">"Conectando…"</string>
- <string name="wifi_dpp_share_hotspot" msgid="847987212473038179">"Compartir punto de red Wi‑Fi"</string>
+ <string name="wifi_dpp_share_hotspot" msgid="847987212473038179">"Comparte el punto de red Wi‑Fi"</string>
<string name="wifi_dpp_lockscreen_title" msgid="3910665850075275963">"Verifica que eres tú"</string>
<string name="wifi_dpp_wifi_password" msgid="8007558344032612455">"Contraseña de la red Wi‑Fi: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
<string name="wifi_dpp_hotspot_password" msgid="6172326289042241924">"Contraseña del punto de acceso: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
@@ -971,7 +970,7 @@
<string name="wifi_unchanged" msgid="6804964646942333992">"(no modificada)"</string>
<string name="wifi_unspecified" msgid="893491188483500809">"Selecciona una opción"</string>
<string name="wifi_multiple_cert_added" msgid="7986200585749147204">"(Se han añadido varios certificados)"</string>
- <string name="wifi_use_system_certs" msgid="4794489370929885022">"Utilizar certificados del sistema"</string>
+ <string name="wifi_use_system_certs" msgid="4794489370929885022">"Usar certificados del sistema"</string>
<string name="wifi_do_not_provide_eap_user_cert" msgid="4044301449482425250">"No proporcionar"</string>
<string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"No validar"</string>
<string name="wifi_do_not_validate_eap_server_warning" msgid="3895397996759837323">"No se ha especificado ningún certificado. La conexión no será privada."</string>
@@ -1058,7 +1057,7 @@
<string name="wifi_p2p_cancel_connect_message" msgid="3752679335020392154">"¿Quieres cancelar la invitación para conectar con <xliff:g id="PEER_NAME">%1$s</xliff:g>?"</string>
<string name="wifi_p2p_delete_group_message" msgid="3206660449067701089">"¿Olvidar este grupo?"</string>
<string name="wifi_hotspot_checkbox_text" msgid="12062341344410520">"Punto de acceso Wi-Fi"</string>
- <string name="wifi_hotspot_off_subtext" msgid="6177054857136221058">"No se está compartiendo la conexión a Internet ni el contenido con otros dispositivos"</string>
+ <string name="wifi_hotspot_off_subtext" msgid="6177054857136221058">"No se está compartiendo Internet ni contenido con otros dispositivos"</string>
<string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="71421730039785897">"Se está compartiendo la conexión a Internet de este tablet mediante un punto de acceso"</string>
<string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="8914285514605049879">"Se está compartiendo la conexión a Internet de este teléfono mediante un punto de acceso"</string>
<string name="wifi_hotspot_on_local_only_subtext" msgid="7415381343846704553">"La aplicación está compartiendo contenido. Para compartir la conexión a Internet, desactiva el punto de acceso y vuelve a activarlo"</string>
@@ -1070,7 +1069,7 @@
<string name="wifi_hotspot_ap_band_title" msgid="3485744480410441949">"Banda del punto de acceso"</string>
<string name="wifi_hotspot_footer_info_regular" msgid="3876006922622827363">"Utiliza un punto de acceso para crear una red Wi‑Fi que puedan usar otros dispositivos. Los puntos de acceso permiten acceder a Internet con una conexión de datos móviles. Es posible que se apliquen cargos adicionales por el uso de datos."</string>
<string name="wifi_hotspot_footer_info_local_only" msgid="3339582350894639261">"Las aplicaciones pueden crear un punto de acceso para compartir contenido con dispositivos cercanos."</string>
- <string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"Desactivar el punto de acceso automáticamente"</string>
+ <string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"Desactivar punto de acceso automáticamente"</string>
<string name="wifi_hotspot_auto_off_summary" msgid="3866769400624802105">"El punto de acceso Wi‑Fi se desactivará si no hay dispositivos conectados"</string>
<string name="wifi_tether_starting" msgid="7676952148471297900">"Activando zona Wi-Fi…"</string>
<string name="wifi_tether_stopping" msgid="7478561853791953349">"Desactivando zona Wi-Fi…"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Móvil"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Si la red Wi‑Fi no está disponible, utiliza la red móvil"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Si la red móvil no está disponible, utiliza la red Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Llamar a través de Wi‑Fi. Si se pierde conexión, se cortará la llamada."</string>
@@ -1128,7 +1130,7 @@
<string name="notification_volume_title" msgid="6022562909288085275">"Notificación"</string>
<string name="checkbox_notification_same_as_incoming_call" msgid="7312942422655861175">"Utilizar volumen de llamada entrante para notificaciones"</string>
<string name="home_work_profile_not_supported" msgid="6137073723297076818">"No admite perfiles de trabajo"</string>
- <string name="notification_sound_dialog_title" msgid="6653341809710423276">"Sonido notif. predet."</string>
+ <string name="notification_sound_dialog_title" msgid="6653341809710423276">"Sonido de notificación predeterminado"</string>
<string name="media_volume_title" msgid="1030438549497800914">"Multimedia"</string>
<string name="media_volume_summary" msgid="3142433516297061652">"Establecer volumen para música y vídeos"</string>
<string name="alarm_volume_title" msgid="8902277801531496243">"Alarma"</string>
@@ -1201,7 +1203,7 @@
<string name="auto_brightness_off_summary" msgid="6162650416289359104">"No ajustar en función de la luz ambiental"</string>
<string name="auto_brightness_very_high_summary" msgid="7202032980509583918">"Aumenta el uso de la batería"</string>
<string name="auto_brightness_disclaimer" msgid="5416696351199148809">"Optimiza el brillo en función de la luz ambiental. Puedes ajustarlo temporalmente aunque actives esta función."</string>
- <string name="auto_brightness_description" msgid="8209140379089535411">"El brillo de la pantalla se ajustará automáticamente según el entorno y las actividades que hagas. Puedes mover el control deslizante para que la función de brillo adaptativo reconozca tus preferencias."</string>
+ <string name="auto_brightness_description" msgid="8209140379089535411">"El brillo de la pantalla se ajustará automáticamente según el entorno y lo que hagas. Puedes mover el control deslizante para que la función de brillo adaptativo reconozca tus preferencias."</string>
<string name="display_white_balance_title" msgid="5747260735311935143">"Balance de blancos de pantalla"</string>
<string name="adaptive_sleep_title" msgid="3237620948260957018">"Modo privado"</string>
<string name="adaptive_sleep_summary_on" msgid="6670369739228487082">"Activado: la pantalla no se apagará si estás mirándola"</string>
@@ -1222,7 +1224,7 @@
<string name="night_display_summary_off_auto_mode_never" msgid="8618824386434992487">"No se activará nunca automáticamente"</string>
<string name="night_display_summary_off_auto_mode_custom" msgid="596847003171394411">"Se activará automáticamente a esta hora: <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="night_display_summary_off_auto_mode_twilight" msgid="4071750976585359952">"Se activará automáticamente al anochecer"</string>
- <string name="night_display_summary_on" msgid="6580571388791426596">"Activado/<xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="night_display_summary_on" msgid="6580571388791426596">"Activado / <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="night_display_summary_on_auto_mode_never" msgid="5461580863060506687">"No se desactivará nunca automáticamente"</string>
<string name="night_display_summary_on_auto_mode_custom" msgid="2200631112239399233">"Se desactivará automáticamente a esta hora: <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="night_display_summary_on_auto_mode_twilight" msgid="8386769601369289561">"Se desactivará automáticamente al amanecer"</string>
@@ -1253,7 +1255,7 @@
<string name="screensaver_settings_disabled_prompt" msgid="1897518064782596947">"Para controlar lo que ocurre cuando el teléfono está en un dock o inactivo, activa el salvapantallas."</string>
<string name="screensaver_settings_when_to_dream" msgid="3763052013516826348">"Cuándo empezar a mostrarlo"</string>
<string name="screensaver_settings_current" msgid="4017556173596361672">"Salvapantallas actual"</string>
- <string name="screensaver_settings_dream_start" msgid="3772227299054662550">"Iniciar ahora"</string>
+ <string name="screensaver_settings_dream_start" msgid="3772227299054662550">"Empezar ahora"</string>
<string name="screensaver_settings_button" msgid="4662384378821837589">"Ajustes"</string>
<string name="automatic_brightness" msgid="8663792987774126192">"Brillo automático"</string>
<string name="lift_to_wake_title" msgid="5523752279947392868">"Levantar el dispositivo para activarlo"</string>
@@ -1296,7 +1298,7 @@
<string name="sim_multi_sims_summary" msgid="8237021982527032257">"Selecciona la SIM que prefieras para usar datos móviles."</string>
<string name="sim_change_data_title" msgid="2512227368681250054">"¿Usar <xliff:g id="CARRIER">%1$s</xliff:g> para los datos móviles?"</string>
<string name="sim_change_data_message" msgid="51004703157782900">"Estás utilizando <xliff:g id="CARRIER2_0">%2$s</xliff:g> para los datos móviles. Si cambias a <xliff:g id="CARRIER1">%1$s</xliff:g>, no se utilizará más a <xliff:g id="CARRIER2_1">%2$s</xliff:g> para los datos móviles."</string>
- <string name="sim_change_data_ok" msgid="7491552537317573235">"Utilizar <xliff:g id="CARRIER">%1$s</xliff:g>"</string>
+ <string name="sim_change_data_ok" msgid="7491552537317573235">"Usar <xliff:g id="CARRIER">%1$s</xliff:g>"</string>
<string name="sim_preferred_title" msgid="3389680276182899407">"¿Actualizar tarjeta SIM preferida?"</string>
<string name="sim_preferred_message" msgid="3751011329746359050">"<xliff:g id="NEW_SIM">%1$s</xliff:g> es la única SIM del dispositivo. ¿Quieres usarla para los datos móviles, las llamadas y los mensajes SMS?"</string>
<string name="wrong_pin_code_pukked" msgid="3214670264775760428">"Código PIN de la tarjeta SIM incorrecto. Debes ponerte en contacto con tu operador para desbloquear el dispositivo."</string>
@@ -1340,10 +1342,10 @@
<string name="status_msid_number" msgid="7808175928664357661">"MSID"</string>
<string name="status_prl_version" msgid="5634561205739199042">"Versión de PRL"</string>
<string name="meid_multi_sim" msgid="7449892644113569529">"MEID (ranura SIM %1$d)"</string>
- <string name="scanning_status_text_wifi_on_ble_on" msgid="6370507836346838473">"Las redes Wi‑Fi y las conexiones Bluetooth tienen la búsqueda activada"</string>
- <string name="scanning_status_text_wifi_on_ble_off" msgid="8205014713732412608">"La búsqueda de redes Wi‑Fi está activa y la de conexiones Bluetooth, desactivada"</string>
- <string name="scanning_status_text_wifi_off_ble_on" msgid="7400522456303307057">"La búsqueda de conexiones Bluetooth está activada y la de redes Wi‑Fi, desactivada"</string>
- <string name="scanning_status_text_wifi_off_ble_off" msgid="8575026386237481457">"Está desactivada la búsqueda de redes Wi‑Fi y conexiones Bluetooth"</string>
+ <string name="scanning_status_text_wifi_on_ble_on" msgid="6370507836346838473">"Tanto la búsqueda de redes Wi‑Fi como la de dispositivos Bluetooth están activadas"</string>
+ <string name="scanning_status_text_wifi_on_ble_off" msgid="8205014713732412608">"La búsqueda de redes Wi‑Fi está activada; la búsqueda de dispositivos Bluetooth está desactivada"</string>
+ <string name="scanning_status_text_wifi_off_ble_on" msgid="7400522456303307057">"La búsqueda de dispositivos Bluetooth está activada; la búsqueda de redes Wi‑Fi está desactivada"</string>
+ <string name="scanning_status_text_wifi_off_ble_off" msgid="8575026386237481457">"Tanto la búsqueda de redes Wi‑Fi como la de dispositivos Bluetooth están desactivadas"</string>
<string name="status_meid_number" msgid="8756271256760479835">"MEID"</string>
<string name="status_icc_id" msgid="9191847562997702709">"ICCID"</string>
<string name="status_data_network_type" msgid="2344720457353394909">"Tipo de red de datos móviles"</string>
@@ -1525,8 +1527,8 @@
<string name="battery_status_title" msgid="8731200319740671905">"Estado de la batería"</string>
<string name="battery_level_title" msgid="5207775387973771646">"Nivel de batería"</string>
<string name="apn_settings" msgid="8130776653826271664">"APNs"</string>
- <string name="apn_edit" msgid="4350571070853305357">"Editar punto acceso"</string>
- <string name="apn_not_set" msgid="5344235604466825691">"No definido"</string>
+ <string name="apn_edit" msgid="4350571070853305357">"Editar punto de acceso"</string>
+ <string name="apn_not_set" msgid="5344235604466825691">"Sin definir"</string>
<string name="apn_name" msgid="8431432886706852226">"Nombre"</string>
<string name="apn_apn" msgid="190519449579357696">"APN"</string>
<string name="apn_http_proxy" msgid="8816906767987944465">"Proxy"</string>
@@ -1567,11 +1569,11 @@
<string name="menu_restore" msgid="3799288817317293115">"Restablecer ajustes"</string>
<string name="restore_default_apn_completed" msgid="5671734152740058937">"Se ha restablecido la configuración predeterminada de APN."</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"Opciones de recuperación"</string>
- <string name="reset_dashboard_summary" msgid="8778383341461126642">"Se puede recuperar la configuración de la red, de las aplicaciones o del dispositivo"</string>
+ <string name="reset_dashboard_summary" msgid="8778383341461126642">"Se pueden recuperar los ajustes de red, de las aplicaciones y del dispositivo"</string>
<string name="reset_network_title" msgid="8944059136930806211">"Recuperar Wi-Fi, red móvil y Bluetooth"</string>
<string name="reset_network_desc" msgid="4982633363916261109">"Se recuperarán todos los ajustes de red, como:\n\n"<li>"Wi‑Fi"</li>\n<li>"Datos móviles"</li>\n<li>"Bluetooth"</li></string>
<string name="reset_esim_title" msgid="7630781767040831893">"Borrar las SIM descargadas"</string>
- <string name="reset_esim_desc" msgid="433226911566802">"Para descargar SIMs de sustitución, ponte en contacto con tu operador. Esta acción no cancelará ninguno de los planes de servicios móviles."</string>
+ <string name="reset_esim_desc" msgid="433226911566802">"Para descargar SIM de sustitución, ponte en contacto con tu operador. Esta acción no cancelará ningún plan de servicios móviles."</string>
<string name="reset_network_button_text" msgid="4293271046867912819">"Recuperar ajustes"</string>
<string name="reset_network_final_desc" msgid="2463817067048751373">"¿Quieres restablecer la configuración de red? No podrás deshacer esta acción."</string>
<string name="reset_network_final_desc_esim" msgid="4676436976372555750">"¿Quieres recuperar todos los ajustes de red y borrar todas las SIM descargadas? No podrás deshacer esta acción."</string>
@@ -1589,7 +1591,7 @@
<string name="master_clear_other_users_present" product="default" msgid="5993259656117566767">\n\n"Hay otros usuarios presentes en este dispositivo.\n"</string>
<string name="master_clear_desc_also_erases_external" msgid="3947303501615091903"><li>"Música"</li>\n<li>"Fotos"</li>\n<li>"Otros datos de usuario"</li></string>
<string name="master_clear_desc_also_erases_esim" msgid="4497260499055258773"><li>"eSIMs"</li></string>
- <string name="master_clear_desc_no_cancel_mobile_plan" msgid="6072668588881679461">\n\n"Tu plan de servicios móviles no se cancelará."</string>
+ <string name="master_clear_desc_no_cancel_mobile_plan" msgid="6072668588881679461">\n\n"Esta acción no cancelará tu plan de servicios móviles."</string>
<string name="master_clear_desc_erase_external_storage" product="nosdcard" msgid="2723272952715259307">\n\n"Para eliminar la música, las imágenes y otros datos de usuario, debes borrar el "<b>"almacenamiento USB"</b>"."</string>
<string name="master_clear_desc_erase_external_storage" product="default" msgid="9003555775524798797">\n\n"Para eliminar la música, las imágenes y otros datos de usuario, debes borrar la "<b>"tarjeta SD"</b>"."</string>
<string name="erase_external_storage" product="nosdcard" msgid="8989746770347525207">"Borrar almacenamiento USB"</string>
@@ -1619,11 +1621,11 @@
<string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"No se puede hacer el anclaje de red ni utilizar zonas Wi-Fi portátiles mientras el ahorro de datos esté activado"</string>
<string name="usb_title" msgid="7480927657535578688">"USB"</string>
<string name="usb_tethering_button_text" msgid="6242228383142012332">"Compartir conexión por USB"</string>
- <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Compartir la conexión a Internet del teléfono por USB"</string>
+ <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Comparte la conexión a Internet del teléfono por USB"</string>
<string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"Compartir la conexión a Internet del tablet por USB"</string>
<string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"Compartir conexión por Bluetooth"</string>
<string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"Compartir la conexión a Internet del tablet por Bluetooth"</string>
- <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Compartir la conexión a Internet del teléfono por Bluetooth"</string>
+ <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Comparte la conexión a Internet del teléfono por Bluetooth"</string>
<string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"Se está compartiendo la conexión a Internet de este <xliff:g id="DEVICE_NAME">%1$d</xliff:g> por Bluetooth"</string>
<string name="bluetooth_tethering_overflow_error" msgid="6946561351369376943">"No se puede anclar a más de <xliff:g id="MAXCONNECTION">%1$d</xliff:g> dispositivos."</string>
<string name="bluetooth_untether_blank" msgid="5428300773782256084">"Se desactivará el anclaje a red de <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
@@ -1704,7 +1706,7 @@
<string name="settings_safetylegal_activity_unreachable" msgid="3541894966476445833">"No tienes conexión de datos. Para ver esta información, accede a %s desde cualquier ordenador conectado a Internet."</string>
<string name="settings_safetylegal_activity_loading" msgid="7680998654145172">"Cargando…"</string>
<string name="confirm_device_credential_use_alternate_method" msgid="1279869272895739941">"Utilizar método alternativo"</string>
- <string name="lockpassword_choose_your_screen_lock_header" msgid="6283518876031424798">"Establecer el bloqueo de pantalla"</string>
+ <string name="lockpassword_choose_your_screen_lock_header" msgid="6283518876031424798">"Establece un bloqueo de pantalla"</string>
<string name="lockpassword_choose_your_password_message" msgid="2838273977481046536">"Por seguridad, establece una contraseña"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="4921343500484160894">"Para usar la huella, añade una contraseña"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="314870151462139417">"Para usar tu huella, añade un patrón"</string>
@@ -1957,7 +1959,7 @@
<string name="hardkeyboard_category" msgid="5937171470391551627">"Ajustes del teclado físico"</string>
<string name="auto_punctuate_summary" msgid="245694025030386370">"Pulsa la barra espaciadora dos veces para insertar el carácter \".\""</string>
<string name="show_password" msgid="620964020348073739">"Mostrar contraseñas"</string>
- <string name="show_password_summary" msgid="1403805089582258620">"Mostrar los caracteres brevemente al escribir"</string>
+ <string name="show_password_summary" msgid="1403805089582258620">"Muestra los caracteres brevemente al escribir"</string>
<string name="spellchecker_security_warning" msgid="792070474432612097">"Este corrector ortográfico puede registrar todo lo que escribas, incluidos datos personales, como las contraseñas y los números de las tarjetas de crédito. Procede de la aplicación <xliff:g id="SPELLCHECKER_APPLICATION_NAME">%1$s</xliff:g>. ¿Quieres usar este corrector ortográfico?"</string>
<string name="spellchecker_quick_settings" msgid="5193036510190696655">"Ajustes"</string>
<string name="spellchecker_language" msgid="5168501692418112444">"Idioma"</string>
@@ -1968,7 +1970,7 @@
<string name="keyboard_assistance_category" msgid="2276351807419818125">"Ayuda del teclado"</string>
<string name="physical_keyboard_title" msgid="3508591962962814313">"Teclado físico"</string>
<string name="show_ime" msgid="7322620473198763563">"Mostrar teclado virtual"</string>
- <string name="show_ime_summary" msgid="3246628154011464373">"Mantener en la pantalla mientras el teclado físico está activo"</string>
+ <string name="show_ime_summary" msgid="3246628154011464373">"Lo mantiene en pantalla mientras el teclado físico está activo"</string>
<string name="keyboard_shortcuts_helper" msgid="6574386807271399788">"Ayuda de accesos directos de teclado"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="8024313306403779742">"Muestra accesos directos de teclado disponibles"</string>
<string name="language_and_input_for_work_category_title" msgid="2053255944038892588">"Perfiles de trabajo y herramientas"</string>
@@ -2034,10 +2036,10 @@
<string name="usage_time_label" msgid="5615725415876461039">"Tiempo de uso"</string>
<string name="accessibility_settings" msgid="9140621093888234485">"Accesibilidad"</string>
<string name="accessibility_settings_title" msgid="1687226556576913576">"Ajustes de accesibilidad"</string>
- <string name="accessibility_settings_summary" msgid="5742379519336396561">"Lectores de pantalla, pantalla y controles de interacción"</string>
+ <string name="accessibility_settings_summary" msgid="5742379519336396561">"Lectores de pantalla, pantalla, controles de interacción"</string>
<string name="vision_settings_title" msgid="7315352351051423944">"Ajustes de visión"</string>
- <string name="vision_settings_description" msgid="3476589459009287332">"Personaliza este dispositivo para adaptarlo a tus necesidades. Puedes modificar las funciones de accesibilidad posteriormente en Ajustes."</string>
- <string name="vision_settings_suggestion_title" msgid="7268661419110951128">"Cambiar el tamaño de la fuente"</string>
+ <string name="vision_settings_description" msgid="3476589459009287332">"Personaliza este dispositivo para adaptarlo a tus necesidades. Puedes modificar las funciones de accesibilidad más tarde en Ajustes."</string>
+ <string name="vision_settings_suggestion_title" msgid="7268661419110951128">"Cambia el tamaño de la fuente"</string>
<string name="screen_reader_category_title" msgid="6300714148519645544">"Lectores de pantalla"</string>
<string name="audio_and_captions_category_title" msgid="6140472938769619212">"Audio y texto en pantalla"</string>
<string name="display_category_title" msgid="545168481672250195">"Pantalla"</string>
@@ -2049,7 +2051,7 @@
<string name="talkback_summary" msgid="6602857105831641574">"El lector de pantalla está destinado principalmente a personas ciegas y con problemas de visión"</string>
<string name="select_to_speak_summary" msgid="7514180457557735421">"Toca cualquier elemento de la pantalla para escucharlo"</string>
<string name="accessibility_captioning_title" msgid="5878371993023439642">"Subtítulos"</string>
- <string name="accessibility_screen_magnification_title" msgid="7250949681883917360">"Ampliar"</string>
+ <string name="accessibility_screen_magnification_title" msgid="7250949681883917360">"Ampliación"</string>
<string name="accessibility_screen_magnification_gestures_title" msgid="9199287875401817974">"Ampliar con tres toques"</string>
<string name="accessibility_screen_magnification_navbar_title" msgid="400655612610761242">"Ampliar con botón"</string>
<string name="accessibility_screen_magnification_state_navbar_gesture" msgid="1863831350878995600">"Amplía con un botón y tres toques"</string>
@@ -2070,7 +2072,7 @@
<string name="accessibility_toggle_large_pointer_icon_title" msgid="9127905775116570565">"Puntero del ratón grande"</string>
<string name="accessibility_disable_animations" msgid="8378441317115710009">"Quitar animaciones"</string>
<string name="accessibility_toggle_master_mono_title" msgid="899550848196702565">"Audio en mono"</string>
- <string name="accessibility_toggle_master_mono_summary" msgid="3847052868469033235">"Combinar canales al reproducir audio"</string>
+ <string name="accessibility_toggle_master_mono_summary" msgid="3847052868469033235">"Combina canales al reproducir audio"</string>
<string name="accessibility_toggle_master_balance_title" msgid="8723492001092647562">"Balance de audio"</string>
<string name="accessibility_toggle_master_balance_left_label" msgid="8531986342666527970">"Izquierdo"</string>
<string name="accessibility_toggle_master_balance_right_label" msgid="7757024572140589558">"Derecho"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Vibración de las notificaciones"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Vibración del tono"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Vibración al tocar la pantalla"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Usar servicio"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Utilizar la corrección de color"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Utilizar subtítulos"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Usar servicio"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Usar corrección de color"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Usar subtítulos"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Continuar"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Audífonos"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"No hay audífonos conectados"</string>
@@ -2265,7 +2267,7 @@
<string name="details_subtitle" msgid="7279638828004951382">"Detalles de uso"</string>
<string name="controls_subtitle" msgid="6920199888882834620">"Cómo reducir el uso de la batería"</string>
<string name="packages_subtitle" msgid="6506269487892204413">"Paquetes incluidos"</string>
- <string name="battery_tip_summary_title" msgid="2750922152518825526">"Las aplicaciones funcionan correctamente"</string>
+ <string name="battery_tip_summary_title" msgid="2750922152518825526">"Las aplicaciones funcionan con normalidad"</string>
<string name="battery_tip_summary_summary" product="default" msgid="6294900413896440006">"El teléfono tiene un consumo normal de batería en segundo plano"</string>
<string name="battery_tip_summary_summary" product="tablet" msgid="5280099016800644130">"El tablet tiene un consumo normal de batería en segundo plano"</string>
<string name="battery_tip_summary_summary" product="device" msgid="4459840492610842705">"El dispositivo tiene un consumo normal de batería en segundo plano"</string>
@@ -2279,7 +2281,7 @@
<string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Es posible que te quedes sin batería antes de lo normal"</string>
<string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"Ahorro de batería activado"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"Es posible que algunas funciones estén limitadas"</string>
- <string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"El teléfono se ha usado más de lo normal"</string>
+ <string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Teléfono usado más de lo normal"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"El tablet se ha usado más de lo normal"</string>
<string name="battery_tip_high_usage_title" product="device" msgid="8304138287288309490">"El dispositivo se ha usado más de lo normal"</string>
<string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"Es posible que te quedes sin batería antes de lo normal"</string>
@@ -2296,28 +2298,28 @@
<item quantity="one">%1$s aplicación se ha restringido recientemente</item>
</plurals>
<plurals name="battery_tip_restrict_summary" formatted="false" msgid="984148373944071669">
- <item quantity="other">%2$d aplicaciones consumen mucha batería en segundo plano</item>
- <item quantity="one">%1$s aplicación consume mucha batería en segundo plano</item>
+ <item quantity="other">%2$d apps gastan mucho en segundo plano</item>
+ <item quantity="one">%1$s gasta mucho en segundo plano</item>
</plurals>
<plurals name="battery_tip_restrict_handled_summary" formatted="false" msgid="469696766640020557">
<item quantity="other">Estas aplicaciones no se pueden ejecutar en segundo plano</item>
<item quantity="one">Esta aplicación no se puede ejecutar en segundo plano</item>
</plurals>
<plurals name="battery_tip_restrict_app_dialog_title" formatted="false" msgid="3042021435866172168">
- <item quantity="other">¿Quieres restringir %1$d aplicaciones?</item>
- <item quantity="one">¿Quieres restringir la aplicación?</item>
+ <item quantity="other">¿Restringir %1$d aplicaciones?</item>
+ <item quantity="one">¿Restringir aplicación?</item>
</plurals>
<string name="battery_tip_restrict_app_dialog_message" msgid="6905822297507947381">"Si quieres ahorrar batería, evita que <xliff:g id="APP">%1$s</xliff:g> consuma batería en segundo plano. Es posible que la aplicación no funcione correctamente y las notificaciones se retrasen."</string>
<string name="battery_tip_restrict_apps_less_than_5_dialog_message" msgid="4225881888543582456">"Si quieres ahorrar batería, evita que estas aplicaciones consuman batería en segundo plano. Es posible que las aplicaciones restringidas no funcionen correctamente y las notificaciones se retrasen.\n\nAplicaciones:"</string>
<string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"Si quieres ahorrar batería, evita que estas aplicaciones consuman batería en segundo plano. Es posible que las aplicaciones restringidas no funcionen correctamente y las notificaciones se retrasen.\n\nAplicaciones:\n<xliff:g id="APP_LIST">%1$s</xliff:g>."</string>
<string name="battery_tip_restrict_app_dialog_ok" msgid="2573410775701913487">"Restringir"</string>
<string name="battery_tip_unrestrict_app_dialog_title" msgid="812458516399125710">"¿Quitar restricción?"</string>
- <string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"Esta aplicación puede utilizar la batería en segundo plano y provocar que te quedes sin batería antes de lo que pensabas."</string>
+ <string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"Esta aplicación podrá usar la batería en segundo plano. Es posible que la batería se agote antes de lo esperado."</string>
<string name="battery_tip_unrestrict_app_dialog_ok" msgid="9154938931448151479">"Quitar"</string>
<string name="battery_tip_unrestrict_app_dialog_cancel" msgid="7331148618292397166">"Cancelar"</string>
- <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"Tus aplicaciones usan una cantidad normal de batería. Si consumieran demasiada, tu dispositivo te recomendaría medidas para evitarlo.\n\nSi te queda poca carga, también puedes activar el Ahorro de batería."</string>
- <string name="battery_tip_dialog_summary_message" product="tablet" msgid="1721081030632329647">"Tus aplicaciones usan una cantidad normal de batería. Si consumieran demasiada, tu dispositivo te recomendaría medidas para evitarlo.\n\nSi te queda poca carga, también puedes activar el Ahorro de batería."</string>
- <string name="battery_tip_dialog_summary_message" product="device" msgid="146872407040848465">"Tus aplicaciones usan una cantidad normal de batería. Si consumieran demasiada, tu dispositivo te recomendaría medidas para evitarlo.\n\nSi te queda poca carga, también puedes activar el Ahorro de batería."</string>
+ <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"Tus aplicaciones usan una cantidad normal de batería. Si consumieran demasiada, el teléfono te recomendaría medidas para evitarlo.\n\nSi te queda poca carga, también puedes activar el modo Ahorro de batería."</string>
+ <string name="battery_tip_dialog_summary_message" product="tablet" msgid="1721081030632329647">"Tus aplicaciones usan una cantidad normal de batería. Si consumieran demasiada, el tablet te recomendaría medidas para evitarlo.\n\nSi te queda poca carga, también puedes activar el modo Ahorro de batería."</string>
+ <string name="battery_tip_dialog_summary_message" product="device" msgid="146872407040848465">"Tus aplicaciones usan una cantidad normal de batería. Si consumieran demasiada, el dispositivo te recomendaría medidas para evitarlo.\n\nSi te queda poca carga, también puedes activar el modo Ahorro de batería."</string>
<string name="smart_battery_manager_title" msgid="5744035036663849515">"Gestor de batería"</string>
<string name="smart_battery_title" msgid="4919670408532804351">"Gestionar aplicaciones automáticamente"</string>
<string name="smart_battery_summary" msgid="640027046471198174">"Limitar el consumo de batería de las aplicaciones que no utilices con frecuencia"</string>
@@ -2447,24 +2449,24 @@
<string name="battery_saver" msgid="3989710213758938398">"Ahorro de batería"</string>
<string name="battery_saver_auto_title" msgid="4158659069641849952">"Activar automáticamente"</string>
<string name="battery_saver_auto_no_schedule" msgid="739814529432092706">"Sin programación"</string>
- <string name="battery_saver_auto_routine" msgid="886514412067906980">"Según tu rutina"</string>
+ <string name="battery_saver_auto_routine" msgid="886514412067906980">"Basado en tu rutina"</string>
<string name="battery_saver_auto_percentage" msgid="5791982309331921556">"Según el porcentaje"</string>
- <string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"La función Ahorro de batería se activa si es probable que te quedes sin batería antes de tu próxima carga normal."</string>
+ <string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"El modo Ahorro de batería se activa si es probable que te quedes sin batería antes de tu próxima carga normal."</string>
<string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"Se activará cuando llegue al <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
- <string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Definir una programación"</string>
+ <string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Establecer una programación"</string>
<string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"Desactivar con la carga al máximo"</string>
- <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"El modo Ahorro de batería se desactiva cuando tu teléfono está al <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
- <string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"El modo Ahorro de batería se desactiva cuando tu teléfono está al <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
- <string name="battery_saver_sticky_description_new" product="device" msgid="5056520668081504111">"El modo Ahorro de batería se desactiva cuando tu teléfono está al <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
+ <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"El modo Ahorro de batería se desactiva cuando el teléfono está al <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
+ <string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"El modo Ahorro de batería se desactiva cuando el teléfono está al <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
+ <string name="battery_saver_sticky_description_new" product="device" msgid="5056520668081504111">"El modo Ahorro de batería se desactiva cuando el teléfono está al <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Activar"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Utilizar la función Ahorro de batería"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Usar Ahorro de batería"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Activar automáticamente"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Nunca"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"con un <xliff:g id="PERCENT">%1$s</xliff:g> de batería"</string>
<string name="battery_percentage" msgid="7782252476471033843">"Porcentaje de batería"</string>
- <string name="battery_percentage_description" msgid="9219875229166700610">"Mostrar el porcentaje de batería en la barra de estado"</string>
+ <string name="battery_percentage_description" msgid="9219875229166700610">"Muestra el porcentaje de batería en la barra de estado"</string>
<string name="process_stats_summary_title" msgid="9189588417488537954">"Estadísticas de procesos"</string>
<string name="process_stats_summary" msgid="8077998499161221885">"Estadísticas técnicas sobre procesos en ejecución"</string>
<string name="app_memory_use" msgid="5126237308545653706">"Uso de memoria"</string>
@@ -2489,8 +2491,8 @@
<string name="menu_duration_6h" msgid="6169009210638008417">"6 horas"</string>
<string name="menu_duration_12h" msgid="1435242738163843797">"12 horas"</string>
<string name="menu_duration_1d" msgid="6476370834372352174">"1 día"</string>
- <string name="menu_show_system" msgid="6315865548558708248">"Mostrar aplicaciones del sistema"</string>
- <string name="menu_hide_system" msgid="8457027118873733782">"Ocultar aplicaciones del sistema"</string>
+ <string name="menu_show_system" msgid="6315865548558708248">"Mostrar sistema"</string>
+ <string name="menu_hide_system" msgid="8457027118873733782">"Ocultar sistema"</string>
<string name="menu_show_percentage" msgid="6983272380729890884">"Mostrar porcentajes"</string>
<string name="menu_use_uss" msgid="3765054705208926803">"Usar USS"</string>
<string name="menu_proc_stats_type" msgid="2680179749566186247">"Tipo de estadísticas"</string>
@@ -2523,15 +2525,15 @@
<string name="credentials_title" msgid="7119207354982673965">"Almacenamiento de credenciales"</string>
<string name="credentials_install" product="nosdcard" msgid="8509362500537206883">"Instalar desde almacenamiento"</string>
<string name="credentials_install" product="default" msgid="8997183776710118353">"Instalar desde la tarjeta SD"</string>
- <string name="credentials_install_summary" product="nosdcard" msgid="3426661965567059596">"Instalar certificados desde almacenamiento"</string>
+ <string name="credentials_install_summary" product="nosdcard" msgid="3426661965567059596">"Instala certificados desde el almacenamiento"</string>
<string name="credentials_install_summary" product="default" msgid="4943897416156671633">"Instalar certificados desde la tarjeta SD"</string>
- <string name="credentials_reset" msgid="355080737664731678">"Eliminar certificados"</string>
- <string name="credentials_reset_summary" msgid="7622528359699428555">"Quitar todos los certificados"</string>
+ <string name="credentials_reset" msgid="355080737664731678">"Borrar credenciales"</string>
+ <string name="credentials_reset_summary" msgid="7622528359699428555">"Quita todos los certificados"</string>
<string name="trusted_credentials" msgid="6989242522455395200">"Credenciales de confianza"</string>
- <string name="trusted_credentials_summary" msgid="7411781319056251582">"Mostrar certificados de CA de confianza"</string>
+ <string name="trusted_credentials_summary" msgid="7411781319056251582">"Muestra los certificados de CA de confianza"</string>
<string name="user_credentials" msgid="8365731467650306757">"Credenciales de usuario"</string>
- <string name="user_credentials_summary" msgid="7350223899317423252">"Ver y modificar credenciales almacenadas"</string>
- <string name="advanced_security_title" msgid="286883005673855845">"Ajustes avanzados"</string>
+ <string name="user_credentials_summary" msgid="7350223899317423252">"Consulta y modifica credenciales almacenadas"</string>
+ <string name="advanced_security_title" msgid="286883005673855845">"Avanzado"</string>
<string name="credential_storage_type" msgid="2585337320206095255">"Tipo de almacenamiento"</string>
<string name="credential_storage_type_hardware" msgid="5054143224259023600">"Almacenado en hardware"</string>
<string name="credential_storage_type_software" msgid="1335905150062717150">"Solo software"</string>
@@ -2547,7 +2549,7 @@
<string name="privacy_settings_title" msgid="3573891462732375772">"Copia de seguridad"</string>
<string name="backup_summary_state_on" msgid="1725597360282574647">"Activada"</string>
<string name="backup_summary_state_off" msgid="7138020503288730492">"Desactivada"</string>
- <string name="backup_section_title" msgid="8177209731777904656">"Copia de seguridad"</string>
+ <string name="backup_section_title" msgid="8177209731777904656">"Copia de seguridad y restauración"</string>
<string name="personal_data_section_title" msgid="9161854418510071558">"Datos personales"</string>
<string name="backup_data_title" msgid="4461508563849583624">"Copia de seguridad de mis datos"</string>
<string name="backup_data_summary" msgid="555459891017933746">"Crear copia de seguridad de los datos de las aplicaciones, las contraseñas de redes Wi-Fi y otros ajustes en los servidores de Google"</string>
@@ -2599,7 +2601,7 @@
<string name="work_mode_label" msgid="6845849194740195757">"Perfil de trabajo"</string>
<string name="work_mode_on_summary" msgid="1682781113156323592">"Administrado por tu organización"</string>
<string name="work_mode_off_summary" msgid="1688885392211178315">"Las aplicaciones y las notificaciones están desactivadas"</string>
- <string name="remove_managed_profile_label" msgid="4625542553784793536">"Eliminar perfil de trabajo"</string>
+ <string name="remove_managed_profile_label" msgid="4625542553784793536">"Quitar perfil de trabajo"</string>
<string name="background_data" msgid="8275750862371471171">"Datos en segundo plano"</string>
<string name="background_data_summary" msgid="799640633948841990">"Las aplicaciones pueden sincronizar datos, enviarlos y recibirlos."</string>
<string name="background_data_dialog_title" msgid="8306650658158895976">"¿Inhabilitar datos en segundo plano?"</string>
@@ -2668,7 +2670,7 @@
<string name="data_usage_menu_sim_cards" msgid="8508154611676507088">"Tarjetas SIM"</string>
<string name="data_usage_cellular_data_summary" msgid="9162777397135709280">"En pausa al límite"</string>
<string name="account_settings_menu_auto_sync" msgid="2673669556006027506">"Sincronización automática"</string>
- <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"Sincr. autom. datos personales"</string>
+ <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"Sincronizar datos personales automáticamente"</string>
<string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Sincr. autom. datos trabajo"</string>
<string name="data_usage_change_cycle" msgid="447761920472170031">"Cambiar ciclo…"</string>
<string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"Día del mes para restablecer ciclo de uso de datos:"</string>
@@ -2676,7 +2678,7 @@
<string name="data_usage_label_foreground" msgid="2471091128648754601">"Primer plano"</string>
<string name="data_usage_label_background" msgid="1618794447370396845">"Segundo plano"</string>
<string name="data_usage_app_restricted" msgid="7569077654579299326">"con restricción"</string>
- <string name="data_usage_disable_mobile" msgid="4125335076749119451">"¿Desactivar los datos móviles?"</string>
+ <string name="data_usage_disable_mobile" msgid="4125335076749119451">"¿Desactivar datos móviles?"</string>
<string name="data_usage_disable_mobile_limit" msgid="1937796699758613667">"Limitar datos móviles"</string>
<string name="data_usage_disable_4g_limit" msgid="7131367986548147266">"Limitar datos 4G"</string>
<string name="data_usage_disable_3g_limit" msgid="6746819313032692220">"Limitar datos 2G-3G"</string>
@@ -2709,11 +2711,11 @@
<string name="data_usage_cycle_editor_title" msgid="4967309390043599889">"Elige el día en el que empezará cada ciclo"</string>
<string name="data_usage_cycle_editor_subtitle" msgid="6043098041946166597">"Día de cada mes:"</string>
<string name="data_usage_cycle_editor_positive" msgid="9155752056537811646">"Establecer"</string>
- <string name="data_usage_warning_editor_title" msgid="1431385383278389290">"Establecer advertencia de uso de datos"</string>
- <string name="data_usage_limit_editor_title" msgid="1687908662154108293">"Limitar uso de datos"</string>
+ <string name="data_usage_warning_editor_title" msgid="1431385383278389290">"Establece la advertencia de uso de datos"</string>
+ <string name="data_usage_limit_editor_title" msgid="1687908662154108293">"Limita el uso de datos"</string>
<string name="data_usage_limit_dialog_title" msgid="8804760847110131518">"Limitar uso de datos"</string>
- <string name="data_usage_limit_dialog_mobile" product="tablet" msgid="2000713577999830647">"El tablet desactivará los datos móviles cuando se alcance el límite establecido.\n\nSe tiene en cuenta el uso de datos medido por el tablet, aunque tu operador podría registrarlo de forma diferente. Por tanto, debes ser prudente al establecer un límite."</string>
- <string name="data_usage_limit_dialog_mobile" product="default" msgid="943546278705619205">"El teléfono desactivará los datos móviles cuando se alcance el límite establecido.\n\nSe tiene en cuenta el uso de datos medido por el teléfono, aunque tu operador podría registrarlo de forma diferente. Por tanto, debes ser prudente al establecer un límite."</string>
+ <string name="data_usage_limit_dialog_mobile" product="tablet" msgid="2000713577999830647">"El tablet desactivará los datos móviles cuando se alcance el límite establecido.\n\nComo el uso de datos lo calcula el tablet y es posible que tu operador lo mida de forma diferente, se recomienda establecer un límite conservador."</string>
+ <string name="data_usage_limit_dialog_mobile" product="default" msgid="943546278705619205">"El teléfono desactivará los datos móviles cuando se alcance el límite establecido.\n\nComo el uso de datos lo calcula el teléfono y es posible que tu operador lo mida de forma diferente, se recomienda establecer un límite conservador."</string>
<string name="data_usage_restrict_background_title" msgid="3568746530413220844">"¿Restringir datos en segundo plano?"</string>
<string name="data_usage_restrict_background" msgid="995811034744808575">"Si restringes el uso de datos en segundo plano móviles, algunas aplicaciones y servicios no funcionarán si no tienes conexión a una red Wi‑Fi."</string>
<string name="data_usage_restrict_background_multiuser" product="tablet" msgid="6032810839234864814">"Si restringes el uso de datos en segundo plano, algunas aplicaciones y servicios no funcionarán si no tienes conexión a una red Wi‑Fi.\n\nEsta configuración afecta a todos los usuarios del tablet."</string>
@@ -2745,7 +2747,7 @@
<string name="vpn_ipsec_identifier" msgid="1230238784830362888">"Identificador de IPSec"</string>
<string name="vpn_ipsec_secret" msgid="1531503910441962752">"Clave precompartida de IPSec"</string>
<string name="vpn_ipsec_user_cert" msgid="2762078384595366852">"Certificado de usuario de IPSec"</string>
- <string name="vpn_ipsec_ca_cert" msgid="5537567128766402789">"Certificado de CA de IPSec"</string>
+ <string name="vpn_ipsec_ca_cert" msgid="5537567128766402789">"Certificado AC de IPSec"</string>
<string name="vpn_ipsec_server_cert" msgid="3066696943831527934">"Certificado del servidor IPSec"</string>
<string name="vpn_show_options" msgid="7672984921872882859">"Mostrar opciones avanzadas"</string>
<string name="vpn_search_domains" msgid="8469394307693909080">"Dominios de búsqueda de DNS"</string>
@@ -2766,15 +2768,15 @@
<string name="vpn_done" msgid="6314426362224527349">"Cerrar"</string>
<string name="vpn_save" msgid="1332625259182278316">"Guardar"</string>
<string name="vpn_connect" msgid="772295154834334710">"Conectar"</string>
- <string name="vpn_replace" msgid="7818130465019803404">"Sustituir"</string>
+ <string name="vpn_replace" msgid="7818130465019803404">"Reemplazar"</string>
<string name="vpn_edit" msgid="7284861108584255618">"Editar perfil de VPN"</string>
<string name="vpn_forget" msgid="7662717604542624887">"Olvidar"</string>
<string name="vpn_connect_to" msgid="7926776854873218762">"Conectar a <xliff:g id="PROFILE">%s</xliff:g>"</string>
<string name="vpn_disconnect_confirm" msgid="3505111947735651082">"¿Desconectar esta VPN?"</string>
<string name="vpn_disconnect" msgid="4625914562388652486">"Desconectar"</string>
<string name="vpn_version" msgid="2006792987077940456">"Versión <xliff:g id="VERSION">%s</xliff:g>"</string>
- <string name="vpn_forget_long" msgid="8457511440635534478">"Borrar VPN"</string>
- <string name="vpn_replace_vpn_title" msgid="8517436922021598103">"¿Sustituir VPN actual?"</string>
+ <string name="vpn_forget_long" msgid="8457511440635534478">"Olvidar VPN"</string>
+ <string name="vpn_replace_vpn_title" msgid="8517436922021598103">"¿Reemplazar VPN actual?"</string>
<string name="vpn_set_vpn_title" msgid="6483554732067951052">"¿Configurar el modo de VPN siempre activada?"</string>
<string name="vpn_first_always_on_vpn_message" msgid="7050017738816963855">"Si esta opción está activada, no tendrás acceso a Internet hasta que se conecte la red VPN"</string>
<string name="vpn_replace_always_on_vpn_enable_message" msgid="4149931501300203205">"La nueva red VPN sustituirá a la actual y no tendrás acceso a Internet hasta que dicha VPN se conecte"</string>
@@ -2807,13 +2809,13 @@
<string name="trusted_credentials_enable_label" msgid="8991649977058280799">"Habilitar"</string>
<string name="trusted_credentials_remove_label" msgid="530728557358501000">"Quitar"</string>
<string name="trusted_credentials_trust_label" msgid="1580022708780121664">"Confiar"</string>
- <string name="trusted_credentials_enable_confirmation" msgid="936560980286792656">"¿Quieres habilitar el certificado de CA del sistema?"</string>
- <string name="trusted_credentials_disable_confirmation" msgid="643386483024801539">"¿Quieres inhabilitar el certificado de CA del sistema?"</string>
- <string name="trusted_credentials_remove_confirmation" msgid="3731678919848637342">"¿Quieres eliminar el certificado de CA de usuario de forma permanente?"</string>
+ <string name="trusted_credentials_enable_confirmation" msgid="936560980286792656">"¿Quieres habilitar el certificado AC del sistema?"</string>
+ <string name="trusted_credentials_disable_confirmation" msgid="643386483024801539">"¿Quieres inhabilitar el certificado AC del sistema?"</string>
+ <string name="trusted_credentials_remove_confirmation" msgid="3731678919848637342">"¿Eliminar el certificado AC de usuario de forma permanente?"</string>
<string name="credential_contains" msgid="483346955378412119">"Esta entrada incluye:"</string>
<string name="one_userkey" msgid="5349738921509013845">"una clave de usuario"</string>
<string name="one_usercrt" msgid="856282310586987313">"un certificado de usuario"</string>
- <string name="one_cacrt" msgid="4757720453112732485">"un certificado de CA"</string>
+ <string name="one_cacrt" msgid="4757720453112732485">"un certificado AC"</string>
<string name="n_cacrts" msgid="7539893176217891549">"%d certificados de CA"</string>
<string name="user_credential_title" msgid="6237611303219831419">"Detalles de credenciales"</string>
<string name="user_credential_removed" msgid="6243576567538844852">"Quitar credencial: <xliff:g id="CREDENTIAL_NAME">%s</xliff:g>"</string>
@@ -2871,7 +2873,7 @@
<string name="user_add_user_message_long" msgid="686637203224195465">"Puedes compartir este dispositivo si creas más usuarios. Cada uno tendrá su propio espacio y podrá personalizarlo con aplicaciones, un fondo de pantalla y mucho más. Los usuarios también pueden ajustar opciones del dispositivo, como la conexión Wi‑Fi, que afectan a todos los usuarios.\n\nCuando añadas un usuario, tendrá que configurar su espacio.\n\nCualquier usuario puede actualizar aplicaciones de todos los usuarios. Es posible que no se transfieran los servicios y opciones de accesibilidad al nuevo usuario."</string>
<string name="user_add_user_message_short" msgid="1802594476285458254">"Al añadir un usuario nuevo, este debe configurar su espacio.\n\nCualquier usuario puede actualizar las aplicaciones del resto de usuarios."</string>
<string name="user_setup_dialog_title" msgid="6748950002206392396">"¿Configurar usuario ahora?"</string>
- <string name="user_setup_dialog_message" msgid="2988559933258353919">"Asegúrate de que la persona pueda acceder al dispositivo y configurar su espacio."</string>
+ <string name="user_setup_dialog_message" msgid="2988559933258353919">"Asegúrate de que la persona está disponible en este momento para usar el dispositivo y configurar su espacio."</string>
<string name="user_setup_profile_dialog_message" msgid="7611900802824048526">"¿Quieres configurar un perfil ahora?"</string>
<string name="user_setup_button_setup_now" msgid="4941459406266856176">"Configurar ahora"</string>
<string name="user_setup_button_setup_later" msgid="6596031428556518752">"Ahora no"</string>
@@ -2886,7 +2888,7 @@
<string name="user_confirm_remove_self_title" msgid="6739480453680217543">"¿Eliminarte a ti mismo?"</string>
<string name="user_confirm_remove_title" msgid="1034498514019462084">"¿Eliminar este usuario?"</string>
<string name="user_profile_confirm_remove_title" msgid="6138684743385947063">"¿Quitar este perfil?"</string>
- <string name="work_profile_confirm_remove_title" msgid="3168910958076735800">"¿Eliminar perfil de trabajo?"</string>
+ <string name="work_profile_confirm_remove_title" msgid="3168910958076735800">"¿Quitar perfil de trabajo?"</string>
<string name="user_confirm_remove_self_message" product="tablet" msgid="2889456786320157545">"Perderás tu espacio y tus datos en este tablet. Esta acción no se puede deshacer."</string>
<string name="user_confirm_remove_self_message" product="default" msgid="8441729423565705183">"Perderás tu espacio y tus datos en este teléfono. Esta acción no se puede deshacer."</string>
<string name="user_confirm_remove_message" msgid="5202150470271756013">"Se eliminarán todas las aplicaciones y datos"</string>
@@ -2922,8 +2924,8 @@
<string name="nfc_payment_favor_default" msgid="7555356982142464260">"Siempre"</string>
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"Excepto si hay otra aplicación de pago abierta"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"En terminales Toca y paga, pagar con:"</string>
- <string name="nfc_how_it_works_title" msgid="6531433737926327904">"Pago en terminal"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Configura una aplicación de pago. A continuación, solo tienes que sostener la parte trasera del teléfono sobre cualquier terminal con el símbolo de pago sin contacto."</string>
+ <string name="nfc_how_it_works_title" msgid="6531433737926327904">"Cómo pagar en el terminal"</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Configura una aplicación de pago. A continuación, solo tienes que sostener la parte trasera del teléfono sobre cualquier terminal con el símbolo de pago contactless."</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"Entendido"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"Más..."</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"¿Establecer como preferencia?"</string>
@@ -2933,8 +2935,8 @@
<string name="restriction_menu_reset" msgid="3642252461410370554">"Quitar restricciones"</string>
<string name="restriction_menu_change_pin" msgid="592512748243421101">"Cambiar PIN"</string>
<string name="app_notifications_switch_label" msgid="670683308275498821">"Mostrar notificaciones"</string>
- <string name="help_label" msgid="1296484776243905646">"Ayuda y sugerencias"</string>
- <string name="support_summary" msgid="3278943815956130740">"Artículos de ayuda, teléfono y chat, y cómo empezar"</string>
+ <string name="help_label" msgid="1296484776243905646">"Ayuda y comentarios"</string>
+ <string name="support_summary" msgid="3278943815956130740">"Artículos de ayuda, teléfono y chat, cómo empezar"</string>
<string name="user_account_title" msgid="2108666882630552859">"Cuenta para contenido"</string>
<string name="user_picture_title" msgid="6664602422948159123">"ID de foto"</string>
<string name="extreme_threats_title" msgid="1405820547540456436">"Amenazas extremas"</string>
@@ -3006,7 +3008,7 @@
<string name="sim_editor_color" msgid="373059962306191123">"Color de la SIM"</string>
<string name="sim_card_select_title" msgid="4925862525985187946">"Selecciona una tarjeta SIM"</string>
<string name="color_orange" msgid="3159707916066563431">"Naranja"</string>
- <string name="color_purple" msgid="4391440966734810713">"Violeta"</string>
+ <string name="color_purple" msgid="4391440966734810713">"Morado"</string>
<string name="sim_no_inserted_msg" msgid="1197884607569714609">"No se ha insertado ninguna tarjeta SIM"</string>
<string name="sim_status_title" msgid="4483653750844520871">"Estado de la SIM"</string>
<string name="sim_status_title_sim_slot" msgid="416005570947546124">"Estado de la SIM (ranura SIM %1$d)"</string>
@@ -3036,7 +3038,7 @@
<string name="connected_devices_dashboard_title" msgid="7795222675849060444">"Dispositivos conectados"</string>
<string name="connected_devices_dashboard_summary" msgid="1072664369515033179">"Bluetooth, modo de conducción, NFC"</string>
<string name="connected_devices_dashboard_no_nfc_summary" msgid="2610085597733526722">"Bluetooth, modo de conducción"</string>
- <string name="connected_devices_dashboard_no_driving_mode_summary" msgid="3524409078596318803">"Bluetooth y NFC"</string>
+ <string name="connected_devices_dashboard_no_driving_mode_summary" msgid="3524409078596318803">"Bluetooth, NFC"</string>
<string name="connected_devices_dashboard_no_driving_mode_no_nfc_summary" msgid="7881286613528299400">"Bluetooth"</string>
<string name="app_and_notification_dashboard_title" msgid="8448096608058843730">"Aplicaciones y notificaciones"</string>
<string name="app_and_notification_dashboard_summary" msgid="4165181440955038145">"Asistente, aplicaciones recientes y aplicaciones predeterminadas"</string>
@@ -3044,7 +3046,7 @@
<string name="account_dashboard_title" msgid="4734300939532555885">"Cuentas"</string>
<string name="account_dashboard_default_summary" msgid="6822549669771936206">"No se ha añadido ninguna cuenta"</string>
<string name="app_default_dashboard_title" msgid="6575301028225232193">"Aplicaciones predeterminadas"</string>
- <string name="system_dashboard_summary" msgid="6582464466735779394">"Idiomas, gestos, hora y copias de seguridad"</string>
+ <string name="system_dashboard_summary" msgid="6582464466735779394">"Idiomas, gestos, hora, copias de seguridad"</string>
<string name="search_results_title" msgid="4160717656435503940">"Ajustes"</string>
<string name="keywords_wifi" msgid="8477688080895466846">"wifi, wi‑fi, conexión de red, internet, inalámbrica, datos, wi fi"</string>
<string name="keywords_wifi_notify_open_networks" msgid="1031260564121854773">"Notificación Wi‑Fi, notificación Wi‑Fi"</string>
@@ -3128,17 +3130,17 @@
<string name="keywords_battery_saver_sticky" msgid="8733804259716284872">"ahorro de batería, batería fija, duradera, ahorro de batería, batería"</string>
<string name="default_sound" msgid="6675629744816442953">"Sonido predeterminado"</string>
<string name="sound_settings_summary" msgid="8467549670633195109">"Volumen del tono de llamada al <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
- <string name="sound_dashboard_summary" msgid="5187301919242823508">"Volumen, vibración y No molestar"</string>
+ <string name="sound_dashboard_summary" msgid="5187301919242823508">"Volumen, vibración, No molestar"</string>
<string name="sound_settings_summary_vibrate" msgid="2194491116884798590">"Timbre en vibración"</string>
<string name="sound_settings_summary_silent" msgid="899823817462768876">"Timbre en silencio"</string>
<string name="sound_settings_example_summary" msgid="2091822107298841827">"Volumen del tono de llamada al 80 %"</string>
<string name="media_volume_option_title" msgid="3553411883305505682">"Volumen de multimedia"</string>
<string name="remote_media_volume_option_title" msgid="6355710054191873836">"Volumen de envío"</string>
<string name="call_volume_option_title" msgid="5028003296631037334">"Volumen de llamada"</string>
- <string name="alarm_volume_option_title" msgid="3184076022438477047">"Volumen de la alarma"</string>
+ <string name="alarm_volume_option_title" msgid="3184076022438477047">"Volumen de alarma"</string>
<string name="ring_volume_option_title" msgid="2038924918468372264">"Volumen del tono"</string>
<string name="notification_volume_option_title" msgid="1358512611511348260">"Volumen de notificaciones"</string>
- <string name="ringtone_title" msgid="1409086028485922583">"Tono del teléfono"</string>
+ <string name="ringtone_title" msgid="1409086028485922583">"Tono de llamada del teléfono"</string>
<string name="notification_ringtone_title" msgid="2932960620843976285">"Sonido de notificación predeterminado"</string>
<string name="notification_unknown_sound_title" msgid="8043718667804838398">"Sonido proporcionado de app"</string>
<string name="notification_sound_default" msgid="2664544380802426260">"Sonido de notificación predeterminado"</string>
@@ -3159,8 +3161,8 @@
<string name="emergency_tone_alert" msgid="907868135091891015">"Tonos"</string>
<string name="emergency_tone_vibrate" msgid="5020068066905681181">"Vibraciones"</string>
<string name="boot_sounds_title" msgid="7583926202411353620">"Sonidos de encendido"</string>
- <string name="live_caption_title" msgid="7926591158657997051">"Subtítulos instantáneos"</string>
- <string name="live_caption_summary" msgid="9064771862352393125">"Subtítulos automáticos de multimedia"</string>
+ <string name="live_caption_title" msgid="7926591158657997051">"Subtítulos automáticos"</string>
+ <string name="live_caption_summary" msgid="9064771862352393125">"Subtitula automáticamente el contenido multimedia"</string>
<string name="zen_mode_settings_summary_off" msgid="6929319200478424962">"Nunca"</string>
<plurals name="zen_mode_settings_summary_on" formatted="false" msgid="6061723291126091396">
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> habilitadas</item>
@@ -3199,7 +3201,7 @@
<string name="zen_mode_restrict_notifications_mute_footer" msgid="3049522809520549054">"Cuando recibas notificaciones, tu teléfono no sonará ni vibrará."</string>
<string name="zen_mode_restrict_notifications_hide" msgid="3296933643539682552">"Notificaciones sin sonido ni elementos visuales"</string>
<string name="zen_mode_restrict_notifications_hide_summary" msgid="1449301153755270168">"No verás ni escucharás notificaciones"</string>
- <string name="zen_mode_restrict_notifications_hide_footer" msgid="7617688597593946765">"Las notificaciones no se mostrarán ni harán que el teléfono suene o vibre. Recuerda que las notificaciones críticas sobre la actividad y el estado del teléfono se seguirán mostrando.\n\nCuando desactives el modo No molestar, podrás deslizar el dedo desde la parte superior de la pantalla para leer las notificaciones que no hayas visto."</string>
+ <string name="zen_mode_restrict_notifications_hide_footer" msgid="7617688597593946765">"Las notificaciones no se mostrarán ni harán que el teléfono suene o vibre. Recuerda que las notificaciones críticas sobre la actividad y el estado del teléfono se seguirán mostrando.\n\nCuando desactives el modo No molestar, desliza el dedo desde la parte superior de la pantalla para leer las notificaciones que no hayas visto."</string>
<string name="zen_mode_restrict_notifications_custom" msgid="3167252482570424133">"Personalizado"</string>
<string name="zen_mode_restrict_notifications_enable_custom" msgid="6376983315529894440">"Habilitar configuración personalizada"</string>
<string name="zen_mode_restrict_notifications_disable_custom" msgid="8004212081465043044">"Quitar configuración personalizada"</string>
@@ -3212,8 +3214,8 @@
<string name="zen_mode_block_effect_sound" msgid="1499243540186357631">"Silenciar sonido y vibración"</string>
<string name="zen_mode_block_effect_intent" msgid="5666951244667422668">"No encender la pantalla"</string>
<string name="zen_mode_block_effect_light" msgid="8679333758037487644">"No hacer parpadear la luz"</string>
- <string name="zen_mode_block_effect_peek" msgid="6075662813575910221">"No mostrar notificaciones en pantalla"</string>
- <string name="zen_mode_block_effect_status" msgid="6516614225115681068">"Ocultar iconos de la barra de estado en la parte superior de la pantalla"</string>
+ <string name="zen_mode_block_effect_peek" msgid="6075662813575910221">"No mostrar notificaciones en la pantalla"</string>
+ <string name="zen_mode_block_effect_status" msgid="6516614225115681068">"Ocultar iconos de la barra de estado superior"</string>
<string name="zen_mode_block_effect_badge" msgid="3891743027347075136">"Ocultar puntos de notificación en los iconos de las aplicaciones"</string>
<string name="zen_mode_block_effect_ambient" msgid="6382013125863616197">"No activar con notificaciones"</string>
<string name="zen_mode_block_effect_list" msgid="6081548478844912181">"Ocultar de la lista de notificaciones"</string>
@@ -3238,8 +3240,8 @@
<string name="zen_mode_settings_dnd_custom_settings_footer_link" msgid="4007974052885089379"><annotation id="link">" Ver ajustes personalizados"</annotation></string>
<string name="zen_interruption_level_priority" msgid="9178419297408319234">"Solo interrupciones prioritarias"</string>
<string name="zen_mode_and_condition" msgid="4123722186007123567">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
- <string name="zen_mode_sound_summary_on_with_info" msgid="2539952366467518398">"Activado/<xliff:g id="ID_1">%1$s</xliff:g>"</string>
- <string name="zen_mode_sound_summary_off_with_info" msgid="3910718455243440265">"Desactivado/<xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="zen_mode_sound_summary_on_with_info" msgid="2539952366467518398">"Activado / <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="zen_mode_sound_summary_off_with_info" msgid="3910718455243440265">"Desactivado / <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="zen_mode_sound_summary_off" msgid="2800265178411749309">"Desactivado"</string>
<string name="zen_mode_sound_summary_on" msgid="6964666541479146310">"Activado"</string>
<string name="zen_mode_duration_summary_always_prompt" msgid="7642321938427056823">"Preguntar siempre (a menos que se haya activado automáticamente)"</string>
@@ -3285,8 +3287,8 @@
<string name="work_notification_ringtone_title" msgid="8059159087214025757">"Sonido de notificación de trabajo predeterminado"</string>
<string name="work_alarm_ringtone_title" msgid="5328487181385375130">"Sonido de alarma de trabajo predeterminado"</string>
<string name="work_sound_same_as_personal" msgid="7728560881697159758">"Igual que el perfil personal"</string>
- <string name="work_sync_dialog_title" msgid="4799120971202956837">"¿Sustituir sonidos?"</string>
- <string name="work_sync_dialog_yes" msgid="2110726233746476066">"Sustituir"</string>
+ <string name="work_sync_dialog_title" msgid="4799120971202956837">"¿Reemplazar sonidos?"</string>
+ <string name="work_sync_dialog_yes" msgid="2110726233746476066">"Reemplazar"</string>
<string name="work_sync_dialog_message" msgid="944233463059129156">"Se utilizarán los sonidos de tu perfil personal en tu perfil de trabajo"</string>
<string name="ringtones_install_custom_sound_title" msgid="210551218424553671">"¿Añadir sonido personalizado?"</string>
<string name="ringtones_install_custom_sound_content" msgid="6683649115132255452">"Este archivo se copiará en la carpeta <xliff:g id="FOLDER_NAME">%s</xliff:g>"</string>
@@ -3295,7 +3297,7 @@
<string name="configure_notification_settings" msgid="291914315140851270">"Notificaciones"</string>
<string name="recent_notifications" msgid="8125865995065032049">"Enviadas recientemente"</string>
<string name="recent_notifications_see_all_title" msgid="4089007770442871469">"Ver las de los últimos 7 días"</string>
- <string name="advanced_section_header" msgid="984680389373090015">"Ajustes avanzados"</string>
+ <string name="advanced_section_header" msgid="984680389373090015">"Avanzado"</string>
<string name="profile_section_header" msgid="5471479005472037417">"Notificaciones de trabajo"</string>
<string name="asst_capability_prioritizer_title" msgid="3488284760645922160">"Prioridad de los avisos automáticos"</string>
<string name="asst_capability_prioritizer_summary" msgid="3525640645743790796">"Silenciar y disminuir el nivel de las notificaciones menos importantes"</string>
@@ -3420,7 +3422,7 @@
<string name="notification_content_block_summary" msgid="2743896875255591743">"No mostrar nunca notificaciones en el panel de notificaciones ni en dispositivos periféricos"</string>
<string name="notification_badge_title" msgid="8989086619255666442">"Permitir burbuja de notificación"</string>
<string name="notification_channel_badge_title" msgid="8228215248332054612">"Mostrar burbuja de notificación"</string>
- <string name="app_notification_override_dnd_title" msgid="1757042206738172601">"Omitir No molestar"</string>
+ <string name="app_notification_override_dnd_title" msgid="1757042206738172601">"Ignorar modo No molestar"</string>
<string name="app_notification_override_dnd_summary" msgid="3152957611171210980">"Permitir notificaciones cuando el modo No molestar esté activado"</string>
<string name="app_notification_visibility_override_title" msgid="2349335170165637672">"En la pantalla de bloqueo"</string>
<string name="app_notification_row_banned" msgid="2079325338122151677">"Bloqueada"</string>
@@ -3441,7 +3443,7 @@
<string name="zen_mode_add_time_rule" msgid="5999467757140524729">"Añadir programación horaria"</string>
<string name="zen_mode_delete_rule" msgid="2292933835997203801">"Eliminar programación"</string>
<string name="zen_mode_choose_rule_type" msgid="8877138307319450306">"Elige un tipo de programación"</string>
- <string name="zen_mode_delete_rule_confirmation" msgid="2646596466259025978">"¿Quieres eliminar la regla \"<xliff:g id="RULE">%1$s</xliff:g>\"?"</string>
+ <string name="zen_mode_delete_rule_confirmation" msgid="2646596466259025978">"¿Eliminar regla \"<xliff:g id="RULE">%1$s</xliff:g>\"?"</string>
<string name="zen_mode_delete_rule_button" msgid="611058106279881991">"Eliminar"</string>
<string name="zen_mode_rule_type_unknown" msgid="2819480113355191421">"Desconocida"</string>
<string name="zen_mode_app_set_behavior" msgid="8597398780262575571">"Estas opciones no se pueden modificar en este momento. Una aplicación (<xliff:g id="APP_NAME">%1$s</xliff:g>) ha activado automáticamente el modo No molestar con funcionamiento personalizado."</string>
@@ -3467,10 +3469,10 @@
<string name="zen_mode_schedule_rule_days_none" msgid="6011716195119389956">"Ninguno"</string>
<string name="zen_mode_schedule_rule_days_all" msgid="8814173364016139675">"Todos los días"</string>
<string name="zen_mode_schedule_alarm_title" msgid="2078194049274875023">"La alarma puede anular la hora de finalización"</string>
- <string name="zen_mode_schedule_alarm_summary" msgid="5556997989911412070">"La programación se desactiva cuando suena una alarma"</string>
+ <string name="zen_mode_schedule_alarm_summary" msgid="5556997989911412070">"La programación se desactiva si suena una alarma"</string>
<string name="zen_mode_custom_behavior_title" msgid="8908861697886331001">"Comportamiento del modo No molestar"</string>
<string name="zen_mode_custom_behavior_summary_default" msgid="3509865340195397447">"Usar configuración predeterminada"</string>
- <string name="zen_mode_custom_behavior_summary" msgid="7206909852887332604">"Crear opciones de configuración personalizadas para esta programación"</string>
+ <string name="zen_mode_custom_behavior_summary" msgid="7206909852887332604">"Crear ajustes personalizados para esta programación"</string>
<string name="zen_mode_custom_behavior_category_title" msgid="7451686525113262087">"En la programación \"<xliff:g id="SCHEDULE_NAME">%1$s</xliff:g>\""</string>
<string name="summary_divider_text" msgid="4780683204694442666">", "</string>
<string name="summary_range_symbol_combination" msgid="6038631664844488406">"<xliff:g id="START">%1$s</xliff:g>-<xliff:g id="END">%2$s</xliff:g>"</string>
@@ -3640,7 +3642,7 @@
<string name="filter_notif_low_channels" msgid="6859599463135775287">"Categorías: poca importancia"</string>
<string name="filter_notif_blocked_channels" msgid="6110799550327612670">"Categorías: desactivadas"</string>
<string name="filter_notif_dnd_channels" msgid="3251570137256371092">"Categorías: prioritarias"</string>
- <string name="advanced_apps" msgid="6643869089344883537">"Ajustes avanzados"</string>
+ <string name="advanced_apps" msgid="6643869089344883537">"Avanzado"</string>
<string name="configure_apps" msgid="4066683118857400943">"Configurar aplicaciones"</string>
<string name="unknown_app" msgid="2312052973570376877">"Aplicación desconocida"</string>
<string name="app_permissions" msgid="3215958256821756086">"Gestor de permisos"</string>
@@ -3744,7 +3746,7 @@
<string name="usb_control_device" msgid="9154790265254725254">"Este dispositivo"</string>
<string name="usb_switching" msgid="1230386065163529904">"Cambiando..."</string>
<string name="usb_switching_failed" msgid="6857722544186145439">"No se ha podido hacer el cambio"</string>
- <string name="usb_summary_charging_only" msgid="4118449308708872339">"Cargando el dispositivo"</string>
+ <string name="usb_summary_charging_only" msgid="4118449308708872339">"Cargando este dispositivo"</string>
<string name="usb_summary_power_only" msgid="3552240122641051107">"Cargando dispositivo conectado"</string>
<string name="usb_summary_file_transfers" msgid="7805342797099821502">"Transferencia de archivos"</string>
<string name="usb_summary_tether" msgid="778845069037366883">"Compartir conexión por USB"</string>
@@ -3757,12 +3759,12 @@
<string name="background_check_pref" msgid="664081406854758392">"Comprobación de uso en segundo plano"</string>
<string name="background_check_title" msgid="4136736684290307970">"Acceso completo en segundo plano"</string>
<string name="assist_access_context_title" msgid="2274614501747710439">"Usar texto de la pantalla"</string>
- <string name="assist_access_context_summary" msgid="5867997494395842785">"Permitir que la aplicación de asistencia acceda a los contenidos de la pantalla (como texto)"</string>
+ <string name="assist_access_context_summary" msgid="5867997494395842785">"Permite que la aplicación de asistencia acceda a los contenidos de la pantalla como texto"</string>
<string name="assist_access_screenshot_title" msgid="1991014038776117688">"Usar captura de pantalla"</string>
- <string name="assist_access_screenshot_summary" msgid="3010943864000489424">"Permitir que la aplicación de asistencia acceda a una imagen de la pantalla"</string>
+ <string name="assist_access_screenshot_summary" msgid="3010943864000489424">"Permite que la aplicación de asistencia acceda a una imagen de la pantalla"</string>
<string name="assist_flash_title" msgid="8852484250748551092">"Parpadear la pantalla"</string>
- <string name="assist_flash_summary" msgid="6697095786317559129">"Hacer parpadear los bordes de la pantalla cuando la aplicación de asistencia acceda al texto de una pantalla o una captura de pantalla"</string>
- <string name="assist_footer" msgid="7030121180457472165">"Las aplicaciones de asistencia te ayudan según la información que aparece en la pantalla. Algunas aplicaciones admiten tanto el launcher como los servicios de entrada de voz para ofrecerte asistencia integrada."</string>
+ <string name="assist_flash_summary" msgid="6697095786317559129">"Los bordes de la pantalla parpadearán cuando la aplicación de asistencia acceda al texto de una pantalla o una captura de pantalla"</string>
+ <string name="assist_footer" msgid="7030121180457472165">"Las aplicaciones de asistencia te ayudan según la información que aparezca en la pantalla. Algunas aplicaciones admiten tanto el launcher como los servicios de entrada de voz para ofrecerte asistencia integrada."</string>
<string name="average_memory_use" msgid="5333366040118953945">"Uso medio de memoria"</string>
<string name="maximum_memory_use" msgid="6509872438499846077">"Uso máximo de memoria"</string>
<string name="memory_usage" msgid="7963253555330830906">"Uso de memoria"</string>
@@ -3860,7 +3862,7 @@
<string name="storage_summary_with_sdcard" msgid="8742907204848352697">"Almacenamiento interno: <xliff:g id="PERCENTAGE">%1$s</xliff:g> usado (<xliff:g id="FREE_SPACE">%2$s</xliff:g> disponible)"</string>
<string name="display_summary" msgid="5725269449657325797">"Suspender después de <xliff:g id="TIMEOUT_DESCRIPTION">%1$s</xliff:g> de inactividad"</string>
<string name="display_dashboard_summary" msgid="7678566148167010682">"Fondo de pantalla, suspensión, tamaño de la fuente"</string>
- <string name="display_dashboard_summary_with_style" msgid="8981059474501210956">"Estilos y fondos de pantalla, suspensión y tamaño de fuente"</string>
+ <string name="display_dashboard_summary_with_style" msgid="8981059474501210956">"Estilos y fondos de pantalla, suspensión, tamaño de fuente"</string>
<string name="display_dashboard_nowallpaper_summary" msgid="8612534364908229000">"Tamaño de letra en la pantalla de suspensión"</string>
<string name="display_summary_example" msgid="4555020581960719296">"Suspender después de 10 minutos de inactividad"</string>
<string name="memory_summary" msgid="9121871336058042600">"Se está usando una media de <xliff:g id="USED_MEMORY">%1$s</xliff:g> de <xliff:g id="TOTAL_MEMORY">%2$s</xliff:g> de memoria"</string>
@@ -3955,7 +3957,7 @@
<string name="data_used_template" msgid="761605393453849477">"<xliff:g id="ID_1">%1$s</xliff:g> usados"</string>
<string name="set_data_warning" msgid="8115980184415563941">"Establecer advertencia de datos"</string>
<string name="data_warning" msgid="2699207195535036240">"Advertencia de datos"</string>
- <string name="data_warning_footnote" msgid="965724845580257305">"La advertencia y el límite de datos se basan en los cálculos del dispositivo y es posible que no coincidan con los datos del operador."</string>
+ <string name="data_warning_footnote" msgid="965724845580257305">"La advertencia y el límite de datos se basan en los cálculos del dispositivo, así que es posible que no coincidan con los datos del operador."</string>
<string name="set_data_limit" msgid="5043770023229990674">"Establecer límite de datos"</string>
<string name="data_limit" msgid="5793521160051596228">"Límite de datos"</string>
<string name="data_usage_template" msgid="6848274347956096882">"<xliff:g id="ID_1">%1$s</xliff:g> usados (<xliff:g id="ID_2">%2$s</xliff:g>)"</string>
@@ -4000,7 +4002,7 @@
<string name="suggestion_additional_fingerprints" msgid="3434467207282466411">"Añadir otra huella digital"</string>
<string name="suggestion_additional_fingerprints_summary" msgid="1916547587832484196">"Desbloquear con un dedo diferente"</string>
<string name="battery_saver_on_summary" msgid="6841062406467435672">"Activado"</string>
- <string name="battery_saver_off_scheduled_summary" msgid="3740414764069188669">"Se activará cuando esté al <xliff:g id="BATTERY_PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_saver_off_scheduled_summary" msgid="3740414764069188669">"Se activará cuando la batería esté al <xliff:g id="BATTERY_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="battery_saver_off_summary" msgid="8736555723004299721">"Desactivado"</string>
<string name="battery_saver_button_turn_on" msgid="3748696527267573793">"Activar ahora"</string>
<string name="battery_saver_button_turn_off" msgid="2912950982503267828">"Desactivar"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Si el dispositivo está bloqueado, evitar que se escriban respuestas u otros textos en las notificaciones"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Corrector predeterminado"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Elige corrector ortográfico"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Usar el corrector ortográfico"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Usar corrector ortográfico"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"No seleccionado"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(ninguno)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4060,7 +4062,7 @@
<string name="button_confirm_convert_fbe" msgid="419832223125147297">"Borrar y convertir"</string>
<string name="reset_shortcut_manager_throttling" msgid="1912184636360233397">"Restablecer límite de frecuencia de ShortcutManager"</string>
<string name="reset_shortcut_manager_throttling_complete" msgid="2932990541160593632">"Se ha restablecido el límite de frecuencia de ShortcutManager"</string>
- <string name="notification_suggestion_title" msgid="3292107671498148560">"Controlar los datos que aparecen en la pantalla de bloqueo"</string>
+ <string name="notification_suggestion_title" msgid="3292107671498148560">"Controla los datos que aparecen en la pantalla de bloqueo"</string>
<string name="notification_suggestion_summary" msgid="6516827892359614597">"Mostrar u ocultar contenido de las notificaciones"</string>
<string name="page_tab_title_summary" msgid="4824744863994538006">"Todo"</string>
<string name="page_tab_title_support" msgid="5569262185010367870">"Ayuda y consejos"</string>
@@ -4101,10 +4103,10 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Para liberar espacio, el Administrador de Almacenamiento borrará de tu dispositivo las fotos y vídeos que tengan copia de seguridad."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Borrar fotos y vídeos"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Administrador de almacenamiento"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Utilizar el Administrador de Almacenamiento"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Usar administrador de almacenamiento"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automático"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manual"</string>
- <string name="deletion_helper_preference_title" msgid="797270307034242206">"Liberar espacio"</string>
+ <string name="deletion_helper_preference_title" msgid="797270307034242206">"Liberar espacio ahora"</string>
<string name="gesture_preference_title" msgid="583646591518373785">"Gestos"</string>
<string name="gesture_preference_summary" product="default" msgid="2990736567599191163">"Gestos rápidos para controlar el teléfono"</string>
<string name="gesture_preference_summary" product="tablet" msgid="8303793594714075580">"Gestos rápidos para controlar el tablet"</string>
@@ -4118,9 +4120,9 @@
<string name="swipe_up_to_switch_apps_summary" msgid="4644068184114154787">"Para cambiar de aplicación, desliza el dedo hacia arriba sobre el botón de inicio. Vuelve a deslizarlo hacia arriba para ver todas las aplicaciones. Funciona en cualquier pantalla. El botón Aplicaciones recientes ya no aparecerá en la parte inferior derecha."</string>
<string name="swipe_up_to_switch_apps_suggestion_title" msgid="7641846365137536128">"Prueba el nuevo botón de inicio"</string>
<string name="swipe_up_to_switch_apps_suggestion_summary" msgid="7338653224520387852">"Activa el nuevo gesto para cambiar de aplicación"</string>
- <string name="ambient_display_title" product="default" msgid="6785677099744344088">"Tocar el teléfono dos veces para consultarlo"</string>
- <string name="ambient_display_title" product="tablet" msgid="1106285490888683613">"Tocar el tablet dos veces para comprobar notificaciones"</string>
- <string name="ambient_display_title" product="device" msgid="5064644474876041478">"Tocar el dispositivo dos veces para comprobar notificaciones"</string>
+ <string name="ambient_display_title" product="default" msgid="6785677099744344088">"Doble toque para consultar el teléfono"</string>
+ <string name="ambient_display_title" product="tablet" msgid="1106285490888683613">"Doble toque para consultar el tablet"</string>
+ <string name="ambient_display_title" product="device" msgid="5064644474876041478">"Doble toque para consultar el dispositivo"</string>
<string name="ambient_display_summary" msgid="4882910328216411109">"Toca la pantalla dos veces para consultar la hora, las notificaciones y otra información."</string>
<string name="ambient_display_pickup_title" product="default" msgid="7141652156907066938">"Levantar el teléfono para consultarlo"</string>
<string name="ambient_display_pickup_title" product="tablet" msgid="1555456400210301959">"Levantar el tablet para comprobar las notificaciones"</string>
@@ -4134,10 +4136,10 @@
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"Toca para comprobar el dispositivo"</string>
<string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"Para ver la hora, las notificaciones y otra información, toca la pantalla."</string>
<string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"Deslizar por el sensor de huellas para ver notificaciones"</string>
- <string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"Deslizar huella digital"</string>
- <string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"Para ver tus notificaciones, desliza el dedo hacia abajo en el sensor de huellas digitales situado en la parte trasera del teléfono."</string>
- <string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"Para ver tus notificaciones, desliza el dedo hacia abajo en el sensor de huellas digitales situado en la parte trasera del tablet."</string>
- <string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="7950264130913070035">"Para ver tus notificaciones, desliza el dedo hacia abajo en el sensor de huellas digitales situado en la parte trasera del dispositivo."</string>
+ <string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"Deslizar por sensor de huella digital"</string>
+ <string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"Para ver tus notificaciones, desliza el dedo hacia abajo en el sensor de huellas digitales de la parte trasera del teléfono."</string>
+ <string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"Para ver tus notificaciones, desliza el dedo hacia abajo en el sensor de huellas digitales de la parte trasera del tablet."</string>
+ <string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="7950264130913070035">"Para ver tus notificaciones, desliza el dedo hacia abajo en el sensor de huellas digitales de la parte trasera del dispositivo."</string>
<string name="fingerprint_swipe_for_notifications_suggestion_title" msgid="948946491233738823">"Ver las notificaciones más rápido"</string>
<string name="gesture_setting_on" msgid="7573680730101327866">"Activado"</string>
<string name="gesture_setting_off" msgid="2540159841716890511">"Desactivado"</string>
@@ -4158,7 +4160,7 @@
<string name="auto_sync_account_title" msgid="2394463123733529506">"Sincronizar datos automáticamente"</string>
<string name="auto_sync_personal_account_title" msgid="6844465157916100655">"Sincronizar datos personales automáticamente"</string>
<string name="auto_sync_work_account_title" msgid="2403222633447522376">"Sincronizar datos del trabajo automáticamente"</string>
- <string name="auto_sync_account_summary" msgid="6316230976974033772">"Permitir que las aplicaciones actualicen los datos automáticamente"</string>
+ <string name="auto_sync_account_summary" msgid="6316230976974033772">"Permite que las aplicaciones actualicen los datos automáticamente"</string>
<string name="account_sync_title" msgid="1570164819114297154">"Sincronización"</string>
<string name="account_sync_summary_some_on" msgid="1934556869158274053">"Sincronización activada para <xliff:g id="ID_1">%1$d</xliff:g> de <xliff:g id="ID_2">%2$d</xliff:g> elementos"</string>
<string name="account_sync_summary_all_on" msgid="3634161204232431700">"Sincronización activada para todos los elementos"</string>
@@ -4242,14 +4244,14 @@
<string name="storage_volume_total" msgid="5021484171514159913">"usados de <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
<string name="storage_percent_full" msgid="6924662861545958442">"usado"</string>
<string name="clear_instant_app_data" msgid="3673669086522890405">"Borrar aplicación"</string>
- <string name="clear_instant_app_confirmation" msgid="1778553115373698061">"¿Quieres quitar esta aplicación instantánea?"</string>
+ <string name="clear_instant_app_confirmation" msgid="1778553115373698061">"¿Quitar esta aplicación instantánea?"</string>
<string name="launch_instant_app" msgid="5251693061228352333">"Abrir"</string>
<string name="game_storage_settings" msgid="6856911551799175914">"Juegos"</string>
<string name="audio_files_title" msgid="3073879661731363935">"Archivos de audio"</string>
<string name="app_info_storage_title" msgid="6643391804949509308">"Espacio usado"</string>
<string name="webview_uninstalled_for_user" msgid="3407952144444040557">"(opción desinstalada para <xliff:g id="USER">%s</xliff:g>)"</string>
<string name="webview_disabled_for_user" msgid="8057805373224993504">"(opción inhabilitada para <xliff:g id="USER">%s</xliff:g>)"</string>
- <string name="autofill_app" msgid="3990765434980280073">"Servicio Autocompletar"</string>
+ <string name="autofill_app" msgid="3990765434980280073">"Autocompletar"</string>
<string name="autofill_keywords" msgid="7717726766232862218">"automático, completar, autocompletar"</string>
<string name="autofill_confirmation_message" msgid="1385894598730361304">"<b>Asegúrate de que confías en esta aplicación</b> <br/> <br/> <xliff:g id=app_name example=Autocompletar de Google>%1$s</xliff:g> utiliza el contenido que se muestra en la pantalla para determinar el texto que se puede autocompletar."</string>
<string name="debug_autofill_category" msgid="6262526615416295645">"Autocompletar"</string>
@@ -4305,7 +4307,7 @@
<string name="unknown_unavailability_setting_summary" msgid="5785931810977403534">"La opción no está disponible"</string>
<string name="my_device_info_account_preference_title" msgid="7965847995028952373">"Cuenta"</string>
<string name="my_device_info_device_name_preference_title" msgid="7384446683248009296">"Nombre del dispositivo"</string>
- <string name="change_wifi_state_title" msgid="5140754955787584174">"Control de la conexión Wi‑Fi"</string>
+ <string name="change_wifi_state_title" msgid="5140754955787584174">"Control de Wi‑Fi"</string>
<string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"Permitir que la aplicación controle la conexión Wi‑Fi"</string>
<string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Permitir que esta aplicación active o desactive la conexión Wi‑Fi, busque redes Wi‑Fi y se conecte a ellas, añada o quite redes o inicie un punto de acceso local"</string>
<string name="media_output_title" msgid="8710632337456601848">"Reproducir contenido multimedia en"</string>
@@ -4337,7 +4339,7 @@
<string name="homepage_personal_settings" msgid="7472638597249114564">"Sugerencias"</string>
<string name="choose_network_title" msgid="3213314359630522396">"Elegir red"</string>
<string name="network_disconnected" msgid="8677203031237141594">"Desconectado"</string>
- <string name="network_connected" msgid="8197627827976712053">"Conectada"</string>
+ <string name="network_connected" msgid="8197627827976712053">"Conectado"</string>
<string name="network_connecting" msgid="8798611458457547110">"Conectando…"</string>
<string name="network_could_not_connect" msgid="552874922030763713">"No se ha podido conectar"</string>
<string name="empty_networks_list" msgid="5170020017144403884">"No se ha encontrado ninguna red."</string>
@@ -4383,7 +4385,7 @@
<string name="carrier_settings_title" msgid="7989949967020825268">"Ajustes del operador"</string>
<string name="cdma_lte_data_service" msgid="8996857851150069339">"Configurar servicio de datos"</string>
<string name="mobile_data_settings_title" msgid="3439626666647519547">"Datos móviles"</string>
- <string name="mobile_data_settings_summary" msgid="6492798151325636912">"Acceder a los datos con la red móvil"</string>
+ <string name="mobile_data_settings_summary" msgid="6492798151325636912">"Acceder a datos con la red móvil"</string>
<string name="mobile_data_settings_summary_auto_switch" msgid="3665863214578471494">"El teléfono cambiará automáticamente a este operador cuando esté en su rango"</string>
<string name="calls_preference" msgid="2076353032705811243">"Preferencias de llamadas"</string>
<string name="sms_preference" msgid="8449270011976880">"Preferencia de SMS"</string>
@@ -4421,9 +4423,9 @@
<string name="mobile_network_erase_sim_dialog_progress" msgid="4881754030959536493">"Borrando SIM…"</string>
<string name="mobile_network_erase_sim_error_dialog_title" msgid="9026625253242102706">"No se puede borrar la SIM"</string>
<string name="mobile_network_erase_sim_error_dialog_body" msgid="5955463559366034787">"No se puede eliminar esta SIM debido a un error.\n\nReinicia el dispositivo y vuelve a intentarlo."</string>
- <string name="preferred_network_mode_title" msgid="8324526359482124770">"Preferencia de tipo de red"</string>
+ <string name="preferred_network_mode_title" msgid="8324526359482124770">"Tipo de red preferido"</string>
<string name="preferred_network_mode_summary" msgid="388957154320426335">"Cambiar el modo operativo de la red"</string>
- <string name="preferred_network_mode_dialogtitle" msgid="5448698073828567428">"Preferencia de tipo de red"</string>
+ <string name="preferred_network_mode_dialogtitle" msgid="5448698073828567428">"Tipo de red preferido"</string>
<string name="carrier_settings_euicc" msgid="7723199738771996732">"Operador"</string>
<string name="carrier_settings_version" msgid="2657511289029828425">"Versión de Ajustes"</string>
<string name="call_category" msgid="3418535202893644015">"Llamadas"</string>
@@ -4437,13 +4439,13 @@
<string name="cdma_subscription_summary" msgid="2298861419202726628">"Cambiar entre RUIM/SIM y NV"</string>
<string name="cdma_subscription_dialogtitle" msgid="232485231569225126">"suscripción"</string>
<string name="register_automatically" msgid="1858081641661493109">"Registro automático…"</string>
- <string name="roaming_alert_title" msgid="1849237823113454475">"¿Permitir la itinerancia de datos?"</string>
+ <string name="roaming_alert_title" msgid="1849237823113454475">"¿Permitir itinerancia de datos?"</string>
<string name="roaming_check_price_warning" msgid="5883499714594419439">"Ponte en contacto con tu proveedor de red para consultar el precio."</string>
<string name="mobile_data_usage_title" msgid="2376358672434990037">"Uso de datos de la aplicación"</string>
<string name="mobile_network_mode_error" msgid="6818434186286086554">"El modo de red <xliff:g id="NETWORKMODEID">%1$d</xliff:g> no es válido. Ignorar."</string>
<string name="mobile_network_apn_title" msgid="5628635067747404382">"Nombres de puntos de acceso"</string>
<string name="manual_mode_disallowed_summary" msgid="799800630000340665">"No está disponible cuando se está conectado a <xliff:g id="CARRIER">%1$s</xliff:g>"</string>
- <string name="emergency_info_contextual_card_summary" msgid="5541444321969803486">"Información médica y contactos de emergencia"</string>
+ <string name="emergency_info_contextual_card_summary" msgid="5541444321969803486">"Información médica, contactos de emergencia"</string>
<string name="see_more" msgid="7463940160389802632">"Ver más"</string>
<string name="see_less" msgid="3718892257002813387">"Ver menos"</string>
<string name="network_connection_request_dialog_title" msgid="3150489262902506588">"Dispositivo para usar con <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
@@ -4469,13 +4471,13 @@
<string name="hwui_force_dark_title" msgid="3744825212652331461">"Forzar el modo oscuro"</string>
<string name="hwui_force_dark_summary" msgid="2051891908674765817">"Forzar el modo oscuro para que esté siempre activo"</string>
<string name="privacy_dashboard_title" msgid="8764930992456607513">"Privacidad"</string>
- <string name="privacy_dashboard_summary" msgid="7916431309860824945">"Permisos, actividad de la cuenta y datos personales"</string>
+ <string name="privacy_dashboard_summary" msgid="7916431309860824945">"Permisos, actividad de la cuenta, datos personales"</string>
<string name="contextual_card_dismiss_remove" msgid="1750420285615827309">"Eliminar"</string>
<string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"Conservar"</string>
- <string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"¿Eliminar esta sugerencia?"</string>
+ <string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"¿Quitar esta sugerencia?"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"Sugerencia eliminada"</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"Deshacer"</string>
- <string name="low_storage_summary" msgid="4562224870189133400">"Queda poco espacio de almacenamiento. <xliff:g id="PERCENTAGE">%1$s</xliff:g> usado (disponible: <xliff:g id="FREE_SPACE">%2$s</xliff:g>)"</string>
+ <string name="low_storage_summary" msgid="4562224870189133400">"Queda poco espacio. <xliff:g id="PERCENTAGE">%1$s</xliff:g> usado - <xliff:g id="FREE_SPACE">%2$s</xliff:g> libre"</string>
<string name="contextual_card_feedback_send" msgid="8698649023854350623">"Enviar comentarios"</string>
<string name="contextual_card_feedback_confirm_message" msgid="3987973028353264878">"¿Te gustaría darnos tu opinión sobre esta sugerencia?"</string>
<string name="copyable_slice_toast" msgid="1357518174923789947">"<xliff:g id="COPY_CONTENT">%1$s</xliff:g> se ha copiado en el portapapeles."</string>
diff --git a/tests/CarDeveloperOptions/res/values-et/arrays.xml b/tests/CarDeveloperOptions/res/values-et/arrays.xml
index 62ffe5d..b61fb65 100644
--- a/tests/CarDeveloperOptions/res/values-et/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-et/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"taustal käitamine"</item>
<item msgid="6423861043647911030">"juurdepääsetavuse helitugevus"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Asukoht"</item>
+ <item msgid="6656077694190491067">"Asukoht"</item>
+ <item msgid="8790228218278477369">"Asukoht"</item>
+ <item msgid="7836406246005211990">"Vibratsioon"</item>
+ <item msgid="3951439024549922598">"Kontaktide lugemine"</item>
+ <item msgid="8802152411647068">"Kontaktide muutmine"</item>
+ <item msgid="229544934599698735">"Kõnelogi lugemine"</item>
+ <item msgid="7396102294405899613">"Kõnelogi muutmine"</item>
+ <item msgid="3597797992398484655">"Kalendri lugemine"</item>
+ <item msgid="2705975774250907343">"Kalendri muutmine"</item>
+ <item msgid="4668747371441932697">"Asukoht"</item>
+ <item msgid="1487578921720243646">"Märguande postitamine"</item>
+ <item msgid="4636080349724146638">"Asukoht"</item>
+ <item msgid="673510900286463926">"Helistamine telefonile"</item>
+ <item msgid="542083422784609790">"SMS-i/MMS-i lugemine"</item>
+ <item msgid="1033780373029588436">"SMS-i/MMS-i kirjutamine"</item>
+ <item msgid="5647111115517787488">"SMS-i/MMS-i vastuvõtmine"</item>
+ <item msgid="8591105601108455893">"SMS-i/MMS-i vastuvõtmine"</item>
+ <item msgid="7730995008517841903">"SMS-i/MMS-i vastuvõtmine"</item>
+ <item msgid="2613033109026626086">"SMS-i/MMS-i vastuvõtmine"</item>
+ <item msgid="3037159047591081136">"SMS-i/MMS-i saatmine"</item>
+ <item msgid="4726682243833913568">"SMS-i/MMS-i lugemine"</item>
+ <item msgid="6555678522277865572">"SMS-i/MMS-i kirjutamine"</item>
+ <item msgid="6981734935578130884">"Seadete muutmine"</item>
+ <item msgid="8705854389991425629">"Peale joonistamine"</item>
+ <item msgid="5861356020344153651">"Juurdepääsumärguanded"</item>
+ <item msgid="78432174621628659">"Kaamera"</item>
+ <item msgid="3986116419882154794">"Heli salvestamine"</item>
+ <item msgid="4516840825756409490">"Heli esitamine"</item>
+ <item msgid="6811712502798183957">"Lõikelaua lugemine"</item>
+ <item msgid="2780369012602289114">"Lõikelaua muutmine"</item>
+ <item msgid="2331359440170850868">"Meedianupud"</item>
+ <item msgid="6133599737122751231">"Helifookus"</item>
+ <item msgid="6844485713404805301">"Põhihelitugevus"</item>
+ <item msgid="1600379420669104929">"Hääle helitugevus"</item>
+ <item msgid="6296768210470214866">"Helina helitugevus"</item>
+ <item msgid="510690696071629241">"Meedia helitugevus"</item>
+ <item msgid="406861638631430109">"Äratuse helitugevus"</item>
+ <item msgid="4715864795872233884">"Märguande helitugevus"</item>
+ <item msgid="2311478519251301183">"Bluetoothi helitugevus"</item>
+ <item msgid="5133991377896747027">"Hoia ärkvel"</item>
+ <item msgid="2464189519136248621">"Asukoht"</item>
+ <item msgid="2062677934050803037">"Asukoht"</item>
+ <item msgid="1735171933192715957">"Kasutusstatistika hankimine"</item>
+ <item msgid="1014093788778383554">"Mikrofoni vaigistamine või vaigistuse tühistamine"</item>
+ <item msgid="4199297950608622850">"Teatiste kuvamine"</item>
+ <item msgid="2527962435313398821">"Meediumi projitseerimine"</item>
+ <item msgid="5117506254221861929">"VPN-i aktiveerimine"</item>
+ <item msgid="8291198322681891160">"Taustapilt kirjutamiseks"</item>
+ <item msgid="7106921284621230961">"Abistruktuur"</item>
+ <item msgid="4496533640894624799">"Abistav ekraanipilt"</item>
+ <item msgid="2598847264853993611">"Telefoni oleku lugemine"</item>
+ <item msgid="9215610846802973353">"Kõneposti lisamine"</item>
+ <item msgid="9186411956086478261">"SIP kasutamine"</item>
+ <item msgid="6884763100104539558">"Väljamineva kõne töötlemine"</item>
+ <item msgid="125513972170580692">"Sõrmejälg"</item>
+ <item msgid="2556071024281275619">"Kehaandurid"</item>
+ <item msgid="617168514928339387">"Kärjeteadete lugemine"</item>
+ <item msgid="7134693570516523585">"Tehislik asukoht"</item>
+ <item msgid="7224489175375229399">"Salvestusruumi lugemine"</item>
+ <item msgid="8472735063903258202">"Salvestusruumi kirjutamine"</item>
+ <item msgid="4069276819909595110">"Ekraani sisselülitamine"</item>
+ <item msgid="1228338896751121025">"Kontode hankimine"</item>
+ <item msgid="3181581793459233672">"Taustal käitamine"</item>
+ <item msgid="2340936043025374076">"Juurdepääsetavuse helitugevus"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Lühike"</item>
<item msgid="4816511817309094890">"Keskmine"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Ära luba kunagi"</item>
<item msgid="8184570120217958741">"Luba alati"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Tavaline"</item>
+ <item msgid="5101233285497327432">"Keskmine"</item>
+ <item msgid="1555861583162930714">"Väike"</item>
+ <item msgid="1719683776264798117">"Kriitiline"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Tavaline"</item>
+ <item msgid="6107138933849816768">"Mõõdukas"</item>
+ <item msgid="182695359839047859">"Väike"</item>
+ <item msgid="8577246509202964244">"Kriitiline"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Püsiv"</item>
<item msgid="167418068739176448">"Sagedasim tegevus"</item>
diff --git a/tests/CarDeveloperOptions/res/values-et/strings.xml b/tests/CarDeveloperOptions/res/values-et/strings.xml
index 2a56fc7..b84a5b5 100644
--- a/tests/CarDeveloperOptions/res/values-et/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-et/strings.xml
@@ -80,11 +80,10 @@
<string name="sdcard_format" product="default" msgid="4831611387627849108">"Kustuta SD-kaart"</string>
<string name="preview_pager_content_description" msgid="5731599395893090038">"Eelvaade"</string>
<string name="preview_page_indicator_content_description" msgid="3192955679074998362">"Eelvaade, <xliff:g id="CURRENT_PAGE">%1$d</xliff:g>. leht <xliff:g id="NUM_PAGES">%2$d</xliff:g>-st"</string>
- <string name="font_size_summary" msgid="9120023206321191067">"Muutke ekraanil kuvatavat tekst suuremaks või väiksemaks."</string>
+ <string name="font_size_summary" msgid="9120023206321191067">"Muutke ekraanil kuvatavat teksti suuremaks või väiksemaks."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Vähendamine"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Suurendamine"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Näidistekst"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Võlur Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"11. peatükk: Ozi imeline smaragdlinn"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Profiili teave"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Kontod"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Asukoht"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Kasuta asukohta"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Kasuta asukohta"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Väljas"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Sees – <xliff:g id="COUNT_1">%1$d</xliff:g> rakendust pääsevad asukohale juurde</item>
@@ -384,7 +383,7 @@
<string name="encryption_and_credential_settings_summary" product="tablet" msgid="8170667308598998791">"Seade on krüpteeritud"</string>
<string name="decryption_settings_summary" product="tablet" msgid="7524119945312453569">"Seade ei ole krüpteeritud"</string>
<string name="lockscreen_settings_title" msgid="1221505938891948413">"Lukustuskuva seaded"</string>
- <string name="lockscreen_settings_what_to_show_category" msgid="3133378945821488654">"Mida näidata?"</string>
+ <string name="lockscreen_settings_what_to_show_category" msgid="3133378945821488654">"Mida kuvada?"</string>
<string name="security_settings_summary" msgid="5210109100643223686">"Määrake Minu asukoht, ekraani avamine, SIM-kaardi lukk, mandaadi talletuslukk"</string>
<string name="cdma_security_settings_summary" msgid="1783066617800041869">"Määrake oma asukoht, ekraani avamine, mandaadi talletuslukk"</string>
<string name="security_passwords_title" msgid="6853942836045862315">"Privaatsus"</string>
@@ -467,11 +466,11 @@
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="3428927518029038956">"OK"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="4312297515772004580">"Kustuta"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"Puudutage andurit"</string>
- <string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Asetage oma sõrm andurile ja kui tunnete värinat, siis tõstke see üles"</string>
+ <string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Asetage oma sõrm andurile ja kui tunnete värinat, siis tõstke see üles."</string>
<string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"Tõstke, seejärel puudutage uuesti"</string>
- <string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Tõstke sõrme, et lisada sõrmejälje eri osad"</string>
+ <string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Tõstke sõrme, et lisada sõrmejälje eri osad."</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"Sõrmejälg on lisatud"</string>
- <string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"Kui näete seda ikooni, kasutage tuvastamiseks või ostude kinnitamiseks oma sõrmejälge"</string>
+ <string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"Kui näete seda ikooni, kasutage tuvastamiseks või ostude kinnitamiseks oma sõrmejälge."</string>
<string name="security_settings_fingerprint_enroll_enrolling_skip" msgid="1473280156532146933">"Teen seda hiljem"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_title" msgid="2816424026528101690">"Kas jätta sõrmejälje seadistus vahele?"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_message" msgid="8139299964344809780">"Valisite telefoni avamise üheks viisiks sõrmejälje kasutamise. Kui seadistamise praegu vahele jätate, peate seda tegema hiljem. See võtab ainult umbes minuti."</string>
@@ -495,7 +494,7 @@
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"Järgmine"</string>
<string name="security_settings_fingerprint_enroll_disclaimer" msgid="5831834311961551423">"Lisaks telefoni avamisele saate oma sõrmejälje abil volitada ka ostusid ja juurdepääsu rakendustele. "<annotation id="url">"Lisateave"</annotation></string>
<string name="security_settings_fingerprint_enroll_disclaimer_lockscreen_disabled" msgid="7954742554236652690">" Ekraaniluku valik on keelatud. Küsige lisateavet organisatsiooni administraatorilt. "<annotation id="admin_details">"Rohkem üksikasju"</annotation>\n\n"Saate ka edaspidi sõrmejäljega oste volitada ja rakendustele juurde pääseda. "<annotation id="url">"Lisateave"</annotation></string>
- <string name="security_settings_fingerprint_enroll_lift_touch_again" msgid="1670703069782212223">"Tõstke sõrme, seejärel puudutage sõrmejäljelugejat uuesti"</string>
+ <string name="security_settings_fingerprint_enroll_lift_touch_again" msgid="1670703069782212223">"Tõstke sõrme, seejärel puudutage sõrmejäljeandurit uuesti"</string>
<string name="fingerprint_add_max" msgid="2939393314646115661">"Saate lisada kuni <xliff:g id="COUNT">%d</xliff:g> sõrmejälge"</string>
<string name="fingerprint_intro_error_max" msgid="3247720976621039437">"Olete lisanud maksimaalse arvu sõrmejälgi"</string>
<string name="fingerprint_intro_error_unknown" msgid="3975674268256524015">"Rohkem sõrmejälgi ei saa lisada"</string>
@@ -783,7 +782,7 @@
<string name="bluetooth_disconnect_hid_profile" msgid="6964226087090465662">"Seadme <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ühendus sisendseadmega katkestatakse."</string>
<string name="bluetooth_disconnect_pan_user_profile" msgid="5523689915196343097">"Katkestatakse Interneti-ühendus seadme <xliff:g id="DEVICE_NAME">%1$s</xliff:g> kaudu."</string>
<string name="bluetooth_disconnect_pan_nap_profile" product="tablet" msgid="8145126793699232403">"Tahvelarvuti Interneti-ühenduse jagamine seadmega <xliff:g id="DEVICE_NAME">%1$s</xliff:g> katkestatakse."</string>
- <string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="6040826983120279685">"Telefoni Interneti-ühenduse jagamine seadmega <xliff:g id="DEVICE_NAME">%1$s</xliff:g> katkestatakse."</string>
+ <string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="6040826983120279685">"Telefoni internetiühenduse jagamine seadmega <xliff:g id="DEVICE_NAME">%1$s</xliff:g> katkestatakse."</string>
<string name="bluetooth_device_advanced_title" msgid="5752155558126694036">"Seotud Bluetooth-seade"</string>
<string name="bluetooth_device_advanced_online_mode_title" msgid="7665622268007450665">"Ühenda"</string>
<string name="bluetooth_device_advanced_online_mode_summary" msgid="4180673788239241086">"Ühenda Bluetooth-seadmega"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"WiFi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Lülita WiFi sisse"</string>
<string name="wifi_settings" msgid="7486492317310514109">"WiFi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"WiFi kasutus"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Kasuta WiFi-t"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"WiFi-seaded"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"WiFi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Määra ja halda traadita pääsupunkte"</string>
@@ -934,11 +933,11 @@
<string name="wifi_ap_band_select_one" msgid="4409754936554360355">"Valige WiFi-kuumkoha lubamiseks vähemalt üks sagedusriba:"</string>
<string name="wifi_ip_settings" msgid="4636102290236116946">"IP-seaded"</string>
<string name="wifi_privacy_settings" msgid="4462092795794247809">"Privaatsus"</string>
- <string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"Juhuslik MAC-aadress"</string>
+ <string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"Juhulikustatud MAC-aadress"</string>
<string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"Seadme lisamine"</string>
- <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"Seadme võrku „<xliff:g id="SSID">%1$s</xliff:g>” lisamiseks paigutage allolev QR-kood aknas keskele"</string>
+ <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"Seadme võrku „<xliff:g id="SSID">%1$s</xliff:g>” lisamiseks paigutage QR-kood allolevas aknas keskele"</string>
<string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"QR-koodi skannimine"</string>
- <string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"Võrguga „<xliff:g id="SSID">%1$s</xliff:g>” ühenduse loomiseks paigutage allolev QR-kood aknas keskele"</string>
+ <string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"Võrguga „<xliff:g id="SSID">%1$s</xliff:g>” ühenduse loomiseks paigutage QR-kood allolevas aknas keskele"</string>
<string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"Liituge WiFi-võrguga, skannides QR-koodi"</string>
<string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"WiFi jagamine"</string>
<string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"Skannige see QR-kood, et luua ühendus võrguga „<xliff:g id="SSID">%1$s</xliff:g>” ja jagada parooli"</string>
@@ -964,7 +963,7 @@
<string name="wifi_dpp_lockscreen_title" msgid="3910665850075275963">"Kinnitage oma isik"</string>
<string name="wifi_dpp_wifi_password" msgid="8007558344032612455">"WiFi-võrgu parool: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
<string name="wifi_dpp_hotspot_password" msgid="6172326289042241924">"Kuumkoha parool: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
- <string name="wifi_dpp_add_device" msgid="1347056725253936358">"Lisa seade"</string>
+ <string name="wifi_dpp_add_device" msgid="1347056725253936358">"Seadme lisamine"</string>
<string name="wifi_dpp_connect_network_using_qr_code" msgid="115993715600532357">"Looge võrguga ühendus QR-koodi abil"</string>
<string name="retry" msgid="8500839563577344702">"Proovi uuesti"</string>
<string name="wifi_shared" msgid="5054256778276524960">"Jaga seadme teiste kasutajatega"</string>
@@ -976,7 +975,7 @@
<string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"Ära kinnita"</string>
<string name="wifi_do_not_validate_eap_server_warning" msgid="3895397996759837323">"Sertifikaati pole määratud. Teie ühendus pole privaatne."</string>
<string name="wifi_ssid_too_long" msgid="34911971389775920">"Võrgu nimi on liiga pikk."</string>
- <string name="wifi_no_domain_warning" msgid="735859919311067606">"Tuleb määrata domeen."</string>
+ <string name="wifi_no_domain_warning" msgid="735859919311067606">"Domeeni määramine on kohustuslik."</string>
<string name="wifi_wps_available_first_item" msgid="3221671453930485243">"WPS on saadaval"</string>
<string name="wifi_wps_available_second_item" msgid="5703265526619705185">" WPS on saadaval"</string>
<string name="wifi_carrier_connect" msgid="7202618367339982884">"Operaatori WiFi-võrk"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"WiFi"</item>
+ <item msgid="2271962426654621656">"Mobiilne andmeside"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Kasuta mobiilsidevõrku, kui WiFi ei ole saadaval"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Kasuta WiFi-ühendust, kui mobiilsidevõrk ei ole saadaval"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Helistage WiFi-võrgu kaudu. WiFi-ühenduse katkemisel kõne lõpeb."</string>
@@ -1524,11 +1526,11 @@
<string name="storage_wizard_ready_v2_internal_moved_body" msgid="4133133596316768033">"Sisu teisaldati seadmesse <xliff:g id="NAME_0">^1</xliff:g>. \n\nSeadme <xliff:g id="NAME_1">^2</xliff:g> haldamiseks tehke valikud "<b>"Seaded > Salvestusruum"</b>"."</string>
<string name="battery_status_title" msgid="8731200319740671905">"Aku olek"</string>
<string name="battery_level_title" msgid="5207775387973771646">"Aku tase"</string>
- <string name="apn_settings" msgid="8130776653826271664">"Pääsupunktid"</string>
+ <string name="apn_settings" msgid="8130776653826271664">"Pääsupunktid (APN-id)"</string>
<string name="apn_edit" msgid="4350571070853305357">"Pääsupunkti muutmine"</string>
<string name="apn_not_set" msgid="5344235604466825691">"Määramata"</string>
<string name="apn_name" msgid="8431432886706852226">"Nimi"</string>
- <string name="apn_apn" msgid="190519449579357696">"Pääsupunktnimi"</string>
+ <string name="apn_apn" msgid="190519449579357696">"Pääsupunkti nimi"</string>
<string name="apn_http_proxy" msgid="8816906767987944465">"Puhverserver"</string>
<string name="apn_http_port" msgid="5789193688960075486">"Port"</string>
<string name="apn_user" msgid="6979724587671704006">"Kasutajanimi"</string>
@@ -1544,7 +1546,7 @@
<string name="apn_auth_type_pap" msgid="6155876141679480864">"PAP"</string>
<string name="apn_auth_type_chap" msgid="5484031368454788686">"CHAP"</string>
<string name="apn_auth_type_pap_chap" msgid="2977833804460109203">"PAP või CHAP"</string>
- <string name="apn_type" msgid="6725346490902871146">"Pääsupunktinime tüüp"</string>
+ <string name="apn_type" msgid="6725346490902871146">"APN-i tüüp"</string>
<string name="apn_protocol" msgid="1240197323563960912">"APN-i protokoll"</string>
<string name="apn_roaming_protocol" msgid="6913336248771263497">"APN-i rändlusprotokoll"</string>
<string name="carrier_enabled" msgid="1819916725305365581">"Luba/keela APN"</string>
@@ -1619,11 +1621,11 @@
<string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"Kui andmemahu säästja on sisse lülitatud, siis ei saa jagada ega kasutada teisaldatavat kuumkohta"</string>
<string name="usb_title" msgid="7480927657535578688">"USB"</string>
<string name="usb_tethering_button_text" msgid="6242228383142012332">"USB jagamine"</string>
- <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Telefoni Interneti-ühenduse jagamine USB kaudu"</string>
+ <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Telefoni internetiühenduse jagamine USB kaudu"</string>
<string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"Tahvelarvuti Interneti-ühenduse jagamine USB kaudu"</string>
<string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"Jagamine Bluetoothiga"</string>
<string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"Tahvelarvuti Interneti-ühenduse jagamine Bluetoothi kaudu"</string>
- <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Telefoni Interneti-ühenduse jagamine Bluetoothi kaudu"</string>
+ <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Telefoni internetiühenduse jagamine Bluetoothi kaudu"</string>
<string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"Seadme <xliff:g id="DEVICE_NAME">%1$d</xliff:g> Interneti-ühenduse jagamine Bluetoothi kaudu"</string>
<string name="bluetooth_tethering_overflow_error" msgid="6946561351369376943">"Ei saa jagada rohkem kui <xliff:g id="MAXCONNECTION">%1$d</xliff:g> seadmele."</string>
<string name="bluetooth_untether_blank" msgid="5428300773782256084">"Seadme <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ühenduse jagamine lõpetatakse."</string>
@@ -1645,7 +1647,7 @@
<string name="mobile_insert_sim_card" msgid="7594550403454243732">"Sisestage SIM-kaart ja taaskäivitage"</string>
<string name="mobile_connect_to_internet" msgid="6031886097365170913">"Looge Interneti-ühendus"</string>
<string name="location_title" msgid="8664674161765477168">"Minu asukoht"</string>
- <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"Tööprofiili asukoht"</string>
+ <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"Tööprofiili asukohaluba"</string>
<string name="location_app_level_permissions" msgid="1298041503927632960">"Rakenduste load"</string>
<string name="location_app_permission_summary_location_off" msgid="541372845344796336">"Asukoht on välja lülitatud"</string>
<plurals name="location_app_permission_summary_location_on" formatted="false" msgid="7904821382328758218">
@@ -2037,7 +2039,7 @@
<string name="accessibility_settings_summary" msgid="5742379519336396561">"Ekraanilugejad, ekraan, interaktsiooni juhtnupud"</string>
<string name="vision_settings_title" msgid="7315352351051423944">"Nähtavuse seaded"</string>
<string name="vision_settings_description" msgid="3476589459009287332">"Seadet saab kohandada vastavalt oma vajadustele. Neid juurdepääsetavuse funktsioone saab hiljem muuta menüüs Seaded."</string>
- <string name="vision_settings_suggestion_title" msgid="7268661419110951128">"Fondi suuruse muutmine"</string>
+ <string name="vision_settings_suggestion_title" msgid="7268661419110951128">"Muutke fondi suurust"</string>
<string name="screen_reader_category_title" msgid="6300714148519645544">"Ekraanilugejad"</string>
<string name="audio_and_captions_category_title" msgid="6140472938769619212">"Heli ja ekraanil kuvatud tekst"</string>
<string name="display_category_title" msgid="545168481672250195">"Ekraan"</string>
@@ -2062,7 +2064,7 @@
<string name="accessibility_global_gesture_preference_title" msgid="3842279082831426816">"Helitugevuse nupu otsetee"</string>
<string name="accessibility_shortcut_service_title" msgid="3516052294376744060">"Otsetee teenus"</string>
<string name="accessibility_shortcut_service_on_lock_screen_title" msgid="1279441617927949980">"Lukustuskuval lubamine"</string>
- <string name="accessibility_shortcut_description" msgid="1427049334225166395">"Kui otsetee on sisse lülitatud, võite hõlbustusfunktsiooni käivitamiseks hoida mõlemat helitugevuse nuppu 3 sekundit all."</string>
+ <string name="accessibility_shortcut_description" msgid="1427049334225166395">"Kui otsetee on sisse lülitatud, võite hõlbustusfunktsiooni käivitamiseks hoida mõlemat helitugevuse klahvi 3 sekundit all."</string>
<string name="accessibility_toggle_high_text_contrast_preference_title" msgid="5652244684961877255">"Suure kontrastsusega tekst"</string>
<string name="accessibility_toggle_screen_magnification_auto_update_preference_title" msgid="2466317284195934003">"Ekraanisuurenduse värskendus"</string>
<string name="accessibility_toggle_screen_magnification_auto_update_preference_summary" msgid="6625473745911276917">"Ekraanisuurenduse kasutus rakenduste vahetamisel"</string>
@@ -2084,7 +2086,7 @@
<string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"Valige, kui kaua soovite kuvada sõnumeid, mida peate lugema, kuid mis on nähtavad ainult ajutiselt.\n\nKõik rakendused seda seadet ei toeta"</string>
<string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"Valige, kui kaua soovite kuvada sõnumeid, milles palutakse teil toiminguid teha, kuid mis on nähtaval ainult ajutiselt.\n\nKõik rakendused seda seadet ei toeta."</string>
<string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"Puute ja hoidmise viide"</string>
- <string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"Värvuste ümberpööramine"</string>
+ <string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"Värvide ümberpööramine"</string>
<string name="accessibility_display_inversion_preference_subtitle" msgid="69291255322175323">"Võib mõjutada toimivust"</string>
<string name="accessibility_autoclick_preference_title" msgid="9164599088410340405">"Peatumisaeg"</string>
<string name="accessibility_autoclick_description" msgid="5492414927846407499">"Kui kasutate hiirt, võite kursori seadistada automaatselt mõne toimingu tegema, kui see teatud aja jooksul ei liigu."</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Märguanne koos vibreerimisega"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Helin koos vibreerimisega"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Puudutusel vibreerimine"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Kasuta teenust"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Kasuta värvikorrigeerimist"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Kasuta subtiitreid"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Kasuta teenust"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Kasuta värvide korrigeerimist"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Kasuta subtiitreid"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Jätka"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Kuuldeaparaadid"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Ühtegi kuuldeaparaati pole ühendatud"</string>
@@ -2149,7 +2151,7 @@
<string name="captioning_standard_options_title" msgid="4124898413348084226">"Standardvalikud"</string>
<string name="captioning_locale" msgid="4734464353806207943">"Keel"</string>
<string name="captioning_text_size" msgid="1707122517246408084">"Teksti suurus"</string>
- <string name="captioning_preset" msgid="7429888317480872337">"Tiitri stiil"</string>
+ <string name="captioning_preset" msgid="7429888317480872337">"Subtiitri stiil"</string>
<string name="captioning_custom_options_title" msgid="4530479671071326732">"Kohandatud valikud"</string>
<string name="captioning_background_color" msgid="2434458880326292180">"Tausta värv"</string>
<string name="captioning_background_opacity" msgid="8178926599201811936">"Tausta läbipaistvus"</string>
@@ -2160,7 +2162,7 @@
<string name="captioning_edge_color" msgid="4330622137047993780">"Serva värv"</string>
<string name="captioning_edge_type" msgid="4414946407430588162">"Serva tüüp"</string>
<string name="captioning_typeface" msgid="7893208796949341767">"Fondi perekond"</string>
- <string name="captioning_preview_text" msgid="4877753964772618049">"Tiitrid näevad välja sellised"</string>
+ <string name="captioning_preview_text" msgid="4877753964772618049">"Subtiitrid näevad välja sellised"</string>
<string name="captioning_preview_characters" msgid="6469599599352973561">"Aa"</string>
<string name="locale_default" msgid="910074908458214054">"Vaikeseade"</string>
<string name="color_title" msgid="132875486061816584">"Värv"</string>
@@ -2297,7 +2299,7 @@
</plurals>
<plurals name="battery_tip_restrict_summary" formatted="false" msgid="984148373944071669">
<item quantity="other">%2$d rakendust kasutavad taustal palju akut</item>
- <item quantity="one">%1$s rakendus kasutab taustal palju akut</item>
+ <item quantity="one">Rakendus %1$s kasutab taustal palju akut</item>
</plurals>
<plurals name="battery_tip_restrict_handled_summary" formatted="false" msgid="469696766640020557">
<item quantity="other">Neid rakendusi ei saa taustal käitada</item>
@@ -2310,7 +2312,7 @@
<string name="battery_tip_restrict_app_dialog_message" msgid="6905822297507947381">"Aku säästmiseks peatage rakenduse <xliff:g id="APP">%1$s</xliff:g> jaoks taustal aku kasutamine. See rakendus ei pruugi korralikult töötada ja märguanded võivad viibida."</string>
<string name="battery_tip_restrict_apps_less_than_5_dialog_message" msgid="4225881888543582456">"Aku säästmiseks peatage nende rakenduste jaoks taustal aku kasutamine. Piiratud rakendused ei pruugi korralikult töötada ja märguanded võivad viibida.\n\nRakendused:"</string>
<string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"Aku säästmiseks peatage nende rakenduste jaoks taustal aku kasutamine. Piiratud rakendused ei pruugi korralikult töötada ja märguanded võivad viibida.\n\nRakendused:\n<xliff:g id="APP_LIST">%1$s</xliff:g>."</string>
- <string name="battery_tip_restrict_app_dialog_ok" msgid="2573410775701913487">"Piira"</string>
+ <string name="battery_tip_restrict_app_dialog_ok" msgid="2573410775701913487">"Piira:"</string>
<string name="battery_tip_unrestrict_app_dialog_title" msgid="812458516399125710">"Kas eemaldada piirang?"</string>
<string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"See rakendus saab taustal akut kasutada. Aku võib oodatust varem tühjaks saada."</string>
<string name="battery_tip_unrestrict_app_dialog_ok" msgid="9154938931448151479">"Eemalda"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Lülita sisse"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Kasuta akusäästjat"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Kasuta akusäästjat"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Automaatne sisselülitamine"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Mitte kunagi"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"aku taseme <xliff:g id="PERCENT">%1$s</xliff:g> juures"</string>
@@ -2528,7 +2530,7 @@
<string name="credentials_reset" msgid="355080737664731678">"Mandaatide kustutamine"</string>
<string name="credentials_reset_summary" msgid="7622528359699428555">"Kõikide sertifikaatide eemaldamine"</string>
<string name="trusted_credentials" msgid="6989242522455395200">"Usaldusväärsed mandaadid"</string>
- <string name="trusted_credentials_summary" msgid="7411781319056251582">"Usaldusväärsete CA-sertifikaatide kuvamine"</string>
+ <string name="trusted_credentials_summary" msgid="7411781319056251582">"Kuva usaldusväärsed CA-sertifikaadid"</string>
<string name="user_credentials" msgid="8365731467650306757">"Kasutaja mandaadid"</string>
<string name="user_credentials_summary" msgid="7350223899317423252">"Salvestatud mandaatide vaatamine ja muutmine"</string>
<string name="advanced_security_title" msgid="286883005673855845">"Täpsemad"</string>
@@ -2577,7 +2579,7 @@
<string name="add_device_admin_msg" msgid="3573765823476931173">"Kas aktiveerida admin. rakendus?"</string>
<string name="add_device_admin" msgid="1621152410207260584">"Aktiveeri seadme administraatori rakendus"</string>
<string name="device_admin_add_title" msgid="6097881332139146897">"Seadme administraator"</string>
- <string name="device_admin_warning" msgid="4421817419326480449">"Selle administraatori rakenduse aktiveerimisel lubatakse rakendusel <xliff:g id="APP_NAME">%1$s</xliff:g> teha järgmisi toiminguid:"</string>
+ <string name="device_admin_warning" msgid="4421817419326480449">"Selle administraatori rakenduse aktiveerimisel lubatakse rakendusel <xliff:g id="APP_NAME">%1$s</xliff:g> teha järgmisi toiminguid."</string>
<string name="device_admin_status" msgid="5424944611789040723">"See administraatori rakendus on aktiivne ja lubab rakendusel <xliff:g id="APP_NAME">%1$s</xliff:g> teha järgmisi toiminguid."</string>
<string name="profile_owner_add_title" msgid="735805919754362791">"Kas aktiveerida profiilihaldur?"</string>
<string name="adding_profile_owner_warning" msgid="1284541194547382194">"Kui jätkate, haldab teie kasutajat edaspidi administraator, kes saab võib-olla talletada peale teie isiklike andmete ka seotud andmeid.\n\nTeie administraator saab jälgida ja hallata selle kasutajaga seotud seadeid, juurdepääsu, rakendusi ja andmeid, sealhulgas veebitegevusi ja seadme asukohateavet."</string>
@@ -2902,7 +2904,7 @@
<string name="user_exit_guest_dialog_remove" msgid="1878866060881115716">"Eemalda"</string>
<string name="user_enable_calling" msgid="864760054792249503">"Lülita telefonikõned sisse"</string>
<string name="user_enable_calling_sms" msgid="3450252891736718793">"Lülita telefonikõned ja SMS-id sisse"</string>
- <string name="user_remove_user" msgid="3687544420125911166">"Kasutaja kustutamine"</string>
+ <string name="user_remove_user" msgid="3687544420125911166">"Kustuta kasutaja"</string>
<string name="user_enable_calling_confirm_title" msgid="1141612415529158542">"Kas lülitada telefonikõned sisse?"</string>
<string name="user_enable_calling_confirm_message" msgid="2490126715153125970">"Selle kasutajaga jagatakse kõneajalugu."</string>
<string name="user_enable_calling_and_sms_confirm_title" msgid="4153856398523366976">"Kas lülitada telefonikõned ja SMS-id sisse?"</string>
@@ -2920,7 +2922,7 @@
<string name="nfc_payment_app_and_desc" msgid="102312684211458190">"<xliff:g id="APP">%1$s</xliff:g> – <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
<string name="nfc_payment_use_default" msgid="3098724195746409476">"Kasuta vaikerakendust"</string>
<string name="nfc_payment_favor_default" msgid="7555356982142464260">"Alati"</string>
- <string name="nfc_payment_favor_open" msgid="3739055715000436749">"Välja arvatud siis, kui mõni teine makserakendus on avatud"</string>
+ <string name="nfc_payment_favor_open" msgid="3739055715000436749">"V.a siis, kui mõni teine makserakendus on avatud"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"Maksa teenuse Puuduta ja maksa terminalis rakendusega"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"Terminali kaudu maksmine"</string>
<string name="nfc_how_it_works_content" msgid="9174575836302449343">"Seadistage makserakendus. Seejärel peate oma telefoni tagakülge hoidma lihtsalt mis tahes terminali suunas, millel on kontaktivaba makse sümbol."</string>
@@ -3494,7 +3496,7 @@
<string name="zen_calls_summary_starred_repeat" msgid="9191394641577678207">"Tärniga tähistatud kontaktidelt ja korduvatelt helistajatelt"</string>
<string name="zen_calls_summary_contacts_repeat" msgid="7747592096431111510">"Kontaktidelt ja korduvatelt helistajatelt"</string>
<string name="zen_calls_summary_repeat_only" msgid="8839703337232747964">"Ainult korduvatelt helistajatelt"</string>
- <string name="zen_mode_from_none" msgid="7683889985618637010">"Mitte kelleltki"</string>
+ <string name="zen_mode_from_none" msgid="7683889985618637010">"Mitte ükski"</string>
<string name="zen_mode_from_none_calls" msgid="2967739140346917546">"Ära luba kõnesid"</string>
<string name="zen_mode_from_none_messages" msgid="9069143820057833634">"Ära luba ühtki sõnumit"</string>
<string name="zen_mode_alarms" msgid="5528707742250954290">"Luba märguanded"</string>
@@ -3515,9 +3517,9 @@
<string name="zen_mode_events_list" msgid="8578102701815684873">"sündmused"</string>
<string name="zen_mode_all_callers" msgid="4455039040077343838">"igaüks"</string>
<string name="zen_mode_contacts_callers" msgid="3116829245339716399">"kontaktid"</string>
- <string name="zen_mode_starred_callers" msgid="1317376207713013472">"tärniga tähistatud kontaktidelt"</string>
+ <string name="zen_mode_starred_callers" msgid="1317376207713013472">"tärniga tähistatud kontaktid"</string>
<string name="zen_mode_repeat_callers" msgid="1435309867554692340">"Korduvad helistajad"</string>
- <string name="zen_mode_repeat_callers_list" msgid="2750270907597457279">"korduvatelt helistajatelt"</string>
+ <string name="zen_mode_repeat_callers_list" msgid="2750270907597457279">"korduvad helistajad"</string>
<string name="zen_mode_repeat_callers_title" msgid="7192952181541813487">"Luba korduvad helistajad"</string>
<string name="zen_mode_calls_summary_one" msgid="8327371053236689649">"Luba <xliff:g id="CALLER_TYPE">%1$s</xliff:g>"</string>
<string name="zen_mode_calls_summary_two" msgid="9017678770532673578">"Luba <xliff:g id="CALLER_TYPE">%1$s</xliff:g> ja <xliff:g id="CALLERT_TPYE">%2$s</xliff:g>"</string>
@@ -3628,7 +3630,7 @@
<item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> täiendav luba</item>
</plurals>
<string name="runtime_permissions_summary_no_permissions_granted" msgid="3477934429220828771">"Lube pole antud"</string>
- <string name="runtime_permissions_summary_no_permissions_requested" msgid="3901636077467389637">"Lube ei taotletud"</string>
+ <string name="runtime_permissions_summary_no_permissions_requested" msgid="3901636077467389637">"Lube pole taotletud"</string>
<string name="filter_all_apps" msgid="4042756539846043675">"Kõik rakendused"</string>
<string name="filter_enabled_apps" msgid="5888459261768538489">"Installitud rakendused"</string>
<string name="filter_instant_apps" msgid="8087483282854072366">"Installimata avat. rakendused"</string>
@@ -3710,7 +3712,7 @@
<string name="high_power_system" msgid="739584574711292753">"Aku optimeerimine pole saadaval"</string>
<string name="high_power_desc" msgid="333756885680362741">"Aku optimeerimist ei rakendata. Aku võib kiiremini tühjeneda."</string>
<string name="high_power_prompt_title" msgid="2805745781720454052">"Kas soovite lubada rakendusel pidevalt taustal töötada?"</string>
- <string name="high_power_prompt_body" msgid="8067395096053552289">"Kui lubate rakendusel <xliff:g id="APP_NAME">%1$s</xliff:g> pidevalt taustal töötada, võib see vähendada aku tööiga.\n\nSaate seda hiljem muuta jaotises Seaded > Rakendused ja märguanded."</string>
+ <string name="high_power_prompt_body" msgid="8067395096053552289">"Kui lubate rakendusel <xliff:g id="APP_NAME">%1$s</xliff:g> pidevalt taustal töötada, võib see lühendada aku tööiga.\n\nSaate seda hiljem muuta jaotises Seaded > Rakendused ja märguanded."</string>
<string name="battery_summary" msgid="4345690800899981339">"Kasutus alates viimasest täislaadimisest on <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="battery_power_management" msgid="2853925857548647969">"Toitehaldus"</string>
<string name="no_battery_summary" msgid="4105932628367471314">"Akut pole pärast viimast täislaadimist kasutatud"</string>
@@ -4006,9 +4008,9 @@
<string name="battery_saver_button_turn_off" msgid="2912950982503267828">"Lülita kohe välja"</string>
<string name="not_battery_optimizing" msgid="2616044774307734160">"Aku optimeerimist ei kasutata"</string>
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Kui seade on lukus, keela märguannetes vastuste või muu teksti sisestamine"</string>
- <string name="default_spell_checker" msgid="8636661093243189533">"Vaikimisi õigekirjakontroll"</string>
+ <string name="default_spell_checker" msgid="8636661093243189533">"Vaikeõigekirjakontroll"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Õigekirjakontrolli valimine"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Kasuta õigekirjakontrolli"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Kasuta õigekirjakontrolli"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Pole valitud"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(puudub)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4050,7 +4052,7 @@
<string name="display_cutout_emulation_keywords" msgid="6795671536772871439">"ekraani väljalõige, lõige"</string>
<string name="overlay_option_device_default" msgid="165508753381657697">"Seadme vaikeseade"</string>
<string name="overlay_toast_failed_to_apply" msgid="5692251825129250040">"Ülekatet ei õnnestunud rakendada"</string>
- <string name="special_access" msgid="1453926335914696206">"Rakenduste erijuurdepääs"</string>
+ <string name="special_access" msgid="1453926335914696206">"Rakenduse erijuurdepääs"</string>
<plurals name="special_access_summary" formatted="false" msgid="5182092345063909346">
<item quantity="other"><xliff:g id="COUNT">%d</xliff:g> rakendusel on piiranguteta juurdepääs andmesidele</item>
<item quantity="one">1 rakendusel on piiranguteta juurdepääs andmesidele</item>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Salvestusruumi vabastamiseks eemaldab salvestusruumi haldur varundatud fotod ja videod teie seadmest."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Fotode ja videote eemaldamine"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Salvestusruumi haldur"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Kasuta salvestusruumi haldurit"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Kasuta salvestusruumi haldurit"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automaatne"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Käsitsi"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Vabastage ruumi"</string>
@@ -4110,7 +4112,7 @@
<string name="gesture_preference_summary" product="tablet" msgid="8303793594714075580">"Kiirliigutused tahvelarvuti juhtimiseks"</string>
<string name="gesture_preference_summary" product="device" msgid="7792199669106960922">"Kiirliigutused seadme juhtimiseks"</string>
<string name="double_tap_power_for_camera_title" msgid="5480829329052517484">"Kaamera avamine"</string>
- <string name="double_tap_power_for_camera_summary" msgid="6591026425496323965">"Kaamera kiireks avamiseks vajutage toitenuppu kaks korda. See töötab igast kuvast."</string>
+ <string name="double_tap_power_for_camera_summary" msgid="6591026425496323965">"Kaamera kiireks avamiseks vajutage toitenuppu kaks korda. See töötab igal kuval."</string>
<string name="double_tap_power_for_camera_suggestion_title" msgid="509078029429865036">"Kaamera kiiresti avamine"</string>
<string name="double_twist_for_camera_mode_title" msgid="2606032140297556018">"Kaamera vahetamine"</string>
<string name="double_twist_for_camera_mode_summary" msgid="8979914206876018137"></string>
@@ -4129,7 +4131,7 @@
<string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"Kellaaja, märguannete ja muu teabe vaatamiseks võtke telefon kätte."</string>
<string name="ambient_display_pickup_summary" product="tablet" msgid="1077745287100012928">"Kellaaja, märguannete ja muu teabe vaatamiseks võtke tahvelarvuti kätte."</string>
<string name="ambient_display_pickup_summary" product="device" msgid="404199660076598026">"Kellaaja, märguannete ja muu teabe vaatamiseks võtke seade kätte."</string>
- <string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"Puudutamine telefoni kontrollimiseks"</string>
+ <string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"Telefoni kontrollimiseks puudutamine"</string>
<string name="ambient_display_tap_screen_title" product="tablet" msgid="6434521782016864148">"Puudutamine tahvelarvuti kontrollimiseks"</string>
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"Puudutamine seadme kontrollimiseks"</string>
<string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"Kellaaja, märguannete ja muu teabe vaatamiseks puudutage oma ekraani."</string>
@@ -4308,7 +4310,7 @@
<string name="change_wifi_state_title" msgid="5140754955787584174">"WiFi-seadete juhtimine"</string>
<string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"Lubage rakendusel WiFi-seadeid juhtida"</string>
<string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Lubage sellel rakendusel WiFi sisse või välja lülitada, otsida WiFi-võrke ja nendega ühendus luua, võrke lisada või eemaldada või luua kohalik kuumkoht"</string>
- <string name="media_output_title" msgid="8710632337456601848">"Esita meedia seadmes"</string>
+ <string name="media_output_title" msgid="8710632337456601848">"Meedia esitamise seade:"</string>
<string name="media_output_default_summary" msgid="3159237976830415584">"See seade"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"Telefon"</string>
<string name="media_output_summary" product="tablet" msgid="6672024060360538526">"Tahvelarvuti"</string>
@@ -4439,7 +4441,7 @@
<string name="register_automatically" msgid="1858081641661493109">"Automaatne registreerimine …"</string>
<string name="roaming_alert_title" msgid="1849237823113454475">"Kas lubada andmesiderändlus?"</string>
<string name="roaming_check_price_warning" msgid="5883499714594419439">"Hinnakirja küsige oma võrguteenuse pakkujalt."</string>
- <string name="mobile_data_usage_title" msgid="2376358672434990037">"Rakenduse andmekasutus"</string>
+ <string name="mobile_data_usage_title" msgid="2376358672434990037">"Rakenduste andmekasutus"</string>
<string name="mobile_network_mode_error" msgid="6818434186286086554">"Võrgu režiim <xliff:g id="NETWORKMODEID">%1$d</xliff:g> on sobimatu. Eirake seda."</string>
<string name="mobile_network_apn_title" msgid="5628635067747404382">"Pääsupunktide nimed"</string>
<string name="manual_mode_disallowed_summary" msgid="799800630000340665">"Pole saadaval, kui on ühendus on loodud operaatoriga <xliff:g id="CARRIER">%1$s</xliff:g>"</string>
diff --git a/tests/CarDeveloperOptions/res/values-eu/arrays.xml b/tests/CarDeveloperOptions/res/values-eu/arrays.xml
index 7454bad..a0df5ca 100644
--- a/tests/CarDeveloperOptions/res/values-eu/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-eu/arrays.xml
@@ -38,7 +38,16 @@
<item msgid="5827960506924849753">"10 minutu"</item>
<item msgid="6677424950124253938">"30 minutu"</item>
</string-array>
- <!-- no translation found for dream_timeout_entries:7 (8271452751594598661) -->
+ <string-array name="dream_timeout_entries">
+ <item msgid="6487043225269853023">"Inoiz ez"</item>
+ <item msgid="2517785806387977252">"15 segundo"</item>
+ <item msgid="6347954399441173672">"30 segundo"</item>
+ <item msgid="4858305253279921789">"1 minutu"</item>
+ <item msgid="8109273437140044073">"2 minutu"</item>
+ <item msgid="2788593551142462622">"5 minutu"</item>
+ <item msgid="8012672183888404961">"10 minutu"</item>
+ <item msgid="8271452751594598661">"30 minutu"</item>
+ </string-array>
<string-array name="lock_after_timeout_entries">
<item msgid="2232921187970351881">"Berehala"</item>
<item msgid="2038544972632026612">"5 segundo"</item>
@@ -50,17 +59,47 @@
<item msgid="811192536981678974">"10 minutu"</item>
<item msgid="7258394417241706272">"30 minutu"</item>
</string-array>
- <!-- no translation found for entries_font_size:0 (2340391964816059553) -->
- <!-- no translation found for entries_font_size:0 (6490061470416867723) -->
- <!-- no translation found for entries_font_size:2 (1714184661981538355) -->
- <!-- no translation found for entries_font_size:2 (1678068858001018666) -->
- <!-- no translation found for wifi_status:3 (5848277343965362748) -->
- <!-- no translation found for wifi_status_with_ssid:1 (6816207058895999545) -->
- <!-- no translation found for wifi_status_with_ssid:3 (7547609081339573756) -->
- <!-- no translation found for wifi_status_with_ssid:4 (5145158315060185414) -->
+ <string-array name="entries_font_size">
+ <item msgid="2340391964816059553">"Txikia"</item>
+ <item msgid="591935967183159581">"Lehenetsia"</item>
+ <item msgid="1714184661981538355">"Handia"</item>
+ <item msgid="6195563047686707484">"Handiena"</item>
+ </string-array>
+ <string-array name="wifi_status">
+ <item msgid="1304883790721412351"></item>
+ <item msgid="4157625910392775808">"Bilatzen…"</item>
+ <item msgid="5597394826455877834">"Konektatzen…"</item>
+ <item msgid="5848277343965362748">"Autentifikatzen…"</item>
+ <item msgid="3391238031431440676">"IP helbidea lortzen…"</item>
+ <item msgid="5257597310494000224">"Konektatuta"</item>
+ <item msgid="8472497592913050396">"Etenda"</item>
+ <item msgid="1228072488815999109">"Deskonektatzen…"</item>
+ <item msgid="7253087004422991731">"Deskonektatuta"</item>
+ <item msgid="4169850917304751227">"Ezin izan da egin"</item>
+ <item msgid="6266658166690831131">"Blokeatuta"</item>
+ <item msgid="4517230805854909775">"Konexio ahula aldi baterako saihesten"</item>
+ </string-array>
+ <string-array name="wifi_status_with_ssid">
+ <item msgid="4853670665485437464"></item>
+ <item msgid="6816207058895999545">"Bilatzen…"</item>
+ <item msgid="8058143476674427024">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> sarera konektatzen…"</item>
+ <item msgid="7547609081339573756">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> sarearekin autentifikatzen…"</item>
+ <item msgid="5145158315060185414">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> sarearen IP helbidea lortzen…"</item>
+ <item msgid="3283243151651124831">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> sarera konektatuta"</item>
+ <item msgid="6600156231416890902">"Etenda"</item>
+ <item msgid="4133290864821295785">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> saretik deskonektatzen…"</item>
+ <item msgid="3980154971187953257">"Deskonektatuta"</item>
+ <item msgid="2847316776634969068">"Ezin izan da egin"</item>
+ <item msgid="4390990424746035383">"Blokeatuta"</item>
+ <item msgid="3618248791367063949">"Konexio ahula aldi baterako saihesten"</item>
+ </string-array>
<!-- no translation found for wifi_tether_security:0 (5586343370515598801) -->
<!-- no translation found for wifi_tether_security:1 (6136336549994615745) -->
- <!-- no translation found for wifi_p2p_wps_setup:0 (5390235347963255303) -->
+ <string-array name="wifi_p2p_wps_setup">
+ <item msgid="5390235347963255303">"Sakatu botoia"</item>
+ <item msgid="7401896200768713930">"Pareko gailuaren PINa"</item>
+ <item msgid="4526848028011846710">"Gailuaren PINa"</item>
+ </string-array>
<string-array name="wifi_p2p_status">
<item msgid="8741947238021758201">"Konektatuta"</item>
<item msgid="983792611851499732">"Gonbidatuta"</item>
@@ -82,8 +121,13 @@
<item msgid="1644506614010085798">"4"</item>
<item msgid="3132506679404897150">"5"</item>
</string-array>
- <!-- no translation found for wifi_signal:1 (7882129634982603782) -->
- <!-- no translation found for wifi_signal:4 (999948812884919584) -->
+ <string-array name="wifi_signal">
+ <item msgid="1709949377823900951">"Txarra"</item>
+ <item msgid="7882129634982603782">"Txarra"</item>
+ <item msgid="6457357501905996224">"Hala-holakoa"</item>
+ <item msgid="405271628162918841">"Ona"</item>
+ <item msgid="999948812884919584">"Bikaina"</item>
+ </string-array>
<string-array name="data_usage_data_range">
<item msgid="8986775481492954015">"Azken 30 egunak"</item>
<item msgid="3211287705232736964">"Erabilera-zikloa…"</item>
@@ -119,7 +163,10 @@
<item msgid="7330627471456865502">"MSCHAPV2"</item>
<item msgid="6255179395132581882">"GTC"</item>
</string-array>
- <!-- no translation found for wifi_ip_settings:1 (4377002609760712163) -->
+ <string-array name="wifi_ip_settings">
+ <item msgid="2717196390555072244">"DHCP"</item>
+ <item msgid="4377002609760712163">"Estatikoa"</item>
+ </string-array>
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"Bat ere ez"</item>
<item msgid="1464741437353223198">"Eskuliburua"</item>
@@ -192,7 +239,7 @@
<item msgid="6123238544099198034">"jaso SMS mezuak"</item>
<item msgid="838342167431596036">"jaso larrialdiko SMS mezuak"</item>
<item msgid="8554432731560956686">"jaso MMS mezuak"</item>
- <item msgid="7464863464299515059">"jaso WAP push-jakinarazpenak"</item>
+ <item msgid="7464863464299515059">"jaso WAP push jakinarazpenak"</item>
<item msgid="310463075729606765">"bidali SMS mezuak"</item>
<item msgid="7338021933527689514">"irakurri ICC SMS mezuak"</item>
<item msgid="6130369335466613036">"idatzi ICC SMS mezuak"</item>
@@ -239,11 +286,73 @@
<item msgid="1165623660533024666">"exekutatu atzeko planoan"</item>
<item msgid="6423861043647911030">"erabilerraztasun-eginbideen bolumena"</item>
</string-array>
- <!-- no translation found for app_ops_labels:3 (7836406246005211990) -->
- <!-- no translation found for app_ops_labels:4 (3951439024549922598) -->
- <!-- no translation found for app_ops_labels:8 (3597797992398484655) -->
- <!-- no translation found for app_ops_labels:20 (3037159047591081136) -->
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Kokapena"</item>
+ <item msgid="6656077694190491067">"Kokapena"</item>
+ <item msgid="8790228218278477369">"Kokapena"</item>
+ <item msgid="7836406246005211990">"Egin dar-dar"</item>
+ <item msgid="3951439024549922598">"Irakurri kontaktuak"</item>
+ <item msgid="8802152411647068">"Aldatu kontaktuak"</item>
+ <item msgid="229544934599698735">"Irakurri deien erregistroa"</item>
+ <item msgid="7396102294405899613">"Aldatu deien erregistroa"</item>
+ <item msgid="3597797992398484655">"Irakurri egutegia"</item>
+ <item msgid="2705975774250907343">"Aldatu egutegia"</item>
+ <item msgid="4668747371441932697">"Kokapena"</item>
+ <item msgid="1487578921720243646">"Bidali jakinarazpena"</item>
+ <item msgid="4636080349724146638">"Kokapena"</item>
+ <item msgid="673510900286463926">"Deitu telefonora"</item>
+ <item msgid="542083422784609790">"Irakurri SMS/MMS mezuak"</item>
+ <item msgid="1033780373029588436">"Idatzi SMS/MMS mezuak"</item>
+ <item msgid="5647111115517787488">"Jaso SMS/MMS mezuak"</item>
+ <item msgid="8591105601108455893">"Jaso SMS/MMS mezuak"</item>
+ <item msgid="7730995008517841903">"Jaso SMS/MMS mezuak"</item>
+ <item msgid="2613033109026626086">"Jaso SMS/MMS mezuak"</item>
+ <item msgid="3037159047591081136">"Bidali SMS/MMS mezuak"</item>
+ <item msgid="4726682243833913568">"Irakurri SMS/MMS mezuak"</item>
+ <item msgid="6555678522277865572">"Idatzi SMS/MMS mezuak"</item>
+ <item msgid="6981734935578130884">"Aldatu ezarpenak"</item>
+ <item msgid="8705854389991425629">"Marraztu gainean"</item>
+ <item msgid="5861356020344153651">"Atzitu jakinarazpenak"</item>
+ <item msgid="78432174621628659">"Kamera"</item>
+ <item msgid="3986116419882154794">"Grabatu audioa"</item>
+ <item msgid="4516840825756409490">"Erreproduzitu audioa"</item>
+ <item msgid="6811712502798183957">"Irakurri arbela"</item>
+ <item msgid="2780369012602289114">"Aldatu arbela"</item>
+ <item msgid="2331359440170850868">"Multimedia-botoiak"</item>
+ <item msgid="6133599737122751231">"Audio-fokuratzea"</item>
+ <item msgid="6844485713404805301">"Bolumen nagusia"</item>
+ <item msgid="1600379420669104929">"Ahotsaren bolumena"</item>
+ <item msgid="6296768210470214866">"Tonuaren bolumena"</item>
+ <item msgid="510690696071629241">"Multimedia-edukiaren bolumena"</item>
+ <item msgid="406861638631430109">"Alarmaren bolumena"</item>
+ <item msgid="4715864795872233884">"Jakinarazpenen bolumena"</item>
+ <item msgid="2311478519251301183">"Bluetooth bidezko audioaren bolumena"</item>
+ <item msgid="5133991377896747027">"Mantendu aktibo"</item>
+ <item msgid="2464189519136248621">"Kokapena"</item>
+ <item msgid="2062677934050803037">"Kokapena"</item>
+ <item msgid="1735171933192715957">"Lortu erabilera-estatistikak"</item>
+ <item msgid="1014093788778383554">"Aktibatu edo desaktibatu mikrofonoa"</item>
+ <item msgid="4199297950608622850">"Erakutsi leiho gainerakorra"</item>
+ <item msgid="2527962435313398821">"Proiektatu multimedia-edukia"</item>
+ <item msgid="5117506254221861929">"Aktibatu VPN konexioa"</item>
+ <item msgid="8291198322681891160">"Idatzi horma-paperean"</item>
+ <item msgid="7106921284621230961">"Lagundu egiturarekin"</item>
+ <item msgid="4496533640894624799">"Lagundu pantaila-argazkiarekin"</item>
+ <item msgid="2598847264853993611">"Irakurri telefonoaren egoera"</item>
+ <item msgid="9215610846802973353">"Gehitu erantzungailua"</item>
+ <item msgid="9186411956086478261">"Erabili SIP deiak"</item>
+ <item msgid="6884763100104539558">"Prozesatu egindako deia"</item>
+ <item msgid="125513972170580692">"Hatz-marka digitala"</item>
+ <item msgid="2556071024281275619">"Gorputz-sentsoreak"</item>
+ <item msgid="617168514928339387">"Irakurri sare mugikor bidezko igorpenak"</item>
+ <item msgid="7134693570516523585">"Imitatu kokapena"</item>
+ <item msgid="7224489175375229399">"Irakurri memoria"</item>
+ <item msgid="8472735063903258202">"Idatzi memorian"</item>
+ <item msgid="4069276819909595110">"Aktibatu pantaila"</item>
+ <item msgid="1228338896751121025">"Lortu kontuak"</item>
+ <item msgid="3181581793459233672">"Abiarazi atzeko planoan"</item>
+ <item msgid="2340936043025374076">"Erabilerraztasun-eginbideen bolumena"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Laburra"</item>
<item msgid="4816511817309094890">"Ertaina"</item>
@@ -260,7 +369,13 @@
<item msgid="4627069151979553527">"Etzana"</item>
<item msgid="6896773537705206194">"Maiuskula txikiak"</item>
</string-array>
- <!-- no translation found for captioning_font_size_selector_titles:3 (2784236342175159295) -->
+ <string-array name="captioning_font_size_selector_titles">
+ <item msgid="1680223634161592855">"Oso txikia"</item>
+ <item msgid="5091603983404027034">"Txikia"</item>
+ <item msgid="176844712416932112">"Normala"</item>
+ <item msgid="2784236342175159295">"Handia"</item>
+ <item msgid="218913203203160606">"Oso handia"</item>
+ </string-array>
<string-array name="captioning_edge_type_selector_titles">
<item msgid="3865198759294188069">"Lehenetsia"</item>
<item msgid="6488643537808152001">"Bat ere ez"</item>
@@ -275,7 +390,14 @@
<item msgid="1874668269931014581">"% 75"</item>
<item msgid="6462911487571123954">"% 100"</item>
</string-array>
- <!-- no translation found for captioning_preset_selector_titles:2 (5891360837786277638) -->
+ <string-array name="captioning_preset_selector_titles">
+ <item msgid="326819345272910536">"Erabili aplikazioaren lehenespenak"</item>
+ <item msgid="8611890312638868524">"Zuria beltzaren gainean"</item>
+ <item msgid="5891360837786277638">"Beltza zuriaren gainean"</item>
+ <item msgid="2798457065945456853">"Horia beltzaren gainean"</item>
+ <item msgid="5799049811524553967">"Horia urdinaren gainean"</item>
+ <item msgid="3673930830658169860">"Pertsonalizatua"</item>
+ </string-array>
<string-array name="vpn_types_long">
<item msgid="6566768880689730097">"PPTP VPN"</item>
<item msgid="1349760781118368659">"L2TP/IPSec VPNa aurrez partekatutako gakoekin"</item>
@@ -288,15 +410,32 @@
<item msgid="2958623927055120839">"Bat ere ez"</item>
<item msgid="1157046369795346308">"Eskuliburua"</item>
</string-array>
- <!-- no translation found for vpn_states:4 (9135049670787351881) -->
+ <string-array name="vpn_states">
+ <item msgid="5408915841694583740">"Deskonektatuta"</item>
+ <item msgid="8754480102834556765">"Hasieratzen…"</item>
+ <item msgid="3351334355574270250">"Konektatzen…"</item>
+ <item msgid="8303882153995748352">"Konektatuta"</item>
+ <item msgid="9135049670787351881">"Denbora-muga"</item>
+ <item msgid="2124868417182583926">"Ezin izan da egin"</item>
+ </string-array>
<string-array name="security_settings_premium_sms_values">
<item msgid="1164265643455394443">"Galdetu"</item>
<item msgid="7718817231348607934">"Ukatu beti"</item>
<item msgid="8184570120217958741">"Eman baimena beti"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normala"</item>
+ <item msgid="5101233285497327432">"Ez oso ona"</item>
+ <item msgid="1555861583162930714">"Txikia"</item>
+ <item msgid="1719683776264798117">"Oso handia"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normala"</item>
+ <item msgid="6107138933849816768">"Ertaina"</item>
+ <item msgid="182695359839047859">"Txikia"</item>
+ <item msgid="8577246509202964244">"Larria"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Etengabea"</item>
<item msgid="167418068739176448">"Jarduera nagusia"</item>
diff --git a/tests/CarDeveloperOptions/res/values-eu/strings.xml b/tests/CarDeveloperOptions/res/values-eu/strings.xml
index aefeda7..0c42eec 100644
--- a/tests/CarDeveloperOptions/res/values-eu/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-eu/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Handitu edo txikitu pantailako testua."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Txikitu"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Handitu"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Testu-lagina"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Ozeko azti miragarria"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"11. kapitulua: Esmeraldazko Oz hiri harrigarria"</string>
@@ -93,14 +92,14 @@
<string name="sdcard_setting" product="nosdcard" msgid="1533784309105748696">"USB bidezko memoria"</string>
<string name="sdcard_setting" product="default" msgid="8398782065765523178">"SD txartela"</string>
<string name="bluetooth" msgid="1564520421786841227">"Bluetooth-a"</string>
- <string name="bluetooth_is_discoverable" msgid="6748888489356326898">"Inguruko Bluetooth gailu guztietarako ikusgai (<xliff:g id="DISCOVERABLE_TIME_PERIOD">%1$s</xliff:g>)"</string>
- <string name="bluetooth_is_discoverable_always" msgid="6835934878803488274">"Inguruko Bluetooth gailu guztietarako ikusgai"</string>
- <string name="bluetooth_not_visible_to_other_devices" msgid="9134284066024557293">"Ez da beste Bluetooth gailuetarako ikusgai"</string>
+ <string name="bluetooth_is_discoverable" msgid="6748888489356326898">"Inguruko Bluetooth bidezko gailuetarako ikusgai (<xliff:g id="DISCOVERABLE_TIME_PERIOD">%1$s</xliff:g>)"</string>
+ <string name="bluetooth_is_discoverable_always" msgid="6835934878803488274">"Inguruko Bluetooth bidezko gailuetarako ikusgai"</string>
+ <string name="bluetooth_not_visible_to_other_devices" msgid="9134284066024557293">"Bluetooth bidezko beste gailuetarako ikusgaitz"</string>
<string name="bluetooth_only_visible_to_paired_devices" msgid="3830247336229883519">"Bikotetutako gailuetarako soilik ikusgai"</string>
<string name="bluetooth_visibility_timeout" msgid="4804679276398564496">"Ikusgaitasunaren denbora-muga gainditu da"</string>
<string name="bluetooth_lock_voice_dialing" msgid="1600385868298081015">"Blokeatu ahots bidezko markatzea"</string>
<string name="bluetooth_lock_voice_dialing_summary" msgid="5005776616112427980">"Galarazi Bluetooth telefonoa erabiltzea pantaila blokeatuta dagoenean"</string>
- <string name="bluetooth_devices" msgid="4143880830505625666">"Bluetooth gailuak"</string>
+ <string name="bluetooth_devices" msgid="4143880830505625666">"Bluetooth bidezko gailuak"</string>
<string name="bluetooth_device_name" msgid="3682016026866302981">"Gailuaren izena"</string>
<string name="bluetooth_device_details" msgid="2500840679106321361">"Gailuaren ezarpenak"</string>
<string name="bluetooth_profile_details" msgid="1785505059738682493">"Profilaren ezarpenak"</string>
@@ -113,43 +112,43 @@
<string name="bluetooth_disconnect_all_profiles" product="tablet" msgid="7322773998151831579">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> gailutik deskonektatuko da tableta."</string>
<string name="bluetooth_disconnect_all_profiles" product="device" msgid="4707569949253450208">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> gailutik deskonektatuko da gailua."</string>
<string name="bluetooth_disconnect_dialog_ok" msgid="4183522987246110145">"Deskonektatu"</string>
- <string name="bluetooth_empty_list_user_restricted" msgid="3616298363281495777">"Ez daukazu Bluetooth ezarpenak aldatzeko baimenik."</string>
- <string name="bluetooth_pairing_pref_title" msgid="2904954138013884029">"Parekatu gailu batekin"</string>
- <string name="bluetooth_is_visible_message" msgid="6341088682252805612">"Bluetooth ezarpenak irekita badaude, inguruko gailuek <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ikusi ahal izango dute."</string>
- <string name="bluetooth_footer_mac_message" product="default" msgid="335341476746836260">"Telefonoaren Bluetooth helbidea: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
- <string name="bluetooth_footer_mac_message" product="tablet" msgid="6033609611245782463">"Tabletaren Bluetooth helbidea: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
- <string name="bluetooth_footer_mac_message" product="device" msgid="7639919867088358038">"Gailuaren Bluetooth helbidea: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
+ <string name="bluetooth_empty_list_user_restricted" msgid="3616298363281495777">"Ez daukazu Bluetooth-aren ezarpenak aldatzeko baimenik."</string>
+ <string name="bluetooth_pairing_pref_title" msgid="2904954138013884029">"Parekatu beste gailu batekin"</string>
+ <string name="bluetooth_is_visible_message" msgid="6341088682252805612">"Bluetooth-aren ezarpenak irekita badaude, inguruko gailuek <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ikusi ahal izango dute."</string>
+ <string name="bluetooth_footer_mac_message" product="default" msgid="335341476746836260">"Telefonoa Bluetooth bidez konektatzeko helbidea: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
+ <string name="bluetooth_footer_mac_message" product="tablet" msgid="6033609611245782463">"Tableta Bluetooth bidez konektatzeko helbidea: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
+ <string name="bluetooth_footer_mac_message" product="device" msgid="7639919867088358038">"Gailua Bluetooth bidez konektatzeko helbidea: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_is_disconnect_question" msgid="6180709281434591654">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> deskonektatu nahi duzu?"</string>
<string name="bluetooth_broadcasting" msgid="8926408584599563760">"Igorpena"</string>
<string name="bluetooth_device" msgid="3170974107364990008">"Izenik gabeko Bluetooth bidezko gailua"</string>
<string name="progress_scanning" msgid="633923400401041181">"Bilatzen"</string>
- <string name="bluetooth_no_devices_found" msgid="4396050022213494322">"Ez da Bluetooth gailurik aurkitu inguruan."</string>
+ <string name="bluetooth_no_devices_found" msgid="4396050022213494322">"Bluetooth bidezko gailurik ez inguruan."</string>
<string name="bluetooth_notif_ticker" msgid="8398481099943141819">"Bluetooth bidez parekatzeko eskaera"</string>
<string name="bluetooth_notif_title" msgid="5090288898529286011">"Bikotetzeko eskaera"</string>
<string name="bluetooth_notif_message" msgid="6612367890895077938">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> gailuarekin parekatzeko, sakatu hau."</string>
<string name="bluetooth_show_received_files" msgid="5060846395852236652">"Jasotako fitxategiak"</string>
<string name="bluetooth_show_files_received_via_bluetooth" msgid="1699095577431389560">"Bluetooth bidez jasotako fitxategiak"</string>
<string name="device_picker" msgid="8345264486071697705">"Aukeratu Bluetooth bidezko gailua"</string>
- <string name="bluetooth_ask_enablement" msgid="8716802066127746062">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak Bluetooth konexioa aktibatu nahi du"</string>
- <string name="bluetooth_ask_disablement" msgid="7125319551097350783">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak Bluetooth konexioa desaktibatu nahi du"</string>
- <string name="bluetooth_ask_enablement_no_name" msgid="6105893027185475233">"Aplikazio batek Bluetooth konexioa aktibatu nahi du"</string>
- <string name="bluetooth_ask_disablement_no_name" msgid="8648888502291681310">"Aplikazio batek Bluetooth konexioa desaktibatu nahi du"</string>
- <string name="bluetooth_ask_discovery" product="tablet" msgid="6871595755186170115">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak tableta beste Bluetooth gailu batzuen aurrean ikusgai ezarri nahi du <xliff:g id="TIMEOUT">%2$d</xliff:g> segundoz."</string>
- <string name="bluetooth_ask_discovery" product="default" msgid="3388041479101348095">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak telefonoa beste Bluetooth gailu batzuen aurrean ikusgai ezarri nahi du <xliff:g id="TIMEOUT">%2$d</xliff:g> segundoz."</string>
- <string name="bluetooth_ask_discovery_no_name" product="tablet" msgid="1472358802231150345">"Aplikazio batek tableta beste Bluetooth gailu batzuen aurrean ikusgai ezarri nahi du <xliff:g id="TIMEOUT">%1$d</xliff:g> segundoz."</string>
- <string name="bluetooth_ask_discovery_no_name" product="default" msgid="6195796094297507404">"Aplikazio batek telefonoa beste Bluetooth gailu batzuen aurrean ikusgai ezarri nahi du <xliff:g id="TIMEOUT">%1$d</xliff:g> segundoz."</string>
- <string name="bluetooth_ask_lasting_discovery" product="tablet" msgid="2702942027812132427">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak tableta beste Bluetooth gailu batzuen aurrean ikusgai ezarri nahi du. Bluetooth ezarpenetan alda dezakezu hori geroago."</string>
- <string name="bluetooth_ask_lasting_discovery" product="default" msgid="7796723473397303412">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak telefonoa beste Bluetooth gailu batzuen aurrean ikusgai ezarri nahi du. Bluetooth ezarpenetan alda dezakezu hori geroago."</string>
- <string name="bluetooth_ask_lasting_discovery_no_name" product="tablet" msgid="5961921359655434504">"Aplikazio batek tableta beste Bluetooth gailu batzuen aurrean ikusgai ezarri nahi du. Bluetooth ezarpenetan alda dezakezu hori geroago."</string>
- <string name="bluetooth_ask_lasting_discovery_no_name" product="default" msgid="3585910858758443872">"Aplikazio batek telefonoa beste Bluetooth gailu batzuen aurrean ikusgai ezarri nahi du. Bluetooth ezarpenetan alda dezakezu hori geroago."</string>
- <string name="bluetooth_ask_enablement_and_discovery" product="tablet" msgid="5676466923424941153">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak Bluetooth konexioa aktibatu eta tableta beste gailu batzuen aurrean ikusgai ezarri nahi du <xliff:g id="TIMEOUT">%2$d</xliff:g> segundoz."</string>
- <string name="bluetooth_ask_enablement_and_discovery" product="default" msgid="507088376226791063">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak Bluetooth konexioa aktibatu eta telefonoa beste gailu batzuen aurrean ikusgai ezarri nahi du <xliff:g id="TIMEOUT">%2$d</xliff:g> segundoz."</string>
- <string name="bluetooth_ask_enablement_and_discovery_no_name" product="tablet" msgid="1164681893121736219">"Aplikazio batek Bluetooth konexioa aktibatu eta tableta beste gailu batzuen aurrean ikusgai ezarri nahi du <xliff:g id="TIMEOUT">%1$d</xliff:g> segundoz."</string>
- <string name="bluetooth_ask_enablement_and_discovery_no_name" product="default" msgid="2542247690119921188">"Aplikazio batek Bluetooth konexioa aktibatu eta telefonoa beste gailu batzuen aurrean ikusgai ezarri nahi du <xliff:g id="TIMEOUT">%1$d</xliff:g> segundoz."</string>
- <string name="bluetooth_ask_enablement_and_lasting_discovery" product="tablet" msgid="7118362102769177771">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak Bluetooth konexioa aktibatu eta tableta beste gailu batzuen aurrean ikusgai ezarri nahi du. Bluetooth ezarpenetan alda dezakezu hori geroago."</string>
- <string name="bluetooth_ask_enablement_and_lasting_discovery" product="default" msgid="2577488464813970727">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak Bluetooth konexioa aktibatu eta telefonoa beste gailu batzuen aurrean ikusgai ezarri nahi du. Bluetooth ezarpenetan alda dezakezu hori geroago."</string>
- <string name="bluetooth_ask_enablement_and_lasting_discovery_no_name" product="tablet" msgid="7083038132794842691">"Aplikazio batek Bluetooth konexioa aktibatu eta tableta beste gailu batzuen aurrean ikusgai ezarri nahi du. Bluetooth ezarpenetan alda dezakezu hori geroago."</string>
- <string name="bluetooth_ask_enablement_and_lasting_discovery_no_name" product="default" msgid="3541668604020109525">"Aplikazio batek Bluetooth konexioa aktibatu eta telefonoa beste gailu batzuen aurrean ikusgai ezarri nahi du. Bluetooth ezarpenetan alda dezakezu hori geroago."</string>
+ <string name="bluetooth_ask_enablement" msgid="8716802066127746062">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak Bluetooth-a aktibatu nahi du"</string>
+ <string name="bluetooth_ask_disablement" msgid="7125319551097350783">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak Bluetooth-a desaktibatu nahi du"</string>
+ <string name="bluetooth_ask_enablement_no_name" msgid="6105893027185475233">"Aplikazio batek Bluetooth-a aktibatu nahi du"</string>
+ <string name="bluetooth_ask_disablement_no_name" msgid="8648888502291681310">"Aplikazio batek Bluetooth-a desaktibatu nahi du"</string>
+ <string name="bluetooth_ask_discovery" product="tablet" msgid="6871595755186170115">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak tableta Bluetooth bidezko beste gailu batzuen aurrean ikusgai ezarri nahi du <xliff:g id="TIMEOUT">%2$d</xliff:g> segundoz."</string>
+ <string name="bluetooth_ask_discovery" product="default" msgid="3388041479101348095">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak telefonoa Bluetooth bidezko beste gailu batzuen aurrean ikusgai ezarri nahi du <xliff:g id="TIMEOUT">%2$d</xliff:g> segundoz."</string>
+ <string name="bluetooth_ask_discovery_no_name" product="tablet" msgid="1472358802231150345">"Aplikazio batek tableta Bluetooth bidezko beste gailu batzuen aurrean ikusgai ezarri nahi du <xliff:g id="TIMEOUT">%1$d</xliff:g> segundoz."</string>
+ <string name="bluetooth_ask_discovery_no_name" product="default" msgid="6195796094297507404">"Aplikazio batek telefonoa Bluetooth bidezko beste gailu batzuen aurrean ikusgai ezarri nahi du <xliff:g id="TIMEOUT">%1$d</xliff:g> segundoz."</string>
+ <string name="bluetooth_ask_lasting_discovery" product="tablet" msgid="2702942027812132427">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak tableta beste Bluetooth bidezko gailu batzuen aurrean ikusgai ezarri nahi du. Bluetooth-aren ezarpenetan alda dezakezu hori geroago."</string>
+ <string name="bluetooth_ask_lasting_discovery" product="default" msgid="7796723473397303412">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak telefonoa beste Bluetooth bidezko gailu batzuen aurrean ikusgai ezarri nahi du. Bluetooth-aren ezarpenetan alda dezakezu hori geroago."</string>
+ <string name="bluetooth_ask_lasting_discovery_no_name" product="tablet" msgid="5961921359655434504">"Aplikazio batek tableta beste Bluetooth bidezko gailu batzuen aurrean ikusgai ezarri nahi du. Bluetooth-aren ezarpenetan alda dezakezu hori geroago."</string>
+ <string name="bluetooth_ask_lasting_discovery_no_name" product="default" msgid="3585910858758443872">"Aplikazio batek telefonoa beste Bluetooth bidezko gailu batzuen aurrean ikusgai ezarri nahi du. Bluetooth-aren ezarpenetan alda dezakezu hori geroago."</string>
+ <string name="bluetooth_ask_enablement_and_discovery" product="tablet" msgid="5676466923424941153">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak Bluetooth-a aktibatu, eta tableta beste gailu batzuen aurrean ikusgai ezarri nahi du <xliff:g id="TIMEOUT">%2$d</xliff:g> segundoz."</string>
+ <string name="bluetooth_ask_enablement_and_discovery" product="default" msgid="507088376226791063">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak Bluetooth-a aktibatu eta telefonoa beste gailu batzuen aurrean ikusgai ezarri nahi du <xliff:g id="TIMEOUT">%2$d</xliff:g> segundoz."</string>
+ <string name="bluetooth_ask_enablement_and_discovery_no_name" product="tablet" msgid="1164681893121736219">"Aplikazio batek Bluetooth-a aktibatu, eta tableta beste gailu batzuen aurrean ikusgai ezarri nahi du <xliff:g id="TIMEOUT">%1$d</xliff:g> segundoz."</string>
+ <string name="bluetooth_ask_enablement_and_discovery_no_name" product="default" msgid="2542247690119921188">"Aplikazio batek Bluetooth-a aktibatu, eta telefonoa beste gailu batzuen aurrean ikusgai ezarri nahi du <xliff:g id="TIMEOUT">%1$d</xliff:g> segundoz."</string>
+ <string name="bluetooth_ask_enablement_and_lasting_discovery" product="tablet" msgid="7118362102769177771">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak Bluetooth-a aktibatu, eta tableta beste gailu batzuen aurrean ikusgai ezarri nahi du. Bluetooth-aren ezarpenetan alda dezakezu hori geroago."</string>
+ <string name="bluetooth_ask_enablement_and_lasting_discovery" product="default" msgid="2577488464813970727">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak Bluetooth-a aktibatu, eta telefonoa beste gailu batzuen aurrean ikusgai ezarri nahi du. Bluetooth-aren ezarpenetan alda dezakezu hori geroago."</string>
+ <string name="bluetooth_ask_enablement_and_lasting_discovery_no_name" product="tablet" msgid="7083038132794842691">"Aplikazio batek Bluetooth-a aktibatu, eta tableta beste gailu batzuen aurrean ikusgai ezarri nahi du. Bluetooth-aren ezarpenetan alda dezakezu hori geroago."</string>
+ <string name="bluetooth_ask_enablement_and_lasting_discovery_no_name" product="default" msgid="3541668604020109525">"Aplikazio batek Bluetooth-a aktibatu eta telefonoa beste gailu batzuen aurrean ikusgai ezarri nahi du. Bluetooth-aren ezarpenetan alda dezakezu hori geroago."</string>
<string name="bluetooth_turning_on" msgid="6935183036449748493">"Bluetooth-a aktibatzen…"</string>
<string name="bluetooth_turning_off" msgid="9214026723789756620">"Bluetooth-a desaktibatzen…"</string>
<string name="bluetooth_connection_permission_request" msgid="2382506002340643398">"Bluetooth bidez konektatzeko eskaera"</string>
@@ -164,12 +163,12 @@
<string name="bluetooth_sap_request" msgid="6318039677671263261">"SIM txartelerako sarbide-eskaera"</string>
<string name="bluetooth_sap_acceptance_dialog_text" msgid="1909352413109340355">"<xliff:g id="DEVICE_NAME_0">%1$s</xliff:g> gailuak SIM txartela atzitu nahi du. SIM txartelerako sarbidea ematen badiozu, gailuaren datu-konexioa desgaituko da, txartelerako konexioak dirauen bitartean. Eman sarbidea <xliff:g id="DEVICE_NAME_1">%2$s?</xliff:g> gailuari"</string>
<string name="bluetooth_device_name_summary" msgid="8661066392056595005">"\"<xliff:g id="DEVICE_NAME">^1</xliff:g>\" gisa dago ikusgai beste gailuetan"</string>
- <string name="bluetooth_off_footer" msgid="7658444560543730571">"Aktibatu Bluetooth konexioa beste gailu batzuetara konektatzeko."</string>
+ <string name="bluetooth_off_footer" msgid="7658444560543730571">"Aktibatu Bluetooth bidezko konexioa beste gailu batzuetara konektatzeko."</string>
<string name="bluetooth_paired_device_title" msgid="8361860197780425286">"Zure gailuak"</string>
- <string name="bluetooth_pairing_page_title" msgid="9053463656712597709">"Parekatu gailu batekin"</string>
- <string name="bluetooth_pref_summary" product="tablet" msgid="3601662966604648212">"Baimendu tabletari inguruko Bluetooth gailuekin komunikatzea"</string>
- <string name="bluetooth_pref_summary" product="device" msgid="2286727776570956969">"Baimendu gailuari inguruko Bluetooth gailuekin komunikatzea"</string>
- <string name="bluetooth_pref_summary" product="default" msgid="863659221858781186">"Baimendu telefonoari inguruko Bluetooth gailuekin komunikatzea"</string>
+ <string name="bluetooth_pairing_page_title" msgid="9053463656712597709">"Parekatu beste gailu batekin"</string>
+ <string name="bluetooth_pref_summary" product="tablet" msgid="3601662966604648212">"Baimendu tabletari inguruko Bluetooth bidezko gailuekin komunikatzea"</string>
+ <string name="bluetooth_pref_summary" product="device" msgid="2286727776570956969">"Eman gailuari inguruko Bluetooth bidezko gailuekin komunikatzeko baimena"</string>
+ <string name="bluetooth_pref_summary" product="default" msgid="863659221858781186">"Baimendu telefonoari inguruko Bluetooth bidezko gailuekin komunikatzea"</string>
<string name="bluetooth_disable_a2dp_hw_offload" msgid="293429878480958234">"Desgaitu Bluetooth A2DP hardwarea deskargatzeko aukera"</string>
<string name="bluetooth_disable_a2dp_hw_offload_dialog_title" msgid="7362106962085861626">"Gailua berrabiarazi?"</string>
<string name="bluetooth_disable_a2dp_hw_offload_dialog_message" msgid="4837282201316413412">"Ezarpen hau aldatzeko, gailua berrabiarazi egin behar duzu."</string>
@@ -179,11 +178,11 @@
<string name="connected_device_available_call_title" msgid="6774859446815858428">"Deitzeko balio duten gailu erabilgarriak"</string>
<string name="connected_device_connected_title" msgid="6255107326608785482">"Konektatuta daudenak"</string>
<string name="connected_device_saved_title" msgid="8270136893488475163">"Gordetako gailuak"</string>
- <string name="connected_device_add_device_summary" msgid="7960491471270158891">"Bluetooth konexioa aktibatuko da parekatu ahal izateko"</string>
+ <string name="connected_device_add_device_summary" msgid="7960491471270158891">"Bluetooth bidezko konexioa aktibatuko da parekatu ahal izateko"</string>
<string name="connected_device_connections_title" msgid="9205000271382018428">"Konexio-hobespenak"</string>
<string name="connected_device_previously_connected_title" msgid="225918223397410428">"Aurrez konektatutako gailuak"</string>
<string name="connected_device_previously_connected_screen_title" msgid="2018789662358162716">"Aurretik konektatutakoak"</string>
- <string name="connected_device_bluetooth_turned_on_toast" msgid="4652326177920814476">"Aktibatu da Bluetooth konexioa"</string>
+ <string name="connected_device_bluetooth_turned_on_toast" msgid="4652326177920814476">"Aktibatu da Bluetooth-a"</string>
<string name="previous_connected_see_all" msgid="7237095013087310923">"Ikusi guztiak"</string>
<string name="date_and_time" msgid="2957463607025909857">"Data eta ordua"</string>
<string name="choose_timezone" msgid="8215332993926818147">"Aukeratu ordu-zona"</string>
@@ -197,18 +196,18 @@
<string name="proxy_settings_title" msgid="6014901859338211713">"Proxya"</string>
<string name="proxy_clear_text" msgid="498317431076294101">"Garbitu"</string>
<string name="proxy_port_label" msgid="8285157632538848509">"Proxy-ataka"</string>
- <string name="proxy_exclusionlist_label" msgid="8179084955547941904">"Egin hauen proxyaren salbuespena"</string>
+ <string name="proxy_exclusionlist_label" msgid="8179084955547941904">"Egin ez ikusi proxyari kasu hauetan"</string>
<string name="proxy_defaultView_text" msgid="5785775257042403261">"Leheneratu balio lehenetsiak"</string>
<string name="proxy_action_text" msgid="814511434843981413">"Eginda"</string>
<string name="proxy_hostname_label" msgid="6798891831427287847">"Proxyaren ostalari-izena"</string>
<string name="proxy_error" msgid="5036164133669802299">"Abisua"</string>
<string name="proxy_error_dismiss" msgid="883805570485635650">"Ados"</string>
<string name="proxy_error_invalid_host" msgid="5430640241353307223">"Idatzi duzun ostalari-izena ez da baliozkoa."</string>
- <string name="proxy_error_invalid_exclusion_list" msgid="4314503082913856333">"Idatzi duzun salbuespen-zerrendak ez du formatu egokia. Idatzi domeinuen zerrenda, komaz bereizita."</string>
+ <string name="proxy_error_invalid_exclusion_list" msgid="4314503082913856333">"Idatzi duzun salbuespen-zerrendak ez du formatu egokia. Idatzi kanpo utzitako domeinuen zerrenda, komaz bereizita."</string>
<string name="proxy_error_empty_port" msgid="8034561724923076215">"Atakaren eremua bete behar duzu."</string>
<string name="proxy_error_empty_host_set_port" msgid="8471455809508588255">"Ataka eremuak hutsik egon behar du Ostalaria eremua ere hutsik badago."</string>
<string name="proxy_error_invalid_port" msgid="4046559920586100637">"Idatzi duzun ataka ez da baliozkoa."</string>
- <string name="proxy_warning_limited_support" msgid="9026539134219095768">"Arakatzaileak HTTP proxya erabiltzen du baina ezin dute beste aplikazioek erabili."</string>
+ <string name="proxy_warning_limited_support" msgid="9026539134219095768">"Arakatzaileak HTTP proxya erabiltzen du, baina ezin dute beste aplikazioek erabili."</string>
<string name="proxy_url_title" msgid="882042361706435904">"Proxya auto. konf. URLa: "</string>
<string name="radio_info_dl_kbps" msgid="2903778264453410272">"Deskargatzeko banda-zabalera (Kb/s):"</string>
<string name="radio_info_ul_kbps" msgid="3802245899811732716">"Kargen banda-zabalera (Kb/s):"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Profileko informazioa"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Kontuak"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Kokapena"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Erabili kokapena"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Erabili kokapena"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Desaktibatuta"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Aktibatuta: <xliff:g id="COUNT_1">%1$d</xliff:g> aplikaziok dute kokapena atzitzeko baimena</item>
@@ -427,7 +426,7 @@
<string name="security_settings_face_settings_remove_face_data" msgid="2821359954483136239">"Kendu aurpegiaren datuak"</string>
<string name="security_settings_face_settings_footer" msgid="4627175759990550715">"Gailua desblokeatzeko eta aplikazioetan sartzeko erabil dezakezu aurpegia. "<annotation id="url">"Lortu informazio gehiago"</annotation></string>
<string name="security_settings_face_settings_remove_dialog_title" msgid="5675319895815271094">"Aurpegiari buruzko datuak ezabatu?"</string>
- <string name="security_settings_face_settings_remove_dialog_details" msgid="3754494807169276107">"Aurpegiaren bidez desblokeatzeko aukerak erregistratutako datuak betiko eta segurtasun osoz ezabatuko dira. Horren ondoren, PIN kodea, eredua edo pasahitza beharko duzu telefonoa desblokeatzeko, aplikazioetan saioa hasteko eta ordainketak berresteko."</string>
+ <string name="security_settings_face_settings_remove_dialog_details" msgid="3754494807169276107">"Aurpegiaren bidez desblokeatzeko eginbideak erregistratutako datuak betiko eta segurtasun osoz ezabatuko dira. Horren ondoren, PIN kodea, eredua edo pasahitza beharko duzu telefonoa desblokeatzeko, aplikazioetan saioa hasteko eta ordainketak berresteko."</string>
<string name="security_settings_fingerprint_preference_title" msgid="4177132225930582928">"Hatz-marka digitala"</string>
<string name="fingerprint_manage_category_title" msgid="1463406696801542090">"Kudeatu hatz-markak"</string>
<string name="fingerprint_usage_category_title" msgid="7298369141954599706">"Hatz-marken erabilera"</string>
@@ -447,7 +446,7 @@
<string name="security_settings_fingerprint_enroll_introduction_continue" msgid="271662150372486535">"Jarraitu"</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel_setup" msgid="756928427429893070">"Saltatu"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue_setup" msgid="4125977169169671144">"Hurrengoa"</string>
- <string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"Saltatu hatz-marka?"</string>
+ <string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"Hatz-markaren urratsa saltatu?"</string>
<string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"Minutu bat edo bi baino ez dituzu beharko hatz-marka konfiguratzeko. Urrats hau saltatuz gero, geroago ere gehi dezakezu hatz-marka ezarpenetan."</string>
<string name="lock_screen_intro_skip_title" msgid="5307431665496346914">"Pantailaren blokeoa saltatu?"</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="tablet" msgid="7553945981266845264">"Ez dira aktibatuko gailuaren babes-eginbideak. Tableta galtzen baduzu, lapurtzen badizute edo berrezarri egiten bada, ezin izango duzu ekidin beste pertsona batzuek erabiltzea."</string>
@@ -669,7 +668,7 @@
<item quantity="one"><xliff:g id="NUMBER_0">%d</xliff:g> digitu baino gutxiago izan behar du</item>
</plurals>
<string name="lockpassword_pin_recently_used" msgid="5556148774911741103">"Gailuaren administratzaileak ez du eman beste PIN kode bat erabiltzeko baimenik"</string>
- <string name="lockpassword_pin_blacklisted_by_admin" msgid="2752037810571200697">"IKT administratzaileak blokeatu egiten ditu asmatzen errazak diren PIN kodeak. Erabili beste PIN bat."</string>
+ <string name="lockpassword_pin_blacklisted_by_admin" msgid="2752037810571200697">"IKT saileko administratzaileak blokeatu egiten ditu asmatzen errazak diren PIN kodeak. Erabili beste PIN bat."</string>
<string name="lockpassword_illegal_character" msgid="3577712947676261351">"Ezin da erabili onartzen ez den karaktererik"</string>
<string name="lockpassword_password_requires_alpha" msgid="7017799931349816346">"Hizki bat eduki behar du gutxienez"</string>
<string name="lockpassword_password_requires_digit" msgid="6856775151626646011">"Zenbaki bat eduki behar du gutxienez"</string>
@@ -703,7 +702,7 @@
<item quantity="one">Gutxienez, zenbakizkoa ez den 1 karaktere izan behar du</item>
</plurals>
<string name="lockpassword_password_recently_used" msgid="6944729699375087431">"Gailuaren administratzaileak ez du eman beste pasahitz bat erabiltzeko baimenik"</string>
- <string name="lockpassword_password_blacklisted_by_admin" msgid="4988166770148440755">"IKT administratzaileak blokeatu egiten ditu asmatzen errazak diren pasahitzak. Erabili beste pasahitz bat."</string>
+ <string name="lockpassword_password_blacklisted_by_admin" msgid="4988166770148440755">"IKT saileko administratzaileak blokeatu egiten ditu asmatzen errazak diren pasahitzak. Erabili beste pasahitz bat."</string>
<string name="lockpassword_pin_no_sequential_digits" msgid="3902387296149848324">"Ezin da erabili goranzko, beheranzko edo errepikatutako digitu-sekuentziarik"</string>
<string name="lockpassword_confirm_label" msgid="1512364313516715624">"Berretsi"</string>
<string name="lockpassword_cancel_label" msgid="3799907375604482766">"Utzi"</string>
@@ -766,12 +765,12 @@
<string name="bluetooth_device_context_connect_advanced" msgid="423463405499392444">"Aukerak…"</string>
<string name="bluetooth_menu_advanced" msgid="7566858513372603652">"Aurreratuak"</string>
<string name="bluetooth_advanced_titlebar" msgid="6459469494039004784">"Bluetooth ezarpen aurreratuak"</string>
- <string name="bluetooth_empty_list_bluetooth_off" msgid="6255367297830430459">"Bluetooth aktibatuta badago, inguruko Bluetooth gailuekin komunika daiteke gailua."</string>
- <string name="bluetooth_scanning_on_info_message" msgid="5460370815156050550">"Bluetooth konexioa aktibatuta dagoenean, inguruko Bluetooth gailuekin komunika daiteke gailua.\n\nGailuaren erabilera hobetzeko, aplikazioek eta zerbitzuek wifi-sareak bilatzen jarraituko dute, baita wifi-konexioa desaktibatuta dagoenean ere. Besteak beste, kokapenean oinarritutako eginbideak eta zerbitzuak hobetzeko erabil daiteke. Aukera hori aldatzeko, joan "<annotation id="link">"gailuak bilatzeko ezarpenetara"</annotation>"."</string>
- <string name="ble_scan_notify_text" msgid="6290170236546386932">"Kokapenaren zehaztasuna hobetzeko, sistemaren aplikazioek eta zerbitzuek Bluetooth gailuak hautematen jarraituko dute. Hori aldatzeko, zoaz <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>gailuak bilatzeko ezarpenetara<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
+ <string name="bluetooth_empty_list_bluetooth_off" msgid="6255367297830430459">"Bluetooth-a aktibatuta badago, inguruko Bluetooth bidezko gailuekin komunika daiteke gailua."</string>
+ <string name="bluetooth_scanning_on_info_message" msgid="5460370815156050550">"Bluetooth-a aktibatuta badago, inguruko Bluetooth bidezko gailuekin komunika daiteke gailua.\n\nGailuaren erabilera hobetzeko, aplikazioek eta zerbitzuek wifi-sareak bilatzen jarraituko dute, baita wifi-konexioa desaktibatuta dagoenean ere. Besteak beste, kokapenean oinarritutako eginbideak eta zerbitzuak hobetzeko erabil daiteke. Aukera hori aldatzeko, joan "<annotation id="link">"gailuak bilatzeko ezarpenetara"</annotation>"."</string>
+ <string name="ble_scan_notify_text" msgid="6290170236546386932">"Kokapenaren zehaztasuna hobetzeko, sistemaren aplikazioek eta zerbitzuek Bluetooth bidezko gailuak hautematen jarraituko dute. Hori aldatzeko, zoaz <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>gailuak bilatzeko ezarpenetara<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
<string name="bluetooth_connect_failed" msgid="1151234676456333786">"Ezin izan da konektatu. Saiatu berriro."</string>
<string name="device_details_title" msgid="726517818032923222">"Gailuaren xehetasunak"</string>
- <string name="bluetooth_device_mac_address" msgid="5328203122581150405">"Gailuaren Bluetooth helbidea: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
+ <string name="bluetooth_device_mac_address" msgid="5328203122581150405">"Gailua Bluetooth bidez konektatzeko helbidea: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_unpair_dialog_title" msgid="3669848977755142047">"Gailua ahaztu nahi duzu?"</string>
<string name="bluetooth_unpair_dialog_body" product="default" msgid="5998071227980078077">"Aurrerantzean, telefonoa ez da parekatuko <xliff:g id="DEVICE_NAME">%1$s</xliff:g> gailuarekin"</string>
<string name="bluetooth_unpair_dialog_body" product="tablet" msgid="4696157463230518866">"Aurrerantzean, tableta ez da parekatuko <xliff:g id="DEVICE_NAME">%1$s</xliff:g> gailuarekin"</string>
@@ -827,21 +826,21 @@
<string name="nfc_disclaimer_title" msgid="4860231267351602970">"Aktibatu NFC"</string>
<string name="nfc_disclaimer_content" msgid="3066113577854565782">"NFC eginbideak datuak trukatzen ditu gailu honen eta inguruko beste gailu edo helburu batzuen artean (adibidez, ordainketa-terminalak, sarbide-irakurgailuak, eta iragarki edo etiketa interaktiboak)."</string>
<string name="nfc_secure_settings_title" msgid="5153751163174916581">"Babestu NFC konexioak"</string>
- <string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"Onartu NFC ordainketak eta garraio publikoetan ordaintzeko aukera pantaila desblokeatuta dagoenean soilik"</string>
+ <string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"Onartu NFC bidezko ordainketak eta garraio publikoetan ordaintzeko aukera pantaila desblokeatuta dagoenean soilik"</string>
<string name="android_beam_settings_title" msgid="3083436415873738389">"Android Beam"</string>
<string name="android_beam_on_summary" msgid="8068287225180474199">"Aplikazioaren edukia NFC bidez transmititzeko prest"</string>
<string name="android_beam_off_summary" msgid="7365818039159364600">"Desaktibatuta"</string>
<string name="nfc_disabled_summary" msgid="2181777971122724361">"Ez dago erabilgarri NFC desaktibatuta dagoelako"</string>
<string name="android_beam_label" msgid="5340299879556025708">"Android Beam"</string>
- <string name="android_beam_explained" msgid="4501176353247859329">"Eginbide hau aktibatzen baduzu, NFC bidez parteka dezakezu aplikazioen edukia NFC gaitasuna duten beste gailu batzuekin, gailuak bata bestearengana hurbilduta. Besteak beste, web-orriak, YouTube bideoak, kontaktuak eta beste hainbat gauza parteka ditzakezu.\n\nHori egiteko, hurbildu gailuak bata bestearengana (atzealdeak elkartu behar izan ohi dira), eta sakatu zure pantaila. Aplikazioak zehaztuko du partekatu beharrekoa zer den."</string>
+ <string name="android_beam_explained" msgid="4501176353247859329">"Eginbide hau aktibatzen baduzu, NFC bidez parteka dezakezu aplikazioen edukia NFC gaitasuna duten beste gailu batzuekin, gailuak bata bestearengana hurbilduta. Besteak beste, web-orriak, YouTube-ko bideoak, kontaktuak eta beste hainbat gauza parteka ditzakezu.\n\nHori egiteko, hurbildu gailuak bata bestearengana (atzealdeak elkartu behar izan ohi dira), eta sakatu zure pantaila. Aplikazioak zehaztuko du partekatu beharrekoa zer den."</string>
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wifia"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Aktibatu Wi-Fia"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wifia"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Erabili wifi-konexioa"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Erabili wifi-konexioa"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi-Fi ezarpenak"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wifia"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Konfiguratu eta kudeatu hari gabeko sarbide-puntuak"</string>
- <string name="wifi_select_network" msgid="2541598480767312831">"Hautatu Wi-Fi sarea"</string>
+ <string name="wifi_select_network" msgid="2541598480767312831">"Hautatu wifi-sarea"</string>
<string name="wifi_starting" msgid="1299466156783469023">"Wi-Fi konexioa aktibatzen…"</string>
<string name="wifi_stopping" msgid="413711069039939520">"Wi-Fia desaktibatzen…"</string>
<string name="wifi_error" msgid="5605801874484465557">"Errorea"</string>
@@ -853,14 +852,14 @@
<string name="wifi_wakeup_summary" msgid="1152699417411690">"Gordetako kalitate handiko sare batetik (adibidez, etxeko saretik) gertu zaudenean aktibatuko da berriro wifi-konexioa"</string>
<string name="wifi_wakeup_summary_no_location" msgid="3007457288587966962">"Ez dago erabilgarri kokapena desaktibatuta dagoelako. Aktibatu "<annotation id="link">"kokapena"</annotation>"."</string>
<string name="wifi_wakeup_summary_scanning_disabled" msgid="6820040651529910914">"Ez dago erabilgarri, Wifi-sareen bilaketa desaktibatuta dagoelako"</string>
- <string name="wifi_wakeup_summary_scoring_disabled" msgid="7067018832237903151">"Erabiltzeko, hautatu sareen balorazioen hornitzaile bat"</string>
+ <string name="wifi_wakeup_summary_scoring_disabled" msgid="7067018832237903151">"Erabiltzeko, hautatu sare-balorazioen hornitzaile bat"</string>
<string name="wifi_poor_network_detection" msgid="7193423327400703073">"Saihestu konexio ahulak"</string>
<string name="wifi_poor_network_detection_summary" msgid="5539951465985614590">"Ez erabili Wi-Fi sareak ez badute Interneteko konexio onik"</string>
<string name="wifi_avoid_poor_network_detection_summary" msgid="1976503191780928104">"Erabili Interneteko konexio ona duten sareak soilik"</string>
<string name="use_open_wifi_automatically_title" msgid="3084513215481454350">"Konektatu sare irekietara"</string>
<string name="use_open_wifi_automatically_summary" msgid="8338020172673161754">"Konektatu automatikoki kalitate handiko sare publikoetara"</string>
- <string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"Erabiltzeko, hautatu sareen balorazioen hornitzaile bat"</string>
- <string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"Erabiltzeko, hautatu sareen balorazioen hornitzaile bateragarri bat"</string>
+ <string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"Erabiltzeko, hautatu sare-balorazioen hornitzaile bat"</string>
+ <string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"Erabiltzeko, hautatu sare-balorazioen hornitzaile bateragarri bat"</string>
<string name="wifi_install_credentials" msgid="5650088113710858289">"Instalatu ziurtagiriak"</string>
<string name="wifi_scan_notify_text" msgid="7614101215028336927">"Kokapenaren zehaztasuna hobetzeko, aplikazioek eta zerbitzuek wifi-sareak bilatzen jarraituko dute, baita wifi-konexioa desaktibatuta dagoenean ere. Besteak beste, kokapenean oinarritutako eginbideak eta zerbitzuak hobetzeko erabil daiteke. Aukera hori aldatzeko, joan <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>bilatzeko ezarpenetara<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
<string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"Kokapenaren zehaztasuna hobetzeko, aktibatu Wifi-sareen bilaketa <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>bilatzeko ezarpenetan<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
@@ -890,8 +889,8 @@
<string name="wifi_menu_forget" msgid="7561140554450163075">"Ahaztu sarea"</string>
<string name="wifi_menu_modify" msgid="4080178040721021101">"Aldatu sarea"</string>
<string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"Sare erabilgarriak ikusteko, aktibatu wifi-konexioa."</string>
- <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"Wi-Fi sareak bilatzen…"</string>
- <string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"Ez duzu Wi-Fi sarea aldatzeko baimenik."</string>
+ <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"Wifi-sareak bilatzen…"</string>
+ <string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"Ez duzu wifi-sarea aldatzeko baimenik."</string>
<string name="wifi_more" msgid="3538241640407382185">"Gehiago"</string>
<string name="wifi_setup_wps" msgid="6730131677695521321">"Konf. automatikoa (WPS)"</string>
<string name="wifi_settings_scanning_required_title" msgid="3593457187659922490">"Wifi-sareen bilaketa aktibatu nahi al duzu?"</string>
@@ -931,8 +930,8 @@
<string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"5,0 GHz-ko banda hobetsia"</string>
<string name="wifi_ap_2G" msgid="5793110086517338494">"2,4 GHz"</string>
<string name="wifi_ap_5G" msgid="4584892544393675403">"5,0 GHz"</string>
- <string name="wifi_ap_band_select_one" msgid="4409754936554360355">"Aukeratu gutxienez banda bat Wi-Fi sare publikorako:"</string>
- <string name="wifi_ip_settings" msgid="4636102290236116946">"IP ezarpenak"</string>
+ <string name="wifi_ap_band_select_one" msgid="4409754936554360355">"Aukeratu gutxienez banda bat wifi-gunerako:"</string>
+ <string name="wifi_ip_settings" msgid="4636102290236116946">"IParen ezarpenak"</string>
<string name="wifi_privacy_settings" msgid="4462092795794247809">"Pribatutasuna"</string>
<string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"Ausaz aukeratutako MACa"</string>
<string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"Gehitu gailua"</string>
@@ -960,10 +959,10 @@
<string name="wifi_dpp_device_found" msgid="6488461467496850841">"Gailua aurkitu da"</string>
<string name="wifi_dpp_sharing_wifi_with_this_device" msgid="2540529164687476827">"Gailu honekin wifi-konexioa partekatzen…"</string>
<string name="wifi_dpp_connecting" msgid="4229290407210299897">"Konektatzen…"</string>
- <string name="wifi_dpp_share_hotspot" msgid="847987212473038179">"Partekatu sare publikoa"</string>
+ <string name="wifi_dpp_share_hotspot" msgid="847987212473038179">"Partekatu wifi-gunea"</string>
<string name="wifi_dpp_lockscreen_title" msgid="3910665850075275963">"Egiaztatu zeu zarela"</string>
<string name="wifi_dpp_wifi_password" msgid="8007558344032612455">"Wifi-sarearen pasahitza: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
- <string name="wifi_dpp_hotspot_password" msgid="6172326289042241924">"Sare publikoaren pasahitza: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
+ <string name="wifi_dpp_hotspot_password" msgid="6172326289042241924">"Wifi-gunearen pasahitza: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
<string name="wifi_dpp_add_device" msgid="1347056725253936358">"Gehitu gailu bat"</string>
<string name="wifi_dpp_connect_network_using_qr_code" msgid="115993715600532357">"Konektatu sare honetara QR kode baten bidez"</string>
<string name="retry" msgid="8500839563577344702">"Saiatu berriro"</string>
@@ -979,7 +978,7 @@
<string name="wifi_no_domain_warning" msgid="735859919311067606">"Domeinua zehaztu behar da."</string>
<string name="wifi_wps_available_first_item" msgid="3221671453930485243">"WPSa erabilgarri"</string>
<string name="wifi_wps_available_second_item" msgid="5703265526619705185">" (WPSa erabilgarri)"</string>
- <string name="wifi_carrier_connect" msgid="7202618367339982884">"Operadorearen Wi‑Fi sarea"</string>
+ <string name="wifi_carrier_connect" msgid="7202618367339982884">"Operadorearen wifi-sarea"</string>
<string name="wifi_carrier_content" msgid="3467402515071949783">"Konektatu <xliff:g id="NAME">%1$s</xliff:g> bidez"</string>
<string name="wifi_scan_always_turnon_message" msgid="7811846312032594248">"Kokapenaren zehaztasuna hobetzeko eta beste helburu batzuetarako, <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioak sare-bilaketa aktibatu nahi du, Wi-Fia desaktibatuta egonda ere.\n\nBilaketa egin nahi duten beste aplikazio guztiei ere baimendu nahi diezu?"</string>
<string name="wifi_scan_always_turnoff_message" msgid="556993843641750002">"Desaktibatzeko, joan menuko \"Ezarpen aurreratuak\" aukerara."</string>
@@ -991,7 +990,7 @@
<string name="no_internet_access_text" msgid="7093326244145734504">"Sare hau ezin da konektatu Internetera. Konektatuta jarraitu nahi duzu?"</string>
<string name="partial_connectivity_text" msgid="2142157808079235684">"Baliteke aplikazio eta zerbitzu batzuk ez funtzionatzea konexio mugatua dela eta. Hala ere erabili?"</string>
<string name="no_internet_access_remember" msgid="1368137189939004202">"Ez galdetu berriro sarea hau bada"</string>
- <string name="lost_internet_access_title" msgid="1061916948695946130">"Wi-Fi sarea ez dago Internetera konektatuta"</string>
+ <string name="lost_internet_access_title" msgid="1061916948695946130">"Wifi-sarea ez dago Internetera konektatuta"</string>
<string name="lost_internet_access_text" msgid="8962010031520731813">"Sare mugikorra erabil dezakezu Wi-Fi sareak konexio txarra badu. Agian datuen erabilera ordaindu beharko duzu."</string>
<string name="lost_internet_access_switch" msgid="9218006455779873700">"Aldatu datu-konexiora"</string>
<string name="lost_internet_access_cancel" msgid="6577871064062518744">"Jarraitu Wi‑Fi konexioa erabiltzen"</string>
@@ -1022,14 +1021,14 @@
<string name="wifi_advanced_mac_address_title" msgid="1162782083754021737">"MAC helbidea"</string>
<string name="wifi_advanced_ip_address_title" msgid="2708185994512829071">"IP helbidea"</string>
<string name="wifi_details_title" msgid="2164042631550920157">"Sarearen xehetasunak"</string>
- <string name="wifi_details_subnet_mask" msgid="53396707004763012">"Azpisarearen maskara"</string>
+ <string name="wifi_details_subnet_mask" msgid="53396707004763012">"Azpisare-maskara"</string>
<string name="wifi_details_dns" msgid="1118251455740116559">"DNS"</string>
<string name="wifi_details_ipv6_address_header" msgid="1642310137145363299">"IPv6 helbideak"</string>
<string name="wifi_saved_access_points_label" msgid="3790693285928292563">"Gordetako sareak"</string>
<string name="wifi_subscribed_access_points_tab" msgid="7498765485953257229">"Harpidetzak"</string>
<!-- no translation found for wifi_saved_access_points_tab (4677730543624191122) -->
<skip />
- <string name="wifi_advanced_settings_label" msgid="9147669851658738784">"IP ezarpenak"</string>
+ <string name="wifi_advanced_settings_label" msgid="9147669851658738784">"IParen ezarpenak"</string>
<string name="wifi_advanced_not_available" msgid="5751084989400195009">"Erabiltzaile honek ezin ditu erabili Wi-Fi aurreratuaren ezarpenak"</string>
<string name="wifi_ip_settings_menu_save" msgid="6557330818360425933">"Gorde"</string>
<string name="wifi_ip_settings_menu_cancel" msgid="8098696509412462494">"Utzi"</string>
@@ -1057,28 +1056,28 @@
<string name="wifi_p2p_cancel_connect_title" msgid="2465200999145769427">"Gonbidapena bertan behera utzi nahi duzu?"</string>
<string name="wifi_p2p_cancel_connect_message" msgid="3752679335020392154">"<xliff:g id="PEER_NAME">%1$s</xliff:g> gailura konektatzeko gonbidapena bertan behera utzi nahi duzu?"</string>
<string name="wifi_p2p_delete_group_message" msgid="3206660449067701089">"Taldea ahaztu?"</string>
- <string name="wifi_hotspot_checkbox_text" msgid="12062341344410520">"Wifi-sare publikoa"</string>
+ <string name="wifi_hotspot_checkbox_text" msgid="12062341344410520">"Wifi-gunea"</string>
<string name="wifi_hotspot_off_subtext" msgid="6177054857136221058">"Ez zara ari partekatzen ez Interneteko konexiorik ez edukirik beste gailuekin"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="71421730039785897">"Tabletaren Interneteko konexioa partekatzen ari zara sare publiko bidez"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="8914285514605049879">"Telefonoaren Interneteko konexioa partekatzen ari zara sare publiko bidez"</string>
- <string name="wifi_hotspot_on_local_only_subtext" msgid="7415381343846704553">"Edukia partekatzen ari da aplikazioa. Interneteko konexioa partekatzeko, desaktibatu eta aktibatu berriro sare publikoa"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="71421730039785897">"Tabletaren Interneteko konexioa partekatzen ari zara wifi-gunearen bidez"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="8914285514605049879">"Telefonoaren Interneteko konexioa partekatzen ari zara wifi-gunearen bidez"</string>
+ <string name="wifi_hotspot_on_local_only_subtext" msgid="7415381343846704553">"Edukia partekatzen ari da aplikazioa. Interneteko konexioa partekatzeko, desaktibatu eta aktibatu berriro wifi-gunea"</string>
<string name="wifi_hotspot_no_password_subtext" msgid="5400500962974373706">"Ez da ezarri pasahitzik"</string>
- <string name="wifi_hotspot_name_title" msgid="6572202165400226127">"Sare publikoaren izena"</string>
+ <string name="wifi_hotspot_name_title" msgid="6572202165400226127">"Wifi-gunearen izena"</string>
<string name="wifi_hotspot_name_summary_connecting" msgid="5176787959408511889">"<xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g> aktibatzen…"</string>
<string name="wifi_hotspot_name_summary_connected" msgid="8387768642326756749">"<xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g> sarera konekta daitezke beste gailuak"</string>
- <string name="wifi_hotspot_password_title" msgid="4289338152595154889">"Sare publikoaren pasahitza"</string>
+ <string name="wifi_hotspot_password_title" msgid="4289338152595154889">"Wifi-gunearen pasahitza"</string>
<string name="wifi_hotspot_ap_band_title" msgid="3485744480410441949">"Sarbide-puntuaren banda"</string>
- <string name="wifi_hotspot_footer_info_regular" msgid="3876006922622827363">"Erabili sare publikoa beste gailuentzako Wi-Fi sare bat sortzeko. Sare publikoen bidez, Interneteko konexioa ematen da datu-konexioa erabilita. Baliteke datu-konexioa erabiltzeagatiko kostu gehigarriak ordaindu behar izatea."</string>
- <string name="wifi_hotspot_footer_info_local_only" msgid="3339582350894639261">"Aplikazioek sare publikoak sor ditzakete edukia inguruko gailuekin partekatzeko."</string>
- <string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"Desaktibatu automatikoki sare publikoa"</string>
- <string name="wifi_hotspot_auto_off_summary" msgid="3866769400624802105">"Wifi-sare publikoa desaktibatu egingo da ez badago gailurik konektatuta"</string>
- <string name="wifi_tether_starting" msgid="7676952148471297900">"Sare publikoa aktibatzen…"</string>
- <string name="wifi_tether_stopping" msgid="7478561853791953349">"Sare publikoa desaktibatzen…"</string>
+ <string name="wifi_hotspot_footer_info_regular" msgid="3876006922622827363">"Erabili wifi-gunea beste gailuentzako wifi-sare bat sortzeko. Wifi-guneen bidez, Interneteko konexioa ematen da datu-konexioa erabilita. Baliteke datu-konexioa erabiltzeagatiko kostu gehigarriak ordaindu behar izatea."</string>
+ <string name="wifi_hotspot_footer_info_local_only" msgid="3339582350894639261">"Aplikazioek wifi-guneak sor ditzakete edukia inguruko gailuekin partekatzeko."</string>
+ <string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"Desaktibatu automatikoki wifi-gunea"</string>
+ <string name="wifi_hotspot_auto_off_summary" msgid="3866769400624802105">"Wifi-gunea desaktibatu egingo da ez badago gailurik konektatuta"</string>
+ <string name="wifi_tether_starting" msgid="7676952148471297900">"Wifi-gunea aktibatzen…"</string>
+ <string name="wifi_tether_stopping" msgid="7478561853791953349">"Wifi-gunea desaktibatzen…"</string>
<string name="wifi_tether_enabled_subtext" msgid="7534760116478734006">"Aktibatu da <xliff:g id="NETWORK_SSID">%1$s</xliff:g>"</string>
- <string name="wifi_tether_failed_subtext" msgid="3501001612207106">"Wi-Fi sare publiko eramangarriaren errorea gertatu da"</string>
- <string name="wifi_tether_configure_ap_text" msgid="4081852770996455902">"Konfiguratu Wi-Fi sare publikoa"</string>
- <string name="wifi_hotspot_configure_ap_text" msgid="1000003286253019522">"Wi‑Fi publikoaren konfigurazioa"</string>
- <string name="wifi_hotspot_configure_ap_text_summary" msgid="2303120188509955656">"AndroidAP WPA2 PSK sare publikoa"</string>
+ <string name="wifi_tether_failed_subtext" msgid="3501001612207106">"Wifi-gune eramangarriaren errorea gertatu da"</string>
+ <string name="wifi_tether_configure_ap_text" msgid="4081852770996455902">"Konfiguratu wifi-gunea"</string>
+ <string name="wifi_hotspot_configure_ap_text" msgid="1000003286253019522">"Wifi-gunearen konfigurazioa"</string>
+ <string name="wifi_hotspot_configure_ap_text_summary" msgid="2303120188509955656">"AndroidAP WPA2 PSK wifi-gunea"</string>
<string name="wifi_tether_configure_ssid_default" msgid="1722238925876152663">"AndroidSarePublikoa"</string>
<string name="wifi_calling_settings_title" msgid="626821542308601806">"Wi-Fi bidezko deiak"</string>
<string name="wifi_calling_suggestion_title" msgid="1402265373543523970">"Zabaldu deiak egiteko aukera Wi‑Fi konexioarekin"</string>
@@ -1097,13 +1096,16 @@
<string-array name="wifi_calling_mode_choices_v2">
<item msgid="9149346657812979257">"Wifia"</item>
<item msgid="4421333712484542489">"Datu-konexioa"</item>
- <item msgid="6007360612667098926">"Wi-Fi sarea soilik"</item>
+ <item msgid="6007360612667098926">"Wifi-sarea soilik"</item>
</string-array>
<string-array name="wifi_calling_mode_choices_without_wifi_only">
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wifia"</item>
+ <item msgid="2271962426654621656">"Datu-konexioa"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Wifi-sarerik ez badago, erabili sare mugikorra"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Sare mugikorra erabilgarri ez badago, erabili wifi-konexioa"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Deitu wifi bidez. Wifi-konexioa galduz gero, eseki egingo da deia."</string>
@@ -1207,10 +1209,10 @@
<string name="adaptive_sleep_summary_on" msgid="6670369739228487082">"Aktibatuta / Pantaila ez da itzaliko hari begira zauden bitartean"</string>
<string name="adaptive_sleep_summary_off" msgid="2891586225954973431">"Desaktibatuta"</string>
<string name="adaptive_sleep_description" msgid="812673735459170009">"Pantaila itzaltzea eragozten du hari begira zauden bitartean."</string>
- <string name="adaptive_sleep_privacy" msgid="5706802215479902623">"Pantaila kontzientea eginbideak aurreko kamera erabiltzen du inor pantailari begira dagoen jakiteko. Gailuko eginbidea da, eta irudiak ez dira inoiz gordetzen, ez eta Google-ra bidaltzen ere."</string>
+ <string name="adaptive_sleep_privacy" msgid="5706802215479902623">"Pantaila kontzientea eginbideak aurreko kamera erabiltzen du inor pantailari begira dagoen jakiteko. Gailuan funtzionatzen du, eta irudiak ez dira inoiz gordetzen, ez eta Google-ra bidaltzen ere."</string>
<string name="night_display_title" msgid="1305002424893349814">"Gaueko argia"</string>
<string name="night_display_text" msgid="5330502493684652527">"Gaueko argiak tindu horikaraz janzten du pantaila. Horrela, ez zaizu horren nekagarria egingo argi gutxirekin pantailari begira egotea eta errazago hartuko duzu lo, gainera."</string>
- <string name="night_display_auto_mode_title" msgid="8493573087102481588">"Ordutegia"</string>
+ <string name="night_display_auto_mode_title" msgid="8493573087102481588">"Programazioa"</string>
<string name="night_display_auto_mode_never" msgid="2897444637217807088">"Bat ere ez"</string>
<string name="night_display_auto_mode_custom" msgid="1400891076453963151">"Ordu jakinetan aktibatzen da"</string>
<string name="night_display_auto_mode_twilight" msgid="4000162110017520674">"Ilunabarretik egunsentira"</string>
@@ -1244,13 +1246,13 @@
<string name="wallpaper_suggestion_summary" msgid="4247262938988875842">"Pertsonalizatu pantaila"</string>
<string name="wallpaper_settings_fragment_title" msgid="1503701065297188901">"Aukeratu horma-papera"</string>
<string name="screensaver_settings_title" msgid="7720091234133721021">"Pantaila-babeslea"</string>
- <string name="screensaver_settings_summary_either_long" msgid="6078038506795498288">"Kargatzen ari denean edo oinarrira konektatuta dagoenean"</string>
+ <string name="screensaver_settings_summary_either_long" msgid="6078038506795498288">"Kargatzen ari denean edo oinarrian dagoenean"</string>
<string name="screensaver_settings_summary_either_short" msgid="2453772128682850053">"Bietako edozein"</string>
<string name="screensaver_settings_summary_sleep" msgid="6097363596749362692">"Kargatzen ari denean"</string>
- <string name="screensaver_settings_summary_dock" msgid="6297808146601570196">"Euskarrian dagoenean"</string>
+ <string name="screensaver_settings_summary_dock" msgid="6297808146601570196">"Oinarrian dagoenean"</string>
<string name="screensaver_settings_summary_never" msgid="3995259444981620707">"Inoiz ez"</string>
<string name="screensaver_settings_summary_off" msgid="6119947316484763131">"Desaktibatuta"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1897518064782596947">"Telefonoa oinarrira konektatuta edo lo dagoenean zer gertatzen den kontrolatzeko, aktiba ezazu pantaila-babeslea."</string>
+ <string name="screensaver_settings_disabled_prompt" msgid="1897518064782596947">"Telefonoa oinarrian edo inaktibo dagoenean zer gertatzen den kontrolatzeko, aktibatu pantaila-babeslea."</string>
<string name="screensaver_settings_when_to_dream" msgid="3763052013516826348">"Noiz abiarazi"</string>
<string name="screensaver_settings_current" msgid="4017556173596361672">"Uneko pantaila-babeslea"</string>
<string name="screensaver_settings_dream_start" msgid="3772227299054662550">"Abiarazi"</string>
@@ -1307,7 +1309,7 @@
<string name="pin_failed" msgid="4877356137480446727">"SIMaren PIN kodearen eragiketak huts egin du!"</string>
<string name="system_update_settings_list_item_title" msgid="1907497454722790033">"Sistemaren eguneratzeak"</string>
<string name="system_update_settings_list_item_summary" msgid="3497456690691907873"></string>
- <string name="firmware_version" msgid="547095584029938749">"Android bertsioa"</string>
+ <string name="firmware_version" msgid="547095584029938749">"Android-en bertsioa"</string>
<string name="security_patch" msgid="483709031051932208">"Android-en segurtasunaren adabaki-maila"</string>
<string name="model_info" msgid="1729765474260797594">"Modeloa"</string>
<string name="model_summary" msgid="8781425868254352168">"Modeloa: %1$s"</string>
@@ -1340,10 +1342,10 @@
<string name="status_msid_number" msgid="7808175928664357661">"MSID"</string>
<string name="status_prl_version" msgid="5634561205739199042">"PRL bertsioa"</string>
<string name="meid_multi_sim" msgid="7449892644113569529">"MEID (%1$d. SIM zirrikitua)"</string>
- <string name="scanning_status_text_wifi_on_ble_on" msgid="6370507836346838473">"Wifi-sareen eta Bluetooth gailuen bilaketa aktibatuta daude"</string>
- <string name="scanning_status_text_wifi_on_ble_off" msgid="8205014713732412608">"Wifi-sareen bilaketa aktibatuta dago; Bluetooth gailuen bilaketa, berriz, desaktibatuta"</string>
- <string name="scanning_status_text_wifi_off_ble_on" msgid="7400522456303307057">"Bluetooth gailuen bilaketa aktibatuta dago; Wifi-sareen bilaketa, berriz, desaktibatuta"</string>
- <string name="scanning_status_text_wifi_off_ble_off" msgid="8575026386237481457">"Wifi-sareen eta Bluetooth gailuen bilaketa desaktibatuta daude"</string>
+ <string name="scanning_status_text_wifi_on_ble_on" msgid="6370507836346838473">"Wifi-sareen bilaketa eta Bluetooth bidezko gailuen bilaketa aktibatuta daude"</string>
+ <string name="scanning_status_text_wifi_on_ble_off" msgid="8205014713732412608">"Wifi-sareen bilaketa aktibatuta dago; Bluetooth bidezko gailuen bilaketa, berriz, desaktibatuta"</string>
+ <string name="scanning_status_text_wifi_off_ble_on" msgid="7400522456303307057">"Bluetooth bidezko gailuen bilaketa aktibatuta dago; Wifi-sareen bilaketa, berriz, desaktibatuta"</string>
+ <string name="scanning_status_text_wifi_off_ble_off" msgid="8575026386237481457">"Wifi-sareen bilaketa eta Bluetooth bidezko gailuen bilaketa desaktibatuta daude"</string>
<string name="status_meid_number" msgid="8756271256760479835">"MEID"</string>
<string name="status_icc_id" msgid="9191847562997702709">"ICCID"</string>
<string name="status_data_network_type" msgid="2344720457353394909">"Datuetarako sare mugikor mota"</string>
@@ -1356,7 +1358,7 @@
<string name="status_roaming" msgid="5191044997355099561">"Ibiltaritza"</string>
<string name="status_operator" msgid="6017986100643755390">"Sarea"</string>
<string name="status_wifi_mac_address" msgid="3868452167971295995">"Wifi-sarearen MAC helbidea"</string>
- <string name="status_bt_address" msgid="460568179311735657">"Bluetooth helbidea"</string>
+ <string name="status_bt_address" msgid="460568179311735657">"Gailua Bluetooth bidez konektatzeko helbidea"</string>
<string name="status_serial_number" msgid="8257722124627415159">"Serie-zenbakia"</string>
<string name="status_up_time" msgid="77128395333934087">"Berrabiarazi ondoren abian izandako denbora"</string>
<string name="status_awake_time" msgid="1251959094010776954">"Aktibo egondako denbora"</string>
@@ -1455,7 +1457,7 @@
<string name="storage_detail_other" msgid="9164851767437306618">"Beste datu batzuk"</string>
<string name="storage_detail_system" msgid="6784247618772153283">"Sistema"</string>
<string name="storage_detail_explore" msgid="8206900269596580264">"Arakatu <xliff:g id="NAME">^1</xliff:g>"</string>
- <string name="storage_detail_dialog_other" msgid="5073511663616043370">"Hauek dira \"Beste fitxategi batzuk\" atalean gordetzen diren fitxategiak: aplikazioek gordetako fitxategi partekatuak, Internetetik edo Bluetooth konexioaren bidez deskargatutakoak, Android fitxategiak, etab.\n\n<xliff:g id="NAME">^1</xliff:g> honetan ikusgai dagoen edukia ikusteko, sakatu Arakatu."</string>
+ <string name="storage_detail_dialog_other" msgid="5073511663616043370">"Hauek dira \"Beste fitxategi batzuk\" atalean gordetzen diren fitxategiak: aplikazioek gordetako fitxategi partekatuak, Internet edo Bluetooth bidez deskargatutakoak, Android-eko fitxategiak, etab.\n\n<xliff:g id="NAME">^1</xliff:g> honetan ikusgai dagoen edukia ikusteko, sakatu Arakatu."</string>
<string name="storage_detail_dialog_system" msgid="1472572861360014226">"Android-en <xliff:g id="VERSION">%s</xliff:g>. bertsioa exekutatzeko balio duten fitxategiak daude sisteman"</string>
<string name="storage_detail_dialog_user" msgid="1663117417635010371">"Baliteke <xliff:g id="USER_0">^1</xliff:g> erabiltzaileak argazkiak, musika, aplikazioak edo bestelako datuak gorde izatea, memorian <xliff:g id="SIZE">^2</xliff:g> hartuta. \n\nXehetasunak ikusteko, aldatu <xliff:g id="USER_1">^1</xliff:g> erabiltzailearen kontura."</string>
<string name="storage_wizard_init_title" msgid="3407283236421089014">"Konfiguratu <xliff:g id="NAME">^1</xliff:g> memoria"</string>
@@ -1563,13 +1565,13 @@
<string name="error_mcc_not3" msgid="1333037488064427164">"MCC eremuak 3 digitu izan behar ditu."</string>
<string name="error_mnc_not23" msgid="6738398924368729180">"MNC eremuak 2 edo 3 digitu izan behar ditu."</string>
<string name="error_adding_apn_type" msgid="671634520340569678">"Operadoreak ez du onartzen %s motako APN identifikatzailerik."</string>
- <string name="restore_default_apn" msgid="7195266404077471007">"APN ezarpen lehenetsiak leheneratzen."</string>
+ <string name="restore_default_apn" msgid="7195266404077471007">"APNaren ezarpen lehenetsiak leheneratzen."</string>
<string name="menu_restore" msgid="3799288817317293115">"Berrezarri balio lehenetsiak"</string>
- <string name="restore_default_apn_completed" msgid="5671734152740058937">"APN ezarpen lehenetsiak berrezarri dira."</string>
+ <string name="restore_default_apn_completed" msgid="5671734152740058937">"APNaren ezarpen lehenetsiak berrezarri dira."</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"Berrezartzeko aukerak"</string>
<string name="reset_dashboard_summary" msgid="8778383341461126642">"Sarea, aplikazioak edota gailua berrezar daitezke"</string>
<string name="reset_network_title" msgid="8944059136930806211">"Berrezarri wifi, Bluetooth eta sare mugikorrak"</string>
- <string name="reset_network_desc" msgid="4982633363916261109">"Hori eginez gero, sare guztien ezarpenak berrezarri egingo dira, besteak beste: \n\n"<li>"Wifia"</li>\n<li>"Datu-konexioa"</li>\n<li>"Bluetooth-a"</li></string>
+ <string name="reset_network_desc" msgid="4982633363916261109">"Hori eginez gero, sare guztien ezarpenak berrezarriko dira, besteak beste: \n\n"<li>"Wifia"</li>\n<li>"Datu-konexioa"</li>\n<li>"Bluetooth-a"</li></string>
<string name="reset_esim_title" msgid="7630781767040831893">"Ezabatu deskargatutako SIMen edukia"</string>
<string name="reset_esim_desc" msgid="433226911566802">"Ordezko SIM txartelak deskargatzeko, jarri operadorearekin harremanetan. Ez da utziko bertan behera mugikorraren zerbitzu-planik."</string>
<string name="reset_network_button_text" msgid="4293271046867912819">"Berrezarri ezarpenak"</string>
@@ -1609,14 +1611,14 @@
<string name="call_settings_title" msgid="5033906789261282752">"Dei-ezarpenak"</string>
<string name="call_settings_summary" msgid="2119161087671450035">"Konfiguratu erantzungailua, dei-desbideratzea, deia zain uzteko eginbidea, deien identifikazio-zerbitzua."</string>
<string name="tether_settings_title_usb" msgid="4265582654602420357">"Konexioa partekatzea (USB)"</string>
- <string name="tether_settings_title_wifi" msgid="2060965130234484613">"Sare publiko eramangarria"</string>
+ <string name="tether_settings_title_wifi" msgid="2060965130234484613">"Wifi-gune eramangarria"</string>
<string name="tether_settings_title_bluetooth" msgid="1999590158102569959">"Konexioa partekatzea (Bluetooth)"</string>
<string name="tether_settings_title_usb_bluetooth" msgid="1159128764162788159">"Konexioa partekatzea"</string>
- <string name="tether_settings_title_all" msgid="6935843543433954181">"Sare publikoa eta konexioa partekatzea"</string>
- <string name="tether_settings_summary_hotspot_on_tether_on" msgid="1289593649526514499">"Sare publikoa aktibatuta, konexioa partekatzea"</string>
- <string name="tether_settings_summary_hotspot_on_tether_off" msgid="8010689354668285422">"Sare publikoa aktibatuta"</string>
+ <string name="tether_settings_title_all" msgid="6935843543433954181">"Wifi-gunea eta konexioa partekatzea"</string>
+ <string name="tether_settings_summary_hotspot_on_tether_on" msgid="1289593649526514499">"Wifi-gunea aktibatuta, konexioa partekatzea"</string>
+ <string name="tether_settings_summary_hotspot_on_tether_off" msgid="8010689354668285422">"Wifi-gunea aktibatuta dago"</string>
<string name="tether_settings_summary_hotspot_off_tether_on" msgid="1349909238672649877">"Konexioa partekatzea"</string>
- <string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"Datu-aurrezlea aktibatuta badago, ezin da partekatu konexioa, ezta sare publiko eramangarriak erabili ere"</string>
+ <string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"Datu-aurrezlea aktibatuta badago, ezin da partekatu konexioa, ezta wifi-gune eramangarriak erabili ere"</string>
<string name="usb_title" msgid="7480927657535578688">"USB"</string>
<string name="usb_tethering_button_text" msgid="6242228383142012332">"Konexioa partekatzea (USB)"</string>
<string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Partekatu telefonoaren Interneteko konexioa USB bidez"</string>
@@ -1627,7 +1629,7 @@
<string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"<xliff:g id="DEVICE_NAME">%1$d</xliff:g> gailuaren Interneteko konexioa partekatzen ari zara Bluetooth bidez"</string>
<string name="bluetooth_tethering_overflow_error" msgid="6946561351369376943">"Ezin da <xliff:g id="MAXCONNECTION">%1$d</xliff:g> gailurekin baino gehiagorekin konexioa partekatu."</string>
<string name="bluetooth_untether_blank" msgid="5428300773782256084">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> gailuko konexioa amaituko da."</string>
- <string name="tethering_footer_info" msgid="8019555174339154124">"Erabili sare publikoa eta konexioa partekatzea beste gailuei Interneteko konexioa emateko zure datu-konexioaren bidez. Halaber, aplikazioek sare publikoak sor ditzakete, edukia inguruko gailuekin partekatzeko."</string>
+ <string name="tethering_footer_info" msgid="8019555174339154124">"Erabili wifi-gunea eta konexioa partekatzea beste gailuei Interneteko konexioa emateko zure datu-konexioaren bidez. Halaber, aplikazioek wifi-guneak sor ditzakete, edukia inguruko gailuekin partekatzeko."</string>
<string name="tethering_help_button_text" msgid="7653022000284543996">"Laguntza"</string>
<string name="network_settings_title" msgid="8516526011407061679">"Sare mugikorra"</string>
<string name="manage_mobile_plan_title" msgid="3312016665522553062">"Mugikorraren plana"</string>
@@ -1635,7 +1637,7 @@
<string name="sms_change_default_dialog_title" msgid="6301260161969667578">"SMS mezuetarako aplikazioa aldatu?"</string>
<string name="sms_change_default_dialog_text" msgid="8275088077930942680">"<xliff:g id="NEW_APP">%1$s</xliff:g> aplikazioaren ordez, <xliff:g id="CURRENT_APP">%2$s</xliff:g> aplikazioa erabili SMS mezuetarako?"</string>
<string name="sms_change_default_no_previous_dialog_text" msgid="4680224695080527907">"Erabili <xliff:g id="NEW_APP">%s</xliff:g> SMS mezuetarako aplikazio gisa?"</string>
- <string name="network_scorer_picker_title" msgid="1691073966560952916">"Sareen balorazioen hornitzailea"</string>
+ <string name="network_scorer_picker_title" msgid="1691073966560952916">"Sare-balorazioen hornitzailea"</string>
<string name="network_scorer_picker_none_preference" msgid="6448280557733231737">"Bat ere ez"</string>
<string name="network_scorer_change_active_dialog_title" msgid="4274159562371475090">"Wifi-laguntzailea aldatu nahi duzu?"</string>
<string name="network_scorer_change_active_dialog_text" msgid="4264089809189760730">"Sareko konexioak kudeatzeko <xliff:g id="NEW_APP">%1$s</xliff:g> erabili nahi duzu, <xliff:g id="CURRENT_APP">%2$s</xliff:g> erabili beharrean?"</string>
@@ -1658,11 +1660,11 @@
<string name="location_no_recent_accesses" msgid="6289916310397279890">"Ez dago kokapena berriki atzitu duen aplikaziorik"</string>
<string name="location_high_battery_use" msgid="7177199869979522663">"Bateria-erabilera handia"</string>
<string name="location_low_battery_use" msgid="5030448574501435888">"Bateria-erabilera txikia"</string>
- <string name="location_scanning_screen_title" msgid="7663329319689413454">"Wifi eta Bluetooth bidezko bilaketa"</string>
+ <string name="location_scanning_screen_title" msgid="7663329319689413454">"Wifi-sareen bilaketa eta Bluetooth bidezko gailuen bilaketa"</string>
<string name="location_scanning_wifi_always_scanning_title" msgid="6750542206763112172">"Wifi-sareen bilaketa"</string>
<string name="location_scanning_wifi_always_scanning_description" msgid="4956048135941851712">"Eman wifi-sareak edozein unetan bilatzeko baimena aplikazioei eta zerbitzuei, baita wifi-konexioa desaktibatuta dagoenean ere. Kokapenean oinarritutako eginbideak eta zerbitzuak hobetzeko erabil daiteke hori, besteak beste."</string>
- <string name="location_scanning_bluetooth_always_scanning_title" msgid="196241746742607453">"Bluetooth gailuak bilatzea"</string>
- <string name="location_scanning_bluetooth_always_scanning_description" msgid="3796673798637848690">"Eman inguruko gailuak edozein unetan bilatzeko baimena aplikazioei eta zerbitzuei, baita Bluetooth konexioa desaktibatuta dagoenean ere. Kokapenean oinarritutako eginbideak eta zerbitzuak hobetzeko erabil daiteke hori, besteak beste."</string>
+ <string name="location_scanning_bluetooth_always_scanning_title" msgid="196241746742607453">"Bluetooth bidezko gailuen bilaketa"</string>
+ <string name="location_scanning_bluetooth_always_scanning_description" msgid="3796673798637848690">"Eman inguruko gailuak edozein unetan bilatzeko baimena aplikazioei eta zerbitzuei, baita Bluetooth-a desaktibatuta dagoenean ere. Kokapenean oinarritutako eginbideak eta zerbitzuak hobetzeko erabil daiteke hori, besteak beste."</string>
<string name="managed_profile_location_services" msgid="224925483299159541">"Lanerako kokapen-zerbitzuak"</string>
<string name="location_network_based" msgid="1535812159327454835">"Wi‑Fi eta sare mugikor bidezko kokapena"</string>
<string name="location_neighborhood_level" msgid="8459352741296587916">"Utzi aplikazioei zure kokapena bizkorrago zehazteko Google-ren kokapen-zerbitzua erabiltzen. Kokapen-datu anonimoak bildu eta Google-ra bidaliko dira."</string>
@@ -1687,7 +1689,7 @@
<string name="contributors_title" msgid="6800028420806884340">"Kolaboratzaileak"</string>
<string name="manual" msgid="5431859421432581357">"Eskuliburua"</string>
<string name="regulatory_labels" msgid="380968489247381025">"Legezko etiketak"</string>
- <string name="safety_and_regulatory_info" msgid="7113766428000920132">"Segurtasunaren eta legeen esku-liburua"</string>
+ <string name="safety_and_regulatory_info" msgid="7113766428000920132">"Segurtasunaren eta legeen eskuliburua"</string>
<string name="copyright_title" msgid="3847703367689932190">"Copyrighta"</string>
<string name="license_title" msgid="7582145947873528540">"Lizentzia"</string>
<string name="terms_title" msgid="1804549588198223771">"Zehaztapenak eta baldintzak"</string>
@@ -1791,8 +1793,8 @@
<string name="install_applications_title" msgid="8164828577588659496">"Onartu iturburu guztiak"</string>
<string name="recent_app_category_title" msgid="7688788038277126727">"Azkenaldian irekitako aplikazioak"</string>
<string name="see_all_apps_title" msgid="6435061912110347474">"Ikusi <xliff:g id="COUNT">%1$d</xliff:g> aplikazioak"</string>
- <string name="install_all_warning" product="tablet" msgid="4580699862358542727">"Tabletak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Iturburu honetako aplikazioak instalatzen badituzu, onartzen duzu haiek erabiltzeagatik tabletari gerta dakizkiokeen kalteen edo datu-galeren erantzulea zu zarela."</string>
- <string name="install_all_warning" product="default" msgid="7445839116997296358">"Telefonoak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Iturburu honetako aplikazioak instalatzen badituzu, onartzen duzu haiek erabiltzeagatik telefonoari gerta dakizkiokeen kalteen edo datu-galeren erantzulea zu zarela."</string>
+ <string name="install_all_warning" product="tablet" msgid="4580699862358542727">"Tabletak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Iturburu honetako aplikazioak instalatzen badituzu, onartzen duzu haiek erabiltzeagatik tabletari gerta dakizkiokeen kalteen edo datu-galeren erantzulea zeu zarela."</string>
+ <string name="install_all_warning" product="default" msgid="7445839116997296358">"Telefonoak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Iturburu honetako aplikazioak instalatzen badituzu, onartzen duzu haiek erabiltzeagatik telefonoari gerta dakizkiokeen kalteen edo datu-galeren erantzulea zeu zarela."</string>
<string name="install_all_warning" product="device" msgid="9141585291103603515">"Gailuak eta datu pertsonalek aplikazio ezezagunen erasoak jaso ditzakete. Iturburu honetako aplikazioak instalatzen badituzu, onartu egingo duzu haiek erabiltzeagatik gailuari agian gertatuko zaizkion kalteen edo datu-galeren erantzulea zeu izango zarela."</string>
<string name="advanced_settings" msgid="6282069364060968122">"Ezarpen aurreratuak"</string>
<string name="advanced_settings_summary" msgid="5912237062506771716">"Gaitu ezarpenen aukera gehiago"</string>
@@ -2059,10 +2061,10 @@
<string name="accessibility_screen_magnification_summary" msgid="3363006902079431772"><b>"Zooma aplikatzeko"</b>", sakatu pantaila bizkor hiru aldiz.\n"<ul><li>"Gora edo behera egiteko, arrastatu gutxienez bi hatz."</li>\n<li>"Zooma doitzeko, atximurkatu pantaila gutxienez bi hatzekin."</li></ul>\n\n<b>"Zooma une batez bakarrik aplikatzeko"</b>", sakatu pantaila bizkor hiru aldiz eta, hirugarren aldian, utzi hatza pantailan jarrita.\n"<ul><li>"Pantailan mugitzeko, arrastatu hatza."</li>\n<li>"Zooma aplikatzeari uzteko, altxatu hatza."</li></ul>\n\n"Zooma ezin da aplikatu ez teklatuan ez nabigazio-barran."</string>
<string name="accessibility_screen_magnification_navbar_summary" msgid="4726360285256503132">"Lupa aktibatuta dagoenean, sakatu pantailaren behealdeko Erabilerraztasuna botoia pantaila azkar handitzeko.\n\n"<b>"Zooma aplikatzeko"</b>", sakatu Erabilerraztasuna botoia eta sakatu pantailako edozein toki.\n"<ul><li>"Gora edo behera egiteko, arrastatu gutxienez bi hatz."</li>\n<li>"Zooma doitzeko, atximurkatu pantaila gutxienez bi hatzekin."</li></ul>\n\n<b>"Zooma une batez bakarrik aplikatzeko"</b>", sakatu Erabilerraztasuna botoia eta eduki sakatuta pantailako puntu bat.\n"<ul><li>"Pantailan mugitzeko, arrastatu hatza."</li>\n<li>"Zooma aplikatzeari uzteko, altxatu hatza."</li></ul>\n\n"Zooma ezin da aplikatu ez teklatuan ez nabigazio-barran."</string>
<string name="accessibility_screen_magnification_navbar_configuration_warning" msgid="6477234309484795550">"Erabilerraztasuna botoia labur sakatuta \"<xliff:g id="SERVICE">%1$s</xliff:g>\" aukera aktibatzen da. Lupa aplikatzeko, eduki sakatuta Erabilerraztasuna botoia eta, ondoren, hautatu lupa."</string>
- <string name="accessibility_global_gesture_preference_title" msgid="3842279082831426816">"Bolumen-teklen lasterbidea"</string>
+ <string name="accessibility_global_gesture_preference_title" msgid="3842279082831426816">"Bolumen-botoien lasterbidea"</string>
<string name="accessibility_shortcut_service_title" msgid="3516052294376744060">"Lasterbideari esleitutako zerbitzua"</string>
<string name="accessibility_shortcut_service_on_lock_screen_title" msgid="1279441617927949980">"Baimendu pantaila blokeatuan"</string>
- <string name="accessibility_shortcut_description" msgid="1427049334225166395">"Lasterbidea aktibatuta dagoenean, bi bolumen-teklak hiru segundoz sakatuta abiarazten da erabilerraztasun-eginbidea."</string>
+ <string name="accessibility_shortcut_description" msgid="1427049334225166395">"Lasterbidea aktibatuta dagoenean, bi bolumen-botoiak hiru segundoz sakatuta abiarazten da erabilerraztasun-eginbidea."</string>
<string name="accessibility_toggle_high_text_contrast_preference_title" msgid="5652244684961877255">"Kontraste handiko testua"</string>
<string name="accessibility_toggle_screen_magnification_auto_update_preference_title" msgid="2466317284195934003">"Eguneratu auto. pantaila-handiagotzea"</string>
<string name="accessibility_toggle_screen_magnification_auto_update_preference_summary" msgid="6625473745911276917">"Eguneratu handiagotzea aplik. batetik bestera pasatzean."</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Jakinarazpenen dardara"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Tonuaren dardara"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Ukipen-dardara"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Erabili zerbitzua"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Erabili koloreen zuzenketa"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Erabili azpitituluak"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Erabili zerbitzua"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Erabili koloreen zuzenketa"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Erabili azpitituluak"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Egin aurrera"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Audiofonoak"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Ez dago audiofonorik konektatuta"</string>
@@ -2159,7 +2161,7 @@
<string name="captioning_foreground_opacity" msgid="7635639017810117478">"Testuaren opakutasuna"</string>
<string name="captioning_edge_color" msgid="4330622137047993780">"Ertzen kolorea"</string>
<string name="captioning_edge_type" msgid="4414946407430588162">"Ertz mota"</string>
- <string name="captioning_typeface" msgid="7893208796949341767">"Letra-tipoaren familia"</string>
+ <string name="captioning_typeface" msgid="7893208796949341767">"Letra-familia"</string>
<string name="captioning_preview_text" msgid="4877753964772618049">"Azpitituluek itxura hau izango dute"</string>
<string name="captioning_preview_characters" msgid="6469599599352973561">"Aa"</string>
<string name="locale_default" msgid="910074908458214054">"Lehenetsia"</string>
@@ -2232,7 +2234,7 @@
<string name="power_discharge_remaining" msgid="3461915627093471868">"Geratzen den denbora: <xliff:g id="REMAIN">%1$s</xliff:g>"</string>
<string name="power_charge_remaining" msgid="2730510256218879651">"Kargatu arteko denbora: <xliff:g id="UNTIL_CHARGED">%1$s</xliff:g>"</string>
<string name="background_activity_title" msgid="7207836362312111483">"Atzeko planoa erabiltzeko muga"</string>
- <string name="background_activity_summary" msgid="582372194738538145">"Baimendu aplikazioari atzeko planoan funtzionatzea"</string>
+ <string name="background_activity_summary" msgid="582372194738538145">"Eman atzeko planoan exekutatzeko baimena aplikazioari"</string>
<string name="background_activity_summary_disabled" msgid="457944930942085876">"Aplikazioak ez du baimenik atzeko planoan exekutatzeko"</string>
<string name="background_activity_summary_whitelisted" msgid="4713321059375873828">"Ezin da mugatu atzeko planoko erabilera"</string>
<string name="background_activity_warning_dialog_title" msgid="2170790412855899678">"Atzeko planoko jarduerak mugatu nahi dituzu?"</string>
@@ -2395,7 +2397,7 @@
<string name="battery_action_app_settings" msgid="587998773852488539">"Aplikazioaren ezarpenak"</string>
<string name="battery_action_display" msgid="4887913003634317465">"Pantailaren ezarpenak"</string>
<string name="battery_action_wifi" msgid="7123520587925323824">"Wi‑Fi ezarpenak"</string>
- <string name="battery_action_bluetooth" msgid="718594420017519807">"Bluetooth ezarpenak"</string>
+ <string name="battery_action_bluetooth" msgid="718594420017519807">"Bluetooth-aren ezarpenak"</string>
<string name="battery_desc_voice" msgid="4731966028374974986">"Ahots-deiek erabilitako bateria"</string>
<string name="battery_desc_standby" product="tablet" msgid="2941777996429933419">"Tableta inaktibo dagoenean erabilitako bateria"</string>
<string name="battery_desc_standby" product="default" msgid="8889482616564520287">"Telefonoa inaktibo dagoenean erabilitako bateria"</string>
@@ -2446,12 +2448,12 @@
<string name="process_dex2oat_label" msgid="8249082119748556085">"Aplikazio-optimizazioa"</string>
<string name="battery_saver" msgid="3989710213758938398">"Bateria-aurrezlea"</string>
<string name="battery_saver_auto_title" msgid="4158659069641849952">"Aktibatu automatikoki"</string>
- <string name="battery_saver_auto_no_schedule" msgid="739814529432092706">"Ordutegirik ez"</string>
+ <string name="battery_saver_auto_no_schedule" msgid="739814529432092706">"Programaziorik ez"</string>
<string name="battery_saver_auto_routine" msgid="886514412067906980">"Zure ohituretan oinarrituta"</string>
<string name="battery_saver_auto_percentage" msgid="5791982309331921556">"Bateria-mailaren ehunekoan oinarrituta"</string>
<string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"Bateria kargatzeko ohiko ordua iritsi aurretik bateria agortzeko arriskua badago aktibatzen da bateria-aurrezlea"</string>
<string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"Bateria-maila <xliff:g id="PERCENT">%1$s</xliff:g> denean aktibatuko da"</string>
- <string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Ezarri ordutegia"</string>
+ <string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Ezarri programazioa"</string>
<string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"Desaktibatu guztiz kargatu ondoren"</string>
<string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"Telefonoaren bateria <xliff:g id="PERCENT">%1$s</xliff:g> denean, desaktibatu egiten da bateria-aurrezlea"</string>
<string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"Tabletaren bateria <xliff:g id="PERCENT">%1$s</xliff:g> denean, desaktibatu egiten da bateria-aurrezlea"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Aktibatu"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Erabili bateria-aurrezlea"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Erabili bateria-aurrezlea"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Aktibatu automatikoki"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Inoiz ez"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"bateriaren maila <xliff:g id="PERCENT">%1$s</xliff:g> denean"</string>
@@ -2489,8 +2491,8 @@
<string name="menu_duration_6h" msgid="6169009210638008417">"6 ordu"</string>
<string name="menu_duration_12h" msgid="1435242738163843797">"12 ordu"</string>
<string name="menu_duration_1d" msgid="6476370834372352174">"1 egun"</string>
- <string name="menu_show_system" msgid="6315865548558708248">"Erakutsi sistema"</string>
- <string name="menu_hide_system" msgid="8457027118873733782">"Ezkutatu sistema"</string>
+ <string name="menu_show_system" msgid="6315865548558708248">"Erakutsi sistemaren prozesuak"</string>
+ <string name="menu_hide_system" msgid="8457027118873733782">"Ezkutatu sistemaren prozesuak"</string>
<string name="menu_show_percentage" msgid="6983272380729890884">"Erakutsi ehunekoak"</string>
<string name="menu_use_uss" msgid="3765054705208926803">"Erabili USS"</string>
<string name="menu_proc_stats_type" msgid="2680179749566186247">"Estatistika mota"</string>
@@ -2538,7 +2540,7 @@
<string name="credentials_settings_not_available" msgid="5490259681690183274">"Erabiltzaile honek ez dauka kredentzialik"</string>
<string name="credential_for_vpn_and_apps" msgid="2462642486949593841">"VPN konexioarekin eta aplikazioekin erabiltzeko instalatuta"</string>
<string name="credential_for_wifi" msgid="2903295786961726388">"Wi-Fi konexioarekin erabiltzeko instalatuta"</string>
- <string name="credentials_reset_hint" msgid="3484350477764088169">"Eduki guztiak kendu?"</string>
+ <string name="credentials_reset_hint" msgid="3484350477764088169">"Eduki guztiak kendu nahi dituzu?"</string>
<string name="credentials_erased" msgid="7287088033523869085">"Kredentz. biltegia ezabatu da."</string>
<string name="credentials_not_erased" msgid="9137227570738627637">"Ezin izan da kredentzialen biltegia ezabatu."</string>
<string name="usage_access_title" msgid="7981321142726540574">"Erabilera-baimena dutenak"</string>
@@ -2561,7 +2563,7 @@
<string name="backup_erase_dialog_title" msgid="8178424339104463014"></string>
<string name="backup_erase_dialog_message" msgid="8767843355330070902">"Wifi-sareen pasahitzen, laster-marken, bestelako ezarpenen eta aplikazioetako datuen babeskopiak egiteari utzi eta Google-ren zerbitzarietako kopia guztiak ezabatu nahi dituzu?"</string>
<string name="fullbackup_erase_dialog_message" msgid="2588536036471144070">"Gailuko datuen (adibidez, Wi-Fi pasahitzak eta deien historia) eta aplikazioetako datuen (besteak beste, ezarpenak eta aplikazioek gordetako fitxategiak) babeskopiak egiteari utzi nahi diozu eta urruneko zerbitzarietako kopia guztiak ezabatu nahi dituzu?"</string>
- <string name="fullbackup_data_summary" msgid="406274198094268556">"Egin babeskopiak automatikoki urrunetik, bai gailuetako datuenak (esaterako, Wi-Fi sareetako pasahitzak eta deien historia), bai aplikazioetako datuenak (esaterako, ezarpenak eta aplikazioek gordetako fitxategiak).\n\nBabeskopiak automatikoki egiteko aukera aktibatzean, gailuko eta aplikazioetako datuak urrunetik gordetzen dira aldizka. Aplikazioetako datuak aplikazioek gordetako edozein datu izan daitezke (garatzailearen ezarpenen arabera), eta kontuzkoak izan litezkeen datuak ere sar daitezke (adibidez, kontaktuak, mezuak eta argazkiak)."</string>
+ <string name="fullbackup_data_summary" msgid="406274198094268556">"Egin babeskopiak automatikoki urrunetik, bai gailuetako datuenak (esaterako, Wi-Fi sareetako pasahitzak eta deien historia), bai aplikazioetako datuenak (esaterako, ezarpenak eta aplikazioek gordetako fitxategiak).\n\nBabeskopiak automatikoki egiteko aukera aktibatzean, gailuko eta aplikazioetako datuak urrunetik gordetzen dira aldizka. Aplikazioetako datuak aplikazioek gordetako edozein datu izan daitezke (garatzaileen ezarpenen arabera), eta kontuzkoak izan litezkeen datuak ere sar daitezke (adibidez, kontaktuak, mezuak eta argazkiak)."</string>
<string name="device_admin_settings_title" msgid="2074319456047334589">"Gailua administratzeko aplikazioaren ezarpenak"</string>
<string name="active_device_admin_msg" msgid="6929247869516924549">"Gailua administratzeko aplikazioa"</string>
<string name="remove_device_admin" msgid="4413438593788336400">"Desaktibatu gailua administratzeko aplikazioa"</string>
@@ -2594,7 +2596,7 @@
<string name="sync_active" msgid="1112604707180806364">"Sinkronizazioa aktibo"</string>
<string name="account_sync_settings_title" msgid="3344538161552327748">"Sinkronizatu"</string>
<string name="sync_is_failing" msgid="8284618104132302644">"Sinkronizazioak arazoak ditu. Laster egongo da berriro erabilgarri."</string>
- <string name="add_account_label" msgid="4461298847239641874">"Gehitu kontua"</string>
+ <string name="add_account_label" msgid="4461298847239641874">"Gehitu kontu bat"</string>
<string name="managed_profile_not_available_label" msgid="8784246681719821917">"Laneko profila ez dago oraindik erabilgarri"</string>
<string name="work_mode_label" msgid="6845849194740195757">"Laneko profila"</string>
<string name="work_mode_on_summary" msgid="1682781113156323592">"Erakundeak kudeatzen du"</string>
@@ -2627,8 +2629,8 @@
<string name="remove_account_label" msgid="5885425720323823387">"Kendu kontua"</string>
<string name="header_add_an_account" msgid="8482614556580804956">"Gehitu kontu bat"</string>
<string name="really_remove_account_title" msgid="4166512362915154319">"Kontua kendu nahi duzu?"</string>
- <string name="really_remove_account_message" product="tablet" msgid="7403843371045856719">"Kontua kentzen baduzu, bere mezu, kontaktu eta bestelako datu guztiak tabletatik ezabatuko dira!"</string>
- <string name="really_remove_account_message" product="default" msgid="8951224626153163914">"Kontua kentzen baduzu, bere mezu, kontaktu eta bestelako datu guztiak telefonotik ezabatuko dira!"</string>
+ <string name="really_remove_account_message" product="tablet" msgid="7403843371045856719">"Kontua kentzen baduzu, hartako mezu, kontaktu eta bestelako datu guztiak tabletatik ezabatuko dira!"</string>
+ <string name="really_remove_account_message" product="default" msgid="8951224626153163914">"Kontua kentzen baduzu, hartako mezu, kontaktu eta bestelako datu guztiak telefonotik ezabatuko dira!"</string>
<string name="really_remove_account_message" product="device" msgid="3751798556257519916">"Kontua kentzen baduzu, bertako mezu, kontaktu eta bestelako datu guztiak ezabatuko dira gailutik!"</string>
<string name="remove_account_failed" msgid="491458185327106966">"Administratzaileak ez du eman aldaketa egiteko baimena"</string>
<string name="cant_sync_dialog_title" msgid="5483419398223189881">"Ezin da eskuz sinkronizatu"</string>
@@ -2647,7 +2649,7 @@
<string name="misc_files_selected_count_bytes" msgid="3752262902203465861">"<xliff:g id="NUMBER">%1$s</xliff:g>/<xliff:g id="TOTAL">%2$s</xliff:g>"</string>
<string name="select_all" msgid="452240217913675728">"Hautatu guztiak"</string>
<string name="data_usage_summary_title" msgid="7288431048564861043">"Datuen erabilera"</string>
- <string name="data_usage_app_summary_title" msgid="8277327968906074983">"Datu-konexioa eta wifi-konexioa"</string>
+ <string name="data_usage_app_summary_title" msgid="8277327968906074983">"Datu- eta wifi-konexioa"</string>
<string name="data_usage_accounting" msgid="4681642832010140640">"Beharbada operadoreak zenbatzen duen datu kopurua eta gailuak zenbatzen duena ez datoz bat."</string>
<string name="data_usage_app" msgid="4995297799363021198">"Aplikazioen erabilera"</string>
<string name="data_usage_app_info_label" msgid="5358288895158910477">"APLIKAZIOARI BURUZKO INFORMAZIOA"</string>
@@ -2669,7 +2671,7 @@
<string name="data_usage_cellular_data_summary" msgid="9162777397135709280">"Pausatu mugara iristean"</string>
<string name="account_settings_menu_auto_sync" msgid="2673669556006027506">"Sinkronizatu datuak automatikoki"</string>
<string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"Sinkr. datu pertsonalak auto."</string>
- <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Sinkr. laneko datuak auto."</string>
+ <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Sinkronizatu laneko datuak auto."</string>
<string name="data_usage_change_cycle" msgid="447761920472170031">"Aldatu zikloa…"</string>
<string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"Datuen erabilera-zikloa berrezarri beharreko hilabeteko eguna:"</string>
<string name="data_usage_empty" msgid="7981405723435034032">"Ez dago epean daturik erabili duen aplikaziorik."</string>
@@ -2715,9 +2717,9 @@
<string name="data_usage_limit_dialog_mobile" product="tablet" msgid="2000713577999830647">"Zehaztu duzun mugara iristean, tabletak desaktibatu egingo du datu-konexioa.\n\nZentzuzko muga bat ezartzea gomendatzen dizugu, datuen erabilera tabletak neurtuko duelako eta litekeena delako operadoreak datuak bestela neurtzea."</string>
<string name="data_usage_limit_dialog_mobile" product="default" msgid="943546278705619205">"Zehaztu duzun mugara iristean, telefonoak desaktibatu egingo du datu-konexioa.\n\nZentzuzko muga bat ezartzea gomendatzen dizugu, datuen erabilera telefonoak neurtuko duelako eta litekeena delako operadoreak datuak bestela neurtzea."</string>
<string name="data_usage_restrict_background_title" msgid="3568746530413220844">"Atzeko planoko datuak mugatu?"</string>
- <string name="data_usage_restrict_background" msgid="995811034744808575">"Atzeko planoan datu-konexioa erabiltzeko aukera mugatzen baduzu, aplikazio eta zerbitzu batzuek ez dute funtzionatuko Wi-Fi sare batera konektatu ezean."</string>
- <string name="data_usage_restrict_background_multiuser" product="tablet" msgid="6032810839234864814">"Atzeko planoan datu-konexioa erabiltzeko aukera mugatzen baduzu, aplikazio eta zerbitzu batzuek ez dute funtzionatuko Wi-Fi sare batera konektatu ezean.\n\nTabletako erabiltzaile guztiei eragingo die ezarpen honek."</string>
- <string name="data_usage_restrict_background_multiuser" product="default" msgid="6846901756455789858">"Atzeko planoan datu-konexioa erabiltzeko aukera mugatzen baduzu, aplikazio eta zerbitzu batzuek ez dute funtzionatuko Wi-Fi sare batera konektatu ezean.\n\nTelefonoko erabiltzaile guztiei eragingo die ezarpen honek."</string>
+ <string name="data_usage_restrict_background" msgid="995811034744808575">"Atzeko planoan datu-konexioa erabiltzeko aukera mugatzen baduzu, aplikazio eta zerbitzu batzuek ez dute funtzionatuko wifi-sare batera konektatu ezean."</string>
+ <string name="data_usage_restrict_background_multiuser" product="tablet" msgid="6032810839234864814">"Atzeko planoan datu-konexioa erabiltzeko aukera mugatzen baduzu, aplikazio eta zerbitzu batzuek ez dute funtzionatuko wifi-sare batera konektatu ezean.\n\nTabletako erabiltzaile guztiei eragingo die ezarpen honek."</string>
+ <string name="data_usage_restrict_background_multiuser" product="default" msgid="6846901756455789858">"Atzeko planoan datu-konexioa erabiltzeko aukera mugatzen baduzu, aplikazio eta zerbitzu batzuek ez dute funtzionatuko wifi-sare batera konektatu ezean.\n\nTelefonoko erabiltzaile guztiei eragingo die ezarpen honek."</string>
<string name="data_usage_sweep_warning" msgid="4646401408698778092"><font size="18">"<xliff:g id="NUMBER">^1</xliff:g>"</font>" "<font size="9">"<xliff:g id="UNIT">^2</xliff:g>"</font>\n<font size="12">"abisua"</font></string>
<string name="data_usage_sweep_limit" msgid="6101105504557548269"><font size="18">"<xliff:g id="NUMBER">^1</xliff:g>"</font>" "<font size="9">"<xliff:g id="UNIT">^2</xliff:g>"</font>\n<font size="12">"muga"</font></string>
<string name="data_usage_uninstalled_apps" msgid="4152786786140875769">"Kendutako aplikazioak"</string>
@@ -2920,10 +2922,10 @@
<string name="nfc_payment_app_and_desc" msgid="102312684211458190">"<xliff:g id="APP">%1$s</xliff:g> - <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
<string name="nfc_payment_use_default" msgid="3098724195746409476">"Erabili lehenetsia"</string>
<string name="nfc_payment_favor_default" msgid="7555356982142464260">"Beti"</string>
- <string name="nfc_payment_favor_open" msgid="3739055715000436749">"Ordaintzeko beste aplikazio bat zabalik egotean ez ezik"</string>
+ <string name="nfc_payment_favor_open" msgid="3739055715000436749">"Ordaintzeko beste aplikazio bat irekita badago izan ezik"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"\"Ukitu eta ordaindu\" terminalean, ordaindu honekin:"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"Terminalean ordaintzea"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Konfiguratu ordaintzeko aplikazioa. Ondoren, jarri telefonoaren atzeko aldea ukipen gabeko sistemaren ikurra duen terminalaren aurrean."</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Konfiguratu ordaintzeko aplikazioa. Ondoren, jarri telefonoaren atzeko aldea kontakturik gabeko sistemaren ikurra duen terminalaren aurrean."</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"Ados"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"Gehiago…"</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"Hobespen gisa ezarri nahi duzu?"</string>
@@ -3032,7 +3034,7 @@
<string name="network_dashboard_title" msgid="8288134139584687806">"Sareak eta Internet"</string>
<string name="network_dashboard_summary_mobile" msgid="5560545061217580626">"mugikorra"</string>
<string name="network_dashboard_summary_data_usage" msgid="4695629715072542102">"datuen erabilera"</string>
- <string name="network_dashboard_summary_hotspot" msgid="3928610802321995214">"sare publikoa"</string>
+ <string name="network_dashboard_summary_hotspot" msgid="3928610802321995214">"wifi-gunea"</string>
<string name="connected_devices_dashboard_title" msgid="7795222675849060444">"Konektatutako gailuak"</string>
<string name="connected_devices_dashboard_summary" msgid="1072664369515033179">"Bluetooth, gidatze modua, NFC"</string>
<string name="connected_devices_dashboard_no_nfc_summary" msgid="2610085597733526722">"Bluetooth, gidatze modua"</string>
@@ -3100,7 +3102,7 @@
<string name="keywords_imei_info" msgid="4325847870422053408">"imei, meid, min, prl bertsioa, imei sv"</string>
<string name="keywords_sim_status" msgid="3852088576719874387">"sarea, sare mugikorraren egoera, zerbitzuaren egoera, seinalearen indarra, sare mugikor mota, ibiltaritza, iccid"</string>
<string name="keywords_model_and_hardware" msgid="2743197096210895251">"serie-zenbakia, hardwarearen bertsioa"</string>
- <string name="keywords_android_version" msgid="4842749998088987740">"android-en segurtasunaren adabaki-maila, oinarri-bandaren bertsioa, kernelaren bertsioa"</string>
+ <string name="keywords_android_version" msgid="4842749998088987740">"android-en segurtasunaren adabaki-maila, oinarri-bandaren bertsioa, kernel bertsioa"</string>
<string name="keywords_dark_ui_mode" msgid="1027966176887770318">"gai, argi, modu, ilun"</string>
<string name="keywords_financial_apps_sms_access" msgid="3236014691838121857">"finantza-aplikazioa, SMSa, baimena"</string>
<string name="keywords_systemui_theme" msgid="9150908170417305866">"gai iluna"</string>
@@ -3113,15 +3115,15 @@
<string name="keywords_display_adaptive_sleep" msgid="1695357782432822811">"ilundu pantaila, pantaila ilundu, ezarri inaktibo, inaktibo ezarri, bateria, denbora-muga, arreta, pantaila, bistaratzea, jarduera eza, inaktibo"</string>
<string name="keywords_auto_rotate" msgid="4320791369951647513">"biratu, irauli, errotazioa, bertikala, horizontala, orientazioa"</string>
<string name="keywords_system_update_settings" msgid="4419971277998986067">"bertsio-berritu, android"</string>
- <string name="keywords_zen_mode_settings" msgid="4103819458182535493">"ez molestatu, ordutegia, jakinarazpenak, blokeatu, isilik, dardara, inaktibo ezarri, lantokia, arreta, soinua, desaktibatu audioa, eguna, asteguna, asteburua, asteguneko gaua, gertaera"</string>
+ <string name="keywords_zen_mode_settings" msgid="4103819458182535493">"ez molestatu, programazioa, jakinarazpenak, blokeatu, isilik, dardara, inaktibo ezarri, lantokia, arreta, soinua, desaktibatu audioa, eguna, asteguna, asteburua, asteguneko gaua, gertaera"</string>
<string name="keywords_screen_timeout" msgid="4328381362313993666">"pantaila, blokeatzeko denbora, denbora-muga, pantaila blokeatua"</string>
<string name="keywords_storage_settings" msgid="6422454520424236476">"memoria, cachea, datuak, ezabatu, garbitu, tokia egin, tokia"</string>
- <string name="keywords_bluetooth_settings" msgid="1152229891590622822">"konektatuta, gailua, aurikularrak, entzungailua, bozgorailua, hari gabekoak, parekatu, aurikular euskarridunak, musika, multimedia-edukia"</string>
+ <string name="keywords_bluetooth_settings" msgid="1152229891590622822">"konektatuta, gailua, aurikularrak, entzungailua, bozgorailua, hari gabekoak, parekatu, musika, multimedia-edukia"</string>
<string name="keywords_wallpaper" msgid="7665778626293643625">"atzeko planoa, pantaila, pantaila blokeatua, gaia"</string>
<string name="keywords_assist_input" msgid="8392362788794886564">"lehenetsia, laguntzailea"</string>
<string name="keywords_default_payment_app" msgid="845369409578423996">"ordaindu, lehenetsia"</string>
<string name="keywords_ambient_display" msgid="8835182491798487184">"jasotako jakinarazpena"</string>
- <string name="keywords_hotspot_tethering" msgid="1723591462602613867">"usb konexioa partekatu, bluetooth konexioa partekatu, wifi sare publikoa"</string>
+ <string name="keywords_hotspot_tethering" msgid="1723591462602613867">"usb konexioa partekatu, bluetooth bidezko konexioa partekatu, wifi-gunea"</string>
<string name="keywords_touch_vibration" msgid="2081175517528255224">"ukipena, dardara, pantaila, sentikortasuna"</string>
<string name="keywords_ring_vibration" msgid="4210509151866460210">"ukipena, dardara, telefonoa, deia, sentikortasuna, tonua"</string>
<string name="keywords_notification_vibration" msgid="1077515502086745166">"ukipena, dardara, sentikortasuna"</string>
@@ -3175,17 +3177,17 @@
<string name="zen_mode_behavior_total_silence" msgid="371498357539257671">"Isiltasun osoa"</string>
<string name="zen_mode_behavior_no_sound_except" msgid="8894465423364103198">"Ez egin soinurik. Salbuespena: <xliff:g id="CATEGORIES">%1$s</xliff:g>."</string>
<string name="zen_mode_behavior_alarms_only" msgid="8406622989983047562">"Alarmen eta multimedia-edukiaren soinuak soilik"</string>
- <string name="zen_mode_automation_settings_title" msgid="3916960043054489008">"Ordutegiak"</string>
- <string name="zen_mode_delete_automatic_rules" msgid="2455264581527305755">"Ezabatu ordutegiak"</string>
+ <string name="zen_mode_automation_settings_title" msgid="3916960043054489008">"Programazioak"</string>
+ <string name="zen_mode_delete_automatic_rules" msgid="2455264581527305755">"Ezabatu programazioak"</string>
<string name="zen_mode_schedule_delete" msgid="7786092652527516740">"Ezabatu"</string>
<string name="zen_mode_rule_name_edit" msgid="5479435215341745578">"Editatu"</string>
- <string name="zen_mode_automation_settings_page_title" msgid="3001783354881078983">"Ordutegiak"</string>
- <string name="zen_mode_automatic_rule_settings_page_title" msgid="5272888746413504692">"Antolatu"</string>
- <string name="zen_mode_schedule_category_title" msgid="1936785755444711221">"Ordutegia"</string>
+ <string name="zen_mode_automation_settings_page_title" msgid="3001783354881078983">"Programazioak"</string>
+ <string name="zen_mode_automatic_rule_settings_page_title" msgid="5272888746413504692">"Programatu"</string>
+ <string name="zen_mode_schedule_category_title" msgid="1936785755444711221">"Programazioa"</string>
<string name="zen_mode_automation_suggestion_title" msgid="4921779962633710347">"Isilarazi telefonoa ordu jakinetan"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="2709837472884371037">"Ezarri ez molestatzeko moduaren arauak"</string>
- <string name="zen_mode_schedule_title" msgid="5275268813192802631">"Ordutegia"</string>
- <string name="zen_mode_use_automatic_rule" msgid="446326253915861824">"Erabili ordutegia"</string>
+ <string name="zen_mode_schedule_title" msgid="5275268813192802631">"Programazioa"</string>
+ <string name="zen_mode_use_automatic_rule" msgid="446326253915861824">"Erabili programazioa"</string>
<string name="zen_mode_option_important_interruptions" msgid="5173944276846940149">"Lehentasuna dutenak soilik"</string>
<string name="zen_mode_option_alarms" msgid="4843278125235203076">"Alarmak soilik"</string>
<string name="zen_mode_option_no_interruptions" msgid="4723700274519260852">"Isiltasun osoa"</string>
@@ -3195,11 +3197,11 @@
<string name="zen_mode_settings_category" msgid="5601680733422424922">"Ez molestatzeko modua aktibatuta dagoenean"</string>
<string name="zen_mode_restrict_notifications_title" msgid="7486753018073540477">"Murriztu jakinarazpenak"</string>
<string name="zen_mode_restrict_notifications_mute" msgid="2673665450311184875">"Ez egin soinurik jakinarazpenak jasotzean"</string>
- <string name="zen_mode_restrict_notifications_mute_summary" msgid="1696217042353376674">"Jakinarazpenak ikusiko dituzu pantailan"</string>
+ <string name="zen_mode_restrict_notifications_mute_summary" msgid="1696217042353376674">"Jakinarazpenak pantailan ikusiko dituzu"</string>
<string name="zen_mode_restrict_notifications_mute_footer" msgid="3049522809520549054">"Jakinarazpenak iristen direnean, telefonoak ez du egingo soinurik edo dardararik."</string>
<string name="zen_mode_restrict_notifications_hide" msgid="3296933643539682552">"Ez egin soinurik eta ez erakutsi ezer jakinarazpenak jasotzean"</string>
<string name="zen_mode_restrict_notifications_hide_summary" msgid="1449301153755270168">"Ez duzu ikusi edo entzungo jakinarazpenik"</string>
- <string name="zen_mode_restrict_notifications_hide_footer" msgid="7617688597593946765">"Telefonoak ez ditu erakutsiko ez jakinarazpen berriak, ez lehendik daudenak, eta ez du dar-dar edo soinurik egingo haiek jasotzean. Kontuan izan, ordea, telefonoaren jarduerei edo egoerari buruzko ezinbesteko jakinarazpenak agertuko direla.\n\nEz molestatzeko modua desaktibatzean, galdutako jakinarazpenak ikusi nahi badituzu, pasatu hatza pantailaren goialdetik behera."</string>
+ <string name="zen_mode_restrict_notifications_hide_footer" msgid="7617688597593946765">"Telefonoak ez ditu erakutsiko ez jakinarazpen berriak, ez lehendik daudenak, eta ez du dar-dar edo soinurik egingo haiek jasotzean. Kontuan izan, ordea, telefonoaren jarduerei edo egoerari buruzko ezinbesteko jakinarazpenak agertuko direla.\n\nEz molestatzeko modua desaktibatzean galdutako jakinarazpenak ikusi nahi badituzu, pasatu hatza pantailaren goialdetik behera."</string>
<string name="zen_mode_restrict_notifications_custom" msgid="3167252482570424133">"Pertsonalizatua"</string>
<string name="zen_mode_restrict_notifications_enable_custom" msgid="6376983315529894440">"Gaitu ezarpen pertsonalizatua"</string>
<string name="zen_mode_restrict_notifications_disable_custom" msgid="8004212081465043044">"Kendu ezarpen pertsonalizatua"</string>
@@ -3215,7 +3217,7 @@
<string name="zen_mode_block_effect_peek" msgid="6075662813575910221">"Ez agerrarazi jakinarazpenak pantailan"</string>
<string name="zen_mode_block_effect_status" msgid="6516614225115681068">"Ezkutatu pantailaren goialdeko egoera-barraren ikonoak"</string>
<string name="zen_mode_block_effect_badge" msgid="3891743027347075136">"Ezkutatu aplikazioen ikonoetako jakinarazpen-biribiltxoak"</string>
- <string name="zen_mode_block_effect_ambient" msgid="6382013125863616197">"Ez esnarazi jakinarazpenekin"</string>
+ <string name="zen_mode_block_effect_ambient" msgid="6382013125863616197">"Ez aktibatu jakinarazpenekin"</string>
<string name="zen_mode_block_effect_list" msgid="6081548478844912181">"Ezkutatu jakinarazpen-zerrendatik"</string>
<string name="zen_mode_block_effect_summary_none" msgid="7166175186759564510">"Inoiz ez"</string>
<string name="zen_mode_block_effect_summary_screen_off" msgid="2985086455557755722">"Pantaila itzalita dagoenean"</string>
@@ -3232,7 +3234,7 @@
<string name="zen_mode_button_turn_off" msgid="3990967728457149454">"Desaktibatu"</string>
<string name="zen_mode_settings_dnd_manual_end_time" msgid="4307574188962071429">"<xliff:g id="FORMATTED_TIME">%s</xliff:g> arte egongo da aktibatuta ez molestatzeko modua"</string>
<string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"Desaktibatzen duzun arte egongo da aktibatuta ez molestatzeko modua"</string>
- <string name="zen_mode_settings_dnd_automatic_rule" msgid="2843297614114625408">"Antolaketa batek (<xliff:g id="RULE_NAME">%s</xliff:g>) automatikoki aktibatu du ez molestatzeko modua"</string>
+ <string name="zen_mode_settings_dnd_automatic_rule" msgid="2843297614114625408">"Programazio batek (<xliff:g id="RULE_NAME">%s</xliff:g>) automatikoki aktibatu du ez molestatzeko modua"</string>
<string name="zen_mode_settings_dnd_automatic_rule_app" msgid="5103454923160912313">"<xliff:g id="APP_NAME">%s</xliff:g> aplikazioak automatikoki aktibatu du ez molestatzeko modua"</string>
<string name="zen_mode_settings_dnd_custom_settings_footer" msgid="6335108298640066560">"Ez molestatzeko modua aktibatuta dago <xliff:g id="RULE_NAMES">%s</xliff:g> arauetan, ezarpen pertsonalizatuekin."</string>
<string name="zen_mode_settings_dnd_custom_settings_footer_link" msgid="4007974052885089379"><annotation id="link">" Ikusi ezarpen pertsonalizatuak"</annotation></string>
@@ -3250,12 +3252,12 @@
</plurals>
<string name="zen_mode_duration_summary_time_minutes" msgid="6988728116715208859">"<xliff:g id="NUM_MINUTES">%d</xliff:g> minutu (automatikoki aktibatu ezean)"</string>
<plurals name="zen_mode_sound_summary_summary_off_info" formatted="false" msgid="8527428833487709278">
- <item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> ordutegi aktiba daitezke automatikoki</item>
- <item quantity="one">1 ordutegi aktiba daiteke automatikoki</item>
+ <item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> programazio aktiba daitezke automatikoki</item>
+ <item quantity="one">1 programazio aktiba daiteke automatikoki</item>
</plurals>
<string name="zen_category_behavior" msgid="7695750848671443532">"Desaktibatu gailuaren audioa, baina onartu salbuespenak"</string>
<string name="zen_category_exceptions" msgid="2139670640033601899">"Salbuespenak"</string>
- <string name="zen_category_schedule" msgid="989629666210114164">"Antolaketa"</string>
+ <string name="zen_category_schedule" msgid="989629666210114164">"Programazioa"</string>
<string name="zen_sound_title" msgid="3429086967245473870">"Ikusi salbuespen guztiak"</string>
<string name="zen_sound_footer" msgid="1778673975517424878">"Ez molestatzeko modua aktibatuta dagoenean, audioa eta dardara desaktibatuta egongo dira, goian baimendutako elementuetan izan ezik."</string>
<string name="zen_sound_category_title" msgid="2109447208414722786">"Desaktibatu guztien audioa eta dardara, hauena izan ezik:"</string>
@@ -3265,7 +3267,7 @@
<string name="zen_sound_two_allowed" msgid="299344481401823614">"Audioa eta dardara desaktibatuta, baina baimendu <xliff:g id="SOUND_TYPE_0">%1$s</xliff:g> eta <xliff:g id="SOUND_TYPE_1">%2$s</xliff:g>"</string>
<string name="zen_sound_three_allowed" msgid="8374564453060696012">"Audioa eta dardara desaktibatuta, baina baimendu <xliff:g id="SOUND_TYPE_0">%1$s</xliff:g>, <xliff:g id="SOUND_TYPE_1">%2$s</xliff:g> eta <xliff:g id="SOUND_TYPE_2">%3$s</xliff:g>"</string>
<string name="zen_custom_settings_dialog_title" msgid="908049494676219236">"Ezarpen pertsonalizatuak"</string>
- <string name="zen_custom_settings_dialog_review_schedule" msgid="2247761749333893513">"Berrikusi antolaketa"</string>
+ <string name="zen_custom_settings_dialog_review_schedule" msgid="2247761749333893513">"Berrikusi programazioa"</string>
<string name="zen_custom_settings_dialog_ok" msgid="3572754922025853427">"Ados"</string>
<string name="zen_custom_settings_notifications_header" msgid="7469592764589354302">"Jakinarazpenak"</string>
<string name="zen_custom_settings_duration_header" msgid="1806465684026300942">"Iraupena"</string>
@@ -3302,15 +3304,15 @@
<string name="asst_capabilities_actions_replies_title" msgid="3929395108744251338">"Ekintza eta erantzun adimendunak"</string>
<string name="asst_capabilities_actions_replies_summary" msgid="5647029698181357902">"Gehitu automatikoki testuinguru-jakinarazpenetarako ekintzak eta jakinarazpenetarako erantzun bizkorrak"</string>
<string name="hide_silent_icons_title" msgid="1070905516921542662">"Ezkutatu jakinarazpen isilen egoera-ikonoak"</string>
- <string name="hide_silent_icons_summary" msgid="2624346914488256888">"Ezkutatu jakinarazpen isilen ikonoak egoera-barran"</string>
+ <string name="hide_silent_icons_summary" msgid="2624346914488256888">"Ezkutatu soinurik gabeko jakinarazpenen ikonoak egoera-barran"</string>
<string name="notification_badging_title" msgid="6311699476970264712">"Baimendu jakinarazpen-biribiltxoak"</string>
<string name="notification_bubbles_title" msgid="9196562435741861317">"Burbuilak"</string>
- <string name="notification_bubbles_summary" msgid="4624512775901949578">"Atzitu bizkor aplikazioetako edukia lasterbide flotagarriak erabilita"</string>
+ <string name="notification_bubbles_summary" msgid="4624512775901949578">"Atzitu bizkor aplikazioetako edukia lasterbide gainerakorrak erabilita"</string>
<string name="bubbles_feature_education" msgid="8979109826818881018">"Jakinarazpen batzuk eta bestelako edukia burbuila gisa ager daitezke pantailan. Burbuilak irekitzeko, saka itzazu. Baztertzeko, ordea, arrasta itzazu pantailan behera."</string>
<string name="bubbles_app_toggle_title" msgid="6401217027603326439">"Burbuilak"</string>
<string name="bubbles_app_toggle_summary" msgid="7707611139796553855">"Baimendu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioari jakinarazpen batzuk burbuila gisa erakustea"</string>
<string name="bubbles_feature_disabled_dialog_title" msgid="3375452386012079293">"Aktibatu burbuilak"</string>
- <string name="bubbles_feature_disabled_dialog_text" msgid="326945485806386477">"Aplikazio honetan burbuilak aktibatu ahal izateko, gailuan aktibatu behar dituzu lehendabizi. Ekintza horrek eragina izango du burbuilak lehendik ere aktibatuta dituzten aplikazioetan."</string>
+ <string name="bubbles_feature_disabled_dialog_text" msgid="326945485806386477">"Aplikazio honetan burbuilak aktibatu ahal izateko, gailuan aktibatu behar dituzu lehendabizi. Ekintza horrek eragina izango du burbuilak lehendik ere aktibatuta dauzkaten aplikazioetan."</string>
<string name="bubbles_feature_disabled_button_approve" msgid="6661464849674493351">"Gailua pizteko"</string>
<string name="bubbles_feature_disabled_button_cancel" msgid="4807286844588486198">"Utzi"</string>
<string name="swipe_direction_title" msgid="7535031630668873009">"Hatza pasatuta gauzatzen diren ekintzak"</string>
@@ -3433,14 +3435,14 @@
<string name="notification_channel_sound_title" msgid="7635366839003304745">"Soinua"</string>
<string name="zen_mode_rule_delete_button" msgid="6763486487220471193">"Ezabatu"</string>
<string name="zen_mode_rule_rename_button" msgid="1428130397306726792">"Aldatu izena"</string>
- <string name="zen_mode_rule_name" msgid="8583652780885724670">"Ordutegiaren izena"</string>
- <string name="zen_mode_rule_name_hint" msgid="6569877315858105901">"Idatzi ordutegiaren izena"</string>
- <string name="zen_mode_rule_name_warning" msgid="4773465816059587512">"Badago izen hori duen beste ordutegi bat"</string>
+ <string name="zen_mode_rule_name" msgid="8583652780885724670">"Programazioaren izena"</string>
+ <string name="zen_mode_rule_name_hint" msgid="6569877315858105901">"Idatzi programazioaren izena"</string>
+ <string name="zen_mode_rule_name_warning" msgid="4773465816059587512">"Badago izen hori duen beste programazio bat"</string>
<string name="zen_mode_add_rule" msgid="7200004557856029928">"Gehitu beste batzuk"</string>
- <string name="zen_mode_add_event_rule" msgid="1398181272397489506">"Gehitu gertaera baten ordutegia"</string>
- <string name="zen_mode_add_time_rule" msgid="5999467757140524729">"Gehitu ordutegia"</string>
- <string name="zen_mode_delete_rule" msgid="2292933835997203801">"Ezabatu ordutegia"</string>
- <string name="zen_mode_choose_rule_type" msgid="8877138307319450306">"Aukeratu ordutegi mota"</string>
+ <string name="zen_mode_add_event_rule" msgid="1398181272397489506">"Gehitu gertaera baten programazioa"</string>
+ <string name="zen_mode_add_time_rule" msgid="5999467757140524729">"Gehitu programazioa"</string>
+ <string name="zen_mode_delete_rule" msgid="2292933835997203801">"Ezabatu programazioa"</string>
+ <string name="zen_mode_choose_rule_type" msgid="8877138307319450306">"Aukeratu programazio mota"</string>
<string name="zen_mode_delete_rule_confirmation" msgid="2646596466259025978">"\"<xliff:g id="RULE">%1$s</xliff:g>\" araua ezabatu nahi duzu?"</string>
<string name="zen_mode_delete_rule_button" msgid="611058106279881991">"Ezabatu"</string>
<string name="zen_mode_rule_type_unknown" msgid="2819480113355191421">"Ezezaguna"</string>
@@ -3467,10 +3469,10 @@
<string name="zen_mode_schedule_rule_days_none" msgid="6011716195119389956">"Bat ere ez"</string>
<string name="zen_mode_schedule_rule_days_all" msgid="8814173364016139675">"Egunero"</string>
<string name="zen_mode_schedule_alarm_title" msgid="2078194049274875023">"Alarmak amaiera-ordua deusezta dezake"</string>
- <string name="zen_mode_schedule_alarm_summary" msgid="5556997989911412070">"Alarmak jotzen duenean, ordutegia desaktibatu egiten da"</string>
+ <string name="zen_mode_schedule_alarm_summary" msgid="5556997989911412070">"Alarmak jotzen duenean, programazioa desaktibatu egiten da"</string>
<string name="zen_mode_custom_behavior_title" msgid="8908861697886331001">"Ez molestatzeko moduaren jokabidea"</string>
<string name="zen_mode_custom_behavior_summary_default" msgid="3509865340195397447">"Erabili ezarpen lehenetsiak"</string>
- <string name="zen_mode_custom_behavior_summary" msgid="7206909852887332604">"Sortu ezarpen pertsonalizatuak ordutegi honetarako"</string>
+ <string name="zen_mode_custom_behavior_summary" msgid="7206909852887332604">"Sortu ezarpen pertsonalizatuak programazio honetarako"</string>
<string name="zen_mode_custom_behavior_category_title" msgid="7451686525113262087">"<xliff:g id="SCHEDULE_NAME">%1$s</xliff:g> arauari dagokionez"</string>
<string name="summary_divider_text" msgid="4780683204694442666">", "</string>
<string name="summary_range_symbol_combination" msgid="6038631664844488406">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
@@ -3552,8 +3554,8 @@
<string name="restr_pin_enter_admin_pin" msgid="8577847751493521230">"Idatzi administratzailearen PIN kodea"</string>
<string name="switch_on_text" msgid="7100491749799298324">"Aktibatuta"</string>
<string name="switch_off_text" msgid="3539551289454353555">"Desaktibatuta"</string>
- <string name="screen_pinning_title" msgid="578020318289781102">"Pantaila ainguratzea"</string>
- <string name="screen_pinning_description" msgid="3814537379086412278">"Ezarpen hau aktibatzen baduzu, pantailak aingura ditzakezu, aukeratzen duzun ikuspegi hori egon dadin ikusgai harik eta aingura kentzen diozun arte.\n\nHorretarako:\n\n1. Aktibatu pantaila ainguratzeko eginbidea.\n\n2. Ireki Ikuspegi orokorra.\n\n3. Sakatu pantailaren goialdeko aplikazio-ikonoa, eta sakatu Ainguratu."</string>
+ <string name="screen_pinning_title" msgid="578020318289781102">"Pantaila ainguratzeko aukera"</string>
+ <string name="screen_pinning_description" msgid="3814537379086412278">"Ezarpen hau aktibatzen baduzu, pantailak aingura ditzakezu, aukeratzen duzun ikuspegi hori egon dadin ikusgai harik eta aingura kentzen diozun arte.\n\nHorretarako:\n\n1. Aktibatu pantaila ainguratzeko aukera.\n\n2. Ireki Ikuspegi orokorra.\n\n3. Sakatu pantailaren goialdeko aplikazio-ikonoa, eta sakatu Ainguratu."</string>
<string name="screen_pinning_unlock_pattern" msgid="1060334707088339444">"Eskatu desblokeatzeko eredua aingura kendu aurretik"</string>
<string name="screen_pinning_unlock_pin" msgid="1441705536015645023">"Eskatu PIN kodea aingura kendu aurretik"</string>
<string name="screen_pinning_unlock_password" msgid="1017776884000170841">"Eskatu pasahitza aingura kendu aurretik"</string>
@@ -3628,7 +3630,7 @@
<item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> baimen gehigarri</item>
</plurals>
<string name="runtime_permissions_summary_no_permissions_granted" msgid="3477934429220828771">"Ez du baimenik"</string>
- <string name="runtime_permissions_summary_no_permissions_requested" msgid="3901636077467389637">"Ez du baimenik eskatu"</string>
+ <string name="runtime_permissions_summary_no_permissions_requested" msgid="3901636077467389637">"Ez da baimenik eskatu"</string>
<string name="filter_all_apps" msgid="4042756539846043675">"Aplikazio guztiak"</string>
<string name="filter_enabled_apps" msgid="5888459261768538489">"Instalatutako aplikazioak"</string>
<string name="filter_instant_apps" msgid="8087483282854072366">"Zuzeneko aplikazioak"</string>
@@ -3709,19 +3711,19 @@
<string name="high_power_off" msgid="5906679734326490426">"Bateria optimizatu egiten da"</string>
<string name="high_power_system" msgid="739584574711292753">"Bateria-optimizazioa ez dago erabilgarri"</string>
<string name="high_power_desc" msgid="333756885680362741">"Ez aplikatu bateria-optimizazioa. Aukera horrekin, bizkorrago agortuko da bateria."</string>
- <string name="high_power_prompt_title" msgid="2805745781720454052">"Beti atzeko planoan abiarazteko baimena eman nahi diozu aplikazioari?"</string>
+ <string name="high_power_prompt_title" msgid="2805745781720454052">"Aplikazioa beti atzeko planoan exekutatzea nahi duzu?"</string>
<string name="high_power_prompt_body" msgid="8067395096053552289">"<xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioari atzeko planoan beti abiarazteko baimena emanez gero, baliteke bateriak gutxiago irautea. \n\nAukera hori aldatzeko, sakatu Ezarpenak > Aplikazioak eta jakinarazpenak."</string>
<string name="battery_summary" msgid="4345690800899981339">"Bateriaren <xliff:g id="PERCENTAGE">%1$s</xliff:g> erabili du bateria guztiz kargatu zenetik"</string>
<string name="battery_power_management" msgid="2853925857548647969">"Bateriaren kudeaketa"</string>
- <string name="no_battery_summary" msgid="4105932628367471314">"Ez du bateriarik erabili bateria guztiz kargatu zenetik"</string>
+ <string name="no_battery_summary" msgid="4105932628367471314">"Ez da bateriarik erabili bateria guztiz kargatu zenetik"</string>
<string name="app_notification_preferences" msgid="5154466638524523201">"Aplikazioaren ezarpenak"</string>
<string name="system_ui_settings" msgid="6751165163665775447">"Erakutsi sistemako erabiltzaile-interfazearen konfiguratzailea"</string>
<string name="additional_permissions" msgid="3142290772324571654">"Baimen gehigarriak"</string>
<string name="additional_permissions_more" msgid="714264060348056246">"Beste <xliff:g id="COUNT">%1$d</xliff:g>"</string>
<string name="share_remote_bugreport_dialog_title" msgid="1390719492733882678">"Akatsen txostena partekatu nahi duzu?"</string>
- <string name="share_remote_bugreport_dialog_message_finished" msgid="5133489230646384192">"IKT administratzaileak akatsen txostena eskatu du gailuko arazoa konpontzeko. Baliteke aplikazioak eta datuak partekatzea."</string>
- <string name="share_remote_bugreport_dialog_message" msgid="6680361103125933760">"IKT administratzaileak akatsen txostena eskatu du gailuko arazoa konpontzeko. Baliteke aplikazioak eta datuak partekatzea, eta agian motelago ibiliko da gailua aldi batez."</string>
- <string name="sharing_remote_bugreport_dialog_message" msgid="3814787466701526359">"IKT administratzailearekin partekatu dugu akatsen txostena. Xehetasun gehiago lortzeko, jarri harekin harremanetan."</string>
+ <string name="share_remote_bugreport_dialog_message_finished" msgid="5133489230646384192">"IKT saileko administratzaileak akatsen txostena eskatu du gailuko arazoa konpontzeko. Baliteke aplikazioak eta datuak partekatzea."</string>
+ <string name="share_remote_bugreport_dialog_message" msgid="6680361103125933760">"IKT saileko administratzaileak akatsen txostena eskatu du gailuko arazoa konpontzeko. Baliteke aplikazioak eta datuak partekatzea, eta agian motelago ibiliko da gailua aldi batez."</string>
+ <string name="sharing_remote_bugreport_dialog_message" msgid="3814787466701526359">"IKT saileko administratzailearekin partekatu dugu akatsen txostena. Xehetasun gehiago lortzeko, jarri harekin harremanetan."</string>
<string name="share_remote_bugreport_action" msgid="8600797271670537888">"Partekatu"</string>
<string name="decline_remote_bugreport_action" msgid="706319275774199033">"Baztertu"</string>
<string name="usb_use_charging_only" msgid="2344625733377110164">"Ez transferitu daturik"</string>
@@ -3798,11 +3800,11 @@
<string name="work_profile_usage_access_warning" msgid="403208064382097510">"Administratzaileari aplikazio hau erabiltzeko gaitasuna kendu arren, administratzaileak aplikazioen datuen erabileraren jarraipena egiten jarraitu ahal izango du zure laneko profilean"</string>
<string name="accessibility_lock_screen_progress" msgid="8242917828598820049">"<xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g> karaktere erabili dira"</string>
<string name="draw_overlay" msgid="2878665072530660668">"Bistaratu aplikazioen gainean"</string>
- <string name="system_alert_window_settings" msgid="3024330223417646567">"Beste aplikazioen gainean bistaratzea"</string>
+ <string name="system_alert_window_settings" msgid="3024330223417646567">"Bistaratu beste aplikazioen gainean"</string>
<string name="system_alert_window_apps_title" msgid="9188448296493699566">"Aplikazioak"</string>
- <string name="system_alert_window_access_title" msgid="5187343732185369675">"Beste aplikazioen gainean bistaratzea"</string>
- <string name="permit_draw_overlay" msgid="9039092257052422344">"Baimendu beste aplikazioen gainean bistaratzea"</string>
- <string name="allow_overlay_description" msgid="6669524816705082807">"Baimendu aplikazioari erabiltzen ari zaren aplikazioen gainean agertzea. Eginbide honek abian diren aplikazioen erabilera oztopa dezake, edo haien itxura edo portaera aldatu."</string>
+ <string name="system_alert_window_access_title" msgid="5187343732185369675">"Bistaratu beste aplikazioen gainean"</string>
+ <string name="permit_draw_overlay" msgid="9039092257052422344">"Eman beste aplik. gainean bistaratzeko baimena"</string>
+ <string name="allow_overlay_description" msgid="6669524816705082807">"Eman aplikazioari erabiltzen ari zaren aplikazioen gainean agertzeko baimena. Eginbide honek abian diren aplikazioen erabilera oztopa dezake, edo haien itxura edo portaera aldatu."</string>
<string name="keywords_vr_listener" msgid="5312633527788917750">"eb errealitate birtuala hautemailea estereoa laguntzailea laguntza zerbitzua"</string>
<string name="keywords_system_alert_window" msgid="3936658600272194599">"sistema alerta leiho koadro bistaratu beste aplikazio gainean"</string>
<string name="overlay_settings" msgid="3325154759946433666">"Bistaratu aplikazioen gainean"</string>
@@ -3811,15 +3813,15 @@
<string name="app_permission_summary_allowed" msgid="6458476982015518778">"Baimena dauka"</string>
<string name="app_permission_summary_not_allowed" msgid="1171642541675462584">"Ez dauka baimenik"</string>
<string name="keywords_install_other_apps" msgid="5383559540695847668">"instalatu aplikazio iturburu ezezagun"</string>
- <string name="write_settings" msgid="9009040811145552108">"Sistemaren ezarpenak aldatzea"</string>
+ <string name="write_settings" msgid="9009040811145552108">"Aldatu sistemaren ezarpenak"</string>
<string name="keywords_write_settings" msgid="3450405263390246293">"idatzi aldatu sistema ezarpenak"</string>
<string name="write_settings_summary" msgid="4650251358459404247">"<xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g> aplikaziok alda ditzakete sistemaren ezarpenak"</string>
<string name="financial_apps_sms_access_title" msgid="3422655018008259655">"Finantza-aplikazioetarako SMS bidezko sarbidea"</string>
<string name="filter_install_sources_apps" msgid="4519839764020866701">"Ezin da instalatu beste aplikaziorik"</string>
<string name="filter_write_settings_apps" msgid="6864144615530081121">"Sistemaren ezarpenak alda ditzaketenak"</string>
<string name="write_settings_title" msgid="5852614614193830632">"Sistemaren ezarpenak alda ditzaketenak"</string>
- <string name="write_system_settings" msgid="20450765210832463">"Sistemaren ezarpenak aldatzea"</string>
- <string name="permit_write_settings" msgid="4198491281216818756">"Baimendu sistemaren ezarpenak aldatzea"</string>
+ <string name="write_system_settings" msgid="20450765210832463">"Aldatu sistemaren ezarpenak"</string>
+ <string name="permit_write_settings" msgid="4198491281216818756">"Eman sistemaren ezarpenak aldatzeko baimena"</string>
<string name="write_settings_description" msgid="2536706293042882500">"Baimen honekin, sistemaren ezarpenak alda ditzakete aplikazioek."</string>
<string name="write_settings_on" msgid="7328986337962635118">"Bai"</string>
<string name="write_settings_off" msgid="5708257434958406202">"Ez"</string>
@@ -3876,7 +3878,7 @@
<string name="disabled_by_policy_title_camera" msgid="3741138901926111197">"Ez da onartzen kamera erabiltzea"</string>
<string name="disabled_by_policy_title_screen_capture" msgid="1856835333536274665">"Ez da onartzen pantaila-argazkiak ateratzea"</string>
<string name="disabled_by_policy_title_suspend_packages" msgid="4254714213391802322">"Ezin da ireki aplikazioa"</string>
- <string name="default_admin_support_msg" msgid="5789424433689798637">"Galderarik baduzu, jarri IKT administratzailearekin harremanetan"</string>
+ <string name="default_admin_support_msg" msgid="5789424433689798637">"Galderarik baduzu, jarri IKT saileko administratzailearekin harremanetan"</string>
<string name="admin_support_more_info" msgid="8737842638087863477">"Xehetasun gehiago"</string>
<string name="admin_profile_owner_message" msgid="3199544166281052845">"Administratzaileak gainbegiratu eta kudeatu egin ditzake laneko profilarekin erlazionatutako aplikazioak eta datuak, besteak beste, ezarpenak, baimenak, enpresaren sarbide-baimenak, sareko jarduerak eta gailuaren kokapen-informazioa."</string>
<string name="admin_profile_owner_user_message" msgid="2991249382056855531">"Administratzaileak gainbegiratu eta kudeatu egin ditzake erabiltzailearekin erlazionatutako aplikazioak eta datuak, besteak beste, ezarpenak, baimenak, enpresaren sarbide-baimenak, sareko jarduerak eta gailuaren kokapen-informazioa."</string>
@@ -3885,7 +3887,7 @@
<string name="condition_turn_on" msgid="1699088245481841159">"Aktibatu"</string>
<string name="condition_expand_show" msgid="4118818022763913777">"Erakutsi"</string>
<string name="condition_expand_hide" msgid="1112721783024332643">"Ezkutatu"</string>
- <string name="condition_hotspot_title" msgid="4143299802283098506">"Sare publikoa aktiboa dago"</string>
+ <string name="condition_hotspot_title" msgid="4143299802283098506">"Wifi-gunea aktibo dago"</string>
<string name="condition_airplane_title" msgid="8484582712516148433">"Hegaldi modua aktibatuta"</string>
<string name="condition_airplane_summary" msgid="3021193218494740742">"Sareak ez daude erabilgarri"</string>
<string name="condition_zen_title" msgid="2128184708916052585">"Aktibatuta dago ez molestatzeko modua"</string>
@@ -3904,7 +3906,7 @@
<string name="condition_device_muted_summary" msgid="3101055117680109021">"Dei eta jakinarazpenetarako"</string>
<string name="condition_device_vibrate_title" msgid="5712659354868872338">"Dardara soilik"</string>
<string name="condition_device_vibrate_summary" msgid="9073880731894828604">"Dei eta jakinarazpenetarako"</string>
- <string name="night_display_suggestion_title" msgid="4222839610992282188">"Ezarri gaueko argiaren ordutegia"</string>
+ <string name="night_display_suggestion_title" msgid="4222839610992282188">"Ezarri gaueko argiaren programazioa"</string>
<string name="night_display_suggestion_summary" msgid="1754361016383576916">"Tindatu automatikoki pantaila gauez"</string>
<string name="condition_night_display_title" msgid="9171491784857160135">"Gaueko argia aktibatuta"</string>
<string name="condition_night_display_summary" msgid="7885776986937527558">"Pantaila horixkaz tindatuta"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Gailua blokeatuta badago, eragotzi jakinarazpenetan erantzunak edo beste edozer idaztea"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Zuzentzaile lehenetsia"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Aukeratu zuzentzailea"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Erabili ortografia-zuzentzailea"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Erabili ortografia-zuzentzailea"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Hautatu gabe"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(bat ere ez)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4043,7 +4045,7 @@
<string name="notification_log_details_ranking_none" msgid="3687243721168608404">"Sailkapen-objektuak ez du gako hau."</string>
<string name="theme_customization_category" msgid="4043457940936660368">"Gaiak"</string>
<string name="theme_customization_accent_color_title" msgid="3949108608589133216">"Nabarmentzeko kolorea"</string>
- <string name="theme_customization_font_title" msgid="309728559821356597">"Goiburuaren eta gorputzaren letra-tipoa"</string>
+ <string name="theme_customization_font_title" msgid="309728559821356597">"Goiburuaren eta gorputzaren letra"</string>
<string name="theme_customization_icon_shape_title" msgid="4603248388639328322">"Ikonoaren forma"</string>
<string name="theme_customization_device_default" msgid="7188874258500934312">"Gailuaren balio lehenetsiak"</string>
<string name="display_cutout_emulation" msgid="288975763151891685">"Pantailaren mozketa"</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Memorian tokia egiteko, babeskopiak dituzten argazkiak eta bideoak gailutik kentzen ditu memoria-kudeatzaileak."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Kendu argazkiak eta bideoak"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Memoria-kudeatzailea"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Erabili Memoria-kudeatzailea"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Erabili biltegi-kudeatzailea"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatikoa"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Eskuzko ezarpenak"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Egin tokia"</string>
@@ -4162,7 +4164,7 @@
<string name="account_sync_title" msgid="1570164819114297154">"Kontuaren sinkronizazioa"</string>
<string name="account_sync_summary_some_on" msgid="1934556869158274053">"<xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g> elementuk aktibatuta daukate sinkronizazioa"</string>
<string name="account_sync_summary_all_on" msgid="3634161204232431700">"Elementu guztiek aktibatuta daukate sinkronizazioa"</string>
- <string name="account_sync_summary_all_off" msgid="1971584632343645602">"Elementu guztiek desaktibatuta dute sinkronizazioa"</string>
+ <string name="account_sync_summary_all_off" msgid="1971584632343645602">"Elementu guztiek desaktibatuta daukate sinkronizazioa"</string>
<string name="enterprise_privacy_settings" msgid="2777101678653072889">"Gailu kudeatuaren informazioa"</string>
<string name="enterprise_privacy_settings_summary_generic" msgid="5557859169062703683">"Erakundeak kudeatzen dituen aldaketak eta ezarpenak"</string>
<string name="enterprise_privacy_settings_summary_with_name" msgid="4884479123751308407">"<xliff:g id="ORGANIZATION_NAME">%s</xliff:g> erakundeak kudeatzen dituen aldaketak eta ezarpenak"</string>
@@ -4307,7 +4309,7 @@
<string name="my_device_info_device_name_preference_title" msgid="7384446683248009296">"Gailuaren izena"</string>
<string name="change_wifi_state_title" msgid="5140754955787584174">"Wifi-konexioa kontrolatzeko aukera"</string>
<string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"Baimendu aplikazioari Wi-Fi konexioa kontrolatzea"</string>
- <string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Baimendu aplikazio honi Wi-Fi konexioa aktibatzea edo desaktibatzea, Wi-Fi sareak bilatzea eta haietara konektatzea, sareak gehitzea edo kentzea, edota sare publiko lokal bat sortzea"</string>
+ <string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Baimendu aplikazio honi Wi-Fi konexioa aktibatzea edo desaktibatzea, Wi-Fi sareak bilatzea eta haietara konektatzea, sareak gehitzea edo kentzea, edota wifi-gune lokal bat sortzea"</string>
<string name="media_output_title" msgid="8710632337456601848">"Erreproduzitu multimedia-edukia hemen:"</string>
<string name="media_output_default_summary" msgid="3159237976830415584">"Gailu hau"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"Telefonoa"</string>
@@ -4331,7 +4333,7 @@
<string name="prevent_ringing_option_mute_summary" msgid="3509459199090688328">"Aktibatuta (audioa desaktibatuta)"</string>
<string name="prevent_ringing_option_none_summary" msgid="5152618221093037451">"Desaktibatuta"</string>
<string name="pref_title_network_details" msgid="3971074015034595956">"Sarearen xehetasunak"</string>
- <string name="about_phone_device_name_warning" msgid="9088572775969880106">"Mugikorreko aplikazioek gailuaren izena ikus dezakete. Halaber, jendeak ere ikus dezake Bluetooth gailuetara konektatzean edo Wi-Fi sare publiko bat konfiguratzean."</string>
+ <string name="about_phone_device_name_warning" msgid="9088572775969880106">"Mugikorreko aplikazioek gailuaren izena ikus dezakete. Halaber, jendeak ere ikus dezake Bluetooth bidezko gailuetara konektatzean edo wifi-gune bat konfiguratzean."</string>
<string name="devices_title" msgid="4768432575951993648">"Gailuak"</string>
<string name="homepage_all_settings" msgid="3201220879559136116">"Ezarpen guztiak"</string>
<string name="homepage_personal_settings" msgid="7472638597249114564">"Iradokizunak"</string>
@@ -4456,7 +4458,7 @@
<item quantity="other"><xliff:g id="NUMBER_DEVICE_COUNT_1">%1$d</xliff:g> gailu daude konektatuta</item>
<item quantity="one"><xliff:g id="NUMBER_DEVICE_COUNT_0">%1$d</xliff:g> gailu dago konektatuta</item>
</plurals>
- <string name="no_bluetooth_devices" msgid="4338224958734305244">"Ez dago Bluetooth gailurik"</string>
+ <string name="no_bluetooth_devices" msgid="4338224958734305244">"Ez dago Bluetooth bidezko gailurik"</string>
<string name="bluetooth_left_name" msgid="4393660998014637355">"Ezkerrekoa"</string>
<string name="bluetooth_right_name" msgid="8356091262762973801">"Eskuinekoa"</string>
<string name="bluetooth_middle_name" msgid="1489185200445352103">"Zorroa"</string>
@@ -4510,7 +4512,7 @@
<string name="forget_passpoint_dialog_message" msgid="3337626966248310367">"Denbora edo daturik geldituz gero, baliteke haiek galtzea. Kendu aurretik, galdetu hornitzaileari."</string>
<string name="keywords_content_capture" msgid="5401877823529928976">"eduki-bilketa, iradokizun dinamikoak"</string>
<string name="content_capture" msgid="1709538093513983279">"Iradokizun dinamikoak"</string>
- <string name="content_capture_summary" msgid="2675659095218714681">"Baimendu Android-i pantailan ikusgai dagoen edo bideo- edo audio-edukian entzuten den informazioa gordetzea. Android-ek iradokizun lagungarriak egiten ditu gailuaren jardueretan oinarrituta."</string>
+ <string name="content_capture_summary" msgid="2675659095218714681">"Baimendu Android-i pantailan ikusgai dagoen edo bideo- edo audio-edukian entzuten den informazioa gordetzea. Android-ek iradokizun lagungarriak egiten ditu gailuko jardueretan oinarrituta."</string>
<string name="capture_system_heap_dump_title" msgid="7417508823603305421">"Sortu memoria-iraulketaren txostena"</string>
<string name="capturing_system_heap_dump_message" msgid="5108339625760845950">"Memoria-iraulketaren txostena sortzen"</string>
<string name="error_capturing_system_heap_dump_message" msgid="5431592130805893098">"Ezin izan da sortu memoria-iraulketaren txostena"</string>
diff --git a/tests/CarDeveloperOptions/res/values-fa/arrays.xml b/tests/CarDeveloperOptions/res/values-fa/arrays.xml
index 4ba291d..ed6cce4 100644
--- a/tests/CarDeveloperOptions/res/values-fa/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-fa/arrays.xml
@@ -111,7 +111,7 @@
<item msgid="8247986727324120082">"۲ دقیقه"</item>
<item msgid="2759776603549270587">"۵ دقیقه"</item>
<item msgid="167772676068860015">"۱ ساعت"</item>
- <item msgid="5985477119043628504">"بدون مهلت زمانی"</item>
+ <item msgid="5985477119043628504">"بدون درنگ"</item>
</string-array>
<string-array name="bluetooth_max_connected_audio_devices">
<item msgid="3800257971619063588">"استفاده از پیشفرض سیستم: <xliff:g id="DEFAULT_BLUETOOTH_MAX_CONNECTED_AUDIO_DEVICES">%1$d</xliff:g>"</item>
@@ -265,7 +265,7 @@
<item msgid="1496205959751719491">"کنترل مکان پرقدرت"</item>
<item msgid="3776296279910987380">"دریافت آمار استفاده"</item>
<item msgid="8827100324471975602">"صدادار/بیصدا کردن میکروفن"</item>
- <item msgid="6880736730520126864">"نمایش تست"</item>
+ <item msgid="6880736730520126864">"نمایش پنجره خبری"</item>
<item msgid="4933375960222609935">"فرستادن رسانه"</item>
<item msgid="8357907018938895462">"فعال کردن VPN"</item>
<item msgid="8143812849911310973">"نوشتن تصویرزمینه"</item>
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"اجرا در پسزمینه"</item>
<item msgid="6423861043647911030">"میزان دسترسپذیری"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"مکان"</item>
+ <item msgid="6656077694190491067">"مکان"</item>
+ <item msgid="8790228218278477369">"مکان"</item>
+ <item msgid="7836406246005211990">"لرزش"</item>
+ <item msgid="3951439024549922598">"خواندن مخاطبین"</item>
+ <item msgid="8802152411647068">"تغییر مخاطبین"</item>
+ <item msgid="229544934599698735">"خواندن گزارش تماس"</item>
+ <item msgid="7396102294405899613">"تغییر گزارش تماس"</item>
+ <item msgid="3597797992398484655">"خواندن تقویم"</item>
+ <item msgid="2705975774250907343">"تغییر تقویم"</item>
+ <item msgid="4668747371441932697">"مکان"</item>
+ <item msgid="1487578921720243646">"اعلان پست"</item>
+ <item msgid="4636080349724146638">"موقعیت مکانی"</item>
+ <item msgid="673510900286463926">"تماس تلفنی"</item>
+ <item msgid="542083422784609790">"خواندن پیامک/فراپیام"</item>
+ <item msgid="1033780373029588436">"نوشتن پیامک/فراپیام"</item>
+ <item msgid="5647111115517787488">"دریافت پیامک/فراپیام"</item>
+ <item msgid="8591105601108455893">"دریافت پیامک/فراپیام"</item>
+ <item msgid="7730995008517841903">"دریافت پیامک/فراپیام"</item>
+ <item msgid="2613033109026626086">"دریافت پیامک/فراپیام"</item>
+ <item msgid="3037159047591081136">"ارسال پیامک/فراپیام"</item>
+ <item msgid="4726682243833913568">"خواندن پیامک/فراپیام"</item>
+ <item msgid="6555678522277865572">"نوشتن پیامک/فراپیام"</item>
+ <item msgid="6981734935578130884">"تغییر تنظیمات"</item>
+ <item msgid="8705854389991425629">"در بالا طراحی کنید"</item>
+ <item msgid="5861356020344153651">"اعلانهای دسترسی"</item>
+ <item msgid="78432174621628659">"دوربین"</item>
+ <item msgid="3986116419882154794">"ضبط صدا"</item>
+ <item msgid="4516840825756409490">"پخش صدا"</item>
+ <item msgid="6811712502798183957">"خواندن بریدهدان"</item>
+ <item msgid="2780369012602289114">"تغییر بریدهدان"</item>
+ <item msgid="2331359440170850868">"دکمههای رسانه"</item>
+ <item msgid="6133599737122751231">"فوکوس صدا"</item>
+ <item msgid="6844485713404805301">"میزان صدای اصلی"</item>
+ <item msgid="1600379420669104929">"میزان صدای مکالمه"</item>
+ <item msgid="6296768210470214866">"میزان صدای زنگ"</item>
+ <item msgid="510690696071629241">"میزان صدای رسانه"</item>
+ <item msgid="406861638631430109">"میزان صدای زنگ"</item>
+ <item msgid="4715864795872233884">"میزان صدای اعلان"</item>
+ <item msgid="2311478519251301183">"میزان صدای بلوتوث"</item>
+ <item msgid="5133991377896747027">"بیدار باش"</item>
+ <item msgid="2464189519136248621">"مکان"</item>
+ <item msgid="2062677934050803037">"موقعیت مکانی"</item>
+ <item msgid="1735171933192715957">"دریافت آمار استفاده"</item>
+ <item msgid="1014093788778383554">"صدادار/بیصدا کردن میکروفن"</item>
+ <item msgid="4199297950608622850">"نمایش تست"</item>
+ <item msgid="2527962435313398821">"فرستادن رسانه"</item>
+ <item msgid="5117506254221861929">"فعال کردن VPN"</item>
+ <item msgid="8291198322681891160">"نوشتن کاغذدیواری"</item>
+ <item msgid="7106921284621230961">"ساختار دستیار"</item>
+ <item msgid="4496533640894624799">"عکس صفحهنمایش دستیار"</item>
+ <item msgid="2598847264853993611">"خواندن وضعیت تلفن"</item>
+ <item msgid="9215610846802973353">"افزودن پست صوتی"</item>
+ <item msgid="9186411956086478261">"استفاده از SIP"</item>
+ <item msgid="6884763100104539558">"پردازش تماس خروجی"</item>
+ <item msgid="125513972170580692">"اثر انگشت"</item>
+ <item msgid="2556071024281275619">"حسگرهای بدن"</item>
+ <item msgid="617168514928339387">"خواندن پخشهای سلولی"</item>
+ <item msgid="7134693570516523585">"مکان کاذب"</item>
+ <item msgid="7224489175375229399">"خواندن حافظه"</item>
+ <item msgid="8472735063903258202">"نوشتن در حافظه"</item>
+ <item msgid="4069276819909595110">"روشن کردن صفحه"</item>
+ <item msgid="1228338896751121025">"دریافت حسابها"</item>
+ <item msgid="3181581793459233672">"اجرا در پسزمینه"</item>
+ <item msgid="2340936043025374076">"میزان دسترسپذیری"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"کوتاه"</item>
<item msgid="4816511817309094890">"متوسط"</item>
@@ -336,9 +402,9 @@
<item msgid="6566768880689730097">"PPTP VPN"</item>
<item msgid="1349760781118368659">"L2TP/IPSec VPN با کلیدهای از قبل به اشتراک گذاشته شده"</item>
<item msgid="6128519070545038358">"L2TP/IPSec VPN با گواهی"</item>
- <item msgid="312397853907741968">"IPSec VPN با کلیدهای از قبل به اشتراک گذاشته شده و احراز هویت Xauth"</item>
- <item msgid="3319427315593649917">"IPSec VPN با گواهی و احراز هویت Xauth"</item>
- <item msgid="8258927774145391041">"IPSec VPN دارای گواهی و احراز هویت دوگانه"</item>
+ <item msgid="312397853907741968">"IPSec VPN با کلیدهای از قبل به اشتراک گذاشته شده و اصالتسنجی Xauth"</item>
+ <item msgid="3319427315593649917">"IPSec VPN با گواهی و اصالتسنجی Xauth"</item>
+ <item msgid="8258927774145391041">"IPSec VPN دارای گواهی و اصالتسنجی دوگانه"</item>
</string-array>
<string-array name="vpn_proxy_settings">
<item msgid="2958623927055120839">"هیچکدام"</item>
@@ -349,7 +415,7 @@
<item msgid="8754480102834556765">"آماده سازی..."</item>
<item msgid="3351334355574270250">"در حال اتصال..."</item>
<item msgid="8303882153995748352">"متصل"</item>
- <item msgid="9135049670787351881">"وقفه زمانی"</item>
+ <item msgid="9135049670787351881">"درنگ"</item>
<item msgid="2124868417182583926">"ناموفق"</item>
</string-array>
<string-array name="security_settings_premium_sms_values">
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"همیشه غیرمجاز"</item>
<item msgid="8184570120217958741">"همیشه مجاز است"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"عادی"</item>
+ <item msgid="5101233285497327432">"متوسط"</item>
+ <item msgid="1555861583162930714">"کم"</item>
+ <item msgid="1719683776264798117">"خیلی کم"</item>
+ <item msgid="1567326459340152525">"؟"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"عادی"</item>
+ <item msgid="6107138933849816768">"متوسط"</item>
+ <item msgid="182695359839047859">"کم"</item>
+ <item msgid="8577246509202964244">"بحرانی"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"دائمی"</item>
<item msgid="167418068739176448">"فعالیت برتر"</item>
diff --git a/tests/CarDeveloperOptions/res/values-fa/strings.xml b/tests/CarDeveloperOptions/res/values-fa/strings.xml
index 9ee2162..86276ae 100644
--- a/tests/CarDeveloperOptions/res/values-fa/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-fa/strings.xml
@@ -53,7 +53,7 @@
<string name="radio_info_ims_reg_status_not_registered" msgid="1286050699734226077">"ثبتنشده"</string>
<string name="radio_info_ims_feature_status_available" msgid="2040629393134756058">"در دسترس"</string>
<string name="radio_info_ims_feature_status_unavailable" msgid="3348223769202693596">"در دسترس نیست"</string>
- <string name="radio_info_ims_reg_status" msgid="4771711884059371514">"ثبت IMS: <xliff:g id="STATUS">%1$s</xliff:g>\nصدا ازطریق LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nصدا ازطریق WiFi: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nتماس ویدیویی: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nواسط UT: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
+ <string name="radio_info_ims_reg_status" msgid="4771711884059371514">"ثبت IMS: <xliff:g id="STATUS">%1$s</xliff:g>\nصدا ازطریق LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nصدا ازطریق WiFi: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nتماس تصویری: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nواسط UT: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
<string name="radioInfo_service_in" msgid="1297020186765943857">"سرویس دارد"</string>
<string name="radioInfo_service_out" msgid="8460363463722476510">"خارج از سرویس"</string>
<string name="radioInfo_service_emergency" msgid="7674989004735662599">"فقط تماسهای اضطراری"</string>
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"نوشتار روی صفحهنمایش را بزرگتر یا کوچکتر کنید."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"کوچکتر کردن"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"بزرگتر کردن"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"برای این آقا آبجو و کیوی سرو کنید."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"نوشتار نمونه"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"جادوگر شهر اوز"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"فصل ۱۱: شهر زمردی شگفتانگیز اوز"</string>
@@ -354,7 +353,7 @@
<string name="show_owner_info_on_lockscreen_label" msgid="4510756693837171575">"نمایش اطلاعات مالک در صفحه قفل"</string>
<string name="owner_info_settings_title" msgid="2537966178998339896">"پیام صفحه قفل"</string>
<string name="security_enable_widgets_title" msgid="1701510007926738088">"فعال کردن ابزارکها"</string>
- <string name="security_enable_widgets_disabled_summary" msgid="4408176087132339331">"غیرفعالشده توسط سرپرست"</string>
+ <string name="security_enable_widgets_disabled_summary" msgid="4408176087132339331">"توسط سرپرست غیرفعال شده"</string>
<string name="lockdown_settings_title" msgid="4534779922580115990">"نمایش گزینه «قفل همه»"</string>
<string name="lockdown_settings_summary" msgid="7270756909878256174">"نمایش گزینه دکمه روشن/خاموش که Smart Lock، باز کردن قفل با اثرانگشت و اعلانهای در صفحه قفل را خاموش میکند"</string>
<string name="trust_agents_extend_unlock_title" msgid="3582017561316089951">"نمایندههای معتمد فقط تمدید حالت باز"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"اطلاعات نمایه"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"حسابها"</string>
<string name="location_settings_title" msgid="2707201457572301030">"مکان"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"استفاده از مکان"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"استفاده از مکان"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"خاموش"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">روشن - <xliff:g id="COUNT_1">%1$d</xliff:g> برنامه میتوانند به مکان دسترسی داشته باشند</item>
@@ -384,24 +383,24 @@
<string name="encryption_and_credential_settings_summary" product="tablet" msgid="8170667308598998791">"دستگاه رمزگذاری شد"</string>
<string name="decryption_settings_summary" product="tablet" msgid="7524119945312453569">"دستگاه رمزگذاری نشده است"</string>
<string name="lockscreen_settings_title" msgid="1221505938891948413">"نمایش صفحه قفل"</string>
- <string name="lockscreen_settings_what_to_show_category" msgid="3133378945821488654">"آنچه باید نمایش داده شود"</string>
+ <string name="lockscreen_settings_what_to_show_category" msgid="3133378945821488654">"چه چیزی نشان داده شود"</string>
<string name="security_settings_summary" msgid="5210109100643223686">"تنظیم مکان من، قفل صفحه، قفل سیم کارت، قفل حافظه اطلاعات کاربری"</string>
<string name="cdma_security_settings_summary" msgid="1783066617800041869">"تنظیم مکان من، بازگشایی قفل صفحه، قفل حافظه اطلاعات کاربری"</string>
- <string name="security_passwords_title" msgid="6853942836045862315">"حریم خصوصی"</string>
- <string name="disabled_by_administrator_summary" msgid="6099821045360491127">"غیرفعالشده توسط سرپرست"</string>
+ <string name="security_passwords_title" msgid="6853942836045862315">"حریمخصوصی"</string>
+ <string name="disabled_by_administrator_summary" msgid="6099821045360491127">"توسط سرپرست غیرفعال شده"</string>
<string name="security_status_title" msgid="1261960357751754428">"وضعیت امنیتی"</string>
<string name="security_dashboard_summary_face" msgid="2536136110153593745">"قفل صفحه، بازگشایی با چهره"</string>
<string name="security_dashboard_summary" msgid="4048877125766167227">"قفل صفحه، اثرانگشت"</string>
<string name="security_dashboard_summary_no_fingerprint" msgid="8861903321053490658">"قفل صفحه"</string>
<string name="security_settings_face_preference_summary" msgid="4437701024542221434">"چهره افزوده شد"</string>
<string name="security_settings_face_preference_summary_none" msgid="8427755590493904386">"برای تنظیم تشخیص چهره ضربه بزنید"</string>
- <string name="security_settings_face_preference_title" msgid="2630071872604654381">"احراز هویت با چهره"</string>
+ <string name="security_settings_face_preference_title" msgid="2630071872604654381">"اصالتسنجی با چهره"</string>
<string name="security_settings_face_enroll_introduction_accessibility" msgid="1563255314851533140">"استفاده از تنظیمات دسترسپذیری"</string>
<string name="security_settings_face_enroll_introduction_accessibility_diversity" msgid="1130222333285509856"></string>
<string name="security_settings_face_enroll_introduction_accessibility_vision" msgid="356568621735811168"></string>
<string name="security_settings_face_enroll_introduction_cancel" msgid="4190924649721437238">"لغو"</string>
<string name="security_settings_face_enroll_introduction_title" msgid="6073249653318265486">"با چهرهتان قفل را باز کنید"</string>
- <string name="security_settings_face_enroll_introduction_title_unlock_disabled" msgid="9223270521083202896">"از چهرهتان برای احراز هویت استفاده کنید"</string>
+ <string name="security_settings_face_enroll_introduction_title_unlock_disabled" msgid="9223270521083202896">"از چهرهتان برای اصالتسنجی استفاده کنید"</string>
<string name="security_settings_face_enroll_introduction_message" msgid="484806903869220184">"برای باز کردن قفل تلفنتان، مجاز کردن خریدها یا ورود به سیستم برنامهها، از چهرهتان استفاده کنید."</string>
<string name="security_settings_face_enroll_introduction_message_unlock_disabled" msgid="2850101281254663082">"از چهرهتان برای باز کردن قفل تلفن یا تأیید خریدها استفاده کنید.\n\nتوجه: نمیتوانید از چهرهتان برای باز کردن قفل این دستگاه استفاده کنید. برای اطلاعات بیشتر، با سرپرست سیستم سازمانتان تماس بگیرید."</string>
<string name="security_settings_face_enroll_introduction_message_setup" msgid="4533297059466270074">"برای باز کردن قفل تلفنتان، مجاز کردن خریدها یا ورود به سیستم برنامهها، از چهرهتان استفاده کنید"</string>
@@ -413,7 +412,7 @@
<string name="face_intro_error_unknown" msgid="3241592604198351134">"چهره بیشتری نمیتوان اضافه کرد"</string>
<string name="security_settings_face_enroll_error_dialog_title" msgid="3933492758701563051">"ثبت انجام نشد"</string>
<string name="security_settings_face_enroll_dialog_ok" msgid="1078348922734845090">"تأیید"</string>
- <string name="security_settings_face_enroll_error_timeout_dialog_message" msgid="4917894418448325405">"مهلت زمانی ثبت چهره به پایان رسید. دوباره امتحان کنید."</string>
+ <string name="security_settings_face_enroll_error_timeout_dialog_message" msgid="4917894418448325405">"درنگ ثبت چهره به پایان رسید. دوباره امتحان کنید."</string>
<string name="security_settings_face_enroll_error_generic_dialog_message" msgid="5160473187142616862">"ثبت چهره کار نکرد."</string>
<string name="security_settings_face_enroll_finish_title" msgid="6800717857394410769">"همه چیز تنظیم شد. خوب به نظر میرسد."</string>
<string name="security_settings_face_enroll_done" msgid="5409739233373490971">"تمام"</string>
@@ -421,9 +420,9 @@
<string name="security_settings_face_settings_use_face_unlock_phone" msgid="318274519126401671">"باز کردن قفل دستگاه"</string>
<string name="security_settings_face_settings_use_face_for_apps" msgid="5479369083370664351">"ورودبهسیستم برنامه و پرداختها"</string>
<string name="security_settings_face_settings_require_attention" msgid="2755140150841557225">"برای باز کردن قفل، چشمهایتان را باز کنید"</string>
- <string name="security_settings_face_settings_require_attention_details" msgid="2557060433599942587">"هنگام استفاده از احراز هویت چهره، چشمهایتان باید باز باشد"</string>
+ <string name="security_settings_face_settings_require_attention_details" msgid="2557060433599942587">"هنگام استفاده از اصالتسنجی چهره، چشمهایتان باید باز باشد"</string>
<string name="security_settings_face_settings_require_confirmation" msgid="7312024271060416438">"همیشه به تأیید نیاز است"</string>
- <string name="security_settings_face_settings_require_confirmation_details" msgid="8740564864091803429">"هنگام احراز هویت در برنامهها، همیشه به تأیید نیاز است"</string>
+ <string name="security_settings_face_settings_require_confirmation_details" msgid="8740564864091803429">"هنگام اصالتسنجی در برنامهها، همیشه به تأیید نیاز است"</string>
<string name="security_settings_face_settings_remove_face_data" msgid="2821359954483136239">"حذف دادههای چهره"</string>
<string name="security_settings_face_settings_footer" msgid="4627175759990550715">"میتوانید از چهرهتان برای باز کردن قفل دستگاه و دسترسی به برنامهها استفاده کنید. "<annotation id="url">"بیشتر بدانید"</annotation></string>
<string name="security_settings_face_settings_remove_dialog_title" msgid="5675319895815271094">"دادههای چهره حذف شود؟"</string>
@@ -478,9 +477,9 @@
<string name="fingerprint_lock_screen_setup_skip_dialog_text" product="tablet" msgid="1384438077720821127">"از رایانه لوحیتان با گزینه قفل صفحه محافظت کنید تا درصورت گم شدن یا به سرقت رفتن هیچ فردی نتواند از آن استفاده کند. همچنین به گزینه قفل صفحه نیاز دارید تا اثرانگشت را راهاندازی کنید. روی «لغو» ضربه بزنید و سپس پین تنظیم کنید یا گزینه قفل صفحه دیگری را انتخاب کنید."</string>
<string name="fingerprint_lock_screen_setup_skip_dialog_text" product="device" msgid="7207112623501771824">"از دستگاهتان با گزینه قفل صفحه محافظت کنید تا درصورت گم شدن یا به سرقت رفتن هیچ فردی نتواند از آن استفاده کند. همچنین به گزینه قفل صفحه نیاز دارید تا اثرانگشت را راهاندازی کنید. روی «لغو» ضربه بزنید و سپس پین تنظیم کنید یا گزینه قفل صفحه دیگری را انتخاب کنید."</string>
<string name="fingerprint_lock_screen_setup_skip_dialog_text" product="default" msgid="7623975730623531606">"از تلفنتان با گزینه قفل صفحه محافظت کنید تا درصورت گم شدن یا به سرقت رفتن هیچ فردی نتواند از آن استفاده کند. همچنین به گزینه قفل صفحه نیاز دارید تا اثرانگشت را راهاندازی کنید. روی «لغو» ضربه بزنید و سپس پین تنظیم کنید یا گزینه قفل صفحه دیگری را انتخاب کنید."</string>
- <string name="face_lock_screen_setup_skip_dialog_text" product="tablet" msgid="2998863111689476550">"از رایانه لوحیتان با گزینه قفل صفحه محافظت کنید تا درصورت گم شدن یا به سرقت رفتن هیچ فردی نتواند از آن استفاده کند. همچنین به گزینه قفل صفحه نیاز دارید تا احراز هویت ازطرق چهره را راهاندازی کنید. روی «لغو» ضربه بزنید و سپس پین تنظیم کنید یا گزینه قفل صفحه دیگری را انتخاب کنید."</string>
- <string name="face_lock_screen_setup_skip_dialog_text" product="device" msgid="6780557259734235952">"از دستگاهتان با گزینه قفل صفحه محافظت کنید تا درصورت گم شدن یا به سرقت رفتن هیچ فردی نتواند از آن استفاده کند. همچنین به گزینه قفل صفحه نیاز دارید تا احراز هویت ازطرق چهره را راهاندازی کنید. روی «لغو» ضربه بزنید و سپس پین تنظیم کنید یا گزینه قفل صفحه دیگری را انتخاب کنید."</string>
- <string name="face_lock_screen_setup_skip_dialog_text" product="default" msgid="8541640018478926775">"از تلفنتان با گزینه قفل صفحه محافظت کنید تا درصورت گم شدن یا به سرقت رفتن هیچ فردی نتواند از آن استفاده کند. همچنین به گزینه قفل صفحه نیاز دارید تا احراز هویت ازطرق چهره را راهاندازی کنید. روی «لغو» ضربه بزنید و سپس پین تنظیم کنید یا گزینه قفل صفحه دیگری را انتخاب کنید."</string>
+ <string name="face_lock_screen_setup_skip_dialog_text" product="tablet" msgid="2998863111689476550">"از رایانه لوحیتان با گزینه قفل صفحه محافظت کنید تا درصورت گم شدن یا به سرقت رفتن هیچ فردی نتواند از آن استفاده کند. همچنین به گزینه قفل صفحه نیاز دارید تا اصالتسنجی ازطرق چهره را راهاندازی کنید. روی «لغو» ضربه بزنید و سپس پین تنظیم کنید یا گزینه قفل صفحه دیگری را انتخاب کنید."</string>
+ <string name="face_lock_screen_setup_skip_dialog_text" product="device" msgid="6780557259734235952">"از دستگاهتان با گزینه قفل صفحه محافظت کنید تا درصورت گم شدن یا به سرقت رفتن هیچ فردی نتواند از آن استفاده کند. همچنین به گزینه قفل صفحه نیاز دارید تا اصالتسنجی ازطرق چهره را راهاندازی کنید. روی «لغو» ضربه بزنید و سپس پین تنظیم کنید یا گزینه قفل صفحه دیگری را انتخاب کنید."</string>
+ <string name="face_lock_screen_setup_skip_dialog_text" product="default" msgid="8541640018478926775">"از تلفنتان با گزینه قفل صفحه محافظت کنید تا درصورت گم شدن یا به سرقت رفتن هیچ فردی نتواند از آن استفاده کند. همچنین به گزینه قفل صفحه نیاز دارید تا اصالتسنجی ازطرق چهره را راهاندازی کنید. روی «لغو» ضربه بزنید و سپس پین تنظیم کنید یا گزینه قفل صفحه دیگری را انتخاب کنید."</string>
<string name="lock_screen_pin_skip_title" msgid="8217519439213393785">"راهاندازی پین رد شود؟"</string>
<string name="lock_screen_password_skip_title" msgid="3725788215672959827">"راهاندازی گذرواژه رد شود؟"</string>
<string name="lock_screen_pattern_skip_title" msgid="4237030500353932005">"راهاندازی الگو رد شود؟"</string>
@@ -489,7 +488,7 @@
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"اووه، آن حسگر نیست"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"با استفاده از انگشت اشاره، حسگر را در پشت تلفن لمس کنید."</string>
<string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"ثبت انجام نشد"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"مهلت زمانی ثبت اثر انگشت به پایان رسید. دوباره امتحان کنید."</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"درنگ ثبت اثر انگشت به پایان رسید. دوباره امتحان کنید."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"ثبت اثر انگشت کار نمیکند. دوباره امتحان کنید یا از انگشت دیگری استفاده کنید."</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"افزودن مورد دیگر"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"بعدی"</string>
@@ -581,12 +580,12 @@
<string name="fingerprint_unlock_set_unlock_password" msgid="3325527833422156515">"اثر انگشت + گذرواژه"</string>
<string name="fingerprint_unlock_skip_fingerprint" msgid="2063700014903801639">"ادامه بدون اثر انگشت"</string>
<string name="fingerprint_unlock_title" msgid="8009992449332532869">"میتوانید با استفاده از اثر انگشتتان قفل تلفنتان را باز کنید. بنا به دلایل ایمنی این گزینه مستلزم قفل صفحه پشتیبان است."</string>
- <string name="face_unlock_set_unlock_pattern" msgid="3748596996869406905">"احراز هویت با چهره + الگو"</string>
- <string name="face_unlock_set_unlock_pin" msgid="3320824093518497476">"احراز هویت با چهره + پین"</string>
- <string name="face_unlock_set_unlock_password" msgid="8962344604388383659">"احراز هویت با چهره + گذرواژه"</string>
- <string name="face_unlock_skip_face" msgid="7173197040501143880">"ادامه بدون احراز هویت با چهره"</string>
+ <string name="face_unlock_set_unlock_pattern" msgid="3748596996869406905">"اصالتسنجی با چهره + الگو"</string>
+ <string name="face_unlock_set_unlock_pin" msgid="3320824093518497476">"اصالتسنجی با چهره + پین"</string>
+ <string name="face_unlock_set_unlock_password" msgid="8962344604388383659">"اصالتسنجی با چهره + گذرواژه"</string>
+ <string name="face_unlock_skip_face" msgid="7173197040501143880">"ادامه بدون اصالتسنجی با چهره"</string>
<string name="face_unlock_title" msgid="1298031162909236127">"میتوانید با استفاده از چهرهتان قفل تلفنتان را باز کنید. بنا به دلایل ایمنی این گزینه مستلزم قفل صفحه پشتیبان است."</string>
- <string name="unlock_set_unlock_disabled_summary" msgid="1713159782896140817">"غیرفعالشده توسط سرپرست، طبق خطمشی رمزگذاری یا حافظه اطلاعات کاربردی"</string>
+ <string name="unlock_set_unlock_disabled_summary" msgid="1713159782896140817">"توسط سرپرست غیرفعال شده، طبق خطمشی رمزگذاری یا حافظه اطلاعات کاربردی"</string>
<string name="unlock_set_unlock_mode_off" msgid="2950701212659081973">"هیچکدام"</string>
<string name="unlock_set_unlock_mode_none" msgid="3441605629077912292">"تند کشیدن"</string>
<string name="unlock_set_unlock_mode_pattern" msgid="8564909572968419459">"الگو"</string>
@@ -596,10 +595,10 @@
<string name="unlock_disable_lock_title" msgid="3508492427073600294">"خاموش کردن قفل صفحه"</string>
<string name="unlock_disable_frp_warning_title" msgid="5858589970505254193">"محافظ دستگاه برداشته شود؟"</string>
<string name="unlock_disable_frp_warning_title_profile" msgid="3814123014295965266">"محافظت از نمایه غیرفعال شود؟"</string>
- <string name="unlock_disable_frp_warning_content_pattern" msgid="1843950215687159135">"قابلیتهای محافظ دستگاه بدون الگوی شما کار نمیکند."</string>
- <string name="unlock_disable_frp_warning_content_pattern_fingerprint" msgid="8846957650251741548">"قابلیتهای محافظت از دستگاه، بدون الگوی شما کار نمیکنند.<xliff:g id="EMPTY_LINE">
+ <string name="unlock_disable_frp_warning_content_pattern" msgid="1843950215687159135">"ویژگیهای محافظ دستگاه بدون الگوی شما کار نمیکند."</string>
+ <string name="unlock_disable_frp_warning_content_pattern_fingerprint" msgid="8846957650251741548">"ویژگیهای محافظ دستگاه بدون الگوی شما کار نمیکند.<xliff:g id="EMPTY_LINE">
-</xliff:g>اثرانگشتهای ذخیرهشدهتان هم از این دستگاه پاک میشود و نمیتوانید با آنها قفل تلفنتان را باز کنید، خریدها را تأیید کنید یا به سیستم برنامهها وارد شوید."</string>
+</xliff:g>اثرانگشتهای ذخیرهشدهتان هم از این دستگاه پاک میشود و نمیتوانید با آنها قفل تلفنتان را باز کنید، خریدها را تأیید کنید، یا به سیستم برنامهها وارد شوید."</string>
<string name="unlock_disable_frp_warning_content_pin" msgid="6760473271034592796">"قابلیتهای محافظ دستگاه بدون پین شما کار نمیکند."</string>
<string name="unlock_disable_frp_warning_content_pin_fingerprint" msgid="4384632309103635233">"قابلیتهای محافظت از دستگاه، بدون پین شما کار نمیکنند.<xliff:g id="EMPTY_LINE">
@@ -827,7 +826,7 @@
<string name="nfc_disclaimer_title" msgid="4860231267351602970">"روشن کردن NFC"</string>
<string name="nfc_disclaimer_content" msgid="3066113577854565782">"NFC دادهها را میان این دستگاه و سایر دستگاهها یا اهداف اطراف (مانند پایانههای پرداخت، کارتخوانها و آگهیها یا برچسبهای تعاملی) مبادله میکند."</string>
<string name="nfc_secure_settings_title" msgid="5153751163174916581">"NFC ایمن"</string>
- <string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"استفاده از حملونقل عمومی و پرداخت NFC تنها وقتی قفل صفحه باز است مجاز شود"</string>
+ <string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"استفاده از حملونقل عمومی و پرداخت «ارتباط میدان نزدیک» (NFC) تنها وقتی قفل صفحه باز است مجاز شود"</string>
<string name="android_beam_settings_title" msgid="3083436415873738389">"Android Beam"</string>
<string name="android_beam_on_summary" msgid="8068287225180474199">"آماده برای انتقال محتوای برنامه از طریق NFC"</string>
<string name="android_beam_off_summary" msgid="7365818039159364600">"خاموش"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"روشن کردن Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"استفاده از Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"استفاده از Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"تنظیمات Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"تنظیم و مدیریت نقاط دسترسی بی سیم"</string>
@@ -916,7 +915,7 @@
<string name="passpoint_label" msgid="7429247462404128615">"ذخیره از طریق"</string>
<string name="passpoint_content" msgid="340527524510304327">"اطلاعات کاربری <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="wifi_eap_method" msgid="3752116941487485859">"روش EAP"</string>
- <string name="please_select_phase2" msgid="5848080896810435677">"مرحله دوم احراز هویت"</string>
+ <string name="please_select_phase2" msgid="5848080896810435677">"مرحله دوم اصالتسنجی"</string>
<string name="wifi_eap_ca_cert" msgid="1496395241849383785">"گواهی CA"</string>
<string name="wifi_eap_domain" msgid="3298302320003640130">"دامنه"</string>
<string name="wifi_eap_user_cert" msgid="6786839531765719173">"گواهی کاربر"</string>
@@ -933,17 +932,17 @@
<string name="wifi_ap_5G" msgid="4584892544393675403">"۵٫۰ گیگاهرتز"</string>
<string name="wifi_ap_band_select_one" msgid="4409754936554360355">"حداقل یک باند برای نقطه اتصال Wi‑Fi انتخاب کنید:"</string>
<string name="wifi_ip_settings" msgid="4636102290236116946">"تنظیمات IP"</string>
- <string name="wifi_privacy_settings" msgid="4462092795794247809">"حریم خصوصی"</string>
- <string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"MAC تصادفیسازیشده"</string>
+ <string name="wifi_privacy_settings" msgid="4462092795794247809">"حریمخصوصی"</string>
+ <string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"MAC تصادفی"</string>
<string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"افزودن دستگاه"</string>
- <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"برای افزودن دستگاه به «<xliff:g id="SSID">%1$s</xliff:g>»، کد QR را در مرکز پنجره زیر قرار دهید"</string>
- <string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"اسکن کد QR"</string>
- <string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"برای اتصال به «<xliff:g id="SSID">%1$s</xliff:g>»، کد QR را در مرکز پنجره زیر قرار دهید"</string>
- <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"با اسکن کردن کد QR، به Wi‑Fi بپیوندید"</string>
+ <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"برای افزودن دستگاه به «<xliff:g id="SSID">%1$s</xliff:g>»، رمزینه پاسخسریع را در مرکز پنجره زیر قرار دهید"</string>
+ <string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"اسکن رمزینه پاسخسریع"</string>
+ <string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"برای اتصال به «<xliff:g id="SSID">%1$s</xliff:g>»، رمزینه پاسخسریع را در مرکز پنجره زیر قرار دهید"</string>
+ <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"با اسکن کردن رمزینه پاسخسریع، به Wi‑Fi بپیوندید"</string>
<string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"استفاده مشترک از Wi‑Fi"</string>
- <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"برای اتصال به «<xliff:g id="SSID">%1$s</xliff:g>»، این کد QR را اسکن کنید و گذرواژه مربوطه را به اشتراک گذارید"</string>
- <string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"برای اتصال به «<xliff:g id="SSID">%1$s</xliff:g>»، این کد QR را اسکن کنید"</string>
- <string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"کد QR خوانده نشد. کد را در مرکز قرار دهید و دوباره امتحان کنید"</string>
+ <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"برای اتصال به «<xliff:g id="SSID">%1$s</xliff:g>»، این رمزینه پاسخسریع را اسکن کنید و گذرواژه مربوطه را همرسانی کنید"</string>
+ <string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"برای اتصال به «<xliff:g id="SSID">%1$s</xliff:g>»، این رمزینه پاسخسریع را اسکن کنید"</string>
+ <string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"رمزینه پاسخسریع خوانده نشد. کد را در مرکز قرار دهید و دوباره امتحان کنید"</string>
<string name="wifi_dpp_failure_authentication_or_configuration" msgid="9142051662156233679">"دوباره امتحان کنید. اگر مشکل همچنان ادامه دارد، با سازنده دستگاه تماس بگیرید"</string>
<string name="wifi_dpp_failure_not_compatible" msgid="4320027179973678283">"مشکلی رخ داده است"</string>
<string name="wifi_dpp_failure_timeout" msgid="5060065168142109420">"مطمئن شوید دستگاه متصل، شارژ و روشن شده است"</string>
@@ -965,7 +964,7 @@
<string name="wifi_dpp_wifi_password" msgid="8007558344032612455">"گذرواژه Wi-Fi: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
<string name="wifi_dpp_hotspot_password" msgid="6172326289042241924">"گذرواژه نقطه اتصال: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
<string name="wifi_dpp_add_device" msgid="1347056725253936358">"افزودن دستگاه"</string>
- <string name="wifi_dpp_connect_network_using_qr_code" msgid="115993715600532357">"بااستفاده از کد QR، به این شبکه متصل شوید"</string>
+ <string name="wifi_dpp_connect_network_using_qr_code" msgid="115993715600532357">"بااستفاده از رمزینه پاسخسریع، به این شبکه متصل شوید"</string>
<string name="retry" msgid="8500839563577344702">"امتحان مجدد"</string>
<string name="wifi_shared" msgid="5054256778276524960">"اشتراکگذاری با دیگر استفادهکنندگان از دستگاه"</string>
<string name="wifi_unchanged" msgid="6804964646942333992">"(بدون تغییر)"</string>
@@ -1025,7 +1024,7 @@
<string name="wifi_details_subnet_mask" msgid="53396707004763012">"پوشش زیرشبکه"</string>
<string name="wifi_details_dns" msgid="1118251455740116559">"DNS"</string>
<string name="wifi_details_ipv6_address_header" msgid="1642310137145363299">"نشانیهای IPv6"</string>
- <string name="wifi_saved_access_points_label" msgid="3790693285928292563">"شبکههای ذخیره شده"</string>
+ <string name="wifi_saved_access_points_label" msgid="3790693285928292563">"شبکههای ذخیرهشده"</string>
<string name="wifi_subscribed_access_points_tab" msgid="7498765485953257229">"اشتراکها"</string>
<!-- no translation found for wifi_saved_access_points_tab (4677730543624191122) -->
<skip />
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"داده شبکه تلفن همراه"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"استفاده از شبکه تلفن همراه، درصورت عدمدسترسی به Wi-Fi"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"اگر شبکه تلفن همراه دردسترس نبود، از Wi-Fi استفاده شود"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"تماس ازطریق Wi-Fi. اگر اتصال Wi-Fi قطع شود، تماس متوقف میشود."</string>
@@ -1199,7 +1201,7 @@
<string name="auto_brightness_very_high_title" msgid="6649896560889239565">"بسیار زیاد"</string>
<string name="auto_brightness_subtitle" msgid="8516999348793100665">"میزان روشنایی ترجیحی"</string>
<string name="auto_brightness_off_summary" msgid="6162650416289359104">"برای چراغهای در دسترس تنظیم نکنید"</string>
- <string name="auto_brightness_very_high_summary" msgid="7202032980509583918">"استفاده باتری افزایشیافته"</string>
+ <string name="auto_brightness_very_high_summary" msgid="7202032980509583918">"مصرف باتری بالا"</string>
<string name="auto_brightness_disclaimer" msgid="5416696351199148809">"میزان روشنایی را برای چراغ در دسترس بهینه کنید. تازمانیکه این ویژگی روشن است، میتوانید روشنایی را بهطورموقت تنظیم کنید."</string>
<string name="auto_brightness_description" msgid="8209140379089535411">"روشنایی صفحهنمایش بهطور خودکار با محیط و فعالیتهایتان تنظیم میشود. میتوانید لغزاننده را بهطور دستی حرکت دهید تا روشنایی تطبیقی ترجیح شما را دریابد."</string>
<string name="display_white_balance_title" msgid="5747260735311935143">"تعادل سفیدی نمایشگر"</string>
@@ -1247,7 +1249,7 @@
<string name="screensaver_settings_summary_either_long" msgid="6078038506795498288">"هنگام شارژ یا اتصال به پایه"</string>
<string name="screensaver_settings_summary_either_short" msgid="2453772128682850053">"هر دو"</string>
<string name="screensaver_settings_summary_sleep" msgid="6097363596749362692">"هنگام شارژ شدن"</string>
- <string name="screensaver_settings_summary_dock" msgid="6297808146601570196">"وقتی در جایگاه است"</string>
+ <string name="screensaver_settings_summary_dock" msgid="6297808146601570196">"وقتی روی پایه است"</string>
<string name="screensaver_settings_summary_never" msgid="3995259444981620707">"هرگز"</string>
<string name="screensaver_settings_summary_off" msgid="6119947316484763131">"خاموش"</string>
<string name="screensaver_settings_disabled_prompt" msgid="1897518064782596947">"برای کنترل اینکه وقتی تلفن روی پایه اتصال قرار دارد و/یا در حالت خواب است چه اتفاقی بیفتد، محافظ صفحه را روشن کنید."</string>
@@ -1258,11 +1260,11 @@
<string name="automatic_brightness" msgid="8663792987774126192">"روشنایی خودکار"</string>
<string name="lift_to_wake_title" msgid="5523752279947392868">"بیدار شدن با بالا بردن"</string>
<string name="ambient_display_screen_title" msgid="2632871676917956691">"نمایشگر محیط"</string>
- <string name="ambient_display_category_triggers" msgid="3496111745340047504">"زمان نمایش دادن"</string>
+ <string name="ambient_display_category_triggers" msgid="3496111745340047504">"کی نشان داده شود"</string>
<string name="doze_title" msgid="235269029233857546">"اعلانهای جدید"</string>
<string name="doze_summary" msgid="6762274282827831706">"روشن شدن صفحهنمایش هنگامی که اعلانی دریافت میکنید"</string>
<string name="doze_always_on_title" msgid="8555184965031789941">"همیشه روشن"</string>
- <string name="doze_always_on_summary" msgid="7654436900436328950">"نمایش زمان، نمادهای اعلان و سایر اطلاعات. استفاده باتری افزایشیافته."</string>
+ <string name="doze_always_on_summary" msgid="7654436900436328950">"نمایش زمان، نمادهای اعلان و سایر اطلاعات. مصرف باتری بالا."</string>
<string name="title_font_size" msgid="5021464556860010851">"اندازه قلم"</string>
<string name="short_summary_font_size" msgid="4141077908728522946">"نوشتار را بزرگتر یا کوچکتر کنید"</string>
<string name="sim_lock_settings" msgid="1986924650622642189">"تنظیمات قفل سیم کارت"</string>
@@ -1416,7 +1418,7 @@
<string name="storage_menu_set_up" msgid="2849170579745958513">"راهاندازی"</string>
<string name="storage_menu_explore" msgid="3733439525636202662">"کاوش"</string>
<string name="storage_menu_free" msgid="6586253660759145508">"آزاد کردن فضا"</string>
- <string name="storage_menu_manage" msgid="461380717863926516">"مدیریت حافظه"</string>
+ <string name="storage_menu_manage" msgid="461380717863926516">"مدیریت فضای ذخیرهسازی"</string>
<string name="storage_title_usb" msgid="2015671467177303099">"اتصال به کامپیوتر با USB"</string>
<string name="usb_connection_category" msgid="2888975803638116041">"اتصال بهعنوان"</string>
<string name="usb_mtp_title" msgid="6893938968831995500">"دستگاه رسانهای (MTP)"</string>
@@ -1539,7 +1541,7 @@
<string name="apn_mms_port" msgid="6606572282014819299">"درگاه فراپیام"</string>
<string name="apn_mcc" msgid="9138301167194779180">"MCC"</string>
<string name="apn_mnc" msgid="1276161191283274976">"MNC"</string>
- <string name="apn_auth_type" msgid="4286147728662523362">"نوع احراز هویت"</string>
+ <string name="apn_auth_type" msgid="4286147728662523362">"نوع اصالتسنجی"</string>
<string name="apn_auth_type_none" msgid="3679273936413404046">"هیچکدام"</string>
<string name="apn_auth_type_pap" msgid="6155876141679480864">"PAP"</string>
<string name="apn_auth_type_chap" msgid="5484031368454788686">"CHAP"</string>
@@ -1612,16 +1614,16 @@
<string name="tether_settings_title_wifi" msgid="2060965130234484613">"نقطه اتصال قابل حمل"</string>
<string name="tether_settings_title_bluetooth" msgid="1999590158102569959">"اشتراکگذاری اینترنت با بلوتوث"</string>
<string name="tether_settings_title_usb_bluetooth" msgid="1159128764162788159">"اشتراکگذاری اینترنت"</string>
- <string name="tether_settings_title_all" msgid="6935843543433954181">"نقطه اتصال و اتصال به اینترنت با تلفن همراه"</string>
+ <string name="tether_settings_title_all" msgid="6935843543433954181">"نقطه اتصال و اشتراکگذاری اینترنت"</string>
<string name="tether_settings_summary_hotspot_on_tether_on" msgid="1289593649526514499">"نقطه اتصال روشن، اشتراکگذاری اینترنت"</string>
<string name="tether_settings_summary_hotspot_on_tether_off" msgid="8010689354668285422">"نقطه اتصال روشن"</string>
<string name="tether_settings_summary_hotspot_off_tether_on" msgid="1349909238672649877">"اشتراکگذاری اینترنت"</string>
- <string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"هنگامی که محافظ صفحه روشن است نمیتوانید از نقاط اتصال قابل حمل یا اتصال به اینترنت با تلفن همراه استفاده کنید"</string>
+ <string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"هنگامی که محافظ صفحه روشن است نمیتوانید از نقاط اتصال قابل حمل یا اشتراکگذاری اینترنت استفاده کنید"</string>
<string name="usb_title" msgid="7480927657535578688">"USB"</string>
<string name="usb_tethering_button_text" msgid="6242228383142012332">"اشتراکگذاری اینترنت با USB"</string>
<string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"همرسانی اتصال اینترنت تلفن ازطریق USB"</string>
<string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"همرسانی اینترنت رایانه لوحی ازطریق USB"</string>
- <string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"تترینگ با بلوتوث"</string>
+ <string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"اشتراکگذاری اینترنت با بلوتوث"</string>
<string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"همرسانی اتصال اینترنت رایانه لوحی ازطریق بلوتوث"</string>
<string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"همرسانی اتصال اینترنت تلفن ازطریق بلوتوث"</string>
<string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"همرسانی اتصال اینترنت این <xliff:g id="DEVICE_NAME">%1$d</xliff:g> ازطریق بلوتوث"</string>
@@ -1721,9 +1723,9 @@
<string name="lockpassword_password_set_toast" msgid="601928982984489868">"گذرواژه تنظیم شد"</string>
<string name="lockpassword_pin_set_toast" msgid="172594825722240059">"پین تنظیم شد"</string>
<string name="lockpassword_pattern_set_toast" msgid="6923260369475481406">"الگو تنظیم شد"</string>
- <string name="lockpassword_choose_your_password_header_for_face" msgid="8823110536502072216">"برای استفاده از احراز هویت با چهره، گذرواژه تنظیم کنید"</string>
- <string name="lockpassword_choose_your_pattern_header_for_face" msgid="5563793748503883666">"برای استفاده از احراز هویت با چهره، الگو تنظیم کنید"</string>
- <string name="lockpassword_choose_your_pin_header_for_face" msgid="7238352632535405068">"برای استفاده از احراز هویت با چهره، پین تنظیم کنید"</string>
+ <string name="lockpassword_choose_your_password_header_for_face" msgid="8823110536502072216">"برای استفاده از اصالتسنجی با چهره، گذرواژه تنظیم کنید"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_face" msgid="5563793748503883666">"برای استفاده از اصالتسنجی با چهره، الگو تنظیم کنید"</string>
+ <string name="lockpassword_choose_your_pin_header_for_face" msgid="7238352632535405068">"برای استفاده از اصالتسنجی با چهره، پین تنظیم کنید"</string>
<string name="lockpassword_confirm_your_pattern_generic" msgid="6146545393074070916">"برای ادامه، از الگوی دستگاهتان استفاده کنید"</string>
<string name="lockpassword_confirm_your_pin_generic" msgid="8732268389177735264">"برای ادامه، کد پین دستگاهتان را وارد کنید"</string>
<string name="lockpassword_confirm_your_password_generic" msgid="6304552647060899594">"برای ادامه گذرواژه دستگاهتان را وارد کنید"</string>
@@ -1798,7 +1800,7 @@
<string name="advanced_settings_summary" msgid="5912237062506771716">"گزینههای تنظیمات بیشتری فعال شود"</string>
<string name="application_info_label" msgid="3886253474964599105">"اطلاعات برنامه"</string>
<string name="storage_label" msgid="1109537840103290384">"حافظه"</string>
- <string name="auto_launch_label" msgid="47089737922907379">"باز کردن به صورت پیشفرض"</string>
+ <string name="auto_launch_label" msgid="47089737922907379">"باز کردن بهصورت پیشفرض"</string>
<string name="auto_launch_label_generic" msgid="7865828543459493308">"پیشفرضها"</string>
<string name="screen_compatibility_label" msgid="3638271673726075815">"سازگاری با صفحهنمایش"</string>
<string name="permissions_label" msgid="7341733648403464213">"مجوزها"</string>
@@ -1823,20 +1825,20 @@
<string name="install_text" msgid="2798092278891807849">"نصب"</string>
<string name="disable_text" msgid="5065834603951474397">"غیرفعال کردن"</string>
<string name="enable_text" msgid="7179141636849225884">"فعال کردن"</string>
- <string name="clear_user_data_text" msgid="8894073247302821764">"پاک کردن محل ذخیرهسازی"</string>
+ <string name="clear_user_data_text" msgid="8894073247302821764">"پاک کردن فضای ذخیرهسازی"</string>
<string name="app_factory_reset" msgid="8718986000278776272">"حذف نصب نسخههای به روز"</string>
<string name="auto_launch_enable_text" msgid="3372898942144027341">"شما انتخاب کردهاید که این برنامه را بهطور پیشفرض برای برخی از عملکردها راهاندازی کنید."</string>
<string name="always_allow_bind_appwidgets_text" msgid="2286211654774611037">"شما انتخاب کردید تا به این برنامه برای ایجاد ابزارک و دسترسی به اطلاعات آنها اجازه دهید."</string>
- <string name="auto_launch_disable_text" msgid="8560921288036801416">"پیش فرضی تنظیم نشده است."</string>
+ <string name="auto_launch_disable_text" msgid="8560921288036801416">"پیشفرضی تنظیم نشده است."</string>
<string name="clear_activities" msgid="2068014972549235347">"پاک کردن پیشفرضها"</string>
<string name="screen_compatibility_text" msgid="1768064020294301496">"ممکن است این برنامه برای صفحه شما طراحی نشده باشد، نحوه تنظیم آن برای صفحه را میتوانید از این قسمت کنترل کنید."</string>
<string name="ask_compatibility" msgid="6687958195768084807">"هنگام راهاندازی سؤال شود"</string>
<string name="enable_compatibility" msgid="1754177974320410195">"مقیاسبندی برنامه"</string>
<string name="unknown" msgid="2780743426415501227">"ناشناس"</string>
<string name="sort_order_alpha" msgid="6689698854460261212">"مرتب سازی براساس نام"</string>
- <string name="sort_order_size" msgid="3167376197248713027">"مرتبسازی براساس اندازه"</string>
+ <string name="sort_order_size" msgid="3167376197248713027">"بهترتیب اندازه"</string>
<string name="sort_order_recent_notification" msgid="5592496977404445941">"جدیدترین"</string>
- <string name="sort_order_frequent_notification" msgid="5640245013098010347">"دارای بیشترین اعلان"</string>
+ <string name="sort_order_frequent_notification" msgid="5640245013098010347">"پرتکرارترین"</string>
<string name="show_running_services" msgid="1895994322704667543">"نمایش سرویسهای در حال اجرا"</string>
<string name="show_background_processes" msgid="88012264528093617">"فرآیندهای ذخیره شده در حافظهٔ پنهان"</string>
<string name="default_emergency_app" msgid="286530070173495823">"برنامه اضطراری"</string>
@@ -1978,7 +1980,7 @@
<string name="game_controller_settings_category" msgid="9066526500617769463">"دسته کنترل بازی"</string>
<string name="vibrate_input_devices" msgid="3584406079534121467">"تغییر مسیر لرزش"</string>
<string name="vibrate_input_devices_summary" msgid="7503148018220540038">"وقتی متصل شد، لرزش به دسته کنترل بازی ارسال شود"</string>
- <string name="keyboard_layout_dialog_title" msgid="4762706917037085797">"انتخاب طرحبندی صفحهکلید"</string>
+ <string name="keyboard_layout_dialog_title" msgid="4762706917037085797">"انتخاب جانمایی صفحهکلید"</string>
<string name="keyboard_layout_dialog_setup_button" msgid="771293535107618283">"تنظیم طرحبندیهای صفحهکلید"</string>
<string name="keyboard_layout_dialog_switch_hint" msgid="138516114253502182">"برای تغییر، Control-کلید فاصله را فشار هید"</string>
<string name="keyboard_layout_default_label" msgid="8368579311667189793">"پیشفرض"</string>
@@ -2006,7 +2008,7 @@
<string name="testing" msgid="4255916838792186365">"تست کردن"</string>
<string name="testing_phone_info" product="tablet" msgid="2714303457408649566">"اطلاعات رایانهٔ لوحی"</string>
<string name="testing_phone_info" product="default" msgid="1954062952628179016">"اطلاعات تلفن"</string>
- <string name="input_methods_settings_title" msgid="880477541100103388">"ووردی متن"</string>
+ <string name="input_methods_settings_title" msgid="880477541100103388">"ورودی نوشتاری"</string>
<string name="input_method" msgid="2426639635860376775">"روش ورودی"</string>
<string name="current_input_method" msgid="4831870685505762355">"صفحهکلید کنونی"</string>
<string name="input_method_selector" msgid="2053594139601607047">"انتخابگر روش ورودی"</string>
@@ -2018,7 +2020,7 @@
<string name="input_method_settings_button" msgid="6151412131733672062">"تنظیمات"</string>
<string name="input_methods_settings_label_format" msgid="5927400388781960176">"<xliff:g id="IME_NAME">%1$s</xliff:g> تنظیمات"</string>
<string name="input_methods_and_subtype_enabler_title" msgid="75557930915149416">"انتخاب روشهای ورودی فعال"</string>
- <string name="onscreen_keyboard_settings_summary" msgid="148763210673670769">"تنظیمات صفحهکلید روی صفحه"</string>
+ <string name="onscreen_keyboard_settings_summary" msgid="148763210673670769">"تنظیمات صفحهکلید مجازی"</string>
<string name="builtin_keyboard_settings_title" msgid="3683883402326039724">"صفحهکلید فیزیکی"</string>
<string name="builtin_keyboard_settings_summary" msgid="6498739864479285932">"تنظیمات صفحهکلید فیزیکی"</string>
<string name="gadget_picker_title" msgid="9146981887780645322">"انتخاب اسبابک"</string>
@@ -2028,7 +2030,7 @@
<string name="allow_bind_app_widget_activity_always_allow_bind" msgid="1185486443615658430">"همیشه به <xliff:g id="WIDGET_HOST_NAME">%1$s</xliff:g> برای ایجاد ابزارکها و دسترسی به اطلاعات آنها اجازه داده شود"</string>
<string name="usage_stats_label" msgid="3128999956478977035">"آمار کاربرد"</string>
<string name="testing_usage_stats" msgid="704965692323956976">"آمار کاربرد"</string>
- <string name="display_order_text" msgid="2973620313510295873">"ترتیب براساس:"</string>
+ <string name="display_order_text" msgid="2973620313510295873">"بهترتیب:"</string>
<string name="app_name_label" msgid="2258469951312794816">"برنامه"</string>
<string name="last_time_used_label" msgid="1119322667349666930">"آخرین زمان استفاده"</string>
<string name="usage_time_label" msgid="5615725415876461039">"زمان استفاده"</string>
@@ -2036,7 +2038,7 @@
<string name="accessibility_settings_title" msgid="1687226556576913576">"تنظیمات دسترسپذیری"</string>
<string name="accessibility_settings_summary" msgid="5742379519336396561">"صفحهخوانها، نمایشگر، کنترلهای تعامل"</string>
<string name="vision_settings_title" msgid="7315352351051423944">"تنظیمات بینایی"</string>
- <string name="vision_settings_description" msgid="3476589459009287332">"میتوانید این دستگاه را متناسب با نیازهایتان سفارشی کنید. میتوانید بعداً در «تنظیمات»، این قابلیتهای دسترسپذیری را تغییر دهید."</string>
+ <string name="vision_settings_description" msgid="3476589459009287332">"میتوانید این دستگاه را متناسب با نیازهایتان سفارشی کنید. میتوانید بعداً در «تنظیمات»، این ویژگیهای دسترسپذیری را تغییر دهید."</string>
<string name="vision_settings_suggestion_title" msgid="7268661419110951128">"تغییر اندازه قلم"</string>
<string name="screen_reader_category_title" msgid="6300714148519645544">"صفحهخوانها"</string>
<string name="audio_and_captions_category_title" msgid="6140472938769619212">"صدا و نوشتار روی صفحه"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"لرزش برای اعلان"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"لرزش هنگام زنگ خوردن"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"لرزش لمس کردن"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"استفاده از سرویس"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"استفاده از تصحیح رنگ"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"استفاده از زیرنویس"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"استفاده از سرویس"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"استفاده از تصحیح رنگ"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"استفاده از زیرنویس ناشنوایان"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"ادامه"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"سمعکها"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"هیچ سمعکی متصل نشده است"</string>
@@ -2149,7 +2151,7 @@
<string name="captioning_standard_options_title" msgid="4124898413348084226">"گزینههای استاندارد"</string>
<string name="captioning_locale" msgid="4734464353806207943">"زبان"</string>
<string name="captioning_text_size" msgid="1707122517246408084">"اندازه نوشتار"</string>
- <string name="captioning_preset" msgid="7429888317480872337">"سبک برنگاشت"</string>
+ <string name="captioning_preset" msgid="7429888317480872337">"سبک زیرنویس"</string>
<string name="captioning_custom_options_title" msgid="4530479671071326732">"گزینههای سفارشی"</string>
<string name="captioning_background_color" msgid="2434458880326292180">"رنگ پسزمینه"</string>
<string name="captioning_background_opacity" msgid="8178926599201811936">"ماتی پسزمینه"</string>
@@ -2441,7 +2443,7 @@
<string name="menu_stats_last_unplugged" msgid="197591229866380225">"در حین قطع اتصال آخر برای <xliff:g id="UNPLUGGED">%1$s</xliff:g>"</string>
<string name="menu_stats_total" msgid="2270006562448894071">"مقدار کل استفاده"</string>
<string name="menu_stats_refresh" msgid="9017362786647223203">"بازخوانی"</string>
- <string name="process_kernel_label" msgid="4175060316414593760">"سیستم عامل Android"</string>
+ <string name="process_kernel_label" msgid="4175060316414593760">"سیستمعامل Android"</string>
<string name="process_mediaserver_label" msgid="8591722404282619153">"سرور رسانه"</string>
<string name="process_dex2oat_label" msgid="8249082119748556085">"بهینهسازی برنامه"</string>
<string name="battery_saver" msgid="3989710213758938398">"بهینهسازی باتری"</string>
@@ -2453,13 +2455,13 @@
<string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"در <xliff:g id="PERCENT">%1$s</xliff:g> روشن خواهد شد"</string>
<string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"تنظیم زمانبندی"</string>
<string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"وقتی شارژ کامل شد، خاموش شود"</string>
- <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"وقتی شارژ تلفن <xliff:g id="PERCENT">%1$s</xliff:g> باشد، «بهینهسازی باتری» خاموش میشود"</string>
+ <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"وقتی شارژ تلفن <xliff:g id="PERCENT">%1$s</xliff:g> شود، «بهینهسازی باتری» خاموش میشود"</string>
<string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"وقتی شارژ رایانه لوحی <xliff:g id="PERCENT">%1$s</xliff:g> باشد، «بهینهسازی باتری» خاموش میشود"</string>
<string name="battery_saver_sticky_description_new" product="device" msgid="5056520668081504111">"وقتی شارژ دستگاه <xliff:g id="PERCENT">%1$s</xliff:g> باشد، «بهینهسازی باتری» خاموش میشود"</string>
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"روشن کردن"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"استفاده از «بهینهسازی باتری»"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"استفاده از بهینهسازی باتری"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"روشن شدن خودکار"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"هیچوقت"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"در <xliff:g id="PERCENT">%1$s</xliff:g> باتری"</string>
@@ -2473,7 +2475,7 @@
<string name="process_stats_type_background" msgid="7867552451658035199">"پسزمینه"</string>
<string name="process_stats_type_foreground" msgid="9185538008409818577">"پیشزمینه"</string>
<string name="process_stats_type_cached" msgid="6774816751826613732">"در حافظه پنهان"</string>
- <string name="process_stats_os_label" msgid="2866711070924260440">"سیستم عامل Android"</string>
+ <string name="process_stats_os_label" msgid="2866711070924260440">"سیستمعامل Android"</string>
<string name="process_stats_os_native" msgid="8971193568864959041">"داخلی"</string>
<string name="process_stats_os_kernel" msgid="496627624157605578">"مرکزی"</string>
<string name="process_stats_os_zram" msgid="5654662484619165424">"Z-Ram"</string>
@@ -2817,7 +2819,7 @@
<string name="n_cacrts" msgid="7539893176217891549">"%d گواهی CA"</string>
<string name="user_credential_title" msgid="6237611303219831419">"جزئیات اعتبارنامه"</string>
<string name="user_credential_removed" msgid="6243576567538844852">"اعتبارنامه برداشته شد: <xliff:g id="CREDENTIAL_NAME">%s</xliff:g>"</string>
- <string name="user_credential_none_installed" msgid="4129252817676332368">"اطلاعات کاربریای نصب نشد"</string>
+ <string name="user_credential_none_installed" msgid="4129252817676332368">"اطلاعات کاربریای نصب نشده"</string>
<string name="spellcheckers_settings_title" msgid="1687210427248364327">"غلطگیر املا"</string>
<string name="spellcheckers_settings_for_work_title" msgid="7461318390801573022">"غلطگیر املا برای کار"</string>
<string name="current_backup_pw_prompt" msgid="8914812770233159610">"گذرواژه فعلی پشتیبانگیریتان را بهطور کامل اینجا تایپ کنید"</string>
@@ -2845,7 +2847,7 @@
<item quantity="one">بررسی گواهی</item>
<item quantity="other">بررسی گواهیها</item>
</plurals>
- <string name="user_settings_title" msgid="7917598650933179545">"چندین کاربر"</string>
+ <string name="user_settings_title" msgid="7917598650933179545">"چند کاربر"</string>
<string name="user_settings_footer_text" product="device" msgid="4573858247439190545">"با افزودن کاربران جدید، از دستگاهتان بهصورت مشترک استفاده کنید. هر کاربر فضایی شخصی برای سفارشی کردن صفحههای اصلی، حسابها، برنامهها، تنظیمات و موارد دیگر در دستگاه شما دارد."</string>
<string name="user_settings_footer_text" product="tablet" msgid="780018221428132918">"با افزودن کاربران جدید، از رایانه لوحیتان بهصورت مشترک استفاده کنید. هر کاربر فضایی شخصی برای سفارشی کردن صفحههای اصلی، حسابها، برنامهها، تنظیمات و موارد دیگر در رایانه لوحی شما دارد."</string>
<string name="user_settings_footer_text" product="default" msgid="1470859614968237491">"با افزودن کاربران جدید، از تلفنتان بهصورت مشترک استفاده کنید. هر کاربر فضایی شخصی برای سفارشی کردن صفحههای اصلی، حسابها، برنامهها، تنظیمات و موارد دیگر در تلفن شما دارد."</string>
@@ -2923,7 +2925,7 @@
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"بهجز وقتی برنامه پرداخت دیگری باز است"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"در پایانه «ضربه و پرداخت»، با این مورد پرداخت شود:"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"پرداخت در پایانه"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"یک برنامه پرداخت تنظیم کنید. سپس کافیست پشت تلفنتان را بالای هر پایانه دارای نشان «بدون تماس» نگه دارید."</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"یک برنامه پرداخت تنظیم کنید. سپس کافی است پشت تلفنتان را بالای هر پایانه دارای نشان «بدون تماس» نگه دارید."</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"متوجه شدم"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"بیشتر..."</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"به عنوان روش ترجیحی شما تنظیم شود؟"</string>
@@ -3042,7 +3044,7 @@
<string name="app_and_notification_dashboard_summary" msgid="4165181440955038145">"دستیار، برنامههای اخیر، برنامههای پیشفرض"</string>
<string name="notification_settings_work_profile" msgid="7190550347842400029">"برنامهها نمیتوانند در نمایه کاری به اعلانها دسترسی داشته باشند."</string>
<string name="account_dashboard_title" msgid="4734300939532555885">"حسابها"</string>
- <string name="account_dashboard_default_summary" msgid="6822549669771936206">"حسابی اضافه نشد"</string>
+ <string name="account_dashboard_default_summary" msgid="6822549669771936206">"حسابی اضافه نشده"</string>
<string name="app_default_dashboard_title" msgid="6575301028225232193">"برنامههای پیشفرض"</string>
<string name="system_dashboard_summary" msgid="6582464466735779394">"زبانها، ژستها، زمان، پشتیبان"</string>
<string name="search_results_title" msgid="4160717656435503940">"تنظیمات"</string>
@@ -3065,7 +3067,7 @@
<string name="keywords_display_night_display" msgid="3647370193110044967">"صفحه کمنور، شب، رنگمایه، شیفت شب، روشنایی، رنگ صفحه، رنگ، رنگ"</string>
<string name="keywords_display_wallpaper" msgid="1202089324795933197">"پسزمینه، شخصی کردن، سفارشی کردن نمایشگر"</string>
<string name="keywords_display_font_size" msgid="1496431330244040196">"اندازه نوشتار"</string>
- <string name="keywords_display_cast_screen" msgid="5744566533025100355">"نمایش دادن، ارسال محتوا، نمایش صفحهنمایش روی دستگاه دیگر، اشتراکگذای صفحهنمایش، صفحهنمایش مشترک، ارسال محتوای صفحهنمایش"</string>
+ <string name="keywords_display_cast_screen" msgid="5744566533025100355">"نمایش دادن، ارسال محتوا، نمایش صفحهنمایش روی دستگاه دیگر، همرسانیی صفحهنمایش، صفحهنمایش مشترک، ارسال محتوای صفحهنمایش"</string>
<string name="keywords_storage" msgid="7704519289838065803">"فضا، دیسک، دیسک سخت، مصرف دستگاه"</string>
<string name="keywords_battery" msgid="3860198379310375112">"مصرف نیرو، شارژ"</string>
<string name="keywords_spell_checker" msgid="6032411442958278879">"املا، واژهنامه، غلطگیر املا، تصحیح خودکار"</string>
@@ -3084,7 +3086,7 @@
<string name="keywords_keyboard_and_ime" msgid="3327265741354129990">"تصحیح نوشتار، تصحیح، صدا، لرزش، خودکار، زبان، اشاره، پیشنهاد دادن، پیشنهاد، طرح زمینه، توهینآمیز، کلمه، نوع، اموجی، بینالمللی"</string>
<string name="keywords_reset_apps" msgid="2645701455052020435">"بازنشانی، اولویتها، پیشفرض"</string>
<string name="keywords_all_apps" msgid="846444448435698930">"برنامهها، بارگیری، برنامههای کاربردی، سیستم"</string>
- <string name="keywords_app_permissions" msgid="8539841019997048500">"برنامهها، مجوزها، امنیت"</string>
+ <string name="keywords_app_permissions" msgid="8539841019997048500">"برنامهها، اجازهها، امنیت"</string>
<string name="keywords_default_apps" msgid="7435952699323965532">"برنامهها، پیشفرض"</string>
<string name="keywords_ignore_optimizations" msgid="9127632532176249438">"نادیده گرفتن بهینهسازی، چرت، حالت آماده بهکار برنامه"</string>
<string name="keywords_color_mode" msgid="8893345199519181751">"زنده، RGB، sRGB، رنگ، طبیعی، استاندارد"</string>
@@ -3096,7 +3098,7 @@
<string name="keywords_payment_settings" msgid="4745023716567666052">"پرداخت کردن، ضربه زدن، پرداختها"</string>
<string name="keywords_backup" msgid="7433356270034921627">"پشتیبانگیری، پشتیبان"</string>
<string name="keywords_assist_gesture_launch" msgid="2711433664837843513">"اشاره"</string>
- <string name="keywords_face_unlock" msgid="651615819291927262">"چهره، بازگشایی، احراز هویت، ورود به سیستم"</string>
+ <string name="keywords_face_unlock" msgid="651615819291927262">"چهره، بازگشایی، اصالتسنجی، ورود به سیستم"</string>
<string name="keywords_imei_info" msgid="4325847870422053408">"imei، meid، min، نسخه prl، imei sv"</string>
<string name="keywords_sim_status" msgid="3852088576719874387">"شبکه، وضعیت شبکه همراه، وضعیت سرویس، شدت سیگنال، نوع شبکه همراه، فراگردی، iccid"</string>
<string name="keywords_model_and_hardware" msgid="2743197096210895251">"شماره سریال، نسخه سختافزار"</string>
@@ -3110,18 +3112,18 @@
<string name="keywords_face_settings" msgid="4117345666006836599">"چهره"</string>
<string name="keywords_fingerprint_settings" msgid="902902368701134163">"اثر انگشت، افزودن اثر انگشت"</string>
<string name="keywords_display_auto_brightness" msgid="1810596220466483996">"تار کردن صفحهنمایش، صفحه لمسی، باتری، روشنایی هوشمند، روشنایی پویا"</string>
- <string name="keywords_display_adaptive_sleep" msgid="1695357782432822811">"کمنور کردن صفحه، خواب، باتری، مهلت زمانی، توجه، نمایشگر، صفحه، بیفعالیتی"</string>
+ <string name="keywords_display_adaptive_sleep" msgid="1695357782432822811">"کمنور کردن صفحه، خواب، باتری، درنگ، توجه، نمایشگر، صفحه، بیفعالیتی"</string>
<string name="keywords_auto_rotate" msgid="4320791369951647513">"چرخاندن، چرخش، چرخش، پرتره، منظره، جهت، عمودی، افقی"</string>
<string name="keywords_system_update_settings" msgid="4419971277998986067">"ارتقا دادن، Android"</string>
<string name="keywords_zen_mode_settings" msgid="4103819458182535493">"«مزاحم نشوید»، زمانبندی، اعلانها، مسدود کردن، سکوت، لرزش، خواب، کار، کانونی کردن، صدا، صامت کردن، روز، روز هفته، آخر هفته، شبهای طول هفته، رویداد"</string>
- <string name="keywords_screen_timeout" msgid="4328381362313993666">"صفحه نمایش، زمان قفل شدن، مهلت زمانی، صفحه درحالت قفل"</string>
+ <string name="keywords_screen_timeout" msgid="4328381362313993666">"صفحه نمایش، زمان قفل شدن، درنگ، صفحه درحالت قفل"</string>
<string name="keywords_storage_settings" msgid="6422454520424236476">"حافظه، حافظه پنهان، داده، حذف، پاک کردن، آزاد، فضا"</string>
<string name="keywords_bluetooth_settings" msgid="1152229891590622822">"متصل، دستگاه، هدفونها، هدستها، بلندگو، بیسیم، مرتبطسازی، هدفونهای توگوشی، موسیقی، رسانه"</string>
<string name="keywords_wallpaper" msgid="7665778626293643625">"پسزمینه، صفحه نمایش، صفحه در حالت قفل، طرح زمینه"</string>
<string name="keywords_assist_input" msgid="8392362788794886564">"پیشفرض، دستیار"</string>
<string name="keywords_default_payment_app" msgid="845369409578423996">"پرداخت، پیشفرض"</string>
<string name="keywords_ambient_display" msgid="8835182491798487184">"اعلان ورودی"</string>
- <string name="keywords_hotspot_tethering" msgid="1723591462602613867">"اتصال به اینترنت با USB تلفن همراه، اتصال اینترنت به بلوتوث تلفن همراه، نقطه اتصال Wi-Fi"</string>
+ <string name="keywords_hotspot_tethering" msgid="1723591462602613867">"اشتراکگذاری اینترنت با USB، اتصال اینترنت به بلوتوث تلفن همراه، نقطه اتصال Wi-Fi"</string>
<string name="keywords_touch_vibration" msgid="2081175517528255224">"لمسی، لرزش، صفحه نمایش، حساسیت"</string>
<string name="keywords_ring_vibration" msgid="4210509151866460210">"لمس، لرزش، تلفن، تماس، حساسیت، به صدا در آوردن زنگ"</string>
<string name="keywords_notification_vibration" msgid="1077515502086745166">"لمس، لرزش، حساسیت"</string>
@@ -3149,7 +3151,7 @@
<string name="screen_locking_sounds_title" msgid="4407110895465866809">"صداهای قفل شدن صفحه"</string>
<string name="charging_sounds_title" msgid="5070437987230894287">"صدا و لرزش هنگام شارژ شدن"</string>
<string name="docking_sounds_title" msgid="2573137471605541366">"صداهای اتصال به پایه"</string>
- <string name="touch_sounds_title" msgid="165237488496165652">"صداهای لمس"</string>
+ <string name="touch_sounds_title" msgid="165237488496165652">"صدای لمس کردن"</string>
<string name="vibrate_on_touch_title" msgid="6360155469279157684">"لرزش لمس کردن"</string>
<string name="vibrate_on_touch_summary" msgid="5504424764028676043">"بازخورد لمسی برای ضربه زدن، صفحهکلید و موارد بیشتر"</string>
<string name="dock_audio_media_title" msgid="1859521680502040781">"پخش بلندگوی پایه"</string>
@@ -3159,7 +3161,7 @@
<string name="emergency_tone_alert" msgid="907868135091891015">"آهنگها"</string>
<string name="emergency_tone_vibrate" msgid="5020068066905681181">"لرزشها"</string>
<string name="boot_sounds_title" msgid="7583926202411353620">"صدای راهاندازی"</string>
- <string name="live_caption_title" msgid="7926591158657997051">"برنگاشت زنده"</string>
+ <string name="live_caption_title" msgid="7926591158657997051">"زیرنویس زنده"</string>
<string name="live_caption_summary" msgid="9064771862352393125">"رسانه زیرنویس خودکار"</string>
<string name="zen_mode_settings_summary_off" msgid="6929319200478424962">"هرگز"</string>
<plurals name="zen_mode_settings_summary_on" formatted="false" msgid="6061723291126091396">
@@ -3199,7 +3201,7 @@
<string name="zen_mode_restrict_notifications_mute_footer" msgid="3049522809520549054">"هنگام دریافت اعلان، تلفنتان صدا نمیدهد یا نمیلرزد."</string>
<string name="zen_mode_restrict_notifications_hide" msgid="3296933643539682552">"بدون تصویر یا صدای اعلانها"</string>
<string name="zen_mode_restrict_notifications_hide_summary" msgid="1449301153755270168">"اعلانها را نخواهید دید یا صدایشان را نخواهید شنید."</string>
- <string name="zen_mode_restrict_notifications_hide_footer" msgid="7617688597593946765">"تلفنتان برای اعلانهای جدید یا موجود صدایی نمیکند، نمیلرزد، یا آنها را نشان نمیدهد. بهخاطر داشته باشید، اعلانهای مهم مربوط به فعالیت و وضعیت تلفن هنوز نمایش داده میشود.\n\nوقتی «مزاحم نشوید» را خاموش میکنید، میتوانید با تند کشیدن از بالای صفحه به پایین، اعلانهای بررسینشده را پیدا کنید."</string>
+ <string name="zen_mode_restrict_notifications_hide_footer" msgid="7617688597593946765">"تلفنتان برای اعلانهای جدید یا موجود صدا نمیدهد، نمیلرزد، یا آنها را نشان نمیدهد. بهخاطر داشته باشید که اعلانهای مهم مربوط به فعالیت و وضعیت تلفن هنوز نمایش داده میشود.\n\nوقتی «مزاحم نشوید» را خاموش میکنید، میتوانید با تند کشیدن از بالای صفحه به پایین، اعلانهای بررسینشده را پیدا کنید."</string>
<string name="zen_mode_restrict_notifications_custom" msgid="3167252482570424133">"سفارشی"</string>
<string name="zen_mode_restrict_notifications_enable_custom" msgid="6376983315529894440">"فعال کردن تنظیم سفارشی"</string>
<string name="zen_mode_restrict_notifications_disable_custom" msgid="8004212081465043044">"حذف تنظیم سفارشی"</string>
@@ -3304,18 +3306,18 @@
<string name="hide_silent_icons_title" msgid="1070905516921542662">"پنهان کردن نمادهای وضعیت اعلان بیصدا"</string>
<string name="hide_silent_icons_summary" msgid="2624346914488256888">"پنهان کردن نمادهای اعلان بیصدا در نوار وضعیت"</string>
<string name="notification_badging_title" msgid="6311699476970264712">"اجازه به نقطههای اعلان"</string>
- <string name="notification_bubbles_title" msgid="9196562435741861317">"ابزارکهای اعلان"</string>
+ <string name="notification_bubbles_title" msgid="9196562435741861317">"حبابکها"</string>
<string name="notification_bubbles_summary" msgid="4624512775901949578">"دسترسی سریع به محتوای برنامه از هرجایی بااستفاده از میانبرهای شنارو"</string>
- <string name="bubbles_feature_education" msgid="8979109826818881018">"برخی اعلانها و سایر محتواها میتواند درقالب ابزارک اعلان روی صفحه نشان داده شود. برای باز کردن ابزارک اعلان، روی آن ضربه بزنید. برای رد کردن، آن را به پایین صفحه بکشید."</string>
- <string name="bubbles_app_toggle_title" msgid="6401217027603326439">"ابزارکهای اعلان"</string>
- <string name="bubbles_app_toggle_summary" msgid="7707611139796553855">"مجاز کردن <xliff:g id="APP_NAME">%1$s</xliff:g> برای نمایش برخی اعلانها درقالب ابزارک اعلان"</string>
- <string name="bubbles_feature_disabled_dialog_title" msgid="3375452386012079293">"روشن کردن ابزارک اعلان"</string>
- <string name="bubbles_feature_disabled_dialog_text" msgid="326945485806386477">"برای روشن کردن ابزارکهای اعلان برای این برنامه، ابتدا باید آنها را برای این دستگاه روشن کنید. این کار بر سایر برنامههایی که قبلاً ابزارکهای اعلان را در آنها روشن کردهاید تأثیر میگذارد."</string>
+ <string name="bubbles_feature_education" msgid="8979109826818881018">"برخی اعلانها و سایر محتواها میتواند درقالب حبابک روی صفحه نشان داده شود. برای باز کردن حبابک، روی آن ضربه بزنید. برای رد کردن، آن را به پایین صفحه بکشید."</string>
+ <string name="bubbles_app_toggle_title" msgid="6401217027603326439">"حبابکها"</string>
+ <string name="bubbles_app_toggle_summary" msgid="7707611139796553855">"مجاز کردن <xliff:g id="APP_NAME">%1$s</xliff:g> برای نمایش برخی اعلانها درقالب حبابک"</string>
+ <string name="bubbles_feature_disabled_dialog_title" msgid="3375452386012079293">"روشن کردن حبابکها"</string>
+ <string name="bubbles_feature_disabled_dialog_text" msgid="326945485806386477">"برای روشن کردن حبابکها برای این برنامه، ابتدا باید آنها را برای این دستگاه روشن کنید. این کار روی سایر برنامههایی که قبلاً حبابکها را در آنها روشن کردهاید تأثیر میگذارد."</string>
<string name="bubbles_feature_disabled_button_approve" msgid="6661464849674493351">"روشن کردن برای دستگاه"</string>
<string name="bubbles_feature_disabled_button_cancel" msgid="4807286844588486198">"لغو"</string>
<string name="swipe_direction_title" msgid="7535031630668873009">"کنشهای تند کشیدن"</string>
- <string name="swipe_direction_ltr" msgid="944932514821822709">"برای رد کردن تند به چپ بکشید و برای نمایش منو تند به راست بکشید"</string>
- <string name="swipe_direction_rtl" msgid="4521416787262888813">"برای رد کردن تند به راست بکشید و برای نمایش منو تند به چپ بکشید"</string>
+ <string name="swipe_direction_ltr" msgid="944932514821822709">"برای رد کردن تند بهچپ بکشید و برای نمایش منو تند بهراست بکشید"</string>
+ <string name="swipe_direction_rtl" msgid="4521416787262888813">"برای رد کردن تند بهراست بکشید و برای نمایش منو تند بهچپ بکشید"</string>
<string name="notification_pulse_title" msgid="4861418327614907116">"نور چشمکزن"</string>
<string name="lock_screen_notifications_title" msgid="6889072265118747835">"در صفحه قفل"</string>
<string name="locked_work_profile_notification_title" msgid="8307025804986190658">"وقتی نمایه کاری قفل است"</string>
@@ -3501,8 +3503,8 @@
<string name="zen_mode_alarms_list" msgid="9162210238533665593">"هشدارها"</string>
<string name="zen_mode_media" msgid="3701280649874724055">"پخش صداهای رسانه"</string>
<string name="zen_mode_media_list" msgid="509327580522287125">"رسانهها"</string>
- <string name="zen_mode_system" msgid="597437265986355038">"مجاز کردن صداهای لمس"</string>
- <string name="zen_mode_system_list" msgid="480192458506838077">"صداهای لمس"</string>
+ <string name="zen_mode_system" msgid="597437265986355038">"مجاز کردن صدای لمس کردن"</string>
+ <string name="zen_mode_system_list" msgid="480192458506838077">"صدای لمس کردن"</string>
<string name="zen_mode_reminders" msgid="7560664194610054038">"مجاز کردن یادآوریها"</string>
<string name="zen_mode_reminders_list" msgid="7347061314032326677">"یادآوریها"</string>
<string name="zen_mode_events" msgid="5784076928339534984">"مجاز کردن رویدادها"</string>
@@ -3586,7 +3588,7 @@
<string name="imei_information_title" msgid="7666097743700170757">"اطلاعات IMEI"</string>
<string name="imei_information_summary" msgid="716516316022275083">"اطلاعات مربوط به IMEI"</string>
<string name="slot_number" msgid="785422579177068698">"(شکاف<xliff:g id="SLOT_NUM">%1$d</xliff:g>)"</string>
- <string name="launch_by_default" msgid="6106985160202769725">"باز کردن به صورت پیشفرض"</string>
+ <string name="launch_by_default" msgid="6106985160202769725">"باز کردن بهصورت پیشفرض"</string>
<string name="app_launch_domain_links_title" msgid="2987289657348349133">"باز کردن پیوندها"</string>
<string name="app_launch_open_domain_urls_title" msgid="8595126859922391331">"باز کردن پیوندهای پشتیبانی شده"</string>
<string name="app_launch_open_domain_urls_summary" msgid="6803029846855502366">"باز کردن بدون پرسش"</string>
@@ -3624,8 +3626,8 @@
<item quantity="other"><xliff:g id="COUNT_2">%d</xliff:g> از <xliff:g id="COUNT_3">%d</xliff:g> اجازه اعطا شد</item>
</plurals>
<plurals name="runtime_permissions_additional_count" formatted="false" msgid="2068102378805218668">
- <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> مجوز اضافی</item>
- <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> مجوز اضافی</item>
+ <item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> اجازه تکمیلی</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> اجازههای تکمیلی</item>
</plurals>
<string name="runtime_permissions_summary_no_permissions_granted" msgid="3477934429220828771">"اجازهای داده نشده"</string>
<string name="runtime_permissions_summary_no_permissions_requested" msgid="3901636077467389637">"اجازهای درخواست نشده"</string>
@@ -3643,7 +3645,7 @@
<string name="advanced_apps" msgid="6643869089344883537">"پیشرفته"</string>
<string name="configure_apps" msgid="4066683118857400943">"پیکربندی برنامهها"</string>
<string name="unknown_app" msgid="2312052973570376877">"برنامه ناشناس"</string>
- <string name="app_permissions" msgid="3215958256821756086">"مدیر مجوز"</string>
+ <string name="app_permissions" msgid="3215958256821756086">"مدیر اجازهها"</string>
<string name="app_permissions_summary" msgid="8785798165776061594">"برنامههای درحال استفاده از <xliff:g id="APPS">%1$s</xliff:g>"</string>
<string name="tap_to_wake" msgid="1902991239401652323">"ضربه برای بیدار شدن"</string>
<string name="tap_to_wake_summary" msgid="8485222120721006793">"برای بیدار کردن دستگاه روی قسمتی از صفحه دوبار ضربه بزنید"</string>
@@ -3716,7 +3718,7 @@
<string name="no_battery_summary" msgid="4105932628367471314">"از آخرین شارژ کامل، از باتری استفاده نشده است"</string>
<string name="app_notification_preferences" msgid="5154466638524523201">"تنظیمات برنامه"</string>
<string name="system_ui_settings" msgid="6751165163665775447">"نمایش تنظیمگر واسط کاربری سیستم"</string>
- <string name="additional_permissions" msgid="3142290772324571654">"مجوزهای بیشتر"</string>
+ <string name="additional_permissions" msgid="3142290772324571654">"اجازههای تکمیلی"</string>
<string name="additional_permissions_more" msgid="714264060348056246">"<xliff:g id="COUNT">%1$d</xliff:g> مورد دیگر"</string>
<string name="share_remote_bugreport_dialog_title" msgid="1390719492733882678">"گزارش اشکال به اشتراک گذاشته شود؟"</string>
<string name="share_remote_bugreport_dialog_message_finished" msgid="5133489230646384192">"سرپرست فناوری اطلاعات شما برای کمک به عیبیابی این دستگاه، گزارش اشکال درخواست کرده است. ممکن است برنامهها و دادهها به اشتراک گذاشته شوند."</string>
@@ -3758,10 +3760,10 @@
<string name="background_check_title" msgid="4136736684290307970">"دسترسی کامل به پسزمینه"</string>
<string name="assist_access_context_title" msgid="2274614501747710439">"استفاده از نوشتار صفحه"</string>
<string name="assist_access_context_summary" msgid="5867997494395842785">"اجازه به برنامه همیار برای دسترسی به محتوای صفحه بهعنوان نوشتار"</string>
- <string name="assist_access_screenshot_title" msgid="1991014038776117688">"استفاده از عکس صفحهنمایش"</string>
+ <string name="assist_access_screenshot_title" msgid="1991014038776117688">"استفاده از نماگرفت"</string>
<string name="assist_access_screenshot_summary" msgid="3010943864000489424">"اجازه به برنامه همیار برای دسترسی به تصویری از صفحه"</string>
<string name="assist_flash_title" msgid="8852484250748551092">"چشمک زدن صفحهنمایش"</string>
- <string name="assist_flash_summary" msgid="6697095786317559129">"چشمک زدن لبههای صفحهنمایش وقتی برنامه همیار به نوشتار صفحهنمایش یا عکس صفحهنمایش دسترسی پیدا میکند"</string>
+ <string name="assist_flash_summary" msgid="6697095786317559129">"چشمک زدن لبههای صفحهنمایش وقتی برنامه همیار به نوشتار صفحهنمایش یا نماگرفت دسترسی پیدا میکند"</string>
<string name="assist_footer" msgid="7030121180457472165">"برنامههای همیار براساس اطلاعات از صفحهای که در آن هستید به شما کمک میکنند. بعضی از برنامهها از هر دو سرویس راهانداز و ورودی صوتی پشتیبانی میکنند تا کمک یکپارچهای به شما ارائه دهند."</string>
<string name="average_memory_use" msgid="5333366040118953945">"مصرف حافظه بهطور متوسط"</string>
<string name="maximum_memory_use" msgid="6509872438499846077">"حداکثر مصرف حافظه"</string>
@@ -3770,8 +3772,8 @@
<string name="memory_details" msgid="5165105904103664110">"جزئیات"</string>
<string name="memory_use_summary" msgid="7676311343819965850">"<xliff:g id="SIZE">%1$s</xliff:g> متوسط حافظه استفاده شده در ۳ ساعت گذشته"</string>
<string name="no_memory_use_summary" msgid="3966550113388917978">"در ۳ ساعت گذشته از حافظه استفاده نشده است"</string>
- <string name="sort_avg_use" msgid="78428601253054298">"مرتبسازی براساس مصرف متوسط"</string>
- <string name="sort_max_use" msgid="322772647893307413">"مرتبسازی براساس حداکثر مصرف"</string>
+ <string name="sort_avg_use" msgid="78428601253054298">"بهترتیب مصرف متوسط"</string>
+ <string name="sort_max_use" msgid="322772647893307413">"بهترتیب حداکثر مصرف"</string>
<string name="memory_performance" msgid="3506743771947250453">"عملکرد"</string>
<string name="total_memory" msgid="7352192982476976453">"کل حافظه"</string>
<string name="average_used" msgid="3022736210190754669">"مصرف متوسط (%)"</string>
@@ -3869,7 +3871,7 @@
<string name="backup_disabled" msgid="6941165814784765643">"پشتیبانگیری غیرفعال است"</string>
<string name="android_version_summary" msgid="2192751442789395445">"بهروزرسانیشده به Android نسخه <xliff:g id="VERSION">%1$s</xliff:g>"</string>
<string name="android_version_pending_update_summary" msgid="3554543810520655076">"بهروزرسانی در دسترس است"</string>
- <string name="disabled_by_policy_title" msgid="1238318274952958846">"عملکرد مجاز نیست"</string>
+ <string name="disabled_by_policy_title" msgid="1238318274952958846">"کنش مجاز نیست"</string>
<string name="disabled_by_policy_title_adjust_volume" msgid="7094547090629203316">"نمیتوان بلندی صدا را تغییر داد"</string>
<string name="disabled_by_policy_title_outgoing_calls" msgid="3805836913095496278">"برقراری تماس تلفنی مجاز نیست"</string>
<string name="disabled_by_policy_title_sms" msgid="1453236584236681105">"استفاده از پیامک مجاز نیست"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"درصورت قفل بودن دستگاه، از تایپ پاسخ یا نوشتارهای دیگر در اعلانها جلوگیری شود"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"غلطگیر املای پیشفرض"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"انتخاب غلطگیر املا"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"استفاده از غلطگیر املا"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"استفاده از غلطگیر املا"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"انتخاب نشده"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(هیچکدام)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4097,11 +4099,11 @@
<item quantity="one"><xliff:g id="NUMBER">%s</xliff:g> ثانیه</item>
<item quantity="other"><xliff:g id="NUMBER">%s</xliff:g> ثانیه</item>
</plurals>
- <string name="automatic_storage_manager_settings" msgid="2403621409625820182">"مدیریت حافظه"</string>
+ <string name="automatic_storage_manager_settings" msgid="2403621409625820182">"مدیریت فضای ذخیرهسازی"</string>
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"برای کمک به خالی کردن فضای ذخیرهسازی، مدیر ذخیرهسازی عکسها و ویدیوهای پشتیبانگیریشده را از دستگاهتان پاک میکند."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"پاک کردن عکسها و ویدئوها"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"مدیر فضای ذخیرهسازی"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"استفاده از مدیر حافظه"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"استفاده از مدیر فضای ذخیرهسازی"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"خودکار"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"دستی"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"هماکنون فضا را خالی کنید"</string>
@@ -4115,7 +4117,7 @@
<string name="double_twist_for_camera_mode_title" msgid="2606032140297556018">"چرخاندن دوربین"</string>
<string name="double_twist_for_camera_mode_summary" msgid="8979914206876018137"></string>
<string name="double_twist_for_camera_suggestion_title" msgid="5932411386316771246">"سریعتر گرفتن خودگرفت"</string>
- <string name="swipe_up_to_switch_apps_summary" msgid="4644068184114154787">"برای رفتن به یک برنامه دیگر، انگشتتان را روی دکمه اصلی به بالا تند بکشید. برای دیدن همه برنامهها، انگشتتان را دوباره تند به بالا بکشید. دیگر در سمت چپ پایین صفحهنمایش، دکمه نمای کلی ندارید."</string>
+ <string name="swipe_up_to_switch_apps_summary" msgid="4644068184114154787">"برای رفتن به یک برنامه دیگر، انگشتتان را روی دکمه اصلی به بالا تند بکشید. برای دیدن همه برنامهها، انگشتتان را دوباره تند بهبالا بکشید. دیگر در سمت چپ پایین صفحهنمایش، دکمه نمای کلی ندارید."</string>
<string name="swipe_up_to_switch_apps_suggestion_title" msgid="7641846365137536128">"دکمه صفحه اصلی جدید را امتحان کنید"</string>
<string name="swipe_up_to_switch_apps_suggestion_summary" msgid="7338653224520387852">"برای تغییر برنامهها، اشاره جدید را روشن کنید"</string>
<string name="ambient_display_title" product="default" msgid="6785677099744344088">"دو ضربه برای چک کردن تلفن"</string>
@@ -4135,9 +4137,9 @@
<string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"برای بررسی زمان، اعلانها و اطلاعات دیگر، روی صفحهنمایش ضربه بزنید."</string>
<string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"تند کشیدن اثرانگشت برای اعلانها"</string>
<string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"تند کشیدن اثرانگشت"</string>
- <string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"برای بررسی اعلانها، انگشتتان را روی حسگر اثرانگشت (در پشت تلفن) تند به پایین بکشید."</string>
- <string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"برای بررسی اعلانها، انگشتتان را روی حسگر اثرانگشت (در پشت رایانه لوحی) تند به پایین بکشید."</string>
- <string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="7950264130913070035">"برای بررسی اعلانها، انگشتتان را روی حسگر اثرانگشت (در پشت دستگاه) تند به پایین بکشید."</string>
+ <string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"برای بررسی اعلانها، انگشتتان را روی حسگر اثرانگشت (در پشت تلفن) تند بهپایین بکشید."</string>
+ <string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"برای بررسی اعلانها، انگشتتان را روی حسگر اثرانگشت (در پشت رایانه لوحی) تند بهپایین بکشید."</string>
+ <string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="7950264130913070035">"برای بررسی اعلانها، انگشتتان را روی حسگر اثرانگشت (در پشت دستگاه) تند بهپایین بکشید."</string>
<string name="fingerprint_swipe_for_notifications_suggestion_title" msgid="948946491233738823">"دیدن سریع اعلانها"</string>
<string name="gesture_setting_on" msgid="7573680730101327866">"روشن"</string>
<string name="gesture_setting_off" msgid="2540159841716890511">"خاموش"</string>
@@ -4152,7 +4154,7 @@
<string name="web_action_section_title" msgid="5563229447734734662">"برنامههای فوری"</string>
<string name="instant_apps_settings" msgid="879003203555847537">"اولویتهای برنامههای فوری"</string>
<string name="domain_url_section_title" msgid="206403507921518321">"برنامههای نصبشده"</string>
- <string name="automatic_storage_manager_activation_warning" msgid="2630083316417707308">"حافظه شما اکنون توسط مدیر حافظه مدیریت میشود"</string>
+ <string name="automatic_storage_manager_activation_warning" msgid="2630083316417707308">"مدیر فضای ذخیرهسازی اکنون فضای ذخیرهسازی شما را مدیریت میکند"</string>
<string name="account_for_section_header" msgid="5975241715840642563">"حسابهای <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
<string name="configure_section_header" msgid="6988981883075615136">"پیکربندی"</string>
<string name="auto_sync_account_title" msgid="2394463123733529506">"همگامسازی خودکار دادهها"</string>
@@ -4246,7 +4248,7 @@
<string name="launch_instant_app" msgid="5251693061228352333">"باز کردن"</string>
<string name="game_storage_settings" msgid="6856911551799175914">"بازی"</string>
<string name="audio_files_title" msgid="3073879661731363935">"فایلهای صوتی"</string>
- <string name="app_info_storage_title" msgid="6643391804949509308">"فضای مورداستفاده"</string>
+ <string name="app_info_storage_title" msgid="6643391804949509308">"فضای استفادهشده"</string>
<string name="webview_uninstalled_for_user" msgid="3407952144444040557">"(برای کاربر <xliff:g id="USER">%s</xliff:g> حذف نصب شد)"</string>
<string name="webview_disabled_for_user" msgid="8057805373224993504">"(برای کاربر <xliff:g id="USER">%s</xliff:g> غیرفعال شد)"</string>
<string name="autofill_app" msgid="3990765434980280073">"سرویس تکمیل خودکار"</string>
@@ -4262,7 +4264,7 @@
<string name="default_theme" msgid="5986996377385956138">"پیشفرض"</string>
<string name="show_operator_name_title" msgid="5056163028128447308">"نام شبکه"</string>
<string name="show_operator_name_summary" msgid="6352180285743777497">"نمایش نام شبکه در نوار وضعیت"</string>
- <string name="storage_manager_indicator" msgid="4255140732848476875">"مدیریت حافظه: <xliff:g id="STATUS">^1</xliff:g>"</string>
+ <string name="storage_manager_indicator" msgid="4255140732848476875">"مدیریت فضای ذخیرهسازی: <xliff:g id="STATUS">^1</xliff:g>"</string>
<string name="storage_manager_indicator_off" msgid="6404056007102580777">"خاموش"</string>
<string name="storage_manager_indicator_on" msgid="5295306384982062320">"روشن"</string>
<string name="install_type_instant" msgid="6248487669862821874">"برنامه فوری"</string>
@@ -4427,7 +4429,7 @@
<string name="carrier_settings_euicc" msgid="7723199738771996732">"شرکت مخابراتی"</string>
<string name="carrier_settings_version" msgid="2657511289029828425">"نسخه تنظیمات"</string>
<string name="call_category" msgid="3418535202893644015">"درحال تماس"</string>
- <string name="video_calling_settings_title" msgid="8011841542502156112">"تماس ویدیویی با شرکت مخابراتی"</string>
+ <string name="video_calling_settings_title" msgid="8011841542502156112">"تماس تصویری با شرکت مخابراتی"</string>
<string name="cdma_system_select_title" msgid="5620679296177526467">"انتخاب سیستم"</string>
<string name="cdma_system_select_summary" msgid="6749131988334321244">"تغییر حالت فراگردی CDMA"</string>
<string name="cdma_system_select_dialogtitle" msgid="7489000866289285390">"انتخاب سیستم"</string>
@@ -4468,7 +4470,7 @@
<string name="force_desktop_mode_summary" msgid="8865007610266954719">"اجرای اجباری حالت دسکتاپ آزمایشی در نمایشگرهای ثانوی"</string>
<string name="hwui_force_dark_title" msgid="3744825212652331461">"لغو اجبار حالت تاریک"</string>
<string name="hwui_force_dark_summary" msgid="2051891908674765817">"ویژگی اجبار حالت تاریک را برای همیشه روشن بودن لغو میکند"</string>
- <string name="privacy_dashboard_title" msgid="8764930992456607513">"حریم خصوصی"</string>
+ <string name="privacy_dashboard_title" msgid="8764930992456607513">"حریمخصوصی"</string>
<string name="privacy_dashboard_summary" msgid="7916431309860824945">"مجوزها، فعالیت حساب، دادههای شخصی"</string>
<string name="contextual_card_dismiss_remove" msgid="1750420285615827309">"حذف"</string>
<string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"حفظ شود"</string>
diff --git a/tests/CarDeveloperOptions/res/values-fi/arrays.xml b/tests/CarDeveloperOptions/res/values-fi/arrays.xml
index 2a383bb..a92007f 100644
--- a/tests/CarDeveloperOptions/res/values-fi/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-fi/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"toimi taustalla"</item>
<item msgid="6423861043647911030">"esteettömyys äänenvoimakkuus"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Sijainti"</item>
+ <item msgid="6656077694190491067">"Sijainti"</item>
+ <item msgid="8790228218278477369">"Sijainti"</item>
+ <item msgid="7836406246005211990">"Värinä"</item>
+ <item msgid="3951439024549922598">"Lue yhteystietoja"</item>
+ <item msgid="8802152411647068">"Muokkaa yhteystietoja"</item>
+ <item msgid="229544934599698735">"Lue puhelulokia"</item>
+ <item msgid="7396102294405899613">"Muokkaa puhelulokia"</item>
+ <item msgid="3597797992398484655">"Lue kalenteria"</item>
+ <item msgid="2705975774250907343">"Muokkaa kalenteria"</item>
+ <item msgid="4668747371441932697">"Sijainti"</item>
+ <item msgid="1487578921720243646">"Lisää ilmoitus"</item>
+ <item msgid="4636080349724146638">"Sijainti"</item>
+ <item msgid="673510900286463926">"Soita numeroon"</item>
+ <item msgid="542083422784609790">"Lue SMS/MMS"</item>
+ <item msgid="1033780373029588436">"Kirjoita SMS/MMS"</item>
+ <item msgid="5647111115517787488">"Vastaanota multimedia- tai tekstiviestejä"</item>
+ <item msgid="8591105601108455893">"Vastaanota multimedia- tai tekstiviestejä"</item>
+ <item msgid="7730995008517841903">"Vastaanota multimedia- tai tekstiviestejä"</item>
+ <item msgid="2613033109026626086">"Vastaanota multimedia- tai tekstiviestejä"</item>
+ <item msgid="3037159047591081136">"Lähetä multimedia- tai tekstiviestejä"</item>
+ <item msgid="4726682243833913568">"Lue SMS/MMS"</item>
+ <item msgid="6555678522277865572">"Kirjoita SMS/MMS"</item>
+ <item msgid="6981734935578130884">"Muokkaa asetuksia"</item>
+ <item msgid="8705854389991425629">"Piirrä päälle"</item>
+ <item msgid="5861356020344153651">"Käytä ilmoituksia"</item>
+ <item msgid="78432174621628659">"Kamera"</item>
+ <item msgid="3986116419882154794">"Tallenna ääntä"</item>
+ <item msgid="4516840825756409490">"Toista ääntä"</item>
+ <item msgid="6811712502798183957">"Lue leikepöytä"</item>
+ <item msgid="2780369012602289114">"Muokkaa leikepöytää"</item>
+ <item msgid="2331359440170850868">"Mediapainikkeet"</item>
+ <item msgid="6133599737122751231">"Äänen painopiste"</item>
+ <item msgid="6844485713404805301">"Pää-äänenvoimakkuus"</item>
+ <item msgid="1600379420669104929">"Puheäänen voimakkuus"</item>
+ <item msgid="6296768210470214866">"Soittoäänen voimakkuus"</item>
+ <item msgid="510690696071629241">"Median äänenvoimakkuus"</item>
+ <item msgid="406861638631430109">"Hälytyksen voimakkuus"</item>
+ <item msgid="4715864795872233884">"Ilmoituksen äänenvoimakkuus"</item>
+ <item msgid="2311478519251301183">"Bluetooth-äänenvoimakkuus"</item>
+ <item msgid="5133991377896747027">"Ei virransäästötilaa"</item>
+ <item msgid="2464189519136248621">"Sijainti"</item>
+ <item msgid="2062677934050803037">"Sijainti"</item>
+ <item msgid="1735171933192715957">"Hae käyttötilastot"</item>
+ <item msgid="1014093788778383554">"Mykistä mikrofoni / poista mykistys"</item>
+ <item msgid="4199297950608622850">"Näytä ilmoitus"</item>
+ <item msgid="2527962435313398821">"Lähetä media"</item>
+ <item msgid="5117506254221861929">"Aktivoi VPN"</item>
+ <item msgid="8291198322681891160">"Kirjoita taustakuva"</item>
+ <item msgid="7106921284621230961">"Apurakenne"</item>
+ <item msgid="4496533640894624799">"Apukuvakaappaus"</item>
+ <item msgid="2598847264853993611">"Tarkastele puhelimen tilaa"</item>
+ <item msgid="9215610846802973353">"Lisää vastaajaviesti"</item>
+ <item msgid="9186411956086478261">"Käytä SIP:tä"</item>
+ <item msgid="6884763100104539558">"Käsittele lähtevä puhelu"</item>
+ <item msgid="125513972170580692">"Sormenjälki"</item>
+ <item msgid="2556071024281275619">"Kehon anturit"</item>
+ <item msgid="617168514928339387">"Tarkastele solulähetyksiä"</item>
+ <item msgid="7134693570516523585">"Käytä imitoitua sijaintia"</item>
+ <item msgid="7224489175375229399">"Tarkastele tallennustilaa"</item>
+ <item msgid="8472735063903258202">"Kirjoita tallennustilaan"</item>
+ <item msgid="4069276819909595110">"Kytke näyttö päälle"</item>
+ <item msgid="1228338896751121025">"Hae tilit"</item>
+ <item msgid="3181581793459233672">"Toimi taustalla"</item>
+ <item msgid="2340936043025374076">"Esteettömyys äänenvoimakkuus"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Lyhyt"</item>
<item msgid="4816511817309094890">"Keskitaso"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Älä salli koskaan"</item>
<item msgid="8184570120217958741">"Salli aina"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normaali"</item>
+ <item msgid="5101233285497327432">"Tyydyttävä"</item>
+ <item msgid="1555861583162930714">"Matala"</item>
+ <item msgid="1719683776264798117">"Kriittinen"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normaali"</item>
+ <item msgid="6107138933849816768">"Keskitaso"</item>
+ <item msgid="182695359839047859">"Matala"</item>
+ <item msgid="8577246509202964244">"Kriittinen"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Pysyvä"</item>
<item msgid="167418068739176448">"Tärkein toiminta"</item>
@@ -396,12 +472,12 @@
<item msgid="3118234477029486741">"0"</item>
</string-array>
<string-array name="wifi_metered_entries">
- <item msgid="4329206416008519163">"Tunnista automaattisesti."</item>
+ <item msgid="4329206416008519163">"Tunnista automaattisesti"</item>
<item msgid="773943026484148895">"Merkitse maksulliseksi"</item>
<item msgid="1008268820118852416">"Merkitse maksuttomaksi"</item>
</string-array>
<string-array name="wifi_privacy_entries">
- <item msgid="6545683814310036454">"Käytä satunnaistettua MAC-osoitetta (oletus)."</item>
+ <item msgid="6545683814310036454">"Käytä satunnaistettua MAC-osoitetta (oletus)"</item>
<item msgid="214234417308375326">"Käytä laitteen MAC-osoitetta"</item>
</string-array>
<string-array name="wifi_hidden_entries">
diff --git a/tests/CarDeveloperOptions/res/values-fi/strings.xml b/tests/CarDeveloperOptions/res/values-fi/strings.xml
index b88338b..b29988e 100644
--- a/tests/CarDeveloperOptions/res/values-fi/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-fi/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Suurenna tai pienennä tekstiä näytöllä."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Pienennä"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Suurenna"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Esimerkkiteksti"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Ihmemaa Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Luku 11: Ozin ihastuttava smaragdikaupunki"</string>
@@ -247,7 +246,7 @@
<string name="band_mode_set" msgid="4962130364076526789">"Aseta"</string>
<string name="band_mode_failed" msgid="8350123391471974137">"Epäonnistui"</string>
<string name="band_mode_succeeded" msgid="5516613616395402809">"Onnistui"</string>
- <string name="sdcard_changes_instructions" msgid="4138217393448114001">"Muutokset tulevat voimaan, kun USB-kaapeli kytketään uudelleen."</string>
+ <string name="sdcard_changes_instructions" msgid="4138217393448114001">"Muutokset tulevat voimaan, kun USB-johto kytketään uudelleen."</string>
<string name="sdcard_settings_screen_mass_storage_text" msgid="7486030250999007641">"Ota USB-massamuisti käyttöön"</string>
<string name="sdcard_settings_total_bytes_label" msgid="6461741874400909157">"Tavuja yhteensä:"</string>
<string name="sdcard_settings_not_present_status" product="nosdcard" msgid="5419085128792417589">"USB-tallennustila ei käytössä."</string>
@@ -310,8 +309,8 @@
<string name="cellular_data_summary" msgid="8817717603450318646">"Salli tiedonsiirto mobiiliverkossa"</string>
<string name="allow_data_usage_title" msgid="5381624105803294315">"Salli roaming-tiedonsiirto"</string>
<string name="roaming" msgid="8860308342135146004">"Roaming"</string>
- <string name="roaming_enable" msgid="2108142024297441116">"Yhdistä verkkoon roaming-tilassa."</string>
- <string name="roaming_disable" msgid="1915440242079953809">"Yhdistä verkkoon roaming-tilassa."</string>
+ <string name="roaming_enable" msgid="2108142024297441116">"Yhdistä verkkoon roaming-tilassa"</string>
+ <string name="roaming_disable" msgid="1915440242079953809">"Yhdistä verkkoon roaming-tilassa"</string>
<string name="roaming_reenable_message" msgid="8388505868655113258">"Verkkoyhteys katkesi, koska poistuit kotiverkkosi alueelta eikä roaming-tilaa ole otettu käyttöön."</string>
<string name="roaming_turn_it_on_button" msgid="4370846458830537578">"Ota käyttöön"</string>
<string name="roaming_warning" msgid="5488050911277592868">"Tästä voi aiheutua huomattavia kuluja."</string>
@@ -356,7 +355,7 @@
<string name="security_enable_widgets_title" msgid="1701510007926738088">"Käytä widgetejä"</string>
<string name="security_enable_widgets_disabled_summary" msgid="4408176087132339331">"Järjestelmänvalvojan estämä"</string>
<string name="lockdown_settings_title" msgid="4534779922580115990">"Näytä lukitusasetus"</string>
- <string name="lockdown_settings_summary" msgid="7270756909878256174">"Näytä virtapainikeasetus, joka poistaa käytöstä Smart Lockin, lukituksen avaamisen sormenjäljellä ja lukitusnäytön ilmoitukset."</string>
+ <string name="lockdown_settings_summary" msgid="7270756909878256174">"Näytä virtapainikeasetus, joka poistaa käytöstä Smart Lockin, lukituksen avaamisen sormenjäljellä ja lukitusnäytön ilmoitukset"</string>
<string name="trust_agents_extend_unlock_title" msgid="3582017561316089951">"Luotettavat tahot vain pitävät avattuna"</string>
<string name="trust_agents_extend_unlock_summary" msgid="3543997596586078084">"Kun tämä on käytössä, luotettavat tahot pitävät puhelimen avattuna pidempään mutta eivät voi enää avata lukittua laitetta."</string>
<string name="trust_lost_locks_screen_title" msgid="3094736590690459372">"Lukitse näyttö ilman luotettavaa tahoa"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Profiilin tiedot"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Tilit"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Sijainti"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Käytä sijaintia"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Käytä sijaintia"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Pois käytöstä"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Käytössä – <xliff:g id="COUNT_1">%1$d</xliff:g> sovellusta voi käyttää sijaintia</item>
@@ -411,7 +410,7 @@
<string name="face_add_max" msgid="8870899421165189413">"Voit lisätä korkeintaan <xliff:g id="COUNT">%d</xliff:g> kasvoa"</string>
<string name="face_intro_error_max" msgid="4024147799079828937">"Et voi lisätä useampia kasvoja"</string>
<string name="face_intro_error_unknown" msgid="3241592604198351134">"Enimmäismäärä kasvoja lisätty"</string>
- <string name="security_settings_face_enroll_error_dialog_title" msgid="3933492758701563051">"Rekisteröitymistä ei suoritettu loppuun."</string>
+ <string name="security_settings_face_enroll_error_dialog_title" msgid="3933492758701563051">"Käyttöönottoa ei suoritettu loppuun asti"</string>
<string name="security_settings_face_enroll_dialog_ok" msgid="1078348922734845090">"OK"</string>
<string name="security_settings_face_enroll_error_timeout_dialog_message" msgid="4917894418448325405">"Kasvojen rekisteröinnin aikaraja on saavutettu. Yritä uudelleen."</string>
<string name="security_settings_face_enroll_error_generic_dialog_message" msgid="5160473187142616862">"Kasvojen rekisteröinti epäonnistui."</string>
@@ -448,7 +447,7 @@
<string name="security_settings_fingerprint_enroll_introduction_cancel_setup" msgid="756928427429893070">"Ohita"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue_setup" msgid="4125977169169671144">"Seuraava"</string>
<string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"Ohitetaanko sormenjälki?"</string>
- <string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"Sormenjälkitunnistus kestää vain minuutin tai pari. Jos ohitat tämän, voit lisätä sormenjäljen myöhemmin asetuksissa."</string>
+ <string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"Sormenjälkitunnistuksen käyttöönotossa menee vain minuutti tai pari. Jos ohitat sen nyt, voit lisätä sormenjälkesi myöhemmin asetuksista."</string>
<string name="lock_screen_intro_skip_title" msgid="5307431665496346914">"Ohitetaanko näytön lukitus?"</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="tablet" msgid="7553945981266845264">"Laitteen suojausominaisuuksia ei oteta käyttöön. Et voi estää tabletin käyttöä, jos se varastetaan, katoaa tai sen tiedot pyyhitään."</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="device" msgid="1378243257238015603">"Laitteen suojausominaisuuksia ei oteta käyttöön. Et voi estää laitteen käyttöä, jos se varastetaan, katoaa tai sen tiedot pyyhitään."</string>
@@ -488,8 +487,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="4111289529758845926">"Valmis"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"Hups, anturi ei ole siinä."</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"Kosketa puhelimen takaosan tunnistinta etusormella."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"Rekisteröitymistä ei suoritettu loppuun."</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Sormenjäljen rekisteröinnin aikaraja on saavutettu. Yritä uudelleen."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"Käyttöönottoa ei suoritettu loppuun asti"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Sormenjäljen käyttöönoton enimmäisaika ylittyi. Yritä uudelleen."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"Sormenjäljen rekisteröinti ei onnistunut. Yritä uudelleen tai käytä eri sormea."</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"Lisää toinen"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"Seuraava"</string>
@@ -549,7 +548,7 @@
<string name="setup_lock_settings_picker_title" product="tablet" msgid="2429667472335773519">"Tabletin suojaaminen"</string>
<string name="setup_lock_settings_picker_title" product="device" msgid="4739290104106645233">"Laitteen suojaaminen"</string>
<string name="setup_lock_settings_picker_title" product="default" msgid="3911582328576859628">"Suojaa puhelintasi"</string>
- <string name="lock_settings_picker_biometrics_added_security_message" msgid="799453282539387294">"Paranna suojausta määrittämällä näytön varalukitustapa"</string>
+ <string name="lock_settings_picker_biometrics_added_security_message" msgid="799453282539387294">"Paranna suojausta määrittämällä näytön varalukitustapa."</string>
<string name="setup_lock_settings_picker_message" product="tablet" msgid="7230799135599877804">"Estä tablettisi luvaton käyttö ottamalla laitteen suojausominaisuudet käyttöön. Valitse näytön lukitusmenetelmä."</string>
<string name="setup_lock_settings_picker_message" product="device" msgid="2098404520816295371">"Estä laitteesi luvaton käyttö ottamalla laitteen suojausominaisuudet käyttöön. Valitse näytön lukitusmenetelmä."</string>
<string name="setup_lock_settings_picker_message" product="default" msgid="2003984443953672040">"Estä puhelimesi luvaton käyttö ottamalla laitteen suojausominaisuudet käyttöön. Valitse näytön lukitusmenetelmä."</string>
@@ -719,7 +718,7 @@
<item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> aktiivinen sovellus</item>
</plurals>
<string name="manage_trust_agents" msgid="8129970926213142261">"Luotettavat tahot"</string>
- <string name="disabled_because_no_backup_security" msgid="8127039979909203528">"Käytä asettamalla ensin näytön lukitus."</string>
+ <string name="disabled_because_no_backup_security" msgid="8127039979909203528">"Käyttääksesi tätä valitse ensin näytön lukitus"</string>
<string name="manage_trust_agents_summary" msgid="2023116850759962248">"–"</string>
<plurals name="manage_trust_agents_summary_on" formatted="false" msgid="5550538038916606097">
<item quantity="other"><xliff:g id="COUNT">%d</xliff:g> aktiivista luotettavaa tahoa</item>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Ota Wi-Fi käyttöön"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Käytä Wi-Fiä"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Käytä Wi-Fi-yhteyttä"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi-Fi-asetukset"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Ota käyttöön ja hallinnoi langattoman yhteyden tukiasemia"</string>
@@ -849,8 +848,8 @@
<string name="wifi_in_airplane_mode" msgid="4729571191578262246">"Lentokonetilassa"</string>
<string name="wifi_notify_open_networks" msgid="4782239203624619655">"Avaa verkkoilmoitus"</string>
<string name="wifi_notify_open_networks_summary" msgid="1383681260705466715">"Ilmoita, kun käytettävissä on laadukkaita julkisia verkkoja."</string>
- <string name="wifi_wakeup" msgid="4963732992164721548">"Ota Wi-Fi käyttöön automaattisesti"</string>
- <string name="wifi_wakeup_summary" msgid="1152699417411690">"Wi-Fi otetaan automaattisesti käyttöön, kun lähistöllä on kotiverkkosi tai muita laadukkaita tallennettuja verkkoja."</string>
+ <string name="wifi_wakeup" msgid="4963732992164721548">"Laita Wi-Fi päälle automaattisesti"</string>
+ <string name="wifi_wakeup_summary" msgid="1152699417411690">"Wi-Fi laitetaan automaattisesti päälle, kun lähistöllä on kotiverkkosi tai muita laadukkaita tallennettuja verkkoja"</string>
<string name="wifi_wakeup_summary_no_location" msgid="3007457288587966962">"Ei käytettävissä, koska sijainti on poistettu käytöstä. Ota "<annotation id="link">"sijainti"</annotation>" käyttöön."</string>
<string name="wifi_wakeup_summary_scanning_disabled" msgid="6820040651529910914">"Ei käytettävissä, koska Wi‑Fi-haku on pois päältä."</string>
<string name="wifi_wakeup_summary_scoring_disabled" msgid="7067018832237903151">"Valitse verkon arviointipalvelu, jotta voit käyttää tätä."</string>
@@ -936,9 +935,9 @@
<string name="wifi_privacy_settings" msgid="4462092795794247809">"Tietosuoja"</string>
<string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"Satunnaistettu MAC-osoite"</string>
<string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"Lisää laite"</string>
- <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"Lisää laite verkkoon <xliff:g id="SSID">%1$s</xliff:g> keskittämällä alla olevaan QR-koodiin."</string>
+ <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"Keskitä QR-koodi alle yhdistääksesi laitteen <xliff:g id="SSID">%1$s</xliff:g>:iin"</string>
<string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"Lue QR-koodi"</string>
- <string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"Yhdistä verkkoon <xliff:g id="SSID">%1$s</xliff:g> keskittämällä alla olevaan QR-koodiin"</string>
+ <string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"Keskitä QR-koodi alle yhdistääksesi <xliff:g id="SSID">%1$s</xliff:g>:iin"</string>
<string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"Yhdistä Wi-Fi-verkkoon lukemalla QR-koodi."</string>
<string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Jaa Wi‑Fi"</string>
<string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"Yhdistä <xliff:g id="SSID">%1$s</xliff:g> ja jaa salasana lukemalla tämä QR-koodi."</string>
@@ -952,7 +951,7 @@
<string name="wifi_dpp_check_connection_try_again" msgid="7144663015219170999">"Tarkista yhteys ja yritä uudelleen"</string>
<string name="wifi_dpp_choose_network" msgid="6251424431594491691">"Valitse verkko"</string>
<string name="wifi_dpp_choose_network_to_connect_device" msgid="6385259857886784285">"Yhdistä laitteesi valitsemalla verkko"</string>
- <string name="wifi_dpp_add_device_to_wifi" msgid="6454198064645462446">"Lisätäänkö laite verkkoon <xliff:g id="SSID">%1$s</xliff:g>?"</string>
+ <string name="wifi_dpp_add_device_to_wifi" msgid="6454198064645462446">"Lisätäänkö laite \"<xliff:g id="SSID">%1$s</xliff:g>\"-verkkoon?"</string>
<string name="wifi_dpp_wifi_shared_with_device" msgid="5713765471758272471">"Wi‑Fi jaettu laitteen kanssa"</string>
<string name="wifi_dpp_add_another_device" msgid="3698441567235301565">"Lisää toinen laite"</string>
<string name="wifi_dpp_choose_different_network" msgid="128515107488187050">"Valitse eri verkko"</string>
@@ -1054,7 +1053,7 @@
<string name="wifi_p2p_disconnect_title" msgid="915880461655863812">"Katkaistaanko yhteys?"</string>
<string name="wifi_p2p_disconnect_message" msgid="3745286932812740784">"Jos katkaiset yhteyden, yhteys laitteeseen <xliff:g id="PEER_NAME">%1$s</xliff:g> katkaistaan."</string>
<string name="wifi_p2p_disconnect_multiple_message" msgid="6051173422663731688">"Jos kosketat Katkaise yhteys, yhteys laitteeseen <xliff:g id="PEER_NAME">%1$s</xliff:g> ja <xliff:g id="PEER_COUNT">%2$s</xliff:g> muuhun laitteeseen katkaistaan."</string>
- <string name="wifi_p2p_cancel_connect_title" msgid="2465200999145769427">"Peruutetaanko kutsu?"</string>
+ <string name="wifi_p2p_cancel_connect_title" msgid="2465200999145769427">"Perutaanko kutsu?"</string>
<string name="wifi_p2p_cancel_connect_message" msgid="3752679335020392154">"Haluatko peruuttaa laitteelle <xliff:g id="PEER_NAME">%1$s</xliff:g> lähetetyn yhteydenmuodostuskutsun?"</string>
<string name="wifi_p2p_delete_group_message" msgid="3206660449067701089">"Unohdetaanko tämä ryhmä?"</string>
<string name="wifi_hotspot_checkbox_text" msgid="12062341344410520">"Wi‑Fi-hotspot"</string>
@@ -1070,7 +1069,7 @@
<string name="wifi_hotspot_ap_band_title" msgid="3485744480410441949">"AP-taajuus"</string>
<string name="wifi_hotspot_footer_info_regular" msgid="3876006922622827363">"Hotspot-ominaisuudella voit luoda muille laitteillesi Wi-Fi-verkon. Ominaisuus jakaa internetyhteyden muille laitteille mobiilidatayhteydellä. Lisämaksuja mobiilidatan käytöstä voidaan periä."</string>
<string name="wifi_hotspot_footer_info_local_only" msgid="3339582350894639261">"Sovellukset voivat luoda hotspotin ja jakaa sisältöä lähellä olevien laitteiden kanssa."</string>
- <string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"Poista hotspot käytöstä automaattisesti"</string>
+ <string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"Laita hotspot pois päältä automaattisesti"</string>
<string name="wifi_hotspot_auto_off_summary" msgid="3866769400624802105">"Wi‑Fi-hotspot poistetaan käytöstä, jos laitteita ei ole yhdistetty."</string>
<string name="wifi_tether_starting" msgid="7676952148471297900">"Otetaan yhteyspiste käyttöön..."</string>
<string name="wifi_tether_stopping" msgid="7478561853791953349">"Poistetaan yhteyspiste käytöstä..."</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Mobiili"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Jos Wi-Fi-yhteys ei ole käytettävissä, käytä mobiiliverkkoa"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Jos mobiiliverkkoa ei ole saatavilla, käytä Wi-Fi-yhteyttä."</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Soita Wi-Fi-yhteyden kautta. Jos Wi-Fi-yhteys katkeaa, puhelu päättyy."</string>
@@ -1226,8 +1228,8 @@
<string name="night_display_summary_on_auto_mode_never" msgid="5461580863060506687">"Ei sammu automaattisesti"</string>
<string name="night_display_summary_on_auto_mode_custom" msgid="2200631112239399233">"Sammuu automaattisesti kello <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="night_display_summary_on_auto_mode_twilight" msgid="8386769601369289561">"Sammuu automaattisesti, kun aurinko nousee"</string>
- <string name="night_display_activation_on_manual" msgid="8379477527072027346">"Ota käyttöön nyt"</string>
- <string name="night_display_activation_off_manual" msgid="7776082151269794201">"Poista käytöstä nyt"</string>
+ <string name="night_display_activation_on_manual" msgid="8379477527072027346">"Laita päälle"</string>
+ <string name="night_display_activation_off_manual" msgid="7776082151269794201">"Laita pois päältä"</string>
<string name="night_display_activation_on_twilight" msgid="5610294051700287249">"Käytössä auringonnousuun asti"</string>
<string name="night_display_activation_off_twilight" msgid="6846727701281556110">"Pois käytöstä auringonlaskuun asti"</string>
<string name="night_display_activation_on_custom" msgid="4761140206778957611">"Käytössä <xliff:g id="ID_1">%1$s</xliff:g> asti"</string>
@@ -1343,7 +1345,7 @@
<string name="scanning_status_text_wifi_on_ble_on" msgid="6370507836346838473">"Wi-Fi- ja Bluetooth-haku ovat käytössä."</string>
<string name="scanning_status_text_wifi_on_ble_off" msgid="8205014713732412608">"Wi‑Fi-haku on käytössä, Bluetooth-haku ei ole käytössä"</string>
<string name="scanning_status_text_wifi_off_ble_on" msgid="7400522456303307057">"Bluetooth-haku on käytössä, Wi-Fi-haku ei ole käytössä"</string>
- <string name="scanning_status_text_wifi_off_ble_off" msgid="8575026386237481457">"Wi-Fi- ja Bluetooth-haku eivät ole käytössä."</string>
+ <string name="scanning_status_text_wifi_off_ble_off" msgid="8575026386237481457">"Wi-Fi- ja Bluetooth-haku eivät ole käytössä"</string>
<string name="status_meid_number" msgid="8756271256760479835">"MEID"</string>
<string name="status_icc_id" msgid="9191847562997702709">"ICCID"</string>
<string name="status_data_network_type" msgid="2344720457353394909">"Mobiilidataverkon tyyppi"</string>
@@ -1386,8 +1388,8 @@
<string name="sd_mount_summary" product="default" msgid="6849124618494311233"></string>
<string name="sd_format" product="nosdcard" msgid="918370986254863144">"Tyhjennä USB-tila"</string>
<string name="sd_format" product="default" msgid="1346245995138883960">"Tyhjennä SD-kortti"</string>
- <string name="sd_format_summary" product="nosdcard" msgid="1179857727779521920">"Poistaa kaikki sisäisen USB-tallennustilan tiedot, kuten musiikin tai valokuvat."</string>
- <string name="sd_format_summary" product="default" msgid="4284028411908176234">"Poistaa kaikki SD-kortin tiedot, kuten musiikin ja valokuvat"</string>
+ <string name="sd_format_summary" product="nosdcard" msgid="1179857727779521920">"Poistaa kaikki sisäisen USB-tallennustilan tiedot, kuten musiikin tai kuvat."</string>
+ <string name="sd_format_summary" product="default" msgid="4284028411908176234">"Poistaa kaikki SD-kortin tiedot, kuten musiikin ja kuvat"</string>
<string name="memory_clear_cache_title" msgid="4306793268129306684">"Tyhjennetäänkö välimuistitiedot?"</string>
<string name="memory_clear_cache_message" msgid="6723120398411410031">"Sovellusten välimuistit tyhjennetään."</string>
<string name="mtp_ptp_mode_summary" msgid="6074099855478444183">"MTP- tai PTP-toiminto on käytössä"</string>
@@ -1446,7 +1448,7 @@
<string name="storage_internal_unmount_details" msgid="4667435317528624039"><b>"Kun tämä <xliff:g id="NAME_0">^1</xliff:g> poistetaan, siihen tallennetut sovellukset lakkaavat toimimasta eivätkä mediatiedostot ole käytettävissä ennen kuin se liitetään uudelleen."</b>" \n\n<xliff:g id="NAME_1">^1</xliff:g> on alustettu niin, että se toimii vain tämän laitteen kanssa."</string>
<string name="storage_internal_forget_details" msgid="5655856574682184453">"Jos haluat käyttää tallennuslaitteen <xliff:g id="NAME">^1</xliff:g> sisältämiä sovelluksia, kuvia tai tietoja, liitä se uudelleen. \n\nVoit myös halutessasi unohtaa tämän tallennuslaitteen, jos se ei ole käytettävissä. \n\nJos päätät unohtaa laitteen, menetät kaikki sen sisältämät tiedot lopullisesti. \n\nVoit asentaa sovellukset uudelleen myöhemmin, mutta niiden laitteelle tallentamat tiedot menetetään."</string>
<string name="storage_internal_forget_confirm_title" msgid="331032276130605241">"Unohdetaanko <xliff:g id="NAME">^1</xliff:g>?"</string>
- <string name="storage_internal_forget_confirm" msgid="3052483375203727176">"Kaikki kohteen (<xliff:g id="NAME">^1</xliff:g>) sovellukset, valokuvat ja tiedot poistetaan pysyvästi."</string>
+ <string name="storage_internal_forget_confirm" msgid="3052483375203727176">"Kaikki kohteen (<xliff:g id="NAME">^1</xliff:g>) sovellukset, kuvat ja tiedot poistetaan pysyvästi."</string>
<string name="storage_detail_apps" msgid="8154648512504196820">"Sovellukset"</string>
<string name="storage_detail_images" msgid="6996202225684468964">"Kuvahaku"</string>
<string name="storage_detail_videos" msgid="6030983354721080849">"Videot"</string>
@@ -1547,7 +1549,7 @@
<string name="apn_type" msgid="6725346490902871146">"APN-tyyppi"</string>
<string name="apn_protocol" msgid="1240197323563960912">"APN-protokolla"</string>
<string name="apn_roaming_protocol" msgid="6913336248771263497">"APN roaming -protokolla"</string>
- <string name="carrier_enabled" msgid="1819916725305365581">"Ota APN käyttöön / poista se käytöstä."</string>
+ <string name="carrier_enabled" msgid="1819916725305365581">"Ota APN käyttöön / pois käytöstä"</string>
<string name="carrier_enabled_summaryOn" msgid="6219221535461945771">"APN otettu käyttöön"</string>
<string name="carrier_enabled_summaryOff" msgid="4093019532796386622">"APN poistettu käytöstä"</string>
<string name="bearer" msgid="4378444317087536401">"Bearer"</string>
@@ -1567,7 +1569,7 @@
<string name="menu_restore" msgid="3799288817317293115">"Palauta oletukset"</string>
<string name="restore_default_apn_completed" msgid="5671734152740058937">"APN-oletusasetukset on palautettu."</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"Palautusvalinnat"</string>
- <string name="reset_dashboard_summary" msgid="8778383341461126642">"Voit nollata verkon, sovellusten tai laitteen asetukset."</string>
+ <string name="reset_dashboard_summary" msgid="8778383341461126642">"Voit nollata verkon, sovellusten tai laitteen asetukset"</string>
<string name="reset_network_title" msgid="8944059136930806211">"Nollaa Wi-Fin, mobiiliverkon ja Bluetoothin asetukset"</string>
<string name="reset_network_desc" msgid="4982633363916261109">"Tämä nollaa kaikki verkkoasetukset, esimerkiksi seuraavat:\n\n"<li>"Wi‑Fi"</li>\n<li>"Mobiilidata"</li>\n<li>"Bluetooth"</li></string>
<string name="reset_esim_title" msgid="7630781767040831893">"Tyhjennä ladatut SIM-kortit"</string>
@@ -1594,8 +1596,8 @@
<string name="master_clear_desc_erase_external_storage" product="default" msgid="9003555775524798797">\n\n"Jos haluat poistaa musiikin, kuvat ja muut käyttäjän tiedot, "<b>"SD-kortti"</b>" tulee tyhjentää."</string>
<string name="erase_external_storage" product="nosdcard" msgid="8989746770347525207">"Tyhjennä USB-tallennustila"</string>
<string name="erase_external_storage" product="default" msgid="194249742376770215">"Tyhjennä SD-kortti"</string>
- <string name="erase_external_storage_description" product="nosdcard" msgid="8020275102431496261">"Poista kaikki sisäisen USB-tallennustilan tiedot, kuten musiikki tai valokuvat."</string>
- <string name="erase_external_storage_description" product="default" msgid="5029355708082861798">"Poista kaikki SD-kortin tiedot, kuten musiikki tai valokuvat."</string>
+ <string name="erase_external_storage_description" product="nosdcard" msgid="8020275102431496261">"Poista kaikki sisäisen USB-tallennustilan tiedot, kuten musiikki tai kuvat."</string>
+ <string name="erase_external_storage_description" product="default" msgid="5029355708082861798">"Poista kaikki SD-kortin tiedot, kuten musiikki tai kuvat."</string>
<string name="master_clear_button_text" product="tablet" msgid="8000547818499182920">"Pyyhi kaikki tiedot"</string>
<string name="master_clear_button_text" product="default" msgid="8000547818499182920">"Pyyhi kaikki tiedot"</string>
<string name="master_clear_final_desc" msgid="5189365498015339294">"Kaikki henkilökohtaiset tietosi ja ladatut sovellukset poistetaan. Toimintoa ei voi kumota."</string>
@@ -1619,11 +1621,11 @@
<string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"Kun Data Saver on käytössä, puhelinta ei voi käyttää modeemina eikä kannettavien hotspotien käyttäminen onnistu."</string>
<string name="usb_title" msgid="7480927657535578688">"USB"</string>
<string name="usb_tethering_button_text" msgid="6242228383142012332">"Internetin jakaminen USB:n kautta"</string>
- <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Jaa puhelimen internetyhteys USB:llä."</string>
+ <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Jaa puhelimen internetyhteys USB:llä"</string>
<string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"Jaa tabletin internetyhteys USB:llä"</string>
<string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"Jaettu Bluetooth-yhteys"</string>
<string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"Jaa tabletin internetyhteys Bluetoothilla"</string>
- <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Jaa puhelimen internetyhteys Bluetoothilla."</string>
+ <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Jaa puhelimen internetyhteys Bluetoothilla"</string>
<string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"<xliff:g id="DEVICE_NAME">%1$d</xliff:g> jakaa internetyhteyden Bluetoothilla"</string>
<string name="bluetooth_tethering_overflow_error" msgid="6946561351369376943">"Voidaan yhdistää korkeintaan <xliff:g id="MAXCONNECTION">%1$d</xliff:g> laitteeseen."</string>
<string name="bluetooth_untether_blank" msgid="5428300773782256084">"Jaettu internetyhteys katkaistaan laitteesta <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
@@ -1801,7 +1803,7 @@
<string name="auto_launch_label" msgid="47089737922907379">"Avaa oletuksena"</string>
<string name="auto_launch_label_generic" msgid="7865828543459493308">"Oletukset"</string>
<string name="screen_compatibility_label" msgid="3638271673726075815">"Ruudun yhteensopivuus"</string>
- <string name="permissions_label" msgid="7341733648403464213">"Käyttöoikeudet"</string>
+ <string name="permissions_label" msgid="7341733648403464213">"Luvat"</string>
<string name="cache_header_label" msgid="3202284481380361966">"Välimuisti"</string>
<string name="clear_cache_btn_text" msgid="107507684844780651">"Tyhjennä välimuisti"</string>
<string name="cache_size_label" msgid="6205173678102220499">"Välimuisti"</string>
@@ -1827,7 +1829,7 @@
<string name="app_factory_reset" msgid="8718986000278776272">"Poista päivitykset"</string>
<string name="auto_launch_enable_text" msgid="3372898942144027341">"Olet valinnut tämän sovelluksen käynnistettäväksi oletuksena tiettyjen toimintojen yhteydessä."</string>
<string name="always_allow_bind_appwidgets_text" msgid="2286211654774611037">"Olet antanut sovellukselle oikeuden luoda widgetejä ja käyttää niiden tietoja."</string>
- <string name="auto_launch_disable_text" msgid="8560921288036801416">"Oletuksia ei asetettu."</string>
+ <string name="auto_launch_disable_text" msgid="8560921288036801416">"Ei oletuksia valittuina."</string>
<string name="clear_activities" msgid="2068014972549235347">"Tyhjennä oletukset"</string>
<string name="screen_compatibility_text" msgid="1768064020294301496">"Tätä sovellusta ei välttämättä ole suunniteltu näytöllesi sopivaksi. Voit muuttaa asetuksia täältä."</string>
<string name="ask_compatibility" msgid="6687958195768084807">"Kysy käynnistettäessä"</string>
@@ -1968,9 +1970,9 @@
<string name="keyboard_assistance_category" msgid="2276351807419818125">"Näppäimistön apuvälineet"</string>
<string name="physical_keyboard_title" msgid="3508591962962814313">"Fyysinen näppäimistö"</string>
<string name="show_ime" msgid="7322620473198763563">"Näytä virtuaalinen näppäimistö"</string>
- <string name="show_ime_summary" msgid="3246628154011464373">"Pidä näytöllä, kun fyysinen näppäimistö on aktiivinen."</string>
+ <string name="show_ime_summary" msgid="3246628154011464373">"Pidä näytöllä, kun fyysinen näppäimistö on aktiivinen"</string>
<string name="keyboard_shortcuts_helper" msgid="6574386807271399788">"Pikanäppäinapuri"</string>
- <string name="keyboard_shortcuts_helper_summary" msgid="8024313306403779742">"Näytä käytettävissä olevat pikanäppäimet."</string>
+ <string name="keyboard_shortcuts_helper_summary" msgid="8024313306403779742">"Näytä käytettävissä olevat pikanäppäimet"</string>
<string name="language_and_input_for_work_category_title" msgid="2053255944038892588">"Työprofiilin näppäimistöt ja työkalut"</string>
<string name="virtual_keyboards_for_work_title" msgid="3968291646938204523">"Virtuaalinen näppäimistö työkäyttöön"</string>
<string name="default_keyboard_layout" msgid="9171704064451242230">"Oletus"</string>
@@ -2070,7 +2072,7 @@
<string name="accessibility_toggle_large_pointer_icon_title" msgid="9127905775116570565">"Suuri hiiren osoitin"</string>
<string name="accessibility_disable_animations" msgid="8378441317115710009">"Poista animaatiot"</string>
<string name="accessibility_toggle_master_mono_title" msgid="899550848196702565">"Monoääni"</string>
- <string name="accessibility_toggle_master_mono_summary" msgid="3847052868469033235">"Yhdistä kanavat ääntä toistettaessa."</string>
+ <string name="accessibility_toggle_master_mono_summary" msgid="3847052868469033235">"Yhdistä kanavat ääntä toistettaessa"</string>
<string name="accessibility_toggle_master_balance_title" msgid="8723492001092647562">"Äänitasapaino"</string>
<string name="accessibility_toggle_master_balance_left_label" msgid="8531986342666527970">"Vasen"</string>
<string name="accessibility_toggle_master_balance_right_label" msgid="7757024572140589558">"Oikea"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Ilmoitusvärinä"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Soittoäänen värinä"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Kosketusvärinä"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Käytä palvelua"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Käytä värinkorjausta"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Käytä tekstityksiä"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Käytä palvelua"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Käytä värinkorjausta"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Käytä tekstityksiä"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Jatka"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Kuulolaitteet"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Ei yhdistettyjä kuulolaitteita"</string>
@@ -2277,13 +2279,13 @@
<string name="battery_tip_smart_battery_summary" msgid="5344821856478265778">"Ota Virranhallinta käyttöön"</string>
<string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"Ota Virransäästö käyttöön"</string>
<string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Akku voi loppua odotettua aiemmin"</string>
- <string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"Virransäästö on käytössä"</string>
+ <string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"Virransäästö on päällä"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"Joitakin toimintoja voidaan rajoittaa"</string>
- <string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Puhelinta on käytetty tavallista enemmän"</string>
+ <string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Puhelinta käytetty tavallista enemmän"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"Tablettia on käytetty tavallista enemmän"</string>
<string name="battery_tip_high_usage_title" product="device" msgid="8304138287288309490">"Laitetta on käytetty tavallista enemmän"</string>
<string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"Akku voi loppua odotettua aiemmin"</string>
- <string name="battery_tip_dialog_message" product="default" msgid="8453700079047810964">"Puhelinta on käytetty tavallista enemmän. Akku voi loppua odotettua aiemmin.\n\nKäytetyimmät sovellukset edellisen latauksen jälkeen:"</string>
+ <string name="battery_tip_dialog_message" product="default" msgid="8453700079047810964">"Puhelinta käytetty tavallista enemmän. Akku voi loppua odotettua aiemmin.\n\nKäytetyimmät sovellukset edellisen latauksen jälkeen:"</string>
<string name="battery_tip_dialog_message" product="tablet" msgid="6489981050645444068">"Tablettia on käytetty tavallista enemmän. Akku voi loppua odotettua aiemmin.\n\nKäytetyimmät sovellukset edellisen latauksen jälkeen:"</string>
<string name="battery_tip_dialog_message" product="device" msgid="6348123094674390337">"Laitetta on käytetty tavallista enemmän. Akku voi loppua odotettua aiemmin.\n\nKäytetyimmät sovellukset edellisen latauksen jälkeen:"</string>
<string name="battery_tip_dialog_message_footer" msgid="1118827395267487197">"Sisältää virtaa paljon kuluttavat taustatoiminnot"</string>
@@ -2297,7 +2299,7 @@
</plurals>
<plurals name="battery_tip_restrict_summary" formatted="false" msgid="984148373944071669">
<item quantity="other">%2$d sovellusta käyttää paljon akkua taustalla</item>
- <item quantity="one">%1$s sovellus käyttää paljon akkua taustalla</item>
+ <item quantity="one">%1$s käyttää paljon akkua taustalla</item>
</plurals>
<plurals name="battery_tip_restrict_handled_summary" formatted="false" msgid="469696766640020557">
<item quantity="other">Nämä sovellukset eivät voi toimia taustalla</item>
@@ -2449,22 +2451,22 @@
<string name="battery_saver_auto_no_schedule" msgid="739814529432092706">"Ei aikataulua"</string>
<string name="battery_saver_auto_routine" msgid="886514412067906980">"Perustuu ohjelmaasi"</string>
<string name="battery_saver_auto_percentage" msgid="5791982309331921556">"Perustuu varausprosenttiin"</string>
- <string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"Virransäästö käynnistyy, jos akku näyttää todennäköisesti loppuvan ennen seuraavaa tavallista lataamista."</string>
- <string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"Käynnistyy, kun taso on <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
+ <string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"Virransäästö käynnistyy, jos akku näyttää todennäköisesti loppuvan ennen seuraavaa tavallista lataamista"</string>
+ <string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"Menee päälle kun jäljellä on <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Luo aikataulu"</string>
<string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"Poista käytöstä, kun ladattu täyteen"</string>
- <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"Virransäästö poistetaan käytöstä, kun puhelimen varaus on <xliff:g id="PERCENT">%1$s</xliff:g>."</string>
- <string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"Virransäästö poistetaan käytöstä, kun tabletin varaus on <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
- <string name="battery_saver_sticky_description_new" product="device" msgid="5056520668081504111">"Virransäästö poistetaan käytöstä, kun laitteen varaus on <xliff:g id="PERCENT">%1$s</xliff:g>."</string>
+ <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"Virransäästö menee pois päältä, kun puhelimen varaus on <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
+ <string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"Virransäästö menee pois päältä, kun tabletin varaus on <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
+ <string name="battery_saver_sticky_description_new" product="device" msgid="5056520668081504111">"Virransäästö menee pois päältä, kun laitteen varaus on <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Ota käyttöön"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Käytä virransäästöä"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Käytä virransäästöä"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Käynnistä automaattisesti"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Ei koskaan"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"kun akun varaus on <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<string name="battery_percentage" msgid="7782252476471033843">"Akun varaus prosentteina"</string>
- <string name="battery_percentage_description" msgid="9219875229166700610">"Näytä akun varaus prosentteina tilapalkissa."</string>
+ <string name="battery_percentage_description" msgid="9219875229166700610">"Näytä akun varaus prosentteina tilapalkissa"</string>
<string name="process_stats_summary_title" msgid="9189588417488537954">"Käsittelytiedot"</string>
<string name="process_stats_summary" msgid="8077998499161221885">"Käsittelyn tarkat tiedot"</string>
<string name="app_memory_use" msgid="5126237308545653706">"Muistin käyttö"</string>
@@ -2546,7 +2548,7 @@
<string name="emergency_tone_summary" msgid="8035940153401622240">"Aseta toiminta hätäpuhelun tapauksessa"</string>
<string name="privacy_settings_title" msgid="3573891462732375772">"Varmuuskopiointi"</string>
<string name="backup_summary_state_on" msgid="1725597360282574647">"Käytössä"</string>
- <string name="backup_summary_state_off" msgid="7138020503288730492">"Ei käytössä"</string>
+ <string name="backup_summary_state_off" msgid="7138020503288730492">"Ei päällä"</string>
<string name="backup_section_title" msgid="8177209731777904656">"Varmuuskopiointi & palautus"</string>
<string name="personal_data_section_title" msgid="9161854418510071558">"Henkilötiedot"</string>
<string name="backup_data_title" msgid="4461508563849583624">"Tietojen varmuuskopiointi"</string>
@@ -2561,7 +2563,7 @@
<string name="backup_erase_dialog_title" msgid="8178424339104463014"></string>
<string name="backup_erase_dialog_message" msgid="8767843355330070902">"Haluatko lopettaa Wi-Fi-salasanojen, kirjanmerkkien, muiden asetuksien ja sovellustietojen varmuuskopioinnin ja poistaa kaikki kopiot Googlen palvelimilta?"</string>
<string name="fullbackup_erase_dialog_message" msgid="2588536036471144070">"Lopetetaanko laitteen tietojen (kuten Wi-Fi-salasanojen ja soittohistorian) ja sovellusten tietojen (kuten asetusten ja sovellusten tallentamien tiedostojen) automaattinen varmuuskopiointi? Myös vanhat varmuuskopiot poistetaan etäpalvelimilta."</string>
- <string name="fullbackup_data_summary" msgid="406274198094268556">"Varmuuskopioi laitteen tiedot (kuten Wi-Fi-salasanat ja soittohistoria) sekä sovellusten tiedot (kuten asetukset ja sovellusten tallentamat tiedostot) automaattisesti etäyhteyden kautta.\n\nKun otat automaattisen varmuuskopioinnin käyttöön, laitteen ja sovellusten tiedot varmuuskopioidaan säännöllisesti etäyhteyden kautta. Sovellusten tietoihin voi sisältyä mitä tahansa tietoja, joita sovellukset ovat tallentaneet (kehittäjien asetuksien perusteella). Ne saattavat sisältää myös arkaluontoisia tietoja, kuten yhteystietoja, viestejä ja valokuvia."</string>
+ <string name="fullbackup_data_summary" msgid="406274198094268556">"Varmuuskopioi laitteen tiedot (kuten Wi-Fi-salasanat ja soittohistoria) sekä sovellusten tiedot (kuten asetukset ja sovellusten tallentamat tiedostot) automaattisesti etäyhteyden kautta.\n\nKun otat automaattisen varmuuskopioinnin käyttöön, laitteen ja sovellusten tiedot varmuuskopioidaan säännöllisesti etäyhteyden kautta. Sovellusten tietoihin voi sisältyä mitä tahansa tietoja, joita sovellukset ovat tallentaneet (kehittäjien asetuksien perusteella). Ne saattavat sisältää myös arkaluontoisia tietoja, kuten yhteystietoja, viestejä ja kuvia."</string>
<string name="device_admin_settings_title" msgid="2074319456047334589">"Laitteenhallinnan asetukset"</string>
<string name="active_device_admin_msg" msgid="6929247869516924549">"Laitteenhallintasovellus"</string>
<string name="remove_device_admin" msgid="4413438593788336400">"Poista laitteenhallintasovellus käytöstä"</string>
@@ -2668,7 +2670,7 @@
<string name="data_usage_menu_sim_cards" msgid="8508154611676507088">"SIM-kortit"</string>
<string name="data_usage_cellular_data_summary" msgid="9162777397135709280">"Keskeytetään rajalla."</string>
<string name="account_settings_menu_auto_sync" msgid="2673669556006027506">"Tietojen autom. synkronointi"</string>
- <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"Omien tietojen autom. synkron."</string>
+ <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"Oman datan autosynkronointi"</string>
<string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Työtietojen autom. synkron."</string>
<string name="data_usage_change_cycle" msgid="447761920472170031">"Muuta jaksoa…"</string>
<string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"Tiedonsiirtojakson nollauspäivä (kk):"</string>
@@ -2676,7 +2678,7 @@
<string name="data_usage_label_foreground" msgid="2471091128648754601">"Etualalla"</string>
<string name="data_usage_label_background" msgid="1618794447370396845">"Taustalla"</string>
<string name="data_usage_app_restricted" msgid="7569077654579299326">"rajoitettu"</string>
- <string name="data_usage_disable_mobile" msgid="4125335076749119451">"Poistetaanko mobiilidata käytöstä?"</string>
+ <string name="data_usage_disable_mobile" msgid="4125335076749119451">"Laitetaanko mobiilidata pois päältä?"</string>
<string name="data_usage_disable_mobile_limit" msgid="1937796699758613667">"Aseta mobiilitiedonsiirtoraja"</string>
<string name="data_usage_disable_4g_limit" msgid="7131367986548147266">"Aseta 4G-datankäyttöraja"</string>
<string name="data_usage_disable_3g_limit" msgid="6746819313032692220">"Aseta 2G-3G-datankäyttöraja"</string>
@@ -2870,8 +2872,8 @@
<string name="user_add_user_title" msgid="2320897397066676472">"Lisätäänkö uusi käyttäjä?"</string>
<string name="user_add_user_message_long" msgid="686637203224195465">"Voit jakaa tämän laitteen muiden kanssa luomalla lisää käyttäjiä. Kullakin käyttäjällä on oma tilansa, jota he voivat muokata esimerkiksi omilla sovelluksilla ja taustakuvilla. Käyttäjät voivat myös muokata laiteasetuksia, kuten Wi‑Fi-asetuksia, jotka vaikuttavat laitteen kaikkiin käyttäjiin.\n\nKun lisäät uuden käyttäjän, hänen tulee määrittää oman tilansa asetukset.\n\nKaikki käyttäjät voivat päivittää muiden käyttäjien sovelluksia. Esteettömyysominaisuuksia tai ‑palveluita ei välttämättä siirretä uudelle käyttäjälle."</string>
<string name="user_add_user_message_short" msgid="1802594476285458254">"Kun lisäät uuden käyttäjän, hänen tulee määrittää oman tilansa asetukset.\n\nKaikki käyttäjät voivat päivittää sovelluksia muille käyttäjille."</string>
- <string name="user_setup_dialog_title" msgid="6748950002206392396">"Määritetäänkö käyttäjän asetukset nyt?"</string>
- <string name="user_setup_dialog_message" msgid="2988559933258353919">"Varmista, että käyttäjä voi vastaanottaa laitteen ja määrittää oman tilansa."</string>
+ <string name="user_setup_dialog_title" msgid="6748950002206392396">"Lisätäänkö käyttäjä nyt?"</string>
+ <string name="user_setup_dialog_message" msgid="2988559933258353919">"Varmista, että käyttäjä voi ottaa laitteen nyt ja määrittää oman tilansa."</string>
<string name="user_setup_profile_dialog_message" msgid="7611900802824048526">"Määritetäänkö profiilin asetukset nyt?"</string>
<string name="user_setup_button_setup_now" msgid="4941459406266856176">"Määritä nyt"</string>
<string name="user_setup_button_setup_later" msgid="6596031428556518752">"Ei nyt"</string>
@@ -2907,13 +2909,13 @@
<string name="user_enable_calling_confirm_message" msgid="2490126715153125970">"Soittohistoria jaetaan tämän käyttäjän kanssa."</string>
<string name="user_enable_calling_and_sms_confirm_title" msgid="4153856398523366976">"Otetaanko puhelut ja tekstiviestit käyttöön?"</string>
<string name="user_enable_calling_and_sms_confirm_message" msgid="3278802798876095734">"Soitto- ja tekstiviestihistoria jaetaan tämän käyttäjän kanssa."</string>
- <string name="emergency_info_title" msgid="1522609271881425375">"Hätätilannetiedot"</string>
+ <string name="emergency_info_title" msgid="1522609271881425375">"Vaaratiedot"</string>
<string name="emergency_info_summary" msgid="7280464759837387342">"Käyttäjän <xliff:g id="USER_NAME">%1$s</xliff:g> tiedot ja yhteystiedot"</string>
<string name="application_restrictions" msgid="6871981013736536763">"Sovellusten ja sisällön salliminen"</string>
<string name="apps_with_restrictions_header" msgid="8656739605673756176">"Rajoitetut sovellukset"</string>
<string name="apps_with_restrictions_settings_button" msgid="5065896213467171744">"Laajenna sovelluksen asetuksia"</string>
<string name="nfc_payment_settings_title" msgid="5070077706735415291">"Napauttamalla maksaminen"</string>
- <string name="nfc_payment_how_it_works" msgid="7607901964687787177">"Toimintatapa"</string>
+ <string name="nfc_payment_how_it_works" msgid="7607901964687787177">"Miten se toimii"</string>
<string name="nfc_payment_no_apps" msgid="8844440783395420860">"Maksa puhelimella myymälöissä"</string>
<string name="nfc_payment_default" msgid="7869273092463612271">"Oletusmaksusovellus"</string>
<string name="nfc_payment_default_not_set" msgid="955804193510335338">"Ei asetettu"</string>
@@ -2923,7 +2925,7 @@
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"Paitsi jos jokin toinen maksusovellus on auki"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"Maksa napauttamalla maksamisen päätteellä tällä sovelluksella:"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"Maksaminen päätteellä"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Määritä maksusovellus. Sen jälkeen sinun tarvitsee vain pitää puhelimen takaosaa etämaksut hyväksyvää maksupäätettä vasten."</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Asenna maksusovellus. Maksa ostoksesi pitämällä puhelimen takaosaa lähimaksupäätettä vasten."</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"Selvä"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"Lisää…"</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"Valitaanko asetukseksi?"</string>
@@ -3195,7 +3197,7 @@
<string name="zen_mode_settings_category" msgid="5601680733422424922">"Kun älä häiritse -tila on käytössä"</string>
<string name="zen_mode_restrict_notifications_title" msgid="7486753018073540477">"Rajoita ilmoituksia"</string>
<string name="zen_mode_restrict_notifications_mute" msgid="2673665450311184875">"Ei ilmoitusääniä"</string>
- <string name="zen_mode_restrict_notifications_mute_summary" msgid="1696217042353376674">"Näet ilmoituksia näytöllä."</string>
+ <string name="zen_mode_restrict_notifications_mute_summary" msgid="1696217042353376674">"Näet ilmoitukset näytölläsi"</string>
<string name="zen_mode_restrict_notifications_mute_footer" msgid="3049522809520549054">"Puhelin ei anna äänimerkkiä eikä värise ilmoituksen saapuessa."</string>
<string name="zen_mode_restrict_notifications_hide" msgid="3296933643539682552">"Ei ilmoitusgrafiikoita tai ‑ääntä"</string>
<string name="zen_mode_restrict_notifications_hide_summary" msgid="1449301153755270168">"Et näe tai kuule ilmoituksia."</string>
@@ -3210,7 +3212,7 @@
<string name="zen_mode_block_effects_screen_on" msgid="1042489123800404560">"Kun näyttö on päällä"</string>
<string name="zen_mode_block_effects_screen_off" msgid="6380935819882837552">"Kun näyttö on pois päältä"</string>
<string name="zen_mode_block_effect_sound" msgid="1499243540186357631">"Mykistä ääni ja sammuta värinä"</string>
- <string name="zen_mode_block_effect_intent" msgid="5666951244667422668">"Älä kytke näyttöä päälle"</string>
+ <string name="zen_mode_block_effect_intent" msgid="5666951244667422668">"Älä laita näyttöä päälle"</string>
<string name="zen_mode_block_effect_light" msgid="8679333758037487644">"Älä vilkuta merkkivaloa"</string>
<string name="zen_mode_block_effect_peek" msgid="6075662813575910221">"Älä tuo ilmoituksia näytölle"</string>
<string name="zen_mode_block_effect_status" msgid="6516614225115681068">"Piilota näytön yläreunan tilapalkkikuvakkeet"</string>
@@ -3228,8 +3230,8 @@
<string name="zen_mode_other_options" msgid="7216192179063769057">"muut vaihtoehdot"</string>
<string name="zen_mode_add" msgid="2533484377786927366">"Lisää"</string>
<string name="zen_mode_enable_dialog_turn_on" msgid="6396050543542026184">"Ota käyttöön"</string>
- <string name="zen_mode_button_turn_on" msgid="1097964136225943415">"Ota käyttöön nyt"</string>
- <string name="zen_mode_button_turn_off" msgid="3990967728457149454">"Poista käytöstä nyt"</string>
+ <string name="zen_mode_button_turn_on" msgid="1097964136225943415">"Laita päälle"</string>
+ <string name="zen_mode_button_turn_off" msgid="3990967728457149454">"Laita pois päältä"</string>
<string name="zen_mode_settings_dnd_manual_end_time" msgid="4307574188962071429">"Älä häiritse ‑tila on käytössä <xliff:g id="FORMATTED_TIME">%s</xliff:g> asti."</string>
<string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"Älä häiritse ‑tila on käytössä, kunnes poistat sen käytöstä."</string>
<string name="zen_mode_settings_dnd_automatic_rule" msgid="2843297614114625408">"Aikataulu (<xliff:g id="RULE_NAME">%s</xliff:g>) otti Älä häiritse ‑tilan automaattisesti käyttöön."</string>
@@ -3243,7 +3245,7 @@
<string name="zen_mode_sound_summary_off" msgid="2800265178411749309">"Pois käytöstä"</string>
<string name="zen_mode_sound_summary_on" msgid="6964666541479146310">"Käytössä"</string>
<string name="zen_mode_duration_summary_always_prompt" msgid="7642321938427056823">"Kysy aina (paitsi jos se käynnistyy automaattisesti)"</string>
- <string name="zen_mode_duration_summary_forever" msgid="4563938129424903030">"Kunnes poistat sen käytöstä (paitsi jos se käynnistyy automaattisesti)"</string>
+ <string name="zen_mode_duration_summary_forever" msgid="4563938129424903030">"Kunnes laitat pois päältä (paitsi jos se käynnistyy automaattisesti)"</string>
<plurals name="zen_mode_duration_summary_time_hours" formatted="false" msgid="8872000022033647725">
<item quantity="other"><xliff:g id="NUM_HOURS">%d</xliff:g> tuntia (paitsi jos se käynnistyy automaattisesti)</item>
<item quantity="one">1 tunti (paitsi jos se käynnistyy automaattisesti)</item>
@@ -3294,7 +3296,7 @@
<string name="other_sound_category_preference_title" msgid="2045757472469840859">"Muut äänet ja värinä"</string>
<string name="configure_notification_settings" msgid="291914315140851270">"Ilmoitukset"</string>
<string name="recent_notifications" msgid="8125865995065032049">"Äskettäin lähetetyt"</string>
- <string name="recent_notifications_see_all_title" msgid="4089007770442871469">"Näytä kaikki viimeisen 7 päivän ajalta"</string>
+ <string name="recent_notifications_see_all_title" msgid="4089007770442871469">"Näytä kaikki 7 viime päivän ajalta"</string>
<string name="advanced_section_header" msgid="984680389373090015">"Lisäasetukset"</string>
<string name="profile_section_header" msgid="5471479005472037417">"Työilmoitukset"</string>
<string name="asst_capability_prioritizer_title" msgid="3488284760645922160">"Automaattinen ilmoitusten priorisointi"</string>
@@ -3319,9 +3321,9 @@
<string name="notification_pulse_title" msgid="4861418327614907116">"Vilkuta valoa"</string>
<string name="lock_screen_notifications_title" msgid="6889072265118747835">"Lukitusnäytöllä"</string>
<string name="locked_work_profile_notification_title" msgid="8307025804986190658">"Kun työprofiili on lukittu"</string>
- <string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"Näytä ilmoitusten koko sisältö."</string>
+ <string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"Näytä ilmoitusten koko sisältö"</string>
<string name="lock_screen_notifications_summary_hide" msgid="3668806866535260143">"Piilota arkaluontoinen sisältö"</string>
- <string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"Älä näytä ilmoituksia lainkaan."</string>
+ <string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"Älä näytä ilmoituksia lainkaan"</string>
<string name="lock_screen_notifications_interstitial_message" msgid="4230189215124387818">"Miten haluat ilmoitusten näkyvän, kun laite on lukittu?"</string>
<string name="lock_screen_notifications_interstitial_title" msgid="2832587379332443505">"Ilmoitukset"</string>
<string name="lock_screen_notifications_summary_show_profile" msgid="8908775469657073273">"Näytä kaikki työilmoitussisältö"</string>
@@ -3388,7 +3390,7 @@
<string name="picture_in_picture_app_detail_title" msgid="3916189052657425936">"Kuva kuvassa"</string>
<string name="picture_in_picture_app_detail_switch" msgid="747422998967185418">"Salli kuva kuvassa"</string>
<string name="picture_in_picture_app_detail_summary" msgid="918632751775525347">"Anna sovellukselle lupa luoda kuva kuvassa ‑ikkuna, kun se on auki tai siirryt siitä muualle (esimerkiksi palaat videoon). Tämä ikkuna näytetään muiden sovellusten ikkunoiden päällä."</string>
- <string name="manage_zen_access_title" msgid="3058206309728524196">"Älä häiritse -käyttöoikeudet"</string>
+ <string name="manage_zen_access_title" msgid="3058206309728524196">"Älä häiritse -pääsy"</string>
<string name="zen_access_detail_switch" msgid="8706332327904974500">"Salli Älä häiritse ‑tila"</string>
<string name="zen_access_empty_text" msgid="7667538993781607731">"Yksikään asennettu sovellus ei ole pyytänyt Älä häiritse -tilan käyttöoikeutta."</string>
<string name="loading_notification_apps" msgid="1978345231934072091">"Ladataan sovelluksia…"</string>
@@ -3441,7 +3443,7 @@
<string name="zen_mode_add_time_rule" msgid="5999467757140524729">"Lisää aikapohjainen aikataulu"</string>
<string name="zen_mode_delete_rule" msgid="2292933835997203801">"Poista aikataulu"</string>
<string name="zen_mode_choose_rule_type" msgid="8877138307319450306">"Valitse aikataulutyyppi"</string>
- <string name="zen_mode_delete_rule_confirmation" msgid="2646596466259025978">"Poistetaanko sääntö <xliff:g id="RULE">%1$s</xliff:g>?"</string>
+ <string name="zen_mode_delete_rule_confirmation" msgid="2646596466259025978">"Poistetaanko tämä sääntö (<xliff:g id="RULE">%1$s</xliff:g>)?"</string>
<string name="zen_mode_delete_rule_button" msgid="611058106279881991">"Poista"</string>
<string name="zen_mode_rule_type_unknown" msgid="2819480113355191421">"Tuntematon"</string>
<string name="zen_mode_app_set_behavior" msgid="8597398780262575571">"Näitä asetuksia ei voi muuttaa juuri nyt. Sovellus <xliff:g id="APP_NAME">%1$s</xliff:g> otti Älä häiritse ‑tilan automaattisesti käyttöön muokatulla toiminnalla."</string>
@@ -3466,11 +3468,11 @@
<string name="zen_mode_schedule_rule_days" msgid="220627703673691816">"Päivät"</string>
<string name="zen_mode_schedule_rule_days_none" msgid="6011716195119389956">"Ei mitään"</string>
<string name="zen_mode_schedule_rule_days_all" msgid="8814173364016139675">"Joka päivä"</string>
- <string name="zen_mode_schedule_alarm_title" msgid="2078194049274875023">"Herätys voi ohittaa päättymisajan"</string>
- <string name="zen_mode_schedule_alarm_summary" msgid="5556997989911412070">"Aikataulu poistuu käytöstä, kun hälytys soi"</string>
+ <string name="zen_mode_schedule_alarm_title" msgid="2078194049274875023">"Herätys voi kumota päättymisajan"</string>
+ <string name="zen_mode_schedule_alarm_summary" msgid="5556997989911412070">"Aikataulu menee pois päältä herätyksen yhteydessä"</string>
<string name="zen_mode_custom_behavior_title" msgid="8908861697886331001">"Älä häiritse ‑tilan toiminta"</string>
<string name="zen_mode_custom_behavior_summary_default" msgid="3509865340195397447">"Käytä oletusasetuksia"</string>
- <string name="zen_mode_custom_behavior_summary" msgid="7206909852887332604">"Luo tälle aikataululle omia asetuksia"</string>
+ <string name="zen_mode_custom_behavior_summary" msgid="7206909852887332604">"Valitse omat asetukset tälle aikataululle"</string>
<string name="zen_mode_custom_behavior_category_title" msgid="7451686525113262087">"<xliff:g id="SCHEDULE_NAME">%1$s</xliff:g>"</string>
<string name="summary_divider_text" msgid="4780683204694442666">", "</string>
<string name="summary_range_symbol_combination" msgid="6038631664844488406">"<xliff:g id="START">%1$s</xliff:g>–<xliff:g id="END">%2$s</xliff:g>"</string>
@@ -3491,9 +3493,9 @@
<string name="zen_mode_from_anyone" msgid="7778836826814131083">"Keneltä tahansa"</string>
<string name="zen_mode_from_contacts" msgid="267034158294332688">"Vain yhteystiedoilta"</string>
<string name="zen_mode_from_starred" msgid="7349984569117392260">"Vain tähdellä merkityiltä yhteystiedoilta"</string>
- <string name="zen_calls_summary_starred_repeat" msgid="9191394641577678207">"Tähdellä merkityiltä yhteyshenkilöiltä ja toistuvilta soittajilta"</string>
- <string name="zen_calls_summary_contacts_repeat" msgid="7747592096431111510">"Yhteyshenkilöiltä ja toistuvilta soittajilta"</string>
- <string name="zen_calls_summary_repeat_only" msgid="8839703337232747964">"Vain toistuvilta soittajilta"</string>
+ <string name="zen_calls_summary_starred_repeat" msgid="9191394641577678207">"Tähdellä merkityiltä yhteyshenkilöiltä ja usein soittavilta"</string>
+ <string name="zen_calls_summary_contacts_repeat" msgid="7747592096431111510">"Yhteyshenkilöiltä ja usein soittavilta"</string>
+ <string name="zen_calls_summary_repeat_only" msgid="8839703337232747964">"Vain usein soittavilta"</string>
<string name="zen_mode_from_none" msgid="7683889985618637010">"Ei keneltäkään"</string>
<string name="zen_mode_from_none_calls" msgid="2967739140346917546">"Älä salli puheluja"</string>
<string name="zen_mode_from_none_messages" msgid="9069143820057833634">"Älä salli viestejä."</string>
@@ -3516,9 +3518,9 @@
<string name="zen_mode_all_callers" msgid="4455039040077343838">"kuka tahansa"</string>
<string name="zen_mode_contacts_callers" msgid="3116829245339716399">"yhteyshenkilöt"</string>
<string name="zen_mode_starred_callers" msgid="1317376207713013472">"tähdellä merkityt yhteyshenkilöt"</string>
- <string name="zen_mode_repeat_callers" msgid="1435309867554692340">"Toistuvat soitot"</string>
+ <string name="zen_mode_repeat_callers" msgid="1435309867554692340">"Usein soittavat"</string>
<string name="zen_mode_repeat_callers_list" msgid="2750270907597457279">"toistuvat puhelut"</string>
- <string name="zen_mode_repeat_callers_title" msgid="7192952181541813487">"Salli toistuvat soitot"</string>
+ <string name="zen_mode_repeat_callers_title" msgid="7192952181541813487">"Salli usein soittavat"</string>
<string name="zen_mode_calls_summary_one" msgid="8327371053236689649">"Salli puhelut: <xliff:g id="CALLER_TYPE">%1$s</xliff:g>"</string>
<string name="zen_mode_calls_summary_two" msgid="9017678770532673578">"Salli puhelut: <xliff:g id="CALLER_TYPE">%1$s</xliff:g> ja <xliff:g id="CALLERT_TPYE">%2$s</xliff:g>"</string>
<string name="zen_mode_repeat_callers_summary" msgid="1752513516040525545">"Jos sama henkilö soittaa uudelleen <xliff:g id="MINUTES">%d</xliff:g> minuutin kuluessa"</string>
@@ -3551,7 +3553,7 @@
<string name="device_feedback" msgid="4042352891448769818">"Lähetä palautetta tästä laitteesta"</string>
<string name="restr_pin_enter_admin_pin" msgid="8577847751493521230">"Anna järjestelmänvalvojan PIN-koodi"</string>
<string name="switch_on_text" msgid="7100491749799298324">"Käytössä"</string>
- <string name="switch_off_text" msgid="3539551289454353555">"Ei käytössä"</string>
+ <string name="switch_off_text" msgid="3539551289454353555">"Ei päällä"</string>
<string name="screen_pinning_title" msgid="578020318289781102">"Näytön kiinnitys"</string>
<string name="screen_pinning_description" msgid="3814537379086412278">"Kun tämä asetus on käytössä, voit kiinnittää näytön. Tällöin näyttö pysyy näkyvissä, kunnes poistat kiinnityksen.\n\nNäytön kiinnittäminen:\n\n1. Varmista, että näytön kiinnitys on otettu käyttöön.\n\n2. Valitse Viimeisimmät.\n\n3. Valitse yläreunasta sovelluskuvake ja sitten kiinnityskuvake."</string>
<string name="screen_pinning_unlock_pattern" msgid="1060334707088339444">"Pyydä lukituksenpoistokuviota ennen irrotusta"</string>
@@ -3643,14 +3645,14 @@
<string name="advanced_apps" msgid="6643869089344883537">"Lisäasetukset"</string>
<string name="configure_apps" msgid="4066683118857400943">"Sovellusten konfigurointi"</string>
<string name="unknown_app" msgid="2312052973570376877">"Tuntematon sovellus"</string>
- <string name="app_permissions" msgid="3215958256821756086">"Käyttöoikeuksien ylläpitäjä"</string>
+ <string name="app_permissions" msgid="3215958256821756086">"Käyttöoikeuksien ylläpito"</string>
<string name="app_permissions_summary" msgid="8785798165776061594">"Sovellukset, joilla on lupa käyttää seuraavia: <xliff:g id="APPS">%1$s</xliff:g>"</string>
<string name="tap_to_wake" msgid="1902991239401652323">"Herätä napauttamalla"</string>
<string name="tap_to_wake_summary" msgid="8485222120721006793">"Herätä laite napauttamalla näyttöä kahdesti."</string>
<string name="domain_urls_title" msgid="7939209950373945367">"Linkkien avautuminen"</string>
- <string name="domain_urls_summary_none" msgid="5401203416941265109">"Älä avaa tuettuja linkkejä."</string>
+ <string name="domain_urls_summary_none" msgid="5401203416941265109">"Älä avaa tuettuja linkkejä"</string>
<string name="domain_urls_summary_one" msgid="3893975485064803435">"Avaa <xliff:g id="DOMAIN">%s</xliff:g>"</string>
- <string name="domain_urls_summary_some" msgid="2130534984153210797">"Avaa <xliff:g id="DOMAIN">%s</xliff:g> ja muut URL-osoitteet."</string>
+ <string name="domain_urls_summary_some" msgid="2130534984153210797">"Avaa <xliff:g id="DOMAIN">%s</xliff:g> ja muut URL-osoitteet"</string>
<string name="domain_urls_apps_summary_off" msgid="1110203970617922543">"Ei tuettuja linkkejä avaavia sovelluksia"</string>
<plurals name="domain_urls_apps_summary_on" formatted="false" msgid="3571309605151815405">
<item quantity="other"><xliff:g id="COUNT">%d</xliff:g> sovellusta avaa tuettuja linkkejä</item>
@@ -3706,8 +3708,8 @@
</plurals>
<string name="high_power_filter_on" msgid="5294209328473386403">"Ei optimointia"</string>
<string name="high_power_on" msgid="3573501822510580334">"Ei optimointia"</string>
- <string name="high_power_off" msgid="5906679734326490426">"Akun käyttöä optimoidaan."</string>
- <string name="high_power_system" msgid="739584574711292753">"Akun käytön optimointi ei ole käytettävissä."</string>
+ <string name="high_power_off" msgid="5906679734326490426">"Akun käyttöä optimoidaan"</string>
+ <string name="high_power_system" msgid="739584574711292753">"Akun käytön optimointi ei käytettävissä"</string>
<string name="high_power_desc" msgid="333756885680362741">"Älä optimoi akun käyttöä. Tämä voi kuluttaa akkua nopeammin."</string>
<string name="high_power_prompt_title" msgid="2805745781720454052">"Annetaanko sovellukselle oikeus toimia aina taustalla?"</string>
<string name="high_power_prompt_body" msgid="8067395096053552289">"Jos <xliff:g id="APP_NAME">%1$s</xliff:g> saa toimia aina taustalla, laitteen akku voi kulua loppuun nopeammin. \n\nVoit muuttaa tätä asetusta myöhemmin kohdassa Asetukset > Sovellukset ja ilmoitukset."</string>
@@ -3716,7 +3718,7 @@
<string name="no_battery_summary" msgid="4105932628367471314">"Ei akun käyttöä täyteen lataamisen jälkeen"</string>
<string name="app_notification_preferences" msgid="5154466638524523201">"Sovellusasetukset"</string>
<string name="system_ui_settings" msgid="6751165163665775447">"Näytä SystemUI-viritin"</string>
- <string name="additional_permissions" msgid="3142290772324571654">"Lisäkäyttöoikeudet"</string>
+ <string name="additional_permissions" msgid="3142290772324571654">"Lisäluvat"</string>
<string name="additional_permissions_more" msgid="714264060348056246">"<xliff:g id="COUNT">%1$d</xliff:g> lisää"</string>
<string name="share_remote_bugreport_dialog_title" msgid="1390719492733882678">"Jaetaanko virheraportti?"</string>
<string name="share_remote_bugreport_dialog_message_finished" msgid="5133489230646384192">"Järjestelmänvalvoja pyysi virheraporttia voidakseen auttaa laitteen vianetsinnässä. Sovelluksia ja tietoja voidaan jakaa."</string>
@@ -3730,7 +3732,7 @@
<string name="usb_use_file_transfers" msgid="6153021302176151884">"Tiedostonsiirto"</string>
<string name="usb_use_file_transfers_desc" msgid="6953866660041189580">"Siirrä tiedostoja toiselle laitteelle."</string>
<string name="usb_use_photo_transfers" msgid="5974236250197451257">"PTP"</string>
- <string name="usb_use_photo_transfers_desc" msgid="2325112887316125320">"Siirrä valokuvia tai tiedostoja, jos MTP:tä ei tueta (PTP)."</string>
+ <string name="usb_use_photo_transfers_desc" msgid="2325112887316125320">"Siirrä kuvia tai tiedostoja, jos MTP:tä ei tueta (PTP)."</string>
<string name="usb_use_tethering" msgid="4250626730173163846">"Internetin jakaminen USB:n kautta"</string>
<string name="usb_use_MIDI" msgid="4710632870781041401">"MIDI"</string>
<string name="usb_use_MIDI_desc" msgid="1770966187150010947">"Käytä tätä laitetta MIDI-tilassa."</string>
@@ -3757,11 +3759,11 @@
<string name="background_check_pref" msgid="664081406854758392">"Taustatarkistus"</string>
<string name="background_check_title" msgid="4136736684290307970">"Täydet taustakäyttöoikeudet"</string>
<string name="assist_access_context_title" msgid="2274614501747710439">"Käytä näytön tekstiä"</string>
- <string name="assist_access_context_summary" msgid="5867997494395842785">"Salli avustajasovelluksen käsitellä näytön sisältöä tekstinä."</string>
+ <string name="assist_access_context_summary" msgid="5867997494395842785">"Salli avustajasovellukselle pääsy näytön sisältöön tekstinä"</string>
<string name="assist_access_screenshot_title" msgid="1991014038776117688">"Käytä kuvakaappausta"</string>
- <string name="assist_access_screenshot_summary" msgid="3010943864000489424">"Salli avustajasovelluksen käsitellä näytön kuvaa."</string>
+ <string name="assist_access_screenshot_summary" msgid="3010943864000489424">"Salli avustajasovellukselle pääsy näytön kuvaan"</string>
<string name="assist_flash_title" msgid="8852484250748551092">"Näytön välkytys"</string>
- <string name="assist_flash_summary" msgid="6697095786317559129">"Välkytä näytön reunoja, kun avustajasovellus käyttää näytöllä tai kuvakaappauksessa näkyvää tekstiä."</string>
+ <string name="assist_flash_summary" msgid="6697095786317559129">"Välkytä näytön reunoja, kun avustajasovellus käyttää näytöllä tai kuvakaappauksessa näkyvää tekstiä"</string>
<string name="assist_footer" msgid="7030121180457472165">"Avustajasovellukset voivat auttaa sinua näytöllä näkyvien tietojen perusteella. Jotkin sovellukset tukevat myös käynnistysohjelma- ja äänisyötepalveluja, joten ne voivat tarjota sinulle integroitua apua."</string>
<string name="average_memory_use" msgid="5333366040118953945">"Keskimääräinen muistin käyttö"</string>
<string name="maximum_memory_use" msgid="6509872438499846077">"Muistin enimmäiskäyttö"</string>
@@ -3783,11 +3785,11 @@
</plurals>
<string name="running_frequency" msgid="7545170806968474449">"Toistuvuus"</string>
<string name="memory_maximum_usage" msgid="4734981118293469479">"Enimmäiskäyttö"</string>
- <string name="no_data_usage" msgid="903383745620135746">"Dataa ei käytetty"</string>
+ <string name="no_data_usage" msgid="903383745620135746">"Dataa ei ole käytetty"</string>
<string name="zen_access_warning_dialog_title" msgid="7704910289810337055">"Myönnetäänkö Älä häiritse -tilan käyttöoikeus sovellukselle <xliff:g id="APP">%1$s</xliff:g>?"</string>
<string name="zen_access_warning_dialog_summary" msgid="2717755746850874577">"Sovellus voi ottaa Älä häiritse -tilan käyttöön tai poistaa sen käytöstä sekä muokata siihen liittyviä asetuksia."</string>
<string name="zen_access_disabled_package_warning" msgid="7086237569177576966">"Tämän täytyy olla käytössä, sillä ilmoitusten käyttöoikeus on myönnetty."</string>
- <string name="zen_access_revoke_warning_dialog_title" msgid="6850994585577513299">"Peruutetaanko sovellukselta <xliff:g id="APP">%1$s</xliff:g> Älä häiritse -tilan käyttöoikeus?"</string>
+ <string name="zen_access_revoke_warning_dialog_title" msgid="6850994585577513299">"Perutaanko sovellukselta <xliff:g id="APP">%1$s</xliff:g> Älä häiritse -tilan käyttöoikeus?"</string>
<string name="zen_access_revoke_warning_dialog_summary" msgid="3487422193181311403">"Kaikki tämän sovelluksen luomat Älä häiritse -säännöt poistetaan."</string>
<string name="ignore_optimizations_on" msgid="4373971641328943551">"Älä optimoi"</string>
<string name="ignore_optimizations_off" msgid="4372289432580282870">"Optimoi"</string>
@@ -4000,15 +4002,15 @@
<string name="suggestion_additional_fingerprints" msgid="3434467207282466411">"Lisää uusi sormenjälki"</string>
<string name="suggestion_additional_fingerprints_summary" msgid="1916547587832484196">"Avaa lukitus toisella sormella."</string>
<string name="battery_saver_on_summary" msgid="6841062406467435672">"Käytössä"</string>
- <string name="battery_saver_off_scheduled_summary" msgid="3740414764069188669">"Käynnistyy, kun taso on <xliff:g id="BATTERY_PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_saver_off_scheduled_summary" msgid="3740414764069188669">"Menee päälle kun jäljellä on <xliff:g id="BATTERY_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="battery_saver_off_summary" msgid="8736555723004299721">"Pois käytöstä"</string>
- <string name="battery_saver_button_turn_on" msgid="3748696527267573793">"Ota käyttöön nyt"</string>
+ <string name="battery_saver_button_turn_on" msgid="3748696527267573793">"Laita päälle"</string>
<string name="battery_saver_button_turn_off" msgid="2912950982503267828">"Sammuta nyt"</string>
<string name="not_battery_optimizing" msgid="2616044774307734160">"Akun käytön optimointi ei käytössä"</string>
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Estä vastausten ja muun tekstin kirjoittaminen ilmoituksiin, kun laite on lukittu."</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Oletusarvoinen oikoluku"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Valitse oikoluku"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Tarkista oikeinkirjoitus"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Käytä oikolukua"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Ei valittu"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(ei mitään)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4052,8 +4054,8 @@
<string name="overlay_toast_failed_to_apply" msgid="5692251825129250040">"Peittokuvan piirto epäonnistui"</string>
<string name="special_access" msgid="1453926335914696206">"Sovellusten erikoiskäyttö"</string>
<plurals name="special_access_summary" formatted="false" msgid="5182092345063909346">
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> sovelluksen datankäyttöä ei rajoiteta.</item>
- <item quantity="one">1 sovelluksen datankäyttöä ei rajoiteta.</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> sovelluksen datankäyttöä ei rajoiteta</item>
+ <item quantity="one">1 sovelluksen datankäyttöä ei rajoiteta</item>
</plurals>
<string name="special_access_more" msgid="7086690625048471400">"Katso lisää"</string>
<string name="confirm_convert_to_fbe_warning" msgid="4972595831034280189">"Haluatko varmasti poistaa käyttäjätiedot ja ottaa tiedostojen salauksen käyttöön?"</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Tallennustilan hallinta vapauttaa tilaa poistamalla varmuuskopioituja kuvia ja videoita laitteeltasi."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Poista kuvia ja videoita"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Tallennustilan hallinta"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Käytä tallennustilan hallintaa"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Käytä tallennustilan ylläpitoa"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automaattinen"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manuaalinen"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Vapauta tilaa"</string>
@@ -4140,7 +4142,7 @@
<string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="7950264130913070035">"Voit katsoa ilmoitukset pyyhkäisemällä laitteen takaosassa olevasta sormenjälkitunnistimesta alaspäin."</string>
<string name="fingerprint_swipe_for_notifications_suggestion_title" msgid="948946491233738823">"Katso ilmoitukset nopeasti"</string>
<string name="gesture_setting_on" msgid="7573680730101327866">"Käytössä"</string>
- <string name="gesture_setting_off" msgid="2540159841716890511">"Ei käytössä"</string>
+ <string name="gesture_setting_off" msgid="2540159841716890511">"Ei päällä"</string>
<string name="oem_unlock_enable_disabled_summary_bootloader_unlocked" msgid="7233244080078311793">"Käynnistysohjelman lukitus on jo avattu."</string>
<string name="oem_unlock_enable_disabled_summary_connectivity" msgid="262986780389836168">"Muodosta ensin internetyhteys"</string>
<string name="oem_unlock_enable_disabled_summary_connectivity_or_locked" msgid="3331374502670483142">"Muodosta internetyhteys tai ota yhteyttä operaattoriin"</string>
@@ -4148,7 +4150,7 @@
<string name="oem_lock_info_message" msgid="5090850412279403901">"Käynnistä laite uudelleen, niin voit ottaa laitteen turvaominaisuuden käyttöön."</string>
<string name="automatic_storage_manager_freed_bytes" msgid="7360443072390107772">"<xliff:g id="SIZE">%1$s</xliff:g> tilaa vapautettu yhteensä\n\nKäytetty viimeksi <xliff:g id="DATE">%2$s</xliff:g>"</string>
<string name="web_action_enable_title" msgid="4462106633708675959">"Pikasovellukset"</string>
- <string name="web_action_enable_summary" msgid="1729016644691793085">"Avaa linkkejä sovelluksessa, vaikka sitä ei ole asennettu."</string>
+ <string name="web_action_enable_summary" msgid="1729016644691793085">"Avaa linkkejä sovelluksessa, vaikka sitä ei ole asennettu"</string>
<string name="web_action_section_title" msgid="5563229447734734662">"Pikasovellukset"</string>
<string name="instant_apps_settings" msgid="879003203555847537">"Pikasovellusvalinnat"</string>
<string name="domain_url_section_title" msgid="206403507921518321">"Asennetut sovellukset"</string>
@@ -4158,7 +4160,7 @@
<string name="auto_sync_account_title" msgid="2394463123733529506">"Synkronoi tiedot automaattisesti"</string>
<string name="auto_sync_personal_account_title" msgid="6844465157916100655">"Synkronoi henkilökohtaiset tiedot automaattisesti"</string>
<string name="auto_sync_work_account_title" msgid="2403222633447522376">"Synkronoi työtiedot automaattisesti"</string>
- <string name="auto_sync_account_summary" msgid="6316230976974033772">"Salli sovellusten päivittää tietoja automaattisesti."</string>
+ <string name="auto_sync_account_summary" msgid="6316230976974033772">"Salli sovellusten päivittää tietoja automaattisesti"</string>
<string name="account_sync_title" msgid="1570164819114297154">"Tilin synkronointi"</string>
<string name="account_sync_summary_some_on" msgid="1934556869158274053">"Synkronointi käytössä <xliff:g id="ID_1">%1$d</xliff:g>/<xliff:g id="ID_2">%2$d</xliff:g> kohteella"</string>
<string name="account_sync_summary_all_on" msgid="3634161204232431700">"Synkronointi käytössä kaikilla kohteilla"</string>
@@ -4329,7 +4331,7 @@
<string name="prevent_ringing_option_none" msgid="1450985763137666231">"Älä tee mitään"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="7961818570574683926">"Käytössä (värinä)"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3509459199090688328">"Käytössä (mykistys)"</string>
- <string name="prevent_ringing_option_none_summary" msgid="5152618221093037451">"Ei käytössä"</string>
+ <string name="prevent_ringing_option_none_summary" msgid="5152618221093037451">"Ei päällä"</string>
<string name="pref_title_network_details" msgid="3971074015034595956">"Verkon tiedot"</string>
<string name="about_phone_device_name_warning" msgid="9088572775969880106">"Puhelimen sovellukset näkevät laitteesi nimen. Muut voivat myös nähdä nimen, kun muodostat Bluetooth-yhteyden laitteisiin tai aktivoit Wi-Fi-hotspotin."</string>
<string name="devices_title" msgid="4768432575951993648">"Laitteet"</string>
@@ -4383,7 +4385,7 @@
<string name="carrier_settings_title" msgid="7989949967020825268">"Operaattoriasetukset"</string>
<string name="cdma_lte_data_service" msgid="8996857851150069339">"Määritä datapalvelu"</string>
<string name="mobile_data_settings_title" msgid="3439626666647519547">"Mobiilidata"</string>
- <string name="mobile_data_settings_summary" msgid="6492798151325636912">"Käytä mobiiliverkon dataa."</string>
+ <string name="mobile_data_settings_summary" msgid="6492798151325636912">"Käytä mobiiliverkon dataa"</string>
<string name="mobile_data_settings_summary_auto_switch" msgid="3665863214578471494">"Puhelin vaihtaa automaattisesti tähän operaattoriin, kun se on kantoalueella."</string>
<string name="calls_preference" msgid="2076353032705811243">"Puheluasetus"</string>
<string name="sms_preference" msgid="8449270011976880">"Tekstiviestiasetus"</string>
@@ -4469,7 +4471,7 @@
<string name="hwui_force_dark_title" msgid="3744825212652331461">"Ohita SmartDarkin pakottaminen päälle"</string>
<string name="hwui_force_dark_summary" msgid="2051891908674765817">"Ohittaa toiminnon, joka pakottaa SmartDark-ominaisuuden aina päälle"</string>
<string name="privacy_dashboard_title" msgid="8764930992456607513">"Tietosuoja"</string>
- <string name="privacy_dashboard_summary" msgid="7916431309860824945">"Käyttöoikeudet, tilitoiminta, henkilökohtaiset tiedot"</string>
+ <string name="privacy_dashboard_summary" msgid="7916431309860824945">"Luvat, tilitoiminta, henkilökohtaiset tiedot"</string>
<string name="contextual_card_dismiss_remove" msgid="1750420285615827309">"Poista"</string>
<string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"Säilytä"</string>
<string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"Poistetaanko tämä ehdotus?"</string>
@@ -4481,7 +4483,7 @@
<string name="copyable_slice_toast" msgid="1357518174923789947">"<xliff:g id="COPY_CONTENT">%1$s</xliff:g> kopioitiin leikepöydälle"</string>
<string name="search_bar_account_avatar_content_description" msgid="947628881535053409"></string>
<string name="permission_bar_chart_empty_text" msgid="5893326513700540130">"0 sovellusta käytti käyttöoikeuksia"</string>
- <string name="permission_bar_chart_title" msgid="874145405516650073">"Käyttöoikeudet viimeisten 24 tunnin ajalta"</string>
+ <string name="permission_bar_chart_title" msgid="874145405516650073">"Luvat viimeisten 24 tunnin ajalta"</string>
<string name="permission_bar_chart_details" msgid="942094334321073927">"Näytä kaikki ohjauspaneelissa"</string>
<plurals name="permission_bar_chart_label" formatted="false" msgid="2831305719356562097">
<item quantity="other"><xliff:g id="NUMBER">%s</xliff:g> sovellusta</item>
diff --git a/tests/CarDeveloperOptions/res/values-fr-rCA/arrays.xml b/tests/CarDeveloperOptions/res/values-fr-rCA/arrays.xml
index 40e4daa..066375c 100644
--- a/tests/CarDeveloperOptions/res/values-fr-rCA/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-fr-rCA/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"fonctionner en arrière-plan"</item>
<item msgid="6423861043647911030">"volume d\'accessibilité"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Position"</item>
+ <item msgid="6656077694190491067">"Position"</item>
+ <item msgid="8790228218278477369">"Position"</item>
+ <item msgid="7836406246005211990">"Vibreur"</item>
+ <item msgid="3951439024549922598">"Lire des contacts"</item>
+ <item msgid="8802152411647068">"Modifier les contacts"</item>
+ <item msgid="229544934599698735">"Lire le journal d\'appels"</item>
+ <item msgid="7396102294405899613">"Modifier le journal d\'appels"</item>
+ <item msgid="3597797992398484655">"Accéder à l\'agenda"</item>
+ <item msgid="2705975774250907343">"Modifier l\'agenda"</item>
+ <item msgid="4668747371441932697">"Position"</item>
+ <item msgid="1487578921720243646">"Publier des notifications"</item>
+ <item msgid="4636080349724146638">"Position"</item>
+ <item msgid="673510900286463926">"Appeler"</item>
+ <item msgid="542083422784609790">"Lire des messages texte ou des messages multimédias"</item>
+ <item msgid="1033780373029588436">"Écrire des messages texte ou des messages multimédias"</item>
+ <item msgid="5647111115517787488">"Recevoir des SMS/MMS"</item>
+ <item msgid="8591105601108455893">"Recevoir des SMS/MMS"</item>
+ <item msgid="7730995008517841903">"Recevoir des SMS/MMS"</item>
+ <item msgid="2613033109026626086">"Recevoir des SMS/MMS"</item>
+ <item msgid="3037159047591081136">"Envoyer des SMS/MMS"</item>
+ <item msgid="4726682243833913568">"Lire des messages texte ou des messages multimédias"</item>
+ <item msgid="6555678522277865572">"Écrire des messages texte ou des messages multimédias"</item>
+ <item msgid="6981734935578130884">"Modifier les paramètres"</item>
+ <item msgid="8705854389991425629">"Dessiner par dessus"</item>
+ <item msgid="5861356020344153651">"Accéder aux notifications"</item>
+ <item msgid="78432174621628659">"Appareil photo"</item>
+ <item msgid="3986116419882154794">"Enregistrer des fichiers audio"</item>
+ <item msgid="4516840825756409490">"Lire le fichier audio"</item>
+ <item msgid="6811712502798183957">"Lire le presse-papiers"</item>
+ <item msgid="2780369012602289114">"Modifier le presse-papiers"</item>
+ <item msgid="2331359440170850868">"Boutons multimédias"</item>
+ <item msgid="6133599737122751231">"Priorité audio"</item>
+ <item msgid="6844485713404805301">"Volume général"</item>
+ <item msgid="1600379420669104929">"Volume de la voix"</item>
+ <item msgid="6296768210470214866">"Volume de la sonnerie"</item>
+ <item msgid="510690696071629241">"Volume du contenu multimédia"</item>
+ <item msgid="406861638631430109">"Volume de l\'alarme"</item>
+ <item msgid="4715864795872233884">"Volume des notifications"</item>
+ <item msgid="2311478519251301183">"Volume Bluetooth"</item>
+ <item msgid="5133991377896747027">"Maintenir activé"</item>
+ <item msgid="2464189519136248621">"Lieu"</item>
+ <item msgid="2062677934050803037">"Position"</item>
+ <item msgid="1735171933192715957">"Obtenir les statistiques d\'utilisation"</item>
+ <item msgid="1014093788778383554">"Activer/Désactiver le micro"</item>
+ <item msgid="4199297950608622850">"Afficher le message"</item>
+ <item msgid="2527962435313398821">"Projeter des contenus multimédias"</item>
+ <item msgid="5117506254221861929">"Activer le RPV"</item>
+ <item msgid="8291198322681891160">"Définir le fond d\'écran"</item>
+ <item msgid="7106921284621230961">"Structure d\'assistance"</item>
+ <item msgid="4496533640894624799">"Saisie d\'écran d\'assistance"</item>
+ <item msgid="2598847264853993611">"Lire l\'état du téléphone"</item>
+ <item msgid="9215610846802973353">"Ajouter des messages vocaux"</item>
+ <item msgid="9186411956086478261">"Utiliser le protocole SIP"</item>
+ <item msgid="6884763100104539558">"Traiter l\'appel sortant"</item>
+ <item msgid="125513972170580692">"Empreintes digitales"</item>
+ <item msgid="2556071024281275619">"Capteurs corporels"</item>
+ <item msgid="617168514928339387">"Lire les messages de diffusion cellulaire"</item>
+ <item msgid="7134693570516523585">"Créer une position fictive"</item>
+ <item msgid="7224489175375229399">"Lire les données de l\'espace de stockage"</item>
+ <item msgid="8472735063903258202">"Écrire dans les données de l\'espace de stockage"</item>
+ <item msgid="4069276819909595110">"Activer l\'écran"</item>
+ <item msgid="1228338896751121025">"Obtenir les comptes"</item>
+ <item msgid="3181581793459233672">"Fonctionner en arrière-plan"</item>
+ <item msgid="2340936043025374076">"Volume d\'accessibilité"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Court"</item>
<item msgid="4816511817309094890">"Moyenne"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Ne jamais autoriser"</item>
<item msgid="8184570120217958741">"Toujours autoriser"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normal"</item>
+ <item msgid="5101233285497327432">"Modérée"</item>
+ <item msgid="1555861583162930714">"Faible"</item>
+ <item msgid="1719683776264798117">"Critique"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normale"</item>
+ <item msgid="6107138933849816768">"Modérée"</item>
+ <item msgid="182695359839047859">"Faible"</item>
+ <item msgid="8577246509202964244">"Critique"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Permanent"</item>
<item msgid="167418068739176448">"Activité principale"</item>
diff --git a/tests/CarDeveloperOptions/res/values-fr-rCA/strings.xml b/tests/CarDeveloperOptions/res/values-fr-rCA/strings.xml
index 67dcd0d..7be21a2 100644
--- a/tests/CarDeveloperOptions/res/values-fr-rCA/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-fr-rCA/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Agrandissez ou réduisez le texte affiché."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Rapetisser"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Agrandir"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Exemple de texte"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Le Magicien d\'Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Chapitre 11 : La merveilleuse cité d\'émeraude d\'Oz"</string>
@@ -114,7 +113,7 @@
<string name="bluetooth_disconnect_all_profiles" product="device" msgid="4707569949253450208">"Votre appareil se déconnectera de <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_disconnect_dialog_ok" msgid="4183522987246110145">"Déconnecter"</string>
<string name="bluetooth_empty_list_user_restricted" msgid="3616298363281495777">"Vous n\'êtes pas autorisé à modifier les paramètres Bluetooth."</string>
- <string name="bluetooth_pairing_pref_title" msgid="2904954138013884029">"Associer un appareil"</string>
+ <string name="bluetooth_pairing_pref_title" msgid="2904954138013884029">"Associer un autre appareil"</string>
<string name="bluetooth_is_visible_message" msgid="6341088682252805612">"Lorsque le Bluetooth est activé, votre <xliff:g id="DEVICE_NAME">%1$s</xliff:g> est visible par les appareils à proximité."</string>
<string name="bluetooth_footer_mac_message" product="default" msgid="335341476746836260">"Adresse Bluetooth du téléphone : <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_footer_mac_message" product="tablet" msgid="6033609611245782463">"Adresse Bluetooth de la tablette : <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
@@ -166,7 +165,7 @@
<string name="bluetooth_device_name_summary" msgid="8661066392056595005">"Visible comme « <xliff:g id="DEVICE_NAME">^1</xliff:g> » aux autres appareils"</string>
<string name="bluetooth_off_footer" msgid="7658444560543730571">"Activez le Bluetooth pour vous connecter à d\'autres appareils."</string>
<string name="bluetooth_paired_device_title" msgid="8361860197780425286">"Vos appareils"</string>
- <string name="bluetooth_pairing_page_title" msgid="9053463656712597709">"Associer un appareil"</string>
+ <string name="bluetooth_pairing_page_title" msgid="9053463656712597709">"Associer un autre appareil"</string>
<string name="bluetooth_pref_summary" product="tablet" msgid="3601662966604648212">"Permettre à votre tablette de communiquer avec les appareils Bluetooth à proximité"</string>
<string name="bluetooth_pref_summary" product="device" msgid="2286727776570956969">"Permettre à votre appareil de communiquer avec les appareils Bluetooth à proximité"</string>
<string name="bluetooth_pref_summary" product="default" msgid="863659221858781186">"Permettre à votre téléphone de communiquer avec les appareils Bluetooth à proximité"</string>
@@ -212,7 +211,7 @@
<string name="proxy_url_title" msgid="882042361706435904">"URL config. auto mand. : "</string>
<string name="radio_info_dl_kbps" msgid="2903778264453410272">"Bande passante de téléchargement (kb/s) :"</string>
<string name="radio_info_ul_kbps" msgid="3802245899811732716">"Bande passante de téléversement (kb/s) :"</string>
- <string name="radio_info_signal_location_label" msgid="6788144906873498013">"Données de la position de la cellule (discontinuées) :"</string>
+ <string name="radio_info_signal_location_label" msgid="6788144906873498013">"Données de la position de la cellule (obsolètes) :"</string>
<string name="radio_info_phy_chan_config" msgid="1184401689381480522">"Configuration du canal physique LTE :"</string>
<string name="radio_info_cell_info_refresh_rate" msgid="3557422342215875913">"Taux d\'actualisation des données de la cellule :"</string>
<string name="radio_info_cellinfo_label" msgid="632796561627452215">"Données des mesures de toutes les cellules :"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Informations de profil"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Comptes"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Position"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Utiliser ma position"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Utiliser ma position"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Désactivé"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">Activé : <xliff:g id="COUNT_1">%1$d</xliff:g> application peut accéder à la position</item>
@@ -419,7 +418,7 @@
<string name="security_settings_face_enroll_done" msgid="5409739233373490971">"Terminé"</string>
<string name="security_settings_face_settings_use_face_category" msgid="1586532139528115416">"Util. votre visage pour"</string>
<string name="security_settings_face_settings_use_face_unlock_phone" msgid="318274519126401671">"Déverr. l\'appareil"</string>
- <string name="security_settings_face_settings_use_face_for_apps" msgid="5479369083370664351">"Connex. et paiements dans applis"</string>
+ <string name="security_settings_face_settings_use_face_for_apps" msgid="5479369083370664351">"Connexion applis et paiements"</string>
<string name="security_settings_face_settings_require_attention" msgid="2755140150841557225">"Yeux ouverts pour déverrouillage"</string>
<string name="security_settings_face_settings_require_attention_details" msgid="2557060433599942587">"Lorsque vous utilisez l\'authent. visage, vos yeux doivent être ouverts"</string>
<string name="security_settings_face_settings_require_confirmation" msgid="7312024271060416438">"Toujours demander une confirmation"</string>
@@ -440,15 +439,15 @@
<string name="security_settings_fingerprint_preference_summary_none" msgid="3613424536269750172"></string>
<string name="security_settings_fingerprint_enroll_introduction_title" msgid="889558002683900544">"Déverrouillage avec empreinte"</string>
<string name="security_settings_fingerprint_enroll_introduction_title_unlock_disabled" msgid="7915504118657864429">"Utilisez empreinte digitale"</string>
- <string name="security_settings_fingerprint_enroll_introduction_message" msgid="5586198131986682472">"Il vous suffit de toucher le lecteur d\'empreintes digitales pour déverrouiller votre téléphone, autoriser des achats ou vous connecter à des applications. Toutes les personnes dont les empreintes digitales sont ajoutées sur votre téléphone peuvent effectuer ces opérations. Sélectionnez donc ces personnes avec soin.\n\nRemarque : Vos empreintes digitales peuvent être moins sécurisées qu\'un schéma ou un code fiables."</string>
+ <string name="security_settings_fingerprint_enroll_introduction_message" msgid="5586198131986682472">"Il vous suffit de toucher le lecteur d\'empreintes digitales pour déverrouiller votre téléphone, autoriser des achats ou vous connecter à des applications. Toutes les personnes dont les empreintes digitales sont ajoutées sur votre téléphone peuvent effectuer ces opérations. Sélectionnez donc ces personnes avec soin.\n\nRemarque : Votre empreinte digitale peut être moins sécurisée qu\'un schéma ou un NIP fiables."</string>
<string name="security_settings_fingerprint_enroll_introduction_message_unlock_disabled" msgid="1640839304679275468">"Utilisez votre empreinte digitale pour déverrouiller votre téléphone ou autoriser des achats.\n\nRemarque : Vous ne pouvez pas utiliser vos empreintes digitales pour déverrouiller cet appareil. Pour obtenir plus d\'information, communiquez avec l\'administrateur de votre organisation."</string>
- <string name="security_settings_fingerprint_enroll_introduction_message_setup" msgid="6734490666593320711">"Utilisez votre empreinte digitale pour déverrouiller votre téléphone ou autoriser des achats.\n\nRemarque : Vos empreintes digitales peuvent être moins sécurisées qu\'un schéma ou un NIP fiables."</string>
+ <string name="security_settings_fingerprint_enroll_introduction_message_setup" msgid="6734490666593320711">"Utilisez votre empreinte digitale pour déverrouiller votre téléphone ou autoriser des achats.\n\nRemarque : Votre empreinte digitale peut être moins sécurisée qu\'un schéma ou un NIP fiables."</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel" msgid="9168637333731599827">"Annuler"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue" msgid="271662150372486535">"Continuer"</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel_setup" msgid="756928427429893070">"Passer"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue_setup" msgid="4125977169169671144">"Suivant"</string>
- <string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"Ignorer l\'empreinte digitale?"</string>
- <string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"La configuration des empreintes digitales ne prend qu\'une minute ou deux. Si vous ignorez cette étape, vous pouvez ajouter votre empreinte digitale plus tard dans les paramètres."</string>
+ <string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"Ignorer configuration empreinte?"</string>
+ <string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"La configuration de l\'empreinte digitale ne prend qu\'une minute ou deux. Si vous ignorez cette étape, vous pouvez ajouter votre empreinte digitale plus tard dans les paramètres."</string>
<string name="lock_screen_intro_skip_title" msgid="5307431665496346914">"Ignorer verrouillage d\'écran?"</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="tablet" msgid="7553945981266845264">"Les fonctionnalités de protection de l\'appareil ne seront pas activées. Vous ne pourrez pas empêcher d\'autres personnes d\'utiliser cette tablette en cas de perte, de vol ou de réinitialisation."</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="device" msgid="1378243257238015603">"Les fonctionnalités de protection de l\'appareil ne seront pas activées. Vous ne pourrez pas empêcher d\'autres personnes d\'utiliser cet appareil en cas de perte, de vol ou de réinitialisation."</string>
@@ -596,20 +595,20 @@
<string name="unlock_disable_lock_title" msgid="3508492427073600294">"Désactiver le verrouillage de l\'écran"</string>
<string name="unlock_disable_frp_warning_title" msgid="5858589970505254193">"Supprimer la protection de l\'appareil?"</string>
<string name="unlock_disable_frp_warning_title_profile" msgid="3814123014295965266">"Supprimer la protection du profil?"</string>
- <string name="unlock_disable_frp_warning_content_pattern" msgid="1843950215687159135">"Les fonctions de protection de l\'appareil ne fonctionneront pas sans votre schéma."</string>
- <string name="unlock_disable_frp_warning_content_pattern_fingerprint" msgid="8846957650251741548">"Les fonctions de protection de l\'appareil ne fonctionneront pas sans votre schéma.<xliff:g id="EMPTY_LINE">
+ <string name="unlock_disable_frp_warning_content_pattern" msgid="1843950215687159135">"Les fonctionnalités de protection de l\'appareil ne fonctionneront pas sans votre schéma."</string>
+ <string name="unlock_disable_frp_warning_content_pattern_fingerprint" msgid="8846957650251741548">"Les fonctionnalités de protection de l\'appareil ne fonctionneront pas sans votre schéma.<xliff:g id="EMPTY_LINE">
</xliff:g>Vos empreintes digitales enregistrées seront également supprimées de cet appareil et vous ne pourrez pas déverrouiller votre téléphone, autoriser des achats ni vous connecter à des applications avec celles-ci."</string>
- <string name="unlock_disable_frp_warning_content_pin" msgid="6760473271034592796">"Les fonctions de protection de l\'appareil ne fonctionneront pas sans votre NIP."</string>
- <string name="unlock_disable_frp_warning_content_pin_fingerprint" msgid="4384632309103635233">"Les fonctions de protection de l\'appareil ne fonctionneront pas sans votre NIP.<xliff:g id="EMPTY_LINE">
+ <string name="unlock_disable_frp_warning_content_pin" msgid="6760473271034592796">"Les fonctionnalités de protection de l\'appareil ne fonctionneront pas sans votre NIP."</string>
+ <string name="unlock_disable_frp_warning_content_pin_fingerprint" msgid="4384632309103635233">"Les fonctionnalités de protection de l\'appareil ne fonctionneront pas sans votre NIP.<xliff:g id="EMPTY_LINE">
</xliff:g>Vos empreintes digitales enregistrées seront également supprimées de cet appareil et vous ne pourrez pas déverrouiller votre téléphone, autoriser des achats ni vous connecter à des applications avec celles-ci."</string>
- <string name="unlock_disable_frp_warning_content_password" msgid="854665587186358170">"Les fonctions de protection de l\'appareil ne fonctionneront pas sans votre mot de passe."</string>
- <string name="unlock_disable_frp_warning_content_password_fingerprint" msgid="218143910981979545">"Les fonctions de protection de l\'appareil ne fonctionneront pas sans votre mot de passe. <xliff:g id="EMPTY_LINE">
+ <string name="unlock_disable_frp_warning_content_password" msgid="854665587186358170">"Les fonctionnalités de protection de l\'appareil ne fonctionneront pas sans votre mot de passe."</string>
+ <string name="unlock_disable_frp_warning_content_password_fingerprint" msgid="218143910981979545">"Les fonctionnalités de protection de l\'appareil ne fonctionneront pas sans votre mot de passe. <xliff:g id="EMPTY_LINE">
</xliff:g>Vos empreintes digitales enregistrées seront également supprimées de cet appareil et vous ne pourrez pas déverrouiller votre téléphone, autoriser des achats ni vous connecter à des applications avec celles-ci."</string>
- <string name="unlock_disable_frp_warning_content_unknown" msgid="3570135744390201244">"Les fonctions de protection de l\'appareil ne fonctionneront pas sans votre verrouillage d\'écran."</string>
- <string name="unlock_disable_frp_warning_content_unknown_fingerprint" msgid="5775815077478538855">"Les fonctions de protection de l\'appareil ne fonctionneront pas sans votre verrouillage d\'écran.<xliff:g id="EMPTY_LINE">
+ <string name="unlock_disable_frp_warning_content_unknown" msgid="3570135744390201244">"Les fonctionnalités de protection de l\'appareil ne fonctionneront pas sans votre verrouillage d\'écran."</string>
+ <string name="unlock_disable_frp_warning_content_unknown_fingerprint" msgid="5775815077478538855">"Les fonctionnalités de protection de l\'appareil ne fonctionneront pas sans votre verrouillage d\'écran.<xliff:g id="EMPTY_LINE">
</xliff:g>Vos empreintes digitales enregistrées seront également supprimées de cet appareil et vous ne pourrez pas déverrouiller votre téléphone, autoriser des achats ni vous connecter à des applications avec celles-ci."</string>
<string name="unlock_disable_frp_warning_content_pattern_profile" msgid="2369992898062808499">"Les fonctions de protection du profil ne fonctionneront pas sans votre schéma."</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Activer le Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Utiliser le Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Utiliser le Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Paramètres Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Configurer et gérer les points d\'accès sans fil"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Cellulaire"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Si aucun réseau Wi‑Fi n\'est accessible, utiliser le réseau cellulaire"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Si le réseau cellulaire n\'est pas accessible, utiliser le Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Appeler sur réseau Wi‑Fi. Si le Wi‑Fi est interr., l\'appel prendra fin."</string>
@@ -1796,7 +1798,7 @@
<string name="install_all_warning" product="device" msgid="9141585291103603515">"Votre appareil et vos données personnelles sont plus vulnérables aux attaques provenant d\'applications inconnues. En installant des applications provenant de cette source, vous acceptez d\'être responsable de tout dommage causé à votre appareil ou de toute perte de données pouvant découler de l\'utilisation de telles applications."</string>
<string name="advanced_settings" msgid="6282069364060968122">"Paramètres avancés"</string>
<string name="advanced_settings_summary" msgid="5912237062506771716">"Activer d\'autres paramètres"</string>
- <string name="application_info_label" msgid="3886253474964599105">"Infos sur l\'application"</string>
+ <string name="application_info_label" msgid="3886253474964599105">"Infos sur les applis"</string>
<string name="storage_label" msgid="1109537840103290384">"Stockage"</string>
<string name="auto_launch_label" msgid="47089737922907379">"Ouvert par défaut"</string>
<string name="auto_launch_label_generic" msgid="7865828543459493308">"Valeurs par défaut"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Vibration pour les notifications"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Vibration pour la sonnerie"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Vibration tactile"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Utiliser le service"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Utiliser la correction des couleurs"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Utiliser les légendes"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Utiliser le service"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Utiliser la correction des couleurs"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Utiliser les sous-titres"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Continuer"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Prothèses auditives"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Aucune prothèse auditive connectée"</string>
@@ -2275,9 +2277,9 @@
<string name="battery_tip_smart_battery_title" product="tablet" msgid="203494973250969040">"Améliorer l\'autonomie de la tablette"</string>
<string name="battery_tip_smart_battery_title" product="device" msgid="7419448992583346364">"Améliorer l\'autonomie de l\'appareil"</string>
<string name="battery_tip_smart_battery_summary" msgid="5344821856478265778">"Activer le gestionnaire de pile"</string>
- <string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"Activer la fonction Économie d\'énergie"</string>
+ <string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"Activer l\'économiseur de pile"</string>
<string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"La pile pourrait s\'épuiser plus tôt que d\'habitude"</string>
- <string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"La fonction Économie d\'énergie est activée"</string>
+ <string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"Économiseur de pile activé"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"Certaines fonctionnalités pourraient être limitées"</string>
<string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Le téléphone a été sollicité plus que d\'habitude"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"La tablette a été sollicitée plus que d\'habitude"</string>
@@ -2315,9 +2317,9 @@
<string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"Cette application pourra utiliser la pile en arrière-plan. Cela pourrait épuiser la pile plus rapidement."</string>
<string name="battery_tip_unrestrict_app_dialog_ok" msgid="9154938931448151479">"Supprimer"</string>
<string name="battery_tip_unrestrict_app_dialog_cancel" msgid="7331148618292397166">"Annuler"</string>
- <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"Vos applications utilisent une quantité normale d\'énergie. Si les applications utilisent trop d\'énergie, votre téléphone vous suggérera des actions à essayer.\n\nVous pouvez toujours activer la fonction Économie d\'énergie si la pile est trop faible."</string>
- <string name="battery_tip_dialog_summary_message" product="tablet" msgid="1721081030632329647">"Vos applications utilisent une quantité normale d\'énergie. Si les applications utilisent trop d\'énergie, votre tablette vous suggérera des actions à essayer.\n\nVous pouvez toujours activer la fonction Économie d\'énergie si la pile est trop faible."</string>
- <string name="battery_tip_dialog_summary_message" product="device" msgid="146872407040848465">"Vos applications utilisent une quantité normale d\'énergie. Si les applications utilisent trop d\'énergie, votre appareil vous suggérera des actions à essayer.\n\nVous pouvez toujours activer la fonction Économie d\'énergie si la pile est trop faible."</string>
+ <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"Vos applications utilisent une quantité normale d\'énergie. Si les applications utilisent trop d\'énergie, votre téléphone vous suggérera des actions à essayer.\n\nVous pouvez toujours activer la fonction Économiseur de pile si la pile est trop faible."</string>
+ <string name="battery_tip_dialog_summary_message" product="tablet" msgid="1721081030632329647">"Vos applications utilisent une quantité normale d\'énergie. Si les applications utilisent trop d\'énergie, votre tablette vous suggérera des actions à essayer.\n\nVous pouvez toujours activer l\'économiseur de pile si la pile est trop faible."</string>
+ <string name="battery_tip_dialog_summary_message" product="device" msgid="146872407040848465">"Vos applications utilisent une quantité normale d\'énergie. Si les applications utilisent trop d\'énergie, votre appareil vous suggérera des actions à essayer.\n\nVous pouvez toujours activer l\'économiseur de pile si la pile est trop faible."</string>
<string name="smart_battery_manager_title" msgid="5744035036663849515">"Gestionnaire de pile"</string>
<string name="smart_battery_title" msgid="4919670408532804351">"Gérer les applications automatiquement"</string>
<string name="smart_battery_summary" msgid="640027046471198174">"Restreindre l\'usage de la pile pour les applications que vous n\'utilisez pas souvent"</string>
@@ -2444,7 +2446,7 @@
<string name="process_kernel_label" msgid="4175060316414593760">"Système d\'exploitation Android"</string>
<string name="process_mediaserver_label" msgid="8591722404282619153">"Serveur multimédia"</string>
<string name="process_dex2oat_label" msgid="8249082119748556085">"Optimisation des applications"</string>
- <string name="battery_saver" msgid="3989710213758938398">"Économie d\'énergie"</string>
+ <string name="battery_saver" msgid="3989710213758938398">"Économiseur de pile"</string>
<string name="battery_saver_auto_title" msgid="4158659069641849952">"Activer automatiquement"</string>
<string name="battery_saver_auto_no_schedule" msgid="739814529432092706">"Aucun horaire"</string>
<string name="battery_saver_auto_routine" msgid="886514412067906980">"Selon votre routine"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Activer"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Utiliser le mode Économiseur de pile"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Utiliser le mode Économiseur de pile"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Activer automatiquement"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Jamais"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"à <xliff:g id="PERCENT">%1$s</xliff:g> d\'autonomie restante"</string>
@@ -2669,7 +2671,7 @@
<string name="data_usage_cellular_data_summary" msgid="9162777397135709280">"Interrompues à la limite"</string>
<string name="account_settings_menu_auto_sync" msgid="2673669556006027506">"Synchronisation auto données"</string>
<string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"Synchro auto des données perso"</string>
- <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Synchro auto données profess."</string>
+ <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Synchro auto des données pros"</string>
<string name="data_usage_change_cycle" msgid="447761920472170031">"Changer le cycle..."</string>
<string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"Jour du mois de réinitialisation du cycle utilisation données :"</string>
<string name="data_usage_empty" msgid="7981405723435034032">"Aucune donnée utilisée par les applications pendant cette période."</string>
@@ -2749,8 +2751,8 @@
<string name="vpn_ipsec_server_cert" msgid="3066696943831527934">"Certificat de serveur IPSec"</string>
<string name="vpn_show_options" msgid="7672984921872882859">"Afficher les options avancées"</string>
<string name="vpn_search_domains" msgid="8469394307693909080">"Domaines de recherche DNS"</string>
- <string name="vpn_dns_servers" msgid="3017453300909321239">"Serveurs DNS (Ex. 8.8.8.8)"</string>
- <string name="vpn_routes" msgid="3393989650778663742">"Itinéraires transfert (Ex. 10.0.0.0/8)"</string>
+ <string name="vpn_dns_servers" msgid="3017453300909321239">"Serveurs DNS (p. ex. 8.8.8.8)"</string>
+ <string name="vpn_routes" msgid="3393989650778663742">"Itinéraires transfert (p. ex. 10.0.0.0/8)"</string>
<string name="vpn_username" msgid="5357878823189445042">"Nom d\'utilisateur"</string>
<string name="vpn_password" msgid="5325943601523662246">"Mot de passe"</string>
<string name="vpn_save_login" msgid="6215503139606646915">"Enregistrer les informations de compte"</string>
@@ -3167,7 +3169,7 @@
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> règles activées</item>
</plurals>
<string name="zen_mode_settings_title" msgid="3425263414594779244">"Ne pas déranger"</string>
- <string name="zen_mode_settings_turn_on_dialog_title" msgid="3062548369931058282">"Activer la fonction « Ne pas déranger »"</string>
+ <string name="zen_mode_settings_turn_on_dialog_title" msgid="3062548369931058282">"Activer le mode Ne pas déranger"</string>
<string name="zen_mode_behavior_settings_title" msgid="423125904296667490">"Exceptions"</string>
<string name="zen_mode_duration_settings_title" msgid="5522668871014735728">"Durée par défaut"</string>
<string name="zen_mode_behavior_allow_title" msgid="2440627647424280842">"Autoriser sons et vibrations de"</string>
@@ -3192,7 +3194,7 @@
<string name="zen_mode_summary_combination" msgid="6960111215170691605">"<xliff:g id="MODE">%1$s</xliff:g> : <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="zen_mode_visual_interruptions_settings_title" msgid="8378266552787406849">"Bloquer dérangements visuels"</string>
<string name="zen_mode_visual_signals_settings_subtitle" msgid="6608239691864638854">"Autoriser les signaux visuels"</string>
- <string name="zen_mode_settings_category" msgid="5601680733422424922">"Quand la fonction Ne pas déranger est activée"</string>
+ <string name="zen_mode_settings_category" msgid="5601680733422424922">"Quand le mode Ne pas déranger est activé"</string>
<string name="zen_mode_restrict_notifications_title" msgid="7486753018073540477">"Restreindre les notifications"</string>
<string name="zen_mode_restrict_notifications_mute" msgid="2673665450311184875">"Aucun son des notifications"</string>
<string name="zen_mode_restrict_notifications_mute_summary" msgid="1696217042353376674">"Vous verrez des notifications sur l\'écran"</string>
@@ -3369,10 +3371,10 @@
<string name="no_notification_assistant" msgid="9140123568386413264">"Aucun assistant"</string>
<string name="no_notification_listeners" msgid="1366386609506834717">"Aucune demande d\'accès aux notifications n\'a été envoyée pour les applications installées."</string>
<string name="notification_assistant_security_warning_title" msgid="4190584438086738496">"Autoriser <xliff:g id="SERVICE">%1$s</xliff:g> à accéder aux notifications?"</string>
- <string name="notification_assistant_security_warning_summary" msgid="6924513399671031930">"<xliff:g id="NOTIFICATION_ASSISTANT_NAME">%1$s</xliff:g> pourra lire toutes les notifications, y compris des données personnelles, telles que des noms de contacts et le texte des messages que vous recevez. Ce service pourra également masquer des notifications ou déclencher les boutons d\'action que celles-ci contiennent. \n\nCela permettra également à l\'application d\'activer et de désactiver la fonction Ne pas déranger et de modifier les paramètres connexes."</string>
+ <string name="notification_assistant_security_warning_summary" msgid="6924513399671031930">"<xliff:g id="NOTIFICATION_ASSISTANT_NAME">%1$s</xliff:g> pourra lire toutes les notifications, y compris des données personnelles, telles que des noms de contacts et le texte des messages que vous recevez. Ce service pourra également masquer des notifications ou déclencher les boutons d\'action que celles-ci contiennent. \n\nCela permettra également à l\'application d\'activer et de désactiver le mode Ne pas déranger et de modifier les paramètres connexes."</string>
<string name="notification_listener_security_warning_title" msgid="4902253246428777797">"Autoriser <xliff:g id="SERVICE">%1$s</xliff:g> à accéder aux notifications?"</string>
- <string name="notification_listener_security_warning_summary" msgid="4454702907350100288">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> pourra lire toutes les notifications, y compris des données personnelles, telles que des noms de contacts et le texte des messages que vous recevez. Ce service pourra également masquer des notifications ou déclencher les boutons d\'action que celles-ci contiennent. \n\nCela permettra également à l\'application d\'activer et de désactiver la fonction Ne pas déranger et de modifier les paramètres connexes."</string>
- <string name="notification_listener_disable_warning_summary" msgid="162165151519082978">"Si vous désactivez l\'accès aux notifications pour <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g>, l\'accès à la fonction Ne pas déranger peut également être désactivé."</string>
+ <string name="notification_listener_security_warning_summary" msgid="4454702907350100288">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> pourra lire toutes les notifications, y compris des données personnelles, telles que des noms de contacts et le texte des messages que vous recevez. Ce service pourra également masquer des notifications ou déclencher les boutons d\'action que celles-ci contiennent. \n\nCela permettra également à l\'application d\'activer et de désactiver le mode Ne pas déranger et de modifier les paramètres connexes."</string>
+ <string name="notification_listener_disable_warning_summary" msgid="162165151519082978">"Si vous désactivez l\'accès aux notifications pour <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g>, l\'accès au mode Ne pas déranger peut également être désactivé."</string>
<string name="notification_listener_disable_warning_confirm" msgid="7863495391671154188">"Désactiver"</string>
<string name="notification_listener_disable_warning_cancel" msgid="6264631825225298458">"Annuler"</string>
<string name="vr_listeners_title" msgid="511483902408792832">"Services d\'assistance de réalité virtuelle"</string>
@@ -3724,7 +3726,7 @@
<string name="sharing_remote_bugreport_dialog_message" msgid="3814787466701526359">"Ce rapport de bogue est partagé avec votre administrateur informatique. Pour en savoir plus, communiquez avec lui."</string>
<string name="share_remote_bugreport_action" msgid="8600797271670537888">"Partager"</string>
<string name="decline_remote_bugreport_action" msgid="706319275774199033">"Refuser"</string>
- <string name="usb_use_charging_only" msgid="2344625733377110164">"Pas de transfert de données"</string>
+ <string name="usb_use_charging_only" msgid="2344625733377110164">"Aucun transfert de données"</string>
<string name="usb_use_charging_only_desc" msgid="3283518562582478950">"Charger cet appareil seulement"</string>
<string name="usb_use_power_only" msgid="6595783381323810697">"Charger l\'appareil connecté"</string>
<string name="usb_use_file_transfers" msgid="6153021302176151884">"Transfert de fichiers"</string>
@@ -3811,14 +3813,14 @@
<string name="app_permission_summary_allowed" msgid="6458476982015518778">"Autorisée"</string>
<string name="app_permission_summary_not_allowed" msgid="1171642541675462584">"Non autorisée"</string>
<string name="keywords_install_other_apps" msgid="5383559540695847668">"installer des applications provenant de sources inconnues"</string>
- <string name="write_settings" msgid="9009040811145552108">"Modifier param. système"</string>
+ <string name="write_settings" msgid="9009040811145552108">"Modifier les paramètres système"</string>
<string name="keywords_write_settings" msgid="3450405263390246293">"écrire des modifications aux paramètres du système"</string>
<string name="write_settings_summary" msgid="4650251358459404247">"<xliff:g id="COUNT_0">%1$d</xliff:g> applis sur <xliff:g id="COUNT_1">%2$d</xliff:g> sont autorisées à modifier les param. système"</string>
<string name="financial_apps_sms_access_title" msgid="3422655018008259655">"Accès des applications financières aux textos"</string>
<string name="filter_install_sources_apps" msgid="4519839764020866701">"Peut installer d\'autres applications"</string>
<string name="filter_write_settings_apps" msgid="6864144615530081121">"Peut modifier les paramètres du système"</string>
<string name="write_settings_title" msgid="5852614614193830632">"Peut modifier les paramètres du système"</string>
- <string name="write_system_settings" msgid="20450765210832463">"Modifier param. système"</string>
+ <string name="write_system_settings" msgid="20450765210832463">"Modifier les paramètres système"</string>
<string name="permit_write_settings" msgid="4198491281216818756">"Autoriser la modification des paramètres du système"</string>
<string name="write_settings_description" msgid="2536706293042882500">"Cette autorisation permet à une application de modifier les paramètres du système."</string>
<string name="write_settings_on" msgid="7328986337962635118">"Oui"</string>
@@ -3891,7 +3893,7 @@
<string name="condition_zen_title" msgid="2128184708916052585">"Mode Ne pas déranger activé"</string>
<string name="condition_zen_summary_phone_muted" msgid="4396050395522974654">"Téléphone en sourdine"</string>
<string name="condition_zen_summary_with_exceptions" msgid="3435216391993785818">"Avec des exceptions"</string>
- <string name="condition_battery_title" msgid="6704870010912986274">"Économie d\'énergie activée"</string>
+ <string name="condition_battery_title" msgid="6704870010912986274">"Économiseur de pile activé"</string>
<string name="condition_battery_summary" msgid="1236078243905690620">"Fonctionnalités restreintes"</string>
<string name="condition_cellular_title" msgid="6605277435894307935">"Données cellulaires désactivées"</string>
<string name="condition_cellular_summary" msgid="3607459310548343777">"Internet est uniquement accessible par Wi‑Fi"</string>
@@ -3940,7 +3942,7 @@
<string name="cell_data_template" msgid="5473177306229738078">"Données cellulaires utilisées : <xliff:g id="AMOUNT">^1</xliff:g>"</string>
<string name="wifi_data_template" msgid="3146090439147042068">"Données Wi-Fi : <xliff:g id="AMOUNT">^1</xliff:g>"</string>
<string name="ethernet_data_template" msgid="6414118030827090119">"Données Ethernet : <xliff:g id="AMOUNT">^1</xliff:g>"</string>
- <string name="billing_cycle" msgid="5740717948341713190">"Avertissement et limites données"</string>
+ <string name="billing_cycle" msgid="5740717948341713190">"Avertissement et limites de données"</string>
<string name="app_usage_cycle" msgid="213483325132959663">"Cycle d\'util. données d\'appli."</string>
<string name="cell_data_warning" msgid="8902740337286652689">"Seuil à partir duquel un avertissement relatif à la consommation des données est envoyé : <xliff:g id="ID_1">^1</xliff:g>"</string>
<string name="cell_data_limit" msgid="3175933829235314233">"Limite d\'utilisation de données : <xliff:g id="ID_1">^1</xliff:g>"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Si l\'appareil est verrouillé, empêcher l\'entrée de réponses ou de texte dans les notifications"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Correcteur ortho par défaut"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Sélectionner correcteur ortho"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Utiliser le vérificateur d\'orthographe"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Utiliser le correcteur orthographique"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Non sélectionné"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(aucun)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">" : "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Pour vous aider à libérer de l\'espace, le Gestionnaire de stockage supprime les photos et les vidéos sauvegardées sur votre appareil."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Supprimer les photos et les vidéos"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Gestionnaire de stockage"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Utiliser le gestionnaire de stockage"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Utiliser le gestionnaire de stockage"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatique"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manuel"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Libérer de l\'espace maintenant"</string>
@@ -4308,7 +4310,7 @@
<string name="change_wifi_state_title" msgid="5140754955787584174">"Gestion du Wi-Fi"</string>
<string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"Autoriser l\'application à gérer le Wi-Fi"</string>
<string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Autorisez cette application à activer ou à désactiver le Wi-Fi, à rechercher les réseaux Wi-Fi et à s\'y connecter, à ajouter et à supprimer des réseaux ou à créer un point d\'accès local uniquement"</string>
- <string name="media_output_title" msgid="8710632337456601848">"Faire jouer les médias vers"</string>
+ <string name="media_output_title" msgid="8710632337456601848">"Faire jouer les contenus multimédias sur"</string>
<string name="media_output_default_summary" msgid="3159237976830415584">"Cet appareil"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"Téléphone"</string>
<string name="media_output_summary" product="tablet" msgid="6672024060360538526">"Tablette"</string>
diff --git a/tests/CarDeveloperOptions/res/values-fr/arrays.xml b/tests/CarDeveloperOptions/res/values-fr/arrays.xml
index 27ba552..0a5df1f 100644
--- a/tests/CarDeveloperOptions/res/values-fr/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-fr/arrays.xml
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"Ne jamais autoriser"</item>
<item msgid="8184570120217958741">"Toujours autoriser"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normal"</item>
+ <item msgid="5101233285497327432">"Moyenne"</item>
+ <item msgid="1555861583162930714">"Faible"</item>
+ <item msgid="1719683776264798117">"Critique"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normale"</item>
+ <item msgid="6107138933849816768">"Moyenne"</item>
+ <item msgid="182695359839047859">"Faible"</item>
+ <item msgid="8577246509202964244">"Critique"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Permanent"</item>
<item msgid="167418068739176448">"Activité principale"</item>
diff --git a/tests/CarDeveloperOptions/res/values-fr/strings.xml b/tests/CarDeveloperOptions/res/values-fr/strings.xml
index e806a9f..a97296c 100644
--- a/tests/CarDeveloperOptions/res/values-fr/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-fr/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Agrandissez ou réduisez la taille du texte affiché."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Réduire"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Agrandir"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Exemple de texte"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Le Magicien d\'Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Chapitre 11 : La merveilleuse cité d\'émeraude"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Informations de profil"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Comptes"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Localisation"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Utiliser ma position"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Utiliser ma position"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Désactivé"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">Activée - <xliff:g id="COUNT_1">%1$d</xliff:g> applications peuvent accéder à votre position</item>
@@ -549,7 +548,7 @@
<string name="setup_lock_settings_picker_title" product="tablet" msgid="2429667472335773519">"Protéger la tablette"</string>
<string name="setup_lock_settings_picker_title" product="device" msgid="4739290104106645233">"Protéger l\'appareil"</string>
<string name="setup_lock_settings_picker_title" product="default" msgid="3911582328576859628">"Protégez votre téléphone"</string>
- <string name="lock_settings_picker_biometrics_added_security_message" msgid="799453282539387294">"Pour plus de sécurité, définissez un mode de verrouillage d\'écran secondaire"</string>
+ <string name="lock_settings_picker_biometrics_added_security_message" msgid="799453282539387294">"Pour plus de sécurité, définissez une méthode secondaire pour verrouiller l\'écran"</string>
<string name="setup_lock_settings_picker_message" product="tablet" msgid="7230799135599877804">"Activez les fonctionnalités de protection de l\'appareil pour empêcher d\'autres personnes d\'utiliser cette tablette sans votre autorisation. Choisissez la méthode de verrouillage de l\'écran à utiliser."</string>
<string name="setup_lock_settings_picker_message" product="device" msgid="2098404520816295371">"Activez les fonctionnalités de protection de l\'appareil pour empêcher d\'autres personnes d\'utiliser cet appareil sans votre autorisation. Choisissez la méthode de verrouillage de l\'écran à utiliser."</string>
<string name="setup_lock_settings_picker_message" product="default" msgid="2003984443953672040">"Activez les fonctionnalités de protection de l\'appareil pour empêcher d\'autres personnes d\'utiliser ce téléphone sans votre autorisation. Choisissez la méthode de verrouillage de l\'écran à utiliser."</string>
@@ -637,7 +636,7 @@
<string name="unlock_footer_low_complexity_requested" msgid="513212093196833566">"<xliff:g id="APP_NAME">%1$s</xliff:g> recommande d\'utiliser un nouveau schéma, code ou mot de passe et risque de ne pas fonctionner comme prévu si vous n\'en définissez pas"</string>
<string name="unlock_footer_none_complexity_requested" msgid="1669550050597044896">"<xliff:g id="APP_NAME">%1$s</xliff:g> recommande d\'utiliser un nouveau verrouillage d\'écran"</string>
<string name="lock_failed_attempts_before_wipe" msgid="7565412834122130877">"Réessayez. Tentative <xliff:g id="CURRENT_ATTEMPTS">%1$d</xliff:g> sur <xliff:g id="TOTAL_ATTEMPTS">%2$d</xliff:g>."</string>
- <string name="lock_last_attempt_before_wipe_warning_title" msgid="7853820095898368793">"Vos données seront supprimées"</string>
+ <string name="lock_last_attempt_before_wipe_warning_title" msgid="7853820095898368793">"Risque de perte des données"</string>
<string name="lock_last_pattern_attempt_before_wipe_device" msgid="1021644947949306054">"Si vous dessinez un schéma incorrect lors de la prochaine tentative, les données de cet appareil seront supprimées"</string>
<string name="lock_last_pin_attempt_before_wipe_device" msgid="3823600293847594141">"Si vous saisissez un code incorrect lors de la prochaine tentative, les données de cet appareil seront supprimées"</string>
<string name="lock_last_password_attempt_before_wipe_device" msgid="3548966006264835462">"Si vous saisissez un mot de passe incorrect lors de la prochaine tentative, les données de cet appareil seront supprimées"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Activer le Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Utiliser le Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Utiliser le Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Paramètres Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Configurer et gérer les points d\'accès sans fil"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Mobile"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Si le réseau Wi‑Fi n\'est pas disponible, utilisez le réseau mobile"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Si le réseau mobile n\'est pas disponible, utiliser le réseau Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Appel via le Wi-Fi. Si vous perdez le Wi‑Fi, l\'appel se terminera."</string>
@@ -1183,7 +1185,7 @@
<string name="brightness" msgid="7309120144111305275">"Niveau de luminosité"</string>
<string name="brightness_title" msgid="5660190946911149690">"Luminosité"</string>
<string name="brightness_summary" msgid="8687101964451818730">"Régler la luminosité de l\'écran"</string>
- <string name="auto_brightness_title" msgid="908511534369820426">"Adaptation de la luminosité"</string>
+ <string name="auto_brightness_title" msgid="908511534369820426">"Luminosité adaptative"</string>
<string name="auto_brightness_summary_on" msgid="121488862610275737">"Activée"</string>
<string name="auto_brightness_summary_off" msgid="8569141123211510256">"Désactivé"</string>
<string name="auto_brightness_summary_very_low" msgid="7625647285740629347">"Niveau de luminosité préféré très faible"</string>
@@ -1608,7 +1610,7 @@
<string name="master_clear_progress_text" msgid="5418958116008976218">"Veuillez patienter..."</string>
<string name="call_settings_title" msgid="5033906789261282752">"Paramètres d\'appel"</string>
<string name="call_settings_summary" msgid="2119161087671450035">"Messagerie vocale, transferts d\'appel, mise en attente, numéro de l\'appelant"</string>
- <string name="tether_settings_title_usb" msgid="4265582654602420357">"Partage connexion Bluetooth par USB"</string>
+ <string name="tether_settings_title_usb" msgid="4265582654602420357">"Partage de connexion via USB"</string>
<string name="tether_settings_title_wifi" msgid="2060965130234484613">"Point d\'accès Wi-Fi mobile"</string>
<string name="tether_settings_title_bluetooth" msgid="1999590158102569959">"Partage connexion Bluetooth"</string>
<string name="tether_settings_title_usb_bluetooth" msgid="1159128764162788159">"Partage de connexion"</string>
@@ -1645,7 +1647,7 @@
<string name="mobile_insert_sim_card" msgid="7594550403454243732">"Insérez la carte SIM, puis redémarrez."</string>
<string name="mobile_connect_to_internet" msgid="6031886097365170913">"Connectez-vous à Internet."</string>
<string name="location_title" msgid="8664674161765477168">"Ma position"</string>
- <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"Emplacement du profil pro"</string>
+ <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"Position du profil pro"</string>
<string name="location_app_level_permissions" msgid="1298041503927632960">"Autorisation des applications"</string>
<string name="location_app_permission_summary_location_off" msgid="541372845344796336">"La localisation est désactivée"</string>
<plurals name="location_app_permission_summary_location_on" formatted="false" msgid="7904821382328758218">
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Vibreur des notifications"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Vibreur de la sonnerie"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Vibration au toucher"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Utiliser le service"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Corriger les couleurs"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Utiliser les sous-titres"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Utiliser le service"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Utiliser la correction des couleurs"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Utiliser les sous-titres"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Continuer"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Appareils auditifs"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Aucun appareil auditif associé"</string>
@@ -2450,7 +2452,7 @@
<string name="battery_saver_auto_routine" msgid="886514412067906980">"En fonction de vos habitudes"</string>
<string name="battery_saver_auto_percentage" msgid="5791982309331921556">"En fonction du pourcentage de batterie"</string>
<string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"L\'économiseur de batterie s\'activera si l\'autonomie restante risque d\'être insuffisante pour tenir jusqu\'au moment où vous mettez généralement votre téléphone en charge"</string>
- <string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"S\'activera à <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
+ <string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"S\'active à <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Paramétrer l\'économiseur de batterie"</string>
<string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"Désactiver une fois la batterie complètement chargée"</string>
<string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"L\'économiseur de batterie se désactive lorsque votre téléphone atteint un niveau de charge de <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
@@ -2459,12 +2461,12 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Activer"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Utiliser l\'économiseur de batterie"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Utiliser l\'économiseur de batterie"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Activer automatiquement"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Jamais"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"niveau de la batterie : <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<string name="battery_percentage" msgid="7782252476471033843">"Pourcentage de la batterie"</string>
- <string name="battery_percentage_description" msgid="9219875229166700610">"Afficher le pourcentage de la batterie dans la barre d\'état"</string>
+ <string name="battery_percentage_description" msgid="9219875229166700610">"Afficher dans la barre d\'état"</string>
<string name="process_stats_summary_title" msgid="9189588417488537954">"Statistiques relatives aux processus"</string>
<string name="process_stats_summary" msgid="8077998499161221885">"Statistiques détaillées relatives aux processus en cours d\'exécution"</string>
<string name="app_memory_use" msgid="5126237308545653706">"Utilisation de la mémoire"</string>
@@ -2923,7 +2925,7 @@
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"Sauf si une autre application de paiement est ouverte"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"Application à utiliser pour le paiement sans contact :"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"Paiement à un terminal"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Configurez une application de paiement. Il suffit ensuite de poser l\'arrière de votre téléphone sur n\'importe quel terminal disposant du symbole Sans contact."</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Configurez une application de paiement. Il suffit ensuite d\'approcher l\'arrière de votre appareil de n\'importe quel terminal disposant du symbole Sans contact."</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"OK"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"Plus..."</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"Définir comme mode de paiement prioritaire ?"</string>
@@ -3306,11 +3308,11 @@
<string name="notification_badging_title" msgid="6311699476970264712">"Autoriser les pastilles de notification"</string>
<string name="notification_bubbles_title" msgid="9196562435741861317">"Bulles"</string>
<string name="notification_bubbles_summary" msgid="4624512775901949578">"Accéder rapidement au contenu des applications grâce aux raccourcis flottants"</string>
- <string name="bubbles_feature_education" msgid="8979109826818881018">"Certaines notifications ainsi que d\'autres contenus peuvent s\'afficher à l\'écran sous forme de bulles. Pour ouvrir une bulle, appuyez dessus. Pour l\'ignorer, faites-la glisser vers le bas de l\'écran."</string>
+ <string name="bubbles_feature_education" msgid="8979109826818881018">"Certaines notifications et d\'autres contenus peuvent s\'afficher à l\'écran sous forme de bulles. Pour ouvrir une bulle, appuyez dessus. Pour l\'ignorer, faites-la glisser vers le bas de l\'écran."</string>
<string name="bubbles_app_toggle_title" msgid="6401217027603326439">"Bulles"</string>
<string name="bubbles_app_toggle_summary" msgid="7707611139796553855">"Autoriser <xliff:g id="APP_NAME">%1$s</xliff:g> à afficher certaines notifications sous forme de bulles"</string>
<string name="bubbles_feature_disabled_dialog_title" msgid="3375452386012079293">"Activer les bulles"</string>
- <string name="bubbles_feature_disabled_dialog_text" msgid="326945485806386477">"Avant d\'activer les bulles pour cette application, vous devez les activer pour votre appareil. Ceci a une incidence sur les autres applications dans lesquelles vous avez déjà activé les bulles."</string>
+ <string name="bubbles_feature_disabled_dialog_text" msgid="326945485806386477">"Pour activer les bulles dans cette application, vous devez d\'abord les activer pour votre appareil. Ceci a une incidence sur les autres applications dans lesquelles vous avez déjà activé les bulles."</string>
<string name="bubbles_feature_disabled_button_approve" msgid="6661464849674493351">"Activer pour l\'appareil"</string>
<string name="bubbles_feature_disabled_button_cancel" msgid="4807286844588486198">"Annuler"</string>
<string name="swipe_direction_title" msgid="7535031630668873009">"Actions associées au balayage"</string>
@@ -3518,7 +3520,7 @@
<string name="zen_mode_starred_callers" msgid="1317376207713013472">"contacts favoris"</string>
<string name="zen_mode_repeat_callers" msgid="1435309867554692340">"Appels répétés"</string>
<string name="zen_mode_repeat_callers_list" msgid="2750270907597457279">"appelants fréquents"</string>
- <string name="zen_mode_repeat_callers_title" msgid="7192952181541813487">"Autoriser les appelants fréquents"</string>
+ <string name="zen_mode_repeat_callers_title" msgid="7192952181541813487">"Autoriser les appels répétés"</string>
<string name="zen_mode_calls_summary_one" msgid="8327371053236689649">"Autoriser les appels de <xliff:g id="CALLER_TYPE">%1$s</xliff:g>"</string>
<string name="zen_mode_calls_summary_two" msgid="9017678770532673578">"Autoriser les appels de <xliff:g id="CALLER_TYPE">%1$s</xliff:g> et <xliff:g id="CALLERT_TPYE">%2$s</xliff:g>"</string>
<string name="zen_mode_repeat_callers_summary" msgid="1752513516040525545">"Si la même personne appelle deux fois en <xliff:g id="MINUTES">%d</xliff:g> minutes"</string>
@@ -3729,7 +3731,7 @@
<string name="usb_use_power_only" msgid="6595783381323810697">"Recharger l\'appareil connecté"</string>
<string name="usb_use_file_transfers" msgid="6153021302176151884">"Transfert de fichiers"</string>
<string name="usb_use_file_transfers_desc" msgid="6953866660041189580">"Transférer des fichiers vers un autre appareil"</string>
- <string name="usb_use_photo_transfers" msgid="5974236250197451257">"PTP"</string>
+ <string name="usb_use_photo_transfers" msgid="5974236250197451257">"Transfert de photos (PTP)"</string>
<string name="usb_use_photo_transfers_desc" msgid="2325112887316125320">"Transférer des photos ou des fichiers si MTP n\'est pas compatible (PTP)"</string>
<string name="usb_use_tethering" msgid="4250626730173163846">"Partage de connexion via USB"</string>
<string name="usb_use_MIDI" msgid="4710632870781041401">"Mode MIDI"</string>
@@ -3739,7 +3741,7 @@
<string name="usb_default_info" msgid="953775292571786528">"Ces paramètres sont appliqués lorsqu\'un autre appareil est connecté et que votre téléphone est déverrouillé. Connectez-vous uniquement à des appareils vérifiés."</string>
<string name="usb_pref" msgid="6194821550693495068">"USB"</string>
<string name="usb_preference" msgid="7092987095048592826">"Préférences USB"</string>
- <string name="usb_control_title" msgid="2379698856760894768">"USB contrôlé par"</string>
+ <string name="usb_control_title" msgid="2379698856760894768">"Connexion USB contrôlée par"</string>
<string name="usb_control_host" msgid="193292043691034178">"Appareil connecté"</string>
<string name="usb_control_device" msgid="9154790265254725254">"Cet appareil"</string>
<string name="usb_switching" msgid="1230386065163529904">"Changement…"</string>
@@ -4000,7 +4002,7 @@
<string name="suggestion_additional_fingerprints" msgid="3434467207282466411">"Ajouter une empreinte digitale"</string>
<string name="suggestion_additional_fingerprints_summary" msgid="1916547587832484196">"Déverrouiller avec un autre doigt"</string>
<string name="battery_saver_on_summary" msgid="6841062406467435672">"Activé"</string>
- <string name="battery_saver_off_scheduled_summary" msgid="3740414764069188669">"Activer à <xliff:g id="BATTERY_PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_saver_off_scheduled_summary" msgid="3740414764069188669">"S\'active à <xliff:g id="BATTERY_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="battery_saver_off_summary" msgid="8736555723004299721">"Désactivé"</string>
<string name="battery_saver_button_turn_on" msgid="3748696527267573793">"Activer maintenant"</string>
<string name="battery_saver_button_turn_off" msgid="2912950982503267828">"Désactiver maintenant"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Si l\'appareil est verrouillé, empêcher la saisie des réponses ou de texte dans les notifications"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Correcteur par défaut"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Sélectionner le correcteur"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Utiliser le correcteur orthographique"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Utiliser le correcteur orthographique"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Non sélectionné"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(aucun)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">" : "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Pour libérer de l\'espace de stockage, le gestionnaire d\'espace de stockage supprime des photos et des vidéos sauvegardées sur votre appareil."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Supprimer des photos et des vidéos"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Gestionnaire d\'espace de stockage"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Utiliser le gestionnaire d\'espace de stockage"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Utiliser le gestionnaire d\'espace de stockage"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatique"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manuels"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Libérer de l\'espace maintenant"</string>
@@ -4129,7 +4131,7 @@
<string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"Pour afficher l\'heure, les notifications et d\'autres informations, saisissez votre téléphone."</string>
<string name="ambient_display_pickup_summary" product="tablet" msgid="1077745287100012928">"Pour afficher l\'heure, les notifications et d\'autres informations, saisissez votre tablette."</string>
<string name="ambient_display_pickup_summary" product="device" msgid="404199660076598026">"Pour afficher l\'heure, les notifications et d\'autres informations, saisissez votre appareil."</string>
- <string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"Appuyer pour vérifier le téléphone"</string>
+ <string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"Appuyer pour consulter le téléphone"</string>
<string name="ambient_display_tap_screen_title" product="tablet" msgid="6434521782016864148">"Appuyer pour vérifier la tablette"</string>
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"Appuyer pour vérifier l\'appareil"</string>
<string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"Pour afficher l\'heure, les notifications et d\'autres informations, appuyez sur l\'écran."</string>
diff --git a/tests/CarDeveloperOptions/res/values-gl/arrays.xml b/tests/CarDeveloperOptions/res/values-gl/arrays.xml
index 905bdc7..b3e835e 100644
--- a/tests/CarDeveloperOptions/res/values-gl/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-gl/arrays.xml
@@ -38,7 +38,16 @@
<item msgid="5827960506924849753">"10 minutos"</item>
<item msgid="6677424950124253938">"30 minutos"</item>
</string-array>
- <!-- no translation found for dream_timeout_entries:7 (8271452751594598661) -->
+ <string-array name="dream_timeout_entries">
+ <item msgid="6487043225269853023">"Nunca"</item>
+ <item msgid="2517785806387977252">"15 segundos"</item>
+ <item msgid="6347954399441173672">"30 segundos"</item>
+ <item msgid="4858305253279921789">"1 minuto"</item>
+ <item msgid="8109273437140044073">"2 minutos"</item>
+ <item msgid="2788593551142462622">"5 minutos"</item>
+ <item msgid="8012672183888404961">"10 minutos"</item>
+ <item msgid="8271452751594598661">"30 minutos"</item>
+ </string-array>
<string-array name="lock_after_timeout_entries">
<item msgid="2232921187970351881">"Inmediatamente"</item>
<item msgid="2038544972632026612">"5 segundos"</item>
@@ -50,17 +59,47 @@
<item msgid="811192536981678974">"10 minutos"</item>
<item msgid="7258394417241706272">"30 minutos"</item>
</string-array>
- <!-- no translation found for entries_font_size:0 (2340391964816059553) -->
- <!-- no translation found for entries_font_size:0 (6490061470416867723) -->
- <!-- no translation found for entries_font_size:2 (1714184661981538355) -->
- <!-- no translation found for entries_font_size:2 (1678068858001018666) -->
- <!-- no translation found for wifi_status:3 (5848277343965362748) -->
- <!-- no translation found for wifi_status_with_ssid:1 (6816207058895999545) -->
- <!-- no translation found for wifi_status_with_ssid:3 (7547609081339573756) -->
- <!-- no translation found for wifi_status_with_ssid:4 (5145158315060185414) -->
+ <string-array name="entries_font_size">
+ <item msgid="2340391964816059553">"Pequeno"</item>
+ <item msgid="591935967183159581">"Predeterminado"</item>
+ <item msgid="1714184661981538355">"Grande"</item>
+ <item msgid="6195563047686707484">"O máis grande"</item>
+ </string-array>
+ <string-array name="wifi_status">
+ <item msgid="1304883790721412351"></item>
+ <item msgid="4157625910392775808">"Buscando..."</item>
+ <item msgid="5597394826455877834">"Conectando..."</item>
+ <item msgid="5848277343965362748">"Autenticando…"</item>
+ <item msgid="3391238031431440676">"Obtendo enderezo IP..."</item>
+ <item msgid="5257597310494000224">"Rede conectada"</item>
+ <item msgid="8472497592913050396">"Suspendido"</item>
+ <item msgid="1228072488815999109">"Desconectando..."</item>
+ <item msgid="7253087004422991731">"Desconectado"</item>
+ <item msgid="4169850917304751227">"Incorrecto"</item>
+ <item msgid="6266658166690831131">"Bloqueada"</item>
+ <item msgid="4517230805854909775">"Evitando conexión deficiente temporalmente"</item>
+ </string-array>
+ <string-array name="wifi_status_with_ssid">
+ <item msgid="4853670665485437464"></item>
+ <item msgid="6816207058895999545">"Buscando…"</item>
+ <item msgid="8058143476674427024">"Conectando con <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
+ <item msgid="7547609081339573756">"Autenticándose na rede (<xliff:g id="NETWORK_NAME">%1$s</xliff:g>)…"</item>
+ <item msgid="5145158315060185414">"Obtendo enderezo IP da rede (<xliff:g id="NETWORK_NAME">%1$s</xliff:g>)…"</item>
+ <item msgid="3283243151651124831">"Conectado a <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</item>
+ <item msgid="6600156231416890902">"Suspendido"</item>
+ <item msgid="4133290864821295785">"Desconectando de <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
+ <item msgid="3980154971187953257">"Desconectado"</item>
+ <item msgid="2847316776634969068">"Incorrecto"</item>
+ <item msgid="4390990424746035383">"Bloqueada"</item>
+ <item msgid="3618248791367063949">"Evitando conexión deficiente temporalmente"</item>
+ </string-array>
<!-- no translation found for wifi_tether_security:0 (5586343370515598801) -->
<!-- no translation found for wifi_tether_security:1 (6136336549994615745) -->
- <!-- no translation found for wifi_p2p_wps_setup:0 (5390235347963255303) -->
+ <string-array name="wifi_p2p_wps_setup">
+ <item msgid="5390235347963255303">"Preme o botón"</item>
+ <item msgid="7401896200768713930">"PIN do dispositivo mesmo nivel"</item>
+ <item msgid="4526848028011846710">"PIN do dispositivo"</item>
+ </string-array>
<string-array name="wifi_p2p_status">
<item msgid="8741947238021758201">"Rede conectada"</item>
<item msgid="983792611851499732">"Invitado"</item>
@@ -82,8 +121,13 @@
<item msgid="1644506614010085798">"4"</item>
<item msgid="3132506679404897150">"5"</item>
</string-array>
- <!-- no translation found for wifi_signal:1 (7882129634982603782) -->
- <!-- no translation found for wifi_signal:4 (999948812884919584) -->
+ <string-array name="wifi_signal">
+ <item msgid="1709949377823900951">"Baixa"</item>
+ <item msgid="7882129634982603782">"Baixa"</item>
+ <item msgid="6457357501905996224">"Aceptable"</item>
+ <item msgid="405271628162918841">"Boa"</item>
+ <item msgid="999948812884919584">"Excelente"</item>
+ </string-array>
<string-array name="data_usage_data_range">
<item msgid="8986775481492954015">"Últimos 30 días"</item>
<item msgid="3211287705232736964">"Definir ciclo de uso..."</item>
@@ -119,7 +163,10 @@
<item msgid="7330627471456865502">"MSCHAPV2"</item>
<item msgid="6255179395132581882">"GTC"</item>
</string-array>
- <!-- no translation found for wifi_ip_settings:1 (4377002609760712163) -->
+ <string-array name="wifi_ip_settings">
+ <item msgid="2717196390555072244">"DHCP"</item>
+ <item msgid="4377002609760712163">"Estático"</item>
+ </string-array>
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"Ningunha"</item>
<item msgid="1464741437353223198">"Manual"</item>
@@ -239,11 +286,73 @@
<item msgid="1165623660533024666">"executar en segundo plano"</item>
<item msgid="6423861043647911030">"volume de accesibilidade"</item>
</string-array>
- <!-- no translation found for app_ops_labels:3 (7836406246005211990) -->
- <!-- no translation found for app_ops_labels:4 (3951439024549922598) -->
- <!-- no translation found for app_ops_labels:8 (3597797992398484655) -->
- <!-- no translation found for app_ops_labels:20 (3037159047591081136) -->
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Localización"</item>
+ <item msgid="6656077694190491067">"Localización"</item>
+ <item msgid="8790228218278477369">"Localización"</item>
+ <item msgid="7836406246005211990">"Vibrar"</item>
+ <item msgid="3951439024549922598">"Ler contactos"</item>
+ <item msgid="8802152411647068">"Modificar contactos"</item>
+ <item msgid="229544934599698735">"Ler rexistro de chamadas"</item>
+ <item msgid="7396102294405899613">"Modificar rexistro de chamadas"</item>
+ <item msgid="3597797992398484655">"Ler calendario"</item>
+ <item msgid="2705975774250907343">"Modificar calendario"</item>
+ <item msgid="4668747371441932697">"Localización"</item>
+ <item msgid="1487578921720243646">"Notificación de publicación"</item>
+ <item msgid="4636080349724146638">"Localización"</item>
+ <item msgid="673510900286463926">"Chamada telefónica"</item>
+ <item msgid="542083422784609790">"Ler SMS/MMS"</item>
+ <item msgid="1033780373029588436">"Escribir SMS/MMS"</item>
+ <item msgid="5647111115517787488">"Recibir SMS/MMS"</item>
+ <item msgid="8591105601108455893">"Recibir SMS/MMS"</item>
+ <item msgid="7730995008517841903">"Recibir SMS/MMS"</item>
+ <item msgid="2613033109026626086">"Recibir SMS/MMS"</item>
+ <item msgid="3037159047591081136">"Enviar SMS/MMS"</item>
+ <item msgid="4726682243833913568">"Ler SMS/MMS"</item>
+ <item msgid="6555678522277865572">"Escribir SMS/MMS"</item>
+ <item msgid="6981734935578130884">"Modificar configuración"</item>
+ <item msgid="8705854389991425629">"Debuxar na parte superior"</item>
+ <item msgid="5861356020344153651">"Acceso ás notificacións"</item>
+ <item msgid="78432174621628659">"Cámara"</item>
+ <item msgid="3986116419882154794">"Gravar audio"</item>
+ <item msgid="4516840825756409490">"Reproducir audio"</item>
+ <item msgid="6811712502798183957">"Ler portapapeis"</item>
+ <item msgid="2780369012602289114">"Modificar portapapeis"</item>
+ <item msgid="2331359440170850868">"Botóns multimedia"</item>
+ <item msgid="6133599737122751231">"Enfoque de audio"</item>
+ <item msgid="6844485713404805301">"Volume principal"</item>
+ <item msgid="1600379420669104929">"Volume da voz"</item>
+ <item msgid="6296768210470214866">"Volume do ton"</item>
+ <item msgid="510690696071629241">"Volume dos elementos multimedia"</item>
+ <item msgid="406861638631430109">"Volume da alarma"</item>
+ <item msgid="4715864795872233884">"Volume das notificacións"</item>
+ <item msgid="2311478519251301183">"Volume do Bluetooth"</item>
+ <item msgid="5133991377896747027">"Activo"</item>
+ <item msgid="2464189519136248621">"Localización"</item>
+ <item msgid="2062677934050803037">"Localización"</item>
+ <item msgid="1735171933192715957">"Obter estatísticas de uso"</item>
+ <item msgid="1014093788778383554">"Desactivar/activar o son do micrófono"</item>
+ <item msgid="4199297950608622850">"Mostrar notificación emerxente"</item>
+ <item msgid="2527962435313398821">"Multimedia do proxecto"</item>
+ <item msgid="5117506254221861929">"Activar VPN"</item>
+ <item msgid="8291198322681891160">"Fondo de pantalla de escritura"</item>
+ <item msgid="7106921284621230961">"Estrutura do asistente"</item>
+ <item msgid="4496533640894624799">"Captura de pantalla do asistente"</item>
+ <item msgid="2598847264853993611">"Ler estado do teléfono"</item>
+ <item msgid="9215610846802973353">"Engadir correo de voz"</item>
+ <item msgid="9186411956086478261">"Usar SIP"</item>
+ <item msgid="6884763100104539558">"Procesar chamada saínte"</item>
+ <item msgid="125513972170580692">"Impresión dixital"</item>
+ <item msgid="2556071024281275619">"Sensores corporais"</item>
+ <item msgid="617168514928339387">"Ler difusións de cela"</item>
+ <item msgid="7134693570516523585">"Localización falsa"</item>
+ <item msgid="7224489175375229399">"Ler almacenamento"</item>
+ <item msgid="8472735063903258202">"Escribir almacenamento"</item>
+ <item msgid="4069276819909595110">"Activar pantalla"</item>
+ <item msgid="1228338896751121025">"Obter contas"</item>
+ <item msgid="3181581793459233672">"Executar en segundo plano"</item>
+ <item msgid="2340936043025374076">"Volume de accesibilidade"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Curto"</item>
<item msgid="4816511817309094890">"Media"</item>
@@ -260,7 +369,13 @@
<item msgid="4627069151979553527">"Cursiva"</item>
<item msgid="6896773537705206194">"Versaleta"</item>
</string-array>
- <!-- no translation found for captioning_font_size_selector_titles:3 (2784236342175159295) -->
+ <string-array name="captioning_font_size_selector_titles">
+ <item msgid="1680223634161592855">"Moi pequeno"</item>
+ <item msgid="5091603983404027034">"Pequeno"</item>
+ <item msgid="176844712416932112">"Normal"</item>
+ <item msgid="2784236342175159295">"Grande"</item>
+ <item msgid="218913203203160606">"Moi grande"</item>
+ </string-array>
<string-array name="captioning_edge_type_selector_titles">
<item msgid="3865198759294188069">"Predeterminado"</item>
<item msgid="6488643537808152001">"Ningunha"</item>
@@ -275,7 +390,14 @@
<item msgid="1874668269931014581">"75%"</item>
<item msgid="6462911487571123954">"100 %"</item>
</string-array>
- <!-- no translation found for captioning_preset_selector_titles:2 (5891360837786277638) -->
+ <string-array name="captioning_preset_selector_titles">
+ <item msgid="326819345272910536">"Usar config. predet. da aplicación"</item>
+ <item msgid="8611890312638868524">"Branco sobre negro"</item>
+ <item msgid="5891360837786277638">"Negro sobre branco"</item>
+ <item msgid="2798457065945456853">"Amarelo sobre negro"</item>
+ <item msgid="5799049811524553967">"Amarelo sobre azul"</item>
+ <item msgid="3673930830658169860">"Personalizados"</item>
+ </string-array>
<string-array name="vpn_types_long">
<item msgid="6566768880689730097">"VPN PPTP"</item>
<item msgid="1349760781118368659">"VPN L2TP/IPSec con claves precompartidas"</item>
@@ -288,15 +410,32 @@
<item msgid="2958623927055120839">"Ningún"</item>
<item msgid="1157046369795346308">"Manual"</item>
</string-array>
- <!-- no translation found for vpn_states:4 (9135049670787351881) -->
+ <string-array name="vpn_states">
+ <item msgid="5408915841694583740">"Desconectado"</item>
+ <item msgid="8754480102834556765">"Inicializando..."</item>
+ <item msgid="3351334355574270250">"Conectando..."</item>
+ <item msgid="8303882153995748352">"Rede conectada"</item>
+ <item msgid="9135049670787351881">"Tempo de espera"</item>
+ <item msgid="2124868417182583926">"Incorrecto"</item>
+ </string-array>
<string-array name="security_settings_premium_sms_values">
<item msgid="1164265643455394443">"Preguntar"</item>
<item msgid="7718817231348607934">"Non permitir nunca"</item>
<item msgid="8184570120217958741">"Permitir sempre"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normal"</item>
+ <item msgid="5101233285497327432">"Moderada"</item>
+ <item msgid="1555861583162930714">"Baixa"</item>
+ <item msgid="1719683776264798117">"Crítico"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normal"</item>
+ <item msgid="6107138933849816768">"Moderado"</item>
+ <item msgid="182695359839047859">"Baixa"</item>
+ <item msgid="8577246509202964244">"Crítico"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Persistente"</item>
<item msgid="167418068739176448">"Actividade principal"</item>
diff --git a/tests/CarDeveloperOptions/res/values-gl/strings.xml b/tests/CarDeveloperOptions/res/values-gl/strings.xml
index 3b7ee0a..046a8b9 100644
--- a/tests/CarDeveloperOptions/res/values-gl/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-gl/strings.xml
@@ -80,11 +80,10 @@
<string name="sdcard_format" product="default" msgid="4831611387627849108">"Borrar tarxeta SD"</string>
<string name="preview_pager_content_description" msgid="5731599395893090038">"Vista previa"</string>
<string name="preview_page_indicator_content_description" msgid="3192955679074998362">"Vista previa, páxina <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> de <xliff:g id="NUM_PAGES">%2$d</xliff:g>"</string>
- <string name="font_size_summary" msgid="9120023206321191067">"Reduce ou amplía o texto da pantalla."</string>
+ <string name="font_size_summary" msgid="9120023206321191067">"Reduce ou amplía o tamaño do texto na pantalla."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Reducir"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Ampliar"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Texto de mostra"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"O marabilloso mago de Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Capítulo 11: A marabillosa Cidade Esmeralda de Oz"</string>
@@ -114,7 +113,7 @@
<string name="bluetooth_disconnect_all_profiles" product="device" msgid="4707569949253450208">"O dispositivo desconectarase de: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_disconnect_dialog_ok" msgid="4183522987246110145">"Desconect."</string>
<string name="bluetooth_empty_list_user_restricted" msgid="3616298363281495777">"Non tes permiso para cambiar a configuración de Bluetooth."</string>
- <string name="bluetooth_pairing_pref_title" msgid="2904954138013884029">"Sincronizar dispositivo novo"</string>
+ <string name="bluetooth_pairing_pref_title" msgid="2904954138013884029">"Sincronizar novo dispositivo"</string>
<string name="bluetooth_is_visible_message" msgid="6341088682252805612">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> será visible para dispositivos próximos coa configuración de Bluetooth activada."</string>
<string name="bluetooth_footer_mac_message" product="default" msgid="335341476746836260">"Enderezo Bluetooth do teléfono: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_footer_mac_message" product="tablet" msgid="6033609611245782463">"Enderezo Bluetooth da tableta: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
@@ -166,7 +165,7 @@
<string name="bluetooth_device_name_summary" msgid="8661066392056595005">"Visible como \"<xliff:g id="DEVICE_NAME">^1</xliff:g>\" para outros dispositivos"</string>
<string name="bluetooth_off_footer" msgid="7658444560543730571">"Activa o Bluetooth para conectarte a outros dispositivos."</string>
<string name="bluetooth_paired_device_title" msgid="8361860197780425286">"Os teus dispositivos"</string>
- <string name="bluetooth_pairing_page_title" msgid="9053463656712597709">"Sincronizar dispositivo novo"</string>
+ <string name="bluetooth_pairing_page_title" msgid="9053463656712597709">"Sincronizar novo dispositivo"</string>
<string name="bluetooth_pref_summary" product="tablet" msgid="3601662966604648212">"Permite que a tableta se comunique cos dispositivos Bluetooth próximos"</string>
<string name="bluetooth_pref_summary" product="device" msgid="2286727776570956969">"Permite que o dispositivo se comunique cos dispositivos Bluetooth próximos"</string>
<string name="bluetooth_pref_summary" product="default" msgid="863659221858781186">"Permite que o teléfono se comunique cos dispositivos Bluetooth próximos"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Información do perfil"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Contas"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Localización"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Usar a localización"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Usar localización"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Desactivada"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Activada: <xliff:g id="COUNT_1">%1$d</xliff:g> aplicacións poden acceder á localización</item>
@@ -396,7 +395,7 @@
<string name="security_settings_face_preference_summary" msgid="4437701024542221434">"Engadiuse a cara"</string>
<string name="security_settings_face_preference_summary_none" msgid="8427755590493904386">"Toca e configura a autenticación facial"</string>
<string name="security_settings_face_preference_title" msgid="2630071872604654381">"Autenticación facial"</string>
- <string name="security_settings_face_enroll_introduction_accessibility" msgid="1563255314851533140">"Usar configur. de accesibilidade"</string>
+ <string name="security_settings_face_enroll_introduction_accessibility" msgid="1563255314851533140">"Usar axustes de accesibilidade"</string>
<string name="security_settings_face_enroll_introduction_accessibility_diversity" msgid="1130222333285509856"></string>
<string name="security_settings_face_enroll_introduction_accessibility_vision" msgid="356568621735811168"></string>
<string name="security_settings_face_enroll_introduction_cancel" msgid="4190924649721437238">"Cancelar"</string>
@@ -448,7 +447,7 @@
<string name="security_settings_fingerprint_enroll_introduction_cancel_setup" msgid="756928427429893070">"Omitir"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue_setup" msgid="4125977169169671144">"Seguinte"</string>
<string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"Omitir a impresión dixital?"</string>
- <string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"Configurar a impresión dixital só leva un ou dous minutos, pero tamén podes facelo más tarde en Configuración."</string>
+ <string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"Configurar a impresión dixital só leva un ou dous minutos, pero tamén podes facelo máis tarde en Configuración."</string>
<string name="lock_screen_intro_skip_title" msgid="5307431665496346914">"Omitir o bloqueo de pantalla?"</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="tablet" msgid="7553945981266845264">"As funcións de protección do dispositivo non se activarán. Non poderás evitar que outros usuarios utilicen a tableta en caso de perda, roubo ou restablecemento"</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="device" msgid="1378243257238015603">"As funcións de protección do dispositivo non se activarán. Non poderás evitar que outros usuarios o utilicen en caso de perda, roubo ou restablecemento."</string>
@@ -764,7 +763,7 @@
<string name="bluetooth_device_context_unpair" msgid="250588431708253041">"Desincronizar"</string>
<string name="bluetooth_device_context_disconnect_unpair" msgid="4519151805677280077">"Desconectar e desincronizar"</string>
<string name="bluetooth_device_context_connect_advanced" msgid="423463405499392444">"Opcións..."</string>
- <string name="bluetooth_menu_advanced" msgid="7566858513372603652">"Config. avanzada"</string>
+ <string name="bluetooth_menu_advanced" msgid="7566858513372603652">"Axustes avanzada"</string>
<string name="bluetooth_advanced_titlebar" msgid="6459469494039004784">"Bluetooth avanzado"</string>
<string name="bluetooth_empty_list_bluetooth_off" msgid="6255367297830430459">"Co Bluetooth activado, o dispositivo pode comunicarse con outros dispositivos Bluetooth próximos."</string>
<string name="bluetooth_scanning_on_info_message" msgid="5460370815156050550">"Cando o Bluetooth está activado, o dispositivo pode comunicarse con outros dispositivos Bluetooth das proximidades.\n\nPara mellorar a experiencia de uso do dispositivo, as aplicacións e os servizos poden seguir buscando dispositivos próximos en calquera momento, mesmo cando o Bluetooth está desactivado. Esta opción pode utilizarse, por exemplo, para mellorar as funcións e os servizos baseados na localización. Podes cambiar esta opción na "<annotation id="link">"configuración de busca"</annotation>"."</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wifi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Activar a wifi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wifi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Usar rede wifi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Usar wifi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Configuración da wifi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wifi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Configura e xestiona puntos de acceso sen fíos"</string>
@@ -853,14 +852,14 @@
<string name="wifi_wakeup_summary" msgid="1152699417411690">"A wifi volverase activar preto de redes de alta calidade gardadas, como a túa rede doméstica"</string>
<string name="wifi_wakeup_summary_no_location" msgid="3007457288587966962">"Non está dispoñible porque a localización está desactivada. "<annotation id="link">"Actívaa"</annotation>"."</string>
<string name="wifi_wakeup_summary_scanning_disabled" msgid="6820040651529910914">"Non está dispoñible porque a busca de redes wifi está desactivada"</string>
- <string name="wifi_wakeup_summary_scoring_disabled" msgid="7067018832237903151">"Para utilizar a función, selecciona un provedor de valoración de rede"</string>
+ <string name="wifi_wakeup_summary_scoring_disabled" msgid="7067018832237903151">"Para utilizar a función, selecciona un provedor de valoración de redes"</string>
<string name="wifi_poor_network_detection" msgid="7193423327400703073">"Evitar conexións deficientes"</string>
<string name="wifi_poor_network_detection_summary" msgid="5539951465985614590">"Non utilizar unha rede wifi se non ten unha boa conexión a Internet"</string>
<string name="wifi_avoid_poor_network_detection_summary" msgid="1976503191780928104">"Usar só redes que teñan unha boa conexión a Internet"</string>
<string name="use_open_wifi_automatically_title" msgid="3084513215481454350">"Conectarse ás redes abertas"</string>
<string name="use_open_wifi_automatically_summary" msgid="8338020172673161754">"Conéctase automaticamente a redes públicas de alta calidade"</string>
- <string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"Para utilizar a función, selecciona un provedor de valoración de rede"</string>
- <string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"Para utilizar a función, selecciona un provedor de valoración de rede que sexa compatible"</string>
+ <string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"Para utilizar a función, selecciona un provedor de valoración de redes"</string>
+ <string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"Para utilizar a función, selecciona un provedor de valoración de redes que sexa compatible"</string>
<string name="wifi_install_credentials" msgid="5650088113710858289">"Instalar certificados"</string>
<string name="wifi_scan_notify_text" msgid="7614101215028336927">"Para mellorar a precisión de localización, as aplicacións e os servizos poden seguir buscando redes wifi en calquera momento, aínda que esta conexión estea desactivada. Esta opción pódese utilizar, por exemplo, para mellorar as funcións e os servizos baseados na localización, e podes cambiala na <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>configuración de busca<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
<string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"Para mellorar a precisión de localización, activa a busca de redes wifi na <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>configuración de busca<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
@@ -883,7 +882,7 @@
<string name="wifi_menu_more_options" msgid="8318269834264035524">"Máis opcións"</string>
<string name="wifi_menu_p2p" msgid="4945665601551289791">"Wi‑Fi Direct"</string>
<string name="wifi_menu_scan" msgid="9082691677803181629">"Explorar"</string>
- <string name="wifi_menu_advanced" msgid="5984484498045511072">"Config. avanzada"</string>
+ <string name="wifi_menu_advanced" msgid="5984484498045511072">"Axustes avanzada"</string>
<string name="wifi_menu_configure" msgid="52192491120701266">"Configurar"</string>
<string name="wifi_menu_connect" msgid="3984327567173931219">"Conectar coa rede"</string>
<string name="wifi_menu_remember" msgid="717257200269700641">"Lembrar rede"</string>
@@ -893,7 +892,7 @@
<string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"Buscando redes wifi..."</string>
<string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"Non tes permiso para cambiar a rede wifi."</string>
<string name="wifi_more" msgid="3538241640407382185">"Máis"</string>
- <string name="wifi_setup_wps" msgid="6730131677695521321">"Config. automática (WPS)"</string>
+ <string name="wifi_setup_wps" msgid="6730131677695521321">"Axustes automática (WPS)"</string>
<string name="wifi_settings_scanning_required_title" msgid="3593457187659922490">"Queres activar a busca de redes wifi?"</string>
<string name="wifi_settings_scanning_required_summary" msgid="7469610959462708782">"Para activar a wifi automaticamente, primeiro debes activar a busca de redes wifi."</string>
<string name="wifi_settings_scanning_required_info" msgid="5913535073390607386">"A busca de redes wifi permite que as aplicacións e os servizos busquen estas redes en calquera momento, mesmo se este tipo de conexión está desactivado. Esta opción pode utilizarse, por exemplo, para mellorar as funcións e os servizos baseados na localización."</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wifi"</item>
+ <item msgid="2271962426654621656">"Datos móbiles"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Se non hai ningunha rede wifi dispoñible, utilizar a rede móbil"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Se a rede de telefonía móbil non está dispoñible, utiliza a wifi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Chama por wifi. Se se perde a conexión wifi, a chamada rematará."</string>
@@ -1173,7 +1175,7 @@
<string name="color_mode_option_natural" msgid="1292837781836645320">"Naturais"</string>
<string name="color_mode_option_boosted" msgid="453557938434778933">"Realzadas"</string>
<string name="color_mode_option_saturated" msgid="7758384943407859851">"Saturadas"</string>
- <string name="color_mode_option_automatic" msgid="6572718611315165117">"Automática"</string>
+ <string name="color_mode_option_automatic" msgid="6572718611315165117">"Automáticas"</string>
<string name="color_mode_summary_natural" msgid="1247153893843263340">"Utiliza só cores precisas"</string>
<string name="color_mode_summary_automatic" msgid="6066740785261330514">"Axuste entre cores vivas e precisas"</string>
<string name="accelerometer_summary_on" product="tablet" msgid="5750977897791656412">"Cambia a orientación automaticamente ao xirar a tableta"</string>
@@ -1210,9 +1212,9 @@
<string name="adaptive_sleep_privacy" msgid="5706802215479902623">"A función Pantalla adaptable utiliza a cámara dianteira para ver se alguén está mirando a pantalla. Funciona no dispositivo e as imaxes nunca se almacenan nin envían a Google."</string>
<string name="night_display_title" msgid="1305002424893349814">"Luz nocturna"</string>
<string name="night_display_text" msgid="5330502493684652527">"A función Luz nocturna dálle un ton ámbar á pantalla pola noite para que che resulte máis fácil mirala con pouca luz e che axude a coller o sono."</string>
- <string name="night_display_auto_mode_title" msgid="8493573087102481588">"Planificar"</string>
+ <string name="night_display_auto_mode_title" msgid="8493573087102481588">"Planificación"</string>
<string name="night_display_auto_mode_never" msgid="2897444637217807088">"Nunca"</string>
- <string name="night_display_auto_mode_custom" msgid="1400891076453963151">"Actívase en horario personalizado"</string>
+ <string name="night_display_auto_mode_custom" msgid="1400891076453963151">"Actívase no horario escollido"</string>
<string name="night_display_auto_mode_twilight" msgid="4000162110017520674">"Actívase do solpor ao amencer"</string>
<string name="night_display_start_time_title" msgid="1069255169673371077">"Hora de inicio"</string>
<string name="night_display_end_time_title" msgid="2760793157124245911">"Hora de finalización"</string>
@@ -1463,7 +1465,7 @@
<string name="storage_wizard_init_external_summary" msgid="6993815290050489327">"Para migrar fotos e outros contidos multimedia entre dispositivos."</string>
<string name="storage_wizard_init_internal_title" msgid="8750856962785644870">"Usar como almacenamento interno"</string>
<string name="storage_wizard_init_internal_summary" msgid="4510546464921608029">"Para almacenar calquera cousa só neste dispositivo, incluídas as aplicacións e as fotos. É necesario formatar para evitar que funcione con outros dispositivos."</string>
- <string name="storage_wizard_format_confirm_title" msgid="7785358616068633439">"Formatar como almacenam. interno"</string>
+ <string name="storage_wizard_format_confirm_title" msgid="7785358616068633439">"Formatar como almacenaxe interna"</string>
<string name="storage_wizard_format_confirm_body" msgid="4107762933332992624">"Esta acción esixe que se formate a <xliff:g id="NAME_0">^1</xliff:g> para que estea protexida. \n\nDespois de formatala, esta <xliff:g id="NAME_1">^1</xliff:g> só funcionará neste dispositivo. \n\n"<b>"Ao formatar borraranse todos os datos almacenados actualmente na <xliff:g id="NAME_2">^1</xliff:g>."</b>" Para evitar perder os datos, considera a posibilidade de facer unha copia de seguranza."</string>
<string name="storage_wizard_format_confirm_public_title" msgid="5866830103788091426">"Formatar como almacen. portátil"</string>
<string name="storage_wizard_format_confirm_public_body" msgid="1451308701654703353">"Esta acción esixe que se formate a <xliff:g id="NAME_0">^1</xliff:g>. \n\n"<b>"O formatado borra todos os datos actualmente almacenados en <xliff:g id="NAME_1">^1</xliff:g>."</b>" Para evitar perder os datos, pensa na posibilidade de facer unha copia de seguranza."</string>
@@ -1571,7 +1573,7 @@
<string name="reset_network_title" msgid="8944059136930806211">"Restablecer wifi, rede móbil e Bluetooth"</string>
<string name="reset_network_desc" msgid="4982633363916261109">"Con esta selección, restableceranse todas as opcións de configuración de rede, entre elas as referentes a:\n\n"<li>"Wifi"</li>\n<li>"Datos móbiles"</li>\n<li>"Bluetooth"</li></string>
<string name="reset_esim_title" msgid="7630781767040831893">"Borrar SIM descargadas"</string>
- <string name="reset_esim_desc" msgid="433226911566802">"Para descargar tarxetas SIM de substitución, ponte en contacto co teu operador. Non se cancelará ningún dos plans de servizos para móbiles que teñas."</string>
+ <string name="reset_esim_desc" msgid="433226911566802">"Para descargar tarxetas SIM de substitución, ponte en contacto co teu operador. Non se cancelará ningún dos plans de servizos móbiles que teñas."</string>
<string name="reset_network_button_text" msgid="4293271046867912819">"Restablecer configuración"</string>
<string name="reset_network_final_desc" msgid="2463817067048751373">"Queres restablecer toda a configuración de rede? Non se pode desfacer esta acción."</string>
<string name="reset_network_final_desc_esim" msgid="4676436976372555750">"Queres restablecer todas as opcións de configuración de rede e borrar as SIM descargadas? Non se pode desfacer esta acción."</string>
@@ -1635,7 +1637,7 @@
<string name="sms_change_default_dialog_title" msgid="6301260161969667578">"Queres cambiar a aplicación de SMS?"</string>
<string name="sms_change_default_dialog_text" msgid="8275088077930942680">"Queres utilizar <xliff:g id="NEW_APP">%1$s</xliff:g> en lugar de <xliff:g id="CURRENT_APP">%2$s</xliff:g> como a túa aplicación de SMS?"</string>
<string name="sms_change_default_no_previous_dialog_text" msgid="4680224695080527907">"Queres utilizar <xliff:g id="NEW_APP">%s</xliff:g> como a túa aplicación de SMS?"</string>
- <string name="network_scorer_picker_title" msgid="1691073966560952916">"Provedor da valoración de rede"</string>
+ <string name="network_scorer_picker_title" msgid="1691073966560952916">"Provedor de valoración de redes"</string>
<string name="network_scorer_picker_none_preference" msgid="6448280557733231737">"Ningún"</string>
<string name="network_scorer_change_active_dialog_title" msgid="4274159562371475090">"Queres cambiar o asistente da wifi?"</string>
<string name="network_scorer_change_active_dialog_text" msgid="4264089809189760730">"Queres utilizar <xliff:g id="NEW_APP">%1$s</xliff:g> en lugar de <xliff:g id="CURRENT_APP">%2$s</xliff:g> para xestionar as túas conexións de rede?"</string>
@@ -1765,7 +1767,7 @@
<string name="lockpattern_settings_enable_visible_pattern_title" msgid="4935583222709647096">"Facer visible o padrón"</string>
<string name="lockpattern_settings_enable_visible_pattern_title_profile" msgid="5338893138982642228">"Facer visible o padrón do perfil"</string>
<string name="lockpattern_settings_enable_tactile_feedback_title" msgid="3203621862806531947">"Vibrar ao tocar"</string>
- <string name="lockpattern_settings_enable_power_button_instantly_locks" msgid="5890335732200257777">"Bloquear ao acender"</string>
+ <string name="lockpattern_settings_enable_power_button_instantly_locks" msgid="5890335732200257777">"Bloquear co botón de acender"</string>
<string name="lockpattern_settings_power_button_instantly_locks_summary" msgid="1279989004145567840">"Excepto se <xliff:g id="TRUST_AGENT_NAME">%1$s</xliff:g> mantén o dispositivo desbloqueado"</string>
<string name="lockpattern_settings_choose_lock_pattern" msgid="9042142745571386381">"Definir padrón de desbloqueo"</string>
<string name="lockpattern_settings_change_lock_pattern" msgid="1456643060737114885">"Cambiar padrón de desbloqueo"</string>
@@ -1796,7 +1798,7 @@
<string name="install_all_warning" product="device" msgid="9141585291103603515">"O teu dispositivo e os datos persoais son máis vulnerables aos ataques de aplicacións descoñecidas. Ao instalar aplicacións desta fonte, aceptas que es responsable dos danos que se poidan producir no dispositivo ou da perda de datos que se poida derivar do seu uso."</string>
<string name="advanced_settings" msgid="6282069364060968122">"Configuración avanzada"</string>
<string name="advanced_settings_summary" msgid="5912237062506771716">"Activa máis opcións de configuración"</string>
- <string name="application_info_label" msgid="3886253474964599105">"Info da app"</string>
+ <string name="application_info_label" msgid="3886253474964599105">"Información das aplicacións"</string>
<string name="storage_label" msgid="1109537840103290384">"Almacenamento"</string>
<string name="auto_launch_label" msgid="47089737922907379">"Abrir de forma predeterminada"</string>
<string name="auto_launch_label_generic" msgid="7865828543459493308">"Valores predeterminados"</string>
@@ -2059,7 +2061,7 @@
<string name="accessibility_screen_magnification_summary" msgid="3363006902079431772"><b>"Para achegar o zoom"</b>", toca a pantalla 3 veces rapidamente.\n"<ul><li>"Arrastra 2 ou máis dedos para desprazarte"</li>\n<li>"Belisca con 2 ou máis dedos para axustar o zoom"</li></ul>\n\n<b>"Para achegar o zoom temporalmente"</b>", toca a pantalla 3 veces rapidamente e mantén o dedo sobre a pantalla despois do terceiro toque.\n"<ul><li>"Arrastra o dedo para moverte pola pantalla"</li>\n<li>"Levántao para afastar o zoom"</li></ul>\n\n"Non podes achegar o zoom sobre o teclado nin sobre a barra de navegación."</string>
<string name="accessibility_screen_magnification_navbar_summary" msgid="4726360285256503132">"Cando a ampliación estea activada, utiliza o botón Accesibilidade da parte inferior da pantalla para ampliar rapidamente o contido.\n\n"<b>"Para achegar o zoom"</b>", toca o botón Accesibilidade e, a continuación, toca en calquera parte da pantalla.\n"<ul><li>"Arrastra 2 ou máis dedos para desprazarte"</li>\n<li>"Belisca con 2 ou máis dedos para axustar o zoom"</li></ul>\n\n<b>"Para achegar o zoom temporalmente"</b>", toca o botón Accesibilidade e, a continuación, mantén tocada calquera parte da pantalla.\n"<ul><li>"Arrastra o dedo para moverte pola pantalla"</li>\n<li>"Levántao para afastar o zoom"</li></ul>\n\n"Non podes achegar o zoom sobre o teclado nin sobre a barra de navegación."</string>
<string name="accessibility_screen_magnification_navbar_configuration_warning" msgid="6477234309484795550">"O botón Accesibilidade está configurado en <xliff:g id="SERVICE">%1$s</xliff:g>. Para utilizar a ampliación, mantén tocado o botón Accesibilidade e, a continuación, selecciona a ampliación."</string>
- <string name="accessibility_global_gesture_preference_title" msgid="3842279082831426816">"Atallo mediante as teclas de volume"</string>
+ <string name="accessibility_global_gesture_preference_title" msgid="3842279082831426816">"Atallo da tecla de volume"</string>
<string name="accessibility_shortcut_service_title" msgid="3516052294376744060">"Servizo de atallo"</string>
<string name="accessibility_shortcut_service_on_lock_screen_title" msgid="1279441617927949980">"Permitir na pantalla bloqueo"</string>
<string name="accessibility_shortcut_description" msgid="1427049334225166395">"Cando o atallo está activado, podes premer as dúas teclas de volume durante 3 segundos para iniciar unha función de accesibilidade."</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Vibración das notificacións"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Vibración do ton"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Vibración ao tocar"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Usar servizo"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Usar corrección da cor"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Usar subtítulos"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Usar servizo"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Usar corrección da cor"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Usar subtítulos"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Continuar"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Audiófonos"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Non hai ningún audiófono conectado"</string>
@@ -2160,7 +2162,7 @@
<string name="captioning_edge_color" msgid="4330622137047993780">"Cor do bordo"</string>
<string name="captioning_edge_type" msgid="4414946407430588162">"Tipo de bordo"</string>
<string name="captioning_typeface" msgid="7893208796949341767">"Familia do tipo de letra"</string>
- <string name="captioning_preview_text" msgid="4877753964772618049">"Os subtítulos terán un aspecto similar ao seguinte"</string>
+ <string name="captioning_preview_text" msgid="4877753964772618049">"Os subtítulos veranse así"</string>
<string name="captioning_preview_characters" msgid="6469599599352973561">"Aa"</string>
<string name="locale_default" msgid="910074908458214054">"Predeterminado"</string>
<string name="color_title" msgid="132875486061816584">"Cor"</string>
@@ -2296,8 +2298,8 @@
<item quantity="one">Restrinxiuse recentemente a aplicación %1$s</item>
</plurals>
<plurals name="battery_tip_restrict_summary" formatted="false" msgid="984148373944071669">
- <item quantity="other">%2$d aplicacións utilizan moita batería en segundo plano</item>
- <item quantity="one">A aplicación %1$s utiliza moita batería en segundo plano</item>
+ <item quantity="other">%2$d apps usan moita batería en segundo plano</item>
+ <item quantity="one">%1$s usa moita batería en segundo plano</item>
</plurals>
<plurals name="battery_tip_restrict_handled_summary" formatted="false" msgid="469696766640020557">
<item quantity="other">Estas aplicacións non se poden executar en segundo plano</item>
@@ -2447,7 +2449,7 @@
<string name="battery_saver" msgid="3989710213758938398">"Aforro de batería"</string>
<string name="battery_saver_auto_title" msgid="4158659069641849952">"Activar automaticamente"</string>
<string name="battery_saver_auto_no_schedule" msgid="739814529432092706">"Sen planificación"</string>
- <string name="battery_saver_auto_routine" msgid="886514412067906980">"Baseada na túa rutina"</string>
+ <string name="battery_saver_auto_routine" msgid="886514412067906980">"Segundo a túa rutina"</string>
<string name="battery_saver_auto_percentage" msgid="5791982309331921556">"Baseada nunha porcentaxe"</string>
<string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"A función Aforro de batería actívase se se prevé que a batería pode esgotarse antes da seguinte carga. Esta estimación realízase a partir da rutina que segues habitualmente"</string>
<string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"Activarase cando a batería estea ao <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Activar"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Usar Aforro de batería"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Usar Aforro de batería"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Activar automaticamente"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Nunca"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"coa batería ao <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
@@ -2539,7 +2541,7 @@
<string name="credential_for_vpn_and_apps" msgid="2462642486949593841">"Instalada para a VPN e as aplicacións"</string>
<string name="credential_for_wifi" msgid="2903295786961726388">"Instalada para a wifi"</string>
<string name="credentials_reset_hint" msgid="3484350477764088169">"Queres eliminar todos os contidos?"</string>
- <string name="credentials_erased" msgid="7287088033523869085">"Almacenam. credenciais borrado"</string>
+ <string name="credentials_erased" msgid="7287088033523869085">"Almacenaxe credenciais borrada"</string>
<string name="credentials_not_erased" msgid="9137227570738627637">"Imposible borrar almacen. credenciais"</string>
<string name="usage_access_title" msgid="7981321142726540574">"Apps con acceso de uso"</string>
<string name="emergency_tone_title" msgid="130211364025984428">"Sinal de marcación de emerxencia"</string>
@@ -2604,8 +2606,7 @@
<string name="background_data_summary" msgid="799640633948841990">"Aplicacións poden sincronizar, enviar e recibir datos sempre"</string>
<string name="background_data_dialog_title" msgid="8306650658158895976">"Des. datos 2º plano?"</string>
<string name="background_data_dialog_message" msgid="8126774244911656527">"A desactivación dos datos en segundo plano amplía a duración da batería e reduce o uso de datos. É posible que algunhas aplicacións continúen utilizando a conexión de datos en segundo plano."</string>
- <!-- no translation found for sync_automatically (5746117156896468099) -->
- <skip />
+ <string name="sync_automatically" msgid="5746117156896468099">"Sincronizar automat. datos das apps"</string>
<string name="sync_enabled" msgid="535172627223336983">"Sincronización activada"</string>
<string name="sync_disabled" msgid="713721807204805062">"Sen sincronización"</string>
<string name="sync_error" msgid="988155155932442765">"Erro de sincronización"</string>
@@ -2915,7 +2916,7 @@
<string name="apps_with_restrictions_settings_button" msgid="5065896213467171744">"Ampliar axustes aplicación"</string>
<string name="nfc_payment_settings_title" msgid="5070077706735415291">"Tocar e pagar"</string>
<string name="nfc_payment_how_it_works" msgid="7607901964687787177">"Como funciona"</string>
- <string name="nfc_payment_no_apps" msgid="8844440783395420860">"Paga co teu teléfono nas tendas"</string>
+ <string name="nfc_payment_no_apps" msgid="8844440783395420860">"Paga co teléfono nas tendas"</string>
<string name="nfc_payment_default" msgid="7869273092463612271">"Aplicación de pago predeterminada"</string>
<string name="nfc_payment_default_not_set" msgid="955804193510335338">"Sen configurar"</string>
<string name="nfc_payment_app_and_desc" msgid="102312684211458190">"<xliff:g id="APP">%1$s</xliff:g> - <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
@@ -3200,7 +3201,7 @@
<string name="zen_mode_restrict_notifications_mute_footer" msgid="3049522809520549054">"O teléfono non vibrará nin emitirá sons cando cheguen notificacións."</string>
<string name="zen_mode_restrict_notifications_hide" msgid="3296933643539682552">"Notificacións sen son nin elementos visuais"</string>
<string name="zen_mode_restrict_notifications_hide_summary" msgid="1449301153755270168">"Non verás nin escoitarás notificacións"</string>
- <string name="zen_mode_restrict_notifications_hide_footer" msgid="7617688597593946765">"O teléfono non mostrará notificacións, nin vibrará nin emitirá sons con notificacións novas ou existentes. Ten en conta que se seguirán mostrando as notificacións esenciais para o estado e a actividade do teléfono.\n\nCando desactives o modo Non molestar, poderás pasar o dedo cara abaixo desde a parte superior da pantalla para ler as notificacións que non viches."</string>
+ <string name="zen_mode_restrict_notifications_hide_footer" msgid="7617688597593946765">"O teléfono non mostrará notificacións, vibrará nin emitirá sons con notificacións novas ou existentes. Ten en conta que se seguirán mostrando as notificacións esenciais para o estado e a actividade do teléfono.\n\nCando desactives o modo Non molestar, poderás pasar o dedo cara abaixo desde a parte superior da pantalla para ler as notificacións que non viches."</string>
<string name="zen_mode_restrict_notifications_custom" msgid="3167252482570424133">"Configuración personalizada"</string>
<string name="zen_mode_restrict_notifications_enable_custom" msgid="6376983315529894440">"Activar configuración personalizada"</string>
<string name="zen_mode_restrict_notifications_disable_custom" msgid="8004212081465043044">"Quitar configuración personalizada"</string>
@@ -3495,7 +3496,7 @@
<string name="zen_calls_summary_starred_repeat" msgid="9191394641577678207">"De contactos marcados con estrela e chamadas repetidas"</string>
<string name="zen_calls_summary_contacts_repeat" msgid="7747592096431111510">"Dos contactos e de chamadas repetidas"</string>
<string name="zen_calls_summary_repeat_only" msgid="8839703337232747964">"Só de chamadas repetidas"</string>
- <string name="zen_mode_from_none" msgid="7683889985618637010">"De ninguén"</string>
+ <string name="zen_mode_from_none" msgid="7683889985618637010">"Ninguén"</string>
<string name="zen_mode_from_none_calls" msgid="2967739140346917546">"Non permitir ningunha chamada"</string>
<string name="zen_mode_from_none_messages" msgid="9069143820057833634">"Non permitir ningunha mensaxe"</string>
<string name="zen_mode_alarms" msgid="5528707742250954290">"Permitir alarmas"</string>
@@ -3695,7 +3696,7 @@
<string name="process_format" msgid="8575347150598564509">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="COUNT">%2$d</xliff:g>)"</string>
<string name="high_power_apps" msgid="2518319744362028920">"Optimización da batería"</string>
<string name="additional_battery_info" msgid="6877663897819271203">"Alertas de uso"</string>
- <string name="show_all_apps" msgid="5442552004569634846">"Mostrar uso completo do dispositivo"</string>
+ <string name="show_all_apps" msgid="5442552004569634846">"Uso do dispositivo"</string>
<string name="hide_extra_apps" msgid="6798261081113299441">"Mostrar uso das aplicacións"</string>
<plurals name="power_high_usage_summary" formatted="false" msgid="4658343710126205199">
<item quantity="other"><xliff:g id="NUMBER">%2$d</xliff:g> aplicacións presentan un comportamento anormal</item>
@@ -3710,7 +3711,7 @@
<string name="high_power_off" msgid="5906679734326490426">"Optimizando o uso da batería"</string>
<string name="high_power_system" msgid="739584574711292753">"A optimización da batería non está dispoñible"</string>
<string name="high_power_desc" msgid="333756885680362741">"Non aplicar a optimización da batería, xa que esta pode esgotarse máis rápido."</string>
- <string name="high_power_prompt_title" msgid="2805745781720454052">"Queres permitir que esta aplicación se execute sempre en segundo plano?"</string>
+ <string name="high_power_prompt_title" msgid="2805745781720454052">"Permitir que se execute sempre en segundo plano?"</string>
<string name="high_power_prompt_body" msgid="8067395096053552289">"Se permites que <xliff:g id="APP_NAME">%1$s</xliff:g> estea executándose sempre en segundo plano, é posible que se reduza a duración da batería. \n\nPodes cambiar esta opción máis tarde en Configuración > Aplicacións e notificacións."</string>
<string name="battery_summary" msgid="4345690800899981339">"Uso do <xliff:g id="PERCENTAGE">%1$s</xliff:g> desde a última carga completa"</string>
<string name="battery_power_management" msgid="2853925857548647969">"Xestión da batería"</string>
@@ -3798,7 +3799,7 @@
<string name="app_list_preference_none" msgid="7100409177446935028">"Ningún"</string>
<string name="work_profile_usage_access_warning" msgid="403208064382097510">"A desactivación do acceso de uso desta aplicación non impide que o teu administrador realice o seguimento do uso de datos das aplicacións no teu perfil de traballo"</string>
<string name="accessibility_lock_screen_progress" msgid="8242917828598820049">"Uso de <xliff:g id="COUNT_0">%1$d</xliff:g> de <xliff:g id="COUNT_1">%2$d</xliff:g> caracteres"</string>
- <string name="draw_overlay" msgid="2878665072530660668">"Superpoñer sobre aplicacións"</string>
+ <string name="draw_overlay" msgid="2878665072530660668">"Superpor a aplicacións"</string>
<string name="system_alert_window_settings" msgid="3024330223417646567">"Mostrar sobre outras aplicacións"</string>
<string name="system_alert_window_apps_title" msgid="9188448296493699566">"Aplicacións"</string>
<string name="system_alert_window_access_title" msgid="5187343732185369675">"Mostrar sobre outras aplicacións"</string>
@@ -3806,7 +3807,7 @@
<string name="allow_overlay_description" msgid="6669524816705082807">"Permite que esta aplicación se mostre enriba doutras aplicacións que estás utilizando. Pode interferir no uso desas aplicacións ou cambiar a forma na que aparecen ou se comportan."</string>
<string name="keywords_vr_listener" msgid="5312633527788917750">"rv realidade virtual axente de escoita estéreo asistente servizo"</string>
<string name="keywords_system_alert_window" msgid="3936658600272194599">"cadro de diálogo da ventá de alerta do sistema para mostrar sobre outras aplicacións"</string>
- <string name="overlay_settings" msgid="3325154759946433666">"Superpoñer sobre aplicacións"</string>
+ <string name="overlay_settings" msgid="3325154759946433666">"Superpor a aplicacións"</string>
<string name="system_alert_window_summary" msgid="7703582115861844158">"Aplicacións con permiso para superpoñerse a outras: <xliff:g id="COUNT_0">%1$d</xliff:g> de <xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
<string name="filter_overlay_apps" msgid="6336897660213304743">"Aplicacións con permiso"</string>
<string name="app_permission_summary_allowed" msgid="6458476982015518778">"Permitido"</string>
@@ -3832,7 +3833,7 @@
<string name="screen_zoom_title" msgid="164369086350486104">"Tamaño de visualización"</string>
<string name="screen_zoom_short_summary" msgid="5508079362742276703">"Reduce ou amplía os elementos da pantalla"</string>
<string name="screen_zoom_keywords" msgid="8358462497896524092">"densidade de visualización, zoom da pantalla, escala, escalado"</string>
- <string name="screen_zoom_summary" msgid="5294003755961312560">"Reduce ou amplía os elementos da pantalla. É posible que algunhas aplicacións da pantalla cambien de posición."</string>
+ <string name="screen_zoom_summary" msgid="5294003755961312560">"Reduce ou amplía o tamaño dos elementos na pantalla. É posible que algunhas aplicacións da pantalla cambien de posición."</string>
<string name="screen_zoom_preview_title" msgid="2924312934036753091">"Vista previa"</string>
<string name="screen_zoom_make_smaller_desc" msgid="1374501139722916729">"Facer máis pequeno"</string>
<string name="screen_zoom_make_larger_desc" msgid="5306684807895846141">"Facer máis grande"</string>
@@ -4009,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Se o dispositivo está bloqueado, impide escribir respostas ou outro texto nas notificacións"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Corrector predeterminado"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Escoller corrector ortográfico"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Utilizar o corrector ortográfico"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Usar corrector ortográfico"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Non seleccionado"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(ningún)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4102,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Para axudar a liberar espazo de almacenamento, o xestor de almacenamento elimina as fotos e vídeos con copia de seguranza do teu dispositivo."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Eliminar fotos e vídeos"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Xestor de almacenamento"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Usar xestor de almacenamento"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Usar xestor de almacenamento"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automático"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manual"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Liberar espazo agora"</string>
@@ -4476,7 +4477,7 @@
<string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"Queres eliminar esta suxestión?"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"Quitouse a suxestión"</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"Desfacer"</string>
- <string name="low_storage_summary" msgid="4562224870189133400">"Queda pouco espazo. Utilizado: <xliff:g id="PERCENTAGE">%1$s</xliff:g>. Libre: <xliff:g id="FREE_SPACE">%2$s</xliff:g>"</string>
+ <string name="low_storage_summary" msgid="4562224870189133400">"Queda pouco espazo. En uso: <xliff:g id="PERCENTAGE">%1$s</xliff:g>. Libre: <xliff:g id="FREE_SPACE">%2$s</xliff:g>"</string>
<string name="contextual_card_feedback_send" msgid="8698649023854350623">"Enviar comentarios"</string>
<string name="contextual_card_feedback_confirm_message" msgid="3987973028353264878">"Queres indicarnos a túa opinión sobre esta suxestión?"</string>
<string name="copyable_slice_toast" msgid="1357518174923789947">"<xliff:g id="COPY_CONTENT">%1$s</xliff:g>: copiouse no portapapeis."</string>
diff --git a/tests/CarDeveloperOptions/res/values-gu/arrays.xml b/tests/CarDeveloperOptions/res/values-gu/arrays.xml
index 4691201..8ad9984 100644
--- a/tests/CarDeveloperOptions/res/values-gu/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-gu/arrays.xml
@@ -29,8 +29,25 @@
<item msgid="5194868215515664953">"પેસિફિક"</item>
<item msgid="7044520255415007865">"તમામ"</item>
</string-array>
- <!-- no translation found for screen_timeout_entries:0 (8596143519087753804) -->
- <!-- no translation found for dream_timeout_entries:7 (8271452751594598661) -->
+ <string-array name="screen_timeout_entries">
+ <item msgid="8596143519087753804">"15 સેકન્ડ"</item>
+ <item msgid="772029947136115322">"30 સેકન્ડ"</item>
+ <item msgid="8743663928349474087">"1 મિનિટ"</item>
+ <item msgid="1506508631223164814">"2 મિનિટ"</item>
+ <item msgid="8664703938127907662">"5 મિનિટ"</item>
+ <item msgid="5827960506924849753">"10 મિનિટ"</item>
+ <item msgid="6677424950124253938">"30 મિનિટ"</item>
+ </string-array>
+ <string-array name="dream_timeout_entries">
+ <item msgid="6487043225269853023">"ક્યારેય નહીં"</item>
+ <item msgid="2517785806387977252">"15 સેકન્ડ"</item>
+ <item msgid="6347954399441173672">"30 સેકન્ડ"</item>
+ <item msgid="4858305253279921789">"1 મિનિટ"</item>
+ <item msgid="8109273437140044073">"2 મિનિટ"</item>
+ <item msgid="2788593551142462622">"5 મિનિટ"</item>
+ <item msgid="8012672183888404961">"10 મિનિટ"</item>
+ <item msgid="8271452751594598661">"30 મિનિટ"</item>
+ </string-array>
<string-array name="lock_after_timeout_entries">
<item msgid="2232921187970351881">"ત્વરિત"</item>
<item msgid="2038544972632026612">"5 સેકન્ડ"</item>
@@ -42,17 +59,47 @@
<item msgid="811192536981678974">"10 મિનિટ"</item>
<item msgid="7258394417241706272">"30 મિનિટ"</item>
</string-array>
- <!-- no translation found for entries_font_size:0 (2340391964816059553) -->
- <!-- no translation found for entries_font_size:0 (6490061470416867723) -->
- <!-- no translation found for entries_font_size:2 (1714184661981538355) -->
- <!-- no translation found for entries_font_size:2 (1678068858001018666) -->
- <!-- no translation found for wifi_status:3 (5848277343965362748) -->
- <!-- no translation found for wifi_status_with_ssid:1 (6816207058895999545) -->
- <!-- no translation found for wifi_status_with_ssid:3 (7547609081339573756) -->
- <!-- no translation found for wifi_status_with_ssid:4 (5145158315060185414) -->
+ <string-array name="entries_font_size">
+ <item msgid="2340391964816059553">"નાના"</item>
+ <item msgid="591935967183159581">"ડિફૉલ્ટ"</item>
+ <item msgid="1714184661981538355">"મોટા"</item>
+ <item msgid="6195563047686707484">"સૌથી મોટું"</item>
+ </string-array>
+ <string-array name="wifi_status">
+ <item msgid="1304883790721412351"></item>
+ <item msgid="4157625910392775808">"સ્કેન કરી રહ્યું છે..."</item>
+ <item msgid="5597394826455877834">"કનેક્ટ થઈ રહ્યું છે…"</item>
+ <item msgid="5848277343965362748">"પ્રમાણિત કરી રહ્યું છે…"</item>
+ <item msgid="3391238031431440676">"IP ઍડ્રેસ મેળવી રહ્યાં છે..."</item>
+ <item msgid="5257597310494000224">"કનેક્ટ થયું"</item>
+ <item msgid="8472497592913050396">"સસ્પેન્ડેડ"</item>
+ <item msgid="1228072488815999109">"ડિસ્કનેક્ટ થઈ રહ્યું છે..."</item>
+ <item msgid="7253087004422991731">"ડિસ્કનેક્ટ કર્યું"</item>
+ <item msgid="4169850917304751227">"અસફળ"</item>
+ <item msgid="6266658166690831131">"અવરોધિત"</item>
+ <item msgid="4517230805854909775">"નબળા કનેક્શનને અસ્થાયી રૂપે ટાળી રહ્યું છે"</item>
+ </string-array>
+ <string-array name="wifi_status_with_ssid">
+ <item msgid="4853670665485437464"></item>
+ <item msgid="6816207058895999545">"સ્કૅન કરી રહ્યાં છીએ…"</item>
+ <item msgid="8058143476674427024">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> પર કનેક્ટ થઈ રહ્યું છે..."</item>
+ <item msgid="7547609081339573756">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> સાથે પ્રમાણિત કરી રહ્યું છે…"</item>
+ <item msgid="5145158315060185414">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> તરફથી IP ઍડ્રેસ મેળવી રહ્યું છે…"</item>
+ <item msgid="3283243151651124831">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> સાથે કનેક્ટ થયાં"</item>
+ <item msgid="6600156231416890902">"સસ્પેન્ડેડ"</item>
+ <item msgid="4133290864821295785">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> થી ડિસ્કનેક્ટ થઈ રહ્યાં છે…"</item>
+ <item msgid="3980154971187953257">"ડિસ્કનેક્ટ કર્યું"</item>
+ <item msgid="2847316776634969068">"અસફળ"</item>
+ <item msgid="4390990424746035383">"અવરોધિત"</item>
+ <item msgid="3618248791367063949">"અસ્થાયી રૂપે નબળા કનેક્શનને ટાળી રહ્યું છે"</item>
+ </string-array>
<!-- no translation found for wifi_tether_security:0 (5586343370515598801) -->
<!-- no translation found for wifi_tether_security:1 (6136336549994615745) -->
- <!-- no translation found for wifi_p2p_wps_setup:0 (5390235347963255303) -->
+ <string-array name="wifi_p2p_wps_setup">
+ <item msgid="5390235347963255303">"પુશ બટન"</item>
+ <item msgid="7401896200768713930">"પીઅર ઉપકરણ પરથી પિન"</item>
+ <item msgid="4526848028011846710">"આ ઉપકરણ પરથી પિન"</item>
+ </string-array>
<string-array name="wifi_p2p_status">
<item msgid="8741947238021758201">"કનેક્ટ થયું"</item>
<item msgid="983792611851499732">"આમંત્રિત"</item>
@@ -60,7 +107,12 @@
<item msgid="4646663015449312554">"ઉપલબ્ધ"</item>
<item msgid="3230556734162006146">"શ્રેણીથી બહાર"</item>
</string-array>
- <!-- no translation found for bluetooth_visibility_timeout_entries:1 (2759776603549270587) -->
+ <string-array name="bluetooth_visibility_timeout_entries">
+ <item msgid="8247986727324120082">"2 મિનિટ"</item>
+ <item msgid="2759776603549270587">"5 મિનિટ"</item>
+ <item msgid="167772676068860015">"1 કલાક"</item>
+ <item msgid="5985477119043628504">"ક્યારેય સમયસમાપ્તિ નહીં"</item>
+ </string-array>
<string-array name="bluetooth_max_connected_audio_devices">
<item msgid="3800257971619063588">"સિસ્ટમ ડિફૉલ્ટનો ઉપયોગ કરો: <xliff:g id="DEFAULT_BLUETOOTH_MAX_CONNECTED_AUDIO_DEVICES">%1$d</xliff:g>"</item>
<item msgid="8572230405241423895">"1"</item>
@@ -69,8 +121,13 @@
<item msgid="1644506614010085798">"4"</item>
<item msgid="3132506679404897150">"5"</item>
</string-array>
- <!-- no translation found for wifi_signal:1 (7882129634982603782) -->
- <!-- no translation found for wifi_signal:4 (999948812884919584) -->
+ <string-array name="wifi_signal">
+ <item msgid="1709949377823900951">"નબળી"</item>
+ <item msgid="7882129634982603782">"નબળી"</item>
+ <item msgid="6457357501905996224">"ઠીક"</item>
+ <item msgid="405271628162918841">"સારી"</item>
+ <item msgid="999948812884919584">"ઉત્તમ"</item>
+ </string-array>
<string-array name="data_usage_data_range">
<item msgid="8986775481492954015">"છેલ્લા 30 દિવસ"</item>
<item msgid="3211287705232736964">"વપરાશ સાયકલ સેટ કરો..."</item>
@@ -106,7 +163,10 @@
<item msgid="7330627471456865502">"MSCHAPV2"</item>
<item msgid="6255179395132581882">"GTC"</item>
</string-array>
- <!-- no translation found for wifi_ip_settings:1 (4377002609760712163) -->
+ <string-array name="wifi_ip_settings">
+ <item msgid="2717196390555072244">"DHCP"</item>
+ <item msgid="4377002609760712163">"સ્ટેટિક"</item>
+ </string-array>
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"કોઈ નહીં"</item>
<item msgid="1464741437353223198">"મેન્યુઅલ"</item>
@@ -197,7 +257,7 @@
<item msgid="5420704980305018295">"વૉઇસ વૉલ્યૂમ"</item>
<item msgid="5797363115508970204">"રિંગ વૉલ્યૂમ"</item>
<item msgid="8233154098550715999">"મીડિયા વૉલ્યૂમ"</item>
- <item msgid="5196715605078153950">"એલાર્મ વૉલ્યૂમ"</item>
+ <item msgid="5196715605078153950">"અલાર્મ વૉલ્યૂમ"</item>
<item msgid="394030698764284577">"નોટિફિકેશન વૉલ્યૂમ"</item>
<item msgid="8952898972491680178">"બ્લૂટૂથ વૉલ્યૂમ"</item>
<item msgid="8506227454543690851">"સક્રિય રાખો"</item>
@@ -226,11 +286,73 @@
<item msgid="1165623660533024666">"પૃષ્ઠભૂમિમાં ચલાવો"</item>
<item msgid="6423861043647911030">"ઍક્સેસિબિલિટી વૉલ્યૂમ"</item>
</string-array>
- <!-- no translation found for app_ops_labels:3 (7836406246005211990) -->
- <!-- no translation found for app_ops_labels:4 (3951439024549922598) -->
- <!-- no translation found for app_ops_labels:8 (3597797992398484655) -->
- <!-- no translation found for app_ops_labels:20 (3037159047591081136) -->
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"સ્થાન"</item>
+ <item msgid="6656077694190491067">"સ્થાન"</item>
+ <item msgid="8790228218278477369">"સ્થાન"</item>
+ <item msgid="7836406246005211990">"વાઇબ્રેટ"</item>
+ <item msgid="3951439024549922598">"સંપર્કો વાંચો"</item>
+ <item msgid="8802152411647068">"સંપર્કો સંશોધિત કરો"</item>
+ <item msgid="229544934599698735">"કૉલ લૉગ વાંચો"</item>
+ <item msgid="7396102294405899613">"કૉલ લૉગ સંશોધિત કરો"</item>
+ <item msgid="3597797992398484655">"કૅલેન્ડર વાંચો"</item>
+ <item msgid="2705975774250907343">"કૅલેન્ડર સંશોધિત કરો"</item>
+ <item msgid="4668747371441932697">"સ્થાન"</item>
+ <item msgid="1487578921720243646">"પોસ્ટ નોટિફિકેશન"</item>
+ <item msgid="4636080349724146638">"સ્થાન"</item>
+ <item msgid="673510900286463926">"કૉલ કરો"</item>
+ <item msgid="542083422784609790">"SMS/MMS વાંચો"</item>
+ <item msgid="1033780373029588436">"SMS/MMS લખો"</item>
+ <item msgid="5647111115517787488">"SMS/MMS પ્રાપ્ત કરો"</item>
+ <item msgid="8591105601108455893">"SMS/MMS પ્રાપ્ત કરો"</item>
+ <item msgid="7730995008517841903">"SMS/MMS પ્રાપ્ત કરો"</item>
+ <item msgid="2613033109026626086">"SMS/MMS પ્રાપ્ત કરો"</item>
+ <item msgid="3037159047591081136">"SMS/MMS મોકલો"</item>
+ <item msgid="4726682243833913568">"SMS/MMS વાંચો"</item>
+ <item msgid="6555678522277865572">"SMS/MMS લખો"</item>
+ <item msgid="6981734935578130884">"સેટિંગ્સ સંશોધિત કરો"</item>
+ <item msgid="8705854389991425629">"શીર્ષ પર ખેંચો"</item>
+ <item msgid="5861356020344153651">"સૂચનાઓ ઍક્સેસ કરો"</item>
+ <item msgid="78432174621628659">"કૅમેરો"</item>
+ <item msgid="3986116419882154794">"ઑડિઓ રેકોર્ડ કરો"</item>
+ <item msgid="4516840825756409490">"ઑડિઓ ચલાવો"</item>
+ <item msgid="6811712502798183957">"ક્લિપબોર્ડ વાંચો"</item>
+ <item msgid="2780369012602289114">"ક્લિપબોર્ડ સંશોધિત કરો"</item>
+ <item msgid="2331359440170850868">"મીડિયા બટન્સ"</item>
+ <item msgid="6133599737122751231">"ઑડિઓ ફોકસ"</item>
+ <item msgid="6844485713404805301">"માસ્ટર વૉલ્યૂમ"</item>
+ <item msgid="1600379420669104929">"વૉઇસ વૉલ્યૂમ"</item>
+ <item msgid="6296768210470214866">"રિંગ વૉલ્યૂમ"</item>
+ <item msgid="510690696071629241">"મીડિયા વૉલ્યૂમ"</item>
+ <item msgid="406861638631430109">"અલાર્મ વૉલ્યૂમ"</item>
+ <item msgid="4715864795872233884">"નોટિફિકેશન વૉલ્યૂમ"</item>
+ <item msgid="2311478519251301183">"બ્લૂટૂથ વૉલ્યૂમ"</item>
+ <item msgid="5133991377896747027">"સક્રિય રાખો"</item>
+ <item msgid="2464189519136248621">"સ્થાન"</item>
+ <item msgid="2062677934050803037">"સ્થાન"</item>
+ <item msgid="1735171933192715957">"ઉપયોગના આંકડા મેળવો"</item>
+ <item msgid="1014093788778383554">"માઇક્રોફોનનો અવાજ બંધ/ચાલુ કરો"</item>
+ <item msgid="4199297950608622850">"ટોસ્ટ બતાવો"</item>
+ <item msgid="2527962435313398821">"પ્રોજેક્ટ મીડિયા"</item>
+ <item msgid="5117506254221861929">"VPN સક્રિય કરો"</item>
+ <item msgid="8291198322681891160">"વૉલપેપર લખો"</item>
+ <item msgid="7106921284621230961">"મદદ સંરચના"</item>
+ <item msgid="4496533640894624799">"મદદ સ્ક્રીનશોટ"</item>
+ <item msgid="2598847264853993611">"ફોન સ્થિતિ વાંચો"</item>
+ <item msgid="9215610846802973353">"વૉઇસમેઇલ ઉમેરો"</item>
+ <item msgid="9186411956086478261">"sip નો ઉપયોગ કરો"</item>
+ <item msgid="6884763100104539558">"આઉટગોઇંગ કૉલ પર પ્રક્રિયા કરો"</item>
+ <item msgid="125513972170580692">"ફિંગરપ્રિન્ટ"</item>
+ <item msgid="2556071024281275619">"બોડી સેન્સર્સ"</item>
+ <item msgid="617168514928339387">"સેલ બ્રોડકાસ્ટ્સ વાંચો"</item>
+ <item msgid="7134693570516523585">"મોક સ્થાન"</item>
+ <item msgid="7224489175375229399">"સ્ટોરેજ વાંચો"</item>
+ <item msgid="8472735063903258202">"સ્ટોરેજ પર લખો"</item>
+ <item msgid="4069276819909595110">"સ્ક્રીન ચાલુ કરો"</item>
+ <item msgid="1228338896751121025">"એકાઉન્ટ્સ મેળવો"</item>
+ <item msgid="3181581793459233672">"પૃષ્ઠભૂમિમાં ચલાવો"</item>
+ <item msgid="2340936043025374076">"ઍક્સેસિબિલિટી વૉલ્યૂમ"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"નાનો"</item>
<item msgid="4816511817309094890">"મધ્યમ"</item>
@@ -247,15 +369,35 @@
<item msgid="4627069151979553527">"કર્સિવ"</item>
<item msgid="6896773537705206194">"નાના કેપિટલ્સ"</item>
</string-array>
- <!-- no translation found for captioning_font_size_selector_titles:3 (2784236342175159295) -->
- <!-- no translation found for captioning_edge_type_selector_titles:4 (8019330250538856521) -->
+ <string-array name="captioning_font_size_selector_titles">
+ <item msgid="1680223634161592855">"ઘણું નાનું"</item>
+ <item msgid="5091603983404027034">"નાનું"</item>
+ <item msgid="176844712416932112">"સામાન્ય"</item>
+ <item msgid="2784236342175159295">"મોટા"</item>
+ <item msgid="218913203203160606">"ઘણું મોટું"</item>
+ </string-array>
+ <string-array name="captioning_edge_type_selector_titles">
+ <item msgid="3865198759294188069">"ડિફૉલ્ટ"</item>
+ <item msgid="6488643537808152001">"કોઈ નહીં"</item>
+ <item msgid="552332815156010137">"બાહ્યરેખા"</item>
+ <item msgid="7187891159463789272">"છાયો છોડો"</item>
+ <item msgid="8019330250538856521">"ઉપસેલા"</item>
+ <item msgid="8987385315647049787">"દબાવેલ"</item>
+ </string-array>
<string-array name="captioning_opacity_selector_titles">
<item msgid="313003243371588365">"25%"</item>
<item msgid="4665048002584838262">"50%"</item>
<item msgid="1874668269931014581">"75%"</item>
<item msgid="6462911487571123954">"100%"</item>
</string-array>
- <!-- no translation found for captioning_preset_selector_titles:2 (5891360837786277638) -->
+ <string-array name="captioning_preset_selector_titles">
+ <item msgid="326819345272910536">"ઍપ્લિકેશન ડિફોલ્ટ્સનો ઉપયોગ કરો"</item>
+ <item msgid="8611890312638868524">"કાળા પર સફેદ"</item>
+ <item msgid="5891360837786277638">"સફેદ પર કાળી"</item>
+ <item msgid="2798457065945456853">"કાળા પર પીળી"</item>
+ <item msgid="5799049811524553967">"વાદળી પર પીળી"</item>
+ <item msgid="3673930830658169860">"કસ્ટમ"</item>
+ </string-array>
<string-array name="vpn_types_long">
<item msgid="6566768880689730097">"PPTP VPN"</item>
<item msgid="1349760781118368659">"પહેલાંથી શેર કરેલ કીઝ સાથે L2TP/IPSec VPN"</item>
@@ -264,16 +406,36 @@
<item msgid="3319427315593649917">"પ્રમાણપત્રો અને Xauth પ્રમાણીકરણ સાથે IPSec VPN"</item>
<item msgid="8258927774145391041">"પ્રમાણપત્રો અને સંકર પ્રમાણીકરણ સાથે IPSec VPN"</item>
</string-array>
- <!-- no translation found for vpn_proxy_settings:0 (2958623927055120839) -->
- <!-- no translation found for vpn_states:4 (9135049670787351881) -->
+ <string-array name="vpn_proxy_settings">
+ <item msgid="2958623927055120839">"કોઈ નહીં"</item>
+ <item msgid="1157046369795346308">"મેન્યુઅલ"</item>
+ </string-array>
+ <string-array name="vpn_states">
+ <item msgid="5408915841694583740">"ડિસ્કનેક્ટ કર્યું"</item>
+ <item msgid="8754480102834556765">"પ્રારંભ કરી રહ્યું છે..."</item>
+ <item msgid="3351334355574270250">"કનેક્ટ થઈ રહ્યું છે…"</item>
+ <item msgid="8303882153995748352">"કનેક્ટ થયું"</item>
+ <item msgid="9135049670787351881">"સમયસમાપ્તિ"</item>
+ <item msgid="2124868417182583926">"અસફળ"</item>
+ </string-array>
<string-array name="security_settings_premium_sms_values">
<item msgid="1164265643455394443">"પૂછો"</item>
<item msgid="7718817231348607934">"ક્યારેય મંજૂરી આપશો નહીં"</item>
<item msgid="8184570120217958741">"હંમેશા મંજૂરી આપો"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"સામાન્ય"</item>
+ <item msgid="5101233285497327432">"મધ્યમ"</item>
+ <item msgid="1555861583162930714">"ઓછી"</item>
+ <item msgid="1719683776264798117">"ગંભીર"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"સામાન્ય"</item>
+ <item msgid="6107138933849816768">"મધ્યમ"</item>
+ <item msgid="182695359839047859">"ઓછી"</item>
+ <item msgid="8577246509202964244">"ગંભીર"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"નિરંતર"</item>
<item msgid="167418068739176448">"ટોચની પ્રવૃત્તિ"</item>
@@ -310,7 +472,7 @@
<item msgid="3118234477029486741">"0"</item>
</string-array>
<string-array name="wifi_metered_entries">
- <item msgid="4329206416008519163">"આપમેળે શોધો"</item>
+ <item msgid="4329206416008519163">"ઑટોમૅટિક રીતે શોધો"</item>
<item msgid="773943026484148895">"મીટર કરેલ તરીકે ગણો"</item>
<item msgid="1008268820118852416">"મીટર ન કરેલ તરીકે ગણો"</item>
</string-array>
diff --git a/tests/CarDeveloperOptions/res/values-gu/strings.xml b/tests/CarDeveloperOptions/res/values-gu/strings.xml
index 24d8f86..295826c 100644
--- a/tests/CarDeveloperOptions/res/values-gu/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-gu/strings.xml
@@ -27,7 +27,7 @@
<item quantity="other">તમે હવે એક વિકાસકર્તા બનવાથી <xliff:g id="STEP_COUNT_1">%1$d</xliff:g> પગલાં દૂર છો.</item>
</plurals>
<string name="show_dev_on" msgid="9075712234786224065">"તમે હવે વિકાસકર્તા છો!"</string>
- <string name="show_dev_already" msgid="7665948832405148689">"કોઈ જરૂર નથી, તમે પહેલાંથી જ એક વિકાસકર્તા છો."</string>
+ <string name="show_dev_already" msgid="7665948832405148689">"કોઈ જરૂર નથી, તમે પહેલાંથી જ એક ડેવલપર છો."</string>
<string name="dev_settings_disabled_warning" msgid="3198732189395396721">"કૃપા કરીને પહેલાં વિકાસકર્તાના વિકલ્પો સક્ષમ કરો."</string>
<string name="header_category_wireless_networks" msgid="8968405993937795898">"વાયરલેસ અને નેટવર્ક્સ"</string>
<string name="header_category_system" msgid="4045988717359334410">"સિસ્ટમ"</string>
@@ -56,7 +56,7 @@
<string name="radio_info_ims_reg_status" msgid="4771711884059371514">"IMS નોંધણી: <xliff:g id="STATUS">%1$s</xliff:g>\nLTE પર વૉઇસ: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nWiFi પર વૉઇસ: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nવીડિઓ કૉલિંગ: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT ઇન્ટરફેસ: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
<string name="radioInfo_service_in" msgid="1297020186765943857">"સેવામાં"</string>
<string name="radioInfo_service_out" msgid="8460363463722476510">"કાર્યરત્ નથી"</string>
- <string name="radioInfo_service_emergency" msgid="7674989004735662599">"ફક્ત કટોકટીના કૉલ્સ"</string>
+ <string name="radioInfo_service_emergency" msgid="7674989004735662599">"ફક્ત ઇમર્જન્સી કૉલ"</string>
<string name="radioInfo_service_off" msgid="1873939869994136791">"રેડિઓ બંધ છે"</string>
<string name="radioInfo_roaming_in" msgid="7059350234710947417">"રોમિંગ"</string>
<string name="radioInfo_roaming_not" msgid="7733269160603599835">"રોમિંગ નહીં"</string>
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"સ્ક્રીન પરની ટેક્સ્ટને નાની અથવા મોટી કરો."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"વધુ નાનું બનાવો"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"વધુ મોટું બનાવો"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"ટેક્સ્ટની સાઇઝનો નમૂનો"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"અદ્ભુત Wizard of Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"પ્રકરણ 11: ધ વન્ડરફૂલ એમરલ્ડ સીટી ઓફ ઓઝ"</string>
@@ -100,13 +99,13 @@
<string name="bluetooth_visibility_timeout" msgid="4804679276398564496">"દૃશ્યતાની સમયસમાપ્તિ"</string>
<string name="bluetooth_lock_voice_dialing" msgid="1600385868298081015">"વૉઇસ ડાયલિંગ લૉક કરો"</string>
<string name="bluetooth_lock_voice_dialing_summary" msgid="5005776616112427980">"જ્યારે સ્ક્રીન લૉક થયેલ હોય ત્યારે બ્લૂટૂથ ડાયલરના ઉપયોગને અટકાવો"</string>
- <string name="bluetooth_devices" msgid="4143880830505625666">"બ્લૂટૂથ ઉપકરણો"</string>
- <string name="bluetooth_device_name" msgid="3682016026866302981">"ઉપકરણનું નામ"</string>
- <string name="bluetooth_device_details" msgid="2500840679106321361">"ઉપકરણ સેટિંગ્સ"</string>
+ <string name="bluetooth_devices" msgid="4143880830505625666">"બ્લૂટૂથ ડિવાઇસ"</string>
+ <string name="bluetooth_device_name" msgid="3682016026866302981">"ડિવાઇસનું નામ"</string>
+ <string name="bluetooth_device_details" msgid="2500840679106321361">"ડિવાઇસના સેટિંગ"</string>
<string name="bluetooth_profile_details" msgid="1785505059738682493">"પ્રોફાઇલ સેટિંગ્સ"</string>
<string name="bluetooth_name_not_set" msgid="1886067683138385142">"કોઈ નામ સેટ નથી, એકાઉન્ટ નામનો ઉપયોગ કરીને"</string>
<string name="bluetooth_scan_for_devices" msgid="3215740768422735880">"ઉપકરણો માટે સ્કૅન કરો"</string>
- <string name="bluetooth_rename_device" msgid="7862992396452800566">"આ ઉપકરણનું નામ બદલો"</string>
+ <string name="bluetooth_rename_device" msgid="7862992396452800566">"આ ડિવાઇસનું નામ બદલો"</string>
<string name="bluetooth_rename_button" msgid="8946904845821073267">"નામ બદલો"</string>
<string name="bluetooth_disconnect_title" msgid="2689706557852333780">"ઉપકરણને ડિસ્કનેક્ટ કરીએ?"</string>
<string name="bluetooth_disconnect_all_profiles" product="default" msgid="8920448151607060442">"તમારો ફોન <xliff:g id="DEVICE_NAME">%1$s</xliff:g>થી ડિસ્કનેક્ટ થઈ જશે."</string>
@@ -114,11 +113,11 @@
<string name="bluetooth_disconnect_all_profiles" product="device" msgid="4707569949253450208">"તમારું ઉપકરણ <xliff:g id="DEVICE_NAME">%1$s</xliff:g>થી ડિસ્કનેક્ટ થઈ જશે."</string>
<string name="bluetooth_disconnect_dialog_ok" msgid="4183522987246110145">"ડિસ્કનેક્ટ"</string>
<string name="bluetooth_empty_list_user_restricted" msgid="3616298363281495777">"તમારી પાસે બ્લૂટૂથ સેટિંગ્સ બદલવાની પરવાનગી નથી."</string>
- <string name="bluetooth_pairing_pref_title" msgid="2904954138013884029">"નવા ઉપકરણ જોડો"</string>
+ <string name="bluetooth_pairing_pref_title" msgid="2904954138013884029">"નવા ડિવાઇસ જોડો"</string>
<string name="bluetooth_is_visible_message" msgid="6341088682252805612">"જ્યારે બ્લૂટૂથ સેટિંગ્સ ખુલ્લી હોય ત્યારે <xliff:g id="DEVICE_NAME">%1$s</xliff:g> નજીકનાં ઉપકરણોને દૃશ્યક્ષમ છે."</string>
<string name="bluetooth_footer_mac_message" product="default" msgid="335341476746836260">"ફોનનું બ્લૂટૂથ ઍડ્રેસ: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_footer_mac_message" product="tablet" msgid="6033609611245782463">"ટૅબ્લેટનું બ્લૂટૂથ ઍડ્રેસ: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
- <string name="bluetooth_footer_mac_message" product="device" msgid="7639919867088358038">"ઉપકરણનું બ્લૂટૂથ ઍડ્રેસ: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
+ <string name="bluetooth_footer_mac_message" product="device" msgid="7639919867088358038">"ડિવાઇસનું બ્લૂટૂથ ઍડ્રેસ: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_is_disconnect_question" msgid="6180709281434591654">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ને ડિસ્કનેક્ટ કરીએ?"</string>
<string name="bluetooth_broadcasting" msgid="8926408584599563760">"બ્રૉડકાસ્ટ કરી રહ્યાં છે"</string>
<string name="bluetooth_device" msgid="3170974107364990008">"અનામાંકિત બ્લૂટૂથ ઉપકરણ"</string>
@@ -163,10 +162,10 @@
<string name="bluetooth_map_acceptance_dialog_text" msgid="736507842082640410">"%1$s તમારા સંદેશા અૅક્સેસ કરવા માંગે છે. %2$s ને અૅક્સેસ આપીએ?"</string>
<string name="bluetooth_sap_request" msgid="6318039677671263261">"સિમ ઍક્સેસ વિનંતી"</string>
<string name="bluetooth_sap_acceptance_dialog_text" msgid="1909352413109340355">"<xliff:g id="DEVICE_NAME_0">%1$s</xliff:g> તમારા સિમ કાર્ડને અૅક્સેસ કરવા માગે છે. સિમ કાર્ડની અૅક્સેસને મંજૂરી આપવું કનેક્શનના સમયગાળા માટે તમારા ઉપકરણ પર ડેટા કનેક્ટિવિટીને અક્ષમ કરશે. <xliff:g id="DEVICE_NAME_1">%2$s?</xliff:g> ને અૅક્સેસ આપો"</string>
- <string name="bluetooth_device_name_summary" msgid="8661066392056595005">"તે અન્ય ઉપકરણોને \'<xliff:g id="DEVICE_NAME">^1</xliff:g>\' તરીકે દેખાય છે"</string>
+ <string name="bluetooth_device_name_summary" msgid="8661066392056595005">"તે અન્ય ડિવાઇસને \'<xliff:g id="DEVICE_NAME">^1</xliff:g>\' તરીકે દેખાય છે"</string>
<string name="bluetooth_off_footer" msgid="7658444560543730571">"અન્ય ઉપકરણો સાથે કનેક્ટ કરવા માટે બ્લૂટૂથ ચાલુ કરો."</string>
<string name="bluetooth_paired_device_title" msgid="8361860197780425286">"તમારા ડિવાઇસ"</string>
- <string name="bluetooth_pairing_page_title" msgid="9053463656712597709">"નવા ઉપકરણ જોડો"</string>
+ <string name="bluetooth_pairing_page_title" msgid="9053463656712597709">"નવા ડિવાઇસ જોડો"</string>
<string name="bluetooth_pref_summary" product="tablet" msgid="3601662966604648212">"તમારા ટૅબ્લેટને નજીકના બ્લૂટૂથ ઉપકરણો સાથે સંચાર કરવાની મંજૂરી આપો"</string>
<string name="bluetooth_pref_summary" product="device" msgid="2286727776570956969">"તમારા ઉપકરણને નજીકના બ્લૂટૂથ ઉપકરણો સાથે સંચાર કરવાની મંજૂરી આપો"</string>
<string name="bluetooth_pref_summary" product="default" msgid="863659221858781186">"તમારા ફોનને નજીકના બ્લૂટૂથ ઉપકરણો સાથે સંચાર કરવાની મંજૂરી આપો"</string>
@@ -181,7 +180,7 @@
<string name="connected_device_saved_title" msgid="8270136893488475163">"સાચવેલ ઉપકરણો"</string>
<string name="connected_device_add_device_summary" msgid="7960491471270158891">"બ્લૂટૂથ જોડી બનાવવાનું ચાલુ કરશે"</string>
<string name="connected_device_connections_title" msgid="9205000271382018428">"કનેક્શનની પસંદગીઓ"</string>
- <string name="connected_device_previously_connected_title" msgid="225918223397410428">"પહેલાં કનેક્ટ થયેલા ઉપકરણો"</string>
+ <string name="connected_device_previously_connected_title" msgid="225918223397410428">"પહેલાં કનેક્ટ થયેલા ડિવાઇસ"</string>
<string name="connected_device_previously_connected_screen_title" msgid="2018789662358162716">"પહેલાં કનેક્ટ કરેલા"</string>
<string name="connected_device_bluetooth_turned_on_toast" msgid="4652326177920814476">"બ્લૂટૂથ ચાલુ કર્યું"</string>
<string name="previous_connected_see_all" msgid="7237095013087310923">"બધા ડિવાઇસ જુઓ"</string>
@@ -355,7 +354,7 @@
<string name="owner_info_settings_title" msgid="2537966178998339896">"લૉક સ્ક્રીન સંદેશ"</string>
<string name="security_enable_widgets_title" msgid="1701510007926738088">"વિજેટ્સને સક્ષમ કરો"</string>
<string name="security_enable_widgets_disabled_summary" msgid="4408176087132339331">"વ્યવસ્થાપકે અક્ષમ કરેલ"</string>
- <string name="lockdown_settings_title" msgid="4534779922580115990">"લોકડાઉનનો વિકલ્પ બતાવો"</string>
+ <string name="lockdown_settings_title" msgid="4534779922580115990">"લૉકડાઉનનો વિકલ્પ બતાવો"</string>
<string name="lockdown_settings_summary" msgid="7270756909878256174">"ડિસ્પ્લે પાવર બટનનો વિકલ્પ જે Smart Lock, ફિંગરપ્રિન્ટ અનલૉક કરવાનું, અને લૉક સ્ક્રીન પર નોટિફિકેશનને બંધ કરે છે"</string>
<string name="trust_agents_extend_unlock_title" msgid="3582017561316089951">"માત્ર ટ્રસ્ટ એજન્ટ અનલૉક મોડ લંબાવી શકશે"</string>
<string name="trust_agents_extend_unlock_summary" msgid="3543997596586078084">"જો ચાલુ કરવામાં આવે, તો ટ્રસ્ટ એજન્ટ વધુ લાંબા સમય માટે ડિવાઇસને અનલૉક રાખી શકશે, પરંતુ લૉક થયેલા ડિવાઇસને ફરી અનલૉક કરી શકશે નહીં."</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"પ્રોફાઇલ માહિતી"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"એકાઉન્ટ્સ"</string>
<string name="location_settings_title" msgid="2707201457572301030">"સ્થાન"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"સ્થાનનો ઉપયોગ કરો"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"સ્થાનનો ઉપયોગ કરો"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"બંધ છે"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">ચાલુ - <xliff:g id="COUNT_1">%1$d</xliff:g> ઍપ સ્થાન ઍક્સેસ કરી શકે છે</item>
@@ -387,7 +386,7 @@
<string name="lockscreen_settings_what_to_show_category" msgid="3133378945821488654">"શું બતાવવું છે"</string>
<string name="security_settings_summary" msgid="5210109100643223686">"મારું સ્થાન, સ્ક્રીન અનલૉક, સિમ કાર્ડ લૉક, ક્રિડેન્શ્યલ સ્ટોરેજ લૉક સેટ કરો"</string>
<string name="cdma_security_settings_summary" msgid="1783066617800041869">"મારું સ્થાન, સ્ક્રીન અનલૉક, ઓળખપત્ર સ્ટોરેજ લૉક સેટ કરો"</string>
- <string name="security_passwords_title" msgid="6853942836045862315">"ગોપનીયતા"</string>
+ <string name="security_passwords_title" msgid="6853942836045862315">"પ્રાઇવસી"</string>
<string name="disabled_by_administrator_summary" msgid="6099821045360491127">"વ્યવસ્થાપકે અક્ષમ કરેલ"</string>
<string name="security_status_title" msgid="1261960357751754428">"સુરક્ષાની સ્થિતિ"</string>
<string name="security_dashboard_summary_face" msgid="2536136110153593745">"સ્ક્રીન લૉક, ફેસ અનલૉક"</string>
@@ -499,12 +498,12 @@
<string name="fingerprint_add_max" msgid="2939393314646115661">"તમે <xliff:g id="COUNT">%d</xliff:g> જેટલી ફિંગરપ્રિન્ટ્સ ઉમેરી શકો છો"</string>
<string name="fingerprint_intro_error_max" msgid="3247720976621039437">"તમે મહત્તમ ફિંગરપ્રિન્ટ્સ ઉમેર્યા છે"</string>
<string name="fingerprint_intro_error_unknown" msgid="3975674268256524015">"વધુ ફિંગરપ્રિન્ટ્સ ઉમેરી શકતાં નથી"</string>
- <string name="fingerprint_last_delete_title" msgid="3104596858161269635">"તમામ ફિંગરપ્રિન્ટ્સ દૂર કરીએ?"</string>
+ <string name="fingerprint_last_delete_title" msgid="3104596858161269635">"તમામ ફિંગરપ્રિન્ટ કાઢી નાખીએ?"</string>
<string name="fingerprint_delete_title" msgid="3120894112324235536">"\'<xliff:g id="FINGERPRINT_ID">%1$s</xliff:g>\'ને દૂર કરો"</string>
<string name="fingerprint_delete_message" msgid="5895802741486967970">"શું તમે આ ફિંગરપ્રિન્ટ કાઢી નાખવા માગો છો?"</string>
<string name="fingerprint_last_delete_message" msgid="3346252479778971442">"તમારી ફિંગરપ્રિન્ટનો ઉપયોગ કરીને તમે તમારો ફોન અનલૉક, ખરીદીઓ અધિકૃત અથવા તેમના વડે ઍપ્લિકેશનો પર સાઇન ઇન કરવામાં સમર્થ હશો નહીં"</string>
<string name="fingerprint_last_delete_message_profile_challenge" msgid="5385095150532247025">"તમારી ફિંગરપ્રિન્ટનો ઉપયોગ કરીને તમે તમારી કાર્યાલયની પ્રોફાઇલ અનલૉક, ખરીદીઓ અધિકૃત અથવા કાર્ય ઍપ્લિકેશનો પર સાઇન ઇન કરવામાં સમર્થ હશો નહીં"</string>
- <string name="fingerprint_last_delete_confirm" msgid="7984595457589664004">"હા, દૂર કરો"</string>
+ <string name="fingerprint_last_delete_confirm" msgid="7984595457589664004">"હા, કાઢી નાખો"</string>
<string name="crypt_keeper_settings_title" msgid="839783588093862748">"એન્ક્રિપ્શન"</string>
<string name="crypt_keeper_encrypt_title" product="tablet" msgid="2292129135369853167">"ટેબ્લેટને એન્ક્રિપ્ટ કરો"</string>
<string name="crypt_keeper_encrypt_title" product="default" msgid="3110852053238357832">"ફોન એન્ક્રિપ્ટ કરો"</string>
@@ -594,9 +593,9 @@
<string name="unlock_set_unlock_mode_password" msgid="397703731925549447">"પાસવર્ડ"</string>
<string name="unlock_setup_wizard_fingerprint_details" msgid="6515136915205473675">"એકવાર તમે સ્ક્રીન લૉક સેટ કરી લો, પછી તમે સેટિંગ્સ > સુરક્ષામાં ફિંગરપ્રિન્ટ પણ સેટ કરી શકો છો."</string>
<string name="unlock_disable_lock_title" msgid="3508492427073600294">"સ્ક્રીન લૉક બંધ કરો"</string>
- <string name="unlock_disable_frp_warning_title" msgid="5858589970505254193">"ઉપકરણ સુરક્ષા દૂર કરીએ?"</string>
+ <string name="unlock_disable_frp_warning_title" msgid="5858589970505254193">"ડિવાઇસની સુરક્ષા કાઢી નાખીએ?"</string>
<string name="unlock_disable_frp_warning_title_profile" msgid="3814123014295965266">"પ્રોફાઇલ સુરક્ષા દૂર કરીએ?"</string>
- <string name="unlock_disable_frp_warning_content_pattern" msgid="1843950215687159135">"તમારી પૅટર્ન વગર ઉપકરણ સુરક્ષા સુવિધાઓ કામ કરશે નહીં."</string>
+ <string name="unlock_disable_frp_warning_content_pattern" msgid="1843950215687159135">"તમારી પૅટર્ન વગર ડિવાઇસની સુરક્ષા સુવિધાઓ કામ કરશે નહીં."</string>
<string name="unlock_disable_frp_warning_content_pattern_fingerprint" msgid="8846957650251741548">"ઉપકરણની સુરક્ષા સુવિધાઓ તમારી પૅટર્ન વગર કાર્ય કરશે નહીં.<xliff:g id="EMPTY_LINE">
</xliff:g>આ ઉપકરણમાંથી તમારી સાચવેલ રેફરન્સ ફાઇલને પણ દૂર કરવામાં આવશે અને તમે તમારા ફોનને અનલૉક કરી શકશો નહીં, ખરીદીઓને અધિકૃત કરી શકશો નહીં અથવા તેના વડે ઍપ્લિકેશનો પર સાઇન ઇન કરી શકશો નહીં."</string>
@@ -628,7 +627,7 @@
<string name="unlock_disable_frp_warning_content_unknown_fingerprint_profile" msgid="1201259228331105948">"પ્રોફાઇલ સુરક્ષા સુવિધાઓ તમારા સ્ક્રીન લૉક વગર કાર્ય કરશે નહીં.<xliff:g id="EMPTY_LINE">
</xliff:g>આ પ્રોફાઇલમાંથી તમારી સાચવેલ રેફરન્સ ફાઇલને પણ દૂર કરવામાં આવશે અને તમે તમારી પ્રોફાઇલને અનલૉક કરી શકશો નહીં, ખરીદીઓને અધિકૃત કરી શકશો નહીં અથવા તેના વડે ઍપ્લિકેશનો પર સાઇન ઇન કરી શકશો નહીં."</string>
- <string name="unlock_disable_frp_warning_ok" msgid="2373890505202766456">"હા, દૂર કરો"</string>
+ <string name="unlock_disable_frp_warning_ok" msgid="2373890505202766456">"હા, કાઢી નાખો"</string>
<string name="unlock_change_lock_pattern_title" msgid="7622476883851319877">"અનલૉક પૅટર્ન બદલો"</string>
<string name="unlock_change_lock_pin_title" msgid="6671224158800812238">"અનલૉક પિન બદલો"</string>
<string name="unlock_change_lock_password_title" msgid="7886432065775170719">"અનલૉક પાસવર્ડ બદલો"</string>
@@ -649,7 +648,7 @@
<string name="lock_last_password_attempt_before_wipe_profile" msgid="1535128774464384305">"જો તમે આગલા પ્રયત્નમાં ખોટો પાસવર્ડ દાખલ કરશો, તો તમારી કાર્યાલયની પ્રોફાઇલ અને તેનો ડેટા કાઢી નાખવામાં આવશે"</string>
<string name="lock_failed_attempts_now_wiping_device" msgid="8662360098784762828">"ઘણા બધા ખોટા પ્રયત્નો. આ ઉપકરણોનો ડેટા કાઢી નાખવામાં આવશે."</string>
<string name="lock_failed_attempts_now_wiping_user" msgid="3793513796171561873">"ઘણા બધા ખોટા પ્રયત્નો. આ વપરાશકર્તાને કાઢી નાખવામાં આવશે."</string>
- <string name="lock_failed_attempts_now_wiping_profile" msgid="5347108525299038285">"ઘણા બધા ખોટા પ્રયત્નો. આ કાર્યાલયની પ્રોફાઇલ અને તેનો ડેટા કાઢી નાખવામાં આવશે."</string>
+ <string name="lock_failed_attempts_now_wiping_profile" msgid="5347108525299038285">"ઘણા બધા ખોટા પ્રયત્નો. આ કાર્યાલયની પ્રોફાઇલ અને તેનો ડેટા ડિલીટ કરવામાં આવશે."</string>
<string name="lock_failed_attempts_now_wiping_dialog_dismiss" msgid="3950582268749037318">"છોડી દો"</string>
<plurals name="lockpassword_password_too_short" formatted="false" msgid="694091983183310827">
<item quantity="one">ઓછામાં ઓછા <xliff:g id="COUNT_1">%d</xliff:g> અક્ષરો હોવા જરૂરી છે</item>
@@ -718,7 +717,7 @@
<item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> સક્રિય ઍપ્લિકેશન</item>
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> સક્રિય ઍપ્લિકેશન</item>
</plurals>
- <string name="manage_trust_agents" msgid="8129970926213142261">"ટ્રસ્ટ એજન્ટ્સ"</string>
+ <string name="manage_trust_agents" msgid="8129970926213142261">"ટ્રસ્ટ એજન્ટ"</string>
<string name="disabled_because_no_backup_security" msgid="8127039979909203528">"ઉપયોગ કરવા માટે, પ્રથમ એક સ્ક્રીન લૉક સેટ કરો"</string>
<string name="manage_trust_agents_summary" msgid="2023116850759962248">"કોઈ નહીં"</string>
<plurals name="manage_trust_agents_summary_on" formatted="false" msgid="5550538038916606097">
@@ -747,7 +746,7 @@
<string name="bluetooth_preference_scan_title" msgid="457781003962324807">"ઉપકરણો માટે સ્કૅન કરો"</string>
<string name="bluetooth_search_for_devices" msgid="6796307228261078451">"તાજું કરો"</string>
<string name="bluetooth_searching_for_devices" msgid="7820814625522702494">"શોધી રહ્યું છે..."</string>
- <string name="bluetooth_preference_device_settings" msgid="4247085616427015908">"ઉપકરણ સેટિંગ્સ"</string>
+ <string name="bluetooth_preference_device_settings" msgid="4247085616427015908">"ડિવાઇસના સેટિંગ"</string>
<string name="bluetooth_preference_paired_dialog_title" msgid="3567187438908143693">"જોડી કરેલ ઉપકરણ"</string>
<string name="bluetooth_preference_paired_dialog_internet_option" msgid="3693599743477470469">"ઇન્ટરનેટ કનેક્શન"</string>
<string name="bluetooth_preference_paired_dialog_keyboard_option" msgid="4627309436489645755">"કીબોર્ડ"</string>
@@ -756,7 +755,7 @@
<string name="bluetooth_pairing_dialog_sharing_phonebook_title" msgid="7395493311980018460">"ફોન પુસ્તિકા શેર કરીએ?"</string>
<string name="bluetooth_pairing_dialog_contants_request" msgid="2103132762434487717">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> તમારા સંપર્કો અને કૉલ ઇતિહાસને અૅક્સેસ કરવા માંગે છે."</string>
<string name="bluetooth_pairing_dialog_paring_request" msgid="5513953935086446387">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>, બ્લૂટૂથ સાથે જોડી કરવા માંગે છે. જ્યારે કનેક્ટ થયેલ હોય, ત્યારે તેની પાસે તમારા સંપર્કો અને કૉલ ઇતિહાસની ઍક્સેસ હશે."</string>
- <string name="bluetooth_preference_found_media_devices" msgid="5748539613567836379">"ઉપલબ્ધ ઉપકરણો"</string>
+ <string name="bluetooth_preference_found_media_devices" msgid="5748539613567836379">"ઉપલબ્ધ ડિવાઇસ"</string>
<string name="bluetooth_preference_no_found_devices" msgid="4190090666412408576">"કોઈ ઉપકરણો ઉપલબ્ધ નથી"</string>
<string name="bluetooth_device_context_connect" msgid="1812090541371432890">"કનેક્ટ કરો"</string>
<string name="bluetooth_device_context_disconnect" msgid="8085015949275771802">"ડિસ્કનેક્ટ કરો"</string>
@@ -766,12 +765,12 @@
<string name="bluetooth_device_context_connect_advanced" msgid="423463405499392444">"વિકલ્પો..."</string>
<string name="bluetooth_menu_advanced" msgid="7566858513372603652">"વિગતવાર"</string>
<string name="bluetooth_advanced_titlebar" msgid="6459469494039004784">"વિગતવાર બ્લૂટૂથ"</string>
- <string name="bluetooth_empty_list_bluetooth_off" msgid="6255367297830430459">"જ્યારે બ્લૂટૂથ ચાલુ હોય, ત્યારે તમારું ઉપકરણ નજીકનાં અન્ય બ્લૂટૂથ ઉપકરણો સાથે સંચાર કરી શકે છે."</string>
+ <string name="bluetooth_empty_list_bluetooth_off" msgid="6255367297830430459">"જ્યારે બ્લૂટૂથ ચાલુ હોય, ત્યારે તમારું ડિવાઇસ નજીકનાં અન્ય બ્લૂટૂથ ડિવાઇસ સાથે સંચાર કરી શકે છે."</string>
<string name="bluetooth_scanning_on_info_message" msgid="5460370815156050550">"જ્યારે બ્લૂટૂથ ચાલુ હોય, ત્યારે તમારું ઉપકરણ નજીકના અન્ય બ્લૂટૂથ ઉપકરણો સાથે સંચાર કરી શકે છે.\n\nતમારા ઉપકરણનો અનુભવ બહેતર બનાવવા માટે, જ્યારે બ્લૂટૂથ બંધ હોય ત્યારે પણ ઍપ અને સેવાઓ નજીકના ઉપકરણો માટે ગમે ત્યારે સ્કૅન કરી શકે છે. ઉદાહરણ તરીકે, આનો ઉપયોગ સ્થાન આધારિત સુવિધાઓ અને સેવાઓને બહેતર બનાવવા માટે કરી શકાય છે. તમે આને "<annotation id="link">"સ્કૅનીંગ સેટિંગ"</annotation>"માં બદલી શકો છો."</string>
<string name="ble_scan_notify_text" msgid="6290170236546386932">"સ્થાન સચોટતા બહેતર બનાવવા માટે, સિસ્ટમ ઍપ્લિકેશનો અને સેવાઓ હજી પણ બ્લૂટૂથ ઉપકરણો શોધી શકે છે. તમે આને <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>સ્કેનિંગ સેટિંગ્સ<xliff:g id="LINK_END_1">LINK_END</xliff:g>માં બદલી શકો છો."</string>
<string name="bluetooth_connect_failed" msgid="1151234676456333786">"કનેક્ટ ન કરી શક્યાં. ફરી પ્રયાસ કરો."</string>
- <string name="device_details_title" msgid="726517818032923222">"ઉપકરણની વિગતો"</string>
- <string name="bluetooth_device_mac_address" msgid="5328203122581150405">"ઉપકરણનું બ્લૂટૂથ ઍડ્રેસ: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
+ <string name="device_details_title" msgid="726517818032923222">"ડિવાઇસની વિગતો"</string>
+ <string name="bluetooth_device_mac_address" msgid="5328203122581150405">"ડિવાઇસનું બ્લૂટૂથ ઍડ્રેસ: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_unpair_dialog_title" msgid="3669848977755142047">"ઉપકરણને ભૂલી જઈએ?"</string>
<string name="bluetooth_unpair_dialog_body" product="default" msgid="5998071227980078077">"હવેથી તમારા ફોનની <xliff:g id="DEVICE_NAME">%1$s</xliff:g>ની સાથે જોડી કરવામાં નહીં આવે"</string>
<string name="bluetooth_unpair_dialog_body" product="tablet" msgid="4696157463230518866">"હવેથી તમારા ટૅબ્લેટની <xliff:g id="DEVICE_NAME">%1$s</xliff:g>ની સાથે જોડી કરવામાં નહીં આવે"</string>
@@ -801,7 +800,7 @@
<string name="bluetooth_max_connected_audio_devices_dialog_title" msgid="6049527354499590314">"મહત્તમ સંખ્યામાં કનેક્ટ થયેલા બ્લૂટૂથ ઑડિઓ ઉપકરણો પસંદ કરો"</string>
<string name="wifi_display_settings_title" msgid="8718182672694575456">"કાસ્ટ કરો"</string>
<string name="wifi_display_enable_menu_item" msgid="4578340247147692250">"વાયરલેસ ડિસ્પ્લે સક્ષમ કરો"</string>
- <string name="wifi_display_no_devices_found" msgid="186501729518830451">"કોઈ નજીકના ઉપકરણો મળ્યાં નથી"</string>
+ <string name="wifi_display_no_devices_found" msgid="186501729518830451">"કોઈ નજીકના ડિવાઇસ મળ્યાં નથી"</string>
<string name="wifi_display_status_connecting" msgid="3799827425457383349">"કનેક્ટ થઈ રહ્યું છે"</string>
<string name="wifi_display_status_connected" msgid="85692409327461403">"કનેક્ટ કર્યું"</string>
<string name="wifi_display_status_in_use" msgid="7646114501132773174">"ઉપયોગમાં છે"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"વાઇ-ફાઇ"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"વાઇ-ફાઇ ચાલુ કરો"</string>
<string name="wifi_settings" msgid="7486492317310514109">"વાઇ-ફાઇ"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"વાઇ-ફાઇનો ઉપયોગ કરો"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"વાઇ-ફાઇનો ઉપયોગ કરો"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"વાઇ-ફાઇ સેટિંગ્સ"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"વાઇ-ફાઇ"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"વાયરલેસ ઍક્સેસ બિંદુઓને સેટ અને સંચાલિત કરો"</string>
@@ -861,9 +860,9 @@
<string name="use_open_wifi_automatically_summary" msgid="8338020172673161754">"ઉચ્ચ ગુણવત્તાવાળા સાર્વજનિક નેટવર્ક સાથે આપમેળે કનેક્ટ કરો"</string>
<string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"આ સુવિધાનો ઉપયોગ કરવા માટે, નેટવર્ક રેટિંગ પ્રદાતાને પસંદ કરો"</string>
<string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"આ સુવિધાનો ઉપયોગ કરવા માટે, સુસંગત નેટવર્ક રેટિંગ પ્રદાતાને પસંદ કરો"</string>
- <string name="wifi_install_credentials" msgid="5650088113710858289">"પ્રમાણપત્રો ઇન્સ્ટોલ કરો"</string>
+ <string name="wifi_install_credentials" msgid="5650088113710858289">"પ્રમાણપત્રો ઇન્સ્ટૉલ કરો"</string>
<string name="wifi_scan_notify_text" msgid="7614101215028336927">"સ્થાન સચોટતાને બહેતર બનાવવા માટે, જ્યારે વાઇ-ફાઇ બંધ હોય ત્યારે પણ ઍપ અને સેવાઓ વાઇ-ફાઇ નેટવર્ક માટે ગમે ત્યારે સ્કૅન કરી શકે છે. ઉદાહરણ તરીકે, આનો ઉપયોગ સ્થાન આધારિત સુવિધાઓ અને સેવાઓને બહેતર બનાવવા માટે કરી શકાય છે. તમે આને <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>સ્કૅનીંગ સેટિંગ<xliff:g id="LINK_END_1">LINK_END</xliff:g>માં બદલી શકો છો."</string>
- <string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"સ્થાનની સચોટતા સુધારવા માટે, <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>સ્કૅનીંગ સેટિંગ્સ<xliff:g id="LINK_END_1">LINK_END</xliff:g> માં જઈને વાઇ-ફાઇ સ્કૅનિંગ ચાલુ કરો."</string>
+ <string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"સ્થાનની સચોટતા સુધારવા માટે, <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>સ્કૅનિંગ સેટિંગ<xliff:g id="LINK_END_1">LINK_END</xliff:g> માં જઈને વાઇ-ફાઇ સ્કૅનિંગ ચાલુ કરો."</string>
<string name="wifi_scan_notify_remember_choice" msgid="1235445971400237444">"ફરીથી બતાવશો નહીં"</string>
<string name="wifi_setting_sleep_policy_title" msgid="2120785188625932076">"નિષ્ક્રિય દરમ્યાન વાઇ-ફાઇ ચાલુ રાખો"</string>
<string name="wifi_setting_on_during_sleep_title" msgid="856670183023402715">"નિષ્ક્રિય હોય તે દરમ્યાન વાઇ-ફાઇ ચાલુ"</string>
@@ -879,7 +878,7 @@
<string name="wifi_configure_settings_preference_title" msgid="2678534679408777268">"વાઇ-ફાઇ પસંદગીઓ"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="5714892572614655675">"વાઇ-ફાઇ ફરી આપમેળે ચાલુ થાય છે"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_off" msgid="286904094152909651">"વાઇ-ફાઇ પાછું આપમેળે ચાલુ થતું નથી"</string>
- <string name="wifi_access_points" msgid="1647976498906871869">"વાઇ-ફાઇ નેટવર્ક્સ"</string>
+ <string name="wifi_access_points" msgid="1647976498906871869">"વાઇ-ફાઇ નેટવર્ક"</string>
<string name="wifi_menu_more_options" msgid="8318269834264035524">"વધુ વિકલ્પો"</string>
<string name="wifi_menu_p2p" msgid="4945665601551289791">"વાઇ-ફાઇ ડાઇરેક્ટ"</string>
<string name="wifi_menu_scan" msgid="9082691677803181629">"સ્કેન"</string>
@@ -889,8 +888,8 @@
<string name="wifi_menu_remember" msgid="717257200269700641">"નેટવર્ક યાદ રાખો"</string>
<string name="wifi_menu_forget" msgid="7561140554450163075">"નેટવર્કને ભૂલી જાઓ"</string>
<string name="wifi_menu_modify" msgid="4080178040721021101">"નેટવર્ક સંશોધિત કરો"</string>
- <string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"ઉપલબ્ધ નેટવર્ક્સ જોવા માટે, વાઇ-ફાઇ ચાલુ કરો."</string>
- <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"વાઇ-ફાઇ નેટવર્ક્સ માટે શોધી રહ્યું છે..."</string>
+ <string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"ઉપલબ્ધ નેટવર્ક જોવા માટે, વાઇ-ફાઇ ચાલુ કરો."</string>
+ <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"વાઇ-ફાઇ નેટવર્ક માટે શોધી રહ્યું છે..."</string>
<string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"તમને વાઇ-ફાઇ નેટવર્ક બદલવાની પરવાનગી નથી."</string>
<string name="wifi_more" msgid="3538241640407382185">"વધુ"</string>
<string name="wifi_setup_wps" msgid="6730131677695521321">"ઑટોમૅટિક સેટઅપ (WPS)"</string>
@@ -1025,7 +1024,7 @@
<string name="wifi_details_subnet_mask" msgid="53396707004763012">"સબનેટ માસ્ક"</string>
<string name="wifi_details_dns" msgid="1118251455740116559">"DNS"</string>
<string name="wifi_details_ipv6_address_header" msgid="1642310137145363299">"IPv6 સરનામા"</string>
- <string name="wifi_saved_access_points_label" msgid="3790693285928292563">"સાચવેલા નેટવર્ક્સ"</string>
+ <string name="wifi_saved_access_points_label" msgid="3790693285928292563">"સાચવેલા નેટવર્ક"</string>
<string name="wifi_subscribed_access_points_tab" msgid="7498765485953257229">"સબ્સ્ક્રિપ્શન"</string>
<!-- no translation found for wifi_saved_access_points_tab (4677730543624191122) -->
<skip />
@@ -1047,7 +1046,7 @@
<string name="wifi_p2p_menu_search" msgid="8207638860263805291">"ઉપકરણો શોધો"</string>
<string name="wifi_p2p_menu_searching" msgid="7443249001543208106">"શોધી રહ્યું છે..."</string>
<string name="wifi_p2p_menu_rename" msgid="2129974878377065488">"ઉપકરણનું નામ બદલો"</string>
- <string name="wifi_p2p_peer_devices" msgid="8232126067045093382">"પીઅર ઉપકરણો"</string>
+ <string name="wifi_p2p_peer_devices" msgid="8232126067045093382">"પીઅર ડિવાઇસ"</string>
<string name="wifi_p2p_remembered_groups" msgid="1356458238836730346">"યાદ રાખેલ જૂથો"</string>
<string name="wifi_p2p_failed_connect_message" msgid="6103436959132424093">"કનેક્ટ કરી શકાયું નહીં."</string>
<string name="wifi_p2p_failed_rename_message" msgid="638656605352538706">"ઉપકરણનું નામ બદલવામાં નિષ્ફળ."</string>
@@ -1070,7 +1069,7 @@
<string name="wifi_hotspot_ap_band_title" msgid="3485744480410441949">"AP બૅન્ડ"</string>
<string name="wifi_hotspot_footer_info_regular" msgid="3876006922622827363">"તમારા અન્ય ઉપકરણો માટે વાઇ-ફાઇ નેટવર્ક બનાવવા હૉટસ્પૉટનો ઉપયોગ કરો. હૉટસ્પૉટ તમારા મોબાઇલ ડેટા કનેક્શનનો ઉપયોગ કરીને ઇન્ટરનેટ પૂરું પાડે છે. વધારાનો મોબાઇલ ડેટા શુલ્ક લાગુ થઈ શકે છે."</string>
<string name="wifi_hotspot_footer_info_local_only" msgid="3339582350894639261">"ઍપ્લિકેશનો નજીકના ઉપકરણો સાથે કન્ટેન્ટ શેર કરવા માટે હૉટસ્પૉટ બનાવી શકે છે."</string>
- <string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"હૉટસ્પૉટ આપમેળે બંધ કરો"</string>
+ <string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"હૉટસ્પૉટ ઑટોમૅટિક રીતે બંધ કરો"</string>
<string name="wifi_hotspot_auto_off_summary" msgid="3866769400624802105">"જો કોઈ ઉપકરણો કનેક્ટ થયેલા ન હશે તો વાઇ-ફાઇ હૉટસ્પૉટ બંધ થઈ જશે"</string>
<string name="wifi_tether_starting" msgid="7676952148471297900">"હૉટસ્પૉટ ચાલુ કરી રહ્યું છે…"</string>
<string name="wifi_tether_stopping" msgid="7478561853791953349">"હૉટસ્પૉટ બંધ કરી રહ્યું છે…"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"વાઇ-ફાઇ"</item>
+ <item msgid="2271962426654621656">"મોબાઇલ"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"વાઇ-ફાઇ ઉપલબ્ધ ન હોય, તો મોબાઇલ નેટવર્કનો ઉપયોગ કરો"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"મોબાઇલ નેટવર્ક ઉપલબ્ધ ન હોય, તો વાઇ-ફાઇનો ઉપયોગ કરો"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"વાઇ-ફાઇ પરથી કૉલ કરો. વાઇ-ફાઇ જતું રહેશે, તો કૉલ સમાપ્ત થઈ જશે."</string>
@@ -1118,17 +1120,17 @@
<string name="wifi_calling_not_supported" msgid="216781767605669775">"%1$s માટે વાઇ-ફાઇ કૉલિંગ સમર્થિત નથી"</string>
<string name="carrier" msgid="3413463182542176886">"કૅરિઅર"</string>
<string name="display_settings_title" msgid="1243571562133261601">"ડિસ્પ્લે"</string>
- <string name="sound_settings" msgid="3306063041029638807">"ધ્વનિ"</string>
+ <string name="sound_settings" msgid="3306063041029638807">"સાઉન્ડ"</string>
<string name="all_volume_title" msgid="1750261506951315423">"વૉલ્યૂમ્સ"</string>
<string name="musicfx_title" msgid="6456079041566773649">"સંગીત પ્રભાવો"</string>
<string name="ring_volume_title" msgid="5874791723449821646">"રિંગ વૉલ્યુમ"</string>
<string name="vibrate_in_silent_title" msgid="2314667015729841220">"શાંત હોય ત્યારે વાઇબ્રેટ કરો"</string>
- <string name="notification_sound_title" msgid="6812164482799723931">"નોટિફિકેશન માટે ડિફૉલ્ટ ધ્વનિ"</string>
+ <string name="notification_sound_title" msgid="6812164482799723931">"ડિફૉલ્ટ નોટિફિકેશન સાઉન્ડ"</string>
<string name="incoming_call_volume_title" msgid="4736570528754310450">"રિંગટોન"</string>
<string name="notification_volume_title" msgid="6022562909288085275">"નોટિફિકેશન"</string>
<string name="checkbox_notification_same_as_incoming_call" msgid="7312942422655861175">"સૂચનાઓ માટે ઇનકમિંગ કૉલ વોલ્યુમનો ઉપયોગ કરો"</string>
<string name="home_work_profile_not_supported" msgid="6137073723297076818">"કાર્ય પ્રોફાઇલ્સનું સમર્થન કરતું નથી"</string>
- <string name="notification_sound_dialog_title" msgid="6653341809710423276">"નોટિફિકેશન માટે ડિફૉલ્ટ ધ્વનિ"</string>
+ <string name="notification_sound_dialog_title" msgid="6653341809710423276">"ડિફૉલ્ટ નોટિફિકેશન સાઉન્ડ"</string>
<string name="media_volume_title" msgid="1030438549497800914">"મીડિયા"</string>
<string name="media_volume_summary" msgid="3142433516297061652">"સંગીત અને વીડિઓ માટે વોલ્યૂમ સેટ કરો"</string>
<string name="alarm_volume_title" msgid="8902277801531496243">"એલાર્મ"</string>
@@ -1140,7 +1142,7 @@
<string name="volume_media_description" msgid="3659485559976891268">"સંગીત, વીડિઓ, રમતો, અને અને અન્ય મીડિયા"</string>
<string name="volume_ring_description" msgid="1975431532517579212">"રિંગટોન અને સૂચનાઓ"</string>
<string name="volume_notification_description" msgid="8871940450828766751">"નોટિફિકેશનો"</string>
- <string name="volume_alarm_description" msgid="3230692343946237658">"એલાર્મ્સ"</string>
+ <string name="volume_alarm_description" msgid="3230692343946237658">"એલાર્મ"</string>
<string name="volume_ring_mute" msgid="6022038055768721847">"રિંગટોન અને સૂચનાઓ મ્યૂટ કરો"</string>
<string name="volume_media_mute" msgid="816848304566175614">"સંગીત અને અન્ય મીડિયાને મ્યૂટ કરો"</string>
<string name="volume_notification_mute" msgid="7759564556421535211">"સૂચનાઓ મ્યૂટ કરો"</string>
@@ -1166,7 +1168,7 @@
<string name="accessibility_category_personal" msgid="1423427301759058762">"વ્યક્તિગત પ્રોફાઇલ એકાઉન્ટ્સ"</string>
<string name="accessibility_work_account_title" msgid="3195468574776888011">"કાર્ય એકાઉન્ટ - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
<string name="accessibility_personal_account_title" msgid="7251761883688839354">"વ્યક્તિગત એકાઉન્ટ - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
- <string name="search_settings" msgid="5809250790214921377">"શોધો"</string>
+ <string name="search_settings" msgid="5809250790214921377">"Search"</string>
<string name="display_settings" msgid="1045535829232307190">"ડિસ્પ્લે"</string>
<string name="accelerometer_title" msgid="2427487734964971453">"ઑટો રોટેટ સ્ક્રીન"</string>
<string name="color_mode_title" msgid="8164858320869449142">"રંગો"</string>
@@ -1307,7 +1309,7 @@
<string name="pin_failed" msgid="4877356137480446727">"સિમ પિન ઑપરેશન નિષ્ફળ થયું!"</string>
<string name="system_update_settings_list_item_title" msgid="1907497454722790033">"સિસ્ટમ અપડેટ્સ"</string>
<string name="system_update_settings_list_item_summary" msgid="3497456690691907873"></string>
- <string name="firmware_version" msgid="547095584029938749">"Android સંસ્કરણ"</string>
+ <string name="firmware_version" msgid="547095584029938749">"Android વર્ઝન"</string>
<string name="security_patch" msgid="483709031051932208">"Android સુરક્ષા પૅચ સ્તર"</string>
<string name="model_info" msgid="1729765474260797594">"મોડલ"</string>
<string name="model_summary" msgid="8781425868254352168">"મૉડલ: %1$s"</string>
@@ -1369,7 +1371,7 @@
<string name="memory_calculating_size" msgid="8407591625479256510">"ગણતરી કરી રહ્યું છે..."</string>
<string name="memory_apps_usage" msgid="1886814780760368266">"ઍપ્લિકેશનો અને ઍપ્લિકેશન ડેટા"</string>
<string name="memory_media_usage" msgid="2744652206722240527">"મીડિયા"</string>
- <string name="memory_downloads_usage" msgid="7039979723012065168">"ડાઉનલોડ્સ"</string>
+ <string name="memory_downloads_usage" msgid="7039979723012065168">"ડાઉનલોડ"</string>
<string name="memory_dcim_usage" msgid="599009211606524732">"ચિત્રો, વિડિઓઝ"</string>
<string name="memory_music_usage" msgid="809605300042546279">"ઑડિઓ (સંગીત, રિંગટોન્સ, પોડકાસ્ટ્સ વગેરે)"</string>
<string name="memory_media_misc_usage" msgid="6258827529046910705">"અન્ય ફાઇલો"</string>
@@ -1456,7 +1458,7 @@
<string name="storage_detail_system" msgid="6784247618772153283">"સિસ્ટમ"</string>
<string name="storage_detail_explore" msgid="8206900269596580264">"<xliff:g id="NAME">^1</xliff:g> નું અન્વેષણ કરો"</string>
<string name="storage_detail_dialog_other" msgid="5073511663616043370">"ઍપ દ્વારા સાચવવામાં આવેલ શેર કરેલ ફાઇલો, ઇન્ટરનેટ અથવા બ્લૂટૂથ વડે ડાઉનલોડ કરેલ ફાઇલો, Android ફાઇલો અને આના જેવી વધુ ફાઇલો અન્યમાં શામેલ હોય છે. \n\nઆ <xliff:g id="NAME">^1</xliff:g>નું દૃશ્યક્ષમ કન્ટેન્ટ જોવા માટે શોધખોળ કરો પર ટૅપ કરો."</string>
- <string name="storage_detail_dialog_system" msgid="1472572861360014226">"સિસ્ટમમાં Android સંસ્કરણ <xliff:g id="VERSION">%s</xliff:g> ચલાવવા માટે ઉપયોગી ફાઇલોનો સમાવેશ છે"</string>
+ <string name="storage_detail_dialog_system" msgid="1472572861360014226">"સિસ્ટમમાં Android વર્ઝન <xliff:g id="VERSION">%s</xliff:g> ચલાવવા માટે ઉપયોગી ફાઇલોનો સમાવેશ છે"</string>
<string name="storage_detail_dialog_user" msgid="1663117417635010371">"<xliff:g id="USER_0">^1</xliff:g>એ <xliff:g id="SIZE">^2</xliff:g> સ્ટોરેજનો ઉપયોગ કરીને ફોટો, સંગીત, ઍપ્લિકેશનો અથવા અન્ય ડેટા સાચવ્યો હોઈ શકે છે.\n\nવિગતો જોવા માટે, <xliff:g id="USER_1">^1</xliff:g> પર સ્વિચ કરો."</string>
<string name="storage_wizard_init_title" msgid="3407283236421089014">"તમારું <xliff:g id="NAME">^1</xliff:g> સેટ કરો"</string>
<string name="storage_wizard_init_external_title" msgid="6853250619674645478">"પોર્ટેબલ સંગ્રહ તરીકે ઉપયોગ કરો"</string>
@@ -1567,9 +1569,9 @@
<string name="menu_restore" msgid="3799288817317293115">"ડીફોલ્ટ પર ફરીથી સેટ કરો"</string>
<string name="restore_default_apn_completed" msgid="5671734152740058937">"ડિફોલ્ટ APN સેટિંગ્સ ફરીથી સેટ કરો પૂર્ણ થયું."</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"રીસેટ માટેના વિકલ્પો"</string>
- <string name="reset_dashboard_summary" msgid="8778383341461126642">"નેટવર્ક, ઍપ અથવા ઉપકરણ રીસેટ કરી શકાય છે"</string>
+ <string name="reset_dashboard_summary" msgid="8778383341461126642">"નેટવર્ક, ઍપ અથવા ડિવાઇસ રીસેટ કરી શકાય છે"</string>
<string name="reset_network_title" msgid="8944059136930806211">"વાઇ-ફાઇ, મોબાઇલ અને બ્લૂટૂથ રીસેટ કરો"</string>
- <string name="reset_network_desc" msgid="4982633363916261109">"આ બધી નેટવર્ક સેટિંગ્સ ફરીથી સેટ કરશે, જેમાં સમાવિષ્ટ છે: \n\n"<li>"Wi‑Fi"</li>\n<li>"મોબાઇલ ડેટા"</li>\n<li>"Bluetooth"</li></string>
+ <string name="reset_network_desc" msgid="4982633363916261109">"આ બધા નેટવર્ક સેટિંગ રીસેટ કરશે, જેમાં આનો સમાવેશ છે: \n\n"<li>"Wi‑Fi"</li>\n<li>"મોબાઇલ ડેટા"</li>\n<li>"Bluetooth"</li></string>
<string name="reset_esim_title" msgid="7630781767040831893">"ડાઉનલોડ કરેલાં સિમ કાઢી નખાશે"</string>
<string name="reset_esim_desc" msgid="433226911566802">"બદલીને લેવાના સિમ ડાઉનલોડ કરવા માટે, તમારા કૅરિઅરનો સંપર્ક કરો. આનાથી કોઈપણ મોબાઇલ સેવા પ્લાન રદ થશે નહીં."</string>
<string name="reset_network_button_text" msgid="4293271046867912819">"સેટિંગ્સ ફરીથી સેટ કરો"</string>
@@ -1581,7 +1583,7 @@
<string name="reset_network_complete_toast" msgid="128225929536005495">"નેટવર્ક સેટિંગ્સ ફરીથી સેટ કરવામાં આવી છે"</string>
<string name="reset_esim_error_title" msgid="4728931209471875632">"સિમ કાઢી નાખી શકાતાં નથી"</string>
<string name="reset_esim_error_msg" msgid="4716366079119742235">"ડાઉનલોડ કરેલાં સિમ ભૂલને કારણે કાઢી નાખી શકાતાં નથી.\n\nતમારું ડિવાઇસ ફરી શરૂ કરો અને ફરી પ્રયાસ કરો."</string>
- <string name="master_clear_title" msgid="1560712943955904673">"બધો ડેટા ભૂંસી નાખો (ફેક્ટરી રીસેટ)"</string>
+ <string name="master_clear_title" msgid="1560712943955904673">"બધો ડેટા કાઢી નાખો (ફેક્ટરી રીસેટ)"</string>
<string name="master_clear_short_title" msgid="919098101581335101">"બધો ડેટા કાઢી નાખો (ફેક્ટરી રીસેટ)"</string>
<string name="master_clear_desc" product="tablet" msgid="3432373610755760899">"આ ક્રિયા તમારા ટૅબ્લેટના "<b>"આંતરિક સ્ટોરેજ"</b>"માંથી બધો ડેટા કાઢી નાખશે, જેમાં આનો સમાવેશ થાય છે:\n\n"<li>"તમારું Google એકાઉન્ટ"</li>\n<li>"સિસ્ટમ તેમજ ઍપ ડેટા અને સેટિંગ"</li>\n<li>"ડાઉનલોડ કરેલી ઍપ"</li></string>
<string name="master_clear_desc" product="default" msgid="8765543541962866697">"આ ક્રિયા તમારા ફોનના "<b>"આંતરિક સ્ટોરેજ"</b>"માંથી બધો ડેટા કાઢી નાખશે, જેમાં આનો સમાવેશ થાય છે:\n\n"<li>"તમારું Google એકાઉન્ટ"</li>\n<li>"સિસ્ટમ તેમજ ઍપ ડેટા અને સેટિંગ"</li>\n<li>"ડાઉનલોડ કરેલી ઍપ"</li></string>
@@ -1606,7 +1608,7 @@
<string name="master_clear_not_available" msgid="4676613348163652454">"આ વપરાશકર્તા માટે ફેક્ટરી રીસેટ ઉપલબ્ધ નથી"</string>
<string name="master_clear_progress_title" msgid="378953167274114857">"કાઢી નાંખી રહ્યું છે"</string>
<string name="master_clear_progress_text" msgid="5418958116008976218">"કૃપા કરીને રાહ જુઓ..."</string>
- <string name="call_settings_title" msgid="5033906789261282752">"કૉલ સેટિંગ્સ"</string>
+ <string name="call_settings_title" msgid="5033906789261282752">"કૉલ સેટિંગ"</string>
<string name="call_settings_summary" msgid="2119161087671450035">"વૉઇસમેઇલ, કૉલ ફોરવર્ડિંગ, કૉલ પ્રતીક્ષા, કૉલર ID સેટ કરો"</string>
<string name="tether_settings_title_usb" msgid="4265582654602420357">"USB ટિથરિંગ"</string>
<string name="tether_settings_title_wifi" msgid="2060965130234484613">"પોર્ટેબલ હૉટસ્પૉટ"</string>
@@ -1645,7 +1647,7 @@
<string name="mobile_insert_sim_card" msgid="7594550403454243732">"કૃપા કરીને સિમ કાર્ડ શામેલ કરો અને પુનઃપ્રારંભ કરો"</string>
<string name="mobile_connect_to_internet" msgid="6031886097365170913">"કૃપા કરીને ઇન્ટરનેટ સાથે કનેક્ટ કરો"</string>
<string name="location_title" msgid="8664674161765477168">"મારું સ્થાન"</string>
- <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"કાર્યાલયની પ્રોફાઇલ માટે સ્થાન"</string>
+ <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"ઑફિસની પ્રોફાઇલ માટે સ્થાન"</string>
<string name="location_app_level_permissions" msgid="1298041503927632960">"ઍપ પરવાનગી"</string>
<string name="location_app_permission_summary_location_off" msgid="541372845344796336">"સ્થાન બંધ છે"</string>
<plurals name="location_app_permission_summary_location_on" formatted="false" msgid="7904821382328758218">
@@ -1714,7 +1716,7 @@
<string name="lockpassword_confirm_your_password_header" msgid="9055242184126838887">"તમારો પાસવર્ડ ફરી દાખલ કરો"</string>
<string name="lockpassword_confirm_your_pattern_header" msgid="7137526922696316545">"તમારા પેટર્નની પુષ્ટિ કરો"</string>
<string name="lockpassword_confirm_your_pin_header" msgid="4335593948303036343">"તમારો પિન ફરી દાખલ કરો"</string>
- <string name="lockpassword_confirm_passwords_dont_match" msgid="1783767008133345784">"પાસવર્ડ્સ મેળ ખાતા નથી"</string>
+ <string name="lockpassword_confirm_passwords_dont_match" msgid="1783767008133345784">"પાસવર્ડ મેળ ખાતા નથી"</string>
<string name="lockpassword_confirm_pins_dont_match" msgid="5444357293637748942">"પિન મેળ ખાતા નથી"</string>
<string name="lockpassword_draw_your_pattern_again_header" msgid="9017394036814402348">"તમારી પૅટર્ન ફરીથી દોરો"</string>
<string name="lockpassword_choose_lock_generic_header" msgid="4418423132980560119">"અનલૉક પસંદગી"</string>
@@ -1789,7 +1791,7 @@
<string name="applications_settings_header" msgid="3766501606045211098">"ઍપ્લિકેશન સેટિંગ્સ"</string>
<string name="install_applications" msgid="7745902974984889179">"અજાણ્યા સ્ત્રોતો"</string>
<string name="install_applications_title" msgid="8164828577588659496">"બધા ઍપ્લિકેશન સ્રોતોને મંજૂરી આપો"</string>
- <string name="recent_app_category_title" msgid="7688788038277126727">"તાજેતરમાં ખોલેલી ઍપ્લિકેશનો"</string>
+ <string name="recent_app_category_title" msgid="7688788038277126727">"તાજેતરમાં ખોલેલી ઍપ"</string>
<string name="see_all_apps_title" msgid="6435061912110347474">"બધી <xliff:g id="COUNT">%1$d</xliff:g> ઍપ્લિકેશન જુઓ"</string>
<string name="install_all_warning" product="tablet" msgid="4580699862358542727">"તમારું ટૅબ્લેટ અને વ્યક્તિગત ડેટા અજાણી ઍપ્લિકેશનોના હુમલા પ્રતિ વધુ સંવેદનશીલ છે. આ સ્રોત પરથી ઍપ્લિકેશનો ઇન્સ્ટૉલ કરીને તમે સંમત થાઓ છો કે તેમનો ઉપયોગ કરવાના પરિણામે તમારા ટૅબ્લેટને થતી કોઈ પણ ક્ષતિ કે ડેટાના નુકસાન માટે તમે જવાબદાર છો."</string>
<string name="install_all_warning" product="default" msgid="7445839116997296358">"તમારો ફોન અને વ્યક્તિગત ડેટા અજાણી ઍપ્લિકેશનોના હુમલા પ્રતિ વધુ સંવેદનશીલ છે. આ સ્રોત પરથી ઍપ્લિકેશનો ઇન્સ્ટૉલ કરીને તમે સંમત થાઓ છો કે તેમનો ઉપયોગ કરવાના પરિણામે તમારા ફોનને થતી કોઈ પણ ક્ષતિ કે ડેટાના નુકસાન માટે તમે જવાબદાર છો."</string>
@@ -1869,7 +1871,7 @@
<string name="join_two_unrelated_items" msgid="8257688498236358394">"<xliff:g id="FIRST_ITEM">%1$s</xliff:g>, <xliff:g id="SECOND_ITEM">%2$s</xliff:g>"</string>
<string name="computing_size" msgid="2234106107535318136">"ગણતરી કરી રહ્યું છે…"</string>
<string name="invalid_size_value" msgid="1202239724000802296">"પેકેજ કદની ગણતરી કરી શક્યાં નથી."</string>
- <string name="version_text" msgid="5421619604445758652">"સંસ્કરણ <xliff:g id="VERSION_NUM">%1$s</xliff:g>"</string>
+ <string name="version_text" msgid="5421619604445758652">"વર્ઝન <xliff:g id="VERSION_NUM">%1$s</xliff:g>"</string>
<string name="move_app" msgid="5400135231255614785">"ખસેડો"</string>
<string name="move_app_to_internal" product="tablet" msgid="8658767231643024635">"ટેબ્લેટ પર ખસેડો"</string>
<string name="move_app_to_internal" product="default" msgid="1031111519418252055">"ફોન પર ખસેડો"</string>
@@ -1888,7 +1890,7 @@
<string name="app_disable_dlg_positive" msgid="5508828271100168073">"ઍપ્લિકેશન અક્ષમ કરો"</string>
<string name="app_disable_dlg_text" msgid="9221864774943530281">"જો તમે આ ઍપ બંધ કરશો, તો Android અને અન્ય ઍપ અપેક્ષા પ્રમાણે કાર્ય કરી શકશે નહીં. યાદ રાખો, તમે આ ઍપને ડિલીટ નહીં કરી શકો, કારણ કે તે તમારા ડિવાઇસમાં પહેલેથી ઇન્સ્ટૉલ થયેલી હતી. બંધ કરીને, તમે આ ઍપને માત્ર બંધ કરો છો અને તમારા ડિવાઇસમાં છુપાવો છો."</string>
<string name="app_disable_notifications_dlg_title" msgid="699530661413553928">"સૂચનાઓ બંધ કરીએ?"</string>
- <string name="app_install_details_group_title" msgid="2909597319422976921">"દુકાન"</string>
+ <string name="app_install_details_group_title" msgid="2909597319422976921">"Store"</string>
<string name="app_install_details_title" msgid="6954953384372934881">"ઍપ્લિકેશનની વિગતો"</string>
<string name="app_install_details_summary" msgid="6612222941121363940">"<xliff:g id="APP_STORE">%1$s</xliff:g> માંથી ઇન્સ્ટૉલ કરેલ ઍપ્લિકેશન"</string>
<string name="instant_app_details_summary" msgid="6384264315914966114">"વધુ માહિતી <xliff:g id="APP_STORE">%1$s</xliff:g> પર મળશે"</string>
@@ -1970,7 +1972,7 @@
<string name="show_ime" msgid="7322620473198763563">"વર્ચ્યુઅલ કીબોર્ડ બતાવો"</string>
<string name="show_ime_summary" msgid="3246628154011464373">"જ્યારે ભૌતિક કીબોર્ડ સક્રિય હોય ત્યારે તેને સ્ક્રીન પર રાખો"</string>
<string name="keyboard_shortcuts_helper" msgid="6574386807271399788">"કીબોર્ડ શૉર્ટકટ્સ સહાયક"</string>
- <string name="keyboard_shortcuts_helper_summary" msgid="8024313306403779742">"ઉપલબ્ધ શૉર્ટકટ્સ પ્રદર્શિત કરો"</string>
+ <string name="keyboard_shortcuts_helper_summary" msgid="8024313306403779742">"ઉપલબ્ધ શૉર્ટકટ પ્રદર્શિત કરો"</string>
<string name="language_and_input_for_work_category_title" msgid="2053255944038892588">"કાર્યાલયનું પ્રોફાઇલ અને સાધનો"</string>
<string name="virtual_keyboards_for_work_title" msgid="3968291646938204523">"કાર્ય માટે વર્ચ્યુઅલ કીબોર્ડ"</string>
<string name="default_keyboard_layout" msgid="9171704064451242230">"ડિફોલ્ટ"</string>
@@ -1998,7 +2000,7 @@
<string name="user_dict_settings_add_word_hint" msgid="4184010899351180735">"એક શબ્દ લખો"</string>
<string name="user_dict_settings_add_shortcut_hint" msgid="2212771507741334156">"વૈકલ્પિક શોર્ટકટ"</string>
<string name="user_dict_settings_edit_dialog_title" msgid="6492621665762797309">"શબ્દ સંપાદિત કરો"</string>
- <string name="user_dict_settings_context_menu_edit_title" msgid="4577283176672181497">"સંપાદિત કરો"</string>
+ <string name="user_dict_settings_context_menu_edit_title" msgid="4577283176672181497">"ફેરફાર કરો"</string>
<string name="user_dict_settings_context_menu_delete_title" msgid="670470172230144069">"ડિલીટ કરો"</string>
<string name="user_dict_settings_empty_text" msgid="2774939221998982609">"તમારી પાસે વપરાશકર્તા શબ્દકોશમાં કોઈપણ શબ્દ નથી. શબ્દને ઉમેરવા માટે, ઉમેરો (+) બટન ટૅપ કરો."</string>
<string name="user_dict_settings_all_languages" msgid="8839702015353418176">"તમામ ભાષાઓ માટે"</string>
@@ -2035,7 +2037,7 @@
<string name="accessibility_settings" msgid="9140621093888234485">"ઍક્સેસિબિલિટી"</string>
<string name="accessibility_settings_title" msgid="1687226556576913576">"ઍક્સેસિબિલિટી સેટિંગ્સ"</string>
<string name="accessibility_settings_summary" msgid="5742379519336396561">"સ્ક્રીન રીડર, પ્રદર્શન, ક્રિયાપ્રતિક્રિયા સંબંધી નિયંત્રણો"</string>
- <string name="vision_settings_title" msgid="7315352351051423944">"વિઝન સેટિંગ્સ"</string>
+ <string name="vision_settings_title" msgid="7315352351051423944">"વિઝન સેટિંગ"</string>
<string name="vision_settings_description" msgid="3476589459009287332">"તમે તમારી જરૂરિયાતો મુજબ આ ઉપકરણને કસ્ટમાઇઝ કરી શકો છો. સેટિંગ્સમાં આ ઍક્સેસિબિલિટી સુવિધાઓ પછીથી બદલી શકાય છે."</string>
<string name="vision_settings_suggestion_title" msgid="7268661419110951128">"ફોન્ટનું કદ બદલો"</string>
<string name="screen_reader_category_title" msgid="6300714148519645544">"સ્ક્રીન રીડર"</string>
@@ -2084,7 +2086,7 @@
<string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"તમારે વાંચવા જરૂરી હોય, પરંતુ હંગામી રૂપે દેખાતા સંદેશાને કેટલા સમય સુધી બતાવવા તે પસંદ કરો.\n\nઆ સેટિંગની સુવિધા બધી ઍપમાં નથી હોતી."</string>
<string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"તમને ક્રિયા કરવાનું કહેતાં હોય, પરંતુ હંગામી રૂપે દેખાતા સંદેશાને કેટલા સમય સુધી દેખાડવા તે પસંદ કરો.\n\nઆ સેટિંગની સુવિધા બધી ઍપમાં નથી હોતી."</string>
<string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"ટચ કરી અને પકડવા પર વિલંબ"</string>
- <string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"રંગ બદલવાની સુવિધા"</string>
+ <string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"વિપરીત રંગમાં બદલવું"</string>
<string name="accessibility_display_inversion_preference_subtitle" msgid="69291255322175323">"કાર્યપ્રદર્શનને અસર થઈ શકે છે"</string>
<string name="accessibility_autoclick_preference_title" msgid="9164599088410340405">"જોવાયાનો સમયગાળો"</string>
<string name="accessibility_autoclick_description" msgid="5492414927846407499">"જો તમે માઉસનો ઉપયોગ કરી રહ્યાં હોય, તો જ્યારે કર્સર અમુક ચોક્કસ સમય માટે કાર્ય કરતું રોકાઈ જાય ત્યારે તમે તેને આપમેળે ક્રિયા કરવા માટે સેટ કરી શકો છો."</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"નોટિફિકેશન વાઇબ્રેશન"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"રિંગ વાઇબ્રેશન"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"સ્પર્શ વાઇબ્રેશન"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"સેવાનો ઉપયોગ કરો"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"રંગ સુધારણાનો ઉપયોગ કરો"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"કૅપ્શનનો ઉપયોગ કરો"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"સેવાનો ઉપયોગ કરો"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"રંગ સુધારણાનો ઉપયોગ કરો"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"કૅપ્શનનો ઉપયોગ કરો"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"આગળ ચાલુ રાખો"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"શ્રવણ યંત્રો"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"કોઈ શ્રવણ યંત્ર કનેક્ટ કરેલ નથી"</string>
@@ -2433,7 +2435,7 @@
<string name="battery_detail_power_usage" msgid="3606930232257489212">"બૅટરી વપરાશ"</string>
<string name="battery_detail_info_title" msgid="4617514228447481336">"સંપૂર્ણ ચાર્જ પછી"</string>
<string name="battery_detail_manage_title" msgid="745194290572617507">"બૅટરી વપરાશ સંચાલિત કરો"</string>
- <string name="advanced_battery_graph_subtext" msgid="3349760453669664057">"બાકી રહેલી બૅટરીનો અંદાજ ઉપકરણના તમારા ઉપયોગ પર આધારિત છે"</string>
+ <string name="advanced_battery_graph_subtext" msgid="3349760453669664057">"બાકી રહેલી બૅટરીનો અંદાજ ડિવાઇસના તમારા ઉપયોગ પર આધારિત છે"</string>
<string name="estimated_time_left" msgid="8849913193475011250">"અંદાજિત બાકી સમય"</string>
<string name="estimated_charging_time_left" msgid="7597080379844486777">"સંપૂર્ણપણે ચાર્જ થવામાં"</string>
<string name="estimated_time_description" msgid="9220355793080184567">"વપરાશના આધારે અનુમાન બદલાઈ શકે છે"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"ચાલુ કરો"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"બૅટરી સેવરનો ઉપયોગ કરો"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"બૅટરી સેવરનો ઉપયોગ કરો"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"આપમેળે ચાલુ કરો"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"ક્યારેય નહીં"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"<xliff:g id="PERCENT">%1$s</xliff:g> બૅટરી પર"</string>
@@ -2563,18 +2565,18 @@
<string name="fullbackup_erase_dialog_message" msgid="2588536036471144070">"ઉપકરણ ડેટા (જેમ કે વાઇ-ફાઇ પાસવર્ડ્સ અને કૉલ ઇતિહાસ) અને ઍપ્લિકેશન ડેટા (જેમ કે સેટિંગ્સ અને ઍપ્લિકેશનો દ્વારા સંગ્રહિત ફાઇલો) નું બેકઅપ લેવાનું રોકીએ, ઉપરાંત રિમોટ સર્વર્સ પરની તમામ કૉપિઝ કાઢી નાખીએ?"</string>
<string name="fullbackup_data_summary" msgid="406274198094268556">"ઉપકરણ ડેટા (જેમ કે વાઇ-ફાઇ પાસવર્ડ્સ અને કૉલ ઇતિહાસ) અને ઍપ્લિકેશન ડેટા (જેમ કે સેટિંગ્સ અને ઍપ્લિકેશનો દ્વારા સંગ્રહિત ફાઇલો)નો રિમોટલી આપમેળે બેક અપ લો.\n\nજ્યારે તમે સ્વચલિત બેકઅપ ચાલુ કરો છો, ત્યારે ઉપકરણ અને ઍપ્લિકેશન ડેટા સમયાંતરે રિમોટલી સચવાય છે. ઍપ્લિકેશન ડેટા એવો કોઈપણ ડેટા હોઈ શકે જેને કોઈ ઍપ્લિકેશને સાચવ્યો હોય (વિકાસકર્તા સેટિંગ્સનાં આધારે) જેમાં સંપર્કો, સંદેશા અને ફોટો જેવા સંભવિતપણે સંવેદનશીલ ડેટાનો સમાવેશ થાય છે."</string>
<string name="device_admin_settings_title" msgid="2074319456047334589">"ઉપકરણ વ્યવસ્થાપક સેટિંગ્સ"</string>
- <string name="active_device_admin_msg" msgid="6929247869516924549">"ઉપકરણ વ્યવસ્થાપક ઍપ્લિકેશન"</string>
+ <string name="active_device_admin_msg" msgid="6929247869516924549">"ડિવાઇસ વ્યવસ્થાપક ઍપ્લિકેશન"</string>
<string name="remove_device_admin" msgid="4413438593788336400">"આ ઉપકરણ વ્યવસ્થાપક ઍપ્લિકેશનને નિષ્ક્રિય કરો"</string>
<string name="uninstall_device_admin" msgid="9017499299961719830">"ઍપ્લિકેશન અનઇન્સ્ટૉલ કરો"</string>
<string name="remove_and_uninstall_device_admin" msgid="5607703579731496253">"નિષ્ક્રિય અને અનઇન્સ્ટૉલ કરો"</string>
<string name="select_device_admin_msg" msgid="4173769638399075387">"ઉપકરણ વ્યવસ્થાપક ઍપ્લિકેશનો"</string>
<string name="no_device_admins" msgid="4129231900385977460">"કોઈ ઉપકરણ વ્યવસ્થાપક ઍપ્લિકેશનો ઉપલબ્ધ નથી"</string>
<string name="personal_device_admin_title" msgid="759440849188565661">"વ્યક્તિગત"</string>
- <string name="managed_device_admin_title" msgid="8021522755492551726">"કાર્યાલય"</string>
+ <string name="managed_device_admin_title" msgid="8021522755492551726">"ઑફિસ"</string>
<string name="sms_access_restriction_enabled" msgid="3006320256764718303">"SMS અને કૉલ લૉગનો અૅક્સેસ પ્રતિબંધિત કરો"</string>
<string name="sms_access_restriction_enabled_summary" msgid="9011946580977780063">"માત્ર ડિફૉલ્ટ ફોન અને સંદેશ માટેની અૅપ પાસે SMS અને કૉલ લૉગની પરવાનગીઓ હોય છે"</string>
<string name="no_trust_agents" msgid="5757792915019113084">"કોઈ ઉપલબ્ધ ટ્રસ્ટ એજન્ટ્સ નથી"</string>
- <string name="add_device_admin_msg" msgid="3573765823476931173">"ઉપકરણ વ્યવસ્થાપક ઍપ્લિકેશન સક્રિય કરીએ?"</string>
+ <string name="add_device_admin_msg" msgid="3573765823476931173">"ડિવાઇસ વ્યવસ્થાપક ઍપ્લિકેશન સક્રિય કરીએ?"</string>
<string name="add_device_admin" msgid="1621152410207260584">"આ ઉપકરણ વ્યવસ્થાપક ઍપ્લિકેશન સક્રિય કરો"</string>
<string name="device_admin_add_title" msgid="6097881332139146897">"ઉપકરણ વ્યવસ્થાપક"</string>
<string name="device_admin_warning" msgid="4421817419326480449">"આ વ્યવસ્થાપક ઍપ્લિકેશનને સક્રિય કરવું ઍપ્લિકેશન <xliff:g id="APP_NAME">%1$s</xliff:g>ને નીચેની ક્રિયાઓ કરવાની મંજૂરી આપશે:"</string>
@@ -2596,10 +2598,10 @@
<string name="sync_is_failing" msgid="8284618104132302644">"સમન્વયનમાં હાલમાં સમસ્યા આવી રહી છે. તે ટૂંક સમયમાં પાછું આવશે."</string>
<string name="add_account_label" msgid="4461298847239641874">"એકાઉન્ટ ઉમેરો"</string>
<string name="managed_profile_not_available_label" msgid="8784246681719821917">"કાર્યાલયની પ્રોફાઇલ હજી સુધી ઉપલબ્ધ નથી"</string>
- <string name="work_mode_label" msgid="6845849194740195757">"કાર્યાલયની પ્રોફાઇલ"</string>
+ <string name="work_mode_label" msgid="6845849194740195757">"ઑફિસની પ્રોફાઇલ"</string>
<string name="work_mode_on_summary" msgid="1682781113156323592">"તમારી સંસ્થા દ્વારા મેનેજ કરેલ"</string>
<string name="work_mode_off_summary" msgid="1688885392211178315">"ઍપ અને નોટિફિકેશન બંધ છે"</string>
- <string name="remove_managed_profile_label" msgid="4625542553784793536">"કાર્યાલયની પ્રોફાઇલ દૂર કરો"</string>
+ <string name="remove_managed_profile_label" msgid="4625542553784793536">"ઑફિસની પ્રોફાઇલ દૂર કરો"</string>
<string name="background_data" msgid="8275750862371471171">"બૅકગ્રાઉન્ડ ડેટા"</string>
<string name="background_data_summary" msgid="799640633948841990">"ઍપ્લિકેશનો કોઈપણ સમયે ડેટાને સમન્વયિત, મોકલી અને પ્રાપ્ત કરી શકે છે"</string>
<string name="background_data_dialog_title" msgid="8306650658158895976">"બૅકગ્રાઉન્ડ ડેટાને અક્ષમ કરીએ?"</string>
@@ -2617,7 +2619,7 @@
<string name="sync_one_time_sync" msgid="6005174168405784256">"હમણાં સમન્વયિત કરવા માટે ટૅપ કરો<xliff:g id="LAST_SYNC_TIME">
%1$s</xliff:g>"</string>
<string name="sync_gmail" msgid="4457967084840001296">"Gmail"</string>
- <string name="sync_calendar" msgid="6573708019827519372">"કૅલેન્ડર"</string>
+ <string name="sync_calendar" msgid="6573708019827519372">"Calendar"</string>
<string name="sync_contacts" msgid="5687434785723746534">"સંપર્કો"</string>
<string name="sync_plug" msgid="6703804441408427257"><font fgcolor="#ffffffff">"Google સમન્વયન પર સ્વાગત છે!"</font>" \nતમારા સંપર્કો, એપોઇન્ટમેન્ટ્સ અને વધુના અૅક્સેસની તમે જ્યાં પણ હોવ ત્યાંથી મંજૂરી આપવા માટે ડેટાને સમન્વયિત કરવાનો એક Google અભિગમ."</string>
<string name="header_application_sync_settings" msgid="4581847153669774489">"ઍપ્લિકેશન સમન્વયન સેટિંગ્સ"</string>
@@ -2668,8 +2670,8 @@
<string name="data_usage_menu_sim_cards" msgid="8508154611676507088">"સિમ કાર્ડ"</string>
<string name="data_usage_cellular_data_summary" msgid="9162777397135709280">"થોભાવવાની મર્યાદા"</string>
<string name="account_settings_menu_auto_sync" msgid="2673669556006027506">"ડેટાને આપમેળે સિંક કરો"</string>
- <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"વ્યક્તિગત ડેટાને આપમેળે સિંક કરો"</string>
- <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"કાર્યાલયના ડેટાને આપમેળે સિંક કરો"</string>
+ <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"વ્યક્તિગત ડેટાને ઑટો સિંક કરો"</string>
+ <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"ઑફિસના ડેટાને ઑટો સિંક કરો"</string>
<string name="data_usage_change_cycle" msgid="447761920472170031">"ચક્ર બદલો…"</string>
<string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"ડેટા વપરાશ ચક્ર ફરીથી સેટ કરવા માટે મહિનાનો દિવસ:"</string>
<string name="data_usage_empty" msgid="7981405723435034032">"આ સમયગાળા દરમ્યાન કોઈ એપ્લિકેશને ડેટાનો ઉપયોગ કર્યો નથી."</string>
@@ -2735,7 +2737,7 @@
<string name="data_usage_metered_yes" msgid="7333744880035386073">"મીટર કરેલ"</string>
<string name="data_usage_metered_no" msgid="1961524615778610008">"મીટર કરેલ નથી"</string>
<string name="data_usage_disclaimer" msgid="4683321532922590425">"કેરિઅર ડેટા એકાઉન્ટિંગ તમારા ઉપકરણથી અલગ હોઈ શકે છે."</string>
- <string name="cryptkeeper_emergency_call" msgid="4625420047524693116">"કટોકટીમાં કૉલ જોડો"</string>
+ <string name="cryptkeeper_emergency_call" msgid="4625420047524693116">"ઇમર્જન્સી કૉલ"</string>
<string name="cryptkeeper_return_to_call" msgid="4433942821196822815">"કૉલ પર પાછા ફરો"</string>
<string name="vpn_name" msgid="3538818658670774080">"નામ"</string>
<string name="vpn_type" msgid="6389116710008658550">"પ્રકાર"</string>
@@ -2772,7 +2774,7 @@
<string name="vpn_connect_to" msgid="7926776854873218762">"<xliff:g id="PROFILE">%s</xliff:g> સાથે કનેક્ટ કરો"</string>
<string name="vpn_disconnect_confirm" msgid="3505111947735651082">"આ VPNને ડિસ્કનેક્ટ કરીએ?"</string>
<string name="vpn_disconnect" msgid="4625914562388652486">"ડિસ્કનેક્ટ કરો"</string>
- <string name="vpn_version" msgid="2006792987077940456">"સંસ્કરણ <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <string name="vpn_version" msgid="2006792987077940456">"વર્ઝન <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="8457511440635534478">"VPN ભૂલી ગયાં"</string>
<string name="vpn_replace_vpn_title" msgid="8517436922021598103">"અસ્તિત્વમાંની VPN ને બદલીએ?"</string>
<string name="vpn_set_vpn_title" msgid="6483554732067951052">"હંમેશાં ચાલુ VPN સેટ કરીએ?"</string>
@@ -2868,10 +2870,10 @@
<string name="user_add_user_item_title" msgid="6835385073795492410">"વપરાશકર્તા"</string>
<string name="user_add_profile_item_title" msgid="4932743891449790664">"પ્રતિબંધિત પ્રોફાઇલ"</string>
<string name="user_add_user_title" msgid="2320897397066676472">"નવા વપરાશકર્તાને ઉમેરીએ?"</string>
- <string name="user_add_user_message_long" msgid="686637203224195465">"તમે વધારાના વપરાશકર્તાઓ બનાવીને અન્ય લોકો સાથે આ ઉપકરણને શેર કરી શકો છો. દરેક વપરાશકર્તા પાસે તેમની પોતાની સ્પેસ છે, જેને તેઓ ઍપ, વૉલપેપર, વગેરે સાથે કસ્ટમાઇઝ કરી શકે છે. વપરાશકર્તાઓ પ્રત્યેક વ્યક્તિને અસર કરતી હોય તેવી ઉપકરણ સેટિંગ જેમ કે વાઇ-ફાઇને પણ સમાયોજિત કરી શકે છે.\n\nજ્યારે તમે કોઈ નવા વપરાશકર્તાને ઉમેરો છો, ત્યારે તે વ્યક્તિને તેમની સ્પેસ સેટ કરવાની જરૂર પડે છે.\n\nકોઈપણ વપરાશકર્તા અન્ય બધા વપરાશકર્તાઓ માટે ઍપને અપડેટ કરી શકે છે. નવા વપરાશકર્તાને ઍક્સેસિબિલિટી સેટિંગ અને સેવાઓ ટ્રાન્સફર ન પણ થાય."</string>
+ <string name="user_add_user_message_long" msgid="686637203224195465">"તમે વધારાના વપરાશકર્તાઓ બનાવીને અન્ય લોકો સાથે આ ડિવાઇસને શેર કરી શકો છો. દરેક વપરાશકર્તા પાસે તેમની પોતાની સ્પેસ છે, જેને તેઓ ઍપ, વૉલપેપર, વગેરે સાથે કસ્ટમાઇઝ કરી શકે છે. વપરાશકર્તાઓ પ્રત્યેક વ્યક્તિને અસર કરતી હોય તેવી ડિવાઇસ સેટિંગ જેમ કે વાઇ-ફાઇને પણ સમાયોજિત કરી શકે છે.\n\nજ્યારે તમે કોઈ નવા વપરાશકર્તાને ઉમેરો છો, ત્યારે તે વ્યક્તિને તેમની સ્પેસ સેટ કરવાની જરૂર પડે છે.\n\nકોઈપણ વપરાશકર્તા અન્ય બધા વપરાશકર્તાઓ માટે ઍપને અપડેટ કરી શકે છે. નવા વપરાશકર્તાને ઍક્સેસિબિલિટી સેટિંગ અને સેવાઓ ટ્રાન્સફર ન પણ થાય."</string>
<string name="user_add_user_message_short" msgid="1802594476285458254">"જ્યારે તમે કોઈ નવા વપરાશકર્તાને ઉમેરો છો, ત્યારે તે વ્યક્તિને તેમનું સ્થાન સેટ અપ કરવાની જરૂર પડે છે.\n\nકોઈપણ વપરાશકર્તા બધા અન્ય વપરાશકર્તાઓ માટે એપ્લિકેશન્સને અપડેટ કરી શકે છે."</string>
<string name="user_setup_dialog_title" msgid="6748950002206392396">"અત્યારે જ વપરાશકર્તાને સેટ અપ કરીએ?"</string>
- <string name="user_setup_dialog_message" msgid="2988559933258353919">"ખાતરી કરો કે વ્યક્તિ ઉપકરણ લેવા અને તેમના સ્થાનનું સેટ અપ કરવા માટે ઉપલબ્ધ છે"</string>
+ <string name="user_setup_dialog_message" msgid="2988559933258353919">"ખાતરી કરો કે વ્યક્તિ ડિવાઇસ લેવા અને તેમના સ્થાનનું સેટ અપ કરવા માટે ઉપલબ્ધ છે"</string>
<string name="user_setup_profile_dialog_message" msgid="7611900802824048526">"હવે પ્રોફાઇલ સેટ કરીએ?"</string>
<string name="user_setup_button_setup_now" msgid="4941459406266856176">"હવે સેટ કરો"</string>
<string name="user_setup_button_setup_later" msgid="6596031428556518752">"હમણાં નહીં"</string>
@@ -2886,7 +2888,7 @@
<string name="user_confirm_remove_self_title" msgid="6739480453680217543">"તમને પોતાને કાઢી નાખીએ?"</string>
<string name="user_confirm_remove_title" msgid="1034498514019462084">"આ વપરાશકર્તા ડિલીટ કરીએ?"</string>
<string name="user_profile_confirm_remove_title" msgid="6138684743385947063">"આ પ્રોફાઇલ દૂર કરીએ?"</string>
- <string name="work_profile_confirm_remove_title" msgid="3168910958076735800">"કાર્યાલયની પ્રોફાઇલ દૂર કરીએ?"</string>
+ <string name="work_profile_confirm_remove_title" msgid="3168910958076735800">"ઑફિસની પ્રોફાઇલ દૂર કરીએ?"</string>
<string name="user_confirm_remove_self_message" product="tablet" msgid="2889456786320157545">"તમ તમારું સ્થાન અને ડેટા આ ટેબ્લેટ પરથી ગુમાવશો. તમે આ ક્રિયાને પૂર્વવત્ કરી શકતા નથી."</string>
<string name="user_confirm_remove_self_message" product="default" msgid="8441729423565705183">"તમે આ ફોન પરથી તમારું સ્થાન અને ડેટા ગુમાવશો. તમે આ ક્રિયાને પૂર્વવત્ કરી શકતા નથી."</string>
<string name="user_confirm_remove_message" msgid="5202150470271756013">"તમામ ઍપ્લિકેશનો અને ડેટા કાઢી નાખવામાં આવશે."</string>
@@ -2900,12 +2902,12 @@
<string name="user_exit_guest_confirm_title" msgid="4767911571671099844">"અતિથિ દૂર કરીએ?"</string>
<string name="user_exit_guest_confirm_message" msgid="6955182181145748919">"આ સત્રમાંની તમામ ઍપ્લિકેશનો અને ડેટા કાઢી નાખવામાં આવશે."</string>
<string name="user_exit_guest_dialog_remove" msgid="1878866060881115716">"દૂર કરો"</string>
- <string name="user_enable_calling" msgid="864760054792249503">"ફોન કોલ્સ ચાલુ કરો"</string>
- <string name="user_enable_calling_sms" msgid="3450252891736718793">"ફોન કૉલ્સ અને SMS ચાલુ કરો"</string>
+ <string name="user_enable_calling" msgid="864760054792249503">"ફોન કૉલ ચાલુ કરો"</string>
+ <string name="user_enable_calling_sms" msgid="3450252891736718793">"ફોન કૉલ અને SMS ચાલુ કરો"</string>
<string name="user_remove_user" msgid="3687544420125911166">"વપરાશકર્તાને ડિલીટ કરો"</string>
<string name="user_enable_calling_confirm_title" msgid="1141612415529158542">"ફોન કૉલ્સ ચાલુ કરીએ?"</string>
<string name="user_enable_calling_confirm_message" msgid="2490126715153125970">"કૉલ ઇતિહાસ આ વપરાશકર્તા સાથે શેર કરવામાં આવશે."</string>
- <string name="user_enable_calling_and_sms_confirm_title" msgid="4153856398523366976">"ફોન કૉલ્સ અને SMS ચાલુ કરીએ?"</string>
+ <string name="user_enable_calling_and_sms_confirm_title" msgid="4153856398523366976">"ફોન કૉલ અને SMS ચાલુ કરીએ?"</string>
<string name="user_enable_calling_and_sms_confirm_message" msgid="3278802798876095734">"કૉલ અને SMS ઇતિહાસ આ વપરાશકર્તા સાથે શેર કરવામાં આવશે."</string>
<string name="emergency_info_title" msgid="1522609271881425375">"ઇમર્જન્સીની માહિતી"</string>
<string name="emergency_info_summary" msgid="7280464759837387342">"<xliff:g id="USER_NAME">%1$s</xliff:g> માટે માહિતી અને સંપર્કો"</string>
@@ -2915,10 +2917,10 @@
<string name="nfc_payment_settings_title" msgid="5070077706735415291">"ટેપ કરો અને ચુકવો"</string>
<string name="nfc_payment_how_it_works" msgid="7607901964687787177">"તે કેવી રીતે કાર્ય કરે છે"</string>
<string name="nfc_payment_no_apps" msgid="8844440783395420860">"સ્ટોર્સમાં તમારા ફોન વડે ચુકવો"</string>
- <string name="nfc_payment_default" msgid="7869273092463612271">"ચુકવણી ડિફોલ્ટ"</string>
+ <string name="nfc_payment_default" msgid="7869273092463612271">"ચુકવણી ડિફૉલ્ટ"</string>
<string name="nfc_payment_default_not_set" msgid="955804193510335338">"સેટ નથી"</string>
<string name="nfc_payment_app_and_desc" msgid="102312684211458190">"<xliff:g id="APP">%1$s</xliff:g> - <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
- <string name="nfc_payment_use_default" msgid="3098724195746409476">"ડિફોલ્ટનો ઉપયોગ કરો"</string>
+ <string name="nfc_payment_use_default" msgid="3098724195746409476">"ડિફૉલ્ટનો ઉપયોગ કરો"</string>
<string name="nfc_payment_favor_default" msgid="7555356982142464260">"હંમેશા"</string>
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"જ્યારે અન્ય ચુકવણી ઍપ્લિકેશન ખુલ્લી હોય તે સિવાય"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"ટેપ કરો અને ચૂકવણી કરો ટર્મિનલ પર, આનાથી ચૂકવણી કરો:"</string>
@@ -3033,17 +3035,17 @@
<string name="network_dashboard_summary_mobile" msgid="5560545061217580626">"મોબાઇલ"</string>
<string name="network_dashboard_summary_data_usage" msgid="4695629715072542102">"ડેટા વપરાશ"</string>
<string name="network_dashboard_summary_hotspot" msgid="3928610802321995214">"હૉટસ્પૉટ"</string>
- <string name="connected_devices_dashboard_title" msgid="7795222675849060444">"કનેક્ટ થયેલ ઉપકરણો"</string>
+ <string name="connected_devices_dashboard_title" msgid="7795222675849060444">"કનેક્ટ થયેલા ડિવાઇસ"</string>
<string name="connected_devices_dashboard_summary" msgid="1072664369515033179">"બ્લૂટૂથ, ડ્રાઇવિંગ મોડ, NFC"</string>
<string name="connected_devices_dashboard_no_nfc_summary" msgid="2610085597733526722">"બ્લૂટૂથ, ડ્રાઇવિંગ મોડ"</string>
<string name="connected_devices_dashboard_no_driving_mode_summary" msgid="3524409078596318803">"બ્લૂટૂથ, NFC"</string>
<string name="connected_devices_dashboard_no_driving_mode_no_nfc_summary" msgid="7881286613528299400">"બ્લૂટૂથ"</string>
- <string name="app_and_notification_dashboard_title" msgid="8448096608058843730">"ઍપ્લિકેશનો અને નોટિફિકેશન"</string>
- <string name="app_and_notification_dashboard_summary" msgid="4165181440955038145">"આસિસ્ટંટ, તાજેતરની ઍપ, ડિફૉલ્ટ ઍપ"</string>
+ <string name="app_and_notification_dashboard_title" msgid="8448096608058843730">"ઍપ અને નોટિફિકેશન"</string>
+ <string name="app_and_notification_dashboard_summary" msgid="4165181440955038145">"Assistant, તાજેતરની ઍપ, ડિફૉલ્ટ ઍપ"</string>
<string name="notification_settings_work_profile" msgid="7190550347842400029">"કાર્યાલયની પ્રોફાઇલમાં ઍપ માટે નોટિફિકેશન ઍક્સેસ ઉપલબ્ધ નથી."</string>
<string name="account_dashboard_title" msgid="4734300939532555885">"એકાઉન્ટ"</string>
<string name="account_dashboard_default_summary" msgid="6822549669771936206">"કોઈ એકાઉન્ટ ઉમેરવામાં આવ્યાં નથી"</string>
- <string name="app_default_dashboard_title" msgid="6575301028225232193">"ડિફૉલ્ટ ઍપ્લિકેશનો"</string>
+ <string name="app_default_dashboard_title" msgid="6575301028225232193">"ડિફૉલ્ટ ઍપ"</string>
<string name="system_dashboard_summary" msgid="6582464466735779394">"ભાષાઓ, જેશ્ચર સમય, બૅકઅપ"</string>
<string name="search_results_title" msgid="4160717656435503940">"સેટિંગ્સ"</string>
<string name="keywords_wifi" msgid="8477688080895466846">"વાઇફાઇ, વાઇ-ફાઇ, નેટવર્ક કનેક્શન, ઇન્ટરનેટ, વાયરલેસ, ડેટા, વાઇ-ફાઇ"</string>
@@ -3135,13 +3137,13 @@
<string name="media_volume_option_title" msgid="3553411883305505682">"મીડિયા વૉલ્યૂમ"</string>
<string name="remote_media_volume_option_title" msgid="6355710054191873836">"કાસ્ટનું વૉલ્યૂમ"</string>
<string name="call_volume_option_title" msgid="5028003296631037334">"કૉલ વૉલ્યૂમ"</string>
- <string name="alarm_volume_option_title" msgid="3184076022438477047">"એલાર્મ વૉલ્યૂમ"</string>
+ <string name="alarm_volume_option_title" msgid="3184076022438477047">"અલાર્મ વૉલ્યૂમ"</string>
<string name="ring_volume_option_title" msgid="2038924918468372264">"રિંગ વૉલ્યૂમ"</string>
<string name="notification_volume_option_title" msgid="1358512611511348260">"નોટિફિકેશન વૉલ્યૂમ"</string>
<string name="ringtone_title" msgid="1409086028485922583">"ફોન રિંગટોન"</string>
- <string name="notification_ringtone_title" msgid="2932960620843976285">"નોટિફિકેશન માટે ડિફૉલ્ટ ધ્વનિ"</string>
+ <string name="notification_ringtone_title" msgid="2932960620843976285">"ડિફૉલ્ટ નોટિફિકેશન સાઉન્ડ"</string>
<string name="notification_unknown_sound_title" msgid="8043718667804838398">"ઍપ્લિકેશને અવાજ પૂરો પાડ્યો"</string>
- <string name="notification_sound_default" msgid="2664544380802426260">"નોટિફિકેશન માટે ડિફૉલ્ટ ધ્વનિ"</string>
+ <string name="notification_sound_default" msgid="2664544380802426260">"ડિફૉલ્ટ નોટિફિકેશન સાઉન્ડ"</string>
<string name="alarm_ringtone_title" msgid="6411326147408635902">"ડિફૉલ્ટ એલાર્મ સાઉન્ડ"</string>
<string name="vibrate_when_ringing_title" msgid="2757996559847126952">"કૉલ માટે વાઇબ્રેટ કરો"</string>
<string name="other_sound_settings" msgid="5250376066099818676">"અન્ય ધ્વનિઓ"</string>
@@ -3149,7 +3151,7 @@
<string name="screen_locking_sounds_title" msgid="4407110895465866809">"સ્ક્રીન લૉકિંગ ધ્વનિઓ"</string>
<string name="charging_sounds_title" msgid="5070437987230894287">"ચાર્જિંગ સાઉન્ડ અને વાઇબ્રેશન"</string>
<string name="docking_sounds_title" msgid="2573137471605541366">"ડૉકિંગ સાઉન્ડ્સ"</string>
- <string name="touch_sounds_title" msgid="165237488496165652">"ટચ સાઉન્ડ્સ"</string>
+ <string name="touch_sounds_title" msgid="165237488496165652">"ટચ સાઉન્ડ"</string>
<string name="vibrate_on_touch_title" msgid="6360155469279157684">"સ્પર્શ વાઇબ્રેશન"</string>
<string name="vibrate_on_touch_summary" msgid="5504424764028676043">"ટૅપ, કીબોર્ડ અને વધુ માટે સ્પર્શ દ્વારા આપેલ અભિપ્રાય"</string>
<string name="dock_audio_media_title" msgid="1859521680502040781">"ડૉક સ્પીકર ચલાવે છે"</string>
@@ -3278,12 +3280,12 @@
<string name="zen_onboarding_new_setting_summary" msgid="8264430315983860075">"તમે કોઈ નોટિફિકેશન જોઈ અથવા સાંભળી શકશો નહીં. સ્ટાર આપેલા સંપર્કો અને રિપીટ કૉલરના કૉલને પરવાનગી આપવામાં આવે છે."</string>
<string name="zen_onboarding_current_setting_summary" msgid="3569246708507270821">"(વર્તમાન સેટિંગ)"</string>
<string name="zen_onboarding_dnd_visual_disturbances_header" msgid="7584229011611927613">"ખલેલ પાડશો નહીં નોટિફિકેશનની સેટિંગમાં ફેરફાર કરીએ?"</string>
- <string name="sound_work_settings" msgid="4140215240360927923">"કાર્યાલયની પ્રોફાઇલની ધ્વનિઓ"</string>
- <string name="work_use_personal_sounds_title" msgid="531727195073003599">"વ્યક્તિગત પ્રોફાઇલ ધ્વનિઓ વાપરો"</string>
- <string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"કાર્ય અને વ્યક્તિગત પ્રોફાઇલો માટે ધ્વનિ સમાન રહે છે"</string>
- <string name="work_ringtone_title" msgid="5499360583947410224">"કાર્ય ફોન રિંગટોન"</string>
- <string name="work_notification_ringtone_title" msgid="8059159087214025757">"કાર્યાલયના નોટિફિકેશન માટે ડિફૉલ્ટ ધ્વનિ"</string>
- <string name="work_alarm_ringtone_title" msgid="5328487181385375130">"ડિફૉલ્ટ કાર્ય એલાર્મ માટે સાઉન્ડ"</string>
+ <string name="sound_work_settings" msgid="4140215240360927923">"ઑફિસની પ્રોફાઇલના સાઉન્ડ"</string>
+ <string name="work_use_personal_sounds_title" msgid="531727195073003599">"વ્યક્તિગત પ્રોફાઇલ સાઉન્ડ વાપરો"</string>
+ <string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"ઑફિસ અને વ્યક્તિગત પ્રોફાઇલો માટે સાઉન્ડ સમાન રહે છે"</string>
+ <string name="work_ringtone_title" msgid="5499360583947410224">"ઑફિસ ફોન રિંગટોન"</string>
+ <string name="work_notification_ringtone_title" msgid="8059159087214025757">"ઑફિસના નોટિફિકેશન માટે ડિફૉલ્ટ સાઉન્ડ"</string>
+ <string name="work_alarm_ringtone_title" msgid="5328487181385375130">"ઑફિસના અલાર્મ માટે ડિફૉલ્ટ સાઉન્ડ"</string>
<string name="work_sound_same_as_personal" msgid="7728560881697159758">"વ્યક્તિગત પ્રોફાઇલની જેમ જ"</string>
<string name="work_sync_dialog_title" msgid="4799120971202956837">"ધ્વનિ બદલીએ?"</string>
<string name="work_sync_dialog_yes" msgid="2110726233746476066">"બદલો"</string>
@@ -3321,7 +3323,7 @@
<string name="locked_work_profile_notification_title" msgid="8307025804986190658">"કાર્ય પ્રોફાઇલ લૉક થાય ત્યારે"</string>
<string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"તમામ નોટિફિકેશન કન્ટેન્ટ બતાવો"</string>
<string name="lock_screen_notifications_summary_hide" msgid="3668806866535260143">"સંવેદનશીલ કન્ટેન્ટ છુપાવો"</string>
- <string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"નોટિફિકેશનો બિલકુલ બતાવશો નહીં"</string>
+ <string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"નોટિફિકેશન બિલકુલ બતાવશો નહીં"</string>
<string name="lock_screen_notifications_interstitial_message" msgid="4230189215124387818">"જ્યારે તમારું ઉપકરણ લૉક કરેલું હોય, ત્યારે તમે નોટિફિકેશનો કેવી રીતે બતાવવા માગો છો?"</string>
<string name="lock_screen_notifications_interstitial_title" msgid="2832587379332443505">"નોટિફિકેશનો"</string>
<string name="lock_screen_notifications_summary_show_profile" msgid="8908775469657073273">"કાર્યાલયનું તમામ નોટિફિકેશન કન્ટેન્ટ બતાવો"</string>
@@ -3379,7 +3381,7 @@
<string name="no_vr_listeners" msgid="7675484190394450979">"કોઇ ઇન્સ્ટૉલ કરેલ ઍપ્લિકેશનોએ VR સહાયક સેવાઓ તરીકે શરૂ કરવાની વિનંતી કરી નથી."</string>
<string name="vr_listener_security_warning_title" msgid="7019322246707645361">"<xliff:g id="SERVICE">%1$s</xliff:g> માટે VR સેવા ઍક્સેસની મંજૂરી આપીએ?"</string>
<string name="vr_listener_security_warning_summary" msgid="5093225583584522067">"જ્યારે તમે વર્ચ્યુઅલ રિયાલિટી મોડમાં ઍપ્લિકેશનોનો ઉપયોગ કરી રહ્યાં હોવ ત્યારે <xliff:g id="VR_LISTENER_NAME">%1$s</xliff:g> શરૂ થવા માટે સમર્થ હશે."</string>
- <string name="display_vr_pref_title" msgid="1088464812293416981">"ઉપકરણ, VR માં હોય ત્યારે"</string>
+ <string name="display_vr_pref_title" msgid="1088464812293416981">"ડિવાઇસ, VR માં હોય ત્યારે"</string>
<string name="display_vr_pref_low_persistence" msgid="3132583929174794245">"બ્લર ઘટાડો (ભલામણ કરેલ)"</string>
<string name="display_vr_pref_off" msgid="4681320968818852691">"ફ્લિકર ઘટાડો"</string>
<string name="picture_in_picture_title" msgid="4960733106166035448">"ચિત્ર-માં-ચિત્ર"</string>
@@ -3392,9 +3394,9 @@
<string name="zen_access_detail_switch" msgid="8706332327904974500">"ખલેલ પાડશો નહીંને મંજૂરી આપો"</string>
<string name="zen_access_empty_text" msgid="7667538993781607731">"કોઇ ઇન્સ્ટોલ કરેલ એપ્લિકેશન્સએ ખલેલ પાડશો નહીં ઍક્સેસ કરવાની વિનંતી કરી નથી"</string>
<string name="loading_notification_apps" msgid="1978345231934072091">"ઍપ્લિકેશનો લોડ કરી રહ્યું છે..."</string>
- <string name="app_notifications_off_desc" msgid="3904090905748895146">"તમારી વિનંતી મુજબ Android આ ઍપના નોટિફિકેશનને આ ઉપકરણ પર પ્રદર્શિત થતા બ્લૉક કરી રહ્યું છે"</string>
- <string name="channel_notifications_off_desc" msgid="8005444443218306611">"તમારી વિનંતી મુજબ Android આ ઍપના નોટિફિકેશનની કૅટેગરીને આ ઉપકરણ પર પ્રદર્શિત થતા બ્લૉક કરી રહ્યું છે"</string>
- <string name="channel_group_notifications_off_desc" msgid="7154205544298672850">"તમારી વિનંતી મુજબ Android આ ઍપના નોટિફિકેશનના જૂથોને આ ઉપકરણ પર પ્રદર્શિત થતા બ્લૉક કરી રહ્યું છે"</string>
+ <string name="app_notifications_off_desc" msgid="3904090905748895146">"તમારી વિનંતી મુજબ Android આ ઍપના નોટિફિકેશનને આ ડિવાઇસ પર પ્રદર્શિત થતા બ્લૉક કરી રહ્યું છે"</string>
+ <string name="channel_notifications_off_desc" msgid="8005444443218306611">"તમારી વિનંતી મુજબ Android આ ઍપના નોટિફિકેશનની કૅટેગરીને આ ડિવાઇસ પર પ્રદર્શિત થતા બ્લૉક કરી રહ્યું છે"</string>
+ <string name="channel_group_notifications_off_desc" msgid="7154205544298672850">"તમારી વિનંતી મુજબ Android આ ઍપના નોટિફિકેશનના ગ્રૂપને આ ડિવાઇસ પર પ્રદર્શિત થતા બ્લૉક કરી રહ્યું છે"</string>
<string name="notification_channels" msgid="956764228116145956">"કૅટેગરીઓ"</string>
<string name="notification_channels_other" msgid="1615988645667411530">"અન્ય"</string>
<plurals name="notification_group_summary" formatted="false" msgid="3744856747513344999">
@@ -3430,7 +3432,7 @@
<string name="app_notification_importance_title" msgid="1902794400671001142">"મહત્વ"</string>
<string name="notification_show_lights_title" msgid="5381920725933228542">"લાઇટ ઝબકવી"</string>
<string name="notification_vibrate_title" msgid="8221718258793835282">"વાઇબ્રેટ"</string>
- <string name="notification_channel_sound_title" msgid="7635366839003304745">"ધ્વનિ"</string>
+ <string name="notification_channel_sound_title" msgid="7635366839003304745">"સાઉન્ડ"</string>
<string name="zen_mode_rule_delete_button" msgid="6763486487220471193">"ડિલીટ કરો"</string>
<string name="zen_mode_rule_rename_button" msgid="1428130397306726792">"નામ બદલો"</string>
<string name="zen_mode_rule_name" msgid="8583652780885724670">"શેડ્યૂલનું નામ"</string>
@@ -3548,7 +3550,7 @@
<string name="zen_mode_screen_off_summary_no_led" msgid="7255874108150630145">"ખલેલ પાડશો નહીં દ્વારા શાંત કરેલ નોટિફિકેશનોને સ્ક્રીન ચાલુ કરવા દો"</string>
<string name="notification_app_settings_button" msgid="3651180424198580907">"સૂચનાઓની સેટિંગ્સ"</string>
<string name="suggestion_button_text" msgid="5783566542423813847">"ઓકે"</string>
- <string name="device_feedback" msgid="4042352891448769818">"આ ઉપકરણ વિશે પ્રતિસાદ મોકલો"</string>
+ <string name="device_feedback" msgid="4042352891448769818">"આ ડિવાઇસ વિશે પ્રતિસાદ મોકલો"</string>
<string name="restr_pin_enter_admin_pin" msgid="8577847751493521230">"વ્યવસ્થાપક પિન દાખલ કરો"</string>
<string name="switch_on_text" msgid="7100491749799298324">"ચાલુ"</string>
<string name="switch_off_text" msgid="3539551289454353555">"બંધ"</string>
@@ -3599,7 +3601,7 @@
<string name="storage_used" msgid="2457948583478332647">"સંગ્રહ ઉપયોગમાં લેવાયો"</string>
<string name="change" msgid="41563753961948554">"બદલો"</string>
<string name="change_storage" msgid="2064045078609862770">"સ્ટોરેજ બદલો"</string>
- <string name="notifications_label" msgid="2792398288062643318">"સૂચનાઓ"</string>
+ <string name="notifications_label" msgid="2792398288062643318">"નોટિફિકેશન"</string>
<string name="notifications_enabled" msgid="439339392141736137">"ચાલુ"</string>
<string name="notifications_enabled_with_info" msgid="7706460489443809452">"<xliff:g id="NOTIFICATIONS_SENT">%1$s</xliff:g> / <xliff:g id="NOTIFICATIONS_CATEGORIES_OFF">%2$s</xliff:g>"</string>
<string name="notifications_disabled" msgid="316658185757688983">"બંધ"</string>
@@ -3633,7 +3635,7 @@
<string name="filter_enabled_apps" msgid="5888459261768538489">"ઇન્સ્ટૉલ કરેલી ઍપ્લિકેશનો"</string>
<string name="filter_instant_apps" msgid="8087483282854072366">"ઝટપટ ઍપ્લિકેશનો"</string>
<string name="filter_personal_apps" msgid="3473268022652904457">"વ્યક્તિગત"</string>
- <string name="filter_work_apps" msgid="4202483998339465542">"કાર્યાલય"</string>
+ <string name="filter_work_apps" msgid="4202483998339465542">"ઑફિસ"</string>
<string name="filter_notif_all_apps" msgid="1862666327228804896">"ઍપ્લિકેશનો: તમામ"</string>
<string name="filter_notif_blocked_apps" msgid="5694956954776028202">"બંધ કરેલી છે"</string>
<string name="filter_notif_urgent_channels" msgid="5000735867167027148">"કૅટેગરી: તાત્કાલિક મહત્વની"</string>
@@ -3694,7 +3696,7 @@
<string name="process_format" msgid="8575347150598564509">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="COUNT">%2$d</xliff:g>)"</string>
<string name="high_power_apps" msgid="2518319744362028920">"બૅટરી ઓપ્ટિમાઇઝેશન"</string>
<string name="additional_battery_info" msgid="6877663897819271203">"વપરાશ સંબંધી ચેતવણીઓ"</string>
- <string name="show_all_apps" msgid="5442552004569634846">"ઉપકરણનો સંપૂર્ણ વપરાશ બતાવો"</string>
+ <string name="show_all_apps" msgid="5442552004569634846">"ડિવાઇસનો સંપૂર્ણ વપરાશ બતાવો"</string>
<string name="hide_extra_apps" msgid="6798261081113299441">"ઍપ્લિકેશનનો વપરાશ બતાવો"</string>
<plurals name="power_high_usage_summary" formatted="false" msgid="4658343710126205199">
<item quantity="one"><xliff:g id="NUMBER">%2$d</xliff:g> ઍપ્લિકેશન અસાધારણ રીતે વર્તન કરી રહી છે</item>
@@ -3709,8 +3711,8 @@
<string name="high_power_off" msgid="5906679734326490426">"બૅટરી વપરાશને ઓપ્ટિમાઇઝ કરી રહ્યું છે"</string>
<string name="high_power_system" msgid="739584574711292753">"બૅટરી ઓપ્ટિમાઇઝેશન ઉપલબ્ધ નથી"</string>
<string name="high_power_desc" msgid="333756885680362741">"બૅટરી ઓપ્ટિમાઇઝેશન લાગુ કરશો નહીં. તેનાથી તમારી બૅટરી વધુ ઝડપથી ખાલી થઈ શકે છે."</string>
- <string name="high_power_prompt_title" msgid="2805745781720454052">"ઍપ્લિકેશનને હંમેશાં પૃષ્ઠભૂમિમાં ચાલવા દઈએ?"</string>
- <string name="high_power_prompt_body" msgid="8067395096053552289">"<xliff:g id="APP_NAME">%1$s</xliff:g>ને હંમેશાં પૃષ્ઠભૂમિમાં ચાલવાની મંજૂરી આપવાથી બૅટરી આવરદા ઓછી થઈ શકે છે. \n\nતમે આને સેટિંગ્સ > ઍપ્લિકેશનો અને સૂચનાઓમાં પછીથી બદલી શકો છો."</string>
+ <string name="high_power_prompt_title" msgid="2805745781720454052">"ઍપને હંમેશાં બૅકગ્રાઉન્ડમાં ચાલવા દઈએ?"</string>
+ <string name="high_power_prompt_body" msgid="8067395096053552289">"<xliff:g id="APP_NAME">%1$s</xliff:g>ને હંમેશાં બૅકગ્રાઉન્ડમાં ચાલવાની મંજૂરી આપવાથી બૅટરી આવરદા ઓછી થઈ શકે છે. \n\nતમે આને સેટિંગ > ઍપ અને નોટિફિકેશનોમાં પછીથી બદલી શકો છો."</string>
<string name="battery_summary" msgid="4345690800899981339">"છેલ્લા પૂર્ણ ચાર્જ પછી <xliff:g id="PERCENTAGE">%1$s</xliff:g> ઉપયોગ"</string>
<string name="battery_power_management" msgid="2853925857548647969">"પાવર સંચાલન"</string>
<string name="no_battery_summary" msgid="4105932628367471314">"છેલ્લા પૂર્ણ ચાર્જ પછી કોઈ બૅટરી ઉપયોગ નહીં"</string>
@@ -3726,7 +3728,7 @@
<string name="decline_remote_bugreport_action" msgid="706319275774199033">"નકારો"</string>
<string name="usb_use_charging_only" msgid="2344625733377110164">"કોઈ ડેટા ટ્રાન્સફર નથી"</string>
<string name="usb_use_charging_only_desc" msgid="3283518562582478950">"બસ આ ઉપકરણને ચાર્જ કરો"</string>
- <string name="usb_use_power_only" msgid="6595783381323810697">"કનેક્ટ થયેલ ઉપકરણને ચાર્જ કરો"</string>
+ <string name="usb_use_power_only" msgid="6595783381323810697">"કનેક્ટ થયેલ ડિવાઇસને ચાર્જ કરો"</string>
<string name="usb_use_file_transfers" msgid="6153021302176151884">"ફાઇલ ટ્રાન્સફર"</string>
<string name="usb_use_file_transfers_desc" msgid="6953866660041189580">"ફાઇલોને બીજા ઉપકરણ પર ટ્રાન્સફર કરો"</string>
<string name="usb_use_photo_transfers" msgid="5974236250197451257">"PTP"</string>
@@ -3741,10 +3743,10 @@
<string name="usb_preference" msgid="7092987095048592826">"USBની પસંદગીઓ"</string>
<string name="usb_control_title" msgid="2379698856760894768">"આના દ્વારા નિયંત્રિત USB"</string>
<string name="usb_control_host" msgid="193292043691034178">"કનેક્ટ થયેલ ઉપકરણ"</string>
- <string name="usb_control_device" msgid="9154790265254725254">"આ ઉપકરણ"</string>
+ <string name="usb_control_device" msgid="9154790265254725254">"આ ડિવાઇસ"</string>
<string name="usb_switching" msgid="1230386065163529904">"સ્વિચ કરી રહ્યાં છીએ…"</string>
<string name="usb_switching_failed" msgid="6857722544186145439">"સ્વિચ કરી શક્યા નથી"</string>
- <string name="usb_summary_charging_only" msgid="4118449308708872339">"આ ઉપકરણને ચાર્જ કરવું"</string>
+ <string name="usb_summary_charging_only" msgid="4118449308708872339">"આ ડિવાઇસને ચાર્જ કરવું"</string>
<string name="usb_summary_power_only" msgid="3552240122641051107">"કનેક્ટેડ ઉપકરણ ચાર્જ કરી રહ્યાં છીએ"</string>
<string name="usb_summary_file_transfers" msgid="7805342797099821502">"ફાઇલ ટ્રાન્સફર"</string>
<string name="usb_summary_tether" msgid="778845069037366883">"USBથી ઇન્ટરનેટ શેર કરવાની સુવિધા"</string>
@@ -3811,14 +3813,14 @@
<string name="app_permission_summary_allowed" msgid="6458476982015518778">"મંજૂરી છે"</string>
<string name="app_permission_summary_not_allowed" msgid="1171642541675462584">"મંજૂરી નથી"</string>
<string name="keywords_install_other_apps" msgid="5383559540695847668">"ઍપ્લિકેશનો ઇન્સ્ટૉલ કરો અજાણ્યા સ્રોતો"</string>
- <string name="write_settings" msgid="9009040811145552108">"સિસ્ટમ સેટિંગ્સ સંશોધિત કરો"</string>
+ <string name="write_settings" msgid="9009040811145552108">"સિસ્ટમ સેટિંગમાં ફેરફાર કરો"</string>
<string name="keywords_write_settings" msgid="3450405263390246293">"સિસ્ટમ સેટિંગ્સ સંશોધિત કરો લખો"</string>
<string name="write_settings_summary" msgid="4650251358459404247">"<xliff:g id="COUNT_1">%2$d</xliff:g> માંથી <xliff:g id="COUNT_0">%1$d</xliff:g> એપ્લિકેશનોને સિસ્ટમ સેટિંગ્સ સંશોધિત કરવાની મંજૂરી આપી"</string>
<string name="financial_apps_sms_access_title" msgid="3422655018008259655">"નાણાકીય ઍપ sms પરવાનગી"</string>
<string name="filter_install_sources_apps" msgid="4519839764020866701">"અન્ય ઍપ્લિકેશનો ઇન્સ્ટૉલ કરી શકે છે"</string>
<string name="filter_write_settings_apps" msgid="6864144615530081121">"સિસ્ટમ સેટિંગ્સ સંશોધિત કરી શકે છે"</string>
<string name="write_settings_title" msgid="5852614614193830632">"સિસ્ટમ સેટિંગ્સ સંશોધિત કરી શકે છે"</string>
- <string name="write_system_settings" msgid="20450765210832463">"સિસ્ટમ સેટિંગ્સ સંશોધિત કરો"</string>
+ <string name="write_system_settings" msgid="20450765210832463">"સિસ્ટમ સેટિંગમાં ફેરફાર કરો"</string>
<string name="permit_write_settings" msgid="4198491281216818756">"સિસ્ટમ સેટિંગને સંશોધિત કરવાની મંજૂરી આપો"</string>
<string name="write_settings_description" msgid="2536706293042882500">"આ પરવાનગી એપ્લિકેશનને સિસ્ટમ સેટિંગ્સ સંશોધિત કરવાની મંજૂરી આપે છે."</string>
<string name="write_settings_on" msgid="7328986337962635118">"હા"</string>
@@ -3951,7 +3953,7 @@
<item quantity="one"><xliff:g id="COUNT">%1$d</xliff:g> પ્રતિબંધ</item>
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> પ્રતિબંધ</item>
</plurals>
- <string name="operator_warning" msgid="4676042739221117031">"કૅરિઅર ડેટા ગણતરી, ઉપકરણ ગણતરીથી અલગ હોઈ શકે છે"</string>
+ <string name="operator_warning" msgid="4676042739221117031">"કૅરિઅર ડેટા ગણતરી, ડિવાઇસ ગણતરીથી અલગ હોઈ શકે છે"</string>
<string name="data_used_template" msgid="761605393453849477">"<xliff:g id="ID_1">%1$s</xliff:g> ઉપયોગ થયો"</string>
<string name="set_data_warning" msgid="8115980184415563941">"ડેટા ચેતવણી સેટ કરો"</string>
<string name="data_warning" msgid="2699207195535036240">"ડેટા ચેતવણી"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"જો ઉપકરણ લૉક કરેલ છે, તો સૂચનાઓમાં જવાબો અથવા અન્ય ટેક્સ્ટને લખવાનું ટાળો"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"ડિફોલ્ટ જોડણી તપાસનાર"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"જોડણી તપાસનારને પસંદ કરો"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"જોડણી તપાસનારનો ઉપયોગ કરો"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"જોડણી તપાસનારનો ઉપયોગ કરો"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"પસંદ કર્યું નથી"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(કોઈ નહીં)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4034,7 +4036,7 @@
<string name="notification_log_details_parcel" msgid="4024970850647594029">"પાર્સલનું કદ"</string>
<string name="notification_log_details_ashmem" msgid="4272241723105041393">"એશ્મેમ"</string>
<string name="notification_log_details_alerted" msgid="1891749888625061319">"નોટિફિકેશન અલર્ટ કરેલ"</string>
- <string name="notification_log_details_sound" msgid="4028782443557466322">"ધ્વનિ"</string>
+ <string name="notification_log_details_sound" msgid="4028782443557466322">"સાઉન્ડ"</string>
<string name="notification_log_details_vibrate" msgid="8372400602058888072">"વાઇબ્રેટ"</string>
<string name="notification_log_details_vibrate_pattern" msgid="7015554755444260922">"પૅટર્ન"</string>
<string name="notification_log_details_default" msgid="455451833359888182">"ડિફોલ્ટ"</string>
@@ -4079,7 +4081,7 @@
<string name="quick_settings_developer_tiles" msgid="7423485925757678719">"ઝપડી સેટિંગ્સ વિકાસકર્તા ટાઇલ"</string>
<string name="winscope_trace_quick_settings_title" msgid="940971040388411374">"Winscope ટ્રેસ"</string>
<string name="sensors_off_quick_settings_title" msgid="3655699045300438902">"સેન્સર બંધ છે"</string>
- <string name="managed_profile_settings_title" msgid="4340409321523532402">"કાર્યાલયની પ્રોફાઇલની સેટિંગ્સ"</string>
+ <string name="managed_profile_settings_title" msgid="4340409321523532402">"ઑફિસની પ્રોફાઇલના સેટિંગ"</string>
<string name="managed_profile_contact_search_title" msgid="7337225196804457095">"સંપર્ક શોધ"</string>
<string name="managed_profile_contact_search_summary" msgid="7278267480246726951">"કૉલર્સ અને સંપર્કોને ઓળખવા માટે તમારી સંસ્થા દ્વારા સંપર્ક શોધની મંજૂરી આપો"</string>
<string name="cross_profile_calendar_title" msgid="2351605904015067145">"ક્રૉસ-પ્રોફાઇલ કૅલેન્ડર"</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"સ્ટોરેજ સ્પેસ ખાલી કરવામાં સહાય માટે, સ્ટોરેજ સંંચાલક તમારા ઉપકરણમાંથી બૅકઅપ લીધેલા ફોટો અને વીડિઓને દૂર કરો."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"ફોટો અને વીડિઓ દૂર કરો"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"સ્ટોરેજ સંચાલક"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"સ્ટોરેજ મેનેજરનો ઉપયોગ કરો"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"સ્ટોરેજ મેનેજરનો ઉપયોગ કરો"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"સ્વચાલિત"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"મેન્યુઅલ"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"હમણાં સ્પેસ ખાલી કરો"</string>
@@ -4158,7 +4160,7 @@
<string name="auto_sync_account_title" msgid="2394463123733529506">"ડેટાને ઑટોમૅટિક રીતે સિંક કરો"</string>
<string name="auto_sync_personal_account_title" msgid="6844465157916100655">"વ્યક્તિગત ડેટાનું આપમેળે સમન્વયન કરો"</string>
<string name="auto_sync_work_account_title" msgid="2403222633447522376">"કાર્ય ડેટાનું આપમેળે સમન્વયન કરો"</string>
- <string name="auto_sync_account_summary" msgid="6316230976974033772">"ઍપને આપમેળે ડેટાને રિફ્રેશ કરવા દો"</string>
+ <string name="auto_sync_account_summary" msgid="6316230976974033772">"ઍપને ઑટોમૅટિક રીતે ડેટાને રિફ્રેશ કરવા દો"</string>
<string name="account_sync_title" msgid="1570164819114297154">"એકાઉન્ટ સિંક"</string>
<string name="account_sync_summary_some_on" msgid="1934556869158274053">"<xliff:g id="ID_2">%2$d</xliff:g> માંથી <xliff:g id="ID_1">%1$d</xliff:g> આઇટમ માટે સમન્વયન ચાલુ છે"</string>
<string name="account_sync_summary_all_on" msgid="3634161204232431700">"બધી આઇટમ માટે સમન્વયન ચાલુ છે"</string>
@@ -4186,7 +4188,7 @@
<string name="enterprise_privacy_location_access" msgid="110406267468274216">"સ્થાન માટેની પરવાનગીઓ"</string>
<string name="enterprise_privacy_microphone_access" msgid="4586428105675460207">"માઇક્રોફોન માટેની પરવાનગીઓ"</string>
<string name="enterprise_privacy_camera_access" msgid="2366392786153103482">"કૅમેરા માટેની પરવાનગીઓ"</string>
- <string name="enterprise_privacy_enterprise_set_default_apps" msgid="6142937923758931242">"ડિફૉલ્ટ ઍપ્લિકેશનો"</string>
+ <string name="enterprise_privacy_enterprise_set_default_apps" msgid="6142937923758931242">"ડિફૉલ્ટ ઍપ"</string>
<plurals name="enterprise_privacy_number_packages" formatted="false" msgid="1480745164313890415">
<item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> ઍપ્લિકેશન</item>
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ઍપ્લિકેશન</item>
@@ -4233,11 +4235,11 @@
</plurals>
<string name="app_names_concatenation_template_2" msgid="8267577900046506189">"<xliff:g id="FIRST_APP_NAME">%1$s</xliff:g>, <xliff:g id="SECOND_APP_NAME">%2$s</xliff:g>"</string>
<string name="app_names_concatenation_template_3" msgid="5129064036161862327">"<xliff:g id="FIRST_APP_NAME">%1$s</xliff:g>, <xliff:g id="SECOND_APP_NAME">%2$s</xliff:g>, <xliff:g id="THIRD_APP_NAME">%3$s</xliff:g>"</string>
- <string name="storage_photos_videos" msgid="1890829312367477559">"ફોટો અને વીડિઓ"</string>
- <string name="storage_music_audio" msgid="3661289086715297149">"સંગીત અને ઑડિઓ"</string>
+ <string name="storage_photos_videos" msgid="1890829312367477559">"ફોટો અને વીડિયો"</string>
+ <string name="storage_music_audio" msgid="3661289086715297149">"સંગીત અને ઑડિયો"</string>
<string name="storage_games" msgid="7740038143749092373">"રમતો"</string>
<string name="storage_other_apps" msgid="3202407095387420842">"અન્ય ઍપ્લિકેશનો"</string>
- <string name="storage_files" msgid="2087824267937487880">"ફાઇલો"</string>
+ <string name="storage_files" msgid="2087824267937487880">"Files"</string>
<string name="storage_size_large_alternate" msgid="1317796542509105857">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" "<font size="20">"<xliff:g id="UNIT">^2</xliff:g>"</font></small>""</string>
<string name="storage_volume_total" msgid="5021484171514159913">"<xliff:g id="TOTAL">%1$s</xliff:g>માંથી ઉપયોગમાં લેવાયો"</string>
<string name="storage_percent_full" msgid="6924662861545958442">"વપરાયો"</string>
@@ -4245,7 +4247,7 @@
<string name="clear_instant_app_confirmation" msgid="1778553115373698061">"શું તમે આ ઝટપટ ઍપ્લિકેશન દૂર કરવા માંગો છો?"</string>
<string name="launch_instant_app" msgid="5251693061228352333">"ખોલો"</string>
<string name="game_storage_settings" msgid="6856911551799175914">"રમતો"</string>
- <string name="audio_files_title" msgid="3073879661731363935">"ઑડિઓ ફાઇલો"</string>
+ <string name="audio_files_title" msgid="3073879661731363935">"ઑડિયો ફાઇલો"</string>
<string name="app_info_storage_title" msgid="6643391804949509308">"જગ્યા વપરાઈ"</string>
<string name="webview_uninstalled_for_user" msgid="3407952144444040557">"(<xliff:g id="USER">%s</xliff:g> માટે અનઇન્સ્ટૉલ કરેલ)"</string>
<string name="webview_disabled_for_user" msgid="8057805373224993504">"(વપરાશકર્તા <xliff:g id="USER">%s</xliff:g> માટે અક્ષમ કરેલ)"</string>
@@ -4304,12 +4306,12 @@
<string name="disabled_dependent_setting_summary" msgid="7668590009599010842">"અન્ય સેટિંગ પર આધાર રાખે છે"</string>
<string name="unknown_unavailability_setting_summary" msgid="5785931810977403534">"સેટિંગ અનુપલબ્ધ છે"</string>
<string name="my_device_info_account_preference_title" msgid="7965847995028952373">"એકાઉન્ટ"</string>
- <string name="my_device_info_device_name_preference_title" msgid="7384446683248009296">"ઉપકરણનું નામ"</string>
+ <string name="my_device_info_device_name_preference_title" msgid="7384446683248009296">"ડિવાઇસનું નામ"</string>
<string name="change_wifi_state_title" msgid="5140754955787584174">"વાઇ-ફાઇ નિયંત્રણ"</string>
<string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"ઍપને વાઇ-ફાઇ નિયંત્રિત કરવાની મંજૂરી આપો"</string>
<string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"આ ઍપને વાઇ-ફાઇ ચાલુ અથવા બંધ કરવા, વાઇ-ફાઇ નેટવર્કને સ્કૅન અને કનેક્ટ કરવા, નેટવર્ક ઉમેરવા અથવા કાઢી નાખવા અથવા માત્ર-સ્થાનિક હૉટસ્પૉટ શરૂ કરવાની મંજૂરી આપો"</string>
<string name="media_output_title" msgid="8710632337456601848">"મીડિયા આના પર ચલાવો"</string>
- <string name="media_output_default_summary" msgid="3159237976830415584">"આ ઉપકરણ"</string>
+ <string name="media_output_default_summary" msgid="3159237976830415584">"આ ડિવાઇસ"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"ફોન"</string>
<string name="media_output_summary" product="tablet" msgid="6672024060360538526">"ટૅબ્લેટ"</string>
<string name="media_output_summary" product="device" msgid="5132223072593052660">"ઉપકરણ"</string>
@@ -4471,7 +4473,7 @@
<string name="privacy_dashboard_title" msgid="8764930992456607513">"પ્રાઇવસી"</string>
<string name="privacy_dashboard_summary" msgid="7916431309860824945">"પરવાનગીઓ, એકાઉન્ટ પ્રવૃત્તિ, વ્યક્તિગત ડેટા"</string>
<string name="contextual_card_dismiss_remove" msgid="1750420285615827309">"કાઢી નાખો"</string>
- <string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"રાખો"</string>
+ <string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"Keep"</string>
<string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"આ સુઝાવ કાઢી નાખીએ?"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"સૂચન કાઢી નાખ્યું"</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"છેલ્લો ફેરફાર રદ કરો"</string>
diff --git a/tests/CarDeveloperOptions/res/values-hi/arrays.xml b/tests/CarDeveloperOptions/res/values-hi/arrays.xml
index 68fe0bf..acc4345 100644
--- a/tests/CarDeveloperOptions/res/values-hi/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-hi/arrays.xml
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"कभी भी अनुमति न दें"</item>
<item msgid="8184570120217958741">"हमेशा अनुमति दें"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"मेमोरी की स्थिति सामान्य है"</item>
+ <item msgid="5101233285497327432">"मध्यम"</item>
+ <item msgid="1555861583162930714">"कम"</item>
+ <item msgid="1719683776264798117">"महत्वपूर्ण"</item>
+ <item msgid="1567326459340152525">"कितनी मेमोरी है?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"सामान्य"</item>
+ <item msgid="6107138933849816768">"मध्यम"</item>
+ <item msgid="182695359839047859">"कम"</item>
+ <item msgid="8577246509202964244">"मेमोरी बेहद कम है"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"निरंतर"</item>
<item msgid="167418068739176448">"शीर्ष गतिविधि"</item>
@@ -467,7 +477,7 @@
<item msgid="1008268820118852416">"इस कनेक्शन में डेटा से जुड़ी पाबंदी नहीं है"</item>
</string-array>
<string-array name="wifi_privacy_entries">
- <item msgid="6545683814310036454">"किसी भी MAC पते का इस्तेमाल करें (डिफ़ॉल्ट सेटिंग)"</item>
+ <item msgid="6545683814310036454">"MAC पते का इस्तेमाल करें (डिफ़ॉल्ट सेटिंग)"</item>
<item msgid="214234417308375326">"डिवाइस के एमएसी का इस्तेमाल करें"</item>
</string-array>
<string-array name="wifi_hidden_entries">
diff --git a/tests/CarDeveloperOptions/res/values-hi/strings.xml b/tests/CarDeveloperOptions/res/values-hi/strings.xml
index 6a560cd..859639a 100644
--- a/tests/CarDeveloperOptions/res/values-hi/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-hi/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"स्क्रीन पर मौजूद लेख को छोटा या बड़ा करें."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"छोटा करें"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"बड़ा करें"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"नमूना लेख"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"ओज़ का अद्भुत जादू"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"अध्याय 11: पन्ने का अद्भुत शहर ओज़"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"प्रोफ़ाइल की जानकारी"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"खाते"</string>
<string name="location_settings_title" msgid="2707201457572301030">"जगह"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"जगह की जानकारी की सुविधा का इस्तेमाल करें"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"जगह की जानकारी की सुविधा का इस्तेमाल करें"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"बंद करें"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">चालू - <xliff:g id="COUNT_1">%1$d</xliff:g> ऐप्लिकेशन जगह की जानकारी ऐक्सेस कर सकते हैं</item>
@@ -467,7 +466,7 @@
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="3428927518029038956">"ठीक है"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="4312297515772004580">"मिटाएं"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"सेंसर को छुएं"</string>
- <string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"अपनी उंगली सेंसर पर रखें और कंपन (वाइब्रेशन) महसूस होने पर उठा लें"</string>
+ <string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"अपनी उंगली सेंसर पर रखें और कंपन (वाइब्रेशन) महसूस होने पर हटा लें"</string>
<string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"उठाएं, फिर दोबारा छुएं"</string>
<string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"अपने फ़िंगरप्रिंट के अलग-अलग भागों को जोड़ने के लिए अपनी उंगली को उठाते रहें"</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"फ़िंगरप्रिंट जोड़ा गया"</string>
@@ -821,7 +820,7 @@
<string name="wifi_ask_disable" msgid="2146839060110412974">"<xliff:g id="REQUESTER">%s</xliff:g> वाई-फ़ाई को बंद करना चाहता है"</string>
<string name="art_verifier_for_debuggable_title" msgid="5223835619409464642">"डीबग वाले ऐप्लिकेशन के बाइटकोड की पुष्टि करें"</string>
<string name="art_verifier_for_debuggable_summary" msgid="2204242476996701111">"डीबग किए जा सकने वाले ऐप्लिकेशन के लिए, ART को बाइटकोड की पुष्टि करने की मंज़ूरी दें"</string>
- <string name="nfc_quick_toggle_title" msgid="4990697912813795002">"आस-पास के डिवाइस से संपर्क (एनएफसी)"</string>
+ <string name="nfc_quick_toggle_title" msgid="4990697912813795002">"आस-पास के डिवाइस से संपर्क (एनएफ़सी)"</string>
<string name="nfc_quick_toggle_summary" product="tablet" msgid="983451155092850657">"जब टैबलेट अन्य डिवाइस को स्पर्श करे तो डेटा ट्रांसफर करने दें"</string>
<string name="nfc_quick_toggle_summary" product="default" msgid="7141056939052895142">"जब फ़ोन दूसरे डिवाइस को टच करे, तो डेटा ट्रांसफर करने दें"</string>
<string name="nfc_disclaimer_title" msgid="4860231267351602970">"NFC चालू करें"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"वाई-फ़ाई"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"वाई-फ़ाई चालू करें"</string>
<string name="wifi_settings" msgid="7486492317310514109">"वाई-फ़ाई"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"वाई-फ़ाई इस्तेमाल करें"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"वाई-फ़ाई का इस्तेमाल करें"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"वाई-फ़ाई सेटिंग"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"वाई-फ़ाई"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"वायरलेस पहुंच बिंदुओं को सेट अप और प्रबंधित करें"</string>
@@ -936,13 +935,13 @@
<string name="wifi_privacy_settings" msgid="4462092795794247809">"निजता"</string>
<string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"अपने आप चुना गया एमएसी"</string>
<string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"कोई डिवाइस जोड़ें"</string>
- <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"डिवाइस को “<xliff:g id="SSID">%1$s</xliff:g>” से जोड़ने के लिए QR कोड को कैमरा विंडो के बीच में लाएं"</string>
+ <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"डिवाइस को “<xliff:g id="SSID">%1$s</xliff:g>” से जोड़ने के लिए क्यूआर कोड को कैमरा विंडो के बीच में लाएं"</string>
<string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"QR कोड स्कैन करें"</string>
<string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"डिवाइस को “<xliff:g id="SSID">%1$s</xliff:g>” से जोड़ने के लिए QR कोड को नीचे मौजूद कैमरा विंडो के बीच में लाएं"</string>
- <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"QR कोड स्कैन करके वाई-फ़ाई से जुड़ें"</string>
+ <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"क्यूआर कोड स्कैन करके वाई-फ़ाई से जुड़ें"</string>
<string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"वाई-फ़ाई शेयर करें"</string>
<string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"“<xliff:g id="SSID">%1$s</xliff:g>” से जुड़ने के लिए इस QR कोड को स्कैन करें और पासवर्ड शेयर करें"</string>
- <string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"“<xliff:g id="SSID">%1$s</xliff:g>” से जुड़ने के लिए इस QR कोड को स्कैन करें"</string>
+ <string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"“<xliff:g id="SSID">%1$s</xliff:g>” से जुड़ने के लिए इस क्यूआर कोड को स्कैन करें"</string>
<string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"QR कोड नहीं पहचाना जा सका. कोड को बीच में रखें और दोबारा कोशिश करें"</string>
<string name="wifi_dpp_failure_authentication_or_configuration" msgid="9142051662156233679">"फिर से कोशिश करें. अगर समस्या ठीक नहीं होती है, तो डिवाइस बनाने वाली कंपनी से संपर्क करें"</string>
<string name="wifi_dpp_failure_not_compatible" msgid="4320027179973678283">"काेई गड़बड़ी हुई"</string>
@@ -1070,7 +1069,7 @@
<string name="wifi_hotspot_ap_band_title" msgid="3485744480410441949">"एपी बैंड"</string>
<string name="wifi_hotspot_footer_info_regular" msgid="3876006922622827363">"अपने दूसरे डिवाइस के लिए हॉटस्पॉट का इस्तेमाल करके वाई-फ़ाई नेटवर्क बनाएं. हॉटस्पॉट आपके मोबाइल डेटा कनेक्शन के ज़रिए इंटरनेट की सुविधा देता है. मोबाइल डेटा के लिए अतिरिक्त भुगतान करना पड़ सकता है."</string>
<string name="wifi_hotspot_footer_info_local_only" msgid="3339582350894639261">"ऐप्लिकेशन आस-पास के डिवाइस से सामग्री शेयर करने के लिए कोई हॉटस्पॉट बना सकते हैं."</string>
- <string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"हॉटस्पॉट अपने आप बंद करें"</string>
+ <string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"हॉटस्पॉट अपने-आप बंद हो जाए"</string>
<string name="wifi_hotspot_auto_off_summary" msgid="3866769400624802105">"कोई डिवाइस कनेक्ट नहीं होने पर, वाई-फ़ाई हॉटस्पॉट बंद हो जाएगा"</string>
<string name="wifi_tether_starting" msgid="7676952148471297900">"हॉटस्पॉट को चालू किया जा रहा है…"</string>
<string name="wifi_tether_stopping" msgid="7478561853791953349">"हॉटस्पॉट को बंद किया जा रहा है…"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"वाई-फ़ाई"</item>
+ <item msgid="2271962426654621656">"मोबाइल"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"वाई-फ़ाई उपलब्ध न होने पर मोबाइल नेटवर्क इस्तेमाल करें"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"मोबाइल नेटवर्क न होने पर वाई-फ़ाई इस्तेमाल करें"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"वाई-फ़ाई के ज़रिए कॉल करें. वाई-फ़ाई रुक जाने पर कॉल खत्म हो जाएगी."</string>
@@ -1166,7 +1168,7 @@
<string name="accessibility_category_personal" msgid="1423427301759058762">"व्यक्तिगत प्रोफ़ाइल खाते"</string>
<string name="accessibility_work_account_title" msgid="3195468574776888011">"कार्यस्थल खाता - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
<string name="accessibility_personal_account_title" msgid="7251761883688839354">"व्यक्तिगत खाता - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
- <string name="search_settings" msgid="5809250790214921377">"सर्च"</string>
+ <string name="search_settings" msgid="5809250790214921377">"खोज"</string>
<string name="display_settings" msgid="1045535829232307190">"डिसप्ले"</string>
<string name="accelerometer_title" msgid="2427487734964971453">"स्क्रीन अपने आप घूमने की सुविधा चालू करें"</string>
<string name="color_mode_title" msgid="8164858320869449142">"रंग"</string>
@@ -1201,7 +1203,7 @@
<string name="auto_brightness_off_summary" msgid="6162650416289359104">"मौजूदा रोशनी के लिए एडजस्ट न करें"</string>
<string name="auto_brightness_very_high_summary" msgid="7202032980509583918">"बढ़ा हुआ बैटरी उपयोग"</string>
<string name="auto_brightness_disclaimer" msgid="5416696351199148809">"मौजूदा रोशनी के लिए स्क्रीन की चमक का स्तर अनुकूलित करें. इस सुविधा के चालू होने पर, आप अब भी स्क्रीन की रोशनी कुछ समय के लिए एडजस्ट कर सकते हैं."</string>
- <string name="auto_brightness_description" msgid="8209140379089535411">"आपकी गतिविधियों और आपके आस-पास मौजूद रोशनी के हिसाब से आपके डिवाइस की स्क्रीन की चमक अपने आप सेट हो जाएगी. आपके आस-पास मौजूद रोशनी के हिसाब से स्क्रीन की चमक अपने आप बदलने वाली इस सुविधा को आप अपनी पसंद के हिसाब से ढाल सकते हैं. ऐसा करने के लिए स्लाइडर को आगे-पीछे करें और मैन्युअल रूप से स्क्रीन की चमक सेट करें."</string>
+ <string name="auto_brightness_description" msgid="8209140379089535411">"आपकी गतिविधियों और आपके आस-पास मौजूद रोशनी के हिसाब से आपके डिवाइस की स्क्रीन की चमक अपने-आप सेट हो जाएगी. आपके आस-पास मौजूद रोशनी के हिसाब से स्क्रीन की चमक अपने-आप बदलने वाली इस सुविधा को आप अपनी पसंद के हिसाब से ढाल सकते हैं. ऐसा करने के लिए स्लाइडर को आगे-पीछे करें और मैन्युअल रूप से स्क्रीन की चमक सेट करें."</string>
<string name="display_white_balance_title" msgid="5747260735311935143">"डिसप्ले का वाइट बैलेंस"</string>
<string name="adaptive_sleep_title" msgid="3237620948260957018">"स्क्रीन अवेयर"</string>
<string name="adaptive_sleep_summary_on" msgid="6670369739228487082">"चालू करें / अगर आप स्क्रीन को देख रहे हैं, तो वह बंद नहीं होगी"</string>
@@ -1263,7 +1265,7 @@
<string name="doze_summary" msgid="6762274282827831706">"आपको सूचना मिलने पर स्क्रीन चालू करें"</string>
<string name="doze_always_on_title" msgid="8555184965031789941">"हमेशा चालू"</string>
<string name="doze_always_on_summary" msgid="7654436900436328950">"समय, सूचना के आइकॉन और दूसरी जानकारी दिखाएं. इसमें ज़्यादा बैटरी का इस्तेमाल होगा."</string>
- <string name="title_font_size" msgid="5021464556860010851">"अक्षरों का आकार"</string>
+ <string name="title_font_size" msgid="5021464556860010851">"फ़ॉन्ट साइज़"</string>
<string name="short_summary_font_size" msgid="4141077908728522946">"लेख को छोटा या बड़ा करें"</string>
<string name="sim_lock_settings" msgid="1986924650622642189">"सिम कार्ड लॉक सेटिंग"</string>
<string name="sim_lock_settings_category" msgid="1126759898277681516">"सिम कार्ड लॉक"</string>
@@ -1619,7 +1621,7 @@
<string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"डेटा बचाने की सेटिंग चालू होने पर इंटरनेट शेयर नहीं किया जा सकता या पोर्टेबल हॉटस्पॉट का इस्तेमाल नहीं किया जा सकता"</string>
<string name="usb_title" msgid="7480927657535578688">"यूएसबी"</string>
<string name="usb_tethering_button_text" msgid="6242228383142012332">"यूएसबी से टेदरिंग"</string>
- <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"यूएसबी के ज़रिए फ़ोन का इंटरनेट कनेक्शन शेयर करें"</string>
+ <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"यूएसबी से फ़ोन का इंटरनेट कनेक्शन शेयर करें"</string>
<string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"यूएसबी के ज़रिए टैबलेट का इंटरनेट कनेक्शन शेयर करें"</string>
<string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"ब्लूटूथ टेदरिंग"</string>
<string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"ब्लूटूथ के ज़रिए टैबलेट का इंटरनेट कनेक्शन शेयर करें"</string>
@@ -1654,7 +1656,7 @@
</plurals>
<string name="location_category_recent_location_access" msgid="286059523360285026">"हाल ही में ऐक्सेस की गई जगह की जानकारी"</string>
<string name="location_recent_location_access_view_details" msgid="2051602261436245905">"जानकारी देखें"</string>
- <string name="location_no_recent_apps" msgid="77502059586413278">"किसी भी ऐप ने हाल में जगह का अनुरोध नहीं किया है"</string>
+ <string name="location_no_recent_apps" msgid="77502059586413278">"किसी भी ऐप्लिकेशन ने हाल में जगह की जानकारी नहीं मांगी है"</string>
<string name="location_no_recent_accesses" msgid="6289916310397279890">"किसी भी ऐप्लिकेशन ने हाल ही में जगह की जानकारी का इस्तेमाल नहीं किया"</string>
<string name="location_high_battery_use" msgid="7177199869979522663">"ज़्यादा बैटरी उपयोग"</string>
<string name="location_low_battery_use" msgid="5030448574501435888">"कम बैटरी उपयोग"</string>
@@ -1835,7 +1837,7 @@
<string name="unknown" msgid="2780743426415501227">"अज्ञात"</string>
<string name="sort_order_alpha" msgid="6689698854460261212">"नाम के हिसाब से क्रम से लगाएं"</string>
<string name="sort_order_size" msgid="3167376197248713027">"आकार के अनुसार क्रमित करें"</string>
- <string name="sort_order_recent_notification" msgid="5592496977404445941">"सबसे हालिया सूचनाएं भेजने वाले ऐप्लिकेशन"</string>
+ <string name="sort_order_recent_notification" msgid="5592496977404445941">"सबसे हाल ही में सूचनाएं भेजने वाले ऐप्लिकेशन"</string>
<string name="sort_order_frequent_notification" msgid="5640245013098010347">"अक्सर"</string>
<string name="show_running_services" msgid="1895994322704667543">"चल रही सेवाएं दिखाएं"</string>
<string name="show_background_processes" msgid="88012264528093617">"कैश की गई प्रक्रियाएं दिखाएं"</string>
@@ -2067,10 +2069,10 @@
<string name="accessibility_toggle_screen_magnification_auto_update_preference_title" msgid="2466317284195934003">"स्क्रीन को बड़ा करने की सुविधा को अपने आप अपडेट करें"</string>
<string name="accessibility_toggle_screen_magnification_auto_update_preference_summary" msgid="6625473745911276917">"ऐप ट्रांज़िशन पर स्क्रीन को बड़ा दिखाना अपडेट करें"</string>
<string name="accessibility_power_button_ends_call_prerefence_title" msgid="6172987104538172869">"पावर बटन से कॉल काटना"</string>
- <string name="accessibility_toggle_large_pointer_icon_title" msgid="9127905775116570565">"बड़ा माउस सूचक"</string>
+ <string name="accessibility_toggle_large_pointer_icon_title" msgid="9127905775116570565">"बड़ा माउस पॉइंटर"</string>
<string name="accessibility_disable_animations" msgid="8378441317115710009">"ऐनिमेशन हटाएं"</string>
<string name="accessibility_toggle_master_mono_title" msgid="899550848196702565">"मोनो ऑडियो"</string>
- <string name="accessibility_toggle_master_mono_summary" msgid="3847052868469033235">"ऑडियो चलाते समय चैनल संयोजित करें"</string>
+ <string name="accessibility_toggle_master_mono_summary" msgid="3847052868469033235">"ऑडियो चलाते समय कई चैनल को एकसाथ जोड़ें"</string>
<string name="accessibility_toggle_master_balance_title" msgid="8723492001092647562">"ऑडियो बैलेंस"</string>
<string name="accessibility_toggle_master_balance_left_label" msgid="8531986342666527970">"बायां"</string>
<string name="accessibility_toggle_master_balance_right_label" msgid="7757024572140589558">"दायां"</string>
@@ -2084,7 +2086,7 @@
<string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"चुनें कि कुछ समय तक दिखाई देने वाले ऐसे मैसेज जो आपको पढ़ने हैं वे कितनी देर तक दिखाई दें.\n\nयह सेटिंग सभी ऐप्लिकेशन में काम नहीं करती."</string>
<string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"चुनें कि आपको कार्रवाई करने के लिए कहने वाले मैसेज कितनी देर तक दिखाने हैं, लेकिन वे सिर्फ़ कुछ समय के लिए ही दिखाई देते हैं.\n\nयह सेटिंग सभी ऐप्लिकेशन पर काम नहीं करती है."</string>
<string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"दबाकर रखने की अवधि"</string>
- <string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"रंग बदलें"</string>
+ <string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"रंग बदलने की सुविधा"</string>
<string name="accessibility_display_inversion_preference_subtitle" msgid="69291255322175323">"डिसप्ले पर असर पड़ सकता है"</string>
<string name="accessibility_autoclick_preference_title" msgid="9164599088410340405">"कर्सर रुकने की अवधि"</string>
<string name="accessibility_autoclick_description" msgid="5492414927846407499">"अगर आप माउस इस्तेमाल कर रहे हैं तो, सेट कर सकते हैं कि किसी जगह पर एक तय समय तक रुकने के बाद कर्सर अपने आप कार्रवाई करे."</string>
@@ -2093,12 +2095,12 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"सूचना के लिए वाइब्रेशन"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"घंटी के लिए वाइब्रेशन"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"छूने पर वाइब्रेशन"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"सेवा इस्तेमाल करें"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"रंग में सुधार करने की सुविधा इस्तेमाल करें"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"कैप्शन इस्तेमाल करें"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"सेवा का इस्तेमाल करें"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"रंग में सुधार करने की सुविधा का इस्तेमाल करें"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"कैप्शन का इस्तेमाल करें"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"जारी रखें"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"सुनने में मदद करने वाला डिवाइस"</string>
- <string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"सुनने में मददगार कोई भी डिवाइस जुड़ा हुआ नहीं है"</string>
+ <string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"कान की कोई भी मशीन नहीं जुड़ी है"</string>
<string name="accessibility_hearingaid_adding_summary" msgid="4139031880828714300">"सुनने में मदद करने वाले डिवाइस जोड़ें"</string>
<string name="accessibility_hearingaid_pair_instructions_first_message" msgid="2671518890909750740">"सुनने में मदद करने वाला डिवाइस जोड़ने के लिए, अगली स्क्रीन पर अपना डिवाइस ढूंढें और टैप करें."</string>
<string name="accessibility_hearingaid_pair_instructions_second_message" msgid="1584538735488464991">"यह देख लें कि सुनने में आपकी मदद करने वाला डिवाइस दूसरे डिवाइस से जुड़ने वाले मोड में है."</string>
@@ -2152,11 +2154,11 @@
<string name="captioning_preset" msgid="7429888317480872337">"कैप्शन की शैली"</string>
<string name="captioning_custom_options_title" msgid="4530479671071326732">"आपके मुताबिक विकल्प"</string>
<string name="captioning_background_color" msgid="2434458880326292180">"पृष्ठभूमि का रंग"</string>
- <string name="captioning_background_opacity" msgid="8178926599201811936">"पृष्ठभूमि पारदर्शिता"</string>
+ <string name="captioning_background_opacity" msgid="8178926599201811936">"बैकग्राउंड की ओपैसिटी"</string>
<string name="captioning_window_color" msgid="8696903405657599896">"कैप्शन विंडो का रंग"</string>
- <string name="captioning_window_opacity" msgid="4315586548781763353">"कैप्शन विंडो पारदर्शिता"</string>
+ <string name="captioning_window_opacity" msgid="4315586548781763353">"कैप्शन विंडो की ओपैसिटी"</string>
<string name="captioning_foreground_color" msgid="7412509133818882005">"लेख का रंग"</string>
- <string name="captioning_foreground_opacity" msgid="7635639017810117478">"लेख पारदर्शिता"</string>
+ <string name="captioning_foreground_opacity" msgid="7635639017810117478">"टेक्स्ट की ओपैसिटी"</string>
<string name="captioning_edge_color" msgid="4330622137047993780">"किनारे का रंग"</string>
<string name="captioning_edge_type" msgid="4414946407430588162">"किनारे का प्रकार"</string>
<string name="captioning_typeface" msgid="7893208796949341767">"फ़ॉन्ट फ़ैमिली"</string>
@@ -2427,7 +2429,7 @@
<string name="battery_detail_since_full_charge" msgid="3814176986148084378">"पूरी तरह चार्ज होने के बाद से अब तक का विश्लेषण"</string>
<string name="battery_last_full_charge" msgid="5624033030647170717">"पिछली बार पूरी तरह चार्ज किया गया"</string>
<string name="battery_full_charge_last" msgid="4614554109170251301">"बैटरी पूरी चार्ज होने पर करीब इतनी देर चलती है"</string>
- <string name="battery_footer_summary" msgid="4828444679643906943">"बैटरी के इस्तेमाल का यह डेटा अनुमान के हिसाब से है और यह इस्तेमाल करने के तरीके के मुताबिक बदल सकता है"</string>
+ <string name="battery_footer_summary" msgid="4828444679643906943">"बैटरी के इस्तेमाल का यह डेटा अनुमान के हिसाब से है. यह इस्तेमाल करने के तरीके के मुताबिक बदल सकता है"</string>
<string name="battery_detail_foreground" msgid="6616408559186553085">"जब इस्तेमाल में हो"</string>
<string name="battery_detail_background" msgid="7938146832943604280">"बैकग्राउंड में होने पर"</string>
<string name="battery_detail_power_usage" msgid="3606930232257489212">"बैटरी खर्च"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"चालू करें"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"बैटरी सेवर इस्तेमाल करें"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"बैटरी सेवर का इस्तेमाल करें"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"अपने आप चालू करें"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"कभी नहीं"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"<xliff:g id="PERCENT">%1$s</xliff:g> बैटरी होने पर"</string>
@@ -2599,7 +2601,7 @@
<string name="work_mode_label" msgid="6845849194740195757">"वर्क प्रोफ़ाइल"</string>
<string name="work_mode_on_summary" msgid="1682781113156323592">"आपका संगठन प्रबंधित कर रहा है"</string>
<string name="work_mode_off_summary" msgid="1688885392211178315">"ऐप्लिकेशन और सूचनाएं बंद हैं"</string>
- <string name="remove_managed_profile_label" msgid="4625542553784793536">"वर्क प्रोफ़ाइल निकालें"</string>
+ <string name="remove_managed_profile_label" msgid="4625542553784793536">"वर्क प्रोफ़ाइल हटाएं"</string>
<string name="background_data" msgid="8275750862371471171">"पृष्ठभूमि डेटा"</string>
<string name="background_data_summary" msgid="799640633948841990">"ऐप्लिकेशन किसी भी समय डेटा सिंक करना, भेज, और पा सकते हैं"</string>
<string name="background_data_dialog_title" msgid="8306650658158895976">"पृष्ठभू. डेटा अक्षम करें?"</string>
@@ -2668,8 +2670,8 @@
<string name="data_usage_menu_sim_cards" msgid="8508154611676507088">"सिम कार्ड"</string>
<string name="data_usage_cellular_data_summary" msgid="9162777397135709280">"सीमा पर रोका गया"</string>
<string name="account_settings_menu_auto_sync" msgid="2673669556006027506">"अपने आप डेटा समन्वयन"</string>
- <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"निजी डेटा अपने आप सिंक करें"</string>
- <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"काम से जुड़ा डेटा अपने आप सिंक करें"</string>
+ <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"निजी डेटा अपने-आप सिंक हो जाए"</string>
+ <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"काम से जुड़ा डेटा अपने-आप सिंक हो"</string>
<string name="data_usage_change_cycle" msgid="447761920472170031">"चक्र बदलें ..."</string>
<string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"डेटा खर्च की अवधि रीसेट करने के लिए महीने का दिन:"</string>
<string name="data_usage_empty" msgid="7981405723435034032">"इस दौरान किसी भी ऐप्लिकेशन ने डेटा का उपयोग नहीं किया."</string>
@@ -2773,7 +2775,7 @@
<string name="vpn_disconnect_confirm" msgid="3505111947735651082">"इस VPN को डिसकनेक्ट करना चाहते हैं?"</string>
<string name="vpn_disconnect" msgid="4625914562388652486">"डिसकनेक्ट करें"</string>
<string name="vpn_version" msgid="2006792987077940456">"वर्शन <xliff:g id="VERSION">%s</xliff:g>"</string>
- <string name="vpn_forget_long" msgid="8457511440635534478">"VPN भूल जाएं"</string>
+ <string name="vpn_forget_long" msgid="8457511440635534478">"वीपीएन भूल जाएं"</string>
<string name="vpn_replace_vpn_title" msgid="8517436922021598103">"मौजूदा VPN को बदलें?"</string>
<string name="vpn_set_vpn_title" msgid="6483554732067951052">"हमेशा-चालू VPN सेट करें?"</string>
<string name="vpn_first_always_on_vpn_message" msgid="7050017738816963855">"यह सेटिंग चालू होने पर, आपके पास तब तक इंटरनेट कनेक्शन नहीं होगा, जब तक कि VPN अच्छी तरह कनेक्ट नहीं हो जाता"</string>
@@ -2792,7 +2794,7 @@
<string name="vpn_always_on_summary" msgid="3639994551631437397">"VPN से हमेशा कनेक्ट रहें"</string>
<string name="vpn_always_on_summary_not_supported" msgid="9077720997795965133">"यह ऐप्लिकेशन समर्थन नहीं करता"</string>
<string name="vpn_always_on_summary_active" msgid="8962619701962239088">"हमेशा चालू"</string>
- <string name="vpn_require_connection" msgid="5413746839457797350">"बिना VPN वाले कनेक्शन ब्लॉक करें"</string>
+ <string name="vpn_require_connection" msgid="5413746839457797350">"बिना वीपीएन वाले कनेक्शन ब्लॉक करें"</string>
<string name="vpn_require_connection_title" msgid="8361434328767853717">"VPN कनेक्शन ज़रूरी है?"</string>
<string name="vpn_lockdown_summary" msgid="6770030025737770861">"वह VPN प्रोफ़ाइल चुनें जिससे हमेशा कनेक्ट रहना है. नेटवर्क ट्रैफ़िक की अनुमति केवल इस VPN से कनेक्ट रहने पर ही दी जाएगी."</string>
<string name="vpn_lockdown_none" msgid="3789288793603394679">"कोई नहीं"</string>
@@ -2902,7 +2904,7 @@
<string name="user_exit_guest_dialog_remove" msgid="1878866060881115716">"निकालें"</string>
<string name="user_enable_calling" msgid="864760054792249503">"फ़ोन कॉल चालू करें"</string>
<string name="user_enable_calling_sms" msgid="3450252891736718793">"फ़ोन कॉल और मैसेज (एसएमएस) चालू करें"</string>
- <string name="user_remove_user" msgid="3687544420125911166">"उपयोगकर्ता को हटाना"</string>
+ <string name="user_remove_user" msgid="3687544420125911166">"उपयोगकर्ता को मिटाएं"</string>
<string name="user_enable_calling_confirm_title" msgid="1141612415529158542">"फ़ोन कॉल चालू करें?"</string>
<string name="user_enable_calling_confirm_message" msgid="2490126715153125970">"कॉल इतिहास इस उपयोगकर्ता के साथ शेयर किया जाएगा."</string>
<string name="user_enable_calling_and_sms_confirm_title" msgid="4153856398523366976">"फ़ोन कॉल और मैसेज (एसएमएस) चालू करें?"</string>
@@ -3134,7 +3136,7 @@
<string name="sound_settings_example_summary" msgid="2091822107298841827">"रिंग की आवाज़ 80% है"</string>
<string name="media_volume_option_title" msgid="3553411883305505682">"मीडिया की आवाज़"</string>
<string name="remote_media_volume_option_title" msgid="6355710054191873836">"आवाज़ कास्ट करें"</string>
- <string name="call_volume_option_title" msgid="5028003296631037334">"कॉल की आवाज़"</string>
+ <string name="call_volume_option_title" msgid="5028003296631037334">"कॉल वॉल्यूम"</string>
<string name="alarm_volume_option_title" msgid="3184076022438477047">"अलार्म की आवाज़"</string>
<string name="ring_volume_option_title" msgid="2038924918468372264">"रिंग की आवाज़"</string>
<string name="notification_volume_option_title" msgid="1358512611511348260">"सूचना की आवाज़"</string>
@@ -3420,7 +3422,7 @@
<string name="notification_content_block_summary" msgid="2743896875255591743">"सूचना कभी भी शेड में या पेरिफ़ेरल डिवाइस पर ना दिखाएं"</string>
<string name="notification_badge_title" msgid="8989086619255666442">"नई सूचनाएं बताने वाले गोल निशान की अनुमति दें"</string>
<string name="notification_channel_badge_title" msgid="8228215248332054612">"नई सूचनाएं बताने वाला गोल निशान दिखाएं"</string>
- <string name="app_notification_override_dnd_title" msgid="1757042206738172601">"\'परेशान न करें\' मोड बंद करें"</string>
+ <string name="app_notification_override_dnd_title" msgid="1757042206738172601">"\'परेशान न करें\' मोड में भी सूचनाएं दिखाएं"</string>
<string name="app_notification_override_dnd_summary" msgid="3152957611171210980">"\'परेशान न करें\' मोड चालू होने पर भी ये सूचनाएं दिखाना जारी रखें"</string>
<string name="app_notification_visibility_override_title" msgid="2349335170165637672">"लॉक स्क्रीन पर"</string>
<string name="app_notification_row_banned" msgid="2079325338122151677">"अवरोधित"</string>
@@ -3440,7 +3442,7 @@
<string name="zen_mode_add_event_rule" msgid="1398181272397489506">"इवेंट का शेड्यूल जोड़ें"</string>
<string name="zen_mode_add_time_rule" msgid="5999467757140524729">"समय का शेड्यूल जोड़ें"</string>
<string name="zen_mode_delete_rule" msgid="2292933835997203801">"शेड्यूल मिटाएं"</string>
- <string name="zen_mode_choose_rule_type" msgid="8877138307319450306">"शेड्यूल का प्रकार चुनें"</string>
+ <string name="zen_mode_choose_rule_type" msgid="8877138307319450306">"किस तरह का शेड्यूल चुनना चाहते हैं"</string>
<string name="zen_mode_delete_rule_confirmation" msgid="2646596466259025978">"<xliff:g id="RULE">%1$s</xliff:g> नियम मिटाएं?"</string>
<string name="zen_mode_delete_rule_button" msgid="611058106279881991">"मिटाएं"</string>
<string name="zen_mode_rule_type_unknown" msgid="2819480113355191421">"अज्ञात"</string>
@@ -3633,7 +3635,7 @@
<string name="filter_enabled_apps" msgid="5888459261768538489">"इंस्टॉल किए गए ऐप"</string>
<string name="filter_instant_apps" msgid="8087483282854072366">"झटपट ऐप"</string>
<string name="filter_personal_apps" msgid="3473268022652904457">"व्यक्तिगत"</string>
- <string name="filter_work_apps" msgid="4202483998339465542">"कार्यस्थल"</string>
+ <string name="filter_work_apps" msgid="4202483998339465542">"ऑफ़िस"</string>
<string name="filter_notif_all_apps" msgid="1862666327228804896">"ऐप्लिकेशन: सभी"</string>
<string name="filter_notif_blocked_apps" msgid="5694956954776028202">"सूचनाएं बंद कर दी गई हैं"</string>
<string name="filter_notif_urgent_channels" msgid="5000735867167027148">"श्रेणियां: अत्यंत महत्वपूर्ण"</string>
@@ -3761,7 +3763,7 @@
<string name="assist_access_screenshot_title" msgid="1991014038776117688">"स्क्रीनशॉट का उपयोग करना"</string>
<string name="assist_access_screenshot_summary" msgid="3010943864000489424">"सहायक ऐप्लिकेशन को स्क्रीन की इमेज तक पहुंचने दें"</string>
<string name="assist_flash_title" msgid="8852484250748551092">"स्क्रीन फ़्लैश करें"</string>
- <string name="assist_flash_summary" msgid="6697095786317559129">"जब सहायक ऐप्लिकेशन स्क्रीन पर मौजूद लेख या स्क्रीनशॉट को ऐक्सेस करे तो स्क्रीन के किनारों पर रोशनी चमकाएं"</string>
+ <string name="assist_flash_summary" msgid="6697095786317559129">"जब सहायक ऐप्लिकेशन स्क्रीन पर मौजूद लेख या स्क्रीनशॉट को ऐक्सेस करे, तो स्क्रीन के किनारों पर रोशनी चमकाएं"</string>
<string name="assist_footer" msgid="7030121180457472165">"आप जो स्क्रीन देख रहे हैं, उसकी जानकारी के आधार पर सहायक ऐप्लिकेशन आपकी मदद कर सकते हैं. कुछ ऐप्लिकेशन पर, आपकी पूरी मदद करने के लिए लॉन्चर और बोलकर फ़ोन को निर्देश देना, ये दोनों सेवाएं काम करती हैं."</string>
<string name="average_memory_use" msgid="5333366040118953945">"औसत मेमोरी उपयोग"</string>
<string name="maximum_memory_use" msgid="6509872438499846077">"अधिकतम मेमोरी उपयोग"</string>
@@ -3876,7 +3878,7 @@
<string name="disabled_by_policy_title_camera" msgid="3741138901926111197">"कैमरा की अनुमति नहीं है"</string>
<string name="disabled_by_policy_title_screen_capture" msgid="1856835333536274665">"स्क्रीनशॉट की अनुमति नहीं है"</string>
<string name="disabled_by_policy_title_suspend_packages" msgid="4254714213391802322">"इस ऐप्लिकेशन को खोला नहीं जा सकता"</string>
- <string name="default_admin_support_msg" msgid="5789424433689798637">"अगर आपके कोई सवाल हैं तो, अपने आईटी एडमिन से संपर्क करें"</string>
+ <string name="default_admin_support_msg" msgid="5789424433689798637">"अगर आपके कोई सवाल हैं, तो अपने आईटी एडमिन से संपर्क करें"</string>
<string name="admin_support_more_info" msgid="8737842638087863477">"ज़्यादा विवरण"</string>
<string name="admin_profile_owner_message" msgid="3199544166281052845">"आपका एडमिन आपकी वर्क प्रोफ़ाइल से जुड़े ऐप और डेटा की निगरानी और उनका प्रबंधन कर सकता है, जिनमें सेटिंग, अनुमतियां, कॉर्पोरेट पहुंच, नेटवर्क गतिविधि और डिवाइस के जगह की जानकारी शामिल हैं."</string>
<string name="admin_profile_owner_user_message" msgid="2991249382056855531">"आपका एडमिन इस उपयोगकर्ता से जुड़े ऐप्लिकेशन और डेटा की निगरानी और उनका प्रबंधन कर सकता है, जिनमें सेटिंग, अनुमतियां, कॉर्पोरेट पहुंच, नेटवर्क गतिविधि और डिवाइस के जगह की जानकारी शामिल है."</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"अगर डिवाइस लॉक है, तो सूचनाओं का जवाब या अन्य लेख लिखने से रोकें"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"डिफ़ॉल्ट तौर पर स्पेलिंग जाँचने वाला"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"वर्तनी/स्पेलिंग जाँचकर्ता चुनें"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"स्पेलिंग जाँचने वाला टूल इस्तेमाल करें"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"स्पेलिंग जांचने वाले टूल का इस्तेमाल करें"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"नहीं चुना गया"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(कुछ नहीं)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"मेमोरी में जगह खाली करने में मदद करने के लिए, मेमोरी प्रबंधक आपके डिवाइस से बैकअप ली गई फ़ोटो और वीडियो निकाल देता है."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"फ़ोटो और वीडियो निकालें"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"मेमोरी प्रबंधक"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"मेमोरी मैनेजर इस्तेमाल करें"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"मेमोरी प्रबंधक का इस्तेमाल करें"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"ऑटोमैटिक"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"मैन्युअल"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"अभी स्पेस खाली करें"</string>
@@ -4126,7 +4128,7 @@
<string name="ambient_display_pickup_title" product="tablet" msgid="1555456400210301959">"टैबलेट देखने के लिए लिफ़्ट करें"</string>
<string name="ambient_display_pickup_title" product="device" msgid="2480126522988135037">"डिवाइस देखने के लिए लिफ़्ट करें"</string>
<string name="ambient_display_wake_screen_title" msgid="3376988352851077102">"चालू करने का डिसप्ले"</string>
- <string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"समय, सूचनाएं और दूसरी जानकारी देखने के लिए, अपना फ़ोन इस्तेमाल करें"</string>
+ <string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"समय, सूचनाएं और दूसरी जानकारी देखने के लिए, अपना फ़ोन उठाएं."</string>
<string name="ambient_display_pickup_summary" product="tablet" msgid="1077745287100012928">"समय, सूचनाएं और दूसरी जानकारी देखने के लिए, अपना टैबलेट इस्तेमाल करें."</string>
<string name="ambient_display_pickup_summary" product="device" msgid="404199660076598026">"समय, सूचनाएं और दूसरी जानकारी देखने के लिए, अपना डिवाइस इस्तेमाल करें."</string>
<string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"फ़ोन की स्क्रीन पर टैप करके देखें कि सूचना मिली है या नहीं"</string>
@@ -4158,7 +4160,7 @@
<string name="auto_sync_account_title" msgid="2394463123733529506">"डेटा को अपने आप सिंक करें"</string>
<string name="auto_sync_personal_account_title" msgid="6844465157916100655">"व्यक्तिगत डेटा अपने आप सिंक करें"</string>
<string name="auto_sync_work_account_title" msgid="2403222633447522376">"दफ़्तर डेटा अपने आप सिंक करें"</string>
- <string name="auto_sync_account_summary" msgid="6316230976974033772">"ऐप्लिकेशन को डेटा अपने आप रीफ्रे़श करने दें"</string>
+ <string name="auto_sync_account_summary" msgid="6316230976974033772">"ऐप्लिकेशन को डेटा अपने-आप रीफ्रे़श करने दें"</string>
<string name="account_sync_title" msgid="1570164819114297154">"खाता सिंक"</string>
<string name="account_sync_summary_some_on" msgid="1934556869158274053">"<xliff:g id="ID_2">%2$d</xliff:g> में से <xliff:g id="ID_1">%1$d</xliff:g> आइटम के लिए सिंक करना चालू है"</string>
<string name="account_sync_summary_all_on" msgid="3634161204232431700">"सभी आइटम के लिए सिंक करना चालू है"</string>
@@ -4471,7 +4473,7 @@
<string name="privacy_dashboard_title" msgid="8764930992456607513">"निजता"</string>
<string name="privacy_dashboard_summary" msgid="7916431309860824945">"अनुमतियां, खाता गतिविधि, निजी डेटा"</string>
<string name="contextual_card_dismiss_remove" msgid="1750420285615827309">"हटाएं"</string>
- <string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"रखें"</string>
+ <string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"Keep"</string>
<string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"यह सुझाव हटा दें?"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"सुझाव हटाया गया"</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"पहले जैसा करें"</string>
diff --git a/tests/CarDeveloperOptions/res/values-hr/arrays.xml b/tests/CarDeveloperOptions/res/values-hr/arrays.xml
index 66ab70c..238797e 100644
--- a/tests/CarDeveloperOptions/res/values-hr/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-hr/arrays.xml
@@ -34,7 +34,7 @@
<item msgid="772029947136115322">"30 sekundi"</item>
<item msgid="8743663928349474087">"1 minuta"</item>
<item msgid="1506508631223164814">"2 minute"</item>
- <item msgid="8664703938127907662">"5 minuta"</item>
+ <item msgid="8664703938127907662">"5 min"</item>
<item msgid="5827960506924849753">"10 minuta"</item>
<item msgid="6677424950124253938">"30 minuta"</item>
</string-array>
@@ -56,7 +56,7 @@
<item msgid="227647485917789272">"1 minuta"</item>
<item msgid="3367011891231217504">"2 minute"</item>
<item msgid="4376575879222393045">"5 minuta"</item>
- <item msgid="811192536981678974">"10 minuta"</item>
+ <item msgid="811192536981678974">"10 min"</item>
<item msgid="7258394417241706272">"30 minuta"</item>
</string-array>
<string-array name="entries_font_size">
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"izvođenje u pozadini"</item>
<item msgid="6423861043647911030">"glasnoća pristupačnosti"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Lokacija"</item>
+ <item msgid="6656077694190491067">"Lokacija"</item>
+ <item msgid="8790228218278477369">"Lokacija"</item>
+ <item msgid="7836406246005211990">"Vibriranje"</item>
+ <item msgid="3951439024549922598">"Čitaj kontakte"</item>
+ <item msgid="8802152411647068">"Izmjena kontakata"</item>
+ <item msgid="229544934599698735">"Čitanje zapisnika poziva"</item>
+ <item msgid="7396102294405899613">"Izmjena zapisnika poziva"</item>
+ <item msgid="3597797992398484655">"Čitanje kalendara"</item>
+ <item msgid="2705975774250907343">"Izmjena kalendara"</item>
+ <item msgid="4668747371441932697">"Lokacija"</item>
+ <item msgid="1487578921720243646">"Objavljivanje obavijesti"</item>
+ <item msgid="4636080349724146638">"Lokacija"</item>
+ <item msgid="673510900286463926">"Poziv na telefon"</item>
+ <item msgid="542083422784609790">"Čitanje SMS-a/MMS-a"</item>
+ <item msgid="1033780373029588436">"Pisanje SMS-a/MMS-a"</item>
+ <item msgid="5647111115517787488">"Primanje SMS-a/MMS-a"</item>
+ <item msgid="8591105601108455893">"Primanje SMS-a/MMS-a"</item>
+ <item msgid="7730995008517841903">"Primanje SMS-a/MMS-a"</item>
+ <item msgid="2613033109026626086">"Primanje SMS-a/MMS-a"</item>
+ <item msgid="3037159047591081136">"Slanje SMS-a/MMS-a"</item>
+ <item msgid="4726682243833913568">"Čitanje SMS-a/MMS-a"</item>
+ <item msgid="6555678522277865572">"Pisanje SMS-a/MMS-a"</item>
+ <item msgid="6981734935578130884">"Izmjena postavki"</item>
+ <item msgid="8705854389991425629">"Povlačenje na vrh"</item>
+ <item msgid="5861356020344153651">"Pristup obavijestima"</item>
+ <item msgid="78432174621628659">"Fotoaparat"</item>
+ <item msgid="3986116419882154794">"Snimanje zvuka"</item>
+ <item msgid="4516840825756409490">"Reprodukcija audiozapisa"</item>
+ <item msgid="6811712502798183957">"Čitaj međuspremnik"</item>
+ <item msgid="2780369012602289114">"Izmijeni međuspremnik"</item>
+ <item msgid="2331359440170850868">"Medijski gumbi"</item>
+ <item msgid="6133599737122751231">"Audiofokus"</item>
+ <item msgid="6844485713404805301">"Glavna glasnoća"</item>
+ <item msgid="1600379420669104929">"Glasnoća glasa"</item>
+ <item msgid="6296768210470214866">"Glasnoća zvona"</item>
+ <item msgid="510690696071629241">"Glasnoća medija"</item>
+ <item msgid="406861638631430109">"Glasnoća alarma"</item>
+ <item msgid="4715864795872233884">"Glasnoća obavijesti"</item>
+ <item msgid="2311478519251301183">"Glasnoća Bluetootha"</item>
+ <item msgid="5133991377896747027">"Zadrži u aktivnom stanju"</item>
+ <item msgid="2464189519136248621">"Lokacija"</item>
+ <item msgid="2062677934050803037">"Lokacija"</item>
+ <item msgid="1735171933192715957">"Dohvaćanje statistike o upotrebi"</item>
+ <item msgid="1014093788778383554">"Isključivanje/uključivanje mikrofona"</item>
+ <item msgid="4199297950608622850">"Prikaži poruku"</item>
+ <item msgid="2527962435313398821">"Projiciraj medijske sadržaje"</item>
+ <item msgid="5117506254221861929">"Aktiviraj VPN"</item>
+ <item msgid="8291198322681891160">"Pozadinska slika za pisanje"</item>
+ <item msgid="7106921284621230961">"Pomoćna struktura"</item>
+ <item msgid="4496533640894624799">"Pomoćna snimka zaslona"</item>
+ <item msgid="2598847264853993611">"Pročitaj stanje telefona"</item>
+ <item msgid="9215610846802973353">"Dodaj govornu poštu"</item>
+ <item msgid="9186411956086478261">"Koristi SIP"</item>
+ <item msgid="6884763100104539558">"Obradi odlazni poziv"</item>
+ <item msgid="125513972170580692">"Otisak prsta"</item>
+ <item msgid="2556071024281275619">"Biometrijski senzori"</item>
+ <item msgid="617168514928339387">"Čitanje poruka mobilne mreže"</item>
+ <item msgid="7134693570516523585">"Lažiraj lokaciju"</item>
+ <item msgid="7224489175375229399">"Pročitaj pohranu"</item>
+ <item msgid="8472735063903258202">"Piši u pohranu"</item>
+ <item msgid="4069276819909595110">"Uključi zaslon"</item>
+ <item msgid="1228338896751121025">"Dohvati račune"</item>
+ <item msgid="3181581793459233672">"Izvodi u pozadini"</item>
+ <item msgid="2340936043025374076">"Glasnoća pristupačnosti"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Kratko"</item>
<item msgid="4816511817309094890">"Srednja"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Ne dopuštaj nikada"</item>
<item msgid="8184570120217958741">"Dopusti uvijek"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Obično"</item>
+ <item msgid="5101233285497327432">"Umjereno"</item>
+ <item msgid="1555861583162930714">"Niska"</item>
+ <item msgid="1719683776264798117">"Kritična"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Uobičajena"</item>
+ <item msgid="6107138933849816768">"Umjerena"</item>
+ <item msgid="182695359839047859">"Niska"</item>
+ <item msgid="8577246509202964244">"Kritično"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Postojana"</item>
<item msgid="167418068739176448">"Glavna aktivnost"</item>
@@ -401,7 +477,7 @@
<item msgid="1008268820118852416">"Mreža bez ograničenja prometa"</item>
</string-array>
<string-array name="wifi_privacy_entries">
- <item msgid="6545683814310036454">"Koristi nasumično određen MAC (zadano)"</item>
+ <item msgid="6545683814310036454">"Koristi nasumičnu MAC adresu (zadano)"</item>
<item msgid="214234417308375326">"Upotrijebite MAC uređaja"</item>
</string-array>
<string-array name="wifi_hidden_entries">
diff --git a/tests/CarDeveloperOptions/res/values-hr/strings.xml b/tests/CarDeveloperOptions/res/values-hr/strings.xml
index 3ae9864..e0d1dc9 100644
--- a/tests/CarDeveloperOptions/res/values-hr/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-hr/strings.xml
@@ -84,8 +84,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Smanjite ili povećajte tekst na zaslonu."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Smanji"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Povećaj"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Primjer teksta"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Čarobnjak iz Oza"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"11. poglavlje: Čudesni Smaragdni Grad čarobnjaka Oza"</string>
@@ -312,8 +311,8 @@
<string name="cellular_data_summary" msgid="8817717603450318646">"Dopusti prijenos pod. putem mobilne mreže"</string>
<string name="allow_data_usage_title" msgid="5381624105803294315">"Podatkovni promet u roamingu"</string>
<string name="roaming" msgid="8860308342135146004">"Roaming"</string>
- <string name="roaming_enable" msgid="2108142024297441116">"Povezivanje s podatkovnim uslugama u roamingu"</string>
- <string name="roaming_disable" msgid="1915440242079953809">"Povezivanje s podatkovnim uslugama u roamingu"</string>
+ <string name="roaming_enable" msgid="2108142024297441116">"Poveži se s podatkovnim uslugama u roamingu"</string>
+ <string name="roaming_disable" msgid="1915440242079953809">"Poveži se s podatkovnim uslugama u roamingu"</string>
<string name="roaming_reenable_message" msgid="8388505868655113258">"Izgubili ste podatkovnu vezu jer ste isključili mrežni roaming podataka."</string>
<string name="roaming_turn_it_on_button" msgid="4370846458830537578">"Uključi"</string>
<string name="roaming_warning" msgid="5488050911277592868">"To može biti dosta skupo."</string>
@@ -371,7 +370,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Profilni podaci"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Računi"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Lokacija"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Koristi se lokacijom"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Upotreba lokacije"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Isključeno"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">Uključeno – <xliff:g id="COUNT_1">%1$d</xliff:g> aplikacija može pristupiti lokaciji</item>
@@ -410,7 +409,7 @@
<string name="security_settings_face_enroll_introduction_message_setup" msgid="4533297059466270074">"Licem možete otključati telefon, autorizirati kupnje ili se prijaviti na aplikacije"</string>
<string name="security_settings_face_enroll_introduction_footer_message" msgid="7764021721107723266"></string>
<string name="security_settings_face_enroll_repeat_title" msgid="2507710348140837875">"Postavite lice u središte kruga"</string>
- <string name="security_settings_face_enroll_enrolling_skip" msgid="4346077260378772613">"Učinit ću to kasnije"</string>
+ <string name="security_settings_face_enroll_enrolling_skip" msgid="4346077260378772613">"Kasnije ću"</string>
<string name="face_add_max" msgid="8870899421165189413">"Ne možete dodati više od <xliff:g id="COUNT">%d</xliff:g> lica"</string>
<string name="face_intro_error_max" msgid="4024147799079828937">"Dodali ste maksimalan broj lica"</string>
<string name="face_intro_error_unknown" msgid="3241592604198351134">"Nije moguće dodati više lica"</string>
@@ -422,7 +421,7 @@
<string name="security_settings_face_enroll_done" msgid="5409739233373490971">"Gotovo"</string>
<string name="security_settings_face_settings_use_face_category" msgid="1586532139528115416">"Koristite lice za"</string>
<string name="security_settings_face_settings_use_face_unlock_phone" msgid="318274519126401671">"Otključavanje uređaja"</string>
- <string name="security_settings_face_settings_use_face_for_apps" msgid="5479369083370664351">"Prijava u aplikaciju i plaćanja"</string>
+ <string name="security_settings_face_settings_use_face_for_apps" msgid="5479369083370664351">"Prijava u aplikacije i plaćanja"</string>
<string name="security_settings_face_settings_require_attention" msgid="2755140150841557225">"Oči otvorene za otključavanje"</string>
<string name="security_settings_face_settings_require_attention_details" msgid="2557060433599942587">"Prilikom autentifikacije licem oči moraju biti otvorene"</string>
<string name="security_settings_face_settings_require_confirmation" msgid="7312024271060416438">"Uvijek traži potvrdu"</string>
@@ -430,11 +429,11 @@
<string name="security_settings_face_settings_remove_face_data" msgid="2821359954483136239">"Ukloni podatke lica"</string>
<string name="security_settings_face_settings_footer" msgid="4627175759990550715">"Za otključavanje uređaja i pristup aplikacijama može se upotrijebiti vaše lice. "<annotation id="url">"Saznajte više"</annotation></string>
<string name="security_settings_face_settings_remove_dialog_title" msgid="5675319895815271094">"Želite li izbrisati podatke o licu?"</string>
- <string name="security_settings_face_settings_remove_dialog_details" msgid="3754494807169276107">"Podaci koje je snimilo Otključavanje licem izbrisat će se trajno i na siguran način. Nakon uklanjanja trebat će vam PIN, uzorak ili zaporka da biste otključali telefon, prijavili se na aplikacije i potvrdili plaćanja."</string>
+ <string name="security_settings_face_settings_remove_dialog_details" msgid="3754494807169276107">"Podaci koje je snimilo Otključavanje licem izbrisat će se trajno i na siguran način. Nakon uklanjanja trebat će vam PIN, uzorak ili zaporka da biste otključali telefon, prijavili se u aplikacije i potvrdili plaćanja."</string>
<string name="security_settings_fingerprint_preference_title" msgid="4177132225930582928">"Otisak prsta"</string>
<string name="fingerprint_manage_category_title" msgid="1463406696801542090">"Otisci prstiju"</string>
<string name="fingerprint_usage_category_title" msgid="7298369141954599706">"Upotreba otiska prsta"</string>
- <string name="fingerprint_add_title" msgid="6840343900784463856">"Dodaj otisak prsta"</string>
+ <string name="fingerprint_add_title" msgid="6840343900784463856">"Dodajte otisak prsta"</string>
<string name="fingerprint_enable_keyguard_toggle_title" msgid="8847663949921113437">"zaključavanje zaslona"</string>
<plurals name="security_settings_fingerprint_preference_summary" formatted="false" msgid="2033416761172877041">
<item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> otisak prsta postavljen</item>
@@ -444,7 +443,7 @@
<string name="security_settings_fingerprint_preference_summary_none" msgid="3613424536269750172"></string>
<string name="security_settings_fingerprint_enroll_introduction_title" msgid="889558002683900544">"Otključavanje otiskom"</string>
<string name="security_settings_fingerprint_enroll_introduction_title_unlock_disabled" msgid="7915504118657864429">"Upotreba otiska prsta"</string>
- <string name="security_settings_fingerprint_enroll_introduction_message" msgid="5586198131986682472">"Jednostavno dodirnite senzor otiska prsta da biste otključali telefon, autorizirali kupnje ili se prijavili na aplikacije. Pazite čije otiske dodajete. Svaki otisak koji dodate može se upotrijebiti za sve te radnje.\n\nNapomena: otisak prsta nije toliko siguran kao snažan uzorak ili PIN."</string>
+ <string name="security_settings_fingerprint_enroll_introduction_message" msgid="5586198131986682472">"Jednostavno dodirnite senzor otiska prsta da biste otključali telefon, autorizirali kupnje ili se prijavili u aplikacije. Pazite čije otiske dodajete. Svaki otisak koji dodate može se upotrijebiti za sve te radnje.\n\nNapomena: otisak prsta nije toliko siguran kao snažan uzorak ili PIN."</string>
<string name="security_settings_fingerprint_enroll_introduction_message_unlock_disabled" msgid="1640839304679275468">"Otključajte telefon ili odobrite kupnje otiskom prsta.\n\nNapomena: ovaj uređaj ne možete otključati otiskom prsta. Za više informacija obratite se administratoru organizacije."</string>
<string name="security_settings_fingerprint_enroll_introduction_message_setup" msgid="6734490666593320711">"Otključajte telefon ili odobrite kupnje otiskom prsta.\n\nNapomena: otisak prst može biti manje siguran od snažnog uzorka ili PIN-a."</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel" msgid="9168637333731599827">"Odustani"</string>
@@ -452,7 +451,7 @@
<string name="security_settings_fingerprint_enroll_introduction_cancel_setup" msgid="756928427429893070">"Preskoči"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue_setup" msgid="4125977169169671144">"Dalje"</string>
<string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"Želite li preskočiti otisak prsta?"</string>
- <string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"Postavljanje otisaka prstiju traje samo jednu ili dvije minute. Ako to preskočite, otiske prstiju možete dodati kasnije u postavkama."</string>
+ <string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"Postavljanje otiska prsta traje samo jednu ili dvije minute. Ako to preskočite, otisak prsta možete dodati kasnije u postavkama."</string>
<string name="lock_screen_intro_skip_title" msgid="5307431665496346914">"Želite li preskočiti zaključavanje zaslona?"</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="tablet" msgid="7553945981266845264">"Značajke za zaštitu uređaja neće se uključiti. Nećete moći spriječiti druge da upotrebljavaju ovaj tablet u slučaju gubitka, krađe ili vraćanja na zadano."</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="device" msgid="1378243257238015603">"Značajke za zaštitu uređaja neće se uključiti. Nećete moći spriječiti druge da upotrebljavaju ovaj uređaj u slučaju gubitka, krađe ili vraćanja na zadano."</string>
@@ -476,7 +475,7 @@
<string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Nastavite podizati prst da biste dodali različite dijelove otiska prsta"</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"Otisak prsta dodan"</string>
<string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"Kada se prikaže ta ikona, upotrijebite otisak prsta da biste se identificirali ili odobrili kupnju"</string>
- <string name="security_settings_fingerprint_enroll_enrolling_skip" msgid="1473280156532146933">"Učinit ću to kasnije"</string>
+ <string name="security_settings_fingerprint_enroll_enrolling_skip" msgid="1473280156532146933">"Kasnije ću"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_title" msgid="2816424026528101690">"Preskočiti postavljanje otiska prsta?"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_message" msgid="8139299964344809780">"Odlučili ste se za otisak prsta kao jedan od načina za otključavanje telefona. Ako sad preskočite, morat ćete ga postaviti kasnije. Postavljanje traje samo otprilike jednu minutu."</string>
<string name="fingerprint_lock_screen_setup_skip_dialog_text" product="tablet" msgid="1384438077720821127">"Zaštitite tablet pomoću opcije zaključavanja zaslona kako se nitko ne bi mogao njime koristiti ako ga izgubite ili ga netko ukrade. Opcija zaključavanja zaslona treba vam i za postavljanje otiska prsta. Dodirnite Odustani, a zatim postavite PIN ili odaberite neku drugu opciju zaključavanja zaslona."</string>
@@ -734,7 +733,7 @@
<item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> aktivne aplikacije</item>
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> aktivnih aplikacija</item>
</plurals>
- <string name="manage_trust_agents" msgid="8129970926213142261">"Pouzdani predstavnici"</string>
+ <string name="manage_trust_agents" msgid="8129970926213142261">"Agenti za pouzdanost"</string>
<string name="disabled_because_no_backup_security" msgid="8127039979909203528">"Za upotrebu prvo postavite zaključavanje zaslona"</string>
<string name="manage_trust_agents_summary" msgid="2023116850759962248">"Ništa"</string>
<plurals name="manage_trust_agents_summary_on" formatted="false" msgid="5550538038916606097">
@@ -854,7 +853,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Uključite Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Upotreba Wi-Fija"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Upotreba Wi-Fija"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Postavke Wi-Fija"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Postavljanje i upravljanje bežičnim pristupnim točkama"</string>
@@ -892,7 +891,7 @@
<string name="wifi_switch_away_when_unvalidated" msgid="2418577764071293971">"Prijeđi na mobilne podatke ako Wi‑Fi izgubi pristup internetu."</string>
<string name="wifi_cellular_data_fallback_title" msgid="5067241930716252665">"Automatski prijeđi na mobilne podatke"</string>
<string name="wifi_cellular_data_fallback_summary" msgid="2721467405851519769">"Koristite mobilne podatke kada Wi-Fi nema pristup internetu. Moguća je naplata potrošnje podatkovnog prometa."</string>
- <string name="wifi_add_network" msgid="4094957940791876640">"Dodaj mrežu"</string>
+ <string name="wifi_add_network" msgid="4094957940791876640">"Dodajte mrežu"</string>
<string name="wifi_configure_settings_preference_title" msgid="2678534679408777268">"Postavke Wi‑Fi-ja"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="5714892572614655675">"Wi‑Fi se automatski ponovo uključuje"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_off" msgid="286904094152909651">"Wi‑Fi se ne uključuje ponovno automatski"</string>
@@ -957,7 +956,7 @@
<string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"Skeniraj QR kôd"</string>
<string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"Centrirajte QR kôd u nastavku da biste se povezali s mrežom “<xliff:g id="SSID">%1$s</xliff:g>”"</string>
<string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"Pridružite se Wi‑Fiju tako što ćete skenirati QR kôd"</string>
- <string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Dijeli Wi‑Fi"</string>
+ <string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Dijelite Wi‑Fi"</string>
<string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"Skenirajte ovaj QR kôd da biste se povezali s mrežom \"<xliff:g id="SSID">%1$s</xliff:g>\" i podijelili zaporku"</string>
<string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"Skenirajte ovaj QR kôd da biste se povezali s mrežom \"<xliff:g id="SSID">%1$s</xliff:g>\""</string>
<string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"Čitanje QR koda nije uspjelo. Ponovo centrirajte kôd, a zatim pokušajte opet"</string>
@@ -993,7 +992,7 @@
<string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"Nemoj potvrditi"</string>
<string name="wifi_do_not_validate_eap_server_warning" msgid="3895397996759837323">"Nije naveden nijedan certifikat. Veza neće biti privatna."</string>
<string name="wifi_ssid_too_long" msgid="34911971389775920">"Mreža ima predugačak naziv."</string>
- <string name="wifi_no_domain_warning" msgid="735859919311067606">"Mora navoditi domenu."</string>
+ <string name="wifi_no_domain_warning" msgid="735859919311067606">"Mora se navesti domena."</string>
<string name="wifi_wps_available_first_item" msgid="3221671453930485243">"WPS dostupan"</string>
<string name="wifi_wps_available_second_item" msgid="5703265526619705185">" (WPS dostupan)"</string>
<string name="wifi_carrier_connect" msgid="7202618367339982884">"Wi‑Fi mreža mobilnog operatera"</string>
@@ -1039,7 +1038,7 @@
<string name="wifi_advanced_ssid_title" msgid="4229741334913894856">"SSID"</string>
<string name="wifi_advanced_mac_address_title" msgid="1162782083754021737">"MAC adresa"</string>
<string name="wifi_advanced_ip_address_title" msgid="2708185994512829071">"IP adresa"</string>
- <string name="wifi_details_title" msgid="2164042631550920157">"Pojedinosti o mreži"</string>
+ <string name="wifi_details_title" msgid="2164042631550920157">"Podaci o mreži"</string>
<string name="wifi_details_subnet_mask" msgid="53396707004763012">"Maska podmreže"</string>
<string name="wifi_details_dns" msgid="1118251455740116559">"DNS"</string>
<string name="wifi_details_ipv6_address_header" msgid="1642310137145363299">"IPv6 adrese"</string>
@@ -1064,7 +1063,7 @@
<string name="wifi_p2p_persist_network" msgid="1110453878886476660">"Zapamti tu vezu"</string>
<string name="wifi_p2p_menu_search" msgid="8207638860263805291">"Traženje uređaja"</string>
<string name="wifi_p2p_menu_searching" msgid="7443249001543208106">"Traženje..."</string>
- <string name="wifi_p2p_menu_rename" msgid="2129974878377065488">"Preimenuj uređaj"</string>
+ <string name="wifi_p2p_menu_rename" msgid="2129974878377065488">"Promjena naziva uređaja"</string>
<string name="wifi_p2p_peer_devices" msgid="8232126067045093382">"Paralelni uređaji"</string>
<string name="wifi_p2p_remembered_groups" msgid="1356458238836730346">"Zapamćene grupe"</string>
<string name="wifi_p2p_failed_connect_message" msgid="6103436959132424093">"Povezivanje nije bilo moguće."</string>
@@ -1121,7 +1120,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Mobilni uređaj"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Ako Wi‑Fi nije dostupan, koristi mobilnu mrežu"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Ako mobilna mreža nije dostupna, koristi Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Pozivi putem Wi-Fija. Ako se Wi‑Fi izgubi, poziv će završiti."</string>
@@ -1475,7 +1477,7 @@
<string name="storage_detail_system" msgid="6784247618772153283">"Sustav"</string>
<string name="storage_detail_explore" msgid="8206900269596580264">"Istraži <xliff:g id="NAME">^1</xliff:g>"</string>
<string name="storage_detail_dialog_other" msgid="5073511663616043370">"Ostalo uključuje dijeljene datoteke koje su spremile aplikacije, datoteke preuzete s interneta ili Bluetoothom, Android datoteke i tako dalje. \n\nDa biste vidjeli što sadrži <xliff:g id="NAME">^1</xliff:g>, dodirnite Istraži."</string>
- <string name="storage_detail_dialog_system" msgid="1472572861360014226">"Sustav uključuje datoteke koje se upotrebljavaju za pokretanje verzije Androida <xliff:g id="VERSION">%s</xliff:g>"</string>
+ <string name="storage_detail_dialog_system" msgid="1472572861360014226">"Sustav uključuje datoteke koje se upotrebljavaju za pokretanje Androida verzije <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="storage_detail_dialog_user" msgid="1663117417635010371">"Korisnik <xliff:g id="USER_0">^1</xliff:g> možda je spremio fotografije, glazbu, aplikacije ili druge podatke, čime je iskorišteno <xliff:g id="SIZE">^2</xliff:g> prostora. \n\nZa prikaz pojedinosti prijeđite na račun korisnika <xliff:g id="USER_1">^1</xliff:g>."</string>
<string name="storage_wizard_init_title" msgid="3407283236421089014">"Postavite uređaj <xliff:g id="NAME">^1</xliff:g>"</string>
<string name="storage_wizard_init_external_title" msgid="6853250619674645478">"Upotrebljavaj kao prijenosnu pohranu"</string>
@@ -1637,7 +1639,7 @@
<string name="tether_settings_summary_hotspot_off_tether_on" msgid="1349909238672649877">"Modemsko povezivanje"</string>
<string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"Dok je Štednja podatkovnog prometa uključena, ne možete upotrebljavati modemsko povezivanje ni prijenosne žarišne točke"</string>
<string name="usb_title" msgid="7480927657535578688">"USB"</string>
- <string name="usb_tethering_button_text" msgid="6242228383142012332">"Dijeljenje USB-om"</string>
+ <string name="usb_tethering_button_text" msgid="6242228383142012332">"Dijeljenje veze USB-om"</string>
<string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Dijelite internetsku vezu telefona putem USB-a"</string>
<string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"Dijelite internetsku vezu tableta putem USB-a"</string>
<string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"Dijeljenje veze Bluetoothom"</string>
@@ -1823,7 +1825,7 @@
<string name="screen_compatibility_label" msgid="3638271673726075815">"Kompatibilnost zaslona"</string>
<string name="permissions_label" msgid="7341733648403464213">"Dozvole"</string>
<string name="cache_header_label" msgid="3202284481380361966">"Predmemorija"</string>
- <string name="clear_cache_btn_text" msgid="107507684844780651">"Očisti predmemoriju"</string>
+ <string name="clear_cache_btn_text" msgid="107507684844780651">"Isprazni predmemoriju"</string>
<string name="cache_size_label" msgid="6205173678102220499">"Predmemorija"</string>
<plurals name="uri_permissions_text" formatted="false" msgid="8938478333743197020">
<item quantity="one">%d stavka</item>
@@ -1844,7 +1846,7 @@
<string name="install_text" msgid="2798092278891807849">"Instaliraj"</string>
<string name="disable_text" msgid="5065834603951474397">"Onemogući"</string>
<string name="enable_text" msgid="7179141636849225884">"Omogući"</string>
- <string name="clear_user_data_text" msgid="8894073247302821764">"Izbriši pohranu"</string>
+ <string name="clear_user_data_text" msgid="8894073247302821764">"Isprazni pohranu"</string>
<string name="app_factory_reset" msgid="8718986000278776272">"Deinstaliraj ažuriranja"</string>
<string name="auto_launch_enable_text" msgid="3372898942144027341">"Odlučili ste da se ta aplikacija pokreće prema zadanim postavkama za neke radnje."</string>
<string name="always_allow_bind_appwidgets_text" msgid="2286211654774611037">"Odlučili ste dopustiti ovoj aplikaciji izradu widgeta i pristupanje njihovim podacima."</string>
@@ -2060,7 +2062,7 @@
<string name="vision_settings_description" msgid="3476589459009287332">"Ovaj uređaj možete prilagoditi svojim potrebama. Značajke pristupačnosti možete promijeniti kasnije u postavkama."</string>
<string name="vision_settings_suggestion_title" msgid="7268661419110951128">"Promjena veličine fonta"</string>
<string name="screen_reader_category_title" msgid="6300714148519645544">"Čitači zaslona"</string>
- <string name="audio_and_captions_category_title" msgid="6140472938769619212">"Audio i tekst na zaslonu"</string>
+ <string name="audio_and_captions_category_title" msgid="6140472938769619212">"Zvuk i tekst na zaslonu"</string>
<string name="display_category_title" msgid="545168481672250195">"Zaslon"</string>
<string name="interaction_control_category_title" msgid="8775039211811947683">"Kontrole interakcije"</string>
<string name="user_installed_services_category_title" msgid="4288689493753221319">"Preuzete usluge"</string>
@@ -2090,9 +2092,9 @@
<string name="accessibility_power_button_ends_call_prerefence_title" msgid="6172987104538172869">"Tipka za uklj. prekida poziv"</string>
<string name="accessibility_toggle_large_pointer_icon_title" msgid="9127905775116570565">"Veliki pokazivač miša"</string>
<string name="accessibility_disable_animations" msgid="8378441317115710009">"Uklanjanje animacija"</string>
- <string name="accessibility_toggle_master_mono_title" msgid="899550848196702565">"Monoaudio"</string>
+ <string name="accessibility_toggle_master_mono_title" msgid="899550848196702565">"Monozvuk"</string>
<string name="accessibility_toggle_master_mono_summary" msgid="3847052868469033235">"Kombiniranje kanala prilikom reprodukcije zvuka"</string>
- <string name="accessibility_toggle_master_balance_title" msgid="8723492001092647562">"Audio balans"</string>
+ <string name="accessibility_toggle_master_balance_title" msgid="8723492001092647562">"Ravnoteža zvuka"</string>
<string name="accessibility_toggle_master_balance_left_label" msgid="8531986342666527970">"Lijevi"</string>
<string name="accessibility_toggle_master_balance_right_label" msgid="7757024572140589558">"Desni"</string>
<string name="accessibility_timeout_default" msgid="9118596941362716397">"Zadano"</string>
@@ -2114,9 +2116,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Vibracija za obavijesti"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Vibracija pri zvonjenju"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Vibracija za dodir"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Upotreba usluge"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Upotreba korekcije boje"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Upotreba titlova"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Upotreba usluge"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Upotreba korekcije boja"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Upotreba titlova"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Nastavi"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Slušni aparati"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Nije povezan nijedan slušni aparat"</string>
@@ -2495,7 +2497,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Uključi"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Upotreba Štednje baterije"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Upotreba Štednje baterije"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Uključi automatski"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Nikada"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"na <xliff:g id="PERCENT">%1$s</xliff:g> baterije"</string>
@@ -2609,11 +2611,11 @@
<string name="managed_device_admin_title" msgid="8021522755492551726">"Posao"</string>
<string name="sms_access_restriction_enabled" msgid="3006320256764718303">"Ograniči pristup SMS-ovima i zapisniku poziva"</string>
<string name="sms_access_restriction_enabled_summary" msgid="9011946580977780063">"Samo zadane aplikacije za telefon i poruke imaju dopuštenja za SMS i zapisnik poziva"</string>
- <string name="no_trust_agents" msgid="5757792915019113084">"Pouzdani predstavnici nisu dostupni"</string>
+ <string name="no_trust_agents" msgid="5757792915019113084">"Agenti za pouzdanost nisu dostupni"</string>
<string name="add_device_admin_msg" msgid="3573765823476931173">"Aktivirati apl. administratora uređaja?"</string>
<string name="add_device_admin" msgid="1621152410207260584">"Aktiviraj aplikaciju administratora ovog uređaja"</string>
<string name="device_admin_add_title" msgid="6097881332139146897">"Administrator uređaja"</string>
- <string name="device_admin_warning" msgid="4421817419326480449">"Aktiviranjem ove administratorske aplikacije dopustit ćete aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g> da izvede sljedeće postupke:"</string>
+ <string name="device_admin_warning" msgid="4421817419326480449">"Aktiviranjem ove administratorske aplikacije dopustit ćete aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g> izvođenje sljedećih postupaka:"</string>
<string name="device_admin_status" msgid="5424944611789040723">"Ova je administratorska aplikacija aktivna i omogućuje aplikaciji <xliff:g id="APP_NAME">%1$s</xliff:g> izvođenje sljedećih postupaka:"</string>
<string name="profile_owner_add_title" msgid="735805919754362791">"Želite li aktivirati upravitelj profila?"</string>
<string name="adding_profile_owner_warning" msgid="1284541194547382194">"Ako nastavite, vašim će korisnikom upravljati administrator, koji uz vaše osobne podatke može spremiti i povezane podatke.\n\nVaš administrator može nadzirati postavke, pristup, aplikacije i podatke povezane s tim korisnikom, uključujući aktivnosti na mreži i podatke o lokaciji uređaja te njima upravljati."</string>
@@ -2793,7 +2795,7 @@
<string name="vpn_not_used" msgid="2889520789132261454">"(ne koristi se)"</string>
<string name="vpn_no_ca_cert" msgid="486605757354800838">"(ne potvrđuj poslužitelj)"</string>
<string name="vpn_no_server_cert" msgid="679622228649855629">"(primljen od poslužitelja)"</string>
- <string name="vpn_always_on_invalid_reason_type" msgid="165810330614905489">"Ova vrsta VPN-a ne može ostati povezana u svakom trenutku"</string>
+ <string name="vpn_always_on_invalid_reason_type" msgid="165810330614905489">"Ova vrsta VPN-a ne podržava stalnu vezu"</string>
<string name="vpn_always_on_invalid_reason_server" msgid="3864424127328210700">"Uvijek uključeni VPN podržava samo numeričke adrese poslužitelja"</string>
<string name="vpn_always_on_invalid_reason_no_dns" msgid="3814114757059738225">"Za uvijek uključeni VPN mora biti naveden DNS poslužitelj"</string>
<string name="vpn_always_on_invalid_reason_dns" msgid="501388894176868973">"Adrese DNS poslužitelja za uvijek uključeni VPN moraju biti numeričke"</string>
@@ -2825,7 +2827,7 @@
<string name="vpn_menu_delete" msgid="4128305800374946877">"Izbriši profil"</string>
<string name="vpn_menu_lockdown" msgid="6951452279924808089">"Uvijek uključena VPN mreža"</string>
<string name="vpn_no_vpns_added" msgid="6616183541896197147">"Nije dodan nijedan VPN"</string>
- <string name="vpn_always_on_summary" msgid="3639994551631437397">"Zadrži vezu s VPN-om u svakom trenutku"</string>
+ <string name="vpn_always_on_summary" msgid="3639994551631437397">"Održavaj stalnu vezu s VPN-om"</string>
<string name="vpn_always_on_summary_not_supported" msgid="9077720997795965133">"Ova aplikacija ne podržava tu opciju"</string>
<string name="vpn_always_on_summary_active" msgid="8962619701962239088">"Značajka Uvijek uključeno aktivna"</string>
<string name="vpn_require_connection" msgid="5413746839457797350">"Blokiraj veze bez VPN-a"</string>
@@ -2910,8 +2912,8 @@
<string name="user_add_user_title" msgid="2320897397066676472">"Dodati novog korisnika?"</string>
<string name="user_add_user_message_long" msgid="686637203224195465">"Da biste ovaj uređaj dijelili s drugima, možete napraviti dodatne korisnike. Svaki korisnik ima svoj prostor koji može prilagoditi pomoću vlastitih aplikacija, pozadine i tako dalje. Korisnici mogu prilagoditi i postavke uređaja koje utječu na sve ostale korisnike, na primjer Wi‑Fi.\n\nKada dodate novog korisnika, ta osoba mora postaviti svoj prostor.\n\nBilo koji korisnik može ažurirati aplikacije za sve ostale korisnike. Postavke i usluge pristupačnosti možda se neće prenijeti na novog korisnika."</string>
<string name="user_add_user_message_short" msgid="1802594476285458254">"Kada dodate novog korisnika, ta osoba mora postaviti vlastiti prostor.\n\nBilo koji korisnik može ažurirati aplikacije za sve ostale korisnike."</string>
- <string name="user_setup_dialog_title" msgid="6748950002206392396">"Postaviti korisnika sada?"</string>
- <string name="user_setup_dialog_message" msgid="2988559933258353919">"Provjerite može li osoba uzeti uređaj i postaviti svoj prostor"</string>
+ <string name="user_setup_dialog_title" msgid="6748950002206392396">"Želite li postaviti korisnika?"</string>
+ <string name="user_setup_dialog_message" msgid="2988559933258353919">"Uređaj morate dati toj osobi da sama postavi svoj prostor"</string>
<string name="user_setup_profile_dialog_message" msgid="7611900802824048526">"Želite li sada postaviti profil?"</string>
<string name="user_setup_button_setup_now" msgid="4941459406266856176">"Postavi sada"</string>
<string name="user_setup_button_setup_later" msgid="6596031428556518752">"Ne sad"</string>
@@ -3019,8 +3021,8 @@
<string name="wizard_back" msgid="223654213898117594">"Natrag"</string>
<string name="wizard_next" msgid="5239664512608113542">"Dalje"</string>
<string name="wizard_finish" msgid="3742102879981212094">"Završi"</string>
- <string name="user_image_take_photo" msgid="2000247510236178111">"Snimi fotografiju"</string>
- <string name="user_image_choose_photo" msgid="4920315415203051898">"Odaberi sliku"</string>
+ <string name="user_image_take_photo" msgid="2000247510236178111">"Snimite fotografiju"</string>
+ <string name="user_image_choose_photo" msgid="4920315415203051898">"Odaberite sliku"</string>
<string name="user_image_photo_selector" msgid="8429694590849882411">"Odabir slike"</string>
<string name="regulatory_info_text" msgid="9112993912873512834"></string>
<string name="sim_setup_wizard_title" msgid="77627575294867180">"SIM kartice"</string>
@@ -3191,7 +3193,7 @@
<string name="charging_sounds_title" msgid="5070437987230894287">"Zvukovi i vibracija punjenja"</string>
<string name="docking_sounds_title" msgid="2573137471605541366">"Zvukovi priključivanja"</string>
<string name="touch_sounds_title" msgid="165237488496165652">"Zvukovi dodirivanja"</string>
- <string name="vibrate_on_touch_title" msgid="6360155469279157684">"Vibracija za dodir"</string>
+ <string name="vibrate_on_touch_title" msgid="6360155469279157684">"Vibracija pri dodirivanju"</string>
<string name="vibrate_on_touch_summary" msgid="5504424764028676043">"Haptičke povratne informacije za dodir, tipkovnicu i više"</string>
<string name="dock_audio_media_title" msgid="1859521680502040781">"Priključna stanica reproducira"</string>
<string name="dock_audio_media_disabled" msgid="4300752306178486302">"Sve zvukove"</string>
@@ -3273,7 +3275,7 @@
<string name="zen_mode_button_turn_on" msgid="1097964136225943415">"Uključi sada"</string>
<string name="zen_mode_button_turn_off" msgid="3990967728457149454">"Odmah isključi"</string>
<string name="zen_mode_settings_dnd_manual_end_time" msgid="4307574188962071429">"Način Ne uznemiravaj uključen je do <xliff:g id="FORMATTED_TIME">%s</xliff:g>"</string>
- <string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"Način Ne ometaj ostat će uključen dok ga ne isključite"</string>
+ <string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"Način Ne uznemiravaj ostat će uključen dok ga ne isključite"</string>
<string name="zen_mode_settings_dnd_automatic_rule" msgid="2843297614114625408">"Raspored <xliff:g id="RULE_NAME">%s</xliff:g> automatski je uključio Ne uznemiravaj"</string>
<string name="zen_mode_settings_dnd_automatic_rule_app" msgid="5103454923160912313">"Način Ne uznemiravaj automatski je uključila aplikacija (<xliff:g id="APP_NAME">%s</xliff:g>)"</string>
<string name="zen_mode_settings_dnd_custom_settings_footer" msgid="6335108298640066560">"Način Ne uznemiravaj uključen je za <xliff:g id="RULE_NAMES">%s</xliff:g> uz prilagođene postavke."</string>
@@ -3325,9 +3327,9 @@
<string name="sound_work_settings" msgid="4140215240360927923">"Zvukovi radnog profila"</string>
<string name="work_use_personal_sounds_title" msgid="531727195073003599">"Upotreba zvuka osobnog profila"</string>
<string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"Zvukovi su isti za radni i osobni profil"</string>
- <string name="work_ringtone_title" msgid="5499360583947410224">"Melodija zvona radnog telefona"</string>
- <string name="work_notification_ringtone_title" msgid="8059159087214025757">"Zadani zvuk radne obavijesti"</string>
- <string name="work_alarm_ringtone_title" msgid="5328487181385375130">"Zadani zvuk radnog alarma"</string>
+ <string name="work_ringtone_title" msgid="5499360583947410224">"Melodija zvona poslovnog telefona"</string>
+ <string name="work_notification_ringtone_title" msgid="8059159087214025757">"Zadani zvuk poslovne obavijesti"</string>
+ <string name="work_alarm_ringtone_title" msgid="5328487181385375130">"Zadani zvuk poslovnog alarma"</string>
<string name="work_sound_same_as_personal" msgid="7728560881697159758">"Isto kao osobni profil"</string>
<string name="work_sync_dialog_title" msgid="4799120971202956837">"Zamijeniti zvukove?"</string>
<string name="work_sync_dialog_yes" msgid="2110726233746476066">"Zamijeni"</string>
@@ -3338,7 +3340,7 @@
<string name="other_sound_category_preference_title" msgid="2045757472469840859">"Ostali zvukovi i vibracije"</string>
<string name="configure_notification_settings" msgid="291914315140851270">"Obavijesti"</string>
<string name="recent_notifications" msgid="8125865995065032049">"Nedavno poslano"</string>
- <string name="recent_notifications_see_all_title" msgid="4089007770442871469">"Prikaži sve u posljednjih 7 dana"</string>
+ <string name="recent_notifications_see_all_title" msgid="4089007770442871469">"Pogledajte sve u posljednjih 7 dana"</string>
<string name="advanced_section_header" msgid="984680389373090015">"Dodatne postavke"</string>
<string name="profile_section_header" msgid="5471479005472037417">"Obavijesti s radnog profila"</string>
<string name="asst_capability_prioritizer_title" msgid="3488284760645922160">"Automatsko određivanje prioriteta za obavijesti"</string>
@@ -3363,12 +3365,12 @@
<string name="notification_pulse_title" msgid="4861418327614907116">"Trepereće svjetlo"</string>
<string name="lock_screen_notifications_title" msgid="6889072265118747835">"Na zaključanom zaslonu"</string>
<string name="locked_work_profile_notification_title" msgid="8307025804986190658">"Kad je radni profil zaključan"</string>
- <string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"Prikaži sav sadržaj obavijesti"</string>
+ <string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"Prikazuje se cijeli sadržaj obavijesti"</string>
<string name="lock_screen_notifications_summary_hide" msgid="3668806866535260143">"Sakrij osjetljiv sadržaj"</string>
- <string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"Uopće ne prikazuj obavijesti"</string>
+ <string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"Obavijesti se ne prikazuju"</string>
<string name="lock_screen_notifications_interstitial_message" msgid="4230189215124387818">"Kako želite da se prikazuju obavijesti kad je uređaj zaključan?"</string>
<string name="lock_screen_notifications_interstitial_title" msgid="2832587379332443505">"Obavijesti"</string>
- <string name="lock_screen_notifications_summary_show_profile" msgid="8908775469657073273">"Prikaži sav sadržaj obavijesti radnog profila"</string>
+ <string name="lock_screen_notifications_summary_show_profile" msgid="8908775469657073273">"Prikazuje se cijeli sadržaj obavijesti radnog profila"</string>
<string name="lock_screen_notifications_summary_hide_profile" msgid="7898086300511010591">"Sakrij osjetljiv sadržaj s posla"</string>
<string name="lock_screen_notifications_interstitial_message_profile" msgid="3324187664458600354">"Kako želite da se prikazuju obavijesti profila kada je uređaj zaključan?"</string>
<string name="lock_screen_notifications_interstitial_title_profile" msgid="4043621508889929254">"Obavijesti profila"</string>
@@ -3468,7 +3470,7 @@
<string name="notification_content_block_summary" msgid="2743896875255591743">"Nikad ne prikazuj obavijesti na zaslonu obavijesti ili na perifernim uređajima"</string>
<string name="notification_badge_title" msgid="8989086619255666442">"Dopusti točku obavijesti"</string>
<string name="notification_channel_badge_title" msgid="8228215248332054612">"Prikaži točku obavijesti"</string>
- <string name="app_notification_override_dnd_title" msgid="1757042206738172601">"Nadjačaj Ne ometaj"</string>
+ <string name="app_notification_override_dnd_title" msgid="1757042206738172601">"Nadjačaj način rada Ne uznemiravaj"</string>
<string name="app_notification_override_dnd_summary" msgid="3152957611171210980">"Dopusti obavijesti u načinu Ne ometaj kad je postavljen na \"Samo prioritetno\""</string>
<string name="app_notification_visibility_override_title" msgid="2349335170165637672">"Na zaključanom zaslonu"</string>
<string name="app_notification_row_banned" msgid="2079325338122151677">"Blokirano"</string>
@@ -3751,8 +3753,8 @@
<string name="process_format" msgid="8575347150598564509">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="COUNT">%2$d</xliff:g>)"</string>
<string name="high_power_apps" msgid="2518319744362028920">"Optimizacija baterije"</string>
<string name="additional_battery_info" msgid="6877663897819271203">"Upozorenja o upotrebi"</string>
- <string name="show_all_apps" msgid="5442552004569634846">"Prikaži potpunu upotrebu uređaja"</string>
- <string name="hide_extra_apps" msgid="6798261081113299441">"Prikaži upotrebu aplikacije"</string>
+ <string name="show_all_apps" msgid="5442552004569634846">"Prikaži ukupnu potrošnju uređaja"</string>
+ <string name="hide_extra_apps" msgid="6798261081113299441">"Prikaži potrošnju aplikacija"</string>
<plurals name="power_high_usage_summary" formatted="false" msgid="4658343710126205199">
<item quantity="one"><xliff:g id="NUMBER">%2$d</xliff:g> aplikacija ne ponaša se na uobičajen način</item>
<item quantity="few"><xliff:g id="NUMBER">%2$d</xliff:g> aplikacije ne ponašaju se na uobičajen način</item>
@@ -3930,7 +3932,7 @@
<string name="backup_disabled" msgid="6941165814784765643">"Sigurnosno kopiranje onemogućeno"</string>
<string name="android_version_summary" msgid="2192751442789395445">"Ažuriran na Android <xliff:g id="VERSION">%1$s</xliff:g>"</string>
<string name="android_version_pending_update_summary" msgid="3554543810520655076">"Dostupno je ažuriranje"</string>
- <string name="disabled_by_policy_title" msgid="1238318274952958846">"Radnja nije dopuštena."</string>
+ <string name="disabled_by_policy_title" msgid="1238318274952958846">"Radnja nije dopuštena"</string>
<string name="disabled_by_policy_title_adjust_volume" msgid="7094547090629203316">"Glasnoća se ne može promijeniti"</string>
<string name="disabled_by_policy_title_outgoing_calls" msgid="3805836913095496278">"Pozivanje nije dopušteno"</string>
<string name="disabled_by_policy_title_sms" msgid="1453236584236681105">"SMS nije dopušten"</string>
@@ -3956,7 +3958,7 @@
<string name="condition_battery_summary" msgid="1236078243905690620">"Značajke su ograničene"</string>
<string name="condition_cellular_title" msgid="6605277435894307935">"Mobilni su podaci isključeni"</string>
<string name="condition_cellular_summary" msgid="3607459310548343777">"Internet je dostupan samo putem Wi‑Fija"</string>
- <string name="condition_bg_data_title" msgid="184684435298857712">"Štednja podat. prometa"</string>
+ <string name="condition_bg_data_title" msgid="184684435298857712">"Štednja podatkovnog prometa"</string>
<string name="condition_bg_data_summary" msgid="5194942860807136682">"Značajke su ograničene"</string>
<string name="condition_work_title" msgid="9046811302347490371">"Radni je profil isključen"</string>
<string name="condition_work_summary" msgid="5586134491975748565">"Za aplikacije i obavijesti"</string>
@@ -4049,8 +4051,8 @@
<string name="no_carrier_update_now_text" msgid="4405472895804759042">"Upravo je ažurirano"</string>
<string name="launch_mdp_app_text" msgid="9186559496664208252">"Prikaži plan"</string>
<string name="launch_wifi_text" msgid="317820210431682605">"Prikaz pojedinosti"</string>
- <string name="data_saver_title" msgid="7903308134514179256">"Štednja podat. prometa"</string>
- <string name="unrestricted_data_saver" msgid="9139401849550738720">"Neograničena potrošnja"</string>
+ <string name="data_saver_title" msgid="7903308134514179256">"Štednja podatkovnog prometa"</string>
+ <string name="unrestricted_data_saver" msgid="9139401849550738720">"Neograničeni podaci"</string>
<string name="restrict_background_blacklisted" msgid="7158991683849067124">"Pozadinski su podaci isključeni"</string>
<string name="data_saver_on" msgid="7281809065420480881">"Uključeno"</string>
<string name="data_saver_off" msgid="7439439787358504018">"Isključeno"</string>
@@ -4074,7 +4076,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Spriječi unos odgovora ili drugog teksta u obavijesti kada je uređaj zaključan"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Zadana provjera pravopisa"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Odabir provjere pravopisa"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Upotreba provjere pravopisa"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Upotreba provjere pravopisa"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Nije odabrano"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(ništa)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4116,7 +4118,7 @@
<string name="display_cutout_emulation_keywords" msgid="6795671536772871439">"obrezana slika za zaslon, urez"</string>
<string name="overlay_option_device_default" msgid="165508753381657697">"Zadana postavka uređaja"</string>
<string name="overlay_toast_failed_to_apply" msgid="5692251825129250040">"Primjena preklapanja nije uspjela"</string>
- <string name="special_access" msgid="1453926335914696206">"Pristup aplikacija"</string>
+ <string name="special_access" msgid="1453926335914696206">"Poseban pristup za aplikacije"</string>
<plurals name="special_access_summary" formatted="false" msgid="5182092345063909346">
<item quantity="one"><xliff:g id="COUNT">%d</xliff:g> aplikacija može upotrebljavati neograničene podatke</item>
<item quantity="few"><xliff:g id="COUNT">%d</xliff:g> aplikacije mogu upotrebljavati neograničene podatke</item>
@@ -4171,7 +4173,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Upravitelj pohrane uklanja fotografije i videozapise s uređaja za koje je napravljena sigurnosna kopija kako bi oslobodio prostor za pohranu."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Ukloni fotografije i videozapise"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Upravitelj pohrane"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Upotreba upravitelja pohrane"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Upotreba upravitelja pohrane"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatski"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Priručnik"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Oslobodi prostor odmah"</string>
@@ -4203,8 +4205,8 @@
<string name="ambient_display_tap_screen_title" product="tablet" msgid="6434521782016864148">"Dodirnite da biste provjerili tablet"</string>
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"Dodirnite da biste provjerili uređaj"</string>
<string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"Da biste pogledali vrijeme, obavijesti i druge informacije, dodirnite zaslon."</string>
- <string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"Otisak prsta za obavijesti"</string>
- <string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"Pokret za otisak prsta"</string>
+ <string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"Prelazak prstom preko senzora za obavijesti"</string>
+ <string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"Prelazak prstom preko senzora"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"Da biste pogledali obavijesti, prijeđite prstom prema dolje po senzoru otiska prsta na stražnjoj strani telefona."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"Da biste pogledali obavijesti, prijeđite prstom prema dolje po senzoru otiska prsta na stražnjoj strani tableta."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="7950264130913070035">"Da biste pogledali obavijesti, prijeđite prstom prema dolje po senzoru otiska prsta na stražnjoj strani uređaja."</string>
@@ -4316,7 +4318,7 @@
<string name="storage_other_apps" msgid="3202407095387420842">"Ostale aplikacije"</string>
<string name="storage_files" msgid="2087824267937487880">"Datoteke"</string>
<string name="storage_size_large_alternate" msgid="1317796542509105857">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" "<font size="20">"<xliff:g id="UNIT">^2</xliff:g>"</font></small>""</string>
- <string name="storage_volume_total" msgid="5021484171514159913">"Upotrijebljeno od <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
+ <string name="storage_volume_total" msgid="5021484171514159913">"iskorišteno od <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
<string name="storage_percent_full" msgid="6924662861545958442">"upot."</string>
<string name="clear_instant_app_data" msgid="3673669086522890405">"Izbriši podatke aplikacije"</string>
<string name="clear_instant_app_confirmation" msgid="1778553115373698061">"Želite li ukloniti tu instant aplikaciju?"</string>
@@ -4407,7 +4409,7 @@
<string name="prevent_ringing_option_vibrate_summary" msgid="7961818570574683926">"Uključeno (vibracija)"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3509459199090688328">"Uključi (isključi zvuk)"</string>
<string name="prevent_ringing_option_none_summary" msgid="5152618221093037451">"Isključi"</string>
- <string name="pref_title_network_details" msgid="3971074015034595956">"Pojedinosti o mreži"</string>
+ <string name="pref_title_network_details" msgid="3971074015034595956">"Podaci o mreži"</string>
<string name="about_phone_device_name_warning" msgid="9088572775969880106">"Naziv vašeg uređaja vidljiv je aplikacijama na vašem telefonu. Mogu ga vidjeti i drugi ljudi kada se povežete s Bluetooth uređajima ili postavite Wi-Fi žarišnu točku."</string>
<string name="devices_title" msgid="4768432575951993648">"Uređaji"</string>
<string name="homepage_all_settings" msgid="3201220879559136116">"Sve postavke"</string>
diff --git a/tests/CarDeveloperOptions/res/values-hu/arrays.xml b/tests/CarDeveloperOptions/res/values-hu/arrays.xml
index c735ccf..c3578f9 100644
--- a/tests/CarDeveloperOptions/res/values-hu/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-hu/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"futtatás a háttérben"</item>
<item msgid="6423861043647911030">"kisegítő lehetőségek – hangerő"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Tartózkodási hely"</item>
+ <item msgid="6656077694190491067">"Tartózkodási hely"</item>
+ <item msgid="8790228218278477369">"Tartózkodási hely"</item>
+ <item msgid="7836406246005211990">"Rezgés"</item>
+ <item msgid="3951439024549922598">"Névjegyek olvasása"</item>
+ <item msgid="8802152411647068">"Névjegyek módosítása"</item>
+ <item msgid="229544934599698735">"Hívásnapló olvasása"</item>
+ <item msgid="7396102294405899613">"Hívásnapló módosítása"</item>
+ <item msgid="3597797992398484655">"Naptár olvasása"</item>
+ <item msgid="2705975774250907343">"Naptár módosítása"</item>
+ <item msgid="4668747371441932697">"Tartózkodási hely"</item>
+ <item msgid="1487578921720243646">"Értesítés közzététele"</item>
+ <item msgid="4636080349724146638">"Hely"</item>
+ <item msgid="673510900286463926">"Telefonálás"</item>
+ <item msgid="542083422784609790">"SMS/MMS olvasása"</item>
+ <item msgid="1033780373029588436">"SMS/MMS írása"</item>
+ <item msgid="5647111115517787488">"SMS/MMS fogadása"</item>
+ <item msgid="8591105601108455893">"SMS/MMS fogadása"</item>
+ <item msgid="7730995008517841903">"SMS/MMS fogadása"</item>
+ <item msgid="2613033109026626086">"SMS/MMS fogadása"</item>
+ <item msgid="3037159047591081136">"SMS/MMS küldése"</item>
+ <item msgid="4726682243833913568">"SMS/MMS olvasása"</item>
+ <item msgid="6555678522277865572">"SMS/MMS írása"</item>
+ <item msgid="6981734935578130884">"Beállítások módosítása"</item>
+ <item msgid="8705854389991425629">"Megjelenítés felül"</item>
+ <item msgid="5861356020344153651">"Hozzáférési értesítések"</item>
+ <item msgid="78432174621628659">"Kamera"</item>
+ <item msgid="3986116419882154794">"Hanganyag rögzítése"</item>
+ <item msgid="4516840825756409490">"Hanganyag lejátszása"</item>
+ <item msgid="6811712502798183957">"Vágólap olvasása"</item>
+ <item msgid="2780369012602289114">"Vágólap módosítása"</item>
+ <item msgid="2331359440170850868">"Médiagombok"</item>
+ <item msgid="6133599737122751231">"Audiofókusz"</item>
+ <item msgid="6844485713404805301">"Hangerő-szabályozó"</item>
+ <item msgid="1600379420669104929">"Beszéd hangereje"</item>
+ <item msgid="6296768210470214866">"Csengés hangereje"</item>
+ <item msgid="510690696071629241">"Média hangereje"</item>
+ <item msgid="406861638631430109">"Ébresztés hangereje"</item>
+ <item msgid="4715864795872233884">"Értesítés hangereje"</item>
+ <item msgid="2311478519251301183">"Bluetooth hangereje"</item>
+ <item msgid="5133991377896747027">"Ébren tartás"</item>
+ <item msgid="2464189519136248621">"Hely"</item>
+ <item msgid="2062677934050803037">"Tartózkodási hely"</item>
+ <item msgid="1735171933192715957">"Használati statisztikák lekérése"</item>
+ <item msgid="1014093788778383554">"Mikrofon némítása és a némítás feloldása"</item>
+ <item msgid="4199297950608622850">"Üzenet megjelenítése"</item>
+ <item msgid="2527962435313398821">"Médiatartalom kivetítése"</item>
+ <item msgid="5117506254221861929">"VPN aktiválása"</item>
+ <item msgid="8291198322681891160">"Háttérkép írása"</item>
+ <item msgid="7106921284621230961">"Segédlet a szerkezethez"</item>
+ <item msgid="4496533640894624799">"Segédlet a képernyőképhez"</item>
+ <item msgid="2598847264853993611">"Telefonállapot olvasása"</item>
+ <item msgid="9215610846802973353">"Hangposta hozzáadása"</item>
+ <item msgid="9186411956086478261">"SIP használata"</item>
+ <item msgid="6884763100104539558">"Kimenő hívás feldolgozása"</item>
+ <item msgid="125513972170580692">"Ujjlenyomat"</item>
+ <item msgid="2556071024281275619">"Testérzékelők"</item>
+ <item msgid="617168514928339387">"Cellán belüli üzenetszórás olvasása"</item>
+ <item msgid="7134693570516523585">"Helyimitálás"</item>
+ <item msgid="7224489175375229399">"Tárhely olvasása"</item>
+ <item msgid="8472735063903258202">"Tárhely írása"</item>
+ <item msgid="4069276819909595110">"Képernyő bekapcsolása"</item>
+ <item msgid="1228338896751121025">"Fiókok beszerzése"</item>
+ <item msgid="3181581793459233672">"Futtatás a háttérben"</item>
+ <item msgid="2340936043025374076">"Kisegítő lehetőségek – hangerő"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Rövid"</item>
<item msgid="4816511817309094890">"Közepes"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Soha nem engedélyezem"</item>
<item msgid="8184570120217958741">"Engedélyezés mindig"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normál"</item>
+ <item msgid="5101233285497327432">"Közepes"</item>
+ <item msgid="1555861583162930714">"Alacsony"</item>
+ <item msgid="1719683776264798117">"Kritikus"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normál"</item>
+ <item msgid="6107138933849816768">"Mérsékelt"</item>
+ <item msgid="182695359839047859">"Alacsony"</item>
+ <item msgid="8577246509202964244">"Kritikus"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Állandó"</item>
<item msgid="167418068739176448">"Leggyakoribb tevékenység"</item>
diff --git a/tests/CarDeveloperOptions/res/values-hu/strings.xml b/tests/CarDeveloperOptions/res/values-hu/strings.xml
index d211ad9..27c9e9b 100644
--- a/tests/CarDeveloperOptions/res/values-hu/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-hu/strings.xml
@@ -58,7 +58,7 @@
<string name="radioInfo_service_out" msgid="8460363463722476510">"Nem működik"</string>
<string name="radioInfo_service_emergency" msgid="7674989004735662599">"Csak segélyhívások"</string>
<string name="radioInfo_service_off" msgid="1873939869994136791">"Rádió kikapcsolva"</string>
- <string name="radioInfo_roaming_in" msgid="7059350234710947417">"Barangolás"</string>
+ <string name="radioInfo_roaming_in" msgid="7059350234710947417">"Roaming"</string>
<string name="radioInfo_roaming_not" msgid="7733269160603599835">"Nem barangol"</string>
<string name="radioInfo_phone_idle" msgid="1893851191227617344">"Tétlen"</string>
<string name="radioInfo_phone_ringing" msgid="5587975376222853265">"Csengés"</string>
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Kicsinyítheti vagy nagyíthatja a képernyőn megjelenő szöveget."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Kisebb"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Nagyobb"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Árvíztűrő tükörfúrógép"</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Mintaszöveg"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Óz, a csodák csodája"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"11. fejezet: A csodálatos Smaragdváros"</string>
@@ -208,7 +207,7 @@
<string name="proxy_error_empty_port" msgid="8034561724923076215">"Ki kell töltenie a port mezőt."</string>
<string name="proxy_error_empty_host_set_port" msgid="8471455809508588255">"A port mezőnek is üresnek kell maradnia, ha a gazdagép mező üres."</string>
<string name="proxy_error_invalid_port" msgid="4046559920586100637">"A megadott port nem érvényes."</string>
- <string name="proxy_warning_limited_support" msgid="9026539134219095768">"A HTTP proxyt a böngésző használja, ám más alkalmazások nem használhatják."</string>
+ <string name="proxy_warning_limited_support" msgid="9026539134219095768">"A HTTP proxyt a böngésző használja, de más alkalmazások nem használhatják."</string>
<string name="proxy_url_title" msgid="882042361706435904">"PAC URL: "</string>
<string name="radio_info_dl_kbps" msgid="2903778264453410272">"Letöltési sávszélesség (kbps):"</string>
<string name="radio_info_ul_kbps" msgid="3802245899811732716">"Feltöltési sávszélesség (kbps):"</string>
@@ -217,7 +216,7 @@
<string name="radio_info_cell_info_refresh_rate" msgid="3557422342215875913">"Cellainformáció frissítési gyakorisága:"</string>
<string name="radio_info_cellinfo_label" msgid="632796561627452215">"Minden cellamérési információ:"</string>
<string name="radio_info_gprs_service_label" msgid="7926626443442993242">"Adatszolgáltatás:"</string>
- <string name="radio_info_roaming_label" msgid="3131949337031835485">"Barangolás:"</string>
+ <string name="radio_info_roaming_label" msgid="3131949337031835485">"Roaming:"</string>
<string name="radio_info_imei_label" msgid="7300156592358133405">"IMEI:"</string>
<string name="radio_info_call_redirect_label" msgid="2679891718182753061">"Hívásátirányítás:"</string>
<string name="radio_info_ppp_resets_label" msgid="2785162965440312941">"PPP-visszaállítások száma a legutolsó rendszerindítás óta:"</string>
@@ -310,14 +309,14 @@
<string name="cellular_data_summary" msgid="8817717603450318646">"Mobiladat-forgalom engedélyezése"</string>
<string name="allow_data_usage_title" msgid="5381624105803294315">"Adatforgalom barangoláskor"</string>
<string name="roaming" msgid="8860308342135146004">"Roaming"</string>
- <string name="roaming_enable" msgid="2108142024297441116">"Csatlakozás adatszolgáltatásokhoz barangolás során"</string>
- <string name="roaming_disable" msgid="1915440242079953809">"Csatlakozás adatszolgáltatásokhoz barangolás során"</string>
+ <string name="roaming_enable" msgid="2108142024297441116">"Csatlakozás adatszolgáltatásokhoz roaming során"</string>
+ <string name="roaming_disable" msgid="1915440242079953809">"Csatlakozás adatszolgáltatásokhoz roaming során"</string>
<string name="roaming_reenable_message" msgid="8388505868655113258">"Megszakadt az adatkapcsolat, mert elhagyta az otthoni hálózatot, és az adatbarangolás nincs bekapcsolva."</string>
<string name="roaming_turn_it_on_button" msgid="4370846458830537578">"Bekapcsolás"</string>
<string name="roaming_warning" msgid="5488050911277592868">"Lehet, hogy jelentős összeget számítanak fel érte."</string>
<string name="roaming_warning_multiuser" product="tablet" msgid="7090388691615686893">"Az adatbarangolás engedélyezése jelentős díjnövekedéssel járhat.\n\nEz a beállítás minden felhasználót érint ezen a táblagépen."</string>
<string name="roaming_warning_multiuser" product="default" msgid="6999819541078827556">"Az adatbarangolás engedélyezése jelentős díjnövekedéssel járhat.\n\nEz a beállítás minden felhasználót érint ezen a telefonon."</string>
- <string name="roaming_reenable_title" msgid="6985082191178297921">"Engedélyezi az adatbarangolást?"</string>
+ <string name="roaming_reenable_title" msgid="6985082191178297921">"Engedélyezi az adatroamingot?"</string>
<string name="networks" msgid="3073876464102136771">"Szolgáltatóválasztás"</string>
<string name="sum_carrier_select" msgid="8964744180598499121">"Válassza ki a hálózat üzemeltetőjét"</string>
<string name="date_and_time_settings_title" msgid="7827088656940910631">"Dátum és idő"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Profiladatok"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Fiókok"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Tartózkodási hely"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Helyadatok használata"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Helyadatok használata"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Ki"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Be – <xliff:g id="COUNT_1">%1$d</xliff:g> alkalmazás hozzáférhet a helyadatokhoz</item>
@@ -411,10 +410,10 @@
<string name="face_add_max" msgid="8870899421165189413">"Legfeljebb <xliff:g id="COUNT">%d</xliff:g> arcot adhat hozzá"</string>
<string name="face_intro_error_max" msgid="4024147799079828937">"Elérte a hozzáadható arcok maximális számát"</string>
<string name="face_intro_error_unknown" msgid="3241592604198351134">"Nem lehet további arcokat hozzáadni"</string>
- <string name="security_settings_face_enroll_error_dialog_title" msgid="3933492758701563051">"A regisztráció nincs kész"</string>
+ <string name="security_settings_face_enroll_error_dialog_title" msgid="3933492758701563051">"A rögzítés nincs kész"</string>
<string name="security_settings_face_enroll_dialog_ok" msgid="1078348922734845090">"OK"</string>
<string name="security_settings_face_enroll_error_timeout_dialog_message" msgid="4917894418448325405">"Letelt az arcregisztráció időkorlátja. Próbálja újra."</string>
- <string name="security_settings_face_enroll_error_generic_dialog_message" msgid="5160473187142616862">"Az arc regisztrálása sikertelen volt."</string>
+ <string name="security_settings_face_enroll_error_generic_dialog_message" msgid="5160473187142616862">"Az arc rögzítése sikertelen volt."</string>
<string name="security_settings_face_enroll_finish_title" msgid="6800717857394410769">"Minden beállítva. Jónak tűnik."</string>
<string name="security_settings_face_enroll_done" msgid="5409739233373490971">"Kész"</string>
<string name="security_settings_face_settings_use_face_category" msgid="1586532139528115416">"Arc használata erre:"</string>
@@ -488,8 +487,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="4111289529758845926">"Kész"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"Hoppá! Az nem az érzékelő"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"Érintse meg a hátsó érzékelőt mutatóujjával."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"A regisztráció nincs kész"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Letelt az ujjlenyomat-regisztráció időkorlátja. Próbálja újra."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"A rögzítés nincs kész"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Letelt az ujjlenyomat-rögzítés időkorlátja. Próbálja újra."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"Az ujjlenyomat regisztrációja nem sikerült. Próbálja újra, vagy próbálkozzon egy másik ujjával."</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"Még egy hozzáadása"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"Következő"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Wi-Fi bekapcsolása"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Wi-Fi használata"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Wi-Fi használata"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi-Fi beállítások"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Vezeték nélküli hozzáférési pontok beállítása és kezelése"</string>
@@ -917,7 +916,7 @@
<string name="passpoint_content" msgid="340527524510304327">"A(z) <xliff:g id="NAME">%1$s</xliff:g> hitelesítési adatai"</string>
<string name="wifi_eap_method" msgid="3752116941487485859">"EAP módszer"</string>
<string name="please_select_phase2" msgid="5848080896810435677">"Hitelesítés 2. fázisa"</string>
- <string name="wifi_eap_ca_cert" msgid="1496395241849383785">"CA tanúsítvány"</string>
+ <string name="wifi_eap_ca_cert" msgid="1496395241849383785">"CA-tanúsítvány"</string>
<string name="wifi_eap_domain" msgid="3298302320003640130">"Domain"</string>
<string name="wifi_eap_user_cert" msgid="6786839531765719173">"Felhasználói tanúsítvány"</string>
<string name="wifi_eap_identity" msgid="5280457017705738773">"Azonosság"</string>
@@ -936,9 +935,9 @@
<string name="wifi_privacy_settings" msgid="4462092795794247809">"Adatvédelem"</string>
<string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"Véletlenszerű MAC-cím"</string>
<string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"Eszköz hozzáadása"</string>
- <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"Irányítsa a QR-kódot az alábbi panel közepéhez az eszköznek a következőhöz való hozzáadásához: <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"Irányítsa a QR-kódot az alábbi panel közepére, hogy hozzáadja az eszközt a(z) <xliff:g id="SSID">%1$s</xliff:g> hálózathoz"</string>
<string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"QR-kód beolvasása"</string>
- <string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"Irányítsa a QR-kódot az alábbi panel közepéhez a következőhöz való csatlakozáshoz: <xliff:g id="SSID">%1$s</xliff:g>"</string>
+ <string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"Irányítsa a QR-kódot az alábbi panel közepére, hogy hozzáadja az eszközt a(z) <xliff:g id="SSID">%1$s</xliff:g> hálózathoz"</string>
<string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"Csatlakozzon Wi-Fi-hálózathoz QR-kód beolvasásával"</string>
<string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Wi‑Fi megosztása"</string>
<string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"A(z) „<xliff:g id="SSID">%1$s</xliff:g>” hálózathoz való csatlakozás érdekében olvassa be ezt a QR-kódot, és ossza meg a jelszót"</string>
@@ -1085,10 +1084,10 @@
<string name="wifi_calling_suggestion_summary" msgid="198402175473169630">"Kapcsolja be a Wi-Fi-hívást a lefedettség növeléséhez"</string>
<string name="wifi_calling_mode_title" msgid="3350624859819920176">"Híváspreferencia"</string>
<string name="wifi_calling_mode_dialog_title" msgid="652534533091724333">"Híváspreferencia"</string>
- <string name="wifi_calling_roaming_mode_title" msgid="2059151080231602753">"Barangolási beállítás"</string>
+ <string name="wifi_calling_roaming_mode_title" msgid="2059151080231602753">"Roaming beállítása"</string>
<!-- no translation found for wifi_calling_roaming_mode_summary (620031651074963360) -->
<skip />
- <string name="wifi_calling_roaming_mode_dialog_title" msgid="4018579440109122790">"Barangolási beállítás"</string>
+ <string name="wifi_calling_roaming_mode_dialog_title" msgid="4018579440109122790">"Roaming beállítása"</string>
<string-array name="wifi_calling_mode_choices">
<item msgid="7952573372663890448">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="2552412793005571845">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Mobil"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Mobilhálózat használata, ha nem áll rendelkezésre Wi-Fi-hálózat"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Wi‑Fi használata, ha nem áll rendelkezésre mobilhálózat"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Hívás Wi-Fi-n. Ha a Wi-Fi kapcsolat megszűnik, a hívás véget ér."</string>
@@ -1213,7 +1215,7 @@
<string name="night_display_auto_mode_title" msgid="8493573087102481588">"Ütemezés"</string>
<string name="night_display_auto_mode_never" msgid="2897444637217807088">"Nincs"</string>
<string name="night_display_auto_mode_custom" msgid="1400891076453963151">"Adott időpontban kapcsol be"</string>
- <string name="night_display_auto_mode_twilight" msgid="4000162110017520674">"Napnyugtától napkeltéig kapcsol be"</string>
+ <string name="night_display_auto_mode_twilight" msgid="4000162110017520674">"Napnyugtától napkeltéig"</string>
<string name="night_display_start_time_title" msgid="1069255169673371077">"Kezdés ideje"</string>
<string name="night_display_end_time_title" msgid="2760793157124245911">"Befejezés ideje"</string>
<string name="night_display_status_title" msgid="1727020934735770319">"Állapot"</string>
@@ -1308,7 +1310,7 @@
<string name="system_update_settings_list_item_title" msgid="1907497454722790033">"Rendszerfrissítések"</string>
<string name="system_update_settings_list_item_summary" msgid="3497456690691907873"></string>
<string name="firmware_version" msgid="547095584029938749">"Android verziója"</string>
- <string name="security_patch" msgid="483709031051932208">"Androidos biztonsági hibajavító csomag szintje"</string>
+ <string name="security_patch" msgid="483709031051932208">"Androidos biztonsági hibajavító csomag"</string>
<string name="model_info" msgid="1729765474260797594">"Modell"</string>
<string name="model_summary" msgid="8781425868254352168">"Modell: %1$s"</string>
<string name="hardware_info" msgid="174270144950621815">"Modell és hardver"</string>
@@ -1353,7 +1355,7 @@
<string name="status_esim_id" msgid="9201767073386770286">"EID"</string>
<string name="status_service_state" msgid="4406215321296496234">"Szolgáltatás állapota"</string>
<string name="status_signal_strength" msgid="4302597886933728789">"Jelerősség"</string>
- <string name="status_roaming" msgid="5191044997355099561">"Barangolás"</string>
+ <string name="status_roaming" msgid="5191044997355099561">"Roaming"</string>
<string name="status_operator" msgid="6017986100643755390">"Hálózat"</string>
<string name="status_wifi_mac_address" msgid="3868452167971295995">"Wi-Fi MAC-címe"</string>
<string name="status_bt_address" msgid="460568179311735657">"Bluetooth-cím"</string>
@@ -1546,7 +1548,7 @@
<string name="apn_auth_type_pap_chap" msgid="2977833804460109203">"PAP vagy CHAP"</string>
<string name="apn_type" msgid="6725346490902871146">"APN típusa"</string>
<string name="apn_protocol" msgid="1240197323563960912">"Hozzáférési pont protokollja"</string>
- <string name="apn_roaming_protocol" msgid="6913336248771263497">"Hozzáférési pont barangolási protokollja"</string>
+ <string name="apn_roaming_protocol" msgid="6913336248771263497">"Hozzáférési pont roamingprotokollja"</string>
<string name="carrier_enabled" msgid="1819916725305365581">"APN be-/kikapcsolása"</string>
<string name="carrier_enabled_summaryOn" msgid="6219221535461945771">"APN engedélyezve"</string>
<string name="carrier_enabled_summaryOff" msgid="4093019532796386622">"APN kikapcsolva"</string>
@@ -1687,7 +1689,7 @@
<string name="contributors_title" msgid="6800028420806884340">"Közreműködők"</string>
<string name="manual" msgid="5431859421432581357">"Útmutató"</string>
<string name="regulatory_labels" msgid="380968489247381025">"Szabályozási címkék"</string>
- <string name="safety_and_regulatory_info" msgid="7113766428000920132">"Biztonsági és az előírásokkal kapcsolatos útmutató"</string>
+ <string name="safety_and_regulatory_info" msgid="7113766428000920132">"Biztonsági és szabályozási útmutató"</string>
<string name="copyright_title" msgid="3847703367689932190">"Szerzői jog"</string>
<string name="license_title" msgid="7582145947873528540">"Licenc"</string>
<string name="terms_title" msgid="1804549588198223771">"Általános Szerződési Feltételek"</string>
@@ -2035,7 +2037,7 @@
<string name="accessibility_settings" msgid="9140621093888234485">"Kisegítő lehetőségek"</string>
<string name="accessibility_settings_title" msgid="1687226556576913576">"Kisegítő lehetőségek beállításai"</string>
<string name="accessibility_settings_summary" msgid="5742379519336396561">"Képernyőolvasók, megjelenítés, interakcióvezérlők"</string>
- <string name="vision_settings_title" msgid="7315352351051423944">"Látási beállítások"</string>
+ <string name="vision_settings_title" msgid="7315352351051423944">"Vizuális beállítások"</string>
<string name="vision_settings_description" msgid="3476589459009287332">"Eszközét saját igényeinek megfelelően testre szabhatja. Ezeket a kisegítő lehetőségeket később a Beállítások menüben módosíthatja."</string>
<string name="vision_settings_suggestion_title" msgid="7268661419110951128">"Betűméret módosítása"</string>
<string name="screen_reader_category_title" msgid="6300714148519645544">"Képernyőolvasók"</string>
@@ -2070,7 +2072,7 @@
<string name="accessibility_toggle_large_pointer_icon_title" msgid="9127905775116570565">"Nagy egérmutató"</string>
<string name="accessibility_disable_animations" msgid="8378441317115710009">"Animációk eltávolítása"</string>
<string name="accessibility_toggle_master_mono_title" msgid="899550848196702565">"Monó hang"</string>
- <string name="accessibility_toggle_master_mono_summary" msgid="3847052868469033235">"Csatornák kombinálása hang lejátszásakor"</string>
+ <string name="accessibility_toggle_master_mono_summary" msgid="3847052868469033235">"Csatornák egyesítése hang lejátszásakor"</string>
<string name="accessibility_toggle_master_balance_title" msgid="8723492001092647562">"Hangegyensúly"</string>
<string name="accessibility_toggle_master_balance_left_label" msgid="8531986342666527970">"Bal"</string>
<string name="accessibility_toggle_master_balance_right_label" msgid="7757024572140589558">"Jobb"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Értesítések rezgése"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Csengés rezgése"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Érintéses rezgés"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Szolgáltatás használata"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Színkorrekció használata"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Feliratok használata"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Szolgáltatás használata"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Színkorrekció használata"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Feliratok használata"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Tovább"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Hallókészülékek"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Nincs csatlakoztatva hallókészülék"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Bekapcsolás"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Akkumulátorkímélő mód használata"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Akkumulátorkímélő mód használata"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Automatikus bekapcsolás"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Soha"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"<xliff:g id="PERCENT">%1$s</xliff:g> töltöttségnél"</string>
@@ -2574,7 +2576,7 @@
<string name="sms_access_restriction_enabled" msgid="3006320256764718303">"Korlátozott SMS- és hívásnapló-hozzáférés"</string>
<string name="sms_access_restriction_enabled_summary" msgid="9011946580977780063">"Csak az alapértelmezett telefon- és üzenetküldő alkalmazások rendelkeznek SMS-ekhez és hívásnaplóhoz való hozzáféréssel"</string>
<string name="no_trust_agents" msgid="5757792915019113084">"Nincs elérhető trust agent komponens"</string>
- <string name="add_device_admin_msg" msgid="3573765823476931173">"Aktiválja az eszközrendszergazdai alkalmazást?"</string>
+ <string name="add_device_admin_msg" msgid="3573765823476931173">"Aktiválja a rendszergazdai alkalmazást?"</string>
<string name="add_device_admin" msgid="1621152410207260584">"Az eszközrendszergazdai alkalmazás aktiválása"</string>
<string name="device_admin_add_title" msgid="6097881332139146897">"Eszközrendszergazda"</string>
<string name="device_admin_warning" msgid="4421817419326480449">"A rendszergazdai alkalmazás aktiválása engedélyezi a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> alkalmazás számára a következő műveletek elvégzését:"</string>
@@ -2691,7 +2693,7 @@
<string name="data_usage_enable_mobile" msgid="7238385042860001374">"Mobiladatok"</string>
<string name="data_usage_enable_3g" msgid="3725838726334043367">"2G-3G adatforgalom"</string>
<string name="data_usage_enable_4g" msgid="8872517106293561179">"4G adatforgalom"</string>
- <string name="data_roaming_enable_mobile" msgid="5886394350890765947">"Barangolás"</string>
+ <string name="data_roaming_enable_mobile" msgid="5886394350890765947">"Roaming"</string>
<string name="data_usage_forground_label" msgid="8992577451178005406">"Előtér:"</string>
<string name="data_usage_background_label" msgid="8460891123904985128">"Háttér:"</string>
<string name="data_usage_app_settings" msgid="3276444867375694809">"Alkalmazásbeállítások"</string>
@@ -2745,7 +2747,7 @@
<string name="vpn_ipsec_identifier" msgid="1230238784830362888">"IPSec-azonosító"</string>
<string name="vpn_ipsec_secret" msgid="1531503910441962752">"Megosztott IPSec-kulcs"</string>
<string name="vpn_ipsec_user_cert" msgid="2762078384595366852">"IPSec felhasználói tanúsítvány"</string>
- <string name="vpn_ipsec_ca_cert" msgid="5537567128766402789">"IPSec CA tanúsítvány"</string>
+ <string name="vpn_ipsec_ca_cert" msgid="5537567128766402789">"IPSec CA-tanúsítvány"</string>
<string name="vpn_ipsec_server_cert" msgid="3066696943831527934">"IPSec-szervertanúsítvány"</string>
<string name="vpn_show_options" msgid="7672984921872882859">"Speciális beállítások megjelenítése"</string>
<string name="vpn_search_domains" msgid="8469394307693909080">"DNS-keresési domainek"</string>
@@ -2813,8 +2815,8 @@
<string name="credential_contains" msgid="483346955378412119">"A bejegyzés a következőket tartalmazza:"</string>
<string name="one_userkey" msgid="5349738921509013845">"egy felhasználói kulcs"</string>
<string name="one_usercrt" msgid="856282310586987313">"egy felhasználói tanúsítvány"</string>
- <string name="one_cacrt" msgid="4757720453112732485">"egy CA tanúsítvány"</string>
- <string name="n_cacrts" msgid="7539893176217891549">"%d CA tanúsítvány"</string>
+ <string name="one_cacrt" msgid="4757720453112732485">"egy CA-tanúsítvány"</string>
+ <string name="n_cacrts" msgid="7539893176217891549">"%d CA-tanúsítvány"</string>
<string name="user_credential_title" msgid="6237611303219831419">"Hitelesítési adatok"</string>
<string name="user_credential_removed" msgid="6243576567538844852">"A következő hitelesítési adatot törölte a rendszer: <xliff:g id="CREDENTIAL_NAME">%s</xliff:g>"</string>
<string name="user_credential_none_installed" msgid="4129252817676332368">"Nincsenek telepített felhasználói hitelesítési adatok"</string>
@@ -2923,7 +2925,7 @@
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"Kivéve, ha meg van nyitva egy másik alkalmazás a fizetéshez"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"Érintéses fizetésre alkalmas terminál esetén fizetés a következővel:"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"Fizetés a terminálnál"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Állítson be egy alkalmazást a fizetéshez. Ezután elég csak telefonja hátulját odatartani az érintés nélküli fizetést jelző szimbólummal ellátott terminálhoz."</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Állítson be egy alkalmazást a fizetéshez. Ezután elég csak telefonja hátulját odatartani az érintéses fizetést jelző szimbólummal ellátott terminálhoz."</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"Értem"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"Egyebek…"</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"Beállítja előnyben részesítettként?"</string>
@@ -3098,7 +3100,7 @@
<string name="keywords_assist_gesture_launch" msgid="2711433664837843513">"kézmozdulat"</string>
<string name="keywords_face_unlock" msgid="651615819291927262">"arc, feloldás, hitelesítés, bejelentkezés"</string>
<string name="keywords_imei_info" msgid="4325847870422053408">"imei, meid, min, prl-verzió, imei sv"</string>
- <string name="keywords_sim_status" msgid="3852088576719874387">"hálózat, mobilhálózat állapota, szolgáltatás állapota, jelerősség, mobilhálózat típusa, barangolás, iccid"</string>
+ <string name="keywords_sim_status" msgid="3852088576719874387">"hálózat, mobilhálózat állapota, szolgáltatás állapota, jelerősség, mobilhálózat típusa, roaming, iccid"</string>
<string name="keywords_model_and_hardware" msgid="2743197096210895251">"sorozatszám, hardververzió"</string>
<string name="keywords_android_version" msgid="4842749998088987740">"androidos biztonsági javítókészlet szintje, alapsáv verziója, kernel verziója"</string>
<string name="keywords_dark_ui_mode" msgid="1027966176887770318">"téma, világos, sötét, mód"</string>
@@ -3709,7 +3711,7 @@
<string name="high_power_off" msgid="5906679734326490426">"Akkumulátorhasználat optimalizálása"</string>
<string name="high_power_system" msgid="739584574711292753">"Nincs lehetőség akkumulátoroptimalizálásra"</string>
<string name="high_power_desc" msgid="333756885680362741">"Ne vonatkozzon rá az akkumulátoroptimalizálás. Így az akkumulátor gyorsabban lemerülhet."</string>
- <string name="high_power_prompt_title" msgid="2805745781720454052">"Engedélyezi az alkalmazás számára, hogy mindig fusson a háttérben?"</string>
+ <string name="high_power_prompt_title" msgid="2805745781720454052">"Engedélyezi, hogy az alkalmazás mindig fusson a háttérben?"</string>
<string name="high_power_prompt_body" msgid="8067395096053552289">"Ha engedélyezi, hogy a(z) <xliff:g id="APP_NAME">%1$s</xliff:g> mindig fusson a háttérben, csökkenhet az akkumulátor üzemideje.\n\nEzt később bármikor módosíthatja a Beállítások > Alkalmazások és értesítések menüpontban."</string>
<string name="battery_summary" msgid="4345690800899981339">"Akkumulátorhasználat az utolsó teljes feltöltés óta: <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="battery_power_management" msgid="2853925857548647969">"Energiagazdálkodás"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Ha az eszköz zárolva van, ne lehessen választ vagy egyéb szöveget beírni az értesítéseknél"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Szokásos helyesírás-ellenőrző"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Helyesírás-ellenőrző"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Helyesírás-ellenőrző használata"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Helyesírás-ellenőrző használata"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Nincs kiválasztva"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(nincs)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"A tárhelykezelő tárhely felszabadítása érdekében eltávolítja az eszközről azokat a fotókat és videókat, amelyekről már készült biztonsági másolat."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Fotók és videók eltávolítása"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Tárhelykezelő"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Tárhelykezelő használata"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Tárhelykezelő használata"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatikus"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Kézi"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Szabadítson fel tárhelyet most"</string>
@@ -4201,8 +4203,8 @@
<string name="enterprise_privacy_ca_certs_personal" msgid="1356447417193483802">"Megbízható hitelesítési adatok a személyes profilban"</string>
<string name="enterprise_privacy_ca_certs_work" msgid="836419648894546893">"Megbízható hitelesítési adatok a munkaprofilban"</string>
<plurals name="enterprise_privacy_number_ca_certs" formatted="false" msgid="7953528945502561752">
- <item quantity="other">Legalább <xliff:g id="COUNT_1">%d</xliff:g> CA tanúsítvány</item>
- <item quantity="one">Legalább <xliff:g id="COUNT_0">%d</xliff:g> CA tanúsítvány</item>
+ <item quantity="other">Legalább <xliff:g id="COUNT_1">%d</xliff:g> CA-tanúsítvány</item>
+ <item quantity="one">Legalább <xliff:g id="COUNT_0">%d</xliff:g> CA-tanúsítvány</item>
</plurals>
<string name="enterprise_privacy_lock_device" msgid="1533125067038409945">"A rendszergazda zárolhatja az eszközt, és új jelszót állíthat be"</string>
<string name="enterprise_privacy_wipe_device" msgid="7555287990273929922">"A rendszergazda törölheti az összes adatot az eszközről"</string>
@@ -4437,7 +4439,7 @@
<string name="cdma_subscription_summary" msgid="2298861419202726628">"Váltás RUIM/SIM és NV között"</string>
<string name="cdma_subscription_dialogtitle" msgid="232485231569225126">"előfizetés"</string>
<string name="register_automatically" msgid="1858081641661493109">"Automatikus regisztráció…"</string>
- <string name="roaming_alert_title" msgid="1849237823113454475">"Engedélyezi az adatbarangolást?"</string>
+ <string name="roaming_alert_title" msgid="1849237823113454475">"Engedélyezi az adatroamingot?"</string>
<string name="roaming_check_price_warning" msgid="5883499714594419439">"Az árakat a szolgáltatótól tudhatja meg."</string>
<string name="mobile_data_usage_title" msgid="2376358672434990037">"Alkalmazás adathasználata"</string>
<string name="mobile_network_mode_error" msgid="6818434186286086554">"Érvénytelen hálózati mód: <xliff:g id="NETWORKMODEID">%1$d</xliff:g>. Figyelmen kívül hagyás."</string>
diff --git a/tests/CarDeveloperOptions/res/values-hy/arrays.xml b/tests/CarDeveloperOptions/res/values-hy/arrays.xml
index 74d88a3..c4c9599 100644
--- a/tests/CarDeveloperOptions/res/values-hy/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-hy/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"աշխատել ֆոնային ռեժիմում"</item>
<item msgid="6423861043647911030">"մատչելիության ծավալ"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Տեղադրություն"</item>
+ <item msgid="6656077694190491067">"Տեղադրություն"</item>
+ <item msgid="8790228218278477369">"Տեղադրություն"</item>
+ <item msgid="7836406246005211990">"Թրթռոց"</item>
+ <item msgid="3951439024549922598">"Տեսնել կոնտակտները"</item>
+ <item msgid="8802152411647068">"Փոփոխել կոնտակտները"</item>
+ <item msgid="229544934599698735">"Տեսնել զանգերի մատյանը"</item>
+ <item msgid="7396102294405899613">"Փոփոխել զանգերի մատյանը"</item>
+ <item msgid="3597797992398484655">"Տեսնել օրացույցը"</item>
+ <item msgid="2705975774250907343">"Փոփոխել օրացույցը"</item>
+ <item msgid="4668747371441932697">"Տեղադրություն"</item>
+ <item msgid="1487578921720243646">"Փակցնել ծանուցում"</item>
+ <item msgid="4636080349724146638">"Տեղադրություն"</item>
+ <item msgid="673510900286463926">"Հեռախոս"</item>
+ <item msgid="542083422784609790">"Կարդալ SMS/MMS"</item>
+ <item msgid="1033780373029588436">"Գրել SMS/MMS"</item>
+ <item msgid="5647111115517787488">"Ստանալ SMS/MMS"</item>
+ <item msgid="8591105601108455893">"Ստանալ SMS/MMS"</item>
+ <item msgid="7730995008517841903">"Ստանալ SMS/MMS"</item>
+ <item msgid="2613033109026626086">"Ստանալ SMS/MMS"</item>
+ <item msgid="3037159047591081136">"Ուղարկել SMS/MMS"</item>
+ <item msgid="4726682243833913568">"Կարդալ SMS/MMS"</item>
+ <item msgid="6555678522277865572">"Գրել SMS/MMS"</item>
+ <item msgid="6981734935578130884">"Փոփոխել կարգավորումները"</item>
+ <item msgid="8705854389991425629">"Պատկերել վերևի մասում"</item>
+ <item msgid="5861356020344153651">"Մուտք գործել ծանուցումներ"</item>
+ <item msgid="78432174621628659">"Տեսախցիկ"</item>
+ <item msgid="3986116419882154794">"Ձայնագրել աուդիո ֆայլ"</item>
+ <item msgid="4516840825756409490">"Նվագարկել ձայնանյութը"</item>
+ <item msgid="6811712502798183957">"Կարդալ սեղմատախտակը"</item>
+ <item msgid="2780369012602289114">"Փոփոխել սեղմատախտակը"</item>
+ <item msgid="2331359440170850868">"Մեդիա կոճակներ"</item>
+ <item msgid="6133599737122751231">"Աուդիո ֆոկուս"</item>
+ <item msgid="6844485713404805301">"Ձայնի հիմնական բարձրություն"</item>
+ <item msgid="1600379420669104929">"Ձայնի բարձրություն"</item>
+ <item msgid="6296768210470214866">"Զանգերանգ"</item>
+ <item msgid="510690696071629241">"Մուլտիմեդիա"</item>
+ <item msgid="406861638631430109">"Զարթուցիչ"</item>
+ <item msgid="4715864795872233884">"Ծանուցման ձայնի բարձրություն"</item>
+ <item msgid="2311478519251301183">"Bluetooth-ի ձայնի բարձրություն"</item>
+ <item msgid="5133991377896747027">"Արթուն պահել"</item>
+ <item msgid="2464189519136248621">"Տեղորոշում"</item>
+ <item msgid="2062677934050803037">"Տեղադրություն"</item>
+ <item msgid="1735171933192715957">"Ստանալ օգտագործման վիճակագրությունը"</item>
+ <item msgid="1014093788778383554">"Խոսափողն անջատել/միացնել"</item>
+ <item msgid="4199297950608622850">"Ցույց տալ ծանուցումը"</item>
+ <item msgid="2527962435313398821">"Տեսարձակել մեդիան"</item>
+ <item msgid="5117506254221861929">"Ակտիվացնել VPN-ը"</item>
+ <item msgid="8291198322681891160">"Պաստառների պահում"</item>
+ <item msgid="7106921284621230961">"Օժանդակ կառույց"</item>
+ <item msgid="4496533640894624799">"Օժանդակ սքրինշոթ"</item>
+ <item msgid="2598847264853993611">"Կարդալ հեռախոսի վիճակի տվյալները"</item>
+ <item msgid="9215610846802973353">"Ավելացնել ձայնային փոստ"</item>
+ <item msgid="9186411956086478261">"Օգտագործել sip-ը"</item>
+ <item msgid="6884763100104539558">"Մշակել ելքային զանգը"</item>
+ <item msgid="125513972170580692">"Մատնահետք"</item>
+ <item msgid="2556071024281275619">"Մարմնի տվիչներ"</item>
+ <item msgid="617168514928339387">"Կարդալ բջջային հեռարձակումները"</item>
+ <item msgid="7134693570516523585">"Կեղծել տեղադրությունը"</item>
+ <item msgid="7224489175375229399">"Կարդալ կրիչի բովանդակությունը"</item>
+ <item msgid="8472735063903258202">"Փոփոխել կրիչի բովանդակությունը"</item>
+ <item msgid="4069276819909595110">"Միացնել էկրանը"</item>
+ <item msgid="1228338896751121025">"Ստանալ հաշիվները"</item>
+ <item msgid="3181581793459233672">"Աշխատել ֆոնային ռեժիմում"</item>
+ <item msgid="2340936043025374076">"Մատչելիության ծավալ"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Կարճ"</item>
<item msgid="4816511817309094890">"Միջին"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Երբեք չթույլատրել"</item>
<item msgid="8184570120217958741">"Միշտ թույլատրել"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Սովորական"</item>
+ <item msgid="5101233285497327432">"Չափավոր"</item>
+ <item msgid="1555861583162930714">"Ցածր"</item>
+ <item msgid="1719683776264798117">"Կրիտիկական"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Սովորական"</item>
+ <item msgid="6107138933849816768">"Չափավոր"</item>
+ <item msgid="182695359839047859">"Ցածր"</item>
+ <item msgid="8577246509202964244">"Կրիտիկական"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Կայուն"</item>
<item msgid="167418068739176448">"Առավել հաճախակի կատարվող գործողությունը"</item>
@@ -396,7 +472,7 @@
<item msgid="3118234477029486741">"0"</item>
</string-array>
<string-array name="wifi_metered_entries">
- <item msgid="4329206416008519163">"Ավտոմատ հայտնաբերում"</item>
+ <item msgid="4329206416008519163">"Ավտոմատ որոշում"</item>
<item msgid="773943026484148895">"Սահմանափակ"</item>
<item msgid="1008268820118852416">"Անսահմանափակ"</item>
</string-array>
diff --git a/tests/CarDeveloperOptions/res/values-hy/strings.xml b/tests/CarDeveloperOptions/res/values-hy/strings.xml
index e076190..eed1df7 100644
--- a/tests/CarDeveloperOptions/res/values-hy/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-hy/strings.xml
@@ -27,7 +27,7 @@
<item quantity="other">Ծրագրավորող դառնալու համար ձեզ մնացել է կատարել <xliff:g id="STEP_COUNT_1">%1$d</xliff:g> քայլ:</item>
</plurals>
<string name="show_dev_on" msgid="9075712234786224065">"Դուք արդեն ծրագրավորո՛ղ եք:"</string>
- <string name="show_dev_already" msgid="7665948832405148689">"Կարիք չկա, դուք արդեն իսկ ծրագրավորող եք:"</string>
+ <string name="show_dev_already" msgid="7665948832405148689">"Կարիք չկա, ծրագրավորողի ընտրանքներն արդեն միացված են։"</string>
<string name="dev_settings_disabled_warning" msgid="3198732189395396721">"Խնդրում ենք նախ միացնել մշակողի ընտրանքները:"</string>
<string name="header_category_wireless_networks" msgid="8968405993937795898">"Անլար կապ և ցանցեր"</string>
<string name="header_category_system" msgid="4045988717359334410">"Համակարգ"</string>
@@ -65,7 +65,7 @@
<string name="radioInfo_phone_offhook" msgid="3186071430568806208">"Զանգն ընթանում է"</string>
<string name="radioInfo_data_disconnected" msgid="5311119240521915279">"Անջատված է"</string>
<string name="radioInfo_data_connecting" msgid="47095003276717745">"Միանում է"</string>
- <string name="radioInfo_data_connected" msgid="3755289851642913750">"Կապակցված է"</string>
+ <string name="radioInfo_data_connected" msgid="3755289851642913750">"Միացված է"</string>
<string name="radioInfo_data_suspended" msgid="5013451375409737795">"Անջատված"</string>
<string name="radioInfo_unknown" msgid="3148839102896278859">"Անհայտ"</string>
<string name="radioInfo_display_packets" msgid="5472652398031589527">"pkts"</string>
@@ -83,12 +83,11 @@
<string name="font_size_summary" msgid="9120023206321191067">"Փոփոխեք տեքստի չափը։"</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Փոքրացնել"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Մեծացնել"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Տեքստի նմուշ"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Օզի կախարդը"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Գլուխ 11. Օզի հրաշալի Զմրուխտե քաղաքը"</string>
- <string name="font_size_preview_text_body" msgid="6803085337474390845">"Նույնիսկ հագնելով կանաչ ապակիներով ակնոցներ՝ Դորոթին և նրա ընկերները շլացան այս զարմանահրաշ քաղաքի փայլից: Փողոցների երկայնքով շարված էին կանաչ մարմարից գեղեցիկ տներ՝ զարդարված փայլուն զմրուխտներով: Ճամփորդները քայլում էին այդ նույն կանաչ մարմարով պատած մայթերով, որոնց սալիկների արանքները լցված էին արևի շողերի տակ փայլող զմրուխտներով: Տների պատուհանները կանաչ ապակուց էին: Զմրուխտե քաղաքում նույնիսկ երկինքն ուներ կանաչ երանգ, իսկ կանաչ արևը պայծառ կանաչ շողեր էր արձակում: \n\nՇուրջը տղամարդիկ, կանայք և երեխաներ էին քայլում, որոնք բոլորը կրում էին կանաչ հագուստ և ունեին կանաչավուն մաշկ: Նրանք զարմանքով էին նայում Դորոթիին և նրա տարօրինակ ուղեկիցներին: Նկատելով Առյուծին՝ երեխաները թաքնվում էին իրենց ծնողների մեջքի ետևում և ոչ-ոք չեր համարձակվում խոսել անծանոթների հետ: Խանութներում վաճառվում էին կանաչ գույնի ապրանքներ. կանաչ կոնֆետներ և կանաչ ադիբուդի, տարբեր տեսակի կանաչ կոշիկներ, գլխարկներ և զգեստներ: Վաճառականներից մեկն առաջարկում էր կանաչ լիմոնադ, իսկ նրան շրջապատող երեխաները լիմոնադի համար վճարում էին կանաչ մետաղադրամներով: \n\nԶմրուխտե քաղաքի փողոցներում ոչ ձիեր, ոչ էլ այլ կենդանիներ չկային: Տղամարդիկ իրենց իրերը կրում էին փոքր կանաչ ձեռնասայլակներով: Քաղաքի բոլոր բնակիչները ուրախ և անհոգ տեսք ունեին:"</string>
+ <string name="font_size_preview_text_body" msgid="6803085337474390845">"Նույնիսկ հագնելով կանաչ ապակիներով ակնոցներ՝ Դորոթին և իր ընկերները շլացան այս զարմանահրաշ քաղաքի փայլից: Փողոցների երկայնքով շարված էին կանաչ մարմարից գեղեցիկ տներ՝ զարդարված փայլուն զմրուխտներով: Ճամփորդները քայլում էին այդ նույն կանաչ մարմարով պատած մայթերով, որոնց սալիկների արանքները լցված էին արևի շողերի տակ փայլող զմրուխտներով: Տների պատուհանները կանաչ ապակուց էին: Զմրուխտե քաղաքում նույնիսկ երկինքն ուներ կանաչ երանգ, իսկ կանաչ արևը պայծառ կանաչ շողեր էր արձակում: \n\nՇուրջը տղամարդիկ, կանայք և երեխաներ էին քայլում, որոնք բոլորը կրում էին կանաչ հագուստ և ունեին կանաչավուն մաշկ: Նրանք զարմանքով էին նայում Դորոթիին և նրա տարօրինակ ուղեկիցներին: Նկատելով Առյուծին՝ երեխաները թաքնվում էին իրենց ծնողների մեջքի ետևում և ոչ-ոք չեր համարձակվում խոսել անծանոթների հետ: Խանութներում վաճառվում էին կանաչ գույնի ապրանքներ. կանաչ կոնֆետներ և կանաչ ադիբուդի, տարբեր տեսակի կանաչ կոշիկներ, գլխարկներ և զգեստներ: Վաճառականներից մեկն առաջարկում էր կանաչ լիմոնադ, իսկ նրան շրջապատող երեխաները լիմոնադի համար վճարում էին կանաչ մետաղադրամներով: \n\nԶմրուխտե քաղաքի փողոցներում ոչ ձիեր, ոչ էլ այլ կենդանիներ չկային: Տղամարդիկ իրենց իրերը կրում էին փոքր կանաչ ձեռնասայլակներով: Քաղաքի բոլոր բնակիչները ուրախ և անհոգ տեսք ունեին:"</string>
<string name="font_size_save" msgid="8652044574655753921">"Հաստատել"</string>
<string name="sdcard_setting" product="nosdcard" msgid="1533784309105748696">"USB կրիչ"</string>
<string name="sdcard_setting" product="default" msgid="8398782065765523178">"SD քարտ"</string>
@@ -100,7 +99,7 @@
<string name="bluetooth_visibility_timeout" msgid="4804679276398564496">"Տեսանելիության ժամանակի սպառում"</string>
<string name="bluetooth_lock_voice_dialing" msgid="1600385868298081015">"Կողպել ձայնային համարհավաքումը"</string>
<string name="bluetooth_lock_voice_dialing_summary" msgid="5005776616112427980">"Կանխել Bluetooth համարհավաքչի օգտագործումը, երբ էկրանը կողպված է"</string>
- <string name="bluetooth_devices" msgid="4143880830505625666">"Bluetooth-ով սարքեր"</string>
+ <string name="bluetooth_devices" msgid="4143880830505625666">"Bluetooth սարքեր"</string>
<string name="bluetooth_device_name" msgid="3682016026866302981">"Սարքի անունը"</string>
<string name="bluetooth_device_details" msgid="2500840679106321361">"Սարքի կարգավորումներ"</string>
<string name="bluetooth_profile_details" msgid="1785505059738682493">"Պրոֆիլի կարգավորումներ"</string>
@@ -208,7 +207,7 @@
<string name="proxy_error_empty_port" msgid="8034561724923076215">"Պետք է լրացնել միացքի դաշտը:"</string>
<string name="proxy_error_empty_host_set_port" msgid="8471455809508588255">"Միացքի դաշտը պետք է ազատ լինի, եթե հանգույցի դաշտը դատարկ է:"</string>
<string name="proxy_error_invalid_port" msgid="4046559920586100637">"Ձեր մուտքագրած միացքը վավեր չէ:"</string>
- <string name="proxy_warning_limited_support" msgid="9026539134219095768">"HTTP պրոքսին օգտագործվում է դիտարկիչի կողմից, բայց չի կարող օգտագործվել այլ ծրագրերի կողմից:"</string>
+ <string name="proxy_warning_limited_support" msgid="9026539134219095768">"HTTP պրոքսին օգտագործվում է միայն դիտարկիչի կողմից:"</string>
<string name="proxy_url_title" msgid="882042361706435904">"PAC URL` "</string>
<string name="radio_info_dl_kbps" msgid="2903778264453410272">"DL թողունակությունը (կբ/վ)՝"</string>
<string name="radio_info_ul_kbps" msgid="3802245899811732716">"UL թողունակությունը (կբ/վ)՝"</string>
@@ -325,7 +324,7 @@
<string name="date_and_time_settings_summary" msgid="4617979434474713417">"Սահմանել ամսաթիվը, ժամը, ժամային գոտին, & ձևաչափերը"</string>
<string name="date_time_auto" msgid="2679132152303750218">"Օգտագործել ցանցի ժամանակը"</string>
<string name="zone_auto_title" msgid="5500880975376882488">"Օգտագործել ցանցի ժամային գոտին"</string>
- <string name="date_time_24hour_auto" msgid="7499659679134962547">"Օգտագործել տեղույթի կանխադրված կարգավորումը"</string>
+ <string name="date_time_24hour_auto" msgid="7499659679134962547">"Օգտագործել կանխադրված տեղույթը"</string>
<string name="date_time_24hour_title" msgid="6209923858891621283">"24-ժամյա ձևաչափ"</string>
<string name="date_time_24hour" msgid="1265706705061608742">"Օգտագործել 24-ժամյա ձևաչափը"</string>
<string name="date_time_set_time_title" msgid="7116850506333406367">"Ժամը"</string>
@@ -355,7 +354,7 @@
<string name="owner_info_settings_title" msgid="2537966178998339896">"Կողպէկրանի տեքստը"</string>
<string name="security_enable_widgets_title" msgid="1701510007926738088">"Միացնել վիջեթները"</string>
<string name="security_enable_widgets_disabled_summary" msgid="4408176087132339331">"Անջատվել է ադմինիստրատորի կողմից"</string>
- <string name="lockdown_settings_title" msgid="4534779922580115990">"Ավելացնել մուտքի արգելափակման ընտրանքը"</string>
+ <string name="lockdown_settings_title" msgid="4534779922580115990">"Ավելացնել արգելափակման կոճակը"</string>
<string name="lockdown_settings_summary" msgid="7270756909878256174">"Ցուցադրել սնուցման կոճակի ընտրանքը, որն անջատում է Smart Lock-ը, մատնահետքով ապակողպումը և կողպէկրանին ցուցադրվող ծանուցումները"</string>
<string name="trust_agents_extend_unlock_title" msgid="3582017561316089951">"Միջանկյալ գործակալները հետաձգում են կողպումը"</string>
<string name="trust_agents_extend_unlock_summary" msgid="3543997596586078084">"Եթե միացված է, միջանկյալ գործակալները երկար ժամանակ չեն թողնի, որ ձեր սարքը կողպվի, սակայն այլևս չեն կարողանա ապակողպել որևէ կողպված սարք:"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Պրոֆիլի տեղեկություններ"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Հաշիվներ"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Տեղադրություն"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Օգտագործել տեղորոշումը"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Օգտագործել տեղորոշումը"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Անջատված է"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">Միացված է: Տեղադրության տվյալները հասանելի են <xliff:g id="COUNT_1">%1$d</xliff:g> հավելվածի:</item>
@@ -403,7 +402,7 @@
<string name="security_settings_face_enroll_introduction_title" msgid="6073249653318265486">"Բացեք դեմքի ճանաչման միջոցով"</string>
<string name="security_settings_face_enroll_introduction_title_unlock_disabled" msgid="9223270521083202896">"Օգտագործեք դեմքը՝ նույնականացման համար"</string>
<string name="security_settings_face_enroll_introduction_message" msgid="484806903869220184">"Դեմքի ճանաչման միջոցով ապակողպեք ձեր հեռախոսը, գնումներ կատարեք և մուտք գործեք հավելվածներ:"</string>
- <string name="security_settings_face_enroll_introduction_message_unlock_disabled" msgid="2850101281254663082">"Օգտագործեք ձեր դեմքը՝ հեռախոսն ապակողպելու կամ գնումները թույլատրելու համար:\n\nՆշում. այս սարքն ապակողպելու համար չեք կարող օգտագործել ձեր դեմքը: Լրացուցիչ տեղեկություններ ստանալու համար դիմեք ձեր կազմակերպության ադմինիստրատորին:"</string>
+ <string name="security_settings_face_enroll_introduction_message_unlock_disabled" msgid="2850101281254663082">"Օգտագործեք ձեր դեմքը՝ հեռախոսն ապակողպելու կամ գնումներ թույլատրելու համար:\n\nՆշում. այս սարքն ապակողպելու համար չեք կարող օգտագործել ձեր դեմքը: Լրացուցիչ տեղեկություններ ստանալու համար դիմեք ձեր կազմակերպության ադմինիստրատորին:"</string>
<string name="security_settings_face_enroll_introduction_message_setup" msgid="4533297059466270074">"Դեմքի ճանաչման միջոցով ապակողպեք ձեր հեռախոսը, գնումներ կատարեք և մուտք գործեք հավելվածներ"</string>
<string name="security_settings_face_enroll_introduction_footer_message" msgid="7764021721107723266"></string>
<string name="security_settings_face_enroll_repeat_title" msgid="2507710348140837875">"Դեմքը պահեք կենտրոնում"</string>
@@ -441,15 +440,15 @@
<string name="security_settings_fingerprint_enroll_introduction_title" msgid="889558002683900544">"Ապակողպում մատնահետքով"</string>
<string name="security_settings_fingerprint_enroll_introduction_title_unlock_disabled" msgid="7915504118657864429">"Օգտագործեք ձեր մատնահետքը"</string>
<string name="security_settings_fingerprint_enroll_introduction_message" msgid="5586198131986682472">"Հեռախոսն ապակողպելու, գնումները թույլատրելու կամ հավելվածներ մուտք գործելու համար պարզապես մատը հպեք մատնահետքի սենսորին: Այդ գործողությունները հնարավոր է անել հեռախոսում ավելացված ցանկացած մատնահետքի միջոցով, այնպես որ մտածված ավելացրեք նոր մարդկանց մատնահետքերը:\n\nՆշում. ապակողպման հուսալի նախշը կամ PIN կոդը կարող է մատնահետքից ավելի ապահով լինել:"</string>
- <string name="security_settings_fingerprint_enroll_introduction_message_unlock_disabled" msgid="1640839304679275468">"Օգտագործեք ձեր մատնահետքը՝ հեռախոսն ապակողպելու կամ գնումները թույլատրելու համար:\n\nՆշում. այս սարքն ապակողպելու համար չեք կարող օգտագործել ձեր մատնահետքը: Լրացուցիչ տեղեկություններ ստանալու համար դիմեք ձեր կազմակերպության ադմինիստրատորին:"</string>
- <string name="security_settings_fingerprint_enroll_introduction_message_setup" msgid="6734490666593320711">"Օգտագործեք ձեր մատնահետքը՝ հեռախոսն ապակողպելու կամ գնումները թույլատրելու համար:\n\nՆշում. ապակողպման հուսալի նախշը կամ PIN կոդը կարող է մատնահետքից ավելի ապահով լինել:"</string>
+ <string name="security_settings_fingerprint_enroll_introduction_message_unlock_disabled" msgid="1640839304679275468">"Օգտագործեք ձեր մատնահետքը՝ հեռախոսն ապակողպելու կամ գնումներ թույլատրելու համար:\n\nՆշում. այս սարքն ապակողպելու համար չեք կարող օգտագործել ձեր մատնահետքը: Լրացուցիչ տեղեկություններ ստանալու համար դիմեք ձեր կազմակերպության ադմինիստրատորին:"</string>
+ <string name="security_settings_fingerprint_enroll_introduction_message_setup" msgid="6734490666593320711">"Օգտագործեք ձեր մատնահետքը՝ հեռախոսն ապակողպելու կամ գնումներ թույլատրելու համար:\n\nՆշում. ապակողպման հուսալի նախշը կամ PIN կոդը կարող է մատնահետքից ավելի ապահով լինել:"</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel" msgid="9168637333731599827">"Չեղարկել"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue" msgid="271662150372486535">"Շարունակել"</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel_setup" msgid="756928427429893070">"Բաց թողնել"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue_setup" msgid="4125977169169671144">"Հաջորդը"</string>
- <string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"Բա՞ց թողնել"</string>
+ <string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"Բաց թողնե՞լ"</string>
<string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"Մատնահետքի կարգավորումն ընդամենը մեկ-երկու րոպե է տևում: Եթե բաց թողնեք, ավելի ուշ կարող եք անցնել կարգավորումներ և ավելացնել ձեր մատնահետքը:"</string>
- <string name="lock_screen_intro_skip_title" msgid="5307431665496346914">"Բա՞ց թողնել"</string>
+ <string name="lock_screen_intro_skip_title" msgid="5307431665496346914">"Բաց թողնե՞լ"</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="tablet" msgid="7553945981266845264">"Սարքի պաշտպանության գործառույթները չեն միացվելու: Դուք չեք կարողանա կանխել այլ անձանց կողմից այս պլանշետի օգտագործումը՝ այն կորցնելու, գողանալու կամ վերակայելու դեպքում:"</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="device" msgid="1378243257238015603">"Սարքի պաշտպանության գործառույթները չեն միացվելու: Դուք չեք կարողանա կանխել այլ անձանց կողմից այս սարքի օգտագործումը՝ այն կորցնելու, գողանալու կամ վերակայելու դեպքում:"</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="default" msgid="8395540117461339748">"Սարքի պաշտպանության գործառույթները չեն միացվելու: Դուք չեք կարողանա կանխել այլ անձանց կողմից այս հեռախոսի օգտագործումը՝ այն կորցնելու, գողանալու կամ վերակայելու դեպքում:"</string>
@@ -467,20 +466,20 @@
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="3428927518029038956">"Հաստատել"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="4312297515772004580">"Ջնջել"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"Հպեք սենսորին"</string>
- <string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Դրեք ձեր մատը սենսորի վրա և բարձրացրեք թրթռոց զգալուց հետո"</string>
+ <string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Մատը դրենք սենսորի վրա և բարձրացրեք թրթռոց զգալուց հետո"</string>
<string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"Բարձրացրեք, ապա կրկին հպեք"</string>
<string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Փոքր-ինչ տեղաշարժեք մատը՝ մատնահետքի տարբեր հատվածներ ավելացնելու համար"</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"Մատնահետքն ավելացվեց"</string>
- <string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"Այս պատկերակը նշանակում է, որ դուք կարող եք հաստատել ձեր ինքնությունն ու գնումները մատնահետքի միջոցով"</string>
+ <string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"Այս պատկերակը ցույց է տալիս, որ դուք կարող եք ձեր ինքնությունն ու գնումները հաստատել մատնահետքի միջոցով"</string>
<string name="security_settings_fingerprint_enroll_enrolling_skip" msgid="1473280156532146933">"Ավելի ուշ"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_title" msgid="2816424026528101690">"Բաց թողնե՞լ մատնահետքի կարգավորումը:"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_message" msgid="8139299964344809780">"Դուք ընտրել եք մատնահետքի օգտագործումը որպես հեռախոսն ապակողպելու եղանակներից մեկը: Եթե բաց թողնեք հիմա, ապա ձեզ անհրաժեշտ կլինի կատարել կարգավորումն ավելի ուշ: Կարգավորումը տևում է ընդամենը մոտ մեկ րոպե:"</string>
- <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="tablet" msgid="1384438077720821127">"Պաշտպանեք ձեր պլանշետը էկրանի կողպման միջոցով, որպեսզի ձեր տվյալները հասանելի չդառնան կողմնակի անձանց, եթե կորցնեք պլանշետը կամ այն գողանան: Էկրանի կողպումն անհրաժեշտ է նաև մատնահետքը կարգավորելու համար։ Հպեք «Չեղարկել» կոճակին, ապա ավելացրեք PIN կոդ կամ ընտրեք էկրանի կողպման այլ տարբերակ։"</string>
- <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="device" msgid="7207112623501771824">"Պաշտպանեք ձեր սարքը էկրանի կողպման միջոցով, որպեսզի ձեր տվյալները հասանելի չդառնան կողմնակի անձանց, եթե կորցնեք սարքը կամ այն գողանան: Էկրանի կողպումն անհրաժեշտ է նաև մատնահետքը կարգավորելու համար։ Հպեք «Չեղարկել» կոճակին, ապա ավելացրեք PIN կոդ կամ ընտրեք էկրանի կողպման այլ տարբերակ։"</string>
- <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="default" msgid="7623975730623531606">"Պաշտպանեք ձեր հեռախոսը էկրանի կողպման միջոցով, որպեսզի ձեր տվյալները հասանելի չդառնան կողմնակի անձանց, եթե կորցնեք հեռախոսը կամ այն գողանան: Էկրանի կողպումն անհրաժեշտ է նաև մատնահետքը կարգավորելու համար։ Հպեք «Չեղարկել» կոճակին, ապա ավելացրեք PIN կոդ կամ ընտրեք էկրանի կողպման այլ տարբերակ։"</string>
- <string name="face_lock_screen_setup_skip_dialog_text" product="tablet" msgid="2998863111689476550">"Պաշտպանեք ձեր պլանշետը էկրանի կողպման միջոցով, որպեսզի ձեր տվյալները հասանելի չդառնան կողմնակի անձանց, եթե կորցնեք պլանշետը կամ այն գողանան: Էկրանի կողպումն անհրաժեշտ է նաև դեմքի ճանաչումը կարգավորելու համար։ Հպեք «Չեղարկել» կոճակին, ապա ավելացրեք PIN կոդ կամ ընտրեք էկրանի կողպման այլ տարբերակ։"</string>
- <string name="face_lock_screen_setup_skip_dialog_text" product="device" msgid="6780557259734235952">"Պաշտպանեք ձեր սարքը էկրանի կողպման միջոցով, որպեսզի ձեր տվյալները հասանելի չդառնան կողմնակի անձանց, եթե կորցնեք սարքը կամ այն գողանան: Էկրանի կողպումն անհրաժեշտ է նաև դեմքի ճանաչումը կարգավորելու համար։ Հպեք «Չեղարկել» կոճակին, ապա ավելացրեք PIN կոդ կամ ընտրեք էկրանի կողպման այլ տարբերակ։"</string>
- <string name="face_lock_screen_setup_skip_dialog_text" product="default" msgid="8541640018478926775">"Պաշտպանեք ձեր հեռախոսը էկրանի կողպման միջոցով, որպեսզի ձեր տվյալները հասանելի չդառնան կողմնակի անձանց, եթե կորցնեք հեռախոսը կամ այն գողանան: Էկրանի կողպումն անհրաժեշտ է նաև դեմքի ճանաչումը կարգավորելու համար։ Հպեք «Չեղարկել» կոճակին, ապա ավելացրեք PIN կոդ կամ ընտրեք էկրանի կողպման այլ տարբերակ։"</string>
+ <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="tablet" msgid="1384438077720821127">"Պաշտպանեք ձեր պլանշետը էկրանի կողպման միջոցով, որպեսզի ձեր տվյալները հասանելի չդառնան կողմնակի անձանց, եթե այն կորցնեք կամ գողանան: Էկրանի կողպումն անհրաժեշտ է նաև մատնահետքը կարգավորելու համար։ Հպեք «Չեղարկել» կոճակին, ապա ավելացրեք PIN կոդ կամ ընտրեք էկրանի կողպման այլ տարբերակ։"</string>
+ <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="device" msgid="7207112623501771824">"Պաշտպանեք ձեր սարքը էկրանի կողպման միջոցով, որպեսզի ձեր տվյալները հասանելի չդառնան կողմնակի անձանց, եթե այն կորցնեք կամ գողանան: Էկրանի կողպումն անհրաժեշտ է նաև մատնահետքը կարգավորելու համար։ Հպեք «Չեղարկել» կոճակին, ապա ավելացրեք PIN կոդ կամ ընտրեք էկրանի կողպման այլ տարբերակ։"</string>
+ <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="default" msgid="7623975730623531606">"Պաշտպանեք ձեր հեռախոսը էկրանի կողպման միջոցով, որպեսզի ձեր տվյալները հասանելի չդառնան կողմնակի անձանց, եթե այն կորցնեք կամ գողանան: Էկրանի կողպումն անհրաժեշտ է նաև մատնահետքը կարգավորելու համար։ Հպեք «Չեղարկել» կոճակին, ապա ավելացրեք PIN կոդ կամ ընտրեք էկրանի կողպման այլ տարբերակ։"</string>
+ <string name="face_lock_screen_setup_skip_dialog_text" product="tablet" msgid="2998863111689476550">"Պաշտպանեք ձեր պլանշետը էկրանի կողպման միջոցով, որպեսզի ձեր տվյալները հասանելի չդառնան կողմնակի անձանց, եթե այն կորցնեք կամ գողանան: Էկրանի կողպումն անհրաժեշտ է նաև դեմքի ճանաչումը կարգավորելու համար։ Հպեք «Չեղարկել» կոճակին, ապա ավելացրեք PIN կոդ կամ ընտրեք էկրանի կողպման այլ տարբերակ։"</string>
+ <string name="face_lock_screen_setup_skip_dialog_text" product="device" msgid="6780557259734235952">"Պաշտպանեք ձեր սարքը էկրանի կողպման միջոցով, որպեսզի ձեր տվյալները հասանելի չդառնան կողմնակի անձանց, եթե այն կորցնեք կամ գողանան: Էկրանի կողպումն անհրաժեշտ է նաև դեմքի ճանաչումը կարգավորելու համար։ Հպեք «Չեղարկել» կոճակին, ապա ավելացրեք PIN կոդ կամ ընտրեք էկրանի կողպման այլ տարբերակ։"</string>
+ <string name="face_lock_screen_setup_skip_dialog_text" product="default" msgid="8541640018478926775">"Պաշտպանեք ձեր հեռախոսը էկրանի կողպման միջոցով, որպեսզի ձեր տվյալները հասանելի չդառնան կողմնակի անձանց, եթե այն կորցնեք կամ գողանան: Էկրանի կողպումն անհրաժեշտ է նաև դեմքի ճանաչումը կարգավորելու համար։ Հպեք «Չեղարկել» կոճակին, ապա ավելացրեք PIN կոդ կամ ընտրեք էկրանի կողպման այլ տարբերակ։"</string>
<string name="lock_screen_pin_skip_title" msgid="8217519439213393785">"Բաց թողնե՞լ PIN-ի կարգավորումը"</string>
<string name="lock_screen_password_skip_title" msgid="3725788215672959827">"Չավելացնե՞լ գաղտնաբառ"</string>
<string name="lock_screen_pattern_skip_title" msgid="4237030500353932005">"Բաց թողնե՞լ նախշի կարգավորումը"</string>
@@ -730,7 +729,7 @@
<string name="bluetooth_settings" msgid="5228032727293770389">"Bluetooth"</string>
<string name="bluetooth_settings_title" msgid="7261244857456521825">"Bluetooth"</string>
<string name="bluetooth_settings_summary" msgid="1221689092429277887">"Կառավարել կապերը, կարգավորել սարքի անունը & հայտնաբերելիությունը"</string>
- <string name="bluetooth_pairing_request" msgid="7221745525632573125">"Զուգակցե՞լ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> սարքի հետ:"</string>
+ <string name="bluetooth_pairing_request" msgid="7221745525632573125">"Զուգակցե՞լ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> սարքի հետ"</string>
<string name="bluetooth_pairing_key_msg" msgid="1139230917419961975">"Bluetooth զուգակցման կոդը"</string>
<string name="bluetooth_enter_passkey_msg" msgid="6205151011298670207">"Մուտքագրեք զուգավորման կոդը, ապա սեղմեք Վերադառնալ կամ Մուտք"</string>
<string name="bluetooth_enable_alphanumeric_pin" msgid="9138308197078115672">"PIN-ը տառեր և նշաններ է պարունակում"</string>
@@ -760,7 +759,7 @@
<string name="bluetooth_preference_no_found_devices" msgid="4190090666412408576">"Հասանելի սարքեր չկան"</string>
<string name="bluetooth_device_context_connect" msgid="1812090541371432890">"Միանալ"</string>
<string name="bluetooth_device_context_disconnect" msgid="8085015949275771802">"Անջատել"</string>
- <string name="bluetooth_device_context_pair_connect" msgid="1503322591778810032">"Զուգավորել & միանալ"</string>
+ <string name="bluetooth_device_context_pair_connect" msgid="1503322591778810032">"Զուգակցել & միանալ"</string>
<string name="bluetooth_device_context_unpair" msgid="250588431708253041">"Ապամիավորել"</string>
<string name="bluetooth_device_context_disconnect_unpair" msgid="4519151805677280077">"Անջատել & ապազուգավորել"</string>
<string name="bluetooth_device_context_connect_advanced" msgid="423463405499392444">"Ընտրանքներ..."</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Միացնել Wi-Fi-ը"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Օգտագործել Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Օգտագործել Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi‑Fi կարգավորումներ"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Կարգավորել և կառավարել անլար միացման կետերը"</string>
@@ -850,17 +849,17 @@
<string name="wifi_notify_open_networks" msgid="4782239203624619655">"Ծանուցումներ բաց ցանցերի մասին"</string>
<string name="wifi_notify_open_networks_summary" msgid="1383681260705466715">"Տեղեկացնել լավ ազդանշանով բաց ցանցերի հասանելիության մասին"</string>
<string name="wifi_wakeup" msgid="4963732992164721548">"Ավտոմատ միացնել Wi‑Fi-ը"</string>
- <string name="wifi_wakeup_summary" msgid="1152699417411690">"Wi‑Fi-ը կրկին կմիանա պահված լավ ազդանշանով պահված ցանցերի, օրինակ, ձեր տան ցանցի մոտակայքում"</string>
+ <string name="wifi_wakeup_summary" msgid="1152699417411690">"Wi‑Fi-ը կրկին կմիանա լավ ազդանշանով պահված ցանցերի, օրինակ, ձեր տան ցանցի մոտակայքում"</string>
<string name="wifi_wakeup_summary_no_location" msgid="3007457288587966962">"Անհասանելի է, քանի որ տեղորոշումն անջատված է։ Միացրեք "<annotation id="link">"տեղորոշումը"</annotation>"։"</string>
<string name="wifi_wakeup_summary_scanning_disabled" msgid="6820040651529910914">"Անհասանելի է, քանի որ Wi‑Fi ցանցերի որոնումն անջատված է"</string>
- <string name="wifi_wakeup_summary_scoring_disabled" msgid="7067018832237903151">"Օգտագործելու համար ընտրեք ցանցի վարկանիշի մատակարարը"</string>
+ <string name="wifi_wakeup_summary_scoring_disabled" msgid="7067018832237903151">"Օգտագործելու համար ընտրեք ցանցերի վարկանիշի մատակարարին"</string>
<string name="wifi_poor_network_detection" msgid="7193423327400703073">"Չօգտագործել թույլ կապ"</string>
<string name="wifi_poor_network_detection_summary" msgid="5539951465985614590">"Չօգտագործել Wi-Fi ցանցը, եթե դրա ինտերնետային կապը թույլ է"</string>
<string name="wifi_avoid_poor_network_detection_summary" msgid="1976503191780928104">"Օգտագործել միայն լավ ինտերնետային կապ ունեցող ցանցերը"</string>
<string name="use_open_wifi_automatically_title" msgid="3084513215481454350">"Միանալ բաց ցանցերին"</string>
<string name="use_open_wifi_automatically_summary" msgid="8338020172673161754">"Ավտոմատ միանալ լավ ազդանշանով բաց ցանցերին"</string>
- <string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"Օգտագործելու համար ընտրեք ցանցի վարկանիշի մատակարարը"</string>
- <string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"Օգտագործելու համար ընտրեք համատեղելի ցանցի վարկանիշի մատակարարը"</string>
+ <string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"Օգտագործելու համար ընտրեք ցանցերի վարկանիշի մատակարարին"</string>
+ <string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"Օգտագործելու համար ընտրեք ցանցերի վարկանիշի համատեղելի մատակարարի"</string>
<string name="wifi_install_credentials" msgid="5650088113710858289">"Հավաստագրերի տեղադրում"</string>
<string name="wifi_scan_notify_text" msgid="7614101215028336927">"Տեղորոշման ճշգրտությունը բարելավելու նպատակով հավելվածներն ու ծառայությունները կորոնեն Wi‑Fi ցանցեր՝ նույնիսկ, երբ Wi‑Fi-ն անջատած է: Դա կարող է օգտագործվել, օրինակ, տեղորոշում օգտագործող գործառույթների ու ծառայությունների աշխատանքն օպտիմալացնելու համար։ Այս պարամետրը կարող եք փոխել <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>որոնման կարգավորումներում<xliff:g id="LINK_END_1">LINK_END</xliff:g>։"</string>
<string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"Տեղորոշման ճշգրտությունը բարելավելու համար միացրեք Wi-Fi ցանցերի որոնումը <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>որոնման կարգավորումներում<xliff:g id="LINK_END_1">LINK_END</xliff:g>։"</string>
@@ -890,7 +889,7 @@
<string name="wifi_menu_forget" msgid="7561140554450163075">"Մոռանալ ցանցը"</string>
<string name="wifi_menu_modify" msgid="4080178040721021101">"Փոփոխել ցանցը"</string>
<string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"Հասանելի ցանցերը տեսնելու համար միացրեք Wi‑Fi-ը:"</string>
- <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"Wi‑Fi ցանցերը փնտրվում են…"</string>
+ <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"Որոնում ենք Wi-Fi ցանցեր…"</string>
<string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"Դուք թույլտվություն չունեք փոխելու Wi‑Fi-ի ցանցը:"</string>
<string name="wifi_more" msgid="3538241640407382185">"Ավելին"</string>
<string name="wifi_setup_wps" msgid="6730131677695521321">"Ավտոմատ կարգավորում (WPS)"</string>
@@ -917,9 +916,9 @@
<string name="passpoint_content" msgid="340527524510304327">"<xliff:g id="NAME">%1$s</xliff:g>-ի հավատարմագրեր"</string>
<string name="wifi_eap_method" msgid="3752116941487485859">"EAP եղանակ"</string>
<string name="please_select_phase2" msgid="5848080896810435677">"Փուլ 2-ի նույնականացում"</string>
- <string name="wifi_eap_ca_cert" msgid="1496395241849383785">"CA վկայական"</string>
+ <string name="wifi_eap_ca_cert" msgid="1496395241849383785">"CA հավաստագիր"</string>
<string name="wifi_eap_domain" msgid="3298302320003640130">"Տիրույթ"</string>
- <string name="wifi_eap_user_cert" msgid="6786839531765719173">"Օգտատիրոջ վկայական"</string>
+ <string name="wifi_eap_user_cert" msgid="6786839531765719173">"Օգտատիրոջ հավաստագիր"</string>
<string name="wifi_eap_identity" msgid="5280457017705738773">"Ինքնություն"</string>
<string name="wifi_eap_anonymous" msgid="6352344972490839958">"Անանուն ինքնություն"</string>
<string name="wifi_password" msgid="6942983531275177771">"Գաղտնաբառ"</string>
@@ -935,9 +934,9 @@
<string name="wifi_ip_settings" msgid="4636102290236116946">"IP կարգավորումներ"</string>
<string name="wifi_privacy_settings" msgid="4462092795794247809">"Գաղտնիություն"</string>
<string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"Պատահական ընտրված MAC"</string>
- <string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"Ավելացնել սարք"</string>
+ <string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"Ավելացրեք սարք"</string>
<string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"Սարքը «<xliff:g id="SSID">%1$s</xliff:g>» ցանցին ավելացնելու համար տեսախցիկը պահեք QR կոդի վրա"</string>
- <string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"Սկանավորել QR կոդը"</string>
+ <string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"Սկանավորեք QR կոդը"</string>
<string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"«<xliff:g id="SSID">%1$s</xliff:g>» ցանցին միանալու համար տեսախցիկը պահեք QR կոդի վրա"</string>
<string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"Wi‑Fi ցանցին միանալու համար սկանավորեք QR կոդը"</string>
<string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Կիսվել Wi‑Fi-ով"</string>
@@ -952,18 +951,18 @@
<string name="wifi_dpp_check_connection_try_again" msgid="7144663015219170999">"Ստուգեք ինտերնետ կապը և նորից փորձեք"</string>
<string name="wifi_dpp_choose_network" msgid="6251424431594491691">"Ընտրեք ցանց"</string>
<string name="wifi_dpp_choose_network_to_connect_device" msgid="6385259857886784285">"Սարքը միացնելու համար ընտրեք ցանցը"</string>
- <string name="wifi_dpp_add_device_to_wifi" msgid="6454198064645462446">"Կապակցե՞լ այս սարքը «<xliff:g id="SSID">%1$s</xliff:g>» ցանցին"</string>
+ <string name="wifi_dpp_add_device_to_wifi" msgid="6454198064645462446">"Ավելացնե՞լ այս սարքը «<xliff:g id="SSID">%1$s</xliff:g>» ցանցում"</string>
<string name="wifi_dpp_wifi_shared_with_device" msgid="5713765471758272471">"Սարքը միացված է Wi‑Fi-ին"</string>
<string name="wifi_dpp_add_another_device" msgid="3698441567235301565">"Կապացել այլ սարք"</string>
<string name="wifi_dpp_choose_different_network" msgid="128515107488187050">"Ընտրել այլ ցանց"</string>
- <string name="wifi_dpp_could_not_add_device" msgid="4966109556543584813">"Չհաջողվեց ավելացնել սարք"</string>
+ <string name="wifi_dpp_could_not_add_device" msgid="4966109556543584813">"Չհաջողվեց ավելացնել սարքը"</string>
<string name="wifi_dpp_device_found" msgid="6488461467496850841">"Գտնվել է 1 սարք"</string>
<string name="wifi_dpp_sharing_wifi_with_this_device" msgid="2540529164687476827">"Սարքը միանում է Wi‑Fi-ին…"</string>
<string name="wifi_dpp_connecting" msgid="4229290407210299897">"Միացում…"</string>
<string name="wifi_dpp_share_hotspot" msgid="847987212473038179">"Ընդհանուր թեժ կետ"</string>
<string name="wifi_dpp_lockscreen_title" msgid="3910665850075275963">"Հաստատեք ձեր ինքնությունը"</string>
<string name="wifi_dpp_wifi_password" msgid="8007558344032612455">"Wi-Fi-ի գաղտնաբառ՝ <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
- <string name="wifi_dpp_hotspot_password" msgid="6172326289042241924">"Թեժ կետի գաղտնաբառ՝ <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
+ <string name="wifi_dpp_hotspot_password" msgid="6172326289042241924">"Թեժ կետի գաղտնաբառը՝ <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
<string name="wifi_dpp_add_device" msgid="1347056725253936358">"Ավելացնել սարք"</string>
<string name="wifi_dpp_connect_network_using_qr_code" msgid="115993715600532357">"Միացեք այս ցանցին QR կոդի միջոցով"</string>
<string name="retry" msgid="8500839563577344702">"Կրկնել"</string>
@@ -971,7 +970,7 @@
<string name="wifi_unchanged" msgid="6804964646942333992">"(անփոփոխ)"</string>
<string name="wifi_unspecified" msgid="893491188483500809">"Ընտրեք"</string>
<string name="wifi_multiple_cert_added" msgid="7986200585749147204">"(Ավելացվել են մի քանի վկայագրեր)"</string>
- <string name="wifi_use_system_certs" msgid="4794489370929885022">"Օգտագործել համակարգի վկայագրերը"</string>
+ <string name="wifi_use_system_certs" msgid="4794489370929885022">"Օգտագործել համակարգի հավաստագրերը"</string>
<string name="wifi_do_not_provide_eap_user_cert" msgid="4044301449482425250">"Չտրամադրել"</string>
<string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"Չվավերացնել"</string>
<string name="wifi_do_not_validate_eap_server_warning" msgid="3895397996759837323">"Վկայականը նշված չէ: Միացումը գաղտնի չի լինի:"</string>
@@ -981,7 +980,7 @@
<string name="wifi_wps_available_second_item" msgid="5703265526619705185">" (WPS-ը հասանելի է)"</string>
<string name="wifi_carrier_connect" msgid="7202618367339982884">"Օպերատորի Wi‑Fi ցանց"</string>
<string name="wifi_carrier_content" msgid="3467402515071949783">"Միանալ <xliff:g id="NAME">%1$s</xliff:g>-ի միջոցով"</string>
- <string name="wifi_scan_always_turnon_message" msgid="7811846312032594248">"Տեղադրության ճշգրտությունը կատարելագործելու կամ այլ նպատակների համար` <xliff:g id="APP_NAME">%1$s</xliff:g>-ը ցանկանում է միացնել ցանցի սկանավորումը, նույնիսկ եթե Wi-Fi-ը անջատված է:\n\nԹույլատրե՞լ բոլոր սկանավորում ցանկացող ծրագրերին:"</string>
+ <string name="wifi_scan_always_turnon_message" msgid="7811846312032594248">"Տեղադրության ճշգրտությունը կատարելագործելու կամ այլ նպատակների համար՝ <xliff:g id="APP_NAME">%1$s</xliff:g>-ը ցանկանում է միացնել ցանցի սկանավորումը, նույնիսկ եթե Wi-Fi-ը անջատված է:\n\nԹույլատրե՞լ բոլոր սկանավորում ցանկացող ծրագրերին:"</string>
<string name="wifi_scan_always_turnoff_message" msgid="556993843641750002">"Սա անջատելու համար գերբեռնված ցանկում անցեք Ընդլայնված:"</string>
<string name="wifi_scan_always_confirm_allow" msgid="8857664849515496237">"Թույլատրել"</string>
<string name="wifi_scan_always_confirm_deny" msgid="6190909841125369403">"Մերժել"</string>
@@ -1067,7 +1066,7 @@
<string name="wifi_hotspot_name_summary_connecting" msgid="5176787959408511889">"<xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>-ը միանում է…"</string>
<string name="wifi_hotspot_name_summary_connected" msgid="8387768642326756749">"Այլ սարքերը կարող են միանալ <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>-ին"</string>
<string name="wifi_hotspot_password_title" msgid="4289338152595154889">"Թեժ կետի գաղտնաբառը"</string>
- <string name="wifi_hotspot_ap_band_title" msgid="3485744480410441949">"Հաճախականությունների դիապազոն"</string>
+ <string name="wifi_hotspot_ap_band_title" msgid="3485744480410441949">"Հաճախականությունների միջակայք"</string>
<string name="wifi_hotspot_footer_info_regular" msgid="3876006922622827363">"Թեժ կետի միջոցով ստեղծեք Wi‑Fi ցանց ձեր այլ սարքերի hամար: Թեժ կետը տրամադրում է ինտերնետային կապ բջջային ցանցի միջոցով: Կարող են կիրառվել լրացուցիչ գանձումներ։"</string>
<string name="wifi_hotspot_footer_info_local_only" msgid="3339582350894639261">"Հավելվածները կարող են ստեղծել թեժ կետ՝ մոտակա սարքերին նյութեր փոխանցելու համար:"</string>
<string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"Ավտոմատ անջատել թեժ կետը"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Բջջային"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Եթե Wi-Fi-ը հասանելի չէ, օգտագործել բջջային ցանցը"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Եթե բջջային ցանցը հասանելի չէ, օգտագործել Wi-Fi-ը"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Զանգ Wi-Fi-ի միջոցով։ Եթե Wi‑Fi կապն ընդհատվի, զանգը կավարտվի։"</string>
@@ -1199,7 +1201,7 @@
<string name="auto_brightness_very_high_title" msgid="6649896560889239565">"Շատ բարձր"</string>
<string name="auto_brightness_subtitle" msgid="8516999348793100665">"Ձեր նախընտրելի պայծառության մակարդակը"</string>
<string name="auto_brightness_off_summary" msgid="6162650416289359104">"Չկարգավորել առկա լույսի համար"</string>
- <string name="auto_brightness_very_high_summary" msgid="7202032980509583918">"Մարտկոցի ավելի երկար օգտագործում"</string>
+ <string name="auto_brightness_very_high_summary" msgid="7202032980509583918">"Մարտկոցի ավելի արագ սպառում"</string>
<string name="auto_brightness_disclaimer" msgid="5416696351199148809">"Լույսի պայծառության մակարդակի օպտիմալացում: Նույնիսկ երբ այս գործառույթը միացված է, դուք կարող եք ժամանակավորապես կարգավորել պայծառությունը:"</string>
<string name="auto_brightness_description" msgid="8209140379089535411">"Էկրանի պայծառությունն ավտոմատ կկարգավորվի՝ կախված միջավայրի պայմաններից և ձեր գործողություններից։ Դուք կարող եք տեղաշարժել սահիչը՝ թույլ տալով հարմարվող պայծառությանը հիշել ձեր կարգավորումները։"</string>
<string name="display_white_balance_title" msgid="5747260735311935143">"Էկրանի սպիտակի բալանս"</string>
@@ -1262,7 +1264,7 @@
<string name="doze_title" msgid="235269029233857546">"Նոր ծանուցումներ"</string>
<string name="doze_summary" msgid="6762274282827831706">"Ակտիվացնել էկրանը ծանուցումներ ստանալու դեպքում"</string>
<string name="doze_always_on_title" msgid="8555184965031789941">"Միշտ միացված է"</string>
- <string name="doze_always_on_summary" msgid="7654436900436328950">"Ցուցադրել ժամանակը, ծանուցումների պատկերակները և այլ տեղեկատվություն: Մարտկոցի ավելի երկար օգտագործում:"</string>
+ <string name="doze_always_on_summary" msgid="7654436900436328950">"Ցուցադրել ժամանակը, ծանուցումների պատկերակները և այլ տեղեկատվություն: Մարտկոցի ավելի արագ սպառում:"</string>
<string name="title_font_size" msgid="5021464556860010851">"Տառաչափ"</string>
<string name="short_summary_font_size" msgid="4141077908728522946">"Տառաչափի մեծացում կամ փոքրացում"</string>
<string name="sim_lock_settings" msgid="1986924650622642189">"SIM քարտի կողպման կարգավորումներ"</string>
@@ -1285,9 +1287,9 @@
<string name="sim_change_pin" msgid="1674620855223900785">"SIM PIN"</string>
<string name="sim_bad_pin" msgid="2409776007569751629">"Սխալ PIN"</string>
<string name="sim_pins_dont_match" msgid="1076283313667637902">"PIN-երը չեն համընկնում"</string>
- <string name="sim_change_failed" msgid="8874765697694275459">"Չհաջողվեց փոխել PIN-ը:\nՀնարավոր է` PIN-ը սխալ է:"</string>
+ <string name="sim_change_failed" msgid="8874765697694275459">"Չհաջողվեց փոխել PIN-ը:\nՀնարավոր է՝ PIN-ը սխալ է:"</string>
<string name="sim_change_succeeded" msgid="8802418023120614533">"SIM քարտի PIN կոդը հաջողությամբ փոխվել է"</string>
- <string name="sim_lock_failed" msgid="7949781515066772755">"Հնարավոր չէ բացել SIM քարտի կողպված կարգավիճակը:\nՀնարավոր է` սխալ PIN է մուտքագրվել:"</string>
+ <string name="sim_lock_failed" msgid="7949781515066772755">"Հնարավոր չէ բացել SIM քարտի կողպված կարգավիճակը:\nՀնարավոր է՝ սխալ PIN է մուտքագրվել:"</string>
<string name="sim_pin_disable_failed" msgid="6780973900290546751">"Չհաջողվեց անջատել PIN կոդը"</string>
<string name="sim_pin_enable_failed" msgid="804897359922298792">"Չհաջողվեց միացնել PIN կոդը"</string>
<string name="sim_enter_ok" msgid="5103626479976731229">"Հաստատել"</string>
@@ -1311,7 +1313,7 @@
<string name="security_patch" msgid="483709031051932208">"Անվտանգության համակարգի վերջին թարմացումը"</string>
<string name="model_info" msgid="1729765474260797594">"Մոդելը"</string>
<string name="model_summary" msgid="8781425868254352168">"Մոդել՝ %1$s"</string>
- <string name="hardware_info" msgid="174270144950621815">"Մոդելը և սարքակազմը"</string>
+ <string name="hardware_info" msgid="174270144950621815">"Մոդել և սարքակազմ"</string>
<string name="hardware_revision" msgid="3315744162524354246">"Սարքակազմի տարբերակը"</string>
<string name="fcc_equipment_id" msgid="8681995718533066093">"Սարքավորման ID-ն"</string>
<string name="baseband_version" msgid="9115560821840757786">"Baseband-ի տարբերակը"</string>
@@ -1356,7 +1358,7 @@
<string name="status_roaming" msgid="5191044997355099561">"Ռոումինգ"</string>
<string name="status_operator" msgid="6017986100643755390">"Ցանց"</string>
<string name="status_wifi_mac_address" msgid="3868452167971295995">"Wi‑Fi MAC հասցե"</string>
- <string name="status_bt_address" msgid="460568179311735657">"Bluetooth-ի հասցեն"</string>
+ <string name="status_bt_address" msgid="460568179311735657">"Bluetooth հասցե"</string>
<string name="status_serial_number" msgid="8257722124627415159">"Հերթական համարը"</string>
<string name="status_up_time" msgid="77128395333934087">"Աշխատած ժամանակը"</string>
<string name="status_awake_time" msgid="1251959094010776954">"Արթուն մնալու տևողությունը"</string>
@@ -1388,7 +1390,7 @@
<string name="sd_format" product="default" msgid="1346245995138883960">"Ջնջել SD քարտը"</string>
<string name="sd_format_summary" product="nosdcard" msgid="1179857727779521920">"Ջնջել USB կրիչի բոլոր տվյալները, ինչպիսիք են երաժշտությունը և լուսանկարները"</string>
<string name="sd_format_summary" product="default" msgid="4284028411908176234">"SD քարտից ջնջում է ողջ տեղեկատվությունը, ինչպիսիք են երաժշտությունն ու լուսանկարները"</string>
- <string name="memory_clear_cache_title" msgid="4306793268129306684">"Մաքրե՞լ քեշավորված տվյալները:"</string>
+ <string name="memory_clear_cache_title" msgid="4306793268129306684">"Ջնջե՞լ քեշավորված տվյալները:"</string>
<string name="memory_clear_cache_message" msgid="6723120398411410031">"Սա կմաքրի բոլոր ծրագրերի քեշավորված տվյալները:"</string>
<string name="mtp_ptp_mode_summary" msgid="6074099855478444183">"MTP կամ PTP գործառույթը ակտիվ է"</string>
<string name="dlg_confirm_unmount_title" product="nosdcard" msgid="3843209947310774105">"Անջատե՞լ USB կրիչը:"</string>
@@ -1566,10 +1568,10 @@
<string name="restore_default_apn" msgid="7195266404077471007">"Կանխադրված APN կարգավորումների վերականգնում:"</string>
<string name="menu_restore" msgid="3799288817317293115">"Վերականգնել կանխադրվածները"</string>
<string name="restore_default_apn_completed" msgid="5671734152740058937">"Սկզբնական APN կարգավորումների վերակարգավորումն ավարտված է:"</string>
- <string name="reset_dashboard_title" msgid="7084966342252178530">"Զրոյացման ընտրանքներ"</string>
+ <string name="reset_dashboard_title" msgid="7084966342252178530">"Վերակայման ընտրանքներ"</string>
<string name="reset_dashboard_summary" msgid="8778383341461126642">"Ցանցի, հավելվածների և սարքի կարգավորումները հնարավոր է զրոյացնել"</string>
<string name="reset_network_title" msgid="8944059136930806211">"Զրոյացնել Wi-Fi-ի, բջջային թրաֆիկի և Bluetooth-ի կարգավորումները"</string>
- <string name="reset_network_desc" msgid="4982633363916261109">"Արդյունքում կվերակայվեն բոլոր ցանցային կարգավորումները, ներառյալ հետևյալը՝\n\n"<li>"Wi‑Fi"</li>\n<li>"Բջջային ինտերնետ"</li>\n<li>"Bluetooth"</li></string>
+ <string name="reset_network_desc" msgid="4982633363916261109">"Արդյունքում կզրոյացվեն բոլոր ցանցային կարգավորումները, ներառյալ հետևյալը՝\n\n"<li>"Wi‑Fi"</li>\n<li>"Բջջային ինտերնետ"</li>\n<li>"Bluetooth"</li></string>
<string name="reset_esim_title" msgid="7630781767040831893">"Ջնջել ներբեռնված SIM-երը"</string>
<string name="reset_esim_desc" msgid="433226911566802">"Նոր SIM քարտ ներբեռնելու համար դիմեք ձեր օպերատորին։ Բջջային կապի սակագնային պլանները չեն չեղարկվի:"</string>
<string name="reset_network_button_text" msgid="4293271046867912819">"Զրոյացնել կարգավորումները"</string>
@@ -1591,7 +1593,7 @@
<string name="master_clear_desc_also_erases_esim" msgid="4497260499055258773"><li>"eSIM քարտեր"</li></string>
<string name="master_clear_desc_no_cancel_mobile_plan" msgid="6072668588881679461">\n\n"Բջջային ծառայությունների ձեր փաթեթը չի չեղարկվի:"</string>
<string name="master_clear_desc_erase_external_storage" product="nosdcard" msgid="2723272952715259307">\n\n"Երաժշտությունը, նկարները և այլ տվյալները ջնջելու համար "<b>"USB կրիչը "</b>"պետք է ջնջվի:"</string>
- <string name="master_clear_desc_erase_external_storage" product="default" msgid="9003555775524798797">\n\n"Երաժշտությունը, նկարները և այլ տվյալները "<b>"SD քարտից"</b>" մաքրելու համար` այն պետք է ջնջել:"</string>
+ <string name="master_clear_desc_erase_external_storage" product="default" msgid="9003555775524798797">\n\n"Երաժշտությունը, նկարները և այլ տվյալները "<b>"SD քարտից"</b>" մաքրելու համար՝ այն պետք է ջնջել:"</string>
<string name="erase_external_storage" product="nosdcard" msgid="8989746770347525207">"Ջնջել USB կրիչը"</string>
<string name="erase_external_storage" product="default" msgid="194249742376770215">"Ջնջել SD քարտը"</string>
<string name="erase_external_storage_description" product="nosdcard" msgid="8020275102431496261">"Ջնջել ներքին USB կրիչի բոլոր տվյալները, ինչպիսիք են երաժշտությունը կամ լուսանկարները"</string>
@@ -1619,11 +1621,11 @@
<string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"Երբ թրաֆիկի տնտեսումն ակտիվ է, հնարավոր չէ կապել կամ օգտագործել շարժական հասանելիության կետերը"</string>
<string name="usb_title" msgid="7480927657535578688">"USB"</string>
<string name="usb_tethering_button_text" msgid="6242228383142012332">"USB մոդեմ"</string>
- <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Տարածել հեռախոսի ինտերնետային կապը USB-ով"</string>
+ <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Տարածել հեռախոսի ինտերնետ կապը USB-ով"</string>
<string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"Տարածել պլանշետի ինտերնետային կապը USB-ով"</string>
<string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"Bluetooth մոդեմ"</string>
<string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"Տարածել պլանշետի ինտերնետային կապը Bluetooth-ով"</string>
- <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Տարածել հեռախոսի ինտերնետային կապը Bluetooth-ով"</string>
+ <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Տարածել հեռախոսի ինտերնետ կապը Bluetooth-ով"</string>
<string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"<xliff:g id="DEVICE_NAME">%1$d</xliff:g> սարքի ինտերնետային կապը տարածվում է Bluetooth-ով"</string>
<string name="bluetooth_tethering_overflow_error" msgid="6946561351369376943">"Հնարավոր չէ միանալ ավելի քան <xliff:g id="MAXCONNECTION">%1$d</xliff:g> սարքերի հետ:"</string>
<string name="bluetooth_untether_blank" msgid="5428300773782256084">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>-ը կանջատվի:"</string>
@@ -1631,11 +1633,11 @@
<string name="tethering_help_button_text" msgid="7653022000284543996">"Օգնություն"</string>
<string name="network_settings_title" msgid="8516526011407061679">"Բջջային ցանց"</string>
<string name="manage_mobile_plan_title" msgid="3312016665522553062">"Բջջային փաթեթ"</string>
- <string name="sms_application_title" msgid="7815840568119334679">"SMS-ի հավելված"</string>
- <string name="sms_change_default_dialog_title" msgid="6301260161969667578">"Փոխե՞լ SMS հավելվածը"</string>
- <string name="sms_change_default_dialog_text" msgid="8275088077930942680">"Որպես SMS ծրագիր` <xliff:g id="CURRENT_APP">%2$s</xliff:g>-ի փոխարեն օգտագործե՞լ <xliff:g id="NEW_APP">%1$s</xliff:g>-ը:"</string>
- <string name="sms_change_default_no_previous_dialog_text" msgid="4680224695080527907">"Որպես SMS ծրագիր` օգտագործե՞լ <xliff:g id="NEW_APP">%s</xliff:g>-ը:"</string>
- <string name="network_scorer_picker_title" msgid="1691073966560952916">"Ցանցերի վարկանիշի աղբյուրը"</string>
+ <string name="sms_application_title" msgid="7815840568119334679">"SMS-ների փոխանակման հավելված"</string>
+ <string name="sms_change_default_dialog_title" msgid="6301260161969667578">"Փոխե՞լ SMS-ների փոխանակման հավելվածը"</string>
+ <string name="sms_change_default_dialog_text" msgid="8275088077930942680">"Որպես SMS-ների փոխանակման հավելված <xliff:g id="CURRENT_APP">%2$s</xliff:g>-ի փոխարեն օգտագործե՞լ <xliff:g id="NEW_APP">%1$s</xliff:g>-ը:"</string>
+ <string name="sms_change_default_no_previous_dialog_text" msgid="4680224695080527907">"Որպես SMS-ների փոխանակման հավելված օգտագործե՞լ <xliff:g id="NEW_APP">%s</xliff:g>-ը:"</string>
+ <string name="network_scorer_picker_title" msgid="1691073966560952916">"Ցանցերի վարկանիշի մատակարար"</string>
<string name="network_scorer_picker_none_preference" msgid="6448280557733231737">"Չկա"</string>
<string name="network_scorer_change_active_dialog_title" msgid="4274159562371475090">"Փոխե՞լ Wi-Fi օգնականին:"</string>
<string name="network_scorer_change_active_dialog_text" msgid="4264089809189760730">"Օգտագործե՞լ <xliff:g id="NEW_APP">%1$s</xliff:g> ծրագիրը <xliff:g id="CURRENT_APP">%2$s</xliff:g>-ի փոխարեն՝ ձեր ցանցային կապերը կառավարելու համար:"</string>
@@ -1654,7 +1656,7 @@
</plurals>
<string name="location_category_recent_location_access" msgid="286059523360285026">"Տեղադրության տվյալների վերջին օգտագործումը"</string>
<string name="location_recent_location_access_view_details" msgid="2051602261436245905">"Մանրամասն"</string>
- <string name="location_no_recent_apps" msgid="77502059586413278">"Որևէ ծրագիր տեղադրության հարցում չի կատարել վերջերս"</string>
+ <string name="location_no_recent_apps" msgid="77502059586413278">"Վերջին ժամանակաշրջանում հավելվածները տեղադրության հարցում չեն արել"</string>
<string name="location_no_recent_accesses" msgid="6289916310397279890">"Ոչ մի հավելված չի օգտագործել տեղադրությունը"</string>
<string name="location_high_battery_use" msgid="7177199869979522663">"Մարտկոցի շատ օգտագործում"</string>
<string name="location_low_battery_use" msgid="5030448574501435888">"Մարտկոցի ցածր սպառում"</string>
@@ -1668,8 +1670,8 @@
<string name="location_neighborhood_level" msgid="8459352741296587916">"Թույլատրել ծրագրերին օգտագործել Google-ի տեղակայման ծառայությունները` ձեր տեղադրությունը ավելի արագ որոշելու համար: Անանուն տեղակայման տվյալները կհավաքագրվեն և կուղարկվեն Google-ին:"</string>
<string name="location_neighborhood_level_wifi" msgid="6120133551482003840">"Տեղադրությունը որոշված է Wi‑Fi-ի օգնությամբ"</string>
<string name="location_gps" msgid="688049341158297763">"GPS արբանյակներ"</string>
- <string name="location_street_level" product="tablet" msgid="4459804798444296650">"Թույլատրել հավելվածին օգտագործել GPS-ը` ձեր տեղադրությունը պլանշետում ամրագրելու համար"</string>
- <string name="location_street_level" product="default" msgid="7407688345675450051">"Թույլատրել հավելվածին օգտագործել GPS-ը` ձեր տեղադրությունը հեռախոսում ամրագրելու համար"</string>
+ <string name="location_street_level" product="tablet" msgid="4459804798444296650">"Թույլատրել հավելվածին օգտագործել GPS-ը՝ ձեր տեղադրությունը պլանշետում ամրագրելու համար"</string>
+ <string name="location_street_level" product="default" msgid="7407688345675450051">"Թույլատրել հավելվածին օգտագործել GPS-ը՝ ձեր տեղադրությունը հեռախոսում ամրագրելու համար"</string>
<string name="assisted_gps" msgid="5411780261117055175">"Օգատգործեք աջակցող GPS-ը"</string>
<string name="assisted_gps_enabled" msgid="2561022181775725369">"Օգտագործեք սերվերը` GPS-ին միանալու համար (ապագնշեք` ցանցի օգտագործումը նվազեցնելու համար)"</string>
<string name="assisted_gps_disabled" msgid="6448758788217415937">"Օգտագործել սերվերը GPS աջակցման համար (ապընտրել` GPS-ի արդյունավետությունը բարելավելու համար)"</string>
@@ -1687,7 +1689,7 @@
<string name="contributors_title" msgid="6800028420806884340">"Աջակցողներ"</string>
<string name="manual" msgid="5431859421432581357">"Ձեռքով"</string>
<string name="regulatory_labels" msgid="380968489247381025">"Հավաստագրման պիտակներ"</string>
- <string name="safety_and_regulatory_info" msgid="7113766428000920132">"Անվտանգության և կանոնակարգումների ձեռնարկ"</string>
+ <string name="safety_and_regulatory_info" msgid="7113766428000920132">"Անվտանգության և ստանդարտների ձեռնարկ"</string>
<string name="copyright_title" msgid="3847703367689932190">"Հեղինակային իրավունք"</string>
<string name="license_title" msgid="7582145947873528540">"Արտոնագիր"</string>
<string name="terms_title" msgid="1804549588198223771">"Կանոններն ու պայմանները"</string>
@@ -1705,7 +1707,7 @@
<string name="settings_safetylegal_activity_loading" msgid="7680998654145172">"Բեռնում..."</string>
<string name="confirm_device_credential_use_alternate_method" msgid="1279869272895739941">"Օգտագործել այլ եղանակ"</string>
<string name="lockpassword_choose_your_screen_lock_header" msgid="6283518876031424798">"Էկրանի կողպում"</string>
- <string name="lockpassword_choose_your_password_message" msgid="2838273977481046536">"Սարքը պաշտպանելու համար գաղտնաբառ"</string>
+ <string name="lockpassword_choose_your_password_message" msgid="2838273977481046536">"Ստեղծեք գաղտնաբառ՝ սարքը պաշտպանելու համար"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="4921343500484160894">"Մատնահետքն օգտագործելու համար ընտրեք գաղտնաբառ"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="314870151462139417">"Մատնահետքն օգտագործելու համար ստեղծեք նախշ"</string>
<string name="lockpassword_choose_your_pin_message" msgid="8942598950627277885">"Պաշտպանության համար ավելացրեք PIN կոդ"</string>
@@ -1752,7 +1754,7 @@
<string name="lockpattern_recording_intro_footer" msgid="5426745740754065099">"Սեղմեք Ցանկ` օգնության համար:"</string>
<string name="lockpattern_recording_inprogress" msgid="4060818382176523671">"Հեռացրեք մատը ավարտելուց հետո"</string>
<string name="lockpattern_recording_incorrect_too_short" msgid="6374760294545431845">"Միացրեք առնվազն <xliff:g id="NUMBER">%d</xliff:g> կետ: Փորձեք կրկին:"</string>
- <string name="lockpattern_pattern_entered_header" msgid="2108106638322637851">"Նախշն ընդունված է"</string>
+ <string name="lockpattern_pattern_entered_header" msgid="2108106638322637851">"Նախշը պահվեց"</string>
<string name="lockpattern_need_to_confirm" msgid="4079482507985867389">"Նկարեք նախշը նորից` հաստատելու համար"</string>
<string name="lockpattern_pattern_confirmed_header" msgid="5603156929428721407">"Նոր նախշ"</string>
<string name="lockpattern_confirm_button_text" msgid="7059311304112902598">"Հաստատել"</string>
@@ -1829,12 +1831,12 @@
<string name="always_allow_bind_appwidgets_text" msgid="2286211654774611037">"Դուք ընտրել եք թույտարել այս ծրագրին ստեղծել վիջեթներ և մուտք գործել իրենց տվյալներ:"</string>
<string name="auto_launch_disable_text" msgid="8560921288036801416">"Լռելյայները կարգավորված չեն:"</string>
<string name="clear_activities" msgid="2068014972549235347">"Մաքրել լռելյայնները"</string>
- <string name="screen_compatibility_text" msgid="1768064020294301496">"Հնարավոր է` այս ծրագիրը մշակված չէ ձեր էկրանի համար: Դուք կարող եք վերահսկել դրա` ձեր էկրանին հարմարեցումը:"</string>
+ <string name="screen_compatibility_text" msgid="1768064020294301496">"Հնարավոր է՝ այս ծրագիրը մշակված չէ ձեր էկրանի համար: Դուք կարող եք վերահսկել դրա` ձեր էկրանին հարմարեցումը:"</string>
<string name="ask_compatibility" msgid="6687958195768084807">"Հարցնել մեկնարկելիս"</string>
<string name="enable_compatibility" msgid="1754177974320410195">"Աստիճանակարգել հավելվածները"</string>
<string name="unknown" msgid="2780743426415501227">"Անհայտ"</string>
<string name="sort_order_alpha" msgid="6689698854460261212">"Դասակարգել ըստ անունների"</string>
- <string name="sort_order_size" msgid="3167376197248713027">"Տեսակավորել ըստ չափի"</string>
+ <string name="sort_order_size" msgid="3167376197248713027">"Դասավորել ըստ չափի"</string>
<string name="sort_order_recent_notification" msgid="5592496977404445941">"Վերջինները"</string>
<string name="sort_order_frequent_notification" msgid="5640245013098010347">"Առավել հաճախ"</string>
<string name="show_running_services" msgid="1895994322704667543">"Ցույց տալ ընթացիկ ծառայությունները"</string>
@@ -2037,7 +2039,7 @@
<string name="accessibility_settings_summary" msgid="5742379519336396561">"Էկրանի ընթերցիչներ, էկրան, կառավարման տարրեր"</string>
<string name="vision_settings_title" msgid="7315352351051423944">"Տեսողության կարգավորումներ"</string>
<string name="vision_settings_description" msgid="3476589459009287332">"Օգտվեք հատուկ հնարավորություններից՝ հարմար աշխատանքի համար։ Այս գործառույթները կարող եք փոփոխել սարքի կարգավորումներում։"</string>
- <string name="vision_settings_suggestion_title" msgid="7268661419110951128">"Փոխել տառաչափը"</string>
+ <string name="vision_settings_suggestion_title" msgid="7268661419110951128">"Փոխեք տառաչափը"</string>
<string name="screen_reader_category_title" msgid="6300714148519645544">"Էկրանի ընթերցիչներ"</string>
<string name="audio_and_captions_category_title" msgid="6140472938769619212">"Աուդիո և էկրանի տեքստ"</string>
<string name="display_category_title" msgid="545168481672250195">"Էկրան"</string>
@@ -2063,12 +2065,12 @@
<string name="accessibility_shortcut_service_title" msgid="3516052294376744060">"Դյուրանցման ծառայությունը"</string>
<string name="accessibility_shortcut_service_on_lock_screen_title" msgid="1279441617927949980">"Թույլատրել կողպէկրանից"</string>
<string name="accessibility_shortcut_description" msgid="1427049334225166395">"Հատուկ գործառույթն օգտագործելու համար սեղմեք և 3 վայրկյան սեղմած պահեք ձայնի ուժգնության երկու կոճակները, երբ դյուրանցումը միացված է։"</string>
- <string name="accessibility_toggle_high_text_contrast_preference_title" msgid="5652244684961877255">"Ցայտուն տեքստ"</string>
+ <string name="accessibility_toggle_high_text_contrast_preference_title" msgid="5652244684961877255">"Բարձր կոնտրաստի տեքստ"</string>
<string name="accessibility_toggle_screen_magnification_auto_update_preference_title" msgid="2466317284195934003">"Ավտոմատ թարմացնել էկրանի խոշորությունը"</string>
<string name="accessibility_toggle_screen_magnification_auto_update_preference_summary" msgid="6625473745911276917">"Թարմացնել էկրանի խոշորությունը ծրագրի տարանցումների վրա"</string>
<string name="accessibility_power_button_ends_call_prerefence_title" msgid="6172987104538172869">"Սնուցման կոճակը ավարտում է զանգը"</string>
<string name="accessibility_toggle_large_pointer_icon_title" msgid="9127905775116570565">"Մկնիկի խոշոր նշորդ"</string>
- <string name="accessibility_disable_animations" msgid="8378441317115710009">"Անջատել շարժանկարները"</string>
+ <string name="accessibility_disable_animations" msgid="8378441317115710009">"Անջատել շարժունացումը"</string>
<string name="accessibility_toggle_master_mono_title" msgid="899550848196702565">"Մոնո"</string>
<string name="accessibility_toggle_master_mono_summary" msgid="3847052868469033235">"Աուդիո նվագարկելիս միավորել ալիքները"</string>
<string name="accessibility_toggle_master_balance_title" msgid="8723492001092647562">"Աուդիո բալանս"</string>
@@ -2081,8 +2083,8 @@
<string name="accessibility_timeout_2mins" msgid="4124259290444829477">"2 րոպե"</string>
<string name="accessibility_content_timeout_preference_title" msgid="5160746882250939464">"Ժամանակ կարդալու համար"</string>
<string name="accessibility_control_timeout_preference_title" msgid="2771808346038759474">"Ժամանակ գործողության կատարման համար"</string>
- <string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"Նշեք, թե որքան ժամանակ է ձեզ անհրաժեշտ` ավտոմատ անհետացող հաղորդագրությունները կարդալու համար:\n\nԱյս կարգավորումը ոչ բոլոր հավելվածներում է աջակցվում:"</string>
- <string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"Նշեք, թե որքան ժամանակ է ձեզ անհրաժեշտ՝ կատարելու ավտոմատ անհետացող հաղորդագրություններում ներկայացված գործողությունները:\n\nԱյս կարգավորումը ոչ բոլոր հավելվածներում է աջակցվում:"</string>
+ <string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"Ընտրեք, թե որքան ժամանակ է ձեզ անհրաժեշտ ավտոմատ անհետացող հաղորդագրությունները կարդալու համար:\n\nԱյս կարգավորումը ոչ բոլոր հավելվածներում է աջակցվում:"</string>
+ <string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"Ընտրեք, թե որքան ժամանակ է ձեզ անհրաժեշտ ավտոմատ անհետացող հաղորդագրությունների հետ կապված գործողություն կատարելու համար:\n\nԱյս կարգավորումը ոչ բոլոր հավելվածներում է աջակցվում:"</string>
<string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"Սեղմելու և պահելու հապաղումը"</string>
<string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"Գունաշրջում"</string>
<string name="accessibility_display_inversion_preference_subtitle" msgid="69291255322175323">"Կարող է ազդել սարքի աշխատանքի վրա"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Ծանուցման թրթռոց"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Թրթռազանգ"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Հպման թրթռոց"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Օգտագործել ծառայությունը"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Օգտագործել գունաշտկումը"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Օգտագործել ենթագրերը"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Օգտագործել ծառայությունը"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Օգտագործել գունաշտկումը"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Օգտագործել ենթագրերը"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Շարունակել"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Լսողական ապարատ"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Որևէ լսողական ապարատ միացված չէ"</string>
@@ -2193,8 +2195,8 @@
<string name="print_settings" msgid="7886184656544483072">"Տպում"</string>
<string name="print_settings_summary_no_service" msgid="634173687975841526">"Անջատված է"</string>
<plurals name="print_settings_summary" formatted="false" msgid="7580293760281445137">
- <item quantity="one"><xliff:g id="COUNT">%1$d</xliff:g> print services on</item>
- <item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> տպման ծառայություն միացված է</item>
+ <item quantity="one">Միացված է <xliff:g id="COUNT">%1$d</xliff:g> տպման ծառայություն</item>
+ <item quantity="other">Միացված է <xliff:g id="COUNT">%1$d</xliff:g> տպման ծառայություն</item>
</plurals>
<plurals name="print_jobs_summary" formatted="false" msgid="6180308415569432845">
<item quantity="one"><xliff:g id="COUNT">%1$d</xliff:g> print jobs</item>
@@ -2276,10 +2278,10 @@
<string name="battery_tip_smart_battery_title" product="device" msgid="7419448992583346364">"Երկարացրեք սարքի մարտկոցի աշխատաժամանակը"</string>
<string name="battery_tip_smart_battery_summary" msgid="5344821856478265778">"Միացնել մարտկոցի կառավարիչը"</string>
<string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"Միացնել մարտկոցի տնտեսումը"</string>
- <string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Մարտկոցի լիցքը կարող է սպասվածից շուտ սպառվել"</string>
+ <string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Մարտկոցը գուցե սպասվածից շուտ սպառվի"</string>
<string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"Մարտկոցի տնտեսումը միացված է"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"Որոշ գործառույթներ կարող են պատշաճ չաշխատել"</string>
- <string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Հեռախոսը սովորականից շատ է էներգիա օգտագործել"</string>
+ <string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Սարքը սովորականից շատ է օգտագործվել"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"Պլանշետը սովորականից շատ է էներգիա օգտագործել"</string>
<string name="battery_tip_high_usage_title" product="device" msgid="8304138287288309490">"Սարքը սովորականից շատ է էներգիա օգտագործել"</string>
<string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"Մարտկոցի լիցքը կարող է սովորականից շուտ սպառվել"</string>
@@ -2374,7 +2376,7 @@
<string name="usage_type_wake_lock" msgid="6729977238748413476">"Արթուն պահել"</string>
<string name="usage_type_gps" msgid="5914062195732419196">"GPS"</string>
<string name="usage_type_wifi_running" msgid="4192567991891907030">"Wi‑Fi-ն աշխատում է"</string>
- <string name="usage_type_phone" product="tablet" msgid="4279605085824633501">"Գրասալիկ"</string>
+ <string name="usage_type_phone" product="tablet" msgid="4279605085824633501">"Պլանշետ"</string>
<string name="usage_type_phone" product="default" msgid="3901842461077646153">"Հեռախոս"</string>
<string name="usage_type_data_send" msgid="6339880867171142725">"Ուղարկված բջջային փաթեթներ"</string>
<string name="usage_type_data_recv" msgid="2099757621601333453">"Ստացված բջջային փաթեթներ"</string>
@@ -2447,11 +2449,11 @@
<string name="battery_saver" msgid="3989710213758938398">"Մարտկոցի տնտեսում"</string>
<string name="battery_saver_auto_title" msgid="4158659069641849952">"Ավտոմատ միացնել"</string>
<string name="battery_saver_auto_no_schedule" msgid="739814529432092706">"Ժամանակացույց չկա"</string>
- <string name="battery_saver_auto_routine" msgid="886514412067906980">"Լիցքավորումների վիճակագրության հիման վրա"</string>
+ <string name="battery_saver_auto_routine" msgid="886514412067906980">"Լիցքավորման պատմության հիման վրա"</string>
<string name="battery_saver_auto_percentage" msgid="5791982309331921556">"Լիցքի մակարդակի հիման վրա"</string>
<string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"Միացնել, եթե հավանականությունը մեծ է, որ լիցքի մակարդակը չի բավականացնի մինչև հաջորդ լիցքավորումը"</string>
- <string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"Միացնել <xliff:g id="PERCENT">%1$s</xliff:g> լիցքի դեպքում"</string>
- <string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Ժամանակացույցի ստեղծում"</string>
+ <string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"Կմիանա <xliff:g id="PERCENT">%1$s</xliff:g> լիցքի դեպքում"</string>
+ <string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Ստեղծել ժամանակացույց"</string>
<string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"Անջատել լրիվ լիցքավորված ժամանակ"</string>
<string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"Մարտկոցի տնտեսման ռեժիմն անջատվում է, երբ հեռախոսի լիցքը <xliff:g id="PERCENT">%1$s</xliff:g> է"</string>
<string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"Մարտկոցի տնտեսման ռեժիմն անջատվում է, երբ պլանշետի լիցքը <xliff:g id="PERCENT">%1$s</xliff:g> է"</string>
@@ -2459,12 +2461,12 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Միացնել"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Օգտագործել մարտկոցի տնտեսումը"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Օգտագործել մարտկոցի տնտեսումը"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Ավտոմատ միացնել"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Երբեք"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"մատկոցի <xliff:g id="PERCENT">%1$s</xliff:g> լիցքի դեպքում"</string>
<string name="battery_percentage" msgid="7782252476471033843">"Մարտկոցի լիցքը"</string>
- <string name="battery_percentage_description" msgid="9219875229166700610">"Մարտկոցի տոկոսը ցուցադրել կարգավիճակի գոտում"</string>
+ <string name="battery_percentage_description" msgid="9219875229166700610">"Մարտկոցի լիցքի տոկոսը ցույց տալ կարգավիճակի տողում"</string>
<string name="process_stats_summary_title" msgid="9189588417488537954">"Գործընթացի վիճակագրություն"</string>
<string name="process_stats_summary" msgid="8077998499161221885">"Ընթացիկ գործընթացների տեխնիկական վիճակագրություն"</string>
<string name="app_memory_use" msgid="5126237308545653706">"Օգտագործվող հիշողություն"</string>
@@ -2507,7 +2509,7 @@
<string name="voice_interactor_preference_summary" msgid="7321365727286121067">"Ամբողջական թեժ բառեր և շփում"</string>
<string name="voice_recognizer_preference_summary" msgid="3681161319745912594">"Խոսքից տեքստի պարզ տարբերակ"</string>
<string name="voice_interaction_security_warning" msgid="4986261746316889768">"Ձայնի ներածման այս ծառայությունը կկարողանա կատարել ձայնի մշտադիտարկում և ձեր անունից վերահսկել ձայնի հնարավորությամբ ծրագրերը: Դրա պատճառը <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> ծրագիրն է: Միացնե՞լ այս ծառայությունը:"</string>
- <string name="tts_engine_preference_title" msgid="1183116842356275061">"Նախընտրելի մեխանիզմը"</string>
+ <string name="tts_engine_preference_title" msgid="1183116842356275061">"Նախընտրելի համակարգը"</string>
<string name="tts_engine_settings_title" msgid="4079757915136562358">"Համակարգի կարգավորումները"</string>
<string name="tts_sliders_title" msgid="1927481069989092278">"Խոսքի արագությունը և բարձրությունը"</string>
<string name="tts_engine_section_title" msgid="7796486438271227076">"Համակարգ"</string>
@@ -2578,7 +2580,7 @@
<string name="add_device_admin" msgid="1621152410207260584">"Ակտիվացնել այս սարքի ադմինիստրատորի հավելվածը"</string>
<string name="device_admin_add_title" msgid="6097881332139146897">"Սարքի ադմինիստրատոր"</string>
<string name="device_admin_warning" msgid="4421817419326480449">"Ադմինիստրատորի այս հավելվածի ակտիվացումը <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածին թույլ կտա կատարել հետևյալ գործողությունները`"</string>
- <string name="device_admin_status" msgid="5424944611789040723">"Այս ադմինիստրատորն ակտիվ է և թույլ է տալիս <xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածին կատարել հետևյալ գործողությունները`"</string>
+ <string name="device_admin_status" msgid="5424944611789040723">"Ադմինիստրատորի այս հավելվածը ակտիվ է և թույլ է տալիս <xliff:g id="APP_NAME">%1$s</xliff:g>-ին կատարել հետևյալ գործողությունները`"</string>
<string name="profile_owner_add_title" msgid="735805919754362791">"Ակտիվացնե՞լ պրոֆիլների կառավարիչը:"</string>
<string name="adding_profile_owner_warning" msgid="1284541194547382194">"Շարունակելու դեպքում օգտատերը կկառավարվի ձեր ադմինիստրատորի կողմից, որը, ձեր անձնական տվյալներից բացի, կկարողանա պահել նաև դրա հետ առնչվող տվյալները:\n\nՁեր ադմինիստրատորը կարող է վերահսկել և կառավարել կարգավորումները, մուտքը, հավելվածները և այս օգտատիրոջ հետ առնչվող տվյալները, ներառյալ ցանցային գործունեությունը և ձեր սարքի տեղադրության տվյալները:"</string>
<string name="admin_disabled_other_options" msgid="8097063307730025707">"Ադմինիստրատորն անջատել է այլ ընտրանքները"</string>
@@ -2599,7 +2601,7 @@
<string name="work_mode_label" msgid="6845849194740195757">"Աշխատանքային պրոֆիլ"</string>
<string name="work_mode_on_summary" msgid="1682781113156323592">"Կառավարվում է ձեր կազմակերպության կողմից"</string>
<string name="work_mode_off_summary" msgid="1688885392211178315">"Հավելվածներն ու ծանուցումներն անջատված են"</string>
- <string name="remove_managed_profile_label" msgid="4625542553784793536">"Հեռացնել աշխատանքային դիտարկումը"</string>
+ <string name="remove_managed_profile_label" msgid="4625542553784793536">"Հեռացնել աշխատանքային պրոֆիլը"</string>
<string name="background_data" msgid="8275750862371471171">"Հետնաշերտի տվյալներ"</string>
<string name="background_data_summary" msgid="799640633948841990">"Ծրագրերը կարող են համաժամացնել, ուղարկել և ստանալ տվյալներ ցանկացած պահի"</string>
<string name="background_data_dialog_title" msgid="8306650658158895976">"Կասեցնե՞լ հետնաշերտի տվյալները:"</string>
@@ -2671,7 +2673,7 @@
<string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"Ինքնահամաժամացնել անձնական տվյալները"</string>
<string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Ինքնահամաժամացնել աշխատանքային տվյալները"</string>
<string name="data_usage_change_cycle" msgid="447761920472170031">"Ցիկլի փոփոխում…"</string>
- <string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"Ամսվա մի օր` տվյալների օգտագործման աշխատաշրջանը սահմանելու համար`"</string>
+ <string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"Ամսվա մի օր` տվյալների օգտագործման աշխատաշրջանը սահմանելու համար՝"</string>
<string name="data_usage_empty" msgid="7981405723435034032">"Այս ընթացքում հավելվածները տվյալներ չեն օգտագործել:"</string>
<string name="data_usage_label_foreground" msgid="2471091128648754601">"Ակտիվ ռեժիմ"</string>
<string name="data_usage_label_background" msgid="1618794447370396845">"Ֆոնային ռեժիմ"</string>
@@ -2713,7 +2715,7 @@
<string name="data_usage_limit_editor_title" msgid="1687908662154108293">"Թրաֆիկի օգտագործման սահմանը"</string>
<string name="data_usage_limit_dialog_title" msgid="8804760847110131518">"Սահմանափակել տվյալների օգտագործումը"</string>
<string name="data_usage_limit_dialog_mobile" product="tablet" msgid="2000713577999830647">"Նշված սահմանաչափն անցնելու դեպքում պլանշետը կանջատի բջջային ինտերնետը։\n\nՔանի որ տվյալների օգտագործումը չափում է պլանշետը, իսկ օպերատորի հաշվարկները կարող են տարբերվել, խորհուրդ ենք տալիս նշել նախատեսվածից ցածր սահմանաչափ։"</string>
- <string name="data_usage_limit_dialog_mobile" product="default" msgid="943546278705619205">"Նշված սահմանաչափն անցնելու դեպքում հեռախոսը կանջատի բջջային ինտերնետը։\n\nՕպերատորի վիճակագրությունը կարող է տարբերվել հեռախոսի տվյալներից, խորհուրդ ենք տալիս նշել նախատեսվածից ցածր սահմանաչափ։"</string>
+ <string name="data_usage_limit_dialog_mobile" product="default" msgid="943546278705619205">"Նշված սահմանաչափն անցնելու դեպքում հեռախոսում կանջատվի բջջային ինտերնետը։\n\nՕպերատորի վիճակագրությունը կարող է տարբերվել հեռախոսի տվյալներից, խորհուրդ ենք տալիս նշել նախատեսվածից ցածր սահմանաչափ։"</string>
<string name="data_usage_restrict_background_title" msgid="3568746530413220844">"Սահմանափակե՞լ հետնաշերտի տվյալները:"</string>
<string name="data_usage_restrict_background" msgid="995811034744808575">"Եթե սահմանափակեք բջջային ինտերնետի ֆոնային օգտագործումը, ապա որոշ հավելվածներ և ծառայություններ չեն աշխատի մինչև Wi‑Fi ցանցին միանալը:"</string>
<string name="data_usage_restrict_background_multiuser" product="tablet" msgid="6032810839234864814">"Եթե սահմանափակեք բջջային ինտերնետի ֆոնային օգտագործումը, ապա որոշ հավելվածներ և ծառայություններ չեն աշխատի մինչև Wi‑Fi ցանցին միանալը:\n\nԱյս կարգավորումը վերաբերում է այս պլանշետի բոլոր օգտատերերին:"</string>
@@ -2745,12 +2747,12 @@
<string name="vpn_ipsec_identifier" msgid="1230238784830362888">"IPSec նույնացուցիչ"</string>
<string name="vpn_ipsec_secret" msgid="1531503910441962752">"IPSec նախորոշված բանալին"</string>
<string name="vpn_ipsec_user_cert" msgid="2762078384595366852">"IPSec օգտատիրոջ վկայագիրը"</string>
- <string name="vpn_ipsec_ca_cert" msgid="5537567128766402789">"IPSec CA վկայական"</string>
+ <string name="vpn_ipsec_ca_cert" msgid="5537567128766402789">"IPSec CA հավաստագիր"</string>
<string name="vpn_ipsec_server_cert" msgid="3066696943831527934">"IPSec սերվերի վկայական"</string>
<string name="vpn_show_options" msgid="7672984921872882859">"Ցույց տալ լրացուցիչ ընտրանքները"</string>
<string name="vpn_search_domains" msgid="8469394307693909080">"DNS որոնման տիրույթներ"</string>
- <string name="vpn_dns_servers" msgid="3017453300909321239">"DNS սերվերներ (օրինակ` 8.8.8.8)"</string>
- <string name="vpn_routes" msgid="3393989650778663742">"Փոխանցման երթուղիներ (օրինակ` 10.0.0.0/8)"</string>
+ <string name="vpn_dns_servers" msgid="3017453300909321239">"DNS սերվերներ (օրինակ՝ 8.8.8.8)"</string>
+ <string name="vpn_routes" msgid="3393989650778663742">"Փոխանցման երթուղիներ (օրինակ՝ 10.0.0.0/8)"</string>
<string name="vpn_username" msgid="5357878823189445042">"Օգտանուն"</string>
<string name="vpn_password" msgid="5325943601523662246">"Գաղտնաբառ"</string>
<string name="vpn_save_login" msgid="6215503139606646915">"Պահել հաշվի տեղեկությունները"</string>
@@ -2792,7 +2794,7 @@
<string name="vpn_always_on_summary" msgid="3639994551631437397">"VPN-ին միշտ կապակցված մնալ"</string>
<string name="vpn_always_on_summary_not_supported" msgid="9077720997795965133">"Չի աջակցվում այս հավելվածում"</string>
<string name="vpn_always_on_summary_active" msgid="8962619701962239088">"Միշտ միացված ընտրանքն ակտիվ է"</string>
- <string name="vpn_require_connection" msgid="5413746839457797350">"Արգելափակել առանց VPN-ի կապակցումները"</string>
+ <string name="vpn_require_connection" msgid="5413746839457797350">"Արգելափակել առանց VPN-ի միացումները"</string>
<string name="vpn_require_connection_title" msgid="8361434328767853717">"VPN միացում պահանջե՞լ։"</string>
<string name="vpn_lockdown_summary" msgid="6770030025737770861">"Ընտրել VPN պրոֆիլ` այդ պրոֆիլին միշտ միացված լինելու համար: Ցանցային շրջանառությունը թույլատրված կլինի միայն VPN-ին միացված ժամանակ:"</string>
<string name="vpn_lockdown_none" msgid="3789288793603394679">"Ոչ մեկը"</string>
@@ -2913,17 +2915,17 @@
<string name="apps_with_restrictions_header" msgid="8656739605673756176">"Սահմանափակումներով ծրագրեր"</string>
<string name="apps_with_restrictions_settings_button" msgid="5065896213467171744">"Ընդլայնել ծրագրի կարգավորումները"</string>
<string name="nfc_payment_settings_title" msgid="5070077706735415291">"Հպել ու վճարել"</string>
- <string name="nfc_payment_how_it_works" msgid="7607901964687787177">"Ինչպես է այն աշխատում"</string>
- <string name="nfc_payment_no_apps" msgid="8844440783395420860">"Վճարեք հեռախոսի միջոցով խանութներում"</string>
- <string name="nfc_payment_default" msgid="7869273092463612271">"Վճարման հիմնական հավելվածը"</string>
+ <string name="nfc_payment_how_it_works" msgid="7607901964687787177">"Ինչպես է դա աշխատում"</string>
+ <string name="nfc_payment_no_apps" msgid="8844440783395420860">"Խանութներում վճարեք հեռախոսի միջոցով"</string>
+ <string name="nfc_payment_default" msgid="7869273092463612271">"Վճարումների հիմնական հավելված"</string>
<string name="nfc_payment_default_not_set" msgid="955804193510335338">"Կարգավորված չէ"</string>
<string name="nfc_payment_app_and_desc" msgid="102312684211458190">"<xliff:g id="APP">%1$s</xliff:g> - <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
<string name="nfc_payment_use_default" msgid="3098724195746409476">"Օգտագործել կանխադրվածը"</string>
<string name="nfc_payment_favor_default" msgid="7555356982142464260">"Միշտ"</string>
- <string name="nfc_payment_favor_open" msgid="3739055715000436749">"Բացի այն դեպքերից, երբ վճարումների այլ հավելված է բացված"</string>
+ <string name="nfc_payment_favor_open" msgid="3739055715000436749">"Եթե ուրիշ վճարային հավելված բացված չէ"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"«Հպել ու վճարել» տերմինալում օգտագործել"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"Վճարում տերմինալով"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Տեղադրեք վճարումների որևէ հավելված: Ապա պարզապես մոտեցրեք հեռախոսը հետևի մասով ցանկացած տերմինալի՝ առանց անհպում վճարման նշանը դեպի տերմինալը:"</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Կարգավորեք վճարային հավելվածը, ապա հեռախոսի հետևի մասով հպեք անհպում վճարման նշան ունեցող որևէ տերմինալի։"</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"Պարզ է"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"Ավելին..."</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"Սահմանե՞լ որպես նախընտրանք:"</string>
@@ -3021,7 +3023,7 @@
<string name="sim_notification_title" msgid="2457890173055955672">"SIM քարտերը փոխարինվել են:"</string>
<string name="sim_notification_summary" msgid="6421556454979313850">"Հպեք՝ կարգավորելու համար"</string>
<string name="sim_pref_divider" msgid="4967718397875240190">"Օգտագործել SIM քարտը հետևյալի համար՝"</string>
- <string name="sim_calls_ask_first_prefs_title" msgid="8209265235625420102">"Հարցնել ամեն անգամ"</string>
+ <string name="sim_calls_ask_first_prefs_title" msgid="8209265235625420102">"Ամեն անգամ հարցնել"</string>
<string name="sim_selection_required_pref" msgid="8738591348923992419">"Ընտրեք SIM քարտը"</string>
<string name="sim_selection_channel_title" msgid="5671915549529226023">"SIM քարտի ընտրություն"</string>
<string name="dashboard_title" msgid="3343056553551876215">"Կարգավորումներ"</string>
@@ -3111,7 +3113,7 @@
<string name="keywords_fingerprint_settings" msgid="902902368701134163">"մատնահետք, ավելացնել մատնահետք"</string>
<string name="keywords_display_auto_brightness" msgid="1810596220466483996">"խամրեցված էկրան, հպէկրան, մարտկոց, խելացի պայծառություն, դինամիկ պայծառություն"</string>
<string name="keywords_display_adaptive_sleep" msgid="1695357782432822811">"խամրած էկրան, քնելու ռեժիմ, մարտկոց, ժամանակի սպառում, ուշադրություն, էկրան, ցուցադրել, անգործուն ռեժիմ"</string>
- <string name="keywords_auto_rotate" msgid="4320791369951647513">"պտտել, շրջել, պտույտ, ուղղահայաց, հորիզոնական, դիրք, դիմանկար, բնանկար"</string>
+ <string name="keywords_auto_rotate" msgid="4320791369951647513">"պտտել, շրջել, պտույտ, ուղղաձիգ, հորիզոնական, դիրք, դիմանկար, բնանկար"</string>
<string name="keywords_system_update_settings" msgid="4419971277998986067">"թարմացնել, Android"</string>
<string name="keywords_zen_mode_settings" msgid="4103819458182535493">"չանհանգստացնել, ժամանակացույց, ծանուցումներ, արգելափակել, անձայն ռեժիմ, թրթռալ, քուն, աշխատանք, կենտրոնացում, ձայն, անջատել ձայնը, օր, աշխատանքային օր, հանգստյան օր, աշխատանքային օրվա երեկո, միջոցառում"</string>
<string name="keywords_screen_timeout" msgid="4328381362313993666">"էկրան, կողպման ժամանակը, դադար, կողպէկրան"</string>
@@ -3143,13 +3145,13 @@
<string name="notification_unknown_sound_title" msgid="8043718667804838398">"Հավելվածի տրամադրված ձայնը"</string>
<string name="notification_sound_default" msgid="2664544380802426260">"Ծանուցման կանխադրված ձայնը"</string>
<string name="alarm_ringtone_title" msgid="6411326147408635902">"Զարթուցիչի կանխադրված ձայնը"</string>
- <string name="vibrate_when_ringing_title" msgid="2757996559847126952">"Թրթռալ զանգերի ժամանակ"</string>
+ <string name="vibrate_when_ringing_title" msgid="2757996559847126952">"Թրթռալ զանգի ժամանակ"</string>
<string name="other_sound_settings" msgid="5250376066099818676">"Այլ ձայներ"</string>
<string name="dial_pad_tones_title" msgid="8877212139988655769">"Թվաշարի հնչերանգներ"</string>
<string name="screen_locking_sounds_title" msgid="4407110895465866809">"Էկրանի կողպման ձայներ"</string>
<string name="charging_sounds_title" msgid="5070437987230894287">"Լիցքավորման ձայներ և թրթռոց"</string>
<string name="docking_sounds_title" msgid="2573137471605541366">"Միակցման ձայներ"</string>
- <string name="touch_sounds_title" msgid="165237488496165652">"Հպման ձայներ"</string>
+ <string name="touch_sounds_title" msgid="165237488496165652">"Հպում"</string>
<string name="vibrate_on_touch_title" msgid="6360155469279157684">"Թրթռոց հպելիս"</string>
<string name="vibrate_on_touch_summary" msgid="5504424764028676043">"Թրթռալ՝ կոճակները, ստեղները սեղմելու և այլ գործողությունների դեպքում"</string>
<string name="dock_audio_media_title" msgid="1859521680502040781">"Նվագարկել միակցիչի բարձրախոսով"</string>
@@ -3212,8 +3214,8 @@
<string name="zen_mode_block_effect_sound" msgid="1499243540186357631">"Անջատել ձայնը և թրթռոցը"</string>
<string name="zen_mode_block_effect_intent" msgid="5666951244667422668">"Չմիացնել էկրանը"</string>
<string name="zen_mode_block_effect_light" msgid="8679333758037487644">"Չմիացնել թարթող լույսը"</string>
- <string name="zen_mode_block_effect_peek" msgid="6075662813575910221">"Չցուցադրել էկրանին հայտնվող ծանուցումներ"</string>
- <string name="zen_mode_block_effect_status" msgid="6516614225115681068">"Թաքցնել կարգավիճակի գոտու պատկերակները էկրանի վերևից"</string>
+ <string name="zen_mode_block_effect_peek" msgid="6075662813575910221">"Հավելվածների վրայից չցուցադրել ծանուցումներ"</string>
+ <string name="zen_mode_block_effect_status" msgid="6516614225115681068">"Թաքցնել կարգավիճ․ գոտու պատկերակները էկրանի վերևից"</string>
<string name="zen_mode_block_effect_badge" msgid="3891743027347075136">"Թաքցնել ծանուց․ կետիկները հավելվ․ պատկերակներից"</string>
<string name="zen_mode_block_effect_ambient" msgid="6382013125863616197">"Ցույց չտալ ծանուցումները"</string>
<string name="zen_mode_block_effect_list" msgid="6081548478844912181">"Թաքցնել ծանուցումների ցանկից"</string>
@@ -3242,7 +3244,7 @@
<string name="zen_mode_sound_summary_off_with_info" msgid="3910718455243440265">"Անջատված է/<xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="zen_mode_sound_summary_off" msgid="2800265178411749309">"Անջատված է"</string>
<string name="zen_mode_sound_summary_on" msgid="6964666541479146310">"Միացված է"</string>
- <string name="zen_mode_duration_summary_always_prompt" msgid="7642321938427056823">"Հարցնել ամեն անգամ (եթե ավտոմատ չմիանա)"</string>
+ <string name="zen_mode_duration_summary_always_prompt" msgid="7642321938427056823">"Ամեն անգամ հարցնել (եթե ավտոմատ չմիանա)"</string>
<string name="zen_mode_duration_summary_forever" msgid="4563938129424903030">"Մինչև չանջատեք (եթե ավտոմատ չմիանա)"</string>
<plurals name="zen_mode_duration_summary_time_hours" formatted="false" msgid="8872000022033647725">
<item quantity="one"><xliff:g id="NUM_HOURS">%d</xliff:g> ժամ (եթե ավտոմատ չմիանա)</item>
@@ -3275,7 +3277,7 @@
<string name="zen_onboarding_settings" msgid="1416466597876383322">"Կարգավորումներ"</string>
<string name="zen_onboarding_new_setting_title" msgid="3622673375041304362">"Ամբողջությամբ անջատել ծանուցումները"</string>
<string name="zen_onboarding_current_setting_title" msgid="2560330551761407563">"Անջատել ծանուցումների ձայնը"</string>
- <string name="zen_onboarding_new_setting_summary" msgid="8264430315983860075">"Ծանուցումներն ամբողջությամբ կանջատվեն։ Դուք կստանաք միայն աստղանշված կոնտակտներից և կրկնվող զանգեր։"</string>
+ <string name="zen_onboarding_new_setting_summary" msgid="8264430315983860075">"Ծանուցումներն ամբողջությամբ կանջատվեն։ Զանգեր կստանաք միայն աստղանշված և հաճախակի զանգող բաժանորդներից։"</string>
<string name="zen_onboarding_current_setting_summary" msgid="3569246708507270821">"(ընթացիկ կարգավորումը)"</string>
<string name="zen_onboarding_dnd_visual_disturbances_header" msgid="7584229011611927613">"Փոփոխե՞լ «Չանհանգստացնել» ռեժիմի ծանուցումների կարգավորումները"</string>
<string name="sound_work_settings" msgid="4140215240360927923">"Աշխատանքային պրոֆիլի ձայները"</string>
@@ -3319,7 +3321,7 @@
<string name="notification_pulse_title" msgid="4861418327614907116">"Թարթող լույս"</string>
<string name="lock_screen_notifications_title" msgid="6889072265118747835">"Կողպէկրանին"</string>
<string name="locked_work_profile_notification_title" msgid="8307025804986190658">"Երբ պրոֆիլն արգելափակված է"</string>
- <string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"Ցուցադրել ծանուցումներն ամբողջությամբ"</string>
+ <string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"Ծանուցումները ցույց տալ ամբողջությամբ"</string>
<string name="lock_screen_notifications_summary_hide" msgid="3668806866535260143">"Թաքցնել գաղտնի տվյալները"</string>
<string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"Չցուցադրել ծանուցումներ"</string>
<string name="lock_screen_notifications_interstitial_message" msgid="4230189215124387818">"Ընտրեք ծանուցումների ցուցադրման ռեժիմը կողպված սարքում։"</string>
@@ -3388,7 +3390,7 @@
<string name="picture_in_picture_app_detail_title" msgid="3916189052657425936">"Նկար նկարի մեջ"</string>
<string name="picture_in_picture_app_detail_switch" msgid="747422998967185418">"Թույլատրել «Նկար նկարի մեջ» ռեժիմը"</string>
<string name="picture_in_picture_app_detail_summary" msgid="918632751775525347">"Թույլատրել հավելվածին ստեղծել նկար նկարի մեջ պատուհան, երբ հավելվածը բաց է կամ այն օգտագործելուց հետո (օրինակ՝ տեսանյութի դիտումը շարունակելու համար): Այս պատուհանը ցուցադրվում է ձեր կողմից օգտագործվող այլ հավելվածների վրայից:"</string>
- <string name="manage_zen_access_title" msgid="3058206309728524196">"«Չանհանգստացնել» գործառույթի հասանելիությունը"</string>
+ <string name="manage_zen_access_title" msgid="3058206309728524196">"«Չանհանգստացնել» գործառույթի հասանելիություն"</string>
<string name="zen_access_detail_switch" msgid="8706332327904974500">"Թույլատրել «Չանհանգստացնել» ռեժիմը"</string>
<string name="zen_access_empty_text" msgid="7667538993781607731">"Տեղադրված հավելվածներից ոչ մեկը Չանհանգստացնել հարցում չի ուղարկել"</string>
<string name="loading_notification_apps" msgid="1978345231934072091">"Ծրագրերը բեռնվում են..."</string>
@@ -3477,7 +3479,7 @@
<string name="summary_range_verbal_combination" msgid="8799629589758200970">"<xliff:g id="START">%1$s</xliff:g>-ից <xliff:g id="END">%2$s</xliff:g>"</string>
<string name="zen_mode_calls" msgid="1844534357711539325">"Թույլատրել զանգերը"</string>
<string name="zen_mode_calls_title" msgid="2024387562355793661">"Զանգեր"</string>
- <string name="zen_mode_calls_footer" msgid="6319824006810688433">"Համոզվելու, որ թույլատրված զանգերը կազդանշվեն, ստուգեք՝ արդյոք սարքում միացված է զանգը կամ թրթռոցը, թե լռեցված է:"</string>
+ <string name="zen_mode_calls_footer" msgid="6319824006810688433">"Համոզվելու, որ թույլատրված զանգերը կազդանշվեն, ստուգեք՝ արդյոք սարքում միացված է զանգի ձայնը կամ թրթռոցը, թե լռեցված է:"</string>
<string name="zen_mode_custom_calls_footer" msgid="7329231648477682337">"«<xliff:g id="SCHEDULE_NAME">%1$s</xliff:g>» կանոնի համար մուտքային զանգերն արգելափակված են: Փոխեք կարգավորումները, որպեսզի ձեր մտերիմները և այլ կոնտակտներ կարողանան կապվել ձեզ հետ:"</string>
<string name="zen_mode_starred_contacts_title" msgid="7099621384597127058">"Աստղանշված կոնտակտներ"</string>
<plurals name="zen_mode_starred_contacts_summary_additional_contacts" formatted="false" msgid="1904181007981570805">
@@ -3485,13 +3487,13 @@
<item quantity="other">Եվս <xliff:g id="NUM_PEOPLE">%d</xliff:g> կոնտակտ</item>
</plurals>
<string name="zen_mode_messages" msgid="2908722562188394107">"Թույլատրել SMS"</string>
- <string name="zen_mode_messages_footer" msgid="5048951937714668561">"Համոզվելու, որ թույլատրված հաղորդագրությունները կազդանշվեն, ստուգեք՝ արդյոք սարքում միացված է զանգը կամ թրթռոցը, թե լռեցված է:"</string>
+ <string name="zen_mode_messages_footer" msgid="5048951937714668561">"Համոզվելու, որ թույլատրված հաղորդագրությունները կազդանշվեն, ստուգեք՝ արդյոք սարքում միացված է զանգի ձայնը կամ թրթռոցը, թե լռեցված է:"</string>
<string name="zen_mode_custom_messages_footer" msgid="5566007423100361691">"«<xliff:g id="SCHEDULE_NAME">%1$s</xliff:g>» կանոնի համար մուտքային հաղորդագրություններն արգելափակված են: Փոխեք կարգավորումները, որպեսզի ձեր մտերիմները և այլ կոնտակտներ կարողանան կապվել ձեզ հետ:"</string>
<string name="zen_mode_messages_title" msgid="786261471294055181">"SMS, MMS և հաղորդագրման հավելվածներ"</string>
<string name="zen_mode_from_anyone" msgid="7778836826814131083">"Բոլորից"</string>
<string name="zen_mode_from_contacts" msgid="267034158294332688">"Միայն կոնտակտներից"</string>
<string name="zen_mode_from_starred" msgid="7349984569117392260">"Միայն աստղանշված կոնտակտներից"</string>
- <string name="zen_calls_summary_starred_repeat" msgid="9191394641577678207">"Աստղանշված կոնտակտներից և կրկնվող զանգեր"</string>
+ <string name="zen_calls_summary_starred_repeat" msgid="9191394641577678207">"Աստղանշված և հաճախակի զանգող բաժանորդներից"</string>
<string name="zen_calls_summary_contacts_repeat" msgid="7747592096431111510">"Կոնտակտներից և կրկնվող զանգեր"</string>
<string name="zen_calls_summary_repeat_only" msgid="8839703337232747964">"Միայն կրկնվող զանգեր"</string>
<string name="zen_mode_from_none" msgid="7683889985618637010">"Ոչ ոքից"</string>
@@ -3507,7 +3509,7 @@
<string name="zen_mode_reminders_list" msgid="7347061314032326677">"հիշեցումներ"</string>
<string name="zen_mode_events" msgid="5784076928339534984">"Թույլատրել միջոցառումները"</string>
<string name="zen_mode_bypassing_apps" msgid="3080739479028713449">"Թույլատրել հավելվածներին փոխել «Չանհանգստացնել» ռեժիմի կարգավորումները"</string>
- <string name="zen_mode_bypassing_apps_title" msgid="2115024664615538847">"Հավելվածների ընդլայնումներ"</string>
+ <string name="zen_mode_bypassing_apps_title" msgid="2115024664615538847">"Հավելվածների բացառություններ"</string>
<plurals name="zen_mode_bypassing_apps_subtext" formatted="false" msgid="8723144434730871572">
<item quantity="one"><xliff:g id="NUMBER">%1$d</xliff:g> հավելվածի ծանուցումները կարող են փոխել «Չանհանգստացնել» ռեժիմի կարգավորումները</item>
<item quantity="other"><xliff:g id="NUMBER">%1$d</xliff:g> հավելվածի ծանուցումները կարող են փոխել «Չանհանգստացնել» ռեժիմի կարգավորումները</item>
@@ -3628,7 +3630,7 @@
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> լրացուցիչ թույլտվություն</item>
</plurals>
<string name="runtime_permissions_summary_no_permissions_granted" msgid="3477934429220828771">"Թույլտվություններ չեն շնորհվել"</string>
- <string name="runtime_permissions_summary_no_permissions_requested" msgid="3901636077467389637">"Թույլտվություններ չեն հայցվել"</string>
+ <string name="runtime_permissions_summary_no_permissions_requested" msgid="3901636077467389637">"Հավելվածը թույլտվություններ չի պահանջել"</string>
<string name="filter_all_apps" msgid="4042756539846043675">"Բոլոր հավելվածները"</string>
<string name="filter_enabled_apps" msgid="5888459261768538489">"Տեղադրված հավելվածներ"</string>
<string name="filter_instant_apps" msgid="8087483282854072366">"Ակնթարթային հավելվածները"</string>
@@ -3657,7 +3659,7 @@
<item quantity="other"><xliff:g id="COUNT">%d</xliff:g> հավելված կարող է աջակցվող հղումներ բացել</item>
</plurals>
<string name="app_link_open_always" msgid="7723587434377688415">"Բացել այս հավելվածով"</string>
- <string name="app_link_open_ask" msgid="4054678686331517561">"Հարցնել ամեն անգամ"</string>
+ <string name="app_link_open_ask" msgid="4054678686331517561">"Ամեն անգամ հարցնել"</string>
<string name="app_link_open_never" msgid="5774359835242754350">"Չբացել այս հավելվածով"</string>
<string name="default_apps_title" msgid="3848048391400989931">"Կանխադրված"</string>
<string name="default_for_work" msgid="7290411716804495366">"Կանխադրված՝ աշխատանքի համար"</string>
@@ -3709,8 +3711,8 @@
<string name="high_power_off" msgid="5906679734326490426">"Մարտկոցի սպառման օպտիմալացում"</string>
<string name="high_power_system" msgid="739584574711292753">"Մարտկոցի օպտիմալացումը հասանելի չէ"</string>
<string name="high_power_desc" msgid="333756885680362741">"Մի կիրառեք մարտկոցի օպտիմալացումը: Մարտկոցի լիցքը կարող է ավելի արագ սպառվել:"</string>
- <string name="high_power_prompt_title" msgid="2805745781720454052">"Թույլատրե՞լ հավելվածին միշտ աշխատել ֆոնում:"</string>
- <string name="high_power_prompt_body" msgid="8067395096053552289">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածին ֆոնում միշտ աշխատելու թույլատվություն տրամադրելու դեպքում մարտկոցի օգտագործման ժամանակը կարող է նվազել: \n\nԱյս կարգավորումը կարող եք հետագայում փոխել՝ անցնելով Կարգավորումներ > Հավելվածներ և ծանուցումներ:"</string>
+ <string name="high_power_prompt_title" msgid="2805745781720454052">"Թույլ տա՞լ հավելվածի աշխատանքը ֆոնային ռեժիմում"</string>
+ <string name="high_power_prompt_body" msgid="8067395096053552289">"<xliff:g id="APP_NAME">%1$s</xliff:g> հավելվածին ֆոնային ռեժիմում աշխատելու թույլատվություն տրամադրելու դեպքում մարտկոցը կարող է ավելի արագ սպառվել: \n\nԱյս կարգավորումը կարող եք հետագայում փոխել՝ անցնելով Կարգավորումներ > Հավելվածներ և ծանուցումներ:"</string>
<string name="battery_summary" msgid="4345690800899981339">"Վերջին լրիվ լիցքավորումից հետո օգտագործվել է <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="battery_power_management" msgid="2853925857548647969">"Սնուցման կառավարում"</string>
<string name="no_battery_summary" msgid="4105932628367471314">"Վերջին լրիվ լիցքավորումից հետո մարտկոցը չի օգտագործվել"</string>
@@ -3740,7 +3742,7 @@
<string name="usb_pref" msgid="6194821550693495068">"USB"</string>
<string name="usb_preference" msgid="7092987095048592826">"USB-ի կարգավորումներ"</string>
<string name="usb_control_title" msgid="2379698856760894768">"USB-ն վերահսկող սարքը"</string>
- <string name="usb_control_host" msgid="193292043691034178">"Կապված սարք"</string>
+ <string name="usb_control_host" msgid="193292043691034178">"Միացված սարք"</string>
<string name="usb_control_device" msgid="9154790265254725254">"Այս սարքը"</string>
<string name="usb_switching" msgid="1230386065163529904">"Փոխարկում…"</string>
<string name="usb_switching_failed" msgid="6857722544186145439">"Չհաջողվեց փոխարկել"</string>
@@ -3759,10 +3761,10 @@
<string name="assist_access_context_title" msgid="2274614501747710439">"Օգտվել էկրանի տեքստային բովանդակությունից"</string>
<string name="assist_access_context_summary" msgid="5867997494395842785">"Թույլ տալ օգնական հավելվածին օգտվել էկրանի տեքստային բովանդակությունից"</string>
<string name="assist_access_screenshot_title" msgid="1991014038776117688">"Օգտագործել սքրինշոթը"</string>
- <string name="assist_access_screenshot_summary" msgid="3010943864000489424">"Թույլ տալ օգնական հավելվածին օգտվել էկրանի պատկերներից"</string>
+ <string name="assist_access_screenshot_summary" msgid="3010943864000489424">"Թույլ տալ օգնական հավելվածին օգտագործել էկրանի պատկերը"</string>
<string name="assist_flash_title" msgid="8852484250748551092">"Էկրանի թարթում"</string>
<string name="assist_flash_summary" msgid="6697095786317559129">"Երբ օգնական հավելվածը բացում է տեքստը Էկրանից կամ էկրանի պատկերից, էկրանի եզրագծերը թարթում են"</string>
- <string name="assist_footer" msgid="7030121180457472165">"Օգնական հավելվածներն աշխատում են էկրանին առկա տեղեկությունների հետ: Որոշ հավելվածներ աջակցում են և գործարկիչի, և ձայնային ներածման ծառայությունները, ինչը ավելի լայն հնարավորություններ է տալիս ձեզ:"</string>
+ <string name="assist_footer" msgid="7030121180457472165">"Օգնական հավելվածներն աշխատում են էկրանին առկա տեղեկությունների հետ: Որոշ հավելվածներ աջակցում են և՛ գործարկիչը, և՛ ձայնային ներածումը, ինչը ավելի լայն հնարավորություններ է տալիս ձեզ:"</string>
<string name="average_memory_use" msgid="5333366040118953945">"Հիշողության միջին օգտագործումը"</string>
<string name="maximum_memory_use" msgid="6509872438499846077">"Առավելագույն օգտագործումը"</string>
<string name="memory_usage" msgid="7963253555330830906">"Հիշողության օգտագործումը"</string>
@@ -3770,8 +3772,8 @@
<string name="memory_details" msgid="5165105904103664110">"Մանրամասներ"</string>
<string name="memory_use_summary" msgid="7676311343819965850">"Վերջին 3 ժամվա մեջ օգտագործվել է միջինը <xliff:g id="SIZE">%1$s</xliff:g> հիշողություն"</string>
<string name="no_memory_use_summary" msgid="3966550113388917978">"Վերջին 3 ժամվա մեջ հիշողություն չի օգտագործվել"</string>
- <string name="sort_avg_use" msgid="78428601253054298">"Տեսակավորել ըստ միջին օգտագործման"</string>
- <string name="sort_max_use" msgid="322772647893307413">"Տեսակավորել ըստ առավելագույն օգտագործման"</string>
+ <string name="sort_avg_use" msgid="78428601253054298">"Դասավորել ըստ միջին օգտագործման"</string>
+ <string name="sort_max_use" msgid="322772647893307413">"Դասավորել ըստ առավելագույն օգտագործման"</string>
<string name="memory_performance" msgid="3506743771947250453">"Արդյունավետություն"</string>
<string name="total_memory" msgid="7352192982476976453">"Ընդհանուր հիշողությունը"</string>
<string name="average_used" msgid="3022736210190754669">"Միջին օգագործում (%)"</string>
@@ -3831,7 +3833,7 @@
<string name="screen_zoom_title" msgid="164369086350486104">"Ցուցադրման չափը"</string>
<string name="screen_zoom_short_summary" msgid="5508079362742276703">"Տարրերի մեծացում և փոքրացում"</string>
<string name="screen_zoom_keywords" msgid="8358462497896524092">"ցուցադրման խտություն, էկրանի մասշտաբ, մասշտաբ, մասշտաբավորում"</string>
- <string name="screen_zoom_summary" msgid="5294003755961312560">"Էկրանի տարրերի մեծացում կամ փոքրացում։ Այս կարգավորումը փոխելուց հետո որոշ հավելվածներ կարող են փոխել իրենց դիրքը:"</string>
+ <string name="screen_zoom_summary" msgid="5294003755961312560">"Մեծացրեք կամ փոքրացրեք էկրանին ցուցադրվող տարրերը։ Այս կարգավորումը փոխելուց հետո որոշ հավելվածներ կարող են փոխել իրենց դիրքը էկրանին։"</string>
<string name="screen_zoom_preview_title" msgid="2924312934036753091">"Նախադիտում"</string>
<string name="screen_zoom_make_smaller_desc" msgid="1374501139722916729">"Փոքրացնել"</string>
<string name="screen_zoom_make_larger_desc" msgid="5306684807895846141">"Մեծացնել"</string>
@@ -3869,7 +3871,7 @@
<string name="backup_disabled" msgid="6941165814784765643">"Պահուստավորումն անջատված է"</string>
<string name="android_version_summary" msgid="2192751442789395445">"Տեղադրվել է Android <xliff:g id="VERSION">%1$s</xliff:g> տարբերակը"</string>
<string name="android_version_pending_update_summary" msgid="3554543810520655076">"Հասանելի է նոր տարբերակը"</string>
- <string name="disabled_by_policy_title" msgid="1238318274952958846">"Գործողությունը չի թույլատրվում"</string>
+ <string name="disabled_by_policy_title" msgid="1238318274952958846">"Գործողությունն արգելված է"</string>
<string name="disabled_by_policy_title_adjust_volume" msgid="7094547090629203316">"Հնարավոր չէ փոխել ձայնի ուժգնությունը"</string>
<string name="disabled_by_policy_title_outgoing_calls" msgid="3805836913095496278">"Զանգելն արգելված է"</string>
<string name="disabled_by_policy_title_sms" msgid="1453236584236681105">"SMS-ների ուղարկումն արգելված է"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Արգելել ծանուցումներում պատասխանների կամ այլ տեքստերի մուտքագրումը, երբ սարքը կողպված է"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Կանխադրված ուղղագրիչ"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Ընտրեք ուղղագրիչը"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Օգտագործել ուղղագրիչը"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Օգտագործել ուղղագրիչը"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Ընտրված չէ"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(ոչ մեկը)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">"՝ "</string>
@@ -4069,14 +4071,14 @@
<string name="premium_sms_warning" msgid="7604011651486294515">"Վճարովի SMS-ները կարող են լրացուցիչ ծախսեր առաջացնել: Հավելվածին թույտվություն տալու դեպքում կկարողանաք դրա միջոցով վճարովի SMS-ներ ուղարկել։"</string>
<string name="premium_sms_access" msgid="4550027460595822851">"Վճարովի SMS"</string>
<string name="bluetooth_disabled" msgid="6588102116819268238">"Անջատված է"</string>
- <string name="bluetooth_connected_summary" msgid="439920840053965217">"Կապակցված է <xliff:g id="ID_1">%1$s</xliff:g>-ին"</string>
- <string name="bluetooth_connected_multiple_devices_summary" msgid="596205630653123250">"Կապակցված է բազմակի շարժական սարքերի"</string>
+ <string name="bluetooth_connected_summary" msgid="439920840053965217">"Միացված է <xliff:g id="ID_1">%1$s</xliff:g>-ին"</string>
+ <string name="bluetooth_connected_multiple_devices_summary" msgid="596205630653123250">"Միացված է բազմակի շարժական սարքերի"</string>
<string name="demo_mode" msgid="3831081808592541104">"Համակարգի միջերեսի ցուցադրական ռեժիմ"</string>
<string name="dark_ui_mode" msgid="703844190192599217">"Թեմա"</string>
<string name="dark_ui_mode_title" msgid="8774932716427742413">"Ընտրել թեմա"</string>
<string name="dark_ui_settings_light_summary" msgid="5219102347744462812">"Այս կարգավորումը կիրառվում է նաև հավելվածների համար"</string>
<string name="dark_ui_settings_dark_summary" msgid="7042737828943784289">"Աջակցվող հավելվածները ևս կանցնեն մուգ թեմային"</string>
- <string name="quick_settings_developer_tiles" msgid="7423485925757678719">"Մշակողի արագ կարգավորման սալիկներ"</string>
+ <string name="quick_settings_developer_tiles" msgid="7423485925757678719">"Ծրագրավորողի արագ կարգավորման սալիկներ"</string>
<string name="winscope_trace_quick_settings_title" msgid="940971040388411374">"Winscope-ի հետագծում"</string>
<string name="sensors_off_quick_settings_title" msgid="3655699045300438902">"Տվիչներն անջատված են"</string>
<string name="managed_profile_settings_title" msgid="4340409321523532402">"Աշխատանքային պրոֆիլի կարգավորումներ"</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Տարածք ազատելու նպատակով հիշողության կառավարիչը ձեր սարքից հեռացնում է պահուստավորած լուսանկարները և տեսանյութերը:"</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Հեռացնել լուսանկարները և տեսանյութերը"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Հիշողության կառավարիչ"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Օգտագործել հիշողության կառավարիչը"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Օգտագործել հիշողության կառավարիչը"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Ավտոմատ"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Ձեռքով"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Ազատել տարածք հիմա"</string>
@@ -4121,18 +4123,18 @@
<string name="ambient_display_title" product="default" msgid="6785677099744344088">"Կրկնակի հպել՝ հեռախոսը ստուգելու համար"</string>
<string name="ambient_display_title" product="tablet" msgid="1106285490888683613">"Կրկնակի հպեք՝ պլանշետը ստուգելու համար"</string>
<string name="ambient_display_title" product="device" msgid="5064644474876041478">"Կրկնակի հպեք՝ սարքը ստուգելու համար"</string>
- <string name="ambient_display_summary" msgid="4882910328216411109">"Ժամանակը, ծանուցումները և այլ տեղեկություններ տեսնելու համար կրկնակի հպել էկրանին:"</string>
+ <string name="ambient_display_summary" msgid="4882910328216411109">"Ժամը, ծանուցումները և այլ տեղեկություններ տեսնելու համար կրկնակի հպել էկրանին:"</string>
<string name="ambient_display_pickup_title" product="default" msgid="7141652156907066938">"Բարձրացնել՝ հեռախոսը ստուգելու համար"</string>
<string name="ambient_display_pickup_title" product="tablet" msgid="1555456400210301959">"Բարձրացրեք՝ պլանշետը ստուգելու համար"</string>
<string name="ambient_display_pickup_title" product="device" msgid="2480126522988135037">"Բարձրացրեք՝ սարքը ստուգելու համար"</string>
<string name="ambient_display_wake_screen_title" msgid="3376988352851077102">"Անջատել էկրանի քնի ռեժիմը"</string>
- <string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"Ժամանակը, ծանուցումները և այլ տեղեկություններ տեսնելու համար վերցնել հեռախոսը:"</string>
- <string name="ambient_display_pickup_summary" product="tablet" msgid="1077745287100012928">"Ժամանակը, ծանուցումները և այլ տեղեկություններ տեսնելու համար վերցնել պլանշետը:"</string>
- <string name="ambient_display_pickup_summary" product="device" msgid="404199660076598026">"Ժամանակը, ծանուցումները և այլ տեղեկություններ տեսնելու համար վերցնել սարքը:"</string>
+ <string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"Ժամը, ծանուցումները և այլ տեղեկություններ տեսնելու համար վերցնել հեռախոսը:"</string>
+ <string name="ambient_display_pickup_summary" product="tablet" msgid="1077745287100012928">"Ժամը, ծանուցումները և այլ տեղեկություններ տեսնելու համար վերցնել պլանշետը:"</string>
+ <string name="ambient_display_pickup_summary" product="device" msgid="404199660076598026">"Ժամը, ծանուցումները և այլ տեղեկություններ տեսնելու համար վերցնել սարքը:"</string>
<string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"Հպել՝ հեռախոսը ստուգելու համար"</string>
<string name="ambient_display_tap_screen_title" product="tablet" msgid="6434521782016864148">"Հպեք՝ պլանշետը ստուգելու համար"</string>
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"Հպեք՝ սարքը ստուգելու համար"</string>
- <string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"Ժամանակը, ծանուցումները և այլ տեղեկություններ տեսնելու համար կրկնակի հպեք էկրանին:"</string>
+ <string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"Ժամը, ծանուցումները և այլ տեղեկություններ տեսնելու համար կրկնակի հպեք էկրանին:"</string>
<string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"Ծանուցումները դիտելու համար օգտագործել մատնահետքերի սկաները"</string>
<string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"Մատնահետքերի սկաներ"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"Ծանուցումները տեսնելու համար՝ մատը սահեցրեք ներքև հեռախոսի հետևի մասում գտնվող մատնահետքերի սկաների վրա"</string>
@@ -4246,7 +4248,7 @@
<string name="launch_instant_app" msgid="5251693061228352333">"Բացել"</string>
<string name="game_storage_settings" msgid="6856911551799175914">"Խաղեր"</string>
<string name="audio_files_title" msgid="3073879661731363935">"Աուդիո ֆայլեր"</string>
- <string name="app_info_storage_title" msgid="6643391804949509308">"Օգտագործած տարածքը"</string>
+ <string name="app_info_storage_title" msgid="6643391804949509308">"Օգտագործված տարածք"</string>
<string name="webview_uninstalled_for_user" msgid="3407952144444040557">"(հեռացված է <xliff:g id="USER">%s</xliff:g> օգտատիրոջ համար)"</string>
<string name="webview_disabled_for_user" msgid="8057805373224993504">"(անջատված է <xliff:g id="USER">%s</xliff:g> օգտատիրոջ համար)"</string>
<string name="autofill_app" msgid="3990765434980280073">"Ինքնալրացման ծառայություն"</string>
@@ -4308,7 +4310,7 @@
<string name="change_wifi_state_title" msgid="5140754955787584174">"Wi-Fi-ի կառավարում"</string>
<string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"Թույլ տվեք հավելվածին կառավարել Wi-Fi-ը"</string>
<string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Թույլ տվեք այս հավելվածին միացնել և անջատել Wi-Fi-ը, գտնել Wi-Fi ցանցեր և միանալ դրանց, ավելացնել և հեռացնել ցանցեր, միացնել միայն տեղային թեժ կետ"</string>
- <string name="media_output_title" msgid="8710632337456601848">"Միացնել…"</string>
+ <string name="media_output_title" msgid="8710632337456601848">"Որտեղ նվագարկել"</string>
<string name="media_output_default_summary" msgid="3159237976830415584">"Այս սարքը"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"Հեռախոս"</string>
<string name="media_output_summary" product="tablet" msgid="6672024060360538526">"Պլանշետ"</string>
@@ -4321,10 +4323,10 @@
<string name="battery_suggestion_title" product="device" msgid="765005476863631528">"Երկարացրեք սարքի մարտկոցի աշխատաժամանակը"</string>
<string name="battery_suggestion_title" product="default" msgid="3295786171830183688">"Երկարացրեք հեռախոսի մարտկոցի աշխատաժամանակը"</string>
<string name="battery_suggestion_summary" msgid="2669070349482656490"></string>
- <string name="gesture_prevent_ringing_screen_title" msgid="4173494225145223638">"Չզնգալ"</string>
- <string name="gesture_prevent_ringing_title" msgid="8827963588425673557">"Սնուցման և ձայնի բարձրացման կոճակների միաժամանակ սեղմումը՝"</string>
- <string name="gesture_prevent_ringing_sound_title" msgid="8642330448721033641">"Զնգոցը կանխելու դյուրանցում"</string>
- <string name="prevent_ringing_option_vibrate" msgid="6456505293904544108">"Թրթռոց"</string>
+ <string name="gesture_prevent_ringing_screen_title" msgid="4173494225145223638">"Զանգի ձայնի անջատում"</string>
+ <string name="gesture_prevent_ringing_title" msgid="8827963588425673557">"Սնուցման և ձայնի բարձրացման կոճակները միաժամանակ սեղմելու դեպքում"</string>
+ <string name="gesture_prevent_ringing_sound_title" msgid="8642330448721033641">"Զանգի ձայնի արագ անջատում"</string>
+ <string name="prevent_ringing_option_vibrate" msgid="6456505293904544108">"Թրթռալ"</string>
<string name="prevent_ringing_option_mute" msgid="53662688921253613">"Անջատել ձայնը"</string>
<string name="prevent_ringing_option_none" msgid="1450985763137666231">"Ոչինչ չանել"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="7961818570574683926">"Միացված է (թրթռոց)"</string>
@@ -4387,7 +4389,7 @@
<string name="mobile_data_settings_summary_auto_switch" msgid="3665863214578471494">"Հեռախոսն ավտոմատ կանցնի այս օպերատորին, երբ այն հասանելի լինի"</string>
<string name="calls_preference" msgid="2076353032705811243">"Զանգերի կարգավորում"</string>
<string name="sms_preference" msgid="8449270011976880">"SMS-ների կարգավորում"</string>
- <string name="calls_and_sms_ask_every_time" msgid="2776167541223210738">"Հարցնել ամեն անգամ"</string>
+ <string name="calls_and_sms_ask_every_time" msgid="2776167541223210738">"Ամեն անգամ հարցնել"</string>
<string name="mobile_network_summary_add_a_network" msgid="5408745221357144009">"Ավելացնել ցանց"</string>
<plurals name="mobile_network_summary_count" formatted="false" msgid="6222822873390636020">
<item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> SIM քարտ</item>
@@ -4451,7 +4453,7 @@
<string name="network_connection_timeout_dialog_ok" msgid="5156496438627748361">"Նորից փորձել"</string>
<string name="network_connection_errorstate_dialog_message" msgid="1599445930536043943">"Սխալ առաջացավ: Հավելվածը չեղարկել է սարք ընտրելու հայտը:"</string>
<string name="network_connection_connect_successful" msgid="888912275986965748">"Կապը հաստատվեց"</string>
- <string name="network_connection_request_dialog_showall" msgid="396928496030183071">"Ցուցադրել բոլորը"</string>
+ <string name="network_connection_request_dialog_showall" msgid="396928496030183071">"Ցույց տալ բոլորը"</string>
<plurals name="show_bluetooth_devices" formatted="false" msgid="7451733907387872891">
<item quantity="one"><xliff:g id="NUMBER_DEVICE_COUNT_1">%1$d</xliff:g> միացված սարք</item>
<item quantity="other"><xliff:g id="NUMBER_DEVICE_COUNT_1">%1$d</xliff:g> միացված սարք</item>
@@ -4475,7 +4477,7 @@
<string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"Հեռացնե՞լ առաջարկը:"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"Առաջարկությունը հեռացվեց"</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"Հետարկել"</string>
- <string name="low_storage_summary" msgid="4562224870189133400">"Բավարար տարածք չկա՝ <xliff:g id="PERCENTAGE">%1$s</xliff:g> օգտագործված – <xliff:g id="FREE_SPACE">%2$s</xliff:g> ազատ"</string>
+ <string name="low_storage_summary" msgid="4562224870189133400">"Ազատ տեղը քիչ է՝ <xliff:g id="PERCENTAGE">%1$s</xliff:g> օգտագործված – <xliff:g id="FREE_SPACE">%2$s</xliff:g> ազատ"</string>
<string name="contextual_card_feedback_send" msgid="8698649023854350623">"Կարծիք հայտնել"</string>
<string name="contextual_card_feedback_confirm_message" msgid="3987973028353264878">"Ուզո՞ւմ եք կարծիք հայտնել այս առաջարկության մասին"</string>
<string name="copyable_slice_toast" msgid="1357518174923789947">"<xliff:g id="COPY_CONTENT">%1$s</xliff:g>՝ պատճենվեց սեղմատախտակին:"</string>
diff --git a/tests/CarDeveloperOptions/res/values-in/arrays.xml b/tests/CarDeveloperOptions/res/values-in/arrays.xml
index 1ef5224..0c81b79 100644
--- a/tests/CarDeveloperOptions/res/values-in/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-in/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"jalankan di latar belakang"</item>
<item msgid="6423861043647911030">"volume aksesibilitas"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Lokasi"</item>
+ <item msgid="6656077694190491067">"Lokasi"</item>
+ <item msgid="8790228218278477369">"Lokasi"</item>
+ <item msgid="7836406246005211990">"Getar"</item>
+ <item msgid="3951439024549922598">"Membaca kontak"</item>
+ <item msgid="8802152411647068">"Ubah kontak"</item>
+ <item msgid="229544934599698735">"Baca log panggilan"</item>
+ <item msgid="7396102294405899613">"Ubah log panggilan"</item>
+ <item msgid="3597797992398484655">"Baca kalender"</item>
+ <item msgid="2705975774250907343">"Ubah kalender"</item>
+ <item msgid="4668747371441932697">"Lokasi"</item>
+ <item msgid="1487578921720243646">"Notifikasi postingan"</item>
+ <item msgid="4636080349724146638">"Lokasi"</item>
+ <item msgid="673510900286463926">"Telepon"</item>
+ <item msgid="542083422784609790">"Baca SMS/MMS"</item>
+ <item msgid="1033780373029588436">"Tulis SMS/MMS"</item>
+ <item msgid="5647111115517787488">"Terima SMS/MMS"</item>
+ <item msgid="8591105601108455893">"Terima SMS/MMS"</item>
+ <item msgid="7730995008517841903">"Terima SMS/MMS"</item>
+ <item msgid="2613033109026626086">"Terima SMS/MMS"</item>
+ <item msgid="3037159047591081136">"Kirim SMS/MMS"</item>
+ <item msgid="4726682243833913568">"Baca SMS/MMS"</item>
+ <item msgid="6555678522277865572">"Tulis SMS/MMS"</item>
+ <item msgid="6981734935578130884">"Ubah setelan"</item>
+ <item msgid="8705854389991425629">"Gambar di atas"</item>
+ <item msgid="5861356020344153651">"Akses notifikasi"</item>
+ <item msgid="78432174621628659">"Kamera"</item>
+ <item msgid="3986116419882154794">"Rekam audio"</item>
+ <item msgid="4516840825756409490">"Putar audio"</item>
+ <item msgid="6811712502798183957">"Baca papan klip"</item>
+ <item msgid="2780369012602289114">"Ubah papan klip"</item>
+ <item msgid="2331359440170850868">"Tombol media"</item>
+ <item msgid="6133599737122751231">"Fokus audio"</item>
+ <item msgid="6844485713404805301">"Volume utama"</item>
+ <item msgid="1600379420669104929">"Volume suara"</item>
+ <item msgid="6296768210470214866">"Volume dering"</item>
+ <item msgid="510690696071629241">"Volume media"</item>
+ <item msgid="406861638631430109">"Volume alarm"</item>
+ <item msgid="4715864795872233884">"Volume notifikasi"</item>
+ <item msgid="2311478519251301183">"Volume bluetooth"</item>
+ <item msgid="5133991377896747027">"Tetap aktif"</item>
+ <item msgid="2464189519136248621">"Lokasi"</item>
+ <item msgid="2062677934050803037">"Lokasi"</item>
+ <item msgid="1735171933192715957">"Dapatkan statistik penggunaan"</item>
+ <item msgid="1014093788778383554">"Bisukan/suarakan mikrofon"</item>
+ <item msgid="4199297950608622850">"Tampilkan seranta"</item>
+ <item msgid="2527962435313398821">"Media proyek"</item>
+ <item msgid="5117506254221861929">"Aktifkan VPN"</item>
+ <item msgid="8291198322681891160">"Tulis wallpaper"</item>
+ <item msgid="7106921284621230961">"Bantu struktur"</item>
+ <item msgid="4496533640894624799">"Bantu screenshot"</item>
+ <item msgid="2598847264853993611">"Baca status telepon"</item>
+ <item msgid="9215610846802973353">"Tambahkan pesan suara"</item>
+ <item msgid="9186411956086478261">"Gunakan sip"</item>
+ <item msgid="6884763100104539558">"Proses panggilan keluar"</item>
+ <item msgid="125513972170580692">"Sidik jari"</item>
+ <item msgid="2556071024281275619">"Sensor tubuh"</item>
+ <item msgid="617168514928339387">"Baca siaran sel"</item>
+ <item msgid="7134693570516523585">"Lokasi palsu"</item>
+ <item msgid="7224489175375229399">"Baca penyimpanan"</item>
+ <item msgid="8472735063903258202">"Tulis penyimpanan"</item>
+ <item msgid="4069276819909595110">"Aktifkan layar"</item>
+ <item msgid="1228338896751121025">"Dapatkan akun"</item>
+ <item msgid="3181581793459233672">"Jalankan di latar belakang"</item>
+ <item msgid="2340936043025374076">"Volume aksesibilitas"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Singkat"</item>
<item msgid="4816511817309094890">"Sedang"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Jangan pernah izinkan"</item>
<item msgid="8184570120217958741">"Selalu izinkan"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normal"</item>
+ <item msgid="5101233285497327432">"Sedang"</item>
+ <item msgid="1555861583162930714">"Rendah"</item>
+ <item msgid="1719683776264798117">"Kritis"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normal"</item>
+ <item msgid="6107138933849816768">"Sedang"</item>
+ <item msgid="182695359839047859">"Rendah"</item>
+ <item msgid="8577246509202964244">"Kritis"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Tetap"</item>
<item msgid="167418068739176448">"Aktivitas teratas"</item>
diff --git a/tests/CarDeveloperOptions/res/values-in/strings.xml b/tests/CarDeveloperOptions/res/values-in/strings.xml
index a855c38..6a30305 100644
--- a/tests/CarDeveloperOptions/res/values-in/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-in/strings.xml
@@ -34,7 +34,7 @@
<string name="radio_info_data_connection_enable" msgid="2554249462719717119">"Aktifkan Sambungan Data"</string>
<string name="radio_info_data_connection_disable" msgid="2430609627397999371">"Nonaktifkan Sambungan Data"</string>
<string name="volte_provisioned_switch_string" msgid="6326756678226686704">"VoLTE Disediakan"</string>
- <string name="vt_provisioned_switch_string" msgid="7458479879009293613">"Video Call Disediakan"</string>
+ <string name="vt_provisioned_switch_string" msgid="7458479879009293613">"Panggilan Video Disediakan"</string>
<string name="wfc_provisioned_switch_string" msgid="5446697646596639516">"Panggilan Wi-Fi Disediakan"</string>
<string name="eab_provisioned_switch_string" msgid="3921103790584572430">"EAB/Presence Disediakan"</string>
<string name="cbrs_data_switch_string" msgid="9120919504831536183">"Data Cbrs"</string>
@@ -53,7 +53,7 @@
<string name="radio_info_ims_reg_status_not_registered" msgid="1286050699734226077">"Tidak Terdaftar"</string>
<string name="radio_info_ims_feature_status_available" msgid="2040629393134756058">"Tersedia"</string>
<string name="radio_info_ims_feature_status_unavailable" msgid="3348223769202693596">"Tidak tersedia"</string>
- <string name="radio_info_ims_reg_status" msgid="4771711884059371514">"Pendaftaran IMS: <xliff:g id="STATUS">%1$s</xliff:g>\nSuara melalui LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nSuara melalui Wi-Fi: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nVideo Call: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nAntarmuka UT: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
+ <string name="radio_info_ims_reg_status" msgid="4771711884059371514">"Pendaftaran IMS: <xliff:g id="STATUS">%1$s</xliff:g>\nSuara melalui LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nSuara melalui Wi-Fi: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nPanggilan Video: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nAntarmuka UT: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
<string name="radioInfo_service_in" msgid="1297020186765943857">"Dalam Layanan"</string>
<string name="radioInfo_service_out" msgid="8460363463722476510">"Di Luar Area Layanan"</string>
<string name="radioInfo_service_emergency" msgid="7674989004735662599">"Panggilan Darurat Saja"</string>
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Buat teks di layar jadi lebih kecil atau lebih besar."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Buat lebih kecil"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Buat lebih besar"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Teks contoh"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Penyihir Oz yang Menakjubkan"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Bab 11: Oz, Kota Zamrud yang Menakjubkan"</string>
@@ -180,7 +179,7 @@
<string name="connected_device_connected_title" msgid="6255107326608785482">"Tersambung saat ini"</string>
<string name="connected_device_saved_title" msgid="8270136893488475163">"Perangkat yang tersimpan"</string>
<string name="connected_device_add_device_summary" msgid="7960491471270158891">"Bluetooth akan diaktifkan untuk menyambungkan"</string>
- <string name="connected_device_connections_title" msgid="9205000271382018428">"Preferensi sambungan"</string>
+ <string name="connected_device_connections_title" msgid="9205000271382018428">"Preferensi koneksi"</string>
<string name="connected_device_previously_connected_title" msgid="225918223397410428">"Perangkat yang sebelumnya tersambung"</string>
<string name="connected_device_previously_connected_screen_title" msgid="2018789662358162716">"Perangkat yang terhubung sebelumnya"</string>
<string name="connected_device_bluetooth_turned_on_toast" msgid="4652326177920814476">"Bluetooth diaktifkan"</string>
@@ -220,7 +219,7 @@
<string name="radio_info_roaming_label" msgid="3131949337031835485">"Roaming:"</string>
<string name="radio_info_imei_label" msgid="7300156592358133405">"IMEI"</string>
<string name="radio_info_call_redirect_label" msgid="2679891718182753061">"Pengalihan Panggilan:"</string>
- <string name="radio_info_ppp_resets_label" msgid="2785162965440312941">"Nomor Setel Ulang PPP Sejak Boot:"</string>
+ <string name="radio_info_ppp_resets_label" msgid="2785162965440312941">"Nomor Reset PPP Sejak Boot:"</string>
<string name="radio_info_current_network_label" msgid="5785805819312999094">"Jaringan Saat Ini:"</string>
<string name="radio_info_ppp_received_label" msgid="5217391494757374330">"Data Diterima:"</string>
<string name="radio_info_gsm_service_label" msgid="7488842563230281026">"Layanan Suara:"</string>
@@ -356,7 +355,7 @@
<string name="security_enable_widgets_title" msgid="1701510007926738088">"Aktifkan widget"</string>
<string name="security_enable_widgets_disabled_summary" msgid="4408176087132339331">"Dinonaktifkan oleh admin"</string>
<string name="lockdown_settings_title" msgid="4534779922580115990">"Tampilkan opsi kunci total"</string>
- <string name="lockdown_settings_summary" msgid="7270756909878256174">"Tampilkan opsi tombol power yang menonaktifkan Smart Lock, buka kunci dengan sidik jari, dan notifikasi di layar kunci"</string>
+ <string name="lockdown_settings_summary" msgid="7270756909878256174">"Tampilkan opsi tombol daya yang menonaktifkan Smart Lock, buka kunci dengan sidik jari, dan notifikasi di layar kunci"</string>
<string name="trust_agents_extend_unlock_title" msgid="3582017561316089951">"Perangkat dipercaya memperpanjang buka kunci"</string>
<string name="trust_agents_extend_unlock_summary" msgid="3543997596586078084">"Jika diaktifkan, perangkat dipercaya akan membuat perangkat tetap tidak terkunci untuk waktu yang lebih lama, namun tidak dapat lagi membuka perangkat yang terkunci."</string>
<string name="trust_lost_locks_screen_title" msgid="3094736590690459372">"Kunci layar saat kepercayaan hilang"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Info profil"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Akun"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Lokasi"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Gunakan lokasi"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Gunakan lokasi"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Nonaktif"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Aktif - <xliff:g id="COUNT_1">%1$d</xliff:g> aplikasi dapat mengakses lokasi</item>
@@ -450,9 +449,9 @@
<string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"Lewati sidik jari?"</string>
<string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"Penyiapan sidik jari hanya memerlukan waktu 1 atau 2 menit. Jika langkah ini dilewati, selanjutnya Anda dapat menambahkan sidik jari di setelan."</string>
<string name="lock_screen_intro_skip_title" msgid="5307431665496346914">"Lewati kunci layar?"</string>
- <string name="lock_screen_intro_skip_dialog_text_frp" product="tablet" msgid="7553945981266845264">"Fitur perlindungan perangkat tidak akan diaktifkan. Anda tidak akan dapat mencegah orang lain menggunakan tablet ini jika hilang, dicuri, atau disetel ulang."</string>
- <string name="lock_screen_intro_skip_dialog_text_frp" product="device" msgid="1378243257238015603">"Fitur perlindungan perangkat tidak akan diaktifkan. Anda tidak akan dapat mencegah orang lain menggunakan perangkat ini jika hilang, dicuri, atau disetel ulang."</string>
- <string name="lock_screen_intro_skip_dialog_text_frp" product="default" msgid="8395540117461339748">"Fitur perlindungan perangkat tidak akan diaktifkan. Anda tidak akan dapat mencegah orang lain ponsel perangkat ini jika hilang, dicuri, atau disetel ulang."</string>
+ <string name="lock_screen_intro_skip_dialog_text_frp" product="tablet" msgid="7553945981266845264">"Fitur perlindungan perangkat tidak akan diaktifkan. Anda tidak akan dapat mencegah orang lain menggunakan tablet ini jika hilang, dicuri, atau direset."</string>
+ <string name="lock_screen_intro_skip_dialog_text_frp" product="device" msgid="1378243257238015603">"Fitur perlindungan perangkat tidak akan diaktifkan. Anda tidak akan dapat mencegah orang lain menggunakan perangkat ini jika hilang, dicuri, atau direset."</string>
+ <string name="lock_screen_intro_skip_dialog_text_frp" product="default" msgid="8395540117461339748">"Fitur perlindungan perangkat tidak akan diaktifkan. Anda tidak akan dapat mencegah orang lain ponsel perangkat ini jika hilang, dicuri, atau direset."</string>
<string name="lock_screen_intro_skip_dialog_text" product="tablet" msgid="7572334562915795226">"Fitur perlindungan perangkat tidak akan diaktifkan. Anda tidak akan dapat mencegah orang lain menggunakan tablet ini jika hilang atau dicuri."</string>
<string name="lock_screen_intro_skip_dialog_text" product="device" msgid="3819285334459763813">"Fitur perlindungan perangkat tidak akan diaktifkan. Anda tidak akan dapat mencegah orang lain menggunakan perangkat ini jika hilang atau dicuri."</string>
<string name="lock_screen_intro_skip_dialog_text" product="default" msgid="5361573789585652826">"Fitur perlindungan perangkat tidak akan diaktifkan. Anda tidak akan dapat mencegah orang lain menggunakan ponsel ini jika hilang atau dicuri."</string>
@@ -489,9 +488,9 @@
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"Ups, bukan itu sensornya"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"Sentuh sensor di bagian belakang ponsel. Gunakan jari telunjuk Anda."</string>
<string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"Pendaftaran tidak selesai"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Batas waktu pendaftaran sidik jari tercapai. Coba lagi."</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Waktu pendaftaran sidik jari habis. Coba lagi."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"Pendaftaran sidik jari tidak berhasil. Coba lagi atau gunakan jari lain."</string>
- <string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"Tambahkan yang lain"</string>
+ <string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"Tambahkan lainnya"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"Berikutnya"</string>
<string name="security_settings_fingerprint_enroll_disclaimer" msgid="5831834311961551423">"Selain membuka kunci ponsel, Anda juga dapat menggunakan sidik jari untuk mengotorisasi pembelian dan akses aplikasi. "<annotation id="url">"Pelajari lebih lanjut"</annotation></string>
<string name="security_settings_fingerprint_enroll_disclaimer_lockscreen_disabled" msgid="7954742554236652690">" Opsi layar kunci dinonaktifkan. Untuk mempelajari lebih lanjut, hubungi admin organisasi Anda. "<annotation id="admin_details">"Detail selengkapnya"</annotation>\n\n"Anda tetap dapat menggunakan sidik jari untuk mengotorisasi pembelian dan akses aplikasi. "<annotation id="url">"Pelajari lebih lanjut"</annotation></string>
@@ -533,8 +532,8 @@
<string name="crypt_keeper_failed_summary" product="tablet" msgid="7844833877734529625">"Enkripsi terputus dan tidak dapat diselesaikan. Akibatnya, data pada tablet Anda tidak dapat diakses lagi. \n\n Untuk terus menggunakan tablet, Anda perlu mengembalikannya ke setelan pabrik. Saat menyiapkan tablet setelah mengembalikannya ke setelan pabrik, Anda memiliki kesempatan untuk memulihkan data apa pun yang telah dicadangkan ke Akun Google."</string>
<string name="crypt_keeper_failed_summary" product="default" msgid="2895589681839090312">"Enkripsi terputus dan tidak dapat diselesaikan. Akibatnya, data di ponsel Anda tidak dapat diakses lagi. \n\n Untuk terus menggunakan ponsel, Anda perlu mengembalikannya ke setelan pabrik. Saat menyiapkan ponsel setelah mengembalikannya ke setelan pabrik, Anda memiliki kesempatan untuk memulihkan data apa pun yang telah dicadangkan ke Akun Google."</string>
<string name="crypt_keeper_data_corrupt_title" msgid="6561535293845985713">"Dekripsi gagal"</string>
- <string name="crypt_keeper_data_corrupt_summary" product="tablet" msgid="7018748502706237323">"Sandi yang Anda masukkan benar, namun sayangnya data rusak. \n\nUntuk melanjutkan dengan tablet, Anda perlu mengembalikannya ke setelan pabrik. Saat menyiapkan tablet setelah disetel ulang, akan ada kesempatan untuk memulihkan data apa pun yang telah dicadangkan ke Akun Google."</string>
- <string name="crypt_keeper_data_corrupt_summary" product="default" msgid="5798580588985326937">"Sandi yang Anda masukkan benar, namun sayangnya data rusak. \n\nUntuk melanjutkan dengan ponsel, Anda perlu mengembalikannya ke setelan pabrik. Jika Anda menyiapkan ponsel setelah setel ulang, akan ada kesempatan untuk memulihkan data apa pun yang telah dicadangkan ke Akun Google."</string>
+ <string name="crypt_keeper_data_corrupt_summary" product="tablet" msgid="7018748502706237323">"Sandi yang Anda masukkan benar, namun sayangnya data rusak. \n\nUntuk melanjutkan dengan tablet, Anda perlu mengembalikannya ke setelan pabrik. Saat menyiapkan tablet setelah direset, akan ada kesempatan untuk memulihkan data apa pun yang telah dicadangkan ke Akun Google."</string>
+ <string name="crypt_keeper_data_corrupt_summary" product="default" msgid="5798580588985326937">"Sandi yang Anda masukkan benar, namun sayangnya data rusak. \n\nUntuk melanjutkan dengan ponsel, Anda perlu mengembalikannya ke setelan pabrik. Jika Anda menyiapkan ponsel setelah reset, akan ada kesempatan untuk memulihkan data apa pun yang telah dicadangkan ke Akun Google."</string>
<string name="crypt_keeper_switch_input_method" msgid="4744137470890459582">"Beralih metode masukan"</string>
<string name="suggested_lock_settings_title" msgid="1518155558803371661">"Amankan ponsel Anda"</string>
<string name="suggested_lock_settings_summary" product="tablet" msgid="1861066918594412519">"Setel kunci layar untuk melindungi tablet"</string>
@@ -749,7 +748,7 @@
<string name="bluetooth_searching_for_devices" msgid="7820814625522702494">"Menelusuri..."</string>
<string name="bluetooth_preference_device_settings" msgid="4247085616427015908">"Setelan perangkat"</string>
<string name="bluetooth_preference_paired_dialog_title" msgid="3567187438908143693">"Perangkat yang disandingkan"</string>
- <string name="bluetooth_preference_paired_dialog_internet_option" msgid="3693599743477470469">"Sambungan internet"</string>
+ <string name="bluetooth_preference_paired_dialog_internet_option" msgid="3693599743477470469">"Koneksi internet"</string>
<string name="bluetooth_preference_paired_dialog_keyboard_option" msgid="4627309436489645755">"Keyboard"</string>
<string name="bluetooth_preference_paired_dialog_contacts_option" msgid="5290994459307558039">"Kontak dan histori panggilan"</string>
<string name="bluetooth_pairing_dialog_title" msgid="7900515495932064945">"Sandingkan dengan perangkat ini?"</string>
@@ -782,8 +781,8 @@
<string name="bluetooth_disconnect_headset_profile" msgid="8384028101155317339">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> akan dilepas sambungannya dari audio handsfree."</string>
<string name="bluetooth_disconnect_hid_profile" msgid="6964226087090465662">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> akan dilepas sambungannya dari perangkat masukan."</string>
<string name="bluetooth_disconnect_pan_user_profile" msgid="5523689915196343097">"Akses Internet melalui <xliff:g id="DEVICE_NAME">%1$s</xliff:g> akan diputus."</string>
- <string name="bluetooth_disconnect_pan_nap_profile" product="tablet" msgid="8145126793699232403">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> akan diputus dari berbagi sambungan internet tablet ini."</string>
- <string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="6040826983120279685">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> akan diputus dari berbagi sambungan internet ponsel ini."</string>
+ <string name="bluetooth_disconnect_pan_nap_profile" product="tablet" msgid="8145126793699232403">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> akan diputus dari berbagi koneksi internet tablet ini."</string>
+ <string name="bluetooth_disconnect_pan_nap_profile" product="default" msgid="6040826983120279685">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> akan diputus dari berbagi koneksi internet ponsel ini."</string>
<string name="bluetooth_device_advanced_title" msgid="5752155558126694036">"Perangkat Bluetooth yang disandingkan"</string>
<string name="bluetooth_device_advanced_online_mode_title" msgid="7665622268007450665">"Sambungkan"</string>
<string name="bluetooth_device_advanced_online_mode_summary" msgid="4180673788239241086">"Sambungkan ke perangkat Bluetooth"</string>
@@ -791,7 +790,7 @@
<string name="bluetooth_device_advanced_rename_device" msgid="2270087843175307865">"Ganti nama"</string>
<string name="bluetooth_device_advanced_enable_opp_title" msgid="8258863155491651198">"Izinkan transfer file masuk"</string>
<string name="bluetooth_pan_user_profile_summary_connected" msgid="5934228955175911807">"Terhubung ke perangkat untuk akses internet"</string>
- <string name="bluetooth_pan_nap_profile_summary_connected" msgid="3103296701913705646">"Berbagi sambungan internet lokal dengan perangkat"</string>
+ <string name="bluetooth_pan_nap_profile_summary_connected" msgid="3103296701913705646">"Berbagi koneksi internet lokal dengan perangkat"</string>
<string name="bluetooth_dock_settings" msgid="3193180757893817101">"Setelan Dok"</string>
<string name="bluetooth_dock_settings_title" msgid="4444650787249778130">"Gunakan dok untuk audio"</string>
<string name="bluetooth_dock_settings_headset" msgid="6043070852100434218">"Sebagai pengeras suara telepon"</string>
@@ -827,7 +826,7 @@
<string name="nfc_disclaimer_title" msgid="4860231267351602970">"Aktifkan NFC"</string>
<string name="nfc_disclaimer_content" msgid="3066113577854565782">"NFC mempertukarkan data antara perangkat ini dan perangkat atau target lain di sekitar, seperti terminal pembayaran, pembaca akses, dan iklan atau tag interaktif."</string>
<string name="nfc_secure_settings_title" msgid="5153751163174916581">"Amankan NFC"</string>
- <string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"Izinkan penggunaan Pembayaran NFC dan Transit hanya jika layar terbuka kuncinya"</string>
+ <string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"Izinkan penggunaan Pembayaran NFC dan Transportasi Umum hanya jika layar terbuka kuncinya"</string>
<string name="android_beam_settings_title" msgid="3083436415873738389">"Android Beam"</string>
<string name="android_beam_on_summary" msgid="8068287225180474199">"Siap mentransmisikan konten apl melalui NFC"</string>
<string name="android_beam_off_summary" msgid="7365818039159364600">"Mati"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Nyalakan Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Gunakan Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Gunakan Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Setelan Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Siapkan & kelola titik akses nirkabel"</string>
@@ -856,7 +855,7 @@
<string name="wifi_wakeup_summary_scoring_disabled" msgid="7067018832237903151">"Untuk menggunakan, pilih penyedia rating jaringan"</string>
<string name="wifi_poor_network_detection" msgid="7193423327400703073">"Hindari sambungan buruk"</string>
<string name="wifi_poor_network_detection_summary" msgid="5539951465985614590">"Jangan gunakan jaringan Wi-Fi, kecuali sambungan internetnya kuat"</string>
- <string name="wifi_avoid_poor_network_detection_summary" msgid="1976503191780928104">"Hanya gunakan jaringan yang memiliki sambungan internet kuat"</string>
+ <string name="wifi_avoid_poor_network_detection_summary" msgid="1976503191780928104">"Hanya gunakan jaringan yang memiliki koneksi internet kuat"</string>
<string name="use_open_wifi_automatically_title" msgid="3084513215481454350">"Sambungkan ke jaringan terbuka"</string>
<string name="use_open_wifi_automatically_summary" msgid="8338020172673161754">"Otomatis sambungkan ke jaringan publik berkualitas tinggi"</string>
<string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"Untuk menggunakan, pilih penyedia rating jaringan"</string>
@@ -926,7 +925,7 @@
<string name="wifi_show_password" msgid="7878398590772942202">"Tampilkan sandi"</string>
<string name="wifi_ap_band_config" msgid="6565016368079288433">"Pilih AP Band"</string>
<string name="wifi_ap_choose_auto" msgid="7927637960569365785">"Otomatis"</string>
- <string name="wifi_ap_choose_2G" msgid="43198403259714736">"Pita frekuensi 2,4 GHz"</string>
+ <string name="wifi_ap_choose_2G" msgid="43198403259714736">"Band 2,4 GHz"</string>
<string name="wifi_ap_choose_5G" msgid="2624859713183683146">"Pita frekuensi 5,0 GHz"</string>
<string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"Disarankan Band 5.0 GHz"</string>
<string name="wifi_ap_2G" msgid="5793110086517338494">"2,4 GHz"</string>
@@ -939,7 +938,7 @@
<string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"Posisikan kode QR di tengah jendela kamera untuk menambahkan perangkat ke “<xliff:g id="SSID">%1$s</xliff:g>”"</string>
<string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"Pindai kode QR"</string>
<string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"Posisikan kode QR di tengah jendela kamera untuk menyambungkan ke “<xliff:g id="SSID">%1$s</xliff:g>”"</string>
- <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"Hubungkan ke Wi‑Fi dengan meminta kode QR"</string>
+ <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"Hubungkan ke Wi‑Fi dengan memindai kode QR"</string>
<string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Bagikan Wi‑Fi"</string>
<string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"Pindai kode QR ini untuk terhubung ke “<xliff:g id="SSID">%1$s</xliff:g>” dan membagikan sandi"</string>
<string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"Pindai kode QR ini untuk terhubung ke “<xliff:g id="SSID">%1$s</xliff:g>”"</string>
@@ -976,7 +975,7 @@
<string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"Jangan validasi"</string>
<string name="wifi_do_not_validate_eap_server_warning" msgid="3895397996759837323">"Sertifikat tidak ditentukan. Sambungan tidak bersifat pribadi."</string>
<string name="wifi_ssid_too_long" msgid="34911971389775920">"Nama jaringan terlalu panjang."</string>
- <string name="wifi_no_domain_warning" msgid="735859919311067606">"Harus menentukan domain."</string>
+ <string name="wifi_no_domain_warning" msgid="735859919311067606">"Domain harus ditentukan."</string>
<string name="wifi_wps_available_first_item" msgid="3221671453930485243">"WPS tersedia"</string>
<string name="wifi_wps_available_second_item" msgid="5703265526619705185">" (WPS tersedia)"</string>
<string name="wifi_carrier_connect" msgid="7202618367339982884">"Jaringan Wi‑Fi operator"</string>
@@ -1058,17 +1057,17 @@
<string name="wifi_p2p_cancel_connect_message" msgid="3752679335020392154">"Apakah Anda ingin membatalkan undangan untuk tersambung dengan <xliff:g id="PEER_NAME">%1$s</xliff:g>?"</string>
<string name="wifi_p2p_delete_group_message" msgid="3206660449067701089">"Lupakan grup ini?"</string>
<string name="wifi_hotspot_checkbox_text" msgid="12062341344410520">"Hotspot Wi‑Fi"</string>
- <string name="wifi_hotspot_off_subtext" msgid="6177054857136221058">"Tidak berbagi sambungan internet atau konten dengan perangkat lain"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="71421730039785897">"Berbagi sambungan internet tablet ini melalui hotspot"</string>
- <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="8914285514605049879">"Berbagi sambungan internet ponsel ini melalui hotspot"</string>
- <string name="wifi_hotspot_on_local_only_subtext" msgid="7415381343846704553">"Aplikasi membagikan konten. Untuk membagikan sambungan internet, nonaktifkan hotspot lalu aktifkan kembali"</string>
+ <string name="wifi_hotspot_off_subtext" msgid="6177054857136221058">"Tidak berbagi koneksi internet atau konten dengan perangkat lain"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="71421730039785897">"Berbagi koneksi internet tablet ini melalui hotspot"</string>
+ <string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="8914285514605049879">"Berbagi koneksi internet ponsel ini melalui hotspot"</string>
+ <string name="wifi_hotspot_on_local_only_subtext" msgid="7415381343846704553">"Aplikasi membagikan konten. Untuk membagikan koneksi internet, nonaktifkan hotspot lalu aktifkan kembali"</string>
<string name="wifi_hotspot_no_password_subtext" msgid="5400500962974373706">"Sandi tidak disetel"</string>
<string name="wifi_hotspot_name_title" msgid="6572202165400226127">"Nama hotspot"</string>
<string name="wifi_hotspot_name_summary_connecting" msgid="5176787959408511889">"Mengaktifkan <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>..."</string>
<string name="wifi_hotspot_name_summary_connected" msgid="8387768642326756749">"Perangkat lainnya dapat terhubung ke <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>"</string>
<string name="wifi_hotspot_password_title" msgid="4289338152595154889">"Sandi hotspot"</string>
<string name="wifi_hotspot_ap_band_title" msgid="3485744480410441949">"AP Band"</string>
- <string name="wifi_hotspot_footer_info_regular" msgid="3876006922622827363">"Gunakan hotspot untuk membuat jaringan Wi‑Fi bagi perangkat Anda yang lain. Hotspot menyediakan sambungan internet menggunakan koneksi data seluler Anda. Biaya data seluler tambahan mungkin berlaku."</string>
+ <string name="wifi_hotspot_footer_info_regular" msgid="3876006922622827363">"Gunakan hotspot untuk membuat jaringan Wi‑Fi bagi perangkat Anda yang lain. Hotspot menyediakan koneksi internet menggunakan koneksi data seluler Anda. Biaya data seluler tambahan mungkin berlaku."</string>
<string name="wifi_hotspot_footer_info_local_only" msgid="3339582350894639261">"Aplikasi dapat membuat hotspot untuk berbagi konten dengan perangkat di sekitar."</string>
<string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"Nonaktifkan hotspot secara otomatis"</string>
<string name="wifi_hotspot_auto_off_summary" msgid="3866769400624802105">"Hotspot Wi-Fi akan dinonaktifkan jika tidak ada perangkat yang terhubung"</string>
@@ -1103,11 +1102,14 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Ponsel"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Jika Wi-Fi tidak tersedia, gunakan jaringan seluler"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Jika jaringan seluler tidak tersedia, gunakan Wi-Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Telepon melalui Wi-Fi. Jika Wi-Fi terputus, panggilan akan berakhir."</string>
- <string name="wifi_calling_off_explanation" msgid="1653424723742898015">"Jika panggilan Wi-Fi aktif, ponsel dapat merutekan panggilan telepon melalui jaringan Wi-Fi atau jaringan operator, bergantung pada preferensi dan sinyal mana yang lebih kuat. Sebelum mengaktifkan fitur ini, sebaiknya tanyakan info biaya dan detail lainnya ke operator.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
+ <string name="wifi_calling_off_explanation" msgid="1653424723742898015">"Jika panggilan Wi-Fi aktif, ponsel dapat mengarahkan panggilan telepon melalui jaringan Wi-Fi atau jaringan operator, bergantung pada preferensi dan sinyal mana yang lebih kuat. Sebelum mengaktifkan fitur ini, sebaiknya tanyakan info biaya dan detail lainnya ke operator.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="8648609693875720408"></string>
<string name="emergency_address_title" msgid="5779915349686787024">"Alamat Darurat"</string>
<string name="emergency_address_summary" msgid="478668478569851714">"Digunakan sebagai lokasi Anda ketika Anda melakukan panggilan darurat melalui Wi‑Fi"</string>
@@ -1564,21 +1566,21 @@
<string name="error_mnc_not23" msgid="6738398924368729180">"Bidang MNC harus 2 atau 3 digit."</string>
<string name="error_adding_apn_type" msgid="671634520340569678">"Operator tidak mengizinkan penambahan APN jenis %s."</string>
<string name="restore_default_apn" msgid="7195266404077471007">"Memulihkan setelan APN default."</string>
- <string name="menu_restore" msgid="3799288817317293115">"Setel ulang ke default"</string>
- <string name="restore_default_apn_completed" msgid="5671734152740058937">"Penyetelan ulang setelan APN default selesai."</string>
- <string name="reset_dashboard_title" msgid="7084966342252178530">"Opsi setel ulang"</string>
- <string name="reset_dashboard_summary" msgid="8778383341461126642">"Jaringan, aplikasi, atau perangkat dapat disetel ulang"</string>
- <string name="reset_network_title" msgid="8944059136930806211">"Setel ulang Wi-Fi, kuota seluler & Bluetooth"</string>
+ <string name="menu_restore" msgid="3799288817317293115">"Reset ke default"</string>
+ <string name="restore_default_apn_completed" msgid="5671734152740058937">"Peresetan setelan APN default selesai."</string>
+ <string name="reset_dashboard_title" msgid="7084966342252178530">"Opsi reset"</string>
+ <string name="reset_dashboard_summary" msgid="8778383341461126642">"Jaringan, aplikasi, atau perangkat dapat direset"</string>
+ <string name="reset_network_title" msgid="8944059136930806211">"Reset Wi-Fi, kuota seluler & Bluetooth"</string>
<string name="reset_network_desc" msgid="4982633363916261109">"Tindakan ini akan menyetel ulang semua setelan jaringan, termasuk:\n\n"<li>"Wi‑Fi"</li>\n<li>"Kuota seluler"</li>\n<li>"Bluetooth"</li></string>
<string name="reset_esim_title" msgid="7630781767040831893">"Hapus SIM hasil download"</string>
<string name="reset_esim_desc" msgid="433226911566802">"Untuk mendownload SIM pengganti, hubungi operator Anda. Tindakan ini tidak akan membatalkan paket pembelian layanan seluler apa pun."</string>
- <string name="reset_network_button_text" msgid="4293271046867912819">"Setel ulang setelan"</string>
- <string name="reset_network_final_desc" msgid="2463817067048751373">"Setel ulang semua setelan jaringan? Anda tidak dapat mengurungkan tindakan ini."</string>
- <string name="reset_network_final_desc_esim" msgid="4676436976372555750">"Setel ulang semua setelan jaringan dan hapus SIM yang didownload? Anda tidak dapat mengurungkan tindakan ini."</string>
- <string name="reset_network_final_button_text" msgid="345255333127794393">"Setel ulang setelan"</string>
- <string name="reset_network_confirm_title" msgid="2432145031070536008">"Setel ulang?"</string>
- <string name="network_reset_not_available" msgid="6146655531868016281">"Setel ulang jaringan tidak tersedia untuk pengguna ini"</string>
- <string name="reset_network_complete_toast" msgid="128225929536005495">"Setelan jaringan telah disetel ulang"</string>
+ <string name="reset_network_button_text" msgid="4293271046867912819">"Reset setelan"</string>
+ <string name="reset_network_final_desc" msgid="2463817067048751373">"Reset semua setelan jaringan? Anda tidak dapat mengurungkan tindakan ini."</string>
+ <string name="reset_network_final_desc_esim" msgid="4676436976372555750">"Reset semua setelan jaringan dan hapus SIM yang didownload? Anda tidak dapat mengurungkan tindakan ini."</string>
+ <string name="reset_network_final_button_text" msgid="345255333127794393">"Reset setelan"</string>
+ <string name="reset_network_confirm_title" msgid="2432145031070536008">"Reset?"</string>
+ <string name="network_reset_not_available" msgid="6146655531868016281">"Reset jaringan tidak tersedia untuk pengguna ini"</string>
+ <string name="reset_network_complete_toast" msgid="128225929536005495">"Setelan jaringan telah direset"</string>
<string name="reset_esim_error_title" msgid="4728931209471875632">"Tidak dapat menghapus SIM"</string>
<string name="reset_esim_error_msg" msgid="4716366079119742235">"SIM hasil download tidak dapat dihapus karena terjadi error.\n\nMulai ulang perangkat Anda, lalu coba lagi."</string>
<string name="master_clear_title" msgid="1560712943955904673">"Reset ke setelan pabrik"</string>
@@ -1601,7 +1603,7 @@
<string name="master_clear_final_desc" msgid="5189365498015339294">"Semua informasi pribadi dan aplikasi yang didownload akan dihapus. Anda tidak dapat mengurungkan tindakan ini."</string>
<string name="master_clear_final_desc_esim" msgid="3058919823436953662">"Semua informasi pribadi, termasuk aplikasi & SIM yang telah download, akan dihapus. Anda tidak dapat mengurungkan tindakan ini."</string>
<string name="master_clear_final_button_text" msgid="866772743886027768">"Hapus semua"</string>
- <string name="master_clear_failed" msgid="7588397453984229892">"Penyetelan ulang tidak dilakukan karena layanan System Clear tidak tersedia."</string>
+ <string name="master_clear_failed" msgid="7588397453984229892">"Peresetan tidak dilakukan karena layanan System Clear tidak tersedia."</string>
<string name="master_clear_confirm_title" msgid="698328669893512402">"Hapus semua data?"</string>
<string name="master_clear_not_available" msgid="4676613348163652454">"Fitur kembalikan ke setelan pabrik tidak tersedia untuk pengguna ini"</string>
<string name="master_clear_progress_title" msgid="378953167274114857">"Menghapus"</string>
@@ -1619,15 +1621,15 @@
<string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"Tidak dapat tethering atau menggunakan hotspot portabel saat Penghemat Kuota Internet aktif"</string>
<string name="usb_title" msgid="7480927657535578688">"USB"</string>
<string name="usb_tethering_button_text" msgid="6242228383142012332">"Tethering USB"</string>
- <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Bagikan sambungan internet ponsel melalui USB"</string>
- <string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"Bagikan sambungan internet tablet melalui USB"</string>
+ <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Bagikan koneksi internet ponsel melalui USB"</string>
+ <string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"Bagikan koneksi internet tablet melalui USB"</string>
<string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"Tethering bluetooth"</string>
- <string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"Bagikan sambungan internet tablet melalui Bluetooth"</string>
- <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Bagikan sambungan internet ponsel melalui Bluetooth"</string>
- <string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"Berbagi sambungan internet <xliff:g id="DEVICE_NAME">%1$d</xliff:g> ini melalui Bluetooth"</string>
+ <string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"Bagikan koneksi internet tablet melalui Bluetooth"</string>
+ <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Bagikan koneksi internet ponsel melalui Bluetooth"</string>
+ <string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"Berbagi koneksi internet <xliff:g id="DEVICE_NAME">%1$d</xliff:g> ini melalui Bluetooth"</string>
<string name="bluetooth_tethering_overflow_error" msgid="6946561351369376943">"Tidak dapat menambatkan ke lebih dari <xliff:g id="MAXCONNECTION">%1$d</xliff:g> perangkat."</string>
<string name="bluetooth_untether_blank" msgid="5428300773782256084">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> akan dilepas dari penambatan."</string>
- <string name="tethering_footer_info" msgid="8019555174339154124">"Gunakan hotspot dan tethering untuk menyediakan sambungan internet bagi perangkat lain melalui koneksi kuota seluler Anda. Aplikasi juga dapat membuat hotspot untuk berbagi konten dengan perangkat sekitar."</string>
+ <string name="tethering_footer_info" msgid="8019555174339154124">"Gunakan hotspot dan tethering untuk menyediakan koneksi internet bagi perangkat lain melalui koneksi kuota seluler Anda. Aplikasi juga dapat membuat hotspot untuk berbagi konten dengan perangkat sekitar."</string>
<string name="tethering_help_button_text" msgid="7653022000284543996">"Bantuan"</string>
<string name="network_settings_title" msgid="8516526011407061679">"Jaringan seluler"</string>
<string name="manage_mobile_plan_title" msgid="3312016665522553062">"Paket seluler"</string>
@@ -1638,8 +1640,8 @@
<string name="network_scorer_picker_title" msgid="1691073966560952916">"Penyedia rating jaringan"</string>
<string name="network_scorer_picker_none_preference" msgid="6448280557733231737">"Tidak ada"</string>
<string name="network_scorer_change_active_dialog_title" msgid="4274159562371475090">"Ubah Wi-Fi Assistant?"</string>
- <string name="network_scorer_change_active_dialog_text" msgid="4264089809189760730">"Gunakan <xliff:g id="NEW_APP">%1$s</xliff:g> sebagai ganti <xliff:g id="CURRENT_APP">%2$s</xliff:g> untuk mengelola sambungan jaringan?"</string>
- <string name="network_scorer_change_active_no_previous_dialog_text" msgid="6394483538843474495">"Gunakan <xliff:g id="NEW_APP">%s</xliff:g> untuk mengelola sambungan jaringan?"</string>
+ <string name="network_scorer_change_active_dialog_text" msgid="4264089809189760730">"Gunakan <xliff:g id="NEW_APP">%1$s</xliff:g> sebagai ganti <xliff:g id="CURRENT_APP">%2$s</xliff:g> untuk mengelola koneksi jaringan?"</string>
+ <string name="network_scorer_change_active_no_previous_dialog_text" msgid="6394483538843474495">"Gunakan <xliff:g id="NEW_APP">%s</xliff:g> untuk mengelola koneksi jaringan?"</string>
<string name="mobile_unknown_sim_operator" msgid="872589370085135817">"Operator SIM tidak dikenal"</string>
<string name="mobile_no_provisioning_url" msgid="3216517414902166131">"<xliff:g id="OPERATOR">%1$s</xliff:g> tidak punya situs web penyediaanyang dikenal"</string>
<string name="mobile_insert_sim_card" msgid="7594550403454243732">"Masukkan kartu SIM dan mulai ulang"</string>
@@ -1707,7 +1709,7 @@
<string name="lockpassword_choose_your_screen_lock_header" msgid="6283518876031424798">"Setel kunci layar"</string>
<string name="lockpassword_choose_your_password_message" msgid="2838273977481046536">"Untuk keamanan, setel sandi"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="4921343500484160894">"Setel sandi untuk pakai sidik jari"</string>
- <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="314870151462139417">"Setel pola untuk fitur sidik jari"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="314870151462139417">"Setel pola untuk pakai sidik jari"</string>
<string name="lockpassword_choose_your_pin_message" msgid="8942598950627277885">"Untuk keamanan, setel PIN"</string>
<string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1102927520952116303">"Setel PIN untuk pakai sidik jari"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="1503075455752279687">"Untuk keamanan, setel pola"</string>
@@ -1736,9 +1738,9 @@
<string name="lockpassword_strong_auth_required_work_pattern" msgid="6861154706098327320">"Untuk tambahan keamanan, gunakan pola profil kerja"</string>
<string name="lockpassword_strong_auth_required_work_pin" msgid="6306902249365524526">"Untuk tambahan keamanan, masukkan PIN profil kerja"</string>
<string name="lockpassword_strong_auth_required_work_password" msgid="2917338218971012776">"Untuk tambahan keamanan, masukkan sandi profil kerja"</string>
- <string name="lockpassword_confirm_your_pattern_details_frp" msgid="1085862410379709928">"Ponsel telah disetel ulang ke setelan pabrik. Masukkan pola sebelumnya untuk menggunakan ponsel."</string>
- <string name="lockpassword_confirm_your_pin_details_frp" msgid="6849889353126558761">"Ponsel telah disetel ulang ke setelan pabrik. Masukkan PIN sebelumnya untuk menggunakan ponsel."</string>
- <string name="lockpassword_confirm_your_password_details_frp" msgid="3239944795659418737">"Ponsel telah disetel ulang ke setelan pabrik. Masukkan sandi sebelumnya untuk menggunakan ponsel."</string>
+ <string name="lockpassword_confirm_your_pattern_details_frp" msgid="1085862410379709928">"Ponsel telah direset ke setelan pabrik. Masukkan pola sebelumnya untuk menggunakan ponsel."</string>
+ <string name="lockpassword_confirm_your_pin_details_frp" msgid="6849889353126558761">"Ponsel telah direset ke setelan pabrik. Masukkan PIN sebelumnya untuk menggunakan ponsel."</string>
+ <string name="lockpassword_confirm_your_password_details_frp" msgid="3239944795659418737">"Ponsel telah direset ke setelan pabrik. Masukkan sandi sebelumnya untuk menggunakan ponsel."</string>
<string name="lockpassword_confirm_your_pattern_header_frp" msgid="3290569334665839860">"Verifikasi pola"</string>
<string name="lockpassword_confirm_your_pin_header_frp" msgid="8520474869079710782">"Verifikasi PIN"</string>
<string name="lockpassword_confirm_your_password_header_frp" msgid="7326670978891793470">"Verifikasi sandi"</string>
@@ -1765,7 +1767,7 @@
<string name="lockpattern_settings_enable_visible_pattern_title" msgid="4935583222709647096">"Perlihatkan pola"</string>
<string name="lockpattern_settings_enable_visible_pattern_title_profile" msgid="5338893138982642228">"Perlihatkan pola profil"</string>
<string name="lockpattern_settings_enable_tactile_feedback_title" msgid="3203621862806531947">"Bergetar saat diketuk"</string>
- <string name="lockpattern_settings_enable_power_button_instantly_locks" msgid="5890335732200257777">"Tombol power langsung kunci"</string>
+ <string name="lockpattern_settings_enable_power_button_instantly_locks" msgid="5890335732200257777">"Tombol daya langsung kunci"</string>
<string name="lockpattern_settings_power_button_instantly_locks_summary" msgid="1279989004145567840">"Kecuali jika tetap tidak dikunci oleh <xliff:g id="TRUST_AGENT_NAME">%1$s</xliff:g>"</string>
<string name="lockpattern_settings_choose_lock_pattern" msgid="9042142745571386381">"Setel pola pembuka kunci"</string>
<string name="lockpattern_settings_change_lock_pattern" msgid="1456643060737114885">"Ubah pola pembuka kunci"</string>
@@ -1840,10 +1842,10 @@
<string name="show_running_services" msgid="1895994322704667543">"Lihat layanan berjalan"</string>
<string name="show_background_processes" msgid="88012264528093617">"Lihat proses di cache"</string>
<string name="default_emergency_app" msgid="286530070173495823">"Aplikasi darurat"</string>
- <string name="reset_app_preferences" msgid="1426500030595212077">"Setel ulang preferensi aplikasi"</string>
- <string name="reset_app_preferences_title" msgid="792909865493673598">"Setel ulang pref aplikasi?"</string>
+ <string name="reset_app_preferences" msgid="1426500030595212077">"Reset preferensi aplikasi"</string>
+ <string name="reset_app_preferences_title" msgid="792909865493673598">"Reset pref aplikasi?"</string>
<string name="reset_app_preferences_desc" msgid="7935273005301096031">"Tindakan ini akan menyetel ulang semua preferensi untuk:\n\n "<li>"Aplikasi yang dinonaktifkan"</li>\n" "<li>"Notifikasi aplikasi yang dinonaktifkan"</li>\n" "<li>"Aplikasi default untuk tindakan"</li>\n" "<li>"Batasan data latar belakang untuk aplikasi"</li>\n" "<li>"Batasan izin apa pun"</li>\n\n" Data aplikasi tidak akan hilang."</string>
- <string name="reset_app_preferences_button" msgid="2041894727477934656">"Setel ulang aplikasi"</string>
+ <string name="reset_app_preferences_button" msgid="2041894727477934656">"Reset aplikasi"</string>
<string name="manage_space_text" msgid="6166469422303124302">"Kelola ruang"</string>
<string name="filter" msgid="2426943916212457962">"Filter"</string>
<string name="filter_dlg_title" msgid="115313222190512670">"Pilih opsi filter"</string>
@@ -1957,7 +1959,7 @@
<string name="hardkeyboard_category" msgid="5937171470391551627">"Setelan keyboard fisik"</string>
<string name="auto_punctuate_summary" msgid="245694025030386370">"Tekan Spasi dua kali untuk memasukkan \".\""</string>
<string name="show_password" msgid="620964020348073739">"Tampilkan sandi"</string>
- <string name="show_password_summary" msgid="1403805089582258620">"Tampilkan karakter secara singkat saat Anda mengetik"</string>
+ <string name="show_password_summary" msgid="1403805089582258620">"Tampilkan karakter sejenak saat Anda mengetik"</string>
<string name="spellchecker_security_warning" msgid="792070474432612097">"Pemeriksa ejaan ini mungkin dapat mengumpulkan semua teks yang Anda ketik, termasuk data pribadi seperti sandi dan nomor kartu kredit. Pemeriksa ejaan ini berasal dari aplikasi <xliff:g id="SPELLCHECKER_APPLICATION_NAME">%1$s</xliff:g>. Gunakan pemeriksa ejaan ini?"</string>
<string name="spellchecker_quick_settings" msgid="5193036510190696655">"Setelan"</string>
<string name="spellchecker_language" msgid="5168501692418112444">"Bahasa"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Getaran notifikasi"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Getaran dering"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Getaran saat disentuh"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Gunakan layanan"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Gunakan koreksi warna"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Gunakan teks"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Gunakan layanan"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Gunakan koreksi warna"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Gunakan teks"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Lanjutkan"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Alat bantu dengar"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Tidak ada alat bantu dengar yang terhubung"</string>
@@ -2243,7 +2245,7 @@
<string name="screen_usage_summary" msgid="263396144684078341">"Jumlah waktu layar diaktifkan sejak pengisian daya terakhir hingga penuh"</string>
<string name="device_usage_list_summary" msgid="8299017481332816368">"Penggunaan perangkat sejak pengisian baterai penuh terakhir"</string>
<string name="battery_since_unplugged" msgid="6486555910264026856">"Penggunaan baterai sejak dicabut"</string>
- <string name="battery_since_reset" msgid="4747587791838336661">"Penggunaan baterai sejak penyetelan ulang"</string>
+ <string name="battery_since_reset" msgid="4747587791838336661">"Penggunaan baterai sejak peresetan"</string>
<string name="battery_stats_on_battery" msgid="2644055304085279716">"Memakai baterai: <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_stats_duration" msgid="4867858933068728005">"<xliff:g id="TIME">%1$s</xliff:g> sejak dicabut"</string>
<string name="battery_stats_charging_label" msgid="3156586822576998231">"Mengisi daya"</string>
@@ -2307,12 +2309,12 @@
<item quantity="other">Batasi %1$d aplikasi?</item>
<item quantity="one">Batasi aplikasi?</item>
</plurals>
- <string name="battery_tip_restrict_app_dialog_message" msgid="6905822297507947381">"Untuk menghemat baterai, hentikan <xliff:g id="APP">%1$s</xliff:g> menggunakan baterai di background. Aplikasi ini mungkin tidak berfungsi dengan baik dan notifikasi dapat tertunda."</string>
- <string name="battery_tip_restrict_apps_less_than_5_dialog_message" msgid="4225881888543582456">"Untuk menghemat baterai, hentikan aplikasi ini menggunakan baterai di background. Aplikasi yang dibatasi mungkin tidak berfungsi dengan baik dan notifikasi dapat tertunda.\n\nAplikasi:"</string>
- <string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"Untuk menghemat baterai, hentikan aplikasi ini menggunakan baterai di background. Aplikasi yang dibatasi mungkin tidak berfungsi dengan baik dan notifikasi dapat tertunda.\n\nAplikasi:\n<xliff:g id="APP_LIST">%1$s</xliff:g>."</string>
+ <string name="battery_tip_restrict_app_dialog_message" msgid="6905822297507947381">"Untuk menghemat baterai, hentikan <xliff:g id="APP">%1$s</xliff:g> menggunakan baterai di latar belakang. Aplikasi ini mungkin tidak berfungsi dengan baik dan notifikasi dapat tertunda."</string>
+ <string name="battery_tip_restrict_apps_less_than_5_dialog_message" msgid="4225881888543582456">"Untuk menghemat baterai, hentikan aplikasi ini menggunakan baterai di latar belakang. Aplikasi yang dibatasi mungkin tidak berfungsi dengan baik dan notifikasi dapat tertunda.\n\nAplikasi:"</string>
+ <string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"Untuk menghemat baterai, hentikan aplikasi ini menggunakan baterai di latar belakang. Aplikasi yang dibatasi mungkin tidak berfungsi dengan baik dan notifikasi dapat tertunda.\n\nAplikasi:\n<xliff:g id="APP_LIST">%1$s</xliff:g>."</string>
<string name="battery_tip_restrict_app_dialog_ok" msgid="2573410775701913487">"Batasi"</string>
<string name="battery_tip_unrestrict_app_dialog_title" msgid="812458516399125710">"Hapus batasan?"</string>
- <string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"Aplikasi ini dapat menggunakan baterai di background. Baterai mungkin lebih cepat habis dari biasanya."</string>
+ <string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"Aplikasi ini dapat menggunakan baterai di latar belakang. Baterai mungkin lebih cepat habis dari biasanya."</string>
<string name="battery_tip_unrestrict_app_dialog_ok" msgid="9154938931448151479">"Hapus"</string>
<string name="battery_tip_unrestrict_app_dialog_cancel" msgid="7331148618292397166">"Batal"</string>
<string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"Aplikasi Anda menggunakan baterai secara normal. Jika aplikasi terlalu banyak menggunakan daya baterai, ponsel Anda akan menyarankan beberapa tindakan.\n\nAnda selalu dapat mengaktifkan Penghemat Baterai jika daya baterai hampir habis."</string>
@@ -2330,7 +2332,7 @@
<item quantity="one">Membatasi penggunaan baterai untuk %1$d aplikasi</item>
</plurals>
<string name="restricted_app_time_summary" msgid="5205881852523135226">"Dibatasi <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="restricted_app_detail_footer" msgid="482460517275754465">"Aplikasi ini telah menggunakan daya baterai di background. Aplikasi yang dibatasi mungkin tidak berfungsi dengan baik dan notifikasi dapat tertunda."</string>
+ <string name="restricted_app_detail_footer" msgid="482460517275754465">"Aplikasi ini telah menggunakan daya baterai di latar belakang. Aplikasi yang dibatasi mungkin tidak berfungsi dengan baik dan notifikasi dapat tertunda."</string>
<string name="battery_auto_restriction_title" msgid="488905332794794076">"Gunakan Pengelola Baterai"</string>
<string name="battery_auto_restriction_summary" msgid="1638072655581821837">"Mendeteksi jika aplikasi menghabiskan baterai"</string>
<string name="battery_manager_on" msgid="5626982529932239656">"Aktif / Mendeteksi jika aplikasi menghabiskan baterai"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Aktifkan"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Gunakan Penghemat Baterai"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Gunakan Penghemat Baterai"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Aktifkan secara otomatis"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Tidak pernah"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"jika <xliff:g id="PERCENT">%1$s</xliff:g> baterai"</string>
@@ -2517,7 +2519,7 @@
<string name="tts_install_voices_text" msgid="7464832428439739995">"Lanjutkan aplikasi <xliff:g id="TTS_APP_NAME">%s</xliff:g> untuk menginstal suara"</string>
<string name="tts_install_voices_open" msgid="686776451008134790">"Buka Aplikasi"</string>
<string name="tts_install_voices_cancel" msgid="1622512922523479646">"Batal"</string>
- <string name="tts_reset" msgid="8864073594540705579">"Setel ulang"</string>
+ <string name="tts_reset" msgid="8864073594540705579">"Reset"</string>
<string name="tts_play" msgid="9023430029380675514">"Putar"</string>
<string name="vpn_settings_title" msgid="7008219502396889192">"VPN"</string>
<string name="credentials_title" msgid="7119207354982673965">"Penyimpanan kredensial"</string>
@@ -2599,7 +2601,7 @@
<string name="work_mode_label" msgid="6845849194740195757">"Profil kerja"</string>
<string name="work_mode_on_summary" msgid="1682781113156323592">"Dikelola oleh organisasi"</string>
<string name="work_mode_off_summary" msgid="1688885392211178315">"Aplikasi dan notifikasi dinonaktifkan"</string>
- <string name="remove_managed_profile_label" msgid="4625542553784793536">"Buang profil kerja"</string>
+ <string name="remove_managed_profile_label" msgid="4625542553784793536">"Hapus profil kerja"</string>
<string name="background_data" msgid="8275750862371471171">"Data latar belakang"</string>
<string name="background_data_summary" msgid="799640633948841990">"Apl dapat menyinkronkan, mengirimkan, dan menerima data kapan saja"</string>
<string name="background_data_dialog_title" msgid="8306650658158895976">"Matikn data ltr blkg?"</string>
@@ -2628,7 +2630,7 @@
<string name="header_add_an_account" msgid="8482614556580804956">"Tambahkan akun"</string>
<string name="really_remove_account_title" msgid="4166512362915154319">"Hapus akun?"</string>
<string name="really_remove_account_message" product="tablet" msgid="7403843371045856719">"Menghapus akun ini akan menghapus semua pesan, kontak, dan data lain akun tersebut dari tablet!"</string>
- <string name="really_remove_account_message" product="default" msgid="8951224626153163914">"Menghapus akun ini akan menghapus semua pesan, kontak, dan data lainnya akun tersebut dari ponsel!"</string>
+ <string name="really_remove_account_message" product="default" msgid="8951224626153163914">"Menghapus akun ini akan menghapus semua pesan, kontak, dan data lain akun tersebut dari ponsel."</string>
<string name="really_remove_account_message" product="device" msgid="3751798556257519916">"Menghapus akun ini akan menghapus semua pesan, kontak, dan data lain akun tersebut dari perangkat."</string>
<string name="remove_account_failed" msgid="491458185327106966">"Perubahan ini tidak diizinkan oleh admin"</string>
<string name="cant_sync_dialog_title" msgid="5483419398223189881">"Tidak dapat menyinkronkan secara manual"</string>
@@ -2706,7 +2708,7 @@
<string name="data_usage_auto_sync_on_dialog" product="default" msgid="5004823486046340090">"Perubahan apa pun yang dilakukan pada akun Anda di web akan disalin ke ponsel secara otomatis.\n\nBeberapa akun juga dapat otomatis menyalin setiap perubahan yang dilakukan di ponsel ke web. Akun Google mengikuti cara kerja tersebut."</string>
<string name="data_usage_auto_sync_off_dialog_title" msgid="7105334544291643305">"Nonaktifkan sinkronisasi data otomatis?"</string>
<string name="data_usage_auto_sync_off_dialog" msgid="4057984234450947964">"Ini akan menghemat penggunaan baterai dan data, tapi Anda perlu menyinkronkan setiap akun secara manual untuk mengumpulkan informasi terkini. Anda juga tidak akan menerima pemberitahuan ketika ada update."</string>
- <string name="data_usage_cycle_editor_title" msgid="4967309390043599889">"Tanggal penyetelan ulang siklus penggunaan"</string>
+ <string name="data_usage_cycle_editor_title" msgid="4967309390043599889">"Tanggal peresetan siklus penggunaan"</string>
<string name="data_usage_cycle_editor_subtitle" msgid="6043098041946166597">"Tanggal setiap bulannya:"</string>
<string name="data_usage_cycle_editor_positive" msgid="9155752056537811646">"Setel"</string>
<string name="data_usage_warning_editor_title" msgid="1431385383278389290">"Setel peringatan penggunaan kuota"</string>
@@ -2776,8 +2778,8 @@
<string name="vpn_forget_long" msgid="8457511440635534478">"Lupakan VPN"</string>
<string name="vpn_replace_vpn_title" msgid="8517436922021598103">"Ganti VPN yang sudah ada?"</string>
<string name="vpn_set_vpn_title" msgid="6483554732067951052">"Setel VPN selalu aktif?"</string>
- <string name="vpn_first_always_on_vpn_message" msgid="7050017738816963855">"Jika setelan ini diaktifkan, sambungan internet hanya akan tersedia setelah VPN berhasil terhubung"</string>
- <string name="vpn_replace_always_on_vpn_enable_message" msgid="4149931501300203205">"VPN yang sudah ada akan digantikan, dan sambungan internet hanya akan tersedia setelah VPN berhasil terhubung"</string>
+ <string name="vpn_first_always_on_vpn_message" msgid="7050017738816963855">"Jika setelan ini diaktifkan, koneksi internet hanya akan tersedia setelah VPN berhasil terhubung"</string>
+ <string name="vpn_replace_always_on_vpn_enable_message" msgid="4149931501300203205">"VPN yang sudah ada akan digantikan, dan koneksi internet hanya akan tersedia setelah VPN berhasil terhubung"</string>
<string name="vpn_replace_always_on_vpn_disable_message" msgid="4924947523200883088">"Anda sudah terhubung ke VPN selalu aktif. Jika Anda terhubung ke VPN yang berbeda, VPN yang sudah ada akan digantikan, dan mode selalu aktif akan dinonaktifkan."</string>
<string name="vpn_replace_vpn_message" msgid="8009433728523145393">"Anda sudah terhubung ke VPN. Jika Anda terhubung ke VPN yang berbeda, VPN yang sudah ada akan digantikan."</string>
<string name="vpn_turn_on" msgid="2334736319093953055">"Aktifkan"</string>
@@ -2797,7 +2799,7 @@
<string name="vpn_lockdown_summary" msgid="6770030025737770861">"Pilih profil VPN untuk tetap tersambung. Lalu lintas jaringan hanya akan diperbolehkan jika tersambung ke VPN ini."</string>
<string name="vpn_lockdown_none" msgid="3789288793603394679">"Tidak ada"</string>
<string name="vpn_lockdown_config_error" msgid="8761770968704589885">"VPN selalu aktif membutuhkan alamat IP baik untuk server serta DNS."</string>
- <string name="vpn_no_network" msgid="8313250136194588023">"Tidak ada sambungan jaringan. Coba lagi nanti."</string>
+ <string name="vpn_no_network" msgid="8313250136194588023">"Tidak ada koneksi jaringan. Coba lagi nanti."</string>
<string name="vpn_disconnected" msgid="4597953053220332539">"Terputus dari VPN"</string>
<string name="vpn_disconnected_summary" msgid="3784118965271376808">"Tidak ada"</string>
<string name="vpn_missing_cert" msgid="2713254242731992902">"Sertifikat tidak ditemukan. Coba edit profil."</string>
@@ -2860,7 +2862,7 @@
<string name="user_summary_managed_profile_not_set_up" msgid="3032986082684011281">"Tidak disiapkan - Profil kerja"</string>
<string name="user_admin" msgid="805802526361071709">"Admin"</string>
<string name="user_you" msgid="8212549708652717106">"Anda (<xliff:g id="NAME">%s</xliff:g>)"</string>
- <string name="user_nickname" msgid="1088216221559125529">"Nama julukan"</string>
+ <string name="user_nickname" msgid="1088216221559125529">"Nama panggilan"</string>
<string name="user_add_user_type_title" msgid="8672326434351387845">"Tambahkan"</string>
<string name="user_add_max_count" msgid="4524573950126500416">"Anda dapat menambahkan maksimal <xliff:g id="USER_COUNT">%1$d</xliff:g> pengguna"</string>
<string name="user_add_user_item_summary" msgid="6114355152711455716">"Pengguna memiliki aplikasi dan konten mereka sendiri"</string>
@@ -2868,7 +2870,7 @@
<string name="user_add_user_item_title" msgid="6835385073795492410">"Pengguna"</string>
<string name="user_add_profile_item_title" msgid="4932743891449790664">"Profil dibatasi"</string>
<string name="user_add_user_title" msgid="2320897397066676472">"Tambahkan pengguna baru?"</string>
- <string name="user_add_user_message_long" msgid="686637203224195465">"Anda dapat berbagi penggunaan perangkat ini dengan orang lain dengan membuat pengguna tambahan. Setiap pengguna memiliki ruang sendiri, yang dapat disesuaikan dengan aplikasi, wallpaper, dan lainnya.\n\nSaat Anda menambahkan pengguna baru, pengguna tersebut perlu menyiapkan ruangnya.\n\nPengguna mana pun dapat mengupdate aplikasi untuk semua pengguna lainnya. Layanan dan setelan aksesibilitas mungkin tidak ditransfer ke pengguna baru."</string>
+ <string name="user_add_user_message_long" msgid="686637203224195465">"Anda dapat berbagi penggunaan perangkat ini dengan orang lain dengan membuat pengguna tambahan. Setiap pengguna memiliki ruang sendiri, yang dapat disesuaikan dengan aplikasi, wallpaper, dan lainnya. Pengguna juga dapat menyesuaikan setelan perangkat seperti Wi-Fi yang dapat memengaruhi semua pengguna lain.\n\nSaat Anda menambahkan pengguna baru, pengguna tersebut perlu menyiapkan ruangnya.\n\nPengguna mana pun dapat mengupdate aplikasi untuk semua pengguna lainnya. Layanan dan setelan aksesibilitas mungkin tidak ditransfer ke pengguna baru."</string>
<string name="user_add_user_message_short" msgid="1802594476285458254">"Saat Anda menambahkan pengguna baru, orang tersebut perlu menyiapkan ruang mereka sendiri.\n\nPengguna mana pun dapat memperbarui aplikasi untuk semua pengguna lain."</string>
<string name="user_setup_dialog_title" msgid="6748950002206392396">"Siapkan pengguna sekarang?"</string>
<string name="user_setup_dialog_message" msgid="2988559933258353919">"Pastikan orang tersebut ada untuk mengambil perangkat dan menyiapkan ruangnya"</string>
@@ -2886,7 +2888,7 @@
<string name="user_confirm_remove_self_title" msgid="6739480453680217543">"Hapus diri Anda sendiri?"</string>
<string name="user_confirm_remove_title" msgid="1034498514019462084">"Hapus pengguna ini?"</string>
<string name="user_profile_confirm_remove_title" msgid="6138684743385947063">"Buang profil ini?"</string>
- <string name="work_profile_confirm_remove_title" msgid="3168910958076735800">"Buang profil kerja?"</string>
+ <string name="work_profile_confirm_remove_title" msgid="3168910958076735800">"Hapus profil kerja?"</string>
<string name="user_confirm_remove_self_message" product="tablet" msgid="2889456786320157545">"Ruang dan data Anda akan hilang dari tablet ini. Anda tidak dapat mengurungkan tindakan ini."</string>
<string name="user_confirm_remove_self_message" product="default" msgid="8441729423565705183">"Ruang dan data Anda akan hilang dari ponsel ini. Anda tidak dapat mengurungkan tindakan ini."</string>
<string name="user_confirm_remove_message" msgid="5202150470271756013">"Semua aplikasi dan data akan dihapus."</string>
@@ -3033,7 +3035,7 @@
<string name="network_dashboard_summary_mobile" msgid="5560545061217580626">"seluler"</string>
<string name="network_dashboard_summary_data_usage" msgid="4695629715072542102">"penggunaan kuota"</string>
<string name="network_dashboard_summary_hotspot" msgid="3928610802321995214">"hotspot"</string>
- <string name="connected_devices_dashboard_title" msgid="7795222675849060444">"Perangkat tersambung"</string>
+ <string name="connected_devices_dashboard_title" msgid="7795222675849060444">"Perangkat terhubung"</string>
<string name="connected_devices_dashboard_summary" msgid="1072664369515033179">"Bluetooth, mode mengemudi, NFC"</string>
<string name="connected_devices_dashboard_no_nfc_summary" msgid="2610085597733526722">"Bluetooth, mode mengemudi"</string>
<string name="connected_devices_dashboard_no_driving_mode_summary" msgid="3524409078596318803">"Bluetooth, NFC"</string>
@@ -3046,7 +3048,7 @@
<string name="app_default_dashboard_title" msgid="6575301028225232193">"Aplikasi default"</string>
<string name="system_dashboard_summary" msgid="6582464466735779394">"Bahasa, gestur, waktu, pencadangan"</string>
<string name="search_results_title" msgid="4160717656435503940">"Setelan"</string>
- <string name="keywords_wifi" msgid="8477688080895466846">"wifi, wi-fi, sambungan jaringan, internet, nirkabel, data, wi fi"</string>
+ <string name="keywords_wifi" msgid="8477688080895466846">"wifi, wi-fi, koneksi jaringan, internet, nirkabel, data, wi fi"</string>
<string name="keywords_wifi_notify_open_networks" msgid="1031260564121854773">"Notifikasi Wi‑Fi, notifikasi wi‑fi"</string>
<string name="keywords_auto_brightness" msgid="5007188989783072428">"Kecerahan otomatis"</string>
<string name="keywords_vibrate_on_touch" msgid="3615173661462446877">"Hentikan getaran, ketukan, keyboard"</string>
@@ -3072,7 +3074,7 @@
<string name="keywords_voice_input" msgid="569012518085308407">"pengenal, masukan, ucapan, ucapkan, bahasa, handsfree, hands free, pengenalan, menyinggung, kata, audio, histori, bluetooth headset"</string>
<string name="keywords_text_to_speech_output" msgid="1337378060761399890">"beri rating, bahasa, default, ucapkan, berbicara, text to speech, aksesibilitas, pembaca layar, tunanetra"</string>
<string name="keywords_date_and_time" msgid="4434079919474174978">"jam, militer"</string>
- <string name="keywords_network_reset" msgid="2064330046866583215">"setel ulang, memulihkan, pabrik"</string>
+ <string name="keywords_network_reset" msgid="2064330046866583215">"reset, memulihkan, pabrik"</string>
<string name="keywords_factory_data_reset" msgid="5865739790670615499">"hapus total, hapus, pulihkan, kosongkan, hilangkan, reset ke setelan pabrik"</string>
<string name="keywords_printing" msgid="8499167841024606451">"printer"</string>
<string name="keywords_sounds" msgid="9155626618185269312">"bip speaker, speaker, volume, nonaktifkan notifikasi, matikan suara, audio, musik"</string>
@@ -3082,7 +3084,7 @@
<string name="keywords_accounts" msgid="5908945725229306088">"akun"</string>
<string name="keywords_users" msgid="5880705776023155640">"pembatasan, membatasi, dibatasi"</string>
<string name="keywords_keyboard_and_ime" msgid="3327265741354129990">"koreksi teks, benar suara, getar otomatis, bahasa, isyarat, sarankan, saran, tema, menyinggung, kata, jenis, emoji, internasional"</string>
- <string name="keywords_reset_apps" msgid="2645701455052020435">"setel ulang, preferensi, default"</string>
+ <string name="keywords_reset_apps" msgid="2645701455052020435">"reset, preferensi, default"</string>
<string name="keywords_all_apps" msgid="846444448435698930">"apl download aplikasi sistem"</string>
<string name="keywords_app_permissions" msgid="8539841019997048500">"aplikasi, izin, keamanan"</string>
<string name="keywords_default_apps" msgid="7435952699323965532">"aplikasi, default"</string>
@@ -3709,8 +3711,8 @@
<string name="high_power_off" msgid="5906679734326490426">"Mengoptimalkan penggunaan baterai"</string>
<string name="high_power_system" msgid="739584574711292753">"Pengoptimalan baterai tidak tersedia"</string>
<string name="high_power_desc" msgid="333756885680362741">"Jangan terapkan pengoptimalan baterai. Baterai akan lebih cepat habis."</string>
- <string name="high_power_prompt_title" msgid="2805745781720454052">"Izinkan aplikasi selalu berjalan di background?"</string>
- <string name="high_power_prompt_body" msgid="8067395096053552289">"Mengizinkan <xliff:g id="APP_NAME">%1$s</xliff:g> untuk selalu berjalan di background dapat mengurangi masa pakai baterai. \n\nAnda dapat mengubah ini nanti dari Setelan > Aplikasi & notifikasi."</string>
+ <string name="high_power_prompt_title" msgid="2805745781720454052">"Izinkan aplikasi selalu berjalan di latar belakang?"</string>
+ <string name="high_power_prompt_body" msgid="8067395096053552289">"Mengizinkan <xliff:g id="APP_NAME">%1$s</xliff:g> untuk selalu berjalan di latar belakang dapat mengurangi masa pakai baterai. \n\nAnda dapat mengubah ini nanti dari Setelan > Aplikasi & notifikasi."</string>
<string name="battery_summary" msgid="4345690800899981339">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> digunakan sejak terakhir kali baterai diisi penuh"</string>
<string name="battery_power_management" msgid="2853925857548647969">"Pengelolaan daya"</string>
<string name="no_battery_summary" msgid="4105932628367471314">"Tidak ada penggunaan baterai sejak isi daya penuh terakhir"</string>
@@ -3724,7 +3726,7 @@
<string name="sharing_remote_bugreport_dialog_message" msgid="3814787466701526359">"Laporan bug ini sedang dibagikan kepada admin IT. Hubungi mereka untuk detail selengkapnya."</string>
<string name="share_remote_bugreport_action" msgid="8600797271670537888">"Bagikan"</string>
<string name="decline_remote_bugreport_action" msgid="706319275774199033">"Tolak"</string>
- <string name="usb_use_charging_only" msgid="2344625733377110164">"Tidak ada transfer data"</string>
+ <string name="usb_use_charging_only" msgid="2344625733377110164">"Jangan transfer data"</string>
<string name="usb_use_charging_only_desc" msgid="3283518562582478950">"Mengisi daya perangkat ini saja"</string>
<string name="usb_use_power_only" msgid="6595783381323810697">"Isi daya baterai perangkat yang terhubung"</string>
<string name="usb_use_file_transfers" msgid="6153021302176151884">"Transfer File"</string>
@@ -3765,7 +3767,7 @@
<string name="assist_footer" msgid="7030121180457472165">"Aplikasi bantuan dapat membantu Anda berdasarkan informasi dari layar yang sedang Anda lihat. Beberapa aplikasi mendukung peluncur dan layanan masukan suara untuk memberikan bantuan terintegrasi."</string>
<string name="average_memory_use" msgid="5333366040118953945">"Rata-rata penggunaan memori"</string>
<string name="maximum_memory_use" msgid="6509872438499846077">"Penggunaan memori maksimum"</string>
- <string name="memory_usage" msgid="7963253555330830906">"Pemakaian memori"</string>
+ <string name="memory_usage" msgid="7963253555330830906">"Penggunaan memori"</string>
<string name="app_list_memory_use" msgid="356095943215944031">"Penggunaan aplikasi"</string>
<string name="memory_details" msgid="5165105904103664110">"Detail"</string>
<string name="memory_use_summary" msgid="7676311343819965850">"<xliff:g id="SIZE">%1$s</xliff:g> rata-rata memori yang digunakan dalam 3 jam terakhir"</string>
@@ -3895,7 +3897,7 @@
<string name="condition_battery_summary" msgid="1236078243905690620">"Fitur dibatasi"</string>
<string name="condition_cellular_title" msgid="6605277435894307935">"Kuota tidak aktif"</string>
<string name="condition_cellular_summary" msgid="3607459310548343777">"Internet hanya tersedia melalui Wi‑Fi"</string>
- <string name="condition_bg_data_title" msgid="184684435298857712">"Penghemat Kuota"</string>
+ <string name="condition_bg_data_title" msgid="184684435298857712">"Penghemat Data"</string>
<string name="condition_bg_data_summary" msgid="5194942860807136682">"Fitur dibatasi"</string>
<string name="condition_work_title" msgid="9046811302347490371">"Profil kerja nonaktif"</string>
<string name="condition_work_summary" msgid="5586134491975748565">"Untuk aplikasi & notifikasi"</string>
@@ -3933,7 +3935,7 @@
<string name="usage" msgid="9172908720164431622">"Penggunaan"</string>
<string name="cellular_data_usage" msgid="1236562234207782386">"Penggunaan kuota seluler"</string>
<string name="app_cellular_data_usage" msgid="8499761516172121957">"Penggunaan kuota aplikasi"</string>
- <string name="wifi_data_usage" msgid="275569900562265895">"Penggunaan kuota Wi-Fi"</string>
+ <string name="wifi_data_usage" msgid="275569900562265895">"Penggunaan data Wi-Fi"</string>
<string name="ethernet_data_usage" msgid="747614925362556718">"Penggunaan data ethernet"</string>
<string name="wifi" msgid="1586738489862966138">"Wi-Fi"</string>
<string name="ethernet" msgid="2365753635113154667">"Ethernet"</string>
@@ -3951,7 +3953,7 @@
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> pembatasan</item>
<item quantity="one">1 pembatasan</item>
</plurals>
- <string name="operator_warning" msgid="4676042739221117031">"Perhitungan kuota operator dapat berbeda dengan perhitungan perangkat"</string>
+ <string name="operator_warning" msgid="4676042739221117031">"Perhitungan data oleh operator dapat berbeda dengan perhitungan perangkat"</string>
<string name="data_used_template" msgid="761605393453849477">"<xliff:g id="ID_1">%1$s</xliff:g> digunakan"</string>
<string name="set_data_warning" msgid="8115980184415563941">"Setel peringatan kuota"</string>
<string name="data_warning" msgid="2699207195535036240">"Peringatan kuota"</string>
@@ -3962,8 +3964,8 @@
<string name="configure" msgid="8232696842838580549">"Konfigurasi"</string>
<string name="data_usage_other_apps" msgid="7002491980141402084">"Aplikasi lain yang disertakan dalam penggunaan"</string>
<plurals name="data_saver_unrestricted_summary" formatted="false" msgid="6046013861315713697">
- <item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> aplikasi diizinkan untuk menggunakan kuota tak terbatas saat Penghemat Kuota Internet aktif</item>
- <item quantity="one">1 aplikasi diizinkan untuk menggunakan kuota tak terbatas saat Penghemat Kuota Internet aktif</item>
+ <item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> aplikasi diizinkan untuk menggunakan data tak terbatas saat Penghemat Data aktif</item>
+ <item quantity="one">1 aplikasi diizinkan untuk menggunakan data tak terbatas saat Penghemat Data aktif</item>
</plurals>
<string name="data_usage_title" msgid="7874606430902201083">"Kuota utama"</string>
<string name="data_usage_wifi_title" msgid="7161828479387766556">"Data Wi-Fi"</string>
@@ -3983,14 +3985,14 @@
<string name="no_carrier_update_now_text" msgid="4405472895804759042">"Baru saja diupdate"</string>
<string name="launch_mdp_app_text" msgid="9186559496664208252">"Lihat paket"</string>
<string name="launch_wifi_text" msgid="317820210431682605">"Lihat detail"</string>
- <string name="data_saver_title" msgid="7903308134514179256">"Penghemat Kuota"</string>
- <string name="unrestricted_data_saver" msgid="9139401849550738720">"Kuota tidak dibatasi"</string>
+ <string name="data_saver_title" msgid="7903308134514179256">"Penghemat Data"</string>
+ <string name="unrestricted_data_saver" msgid="9139401849550738720">"Data tidak dibatasi"</string>
<string name="restrict_background_blacklisted" msgid="7158991683849067124">"Data latar belakang nonaktif"</string>
<string name="data_saver_on" msgid="7281809065420480881">"Aktif"</string>
<string name="data_saver_off" msgid="7439439787358504018">"Nonaktif"</string>
- <string name="data_saver_switch_title" msgid="8244008132112735207">"Gunakan Penghemat Kuota"</string>
- <string name="unrestricted_app_title" msgid="4390661122069905122">"Penggunaan kuota tidak dibatasi"</string>
- <string name="unrestricted_app_summary" msgid="2829141815077800483">"Izinkan akses kuota tak terbatas saat Penghemat Kuota Internet aktif"</string>
+ <string name="data_saver_switch_title" msgid="8244008132112735207">"Gunakan Penghemat Data"</string>
+ <string name="unrestricted_app_title" msgid="4390661122069905122">"Penggunaan data tidak dibatasi"</string>
+ <string name="unrestricted_app_summary" msgid="2829141815077800483">"Izinkan akses data tak terbatas saat Penghemat Data aktif"</string>
<string name="home_app" msgid="3695063566006954160">"Aplikasi layar utama"</string>
<string name="no_default_home" msgid="1518949210961918497">"Tidak ada Layar Utama default"</string>
<string name="lockpattern_settings_require_cred_before_startup" msgid="63693894094570367">"Proses memulai dengan aman"</string>
@@ -4000,7 +4002,7 @@
<string name="suggestion_additional_fingerprints" msgid="3434467207282466411">"Tambahkan sidik jari lain"</string>
<string name="suggestion_additional_fingerprints_summary" msgid="1916547587832484196">"Buka kunci dengan jari lain"</string>
<string name="battery_saver_on_summary" msgid="6841062406467435672">"Aktif"</string>
- <string name="battery_saver_off_scheduled_summary" msgid="3740414764069188669">"Akan aktif jika <xliff:g id="BATTERY_PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_saver_off_scheduled_summary" msgid="3740414764069188669">"Akan aktif pada <xliff:g id="BATTERY_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="battery_saver_off_summary" msgid="8736555723004299721">"Nonaktif"</string>
<string name="battery_saver_button_turn_on" msgid="3748696527267573793">"Aktifkan sekarang"</string>
<string name="battery_saver_button_turn_off" msgid="2912950982503267828">"Nonaktifkan sekarang"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Jika perangkat terkunci, cegah mengetik balasan atau teks lainnya di notifikasi"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Pemeriksa ejaan default"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Pilih pemeriksa ejaan"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Gunakan pemeriksa ejaan"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Gunakan pemeriksa ejaan"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Tidak dipilih"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(tidak ada)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4058,8 +4060,8 @@
<string name="special_access_more" msgid="7086690625048471400">"Lihat lainnya"</string>
<string name="confirm_convert_to_fbe_warning" msgid="4972595831034280189">"Benar-benar hapus data pengguna dan konversikan ke enkripsi file?"</string>
<string name="button_confirm_convert_fbe" msgid="419832223125147297">"Hapus dan konversikan"</string>
- <string name="reset_shortcut_manager_throttling" msgid="1912184636360233397">"Setel ulang pembatasan frekuensi ShortcutManager"</string>
- <string name="reset_shortcut_manager_throttling_complete" msgid="2932990541160593632">"Pembatasan kecepatan PengelolaPintasan telah disetel ulang"</string>
+ <string name="reset_shortcut_manager_throttling" msgid="1912184636360233397">"Reset pembatasan frekuensi ShortcutManager"</string>
+ <string name="reset_shortcut_manager_throttling_complete" msgid="2932990541160593632">"Pembatasan kecepatan PengelolaPintasan telah direset"</string>
<string name="notification_suggestion_title" msgid="3292107671498148560">"Kontrol info di layar kunci"</string>
<string name="notification_suggestion_summary" msgid="6516827892359614597">"Menampilkan atau menyembunyikan konten notifikasi"</string>
<string name="page_tab_title_summary" msgid="4824744863994538006">"Semua"</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Untuk membantu mengosongkan ruang penyimpanan, pengelola penyimpanan menghapus foto dan video cadangan dari perangkat Anda."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Hapus foto & video"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Pengelola penyimpanan"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Gunakan Pengelola penyimpanan"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Gunakan Pengelola penyimpanan"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Otomatis"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manual"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Kosongkan ruang sekarang"</string>
@@ -4110,7 +4112,7 @@
<string name="gesture_preference_summary" product="tablet" msgid="8303793594714075580">"Isyarat cepat untuk mengontrol tablet"</string>
<string name="gesture_preference_summary" product="device" msgid="7792199669106960922">"Isyarat cepat untuk mengontrol perangkat"</string>
<string name="double_tap_power_for_camera_title" msgid="5480829329052517484">"Buka kamera"</string>
- <string name="double_tap_power_for_camera_summary" msgid="6591026425496323965">"Untuk membuka kamera dengan cepat, tekan tombol power 2 kali. Berfungsi di layar mana pun."</string>
+ <string name="double_tap_power_for_camera_summary" msgid="6591026425496323965">"Untuk membuka kamera dengan cepat, tekan tombol daya 2 kali. Berfungsi di layar mana pun."</string>
<string name="double_tap_power_for_camera_suggestion_title" msgid="509078029429865036">"Buka kamera dengan cepat"</string>
<string name="double_twist_for_camera_mode_title" msgid="2606032140297556018">"Balik kamera"</string>
<string name="double_twist_for_camera_mode_summary" msgid="8979914206876018137"></string>
@@ -4133,7 +4135,7 @@
<string name="ambient_display_tap_screen_title" product="tablet" msgid="6434521782016864148">"Ketuk untuk memeriksa tablet"</string>
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"Ketuk untuk memeriksa perangkat"</string>
<string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"Untuk memeriksa waktu, notifikasi, dan info lainnya, ketuk layar Anda."</string>
- <string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"Usapkan sidik jari untuk melihat notifikasi"</string>
+ <string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"Geserkan sidik jari untuk melihat notifikasi"</string>
<string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"Usapkan sidik jari"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"Untuk memeriksa notifikasi, usapkan jari ke bawah pada sensor sidik jari di bagian belakang ponsel."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"Untuk memeriksa notifikasi, usapkan jari ke bawah pada sensor sidik jari di bagian belakang tablet."</string>
@@ -4256,7 +4258,7 @@
<string name="autofill_logging_level_title" msgid="2577340324541102626">"Level logging"</string>
<string name="autofill_max_partitions" msgid="125269645910590057">"Permintaan maks per sesi"</string>
<string name="autofill_max_visible_datasets" msgid="2791081640248423492">"Jumlah set data maks yang terlihat"</string>
- <string name="autofill_reset_developer_options" msgid="7208417230269613101">"Setel ulang ke nilai default"</string>
+ <string name="autofill_reset_developer_options" msgid="7208417230269613101">"Reset ke nilai default"</string>
<string name="autofill_reset_developer_options_complete" msgid="5686061993002179524">"Opsi developer IsiOtomatis telah direset"</string>
<string name="device_theme" msgid="8992291311481135893">"Tema perangkat"</string>
<string name="default_theme" msgid="5986996377385956138">"Default"</string>
@@ -4322,7 +4324,7 @@
<string name="battery_suggestion_title" product="default" msgid="3295786171830183688">"Tingkatkan masa pakai baterai ponsel"</string>
<string name="battery_suggestion_summary" msgid="2669070349482656490"></string>
<string name="gesture_prevent_ringing_screen_title" msgid="4173494225145223638">"Cegah berdering"</string>
- <string name="gesture_prevent_ringing_title" msgid="8827963588425673557">"Tekan tombol Power & Keraskan Volume secara bersamaan untuk"</string>
+ <string name="gesture_prevent_ringing_title" msgid="8827963588425673557">"Tekan tombol Daya & Naikkan Volume secara bersamaan untuk"</string>
<string name="gesture_prevent_ringing_sound_title" msgid="8642330448721033641">"Pintasan untuk mencegah berdering"</string>
<string name="prevent_ringing_option_vibrate" msgid="6456505293904544108">"Getar"</string>
<string name="prevent_ringing_option_mute" msgid="53662688921253613">"Nonaktifkan suara"</string>
@@ -4427,7 +4429,7 @@
<string name="carrier_settings_euicc" msgid="7723199738771996732">"Operator"</string>
<string name="carrier_settings_version" msgid="2657511289029828425">"Versi setelan"</string>
<string name="call_category" msgid="3418535202893644015">"Memanggil"</string>
- <string name="video_calling_settings_title" msgid="8011841542502156112">"Video call operator"</string>
+ <string name="video_calling_settings_title" msgid="8011841542502156112">"Panggilan video operator"</string>
<string name="cdma_system_select_title" msgid="5620679296177526467">"Pilih sistem"</string>
<string name="cdma_system_select_summary" msgid="6749131988334321244">"Mengubah mode roaming CDMA"</string>
<string name="cdma_system_select_dialogtitle" msgid="7489000866289285390">"Pilih sistem"</string>
@@ -4461,7 +4463,7 @@
<string name="bluetooth_right_name" msgid="8356091262762973801">"Kanan"</string>
<string name="bluetooth_middle_name" msgid="1489185200445352103">"Casing"</string>
<string name="settings_panel_title" msgid="8181989386118232534">"Panel Setelan"</string>
- <string name="internet_connectivity_panel_title" msgid="341712994620215750">"Sambungan Internet"</string>
+ <string name="internet_connectivity_panel_title" msgid="341712994620215750">"Koneksi Internet"</string>
<string name="volume_connectivity_panel_title" msgid="4998755371496690971">"Volume"</string>
<string name="mobile_data_ap_mode_disabled" msgid="2452716524753472885">"Tidak tersedia selama mode pesawat"</string>
<string name="force_desktop_mode" msgid="6973100177551040740">"Paksa mode desktop"</string>
diff --git a/tests/CarDeveloperOptions/res/values-is/arrays.xml b/tests/CarDeveloperOptions/res/values-is/arrays.xml
index 1cec986..6e6dc6c 100644
--- a/tests/CarDeveloperOptions/res/values-is/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-is/arrays.xml
@@ -38,7 +38,16 @@
<item msgid="5827960506924849753">"10 mínútur"</item>
<item msgid="6677424950124253938">"30 mínútur"</item>
</string-array>
- <!-- no translation found for dream_timeout_entries:7 (8271452751594598661) -->
+ <string-array name="dream_timeout_entries">
+ <item msgid="6487043225269853023">"Aldrei"</item>
+ <item msgid="2517785806387977252">"15 sekúndur"</item>
+ <item msgid="6347954399441173672">"30 sekúndur"</item>
+ <item msgid="4858305253279921789">"1 mínúta"</item>
+ <item msgid="8109273437140044073">"2 mínútur"</item>
+ <item msgid="2788593551142462622">"5 mínútur"</item>
+ <item msgid="8012672183888404961">"10 mínútur"</item>
+ <item msgid="8271452751594598661">"30 mínútur"</item>
+ </string-array>
<string-array name="lock_after_timeout_entries">
<item msgid="2232921187970351881">"Strax"</item>
<item msgid="2038544972632026612">"5 sekúndur"</item>
@@ -50,17 +59,47 @@
<item msgid="811192536981678974">"10 mínútur"</item>
<item msgid="7258394417241706272">"30 mínútur"</item>
</string-array>
- <!-- no translation found for entries_font_size:0 (2340391964816059553) -->
- <!-- no translation found for entries_font_size:0 (6490061470416867723) -->
- <!-- no translation found for entries_font_size:2 (1714184661981538355) -->
- <!-- no translation found for entries_font_size:2 (1678068858001018666) -->
- <!-- no translation found for wifi_status:3 (5848277343965362748) -->
- <!-- no translation found for wifi_status_with_ssid:1 (6816207058895999545) -->
- <!-- no translation found for wifi_status_with_ssid:3 (7547609081339573756) -->
- <!-- no translation found for wifi_status_with_ssid:4 (5145158315060185414) -->
+ <string-array name="entries_font_size">
+ <item msgid="2340391964816059553">"Lítil"</item>
+ <item msgid="591935967183159581">"Sjálfgefið"</item>
+ <item msgid="1714184661981538355">"Stór"</item>
+ <item msgid="6195563047686707484">"Stærst"</item>
+ </string-array>
+ <string-array name="wifi_status">
+ <item msgid="1304883790721412351"></item>
+ <item msgid="4157625910392775808">"Leitar…"</item>
+ <item msgid="5597394826455877834">"Tengist…"</item>
+ <item msgid="5848277343965362748">"Auðkennir…"</item>
+ <item msgid="3391238031431440676">"Sækir IP-tölu…"</item>
+ <item msgid="5257597310494000224">"Tengt"</item>
+ <item msgid="8472497592913050396">"Í bið"</item>
+ <item msgid="1228072488815999109">"Aftengist…"</item>
+ <item msgid="7253087004422991731">"Aftengt"</item>
+ <item msgid="4169850917304751227">"Mistókst"</item>
+ <item msgid="6266658166690831131">"Á bannlista"</item>
+ <item msgid="4517230805854909775">"Forðast lélega tengingu tímabundið"</item>
+ </string-array>
+ <string-array name="wifi_status_with_ssid">
+ <item msgid="4853670665485437464"></item>
+ <item msgid="6816207058895999545">"Leitar…"</item>
+ <item msgid="8058143476674427024">"Tengist <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
+ <item msgid="7547609081339573756">"Auðkennir á <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
+ <item msgid="5145158315060185414">"Sækir IP-tölu frá <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
+ <item msgid="3283243151651124831">"Tengt við <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</item>
+ <item msgid="6600156231416890902">"Í bið"</item>
+ <item msgid="4133290864821295785">"Aftengist <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
+ <item msgid="3980154971187953257">"Aftengt"</item>
+ <item msgid="2847316776634969068">"Mistókst"</item>
+ <item msgid="4390990424746035383">"Á bannlista"</item>
+ <item msgid="3618248791367063949">"Forðast lélega tengingu tímabundið"</item>
+ </string-array>
<!-- no translation found for wifi_tether_security:0 (5586343370515598801) -->
<!-- no translation found for wifi_tether_security:1 (6136336549994615745) -->
- <!-- no translation found for wifi_p2p_wps_setup:0 (5390235347963255303) -->
+ <string-array name="wifi_p2p_wps_setup">
+ <item msgid="5390235347963255303">"Hnappur"</item>
+ <item msgid="7401896200768713930">"PIN-númer úr tengdu tæki"</item>
+ <item msgid="4526848028011846710">"PIN frá þessu tæki"</item>
+ </string-array>
<string-array name="wifi_p2p_status">
<item msgid="8741947238021758201">"Tengt"</item>
<item msgid="983792611851499732">"Boðið"</item>
@@ -82,8 +121,13 @@
<item msgid="1644506614010085798">"4"</item>
<item msgid="3132506679404897150">"5"</item>
</string-array>
- <!-- no translation found for wifi_signal:1 (7882129634982603782) -->
- <!-- no translation found for wifi_signal:4 (999948812884919584) -->
+ <string-array name="wifi_signal">
+ <item msgid="1709949377823900951">"Lélegt"</item>
+ <item msgid="7882129634982603782">"Lélegt"</item>
+ <item msgid="6457357501905996224">"Sæmilegt"</item>
+ <item msgid="405271628162918841">"Góður"</item>
+ <item msgid="999948812884919584">"Frábært"</item>
+ </string-array>
<string-array name="data_usage_data_range">
<item msgid="8986775481492954015">"Síðustu 30 dagar"</item>
<item msgid="3211287705232736964">"Velja notkunartímabil..."</item>
@@ -119,7 +163,10 @@
<item msgid="7330627471456865502">"MSCHAPV2"</item>
<item msgid="6255179395132581882">"GTC"</item>
</string-array>
- <!-- no translation found for wifi_ip_settings:1 (4377002609760712163) -->
+ <string-array name="wifi_ip_settings">
+ <item msgid="2717196390555072244">"DHCP"</item>
+ <item msgid="4377002609760712163">"Föst"</item>
+ </string-array>
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"Ekkert"</item>
<item msgid="1464741437353223198">"Handbók"</item>
@@ -239,11 +286,73 @@
<item msgid="1165623660533024666">"keyra í bakgrunni"</item>
<item msgid="6423861043647911030">"hljóðstyrkur aðgengis"</item>
</string-array>
- <!-- no translation found for app_ops_labels:3 (7836406246005211990) -->
- <!-- no translation found for app_ops_labels:4 (3951439024549922598) -->
- <!-- no translation found for app_ops_labels:8 (3597797992398484655) -->
- <!-- no translation found for app_ops_labels:20 (3037159047591081136) -->
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Staðsetning"</item>
+ <item msgid="6656077694190491067">"Staðsetning"</item>
+ <item msgid="8790228218278477369">"Staðsetning"</item>
+ <item msgid="7836406246005211990">"Titringur"</item>
+ <item msgid="3951439024549922598">"Lesa tengiliði"</item>
+ <item msgid="8802152411647068">"Breyta tengiliðum"</item>
+ <item msgid="229544934599698735">"Lesa símtalaskrá"</item>
+ <item msgid="7396102294405899613">"Breyta símtalaskrá"</item>
+ <item msgid="3597797992398484655">"Lesa dagatal"</item>
+ <item msgid="2705975774250907343">"Breyta dagatali"</item>
+ <item msgid="4668747371441932697">"Staðsetning"</item>
+ <item msgid="1487578921720243646">"Færslutilkynning"</item>
+ <item msgid="4636080349724146638">"Staðsetning"</item>
+ <item msgid="673510900286463926">"Hringja í síma"</item>
+ <item msgid="542083422784609790">"Lesa SMS/MMS"</item>
+ <item msgid="1033780373029588436">"Skrifa SMS/MMS"</item>
+ <item msgid="5647111115517787488">"Taka á móti SMS/MMS"</item>
+ <item msgid="8591105601108455893">"Taka á móti SMS/MMS"</item>
+ <item msgid="7730995008517841903">"Taka á móti SMS/MMS"</item>
+ <item msgid="2613033109026626086">"Taka á móti SMS/MMS"</item>
+ <item msgid="3037159047591081136">"Senda SMS/MMS"</item>
+ <item msgid="4726682243833913568">"Lesa SMS/MMS"</item>
+ <item msgid="6555678522277865572">"Skrifa SMS/MMS"</item>
+ <item msgid="6981734935578130884">"Breyta stillingum"</item>
+ <item msgid="8705854389991425629">"Teikna yfir"</item>
+ <item msgid="5861356020344153651">"Opna tilkynningar"</item>
+ <item msgid="78432174621628659">"Myndavél"</item>
+ <item msgid="3986116419882154794">"Taka upp hljóð"</item>
+ <item msgid="4516840825756409490">"Spila hljóð"</item>
+ <item msgid="6811712502798183957">"Lesa klippiborð"</item>
+ <item msgid="2780369012602289114">"Breyta klippiborði"</item>
+ <item msgid="2331359440170850868">"Margmiðlunarhnappar"</item>
+ <item msgid="6133599737122751231">"Fókus hljóðs"</item>
+ <item msgid="6844485713404805301">"Meginhljóðstyrkur"</item>
+ <item msgid="1600379420669104929">"Hljóðstyrkur raddar"</item>
+ <item msgid="6296768210470214866">"Hljóðstyrkur hringingar"</item>
+ <item msgid="510690696071629241">"Hljóðstyrkur margmiðlunarefnis"</item>
+ <item msgid="406861638631430109">"Hljóðstyrkur vekjara"</item>
+ <item msgid="4715864795872233884">"Hljóðstyrkur tilkynninga"</item>
+ <item msgid="2311478519251301183">"Hljóðstyrkur Bluetooth"</item>
+ <item msgid="5133991377896747027">"Halda vakandi"</item>
+ <item msgid="2464189519136248621">"Staður"</item>
+ <item msgid="2062677934050803037">"Staðsetning"</item>
+ <item msgid="1735171933192715957">"Fá talnagögn um notkun"</item>
+ <item msgid="1014093788778383554">"Kveikja/slökkva á hljóðnema"</item>
+ <item msgid="4199297950608622850">"Sýna tilkynningu"</item>
+ <item msgid="2527962435313398821">"Margmiðlunarefni verkefnis"</item>
+ <item msgid="5117506254221861929">"Virkja VPN"</item>
+ <item msgid="8291198322681891160">"Skrifa veggfóður"</item>
+ <item msgid="7106921284621230961">"Aðstoða við uppbyggingu"</item>
+ <item msgid="4496533640894624799">"Aðstoða við skjámynd"</item>
+ <item msgid="2598847264853993611">"Lesa stöðu síma"</item>
+ <item msgid="9215610846802973353">"Bæta við talhólfi"</item>
+ <item msgid="9186411956086478261">"Nota SIP"</item>
+ <item msgid="6884763100104539558">"Vinna úr hringdu símtali"</item>
+ <item msgid="125513972170580692">"Fingrafar"</item>
+ <item msgid="2556071024281275619">"Líkamsskynjarar"</item>
+ <item msgid="617168514928339387">"Lesa skilaboð frá endurvarpa"</item>
+ <item msgid="7134693570516523585">"Gervistaðsetning"</item>
+ <item msgid="7224489175375229399">"Lesa geymslu"</item>
+ <item msgid="8472735063903258202">"Skrifa í geymslu"</item>
+ <item msgid="4069276819909595110">"Kveikja á skjánum"</item>
+ <item msgid="1228338896751121025">"Fá reikninga"</item>
+ <item msgid="3181581793459233672">"Keyra í bakgrunni"</item>
+ <item msgid="2340936043025374076">"Hljóðstyrkur aðgengis"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Stutt"</item>
<item msgid="4816511817309094890">"Í meðallagi"</item>
@@ -260,7 +369,13 @@
<item msgid="4627069151979553527">"Tengt"</item>
<item msgid="6896773537705206194">"Litlir hástafir"</item>
</string-array>
- <!-- no translation found for captioning_font_size_selector_titles:3 (2784236342175159295) -->
+ <string-array name="captioning_font_size_selector_titles">
+ <item msgid="1680223634161592855">"Mjög lítið"</item>
+ <item msgid="5091603983404027034">"Lítið"</item>
+ <item msgid="176844712416932112">"Venjulegt"</item>
+ <item msgid="2784236342175159295">"Stór"</item>
+ <item msgid="218913203203160606">"Mjög stórt"</item>
+ </string-array>
<string-array name="captioning_edge_type_selector_titles">
<item msgid="3865198759294188069">"Sjálfgefið"</item>
<item msgid="6488643537808152001">"Ekkert"</item>
@@ -275,7 +390,14 @@
<item msgid="1874668269931014581">"75%"</item>
<item msgid="6462911487571123954">"100%"</item>
</string-array>
- <!-- no translation found for captioning_preset_selector_titles:2 (5891360837786277638) -->
+ <string-array name="captioning_preset_selector_titles">
+ <item msgid="326819345272910536">"Nota sjálfgildi forrits"</item>
+ <item msgid="8611890312638868524">"Hvítt á svörtu"</item>
+ <item msgid="5891360837786277638">"Svart á hvítu"</item>
+ <item msgid="2798457065945456853">"Gult á svörtu"</item>
+ <item msgid="5799049811524553967">"Gult á bláu"</item>
+ <item msgid="3673930830658169860">"Sérstillt"</item>
+ </string-array>
<string-array name="vpn_types_long">
<item msgid="6566768880689730097">"PPTP VPN"</item>
<item msgid="1349760781118368659">"L2TP/IPSec VPN með lyklum sem hefur verið deilt"</item>
@@ -288,15 +410,32 @@
<item msgid="2958623927055120839">"Ekkert"</item>
<item msgid="1157046369795346308">"Handbók"</item>
</string-array>
- <!-- no translation found for vpn_states:4 (9135049670787351881) -->
+ <string-array name="vpn_states">
+ <item msgid="5408915841694583740">"Aftengt"</item>
+ <item msgid="8754480102834556765">"Frumstillir…"</item>
+ <item msgid="3351334355574270250">"Tengist…"</item>
+ <item msgid="8303882153995748352">"Tengt"</item>
+ <item msgid="9135049670787351881">"Tímamörk"</item>
+ <item msgid="2124868417182583926">"Mistókst"</item>
+ </string-array>
<string-array name="security_settings_premium_sms_values">
<item msgid="1164265643455394443">"Spyrja"</item>
<item msgid="7718817231348607934">"Leyfa aldrei"</item>
<item msgid="8184570120217958741">"Leyfa alltaf"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Venjuleg"</item>
+ <item msgid="5101233285497327432">"Í meðallagi"</item>
+ <item msgid="1555861583162930714">"Lítið"</item>
+ <item msgid="1719683776264798117">"Alvarlegt"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Venjulegt"</item>
+ <item msgid="6107138933849816768">"Í meðallagi"</item>
+ <item msgid="182695359839047859">"Lítið"</item>
+ <item msgid="8577246509202964244">"Á þrotum"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Viðvarandi"</item>
<item msgid="167418068739176448">"Mesta virkni"</item>
diff --git a/tests/CarDeveloperOptions/res/values-is/strings.xml b/tests/CarDeveloperOptions/res/values-is/strings.xml
index 81ca330..ccc9803 100644
--- a/tests/CarDeveloperOptions/res/values-is/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-is/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Stækkaðu eða minnkaðu texta á skjá."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Minnka"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Stækka"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Textadæmi"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Galdrakarlinn í Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"11. kafli: Smaragðsborgin dásamlega í Oz"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Upplýsingar um snið"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Reikningar"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Staðsetning"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Nota staðsetningu"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Nota staðsetningu"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Slökkt"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">Kveikt – <xliff:g id="COUNT_1">%1$d</xliff:g> forrit hefur aðgang að staðsetningu</item>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Kveikja á Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Nota Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Nota Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Stillingar Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Setja upp og stjórna þráðlausum aðgangsstöðum"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Farsímakerfi"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Nota farsímakerfi ef ekki er hægt að nota Wi‑Fi"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Ef farsímakerfi er ekki tiltækt skaltu nota Wi-Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Hringja í gegnum Wi-Fi. Ef Wi-Fi tenging slitnar lýkur símtalinu."</string>
@@ -1262,7 +1264,7 @@
<string name="doze_title" msgid="235269029233857546">"Nýjar tilkynningar"</string>
<string name="doze_summary" msgid="6762274282827831706">"Vekja skjáinn þegar þú færð tilkynningar"</string>
<string name="doze_always_on_title" msgid="8555184965031789941">"Alltaf kveikt"</string>
- <string name="doze_always_on_summary" msgid="7654436900436328950">"Sýna tíma, tilkynningartákn og aðrar upplýsingar. Aukin rafhlöðunotkun."</string>
+ <string name="doze_always_on_summary" msgid="7654436900436328950">"Sýna klukku, tilkynningartákn og aðrar upplýsingar. Aukin rafhlöðunotkun."</string>
<string name="title_font_size" msgid="5021464556860010851">"Leturstærð"</string>
<string name="short_summary_font_size" msgid="4141077908728522946">"Gera texta stærri eða minni"</string>
<string name="sim_lock_settings" msgid="1986924650622642189">"Stillingar SIM-kortaláss"</string>
@@ -2090,12 +2092,12 @@
<string name="accessibility_autoclick_description" msgid="5492414927846407499">"Ef þú notar mús geturðu stillt bendilinn þannig að hann framkvæmi aðgerð sjálfkrafa þegar hann er óhreyfður í tiltekinn tíma."</string>
<string name="accessibility_autoclick_delay_preference_title" msgid="8303022510942147049">"Bíða áður en smellt er"</string>
<string name="accessibility_vibration_settings_title" msgid="1902649657883159406">"Titringur"</string>
- <string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Titringur fyrir tilkynningar"</string>
+ <string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Titringur tilkynninga"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Titringur hringingar"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Snertititringur"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Nota þjónustu"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Nota litaleiðréttingu"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Nota skjátexta"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Nota þjónustu"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Nota litaleiðréttingu"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Nota skjátexta"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Áfram"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Heyrnartæki"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Engin heyrnartæki eru tengd"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Kveikja"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Nota rafhlöðusparnað"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Nota rafhlöðusparnað"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Kveikja sjálfkrafa"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Aldrei"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"við <xliff:g id="PERCENT">%1$s</xliff:g> rafhlöðu"</string>
@@ -3457,8 +3459,8 @@
<string name="zen_mode_event_rule_summary_reply_template" msgid="3917497077674876311">"Þar sem svarið er <xliff:g id="REPLY">%1$s</xliff:g>"</string>
<string name="zen_mode_event_rule_calendar_any" msgid="155915101132859764">"Öll dagatöl"</string>
<string name="zen_mode_event_rule_reply" msgid="9100941281268256319">"Þar sem svarið er"</string>
- <string name="zen_mode_event_rule_reply_any_except_no" msgid="3344044163641764449">"„Já“, „Kannski“ eða „Ekki svarað“"</string>
- <string name="zen_mode_event_rule_reply_yes_or_maybe" msgid="5042234361937256329">"„Já“ eða „Kannski“"</string>
+ <string name="zen_mode_event_rule_reply_any_except_no" msgid="3344044163641764449">"Já, Kannski eða Ekki svarað"</string>
+ <string name="zen_mode_event_rule_reply_yes_or_maybe" msgid="5042234361937256329">"Já eða Kannski"</string>
<string name="zen_mode_event_rule_reply_yes" msgid="7039756546321205552">"Já"</string>
<string name="zen_mode_rule_not_found_text" msgid="6553855397424553685">"Regla fannst ekki."</string>
<string name="zen_mode_rule_summary_enabled_combination" msgid="8269105393636454359">"Kveikt / <xliff:g id="MODE">%1$s</xliff:g>"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Ekki leyfa að svör eða annar texti sé sleginn inn í tilkynningar þegar tækið er læst"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Sjálfgefin ritvilluvörn"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Veldu ritvilluvörn"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Nota ritvilluleit"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Nota ritvilluleit"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Ekki valið"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(ekkert)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Geymslustjórnun fjarlægir afritaðar myndir og myndskeið úr tækinu þínu til að losa um geymslupláss."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Fjarlægja myndir og myndskeið"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Geymslustjórnun"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Nota geymslustjórnun"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Nota geymslustjórnun"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Sjálfvirkt"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Handbók"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Losa geymslupláss núna"</string>
diff --git a/tests/CarDeveloperOptions/res/values-it/arrays.xml b/tests/CarDeveloperOptions/res/values-it/arrays.xml
index 22a26a0..a2f4d11 100644
--- a/tests/CarDeveloperOptions/res/values-it/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-it/arrays.xml
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"Non consentire mai"</item>
<item msgid="8184570120217958741">"Consenti sempre"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normale"</item>
+ <item msgid="5101233285497327432">"Discreta"</item>
+ <item msgid="1555861583162930714">"Bassa"</item>
+ <item msgid="1719683776264798117">"Critica"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normale"</item>
+ <item msgid="6107138933849816768">"Moderata"</item>
+ <item msgid="182695359839047859">"Bassa"</item>
+ <item msgid="8577246509202964244">"Critico"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Persistente"</item>
<item msgid="167418068739176448">"Prima attività"</item>
diff --git a/tests/CarDeveloperOptions/res/values-it/strings.xml b/tests/CarDeveloperOptions/res/values-it/strings.xml
index d22c825..204c5f1 100644
--- a/tests/CarDeveloperOptions/res/values-it/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-it/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Ingrandisci o riduci il testo sullo schermo."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Rimpicciolisci"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Ingrandisci"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Testo di esempio"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Il meraviglioso mago di Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Capitolo 11: La splendida Città di smeraldo di Oz"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Informazioni profilo"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Account"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Geolocalizzazione"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Usa geolocalizzazione"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Usa geolocalizzazione"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"OFF"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">On - <xliff:g id="COUNT_1">%1$d</xliff:g> app possono accedere alla posizione</item>
@@ -413,7 +412,7 @@
<string name="face_intro_error_unknown" msgid="3241592604198351134">"Impossibile aggiungere altri volti"</string>
<string name="security_settings_face_enroll_error_dialog_title" msgid="3933492758701563051">"Registrazione non completata"</string>
<string name="security_settings_face_enroll_dialog_ok" msgid="1078348922734845090">"OK"</string>
- <string name="security_settings_face_enroll_error_timeout_dialog_message" msgid="4917894418448325405">"Raggiunto il tempo limite per la registrazione del volto. Riprova."</string>
+ <string name="security_settings_face_enroll_error_timeout_dialog_message" msgid="4917894418448325405">"Hai raggiunto il tempo limite per la registrazione del volto. Riprova."</string>
<string name="security_settings_face_enroll_error_generic_dialog_message" msgid="5160473187142616862">"Registrazione del volto non riuscita."</string>
<string name="security_settings_face_enroll_finish_title" msgid="6800717857394410769">"Fatto. Tutto OK."</string>
<string name="security_settings_face_enroll_done" msgid="5409739233373490971">"Fine"</string>
@@ -469,7 +468,7 @@
<string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"Tocca il sensore"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Appoggia il dito sul sensore e sollevalo quando senti una vibrazione"</string>
<string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"Solleva, quindi tocca di nuovo"</string>
- <string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Solleva ripetutamente il dito per aggiungere le diverse parti dell\'impronta digitale"</string>
+ <string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Solleva ripetutamente il dito per aggiungere le varie parti dell\'impronta"</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"Impronta aggiunta"</string>
<string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"Quando vedi questa icona, usa l\'impronta digitale per identificarti o autorizzare gli acquisti"</string>
<string name="security_settings_fingerprint_enroll_enrolling_skip" msgid="1473280156532146933">"Più tardi"</string>
@@ -489,7 +488,7 @@
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"Ops, questo non è il sensore"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"Tocca il sensore sulla parte posteriore del telefono. Utilizza il dito indice."</string>
<string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"Registrazione non completata"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Raggiunto tempo limite per la registrazione dell\'impronta digitale. Riprova."</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Hai raggiunto il tempo limite per la registrazione dell\'impronta digitale. Riprova."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"Registrazione dell\'impronta digitale non riuscita. Riprova o utilizza un dito diverso."</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"Aggiungine un\'altra"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"Avanti"</string>
@@ -499,10 +498,10 @@
<string name="fingerprint_add_max" msgid="2939393314646115661">"Puoi aggiungere fino a <xliff:g id="COUNT">%d</xliff:g> impronte digitali"</string>
<string name="fingerprint_intro_error_max" msgid="3247720976621039437">"Hai aggiunto il numero massimo di impronte digitali"</string>
<string name="fingerprint_intro_error_unknown" msgid="3975674268256524015">"Impossibile aggiungere ulteriori impronte digitali"</string>
- <string name="fingerprint_last_delete_title" msgid="3104596858161269635">"Rimuovere tutte le impronte digitali?"</string>
+ <string name="fingerprint_last_delete_title" msgid="3104596858161269635">"Rimuovere tutte le impronte?"</string>
<string name="fingerprint_delete_title" msgid="3120894112324235536">"Rimuovi \"<xliff:g id="FINGERPRINT_ID">%1$s</xliff:g>\""</string>
<string name="fingerprint_delete_message" msgid="5895802741486967970">"Vuoi eliminare questa impronta digitale?"</string>
- <string name="fingerprint_last_delete_message" msgid="3346252479778971442">"Non potrai più utilizzare le impronte digitali per sbloccare il telefono, autorizzare gli acquisti o accedere alle app."</string>
+ <string name="fingerprint_last_delete_message" msgid="3346252479778971442">"Non potrai più utilizzare le impronte per sbloccare il telefono, autorizzare gli acquisti o accedere alle app."</string>
<string name="fingerprint_last_delete_message_profile_challenge" msgid="5385095150532247025">"Non potrai utilizzare le impronte digitali per sbloccare il profilo di lavoro, autorizzare gli acquisti o accedere alle app di lavoro."</string>
<string name="fingerprint_last_delete_confirm" msgid="7984595457589664004">"Sì, rimuovi"</string>
<string name="crypt_keeper_settings_title" msgid="839783588093862748">"Crittografia"</string>
@@ -712,7 +711,7 @@
<string name="lockpattern_tutorial_cancel_label" msgid="450401426127674369">"Annulla"</string>
<string name="lockpattern_tutorial_continue_label" msgid="8474690922559443018">"Avanti"</string>
<string name="lock_setup" msgid="8710689848703935088">"Impostazione completata."</string>
- <string name="manage_device_admin" msgid="322047441168191695">"App di amministrazione dispositivo"</string>
+ <string name="manage_device_admin" msgid="322047441168191695">"App di amministrazione del dispositivo"</string>
<string name="number_of_device_admins_none" msgid="8519193548630223132">"Nessuna app attiva"</string>
<plurals name="number_of_device_admins" formatted="false" msgid="6445613288828151224">
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> app attive</item>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Attiva Wi‑Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Utilizza Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Usa Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Impostazioni Wi‑Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Configura e gestisci punti di accesso wireless"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Rete mobile"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Se il Wi‑Fi non è disponibile, usa la rete mobile"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Se la rete mobile non è disponibile, usa il Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Chiamata tramite Wi‑Fi. Se il Wi‑Fi viene perso, la chiamata termina."</string>
@@ -1212,7 +1214,7 @@
<string name="night_display_text" msgid="5330502493684652527">"Con la funzione Luminosità notturna, il tuo schermo diventa color ambra. In questo modo potrai guardarlo senza sforzare la vista o leggere in condizioni di luce attenuata e potrai addormentarti più facilmente."</string>
<string name="night_display_auto_mode_title" msgid="8493573087102481588">"Pianificazione"</string>
<string name="night_display_auto_mode_never" msgid="2897444637217807088">"Nessuna"</string>
- <string name="night_display_auto_mode_custom" msgid="1400891076453963151">"Attiva in un orario personalizzato"</string>
+ <string name="night_display_auto_mode_custom" msgid="1400891076453963151">"Attiva in orario personalizzato"</string>
<string name="night_display_auto_mode_twilight" msgid="4000162110017520674">"Attiva dal tramonto all\'alba"</string>
<string name="night_display_start_time_title" msgid="1069255169673371077">"Ora inizio"</string>
<string name="night_display_end_time_title" msgid="2760793157124245911">"Ora fine"</string>
@@ -1716,7 +1718,7 @@
<string name="lockpassword_confirm_your_pin_header" msgid="4335593948303036343">"Inserisci di nuovo il PIN"</string>
<string name="lockpassword_confirm_passwords_dont_match" msgid="1783767008133345784">"Le password non corrispondono"</string>
<string name="lockpassword_confirm_pins_dont_match" msgid="5444357293637748942">"I PIN non corrispondono"</string>
- <string name="lockpassword_draw_your_pattern_again_header" msgid="9017394036814402348">"Traccia di nuovo la sequenza"</string>
+ <string name="lockpassword_draw_your_pattern_again_header" msgid="9017394036814402348">"Inserisci di nuovo la sequenza"</string>
<string name="lockpassword_choose_lock_generic_header" msgid="4418423132980560119">"Seleziona metodo di sblocco"</string>
<string name="lockpassword_password_set_toast" msgid="601928982984489868">"Password impostata"</string>
<string name="lockpassword_pin_set_toast" msgid="172594825722240059">"PIN impostato"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Vibrazione notifiche"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Vibrazione allo squillo"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Vibrazione al tocco"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Utilizza servizio"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Usa correzione del colore"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Utilizza sottotitoli"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Usa il servizio"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Usa correzione del colore"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Usa sottotitoli"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Continua"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Apparecchi acustici"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Nessun apparecchio acustico connesso"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Attiva"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Usa Risparmio energetico"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Usa Risparmio energetico"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Attiva automaticamente"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Mai"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"al seguente livello di carica: <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Impedisci di digitare risposte o altro testo nelle notifiche quando il dispositivo è bloccato"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Controllo ortografico predefinito"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Scegli controllo ortografico"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Usa il controllo ortografico"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Usa il controllo ortografico"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Non selezionato"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(nessuno)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Per liberare spazio, la gestione memoria rimuove foto e video dal dispositivo dopo averne eseguito il backup."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Rimuovi foto e video"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Gestione memoria"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Utilizza Gestione archiviazione"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Usa Gestione archiviazione"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatiche"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manuali"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Libera spazio ora"</string>
@@ -4267,7 +4269,7 @@
<string name="storage_manager_indicator_on" msgid="5295306384982062320">"Attiva"</string>
<string name="install_type_instant" msgid="6248487669862821874">"App istantanea"</string>
<string name="automatic_storage_manager_deactivation_warning" msgid="7867793739491286374">"Disattivare la gestione della memoria?"</string>
- <string name="storage_movies_tv" msgid="7282484273991655296">"App per film e programmi televisivi"</string>
+ <string name="storage_movies_tv" msgid="7282484273991655296">"App per film e programmi TV"</string>
<string name="carrier_provisioning" msgid="3309125279191534469">"Informazioni sul provisioning operatore"</string>
<string name="trigger_carrier_provisioning" msgid="6284005970057901477">"Attiva provisioning operatore"</string>
<string name="zen_suggestion_title" msgid="2134699720214231950">"Aggiorna modalità Non disturbare"</string>
@@ -4323,7 +4325,7 @@
<string name="battery_suggestion_summary" msgid="2669070349482656490"></string>
<string name="gesture_prevent_ringing_screen_title" msgid="4173494225145223638">"Disattiva suoneria"</string>
<string name="gesture_prevent_ringing_title" msgid="8827963588425673557">"Premi contemporaneamente i tasti di accensione e Volume su per"</string>
- <string name="gesture_prevent_ringing_sound_title" msgid="8642330448721033641">"Scorciatoia per impedire al telefono di suonare"</string>
+ <string name="gesture_prevent_ringing_sound_title" msgid="8642330448721033641">"Scorciatoia per disattivare la suoneria"</string>
<string name="prevent_ringing_option_vibrate" msgid="6456505293904544108">"Vibrazione"</string>
<string name="prevent_ringing_option_mute" msgid="53662688921253613">"Disattiva audio"</string>
<string name="prevent_ringing_option_none" msgid="1450985763137666231">"Non fare niente"</string>
diff --git a/tests/CarDeveloperOptions/res/values-iw/arrays.xml b/tests/CarDeveloperOptions/res/values-iw/arrays.xml
index cf0a6b7..fb404ea 100644
--- a/tests/CarDeveloperOptions/res/values-iw/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-iw/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"הרצה ברקע"</item>
<item msgid="6423861043647911030">"עוצמת קול של נגישות"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"מיקום"</item>
+ <item msgid="6656077694190491067">"מיקום"</item>
+ <item msgid="8790228218278477369">"מיקום"</item>
+ <item msgid="7836406246005211990">"רטט"</item>
+ <item msgid="3951439024549922598">"קרא אנשי קשר"</item>
+ <item msgid="8802152411647068">"שנה אנשי קשר"</item>
+ <item msgid="229544934599698735">"קרא יומן שיחות"</item>
+ <item msgid="7396102294405899613">"שנה יומן שיחות"</item>
+ <item msgid="3597797992398484655">"קרא יומן"</item>
+ <item msgid="2705975774250907343">"שנה יומן"</item>
+ <item msgid="4668747371441932697">"מיקום"</item>
+ <item msgid="1487578921720243646">"פירסום התראה"</item>
+ <item msgid="4636080349724146638">"מיקום"</item>
+ <item msgid="673510900286463926">"שיחת טלפון"</item>
+ <item msgid="542083422784609790">"קרא SMS/MMS"</item>
+ <item msgid="1033780373029588436">"כתוב SMS/MMS"</item>
+ <item msgid="5647111115517787488">"קבל SMS/MMS"</item>
+ <item msgid="8591105601108455893">"קבל SMS/MMS"</item>
+ <item msgid="7730995008517841903">"קבל SMS/MMS"</item>
+ <item msgid="2613033109026626086">"קבל SMS/MMS"</item>
+ <item msgid="3037159047591081136">"שלח SMS/MMS"</item>
+ <item msgid="4726682243833913568">"קרא SMS/MMS"</item>
+ <item msgid="6555678522277865572">"כתוב SMS/MMS"</item>
+ <item msgid="6981734935578130884">"שנה הגדרות"</item>
+ <item msgid="8705854389991425629">"צייר מעל"</item>
+ <item msgid="5861356020344153651">"גישה אל ההתראות"</item>
+ <item msgid="78432174621628659">"מצלמה"</item>
+ <item msgid="3986116419882154794">"הקלט אודיו"</item>
+ <item msgid="4516840825756409490">"הפעל את האודיו"</item>
+ <item msgid="6811712502798183957">"קרא לוח"</item>
+ <item msgid="2780369012602289114">"שנה לוח"</item>
+ <item msgid="2331359440170850868">"לחצני מדיה"</item>
+ <item msgid="6133599737122751231">"מיקוד אודיו"</item>
+ <item msgid="6844485713404805301">"שליטה ראשית בעוצמת קול"</item>
+ <item msgid="1600379420669104929">"עוצמת קול של דיבור"</item>
+ <item msgid="6296768210470214866">"עוצמת צלצול"</item>
+ <item msgid="510690696071629241">"עוצמת קול של מדיה"</item>
+ <item msgid="406861638631430109">"עוצמת קול של התראה"</item>
+ <item msgid="4715864795872233884">"עוצמת קול של התראות"</item>
+ <item msgid="2311478519251301183">"עוצמת קול של Bluetooth"</item>
+ <item msgid="5133991377896747027">"שמירה במצב פעיל"</item>
+ <item msgid="2464189519136248621">"מיקום"</item>
+ <item msgid="2062677934050803037">"מיקום"</item>
+ <item msgid="1735171933192715957">"קבל סטטיסטיקת שימוש"</item>
+ <item msgid="1014093788778383554">"השתק/בטל השתקה של המיקרופון"</item>
+ <item msgid="4199297950608622850">"הצגת הודעה קופצת"</item>
+ <item msgid="2527962435313398821">"הקרנת מדיה"</item>
+ <item msgid="5117506254221861929">"הפעלת VPN"</item>
+ <item msgid="8291198322681891160">"כתיבת טפט"</item>
+ <item msgid="7106921284621230961">"סיוע למבנה"</item>
+ <item msgid="4496533640894624799">"סיוע לצילום מסך"</item>
+ <item msgid="2598847264853993611">"קריאת מצב טלפון"</item>
+ <item msgid="9215610846802973353">"הוספת דואר קולי"</item>
+ <item msgid="9186411956086478261">"שימוש ב-SIP"</item>
+ <item msgid="6884763100104539558">"עיבוד שיחה יוצאת"</item>
+ <item msgid="125513972170580692">"טביעת אצבע"</item>
+ <item msgid="2556071024281275619">"חיישני גוף"</item>
+ <item msgid="617168514928339387">"קריאת שידורים סלולריים"</item>
+ <item msgid="7134693570516523585">"מיקום מדומה"</item>
+ <item msgid="7224489175375229399">"קריאת אחסון"</item>
+ <item msgid="8472735063903258202">"כתיבת אחסון"</item>
+ <item msgid="4069276819909595110">"הפעלת מסך"</item>
+ <item msgid="1228338896751121025">"קבלת חשבונות"</item>
+ <item msgid="3181581793459233672">"הרצה ברקע"</item>
+ <item msgid="2340936043025374076">"עוצמת קול של נגישות"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"קצר"</item>
<item msgid="4816511817309094890">"בינונית"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"לעולם אל תאפשר"</item>
<item msgid="8184570120217958741">"אפשר תמיד"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"רגיל"</item>
+ <item msgid="5101233285497327432">"בינוני"</item>
+ <item msgid="1555861583162930714">"נמוכה"</item>
+ <item msgid="1719683776264798117">"קריטי"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"רגיל"</item>
+ <item msgid="6107138933849816768">"בינוני"</item>
+ <item msgid="182695359839047859">"נמוכה"</item>
+ <item msgid="8577246509202964244">"קריטי"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"קבוע"</item>
<item msgid="167418068739176448">"פעילות מובילה"</item>
diff --git a/tests/CarDeveloperOptions/res/values-iw/strings.xml b/tests/CarDeveloperOptions/res/values-iw/strings.xml
index b03afdc..3e17f23 100644
--- a/tests/CarDeveloperOptions/res/values-iw/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-iw/strings.xml
@@ -85,8 +85,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"שינוי גודל הטקסט שמופיע במסך."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"הקטנה"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"הגדלה"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"טקסט לדוגמה"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"הקוסם המופלא מארץ עוץ"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"פרק 11: עיר הברקת המופלאה של ארץ עוץ"</string>
@@ -373,7 +372,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"פרטי פרופיל"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"חשבונות"</string>
<string name="location_settings_title" msgid="2707201457572301030">"מיקום"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"שימוש במיקום"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"שימוש במיקום"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"כבוי"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="two">פועל - ל-<xliff:g id="COUNT_1">%1$d</xliff:g> אפליקציות יש גישה למיקום</item>
@@ -871,7 +870,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"הפעל את ה-Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"שימוש ב-Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"שימוש ב-Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"הגדרות Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"הגדרה וניהול של נקודות גישה אלחוטיות"</string>
@@ -1139,7 +1138,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"סלולרי"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"אם חיבור Wi‑Fi לא זמין, ייעשה שימוש ברשת סלולרית"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"אם אין רשת סלולרית זמינה יש להשתמש ב-Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"התקשרות בחיבור Wi-Fi. אם חיבור ה-Wi‑Fi יתנתק, השיחה תסתיים."</string>
@@ -2089,7 +2091,7 @@
<string name="feature_flags_dashboard_title" msgid="3153034144122754381">"סימוני תכונות"</string>
<string name="talkback_title" msgid="3717960404234260050">"Talkback"</string>
<string name="talkback_summary" msgid="6602857105831641574">"קורא מסך המיועד בעיקר לעיוורים או לבעלי ראייה לקויה"</string>
- <string name="select_to_speak_summary" msgid="7514180457557735421">"הקש על פריטים במסך כדי לשמוע הקראה שלהם"</string>
+ <string name="select_to_speak_summary" msgid="7514180457557735421">"ניתן להקיש על פריטים במסך כדי לשמוע הקראה שלהם"</string>
<string name="accessibility_captioning_title" msgid="5878371993023439642">"כתוביות"</string>
<string name="accessibility_screen_magnification_title" msgid="7250949681883917360">"הגדלה"</string>
<string name="accessibility_screen_magnification_gestures_title" msgid="9199287875401817974">"הגדלה על-ידי הקשה שלוש פעמים"</string>
@@ -2135,9 +2137,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"רטט ההתראה"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"רטט הצלצול"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"רטט מגע"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"שימוש בשירות"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"שימוש בתיקון צבע"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"שימוש בכתוביות"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"שימוש בשירות"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"שימוש בתיקון צבע"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"שימוש בכתוביות"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"המשך"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"מכשירי שמיעה"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"אין מכשירי שמיעה מחוברים"</string>
@@ -2531,7 +2533,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"הפעלה"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"שימוש במצב חיסכון בסוללה"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"שימוש במצב חיסכון בסוללה"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"הפעלה אוטומטית"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"אף פעם"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"סוללה ברמת טעינה של <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
@@ -3478,15 +3480,15 @@
<string name="picture_in_picture_empty_text" msgid="8664071475324685241">"אין אפליקציות מותקנות שתומכות ב\'תמונה בתוך תמונה\'"</string>
<string name="picture_in_picture_keywords" msgid="7326958702002259262">"תמונה בתוך תמונה"</string>
<string name="picture_in_picture_app_detail_title" msgid="3916189052657425936">"תמונה בתוך תמונה"</string>
- <string name="picture_in_picture_app_detail_switch" msgid="747422998967185418">"עם תמונה בתוך תמונה"</string>
+ <string name="picture_in_picture_app_detail_switch" msgid="747422998967185418">"תמונה בתוך תמונה"</string>
<string name="picture_in_picture_app_detail_summary" msgid="918632751775525347">"אפליקציה זו תוכל ליצור חלון מסוג תמונה-בתוך-תמונה בזמן שהיא תהיה פתוחה או לאחר היציאה ממנה (למשל, כדי להמשיך לצפות בסרטון). חלון זה מוצג מעל אפליקציות אחרות שנמצאות בשימוש."</string>
<string name="manage_zen_access_title" msgid="3058206309728524196">"גישה אל \'נא לא להפריע\'"</string>
<string name="zen_access_detail_switch" msgid="8706332327904974500">"הפעלת ההרשאה \'נא לא להפריע\'"</string>
<string name="zen_access_empty_text" msgid="7667538993781607731">"אין אפליקציות מותקנות שביקשו גישה אל \'נא לא להפריע\'"</string>
<string name="loading_notification_apps" msgid="1978345231934072091">"טוען אפליקציות..."</string>
- <string name="app_notifications_off_desc" msgid="3904090905748895146">"לבקשתך, מערכת Android חוסמת במכשיר זה הצגת התראות מאפליקציה זו"</string>
- <string name="channel_notifications_off_desc" msgid="8005444443218306611">"לבקשתך, מערכת Android חוסמת במכשיר הצגה של קטגוריית התראות זו"</string>
- <string name="channel_group_notifications_off_desc" msgid="7154205544298672850">"לבקשתך, מערכת Android חוסמת במכשיר הצגה של מקבץ הודעות זה"</string>
+ <string name="app_notifications_off_desc" msgid="3904090905748895146">"לבקשתך, מערכת Android לא מאפשרת להציג במכשיר הזה התראות מהאפליקציה הזו"</string>
+ <string name="channel_notifications_off_desc" msgid="8005444443218306611">"לבקשתך, מערכת Android לא מאפשרת להציג במכשיר הזה התראות ששייכות לקטגוריה הזו"</string>
+ <string name="channel_group_notifications_off_desc" msgid="7154205544298672850">"לבקשתך, מערכת Android לא מאפשרת להציג במכשיר הזה התראות מקבוצה זו"</string>
<string name="notification_channels" msgid="956764228116145956">"קטגוריות"</string>
<string name="notification_channels_other" msgid="1615988645667411530">"אחר"</string>
<plurals name="notification_group_summary" formatted="false" msgid="3744856747513344999">
@@ -3745,7 +3747,7 @@
<string name="runtime_permissions_summary_no_permissions_requested" msgid="3901636077467389637">"לא התבקשו הרשאות"</string>
<string name="filter_all_apps" msgid="4042756539846043675">"כל האפליקציות"</string>
<string name="filter_enabled_apps" msgid="5888459261768538489">"אפליקציות מותקנות"</string>
- <string name="filter_instant_apps" msgid="8087483282854072366">"אפליקציות אינסטנט"</string>
+ <string name="filter_instant_apps" msgid="8087483282854072366">"אפליקציות ללא התקנה"</string>
<string name="filter_personal_apps" msgid="3473268022652904457">"אישיות"</string>
<string name="filter_work_apps" msgid="4202483998339465542">"עבודה"</string>
<string name="filter_notif_all_apps" msgid="1862666327228804896">"אפליקציות: הכל"</string>
@@ -4142,7 +4144,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"כשהמכשיר נעול לא תתאפשר הקלדת תגובות או טקסט אחר בהתראות"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"ברירת מחדל לבודק איות"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"בחירת בודק איות"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"שימוש בבדיקת איות"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"שימוש בבדיקת איות"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"לא נבחר"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(ללא)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4243,7 +4245,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"כדי לעזור בפינוי שטח אחסון, מנהל האחסון מסיר מהמכשיר שלך תמונות וסרטונים מגובים."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"הסרת תמונות וסרטונים"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"מנהל אחסון"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"שימוש במנהל אחסון"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"שימוש במנהל האחסון"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"באופן אוטומטי"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"ידני"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"פינוי שטח אחסון עכשיו"</string>
@@ -4289,10 +4291,10 @@
<string name="oem_unlock_enable_disabled_summary_sim_locked_device" msgid="5223278198179877704">"לא זמין במכשירים הנעולים לספק"</string>
<string name="oem_lock_info_message" msgid="5090850412279403901">"יש להפעיל מחדש את המכשיר כדי להפעיל את התכונה של הגנת המכשיר."</string>
<string name="automatic_storage_manager_freed_bytes" msgid="7360443072390107772">"סה\"כ <xliff:g id="SIZE">%1$s</xliff:g> הפכו לזמינים\n\nהורץ לאחרונה בתאריך <xliff:g id="DATE">%2$s</xliff:g>"</string>
- <string name="web_action_enable_title" msgid="4462106633708675959">"אפליקציות אינסטנט"</string>
+ <string name="web_action_enable_title" msgid="4462106633708675959">"אפליקציות ללא התקנה"</string>
<string name="web_action_enable_summary" msgid="1729016644691793085">"פתיחת קישורים באפליקציות, גם אם הן לא מותקנות"</string>
- <string name="web_action_section_title" msgid="5563229447734734662">"אפליקציות אינסטנט"</string>
- <string name="instant_apps_settings" msgid="879003203555847537">"העדפות של אפליקציות אינסטנט"</string>
+ <string name="web_action_section_title" msgid="5563229447734734662">"אפליקציות ללא התקנה"</string>
+ <string name="instant_apps_settings" msgid="879003203555847537">"העדפות של אפליקציות ללא התקנה"</string>
<string name="domain_url_section_title" msgid="206403507921518321">"אפליקציות מותקנות"</string>
<string name="automatic_storage_manager_activation_warning" msgid="2630083316417707308">"האחסון שלך מנוהל כעת על ידי מנהל האחסון"</string>
<string name="account_for_section_header" msgid="5975241715840642563">"חשבונות עבור <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
@@ -4421,7 +4423,7 @@
<string name="storage_manager_indicator" msgid="4255140732848476875">"מנהל אחסון: <xliff:g id="STATUS">^1</xliff:g>"</string>
<string name="storage_manager_indicator_off" msgid="6404056007102580777">"כבוי"</string>
<string name="storage_manager_indicator_on" msgid="5295306384982062320">"פועל"</string>
- <string name="install_type_instant" msgid="6248487669862821874">"אפליקציה אינסטנט"</string>
+ <string name="install_type_instant" msgid="6248487669862821874">"אפליקציה ללא התקנה"</string>
<string name="automatic_storage_manager_deactivation_warning" msgid="7867793739491286374">"האם לכבות את מנהל האחסון?"</string>
<string name="storage_movies_tv" msgid="7282484273991655296">"אפליקציות סרטים וטלוויזיה"</string>
<string name="carrier_provisioning" msgid="3309125279191534469">"פרטי ניהול תצורה של ספק סלולרי"</string>
diff --git a/tests/CarDeveloperOptions/res/values-ja/arrays.xml b/tests/CarDeveloperOptions/res/values-ja/arrays.xml
index fc69723..af8b5ec 100644
--- a/tests/CarDeveloperOptions/res/values-ja/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-ja/arrays.xml
@@ -85,7 +85,7 @@
<item msgid="8058143476674427024">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>に接続中..."</item>
<item msgid="7547609081339573756">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>で認証しています..."</item>
<item msgid="5145158315060185414">"IPアドレスを<xliff:g id="NETWORK_NAME">%1$s</xliff:g>から取得しています..."</item>
- <item msgid="3283243151651124831">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>に接続しました"</item>
+ <item msgid="3283243151651124831">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> に接続済み"</item>
<item msgid="6600156231416890902">"強制停止"</item>
<item msgid="4133290864821295785">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>から切断中..."</item>
<item msgid="3980154971187953257">"切断"</item>
@@ -170,7 +170,7 @@
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"なし"</item>
<item msgid="1464741437353223198">"マニュアル"</item>
- <item msgid="5793600062487886090">"プロキシの自動設定"</item>
+ <item msgid="5793600062487886090">"プロキシを自動設定"</item>
</string-array>
<string-array name="apn_auth_entries">
<item msgid="7099647881902405997">"なし"</item>
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"許可しない"</item>
<item msgid="8184570120217958741">"常に許可する"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"標準"</item>
+ <item msgid="5101233285497327432">"やや良好"</item>
+ <item msgid="1555861583162930714">"低"</item>
+ <item msgid="1719683776264798117">"残りわずか"</item>
+ <item msgid="1567326459340152525">"不明"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"標準"</item>
+ <item msgid="6107138933849816768">"やや不足"</item>
+ <item msgid="182695359839047859">"低"</item>
+ <item msgid="8577246509202964244">"重大"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"常駐"</item>
<item msgid="167418068739176448">"上位のアクティビティ"</item>
@@ -463,11 +473,11 @@
</string-array>
<string-array name="wifi_metered_entries">
<item msgid="4329206416008519163">"自動的に検出"</item>
- <item msgid="773943026484148895">"従量制として処理"</item>
- <item msgid="1008268820118852416">"定額制として処理"</item>
+ <item msgid="773943026484148895">"従量制として扱う"</item>
+ <item msgid="1008268820118852416">"定額制として扱う"</item>
</string-array>
<string-array name="wifi_privacy_entries">
- <item msgid="6545683814310036454">"ランダムな MAC を使用する(デフォルト)"</item>
+ <item msgid="6545683814310036454">"ランダム MAC を使用(デフォルト)"</item>
<item msgid="214234417308375326">"デバイスの MAC を使用する"</item>
</string-array>
<string-array name="wifi_hidden_entries">
diff --git a/tests/CarDeveloperOptions/res/values-ja/strings.xml b/tests/CarDeveloperOptions/res/values-ja/strings.xml
index b0b238f..da0b9cc 100644
--- a/tests/CarDeveloperOptions/res/values-ja/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-ja/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"画面上のテキストのサイズを変更します。"</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"縮小"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"拡大"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"サンプル テキスト"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"オズの魔法使い"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"第 11 章: オズの不思議なエメラルド シティ"</string>
@@ -310,8 +309,8 @@
<string name="cellular_data_summary" msgid="8817717603450318646">"モバイル ネットワークでのデータ使用を許可"</string>
<string name="allow_data_usage_title" msgid="5381624105803294315">"ローミング時にデータ使用を許可"</string>
<string name="roaming" msgid="8860308342135146004">"ローミング"</string>
- <string name="roaming_enable" msgid="2108142024297441116">"ローミング中にデータサービスに接続する"</string>
- <string name="roaming_disable" msgid="1915440242079953809">"ローミング中にデータサービスに接続する"</string>
+ <string name="roaming_enable" msgid="2108142024297441116">"ローミング中にデータサービスに接続"</string>
+ <string name="roaming_disable" msgid="1915440242079953809">"ローミング中にデータサービスに接続"</string>
<string name="roaming_reenable_message" msgid="8388505868655113258">"データローミングをOFFにしたままホームネットワークの外に出たためデータ接続が切断されました。"</string>
<string name="roaming_turn_it_on_button" msgid="4370846458830537578">"ONにする"</string>
<string name="roaming_warning" msgid="5488050911277592868">"高額な通信料が発生することがあります。"</string>
@@ -356,10 +355,10 @@
<string name="security_enable_widgets_title" msgid="1701510007926738088">"ウィジェットの有効化"</string>
<string name="security_enable_widgets_disabled_summary" msgid="4408176087132339331">"管理アプリによって無効化"</string>
<string name="lockdown_settings_title" msgid="4534779922580115990">"ロックダウン オプションの表示"</string>
- <string name="lockdown_settings_summary" msgid="7270756909878256174">"Smart Lock、指紋認証によるロック解除、ロック画面上の通知を無効にする電源ボタン オプションを表示します"</string>
+ <string name="lockdown_settings_summary" msgid="7270756909878256174">"Smart Lock、指紋認証によるロック解除、ロック画面上の通知をすべて無効にするオプションを、電源ボタンの長押しで表示します"</string>
<string name="trust_agents_extend_unlock_title" msgid="3582017561316089951">"信頼エージェントはロック解除の延長のみ"</string>
<string name="trust_agents_extend_unlock_summary" msgid="3543997596586078084">"有効にすると、信頼エージェントによりデバイスのロック解除状態が延長されます。ただし、ロック状態のデバイスのロックは解除できなくなります。"</string>
- <string name="trust_lost_locks_screen_title" msgid="3094736590690459372">"信頼が失われた場合に画面をロックする"</string>
+ <string name="trust_lost_locks_screen_title" msgid="3094736590690459372">"信頼が失われた場合に画面をロック"</string>
<string name="trust_lost_locks_screen_summary" msgid="2058567484625606803">"有効にすると、前回の信頼エージェントの信頼が失われたときにデバイスがロックされます。"</string>
<string name="owner_info_settings_summary" msgid="4208702251226725583">"なし"</string>
<string name="owner_info_settings_status" msgid="8049975536717685126">"<xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"プロファイル情報"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"アカウント"</string>
<string name="location_settings_title" msgid="2707201457572301030">"位置情報"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"位置情報の使用"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"位置情報の使用"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"OFF"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">ON - <xliff:g id="COUNT_1">%1$d</xliff:g> 個のアプリが位置情報にアクセスできます</item>
@@ -468,7 +467,7 @@
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="4312297515772004580">"削除"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"センサーに触れる"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"指をセンサーに当て、振動したら離します。"</string>
- <string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"指を離してからもう一度触れる"</string>
+ <string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"指をタッチして離す"</string>
<string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"指を何度か離して、あらゆる角度から指紋を登録します。"</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"指紋の登録完了"</string>
<string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"このアイコンが表示されているときは、本人確認や購入の承認に指紋認証を使用できます"</string>
@@ -800,14 +799,14 @@
<string name="bluetooth_max_connected_audio_devices_string" msgid="6799012540303500020">"接続できる Bluetooth オーディオ デバイスの上限"</string>
<string name="bluetooth_max_connected_audio_devices_dialog_title" msgid="6049527354499590314">"接続できる Bluetooth オーディオ デバイス数の上限の選択"</string>
<string name="wifi_display_settings_title" msgid="8718182672694575456">"キャスト"</string>
- <string name="wifi_display_enable_menu_item" msgid="4578340247147692250">"ワイヤレスディスプレイの有効化"</string>
+ <string name="wifi_display_enable_menu_item" msgid="4578340247147692250">"ワイヤレス ディスプレイの有効化"</string>
<string name="wifi_display_no_devices_found" msgid="186501729518830451">"周辺にデバイスが見つかりません"</string>
<string name="wifi_display_status_connecting" msgid="3799827425457383349">"接続中"</string>
<string name="wifi_display_status_connected" msgid="85692409327461403">"接続済み"</string>
<string name="wifi_display_status_in_use" msgid="7646114501132773174">"使用中"</string>
<string name="wifi_display_status_not_available" msgid="5600448733204688205">"ご利用いただけません"</string>
<string name="wifi_display_details" msgid="6379855523460749126">"ディスプレイの設定"</string>
- <string name="wifi_display_options_title" msgid="4587264519668872213">"ワイヤレスディスプレイのオプション"</string>
+ <string name="wifi_display_options_title" msgid="4587264519668872213">"ワイヤレス ディスプレイのオプション"</string>
<string name="wifi_display_options_forget" msgid="7882982544626742073">"削除"</string>
<string name="wifi_display_options_done" msgid="5922060890309265817">"完了"</string>
<string name="wifi_display_options_name" msgid="8477627781133827607">"名前"</string>
@@ -823,7 +822,7 @@
<string name="art_verifier_for_debuggable_summary" msgid="2204242476996701111">"ART にデバッグ可能なアプリのバイトコードの確認を許可する"</string>
<string name="nfc_quick_toggle_title" msgid="4990697912813795002">"NFC"</string>
<string name="nfc_quick_toggle_summary" product="tablet" msgid="983451155092850657">"タブレットが他のデバイスと接触したときのデータ交換を許可する"</string>
- <string name="nfc_quick_toggle_summary" product="default" msgid="7141056939052895142">"デバイスが他のデバイスと接触したときのデータ交換を許可する"</string>
+ <string name="nfc_quick_toggle_summary" product="default" msgid="7141056939052895142">"他のデバイスと接触したときのデータ交換を許可します"</string>
<string name="nfc_disclaimer_title" msgid="4860231267351602970">"NFC を ON にする"</string>
<string name="nfc_disclaimer_content" msgid="3066113577854565782">"NFC がこのデバイスと他の付近のデバイスまたはターゲット(決済デバイス、アクセス リーダー、インタラクティブ広告またはタグなど)の間でデータのやり取りを行います。"</string>
<string name="nfc_secure_settings_title" msgid="5153751163174916581">"NFC の保護"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Wi-FiをONにする"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Wi-Fi の使用"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Wi-Fi の使用"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi-Fiの設定"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"ワイヤレスアクセスポイントを設定する"</string>
@@ -863,7 +862,7 @@
<string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"この機能を使用するには、対応するネットワーク評価プロバイダを選択してください"</string>
<string name="wifi_install_credentials" msgid="5650088113710858289">"証明書のインストール"</string>
<string name="wifi_scan_notify_text" msgid="7614101215028336927">"位置情報の精度を向上させるため、Wi‑Fi が OFF の場合でも、アプリやサービスはいつでも Wi‑Fi ネットワークをスキャンできます。この設定は、位置情報を使用する機能やサービスの改善などに役立ちます。この設定は<xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>スキャンの設定<xliff:g id="LINK_END_1">LINK_END</xliff:g>で変更できます。"</string>
- <string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"位置情報の精度を上げるには、<xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>スキャンの設定<xliff:g id="LINK_END_1">LINK_END</xliff:g>で Wi-Fi スキャンをオンにしてください。"</string>
+ <string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"位置情報の精度を上げるには、<xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>スキャンの設定<xliff:g id="LINK_END_1">LINK_END</xliff:g>で Wi-Fi スキャンを ON にしてください。"</string>
<string name="wifi_scan_notify_remember_choice" msgid="1235445971400237444">"次回から表示しない"</string>
<string name="wifi_setting_sleep_policy_title" msgid="2120785188625932076">"スリープ時にWi-Fi接続を維持"</string>
<string name="wifi_setting_on_during_sleep_title" msgid="856670183023402715">"スリープ時にWi-Fi接続を維持"</string>
@@ -889,7 +888,7 @@
<string name="wifi_menu_remember" msgid="717257200269700641">"ネットワークを保存"</string>
<string name="wifi_menu_forget" msgid="7561140554450163075">"ネットワークを削除"</string>
<string name="wifi_menu_modify" msgid="4080178040721021101">"ネットワークを変更"</string>
- <string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"利用可能なネットワークを表示するにはWi-FiをON"</string>
+ <string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"利用可能なネットワークを表示するには Wi-Fi を ON にします。"</string>
<string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"Wi-Fiネットワークを検索しています…"</string>
<string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"Wi-Fiネットワークを変更する権限がありません。"</string>
<string name="wifi_more" msgid="3538241640407382185">"その他"</string>
@@ -934,14 +933,14 @@
<string name="wifi_ap_band_select_one" msgid="4409754936554360355">"Wi‑Fi アクセス ポイントの帯域幅を少なくとも 1 つ選択してください。"</string>
<string name="wifi_ip_settings" msgid="4636102290236116946">"IP 設定"</string>
<string name="wifi_privacy_settings" msgid="4462092795794247809">"プライバシー"</string>
- <string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"ランダム化 MAC"</string>
+ <string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"ランダム MAC"</string>
<string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"デバイスの追加"</string>
- <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"「<xliff:g id="SSID">%1$s</xliff:g>」にデバイスを追加するには、下記の中心に QR コードを合わせてください"</string>
+ <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"「<xliff:g id="SSID">%1$s</xliff:g>」にデバイスを追加するには、下の枠に QR コードを合わせてください"</string>
<string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"QR コードのスキャン"</string>
<string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"「<xliff:g id="SSID">%1$s</xliff:g>」に接続するには、下記の中心に QR コードを合わせてください"</string>
<string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"Wi‑Fi に接続するには、QR コードをスキャンしてください"</string>
<string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Wi‑Fi の共有"</string>
- <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"「<xliff:g id="SSID">%1$s</xliff:g>」に接続してパスワードを共有するには、この QR コードをスキャンしてください"</string>
+ <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"この QR コードをスキャンすると、パスワードが共有されて「<xliff:g id="SSID">%1$s</xliff:g>」に接続できます"</string>
<string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"「<xliff:g id="SSID">%1$s</xliff:g>」に接続するには、この QR コードをスキャンしてください"</string>
<string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"QR コードを読み取れませんでした。コードを再度中央に捉えて、もう一度お試しください"</string>
<string name="wifi_dpp_failure_authentication_or_configuration" msgid="9142051662156233679">"もう一度お試しください。問題が解決しない場合は、デバイスのメーカーにお問い合わせください"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"モバイル"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Wi‑Fi が利用できない場合は、モバイル ネットワークを使用します"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"モバイル ネットワークが使用できない場合は、Wi‑Fi を使用します"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Wi‑Fi 経由で通話します。Wi‑Fi が切断されると、通話は終了します。"</string>
@@ -1156,7 +1158,7 @@
<string name="dock_not_found_title" msgid="2035088760477532435">"ホルダーが見つかりません"</string>
<string name="dock_not_found_text" product="tablet" msgid="5996654431405111902">"ホルダーの音声を設定するにはタブレットをホルダーに装着する必要があります。"</string>
<string name="dock_not_found_text" product="default" msgid="8275091896320216368">"ホルダーの音声を設定するにはデバイスをホルダーに装着する必要があります。"</string>
- <string name="dock_sounds_enable_title" msgid="3385931465312084061">"ホルダー装着時の音"</string>
+ <string name="dock_sounds_enable_title" msgid="3385931465312084061">"ドッキング時の音"</string>
<string name="dock_sounds_enable_summary_on" product="tablet" msgid="4322104626905111669">"タブレットのホルダー脱着時に音を鳴らす"</string>
<string name="dock_sounds_enable_summary_on" product="default" msgid="2751810717801098293">"携帯のホルダー脱着時に音を鳴らす"</string>
<string name="dock_sounds_enable_summary_off" product="tablet" msgid="2125391395745266946">"タブレットのホルダー脱着時に音を鳴らさない"</string>
@@ -1207,7 +1209,7 @@
<string name="adaptive_sleep_summary_on" msgid="6670369739228487082">"ON / 見ている間は画面が OFF になりません"</string>
<string name="adaptive_sleep_summary_off" msgid="2891586225954973431">"OFF"</string>
<string name="adaptive_sleep_description" msgid="812673735459170009">"見ている間は画面が OFF にならなくなります。"</string>
- <string name="adaptive_sleep_privacy" msgid="5706802215479902623">"Screen Aware は前面カメラを使用して、ユーザーが画面を見ているかどうかを検出します。この検出はデバイスのみで行われ、画像が保存されたり、Google に送信されたりすることはありません。"</string>
+ <string name="adaptive_sleep_privacy" msgid="5706802215479902623">"Screen Aware は前面カメラを使用して、ユーザーが画面を見ているかどうかを検出します。この検出はデバイスのみで行われます。画像が保存されたり、Google に送信されたりすることはありません。"</string>
<string name="night_display_title" msgid="1305002424893349814">"夜間モード"</string>
<string name="night_display_text" msgid="5330502493684652527">"夜間モードを利用すると画面が黄味がかった色になります。薄明かりの下でも画面を見やすくなり、寝付きを良くする効果も期待できます。"</string>
<string name="night_display_auto_mode_title" msgid="8493573087102481588">"スケジュール"</string>
@@ -1244,13 +1246,13 @@
<string name="wallpaper_suggestion_summary" msgid="4247262938988875842">"画面のカスタマイズ"</string>
<string name="wallpaper_settings_fragment_title" msgid="1503701065297188901">"壁紙タイプの選択"</string>
<string name="screensaver_settings_title" msgid="7720091234133721021">"スクリーンセーバー"</string>
- <string name="screensaver_settings_summary_either_long" msgid="6078038506795498288">"充電時またはホルダー装着時"</string>
+ <string name="screensaver_settings_summary_either_long" msgid="6078038506795498288">"充電時またはドッキング時"</string>
<string name="screensaver_settings_summary_either_short" msgid="2453772128682850053">"いずれか"</string>
<string name="screensaver_settings_summary_sleep" msgid="6097363596749362692">"充電時"</string>
- <string name="screensaver_settings_summary_dock" msgid="6297808146601570196">"ホルダー装着時"</string>
+ <string name="screensaver_settings_summary_dock" msgid="6297808146601570196">"ドッキング時"</string>
<string name="screensaver_settings_summary_never" msgid="3995259444981620707">"なし"</string>
<string name="screensaver_settings_summary_off" msgid="6119947316484763131">"OFF"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1897518064782596947">"スマートフォンのホルダー装着時やスリープ時の動作を管理するには、スクリーン セーバーを ON にします。"</string>
+ <string name="screensaver_settings_disabled_prompt" msgid="1897518064782596947">"スマートフォンのドッキング時やスリープ時の動作を管理するには、スクリーン セーバーを ON にします。"</string>
<string name="screensaver_settings_when_to_dream" msgid="3763052013516826348">"起動するタイミング"</string>
<string name="screensaver_settings_current" msgid="4017556173596361672">"現在のスクリーンセーバー"</string>
<string name="screensaver_settings_dream_start" msgid="3772227299054662550">"今すぐ起動"</string>
@@ -1355,7 +1357,7 @@
<string name="status_signal_strength" msgid="4302597886933728789">"電波強度"</string>
<string name="status_roaming" msgid="5191044997355099561">"ローミング"</string>
<string name="status_operator" msgid="6017986100643755390">"ネットワーク"</string>
- <string name="status_wifi_mac_address" msgid="3868452167971295995">"Wi-Fi MACアドレス"</string>
+ <string name="status_wifi_mac_address" msgid="3868452167971295995">"Wi-Fi MAC アドレス"</string>
<string name="status_bt_address" msgid="460568179311735657">"Bluetoothアドレス"</string>
<string name="status_serial_number" msgid="8257722124627415159">"シリアル番号"</string>
<string name="status_up_time" msgid="77128395333934087">"稼働時間"</string>
@@ -1570,11 +1572,11 @@
<string name="reset_dashboard_summary" msgid="8778383341461126642">"ネットワーク、アプリ、デバイスをリセットできます"</string>
<string name="reset_network_title" msgid="8944059136930806211">"Wi-Fi、モバイル、Bluetooth をリセット"</string>
<string name="reset_network_desc" msgid="4982633363916261109">"以下を含む、すべてのネットワーク設定がリセットされます。\n\n"<li>"Wi‑Fi"</li>\n<li>"モバイルデータ"</li>\n<li>"Bluetooth"</li></string>
- <string name="reset_esim_title" msgid="7630781767040831893">"ダウンロード型 SIM の消去"</string>
- <string name="reset_esim_desc" msgid="433226911566802">"交換用 SIM のダウンロードについては、携帯通信会社にお問い合わせください。この操作でモバイルのサービスプランが解約されることはありません。"</string>
+ <string name="reset_esim_title" msgid="7630781767040831893">"ダウンロードされた eSIM の消去"</string>
+ <string name="reset_esim_desc" msgid="433226911566802">"別の eSIM をダウンロードするには、携帯通信会社にお問い合わせください。この操作でモバイルのサービスプランが解約されることはありません。"</string>
<string name="reset_network_button_text" msgid="4293271046867912819">"設定をリセット"</string>
<string name="reset_network_final_desc" msgid="2463817067048751373">"すべてのネットワーク設定をリセットしますか?この操作を取り消すことはできません。"</string>
- <string name="reset_network_final_desc_esim" msgid="4676436976372555750">"すべてのネットワーク設定をリセットして、ダウンロード型 SIM を消去しますか?この操作を取り消すことはできません。"</string>
+ <string name="reset_network_final_desc_esim" msgid="4676436976372555750">"すべてのネットワーク設定をリセットして、ダウンロードされた eSIM を消去しますか?この操作を取り消すことはできません。"</string>
<string name="reset_network_final_button_text" msgid="345255333127794393">"設定をリセット"</string>
<string name="reset_network_confirm_title" msgid="2432145031070536008">"リセットしますか?"</string>
<string name="network_reset_not_available" msgid="6146655531868016281">"ネットワークのリセットはこのユーザーには許可されていません"</string>
@@ -1645,7 +1647,7 @@
<string name="mobile_insert_sim_card" msgid="7594550403454243732">"SIMカードを挿入して再起動してください"</string>
<string name="mobile_connect_to_internet" msgid="6031886097365170913">"インターネットに接続してください"</string>
<string name="location_title" msgid="8664674161765477168">"現在地"</string>
- <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"仕事用プロファイルの場所"</string>
+ <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"仕事用プロファイルで位置情報を使用"</string>
<string name="location_app_level_permissions" msgid="1298041503927632960">"アプリの権限"</string>
<string name="location_app_permission_summary_location_off" msgid="541372845344796336">"位置情報は OFF です"</string>
<plurals name="location_app_permission_summary_location_on" formatted="false" msgid="7904821382328758218">
@@ -1968,7 +1970,7 @@
<string name="keyboard_assistance_category" msgid="2276351807419818125">"キーボード補助機能"</string>
<string name="physical_keyboard_title" msgid="3508591962962814313">"物理キーボード"</string>
<string name="show_ime" msgid="7322620473198763563">"仮想キーボードの表示"</string>
- <string name="show_ime_summary" msgid="3246628154011464373">"物理キーボードが有効になっていても画面に表示されます"</string>
+ <string name="show_ime_summary" msgid="3246628154011464373">"物理キーボードが有効になっていても画面に表示させます"</string>
<string name="keyboard_shortcuts_helper" msgid="6574386807271399788">"キーボード ショートカット ヘルパー"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="8024313306403779742">"使用可能なショートカットを表示します"</string>
<string name="language_and_input_for_work_category_title" msgid="2053255944038892588">"仕事用プロファイルのキーボードとツール"</string>
@@ -2067,8 +2069,8 @@
<string name="accessibility_toggle_screen_magnification_auto_update_preference_title" msgid="2466317284195934003">"画面の拡大を自動更新"</string>
<string name="accessibility_toggle_screen_magnification_auto_update_preference_summary" msgid="6625473745911276917">"アプリの遷移時に画面の拡大を更新"</string>
<string name="accessibility_power_button_ends_call_prerefence_title" msgid="6172987104538172869">"電源ボタンで通話を終了"</string>
- <string name="accessibility_toggle_large_pointer_icon_title" msgid="9127905775116570565">"大きなマウスポインタ"</string>
- <string name="accessibility_disable_animations" msgid="8378441317115710009">"アニメーションの削除"</string>
+ <string name="accessibility_toggle_large_pointer_icon_title" msgid="9127905775116570565">"マウスポインタを拡大"</string>
+ <string name="accessibility_disable_animations" msgid="8378441317115710009">"アニメーションを無効化"</string>
<string name="accessibility_toggle_master_mono_title" msgid="899550848196702565">"モノラル音声"</string>
<string name="accessibility_toggle_master_mono_summary" msgid="3847052868469033235">"音声再生時のチャンネルを統合する"</string>
<string name="accessibility_toggle_master_balance_title" msgid="8723492001092647562">"オーディオ バランス"</string>
@@ -2082,20 +2084,20 @@
<string name="accessibility_content_timeout_preference_title" msgid="5160746882250939464">"表示しておく時間"</string>
<string name="accessibility_control_timeout_preference_title" msgid="2771808346038759474">"操作を行う時間"</string>
<string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"表示可能な時間が限られているメッセージの表示時間を指定してください。\n\nこの設定に対応していないアプリもあります。"</string>
- <string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"操作が必要にもかかわらず、短い時間しか表示されないメッセージの表示時間を指定してください。\n\nこの設定に対応していないアプリもあります。"</string>
+ <string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"短い時間しか表示されない操作要求メッセージについて、表示時間を指定してください。\n\nこの設定に対応していないアプリもあります。"</string>
<string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"長押しする時間"</string>
<string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"色反転"</string>
<string name="accessibility_display_inversion_preference_subtitle" msgid="69291255322175323">"パフォーマンスに影響することがあります"</string>
- <string name="accessibility_autoclick_preference_title" msgid="9164599088410340405">"停止時間"</string>
+ <string name="accessibility_autoclick_preference_title" msgid="9164599088410340405">"静止時間"</string>
<string name="accessibility_autoclick_description" msgid="5492414927846407499">"マウスを使用している場合は、カーソルの動きが一定時間停止したときに自動的に操作を行うよう設定できます。"</string>
<string name="accessibility_autoclick_delay_preference_title" msgid="8303022510942147049">"クリックまでの時間"</string>
<string name="accessibility_vibration_settings_title" msgid="1902649657883159406">"バイブレーション"</string>
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"通知時のバイブレーション"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"着信時のバイブレーション"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"タップ操作時のバイブ"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"サービスの使用"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"色補正の使用"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"字幕を使用する"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"サービスの使用"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"色補正の使用"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"字幕の使用"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"続行"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"補聴器"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"接続されている補聴器なし"</string>
@@ -2139,9 +2141,9 @@
<string name="accessibility_vibration_summary_medium" msgid="3141272492346527298">"着信と通知は [中] に設定されています"</string>
<string name="accessibility_vibration_summary_high" msgid="4188677504368202861">"着信と通知は [高] に設定されています"</string>
<string name="accessibility_vibration_intensity_off" msgid="4427927348723998194">"OFF"</string>
- <string name="accessibility_vibration_intensity_low" msgid="8250688473513963211">"低"</string>
+ <string name="accessibility_vibration_intensity_low" msgid="8250688473513963211">"弱"</string>
<string name="accessibility_vibration_intensity_medium" msgid="2249931147940383011">"中"</string>
- <string name="accessibility_vibration_intensity_high" msgid="7850793704772123134">"高"</string>
+ <string name="accessibility_vibration_intensity_high" msgid="7850793704772123134">"強"</string>
<string name="accessibility_menu_item_settings" msgid="6809813639403725032">"設定"</string>
<string name="accessibility_feature_state_on" msgid="8649102771420898911">"ON"</string>
<string name="accessibility_feature_state_off" msgid="7536392255214437050">"OFF"</string>
@@ -2210,7 +2212,7 @@
<string name="print_menu_item_add_service" msgid="6803000110578493782">"サービスを追加"</string>
<string name="print_menu_item_add_printer" msgid="8529196211179574921">"プリンタを追加"</string>
<string name="print_menu_item_search" msgid="1165316329772287360">"検索"</string>
- <string name="print_searching_for_printers" msgid="6538687129687642542">"プリンタの検索中"</string>
+ <string name="print_searching_for_printers" msgid="6538687129687642542">"プリンタを検索しています"</string>
<string name="print_service_disabled" msgid="6376344992705893436">"サービスが無効です"</string>
<string name="print_print_jobs" msgid="7357841034181762157">"印刷ジョブ"</string>
<string name="print_print_job" msgid="6846889971435170443">"印刷ジョブ"</string>
@@ -2312,8 +2314,8 @@
<string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"このアプリによるバックグラウンドでの電池使用を停止すると、電池が長持ちします。制限したアプリは正常に動作しないことがあります。また、通知が遅れる可能性もあります。\n\nアプリ:\n<xliff:g id="APP_LIST">%1$s</xliff:g>."</string>
<string name="battery_tip_restrict_app_dialog_ok" msgid="2573410775701913487">"制限"</string>
<string name="battery_tip_unrestrict_app_dialog_title" msgid="812458516399125710">"制限を解除しますか?"</string>
- <string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"このアプリはバックグラウンドで電池を使用するため、電池が予想より早くなくなる可能性があります。"</string>
- <string name="battery_tip_unrestrict_app_dialog_ok" msgid="9154938931448151479">"削除"</string>
+ <string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"このアプリはバックグラウンドで電池を使用するため、電池を予想より早く消費する可能性があります。"</string>
+ <string name="battery_tip_unrestrict_app_dialog_ok" msgid="9154938931448151479">"解除"</string>
<string name="battery_tip_unrestrict_app_dialog_cancel" msgid="7331148618292397166">"キャンセル"</string>
<string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"アプリの電池使用量は正常です。アプリが電池を使いすぎる場合は、おすすめの対処方法をスマートフォンがお知らせします。\n\n電池の残量が少なくなったら、いつでもバッテリー セーバーを ON にできます。"</string>
<string name="battery_tip_dialog_summary_message" product="tablet" msgid="1721081030632329647">"アプリの電池使用量は正常です。アプリが電池を使いすぎる場合は、対処可能なおすすめの方法がタブレットに表示されます。\n\n電池の残量が少なくなったら、いつでもバッテリー セーバーを ON にできます。"</string>
@@ -2453,13 +2455,13 @@
<string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"<xliff:g id="PERCENT">%1$s</xliff:g> で ON"</string>
<string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"スケジュールの設定"</string>
<string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"フル充電で無効"</string>
- <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"スマートフォンの電池残量が <xliff:g id="PERCENT">%1$s</xliff:g> になると、バッテリー セーバーは無効になります"</string>
+ <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"スマートフォンの電池が <xliff:g id="PERCENT">%1$s</xliff:g> まで充電されると、バッテリー セーバーが OFF になります"</string>
<string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"タブレットの電池残量が <xliff:g id="PERCENT">%1$s</xliff:g> になると、バッテリー セーバーは無効になります"</string>
<string name="battery_saver_sticky_description_new" product="device" msgid="5056520668081504111">"デバイスの電池残量が <xliff:g id="PERCENT">%1$s</xliff:g> になると、バッテリー セーバーは無効になります"</string>
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"ON にする"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"バッテリー セーバーの使用"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"バッテリー セーバーの使用"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"自動的にON"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"使用しない"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"電池残量が <xliff:g id="PERCENT">%1$s</xliff:g> になったとき"</string>
@@ -2652,7 +2654,7 @@
<string name="data_usage_app" msgid="4995297799363021198">"アプリの使用状況"</string>
<string name="data_usage_app_info_label" msgid="5358288895158910477">"アプリ情報"</string>
<string name="data_usage_cellular_data" msgid="3509117353455285808">"モバイルデータ"</string>
- <string name="data_usage_data_limit" msgid="4070740691087063670">"データの上限の設定"</string>
+ <string name="data_usage_data_limit" msgid="4070740691087063670">"データ使用量を制限"</string>
<string name="data_usage_cycle" msgid="1877235461828192940">"データ使用サイクル"</string>
<string name="data_usage_app_items_header_text" msgid="5396134508509913851">"アプリの使用状況"</string>
<string name="data_usage_menu_roaming" msgid="6933555994416977198">"データローミング"</string>
@@ -2712,8 +2714,8 @@
<string name="data_usage_warning_editor_title" msgid="1431385383278389290">"データ使用量の警告の設定"</string>
<string name="data_usage_limit_editor_title" msgid="1687908662154108293">"データ使用量の上限の設定"</string>
<string name="data_usage_limit_dialog_title" msgid="8804760847110131518">"データ使用量の上限の設定"</string>
- <string name="data_usage_limit_dialog_mobile" product="tablet" msgid="2000713577999830647">"タブレットで設定した上限に達するとモバイルデータが OFF になります。\n\nデータ使用量はタブレットで測定された値ですが、携帯通信会社での使用量の計算はこれと異なることがあるため、余裕をもって上限を設定することをおすすめします。"</string>
- <string name="data_usage_limit_dialog_mobile" product="default" msgid="943546278705619205">"スマートフォンで設定した上限に達するとモバイルデータが OFF になります。\n\nデータ使用量はスマートフォンで測定された値ですが、携帯通信会社での使用量の計算はこれと異なることがあるため、余裕をもって上限を設定することをおすすめします。"</string>
+ <string name="data_usage_limit_dialog_mobile" product="tablet" msgid="2000713577999830647">"タブレットで設定した上限に達するとモバイルデータが OFF になります。\n\nデータ使用量はタブレットで測定された値ですが、携帯通信会社による測定結果とは異なることがあるため、余裕をもって上限を設定することをおすすめします。"</string>
+ <string name="data_usage_limit_dialog_mobile" product="default" msgid="943546278705619205">"スマートフォンで設定した上限に達するとモバイルデータが OFF になります。\n\nデータ使用量はスマートフォンで測定された値ですが、携帯通信会社による測定結果とは異なることがあるため、余裕をもって上限を設定することをおすすめします。"</string>
<string name="data_usage_restrict_background_title" msgid="3568746530413220844">"バックグラウンドデータを制限しますか?"</string>
<string name="data_usage_restrict_background" msgid="995811034744808575">"バックグラウンドのモバイルデータを制限すると、アプリやサービスによっては、Wi-Fi 未接続時に機能しない場合があります。"</string>
<string name="data_usage_restrict_background_multiuser" product="tablet" msgid="6032810839234864814">"バックグラウンドのモバイルデータを制限すると、アプリやサービスによっては、Wi‑Fi 未接続時に機能しない場合があります。\n\nこの設定はこのタブレット上のすべてのユーザーに影響します。"</string>
@@ -2934,7 +2936,7 @@
<string name="restriction_menu_change_pin" msgid="592512748243421101">"PINを変更"</string>
<string name="app_notifications_switch_label" msgid="670683308275498821">"通知を表示"</string>
<string name="help_label" msgid="1296484776243905646">"ヘルプとフィードバック"</string>
- <string name="support_summary" msgid="3278943815956130740">"ヘルプ記事、電話とチャット、使ってみる"</string>
+ <string name="support_summary" msgid="3278943815956130740">"ヘルプ記事、電話とチャット、スタートガイド"</string>
<string name="user_account_title" msgid="2108666882630552859">"コンテンツのアカウント"</string>
<string name="user_picture_title" msgid="6664602422948159123">"画像ID"</string>
<string name="extreme_threats_title" msgid="1405820547540456436">"極めて重大な脅威"</string>
@@ -2973,7 +2975,7 @@
<string name="restriction_nfc_enable_title" msgid="5146674482590550598">"NFC"</string>
<string name="restriction_nfc_enable_summary_config" msgid="405349698260328073">"この<xliff:g id="DEVICE_NAME">%1$s</xliff:g>が他のNFCデバイスと接触したときのデータ交換を許可する"</string>
<string name="restriction_nfc_enable_summary" product="tablet" msgid="3292205836938064931">"タブレットが他のデバイスと接触したときのデータ交換を許可する"</string>
- <string name="restriction_nfc_enable_summary" product="default" msgid="226439584043333608">"携帯電話が他のデバイスと接触したときのデータ交換を許可する"</string>
+ <string name="restriction_nfc_enable_summary" product="default" msgid="226439584043333608">"他のデバイスと接触したときのデータ交換を許可する"</string>
<string name="restriction_location_enable_title" msgid="358506740636434856">"位置情報"</string>
<string name="restriction_location_enable_summary" msgid="4159500201124004463">"アプリに位置情報の使用を許可する"</string>
<string name="wizard_back" msgid="223654213898117594">"戻る"</string>
@@ -3008,7 +3010,7 @@
<string name="color_orange" msgid="3159707916066563431">"オレンジ"</string>
<string name="color_purple" msgid="4391440966734810713">"パープル"</string>
<string name="sim_no_inserted_msg" msgid="1197884607569714609">"SIMカードが挿入されていません"</string>
- <string name="sim_status_title" msgid="4483653750844520871">"SIMのステータス"</string>
+ <string name="sim_status_title" msgid="4483653750844520871">"SIM のステータス"</string>
<string name="sim_status_title_sim_slot" msgid="416005570947546124">"SIM ステータス(SIM スロット %1$d)"</string>
<string name="sim_call_back_title" msgid="2497274034557717457">"デフォルトのSIMからコールバック"</string>
<string name="sim_outgoing_call_title" msgid="4683645160838507363">"発信用のSIM"</string>
@@ -3148,7 +3150,7 @@
<string name="dial_pad_tones_title" msgid="8877212139988655769">"ダイヤルパッドの操作音"</string>
<string name="screen_locking_sounds_title" msgid="4407110895465866809">"画面ロック音"</string>
<string name="charging_sounds_title" msgid="5070437987230894287">"充電時の音とバイブレーション"</string>
- <string name="docking_sounds_title" msgid="2573137471605541366">"装着音"</string>
+ <string name="docking_sounds_title" msgid="2573137471605541366">"ドッキング音"</string>
<string name="touch_sounds_title" msgid="165237488496165652">"タッチ操作音"</string>
<string name="vibrate_on_touch_title" msgid="6360155469279157684">"タップ操作時のバイブ"</string>
<string name="vibrate_on_touch_summary" msgid="5504424764028676043">"タップ、キー操作などの触覚フィードバック"</string>
@@ -3306,9 +3308,9 @@
<string name="notification_badging_title" msgid="6311699476970264712">"通知ドットの許可"</string>
<string name="notification_bubbles_title" msgid="9196562435741861317">"ふきだし"</string>
<string name="notification_bubbles_summary" msgid="4624512775901949578">"フローティング ショートカットにより、アプリのコンテンツにどこからでもすぐにアクセスできます"</string>
- <string name="bubbles_feature_education" msgid="8979109826818881018">"一部の通知や他のコンテンツを画面にふきだしとして表示できます。ふきだしはタップすると開き、画面の下へドラッグすると消えます。"</string>
+ <string name="bubbles_feature_education" msgid="8979109826818881018">"一部の通知や他のコンテンツを画面にバブルとして表示できます。バブルはタップすると開き、画面の下へドラッグすると消えます。"</string>
<string name="bubbles_app_toggle_title" msgid="6401217027603326439">"ふきだし"</string>
- <string name="bubbles_app_toggle_summary" msgid="7707611139796553855">"一部の通知をふきだしとして表示することを <xliff:g id="APP_NAME">%1$s</xliff:g> に許可します"</string>
+ <string name="bubbles_app_toggle_summary" msgid="7707611139796553855">"一部の通知をバブルとして表示することを <xliff:g id="APP_NAME">%1$s</xliff:g> に許可します"</string>
<string name="bubbles_feature_disabled_dialog_title" msgid="3375452386012079293">"ふきだしの有効化"</string>
<string name="bubbles_feature_disabled_dialog_text" msgid="326945485806386477">"このアプリのふきだしを有効にするには、デバイスでふきだしを有効にしておく必要があります。この設定は、ふきだしを以前に有効にした他のアプリにも反映されます。"</string>
<string name="bubbles_feature_disabled_button_approve" msgid="6661464849674493351">"デバイスで有効にする"</string>
@@ -3321,7 +3323,7 @@
<string name="locked_work_profile_notification_title" msgid="8307025804986190658">"仕事用プロファイルのロック時"</string>
<string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"すべての通知内容を表示する"</string>
<string name="lock_screen_notifications_summary_hide" msgid="3668806866535260143">"プライベートな内容を非表示"</string>
- <string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"通知をすべて表示しない"</string>
+ <string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"通知を一切表示しない"</string>
<string name="lock_screen_notifications_interstitial_message" msgid="4230189215124387818">"デバイスがロックされている場合、通知をどのように表示しますか?"</string>
<string name="lock_screen_notifications_interstitial_title" msgid="2832587379332443505">"通知"</string>
<string name="lock_screen_notifications_summary_show_profile" msgid="8908775469657073273">"仕事用通知の内容をすべて表示する"</string>
@@ -3759,7 +3761,7 @@
<string name="assist_access_context_title" msgid="2274614501747710439">"画面のテキストを使用"</string>
<string name="assist_access_context_summary" msgid="5867997494395842785">"画面コンテンツのテキストにアクセスすることをアシストアプリに許可する"</string>
<string name="assist_access_screenshot_title" msgid="1991014038776117688">"スクリーンショットを使用"</string>
- <string name="assist_access_screenshot_summary" msgid="3010943864000489424">"画面の画像にアクセスすることをアシストアプリに許可する"</string>
+ <string name="assist_access_screenshot_summary" msgid="3010943864000489424">"表示中の画像にアクセスすることをアシストアプリに許可する"</string>
<string name="assist_flash_title" msgid="8852484250748551092">"画面の点滅"</string>
<string name="assist_flash_summary" msgid="6697095786317559129">"アシストアプリが画面のテキストやスクリーンショットにアクセスしたときに画面の端を点滅させる"</string>
<string name="assist_footer" msgid="7030121180457472165">"アシストアプリは、表示している画面の情報に基づいてアシスタントを提供します。一部のアプリはランチャーと音声入力サービスの両方に対応しており、統合されたアシスタントを提供します。"</string>
@@ -3940,9 +3942,9 @@
<string name="cell_data_template" msgid="5473177306229738078">"モバイルデータ使用量 <xliff:g id="AMOUNT">^1</xliff:g>"</string>
<string name="wifi_data_template" msgid="3146090439147042068">"<xliff:g id="AMOUNT">^1</xliff:g>(Wi-Fi データ)"</string>
<string name="ethernet_data_template" msgid="6414118030827090119">"<xliff:g id="AMOUNT">^1</xliff:g>(イーサネット データ)"</string>
- <string name="billing_cycle" msgid="5740717948341713190">"データの警告と制限"</string>
+ <string name="billing_cycle" msgid="5740717948341713190">"データ使用量の警告と制限"</string>
<string name="app_usage_cycle" msgid="213483325132959663">"アプリのデータ使用量のサイクル"</string>
- <string name="cell_data_warning" msgid="8902740337286652689">"データ警告: <xliff:g id="ID_1">^1</xliff:g>"</string>
+ <string name="cell_data_warning" msgid="8902740337286652689">"警告するデータ使用量: <xliff:g id="ID_1">^1</xliff:g>"</string>
<string name="cell_data_limit" msgid="3175933829235314233">"データ上限: <xliff:g id="ID_1">^1</xliff:g>"</string>
<string name="cell_data_warning_and_limit" msgid="3846150001253927594">"データ警告: <xliff:g id="ID_1">^1</xliff:g> / データ上限: <xliff:g id="ID_2">^2</xliff:g>"</string>
<string name="billing_cycle_fragment_summary" msgid="4926047002107855543">"毎月 <xliff:g id="ID_1">%1$s</xliff:g> 日"</string>
@@ -3953,10 +3955,10 @@
</plurals>
<string name="operator_warning" msgid="4676042739221117031">"デバイスで記録されるデータ使用量と携帯通信会社のデータ使用量は異なる場合があります"</string>
<string name="data_used_template" msgid="761605393453849477">"<xliff:g id="ID_1">%1$s</xliff:g> 使用"</string>
- <string name="set_data_warning" msgid="8115980184415563941">"データ警告を設定"</string>
- <string name="data_warning" msgid="2699207195535036240">"データ警告"</string>
- <string name="data_warning_footnote" msgid="965724845580257305">"データ警告とデータ上限はお使いのデバイスで測定されます。測定結果は携帯通信会社のデータとは異なることがあります。"</string>
- <string name="set_data_limit" msgid="5043770023229990674">"データ上限を設定"</string>
+ <string name="set_data_warning" msgid="8115980184415563941">"データ使用量を警告"</string>
+ <string name="data_warning" msgid="2699207195535036240">"警告するデータ使用量"</string>
+ <string name="data_warning_footnote" msgid="965724845580257305">"警告や制限の基準となるデータ使用量はお使いのデバイスで測定されます。測定結果は携帯通信会社のデータとは異なることがあります。"</string>
+ <string name="set_data_limit" msgid="5043770023229990674">"データ使用量を制限"</string>
<string name="data_limit" msgid="5793521160051596228">"データ上限"</string>
<string name="data_usage_template" msgid="6848274347956096882">"<xliff:g id="ID_1">%1$s</xliff:g> 使用(<xliff:g id="ID_2">%2$s</xliff:g>)"</string>
<string name="configure" msgid="8232696842838580549">"設定"</string>
@@ -3984,7 +3986,7 @@
<string name="launch_mdp_app_text" msgid="9186559496664208252">"プランを表示"</string>
<string name="launch_wifi_text" msgid="317820210431682605">"詳細を表示"</string>
<string name="data_saver_title" msgid="7903308134514179256">"データセーバー"</string>
- <string name="unrestricted_data_saver" msgid="9139401849550738720">"無制限のデータアクセス"</string>
+ <string name="unrestricted_data_saver" msgid="9139401849550738720">"モバイルデータの無制限利用"</string>
<string name="restrict_background_blacklisted" msgid="7158991683849067124">"バックグラウンド データは無効になっています"</string>
<string name="data_saver_on" msgid="7281809065420480881">"ON"</string>
<string name="data_saver_off" msgid="7439439787358504018">"OFF"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"デバイスがロックされている場合に、通知で返信などのテキストを入力できないようにする"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"デフォルトのスペル チェッカー"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"スペル チェッカーの選択"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"スペルチェックの使用"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"スペルチェックの使用"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"選択していません"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(なし)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4052,8 +4054,8 @@
<string name="overlay_toast_failed_to_apply" msgid="5692251825129250040">"オーバーレイを適用できませんでした"</string>
<string name="special_access" msgid="1453926335914696206">"特別なアプリアクセス"</string>
<plurals name="special_access_summary" formatted="false" msgid="5182092345063909346">
- <item quantity="other">データの無制限使用が可能なアプリは <xliff:g id="COUNT">%d</xliff:g> 個です</item>
- <item quantity="one">データの無制限使用が可能なアプリは 1 個です</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 個のアプリがモバイルデータを無制限に使用可能</item>
+ <item quantity="one">1 個のアプリがモバイルデータを無制限に使用可能</item>
</plurals>
<string name="special_access_more" msgid="7086690625048471400">"詳細"</string>
<string name="confirm_convert_to_fbe_warning" msgid="4972595831034280189">"ファイル暗号化のためにユーザーのデータを消去して変換してもよろしいですか?"</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"ストレージの空き容量を増やすため、ストレージ マネージャはバックアップした写真や動画をお使いのデバイスから削除します。"</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"写真と動画を削除"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"ストレージ マネージャ"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"ストレージ マネージャの使用"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"ストレージ管理ツールの使用"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"自動"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"手動"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"今すぐ空き容量を増やす"</string>
@@ -4110,7 +4112,7 @@
<string name="gesture_preference_summary" product="tablet" msgid="8303793594714075580">"簡単な操作でタブレットを管理できます"</string>
<string name="gesture_preference_summary" product="device" msgid="7792199669106960922">"簡単な操作でデバイスを管理できます"</string>
<string name="double_tap_power_for_camera_title" msgid="5480829329052517484">"カメラの起動"</string>
- <string name="double_tap_power_for_camera_summary" msgid="6591026425496323965">"カメラをすばやく起動するには、電源ボタンを 2 回押します。どの画面からでも操作できます。"</string>
+ <string name="double_tap_power_for_camera_summary" msgid="6591026425496323965">"電源ボタンを 2 回押して、カメラをすばやく起動できます。どの画面からでも操作できます。"</string>
<string name="double_tap_power_for_camera_suggestion_title" msgid="509078029429865036">"カメラをすばやく起動"</string>
<string name="double_twist_for_camera_mode_title" msgid="2606032140297556018">"カメラの切り替え"</string>
<string name="double_twist_for_camera_mode_summary" msgid="8979914206876018137"></string>
@@ -4118,26 +4120,26 @@
<string name="swipe_up_to_switch_apps_summary" msgid="4644068184114154787">"アプリを切り替えるには、ホームボタンを上にスワイプします。もう一度上にスワイプするとすべてのアプリが表示されます。どの画面からでも操作できます。画面右下の [最近] ボタンは表示されなくなります。"</string>
<string name="swipe_up_to_switch_apps_suggestion_title" msgid="7641846365137536128">"新しいホームボタンを試す"</string>
<string name="swipe_up_to_switch_apps_suggestion_summary" msgid="7338653224520387852">"アプリを切り替えるための新しい操作を有効にしてください"</string>
- <string name="ambient_display_title" product="default" msgid="6785677099744344088">"画面をダブルタップして通知をチェック"</string>
+ <string name="ambient_display_title" product="default" msgid="6785677099744344088">"画面をダブルタップして通知を確認"</string>
<string name="ambient_display_title" product="tablet" msgid="1106285490888683613">"タブレットの画面をダブルタップして通知をチェック"</string>
<string name="ambient_display_title" product="device" msgid="5064644474876041478">"デバイスの画面をダブルタップして通知をチェック"</string>
- <string name="ambient_display_summary" msgid="4882910328216411109">"時刻、通知などの情報を確認するには、画面をダブルタップします。"</string>
- <string name="ambient_display_pickup_title" product="default" msgid="7141652156907066938">"デバイスを持ち上げて通知をチェック"</string>
+ <string name="ambient_display_summary" msgid="4882910328216411109">"画面をダブルタップして、時刻、通知などの情報を確認できます。"</string>
+ <string name="ambient_display_pickup_title" product="default" msgid="7141652156907066938">"スマートフォンを持ち上げて通知を確認"</string>
<string name="ambient_display_pickup_title" product="tablet" msgid="1555456400210301959">"タブレットを持ち上げて通知をチェック"</string>
<string name="ambient_display_pickup_title" product="device" msgid="2480126522988135037">"デバイスを持ち上げて通知をチェック"</string>
<string name="ambient_display_wake_screen_title" msgid="3376988352851077102">"ディスプレイの復帰"</string>
- <string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"時刻、通知などの情報を確認するには、スマートフォンを持ち上げます。"</string>
+ <string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"スマートフォンを持ち上げることで、時刻、通知などの情報を確認できます。"</string>
<string name="ambient_display_pickup_summary" product="tablet" msgid="1077745287100012928">"時刻、通知などの情報を確認するには、タブレットを持ち上げます。"</string>
<string name="ambient_display_pickup_summary" product="device" msgid="404199660076598026">"時刻、通知などの情報を確認するには、デバイスを持ち上げます。"</string>
- <string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"スマートフォンをタップしてチェック"</string>
+ <string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"デバイスをタップして通知を確認"</string>
<string name="ambient_display_tap_screen_title" product="tablet" msgid="6434521782016864148">"タブレットをタップしてチェックする"</string>
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"デバイスをタップしてチェックする"</string>
<string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"時刻、通知などの情報を確認するには、画面をタップします。"</string>
<string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"指紋センサーをスワイプして通知を表示"</string>
<string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"指紋センサーのスワイプ"</string>
- <string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"通知を確認するには、スマートフォンの背面にある指紋認証センサーを下にスワイプします。"</string>
- <string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"通知を確認するには、タブレットの背面にある指紋認証センサーを下にスワイプします。"</string>
- <string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="7950264130913070035">"通知を確認するには、デバイスの背面にある指紋認証センサーを下にスワイプします。"</string>
+ <string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"スマートフォンの背面にある指紋認証センサーを下にスワイプして、通知を確認できます。"</string>
+ <string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"タブレットの背面にある指紋認証センサーを下にスワイプして、通知を確認できます。"</string>
+ <string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="7950264130913070035">"デバイスの背面にある指紋認証センサーを下にスワイプして、通知を確認できます。"</string>
<string name="fingerprint_swipe_for_notifications_suggestion_title" msgid="948946491233738823">"通知をすばやく確認"</string>
<string name="gesture_setting_on" msgid="7573680730101327866">"ON"</string>
<string name="gesture_setting_off" msgid="2540159841716890511">"OFF"</string>
@@ -4148,7 +4150,7 @@
<string name="oem_lock_info_message" msgid="5090850412279403901">"デバイス保護機能を有効にするには、デバイスを再起動してください。"</string>
<string name="automatic_storage_manager_freed_bytes" msgid="7360443072390107772">"計 <xliff:g id="SIZE">%1$s</xliff:g> が利用可能になりました\n\n最終実行: <xliff:g id="DATE">%2$s</xliff:g>"</string>
<string name="web_action_enable_title" msgid="4462106633708675959">"Instant Apps"</string>
- <string name="web_action_enable_summary" msgid="1729016644691793085">"アプリがインストールされていなくても、アプリ内のリンクを開くことができます"</string>
+ <string name="web_action_enable_summary" msgid="1729016644691793085">"アプリがインストールされていなくても、アプリでリンクを開けるようにします"</string>
<string name="web_action_section_title" msgid="5563229447734734662">"Instant Apps"</string>
<string name="instant_apps_settings" msgid="879003203555847537">"Instant Apps の設定"</string>
<string name="domain_url_section_title" msgid="206403507921518321">"インストール済みアプリ"</string>
@@ -4443,7 +4445,7 @@
<string name="mobile_network_mode_error" msgid="6818434186286086554">"ネットワーク モード <xliff:g id="NETWORKMODEID">%1$d</xliff:g> は無効です。無視してください。"</string>
<string name="mobile_network_apn_title" msgid="5628635067747404382">"アクセス ポイント名"</string>
<string name="manual_mode_disallowed_summary" msgid="799800630000340665">"<xliff:g id="CARRIER">%1$s</xliff:g> への接続時は利用できません"</string>
- <string name="emergency_info_contextual_card_summary" msgid="5541444321969803486">"医療記録、緊急連絡先"</string>
+ <string name="emergency_info_contextual_card_summary" msgid="5541444321969803486">"医療情報、緊急連絡先"</string>
<string name="see_more" msgid="7463940160389802632">"詳細"</string>
<string name="see_less" msgid="3718892257002813387">"一部を表示"</string>
<string name="network_connection_request_dialog_title" msgid="3150489262902506588">"<xliff:g id="APPNAME">%1$s</xliff:g> で使用するデバイス"</string>
diff --git a/tests/CarDeveloperOptions/res/values-ka/arrays.xml b/tests/CarDeveloperOptions/res/values-ka/arrays.xml
index bddbdec..1cec46d 100644
--- a/tests/CarDeveloperOptions/res/values-ka/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-ka/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"ფონურ რეჟიმში გაშვება"</item>
<item msgid="6423861043647911030">"მარტივი წვდომის ხმის სიმძლავრე"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"მდებარეობა"</item>
+ <item msgid="6656077694190491067">"მდებარეობა"</item>
+ <item msgid="8790228218278477369">"მდებარეობა"</item>
+ <item msgid="7836406246005211990">"ვიბრაცია"</item>
+ <item msgid="3951439024549922598">"კონტაქტების მონაცემების წაკითხვა"</item>
+ <item msgid="8802152411647068">"კონტაქტების შეცვლა"</item>
+ <item msgid="229544934599698735">"ზარების ჟურნალის ნახვა"</item>
+ <item msgid="7396102294405899613">"ზარების ჟურნალის ჩასწორება"</item>
+ <item msgid="3597797992398484655">"კალენდრის მონაცემების წაკითხვა"</item>
+ <item msgid="2705975774250907343">"კალენდრის ჩასწორება"</item>
+ <item msgid="4668747371441932697">"მდებარეობა"</item>
+ <item msgid="1487578921720243646">"შეტყობინების გამოქვეყნება"</item>
+ <item msgid="4636080349724146638">"მდებარეობა"</item>
+ <item msgid="673510900286463926">"ტელეფონზე დარეკვა"</item>
+ <item msgid="542083422784609790">"SMS/MMS-ის წაკითხვა"</item>
+ <item msgid="1033780373029588436">"SMS/MMS-ის დაწერა"</item>
+ <item msgid="5647111115517787488">"SMS/MMS-ის მიღება"</item>
+ <item msgid="8591105601108455893">"SMS/MMS-ის მიღება"</item>
+ <item msgid="7730995008517841903">"SMS/MMS მიღება"</item>
+ <item msgid="2613033109026626086">"SMS/MMS მიღება"</item>
+ <item msgid="3037159047591081136">"SMS/MMS-ის გაგზავნა"</item>
+ <item msgid="4726682243833913568">"SMS/MMS-ის წაკითხვა"</item>
+ <item msgid="6555678522277865572">"SMS/MMS-ის დაწერა"</item>
+ <item msgid="6981734935578130884">"პარამეტრების შეცვლა"</item>
+ <item msgid="8705854389991425629">"დახაზვა ზემოთ"</item>
+ <item msgid="5861356020344153651">"შეტყობინებებზე წვდომა"</item>
+ <item msgid="78432174621628659">"კამერა"</item>
+ <item msgid="3986116419882154794">"აუდიოს ჩაწერა"</item>
+ <item msgid="4516840825756409490">"აუდიოს დაკვრა"</item>
+ <item msgid="6811712502798183957">"გაცვლის ბუფერის წაკითხვა"</item>
+ <item msgid="2780369012602289114">"გაცვლის ბუფერის შეცვლა"</item>
+ <item msgid="2331359440170850868">"მედიის ღილაკები"</item>
+ <item msgid="6133599737122751231">"აუდიოს ფოკუსი"</item>
+ <item msgid="6844485713404805301">"მასტერ-ხმის სიმძლავრე"</item>
+ <item msgid="1600379420669104929">"ხმის სიმძღლავრე"</item>
+ <item msgid="6296768210470214866">"ზარის სიმძლავრე"</item>
+ <item msgid="510690696071629241">"მედიის ხმა"</item>
+ <item msgid="406861638631430109">"მაღვიძარას ხმა"</item>
+ <item msgid="4715864795872233884">"შეტყობინების ხმა"</item>
+ <item msgid="2311478519251301183">"Bluetooth-ის ხმა"</item>
+ <item msgid="5133991377896747027">"დარჩეს აქტიური"</item>
+ <item msgid="2464189519136248621">"მდებარეობა"</item>
+ <item msgid="2062677934050803037">"მდებარეობა"</item>
+ <item msgid="1735171933192715957">"გამოყენების სტატისტიკის მიღება"</item>
+ <item msgid="1014093788778383554">"მიკროფონის დადუმება/გააქტიურება"</item>
+ <item msgid="4199297950608622850">"შეტყობინების ჩვენება"</item>
+ <item msgid="2527962435313398821">"მედიის პროეცირება"</item>
+ <item msgid="5117506254221861929">"VPN-ის აქტივაცია"</item>
+ <item msgid="8291198322681891160">"ფონის ჩაწერა"</item>
+ <item msgid="7106921284621230961">"დამხმარე სტრუქტურა"</item>
+ <item msgid="4496533640894624799">"დამხმარე ეკრანის ანაბეჭდი"</item>
+ <item msgid="2598847264853993611">"ტელეფონის მდგომარეობის წაკითხვა"</item>
+ <item msgid="9215610846802973353">"ხმოვანი ფოსტის დამატება"</item>
+ <item msgid="9186411956086478261">"SIP-ის გამოყენება"</item>
+ <item msgid="6884763100104539558">"გამავალი ზარის დამუშავება"</item>
+ <item msgid="125513972170580692">"თითის ანაბეჭდი"</item>
+ <item msgid="2556071024281275619">"სხეულის სენსორები"</item>
+ <item msgid="617168514928339387">"Cell Broadcast-ების წაკითხვა"</item>
+ <item msgid="7134693570516523585">"მდებარეობის იმიტირება"</item>
+ <item msgid="7224489175375229399">"მეხსიერების წაკითხვა"</item>
+ <item msgid="8472735063903258202">"მეხსიერებაში ჩაწერა"</item>
+ <item msgid="4069276819909595110">"ეკრანის ჩართვა"</item>
+ <item msgid="1228338896751121025">"ანგარიშების მიღება"</item>
+ <item msgid="3181581793459233672">"ფონურ რეჟიმში გაშვება"</item>
+ <item msgid="2340936043025374076">"მარტივი წვდომის ხმის სიმძლავრე"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"მოკლე"</item>
<item msgid="4816511817309094890">"საშუალო"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"არასოდეს მიეცეს უფლება"</item>
<item msgid="8184570120217958741">"ნებართვის მიცემა - ყოველთვის"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"ჩვეულებრივი"</item>
+ <item msgid="5101233285497327432">"ზომიერი"</item>
+ <item msgid="1555861583162930714">"დაბალი"</item>
+ <item msgid="1719683776264798117">"კრიტიკული"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"ჩვეულებრივი"</item>
+ <item msgid="6107138933849816768">"ზომიერი"</item>
+ <item msgid="182695359839047859">"დაბალი"</item>
+ <item msgid="8577246509202964244">"კრიტიკული"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"სისტემატური"</item>
<item msgid="167418068739176448">"ტოპ-აქტივობა"</item>
diff --git a/tests/CarDeveloperOptions/res/values-ka/strings.xml b/tests/CarDeveloperOptions/res/values-ka/strings.xml
index 1392a22..fb529fe 100644
--- a/tests/CarDeveloperOptions/res/values-ka/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-ka/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"ეკრანზე ტექსტის დაპატარავება ან გადიდება."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"დაპატარავება"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"გადიდება"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"ტექსტის ნიმუში"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"ოზის საოცარი ჯადოქარი"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"თავი 11: ოზის ზურმუხტის ქალაქი"</string>
@@ -114,7 +113,7 @@
<string name="bluetooth_disconnect_all_profiles" product="device" msgid="4707569949253450208">"თქვენი მოწყობილობა გაწყვეტს კავშირს <xliff:g id="DEVICE_NAME">%1$s</xliff:g>-თან."</string>
<string name="bluetooth_disconnect_dialog_ok" msgid="4183522987246110145">"კავშირის გაწყვეტა"</string>
<string name="bluetooth_empty_list_user_restricted" msgid="3616298363281495777">"თქვენ არ გაქვთ Bluetooth-ის პარამეტრების შეცვლის ნებართვა."</string>
- <string name="bluetooth_pairing_pref_title" msgid="2904954138013884029">"ახალი მოწყობილობის დაწყვილება"</string>
+ <string name="bluetooth_pairing_pref_title" msgid="2904954138013884029">"ახალი მოწყობ. დაწყვილება"</string>
<string name="bluetooth_is_visible_message" msgid="6341088682252805612">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ჩანს ახლომდებარე მოწყობილობებზე, როდესაც Bluetooth პარამეტრები გახსნილია."</string>
<string name="bluetooth_footer_mac_message" product="default" msgid="335341476746836260">"ტელეფონის Bluetooth-მისამართი: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_footer_mac_message" product="tablet" msgid="6033609611245782463">"ტაბლეტის Bluetooth-მისამართი: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
@@ -166,7 +165,7 @@
<string name="bluetooth_device_name_summary" msgid="8661066392056595005">"სხვა მოწყობილობებისთვის ჩანს, როგორც „<xliff:g id="DEVICE_NAME">^1</xliff:g>“"</string>
<string name="bluetooth_off_footer" msgid="7658444560543730571">"ჩართეთ Bluetooth სხვა მოწყობილობებთან დასაკავშირებლად."</string>
<string name="bluetooth_paired_device_title" msgid="8361860197780425286">"თქვენი მოწყობილობები"</string>
- <string name="bluetooth_pairing_page_title" msgid="9053463656712597709">"ახალი მოწყობილობის დაწყვილება"</string>
+ <string name="bluetooth_pairing_page_title" msgid="9053463656712597709">"ახალი მოწყობ. დაწყვილება"</string>
<string name="bluetooth_pref_summary" product="tablet" msgid="3601662966604648212">"თქვენი ტაბლეტის მიერ ახლომდებარე Bluetooth მოწყობილობებთან კომუნიკაციის დაშვება"</string>
<string name="bluetooth_pref_summary" product="device" msgid="2286727776570956969">"თქვენი მოწყობილობის მიერ ახლომდებარე Bluetooth მოწყობილობებთან კომუნიკაციის დაშვება"</string>
<string name="bluetooth_pref_summary" product="default" msgid="863659221858781186">"თქვენი ტელეფონის მიერ ახლომდებარე Bluetooth მოწყობილობებთან კომუნიკაციის დაშვება"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"ინფორმაცია პროფილზე"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"ანგარიშები"</string>
<string name="location_settings_title" msgid="2707201457572301030">"მდებარეობა"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"მდებარეობის გამოყენება"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"მდებარეობის გამოყენება"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"გამორთული"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">ჩართული — მდებარეობაზე წვდომა შეუძლია <xliff:g id="COUNT_1">%1$d</xliff:g> აპს</item>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Wi‑Fi-ს ჩართვა"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Wi-Fi-ს გამოყენება"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Wi-Fi-ის გამოყენება"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi‑Fi პარამეტრები"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"უსადენო წვდომის წერტილების დაყენება და მართვა"</string>
@@ -926,9 +925,9 @@
<string name="wifi_show_password" msgid="7878398590772942202">"პაროლის გამოჩენა"</string>
<string name="wifi_ap_band_config" msgid="6565016368079288433">"აირჩიეთ AP Band"</string>
<string name="wifi_ap_choose_auto" msgid="7927637960569365785">"ავტომატური"</string>
- <string name="wifi_ap_choose_2G" msgid="43198403259714736">"2,4 GHz დიაპაზონი"</string>
- <string name="wifi_ap_choose_5G" msgid="2624859713183683146">"5 GHz დიაპაზონი"</string>
- <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"სასურველია 5-გიგაჰერციანი დიაპაზონი"</string>
+ <string name="wifi_ap_choose_2G" msgid="43198403259714736">"2,4 გჰც დიაპაზონი"</string>
+ <string name="wifi_ap_choose_5G" msgid="2624859713183683146">"5 გჰც დიაპაზონი"</string>
+ <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"სასურველია 5 გჰც დიაპაზონი"</string>
<string name="wifi_ap_2G" msgid="5793110086517338494">"2.4 გჰც"</string>
<string name="wifi_ap_5G" msgid="4584892544393675403">"5 გჰც"</string>
<string name="wifi_ap_band_select_one" msgid="4409754936554360355">"აირჩიეთ მინიმუმ ერთი დიაპაზონი Wi‑Fi უსადენო ქსელისთვის:"</string>
@@ -1039,7 +1038,7 @@
<string name="wifi_ip_settings_invalid_network_prefix_length" msgid="392977552691002076">"შეიყვანეთ ქსელის პრეფიქსი, რომლის სიგრძეა 0-დან 32-მდე."</string>
<string name="wifi_dns1" msgid="5250809981658822505">"DNS 1"</string>
<string name="wifi_dns2" msgid="1905876166783761641">"DNS 2"</string>
- <string name="wifi_gateway" msgid="7455334454444443397">"კარიბჭე"</string>
+ <string name="wifi_gateway" msgid="7455334454444443397">"გეითვეი"</string>
<string name="wifi_network_prefix_length" msgid="1941206966133010633">"ქსელის პრეფიქსის სიგრძე"</string>
<string name="wifi_p2p_settings_title" msgid="3213180637906683308">"Wi‑Fi Direct"</string>
<string name="wifi_p2p_device_info" msgid="4717490498956029237">"ინფორმაცია მოწყობილობის შესახებ"</string>
@@ -1058,7 +1057,7 @@
<string name="wifi_p2p_cancel_connect_message" msgid="3752679335020392154">"ნამდვილად გსურთ <xliff:g id="PEER_NAME">%1$s</xliff:g>-თან დაკავშირების მიწვევის გაუქმება?"</string>
<string name="wifi_p2p_delete_group_message" msgid="3206660449067701089">"გსურთ, ამ ჯგუფის დავიწყება?"</string>
<string name="wifi_hotspot_checkbox_text" msgid="12062341344410520">"Wi‑Fi უსადენო ქსელი"</string>
- <string name="wifi_hotspot_off_subtext" msgid="6177054857136221058">"არ მოხდეს ინტერნეტის ან კონტენტის სხვა მოწყობილობებთან გაზიარება"</string>
+ <string name="wifi_hotspot_off_subtext" msgid="6177054857136221058">"არ ხორციელდება ინტერნეტის ან კონტენტის სხვა მოწყობილობებთან გაზიარება"</string>
<string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="71421730039785897">"ამ ტაბლეტის ინტერნეტ-კავშირი უსადენო ქსელით ზიარდება"</string>
<string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="8914285514605049879">"ამ ტელეფონის ინტერნეტ-კავშირი უსადენო ქსელით ზიარდება"</string>
<string name="wifi_hotspot_on_local_only_subtext" msgid="7415381343846704553">"აპი კონტენტს აზიარებს. ინტერნეტ-კავშირის გასაზიარებლად, ჯერ გამორთეთ, შემდეგ კი ხელახლა ჩართეთ უსადენო ქსელი"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"მობილური"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"თუ Wi‑Fi მიუწვდომელია, ისარგებლეთ მობილური ქსელით"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"თუ მობილური ქსელი მიუწვდომელია, გამოიყენეთ Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"დარეკვა Wi-Fi-ის მეშვეობით. თუ Wi‑Fi გაითიშა, ზარი დასრულდება."</string>
@@ -1796,7 +1798,7 @@
<string name="install_all_warning" product="device" msgid="9141585291103603515">"თქვენი მოწყობილობა და პირადი მონაცემები უცნობი აპების შემოტევების წინაშე მეტად დაუცველია. აპების ამ წყაროდან ინსტალაციის შემთხვევაში თქვენ თანახმა ხართ, პასუხისმგებელი იყოთ ამ აპების გამოყენების შედეგად მოწყობილობისთვის მიყენებულ ზიანსა და მონაცემების დაკარგვაზე."</string>
<string name="advanced_settings" msgid="6282069364060968122">"დამატებითი პარამეტრები"</string>
<string name="advanced_settings_summary" msgid="5912237062506771716">"მეტი პარამეტრების ვარიანტების ჩართვა"</string>
- <string name="application_info_label" msgid="3886253474964599105">"აპის მონაცემები"</string>
+ <string name="application_info_label" msgid="3886253474964599105">"აპების მონაცემები"</string>
<string name="storage_label" msgid="1109537840103290384">"საცავი"</string>
<string name="auto_launch_label" msgid="47089737922907379">"გახსნა ნაგულისხმევად"</string>
<string name="auto_launch_label_generic" msgid="7865828543459493308">"ნაგულისხმევი"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"შეტყობინების ვიბრაცია"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"ზარის ვიბრაცია"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"ვიბრაცია შეხებისას"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"სერვისის გამოყენება"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"ფერის კორექციის გამოყენება"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"სუბტიტრების გამოყენება"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"სერვისის გამოყენება"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"ფერთა კორექციის გამოყენება"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"წარწერების გამოყენება"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"გაგრძელება"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"სმენის დახმარებები"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"სმენის აპარატები არაა დაკავშირებული"</string>
@@ -2238,7 +2240,7 @@
<string name="background_activity_warning_dialog_title" msgid="2170790412855899678">"გსურთ ფონური აქტივობის შეზღუდვა?"</string>
<string name="background_activity_warning_dialog_text" msgid="8242749826732375096">"აპისთვის ფონური აქტივობის შეზღუდვის შემთხვევაში, მან შეიძლება არასათანადოდ იმუშაოს"</string>
<string name="background_activity_disabled_dialog_text" msgid="4234598000779459640">"რადგან ეს აპი ბატარეის ოპტიმიზებისთვის დაყენებული არაა, მას ვერ შეზღუდავთ.\n\nჩართეთ ბატარეის ოპტიმიზაცია აპის შესაზღუდავად."</string>
- <string name="device_screen_usage" msgid="4470485475363132750">"ეკრანის მოხმარება ბოლო სრული დატენვიდან"</string>
+ <string name="device_screen_usage" msgid="4470485475363132750">"ეკრანის გამოყენება ბოლო სრული დატენვიდან"</string>
<string name="power_usage_list_summary" msgid="4314438658308211057">"ბატარეის მოხმარება ბოლო სრული დატენვიდან"</string>
<string name="screen_usage_summary" msgid="263396144684078341">"დროის ხანგრძლივობა სრული დატენვიდან, რომლის განმავლობაშიც ეკრანი ჩართული იყო"</string>
<string name="device_usage_list_summary" msgid="8299017481332816368">"მოწყობილობის მოხმარება ბოლო სრული დატენვიდან"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"ჩართვა"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"ბატარეის დამზოგის გამოყენება"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"ბატარეის დამზოგის გამოყენება"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"ავტომატურად გამორთვა"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"არასოდეს"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"ბატარეის <xliff:g id="PERCENT">%1$s</xliff:g>-ზე"</string>
@@ -2707,7 +2709,7 @@
<string name="data_usage_auto_sync_off_dialog_title" msgid="7105334544291643305">"გამოირთოს მონაცემთა ავტომატური სინქრონიზაცია?"</string>
<string name="data_usage_auto_sync_off_dialog" msgid="4057984234450947964">"ეს გამოიწვევს მონაცემებისა და ბატარეის გამოყენების დაზოგვას, მაგრამ თქვენ ბოლო ინფორმაციის შესაგროვებლად დაგჭირდებათ თითოეულ ანგარიშთან მექანიკურად სინქრონიზაცია. განახლებების შესახებ შეტყობინებებს არ მიიღებთ."</string>
<string name="data_usage_cycle_editor_title" msgid="4967309390043599889">"გამოყენების ციკლის ჩამოყრის თარიღი"</string>
- <string name="data_usage_cycle_editor_subtitle" msgid="6043098041946166597">"თითოეული თვის თარიღი:"</string>
+ <string name="data_usage_cycle_editor_subtitle" msgid="6043098041946166597">"თვის შემდეგ რიცხვში:"</string>
<string name="data_usage_cycle_editor_positive" msgid="9155752056537811646">"შენახვა"</string>
<string name="data_usage_warning_editor_title" msgid="1431385383278389290">"გაფრთხილების დაყენება"</string>
<string name="data_usage_limit_editor_title" msgid="1687908662154108293">"ინტერნეტის მოხმარების ლიმიტის დაყენება"</string>
@@ -3142,7 +3144,7 @@
<string name="notification_ringtone_title" msgid="2932960620843976285">"შეტყობინებების ნაგულისხმევი ხმა"</string>
<string name="notification_unknown_sound_title" msgid="8043718667804838398">"აპის მიერ უზრუნველყოფილი ხმა"</string>
<string name="notification_sound_default" msgid="2664544380802426260">"შეტყობინებების ნაგულისხმევი ხმა"</string>
- <string name="alarm_ringtone_title" msgid="6411326147408635902">"მაღვიძარას ნაგულისხმევი ხმა"</string>
+ <string name="alarm_ringtone_title" msgid="6411326147408635902">"მაღვიძარას ნაგულ. ხმა"</string>
<string name="vibrate_when_ringing_title" msgid="2757996559847126952">"ვიბრაცია ზარებისას"</string>
<string name="other_sound_settings" msgid="5250376066099818676">"სხვა ხმები"</string>
<string name="dial_pad_tones_title" msgid="8877212139988655769">"ციფერბლატის ტონური რეჟიმი"</string>
@@ -3321,7 +3323,7 @@
<string name="locked_work_profile_notification_title" msgid="8307025804986190658">"როცა სამსახურის პროფილი დაბლოკილია"</string>
<string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"შეტყობინების მთელი შინაარსის ჩვენება"</string>
<string name="lock_screen_notifications_summary_hide" msgid="3668806866535260143">"სენსიტიური კონტენტის დამალვა"</string>
- <string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"არ მაჩვენო არანაირი შეტყობინება"</string>
+ <string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"არ მაჩვენო შეტყობინება"</string>
<string name="lock_screen_notifications_interstitial_message" msgid="4230189215124387818">"როგორ გსურთ შეტყობინებების ჩვენება, როდესაც მოწყობილობა ჩაკეტილია?"</string>
<string name="lock_screen_notifications_interstitial_title" msgid="2832587379332443505">"შეტყობინებები"</string>
<string name="lock_screen_notifications_summary_show_profile" msgid="8908775469657073273">"სამსახურის შეტყობინებების მთელი კონტენტის ჩვენება"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"შეტყობინებებში პასუხების ან სხვა ტექსტის აკრეფის აკრძალვა, როცა მოწყობილობა ჩაკეტილია"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"ნაგულ. მართლწერის შემმოწმებელი"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"მართლწერის შემმოწმებლის არჩევა"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"მართლწერის შემმოწმებლის გამოყენება"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"მართლწერის შემმოწმებლის გამოყენება"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"არ არის არჩეული"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(არაფერი)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"მეხსიერების გამოთავისუფლების ხელშეწყობის მიზნით, მეხსიერების მენეჯერი თქვენი მოწყობილობიდან იმ ფოტოებსა და ვიდეოებს ამოშლის, რომელთა სარეზერვო ასლებიც უკვე შექმნილია."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"ფოტოებისა და ვიდეოების ამოშლა"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"მეხსიერების მენეჯერი"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"მეხსიერების მენეჯერის გამოყენება"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"მეხსიერების მმართველის გამოყენება"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"ავტომატური"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"მექანიკური"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"მეხსიერების გამოთავისუფლება"</string>
diff --git a/tests/CarDeveloperOptions/res/values-kk/arrays.xml b/tests/CarDeveloperOptions/res/values-kk/arrays.xml
index 2dca861..bfa188c 100644
--- a/tests/CarDeveloperOptions/res/values-kk/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-kk/arrays.xml
@@ -29,8 +29,25 @@
<item msgid="5194868215515664953">"Тынық"</item>
<item msgid="7044520255415007865">"Барлығы"</item>
</string-array>
- <!-- no translation found for screen_timeout_entries:0 (8596143519087753804) -->
- <!-- no translation found for dream_timeout_entries:7 (8271452751594598661) -->
+ <string-array name="screen_timeout_entries">
+ <item msgid="8596143519087753804">"15 секунд"</item>
+ <item msgid="772029947136115322">"30 секунд"</item>
+ <item msgid="8743663928349474087">"1 минут"</item>
+ <item msgid="1506508631223164814">"2 минут"</item>
+ <item msgid="8664703938127907662">"5 минут"</item>
+ <item msgid="5827960506924849753">"10 минут"</item>
+ <item msgid="6677424950124253938">"30 минут"</item>
+ </string-array>
+ <string-array name="dream_timeout_entries">
+ <item msgid="6487043225269853023">"Ешқашан"</item>
+ <item msgid="2517785806387977252">"15 секунд"</item>
+ <item msgid="6347954399441173672">"30 секунд"</item>
+ <item msgid="4858305253279921789">"1 минут"</item>
+ <item msgid="8109273437140044073">"2 минут"</item>
+ <item msgid="2788593551142462622">"5 минут"</item>
+ <item msgid="8012672183888404961">"10 минут"</item>
+ <item msgid="8271452751594598661">"30 минут"</item>
+ </string-array>
<string-array name="lock_after_timeout_entries">
<item msgid="2232921187970351881">"Бірден"</item>
<item msgid="2038544972632026612">"5 секунд"</item>
@@ -42,17 +59,47 @@
<item msgid="811192536981678974">"10 минут"</item>
<item msgid="7258394417241706272">"30 минут"</item>
</string-array>
- <!-- no translation found for entries_font_size:0 (2340391964816059553) -->
- <!-- no translation found for entries_font_size:0 (6490061470416867723) -->
- <!-- no translation found for entries_font_size:2 (1714184661981538355) -->
- <!-- no translation found for entries_font_size:2 (1678068858001018666) -->
- <!-- no translation found for wifi_status:3 (5848277343965362748) -->
- <!-- no translation found for wifi_status_with_ssid:1 (6816207058895999545) -->
- <!-- no translation found for wifi_status_with_ssid:3 (7547609081339573756) -->
- <!-- no translation found for wifi_status_with_ssid:4 (5145158315060185414) -->
+ <string-array name="entries_font_size">
+ <item msgid="2340391964816059553">"Кішi"</item>
+ <item msgid="591935967183159581">"Әдепкі"</item>
+ <item msgid="1714184661981538355">"Үлкен"</item>
+ <item msgid="6195563047686707484">"Ең үлкен"</item>
+ </string-array>
+ <string-array name="wifi_status">
+ <item msgid="1304883790721412351"></item>
+ <item msgid="4157625910392775808">"Тексеруде…"</item>
+ <item msgid="5597394826455877834">"Қосылуда..."</item>
+ <item msgid="5848277343965362748">"Растауда…"</item>
+ <item msgid="3391238031431440676">"IP мекенжайына қол жеткізуде…"</item>
+ <item msgid="5257597310494000224">"Жалғанған"</item>
+ <item msgid="8472497592913050396">"Тоқтатылған"</item>
+ <item msgid="1228072488815999109">"Ажыратылуда…"</item>
+ <item msgid="7253087004422991731">"Ажыратылған"</item>
+ <item msgid="4169850917304751227">"Сәтсіз"</item>
+ <item msgid="6266658166690831131">"Бөгелген"</item>
+ <item msgid="4517230805854909775">"Нашар байланысты уақытша қолданбау"</item>
+ </string-array>
+ <string-array name="wifi_status_with_ssid">
+ <item msgid="4853670665485437464"></item>
+ <item msgid="6816207058895999545">"Іздеуде…"</item>
+ <item msgid="8058143476674427024">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> қосылуда…"</item>
+ <item msgid="7547609081339573756">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> арқылы расталуда…"</item>
+ <item msgid="5145158315060185414">"IP мекенжайы <xliff:g id="NETWORK_NAME">%1$s</xliff:g> желісінен алынуда…"</item>
+ <item msgid="3283243151651124831">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> жалғанған"</item>
+ <item msgid="6600156231416890902">"Тоқтатылған"</item>
+ <item msgid="4133290864821295785">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> байланысынан ажыратылуда…"</item>
+ <item msgid="3980154971187953257">"Ажыратылған"</item>
+ <item msgid="2847316776634969068">"Сәтсіз"</item>
+ <item msgid="4390990424746035383">"Бөгелген"</item>
+ <item msgid="3618248791367063949">"Нашар байланысты уақытша қолданбау"</item>
+ </string-array>
<!-- no translation found for wifi_tether_security:0 (5586343370515598801) -->
<!-- no translation found for wifi_tether_security:1 (6136336549994615745) -->
- <!-- no translation found for wifi_p2p_wps_setup:0 (5390235347963255303) -->
+ <string-array name="wifi_p2p_wps_setup">
+ <item msgid="5390235347963255303">"Push түймесі"</item>
+ <item msgid="7401896200768713930">"Басқа құрылғының PIN коды"</item>
+ <item msgid="4526848028011846710">"Осы құралдың PIN коды"</item>
+ </string-array>
<string-array name="wifi_p2p_status">
<item msgid="8741947238021758201">"Жалғанған"</item>
<item msgid="983792611851499732">"Шақырылған"</item>
@@ -60,7 +107,12 @@
<item msgid="4646663015449312554">"Қолжетімді"</item>
<item msgid="3230556734162006146">"Аумақтан тыc"</item>
</string-array>
- <!-- no translation found for bluetooth_visibility_timeout_entries:1 (2759776603549270587) -->
+ <string-array name="bluetooth_visibility_timeout_entries">
+ <item msgid="8247986727324120082">"2 минут"</item>
+ <item msgid="2759776603549270587">"5 минут"</item>
+ <item msgid="167772676068860015">"1 сағат"</item>
+ <item msgid="5985477119043628504">"Ешқашан"</item>
+ </string-array>
<string-array name="bluetooth_max_connected_audio_devices">
<item msgid="3800257971619063588">"Жүйенінің әдепкі мәнін пайдалану: <xliff:g id="DEFAULT_BLUETOOTH_MAX_CONNECTED_AUDIO_DEVICES">%1$d</xliff:g>"</item>
<item msgid="8572230405241423895">"1"</item>
@@ -69,8 +121,13 @@
<item msgid="1644506614010085798">"4"</item>
<item msgid="3132506679404897150">"5"</item>
</string-array>
- <!-- no translation found for wifi_signal:1 (7882129634982603782) -->
- <!-- no translation found for wifi_signal:4 (999948812884919584) -->
+ <string-array name="wifi_signal">
+ <item msgid="1709949377823900951">"Нашар"</item>
+ <item msgid="7882129634982603782">"Нашар"</item>
+ <item msgid="6457357501905996224">"Орташа"</item>
+ <item msgid="405271628162918841">"Жақсы"</item>
+ <item msgid="999948812884919584">"Өте жақсы"</item>
+ </string-array>
<string-array name="data_usage_data_range">
<item msgid="8986775481492954015">"Соңғы 30 күн"</item>
<item msgid="3211287705232736964">"Пайдалану циклын орнату…"</item>
@@ -106,7 +163,10 @@
<item msgid="7330627471456865502">"MSCHAPV2"</item>
<item msgid="6255179395132581882">"GTC"</item>
</string-array>
- <!-- no translation found for wifi_ip_settings:1 (4377002609760712163) -->
+ <string-array name="wifi_ip_settings">
+ <item msgid="2717196390555072244">"DHCP"</item>
+ <item msgid="4377002609760712163">"Статикалық"</item>
+ </string-array>
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"Ешқандай"</item>
<item msgid="1464741437353223198">"Қолмен"</item>
@@ -226,11 +286,73 @@
<item msgid="1165623660533024666">"фонда іске қосу"</item>
<item msgid="6423861043647911030">"арнайы мүмкіндіктердің дыбыс деңгейі"</item>
</string-array>
- <!-- no translation found for app_ops_labels:3 (7836406246005211990) -->
- <!-- no translation found for app_ops_labels:4 (3951439024549922598) -->
- <!-- no translation found for app_ops_labels:8 (3597797992398484655) -->
- <!-- no translation found for app_ops_labels:20 (3037159047591081136) -->
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Орналасу"</item>
+ <item msgid="6656077694190491067">"Орналасу"</item>
+ <item msgid="8790228218278477369">"Орналасу"</item>
+ <item msgid="7836406246005211990">"Діріл"</item>
+ <item msgid="3951439024549922598">"Контактілерді оқу"</item>
+ <item msgid="8802152411647068">"Контактілерді жөндеу"</item>
+ <item msgid="229544934599698735">"Қоңыраулар тіркелімін оқу"</item>
+ <item msgid="7396102294405899613">"Қоңыраулар тіркелімін өзгерту"</item>
+ <item msgid="3597797992398484655">"Күнтізбені оқу"</item>
+ <item msgid="2705975774250907343">"Күнтізбені жөндеу"</item>
+ <item msgid="4668747371441932697">"Орналасу"</item>
+ <item msgid="1487578921720243646">"Пост хабарлары"</item>
+ <item msgid="4636080349724146638">"Орналасу"</item>
+ <item msgid="673510900286463926">"Қоңырау шалу"</item>
+ <item msgid="542083422784609790">"SMS/MMS оқу"</item>
+ <item msgid="1033780373029588436">"SMS/MMS жазу"</item>
+ <item msgid="5647111115517787488">"SMS/MMS алу"</item>
+ <item msgid="8591105601108455893">"SMS/MMS алу"</item>
+ <item msgid="7730995008517841903">"SMS/MMS алу"</item>
+ <item msgid="2613033109026626086">"SMS/MMS алу"</item>
+ <item msgid="3037159047591081136">"SMS/MMS жіберу"</item>
+ <item msgid="4726682243833913568">"SMS/MMS оқу"</item>
+ <item msgid="6555678522277865572">"SMS/MMS жазу"</item>
+ <item msgid="6981734935578130884">"Параметрлерді өзгерту"</item>
+ <item msgid="8705854389991425629">"Үстінен сызу"</item>
+ <item msgid="5861356020344153651">"Хабарларға кіру"</item>
+ <item msgid="78432174621628659">"Камера"</item>
+ <item msgid="3986116419882154794">"Аудио жазу"</item>
+ <item msgid="4516840825756409490">"Аудио ойнату"</item>
+ <item msgid="6811712502798183957">"Ақпарат алмастыру қорын оқу"</item>
+ <item msgid="2780369012602289114">"Ақпарат алмастыру қорын өзгерту"</item>
+ <item msgid="2331359440170850868">"Meдиа түймелері"</item>
+ <item msgid="6133599737122751231">"Аудио көздеу"</item>
+ <item msgid="6844485713404805301">"Негізгі дыбыс"</item>
+ <item msgid="1600379420669104929">"Дыбыс қаттылығы"</item>
+ <item msgid="6296768210470214866">"Қоңыраудың дыбыс деңгейі"</item>
+ <item msgid="510690696071629241">"Mультимeдиа дыбыс деңгейі"</item>
+ <item msgid="406861638631430109">"Оятқыштың дыбыс деңгейі"</item>
+ <item msgid="4715864795872233884">"Хабарландырудың дыбыс деңгейі"</item>
+ <item msgid="2311478519251301183">"Bluetooth дыбысының қаттылығы"</item>
+ <item msgid="5133991377896747027">"Ұйқы бермеу"</item>
+ <item msgid="2464189519136248621">"Орын"</item>
+ <item msgid="2062677934050803037">"Орналасу"</item>
+ <item msgid="1735171933192715957">"Пайдалану статистикасын алу"</item>
+ <item msgid="1014093788778383554">"Микрофон дыбысын өшіру/қосу"</item>
+ <item msgid="4199297950608622850">"Қалқымалы хабарландыру көрсету"</item>
+ <item msgid="2527962435313398821">"Жоба тасушысы"</item>
+ <item msgid="5117506254221861929">"VPN функциясын белсендіру"</item>
+ <item msgid="8291198322681891160">"Артқы фонды жазу"</item>
+ <item msgid="7106921284621230961">"Көмекші құрылым"</item>
+ <item msgid="4496533640894624799">"Көмекші скриншот"</item>
+ <item msgid="2598847264853993611">"Телефон күйін оқу"</item>
+ <item msgid="9215610846802973353">"Дауыстық хабар қосу"</item>
+ <item msgid="9186411956086478261">"SIP пайдалану"</item>
+ <item msgid="6884763100104539558">"Шығыс қоңырауды өңдеу"</item>
+ <item msgid="125513972170580692">"Саусақ ізі"</item>
+ <item msgid="2556071024281275619">"Дене датчиктері"</item>
+ <item msgid="617168514928339387">"Ұялы таратылымдарды оқу"</item>
+ <item msgid="7134693570516523585">"Жалған орын"</item>
+ <item msgid="7224489175375229399">"Жадты оқу"</item>
+ <item msgid="8472735063903258202">"Жадқа жазу"</item>
+ <item msgid="4069276819909595110">"Экранды қосу"</item>
+ <item msgid="1228338896751121025">"Есептік жазбаларды алу"</item>
+ <item msgid="3181581793459233672">"Фонда іске қосу"</item>
+ <item msgid="2340936043025374076">"Арнайы мүмкіндіктердің дыбыс деңгейі"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Қысқа"</item>
<item msgid="4816511817309094890">"Орташа"</item>
@@ -247,7 +369,13 @@
<item msgid="4627069151979553527">"Көлбеу"</item>
<item msgid="6896773537705206194">"Кішкене бас әріптер"</item>
</string-array>
- <!-- no translation found for captioning_font_size_selector_titles:3 (2784236342175159295) -->
+ <string-array name="captioning_font_size_selector_titles">
+ <item msgid="1680223634161592855">"Өте кішкене"</item>
+ <item msgid="5091603983404027034">"Кішкене"</item>
+ <item msgid="176844712416932112">"Орташа"</item>
+ <item msgid="2784236342175159295">"Үлкен"</item>
+ <item msgid="218913203203160606">"Өте үлкен"</item>
+ </string-array>
<string-array name="captioning_edge_type_selector_titles">
<item msgid="3865198759294188069">"Әдепкі"</item>
<item msgid="6488643537808152001">"Ешқандай"</item>
@@ -262,7 +390,14 @@
<item msgid="1874668269931014581">"75%"</item>
<item msgid="6462911487571123954">"100%"</item>
</string-array>
- <!-- no translation found for captioning_preset_selector_titles:2 (5891360837786277638) -->
+ <string-array name="captioning_preset_selector_titles">
+ <item msgid="326819345272910536">"Әдепкі параметр"</item>
+ <item msgid="8611890312638868524">"Қара түсте ақпен"</item>
+ <item msgid="5891360837786277638">"Ақта қарамен"</item>
+ <item msgid="2798457065945456853">"Қара түсте сарымен"</item>
+ <item msgid="5799049811524553967">"Көк түсте сарымен"</item>
+ <item msgid="3673930830658169860">"Арнаулы"</item>
+ </string-array>
<string-array name="vpn_types_long">
<item msgid="6566768880689730097">"PPTP VPN"</item>
<item msgid="1349760781118368659">"L2TP/IPSec, пернелері ортақ ВЖЖ"</item>
@@ -275,15 +410,32 @@
<item msgid="2958623927055120839">"Ешқандай"</item>
<item msgid="1157046369795346308">"Қолмен"</item>
</string-array>
- <!-- no translation found for vpn_states:4 (9135049670787351881) -->
+ <string-array name="vpn_states">
+ <item msgid="5408915841694583740">"Ажыратылған"</item>
+ <item msgid="8754480102834556765">"Бастауда…"</item>
+ <item msgid="3351334355574270250">"Қосылуда..."</item>
+ <item msgid="8303882153995748352">"Жалғанған"</item>
+ <item msgid="9135049670787351881">"Күту уақыты"</item>
+ <item msgid="2124868417182583926">"Сәтсіз"</item>
+ </string-array>
<string-array name="security_settings_premium_sms_values">
<item msgid="1164265643455394443">"Сұрау"</item>
<item msgid="7718817231348607934">"Әрқашан рұқсат емес"</item>
<item msgid="8184570120217958741">"Әрқашан рұқсат"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Орташа"</item>
+ <item msgid="5101233285497327432">"Орташа"</item>
+ <item msgid="1555861583162930714">"Төмен"</item>
+ <item msgid="1719683776264798117">"Маңызды"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Қалыпты"</item>
+ <item msgid="6107138933849816768">"Орташа"</item>
+ <item msgid="182695359839047859">"Төмен"</item>
+ <item msgid="8577246509202964244">"Өте аз"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Тұрақты"</item>
<item msgid="167418068739176448">"Ең жоғары белсенділік"</item>
@@ -304,7 +456,7 @@
<item msgid="3151827842194201728">"Көгілдір"</item>
<item msgid="3228505970082457852">"Көк"</item>
<item msgid="6590260735734795647">"Индиго түсі"</item>
- <item msgid="3521763377357218577">"Қызылкүрең"</item>
+ <item msgid="3521763377357218577">"Күлгін"</item>
<item msgid="5932337981182999919">"Қызғылт"</item>
<item msgid="5642914536624000094">"Қызыл"</item>
</string-array>
diff --git a/tests/CarDeveloperOptions/res/values-kk/strings.xml b/tests/CarDeveloperOptions/res/values-kk/strings.xml
index 83a5afd..2b89603 100644
--- a/tests/CarDeveloperOptions/res/values-kk/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-kk/strings.xml
@@ -83,12 +83,11 @@
<string name="font_size_summary" msgid="9120023206321191067">"Экрандағы мәтінді кішірейтеді немесе үлкейтеді."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Кішірек ету"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Үлкенірек ету"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Мәтін үлгісі"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Оз қаласының ғажап сиқыршысы"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"11-тарау: Ғажайып жасыл қала Оз"</string>
- <string name="font_size_preview_text_body" msgid="6803085337474390845">"Көздеріне жасыл көзілдірік таққан Дороти мен оның достары қалаға алғаш келгенде, оның ғажайып көркіне таңғалды. Әдемі жасыл мәрмәр үйлер көшені жағалай тізіліп тұр, бүкіл жерде жарқыраған зүбаржат тастар шашылып жатқандай. Мәрмәр жол да дәл сондай жап-жасыл, зүбаржат кірпіштен қаланған тұрғын үйлер күннен жарқырап тұр. Терезелердің әйнектері де жасыл шыныдан. Қала үстіндегі жасыл аспаннан жасыл түсті күн сәулесі түсіп тұр. \n\nКөшедегі ерлер, әйелдер мен балалар жасыл түсті киім киіп алған, олардың терілері де жасыл реңді екен. Олар Дороти мен оның әпенді достарына таңдана қарайды. Балалар Арыстанды көре сала қашып, аналарының артына тығылады. Сөйлесуге де ешкім батпайды ғой. Дороти көше бойындағы қаз-қатар дүкендердегі нәрселердің барлығы жасыл түсті екеніне тамсана қарайды. Бұл дүкендерде сатылатын кәмпиттер, поп-корн, аяқ киім, қалпақтар мен неше түрлі киімдер – барлығы жасыл еді. Бір кісі жасыл лимонад сатып тұр, балалар оны жасыл ақшаға сатып алып жатыр. \n\nМұнда жануарлар жоқ сияқты, ер адамдар заттарды кішкене жасыл арбамен алдына салып тасып барады. Барлығы бақытты, өмірге риза және уайымсыз секілді."</string>
+ <string name="font_size_preview_text_body" msgid="6803085337474390845">"Көздеріне жасыл көзілдірік таққан Дороти мен оның достары қалаға алғаш келгенде, оның ғажайып көркіне таңғалды. Әдемі жасыл мәрмәр үйлер көшені жағалай тізіліп тұр. Бүкіл жерде жарқыраған зүбаржат тастар шашылып жатқандай. Мәрмәр жол да дәл сондай жап-жасыл. Зүбаржат кірпіштен қаланған тұрғын үйлер күннен жарқырап тұр. Терезелердің әйнектері де жасыл шыныдан. Қала үстіндегі жасыл аспаннан жасыл түсті күн сәулесі түсіп тұр. \n\nКөшедегі ерлер, әйелдер мен балалар жасыл түсті киім киіп алған, олардың терілері де жасыл реңді екен. Олар Дороти мен оның әпенді достарына таңдана қарайды. Балалар Арыстанды көре сала қашып, аналарының артына тығылады. Сөйлесуге де ешкім батпайды ғой. Дороти көше бойындағы қаз-қатар дүкендердегі нәрселердің барлығы жасыл түсті екеніне тамсана қарайды. Бұл дүкендерде сатылатын кәмпиттер, поп-корн, аяқ киім, қалпақтар мен неше түрлі киімдер – барлығы жасыл еді. Бір кісі жасыл лимонад сатып тұр, балалар оны жасыл ақшаға сатып алып жатыр. \n\nМұнда жануарлар жоқ сияқты. Ер адамдар заттарды кішкене жасыл арбамен алдына салып тасып барады. Барлығы бақытты, өмірге риза және уайымсыз секілді."</string>
<string name="font_size_save" msgid="8652044574655753921">"Жарайды"</string>
<string name="sdcard_setting" product="nosdcard" msgid="1533784309105748696">"USB жады"</string>
<string name="sdcard_setting" product="default" msgid="8398782065765523178">"SD картасы"</string>
@@ -163,7 +162,7 @@
<string name="bluetooth_map_acceptance_dialog_text" msgid="736507842082640410">"%1$s хабарларыңызға кіруді қалайды. %2$s кірсін бе?"</string>
<string name="bluetooth_sap_request" msgid="6318039677671263261">"SIM картасына кіру сұрауы"</string>
<string name="bluetooth_sap_acceptance_dialog_text" msgid="1909352413109340355">"<xliff:g id="DEVICE_NAME_0">%1$s</xliff:g> сіздің SIM картаңызға кіруге рұқсат сұрайды. Ондай рұқсатты берсеңіз, байланыс барысында дерек тасымалы өшіріледі. <xliff:g id="DEVICE_NAME_1">%2$s?</xliff:g> құрылғысына рұқсат беру"</string>
- <string name="bluetooth_device_name_summary" msgid="8661066392056595005">"Басқа құрылғыларға \"<xliff:g id="DEVICE_NAME">^1</xliff:g>\" атымен көрінеді"</string>
+ <string name="bluetooth_device_name_summary" msgid="8661066392056595005">"Басқа құрылғыларға \"<xliff:g id="DEVICE_NAME">^1</xliff:g>\" атымен көрінеді."</string>
<string name="bluetooth_off_footer" msgid="7658444560543730571">"Басқа құрылғыларға қосылу үшін Bluetooth функциясын қосыңыз."</string>
<string name="bluetooth_paired_device_title" msgid="8361860197780425286">"Құрылғыларыңыз"</string>
<string name="bluetooth_pairing_page_title" msgid="9053463656712597709">"Жаңа құрылғымен жұптастыру"</string>
@@ -349,8 +348,8 @@
<string name="time_picker_title" msgid="1596400307061268660">"Уақыт"</string>
<string name="lock_after_timeout" msgid="7755520959071097304">"Aвтоматты құлыптау"</string>
<string name="lock_after_timeout_summary" msgid="3160517585613694740">"<xliff:g id="TIMEOUT_STRING">%1$s</xliff:g> ұйқыдан кейін"</string>
- <string name="lock_immediately_summary_with_exception" msgid="6442552135409347556">"Ұйықтаудан кейін бірден, <xliff:g id="TRUST_AGENT_NAME">%1$s</xliff:g> арқылы құлпы ашулы ұстаған кезді қоспағанда"</string>
- <string name="lock_after_timeout_summary_with_exception" msgid="7218267834086717545">"<xliff:g id="TRUST_AGENT_NAME">%2$s</xliff:g> ашық күйінде ұстап тұрмаса, ұйықтағаннан кейін <xliff:g id="TIMEOUT_STRING">%1$s</xliff:g> өткен соң"</string>
+ <string name="lock_immediately_summary_with_exception" msgid="6442552135409347556">"Ұйықтаудан кейін бірден (<xliff:g id="TRUST_AGENT_NAME">%1$s</xliff:g> ашық күйінде ұстап тұрмаса)"</string>
+ <string name="lock_after_timeout_summary_with_exception" msgid="7218267834086717545">"Ұйқыдан кейін <xliff:g id="TIMEOUT_STRING">%1$s</xliff:g> өткен соң (<xliff:g id="TRUST_AGENT_NAME">%2$s</xliff:g> ашық күйінде ұстап тұрмаса)"</string>
<string name="show_owner_info_on_lockscreen_label" msgid="4510756693837171575">"Құлыпталған экранда пайдаланушы ақпаратын көрсету"</string>
<string name="owner_info_settings_title" msgid="2537966178998339896">"Құлып экраны мәтіні"</string>
<string name="security_enable_widgets_title" msgid="1701510007926738088">"Виджеттерді қосу"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Профильдік ақпарат"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Есептік жазбалар"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Орналасу"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Орналасу дерегін пайдалану"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Орынды пайдалану"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Өшірулі"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Қосулы – <xliff:g id="COUNT_1">%1$d</xliff:g> қолданба геодеректерді пайдалана алады</item>
@@ -469,9 +468,9 @@
<string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"Сканерді түртіңіз"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Саусақты сканерге қойып, дірілді сезгеннен кейін көтеріңіз"</string>
<string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"Саусағыңызды алып, қайта түртіңіз"</string>
- <string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Саусақ ізінің басқа бөліктерін енгізу үшін саусағыңызды көтеріп тұрыңыз"</string>
+ <string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Саусақ ізінің басқа бөліктерін енгізу үшін саусағыңызды бір тигізіп, бір көтеріп тұрыңыз"</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"Саусақ ізі енгізілді"</string>
- <string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"Бұл белгіше шыққан кезде, саусақ ізі арқылы жеке басыңызды растаңыз не сатып алған нәрсені мақұлдаңыз"</string>
+ <string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"Осы белгіше шыққан кезде, саусақ ізі арқылы жеке басыңызды растаңыз не сатып алған нәрсені мақұлдаңыз"</string>
<string name="security_settings_fingerprint_enroll_enrolling_skip" msgid="1473280156532146933">"Кейінірек"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_title" msgid="2816424026528101690">"Саусақ ізін орнатуды өткізіп жіберу керек пе?"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_message" msgid="8139299964344809780">"Саусақ ізін пайдалануды телефон құлпын ашудың бір жолы ретінде таңдадыңыз. Қазір өткізіп жіберсеңіз, мұны кейінірек орнату керек. Орнату бір минутқа жақын уақыт алады."</string>
@@ -489,7 +488,7 @@
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"Бұл сенсор емес"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"Телефонның артындағы датчикті сұқ саусақпен түртіңіз."</string>
<string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"Тіркеу аяқталмады"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Саусақ ізін тіркеу уақытының шегіне жеттіңіз. Әрекетті қайталаңыз."</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Саусақ ізін тіркеу уақыты бітті. Әрекетті қайталаңыз."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"Саусақ ізін тіркеу нәтиже бермеді. Әрекетті қайталаңыз немесе басқа саусақты пайдаланыңыз."</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"Тағы біреуін енгізу"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"Келесі"</string>
@@ -502,7 +501,7 @@
<string name="fingerprint_last_delete_title" msgid="3104596858161269635">"Барлық саусақ іздерін жою керек пе?"</string>
<string name="fingerprint_delete_title" msgid="3120894112324235536">"\"<xliff:g id="FINGERPRINT_ID">%1$s</xliff:g>\" жою"</string>
<string name="fingerprint_delete_message" msgid="5895802741486967970">"Саусақ ізі жойылсын ба?"</string>
- <string name="fingerprint_last_delete_message" msgid="3346252479778971442">"Телефон құлпын ашу, сатып алуларды авторизациялау немесе олармен қолданбаларға кіру үшін саусақ іздерін пайдалана алмайсыз"</string>
+ <string name="fingerprint_last_delete_message" msgid="3346252479778971442">"Телефон құлпын ашу, сатып алу транзакцияларын мақұлдау немесе қолданбаларға кіру үшін саусақ іздерін пайдалана алмайсыз."</string>
<string name="fingerprint_last_delete_message_profile_challenge" msgid="5385095150532247025">"Жұмыс профилінің құлпын ашу, сатып алуды авторизациялау немесе жұмыс қолданбаларына кіру үшін саусақ ізін пайдалану мүмкін болмайды"</string>
<string name="fingerprint_last_delete_confirm" msgid="7984595457589664004">"Иә, жою"</string>
<string name="crypt_keeper_settings_title" msgid="839783588093862748">"Шифрлау"</string>
@@ -729,7 +728,7 @@
<string name="bluetooth_quick_toggle_summary" msgid="3951769568065428093">"Bluetooth құрылғысын қосу"</string>
<string name="bluetooth_settings" msgid="5228032727293770389">"Bluetooth"</string>
<string name="bluetooth_settings_title" msgid="7261244857456521825">"Bluetooth"</string>
- <string name="bluetooth_settings_summary" msgid="1221689092429277887">"Байланыстарды басқарып, құрылғы атауы мен табылу мүмкіндігін тағайындаңыз"</string>
+ <string name="bluetooth_settings_summary" msgid="1221689092429277887">"Байланыстарды басқару, құрылғының атауын және көріну мүмкіндігін реттеу"</string>
<string name="bluetooth_pairing_request" msgid="7221745525632573125">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> құрылғысымен жұптау керек пе?"</string>
<string name="bluetooth_pairing_key_msg" msgid="1139230917419961975">"Bluetooth жұптау коды"</string>
<string name="bluetooth_enter_passkey_msg" msgid="6205151011298670207">"Жұптау кодын теріңіз, содан кейін «Оралу» немесе «Енгізу» түймесін басыңыз"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Wi‑Fi қосу"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Wi-Fi пайдалану"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Wi-Fi пайдалану"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi‑Fi параметрлері"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Сымсыз қол жетімділік нүктесін орнату және басқару"</string>
@@ -858,7 +857,7 @@
<string name="wifi_poor_network_detection_summary" msgid="5539951465985614590">"Интернет байланысы жақсы болмаса, Wi‑Fi желісі қолданылмайды"</string>
<string name="wifi_avoid_poor_network_detection_summary" msgid="1976503191780928104">"Тек жақсы интернет байланысы бар желілерді пайдалану"</string>
<string name="use_open_wifi_automatically_title" msgid="3084513215481454350">"Ашық желілерге қосылу"</string>
- <string name="use_open_wifi_automatically_summary" msgid="8338020172673161754">"Жоғары сапалы ашық желілерге автоматты қосылу"</string>
+ <string name="use_open_wifi_automatically_summary" msgid="8338020172673161754">"Жоғары сапалы қоғамдық желілерге автоматты қосылу"</string>
<string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"Пайдалану үшін желіні бағалау провайдерін таңдаңыз"</string>
<string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"Пайдалану үшін үйлесімді желіні бағалау провайдерін таңдаңыз"</string>
<string name="wifi_install_credentials" msgid="5650088113710858289">"Сертификаттар орнату"</string>
@@ -915,13 +914,13 @@
<string name="wifi_ip_address" msgid="5572539114989914831">"IP мекенжайы"</string>
<string name="passpoint_label" msgid="7429247462404128615">"Сақталу жолы"</string>
<string name="passpoint_content" msgid="340527524510304327">"<xliff:g id="NAME">%1$s</xliff:g> тіркелгі деректері"</string>
- <string name="wifi_eap_method" msgid="3752116941487485859">"EAP (кеңейтілген растау протоколы) әдісі"</string>
- <string name="please_select_phase2" msgid="5848080896810435677">"Фаза 2 растауы"</string>
+ <string name="wifi_eap_method" msgid="3752116941487485859">"EAP әдісі"</string>
+ <string name="please_select_phase2" msgid="5848080896810435677">"Аутентификацияның 2-сатысы"</string>
<string name="wifi_eap_ca_cert" msgid="1496395241849383785">"Растама мекемесінің сертификаты"</string>
<string name="wifi_eap_domain" msgid="3298302320003640130">"Домен"</string>
<string name="wifi_eap_user_cert" msgid="6786839531765719173">"Пайдаланушы сертификаты"</string>
<string name="wifi_eap_identity" msgid="5280457017705738773">"Бірлік"</string>
- <string name="wifi_eap_anonymous" msgid="6352344972490839958">"Анонимді бірлік"</string>
+ <string name="wifi_eap_anonymous" msgid="6352344972490839958">"Белгісіз"</string>
<string name="wifi_password" msgid="6942983531275177771">"Құпия сөз"</string>
<string name="wifi_show_password" msgid="7878398590772942202">"Құпия сөзді көрсету"</string>
<string name="wifi_ap_band_config" msgid="6565016368079288433">"Wi-Fi жиілік ауқымын таңдау"</string>
@@ -934,7 +933,7 @@
<string name="wifi_ap_band_select_one" msgid="4409754936554360355">"Wi‑Fi хотспоты үшін кемінде бір диапазонды таңдаңыз:"</string>
<string name="wifi_ip_settings" msgid="4636102290236116946">"IP параметрлері"</string>
<string name="wifi_privacy_settings" msgid="4462092795794247809">"Құпиялылық"</string>
- <string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"Еркін таңдалған MAC"</string>
+ <string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"Кездейсоқ MAC"</string>
<string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"Құрылғыны қосу"</string>
<string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"Құрылғыны “<xliff:g id="SSID">%1$s</xliff:g>” желісіне қосу үшін төмендегі QR кодын ортасына туралаңыз"</string>
<string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"QR кодын сканерлеу"</string>
@@ -964,7 +963,7 @@
<string name="wifi_dpp_lockscreen_title" msgid="3910665850075275963">"Сіз екеніңізді растаңыз"</string>
<string name="wifi_dpp_wifi_password" msgid="8007558344032612455">"Wi-Fi құпия сөзі: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
<string name="wifi_dpp_hotspot_password" msgid="6172326289042241924">"Хотспот құпия сөзі: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
- <string name="wifi_dpp_add_device" msgid="1347056725253936358">"Құрылғы енгізу"</string>
+ <string name="wifi_dpp_add_device" msgid="1347056725253936358">"Құрылғы қосу"</string>
<string name="wifi_dpp_connect_network_using_qr_code" msgid="115993715600532357">"Бұл желіге QR коды арқылы кіріңіз."</string>
<string name="retry" msgid="8500839563577344702">"Қайталау"</string>
<string name="wifi_shared" msgid="5054256778276524960">"Басқа құрылғы пайдаланушыларымен бөлісу"</string>
@@ -1037,8 +1036,8 @@
<string name="wifi_ip_settings_invalid_gateway" msgid="7602732367437862422">"Жарамды торап мекенжайын теріңіз."</string>
<string name="wifi_ip_settings_invalid_dns" msgid="4471473055625376300">"Жарамды DNS мекенжайын теріңіз."</string>
<string name="wifi_ip_settings_invalid_network_prefix_length" msgid="392977552691002076">"Желі префиксінің ұзындығын 0 және 32 аралығында теріңіз"</string>
- <string name="wifi_dns1" msgid="5250809981658822505">"DNS 1 (домен атауы жүйесі)"</string>
- <string name="wifi_dns2" msgid="1905876166783761641">"DNS 2 (домен атауы жүйесі)"</string>
+ <string name="wifi_dns1" msgid="5250809981658822505">"DNS 1"</string>
+ <string name="wifi_dns2" msgid="1905876166783761641">"DNS 2"</string>
<string name="wifi_gateway" msgid="7455334454444443397">"Торап"</string>
<string name="wifi_network_prefix_length" msgid="1941206966133010633">"Желі префиксінің ұзындығы"</string>
<string name="wifi_p2p_settings_title" msgid="3213180637906683308">"Wi‑Fi Direct"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Мобильдік"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Егер Wi‑Fi қолжетімді болмаса, мобильдік желі пайдаланылады."</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Мобильдік желі қолжетімді болмаса, Wi‑Fi пайдалану"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Wi‑Fi арқылы қоңырау шалу. Wi‑Fi байланысы жоғалса, қоңырау аяқталады."</string>
@@ -1207,7 +1209,7 @@
<string name="adaptive_sleep_summary_on" msgid="6670369739228487082">"Қосулы кезде экранға қарап тұрсаңыз, ол өшпейді."</string>
<string name="adaptive_sleep_summary_off" msgid="2891586225954973431">"Өшірулі"</string>
<string name="adaptive_sleep_description" msgid="812673735459170009">"Экранға қарап тұрған кезде, оның өшуіне жол бермейді."</string>
- <string name="adaptive_sleep_privacy" msgid="5706802215479902623">"Адаптивті ұйқы режимі экранға қараған адамды тану үшін алдыңғы камераны пайдаланады. Ол құрылғыда жұмыс істейді, суреттер Google жүйесінде сақталмайды және оған жіберілмейді."</string>
+ <string name="adaptive_sleep_privacy" msgid="5706802215479902623">"\"Экран сезімталдығы\" функциясы алдыңғы камера арқылы экранға адамның қарап тұрғанын тани алады. Ол құрылғыда ғана жұмыс істейді. Суреттер Google жүйесінде сақталмайды және оған жіберілмейді."</string>
<string name="night_display_title" msgid="1305002424893349814">"Түнгі жарық"</string>
<string name="night_display_text" msgid="5330502493684652527">"\"Түнгі жарық\" функциясы экраныңызға ашық сары реңк береді. Бұл қараңғыда экранға қарауды жеңілдетеді әрі жылдам ұйықтауға да көмектесуі мүмкін."</string>
<string name="night_display_auto_mode_title" msgid="8493573087102481588">"Уақыт кестесі"</string>
@@ -1456,7 +1458,7 @@
<string name="storage_detail_system" msgid="6784247618772153283">"Жүйе"</string>
<string name="storage_detail_explore" msgid="8206900269596580264">"<xliff:g id="NAME">^1</xliff:g> ашу"</string>
<string name="storage_detail_dialog_other" msgid="5073511663616043370">"Басқаларында қолданбалар сақтаған файлдар, интернет немесе Bluetooth арқылы жүктелген файлдар, Android файлдары, т.б. қамтылады. \n\n<xliff:g id="NAME">^1</xliff:g> құрылғысындағы мазмұндарды көру үшін \"Зерттеу\" түймесін түртіңіз."</string>
- <string name="storage_detail_dialog_system" msgid="1472572861360014226">"Жүйе Android <xliff:g id="VERSION">%s</xliff:g> нұсқасын іске қосуға пайдаланылатын файлдарды қамтиды"</string>
+ <string name="storage_detail_dialog_system" msgid="1472572861360014226">"\"Жүйе\" қалтасында Android <xliff:g id="VERSION">%s</xliff:g> жұмысына қажетті файлдар орналасқан."</string>
<string name="storage_detail_dialog_user" msgid="1663117417635010371">"<xliff:g id="USER_0">^1</xliff:g> жадта <xliff:g id="SIZE">^2</xliff:g> орын алатын суреттерді, музыка файлдарын, қолданбаларды не басқа деректерді сақтаған болуы керек. \n\nМәліметтерді көру үшін <xliff:g id="USER_1">^1</xliff:g> есептік жазбасына кіріңіз."</string>
<string name="storage_wizard_init_title" msgid="3407283236421089014">"<xliff:g id="NAME">^1</xliff:g> орнату"</string>
<string name="storage_wizard_init_external_title" msgid="6853250619674645478">"Портативті жад ретінде пайдалану"</string>
@@ -1635,9 +1637,9 @@
<string name="sms_change_default_dialog_title" msgid="6301260161969667578">"SMS қолданбасы өзгертілсін бе?"</string>
<string name="sms_change_default_dialog_text" msgid="8275088077930942680">"<xliff:g id="NEW_APP">%1$s</xliff:g> қолданбасы <xliff:g id="CURRENT_APP">%2$s</xliff:g> орнына SMS қолданбасы ретінде қолданылсын ба?"</string>
<string name="sms_change_default_no_previous_dialog_text" msgid="4680224695080527907">"<xliff:g id="NEW_APP">%s</xliff:g> қолданбасы SMS қолданбасы ретінде қолданылсын ба?"</string>
- <string name="network_scorer_picker_title" msgid="1691073966560952916">"Желі рейтингісін ұсынған"</string>
+ <string name="network_scorer_picker_title" msgid="1691073966560952916">"Желіні бағалау провайдері"</string>
<string name="network_scorer_picker_none_preference" msgid="6448280557733231737">"Ешқандай"</string>
- <string name="network_scorer_change_active_dialog_title" msgid="4274159562371475090">"Wi‑Fi assistant өзгерту керек пе?"</string>
+ <string name="network_scorer_change_active_dialog_title" msgid="4274159562371475090">"Wi‑Fi көмек құралын ауыстыру керек пе?"</string>
<string name="network_scorer_change_active_dialog_text" msgid="4264089809189760730">"Желілік байланыстарды басқару үшін <xliff:g id="CURRENT_APP">%2$s</xliff:g> орнына <xliff:g id="NEW_APP">%1$s</xliff:g> қолданбасын пайдалану керек пе?"</string>
<string name="network_scorer_change_active_no_previous_dialog_text" msgid="6394483538843474495">"Желілік байланыстарды басқару үшін <xliff:g id="NEW_APP">%s</xliff:g> қолданбасын пайдалану керек пе?"</string>
<string name="mobile_unknown_sim_operator" msgid="872589370085135817">"Белгісіз SIM операторы"</string>
@@ -1840,8 +1842,8 @@
<string name="show_running_services" msgid="1895994322704667543">"Қосылған қызметтерді көрсету"</string>
<string name="show_background_processes" msgid="88012264528093617">"Кэштелген үрдістерді көрсету"</string>
<string name="default_emergency_app" msgid="286530070173495823">"Төтенше жағдай қолданбасы"</string>
- <string name="reset_app_preferences" msgid="1426500030595212077">"Қолданба реттеуін бастапқы күйге қайтару"</string>
- <string name="reset_app_preferences_title" msgid="792909865493673598">"Қолданба реттеулері бастапқы күйге қайтарылсын ба?"</string>
+ <string name="reset_app_preferences" msgid="1426500030595212077">"Қолданба параметрлерін бастапқы күйге қайтару"</string>
+ <string name="reset_app_preferences_title" msgid="792909865493673598">"Қолданба параметрлері бастапқы күйге қайтарылсын ба?"</string>
<string name="reset_app_preferences_desc" msgid="7935273005301096031">"Төмендегі реттеулер бастапқы күйге қайтарылады: \n\n "<li>"Өшірілген қолданбалар"</li>\n" "<li>"Өшірілген қолданба хабарландырулары"</li>\n" "<li>"Әрекеттерге арналған әдепкі қолданбалар"</li>\n" "<li>"Фондық режимдегі дерек тасымалын шектеу"</li>\n" "<li>"Қандай да бір рұқсат шектеулері"</li>\n\n" Қолданба деректері жоғалмайды."</string>
<string name="reset_app_preferences_button" msgid="2041894727477934656">"Бастапқы күйге қайтару"</string>
<string name="manage_space_text" msgid="6166469422303124302">"Кеңістікті басқару"</string>
@@ -2039,9 +2041,9 @@
<string name="vision_settings_description" msgid="3476589459009287332">"Бұл құрылғыны қажеттіліктерге сай реттей аласыз. Бұл арнайы мүмкіндіктерді кейінірек \"Параметрлер\" тармағында өзгертуге болады."</string>
<string name="vision_settings_suggestion_title" msgid="7268661419110951128">"Қаріп өлшемін өзгерту"</string>
<string name="screen_reader_category_title" msgid="6300714148519645544">"Экранды оқу құралдары"</string>
- <string name="audio_and_captions_category_title" msgid="6140472938769619212">"Аудиомазмұн және экранға шығатын мәтін"</string>
+ <string name="audio_and_captions_category_title" msgid="6140472938769619212">"Аудио және экранға шығатын мәтін"</string>
<string name="display_category_title" msgid="545168481672250195">"Дисплей"</string>
- <string name="interaction_control_category_title" msgid="8775039211811947683">"Өзара әрекеттестікті басқару элементтері"</string>
+ <string name="interaction_control_category_title" msgid="8775039211811947683">"Басқару элементтері"</string>
<string name="user_installed_services_category_title" msgid="4288689493753221319">"Жүктеп алынған қызметтер"</string>
<string name="experimental_category_title" msgid="3797000069740110717">"Эксперименттік"</string>
<string name="feature_flags_dashboard_title" msgid="3153034144122754381">"Функция жалаушалары"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Хабарландыру дірілі"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Қоңырау дірілі"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Түрту дірілі"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Қызметті пайдалану"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Түсті түзету функциясын пайдалану"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Субтитр пайдалану"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Қызметті пайдалану"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Түсті түзету функциясын пайдалану"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Субтитрлерді пайдалану"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Жалғастыру"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Есту аппараттары"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Есту аппараты жалғанбаған"</string>
@@ -2275,9 +2277,9 @@
<string name="battery_tip_smart_battery_title" product="tablet" msgid="203494973250969040">"Планшет батареясының қызметтік мерзімін ұзартыңыз"</string>
<string name="battery_tip_smart_battery_title" product="device" msgid="7419448992583346364">"Құрылғы батареясының қызметтік мерзімін ұзартыңыз"</string>
<string name="battery_tip_smart_battery_summary" msgid="5344821856478265778">"Battery Manager функциясын қосыңыз"</string>
- <string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"Battery Saver функциясын қосыңыз"</string>
+ <string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"Battery Saver функциясын қосу"</string>
<string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Батареяның заряды тез азаюы мүмкін"</string>
- <string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"Battery Saver қосулы"</string>
+ <string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"Батареяны үнемдеу режимі қосулы"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"Кейбір функциялар шектелуі мүмкін"</string>
<string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Телефон әдеттегіден көп қолданылды"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"Планшет әдеттегіден көп қолданылды"</string>
@@ -2367,7 +2369,7 @@
<string name="power_phone" msgid="4644276202135343197">"Дыбыс қоңыраулары"</string>
<string name="power_idle" product="tablet" msgid="5220710816048070792">"Планшет бос"</string>
<string name="power_idle" product="default" msgid="440519902393849215">"Күту режимі"</string>
- <string name="power_unaccounted" msgid="327460424681976487">"Әр түрлі"</string>
+ <string name="power_unaccounted" msgid="327460424681976487">"Әртүрлі"</string>
<string name="power_overcounted" msgid="8336743020857416490">"Артық есептелген"</string>
<string name="usage_type_cpu" msgid="1128777292301436265">"Барлық CPU (орталық өңдеу бірлігі)"</string>
<string name="usage_type_cpu_foreground" msgid="5496661858574622156">"CPU (орталық процессор) алғы шебі"</string>
@@ -2444,7 +2446,7 @@
<string name="process_kernel_label" msgid="4175060316414593760">"Android операциялық жүйесі"</string>
<string name="process_mediaserver_label" msgid="8591722404282619153">"Meдиасервері"</string>
<string name="process_dex2oat_label" msgid="8249082119748556085">"Қолданбаны оңтайландыру"</string>
- <string name="battery_saver" msgid="3989710213758938398">"Battery Saver"</string>
+ <string name="battery_saver" msgid="3989710213758938398">"Батареяны үнемдеу режимі"</string>
<string name="battery_saver_auto_title" msgid="4158659069641849952">"Автоматты түрде қосу"</string>
<string name="battery_saver_auto_no_schedule" msgid="739814529432092706">"Кесте жоқ"</string>
<string name="battery_saver_auto_routine" msgid="886514412067906980">"Әрекеттеріңіз негізінде"</string>
@@ -2453,13 +2455,13 @@
<string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"Заряд деңгейі <xliff:g id="PERCENT">%1$s</xliff:g> болғанда, қосылады"</string>
<string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Кестені белгілеу"</string>
<string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"Толық зарядталғанда өшіру"</string>
- <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"Телефон заряды <xliff:g id="PERCENT">%1$s</xliff:g> болғанда, Battery Saver өшіріледі."</string>
+ <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"Телефон заряды <xliff:g id="PERCENT">%1$s</xliff:g> болғанда, Батареяны үнемдеу режимі өшеді."</string>
<string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"Планшет заряды <xliff:g id="PERCENT">%1$s</xliff:g> болғанда, Battery Saver өшіріледі."</string>
<string name="battery_saver_sticky_description_new" product="device" msgid="5056520668081504111">"Құрылғы заряды <xliff:g id="PERCENT">%1$s</xliff:g> болғанда, Battery Saver өшіріледі."</string>
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Қосу"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"\"Battery Saver\" функциясын пайдалану"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Батареяны үнемдеу режимі функциясын пайдалану"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Автоматты түрде қосу"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Ешқашан"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"батарея заряды <xliff:g id="PERCENT">%1$s</xliff:g> болғанда"</string>
@@ -2512,7 +2514,7 @@
<string name="tts_sliders_title" msgid="1927481069989092278">"Сөйлеу жылдамдығы және екпін"</string>
<string name="tts_engine_section_title" msgid="7796486438271227076">"Жүйе"</string>
<string name="tts_install_voice_title" msgid="3143328760690690254">"Дауыс"</string>
- <string name="tts_spoken_language" msgid="8057256621711361944">"Сөйлесу тілі"</string>
+ <string name="tts_spoken_language" msgid="8057256621711361944">"Дыбысталу тілі"</string>
<string name="tts_install_voices_title" msgid="363811937643579286">"Дауыстарды орнату"</string>
<string name="tts_install_voices_text" msgid="7464832428439739995">"Дауыстарды орнату үшін <xliff:g id="TTS_APP_NAME">%s</xliff:g> қолданбасына өту"</string>
<string name="tts_install_voices_open" msgid="686776451008134790">"Қолданбаны ашу"</string>
@@ -2604,7 +2606,7 @@
<string name="background_data_summary" msgid="799640633948841990">"Қолданбалар деректерді синхрондау, жіберу жұмыстарын орындайды және кез келген уақытта қабылдай алады."</string>
<string name="background_data_dialog_title" msgid="8306650658158895976">"Жалпы мағлұматтар дерекқоры істен шығарылсын ба?"</string>
<string name="background_data_dialog_message" msgid="8126774244911656527">"Артқы шеп деректерін өшіру батарея жұмысын ұзартады және дерек қолданысын азайтады. Кейбір қолданбалар сонда да артқы шеп байланысын қолдануы мүмкін."</string>
- <string name="sync_automatically" msgid="5746117156896468099">"Қолданба дерекқорын авто синхрондау"</string>
+ <string name="sync_automatically" msgid="5746117156896468099">"Қолданба дерегін автосинхрондау"</string>
<string name="sync_enabled" msgid="535172627223336983">"Синхронизация ҚОСУЛЫ"</string>
<string name="sync_disabled" msgid="713721807204805062">"Синх ӨШІРУЛІ"</string>
<string name="sync_error" msgid="988155155932442765">"Синх қателігі"</string>
@@ -2664,12 +2666,12 @@
<string name="data_usage_menu_show_ethernet" msgid="2130574690318410238">"Этернет қолданысын көрсету"</string>
<string name="data_usage_menu_hide_ethernet" msgid="1191233197312414533">"Ethernet пайдал-ды жасыру"</string>
<string name="data_usage_menu_metered" msgid="3087525150259956831">"Желілік шектеулер"</string>
- <string name="data_usage_menu_auto_sync" msgid="3350154877737572146">"Дерекқорды авто-синхрондау"</string>
+ <string name="data_usage_menu_auto_sync" msgid="3350154877737572146">"Деректі автосинхрондау"</string>
<string name="data_usage_menu_sim_cards" msgid="8508154611676507088">"SIM карталары"</string>
<string name="data_usage_cellular_data_summary" msgid="9162777397135709280">"Шектеуде кідіртілген"</string>
<string name="account_settings_menu_auto_sync" msgid="2673669556006027506">"Деректерді автосинхрондау"</string>
- <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"Жеке деректерді авто-синхрондау"</string>
- <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Жұмыс деректерін авто-синхрондау"</string>
+ <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"Жеке деректі автосинхрондау"</string>
+ <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Жұмыс дерегін автосинхрондау"</string>
<string name="data_usage_change_cycle" msgid="447761920472170031">"Айналымды өзгерту…"</string>
<string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"Дерекқор қолдану айналымын қайта реттеу күні:"</string>
<string name="data_usage_empty" msgid="7981405723435034032">"Бұл уақыт аралығында ешқандай қолданба дерек пайдаланған жоқ."</string>
@@ -2848,7 +2850,7 @@
<string name="user_settings_title" msgid="7917598650933179545">"Бірнеше пайдаланушы"</string>
<string name="user_settings_footer_text" product="device" msgid="4573858247439190545">"Жаңа пайдаланушыларды енгізу арқылы құрылғыны ортақ пайдаланыңыз. Әр пайдаланушының құрылғыда арнаулы негізгі экрандар, есептік жазбалар, қолданбалар, параметрлер, т.б. үшін жеке профилі болады."</string>
<string name="user_settings_footer_text" product="tablet" msgid="780018221428132918">"Жаңа пайдаланушыларды енгізу арқылы планшетті ортақ пайдаланыңыз. Әр пайдаланушының планшетте арнаулы негізгі экрандар, есептік жазбалар, қолданбалар, параметрлер, т.б. үшін жеке профилі болады."</string>
- <string name="user_settings_footer_text" product="default" msgid="1470859614968237491">"Жаңа пайдаланушыларды енгізу арқылы телефонды ортақ пайдаланыңыз. Әр пайдаланушының телефонда арнаулы негізгі экрандар, есептік жазбалар, қолданбалар, параметрлер, т.б. үшін жеке профилі болады."</string>
+ <string name="user_settings_footer_text" product="default" msgid="1470859614968237491">"Басқа пайдаланушыларды қосу арқылы телефонды бөлісіп пайдалануға болады. Әр пайдаланушының өз негізгі экраны, есептік жазбалары, қолданбалары, параметрлері, т.б. үшін жеке профилі болады."</string>
<string name="user_list_title" msgid="6670258645246192324">"Пайдаланушылар мен профайлдар"</string>
<string name="user_add_user_or_profile_menu" msgid="4220679989900149336">"Пайдаланушы немесе профиль қосу"</string>
<string name="user_add_user_menu" msgid="9006572936456324794">"Пайдаланушы қосу"</string>
@@ -2871,7 +2873,7 @@
<string name="user_add_user_message_long" msgid="686637203224195465">"Қосымша профильдер жасай отырып, бұл құрылғыны басқалармен ортақ пайдалануға болады. Әр пайдаланушы қолданбаларды, тұсқағаздарды орнатып, профилін өз қалауынша реттей алады. Сондай-ақ барлығы ортақ қолданатын Wi‑Fi сияқты параметрлерді де реттеуге болады.\n\nЖаңа пайдаланушы енгізілгенде, ол өз профилін реттеуі керек болады.\n\nКез келген пайдаланушы барлық басқа пайдаланушылар үшін қолданбаларды жаңарта алады. Арнайы мүмкіндіктерге қатысты параметрлер мен қызметтер жаңа пайдаланушыға өтпейді."</string>
<string name="user_add_user_message_short" msgid="1802594476285458254">"Жаңа пайдаланушыны қосқанда сол адам өз кеңістігін реттеуі керек.\n\nКез келген пайдаланушы барлық басқа пайдаланушылар үшін қолданбаларды жаңарта алады."</string>
<string name="user_setup_dialog_title" msgid="6748950002206392396">"Профиль құру керек пе?"</string>
- <string name="user_setup_dialog_message" msgid="2988559933258353919">"Пайдаланушы құрылығыны алып, өз профилін реттеуі керек."</string>
+ <string name="user_setup_dialog_message" msgid="2988559933258353919">"Пайдаланушы құрылғыны алып, өз профилін реттеуі керек."</string>
<string name="user_setup_profile_dialog_message" msgid="7611900802824048526">"Профайл қазір жасақталсын ба?"</string>
<string name="user_setup_button_setup_now" msgid="4941459406266856176">"Қазір құру"</string>
<string name="user_setup_button_setup_later" msgid="6596031428556518752">"Қазір емес"</string>
@@ -2880,7 +2882,7 @@
<string name="user_cannot_add_accounts_message" msgid="5993561303748749097">"Шектелген профайлдардың есептік жазба қосу мүмкіндігі жоқ"</string>
<string name="user_remove_user_menu" msgid="3505139157217459864">"<xliff:g id="USER_NAME">%1$s</xliff:g> осы құралдан жою"</string>
<string name="user_lockscreen_settings" msgid="3820813814848394568">"Құлып экранының параметрлері"</string>
- <string name="user_add_on_lockscreen_menu" msgid="5211604808199585774">"Пайдаланушыларды құлып экранынан енгізу"</string>
+ <string name="user_add_on_lockscreen_menu" msgid="5211604808199585774">"Құлыптаулы экраннан пайдаланушыларды енгізу"</string>
<string name="user_new_user_name" msgid="3880395219777884838">"Жаңа пайдаланушы"</string>
<string name="user_new_profile_name" msgid="3074939718101489937">"Жаңа профайл"</string>
<string name="user_confirm_remove_self_title" msgid="6739480453680217543">"Өзіңізді жоясыз ба?"</string>
@@ -2923,7 +2925,7 @@
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"Басқа төлем қолданбасы ашық кезді қоспағанда"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"\"Tap & pay\" терминалында төлеу жолы:"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"Терминалда төлеу"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Төлем қолданбасын орнатыңыз. Содан кейін жай телефонның артқы жағын тигізбейтін таңбасы бар кез келген терминал жанында ұстап тұрыңыз."</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Төлем қолданбасын реттеңіз. Содан кейін телефонның артқы жағын контактісіз төлем таңбасы бар терминалға жақындатыңыз."</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"Түсінікті"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"Қосымша…"</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"Қалаулы ретінде реттеу қажет пе?"</string>
@@ -3005,8 +3007,8 @@
<string name="sim_editor_number" msgid="1757338150165234970">"Нөмір"</string>
<string name="sim_editor_color" msgid="373059962306191123">"SIM түсі"</string>
<string name="sim_card_select_title" msgid="4925862525985187946">"SIM картасын таңдау"</string>
- <string name="color_orange" msgid="3159707916066563431">"Сарғылт"</string>
- <string name="color_purple" msgid="4391440966734810713">"Қызылкүрең"</string>
+ <string name="color_orange" msgid="3159707916066563431">"Қызғылт сары"</string>
+ <string name="color_purple" msgid="4391440966734810713">"Күлгін"</string>
<string name="sim_no_inserted_msg" msgid="1197884607569714609">"SIM карталары салынбаған"</string>
<string name="sim_status_title" msgid="4483653750844520871">"SIM күйі"</string>
<string name="sim_status_title_sim_slot" msgid="416005570947546124">"SIM картасының күйі (sim ұясы: %1$d)"</string>
@@ -3034,8 +3036,8 @@
<string name="network_dashboard_summary_data_usage" msgid="4695629715072542102">"дерек шығыны"</string>
<string name="network_dashboard_summary_hotspot" msgid="3928610802321995214">"хотспот"</string>
<string name="connected_devices_dashboard_title" msgid="7795222675849060444">"Жалғанған құрылғылар"</string>
- <string name="connected_devices_dashboard_summary" msgid="1072664369515033179">"Bluetooth, көлік жүргізу режимі, NFC"</string>
- <string name="connected_devices_dashboard_no_nfc_summary" msgid="2610085597733526722">"Bluetooth, көлік жүргізу режимі"</string>
+ <string name="connected_devices_dashboard_summary" msgid="1072664369515033179">"Bluetooth, автокөлік режимі, NFC"</string>
+ <string name="connected_devices_dashboard_no_nfc_summary" msgid="2610085597733526722">"Bluetooth, автокөлік режимі"</string>
<string name="connected_devices_dashboard_no_driving_mode_summary" msgid="3524409078596318803">"Bluetooth, NFC"</string>
<string name="connected_devices_dashboard_no_driving_mode_no_nfc_summary" msgid="7881286613528299400">"Bluetooth"</string>
<string name="app_and_notification_dashboard_title" msgid="8448096608058843730">"Қолданбалар мен хабарландырулар"</string>
@@ -3135,7 +3137,7 @@
<string name="media_volume_option_title" msgid="3553411883305505682">"Mультимeдиа дыбыс деңгейі"</string>
<string name="remote_media_volume_option_title" msgid="6355710054191873836">"Трансляцияның дыбыс деңгейі"</string>
<string name="call_volume_option_title" msgid="5028003296631037334">"Сөйлескендегі дыбыс деңгейі"</string>
- <string name="alarm_volume_option_title" msgid="3184076022438477047">"Дабылдың дыбыс деңгейі"</string>
+ <string name="alarm_volume_option_title" msgid="3184076022438477047">"Оятқыштың дыбыс деңгейі"</string>
<string name="ring_volume_option_title" msgid="2038924918468372264">"Қоңыраудың дыбыс деңгейі"</string>
<string name="notification_volume_option_title" msgid="1358512611511348260">"Хабарландырудың дыбыс деңгейі"</string>
<string name="ringtone_title" msgid="1409086028485922583">"Телефон әуені"</string>
@@ -3160,7 +3162,7 @@
<string name="emergency_tone_vibrate" msgid="5020068066905681181">"Діріл"</string>
<string name="boot_sounds_title" msgid="7583926202411353620">"Дыбыстарды қосу"</string>
<string name="live_caption_title" msgid="7926591158657997051">"Live Caption"</string>
- <string name="live_caption_summary" msgid="9064771862352393125">"Автоматты субтитр мультимедиасы"</string>
+ <string name="live_caption_summary" msgid="9064771862352393125">"Автоматты субтитр қосу"</string>
<string name="zen_mode_settings_summary_off" msgid="6929319200478424962">"Ешқашан"</string>
<plurals name="zen_mode_settings_summary_on" formatted="false" msgid="6061723291126091396">
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> іске қосылды</item>
@@ -3174,7 +3176,7 @@
<string name="zen_mode_behavior_no_sound" msgid="7290387625018248748">"Дыбыссыз"</string>
<string name="zen_mode_behavior_total_silence" msgid="371498357539257671">"Толық тыныштық"</string>
<string name="zen_mode_behavior_no_sound_except" msgid="8894465423364103198">"<xliff:g id="CATEGORIES">%1$s</xliff:g> санатынан басқа дыбыстар қосылмасын"</string>
- <string name="zen_mode_behavior_alarms_only" msgid="8406622989983047562">"Дабылдар мен медиа сигналдарынан басқа дыбыстар болмасын"</string>
+ <string name="zen_mode_behavior_alarms_only" msgid="8406622989983047562">"Оятқыштар мен мультимедиадан басқа дыбыстар болмасын"</string>
<string name="zen_mode_automation_settings_title" msgid="3916960043054489008">"Кестелер"</string>
<string name="zen_mode_delete_automatic_rules" msgid="2455264581527305755">"Кестелерді жою"</string>
<string name="zen_mode_schedule_delete" msgid="7786092652527516740">"Жою"</string>
@@ -3187,7 +3189,7 @@
<string name="zen_mode_schedule_title" msgid="5275268813192802631">"Кесте"</string>
<string name="zen_mode_use_automatic_rule" msgid="446326253915861824">"Кестені пайдалану"</string>
<string name="zen_mode_option_important_interruptions" msgid="5173944276846940149">"Маңыздылары ғана"</string>
- <string name="zen_mode_option_alarms" msgid="4843278125235203076">"Тек дабылдар"</string>
+ <string name="zen_mode_option_alarms" msgid="4843278125235203076">"Оятқыштар ғана"</string>
<string name="zen_mode_option_no_interruptions" msgid="4723700274519260852">"Толық тыныштық"</string>
<string name="zen_mode_summary_combination" msgid="6960111215170691605">"<xliff:g id="MODE">%1$s</xliff:g>: <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="zen_mode_visual_interruptions_settings_title" msgid="8378266552787406849">"Көрнекі мазалағыштарды бөгеу"</string>
@@ -3280,10 +3282,10 @@
<string name="zen_onboarding_dnd_visual_disturbances_header" msgid="7584229011611927613">"\"Мазаламау\" режиміндегі хабарландыру параметрлері өзгертілсін бе?"</string>
<string name="sound_work_settings" msgid="4140215240360927923">"Жұмыс профилінің дыбыстары"</string>
<string name="work_use_personal_sounds_title" msgid="531727195073003599">"Жеке профиль дыбыстарын пайдалану"</string>
- <string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"Жұмыс пен жеке профильдер үшін дыбысы қолданылады"</string>
+ <string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"Жұмыс профилі мен жеке профиль дыбыстары бірдей"</string>
<string name="work_ringtone_title" msgid="5499360583947410224">"Жұмыс телефонының рингтоны"</string>
<string name="work_notification_ringtone_title" msgid="8059159087214025757">"Әдепкі жұмыс хабарландыруының дыбысы"</string>
- <string name="work_alarm_ringtone_title" msgid="5328487181385375130">"Әдепкі жұмыс дабылының дыбысы"</string>
+ <string name="work_alarm_ringtone_title" msgid="5328487181385375130">"Әдепкі жұмыс оятқышының дыбысы"</string>
<string name="work_sound_same_as_personal" msgid="7728560881697159758">"Жеке профильдікімен бірдей"</string>
<string name="work_sync_dialog_title" msgid="4799120971202956837">"Дыбыстарды ауыстыру керек пе?"</string>
<string name="work_sync_dialog_yes" msgid="2110726233746476066">"Ауыстыру"</string>
@@ -3304,10 +3306,10 @@
<string name="hide_silent_icons_title" msgid="1070905516921542662">"Дыбыссыз хабарландыру күйінің белгішелерін жасыру"</string>
<string name="hide_silent_icons_summary" msgid="2624346914488256888">"Күй жолағындағы дыбыссыз хабарландырулардың белгішелерін жасыру"</string>
<string name="notification_badging_title" msgid="6311699476970264712">"Хабарландыру белгілеріне рұқсат беру"</string>
- <string name="notification_bubbles_title" msgid="9196562435741861317">"Қалқымалы анықтамалар"</string>
+ <string name="notification_bubbles_title" msgid="9196562435741861317">"Қалқыма хабарлар"</string>
<string name="notification_bubbles_summary" msgid="4624512775901949578">"Қалқымалы таңбашалар арқылы кез келген жерден қолданба мазмұнына жылдам кіру"</string>
<string name="bubbles_feature_education" msgid="8979109826818881018">"Кейбір хабарландырулар және басқа мазмұндар экранға қалқымалы анықтамалар түрінде шығуы мүмкін. Қалқымалы анықтаманы ашу үшін оны түртіңіз. Жасыру үшін экранның төменгі жағына қарай сүйреңіз."</string>
- <string name="bubbles_app_toggle_title" msgid="6401217027603326439">"Қалқымалы анықтамалар"</string>
+ <string name="bubbles_app_toggle_title" msgid="6401217027603326439">"Қалқыма хабарлар"</string>
<string name="bubbles_app_toggle_summary" msgid="7707611139796553855">"<xliff:g id="APP_NAME">%1$s</xliff:g> қолданбасына кейбір хабарландыруларды қалқымалы анықтама түрінде көрсетуге рұқсат береді."</string>
<string name="bubbles_feature_disabled_dialog_title" msgid="3375452386012079293">"Қалқымалы анықтамаларды қосу"</string>
<string name="bubbles_feature_disabled_dialog_text" msgid="326945485806386477">"Қалқымалы анықтамаларды қолданбада қосу үшін оларды алдымен құрылғыда қосу керек. Бұл бұрын қалқымалы анықтамалар қосылған қолданбалардың жұмысына әсер етеді."</string>
@@ -3319,12 +3321,12 @@
<string name="notification_pulse_title" msgid="4861418327614907116">"Жыпылықтаған жарық"</string>
<string name="lock_screen_notifications_title" msgid="6889072265118747835">"Құлып экранында"</string>
<string name="locked_work_profile_notification_title" msgid="8307025804986190658">"Жұмыс профилі өшірулі болғанда"</string>
- <string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"Бүкіл хабарландыру мазмұнын көрсету"</string>
+ <string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"Хабарландыруды толық көрсету"</string>
<string name="lock_screen_notifications_summary_hide" msgid="3668806866535260143">"Құпия мәліметті жасыру"</string>
<string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"Хабарландыруларды мүлде көрсетпеу"</string>
<string name="lock_screen_notifications_interstitial_message" msgid="4230189215124387818">"Құрылғы құлыптаулы кезде, хабарландырулар қалай көрсетілуі керек?"</string>
<string name="lock_screen_notifications_interstitial_title" msgid="2832587379332443505">"Хабарландырулар"</string>
- <string name="lock_screen_notifications_summary_show_profile" msgid="8908775469657073273">"Жұмыс хабарландыруының бүкіл мазмұнын көрсету"</string>
+ <string name="lock_screen_notifications_summary_show_profile" msgid="8908775469657073273">"Жұмыс хабарландыруын толық көрсету"</string>
<string name="lock_screen_notifications_summary_hide_profile" msgid="7898086300511010591">"Маңызды жұмыс мазмұнын жасыру"</string>
<string name="lock_screen_notifications_interstitial_message_profile" msgid="3324187664458600354">"Құрылғы бекітілген болса, профиль хабарландырулары қалай көрсетілуі керек?"</string>
<string name="lock_screen_notifications_interstitial_title_profile" msgid="4043621508889929254">"Профиль хабарландырулары"</string>
@@ -3466,8 +3468,8 @@
<string name="zen_mode_schedule_rule_days" msgid="220627703673691816">"Күндер"</string>
<string name="zen_mode_schedule_rule_days_none" msgid="6011716195119389956">"Ешқандай"</string>
<string name="zen_mode_schedule_rule_days_all" msgid="8814173364016139675">"Күн сайын"</string>
- <string name="zen_mode_schedule_alarm_title" msgid="2078194049274875023">"Дабыл аяқталу уақытын өзгерте алады"</string>
- <string name="zen_mode_schedule_alarm_summary" msgid="5556997989911412070">"Дабыл берілген кезде, кесте өшеді"</string>
+ <string name="zen_mode_schedule_alarm_title" msgid="2078194049274875023">"Оятқыш аяқталу уақытын өзгерте алады"</string>
+ <string name="zen_mode_schedule_alarm_summary" msgid="5556997989911412070">"Оятқыш қосылған кезде, кесте өшеді"</string>
<string name="zen_mode_custom_behavior_title" msgid="8908861697886331001">"\"Мазаламау\" режимі"</string>
<string name="zen_mode_custom_behavior_summary_default" msgid="3509865340195397447">"Әдепкі параметрлерді пайдалану"</string>
<string name="zen_mode_custom_behavior_summary" msgid="7206909852887332604">"Осы кесте үшін ерекше параметрлер орнату"</string>
@@ -3507,7 +3509,7 @@
<string name="zen_mode_reminders_list" msgid="7347061314032326677">"еске салғыштар"</string>
<string name="zen_mode_events" msgid="5784076928339534984">"Іс-шараларға рұқсат ету"</string>
<string name="zen_mode_bypassing_apps" msgid="3080739479028713449">"Қолданбаларға қайта анықтауға рұқсат беру"</string>
- <string name="zen_mode_bypassing_apps_title" msgid="2115024664615538847">"Қолданба ерекшеліктері"</string>
+ <string name="zen_mode_bypassing_apps_title" msgid="2115024664615538847">"Қолданбаларға арналған ерекшеліктер"</string>
<plurals name="zen_mode_bypassing_apps_subtext" formatted="false" msgid="8723144434730871572">
<item quantity="other"><xliff:g id="NUMBER">%1$d</xliff:g> қолданбадан келетін хабарландырулар \"Мазаламау\" режимін қайта анықтай алады</item>
<item quantity="one">1 қолданбадан келетін хабарландырулар \"Мазаламау\" режимін қайта анықтай алады</item>
@@ -3675,7 +3677,7 @@
<string name="default_app" msgid="8861276008866619872">"(Әдепкі)"</string>
<string name="system_app" msgid="4111402206594443265">"(Жүйе)"</string>
<string name="system_default_app" msgid="1454719098589351197">"(Жүйенің әдепкі мәні)"</string>
- <string name="apps_storage" msgid="5658466038269046038">"Қолданбалар қоймасы"</string>
+ <string name="apps_storage" msgid="5658466038269046038">"Қолданбалар жады"</string>
<string name="usage_access" msgid="2023443456361489516">"Пайдалану тарихын көру"</string>
<string name="permit_usage_access" msgid="3321727608629752758">"Пайдалануға рұқсат беру"</string>
<string name="app_usage_preference" msgid="5691545073101551727">"Қолданба пайдалану параметрлері"</string>
@@ -3744,7 +3746,7 @@
<string name="usb_control_device" msgid="9154790265254725254">"Осы құрылғы"</string>
<string name="usb_switching" msgid="1230386065163529904">"Ауыстырылуда..."</string>
<string name="usb_switching_failed" msgid="6857722544186145439">"Ауыстырылмады"</string>
- <string name="usb_summary_charging_only" msgid="4118449308708872339">"Осы құрылғыны зарядтауда"</string>
+ <string name="usb_summary_charging_only" msgid="4118449308708872339">"Осы құрылғыны зарядтауда."</string>
<string name="usb_summary_power_only" msgid="3552240122641051107">"Жалғанған құрылғыны зарядтау"</string>
<string name="usb_summary_file_transfers" msgid="7805342797099821502">"Файл жіберу"</string>
<string name="usb_summary_tether" msgid="778845069037366883">"USB тетеринг"</string>
@@ -3761,8 +3763,8 @@
<string name="assist_access_screenshot_title" msgid="1991014038776117688">"Скриншотты пайдалану"</string>
<string name="assist_access_screenshot_summary" msgid="3010943864000489424">"Қолданбаға экран кескінін пайдалануға рұқсат ету"</string>
<string name="assist_flash_title" msgid="8852484250748551092">"Экранды жарықтандыру"</string>
- <string name="assist_flash_summary" msgid="6697095786317559129">"Көмекші қолданба экрандағы не скриншоттағы мәтінге кірген кезде, экранның шеттері жанады"</string>
- <string name="assist_footer" msgid="7030121180457472165">"Көмекші қолданбалар көріп жатқан экран ақпаратының негізінде сізге көмектесе алады. Кейбір қолданбалар көмекті арттыру үшін іске қосу құралын да, дауыспен енгізу қызметтерін де пайдаланады."</string>
+ <string name="assist_flash_summary" msgid="6697095786317559129">"Көмекші қолданба экрандағы мәтінге не скриншотқа кірген кезде, экранның шеттері жанады"</string>
+ <string name="assist_footer" msgid="7030121180457472165">"Көмекші қолданбалар ашық тұрған экрандағы ақпарат бойынша көмек бере алады. Кейбір қолданбалар қосымша көмек ретінде іске қосу құралын да, дауыспен енгізу қызметтерін де пайдаланады."</string>
<string name="average_memory_use" msgid="5333366040118953945">"Жадты орташа пайдалануы"</string>
<string name="maximum_memory_use" msgid="6509872438499846077">"Жадты ең көп пайдалануы"</string>
<string name="memory_usage" msgid="7963253555330830906">"Жадтың пайдаланылуы"</string>
@@ -3845,8 +3847,8 @@
<string name="screen_zoom_conversation_timestamp_2" msgid="816265985618121370">"Бс 18:01"</string>
<string name="screen_zoom_conversation_timestamp_3" msgid="7346540212221792932">"Бс 18:02"</string>
<string name="screen_zoom_conversation_timestamp_4" msgid="1452374487089625022">"Бс 18:03"</string>
- <string name="disconnected" msgid="4088439352761747084">"Қосылмаған"</string>
- <string name="keyboard_disconnected" msgid="3068615097201531871">"Қосылмаған"</string>
+ <string name="disconnected" msgid="4088439352761747084">"Жалғанбаған"</string>
+ <string name="keyboard_disconnected" msgid="3068615097201531871">"Жалғанбаған"</string>
<string name="data_usage_summary_format" msgid="7788095271598602797">"Деректердің <xliff:g id="AMOUNT">%1$s</xliff:g> пайдаланылған"</string>
<string name="data_usage_wifi_format" msgid="9028934101966264710">"Wi‑Fi арқылы <xliff:g id="AMOUNT">^1</xliff:g> пайдаланылды"</string>
<plurals name="notification_summary" formatted="false" msgid="761061343339229103">
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Құрылғы құлыптаулы кезде, хабарландыруларда жауап немесе басқа мәтін теруге тыйым салу"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Әдепкі емлені тексеру құралы"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Емлені тексеру құралын таңдау"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Емле тексеру құралын пайдалану"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Емлені тексеру құралын пайдалану"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Таңдалмаған"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(ешқандай)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4069,7 +4071,7 @@
<string name="premium_sms_warning" msgid="7604011651486294515">"Ақылы SMS жіберу үшін оператор тарифтеріне сәйкес ақы алынады. Егер қолданбаға рұқсат берсеңіз, сол қолданба арқылы ақылы SMS жібере аласыз."</string>
<string name="premium_sms_access" msgid="4550027460595822851">"Ақылы SMS жіберу"</string>
<string name="bluetooth_disabled" msgid="6588102116819268238">"Өшірулі"</string>
- <string name="bluetooth_connected_summary" msgid="439920840053965217">"<xliff:g id="ID_1">%1$s</xliff:g> құрылғысына қосылған"</string>
+ <string name="bluetooth_connected_summary" msgid="439920840053965217">"<xliff:g id="ID_1">%1$s</xliff:g> құрылғысына жалғанған"</string>
<string name="bluetooth_connected_multiple_devices_summary" msgid="596205630653123250">"Түрлі құрылғыларға қосылған"</string>
<string name="demo_mode" msgid="3831081808592541104">"Жүйе интерфейсінің демо режимі"</string>
<string name="dark_ui_mode" msgid="703844190192599217">"Тақырып"</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Жад кеңістігін босату үшін жад реттегіші құрылғыдағы сақтық көшірмесі жасалған фотосуреттер мен бейнелерді өшіреді."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Фотосуреттер мен бейнелерді жою"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Жад реттегіші"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Жад менеджерін пайдалану"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Жадты басқару құралын пайдалану"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Aвтоматты"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Қолмен"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Орынды қазір босату"</string>
@@ -4129,7 +4131,7 @@
<string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"Уақытты, хабарландыруларды және басқа ақпаратты көру үшін телефонды қолыңызға алыңыз."</string>
<string name="ambient_display_pickup_summary" product="tablet" msgid="1077745287100012928">"Уақытты, хабарландыруларды және басқа ақпаратты көру үшін планшетіңізді таңдаңыз."</string>
<string name="ambient_display_pickup_summary" product="device" msgid="404199660076598026">"Уақытты, хабарландыруларды және басқа ақпаратты көру үшін құрылғыңызды таңдаңыз."</string>
- <string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"Телефонды тексеру үшін түртіңіз"</string>
+ <string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"Телефонды тексеру үшін түрту"</string>
<string name="ambient_display_tap_screen_title" product="tablet" msgid="6434521782016864148">"Планшетті тексеру үшін түртіңіз"</string>
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"Құрылғыны тексеру үшін түртіңіз"</string>
<string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"Уақытты, хабарландыруларды және басқа ақпаратты көру үшін экранды түртіңіз."</string>
@@ -4234,7 +4236,7 @@
<string name="app_names_concatenation_template_2" msgid="8267577900046506189">"<xliff:g id="FIRST_APP_NAME">%1$s</xliff:g>, <xliff:g id="SECOND_APP_NAME">%2$s</xliff:g>"</string>
<string name="app_names_concatenation_template_3" msgid="5129064036161862327">"<xliff:g id="FIRST_APP_NAME">%1$s</xliff:g>, <xliff:g id="SECOND_APP_NAME">%2$s</xliff:g>, <xliff:g id="THIRD_APP_NAME">%3$s</xliff:g>"</string>
<string name="storage_photos_videos" msgid="1890829312367477559">"Суреттер және бейнелер"</string>
- <string name="storage_music_audio" msgid="3661289086715297149">"Музыка және аудиомазмұн"</string>
+ <string name="storage_music_audio" msgid="3661289086715297149">"Музыка және аудио"</string>
<string name="storage_games" msgid="7740038143749092373">"Ойындар"</string>
<string name="storage_other_apps" msgid="3202407095387420842">"Басқа қолданбалар"</string>
<string name="storage_files" msgid="2087824267937487880">"Файлдар"</string>
@@ -4517,6 +4519,6 @@
<string name="automatic_system_heap_dump_title" msgid="2153897396923488317">"Жүйенің дамп файлын автоматты жасау"</string>
<string name="automatic_system_heap_dump_summary" msgid="4962129546638974661">"Android жүйесі тым көп жад пайдаланғанда, ол үшін дамп файлы автоматты түрде жасалады."</string>
<string name="wifi_disconnect_button_text" msgid="787688024070426706">"Ажырату"</string>
- <string name="wfc_disclaimer_emergency_limitation_title_text" msgid="26884532087670844">"Жедел қызметке қоңырау шалу"</string>
+ <string name="wfc_disclaimer_emergency_limitation_title_text" msgid="26884532087670844">"Құтқару қызметіне қоңырау шалу"</string>
<string name="wfc_disclaimer_emergency_limitation_desc_text" msgid="8726152486964822599">"Wi‑Fi қоңыраулары арқылы жедел қызметке қоңырау шалуды операторыңыз қолдамайды.\nЖедел қызметке қоңырау шалу үшін құрылғы ұялы желіге автоматты түрде ауысады.\nТек мобильдік байланыс бар аймақтарда ғана жедел қызметке қоңырау шалуға болады."</string>
</resources>
diff --git a/tests/CarDeveloperOptions/res/values-km/arrays.xml b/tests/CarDeveloperOptions/res/values-km/arrays.xml
index 5951f65..299a516 100644
--- a/tests/CarDeveloperOptions/res/values-km/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-km/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"រត់នៅក្នុងផ្ទៃខាងក្រោយ"</item>
<item msgid="6423861043647911030">"កម្រិតសំឡេងភាពងាយស្រួល"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"ទីតាំង"</item>
+ <item msgid="6656077694190491067">"ទីតាំង"</item>
+ <item msgid="8790228218278477369">"ទីតាំង"</item>
+ <item msgid="7836406246005211990">"ញ័រ"</item>
+ <item msgid="3951439024549922598">"អានទំនាក់ទំនង"</item>
+ <item msgid="8802152411647068">"កែទំនាក់ទំនង"</item>
+ <item msgid="229544934599698735">"អានកំណត់ហេតុហៅ"</item>
+ <item msgid="7396102294405899613">"កែបញ្ជីហៅ"</item>
+ <item msgid="3597797992398484655">"អានប្រតិទិន"</item>
+ <item msgid="2705975774250907343">"កែប្រតិទិន"</item>
+ <item msgid="4668747371441932697">"ទីតាំង"</item>
+ <item msgid="1487578921720243646">"ប្រកាសការជូនដំណឹង"</item>
+ <item msgid="4636080349724146638">"ទីតាំង"</item>
+ <item msgid="673510900286463926">"ហៅទូរស័ព្ទ"</item>
+ <item msgid="542083422784609790">"អានសារ SMS/MMS"</item>
+ <item msgid="1033780373029588436">"សរសេរសារ SMS/MMS"</item>
+ <item msgid="5647111115517787488">"ទទួល SMS/MMS"</item>
+ <item msgid="8591105601108455893">"ទទួល SMS/MMS"</item>
+ <item msgid="7730995008517841903">"ទទួល SMS/MMS"</item>
+ <item msgid="2613033109026626086">"ទទួល SMS/MMS"</item>
+ <item msgid="3037159047591081136">"ផ្ញើ SMS/MMS"</item>
+ <item msgid="4726682243833913568">"អានសារ SMS/MMS"</item>
+ <item msgid="6555678522277865572">"សរសេរសារ SMS/MMS"</item>
+ <item msgid="6981734935578130884">"កែការកំណត់"</item>
+ <item msgid="8705854389991425629">"គូរខាងលើ"</item>
+ <item msgid="5861356020344153651">"ជូនដំណឹងចូលដំណើរការ"</item>
+ <item msgid="78432174621628659">"កាមេរ៉ា"</item>
+ <item msgid="3986116419882154794">"ថតសំឡេង"</item>
+ <item msgid="4516840825756409490">"ចាក់អូឌីយ៉ូ"</item>
+ <item msgid="6811712502798183957">"អានក្ដារតម្បៀតខ្ទាស់"</item>
+ <item msgid="2780369012602289114">"កែក្ដារតម្បៀតខ្ទាស់"</item>
+ <item msgid="2331359440170850868">"ប៊ូតុងមេឌៀ"</item>
+ <item msgid="6133599737122751231">"ការផ្ដោតសំឡេង"</item>
+ <item msgid="6844485713404805301">"កម្រិតសំឡេងមេ"</item>
+ <item msgid="1600379420669104929">"កម្រិតសំឡេង"</item>
+ <item msgid="6296768210470214866">"កម្រិតសំឡេងរោទ៍"</item>
+ <item msgid="510690696071629241">"កម្រិតសំឡេងមេឌៀ"</item>
+ <item msgid="406861638631430109">"កម្រិតសំឡេងម៉ោងរោទ៍"</item>
+ <item msgid="4715864795872233884">"កម្រិតសំឡេងការជូនដំណឹង"</item>
+ <item msgid="2311478519251301183">"កម្រិតសំឡេងប៊្លូធូស"</item>
+ <item msgid="5133991377896747027">"មិនដេក"</item>
+ <item msgid="2464189519136248621">"ទីតាំង"</item>
+ <item msgid="2062677934050803037">"ទីតាំង"</item>
+ <item msgid="1735171933192715957">"ទទួលស្ថិតិប្រើប្រាស់"</item>
+ <item msgid="1014093788778383554">"បិទ/បើកសំឡេងមីក្រូហ្វូន"</item>
+ <item msgid="4199297950608622850">"បង្ហាញថូស"</item>
+ <item msgid="2527962435313398821">"មេឌៀគម្រោង"</item>
+ <item msgid="5117506254221861929">"ធ្វើឲ្យ VPN សកម្ម"</item>
+ <item msgid="8291198322681891160">"ការបង្កើតផ្ទាំងរូបភាព"</item>
+ <item msgid="7106921284621230961">"រចនាសម្ព័ន្ធជំនួយ"</item>
+ <item msgid="4496533640894624799">"រូបថតអេក្រង់ជំនួយ"</item>
+ <item msgid="2598847264853993611">"អានស្ថានភាពទូរស័ព្ទ"</item>
+ <item msgid="9215610846802973353">"បន្ថែមសារជាសំឡេង"</item>
+ <item msgid="9186411956086478261">"ប្រើ sip"</item>
+ <item msgid="6884763100104539558">"កំពុងដំណើរការហៅចេញ"</item>
+ <item msgid="125513972170580692">"ស្នាមម្រាមដៃ"</item>
+ <item msgid="2556071024281275619">"ឧបករណ៍ចាប់សញ្ញារាងកាយ"</item>
+ <item msgid="617168514928339387">"អានការផ្សព្វផ្សាយសារចល័ត"</item>
+ <item msgid="7134693570516523585">"ទីតាំងបញ្ឆោត"</item>
+ <item msgid="7224489175375229399">"អានទំហំផ្ទុក"</item>
+ <item msgid="8472735063903258202">"សរសេរទំហំផ្ទុក"</item>
+ <item msgid="4069276819909595110">"បើកអេក្រង់"</item>
+ <item msgid="1228338896751121025">"ទទួលគណនី"</item>
+ <item msgid="3181581793459233672">"រត់នៅក្នុងផ្ទៃខាងក្រោយ"</item>
+ <item msgid="2340936043025374076">"កម្រិតសំឡេងភាពងាយស្រួល"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"ខ្លី"</item>
<item msgid="4816511817309094890">"មធ្យម"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"កុំអនុញ្ញាត"</item>
<item msgid="8184570120217958741">"អនុញ្ញាតជានិច្ច"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"ធម្មតា"</item>
+ <item msgid="5101233285497327432">"មធ្យម"</item>
+ <item msgid="1555861583162930714">"ទាប"</item>
+ <item msgid="1719683776264798117">"ខ្លាំងមែនទែន"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"ធម្មតា"</item>
+ <item msgid="6107138933849816768">"មធ្យម"</item>
+ <item msgid="182695359839047859">"ទាប"</item>
+ <item msgid="8577246509202964244">"សំខាន់ខ្លាំង"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"ជាប់លាប់"</item>
<item msgid="167418068739176448">"សកម្មភាពលើគេ"</item>
@@ -379,7 +455,7 @@
<string-array name="color_picker">
<item msgid="3151827842194201728">"បៃតងចាស់"</item>
<item msgid="3228505970082457852">"ពណ៌ខៀវ"</item>
- <item msgid="6590260735734795647">"ពណ៌ឆ្លុះ"</item>
+ <item msgid="6590260735734795647">"ទឹកប៊ិក"</item>
<item msgid="3521763377357218577">"ស្វាយ"</item>
<item msgid="5932337981182999919">"ផ្កាឈូក"</item>
<item msgid="5642914536624000094">"ពណ៌ក្រហម"</item>
diff --git a/tests/CarDeveloperOptions/res/values-km/strings.xml b/tests/CarDeveloperOptions/res/values-km/strings.xml
index af6f4bd..2969e80 100644
--- a/tests/CarDeveloperOptions/res/values-km/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-km/strings.xml
@@ -56,7 +56,7 @@
<string name="radio_info_ims_reg_status" msgid="4771711884059371514">"ការចុះឈ្មោះ IMS៖ <xliff:g id="STATUS">%1$s</xliff:g>\nសំឡេងតាមរយៈ LTE៖ <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nសំឡេងតាមរយៈ WiFi៖ <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nការហៅជាវីដេអូ៖ <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nចំណុចប្រទាក់ UT៖ <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
<string name="radioInfo_service_in" msgid="1297020186765943857">"កំពុងដំណើរការ"</string>
<string name="radioInfo_service_out" msgid="8460363463722476510">"មិនដំណើរការ"</string>
- <string name="radioInfo_service_emergency" msgid="7674989004735662599">"សម្រាប់តែការហៅពេលអាសន្នប៉ុណ្ណោះ"</string>
+ <string name="radioInfo_service_emergency" msgid="7674989004735662599">"ការហៅទៅលេខសង្គ្រោះបន្ទាន់តែប៉ុណ្ណោះ"</string>
<string name="radioInfo_service_off" msgid="1873939869994136791">"បិទវិទ្យុ"</string>
<string name="radioInfo_roaming_in" msgid="7059350234710947417">"រ៉ូមីង"</string>
<string name="radioInfo_roaming_not" msgid="7733269160603599835">"មិនរ៉ូមីងទេ"</string>
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"ធ្វើឲ្យអត្ថបទនៅលើអេក្រង់តូចជាងមុន ឬធំជាងមុន។"</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"កំណត់ឲ្យតូចជាងមុន"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"កំណត់ឲ្យធំជាងមុន"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"អត្ថបទគំរូ"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"មេធ្មប់ដ៏អស្ចារ្យនៃទឹកដីពិសិដ្ឋ"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"ជំពូកទី 11៖ ទីក្រុងមរកតដ៏អស្ចារ្យនៃទឹកដីពិសិដ្ឋ"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"ព័ត៌មានប្រវត្តិរូប"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"គណនី"</string>
<string name="location_settings_title" msgid="2707201457572301030">"ទីតាំង"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"ប្រើទីតាំង"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"ប្រើទីតាំង"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"បិទ"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">នៅពេលបើកទីតាំង កម្មវិធី <xliff:g id="COUNT_1">%1$d</xliff:g> អាចចូលប្រើទីតាំងបាន</item>
@@ -456,7 +455,7 @@
<string name="lock_screen_intro_skip_dialog_text" product="tablet" msgid="7572334562915795226">"មុខងារការពារឧបករណ៍នឹងមិនត្រូវបានបើកទេ។ អ្នកនឹងមិនអាចរារាំងអ្នកផ្សេងមិនឲ្យប្រើប្រាស់ថេប្លេតនេះបានទេ ប្រសិនបើវាបាត់ ឬត្រូវបានគេលួច។"</string>
<string name="lock_screen_intro_skip_dialog_text" product="device" msgid="3819285334459763813">"មុខងារការពារឧបករណ៍នឹងមិនត្រូវបានបើកទេ។ អ្នកនឹងមិនអាចរារាំងអ្នកផ្សេងមិនឲ្យប្រើប្រាស់ឧបករណ៍នេះបានទេ ប្រសិនបើវាបាត់ ឬត្រូវបានគេលួច។"</string>
<string name="lock_screen_intro_skip_dialog_text" product="default" msgid="5361573789585652826">"មុខងារការពារឧបករណ៍នឹងមិនត្រូវបានបើកទេ។ អ្នកនឹងមិនអាចរារាំងអ្នកផ្សេងមិនឲ្យប្រើប្រាស់ទូរសព្ទនេះបានទេ ប្រសិនបើវាបាត់ ឬត្រូវបានគេលួច។"</string>
- <string name="skip_anyway_button_label" msgid="4437815969645175429">"រំលងទោះបីយ៉ាងណាក៏ដោយ"</string>
+ <string name="skip_anyway_button_label" msgid="4437815969645175429">"មិនអីទេ រំលងចុះ"</string>
<string name="go_back_button_label" msgid="7310586887969860472">"ថយក្រោយ"</string>
<string name="skip_lock_screen_dialog_button_label" msgid="6706047245716780006">"រំលង"</string>
<string name="cancel_lock_screen_dialog_button_label" msgid="2534925227627658819">"បោះបង់"</string>
@@ -574,7 +573,7 @@
<string name="unlock_set_unlock_pin_summary" msgid="8076921768675948228">"សុវត្ថិភាពពីមធ្យមទៅខ្ពស់"</string>
<string name="unlock_set_unlock_password_title" msgid="2092949379238466560">"ពាក្យសម្ងាត់"</string>
<string name="unlock_set_unlock_password_summary" msgid="7042787631866059147">"សុវត្ថិភាពខ្ពស់"</string>
- <string name="unlock_set_do_later_title" msgid="2939110070503695956">"កុំអាល"</string>
+ <string name="unlock_set_do_later_title" msgid="2939110070503695956">"កុំទាន់"</string>
<string name="current_screen_lock" msgid="398328543694154510">"ការចាក់សោអេក្រង់បច្ចុប្បន្ន"</string>
<string name="fingerprint_unlock_set_unlock_pattern" msgid="132337696546315927">"ស្នាមម្រាមដៃ + លំនាំ"</string>
<string name="fingerprint_unlock_set_unlock_pin" msgid="886426673328906002">"ស្នាមម្រាមដៃ + កូដ PIN"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"បើកវ៉ាយហ្វាយ"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"ប្រើ Wi‑Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"ប្រើ Wi‑Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"ការកំណត់វ៉ាយហ្វាយ"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"រៀបចំ & គ្រប់គ្រងចំណុចចូលដំណើរការឥតខ្សែ"</string>
@@ -906,7 +905,7 @@
<string name="wifi_ssid_hint" msgid="5010024648106585165">"បញ្ចូល SSID"</string>
<string name="wifi_security" msgid="9136702039496152831">"សុវត្ថិភាព"</string>
<string name="wifi_hidden_network" msgid="6647772204699776833">"បណ្តាញដែលបានលាក់"</string>
- <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"ប្រសិនបើរូតទ័ររបស់អ្នកមិនបង្ហាញលេខសម្គាល់បណ្តាញ ប៉ុន្តែអ្នកចង់ភ្ជាប់វានៅពេលអនាគត អ្នកអាចកំណត់បណ្តាញដូចដែលបានលាក់។\n\nសកម្មភាពនេះអាចបង្កើតឱ្យមានហានិភ័យផ្នែកសុវត្ថិភាព ដោយសារទូរសព្ទរបស់អ្នកនឹងបង្ហាញរលកសញ្ញារបស់វាជាប្រចាំ ដើម្បីស្វែងរកបណ្តាញ។\n\nការកំណត់បណ្តាញដូចដែលបានលាក់នឹងមិនប្តូរការកំណត់រូតទ័ររបស់អ្នកនោះទេ។"</string>
+ <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"ប្រសិនបើរូតទ័ររបស់អ្នកមិនផ្សាយលេខសម្គាល់បណ្តាញ ប៉ុន្តែអ្នកចង់ភ្ជាប់វានៅពេលអនាគត អ្នកអាចកំណត់បណ្តាញថាបានលាក់។\n\nសកម្មភាពនេះអាចបង្កើតឱ្យមានហានិភ័យផ្នែកសុវត្ថិភាព ដោយសារទូរសព្ទរបស់អ្នកនឹងផ្សាយរលកសញ្ញារបស់វាជាប្រចាំ ដើម្បីស្វែងរកបណ្តាញ។\n\nការកំណត់បណ្តាញថាបានលាក់នឹងមិនប្តូរការកំណត់រូតទ័ររបស់អ្នកនោះទេ។"</string>
<string name="wifi_signal" msgid="696548364467704808">"កម្លាំងសញ្ញា"</string>
<string name="wifi_status" msgid="3439931558930689940">"ស្ថានភាព"</string>
<string name="tx_wifi_speed" msgid="2571810085003261073">"ល្បឿនតភ្ជាប់សម្រាប់ការផ្ទេរ"</string>
@@ -916,7 +915,7 @@
<string name="passpoint_label" msgid="7429247462404128615">"បានរក្សាទុកតាមរយៈ"</string>
<string name="passpoint_content" msgid="340527524510304327">"អត្តសញ្ញាណ <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="wifi_eap_method" msgid="3752116941487485859">"វិធីសាស្ត្រ EAP"</string>
- <string name="please_select_phase2" msgid="5848080896810435677">"ជំហាន ២ ផ្ទៀងផ្ទាត់"</string>
+ <string name="please_select_phase2" msgid="5848080896810435677">"ការផ្ទៀងផ្ទាត់ជំហានទី 2"</string>
<string name="wifi_eap_ca_cert" msgid="1496395241849383785">"វិញ្ញាបនបត្រ CA"</string>
<string name="wifi_eap_domain" msgid="3298302320003640130">"Domain"</string>
<string name="wifi_eap_user_cert" msgid="6786839531765719173">"វិញ្ញាបនបត្រអ្នកប្រើ"</string>
@@ -946,7 +945,7 @@
<string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"មិនអាចអានកូដ QR បានទេ។ ដាក់កូដឱ្យនៅចំកណ្ដាលវិញ រួចព្យាយាមម្ដងទៀត"</string>
<string name="wifi_dpp_failure_authentication_or_configuration" msgid="9142051662156233679">"សូមព្យាយាមម្ដងទៀត។ ប្រសិនបើបញ្ហានៅតែបន្តកើតឡើង សូមទាក់ទងក្រុមហ៊ុនផលិតឧបករណ៍"</string>
<string name="wifi_dpp_failure_not_compatible" msgid="4320027179973678283">"មានអ្វីមួយខុសប្រក្រតី"</string>
- <string name="wifi_dpp_failure_timeout" msgid="5060065168142109420">"សូមប្រាកដថាឧបករណ៍ត្រូវបានបើក និងសាកថ្មចូលហើយ"</string>
+ <string name="wifi_dpp_failure_timeout" msgid="5060065168142109420">"សូមប្រាកដថាឧបករណ៍ត្រូវបានដោត សាកថ្ម និងបើក"</string>
<string name="wifi_dpp_failure_generic" msgid="7840142544736640189">"សូមប្រាកដថាឧបករណ៍ត្រូវបានបើក និងសាកថ្មចូលហើយ។ ប្រសិនបើបញ្ហានៅតែបន្តកើតឡើង សូមទាក់ទងក្រុមហ៊ុនផលិតឧបករណ៍"</string>
<string name="wifi_dpp_failure_not_supported" msgid="111779621766171626">"មិនអាចបញ្ចូល “<xliff:g id="SSID">%1$s</xliff:g>” ទៅក្នុងឧបករណ៍នេះបានទេ"</string>
<string name="wifi_dpp_check_connection_try_again" msgid="7144663015219170999">"សូមពិនិត្យមើលការតភ្ជាប់ រួចព្យាយាមម្ដងទៀត"</string>
@@ -1025,7 +1024,7 @@
<string name="wifi_details_subnet_mask" msgid="53396707004763012">"របាំងបណ្តាញរង"</string>
<string name="wifi_details_dns" msgid="1118251455740116559">"DNS"</string>
<string name="wifi_details_ipv6_address_header" msgid="1642310137145363299">"អាសយដ្ឋាន IPv6"</string>
- <string name="wifi_saved_access_points_label" msgid="3790693285928292563">"បណ្ដាញបានរក្សាទុក"</string>
+ <string name="wifi_saved_access_points_label" msgid="3790693285928292563">"បណ្ដាញដែលបានរក្សាទុក"</string>
<string name="wifi_subscribed_access_points_tab" msgid="7498765485953257229">"ការជាវ"</string>
<!-- no translation found for wifi_saved_access_points_tab (4677730543624191122) -->
<skip />
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"ទូរសព្ទចល័ត"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"ប្រសិនបើមិនអាចប្រើ Wi‑Fi សូមប្រើបណ្ដាញទូរសព្ទចល័ត"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"ប្រសិនបើមិនអាចប្រើបណ្ដាញទូរសព្ទចល័ត សូមប្រើ Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"ហៅទូរសព្ទតាមរយៈ Wi‑Fi ។ ប្រសិនបើដាច់ Wi‑Fi ការហៅទូរសព្ទនឹងបញ្ចប់។"</string>
@@ -1645,7 +1647,7 @@
<string name="mobile_insert_sim_card" msgid="7594550403454243732">"សូមបញ្ចូលស៊ីមកាត និងចាប់ផ្ដើមឡើងវិញ"</string>
<string name="mobile_connect_to_internet" msgid="6031886097365170913">"សូមភ្ជាប់អ៊ីនធឺណិត"</string>
<string name="location_title" msgid="8664674161765477168">"ទីតាំងខ្ញុំ"</string>
- <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"ទីតាំងសម្រាប់ប្រវត្តិរូបការងាររបស់អ្នក"</string>
+ <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"ទីតាំងសម្រាប់កម្រងព័ត៌មានការងារ"</string>
<string name="location_app_level_permissions" msgid="1298041503927632960">"ការអនុញ្ញាតកម្មវិធី"</string>
<string name="location_app_permission_summary_location_off" msgid="541372845344796336">"ទីតាំងបានបិទ"</string>
<plurals name="location_app_permission_summary_location_on" formatted="false" msgid="7904821382328758218">
@@ -1693,7 +1695,7 @@
<string name="terms_title" msgid="1804549588198223771">"លក្ខខណ្ឌប្រើប្រាស់"</string>
<string name="webview_license_title" msgid="8244960025549725051">"អាជ្ញាប័ណ្ណ System WebView"</string>
<string name="wallpaper_attributions" msgid="2941987966332943253">"ផ្ទាំងរូបភាព"</string>
- <string name="wallpaper_attributions_values" msgid="4461979853894606323">"កម្មវិធីផ្ដល់សេវារូបភាពផ្កាយរណប៖\n©2014 CNES / Astrium, DigitalGlobe, Bluesky"</string>
+ <string name="wallpaper_attributions_values" msgid="4461979853894606323">"ក្រុមហ៊ុនផ្ដល់សេវារូបភាពផ្កាយរណប៖\n©2014 CNES / Astrium, DigitalGlobe, Bluesky"</string>
<string name="settings_manual_activity_title" msgid="7599911755054286789">"ឯកសារណែនាំ"</string>
<string name="settings_manual_activity_unavailable" msgid="4872502775018655343">"មានបញ្ហាក្នុងការបើកឯកសារណែនាំ"</string>
<string name="settings_license_activity_title" msgid="1099045216283677608">"អាជ្ញាបណ្ណភាគីទីបី"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"ការញ័រនៃការជូនដំណឹង"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"ការញ័រនៃសំឡេងរោទ៍"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"ការញ័រពេលប៉ះ"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"ប្រើសេវាកម្ម"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"ប្រើការកែតម្រូវពណ៌"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"ប្រើអក្សររត់"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"ប្រើសេវាកម្ម"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"ប្រើការកែតម្រូវពណ៌"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"ប្រើអក្សររត់"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"បន្ត"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"ឧបករណ៍ជំនួយការស្ដាប់"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"មិនបានភ្ជាប់ឧបករណ៍ជំនួយការស្តាប់ទេ"</string>
@@ -2278,7 +2280,7 @@
<string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"បើកកម្មវិធីសន្សំថ្ម"</string>
<string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"អាចនឹងឆាប់អស់ថ្មជាងធម្មតា"</string>
<string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"កម្មវិធីសន្សំថ្មបានបើក"</string>
- <string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"មុខងារមួយចំនួនអាចត្រូវបានកម្រិត"</string>
+ <string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"មុខងារមួយចំនួនអាចត្រូវបានដាក់កំហិត"</string>
<string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"ទូរសព្ទត្រូវបានប្រើប្រាស់ច្រើនជាងធម្មតា"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"ថេប្លេតត្រូវបានប្រើប្រាស់ច្រើនជាងធម្មតា"</string>
<string name="battery_tip_high_usage_title" product="device" msgid="8304138287288309490">"ឧបករណ៍ត្រូវបានប្រើប្រាស់ច្រើនជាងធម្មតា"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"បើក"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"ប្រើកម្មវិធីសន្សំថ្ម"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"ប្រើមុខងារសន្សំថ្ម"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"បើកដោយស្វ័យប្រវត្តិ"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"កុំ"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"នៅពេលដែលថ្មសល់ <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
@@ -2599,7 +2601,7 @@
<string name="work_mode_label" msgid="6845849194740195757">"កម្រងព័ត៌មានការងារ"</string>
<string name="work_mode_on_summary" msgid="1682781113156323592">"គ្រប់គ្រងដោយស្ថាប័នរបស់អ្នក"</string>
<string name="work_mode_off_summary" msgid="1688885392211178315">"កម្មវិធី និងការជូនដំណឹងបានបិទ"</string>
- <string name="remove_managed_profile_label" msgid="4625542553784793536">"លុបប្រវត្តិរូបការងារ"</string>
+ <string name="remove_managed_profile_label" msgid="4625542553784793536">"លុបកម្រងព័ត៌មានការងារ"</string>
<string name="background_data" msgid="8275750862371471171">"ទិន្នន័យផ្ទៃខាងក្រោយ"</string>
<string name="background_data_summary" msgid="799640633948841990">"កម្មវិធីអាចធ្វើសមកាលកម្ម ផ្ញើ និងទទួលទិន្នន័យនៅពេលណាមួយ"</string>
<string name="background_data_dialog_title" msgid="8306650658158895976">"បិទទិន្នន័យផ្ទៃខាងក្រោយ?"</string>
@@ -2874,7 +2876,7 @@
<string name="user_setup_dialog_message" msgid="2988559933258353919">"សូមប្រាកដថាអ្នកប្រើប្រាស់នេះអាចយកឧបករណ៍ និងរៀបចំទំហំផ្ទុករបស់គេបាន"</string>
<string name="user_setup_profile_dialog_message" msgid="7611900802824048526">"រៀបចំប្រវត្តិរូបឥឡូវ?"</string>
<string name="user_setup_button_setup_now" msgid="4941459406266856176">"រៀបចំឥឡូវ"</string>
- <string name="user_setup_button_setup_later" msgid="6596031428556518752">"កុំអាល"</string>
+ <string name="user_setup_button_setup_later" msgid="6596031428556518752">"កុំទាន់"</string>
<string name="user_cannot_manage_message" product="tablet" msgid="7108992906553210763">"មានតែម្ចាស់កុំព្យូទ័របន្ទះប៉ុណ្ណោះអាចគ្រប់គ្រងអ្នកប្រើ"</string>
<string name="user_cannot_manage_message" product="default" msgid="915260531390608092">"មានតែម្ចាស់ទូរស័ព្ទប៉ុណ្ណោះអាចគ្រប់គ្រងអ្នកប្រើ។"</string>
<string name="user_cannot_add_accounts_message" msgid="5993561303748749097">"ប្រវត្តិរូបបានដាក់កម្រិតមិនអាចបន្ថែមគណនី"</string>
@@ -2886,7 +2888,7 @@
<string name="user_confirm_remove_self_title" msgid="6739480453680217543">"លុបខ្លួនឯងផ្ទាល់?"</string>
<string name="user_confirm_remove_title" msgid="1034498514019462084">"លុបអ្នកប្រើប្រាស់នេះ?"</string>
<string name="user_profile_confirm_remove_title" msgid="6138684743385947063">"លុបប្រវត្តិរូបនេះ?"</string>
- <string name="work_profile_confirm_remove_title" msgid="3168910958076735800">"លុបប្រវត្តិរូបការងារ?"</string>
+ <string name="work_profile_confirm_remove_title" msgid="3168910958076735800">"លុបកម្រងព័ត៌មានការងារឬ?"</string>
<string name="user_confirm_remove_self_message" product="tablet" msgid="2889456786320157545">"អ្នកនឹងបាត់បង់ទំហំ ព្រមទាំងទិន្នន័យរបស់អ្នកលើកុំព្យូទ័របន្ទះនេះ។ អ្នកមិនអាចធ្វើសកម្មភាពនេះវិញបានទេ។"</string>
<string name="user_confirm_remove_self_message" product="default" msgid="8441729423565705183">"អ្នកនឹងបាត់បង់ទំហំ និងទិន្នន័យរបស់អ្នកលើទូរស័ព្ទនេះ។ អ្នកមិនអាចធ្វើសកម្មភាពនេះវិញបានទេ។"</string>
<string name="user_confirm_remove_message" msgid="5202150470271756013">"កម្មវិធី និងទិន្នន័យទាំងអស់នឹងត្រូវបានលុប។"</string>
@@ -3134,7 +3136,7 @@
<string name="sound_settings_example_summary" msgid="2091822107298841827">"កម្រិតសំឡេងរោទ៍ត្រឹម 80%"</string>
<string name="media_volume_option_title" msgid="3553411883305505682">"កម្រិតសំឡេងមេឌៀ"</string>
<string name="remote_media_volume_option_title" msgid="6355710054191873836">"កម្រិតសំឡេងនៃការបញ្ជូន"</string>
- <string name="call_volume_option_title" msgid="5028003296631037334">"កម្រិតសំឡេងហៅ"</string>
+ <string name="call_volume_option_title" msgid="5028003296631037334">"កម្រិតសំឡេងហៅទូរសព្ទ"</string>
<string name="alarm_volume_option_title" msgid="3184076022438477047">"កម្រិតសំឡេងម៉ោងរោទ៍"</string>
<string name="ring_volume_option_title" msgid="2038924918468372264">"កម្រិតសំឡេងរោទ៍"</string>
<string name="notification_volume_option_title" msgid="1358512611511348260">"កម្រិតសំឡេងការជូនដំណឹង"</string>
@@ -3151,7 +3153,7 @@
<string name="docking_sounds_title" msgid="2573137471605541366">"សំឡេងភ្ជាប់"</string>
<string name="touch_sounds_title" msgid="165237488496165652">"សំឡេងប៉ះ"</string>
<string name="vibrate_on_touch_title" msgid="6360155469279157684">"ការញ័រពេលប៉ះ"</string>
- <string name="vibrate_on_touch_summary" msgid="5504424764028676043">"មតិស្ថាបនាតាមការប៉ះសម្រាប់ការចុច ក្ដារចុច និងច្រើនទៀត"</string>
+ <string name="vibrate_on_touch_summary" msgid="5504424764028676043">"ប្រតិកម្មញ័រពេលចុច ក្ដារចុច និងច្រើនទៀត"</string>
<string name="dock_audio_media_title" msgid="1859521680502040781">"ភ្ជាប់ការចាក់តាមអូប៉ាល័រ"</string>
<string name="dock_audio_media_disabled" msgid="4300752306178486302">"អូឌីយ៉ូទាំងអស់"</string>
<string name="dock_audio_media_enabled" msgid="2873275045878628153">"តែអូឌីយ៉ូមេឌៀប៉ុណ្ណោះ"</string>
@@ -3392,7 +3394,7 @@
<string name="zen_access_detail_switch" msgid="8706332327904974500">"អនុញ្ញាតមុខងារកុំរំខាន"</string>
<string name="zen_access_empty_text" msgid="7667538993781607731">"គ្មានកម្មវិធីបានដំឡើងណាមួយបានស្នើការចូលដំណើរការមុខងារកុំរំខានទេ"</string>
<string name="loading_notification_apps" msgid="1978345231934072091">"កំពុងផ្ទុកកម្មវិធី..."</string>
- <string name="app_notifications_off_desc" msgid="3904090905748895146">"តាមសំណើរបស់អ្នក ប្រព័ន្ធប្រតិបត្តិការ Android កំពុងទប់ស្កាត់ការជូនដំណឹងរបស់កម្មវិធីនេះមិនឱ្យបង្ហាញនៅលើឧបករណ៍នេះទេ"</string>
+ <string name="app_notifications_off_desc" msgid="3904090905748895146">"តាមសំណើរបស់អ្នក Android កំពុងទប់ស្កាត់ការជូនដំណឹងរបស់កម្មវិធីនេះមិនឱ្យបង្ហាញនៅលើឧបករណ៍នេះទេ"</string>
<string name="channel_notifications_off_desc" msgid="8005444443218306611">"តាមសំណើរបស់អ្នក ប្រព័ន្ធប្រតិបត្តិការ Android កំពុងទប់ស្កាត់ប្រភេទនៃការជូនដំណឹងនេះមិនឱ្យបង្ហាញនៅលើឧបករណ៍នេះទេ"</string>
<string name="channel_group_notifications_off_desc" msgid="7154205544298672850">"តាមសំណើរបស់អ្នក ប្រព័ន្ធប្រតិបត្តិការ Android កំពុងទប់ស្កាត់ក្រុមនៃការជូនដំណឹងនេះមិនឱ្យបង្ហាញនៅលើឧបករណ៍នេះទេ"</string>
<string name="notification_channels" msgid="956764228116145956">"ប្រភេទ"</string>
@@ -3457,8 +3459,8 @@
<string name="zen_mode_event_rule_summary_reply_template" msgid="3917497077674876311">"នៅពេលឆ្លើយតបថា <xliff:g id="REPLY">%1$s</xliff:g>"</string>
<string name="zen_mode_event_rule_calendar_any" msgid="155915101132859764">"ប្រតិទិនណាមួយ"</string>
<string name="zen_mode_event_rule_reply" msgid="9100941281268256319">"នៅពេលឆ្លើយតបថា"</string>
- <string name="zen_mode_event_rule_reply_any_except_no" msgid="3344044163641764449">"យល់ព្រម ប្រហែល ឬមិនឆ្លើយតប"</string>
- <string name="zen_mode_event_rule_reply_yes_or_maybe" msgid="5042234361937256329">"យល់ព្រម ឬប្រហែល"</string>
+ <string name="zen_mode_event_rule_reply_any_except_no" msgid="3344044163641764449">"បាទ/ចាស ប្រហែល ឬមិនឆ្លើយតប"</string>
+ <string name="zen_mode_event_rule_reply_yes_or_maybe" msgid="5042234361937256329">"បាទ/ចាស ឬប្រហែល"</string>
<string name="zen_mode_event_rule_reply_yes" msgid="7039756546321205552">"បាទ/ចាស"</string>
<string name="zen_mode_rule_not_found_text" msgid="6553855397424553685">"រកមិនឃើញច្បាប់ទេ។"</string>
<string name="zen_mode_rule_summary_enabled_combination" msgid="8269105393636454359">"បើក / <xliff:g id="MODE">%1$s</xliff:g>"</string>
@@ -3628,7 +3630,7 @@
<item quantity="one">សិទ្ធិអនុញ្ញាតបន្ថែម <xliff:g id="COUNT_0">%d</xliff:g></item>
</plurals>
<string name="runtime_permissions_summary_no_permissions_granted" msgid="3477934429220828771">"គ្មានការផ្តល់សិទ្ធិអនុញ្ញាតទេ"</string>
- <string name="runtime_permissions_summary_no_permissions_requested" msgid="3901636077467389637">"គ្មានការស្នើសិទ្ធិអនុញ្ញាតទេ"</string>
+ <string name="runtime_permissions_summary_no_permissions_requested" msgid="3901636077467389637">"គ្មានការអនុញ្ញាតដែលបានស្នើសុំទេ"</string>
<string name="filter_all_apps" msgid="4042756539846043675">"កម្មវិធីទាំងអស់"</string>
<string name="filter_enabled_apps" msgid="5888459261768538489">"កម្មវិធីដែលបានដំឡើង"</string>
<string name="filter_instant_apps" msgid="8087483282854072366">"កម្មវិធីប្រើភ្លាមៗ"</string>
@@ -3734,7 +3736,7 @@
<string name="usb_use_tethering" msgid="4250626730173163846">"ការភ្ជាប់តាម USB"</string>
<string name="usb_use_MIDI" msgid="4710632870781041401">"MIDI"</string>
<string name="usb_use_MIDI_desc" msgid="1770966187150010947">"ប្រើឧបករណ៍នេះជាមីឌី"</string>
- <string name="usb_use" msgid="8940500223316278632">"ប្រើ USB ដើម្បី"</string>
+ <string name="usb_use" msgid="8940500223316278632">"ប្រើ USB សម្រាប់"</string>
<string name="usb_default_label" msgid="7471316635263936101">"ការកំណត់រចនាសម្ព័ន្ធ USB លំនាំដើម"</string>
<string name="usb_default_info" msgid="953775292571786528">"ការកំណត់ទាំងនេះនឹងអនុវត្ត នៅពេលដែលទូរសព្ទរបស់អ្នកដោះសោ ហើយឧបករណ៍ផ្សេងទៀតត្រូវបានភ្ជាប់។ សូមភ្ជាប់ជាមួយឧបករណ៍ដែលទុកចិត្តតែប៉ុណ្ណោះ។"</string>
<string name="usb_pref" msgid="6194821550693495068">"USB"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"ពេលឧបករណ៍ជាប់សោ ទប់ស្កាត់ការវាយអក្សរឆ្លើយតប ឬអត្ថបទផ្សេងទៀតនៅក្នុងការជូនដំណឹង"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"កម្មវិធីពិនិត្យអក្ខរាវិរុទ្ធលំនាំដើម"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"ជ្រើសរើសកម្មវិធីពិនិត្យអក្ខរាវិរុទ្ធ"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"ប្រើកម្មវិធីពិនិត្យអក្ខរាវិរុទ្ធ"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"ប្រើមុខងារពិនិត្យអក្ខរាវិរុទ្ធ"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"មិនបានជ្រើស"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(គ្មាន)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">"៖ "</string>
@@ -4079,7 +4081,7 @@
<string name="quick_settings_developer_tiles" msgid="7423485925757678719">"ប្រអប់ការកំណត់រហ័សសម្រាប់អ្នកអភិវឌ្ឍន៍"</string>
<string name="winscope_trace_quick_settings_title" msgid="940971040388411374">"ដាន Winscope"</string>
<string name="sensors_off_quick_settings_title" msgid="3655699045300438902">"ឧបករណ៍ចាប់សញ្ញាបានបិទ"</string>
- <string name="managed_profile_settings_title" msgid="4340409321523532402">"ការកំណត់ប្រវត្តិរូបការងារ"</string>
+ <string name="managed_profile_settings_title" msgid="4340409321523532402">"ការកំណត់កម្រងព័ត៌មានការងារ"</string>
<string name="managed_profile_contact_search_title" msgid="7337225196804457095">"ការស្វែងរកទំនាក់ទំនង"</string>
<string name="managed_profile_contact_search_summary" msgid="7278267480246726951">"អនុញ្ញាតការស្វែងរកទំនាក់ទំនងដោយស្ថាប័នរបស់អ្នកដើម្បីកំណត់អត្តសញ្ញាណអ្នកហៅ និងលេខទំនាក់ទំនង"</string>
<string name="cross_profile_calendar_title" msgid="2351605904015067145">"ប្រតិទិនអន្តរកម្រងព័ត៌មាន"</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"ដើម្បីបង្កើនទំហំផ្ទុក កម្មវិធីគ្រប់គ្រងទំហំផ្ទុកយករូបថត និងវីដេអូដែលបានបម្រុងទុកចេញពីឧបករណ៍របស់អ្នក។"</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"យករូបថត និងវីដេអូចេញ"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"កម្មវិធីគ្រប់គ្រងទំហំផ្ទុក"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"ប្រើកម្មវិធីគ្រប់គ្រងទំហំផ្ទុក"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"ប្រើកម្មវិធីគ្រប់គ្រងទំហំផ្ទុក"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"ស្វ័យប្រវត្តិ"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"ឯកសារណែនាំ"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"បង្កើនទំហំផ្ទុកឥឡូវនេះ"</string>
@@ -4308,7 +4310,7 @@
<string name="change_wifi_state_title" msgid="5140754955787584174">"ការគ្រប់គ្រង Wi-Fi"</string>
<string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"អនុញ្ញាតឱ្យកម្មវិធីគ្រប់គ្រង Wi-Fi"</string>
<string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"អនុញ្ញាតឱ្យកម្មវិធីនេះបើក ឬបិទ Wi-Fi ស្កេន និងភ្ជាប់បណ្តាញ Wi-Fi បញ្ចូល ឬលុបបណ្តាញ ឬចាប់ផ្តើមតែហតស្ប៉តមូលដ្ឋានប៉ុណ្ណោះ"</string>
- <string name="media_output_title" msgid="8710632337456601848">"ចាក់មេឌៀទៅកាន់"</string>
+ <string name="media_output_title" msgid="8710632337456601848">"ចាក់មេឌៀនៅលើ"</string>
<string name="media_output_default_summary" msgid="3159237976830415584">"ឧបករណ៍នេះ"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"ទូរសព្ទ"</string>
<string name="media_output_summary" product="tablet" msgid="6672024060360538526">"ថេប្លេត"</string>
diff --git a/tests/CarDeveloperOptions/res/values-kn/arrays.xml b/tests/CarDeveloperOptions/res/values-kn/arrays.xml
index 073f9a3..2b09f58 100644
--- a/tests/CarDeveloperOptions/res/values-kn/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-kn/arrays.xml
@@ -38,7 +38,16 @@
<item msgid="5827960506924849753">"10 ನಿಮಿಷಗಳು"</item>
<item msgid="6677424950124253938">"30 ನಿಮಿಷಗಳು"</item>
</string-array>
- <!-- no translation found for dream_timeout_entries:7 (8271452751594598661) -->
+ <string-array name="dream_timeout_entries">
+ <item msgid="6487043225269853023">"ಎಂದಿಗೂ ಇಲ್ಲ"</item>
+ <item msgid="2517785806387977252">"15 ಸೆಕೆಂಡುಗಳು"</item>
+ <item msgid="6347954399441173672">"30 ಸೆಕೆಂಡುಗಳು"</item>
+ <item msgid="4858305253279921789">"1 ನಿಮಿಷ"</item>
+ <item msgid="8109273437140044073">"2 ನಿಮಿಷಗಳು"</item>
+ <item msgid="2788593551142462622">"5 ನಿಮಿಷಗಳು"</item>
+ <item msgid="8012672183888404961">"10 ನಿಮಿಷಗಳು"</item>
+ <item msgid="8271452751594598661">"30 ನಿಮಿಷಗಳು"</item>
+ </string-array>
<string-array name="lock_after_timeout_entries">
<item msgid="2232921187970351881">"ತಕ್ಷಣವೇ"</item>
<item msgid="2038544972632026612">"5 ಸೆಕೆಂಡುಗಳು"</item>
@@ -50,17 +59,47 @@
<item msgid="811192536981678974">"10 ನಿಮಿಷಗಳು"</item>
<item msgid="7258394417241706272">"30 ನಿಮಿಷಗಳು"</item>
</string-array>
- <!-- no translation found for entries_font_size:0 (2340391964816059553) -->
- <!-- no translation found for entries_font_size:0 (6490061470416867723) -->
- <!-- no translation found for entries_font_size:2 (1714184661981538355) -->
- <!-- no translation found for entries_font_size:2 (1678068858001018666) -->
- <!-- no translation found for wifi_status:3 (5848277343965362748) -->
- <!-- no translation found for wifi_status_with_ssid:1 (6816207058895999545) -->
- <!-- no translation found for wifi_status_with_ssid:3 (7547609081339573756) -->
- <!-- no translation found for wifi_status_with_ssid:4 (5145158315060185414) -->
+ <string-array name="entries_font_size">
+ <item msgid="2340391964816059553">"ಸಣ್ಣ"</item>
+ <item msgid="591935967183159581">"ಡೀಫಾಲ್ಟ್"</item>
+ <item msgid="1714184661981538355">"ದೊಡ್ಡದು"</item>
+ <item msgid="6195563047686707484">"ದೊಡ್ಡ"</item>
+ </string-array>
+ <string-array name="wifi_status">
+ <item msgid="1304883790721412351"></item>
+ <item msgid="4157625910392775808">"ಸ್ಕ್ಯಾನ್ ಮಾಡಲಾಗುತ್ತಿದೆ…"</item>
+ <item msgid="5597394826455877834">"ಸಂಪರ್ಕಗೊಳಿಸಲಾಗುತ್ತಿದೆ..."</item>
+ <item msgid="5848277343965362748">"ದೃಢೀಕರಿಸಲಾಗುತ್ತಿದೆ…"</item>
+ <item msgid="3391238031431440676">"IP ವಿಳಾಸವನ್ನು ಪಡೆಯಲಾಗುತ್ತಿದೆ…"</item>
+ <item msgid="5257597310494000224">"ಸಂಪರ್ಕಗೊಂಡಿದೆ"</item>
+ <item msgid="8472497592913050396">"ತಡೆಹಿಡಿಯಲಾಗಿದೆ"</item>
+ <item msgid="1228072488815999109">"ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗುತ್ತಿದೆ..."</item>
+ <item msgid="7253087004422991731">"ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗಿದೆ"</item>
+ <item msgid="4169850917304751227">"ವಿಫಲವಾಗಿದೆ"</item>
+ <item msgid="6266658166690831131">"ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</item>
+ <item msgid="4517230805854909775">"ಕಳಪೆ ಸಂಪರ್ಕವನ್ನು ತಾತ್ಕಾಲಿಕವಾಗಿ ತಡೆಗಟ್ಟಲಾಗುತ್ತಿದೆ"</item>
+ </string-array>
+ <string-array name="wifi_status_with_ssid">
+ <item msgid="4853670665485437464"></item>
+ <item msgid="6816207058895999545">"ಸ್ಕ್ಯಾನ್ ಮಾಡಲಾಗುತ್ತಿದೆ…"</item>
+ <item msgid="8058143476674427024">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> ಗೆ ಸಂಪರ್ಕಪಡಿಸಲಾಗುತ್ತಿದೆ…"</item>
+ <item msgid="7547609081339573756">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> ಜೊತೆ ಪ್ರಮಾಣೀಕರಿಸಲಾಗುತ್ತಿದೆ…"</item>
+ <item msgid="5145158315060185414">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> ನಿಂದ IP ವಿಳಾಸವನ್ನು ಪಡೆಯಲಾಗುತ್ತಿದೆ…"</item>
+ <item msgid="3283243151651124831">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> ಗೆ ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ"</item>
+ <item msgid="6600156231416890902">"ತಡೆಹಿಡಿಯಲಾಗಿದೆ"</item>
+ <item msgid="4133290864821295785">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> ನಿಂದ ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗುತ್ತಿದೆ…"</item>
+ <item msgid="3980154971187953257">"ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗಿದೆ"</item>
+ <item msgid="2847316776634969068">"ವಿಫಲವಾಗಿದೆ"</item>
+ <item msgid="4390990424746035383">"ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ"</item>
+ <item msgid="3618248791367063949">"ಕಳಪೆ ಸಂಪರ್ಕವನ್ನು ತಾತ್ಕಾಲಿಕವಾಗಿ ತಡೆಗಟ್ಟಲಾಗುತ್ತಿದೆ"</item>
+ </string-array>
<!-- no translation found for wifi_tether_security:0 (5586343370515598801) -->
<!-- no translation found for wifi_tether_security:1 (6136336549994615745) -->
- <!-- no translation found for wifi_p2p_wps_setup:0 (5390235347963255303) -->
+ <string-array name="wifi_p2p_wps_setup">
+ <item msgid="5390235347963255303">"ಒತ್ತುವ ಬಟನ್"</item>
+ <item msgid="7401896200768713930">"ಪೀರ್ ಸಾಧನದಿಂದ ಪಿನ್"</item>
+ <item msgid="4526848028011846710">"ಈ ಸಾಧನದಿಂದ ಪಿನ್"</item>
+ </string-array>
<string-array name="wifi_p2p_status">
<item msgid="8741947238021758201">"ಸಂಪರ್ಕಗೊಂಡಿದೆ"</item>
<item msgid="983792611851499732">"ಆಹ್ವಾನಿಸಲಾಗಿದೆ"</item>
@@ -82,8 +121,13 @@
<item msgid="1644506614010085798">"4"</item>
<item msgid="3132506679404897150">"5"</item>
</string-array>
- <!-- no translation found for wifi_signal:1 (7882129634982603782) -->
- <!-- no translation found for wifi_signal:4 (999948812884919584) -->
+ <string-array name="wifi_signal">
+ <item msgid="1709949377823900951">"ಕಳಪೆ"</item>
+ <item msgid="7882129634982603782">"ಕಳಪೆ"</item>
+ <item msgid="6457357501905996224">"ಸಾಮಾನ್ಯ"</item>
+ <item msgid="405271628162918841">"ಉತ್ತಮ"</item>
+ <item msgid="999948812884919584">"ಅತ್ಯುತ್ತಮ"</item>
+ </string-array>
<string-array name="data_usage_data_range">
<item msgid="8986775481492954015">"ಕಳೆದ 30 ದಿನಗಳು"</item>
<item msgid="3211287705232736964">"ಬಳಕೆಯ ಆವರ್ತನೆಯನ್ನು ಹೊಂದಿಸಿ..."</item>
@@ -119,7 +163,10 @@
<item msgid="7330627471456865502">"MSCHAPV2"</item>
<item msgid="6255179395132581882">"GTC"</item>
</string-array>
- <!-- no translation found for wifi_ip_settings:1 (4377002609760712163) -->
+ <string-array name="wifi_ip_settings">
+ <item msgid="2717196390555072244">"DHCP"</item>
+ <item msgid="4377002609760712163">"ಸ್ಥಿರ"</item>
+ </string-array>
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"ಯಾವುದೂ ಇಲ್ಲ"</item>
<item msgid="1464741437353223198">"ಹಸ್ತಚಾಲಿತ"</item>
@@ -176,7 +223,7 @@
<item msgid="2585253854462134715">"ಒರಟು ಸ್ಥಳ"</item>
<item msgid="1830619568689922920">"ಉತ್ಕೃಷ್ಟ ಸ್ಥಳ"</item>
<item msgid="3317274469481923141">"GPS"</item>
- <item msgid="8931785990160383356">"ಕಂಪನ"</item>
+ <item msgid="8931785990160383356">"ವೈಬ್ರೇಟ್"</item>
<item msgid="8632513128515114092">"ಓದುವ ಸಂಪರ್ಕಗಳು"</item>
<item msgid="3741042113569620272">"ಸಂಪರ್ಕಗಳನ್ನು ಮಾರ್ಪಡಿಸಿ"</item>
<item msgid="4204420969709009931">"ಕರೆಯ ಲಾಗ್ ಓದಿ"</item>
@@ -239,11 +286,73 @@
<item msgid="1165623660533024666">"ಹಿನ್ನೆಲೆಯಲ್ಲಿ ರನ್ ಮಾಡಿ"</item>
<item msgid="6423861043647911030">"ಪ್ರವೇಶಿಸುವಿಕೆ ವಾಲ್ಯೂಮ್"</item>
</string-array>
- <!-- no translation found for app_ops_labels:3 (7836406246005211990) -->
- <!-- no translation found for app_ops_labels:4 (3951439024549922598) -->
- <!-- no translation found for app_ops_labels:8 (3597797992398484655) -->
- <!-- no translation found for app_ops_labels:20 (3037159047591081136) -->
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"ಸ್ಥಳ"</item>
+ <item msgid="6656077694190491067">"ಸ್ಥಳ"</item>
+ <item msgid="8790228218278477369">"ಸ್ಥಳ"</item>
+ <item msgid="7836406246005211990">"ವೈಬ್ರೇಟ್"</item>
+ <item msgid="3951439024549922598">"ಓದುವ ಸಂಪರ್ಕಗಳು"</item>
+ <item msgid="8802152411647068">"ಸಂಪರ್ಕಗಳನ್ನು ಮಾರ್ಪಡಿಸಿ"</item>
+ <item msgid="229544934599698735">"ಕರೆಯ ಲಾಗ್ ಓದಿ"</item>
+ <item msgid="7396102294405899613">"ಕರೆಯ ಲಾಗ್ ಮಾರ್ಪಡಿಸಿ"</item>
+ <item msgid="3597797992398484655">"ಕ್ಯಾಲೆಂಡರ್ ಓದಿ"</item>
+ <item msgid="2705975774250907343">"ಕ್ಯಾಲೆಂಡರ್ ಮಾರ್ಪಡಿಸಿ"</item>
+ <item msgid="4668747371441932697">"ಸ್ಥಳ"</item>
+ <item msgid="1487578921720243646">"ಪೋಸ್ಟ್ ಅಧಿಸೂಚನೆ"</item>
+ <item msgid="4636080349724146638">"ಸ್ಥಳ"</item>
+ <item msgid="673510900286463926">"ಫೋನ್ ಕರೆ"</item>
+ <item msgid="542083422784609790">"SMS/MMS ಓದಿ"</item>
+ <item msgid="1033780373029588436">"SMS/MMS ಬರೆಯಿರಿ"</item>
+ <item msgid="5647111115517787488">"SMS/MMS ಸ್ವೀಕರಿಸಿ"</item>
+ <item msgid="8591105601108455893">"SMS/MMS ಸ್ವೀಕರಿಸಿ"</item>
+ <item msgid="7730995008517841903">"SMS/MMS ಸ್ವೀಕರಿಸಿ"</item>
+ <item msgid="2613033109026626086">"SMS/MMS ಸ್ವೀಕರಿಸಿ"</item>
+ <item msgid="3037159047591081136">"SMS/MMS ಕಳುಹಿಸಿ"</item>
+ <item msgid="4726682243833913568">"SMS/MMS ಓದಿ"</item>
+ <item msgid="6555678522277865572">"SMS/MMS ಬರೆಯಿರಿ"</item>
+ <item msgid="6981734935578130884">"ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಮಾರ್ಪಡಿಸಿ"</item>
+ <item msgid="8705854389991425629">"ಮೇಲಕ್ಕೆ ಎಳೆಯಿರಿ"</item>
+ <item msgid="5861356020344153651">"ಅಧಿಸೂಚನೆಗಳನ್ನು ಪ್ರವೇಶಿಸಿ"</item>
+ <item msgid="78432174621628659">"ಕ್ಯಾಮರಾ"</item>
+ <item msgid="3986116419882154794">"ಆಡಿಯೋ ರೆಕಾರ್ಡ್ ಮಾಡಲು"</item>
+ <item msgid="4516840825756409490">"ಆಡಿಯೋ ಪ್ಲೇ ಮಾಡಿ"</item>
+ <item msgid="6811712502798183957">"ಕ್ಲಿಪ್ಬೋರ್ಡ್ ಓದಿ"</item>
+ <item msgid="2780369012602289114">"ಕ್ಲಿಪ್ಬೋರ್ಡ್ ಮಾರ್ಪಡಿಸಿ"</item>
+ <item msgid="2331359440170850868">"ಮಾಧ್ಯಮ ಬಟನ್ಗಳು"</item>
+ <item msgid="6133599737122751231">"ಆಡಿಯೊ ಫೋಕಸ್"</item>
+ <item msgid="6844485713404805301">"ಮಾಸ್ಟರ್ ವಾಲ್ಯೂಮ್"</item>
+ <item msgid="1600379420669104929">"ಧ್ವನಿ ವಾಲ್ಯೂಮ್"</item>
+ <item msgid="6296768210470214866">"ರಿಂಗ್ ವಾಲ್ಯೂಮ್"</item>
+ <item msgid="510690696071629241">"ಮಾಧ್ಯಮ ವಾಲ್ಯೂಮ್"</item>
+ <item msgid="406861638631430109">"ಅಲಾರಮ್ ವಾಲ್ಯೂಮ್"</item>
+ <item msgid="4715864795872233884">"ಅಧಿಸೂಚನೆ ವಾಲ್ಯೂಮ್"</item>
+ <item msgid="2311478519251301183">"ಬ್ಲೂಟೂತ್ ವಾಲ್ಯೂಮ್"</item>
+ <item msgid="5133991377896747027">"ಎಚ್ಚರವಾಗಿಡಿ"</item>
+ <item msgid="2464189519136248621">"ಸ್ಥಳ"</item>
+ <item msgid="2062677934050803037">"ಸ್ಥಳ"</item>
+ <item msgid="1735171933192715957">"ಬಳಕೆ ಅಂಕಿಅಂಶಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳಿ"</item>
+ <item msgid="1014093788778383554">"ಮೈಕ್ರೋಫೋನ್ ಮ್ಯೂಟ್/ಅನ್ಮ್ಯೂಟ್ ಮಾಡಿ"</item>
+ <item msgid="4199297950608622850">"ಟೋಸ್ಟ್ ತೋರಿಸಿ"</item>
+ <item msgid="2527962435313398821">"ಪ್ರಾಜೆಕ್ಟ್ ಮೀಡಿಯಾ"</item>
+ <item msgid="5117506254221861929">"VPN ಸಕ್ರಿಯಗೊಳಿಸಿ"</item>
+ <item msgid="8291198322681891160">"ವಾಲ್ಪೇಪರ್ ರೈಟ್ ಮಾಡಿ"</item>
+ <item msgid="7106921284621230961">"ವಿನ್ಯಾಸಕ್ಕೆ ಸಹಾಯ"</item>
+ <item msgid="4496533640894624799">"ಸ್ಕ್ರೀನ್ಶಾಟ್ಗೆ ಸಹಾಯ"</item>
+ <item msgid="2598847264853993611">"ಫೋನ್ ಸ್ಥಿತಿಯನ್ನು ರೀಡ್ ಮಾಡಿ"</item>
+ <item msgid="9215610846802973353">"ಧ್ವನಿಮೇಲ್ ಸೇರಿಸಿ"</item>
+ <item msgid="9186411956086478261">"sip ಬಳಸಿ"</item>
+ <item msgid="6884763100104539558">"ಹೊರಹೋಗುವ ಕರೆಯನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಿ"</item>
+ <item msgid="125513972170580692">"ಬೆರಳಚ್ಚು"</item>
+ <item msgid="2556071024281275619">"ದೇಹ ಸೆನ್ಸರ್ಗಳು"</item>
+ <item msgid="617168514928339387">"ಸೆಲ್ ಪ್ರಸಾರಗಳನ್ನು ರೀಡ್ ಮಾಡಿ"</item>
+ <item msgid="7134693570516523585">"ಸ್ಥಳ ನಕಲಿಸು"</item>
+ <item msgid="7224489175375229399">"ಸಂಗ್ರಹಣೆಯನ್ನು ರೀಡ್ ಮಾಡಿ"</item>
+ <item msgid="8472735063903258202">"ಸಂಗ್ರಹಣೆಯನ್ನು ರೈಟ್ ಮಾಡಿ"</item>
+ <item msgid="4069276819909595110">"ಸ್ಕ್ರೀನ್ ಆನ್ ಮಾಡಿ"</item>
+ <item msgid="1228338896751121025">"ಖಾತೆಗಳನ್ನು ಪಡೆದುಕೊಳ್ಳಿ"</item>
+ <item msgid="3181581793459233672">"ಹಿನ್ನೆಲೆಯಲ್ಲಿ ರನ್ ಮಾಡಿ"</item>
+ <item msgid="2340936043025374076">"ಪ್ರವೇಶಿಸುವಿಕೆ ವಾಲ್ಯೂಮ್"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"ಚಿಕ್ಕದು"</item>
<item msgid="4816511817309094890">"ಮಧ್ಯಮ"</item>
@@ -260,7 +369,13 @@
<item msgid="4627069151979553527">"ಹಸ್ತಾಕ್ಷರಲಿಪಿ"</item>
<item msgid="6896773537705206194">"ಸ್ಮಾಲ್ ಕ್ಯಾಪಿಟಲ್ಸ್"</item>
</string-array>
- <!-- no translation found for captioning_font_size_selector_titles:3 (2784236342175159295) -->
+ <string-array name="captioning_font_size_selector_titles">
+ <item msgid="1680223634161592855">"ತುಂಬಾ ಸಣ್ಣ"</item>
+ <item msgid="5091603983404027034">"ಸಣ್ಣ"</item>
+ <item msgid="176844712416932112">"ಸಾಮಾನ್ಯ"</item>
+ <item msgid="2784236342175159295">"ದೊಡ್ಡದು"</item>
+ <item msgid="218913203203160606">"ತುಂಬಾ ದೊಡ್ಡದು"</item>
+ </string-array>
<string-array name="captioning_edge_type_selector_titles">
<item msgid="3865198759294188069">"ಡೀಫಾಲ್ಟ್"</item>
<item msgid="6488643537808152001">"ಯಾವುದೂ ಇಲ್ಲ"</item>
@@ -275,7 +390,14 @@
<item msgid="1874668269931014581">"75%"</item>
<item msgid="6462911487571123954">"100%"</item>
</string-array>
- <!-- no translation found for captioning_preset_selector_titles:2 (5891360837786277638) -->
+ <string-array name="captioning_preset_selector_titles">
+ <item msgid="326819345272910536">"ಆಪ್ ಡಿಫಾಲ್ಟ್ ಬಳಸಿ"</item>
+ <item msgid="8611890312638868524">"ಕಪ್ಪು ಬಣ್ಣದಲ್ಲಿ ಬಿಳಿ"</item>
+ <item msgid="5891360837786277638">"ಬಿಳಿ ಬಣ್ಣದಲ್ಲಿ ಕಪ್ಪು"</item>
+ <item msgid="2798457065945456853">"ಕಪ್ಪು ಬಣ್ಣದಲ್ಲಿ ಹಳದಿ"</item>
+ <item msgid="5799049811524553967">"ನೀಲಿ ಬಣ್ಣದಲ್ಲಿ ಹಳದಿ"</item>
+ <item msgid="3673930830658169860">"ಕಸ್ಟಮ್"</item>
+ </string-array>
<string-array name="vpn_types_long">
<item msgid="6566768880689730097">"PPTP VPN"</item>
<item msgid="1349760781118368659">"ಪೂರ್ವ-ಹಂಚಿಕೆಯಾದ ಕೀಗಳನ್ನು ಹೊಂದಿರುವ L2TP/IPSec VPN"</item>
@@ -288,15 +410,32 @@
<item msgid="2958623927055120839">"ಯಾವುದೂ ಅಲ್ಲ"</item>
<item msgid="1157046369795346308">"ಹಸ್ತಚಾಲಿತ"</item>
</string-array>
- <!-- no translation found for vpn_states:4 (9135049670787351881) -->
+ <string-array name="vpn_states">
+ <item msgid="5408915841694583740">"ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗಿದೆ"</item>
+ <item msgid="8754480102834556765">"ಆರಂಭಿಸಲಾಗುತ್ತಿದೆ..."</item>
+ <item msgid="3351334355574270250">"ಸಂಪರ್ಕಗೊಳಿಸಲಾಗುತ್ತಿದೆ..."</item>
+ <item msgid="8303882153995748352">"ಸಂಪರ್ಕಗೊಂಡಿದೆ"</item>
+ <item msgid="9135049670787351881">"ಅವಧಿ ಮೀರಿದೆ"</item>
+ <item msgid="2124868417182583926">"ವಿಫಲವಾಗಿದೆ"</item>
+ </string-array>
<string-array name="security_settings_premium_sms_values">
<item msgid="1164265643455394443">"ಕೇಳಿ"</item>
<item msgid="7718817231348607934">"ಎಂದಿಗೂ ಅನುಮತಿಸಬೇಡಿ"</item>
<item msgid="8184570120217958741">"ಯಾವಾಗಲೂ ಅನುಮತಿಸಿ"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"ಸಾಮಾನ್ಯ"</item>
+ <item msgid="5101233285497327432">"ಮಧ್ಯಮ"</item>
+ <item msgid="1555861583162930714">"ಕಡಿಮೆ"</item>
+ <item msgid="1719683776264798117">"ಗಂಭೀರ"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"ಸಾಮಾನ್ಯ"</item>
+ <item msgid="6107138933849816768">"ಮಧ್ಯಮ"</item>
+ <item msgid="182695359839047859">"ಕಡಿಮೆ"</item>
+ <item msgid="8577246509202964244">"ಗಂಭೀರ"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"ನಿರಂತರ"</item>
<item msgid="167418068739176448">"ಉನ್ನತ ಚಟುವಟಿಕೆ"</item>
diff --git a/tests/CarDeveloperOptions/res/values-kn/strings.xml b/tests/CarDeveloperOptions/res/values-kn/strings.xml
index 2974f74..2150487 100644
--- a/tests/CarDeveloperOptions/res/values-kn/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-kn/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"ಪರದೆಯ ಮೇಲೆ ಪಠ್ಯದ ಗಾತ್ರವನ್ನು ಹಿಗ್ಗಿಸಿ ಅಥವಾ ಕುಗ್ಗಿಸಿ."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"ಚಿಕ್ಕದಾಗಿಸು"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"ದೊಡ್ಡದಾಗಿಸು"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"ಮಾದರಿ ಪಠ್ಯ"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Oz ನ ಅದ್ಭುತವಾದ ಮಾಂತ್ರಿಕ"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"ಅಧ್ಯಾಯ 11: Oz ನ ಅದ್ಭುತವಾದ ಎಮೆರಾಲ್ಡ್ ಸಿಟಿ"</string>
@@ -180,7 +179,7 @@
<string name="connected_device_connected_title" msgid="6255107326608785482">"ಪ್ರಸ್ತುತ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ"</string>
<string name="connected_device_saved_title" msgid="8270136893488475163">"ಉಳಿಸಿರುವ ಸಾಧನಗಳು"</string>
<string name="connected_device_add_device_summary" msgid="7960491471270158891">"ಜೋಡಿಸಲು ಬ್ಲೂಟೂತ್ ಆನ್ ಆಗುತ್ತದೆ"</string>
- <string name="connected_device_connections_title" msgid="9205000271382018428">"ಸಂಪರ್ಕ ಆದ್ಯತೆಗಳು"</string>
+ <string name="connected_device_connections_title" msgid="9205000271382018428">"ಕನೆಕ್ಷನ್ ಆದ್ಯತೆಗಳು"</string>
<string name="connected_device_previously_connected_title" msgid="225918223397410428">"ಹಿಂದೆ ಸಂಪರ್ಕಗೊಂಡಿದ್ದ ಸಾಧನಗಳು"</string>
<string name="connected_device_previously_connected_screen_title" msgid="2018789662358162716">"ಹಿಂದೆ ಸಂಪರ್ಕಗೊಂಡಿದ್ದ"</string>
<string name="connected_device_bluetooth_turned_on_toast" msgid="4652326177920814476">"ಬ್ಲೂಟೂತ್ ಆನ್ ಮಾಡಲಾಗಿದೆ"</string>
@@ -208,7 +207,7 @@
<string name="proxy_error_empty_port" msgid="8034561724923076215">"ನೀವು ಪೋರ್ಟ್ ಕ್ಷೇತ್ರವನ್ನು ಪೂರ್ಣಗೊಳಿಸುವ ಅಗತ್ಯವಿದೆ."</string>
<string name="proxy_error_empty_host_set_port" msgid="8471455809508588255">"ಹೋಸ್ಟ್ ಕ್ಷೇತ್ರವು ಖಾಲಿ ಇದ್ದಲ್ಲಿ, ಪೋರ್ಟ್ ಕ್ಷೇತ್ರವು ಕೂಡ ಖಾಲಿ ಇರಬೇಕು."</string>
<string name="proxy_error_invalid_port" msgid="4046559920586100637">"ನೀವು ಟೈಪ್ ಮಾಡಿದ ಪೋರ್ಟ್ ಮಾನ್ಯವಾಗಿಲ್ಲ."</string>
- <string name="proxy_warning_limited_support" msgid="9026539134219095768">"ಬ್ರೌಸರ್ HTTP ಪ್ರಾಕ್ಸಿ ಬಳಸಿಕೊಂಡಿದೆ. ಇತರೆ ಆಪ್ಗಳು ಬಳಸಿಕೊಳ್ಳದೆ ಇರಬಹುದು."</string>
+ <string name="proxy_warning_limited_support" msgid="9026539134219095768">"ಬ್ರೌಸರ್ HTTP ಪ್ರಾಕ್ಸಿ ಬಳಸಿಕೊಂಡಿದೆ. ಇತರೆ ಆ್ಯಪ್ಗಳು ಬಳಸಿಕೊಳ್ಳದೆ ಇರಬಹುದು."</string>
<string name="proxy_url_title" msgid="882042361706435904">"PAC URL: "</string>
<string name="radio_info_dl_kbps" msgid="2903778264453410272">"DL ಬ್ಯಾಂಡ್ವಿಡ್ತ್ (kbps):"</string>
<string name="radio_info_ul_kbps" msgid="3802245899811732716">"UL ಬ್ಯಾಂಡ್ವಿಡ್ತ್ (kbps):"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"ಪ್ರೊಫೈಲ್ ಮಾಹಿತಿ"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"ಖಾತೆಗಳು"</string>
<string name="location_settings_title" msgid="2707201457572301030">"ಸ್ಥಳ"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"ಸ್ಥಳ ಬಳಸಿ"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"ಸ್ಥಳ ಬಳಸಿ"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"ಆಫ್ ಮಾಡಿ"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">ಸ್ಥಳವು ಆನ್ ಆಗಿರುವಾಗ - <xliff:g id="COUNT_1">%1$d</xliff:g> ಆ್ಯಪ್ಗಳು ಸ್ಥಳವನ್ನು ಪ್ರವೇಶಿಸಬಹುದು</item>
@@ -481,7 +480,7 @@
<string name="face_lock_screen_setup_skip_dialog_text" product="tablet" msgid="2998863111689476550">"ನಿಮ್ಮ ಟ್ಯಾಬ್ಲೆಟ್ ಅನ್ನು ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಆಯ್ಕೆಯ ಜೊತೆಗೆ ಸುರಕ್ಷಿತಗೊಳಿಸಿ, ಆದ್ದರಿಂದ ಅದು ಕಳೆದುಹೋದಾಗ ಅಥವಾ ಅಪಹರಣವಾದಾಗ ಅದನ್ನು ಯಾರಾದರೂ ಬಳಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ಮುಖ ಗುರುತಿಸುವಿಕೆಯನ್ನು ಸೆಟಪ್ ಮಾಡಲು ನಿಮಗೆ ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಆಯ್ಕೆಯೂ ಸಹ ಅಗತ್ಯವಿದೆ. ರದ್ದುಗೊಳಿಸಿ ಟ್ಯಾಪ್ ಮಾಡಿ, ನಂತರ ಪಿನ್ ಅನ್ನು ಹೊಂದಿಸಿ ಅಥವಾ ಮತ್ತೊಂದು ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಆಯ್ಕೆಯನ್ನು ಆರಿಸಿ."</string>
<string name="face_lock_screen_setup_skip_dialog_text" product="device" msgid="6780557259734235952">"ನಿಮ್ಮ ಸಾಧನವನ್ನು ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಆಯ್ಕೆಯ ಜೊತೆಗೆ ಸುರಕ್ಷಿತಗೊಳಿಸಿ, ಆದ್ದರಿಂದ ಅದು ಕಳೆದುಹೋದಾಗ ಅಥವಾ ಅಪಹರಣವಾದಾಗ ಅದನ್ನು ಯಾರಾದರೂ ಬಳಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ಮುಖ ಗುರುತಿಸುವಿಕೆಯನ್ನು ಸೆಟಪ್ ಮಾಡಲು ನಿಮಗೆ ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಆಯ್ಕೆಯೂ ಸಹ ಅಗತ್ಯವಿದೆ. ರದ್ದುಗೊಳಿಸಿ ಟ್ಯಾಪ್ ಮಾಡಿ, ನಂತರ ಪಿನ್ ಅನ್ನು ಹೊಂದಿಸಿ ಅಥವಾ ಮತ್ತೊಂದು ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಆಯ್ಕೆಯನ್ನು ಆರಿಸಿ."</string>
<string name="face_lock_screen_setup_skip_dialog_text" product="default" msgid="8541640018478926775">"ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಆಯ್ಕೆಯ ಜೊತೆಗೆ ಸುರಕ್ಷಿತಗೊಳಿಸಿ, ಆದ್ದರಿಂದ ಅದು ಕಳೆದುಹೋದಾಗ ಅಥವಾ ಅಪಹರಣವಾದಾಗ ಅದನ್ನು ಯಾರಾದರೂ ಬಳಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ಮುಖ ಗುರುತಿಸುವಿಕೆಯನ್ನು ಸೆಟಪ್ ಮಾಡಲು ನಿಮಗೆ ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಆಯ್ಕೆಯೂ ಸಹ ಅಗತ್ಯವಿದೆ. ರದ್ದುಗೊಳಿಸಿ ಟ್ಯಾಪ್ ಮಾಡಿ, ನಂತರ ಪಿನ್ ಅನ್ನು ಹೊಂದಿಸಿ ಅಥವಾ ಮತ್ತೊಂದು ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಆಯ್ಕೆಯನ್ನು ಆರಿಸಿ."</string>
- <string name="lock_screen_pin_skip_title" msgid="8217519439213393785">"ಪಿನ್ ಸೆಟಪ್ ಸ್ಕಿಪ್ ಮಾಡುವುದೇ?"</string>
+ <string name="lock_screen_pin_skip_title" msgid="8217519439213393785">"ಪಿನ್ ಸೆಟಪ್ ಸ್ಕಿಪ್ ಮಾಡಬೇಕೇ?"</string>
<string name="lock_screen_password_skip_title" msgid="3725788215672959827">"ಪಾಸ್ವರ್ಡ್ ಸೆಟಪ್ ಸ್ಕಿಪ್ ಮಾಡುವುದೇ?"</string>
<string name="lock_screen_pattern_skip_title" msgid="4237030500353932005">"ಪ್ಯಾಟರ್ನ್ ಸೆಟಪ್ ಸ್ಕಿಪ್ ಮಾಡುವುದೇ?"</string>
<string name="security_settings_fingerprint_enroll_setup_screen_lock" msgid="9036983528330627756">"ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಹೊಂದಿಸಿ"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Wi‑Fi ಆನ್ ಮಾಡಿ"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"ವೈ-ಫೈ ಬಳಸಿ"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"ವೈ-ಫೈ ಬಳಸಿ"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi‑Fi ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"ವಯರ್ಲೆಸ್ ಪ್ರವೇಶಿಸುವಿಕೆ ಅಂಶಗಳನ್ನು ಹೊಂದಿಸಿ & ನಿರ್ವಹಿಸಿ"</string>
@@ -909,8 +908,8 @@
<string name="wifi_hidden_network_warning" msgid="8182333050353796473">"ನಿಮ್ಮ ನೆಟ್ವರ್ಕ್ ID ಯನ್ನು ರೂಟರ್ ಪ್ರಸಾರ ಮಾಡದಿದ್ದಲ್ಲಿ ಆದರೆ ಭವಿಷ್ಯದಲ್ಲಿ ನೀವು ಅದಕ್ಕೆ ಸಂಪರ್ಕಿಸಲು ಬಯಸಿದರೆ, ನೀವು ನೆಟ್ವರ್ಕ್ ಅನ್ನು ಮರೆಮಾಡಲಾಗಿರುವುದು ಎಂದು ಹೊಂದಿಸಬಹುದು.\n\nನಿಮ್ಮ ಫೋನ್ ನಿಯಮಿತವಾಗಿ ನೆಟ್ವರ್ಕ್ ಅನ್ನು ಹುಡುಕಲು ಸಿಗ್ನಲ್ ಅನ್ನು ಪ್ರಸಾರ ಮಾಡುವುದರಿಂದ ಭದ್ರತಾ ಅಪಾಯ ಎದುರಾಗಬಹುದು.\n\nನೆಟ್ವರ್ಕ್ ಅನ್ನು ಮರೆಮಾಡಿದ ಕೂಡಲೇ ರೂಟರ್ ಸೆಟ್ಟಿಂಗ್ಗಳು ಬದಲಾಗುವುದಿಲ್ಲ."</string>
<string name="wifi_signal" msgid="696548364467704808">"ಸಿಗ್ನಲ್ ಸಾಮರ್ಥ್ಯ"</string>
<string name="wifi_status" msgid="3439931558930689940">"ಸ್ಥಿತಿ"</string>
- <string name="tx_wifi_speed" msgid="2571810085003261073">"ಲಿಂಕ್ ವೇಗವನ್ನು ಪ್ರಸಾರ ಮಾಡಿ"</string>
- <string name="rx_wifi_speed" msgid="7392873246110937187">"ಲಿಂಕ್ ವೇಗವನ್ನು ಸ್ವೀಕರಿಸಿ"</string>
+ <string name="tx_wifi_speed" msgid="2571810085003261073">"ಟ್ರಾನ್ಸ್ಮಿಟ್ ಲಿಂಕ್ ವೇಗ"</string>
+ <string name="rx_wifi_speed" msgid="7392873246110937187">"ಸ್ವೀಕರಿಸುವ ಲಿಂಕ್ ವೇಗ"</string>
<string name="wifi_frequency" msgid="6132852924995724246">"ಫ್ರೀಕ್ವೆನ್ಸಿ"</string>
<string name="wifi_ip_address" msgid="5572539114989914831">"IP ವಿಳಾಸ"</string>
<string name="passpoint_label" msgid="7429247462404128615">"ಇದರ ಮೂಲಕ ಉಳಿಸಲಾಗಿದೆ"</string>
@@ -941,7 +940,7 @@
<string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"“<xliff:g id="SSID">%1$s</xliff:g>” ಗೆ ಸಂಪರ್ಕಿಸಲು QR ಕೋಡ್ ಅನ್ನು ಕೆಳಗೆ ಕೇಂದ್ರೀಕರಿಸಿ"</string>
<string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"QR ಕೋಡ್ ಸ್ಕ್ಯಾನ್ ಮಾಡುವ ಮೂಲಕ ವೈ-ಫೈ ಗೆ ಸೇರಿ"</string>
<string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"ವೈ-ಫೈ ಹಂಚಿಕೊಳ್ಳಿ"</string>
- <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"“<xliff:g id="SSID">%1$s</xliff:g>” ಗೆ ಸಂಪರ್ಕಪಡಿಸಲು ಮತ್ತು ಪಾಸ್ವರ್ಡ್ ಹಂಚಿಕೊಳ್ಳಲು ಈ QR ಕೋಡ್ ಅನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿ"</string>
+ <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"“<xliff:g id="SSID">%1$s</xliff:g>” ಗೆ ಕನೆಕ್ಟ್ ಮಾಡಲು ಮತ್ತು ಪಾಸ್ವರ್ಡ್ ಹಂಚಿಕೊಳ್ಳಲು ಈ QR ಕೋಡ್ ಅನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿ"</string>
<string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"“<xliff:g id="SSID">%1$s</xliff:g>” ಗೆ ಸಂಪರ್ಕಪಡಿಸಲು ಈ QR ಕೋಡ್ ಅನ್ನು ಸ್ಕ್ಯಾನ್ ಮಾಡಿ"</string>
<string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"QR ಕೋಡ್ ಅನ್ನು ಓದಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ. ಕೋಡ್ ಮರುನಮೂದಿಸಿ ಅಥವಾ ಪುನಃ ಪ್ರಯತ್ನಿಸಿ"</string>
<string name="wifi_dpp_failure_authentication_or_configuration" msgid="9142051662156233679">"ಪುನಃ ಪ್ರಯತ್ನಿಸಿ. ಸಮಸ್ಯೆ ಮುಂದುವರಿದರೆ, ಸಾಧನ ತಯಾರಕರನ್ನು ಸಂಪರ್ಕಿಸಿ"</string>
@@ -961,7 +960,7 @@
<string name="wifi_dpp_sharing_wifi_with_this_device" msgid="2540529164687476827">"ಈ ಸಾಧನದೊಂದಿಗೆ ವೈ-ಫೈ ಅನ್ನು ಹಂಚಿಕೊಳ್ಳಲಾಗುತ್ತಿದೆ…"</string>
<string name="wifi_dpp_connecting" msgid="4229290407210299897">"ಸಂಪರ್ಕಿಸುತ್ತಿದೆ…"</string>
<string name="wifi_dpp_share_hotspot" msgid="847987212473038179">"ಹಾಟ್ಸ್ಪಾಟ್ ಹಂಚಿಕೊಳ್ಳಿ"</string>
- <string name="wifi_dpp_lockscreen_title" msgid="3910665850075275963">"ಇದು ನೀವೇ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ"</string>
+ <string name="wifi_dpp_lockscreen_title" msgid="3910665850075275963">"ಇದು ನೀವೇ ಎಂದು ದೃಢೀಕರಿಸಿ"</string>
<string name="wifi_dpp_wifi_password" msgid="8007558344032612455">"ವೈ-ಫೈ ಪಾಸ್ವರ್ಡ್: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
<string name="wifi_dpp_hotspot_password" msgid="6172326289042241924">"ಹಾಟ್ಸ್ಪಾಟ್ ಪಾಸ್ವರ್ಡ್: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
<string name="wifi_dpp_add_device" msgid="1347056725253936358">"ಸಾಧನವನ್ನು ಸೇರಿಸಿ"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"ವೈ-ಫೈ"</item>
+ <item msgid="2271962426654621656">"ಮೊಬೈಲ್"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"ವೈ-ಫೈ ಲಭ್ಯವಿಲ್ಲದಿದ್ದರೆ, ಮೊಬೈಲ್ ನೆಟ್ವರ್ಕ್ ಬಳಸಿ"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"ಮೊಬೈಲ್ ನೆಟ್ವರ್ಕ್ ಲಭ್ಯವಿಲ್ಲದಿದ್ದರೆ, ವೈ-ಫೈ ಬಳಸಿ"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"ವೈ-ಫೈ ಬಳಸಿ ಕರೆ ಮಾಡಿ. ವೈ-ಫೈ ಸಂಪರ್ಕ ಕಡಿತಗೊಂಡರೆ, ಕರೆ ಕೊನೆಗೊಳ್ಳುತ್ತದೆ."</string>
@@ -1166,7 +1168,7 @@
<string name="accessibility_category_personal" msgid="1423427301759058762">"ವೈಯಕ್ತಿಕ ಪ್ರೊಫೈಲ್ ಖಾತೆಗಳು"</string>
<string name="accessibility_work_account_title" msgid="3195468574776888011">"ಕೆಲಸದ ಖಾತೆ - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
<string name="accessibility_personal_account_title" msgid="7251761883688839354">"ವೈಯಕ್ತಿಕ ಖಾತೆ - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
- <string name="search_settings" msgid="5809250790214921377">"ಹುಡುಕಿ"</string>
+ <string name="search_settings" msgid="5809250790214921377">"Search"</string>
<string name="display_settings" msgid="1045535829232307190">"ಪ್ರದರ್ಶನ"</string>
<string name="accelerometer_title" msgid="2427487734964971453">"ಪರದೆಯನ್ನು ಸ್ವಯಂ-ತಿರುಗಿಸು"</string>
<string name="color_mode_title" msgid="8164858320869449142">"ಬಣ್ಣಗಳು"</string>
@@ -1335,7 +1337,7 @@
<string name="status_number_sim_slot" product="tablet" msgid="4518232285651165459">"MDN (ಸಿಮ್ ಸ್ಲಾಟ್ %1$d)"</string>
<string name="status_number_sim_slot" product="default" msgid="3660851494421332328">"ಫೋನ್ ಸಂಖ್ಯೆ (ಸಿಮ್ ಸ್ಲಾಟ್ %1$d)"</string>
<string name="status_number_sim_status" product="tablet" msgid="8069693515860290952">"ಸಿಮ್ ನಲ್ಲಿ MDN"</string>
- <string name="status_number_sim_status" product="default" msgid="6602562692270457610">"ಸಿಮ್ನಲ್ಲಿ ಫೋನ್ ಸಂಖ್ಯೆ"</string>
+ <string name="status_number_sim_status" product="default" msgid="6602562692270457610">"ಸಿಮ್ನ ಫೋನ್ ಸಂಖ್ಯೆ"</string>
<string name="status_min_number" msgid="8346889546673707777">"ನಿಮಿ"</string>
<string name="status_msid_number" msgid="7808175928664357661">"MSID"</string>
<string name="status_prl_version" msgid="5634561205739199042">"PRL ಆವೃತ್ತಿ"</string>
@@ -1612,7 +1614,7 @@
<string name="tether_settings_title_wifi" msgid="2060965130234484613">"ಪೋರ್ಟಬಲ್ ಹಾಟ್ಸ್ಪಾಟ್"</string>
<string name="tether_settings_title_bluetooth" msgid="1999590158102569959">"ಬ್ಲೂಟೂತ್ ಟೆಥರಿಂಗ್"</string>
<string name="tether_settings_title_usb_bluetooth" msgid="1159128764162788159">"ಟೆಥರಿಂಗ್"</string>
- <string name="tether_settings_title_all" msgid="6935843543433954181">"ಹಾಟ್ಸ್ಪಾಟ್ ಮತ್ತು ಟೆಥರಿಂಗ್"</string>
+ <string name="tether_settings_title_all" msgid="6935843543433954181">"ಹಾಟ್ಸ್ಪಾಟ್ & ಟೆಥರಿಂಗ್"</string>
<string name="tether_settings_summary_hotspot_on_tether_on" msgid="1289593649526514499">"ಹಾಟ್ಸ್ಪಾಟ್ ಆನ್ ಆಗಿದೆ, ಟೆಥರಿಂಗ್"</string>
<string name="tether_settings_summary_hotspot_on_tether_off" msgid="8010689354668285422">"ಹಾಟ್ಸ್ಪಾಟ್ ಆನ್ ಆಗಿದೆ"</string>
<string name="tether_settings_summary_hotspot_off_tether_on" msgid="1349909238672649877">"ಟೆಥರಿಂಗ್"</string>
@@ -1744,14 +1746,14 @@
<string name="lockpassword_confirm_your_password_header_frp" msgid="7326670978891793470">"ಪಾಸ್ವರ್ಡ್ ಪರಿಶೀಲಿಸಿ"</string>
<string name="lockpassword_invalid_pin" msgid="3059022215815900137">"ತಪ್ಪಾದ ಪಿನ್"</string>
<string name="lockpassword_invalid_password" msgid="8374331995318204099">"ತಪ್ಪು ಪಾಸ್ವರ್ಡ್"</string>
- <string name="lockpattern_need_to_unlock_wrong" msgid="1328670466959377948">"ತಪ್ಪು ಪ್ಯಾಟರ್ನ್"</string>
+ <string name="lockpattern_need_to_unlock_wrong" msgid="1328670466959377948">"ಪ್ಯಾಟರ್ನ್ ತಪ್ಪಾಗಿದೆ"</string>
<string name="lock_settings_title" msgid="233657584969886812">"ಸಾಧನ ಭದ್ರತೆ"</string>
<string name="lockpattern_change_lock_pattern_label" msgid="333149762562581510">"ಅನ್ಲಾಕ್ ನಮೂನೆಯನ್ನು ಬದಲಾಯಿಸಿ"</string>
<string name="lockpattern_change_lock_pin_label" msgid="3435796032210265723">"ಅನ್ಲಾಕ್ ಪಿನ್ ಬದಲಾಯಿಸಿ"</string>
<string name="lockpattern_recording_intro_header" msgid="2262005028838969839">"ಅನ್ಲಾಕ್ ಪ್ಯಾಟರ್ನ್ ಚಿತ್ರಿಸಿ"</string>
<string name="lockpattern_recording_intro_footer" msgid="5426745740754065099">"ಸಹಾಯಕ್ಕಾಗಿ ಮೆನು ಒತ್ತಿರಿ."</string>
<string name="lockpattern_recording_inprogress" msgid="4060818382176523671">"ಬಳಿಕ ಬೆರಳು ತೆಗೆಯಿರಿ"</string>
- <string name="lockpattern_recording_incorrect_too_short" msgid="6374760294545431845">"ಕನಿಷ್ಠ <xliff:g id="NUMBER">%d</xliff:g> ಡಾಟ್ಗಳನ್ನು ಸಂಪರ್ಕಿಸಿ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
+ <string name="lockpattern_recording_incorrect_too_short" msgid="6374760294545431845">"ಕನಿಷ್ಠ <xliff:g id="NUMBER">%d</xliff:g> ಡಾಟ್ಗಳನ್ನು ಕನೆಕ್ಟ್ ಮಾಡಿ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ."</string>
<string name="lockpattern_pattern_entered_header" msgid="2108106638322637851">"ಪ್ಯಾಟರ್ನ್ ರೆಕಾರ್ಡ್ ಆಗಿದೆ"</string>
<string name="lockpattern_need_to_confirm" msgid="4079482507985867389">"ಖಚಿತಪಡಿಸಲು ಪ್ಯಾಟರ್ನ್ ಚಿತ್ರಿಸಿ"</string>
<string name="lockpattern_pattern_confirmed_header" msgid="5603156929428721407">"ನಿಮ್ಮ ಹೊಸ ಅನ್ಲಾಕ್ ಪ್ಯಾಟರ್ನ್"</string>
@@ -1888,7 +1890,7 @@
<string name="app_disable_dlg_positive" msgid="5508828271100168073">"ಅಪ್ಲಿಕೇಶನ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ"</string>
<string name="app_disable_dlg_text" msgid="9221864774943530281">"ನೀವು ಈ ಆ್ಯಪ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿದರೆ, Android ಮತ್ತು ಇತರ ಆ್ಯಪ್ಗಳು ಇನ್ನು ಮುಂದೆ ಉದ್ದೇಶಿಸಿದ ಹಾಗೆ ಕಾರ್ಯನಿರ್ವಹಿಸದಿರಬಹುದು. ಈ ಆ್ಯಪ್ ಅನ್ನು ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಪೂರ್ವ-ಇನ್ಸ್ಟಾಲ್ ಮಾಡಿರುವುದರಿಂದ, ನೀವು ಅದನ್ನು ಅಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ ಎಂಬುದನ್ನು ನೆನಪಿನಲ್ಲಿಡಿ. ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುವ ಮೂಲಕ, ಈ ಆ್ಯಪ್ ಅನ್ನು ನೀವು ಆಫ್ ಮಾಡಬಹುದು ಮತ್ತು ಅದನ್ನು ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಮರೆ ಮಾಡಬಹುದು."</string>
<string name="app_disable_notifications_dlg_title" msgid="699530661413553928">"ಅಧಿಸೂಚನೆಗಳನ್ನು ಆಫ್ ಮಾಡುವುದೇ?"</string>
- <string name="app_install_details_group_title" msgid="2909597319422976921">"ಅಂಗಡಿ"</string>
+ <string name="app_install_details_group_title" msgid="2909597319422976921">"ಸ್ಟೋರ್"</string>
<string name="app_install_details_title" msgid="6954953384372934881">"ಅಪ್ಲಿಕೇಶನ್ ವಿವರಗಳು"</string>
<string name="app_install_details_summary" msgid="6612222941121363940">"<xliff:g id="APP_STORE">%1$s</xliff:g> ನಿಂದ ಅಪ್ಲಿಕೇಶನ್ ಸ್ಥಾಪಿಸಲಾಗಿದೆ"</string>
<string name="instant_app_details_summary" msgid="6384264315914966114">"<xliff:g id="APP_STORE">%1$s</xliff:g> ನಲ್ಲಿ ಹೆಚ್ಚಿನ ಮಾಹಿತಿ"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"ಅಧಿಸೂಚನೆಯ ವೈಬ್ರೇಷನ್"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"ರಿಂಗ್ನೊಂದಿಗೆ ವೈಬ್ರೇಷನ್"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"ಸ್ಪರ್ಶಿಸಿದಾಗ ವೈಬ್ರೇಷನ್"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"ಸೇವೆಯನ್ನು ಬಳಸಿ"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"ಬಣ್ಣ ತಿದ್ದುಪಡಿಯನ್ನು ಬಳಸಿ"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"ಶೀರ್ಷಿಕೆಗಳನ್ನು ಬಳಸಿ"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"ಸೇವೆಯನ್ನು ಬಳಸಿ"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"ಬಣ್ಣ ತಿದ್ದುಪಡಿಯನ್ನು ಬಳಸಿ"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"ಶೀರ್ಷಿಕೆಗಳನ್ನು ಬಳಸಿ"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"ಮುಂದುವರಿಸಿ"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"ಶ್ರವಣ ಸಾಧನಗಳು"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"ಯಾವುದೇ ಶ್ರವಣ ಸಾಧನ ಸಂಪರ್ಕಗೊಂಡಿಲ್ಲ"</string>
@@ -2276,10 +2278,10 @@
<string name="battery_tip_smart_battery_title" product="device" msgid="7419448992583346364">"ನಿಮ್ಮ ಸಾಧನದ ಬ್ಯಾಟರಿ ಬಾಳಿಕೆಯನ್ನು ಸುಧಾರಿಸಿ"</string>
<string name="battery_tip_smart_battery_summary" msgid="5344821856478265778">"ಬ್ಯಾಟರಿ ನಿರ್ವಾಹಕರನ್ನು ಆನ್ ಮಾಡಿ"</string>
<string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"ಬ್ಯಾಟರಿ ಸೇವರ್ ಆನ್ ಮಾಡಿ"</string>
- <string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"ಬ್ಯಾಟರಿ ಸಾಮಾನ್ಯಕ್ಕಿಂತ ಮೊದಲೇ ರನ್ ಆಗಬಹುದು"</string>
+ <string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"ಬ್ಯಾಟರಿ ಸಾಮಾನ್ಯಕ್ಕಿಂತ ಮೊದಲೇ ಖಾಲಿಯಾಗಬಹುದು"</string>
<string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"ಬ್ಯಾಟರಿ ಸೇವರ್ ಆನ್ ಆಗಿದೆ"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"ಕೆಲವು ವೈಶಿಷ್ಟ್ಯಗಳು ಸೀಮಿತವಾಗಿರಬಹುದು"</string>
- <string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"ಫೋನ್ ಸಾಮಾನ್ಯಕ್ಕಿಂತ ಹೆಚ್ಚಿನದನ್ನು ಬಳಸಿದೆ"</string>
+ <string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"ಫೋನ್ ಅನ್ನು ಸಾಮಾನ್ಯಕ್ಕಿಂತ ಹೆಚ್ಚು ಬಳಸಲಾಗಿದೆ"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"ಟ್ಯಾಬ್ಲೆಟ್ ಸಾಮಾನ್ಯಕ್ಕಿಂತ ಹೆಚ್ಚಿನದನ್ನು ಬಳಸಿದೆ"</string>
<string name="battery_tip_high_usage_title" product="device" msgid="8304138287288309490">"ಸಾಧನವು ಸಾಮಾನ್ಯಕ್ಕಿಂತ ಹೆಚ್ಚಿನದನ್ನು ಬಳಸಿದೆ"</string>
<string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"ಬ್ಯಾಟರಿ ಸಾಮಾನ್ಯ ಅವಧಿಗಿಂತ ಮೊದಲೇ ಖಾಲಿಯಾಗಬಹುದು"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"ಆನ್"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"ಬ್ಯಾಟರಿ ಸೇವರ್ ಬಳಸಿ"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"ಬ್ಯಾಟರಿ ಸೇವರ್ ಬಳಸಿ"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಆನ್ ಆಗುವಿಕೆ"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"ಎಂದಿಗೂ ಬೇಡ"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"ಬ್ಯಾಟರಿಯಲ್ಲಿ <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
@@ -2617,7 +2619,7 @@
<string name="sync_one_time_sync" msgid="6005174168405784256">"ಈಗ ಸಿಂಕ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ<xliff:g id="LAST_SYNC_TIME">
%1$s</xliff:g>"</string>
<string name="sync_gmail" msgid="4457967084840001296">"Gmail"</string>
- <string name="sync_calendar" msgid="6573708019827519372">"ಕ್ಯಾಲೆಂಡರ್"</string>
+ <string name="sync_calendar" msgid="6573708019827519372">"Calendar"</string>
<string name="sync_contacts" msgid="5687434785723746534">"ಸಂಪರ್ಕಗಳು"</string>
<string name="sync_plug" msgid="6703804441408427257"><font fgcolor="#ffffffff">"Google ಸಿಂಕ್ಗೆ ಸ್ವಾಗತ!"</font>" \nನಿಮ್ಮ ಸಂಪರ್ಕಗಳು, ಪೂರ್ವನಿಗದಿಗಳು, ಮತ್ತು ನೀವು ಎಲ್ಲಿದ್ದೀರೋ ಅಲ್ಲಿಂದಲೇ ಇನ್ನಷ್ಟನ್ನು ಪ್ರವೇಶಿಸಲು ಅನುಮತಿಸಲು ಡೇಟಾವನ್ನು ಸಿಂಕ್ ಮಾಡಲು Google ನ ಒಂದು ತೊಡಗುವಿಕೆಯಾಗಿದೆ."</string>
<string name="header_application_sync_settings" msgid="4581847153669774489">"ಅಪ್ಲಿಕೇಶನ್ ಸಿಂಕ್ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string>
@@ -2923,7 +2925,7 @@
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"ಮತ್ತೊಂದು ಪಾವತಿ ಅಪ್ಲಿಕೇಶನ್ ತೆರೆದಿರುವುದನ್ನು ಹೊರತುಪಡಿಸಿ"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"ಟ್ಯಾಪ್ ಮಾಡಿ ಮತ್ತು ಪಾವತಿ ಟರ್ಮಿನಲ್ನಲ್ಲಿ, ಇದರ ಮೂಲಕ ಪಾವತಿಸಿ:"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"ಟರ್ಮಿನಲ್ನಲ್ಲಿ ಪಾವತಿಸಲಾಗುತ್ತಿದೆ"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"ಪಾವತಿ ಅಪ್ಲಿಕೇಶನ್ ಹೊಂದಿಸಿ. ನಂತರ ಸಂಪರ್ಕವಿಲ್ಲದ ಚಿಹ್ನೆಯೊಂದಿಗೆ ಯಾವುದೇ ಟರ್ಮಿನಲ್ಗೆ ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ಹಿಡಿದುಕೊಳ್ಳಿ."</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"ಪಾವತಿ ಆ್ಯಪ್ ಹೊಂದಿಸಿ. ನಂತರ ಸಂಪರ್ಕವಿಲ್ಲದ ಚಿಹ್ನೆಯೊಂದಿಗೆ ಯಾವುದೇ ಟರ್ಮಿನಲ್ಗೆ ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ಹಿಡಿದುಕೊಳ್ಳಿ."</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"ತಿಳಿಯಿತು"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"ಇನ್ನಷ್ಟು..."</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"ನಿಮ್ಮ ಪ್ರಾಶಸ್ತ್ಯವನ್ನು ಹೊಂದಿಸಬೇಕೆ?"</string>
@@ -3122,7 +3124,7 @@
<string name="keywords_default_payment_app" msgid="845369409578423996">"ಪಾವತಿ, ಡಿಫಾಲ್ಟ್"</string>
<string name="keywords_ambient_display" msgid="8835182491798487184">"ಒಳಬರುವ ಅಧಿಸೂಚನೆ"</string>
<string name="keywords_hotspot_tethering" msgid="1723591462602613867">"usb ಟೆಥರ್, ಬ್ಲೂಟೂತ್ ಟೆಥರ್, ವೈಫೈ ಹಾಟ್ಸ್ಪಾಟ್"</string>
- <string name="keywords_touch_vibration" msgid="2081175517528255224">"ಹ್ಯಾಪ್ಟಿಕ್ಸ್, ಕಂಪನ, ಪರದೆ, ಸಂವೇದನೆ"</string>
+ <string name="keywords_touch_vibration" msgid="2081175517528255224">"ಹ್ಯಾಪ್ಟಿಕ್ಸ್, ವೈಬ್ರೇಟ್, ಪರದೆ, ಸಂವೇದನೆ"</string>
<string name="keywords_ring_vibration" msgid="4210509151866460210">"ಹ್ಯಾಪ್ಟಿಕ್ಸ್, ವೈಬ್ರೇಟ್, ಫೋನ್, ಕರೆ, ಸೂಕ್ಷ್ಮತೆ, ರಿಂಗ್"</string>
<string name="keywords_notification_vibration" msgid="1077515502086745166">"ಹ್ಯಾಪ್ಟಿಕ್ಸ್, ವೈಬ್ರೇಟ್, ಸೂಕ್ಷ್ಮತೆ"</string>
<string name="keywords_battery_saver_sticky" msgid="8733804259716284872">"ಬ್ಯಾಟರಿ ಸೇವರ್, ಸ್ಟಿಕಿ, ತಡೆ ಹಿಡಿ, ಪವರ್ ಸೇವರ್, ಬ್ಯಾಟರಿ"</string>
@@ -3147,7 +3149,7 @@
<string name="other_sound_settings" msgid="5250376066099818676">"ಇತರ ಧ್ವನಿಗಳು"</string>
<string name="dial_pad_tones_title" msgid="8877212139988655769">"ಡಯಲ್ ಪ್ಯಾಡ್ ಟೋನ್ಗಳು"</string>
<string name="screen_locking_sounds_title" msgid="4407110895465866809">"ಸ್ಕ್ರೀನ್ ಲಾಕಿಂಗ್ ಧ್ವನಿಗಳು"</string>
- <string name="charging_sounds_title" msgid="5070437987230894287">"ಚಾರ್ಜಿಂಗ್ ಧ್ವನಿಗಳು ಮತ್ತು ಕಂಪನ"</string>
+ <string name="charging_sounds_title" msgid="5070437987230894287">"ಚಾರ್ಜಿಂಗ್ ಧ್ವನಿಗಳು ಮತ್ತು ವೈಬ್ರೇಟ್"</string>
<string name="docking_sounds_title" msgid="2573137471605541366">"ಡಾಕಿಂಗ್ ಧ್ವನಿಗಳು"</string>
<string name="touch_sounds_title" msgid="165237488496165652">"ಸ್ಪರ್ಶ ಧ್ವನಿಗಳು"</string>
<string name="vibrate_on_touch_title" msgid="6360155469279157684">"ಸ್ಪರ್ಶಿಸಿದಾಗ ವೈಬ್ರೇಷನ್"</string>
@@ -3321,7 +3323,7 @@
<string name="locked_work_profile_notification_title" msgid="8307025804986190658">"ಕೆಲಸದ ಪ್ರೊಫೈಲ್ ಅನ್ನು ಲಾಕ್ ಮಾಡಿದಾಗ"</string>
<string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"ಅಧಿಸೂಚನೆ ವಿಷಯವನ್ನು ಪೂರ್ತಿ ತೋರಿಸು"</string>
<string name="lock_screen_notifications_summary_hide" msgid="3668806866535260143">"ಸೂಕ್ಷ್ಮ ವಿಷಯವನ್ನು ಮರೆಮಾಡು"</string>
- <string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"ಅಧಿಸೂಚನೆಗಳನ್ನು ತೋರಿಸಲೇ ಬೇಡ"</string>
+ <string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"ಅಧಿಸೂಚನೆಗಳನ್ನು ತೋರಿಸಬೇಡಿ"</string>
<string name="lock_screen_notifications_interstitial_message" msgid="4230189215124387818">"ಸಾಧನ ಲಾಕ್ ಆದಾಗ, ಅಧಿಸೂಚನೆಗಳು ಹೇಗೆ ಕಾಣಿಸಿಕೊಳ್ಳಬೇಕು?"</string>
<string name="lock_screen_notifications_interstitial_title" msgid="2832587379332443505">"ಅಧಿಸೂಚನೆಗಳು"</string>
<string name="lock_screen_notifications_summary_show_profile" msgid="8908775469657073273">"ಉದ್ಯೋಗದ ಅಧಿಸೂಚನೆ ವಿಷಯವನ್ನು ಪೂರ್ತಿ ತೋರಿಸು"</string>
@@ -3392,8 +3394,8 @@
<string name="zen_access_detail_switch" msgid="8706332327904974500">"ಅಡಚಣೆ ಮಾಡಬೇಡ ಆಯ್ಕೆಯನ್ನು ಅನುಮತಿಸಿ"</string>
<string name="zen_access_empty_text" msgid="7667538993781607731">"ಯಾವುದೇ ಸ್ಥಾಪಿಸಲಾದ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಪ್ರವೇಶಿಸುವಿಕೆಯನ್ನು ವಿನಂತಿಸಿಲ್ಲ"</string>
<string name="loading_notification_apps" msgid="1978345231934072091">"ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಲೋಡ್ ಮಾಡಲಾಗುತ್ತಿದೆ..."</string>
- <string name="app_notifications_off_desc" msgid="3904090905748895146">"ನಿಮ್ಮ ವಿನಂತಿಯ ಮೇರೆಗೆ, ಈ ಸಾಧನದಲ್ಲಿ ಗೋಚರವಾಗುವ ಅಪ್ಲಿಕೇಶನ್ಗಳ ಅಧಿಸೂಚನೆಗಳನ್ನು Android ನಿರ್ಬಂಧಿಸುತ್ತದೆ"</string>
- <string name="channel_notifications_off_desc" msgid="8005444443218306611">"ನಿಮ್ಮ ವಿನಂತಿಯ ಮೇರೆಗೆ ಈ ಸಾಧನದಲ್ಲಿ ಗೋಚರವಾಗುವ ಈ ಪ್ರಕಾರದ ಅಪ್ಲಿಕೇಶನ್ಗಳ ಅಧಿಸೂಚನೆಗಳನ್ನು Android ನಿರ್ಬಂಧಿಸುತ್ತದೆ"</string>
+ <string name="app_notifications_off_desc" msgid="3904090905748895146">"ನಿಮ್ಮ ವಿನಂತಿಯ ಮೇರೆಗೆ, ಈ ಸಾಧನದಲ್ಲಿ ಆ್ಯಪ್ಗಳ ಅಧಿಸೂಚನೆಗಳು ಕಾಣಿಸದಂತೆ Android ನಿರ್ಬಂಧಿಸುತ್ತದೆ"</string>
+ <string name="channel_notifications_off_desc" msgid="8005444443218306611">"ನಿಮ್ಮ ವಿನಂತಿಯ ಮೇರೆಗೆ, ಈ ಸಾಧನದಲ್ಲಿ ಆ್ಯಪ್ಗಳ ಅಧಿಸೂಚನೆಗಳು ಕಾಣಿಸದಂತೆ Android ನಿರ್ಬಂಧಿಸುತ್ತದೆ"</string>
<string name="channel_group_notifications_off_desc" msgid="7154205544298672850">"ನಿಮ್ಮ ವಿನಂತಿಯ ಮೇರೆಗೆ, ಈ ಸಾಧನದಲ್ಲಿ ಗೋಚರವಾಗುವ ಈ ಅಧಿಸೂಚನೆಗಳ ಗುಂಪನ್ನು Android ನಿರ್ಬಂಧಿಸುತ್ತದೆ"</string>
<string name="notification_channels" msgid="956764228116145956">"ವಿಭಾಗಗಳು"</string>
<string name="notification_channels_other" msgid="1615988645667411530">"ಇತರೆ"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"ಸಾಧನವು ಲಾಕ್ ಆಗಿದ್ದರೆ, ಅಧಿಸೂಚನೆಗಳಲ್ಲಿ ಪ್ರತ್ಯುತ್ತರಗಳು,ಇತರ ಪಠ್ಯವನ್ನು ಟೈಪ್ ಮಾಡುವುದನ್ನು ತಡೆ"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"ಡಿಫಾಲ್ಟ್ ಕಾಗುಣಿತ ಪರೀಕ್ಷಕ"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"ಕಾಗುಣಿತ ಪರೀಕ್ಷಕ ಆಯ್ಕೆಮಾಡಿ"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"ಕಾಗುಣಿತ ಪರೀಕ್ಷಕ ಬಳಸಿ"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"ಕಾಗುಣಿತ ಪರೀಕ್ಷಕ ಬಳಸಿ"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"ಆಯ್ಕೆಮಾಡಲಾಗಿಲ್ಲ"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(ಯಾವುದೂ ಇಲ್ಲ)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4035,7 +4037,7 @@
<string name="notification_log_details_ashmem" msgid="4272241723105041393">"ಆಶ್ಮೆಮ್"</string>
<string name="notification_log_details_alerted" msgid="1891749888625061319">"ಅಧಿಸೂಚನೆಯ ಎಚ್ಚರಿಕೆಯನ್ನು ನೀಡಲಾಗಿದೆ"</string>
<string name="notification_log_details_sound" msgid="4028782443557466322">"ಶಬ್ದ"</string>
- <string name="notification_log_details_vibrate" msgid="8372400602058888072">"ಕಂಪನ"</string>
+ <string name="notification_log_details_vibrate" msgid="8372400602058888072">"ವೈಬ್ರೇಟ್"</string>
<string name="notification_log_details_vibrate_pattern" msgid="7015554755444260922">"ಪ್ಯಾಟರ್ನ್"</string>
<string name="notification_log_details_default" msgid="455451833359888182">"ಡಿಫಾಲ್ಟ್"</string>
<string name="notification_log_details_none" msgid="4294690532744821638">"ಯಾವುದೂ ಇಲ್ಲ"</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"ಸಂಗ್ರಹಣೆ ಸ್ಥಳಾವಕಾಶ ಮುಕ್ತಗೊಳಿಸುವಲ್ಲಿ ಸಹಾಯ ಮಾಡಲು, ಸಂಗ್ರಹಣೆ ನಿರ್ವಾಹಕವು ಬ್ಯಾಕಪ್ ಮಾಡಲಾದ ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ನಿಮ್ಮ ಸಾಧನದಿಂದ ತೆಗೆದುಹಾಕುತ್ತದೆ."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"ಫೋಟೋಗಳು ಮತ್ತು ವೀಡಿಯೊಗಳನ್ನು ತೆಗೆದುಹಾಕಿ"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"ಸಂಗ್ರಹಣೆ ನಿರ್ವಾಹಕ"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"ಸಂಗ್ರಹಣೆ ನಿರ್ವಾಹಕವನ್ನು ಬಳಸಿ"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"ಸಂಗ್ರಹಣೆ ನಿರ್ವಾಹಕವನ್ನು ಬಳಸಿ"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"ಸ್ವಯಂಚಾಲಿತ"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"ಹಸ್ತಚಾಲಿತ"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"ಈಗ ಸ್ಥಳಾವಕಾಶವನ್ನು ಮುಕ್ತಗೊಳಿಸಿ"</string>
@@ -4237,7 +4239,7 @@
<string name="storage_music_audio" msgid="3661289086715297149">"ಸಂಗೀತ ಮತ್ತು ಆಡಿಯೋ"</string>
<string name="storage_games" msgid="7740038143749092373">"ಗೇಮ್ಗಳು"</string>
<string name="storage_other_apps" msgid="3202407095387420842">"ಇತರ ಅಪ್ಲಿಕೇಶನ್ಗಳು"</string>
- <string name="storage_files" msgid="2087824267937487880">"ಫೈಲ್ಗಳು"</string>
+ <string name="storage_files" msgid="2087824267937487880">"Files"</string>
<string name="storage_size_large_alternate" msgid="1317796542509105857">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" "<font size="20">"<xliff:g id="UNIT">^2</xliff:g>"</font></small>""</string>
<string name="storage_volume_total" msgid="5021484171514159913">"<xliff:g id="TOTAL">%1$s</xliff:g> ನಲ್ಲಿ ಬಳಸಿರುವುದು"</string>
<string name="storage_percent_full" msgid="6924662861545958442">"ಬಳಕೆಯಾಗಿದೆ"</string>
@@ -4267,7 +4269,7 @@
<string name="storage_manager_indicator_on" msgid="5295306384982062320">"ಆನ್"</string>
<string name="install_type_instant" msgid="6248487669862821874">"ತತ್ಕ್ಷಣದ ಅಪ್ಲಿಕೇಶನ್"</string>
<string name="automatic_storage_manager_deactivation_warning" msgid="7867793739491286374">"ಸಂಗ್ರಹಣೆ ನಿರ್ವಾಹಕವನ್ನು ಆಫ್ ಮಾಡುವುದೇ?"</string>
- <string name="storage_movies_tv" msgid="7282484273991655296">"ಚಲನಚಿತ್ರ ಮತ್ತು ಟಿವಿ ಅಪ್ಲಿಕೇಶನ್ಗಳು"</string>
+ <string name="storage_movies_tv" msgid="7282484273991655296">"ಚಲನಚಿತ್ರ ಮತ್ತು ಟಿವಿ ಆ್ಯಪ್ಗಳು"</string>
<string name="carrier_provisioning" msgid="3309125279191534469">"ವಾಹಕ ಪೂರೈಕೆಯ ಮಾಹಿತಿ"</string>
<string name="trigger_carrier_provisioning" msgid="6284005970057901477">"ಟ್ರಿಗ್ಗರ್ ವಾಹಕ ಪೂರೈಕೆ"</string>
<string name="zen_suggestion_title" msgid="2134699720214231950">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಅನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಿ"</string>
@@ -4327,7 +4329,7 @@
<string name="prevent_ringing_option_vibrate" msgid="6456505293904544108">"ವೈಬ್ರೇಟ್"</string>
<string name="prevent_ringing_option_mute" msgid="53662688921253613">"ಮ್ಯೂಟ್"</string>
<string name="prevent_ringing_option_none" msgid="1450985763137666231">"ಏನೂ ಮಾಡಬೇಡಿ"</string>
- <string name="prevent_ringing_option_vibrate_summary" msgid="7961818570574683926">"(ವೈಬ್ರೇಟ್) ನಲ್ಲಿ"</string>
+ <string name="prevent_ringing_option_vibrate_summary" msgid="7961818570574683926">"ಆನ್ ಆಗಿದೆ (ವೈಬ್ರೇಟ್)"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3509459199090688328">"(ಮ್ಯೂಟ್) ನಲ್ಲಿ"</string>
<string name="prevent_ringing_option_none_summary" msgid="5152618221093037451">"ಆಫ್"</string>
<string name="pref_title_network_details" msgid="3971074015034595956">"ನೆಟ್ವರ್ಕ್ ವಿವರಗಳು"</string>
@@ -4471,7 +4473,7 @@
<string name="privacy_dashboard_title" msgid="8764930992456607513">"ಗೌಪ್ಯತೆ"</string>
<string name="privacy_dashboard_summary" msgid="7916431309860824945">"ಅನುಮತಿಗಳು, ಖಾತೆ ಚಟುವಟಿಕೆ, ವೈಯಕ್ತಿಕ ಡೇಟಾ"</string>
<string name="contextual_card_dismiss_remove" msgid="1750420285615827309">"ತೆಗೆದುಹಾಕಿ"</string>
- <string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"ಇರಿಸಿಕೊಳ್ಳಿ"</string>
+ <string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"Keep"</string>
<string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"ಈ ಸಲಹೆಯನ್ನು ತೆಗೆದುಹಾಕುವುದೇ?"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"ಸಲಹೆಯನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ"</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"ರದ್ದುಗೊಳಿಸಿ"</string>
diff --git a/tests/CarDeveloperOptions/res/values-ko/arrays.xml b/tests/CarDeveloperOptions/res/values-ko/arrays.xml
index a7a5ba5..75a36b3 100644
--- a/tests/CarDeveloperOptions/res/values-ko/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-ko/arrays.xml
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"허용 안함"</item>
<item msgid="8184570120217958741">"항상 허용"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"보통"</item>
+ <item msgid="5101233285497327432">"일반"</item>
+ <item msgid="1555861583162930714">"낮음"</item>
+ <item msgid="1719683776264798117">"중요"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"보통"</item>
+ <item msgid="6107138933849816768">"중간"</item>
+ <item msgid="182695359839047859">"낮음"</item>
+ <item msgid="8577246509202964244">"심각"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"영구"</item>
<item msgid="167418068739176448">"메모리 사용이 가장 많은 활동"</item>
@@ -467,7 +477,7 @@
<item msgid="1008268820118852416">"무제한 Wi-Fi로 취급"</item>
</string-array>
<string-array name="wifi_privacy_entries">
- <item msgid="6545683814310036454">"임의의 MAC 사용(기본값)"</item>
+ <item msgid="6545683814310036454">"무작위 MAC 사용(기본값)"</item>
<item msgid="214234417308375326">"기기 MAC 사용"</item>
</string-array>
<string-array name="wifi_hidden_entries">
diff --git a/tests/CarDeveloperOptions/res/values-ko/strings.xml b/tests/CarDeveloperOptions/res/values-ko/strings.xml
index f8f93ce..f6b3738 100644
--- a/tests/CarDeveloperOptions/res/values-ko/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-ko/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"화면 텍스트를 축소 또는 확대합니다."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"축소"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"확대"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"샘플 텍스트"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"오즈의 마법사"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"11장: 오즈의 멋진 에메랄드 도시"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"프로필 정보"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"계정"</string>
<string name="location_settings_title" msgid="2707201457572301030">"위치"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"위치 사용"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"위치 사용"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"사용 안함"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">사용 설정 - <xliff:g id="COUNT_1">%1$d</xliff:g>개의 앱이 위치 정보에 액세스할 수 있음</item>
@@ -767,7 +766,7 @@
<string name="bluetooth_menu_advanced" msgid="7566858513372603652">"고급"</string>
<string name="bluetooth_advanced_titlebar" msgid="6459469494039004784">"고급 블루투스"</string>
<string name="bluetooth_empty_list_bluetooth_off" msgid="6255367297830430459">"기기에서 블루투스가 켜져 있으면 주변의 다른 블루투스 기기와 통신할 수 있습니다."</string>
- <string name="bluetooth_scanning_on_info_message" msgid="5460370815156050550">"기기에서 블루투스가 켜져 있으면 주변의 다른 블루투스 기기와 통신할 수 있습니다.\n\n기기 환경을 개선하려면 블루투스가 꺼져 있을 때도 항상 앱 및 서비스에서 주변 기기를 검색할 수 있어야 합니다. 예를 들면 위치 기반 기능 및 서비스를 개선하는 데 이 설정이 사용될 수 있습니다. "<annotation id="link">"검색 설정"</annotation>"에서 관련 설정을 변경할 수 있습니다."</string>
+ <string name="bluetooth_scanning_on_info_message" msgid="5460370815156050550">"기기에서 블루투스가 켜져 있으면 주변의 다른 블루투스 기기와 통신할 수 있습니다.\n\n기기 환경을 개선하기 위해 블루투스가 꺼져 있을 때도 항상 앱 및 서비스에서 주변 기기를 검색할 수 있습니다. 예를 들면 위치 기반 기능 및 서비스를 개선하는 데 이 설정이 사용될 수 있습니다. "<annotation id="link">"검색 설정"</annotation>"에서 관련 설정을 변경할 수 있습니다."</string>
<string name="ble_scan_notify_text" msgid="6290170236546386932">"위치 정확도 개선을 위해 시스템 앱과 서비스에서 블루투스 기기를 계속 감지할 수 있습니다. <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>검색 설정<xliff:g id="LINK_END_1">LINK_END</xliff:g>에서 설정을 변경할 수 있습니다."</string>
<string name="bluetooth_connect_failed" msgid="1151234676456333786">"연결할 수 없습니다. 다시 시도해 주세요."</string>
<string name="device_details_title" msgid="726517818032923222">"기기 세부정보"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Wi-Fi 사용"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Wi-Fi 사용"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Wi-Fi 사용"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi-Fi 설정"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"무선 액세스포인트(AP) 설정 및 관리"</string>
@@ -939,7 +938,7 @@
<string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"\'<xliff:g id="SSID">%1$s</xliff:g>\'에 기기를 추가하려면 아래 창의 가운데 부분에 QR 코드를 맞추세요."</string>
<string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"QR 코드 스캔"</string>
<string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"\'<xliff:g id="SSID">%1$s</xliff:g>\'에 연결하려면 아래 창의 가운데 부분에 QR 코드를 맞추세요."</string>
- <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"QR 코드를 스캔하여 Wi‑Fi에 연결"</string>
+ <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"QR 코드를 스캔하여 Wi‑Fi에 연결하세요."</string>
<string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Wi‑Fi 공유"</string>
<string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"이 QR 코드를 스캔하여 \'<xliff:g id="SSID">%1$s</xliff:g>\'에 연결하고 비밀번호를 공유하세요."</string>
<string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"이 QR 코드를 스캔하여 \'<xliff:g id="SSID">%1$s</xliff:g>\'에 연결"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"모바일"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Wi‑Fi를 사용할 수 없는 경우 모바일 네트워크를 사용하세요."</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"모바일 네트워크를 사용할 수 없는 경우 Wi‑Fi를 사용합니다."</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Wi‑Fi를 통해 통화합니다. Wi‑Fi 연결이 끊기면 통화가 종료됩니다."</string>
@@ -1525,7 +1527,7 @@
<string name="battery_status_title" msgid="8731200319740671905">"배터리 상태"</string>
<string name="battery_level_title" msgid="5207775387973771646">"배터리 수준"</string>
<string name="apn_settings" msgid="8130776653826271664">"APN"</string>
- <string name="apn_edit" msgid="4350571070853305357">"액세스 포인트(APN) 편집"</string>
+ <string name="apn_edit" msgid="4350571070853305357">"액세스 포인트 수정"</string>
<string name="apn_not_set" msgid="5344235604466825691">"설정되지 않음"</string>
<string name="apn_name" msgid="8431432886706852226">"이름"</string>
<string name="apn_apn" msgid="190519449579357696">"APN"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"알림 진동"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"벨소리 진동"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"터치 진동"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"서비스 사용"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"색상 보정 사용"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"자막 사용"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"서비스 사용"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"색상 보정 사용"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"자막 사용"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"계속"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"보청기"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"연결된 보청기가 없음"</string>
@@ -2265,7 +2267,7 @@
<string name="details_subtitle" msgid="7279638828004951382">"사용 세부정보"</string>
<string name="controls_subtitle" msgid="6920199888882834620">"전원 사용 조절"</string>
<string name="packages_subtitle" msgid="6506269487892204413">"포함된 패키지"</string>
- <string name="battery_tip_summary_title" msgid="2750922152518825526">"앱이 정상적으로 작동 중입니다."</string>
+ <string name="battery_tip_summary_title" msgid="2750922152518825526">"앱이 정상적으로 작동 중"</string>
<string name="battery_tip_summary_summary" product="default" msgid="6294900413896440006">"배터리 사용량이 평소와 같습니다."</string>
<string name="battery_tip_summary_summary" product="tablet" msgid="5280099016800644130">"태블릿의 배터리 사용량이 평소와 같습니다."</string>
<string name="battery_tip_summary_summary" product="device" msgid="4459840492610842705">"기기의 배터리 사용량이 평소와 같습니다."</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"켜기"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"절전 모드 사용"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"절전 모드 사용"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"자동으로 사용 설정"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"사용 안함"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"배터리 잔량 <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
@@ -3231,7 +3233,7 @@
<string name="zen_mode_button_turn_on" msgid="1097964136225943415">"지금 사용 설정"</string>
<string name="zen_mode_button_turn_off" msgid="3990967728457149454">"지금 사용 중지"</string>
<string name="zen_mode_settings_dnd_manual_end_time" msgid="4307574188962071429">"<xliff:g id="FORMATTED_TIME">%s</xliff:g>까지 방해 금지 모드를 사용합니다"</string>
- <string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"방해 금지 모드를 끌 때까지 계속 사용합니다"</string>
+ <string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"방해 금지 모드를 사용 중지할 때까지 계속 사용합니다"</string>
<string name="zen_mode_settings_dnd_automatic_rule" msgid="2843297614114625408">"예약(<xliff:g id="RULE_NAME">%s</xliff:g>)에 따라 방해 금지 모드가 자동으로 시작되었습니다."</string>
<string name="zen_mode_settings_dnd_automatic_rule_app" msgid="5103454923160912313">"방해 금지 모드가 앱(<xliff:g id="APP_NAME">%s</xliff:g>)에 의해 자동으로 사용 설정되었습니다"</string>
<string name="zen_mode_settings_dnd_custom_settings_footer" msgid="6335108298640066560">"<xliff:g id="RULE_NAMES">%s</xliff:g>까지 맞춤 설정이 적용된 방해 금지 모드를 사용합니다."</string>
@@ -3250,8 +3252,8 @@
</plurals>
<string name="zen_mode_duration_summary_time_minutes" msgid="6988728116715208859">"<xliff:g id="NUM_MINUTES">%d</xliff:g>분(자동으로 사용 설정되지 않은 경우)"</string>
<plurals name="zen_mode_sound_summary_summary_off_info" formatted="false" msgid="8527428833487709278">
- <item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g>개의 예약이 자동으로 설정될 수 있습니다.</item>
- <item quantity="one">1개의 예약이 자동으로 설정될 수 있습니다.</item>
+ <item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g>개의 예약이 자동으로 사용 설정될 수 있습니다.</item>
+ <item quantity="one">1개의 예약이 자동으로 사용 설정될 수 있습니다.</item>
</plurals>
<string name="zen_category_behavior" msgid="7695750848671443532">"기기를 음소거하되 예외 허용"</string>
<string name="zen_category_exceptions" msgid="2139670640033601899">"예외"</string>
@@ -3280,7 +3282,7 @@
<string name="zen_onboarding_dnd_visual_disturbances_header" msgid="7584229011611927613">"방해 금지 모드의 알림 설정을 변경하시겠습니까?"</string>
<string name="sound_work_settings" msgid="4140215240360927923">"직장 프로필 사운드"</string>
<string name="work_use_personal_sounds_title" msgid="531727195073003599">"개인 프로필 사운드 사용"</string>
- <string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"직장 프로필과 개인 프로필의 소리가 같습니다."</string>
+ <string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"직장 프로필과 개인 프로필의 사운드가 같습니다."</string>
<string name="work_ringtone_title" msgid="5499360583947410224">"직장 휴대전화 벨소리"</string>
<string name="work_notification_ringtone_title" msgid="8059159087214025757">"기본 직장 알림 소리"</string>
<string name="work_alarm_ringtone_title" msgid="5328487181385375130">"기본 직장 알람 소리"</string>
@@ -3760,8 +3762,8 @@
<string name="assist_access_context_summary" msgid="5867997494395842785">"지원 앱이 화면의 텍스트 콘텐츠에 액세스하도록 허용합니다."</string>
<string name="assist_access_screenshot_title" msgid="1991014038776117688">"스크린샷 사용"</string>
<string name="assist_access_screenshot_summary" msgid="3010943864000489424">"지원 앱이 화면의 이미지에 액세스하도록 허용합니다."</string>
- <string name="assist_flash_title" msgid="8852484250748551092">"플래시 화면"</string>
- <string name="assist_flash_summary" msgid="6697095786317559129">"지원 앱이 화면이나 스크린샷에서 텍스트에 액세스할 때 화면 가장자리에 플래시를 표시합니다."</string>
+ <string name="assist_flash_title" msgid="8852484250748551092">"화면 깜빡이기"</string>
+ <string name="assist_flash_summary" msgid="6697095786317559129">"지원 앱이 화면이나 스크린샷에서 텍스트에 액세스할 때 화면 가장자리가 깜빡입니다."</string>
<string name="assist_footer" msgid="7030121180457472165">"지원 앱은 화면에 표시된 정보에 맞게 도움을 줄 수 있습니다. 일부 앱은 통합된 지원을 제공하기 위해 런처와 음성 입력 서비스를 모두 지원합니다."</string>
<string name="average_memory_use" msgid="5333366040118953945">"평균 메모리 사용"</string>
<string name="maximum_memory_use" msgid="6509872438499846077">"최대 메모리 사용"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"기기가 잠기면 알림에 답장이나 다른 텍스트를 입력하지 못하게 합니다."</string>
<string name="default_spell_checker" msgid="8636661093243189533">"기본 맞춤법 검사기"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"맞춤법 검사기 선택"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"맞춤법 검사기 사용"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"맞춤법 검사기 사용"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"선택되지 않음"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(없음)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"저장용량 관리자가 저장 공간을 확보하기 위해 백업된 사진과 동영상을 기기에서 삭제합니다."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"사진 및 동영상 삭제"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"저장용량 관리자"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"저장용량 관리자 사용"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"저장용량 관리자 사용"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"자동"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"수동"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"지금 여유 공간 확보"</string>
@@ -4477,7 +4479,7 @@
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"실행취소"</string>
<string name="low_storage_summary" msgid="4562224870189133400">"저장용량이 얼마 남지 않았습니다. <xliff:g id="PERCENTAGE">%1$s</xliff:g> 사용 중 - <xliff:g id="FREE_SPACE">%2$s</xliff:g> 사용 가능"</string>
<string name="contextual_card_feedback_send" msgid="8698649023854350623">"의견 보내기"</string>
- <string name="contextual_card_feedback_confirm_message" msgid="3987973028353264878">"이 제안에 관한 의견을 보내주세요."</string>
+ <string name="contextual_card_feedback_confirm_message" msgid="3987973028353264878">"이 추천 항목에 관한 의견을 보내주세요."</string>
<string name="copyable_slice_toast" msgid="1357518174923789947">"<xliff:g id="COPY_CONTENT">%1$s</xliff:g>이(가) 클립보드에 복사되었습니다."</string>
<string name="search_bar_account_avatar_content_description" msgid="947628881535053409"></string>
<string name="permission_bar_chart_empty_text" msgid="5893326513700540130">"권한을 사용한 앱 0개"</string>
diff --git a/tests/CarDeveloperOptions/res/values-ky/arrays.xml b/tests/CarDeveloperOptions/res/values-ky/arrays.xml
index 46dc219..248e0a2 100644
--- a/tests/CarDeveloperOptions/res/values-ky/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-ky/arrays.xml
@@ -29,8 +29,25 @@
<item msgid="5194868215515664953">"Тынч океан"</item>
<item msgid="7044520255415007865">"Бардыгы"</item>
</string-array>
- <!-- no translation found for screen_timeout_entries:0 (8596143519087753804) -->
- <!-- no translation found for dream_timeout_entries:7 (8271452751594598661) -->
+ <string-array name="screen_timeout_entries">
+ <item msgid="8596143519087753804">"15 секунд"</item>
+ <item msgid="772029947136115322">"30 секунд"</item>
+ <item msgid="8743663928349474087">"1 мүнөт"</item>
+ <item msgid="1506508631223164814">"2 мүнөт"</item>
+ <item msgid="8664703938127907662">"5 мүнөт"</item>
+ <item msgid="5827960506924849753">"10 мүнөт"</item>
+ <item msgid="6677424950124253938">"30 мүнөт"</item>
+ </string-array>
+ <string-array name="dream_timeout_entries">
+ <item msgid="6487043225269853023">"Эч качан"</item>
+ <item msgid="2517785806387977252">"15 секунд"</item>
+ <item msgid="6347954399441173672">"30 секунд"</item>
+ <item msgid="4858305253279921789">"1 мүнөт"</item>
+ <item msgid="8109273437140044073">"2 мүнөт"</item>
+ <item msgid="2788593551142462622">"5 мүнөт"</item>
+ <item msgid="8012672183888404961">"10 мүнөт"</item>
+ <item msgid="8271452751594598661">"30 мүнөт"</item>
+ </string-array>
<string-array name="lock_after_timeout_entries">
<item msgid="2232921187970351881">"Дароо"</item>
<item msgid="2038544972632026612">"5 секунд"</item>
@@ -42,17 +59,47 @@
<item msgid="811192536981678974">"10 мүнөт"</item>
<item msgid="7258394417241706272">"30 мүнөт"</item>
</string-array>
- <!-- no translation found for entries_font_size:0 (2340391964816059553) -->
- <!-- no translation found for entries_font_size:0 (6490061470416867723) -->
- <!-- no translation found for entries_font_size:2 (1714184661981538355) -->
- <!-- no translation found for entries_font_size:2 (1678068858001018666) -->
- <!-- no translation found for wifi_status:3 (5848277343965362748) -->
- <!-- no translation found for wifi_status_with_ssid:1 (6816207058895999545) -->
- <!-- no translation found for wifi_status_with_ssid:3 (7547609081339573756) -->
- <!-- no translation found for wifi_status_with_ssid:4 (5145158315060185414) -->
+ <string-array name="entries_font_size">
+ <item msgid="2340391964816059553">"Кичине"</item>
+ <item msgid="591935967183159581">"Демейки"</item>
+ <item msgid="1714184661981538355">"Чоң"</item>
+ <item msgid="6195563047686707484">"Эң чоң"</item>
+ </string-array>
+ <string-array name="wifi_status">
+ <item msgid="1304883790721412351"></item>
+ <item msgid="4157625910392775808">"Скандалууда…"</item>
+ <item msgid="5597394826455877834">"Туташууда…"</item>
+ <item msgid="5848277343965362748">"Аныктыгы текшерилүүдө…"</item>
+ <item msgid="3391238031431440676">"IP дареги алынууда…"</item>
+ <item msgid="5257597310494000224">"Туташты"</item>
+ <item msgid="8472497592913050396">"Убактылуу токтотулду"</item>
+ <item msgid="1228072488815999109">"Ажыратылууда…"</item>
+ <item msgid="7253087004422991731">"Ажыратылган"</item>
+ <item msgid="4169850917304751227">"Ийгиликсиз"</item>
+ <item msgid="6266658166690831131">"Бөгөттөлгөн"</item>
+ <item msgid="4517230805854909775">"Начар байланыштан убактылуу баш тартууда"</item>
+ </string-array>
+ <string-array name="wifi_status_with_ssid">
+ <item msgid="4853670665485437464"></item>
+ <item msgid="6816207058895999545">"Изделүүдө…"</item>
+ <item msgid="8058143476674427024">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> тармагына туташууда…"</item>
+ <item msgid="7547609081339573756">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> менен аныктыгы текшерилүүдө…"</item>
+ <item msgid="5145158315060185414">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> тармагынан IP дареги алынууда…"</item>
+ <item msgid="3283243151651124831">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> тармагына туташты"</item>
+ <item msgid="6600156231416890902">"Убактылуу токтотулду"</item>
+ <item msgid="4133290864821295785">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> тармагынан ажыратылууда…"</item>
+ <item msgid="3980154971187953257">"Ажыратылган"</item>
+ <item msgid="2847316776634969068">"Ийгиликсиз"</item>
+ <item msgid="4390990424746035383">"Бөгөттөлгөн"</item>
+ <item msgid="3618248791367063949">"Начар байланыштан убактылуу баш тартууда"</item>
+ </string-array>
<!-- no translation found for wifi_tether_security:0 (5586343370515598801) -->
<!-- no translation found for wifi_tether_security:1 (6136336549994615745) -->
- <!-- no translation found for wifi_p2p_wps_setup:0 (5390235347963255303) -->
+ <string-array name="wifi_p2p_wps_setup">
+ <item msgid="5390235347963255303">"Баскычты басыңыз"</item>
+ <item msgid="7401896200768713930">"Туташуучу түзмөктүн PIN\'и"</item>
+ <item msgid="4526848028011846710">"Ушул түзмөктүн PIN\'и"</item>
+ </string-array>
<string-array name="wifi_p2p_status">
<item msgid="8741947238021758201">"Туташты"</item>
<item msgid="983792611851499732">"Чакырылды"</item>
@@ -60,7 +107,12 @@
<item msgid="4646663015449312554">"Жеткиликтүү"</item>
<item msgid="3230556734162006146">"Аракет чегинен тышкары"</item>
</string-array>
- <!-- no translation found for bluetooth_visibility_timeout_entries:1 (2759776603549270587) -->
+ <string-array name="bluetooth_visibility_timeout_entries">
+ <item msgid="8247986727324120082">"2 мүнөт"</item>
+ <item msgid="2759776603549270587">"5 мүнөт"</item>
+ <item msgid="167772676068860015">"1 саат"</item>
+ <item msgid="5985477119043628504">"Токтотпоо"</item>
+ </string-array>
<string-array name="bluetooth_max_connected_audio_devices">
<item msgid="3800257971619063588">"Демейки маани колдонулат: <xliff:g id="DEFAULT_BLUETOOTH_MAX_CONNECTED_AUDIO_DEVICES">%1$d</xliff:g>"</item>
<item msgid="8572230405241423895">"1"</item>
@@ -69,8 +121,13 @@
<item msgid="1644506614010085798">"4"</item>
<item msgid="3132506679404897150">"5"</item>
</string-array>
- <!-- no translation found for wifi_signal:1 (7882129634982603782) -->
- <!-- no translation found for wifi_signal:4 (999948812884919584) -->
+ <string-array name="wifi_signal">
+ <item msgid="1709949377823900951">"Начар"</item>
+ <item msgid="7882129634982603782">"Начар"</item>
+ <item msgid="6457357501905996224">"Орто"</item>
+ <item msgid="405271628162918841">"Жакшы"</item>
+ <item msgid="999948812884919584">"Эң жакшы"</item>
+ </string-array>
<string-array name="data_usage_data_range">
<item msgid="8986775481492954015">"Акыркы 30 күн"</item>
<item msgid="3211287705232736964">"Колдонуу мерчимин коюу…"</item>
@@ -106,10 +163,13 @@
<item msgid="7330627471456865502">"MSCHAPV2"</item>
<item msgid="6255179395132581882">"GTC"</item>
</string-array>
- <!-- no translation found for wifi_ip_settings:1 (4377002609760712163) -->
+ <string-array name="wifi_ip_settings">
+ <item msgid="2717196390555072244">"DHCP"</item>
+ <item msgid="4377002609760712163">"Туруктуу"</item>
+ </string-array>
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"Эчтеке жок"</item>
- <item msgid="1464741437353223198">"Нускама"</item>
+ <item msgid="1464741437353223198">"Кол менен"</item>
<item msgid="5793600062487886090">"Прокси авто-конфигурац."</item>
</string-array>
<string-array name="apn_auth_entries">
@@ -226,11 +286,73 @@
<item msgid="1165623660533024666">"фондо ойнотуу"</item>
<item msgid="6423861043647911030">"атайын мүмкүнчүлүктөрдүн үнүнүн катуулугу"</item>
</string-array>
- <!-- no translation found for app_ops_labels:3 (7836406246005211990) -->
- <!-- no translation found for app_ops_labels:4 (3951439024549922598) -->
- <!-- no translation found for app_ops_labels:8 (3597797992398484655) -->
- <!-- no translation found for app_ops_labels:20 (3037159047591081136) -->
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Жайгашкан жер"</item>
+ <item msgid="6656077694190491067">"Жайгашкан жер"</item>
+ <item msgid="8790228218278477369">"Жайгашкан жер"</item>
+ <item msgid="7836406246005211990">"Дирилдөө"</item>
+ <item msgid="3951439024549922598">"Байланыштарды окуу"</item>
+ <item msgid="8802152411647068">"Байланыштарды өзгөртүү"</item>
+ <item msgid="229544934599698735">"Чалуулар тизмесин окуу"</item>
+ <item msgid="7396102294405899613">"Чалуулар тизмесин өзгөртүү"</item>
+ <item msgid="3597797992398484655">"Жылнааманы окуу"</item>
+ <item msgid="2705975774250907343">"Күнбаракты өзгөртүү"</item>
+ <item msgid="4668747371441932697">"Жайгашкан жер"</item>
+ <item msgid="1487578921720243646">"Эскертүү жайгаштыруу"</item>
+ <item msgid="4636080349724146638">"Орду"</item>
+ <item msgid="673510900286463926">"Телефон чалуу"</item>
+ <item msgid="542083422784609790">"SMS/MMS окуу"</item>
+ <item msgid="1033780373029588436">"SMS/MMS жазуу"</item>
+ <item msgid="5647111115517787488">"SMS/MMS алуу"</item>
+ <item msgid="8591105601108455893">"SMS/MMS алуу"</item>
+ <item msgid="7730995008517841903">"SMS/MMS алуу"</item>
+ <item msgid="2613033109026626086">"SMS/MMS алуу"</item>
+ <item msgid="3037159047591081136">"SMS/MMS жөнөтүү"</item>
+ <item msgid="4726682243833913568">"SMS/MMS окуу"</item>
+ <item msgid="6555678522277865572">"SMS/MMS жазуу"</item>
+ <item msgid="6981734935578130884">"Тууралоолорду өзгөртүү"</item>
+ <item msgid="8705854389991425629">"Үстүнө тартуу"</item>
+ <item msgid="5861356020344153651">"Жетки билдирмелери"</item>
+ <item msgid="78432174621628659">"Камера"</item>
+ <item msgid="3986116419882154794">"Аудио жаздыруу"</item>
+ <item msgid="4516840825756409490">"Аудио ойнотуу"</item>
+ <item msgid="6811712502798183957">"Алмашуу буферин окуу"</item>
+ <item msgid="2780369012602289114">"Алмашуу буферин өзгөртүү"</item>
+ <item msgid="2331359440170850868">"Медиа баскычтар"</item>
+ <item msgid="6133599737122751231">"Аудио фокус"</item>
+ <item msgid="6844485713404805301">"Үн башкаргыч"</item>
+ <item msgid="1600379420669104929">"Үндүн деңгээли"</item>
+ <item msgid="6296768210470214866">"Шыңгырдын үнү"</item>
+ <item msgid="510690696071629241">"Мультимедианын катуулугу"</item>
+ <item msgid="406861638631430109">"Ойготкучтун катуулугу"</item>
+ <item msgid="4715864795872233884">"Эскертме үнүнүн катуулугу"</item>
+ <item msgid="2311478519251301183">"Bluetooth үнү"</item>
+ <item msgid="5133991377896747027">"Ойгоо кармоо"</item>
+ <item msgid="2464189519136248621">"Жайгашкан жер"</item>
+ <item msgid="2062677934050803037">"Орду"</item>
+ <item msgid="1735171933192715957">"Колдонуу статистикасын алуу"</item>
+ <item msgid="1014093788778383554">"Микрофондун үнүн басуу/чыгаруу"</item>
+ <item msgid="4199297950608622850">"Эскертмени көрсөтүү"</item>
+ <item msgid="2527962435313398821">"Долбоор медиясы"</item>
+ <item msgid="5117506254221861929">"VPN\'ди жандыруу"</item>
+ <item msgid="8291198322681891160">"Тушкагаз жазуу"</item>
+ <item msgid="7106921284621230961">"Көмөкчү түзүм"</item>
+ <item msgid="4496533640894624799">"Көмөкчү скриншот"</item>
+ <item msgid="2598847264853993611">"Телефон абалын окуу"</item>
+ <item msgid="9215610846802973353">"Үн почтасын кошуу"</item>
+ <item msgid="9186411956086478261">"Sip пайдалануу"</item>
+ <item msgid="6884763100104539558">"Чыгуучу чалууну иштетүү"</item>
+ <item msgid="125513972170580692">"Манжа изи"</item>
+ <item msgid="2556071024281275619">"Дене сенсорлору"</item>
+ <item msgid="617168514928339387">"Калкка кабар берүү тутумунун билдирүүлөрүн окуу"</item>
+ <item msgid="7134693570516523585">"Жайгашкан жер дайындарын бурмалоо"</item>
+ <item msgid="7224489175375229399">"Сактагычтагы дайындарды окуу"</item>
+ <item msgid="8472735063903258202">"Сактагычка дайындарды жазуу"</item>
+ <item msgid="4069276819909595110">"Экранды күйгүзүү"</item>
+ <item msgid="1228338896751121025">"Аккаунттарды алуу"</item>
+ <item msgid="3181581793459233672">"Фондо ойнотуу"</item>
+ <item msgid="2340936043025374076">"Атайын мүмкүнчүлүктөрдүн үнүнүн катуулугу"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Кыска"</item>
<item msgid="4816511817309094890">"Орто"</item>
@@ -247,7 +369,13 @@
<item msgid="4627069151979553527">"Жантык"</item>
<item msgid="6896773537705206194">"Кичине баш тамгалар"</item>
</string-array>
- <!-- no translation found for captioning_font_size_selector_titles:3 (2784236342175159295) -->
+ <string-array name="captioning_font_size_selector_titles">
+ <item msgid="1680223634161592855">"Өтө кичине"</item>
+ <item msgid="5091603983404027034">"Кичине"</item>
+ <item msgid="176844712416932112">"Кадимки"</item>
+ <item msgid="2784236342175159295">"Чоң"</item>
+ <item msgid="218913203203160606">"Өтө чоң"</item>
+ </string-array>
<string-array name="captioning_edge_type_selector_titles">
<item msgid="3865198759294188069">"Демейки"</item>
<item msgid="6488643537808152001">"Эчтеке жок"</item>
@@ -262,7 +390,14 @@
<item msgid="1874668269931014581">"75%"</item>
<item msgid="6462911487571123954">"100%"</item>
</string-array>
- <!-- no translation found for captioning_preset_selector_titles:2 (5891360837786277638) -->
+ <string-array name="captioning_preset_selector_titles">
+ <item msgid="326819345272910536">"Колдонмонун демейкилерин колдонуу"</item>
+ <item msgid="8611890312638868524">"Ак карада"</item>
+ <item msgid="5891360837786277638">"Кара акта"</item>
+ <item msgid="2798457065945456853">"Сары карада"</item>
+ <item msgid="5799049811524553967">"Сары көктө"</item>
+ <item msgid="3673930830658169860">"Ыңгайлаштырылган"</item>
+ </string-array>
<string-array name="vpn_types_long">
<item msgid="6566768880689730097">"PPTP VPN"</item>
<item msgid="1349760781118368659">"Алдын ала бөлүшүлгөн ачкычтары бар L2TP/IPSec VPN"</item>
@@ -273,17 +408,34 @@
</string-array>
<string-array name="vpn_proxy_settings">
<item msgid="2958623927055120839">"Эч нерсе жок"</item>
- <item msgid="1157046369795346308">"Нускама"</item>
+ <item msgid="1157046369795346308">"Кол менен"</item>
</string-array>
- <!-- no translation found for vpn_states:4 (9135049670787351881) -->
+ <string-array name="vpn_states">
+ <item msgid="5408915841694583740">"Ажыратылган"</item>
+ <item msgid="8754480102834556765">"Демилгеленүүдө…"</item>
+ <item msgid="3351334355574270250">"Туташууда…"</item>
+ <item msgid="8303882153995748352">"Туташты"</item>
+ <item msgid="9135049670787351881">"Таймаут"</item>
+ <item msgid="2124868417182583926">"Ийгиликсиз"</item>
+ </string-array>
<string-array name="security_settings_premium_sms_values">
<item msgid="1164265643455394443">"Суроо"</item>
<item msgid="7718817231348607934">"Эч качан уруксат жок"</item>
<item msgid="8184570120217958741">"Дайым уруксат"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Орточо"</item>
+ <item msgid="5101233285497327432">"Орточо"</item>
+ <item msgid="1555861583162930714">"Төмөн"</item>
+ <item msgid="1719683776264798117">"Кескин"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Кадимки"</item>
+ <item msgid="6107138933849816768">"Орточо"</item>
+ <item msgid="182695359839047859">"Төмөн"</item>
+ <item msgid="8577246509202964244">"Кескин"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Туруктуу"</item>
<item msgid="167418068739176448">"Көп аткарылган иш"</item>
@@ -325,7 +477,7 @@
<item msgid="1008268820118852416">"Ченелбейт"</item>
</string-array>
<string-array name="wifi_privacy_entries">
- <item msgid="6545683814310036454">"Демейки (туш келди MAC дарегин колдонуу)"</item>
+ <item msgid="6545683814310036454">"Туш келди MAC дарек колдонулат (демейки)"</item>
<item msgid="214234417308375326">"MAC түзмөгүн колдонуу"</item>
</string-array>
<string-array name="wifi_hidden_entries">
@@ -338,7 +490,7 @@
</string-array>
<string-array name="autofill_logging_level_entries">
<item msgid="6882729786516723474">"Өчүк"</item>
- <item msgid="4072198137051566919">"Мүчүлүштүктөрдү оңдоо"</item>
+ <item msgid="4072198137051566919">"Мүчүлүштүктөрдү аныктоо"</item>
<item msgid="2473005316958868509">"Оозеки кирүү"</item>
</string-array>
<string-array name="cdma_system_select_choices">
diff --git a/tests/CarDeveloperOptions/res/values-ky/strings.xml b/tests/CarDeveloperOptions/res/values-ky/strings.xml
index b1c53cd..35b574d 100644
--- a/tests/CarDeveloperOptions/res/values-ky/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-ky/strings.xml
@@ -27,7 +27,7 @@
<item quantity="one">Сиздин иштеп чыгуучу болушуңузга <xliff:g id="STEP_COUNT_0">%1$d</xliff:g> кадам калды.</item>
</plurals>
<string name="show_dev_on" msgid="9075712234786224065">"Сиз өндүрүүчү болдуңуз!"</string>
- <string name="show_dev_already" msgid="7665948832405148689">"Кереги жок, сиз өндүрүүчү болгонсуз."</string>
+ <string name="show_dev_already" msgid="7665948832405148689">"Кереги жок, сиз иштеп чыгуучусуз."</string>
<string name="dev_settings_disabled_warning" msgid="3198732189395396721">"Алгач иштеп чыгуучунун параметрлерин иштетиңиз"</string>
<string name="header_category_wireless_networks" msgid="8968405993937795898">"Зымсыз тармактар"</string>
<string name="header_category_system" msgid="4045988717359334410">"Тутум"</string>
@@ -113,7 +113,7 @@
<string name="bluetooth_disconnect_all_profiles" product="device" msgid="4707569949253450208">"Түзмөгүңүз <xliff:g id="DEVICE_NAME">%1$s</xliff:g> түзмөгүнөн ажыратылат."</string>
<string name="bluetooth_disconnect_dialog_ok" msgid="4183522987246110145">"Ажыратуу"</string>
<string name="bluetooth_empty_list_user_restricted" msgid="3616298363281495777">"Bluetooth жөндөөлөрүн өзгөртүүгө уруксатыңыз жок."</string>
- <string name="bluetooth_pairing_pref_title" msgid="2904954138013884029">"Жаңы түзмөктү жупташтыруу"</string>
+ <string name="bluetooth_pairing_pref_title" msgid="2904954138013884029">"Жаңы түзмөк кошуу"</string>
<string name="bluetooth_is_visible_message" msgid="6341088682252805612">"Bluetooth жөндөөлөрү ачылып турганда <xliff:g id="DEVICE_NAME">%1$s</xliff:g> жакын арадагы түзмөктөргө көрүнөт."</string>
<string name="bluetooth_footer_mac_message" product="default" msgid="335341476746836260">"Телефондун Bluetooth дареги: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_footer_mac_message" product="tablet" msgid="6033609611245782463">"Планшеттин Bluetooth дареги: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
@@ -127,7 +127,7 @@
<string name="bluetooth_notif_title" msgid="5090288898529286011">"Жупташтыруу өтүнүчү"</string>
<string name="bluetooth_notif_message" msgid="6612367890895077938">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> менен жупташуу үчүн таптап коюңуз."</string>
<string name="bluetooth_show_received_files" msgid="5060846395852236652">"Алынган файлдар"</string>
- <string name="bluetooth_show_files_received_via_bluetooth" msgid="1699095577431389560">"Bluetooth аркылуу кабыл алынган файлдар"</string>
+ <string name="bluetooth_show_files_received_via_bluetooth" msgid="1699095577431389560">"Bluetooth аркылуу алынган файлдар"</string>
<string name="device_picker" msgid="8345264486071697705">"Bluetooth түзмөгүн тандоо"</string>
<string name="bluetooth_ask_enablement" msgid="8716802066127746062">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу Bluetooth\'ду күйгүзгөнү жатат"</string>
<string name="bluetooth_ask_disablement" msgid="7125319551097350783">"<xliff:g id="APP_NAME">%1$s</xliff:g> бул түзмөктө Bluetooth\'ду өчүргөнү жатат"</string>
@@ -165,14 +165,14 @@
<string name="bluetooth_device_name_summary" msgid="8661066392056595005">"Башка түзмөктөргө \"<xliff:g id="DEVICE_NAME">^1</xliff:g>\" деп көрүнөт"</string>
<string name="bluetooth_off_footer" msgid="7658444560543730571">"Башка түзмөктөргө туташуу үчүн Bluetooth\'ду күйгүзүңүз."</string>
<string name="bluetooth_paired_device_title" msgid="8361860197780425286">"Түзмөктөрүңүз"</string>
- <string name="bluetooth_pairing_page_title" msgid="9053463656712597709">"Жаңы түзмөктү жупташтыруу"</string>
+ <string name="bluetooth_pairing_page_title" msgid="9053463656712597709">"Жаңы түзмөктү байланыштыруу"</string>
<string name="bluetooth_pref_summary" product="tablet" msgid="3601662966604648212">"Планшетиңизге жакын жердеги Bluetooth түзмөктөрү менен байланышууга уруксат бериңиз"</string>
<string name="bluetooth_pref_summary" product="device" msgid="2286727776570956969">"Түзмөгүңүзгө жакын жердеги Bluetooth түзмөктөрү менен байланышууга уруксат бериңиз"</string>
<string name="bluetooth_pref_summary" product="default" msgid="863659221858781186">"Телефонуңузду жакын жердеги Bluetooth түзмөктөрүнө байланыштырат."</string>
<string name="bluetooth_disable_a2dp_hw_offload" msgid="293429878480958234">"Bluetooth A2DP программасын кайра баштоону өчүрүү"</string>
<string name="bluetooth_disable_a2dp_hw_offload_dialog_title" msgid="7362106962085861626">"Түзмөк өчүп күйсүнбү?"</string>
<string name="bluetooth_disable_a2dp_hw_offload_dialog_message" msgid="4837282201316413412">"Бул жөндөөнү өзгөртүү үчүн түзмөгүңүздү өчүрүп күйгүзүңүз."</string>
- <string name="bluetooth_disable_a2dp_hw_offload_dialog_confirm" msgid="9066883770039735632">"Кайра баштоо"</string>
+ <string name="bluetooth_disable_a2dp_hw_offload_dialog_confirm" msgid="9066883770039735632">"Өчүрүп күйгүзүү"</string>
<string name="bluetooth_disable_a2dp_hw_offload_dialog_cancel" msgid="116355977067301404">"Жок"</string>
<string name="connected_device_available_media_title" msgid="9126345752002774342">"Жеткиликтүү медиа түзмөктөрү"</string>
<string name="connected_device_available_call_title" msgid="6774859446815858428">"Жеткиликтүү чалуу түзмөктөрү"</string>
@@ -180,7 +180,7 @@
<string name="connected_device_saved_title" msgid="8270136893488475163">"Сакталган түзмөктөр"</string>
<string name="connected_device_add_device_summary" msgid="7960491471270158891">"Bluetooth жупташтыруу үчүн күйгүзүлөт"</string>
<string name="connected_device_connections_title" msgid="9205000271382018428">"Туташуу параметрлери"</string>
- <string name="connected_device_previously_connected_title" msgid="225918223397410428">"Мурунтан туташкан түзмөктөр"</string>
+ <string name="connected_device_previously_connected_title" msgid="225918223397410428">"Буга чейин туташкан түзмөктөр"</string>
<string name="connected_device_previously_connected_screen_title" msgid="2018789662358162716">"Мурда туташкан"</string>
<string name="connected_device_bluetooth_turned_on_toast" msgid="4652326177920814476">"Bluetooth күйгүзүлдү"</string>
<string name="previous_connected_see_all" msgid="7237095013087310923">"Баарын көрүү"</string>
@@ -207,7 +207,7 @@
<string name="proxy_error_empty_port" msgid="8034561724923076215">"Сиз порттун талаасын толтурушуңуз керек."</string>
<string name="proxy_error_empty_host_set_port" msgid="8471455809508588255">"Эгер хост талаасы бош болсо, оюкча талаасы да бош болуусу зарыл."</string>
<string name="proxy_error_invalid_port" msgid="4046559920586100637">"Сиз терген порт жараксыз."</string>
- <string name="proxy_warning_limited_support" msgid="9026539134219095768">"HTTP прокси серепчи тарабынан колдонулат, бирок башка колдонмолор пайдалана алышпайт."</string>
+ <string name="proxy_warning_limited_support" msgid="9026539134219095768">"HTTP прокси серверин серепчи гана колдонот."</string>
<string name="proxy_url_title" msgid="882042361706435904">"PAC URL: "</string>
<string name="radio_info_dl_kbps" msgid="2903778264453410272">"DL өткөрүү жөндөмдүүлүгү (кб/сек.):"</string>
<string name="radio_info_ul_kbps" msgid="3802245899811732716">"UL өткөрүү жөндөмдүүлүгү (кб/сек.):"</string>
@@ -309,8 +309,8 @@
<string name="cellular_data_summary" msgid="8817717603450318646">"Дайындар моб. тармак аркылуу өткөрүлсүн"</string>
<string name="allow_data_usage_title" msgid="5381624105803294315">"Роуминг учурунда дайындарды пайдаланууга уруксат берүү"</string>
<string name="roaming" msgid="8860308342135146004">"Роуминг"</string>
- <string name="roaming_enable" msgid="2108142024297441116">"Роуминг учурунда мобилдик Интернетке туташат"</string>
- <string name="roaming_disable" msgid="1915440242079953809">"Роуминг учурунда мобилдик Интернетке туташат"</string>
+ <string name="roaming_enable" msgid="2108142024297441116">"Роуминг учурунда дайын-даректерди өткөрүүчү кызматтарга туташуу"</string>
+ <string name="roaming_disable" msgid="1915440242079953809">"Роуминг учурунда дайын-даректерди өткөрүүчү кызматтарга туташуу"</string>
<string name="roaming_reenable_message" msgid="8388505868655113258">"Жергиликтүү тармагыңыздан интернет-роуминг өчүрүлгөн абалда кеткендиктен Интернет туташуусун жоготтуңуз."</string>
<string name="roaming_turn_it_on_button" msgid="4370846458830537578">"Аны күйгүзүү"</string>
<string name="roaming_warning" msgid="5488050911277592868">"Бир топ чыгымдарга дуушар болуп калышыңыз мүмкүн."</string>
@@ -324,7 +324,7 @@
<string name="date_and_time_settings_summary" msgid="4617979434474713417">"Датаны, убакытты, саат алкагын, жана форматтарды тууралоо"</string>
<string name="date_time_auto" msgid="2679132152303750218">"Тармактын убакыты колдонулсун"</string>
<string name="zone_auto_title" msgid="5500880975376882488">"Тармактын убакыт алкагы колдонулсун"</string>
- <string name="date_time_24hour_auto" msgid="7499659679134962547">"Демейки жергиликтүү формат колдонулат"</string>
+ <string name="date_time_24hour_auto" msgid="7499659679134962547">"Демейки жергиликтүү форматты колдонуу"</string>
<string name="date_time_24hour_title" msgid="6209923858891621283">"24 сааттык формат"</string>
<string name="date_time_24hour" msgid="1265706705061608742">"24 сааттык форматты колдонуу"</string>
<string name="date_time_set_time_title" msgid="7116850506333406367">"Убакыт"</string>
@@ -368,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Профилдин чоо-жайы"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Аккаунттар"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Жайгашкан жер"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Кайда жүргөнүм аныкталып турсун"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Жайгашкан жерди колдонуу"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Өчүк"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Күйүк - <xliff:g id="COUNT_1">%1$d</xliff:g> жайгашкан жерди көрө алат</item>
@@ -402,7 +402,7 @@
<string name="security_settings_face_enroll_introduction_title" msgid="6073249653318265486">"Кулпуну жүзүңүз менен ачасыз"</string>
<string name="security_settings_face_enroll_introduction_title_unlock_disabled" msgid="9223270521083202896">"Жүзүңүз менен аныктыгыңызды текшертиңиз"</string>
<string name="security_settings_face_enroll_introduction_message" msgid="484806903869220184">"Телефонуңуздун кулпусун ачып, сатып алууга уруксат берип же колдонмолорго кирүү үчүн жүзүңүздү көрсөтүңүз."</string>
- <string name="security_settings_face_enroll_introduction_message_unlock_disabled" msgid="2850101281254663082">"Телефонуңуздун кулпусун ачуу же сатып алууларды ырастоо үчүн жүзүңүздү пайдаланыңыз.\n\nЭскертүү: Жүзүңүздү бул түзмөктүн кулпусун ачууга колдоно албайсыз. Кеңири маалымат үчүн ишканаңыздын администраторуна кайрылыңыз."</string>
+ <string name="security_settings_face_enroll_introduction_message_unlock_disabled" msgid="2850101281254663082">"Жүзүнөн таануу функциясы аркылуу телефонуңуздун кулпусун ачып, ар кандай нерселерди сатып ала аласыз.\n\nЭскертүү: Бул түзмөктүн кулпусун жүзүнөн таануу функциясы менен ачууга болбойт. Кененирээк маалымат алгыңыз келсе, ишканаңыздын администраторуна кайрылыңыз."</string>
<string name="security_settings_face_enroll_introduction_message_setup" msgid="4533297059466270074">"Телефонуңуздун кулпусун ачып, сатып алууга уруксат берип же колдонмолорго кирүү үчүн жүзүңүздү көрсөтүңүз."</string>
<string name="security_settings_face_enroll_introduction_footer_message" msgid="7764021721107723266"></string>
<string name="security_settings_face_enroll_repeat_title" msgid="2507710348140837875">"Жүзүңүздү тегеректин борборуна жайгаштырыңыз"</string>
@@ -425,7 +425,7 @@
<string name="security_settings_face_settings_require_confirmation_details" msgid="8740564864091803429">"Колдонмодо аутентификациядан өткөндө, ар дайым ырастоо талап кылынсын"</string>
<string name="security_settings_face_settings_remove_face_data" msgid="2821359954483136239">"Жүздү өчүрүү"</string>
<string name="security_settings_face_settings_footer" msgid="4627175759990550715">"Түзмөгүңүздүн кулпусун жүзүңүздү көрсөтүп ачып, колдонмолорго киресиз. "<annotation id="url">"Кеңири маалымат"</annotation></string>
- <string name="security_settings_face_settings_remove_dialog_title" msgid="5675319895815271094">"Жүзүңүздү таануу дайындарын өчүрөсүзбү?"</string>
+ <string name="security_settings_face_settings_remove_dialog_title" msgid="5675319895815271094">"Бул функциянын дайындарын өчүрөсүзбү?"</string>
<string name="security_settings_face_settings_remove_dialog_details" msgid="3754494807169276107">"Жүзүнөн таануу функциясын колдонууда топтолгон дайын-даректер биротоло өчүрүлөт. Өчүрүлгөндөн кийин, телефонуңуздун кулпусун ачып, колдонмолорго кирип жана төлөмдөрдү ырастоо үчүн, PIN кодуңуз, графикалык ачкычыңыз же сырсөзүңүз суралат."</string>
<string name="security_settings_fingerprint_preference_title" msgid="4177132225930582928">"Манжа изи"</string>
<string name="fingerprint_manage_category_title" msgid="1463406696801542090">"Манжа издерин башкаруу"</string>
@@ -440,14 +440,14 @@
<string name="security_settings_fingerprint_enroll_introduction_title" msgid="889558002683900544">"Кулпну манж из менн ач"</string>
<string name="security_settings_fingerprint_enroll_introduction_title_unlock_disabled" msgid="7915504118657864429">"Манжа изиңизди колдонуңуз"</string>
<string name="security_settings_fingerprint_enroll_introduction_message" msgid="5586198131986682472">"Телефонуңуздун кулпусун ачып, кандайдыр бир нерсени сатып алып жатканыңызды ырастап же колдонмолорго кирүү үчүн жөн гана манжаңызды сенсорго тийгизип коюңуз. Кимдир-бирөөнүн манжа изин кошуп жатканыңызда этият болуңуз. Бир эле манжа изи кошулса да, ушул нерселердин баарын аткара алат.\n\nТүзмөгүңүздү манжа изи менен коргоого караганда графикалык ачкыч же PIN код менен коргоо бир кыйла коопсуз."</string>
- <string name="security_settings_fingerprint_enroll_introduction_message_unlock_disabled" msgid="1640839304679275468">"Телефонуңуздун кулпусун ачуу же сатып алууларды ырастоо үчүн манжа изиңизди пайдаланыңыз.\n\nЭскертүү: Манжа изиңизди бул түзмөктүн кулпусун ачууга колдоно албайсыз. Кеңири маалымат үчүн ишканаңыздын администраторуна кайрылыңыз."</string>
- <string name="security_settings_fingerprint_enroll_introduction_message_setup" msgid="6734490666593320711">"Телефонуңуздун кулпусун ачуу же сатып алууларды ырастоо үчүн манжа изиңизди пайдаланыңыз.\n\nЭскертүү: Түзмөгүңүздү манжа изи менен коргоого караганда графикалык ачкыч же PIN код менен коргоо бир кыйла коопсуз."</string>
+ <string name="security_settings_fingerprint_enroll_introduction_message_unlock_disabled" msgid="1640839304679275468">"Манжаңыздын изи менен, телефонуңуздун кулпусун ачып, ар кандай нерселерди сатып ала аласыз.\n\nЭскертүү: Бул түзмөктүн кулпусун манжаңыздын изи менен ачууга болбойт. Кененирээк маалымат алгыңыз келсе, ишканаңыздын администраторуна кайрылыңыз."</string>
+ <string name="security_settings_fingerprint_enroll_introduction_message_setup" msgid="6734490666593320711">"Манжаңызды коюп экранды ачып, ар кандай нерселерди сатып ала аласыз.\n\nЭскертүү: Түзмөгүңүздү манжа изи менен коргоого караганда, графикалык ачкыч же PIN код менен коргоо бир кыйла коопсуз."</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel" msgid="9168637333731599827">"Жокко чыгаруу"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue" msgid="271662150372486535">"Улантуу"</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel_setup" msgid="756928427429893070">"Өткөрүп жиберүү"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue_setup" msgid="4125977169169671144">"Кийинки"</string>
- <string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"Манжа изин жөндөбөйсүзбү?"</string>
- <string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"Манжа изин жөндөө бир-эки эле мүнөткө созулат. Азыр өткөрүп жиберсеңиз, манжа изиңизди кийинчерээк кошсоңуз болот."</string>
+ <string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"Манжа издерин койбойсузбу?"</string>
+ <string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"Манжаңыздын изин бир-эки мүнөттүн ичинде эле коесуз. Азыр койгуңуз келбесе, кийинчерээк кошуп койсоңуз болот."</string>
<string name="lock_screen_intro_skip_title" msgid="5307431665496346914">"Экран кулпусун жөндөбөйсүзбү?"</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="tablet" msgid="7553945981266845264">"Түзмөктү коргоо мүмкүнчүлүктөрү жандырылбайт. Эгер планшет жоголуп же уурдалып кетсе, же баштапкы абалга келтирилсе, башкалар аны пайдалана беришет."</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="device" msgid="1378243257238015603">"Түзмөктү коргоо мүмкүнчүлүктөрү жандырылбайт. Эгер түзмөк жоголуп же уурдалып кетсе, же баштапкы абалга келтирилсе, башкалар аны пайдалана беришет."</string>
@@ -468,7 +468,7 @@
<string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"Сенсорго тийиңиз"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Манжаңызды сенсорго коюп, дирилдегенин сезгенден кийин көтөрүңүз"</string>
<string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"Көтөрүп, кайра тийип коюңуз"</string>
- <string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Манжа изиңиздин ар кайсы бөлүгүн кошуу үчүн манжаңызды кичинеден өйдө жылдырыңыз"</string>
+ <string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Манжаңызды толугу менен скандоо үчүн, акырындык менен жылдырыңыз."</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"Манжа изи кошулду"</string>
<string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"Бул сүрөтчө көрүнгөндө, манжаңыздын изи менен өздүгүңүздү же кандайдыр бир нерсени сатып алууну ырастайсыз"</string>
<string name="security_settings_fingerprint_enroll_enrolling_skip" msgid="1473280156532146933">"Азыр эмес"</string>
@@ -476,10 +476,10 @@
<string name="setup_fingerprint_enroll_enrolling_skip_message" msgid="8139299964344809780">"Телефонуңуздун кулпусун манжа изи менен ачуу ыкмасын тандадыңыз. Эгер азыр өткөрүп жиберсеңиз, аны кийинчерээк жөндөшүңүз керек болот. Жөндөөгө бир мүнөтчө эле убакыт кетет."</string>
<string name="fingerprint_lock_screen_setup_skip_dialog_text" product="tablet" msgid="1384438077720821127">"Планшетиңизди экранды бөгөттөө опциясы менен коргоңуз, ошондо ал жоголсо же бирөө уурдап кетсе, эч ким колдоно албай калат. Экранды бөгөттөө функциясы менен манжа изин жөндөсөңүз да болот. \"Жокко чыгарууну\" таптаңыз, анан PIN кодду жөндөңүз же экранды бөгөттөөнүн башка опциясын тандаңыз."</string>
<string name="fingerprint_lock_screen_setup_skip_dialog_text" product="device" msgid="7207112623501771824">"Түзмөгүңүздү экранды бөгөттөө опциясы менен коргоңуз, ошондо ал жоголсо же бирөө уурдап кетсе, эч ким колдоно албай калат. Экранды бөгөттөө функциясы менен манжа изин жөндөсөңүз да болот. \"Жокко чыгарууну\" таптаңыз, анан PIN кодду жөндөңүз же экранды бөгөттөөнүн башка опциясын тандаңыз."</string>
- <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="default" msgid="7623975730623531606">"Телефонуңузду экранды бөгөттөө опциясы менен коргоңуз, ошондо ал жоголсо же бирөө уурдап кетсе, эч ким колдоно албай калат. Экранды бөгөттөө функциясы менен манжа изин жөндөсөңүз да болот. \"Жокко чыгарууну\" таптаңыз, анан PIN кодду жөндөңүз же экранды бөгөттөөнүн башка опциясын тандаңыз."</string>
+ <string name="fingerprint_lock_screen_setup_skip_dialog_text" product="default" msgid="7623975730623531606">"Манжа изинин сканерин жөндөө үчүн, телефондун экранын кулпулоону иштетүү керек. Ушуну менен, телефонуңуз жоголуп же бирөө уурдап кетсе, анын ичиндегилерди эч ким көрө албай калат. Экранды кулпулоо функциясын иштетүү үчүн, \"Жок\" дегенди басып, андан соң PIN код коюңуз же экранды кулпулоонун башка ыкмасын тандаңыз."</string>
<string name="face_lock_screen_setup_skip_dialog_text" product="tablet" msgid="2998863111689476550">"Планшетиңизди экранды бөгөттөө опциясы менен коргоңуз, ошондо ал жоголсо же бирөө уурдап кетсе, эч ким колдоно албай калат. Экранды бөгөттөө функциясы менен жүздүн аныктыгын текшерүүнү жөндөсөңүз да болот. \"Жокко чыгарууну\" таптаңыз, анан PIN кодду жөндөңүз же экранды бөгөттөөнүн башка опциясын тандаңыз."</string>
<string name="face_lock_screen_setup_skip_dialog_text" product="device" msgid="6780557259734235952">"Түзмөгүңүздү экранды бөгөттөө опциясы менен коргоңуз, ошондо ал жоголсо же бирөө уурдап кетсе, эч ким колдоно албай калат. Экранды бөгөттөө функциясы менен жүздүн аныктыгын текшерүүнү жөндөсөңүз да болот. \"Жокко чыгарууну\" таптаңыз, анан PIN кодду жөндөңүз же экранды бөгөттөөнүн башка опциясын тандаңыз."</string>
- <string name="face_lock_screen_setup_skip_dialog_text" product="default" msgid="8541640018478926775">"Телефонуңузду экранды бөгөттөө опциясы менен коргоңуз, ошондо ал жоголсо же бирөө уурдап кетсе, эч ким колдоно албай калат. Экранды бөгөттөө функциясы менен жүздүн аныктыгын текшерүүнү жөндөсөңүз да болот. \"Жокко чыгарууну\" таптаңыз, анан PIN кодду жөндөңүз же экранды бөгөттөөнүн башка опциясын тандаңыз."</string>
+ <string name="face_lock_screen_setup_skip_dialog_text" product="default" msgid="8541640018478926775">"Жүзүнөн таанып ачуу функциясын жөндөө үчүн, телефондун экранын кулпулоону иштетүү керек. Ушуну менен, телефонуңуз жоголуп же бирөө уурдап кетсе, анын ичиндегилерди эч ким көрө албай калат. Экранды кулпулоо функциясын иштетүү үчүн, \"Жок\" дегенди басып, андан соң PIN код коюңуз же экранды кулпулоонун башка ыкмасын тандаңыз."</string>
<string name="lock_screen_pin_skip_title" msgid="8217519439213393785">"PIN кодду жөндөөнү өткөрүп жибересизби?"</string>
<string name="lock_screen_password_skip_title" msgid="3725788215672959827">"Сырсөздү жөндөөнү өткөрүп жибересизби?"</string>
<string name="lock_screen_pattern_skip_title" msgid="4237030500353932005">"Графикалык ачкычты жөндөөнү өткөрүп жибересизби?"</string>
@@ -494,14 +494,14 @@
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"Кийинки"</string>
<string name="security_settings_fingerprint_enroll_disclaimer" msgid="5831834311961551423">"Телефонуңуздун кулпусун ачуу, ар кандай нерселерди сатып алуу жана колдонмолорду ачуу үчүн, манжа изиңизди кошуп коюңуз. "<annotation id="url">"Көбүрөөк билүү"</annotation></string>
<string name="security_settings_fingerprint_enroll_disclaimer_lockscreen_disabled" msgid="7954742554236652690">" Экранды кулпулоо параметри өчүрүлгөн. Көбүрөөк маалымат үчүн ишканаңыздын администраторуна кайрылыңыз. "<annotation id="admin_details">"Кошумча маалымат"</annotation>\n\n"Манжа изиңиз аркылуу сатып алууларга уруксат берип жана колдонмолорго кире берсеңиз болот. "<annotation id="url">"Көбүрөөк маалымат"</annotation></string>
- <string name="security_settings_fingerprint_enroll_lift_touch_again" msgid="1670703069782212223">"Манжаңызды көтөрүп, сенсорго кайра тийип коюңуз"</string>
+ <string name="security_settings_fingerprint_enroll_lift_touch_again" msgid="1670703069782212223">"Манжаңызды көтөрүп, кайра сенсорго тийгизиңиз"</string>
<string name="fingerprint_add_max" msgid="2939393314646115661">"<xliff:g id="COUNT">%d</xliff:g> чейин манжа изин кошсоңуз болот"</string>
<string name="fingerprint_intro_error_max" msgid="3247720976621039437">"Кошулган манжа издеринин саны жогорку чегине жетти"</string>
<string name="fingerprint_intro_error_unknown" msgid="3975674268256524015">"Дагы манжа издерин кошуу мүмкүн эмес"</string>
<string name="fingerprint_last_delete_title" msgid="3104596858161269635">"Манжа издерин өчүрөсүзбү?"</string>
<string name="fingerprint_delete_title" msgid="3120894112324235536">"\"<xliff:g id="FINGERPRINT_ID">%1$s</xliff:g>\" манжа изин алып салуу"</string>
<string name="fingerprint_delete_message" msgid="5895802741486967970">"Бул манжа изин өчүрөсүзбү?"</string>
- <string name="fingerprint_last_delete_message" msgid="3346252479778971442">"Телефонуңуздун кулпусун ачып, сатып алууга уруксат берип же колдонмолорго кирүү үчүн манжа издерин башка колдоно албай каласыз"</string>
+ <string name="fingerprint_last_delete_message" msgid="3346252479778971442">"Манжаңыздын изи менен экранды ачып, кандайдыр бир нерсе сатып алып же колдонмолорго уруксат бере албай каласыз"</string>
<string name="fingerprint_last_delete_message_profile_challenge" msgid="5385095150532247025">"Жумуш профилиңиздин кулпусун ачып, сатып алууга уруксат берип же жумуштагы колдонмолорго кирүү үчүн манжа издерин башка колдоно албай каласыз"</string>
<string name="fingerprint_last_delete_confirm" msgid="7984595457589664004">"Ооба, өчүрөм"</string>
<string name="crypt_keeper_settings_title" msgid="839783588093862748">"Шифрлөө"</string>
@@ -548,7 +548,7 @@
<string name="setup_lock_settings_picker_title" product="tablet" msgid="2429667472335773519">"Планшетиңизди коргоңуз"</string>
<string name="setup_lock_settings_picker_title" product="device" msgid="4739290104106645233">"Түзмөгүңүздү коргоңуз"</string>
<string name="setup_lock_settings_picker_title" product="default" msgid="3911582328576859628">"Телефонуңузду коргоңуз"</string>
- <string name="lock_settings_picker_biometrics_added_security_message" msgid="799453282539387294">"Кошумча коопсуздук үчүн көмөкчү экран кулпусун коюп алыңыз"</string>
+ <string name="lock_settings_picker_biometrics_added_security_message" msgid="799453282539387294">"Бекемирээк коргоо үчүн, экранды дагы бир ыкма менен кулпулаңыз"</string>
<string name="setup_lock_settings_picker_message" product="tablet" msgid="7230799135599877804">"Түзмөктү коргоо функциялары жандырылганда, башкалар бул планшетти сиздин уруксатыңызсыз пайдалана албай калышат. Колдонгуңуз келген экран кулпусун тандаңыз."</string>
<string name="setup_lock_settings_picker_message" product="device" msgid="2098404520816295371">"Түзмөктү коргоо функциялары жандырылганда, башкалар бул түзмөктү сиздин уруксатыңызсыз пайдалана албай калышат. Колдонгуңуз келген экран кулпусун тандаңыз."</string>
<string name="setup_lock_settings_picker_message" product="default" msgid="2003984443953672040">"Түзмөктү коргоо функциялары жандырылганда, башкалар бул телефонду сиздин уруксатыңызсыз пайдалана албай калышат. Колдонгуңуз келген экран кулпусун тандаңыз."</string>
@@ -598,11 +598,11 @@
<string name="unlock_disable_frp_warning_content_pattern" msgid="1843950215687159135">"Графикалык ачкычсыз түзмөктү коргоо функциялары иштебейт."</string>
<string name="unlock_disable_frp_warning_content_pattern_fingerprint" msgid="8846957650251741548">"Графикалык ачкычыңызсыз түзмөгүңүздү коргоо функциялары иштебейт.<xliff:g id="EMPTY_LINE">
-</xliff:g>Сакталган манжа издериңиз да бул түзмөктөн өчүрүлөт жана алардын жардамы менен түзмөгүңүздүн кулпусун ачып, ар кандай нерселерди сатып алып же аккаунтка кире албай каласыз."</string>
+</xliff:g>Сакталган манжа издериңиз да бул түзмөктөн өчүрүлөт жана алардын жардамы менен, түзмөгүңүздүн кулпусун ачып, ар кандай нерселерди сатып алып же аккаунтка кире албай каласыз."</string>
<string name="unlock_disable_frp_warning_content_pin" msgid="6760473271034592796">"PIN кодсуз түзмөктү коргоо функциялары иштебейт."</string>
<string name="unlock_disable_frp_warning_content_pin_fingerprint" msgid="4384632309103635233">"PIN кодуңузсуз түзмөктү коргоо функциялары иштебейт.<xliff:g id="EMPTY_LINE">
-</xliff:g>Сакталган манжа издериңиз да бул түзмөктөн өчүрүлөт жана алардын жардамы менен түзмөгүңүздүн кулпусун ачып, ар кандай нерселерди сатып алып же аккаунтка кире албай каласыз."</string>
+</xliff:g>Сакталган манжа издериңиз да бул түзмөктөн өчүрүлөт жана алардын жардамы менен, түзмөгүңүздүн кулпусун ачып, ар кандай нерселерди сатып алып же аккаунтка кире албай каласыз."</string>
<string name="unlock_disable_frp_warning_content_password" msgid="854665587186358170">"Сырсөзүңүзсүз түзмөктү коргоо функциялары иштебейт."</string>
<string name="unlock_disable_frp_warning_content_password_fingerprint" msgid="218143910981979545">"Сырсөзүңүзсүз түзмөктү коргоо функциялары иштебейт.<xliff:g id="EMPTY_LINE">
@@ -610,23 +610,23 @@
<string name="unlock_disable_frp_warning_content_unknown" msgid="3570135744390201244">"Экраныңыздын кулпусусуз түзмөктү коргоо функциялары иштебейт."</string>
<string name="unlock_disable_frp_warning_content_unknown_fingerprint" msgid="5775815077478538855">"Экраныңыздын кулпусусуз түзмөктү коргоо функциялары иштебейт.<xliff:g id="EMPTY_LINE">
-</xliff:g>Сакталган манжа издериңиз да бул түзмөктөн өчүрүлөт жана алардын жардамы менен түзмөгүңүздүн кулпусун ачып, ар кандай нерселерди сатып алып же аккаунтка кире албай каласыз."</string>
+</xliff:g>Сакталган манжа издериңиз да бул түзмөктөн өчүрүлөт жана алардын жардамы менен, түзмөгүңүздүн кулпусун ачып, ар кандай нерселерди сатып алып же аккаунтка кире албай каласыз."</string>
<string name="unlock_disable_frp_warning_content_pattern_profile" msgid="2369992898062808499">"Графикалык ачкычыңызсыз профилди коргоо функциялары иштебейт."</string>
<string name="unlock_disable_frp_warning_content_pattern_fingerprint_profile" msgid="8511105093090018735">"Графикалык ачкычыңызсыз профилди коргоо функциялары иштебейт.<xliff:g id="EMPTY_LINE">
-</xliff:g>Сакталган манжа издериңиз да бул профилден өчүрүлөт жана алардын жардамы менен профилиңиздин кулпусун ачып, ар кандай нерселерди сатып алып же аккаунтка кире албай каласыз."</string>
+</xliff:g>Сакталган манжа издериңиз да бул профилден өчүрүлөт жана алардын жардамы менен, профилиңиздин кулпусун ачып, ар кандай нерселерди сатып алып же аккаунтка кире албай каласыз."</string>
<string name="unlock_disable_frp_warning_content_pin_profile" msgid="7114165651000498040">"PIN кодуңузсуз профилди коргоо функциялары иштебейт."</string>
<string name="unlock_disable_frp_warning_content_pin_fingerprint_profile" msgid="5118210431544156122">"PIN кодуңузсуз профилди коргоо функциялары иштебейт.<xliff:g id="EMPTY_LINE">
-</xliff:g>Сакталган манжа издериңиз да бул профилден өчүрүлөт жана алардын жардамы менен профилиңиздин кулпусун ачып, ар кандай нерселерди сатып алып же аккаунтка кире албай каласыз."</string>
+</xliff:g>Сакталган манжа издериңиз да бул профилден өчүрүлөт жана алардын жардамы менен, профилиңиздин кулпусун ачып, ар кандай нерселерди сатып алып же аккаунтка кире албай каласыз."</string>
<string name="unlock_disable_frp_warning_content_password_profile" msgid="3989497526180082037">"Сырсөзүңүзсүз профилди коргоо функциялары иштебейт."</string>
<string name="unlock_disable_frp_warning_content_password_fingerprint_profile" msgid="8360485354164416198">"Сырсөзүңүзсүз профилди коргоо функциялары иштебейт.<xliff:g id="EMPTY_LINE">
-</xliff:g>Сакталган манжа издериңиз да бул профилден өчүрүлөт жана алардын жардамы менен профилиңиздин кулпусун ачып, ар кандай нерселерди сатып алып же аккаунтка кире албай каласыз."</string>
+</xliff:g>Сакталган манжа издериңиз да бул профилден өчүрүлөт жана алардын жардамы менен, профилиңиздин кулпусун ачып, ар кандай нерселерди сатып алып же аккаунтка кире албай каласыз."</string>
<string name="unlock_disable_frp_warning_content_unknown_profile" msgid="4066001421137974082">"Экраныңыздын кулпусусуз профилди коргоо функциялары иштебейт."</string>
<string name="unlock_disable_frp_warning_content_unknown_fingerprint_profile" msgid="1201259228331105948">"Экраныңыздын кулпусусуз профилди коргоо функциялары иштебейт.<xliff:g id="EMPTY_LINE">
-</xliff:g>Сакталган манжа издериңиз да бул профилден өчүрүлөт жана алардын жардамы менен профилиңиздин кулпусун ачып, ар кандай нерселерди сатып алып же аккаунтка кире албай каласыз."</string>
+</xliff:g>Сакталган манжа издериңиз да бул профилден өчүрүлөт жана алардын жардамы менен, профилиңиздин кулпусун ачып, ар кандай нерселерди сатып алып же аккаунтка кире албай каласыз."</string>
<string name="unlock_disable_frp_warning_ok" msgid="2373890505202766456">"Ооба, өчүрүлсүн"</string>
<string name="unlock_change_lock_pattern_title" msgid="7622476883851319877">"Кулпн ачуу үлгсн өзгрт"</string>
<string name="unlock_change_lock_pin_title" msgid="6671224158800812238">"Клпн ачуу PIN кдн өзгр"</string>
@@ -646,9 +646,9 @@
<string name="lock_last_pattern_attempt_before_wipe_profile" msgid="3877613047631174576">"Эгер графикалык ачкычты кийинки жолу туура эмес киргизсеңиз, жумуш профилиңиз жана анын дайындары өчүрүлөт"</string>
<string name="lock_last_pin_attempt_before_wipe_profile" msgid="8132438288175428168">"Эгер PIN кодду кийинки жолу туура эмес киргизсеңиз, жумуш профилиңиз жана анын дайындары өчүрүлөт"</string>
<string name="lock_last_password_attempt_before_wipe_profile" msgid="1535128774464384305">"Эгер сырсөздү кийинки жолу туура эмес киргизсеңиз, жумуш профилиңиз жана анын дайындары өчүрүлөт"</string>
- <string name="lock_failed_attempts_now_wiping_device" msgid="8662360098784762828">"Өтө көп жолу туура эмес аракет кылынды. Бул түзмөктүн дайындары өчүрүлөт."</string>
- <string name="lock_failed_attempts_now_wiping_user" msgid="3793513796171561873">"Өтө көп жолу туура эмес аракет кылынды. Бул колдонуучу өчүрүлөт."</string>
- <string name="lock_failed_attempts_now_wiping_profile" msgid="5347108525299038285">"Өтө көп жолу туура эмес аракет кылынды. Бул жумуш профили жана анын дайындары өчүрүлөт."</string>
+ <string name="lock_failed_attempts_now_wiping_device" msgid="8662360098784762828">"Өтө көп жолу жаңылдыңыз. Бул түзмөктүн дайындары өчүрүлөт."</string>
+ <string name="lock_failed_attempts_now_wiping_user" msgid="3793513796171561873">"Өтө көп жолу жаңылдыңыз. Бул колдонуучу өчүрүлөт."</string>
+ <string name="lock_failed_attempts_now_wiping_profile" msgid="5347108525299038285">"Өтө көп жолу жаңылдыңыз. Бул жумуш профили жана андагы нерселер өчүрүлөт."</string>
<string name="lock_failed_attempts_now_wiping_dialog_dismiss" msgid="3950582268749037318">"Этибарга албоо"</string>
<plurals name="lockpassword_password_too_short" formatted="false" msgid="694091983183310827">
<item quantity="other">Кеминде <xliff:g id="COUNT_1">%d</xliff:g> символ болушу керек</item>
@@ -740,7 +740,7 @@
<string name="bluetooth_confirm_passkey_msg" msgid="7094455604290076371">"Муну менен туташыш үчүн:<br><b><xliff:g id="DEVICE_NAME">%1$s</xliff:g></b><br><br>Ал бул кодду көрсөтүп жатканын текшериңиз:<br><b><xliff:g id="PASSKEY">%2$s</xliff:g></b>"</string>
<string name="bluetooth_incoming_pairing_msg" msgid="940451919337185024">"Жөнөтүүчү:<br><b><xliff:g id="DEVICE_NAME">%1$s</xliff:g></b><br><br>Бул түзмөк менен туташсынбы?"</string>
<string name="bluetooth_display_passkey_pin_msg" msgid="5909423849232791647">"Кийинки менен туташуу үчүн:<xliff:g id="BOLD1_0"><br><b></xliff:g><xliff:g id="DEVICE_NAME">%1$s</xliff:g><xliff:g id="END_BOLD1"></b><br><br></xliff:g>Андан муну терип:<xliff:g id="BOLD2_1"><br><b></xliff:g><xliff:g id="PASSKEY">%2$s</xliff:g><xliff:g id="END_BOLD2"></b></xliff:g>, Return же Enter\'ди басыңыз."</string>
- <string name="bluetooth_pairing_shares_phonebook" msgid="7474404818877079813">"Байланыштар менен чалуулар таржымалын пайдалануу мүмкүнчүлүгү берилсин"</string>
+ <string name="bluetooth_pairing_shares_phonebook" msgid="7474404818877079813">"Байланыштар менен чалуулар таржымалына мүмкүнчүлүк берүү"</string>
<string name="bluetooth_error_title" msgid="5718761586633101960"></string>
<string name="bluetooth_connecting_error_message" msgid="8473359363469518478">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> менен байланыша албай жатат."</string>
<string name="bluetooth_preference_scan_title" msgid="457781003962324807">"Түзмөктөрдү издөө"</string>
@@ -830,13 +830,13 @@
<string name="android_beam_settings_title" msgid="3083436415873738389">"Android Beam"</string>
<string name="android_beam_on_summary" msgid="8068287225180474199">"Дайындар NFC аркылуу өткөрүлөт"</string>
<string name="android_beam_off_summary" msgid="7365818039159364600">"Өчүк"</string>
- <string name="nfc_disabled_summary" msgid="2181777971122724361">"NFC өчүк болгондуктан жеткиликсиз"</string>
+ <string name="nfc_disabled_summary" msgid="2181777971122724361">"NFC өчүк болгондуктан, жеткиликсиз"</string>
<string name="android_beam_label" msgid="5340299879556025708">"Android Beam"</string>
<string name="android_beam_explained" msgid="4501176353247859329">"Бул мүмкүнчүлүк жандырылганда, түзмөктөрдү бири-бирине тийиштирип, NFC аркылуу веб баракчалар, YouTube видеолору, байланыштар, шилтемелер, сүрөттөр сыяктуу дайындарды биринен экинчисине өткөрө аласыз.\n\nТүзмөктөрдү бири-бирине тийиштирип (арка жактарын), экраныңызды басып коюңуз. Эмне өткөрүлөөрүн колдонмо өзү аныктай алат."</string>
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Wi‑Fi\'ды жандыруу"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Wi-Fi\'ды колдонуу"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Wi-Fi\'ды колдонуу"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi‑Fi тууралоолору"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Зымсыз кошулуу түйүндөрүн орнотуу жана башкаруу"</string>
@@ -849,7 +849,7 @@
<string name="wifi_notify_open_networks" msgid="4782239203624619655">"Ачык тармактар тууралуу билдирмелер"</string>
<string name="wifi_notify_open_networks_summary" msgid="1383681260705466715">"Байланыш сигналы күчтүү жалпыга ачык тармактар жеткиликтүү болгондо эскертет"</string>
<string name="wifi_wakeup" msgid="4963732992164721548">"Wi‑Fi автоматтык түрдө күйсүн"</string>
- <string name="wifi_wakeup_summary" msgid="1152699417411690">"Байланыш сигналы күчтүү сакталган тармактарга (мисалы, үйүңүздөгү) жакындаганда, Wi‑Fi автоматтык түрдө күйөт"</string>
+ <string name="wifi_wakeup_summary" msgid="1152699417411690">"Сигналы күчтүү, сакталган тармактарга жакындаганда (мисалы, үйүңүздөгү), Wi‑Fi автоматтык түрдө күйөт"</string>
<string name="wifi_wakeup_summary_no_location" msgid="3007457288587966962">"Жайгашкан жерди аныктоо мүмкүнчүлүгү өчүрүлгөндүктөн, жеткиликтүү эмес. "<annotation id="link">"Жайгашкан жерди"</annotation>" күйгүзүңүз."</string>
<string name="wifi_wakeup_summary_scanning_disabled" msgid="6820040651529910914">"Wi‑Fi издөө функциясы өчүрүлгөндүктөн, бул опция иштебейт"</string>
<string name="wifi_wakeup_summary_scoring_disabled" msgid="7067018832237903151">"Пайдалануу үчүн тармактын рейтингин камсыздоочуну тандаңыз"</string>
@@ -862,7 +862,7 @@
<string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"Пайдалануу үчүн шайкеш келген тармактын рейтингин камсыздоочуну тандаңыз"</string>
<string name="wifi_install_credentials" msgid="5650088113710858289">"Тастыктамаларды орнотуу"</string>
<string name="wifi_scan_notify_text" msgid="7614101215028336927">"Кайда жүргөнүңүздү тагыраак аныктоо үчүн, Wi‑Fi өчүп турса да, колдонмолор менен кызматтар зымсыз тармактарды издей беришет. Бул режим жайгашкан жерди аныктоо функцияларын жакшыртууга мүмкүнчүлүк берет. Аны <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>Wi-Fi тармактарын издөө жөндөөлөрүнөн<xliff:g id="LINK_END_1">LINK_END</xliff:g> өчүрүп койсоңуз болот."</string>
- <string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"Кандайдыр бир жерди тагыраак аныктоо үчүн <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>издөө жөндөөлөрүнөн<xliff:g id="LINK_END_1">LINK_END</xliff:g> Wi-Fi издөө дегенди күйгүзүңүз."</string>
+ <string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"Кандайдыр бир жерди тагыраак аныктоо үчүн, <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>издөө жөндөөлөрүнөн<xliff:g id="LINK_END_1">LINK_END</xliff:g> Wi-Fi издөө дегенди күйгүзүңүз."</string>
<string name="wifi_scan_notify_remember_choice" msgid="1235445971400237444">"Экинчи көргөзбө"</string>
<string name="wifi_setting_sleep_policy_title" msgid="2120785188625932076">"Уктап жатканда Wi‑Fi иштей берсин"</string>
<string name="wifi_setting_on_during_sleep_title" msgid="856670183023402715">"Уктап жатканда Wi‑Fi күйүк"</string>
@@ -875,7 +875,7 @@
<string name="wifi_cellular_data_fallback_title" msgid="5067241930716252665">"Мобилдик дайындарга автоматтык түрдө которулсун"</string>
<string name="wifi_cellular_data_fallback_summary" msgid="2721467405851519769">"Wi-Fi аркылуу Интернетке туташуу мүмкүнчүлүгү жок болгондо, мобилдик дайындар колдонулсун. Дайындардын колдонулгандыгы үчүн акы алынышы мүмкүн."</string>
<string name="wifi_add_network" msgid="4094957940791876640">"Тармак кошуу"</string>
- <string name="wifi_configure_settings_preference_title" msgid="2678534679408777268">"Wi‑Fi жеке жөндөөлөрү"</string>
+ <string name="wifi_configure_settings_preference_title" msgid="2678534679408777268">"Wi‑Fi жөндөөлөрү"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="5714892572614655675">"Wi‑Fi тармагы автоматтык түрдө өзү күйөт"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_off" msgid="286904094152909651">"Wi‑Fi тармагы автоматтык түрдө күйбөйт"</string>
<string name="wifi_access_points" msgid="1647976498906871869">"Wi‑Fi түйүндөрү"</string>
@@ -888,14 +888,14 @@
<string name="wifi_menu_remember" msgid="717257200269700641">"Тармакты эстеп калуу"</string>
<string name="wifi_menu_forget" msgid="7561140554450163075">"Тармак унутулсун"</string>
<string name="wifi_menu_modify" msgid="4080178040721021101">"Тармакты өзгөртүү"</string>
- <string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"Жеткиликтүү тармактарды көрүү үчүн Wi‑Fi\'ды иштетиңиз."</string>
+ <string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"Жеткиликтүү тармактарды көрүү үчүн, Wi‑Fi\'ды иштетиңиз."</string>
<string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"Wi‑Fi түйүндөрү изделүүдө…"</string>
<string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"Wi‑Fi түйүнүн алмаштырууга урукатыңыз жок."</string>
<string name="wifi_more" msgid="3538241640407382185">"Дагы"</string>
<string name="wifi_setup_wps" msgid="6730131677695521321">"Автоматтык тууралоо (WPS)"</string>
<string name="wifi_settings_scanning_required_title" msgid="3593457187659922490">"Wi‑Fi издөөнү күйгүзөсүзбү?"</string>
<string name="wifi_settings_scanning_required_summary" msgid="7469610959462708782">"Wi‑Fi тармактарына автоматтык түрдө туташуу үчүн, Wi-Fi издөө функциясын иштетишиңиз керек."</string>
- <string name="wifi_settings_scanning_required_info" msgid="5913535073390607386">"Бул функция аркылуу Интернет байланышы жок болсо да, колдонмолор менен кызматтар Wi-Fi тармактарын издей алышат. Жайгашкан жерди аныктоо функциясын жана кызматтарды жакшырткыңыз келсе, аны иштетиңиз."</string>
+ <string name="wifi_settings_scanning_required_info" msgid="5913535073390607386">"Бул функция аркылуу Интернет жок болсо да, колдонмолор менен кызматтар Wi-Fi тармактарын издей алышат. Жайгашкан жерди аныктоо функциясын жана кызматтарды жакшырткыңыз келсе, аны иштетиңиз."</string>
<string name="wifi_settings_scanning_required_turn_on" msgid="4327570180594277049">"Күйгүзүү"</string>
<string name="wifi_settings_scanning_required_enabled" msgid="3336102100425307040">"Wi‑Fi\'ды издөө күйгүзүлдү"</string>
<string name="wifi_show_advanced" msgid="8199779277168030597">"Өркүндөтүлгөн параметрлер"</string>
@@ -905,22 +905,22 @@
<string name="wifi_ssid_hint" msgid="5010024648106585165">"SSID киргизиңиз"</string>
<string name="wifi_security" msgid="9136702039496152831">"Коопсуздук"</string>
<string name="wifi_hidden_network" msgid="6647772204699776833">"Жашырылган тармак"</string>
- <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Эгер роутериңиз тармактын ID\'син таратпай жатса, бирок ага келечекте туташууну кааласаңыз, ал тармакты жашыруун кылып койсоңуз болот.\n\nТелефонуңуз тармакты табуу үчүн сигналын такай таратканына байланыштуу бул коопсуздукка зыян келтириши мүмкүн.\n\nТармакты жашыруун кылып жөндөсөңүз, роутериңиздин жөндөөлөрү өзгөрбөйт."</string>
+ <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Эгер роутериңиз тармактын идентификаторун таратпай жатса, бирок ага кийинчерээк туташа турган болсоңуз, аны жашыруун кылып койсоңуз болот.\n\nБирок телефонуңуз сигнал берип, тармакты издей берет. Ушундан улам, түзмөгүңүздүн коопсуздугуна коркунуч келтирилиши мүмкүн.\n\nЖашыруун тармактын сакталышы роутердин параметрлерин өзгөртпөйт."</string>
<string name="wifi_signal" msgid="696548364467704808">"Сигналдын күчү"</string>
<string name="wifi_status" msgid="3439931558930689940">"Абалы"</string>
- <string name="tx_wifi_speed" msgid="2571810085003261073">"Байланыш ылдамдыгын берүү"</string>
- <string name="rx_wifi_speed" msgid="7392873246110937187">"Байланыш ылдамдыгын алуу"</string>
+ <string name="tx_wifi_speed" msgid="2571810085003261073">"Маалымат берүү ылдамдыгы"</string>
+ <string name="rx_wifi_speed" msgid="7392873246110937187">"Маалымат алуу ылдамдыгы"</string>
<string name="wifi_frequency" msgid="6132852924995724246">"Жыштык"</string>
<string name="wifi_ip_address" msgid="5572539114989914831">"IP дарек"</string>
<string name="passpoint_label" msgid="7429247462404128615">"Төмөнкү аркылуу сакталган"</string>
<string name="passpoint_content" msgid="340527524510304327">"<xliff:g id="NAME">%1$s</xliff:g> эсептик дайындары"</string>
<string name="wifi_eap_method" msgid="3752116941487485859">"EAP ыкмасы"</string>
- <string name="please_select_phase2" msgid="5848080896810435677">"Аныктыктын текшерүүнүн 2-этабы"</string>
+ <string name="please_select_phase2" msgid="5848080896810435677">"Аутентификациянын 2-этабы"</string>
<string name="wifi_eap_ca_cert" msgid="1496395241849383785">"CA тастыктамасы"</string>
<string name="wifi_eap_domain" msgid="3298302320003640130">"Домен"</string>
<string name="wifi_eap_user_cert" msgid="6786839531765719173">"Колдонуучунун тастыктамасы"</string>
<string name="wifi_eap_identity" msgid="5280457017705738773">"Идентификация"</string>
- <string name="wifi_eap_anonymous" msgid="6352344972490839958">"Аныктыгы жашыруун"</string>
+ <string name="wifi_eap_anonymous" msgid="6352344972490839958">"Белгисиз"</string>
<string name="wifi_password" msgid="6942983531275177771">"Сырсөз"</string>
<string name="wifi_show_password" msgid="7878398590772942202">"Сырсөздү көрсөтүү"</string>
<string name="wifi_ap_band_config" msgid="6565016368079288433">"Wi-Fi жыштыгынын диапазону"</string>
@@ -930,15 +930,15 @@
<string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"5.0 ГГц жыштыгы сунушталат"</string>
<string name="wifi_ap_2G" msgid="5793110086517338494">"2.4 ГГц"</string>
<string name="wifi_ap_5G" msgid="4584892544393675403">"5.0 ГГц"</string>
- <string name="wifi_ap_band_select_one" msgid="4409754936554360355">"Wi‑Fi туташуу түйүнүн иштетүү үчүн кеминде бир жыштыкты тандаңыз:"</string>
+ <string name="wifi_ap_band_select_one" msgid="4409754936554360355">"Wi‑Fi байланыш түйүнүн иштетүү үчүн кеминде бир жыштыкты тандаңыз:"</string>
<string name="wifi_ip_settings" msgid="4636102290236116946">"IP жөндөөлөрү"</string>
<string name="wifi_privacy_settings" msgid="4462092795794247809">"Купуялык"</string>
<string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"Кокустан тандалган MAC"</string>
<string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"Түзмөк кошуу"</string>
- <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"QR кодду борборго жайгаштырып, түзмөктү \"<xliff:g id="SSID">%1$s</xliff:g>\" тармагына кошуңуз"</string>
+ <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"\"<xliff:g id="SSID">%1$s</xliff:g>\" тармагына кошулуу үчүн, камераны төмөнкү QR кодго алып келиңиз"</string>
<string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"QR кодун скандоо"</string>
- <string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"QR кодду борборго жайгаштырып, түзмөктү \"<xliff:g id="SSID">%1$s</xliff:g>\" тармагына туташтырыңыз"</string>
- <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"QR кодун скандоо менен Wi‑Fi\'га кошулуңуз"</string>
+ <string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"\"<xliff:g id="SSID">%1$s</xliff:g>\" тармагына туташуу үчүн, камераңызды төмөнкү QR кодго алып келиңиз"</string>
+ <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"Wi‑Fi\'га кошулуу үчүн, QR кодун скандаңыз"</string>
<string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Wi‑Fi\'ды бөлүшүү"</string>
<string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"\"<xliff:g id="SSID">%1$s</xliff:g>\" тармагына туташып, сырсөз менен бөлүшүү үчүн, бул QR кодун скандаңыз"</string>
<string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"\"<xliff:g id="SSID">%1$s</xliff:g>\" тармагына туташуу үчүн, бул QR кодун скандаңыз"</string>
@@ -967,12 +967,12 @@
<string name="wifi_dpp_connect_network_using_qr_code" msgid="115993715600532357">"Бул тармакка туташуу үчүн, QR кодун колдонуңуз"</string>
<string name="retry" msgid="8500839563577344702">"Кайталоо"</string>
<string name="wifi_shared" msgid="5054256778276524960">"Түзмөктүн башка колдонуучулары менен бөлүшүлсүн"</string>
- <string name="wifi_unchanged" msgid="6804964646942333992">"(өзгөрбөгөн)"</string>
+ <string name="wifi_unchanged" msgid="6804964646942333992">"(өзгөрүүсүз)"</string>
<string name="wifi_unspecified" msgid="893491188483500809">"Тандаңыз"</string>
<string name="wifi_multiple_cert_added" msgid="7986200585749147204">"(Бир нече тастыктама кошулду)"</string>
<string name="wifi_use_system_certs" msgid="4794489370929885022">"Тутумдун тастыктамаларын көрсөтүү"</string>
<string name="wifi_do_not_provide_eap_user_cert" msgid="4044301449482425250">"Берилбесин"</string>
- <string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"Күчүнө киргизилбесин"</string>
+ <string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"Текшерилбесин"</string>
<string name="wifi_do_not_validate_eap_server_warning" msgid="3895397996759837323">"Эч тастыктама көрсөтүлгөн жок. Туташууңуз купуя болбойт."</string>
<string name="wifi_ssid_too_long" msgid="34911971389775920">"Тармактын аталышы өтө узун."</string>
<string name="wifi_no_domain_warning" msgid="735859919311067606">"Домен көрсөтүлүшү керек."</string>
@@ -994,7 +994,7 @@
<string name="lost_internet_access_text" msgid="8962010031520731813">"Wi-Fi байланышы начар болгондо, ар дайым мобилдик тармакка өтө аласыз. Дайындардын өткөрүлгөндүгү үчүн акы алынышы мүмкүн."</string>
<string name="lost_internet_access_switch" msgid="9218006455779873700">"Мобилдик түзмөккө которуу"</string>
<string name="lost_internet_access_cancel" msgid="6577871064062518744">"Wi-Fi тармагында калуу"</string>
- <string name="lost_internet_access_persist" msgid="6368659013482055611">"Кайра көрсөтүлбөсүн"</string>
+ <string name="lost_internet_access_persist" msgid="6368659013482055611">"Кайра көрүнбөсүн"</string>
<string name="wifi_connect" msgid="5653612760223533650">"Туташуу"</string>
<string name="wifi_turned_on_message" msgid="3377779146238242894">"Wi-Fi күйгүзүлдү"</string>
<!-- no translation found for wifi_connected_to_message (2875589636437599620) -->
@@ -1060,14 +1060,14 @@
<string name="wifi_hotspot_off_subtext" msgid="6177054857136221058">"Интернет же мазмун башка түзмөктөр менен бөлүшүлгөн жок"</string>
<string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="71421730039785897">"Бул планшеттин Интернети байланыш түйүнү аркылуу бөлүшүлүүдө"</string>
<string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="8914285514605049879">"Бул телефондун Интернети байланыш түйүнү аркылуу бөлүшүлүүдө"</string>
- <string name="wifi_hotspot_on_local_only_subtext" msgid="7415381343846704553">"Колдонмо мазмунду бөлүшүүдө. Интернет байланышын бөлүшүү үчүн туташуу түйүнүн өчүрүп, кайра күйгүзүңүз"</string>
+ <string name="wifi_hotspot_on_local_only_subtext" msgid="7415381343846704553">"Колдонмо мазмунду бөлүшүүдө. Интернет байланышын бөлүшүү үчүн байланыш түйүнүн өчүрүп, кайра күйгүзүңүз"</string>
<string name="wifi_hotspot_no_password_subtext" msgid="5400500962974373706">"Бир да сырсөз коюлган жок"</string>
<string name="wifi_hotspot_name_title" msgid="6572202165400226127">"Байланыш түйүнүнүн аталышы"</string>
<string name="wifi_hotspot_name_summary_connecting" msgid="5176787959408511889">"<xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g> күйгүзүлүүдө…"</string>
<string name="wifi_hotspot_name_summary_connected" msgid="8387768642326756749">"Башка түзмөктөр <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g> тармагына туташа алышат"</string>
<string name="wifi_hotspot_password_title" msgid="4289338152595154889">"Байланыш түйүнүнүн сырсөзү"</string>
<string name="wifi_hotspot_ap_band_title" msgid="3485744480410441949">"Wi-Fi жыштыктарынын диапазону"</string>
- <string name="wifi_hotspot_footer_info_regular" msgid="3876006922622827363">"Байланыш түйүнү аркылуу Wi‑Fi тармагын түзүңүз. Анын жардамы менен башка түзмөктөр мобилдик Интернетке туташа алышат. Мобилдик Интернет үчүн кошумча акы алынышы мүмкүн."</string>
+ <string name="wifi_hotspot_footer_info_regular" msgid="3876006922622827363">"Байланыш түйүнү аркылуу Wi‑Fi тармагын түзүңүз. Анын жардамы менен, башка түзмөктөр мобилдик Интернетке туташа алышат. Мобилдик Интернет үчүн кошумча акы алынышы мүмкүн."</string>
<string name="wifi_hotspot_footer_info_local_only" msgid="3339582350894639261">"Жакын жердеги түзмөктөр менен мазмунду бөлүшүү үчүн колдонмолор байланыш түйүнү болуп бере алышат."</string>
<string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"Байланыш түйүнү автоматтык түрдө өчөт"</string>
<string name="wifi_hotspot_auto_off_summary" msgid="3866769400624802105">"Бир дагы түзмөк туташпаса, Wi‑Fi байланыш түйүнү автоматтык түрдө өчүп калат"</string>
@@ -1082,7 +1082,7 @@
<string name="wifi_calling_settings_title" msgid="626821542308601806">"Wi-Fi чалуу"</string>
<string name="wifi_calling_suggestion_title" msgid="1402265373543523970">"Байланыш аймагын кеңейтүү үчүн Wi-Fi аркылуу чалуу"</string>
<string name="wifi_calling_suggestion_summary" msgid="198402175473169630">"Байланыш аймагын кеңейтүү үчүн Wi-Fi аркылуу чалууну күйгүзүңүз"</string>
- <string name="wifi_calling_mode_title" msgid="3350624859819920176">"Чалуунун жеке жөндөөлөрү"</string>
+ <string name="wifi_calling_mode_title" msgid="3350624859819920176">"Чалуунун жөндөөлөрү"</string>
<string name="wifi_calling_mode_dialog_title" msgid="652534533091724333">"Чалуу параметрлери"</string>
<string name="wifi_calling_roaming_mode_title" msgid="2059151080231602753">"Роуминг жөндөөлөрү"</string>
<!-- no translation found for wifi_calling_roaming_mode_summary (620031651074963360) -->
@@ -1102,13 +1102,16 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi‑Fi"</item>
+ <item msgid="2271962426654621656">"Мобилдик түзмөк"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Wi‑Fi жеткиликсиз болсо, мобилдик тармакты колдонуу"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Мобилдик тармак жеткиликсиз болсо, Wi‑Fi’ды колдонуңуз"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Wi-Fi аркылуу чалуу. Wi‑Fi жоголуп кетсе, чалуу үзүлөт."</string>
<string name="wifi_calling_off_explanation" msgid="1653424723742898015">"Wi-Fi аркылуу чалуу күйгүзүлгөндө, телефонуңуз, жеке жөндөөлөрүңүзгө жана сигналдын күчтүүлүгүнө жараша, чалууларды Wi-Fi тармактары же операторуңуздун тармагы аркылуу багыттай алат. Бул функцияны күйгүзүүдөн мурда, төлөмдөрү жана башка маалымат боюнча операторуңузга кайрылыңыз.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="8648609693875720408"></string>
- <string name="emergency_address_title" msgid="5779915349686787024">"Өзгөчө кырдаалда кайрыла турган дарек"</string>
+ <string name="emergency_address_title" msgid="5779915349686787024">"Кырсыктаганда кайрыла турган дарек"</string>
<string name="emergency_address_summary" msgid="478668478569851714">"WiFi аркылуу өзгөчө кырдаалдар кызматынын номерине чалганыңызда куткаруучуларга жайгашкан жериңиз катары көрсөтүлөт"</string>
<string name="private_dns_help_message" msgid="7633526525131196650">"Жеке DNS функциялары жөнүндө "<annotation id="url">"кененирээк маалымат"</annotation>" алыңыз"</string>
<string name="wifi_calling_pref_managed_by_carrier" msgid="5458050015417972072">"Жөндөө байланыш оператору тарабынан башкарылат"</string>
@@ -1167,7 +1170,7 @@
<string name="accessibility_personal_account_title" msgid="7251761883688839354">"Жеке аккаунт - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
<string name="search_settings" msgid="5809250790214921377">"Издөө"</string>
<string name="display_settings" msgid="1045535829232307190">"Экран"</string>
- <string name="accelerometer_title" msgid="2427487734964971453">"Экранды авто-буруу"</string>
+ <string name="accelerometer_title" msgid="2427487734964971453">"Экранды авто буруу"</string>
<string name="color_mode_title" msgid="8164858320869449142">"Түстөр"</string>
<string name="color_mode_option_natural" msgid="1292837781836645320">"Табигый"</string>
<string name="color_mode_option_boosted" msgid="453557938434778933">"Күчөтүлгөн"</string>
@@ -1200,13 +1203,13 @@
<string name="auto_brightness_off_summary" msgid="6162650416289359104">"Учурдагы жарыкка ыңгайлаштырылбасын"</string>
<string name="auto_brightness_very_high_summary" msgid="7202032980509583918">"Батарея тез отуруп калат"</string>
<string name="auto_brightness_disclaimer" msgid="5416696351199148809">"Жарык деңгээли учурдагы жарыкка карап өзгөрөт. Зарылчылыкка жараша аны убактылуу өзгөртсөңүз болот."</string>
- <string name="auto_brightness_description" msgid="8209140379089535411">"Экрандын жарыктыгы жүргөн жериңизге жана аткарган ишиңизге жараша автоматтык түрдө өзгөрөт. Сыдырманы колуңуз менен сыдырып, ыңгайлаштырылуучу жарыкты өзүңүз каалагандай жөндөп алыңыз."</string>
+ <string name="auto_brightness_description" msgid="8209140379089535411">"Экрандын жарыктыгы жүргөн жериңизге жана аткарган ишиңизге жараша автоматтык түрдө өзгөрөт. Сыдырманы колуңуз менен сыдырып, жарыкты өзүңүз каалагандай ыңгайлаштырып алыңыз."</string>
<string name="display_white_balance_title" msgid="5747260735311935143">"Экрандын ак балансы"</string>
<string name="adaptive_sleep_title" msgid="3237620948260957018">"Screen aware"</string>
<string name="adaptive_sleep_summary_on" msgid="6670369739228487082">"Күйүк / Экранды карап турганда, ал өчүп калбайт"</string>
<string name="adaptive_sleep_summary_off" msgid="2891586225954973431">"Өчүк"</string>
<string name="adaptive_sleep_description" msgid="812673735459170009">"Экранды карап турганда, ал өчүп калбайт."</string>
- <string name="adaptive_sleep_privacy" msgid="5706802215479902623">"Screen aware экранды кимдир-бирөө карап жатканын текшерүү үчүн маңдайкы камераны колдонот. Ал түзмөктө иштеп, сүрөттөрдү эч качан сактап калбайт жана Google\'га жөнөтпөйт."</string>
+ <string name="adaptive_sleep_privacy" msgid="5706802215479902623">"Screen aware экранды кимдир-бирөө карап жатканын текшерүү үчүн, маңдайкы камераны колдонот. Ал түзмөктө иштеп, сүрөттөрдү эч качан сактап калбайт жана Google\'га жөнөтпөйт."</string>
<string name="night_display_title" msgid="1305002424893349814">"Түнкү режим"</string>
<string name="night_display_text" msgid="5330502493684652527">"Түнкү режимде экран сары түскө боёлот. Ушуну менен күңүрт жерде көзүңүзгө күч келбей, тезирээк уктап каласыз."</string>
<string name="night_display_auto_mode_title" msgid="8493573087102481588">"Ырааттама"</string>
@@ -1226,7 +1229,7 @@
<string name="night_display_summary_on_auto_mode_custom" msgid="2200631112239399233">"<xliff:g id="ID_1">%1$s</xliff:g> болгондо автоматтык түрдө өчөт"</string>
<string name="night_display_summary_on_auto_mode_twilight" msgid="8386769601369289561">"Күн чыкканда автоматтык түрдө өчөт"</string>
<string name="night_display_activation_on_manual" msgid="8379477527072027346">"Күйгүзүү"</string>
- <string name="night_display_activation_off_manual" msgid="7776082151269794201">"Азыр өчүрүлсүн"</string>
+ <string name="night_display_activation_off_manual" msgid="7776082151269794201">"Өчүрүү"</string>
<string name="night_display_activation_on_twilight" msgid="5610294051700287249">"Күн чыкканга чейин күйгүзүлсүн"</string>
<string name="night_display_activation_off_twilight" msgid="6846727701281556110">"Күн батканга чейин өчүрүлсүн"</string>
<string name="night_display_activation_on_custom" msgid="4761140206778957611">"<xliff:g id="ID_1">%1$s</xliff:g> чейин күйгүзүлсүн"</string>
@@ -1239,7 +1242,7 @@
<string name="style_and_wallpaper_settings_title" msgid="8898539141152705754">"Стилдер жана тушкагаздар"</string>
<string name="wallpaper_settings_summary_default" msgid="2626880032742784599">"Демейки"</string>
<string name="wallpaper_settings_summary_custom" msgid="8950504698015331202">"Өзгөчө"</string>
- <string name="wallpaper_suggestion_title" msgid="3012130414886743201">"Тушкагазды өзгөртүп алыңыз"</string>
+ <string name="wallpaper_suggestion_title" msgid="3012130414886743201">"Тушкагазды өзгөртө аласыз"</string>
<string name="wallpaper_suggestion_summary" msgid="4247262938988875842">"Экраныңызды жекелештириңиз"</string>
<string name="wallpaper_settings_fragment_title" msgid="1503701065297188901">"Тушкагаз тандоо"</string>
<string name="screensaver_settings_title" msgid="7720091234133721021">"Көшөгө"</string>
@@ -1263,7 +1266,7 @@
<string name="doze_always_on_title" msgid="8555184965031789941">"Ар дайым күйүк"</string>
<string name="doze_always_on_summary" msgid="7654436900436328950">"Убакыт, билдирмелер сүрөтчөлөрү жана башка маалымат көрүнүп турат (батарея тез отуруп калат)."</string>
<string name="title_font_size" msgid="5021464556860010851">"Арип өлчөмү"</string>
- <string name="short_summary_font_size" msgid="4141077908728522946">"Текстти чоңойтуп же кичирейтиңиз"</string>
+ <string name="short_summary_font_size" msgid="4141077908728522946">"Текстти чоңойтуп же кичирейтесиз"</string>
<string name="sim_lock_settings" msgid="1986924650622642189">"SIM картаны кулпулоо жөндөөлөрү"</string>
<string name="sim_lock_settings_category" msgid="1126759898277681516">"SIM карта кулпусу"</string>
<string name="sim_lock_settings_summary_off" msgid="348656447968142307">"Өчүк"</string>
@@ -1286,7 +1289,7 @@
<string name="sim_pins_dont_match" msgid="1076283313667637902">"PINдер туура келген жок"</string>
<string name="sim_change_failed" msgid="8874765697694275459">"PIN\'ди алмаштыруу мүмкүн эмес.\nPIN туура эмес өңдөнөт."</string>
<string name="sim_change_succeeded" msgid="8802418023120614533">"SIM картанын PIN коду алмаштырылды"</string>
- <string name="sim_lock_failed" msgid="7949781515066772755">"SIM-картаны бөгөттөн чыгаруу мүмкүн эмес.\nPIN туура эмес өңдөнөт."</string>
+ <string name="sim_lock_failed" msgid="7949781515066772755">"SIM картаны бөгөттөн чыгаруу мүмкүн эмес.\nPIN туура эмес өңдөнөт."</string>
<string name="sim_pin_disable_failed" msgid="6780973900290546751">"PIN код өчүрүлбөй жатат."</string>
<string name="sim_pin_enable_failed" msgid="804897359922298792">"PIN код иштетилбей жатат."</string>
<string name="sim_enter_ok" msgid="5103626479976731229">"Жарайт"</string>
@@ -1307,7 +1310,7 @@
<string name="system_update_settings_list_item_title" msgid="1907497454722790033">"Тутум жаңыртуулары"</string>
<string name="system_update_settings_list_item_summary" msgid="3497456690691907873"></string>
<string name="firmware_version" msgid="547095584029938749">"Android версиясы"</string>
- <string name="security_patch" msgid="483709031051932208">"Коопсуздук тутуму качан жаңырды"</string>
+ <string name="security_patch" msgid="483709031051932208">"Коопсуздук тутуму качан жаңырган"</string>
<string name="model_info" msgid="1729765474260797594">"Үлгүсү"</string>
<string name="model_summary" msgid="8781425868254352168">"Үлгүсү: %1$s"</string>
<string name="hardware_info" msgid="174270144950621815">"Түзмөктүн үлгүсү/аппараттык камсыздалышы"</string>
@@ -1333,8 +1336,8 @@
<string name="status_number" product="default" msgid="6404365757066475145">"Телефон номери"</string>
<string name="status_number_sim_slot" product="tablet" msgid="4518232285651165459">"MDN (SIM-карта оюкчасы %1$d)"</string>
<string name="status_number_sim_slot" product="default" msgid="3660851494421332328">"Телефон номери (SIM-карта оюкчасы %1$d)"</string>
- <string name="status_number_sim_status" product="tablet" msgid="8069693515860290952">"SIM-картадагы MDN"</string>
- <string name="status_number_sim_status" product="default" msgid="6602562692270457610">"SIM-картадагы телефон номери"</string>
+ <string name="status_number_sim_status" product="tablet" msgid="8069693515860290952">"SIM картадагы MDN"</string>
+ <string name="status_number_sim_status" product="default" msgid="6602562692270457610">"SIM картадагы телефон номери"</string>
<string name="status_min_number" msgid="8346889546673707777">"MIN"</string>
<string name="status_msid_number" msgid="7808175928664357661">"MSID"</string>
<string name="status_prl_version" msgid="5634561205739199042">"PRL версиясы"</string>
@@ -1525,7 +1528,7 @@
<string name="battery_level_title" msgid="5207775387973771646">"Батарея деңгээли"</string>
<string name="apn_settings" msgid="8130776653826271664">"APN\'дер"</string>
<string name="apn_edit" msgid="4350571070853305357">"Байланыш түйүнүн өзгөртүү"</string>
- <string name="apn_not_set" msgid="5344235604466825691">"Аныкталган эмес"</string>
+ <string name="apn_not_set" msgid="5344235604466825691">"Коюлган эмес"</string>
<string name="apn_name" msgid="8431432886706852226">"Аталышы"</string>
<string name="apn_apn" msgid="190519449579357696">"APN"</string>
<string name="apn_http_proxy" msgid="8816906767987944465">"Прокси"</string>
@@ -1562,26 +1565,26 @@
<string name="error_mcc_not3" msgid="1333037488064427164">"MCC талаасы 3 орундуу болууга тийиш."</string>
<string name="error_mnc_not23" msgid="6738398924368729180">"MNC талаасы 2 же 3 орундуу болууга тийиш."</string>
<string name="error_adding_apn_type" msgid="671634520340569678">"Байланыш оператору %s түрүндөгү APN\'дерди кошууга уруксат бербейт."</string>
- <string name="restore_default_apn" msgid="7195266404077471007">"Абалкы APN тууралоолорун кайтарууда."</string>
+ <string name="restore_default_apn" msgid="7195266404077471007">"Демейки APN тууралоолорун кайтарууда."</string>
<string name="menu_restore" msgid="3799288817317293115">"Баштапкы абалга келтирүү"</string>
- <string name="restore_default_apn_completed" msgid="5671734152740058937">"Абалкы APN тууралоолорун кайтаруу аяктады."</string>
+ <string name="restore_default_apn_completed" msgid="5671734152740058937">"Демейки APN жөндөөлөрү калыбына келди."</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"Кайра коюу опциялары"</string>
<string name="reset_dashboard_summary" msgid="8778383341461126642">"Тармактын, колдонмолордун же түзмөктүн жөндөөлөрүн баштапкы абалга келтирсеңиз болот"</string>
<string name="reset_network_title" msgid="8944059136930806211">"Wi-Fi\'ды, мобилдик түзмөктү жана Bluetooth\'ду баштапкы абалга келтирүү"</string>
<string name="reset_network_desc" msgid="4982633363916261109">"Ушуну менен тармактын бардык жөндөөлөрү баштапкы абалга келет. Тактап айтканда: \n\n"<li>"Wi‑Fi"</li>\n<li>"Мобилдик Интернет"</li>\n<li>"Bluetooth"</li></string>
- <string name="reset_esim_title" msgid="7630781767040831893">"Жүктөп алган SIM’дерди тазалоо"</string>
- <string name="reset_esim_desc" msgid="433226911566802">"Ордуна башка SIM карта жүктөп алуу үчүн, операторуңуз менен байланышыңыз. Ушуну менен байланыш операторунун тарифтик пландары жокко чыгарылбайт."</string>
+ <string name="reset_esim_title" msgid="7630781767040831893">"Жүктөп алган SIM’дерди өчүрүү"</string>
+ <string name="reset_esim_desc" msgid="433226911566802">"Ордуна башка SIM карта жүктөп алуу үчүн, операторуңуз менен байланышыңыз. Тарифтик пландарыңыз өзгөрбөйт."</string>
<string name="reset_network_button_text" msgid="4293271046867912819">"Жөндөөлөрдү кайра коюу"</string>
<string name="reset_network_final_desc" msgid="2463817067048751373">"Тармак жөндөөлөрүнүн баары баштапкы абалга келтирилсинби? Бул аракетти кайра кайтара албайсыз."</string>
- <string name="reset_network_final_desc_esim" msgid="4676436976372555750">"Тармак жөндөөлөрүнүн баары баштапкы абалга келтирилип, жүктөлүп алынган SIM карталар тазалансынбы? Бул аракетти артка кайтара албайсыз."</string>
+ <string name="reset_network_final_desc_esim" msgid="4676436976372555750">"Тармак жөндөөлөрүнүн баарын баштапкы абалга келтирип, жүктөлүп алынган SIM карталарды өчүрөсүзбү? Бул аракетти артка кайтара албайсыз."</string>
<string name="reset_network_final_button_text" msgid="345255333127794393">"Жөндөөлөрдү кайра коюу"</string>
<string name="reset_network_confirm_title" msgid="2432145031070536008">"Кайра коесузбу?"</string>
<string name="network_reset_not_available" msgid="6146655531868016281">"Бул колдонуучу тармакты баштапкы абалына келтире албайт"</string>
<string name="reset_network_complete_toast" msgid="128225929536005495">"Тармак жөндөөлөрү баштапкы абалга келди"</string>
<string name="reset_esim_error_title" msgid="4728931209471875632">"SIM карталар тазаланбай жатат"</string>
<string name="reset_esim_error_msg" msgid="4716366079119742235">"Жүктөлүп алынган SIM карталарды катадан улам тазалоого болбойт.\n\nТүзмөгүңүздү өчүрүп күйгүзүп, кайталап көрүңүз."</string>
- <string name="master_clear_title" msgid="1560712943955904673">"Бардык дайындарды тазалоо (баштапкы абалга келтирүү)"</string>
- <string name="master_clear_short_title" msgid="919098101581335101">"Бардык дайындарды тазалоо"</string>
+ <string name="master_clear_title" msgid="1560712943955904673">"Бардык дайын-даректерди өчүрүү (баштапкы абалга келтирүү)"</string>
+ <string name="master_clear_short_title" msgid="919098101581335101">"Бардык дайын-даректерди өчүрүү"</string>
<string name="master_clear_desc" product="tablet" msgid="3432373610755760899">"Планшетиңиздин "<b>"ички сактагычындагы"</b>" бардык маалымат өчүрүлөт, тактап айтканда:\n\n"<li>"Google аккаунтуңуз"</li>\n<li>"Тутумдун жана колдонмолордун жөндөөлөрү жана дайындары"</li>\n<li>"Жүктөлүп алынган колдонмолор"</li></string>
<string name="master_clear_desc" product="default" msgid="8765543541962866697">"Телефонуңуздун "<b>"ички сактагычындагы"</b>" бардык маалымат өчүрүлөт, тактап айтканда:\n\n"<li>"Google аккаунтуңуз"</li>\n<li>"Тутумдун жана колдонмолордун жөндөөлөрү жана дайындары"</li>\n<li>"Жүктөлүп алынган колдонмолор"</li></string>
<string name="master_clear_accounts" product="default" msgid="3432884235445405376">\n\n"Ушул түзмөктөгү аккаунттар:\n"</string>
@@ -1610,16 +1613,16 @@
<string name="tether_settings_title_usb" msgid="4265582654602420357">"USB модем"</string>
<string name="tether_settings_title_wifi" msgid="2060965130234484613">"Wi-Fi байланыш түйүнү"</string>
<string name="tether_settings_title_bluetooth" msgid="1999590158102569959">"Bluetooth модем"</string>
- <string name="tether_settings_title_usb_bluetooth" msgid="1159128764162788159">"Жалгаштыруу"</string>
+ <string name="tether_settings_title_usb_bluetooth" msgid="1159128764162788159">"Модем режими"</string>
<string name="tether_settings_title_all" msgid="6935843543433954181">"Байланыш түйүнү жана модем"</string>
<string name="tether_settings_summary_hotspot_on_tether_on" msgid="1289593649526514499">"Байланыш түйүнү күйүк, модем режими"</string>
<string name="tether_settings_summary_hotspot_on_tether_off" msgid="8010689354668285422">"Байланыш түйүнү күйүк"</string>
- <string name="tether_settings_summary_hotspot_off_tether_on" msgid="1349909238672649877">"Тетеринг"</string>
+ <string name="tether_settings_summary_hotspot_off_tether_on" msgid="1349909238672649877">"Модем режими"</string>
<string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"Трафикти үнөмдөө режиминде түзмөктү модем же байланыш түйүнү катары колдонууга болбойт"</string>
<string name="usb_title" msgid="7480927657535578688">"USB"</string>
<string name="usb_tethering_button_text" msgid="6242228383142012332">"USB модем"</string>
<string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Телефондун Интернетин USB аркылуу бөлүшөсүз"</string>
- <string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"Планшеттин Интернетин USB аркылуу бөлүшүү"</string>
+ <string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"Планшеттин Интернетин USB аркылуу бөлүшөсүз"</string>
<string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"Bluetooth модем"</string>
<string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"Планшеттин Интернетин Bluetooth аркылуу бөлүшүү"</string>
<string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Телефондун Интернетин Bluetooth аркылуу бөлүшөсүз"</string>
@@ -1634,17 +1637,17 @@
<string name="sms_change_default_dialog_title" msgid="6301260161969667578">"SMS колдонмону алмаштырасызбы?"</string>
<string name="sms_change_default_dialog_text" msgid="8275088077930942680">"SMS билдирүүлөрү менен жазышуу үчүн <xliff:g id="CURRENT_APP">%2$s</xliff:g> ордуна <xliff:g id="NEW_APP">%1$s</xliff:g> колдоносузбу?"</string>
<string name="sms_change_default_no_previous_dialog_text" msgid="4680224695080527907">"<xliff:g id="NEW_APP">%s</xliff:g> SMS колдонмосу болсунбу?"</string>
- <string name="network_scorer_picker_title" msgid="1691073966560952916">"Тармактар рейтингинин автору"</string>
+ <string name="network_scorer_picker_title" msgid="1691073966560952916">"Тармактар рейтингинин булагы"</string>
<string name="network_scorer_picker_none_preference" msgid="6448280557733231737">"Жок"</string>
- <string name="network_scorer_change_active_dialog_title" msgid="4274159562371475090">"Wi‑Fi жардамчысы өзгөрүлсүнбү?"</string>
+ <string name="network_scorer_change_active_dialog_title" msgid="4274159562371475090">"Wi‑Fi жардамчысын өзгөртөсүзбү?"</string>
<string name="network_scorer_change_active_dialog_text" msgid="4264089809189760730">"Тармактык туташууларыңызды башкаруу үчүн, <xliff:g id="CURRENT_APP">%2$s</xliff:g> ордуна <xliff:g id="NEW_APP">%1$s</xliff:g> колдоносузбу?"</string>
<string name="network_scorer_change_active_no_previous_dialog_text" msgid="6394483538843474495">"Тармактык туташууларыңызды башкаруу үчүн <xliff:g id="NEW_APP">%s</xliff:g> колдоносузбу?"</string>
<string name="mobile_unknown_sim_operator" msgid="872589370085135817">"Белгисиз SIM оператору"</string>
<string name="mobile_no_provisioning_url" msgid="3216517414902166131">"<xliff:g id="OPERATOR">%1$s</xliff:g> операторунда белгилүү камсыздоочу вебсайт жок"</string>
- <string name="mobile_insert_sim_card" msgid="7594550403454243732">"SIM-картаны салып, кайра иштетиңиз"</string>
+ <string name="mobile_insert_sim_card" msgid="7594550403454243732">"SIM картаны салып, кайра иштетиңиз"</string>
<string name="mobile_connect_to_internet" msgid="6031886097365170913">"Интернетке кошулуңуз"</string>
<string name="location_title" msgid="8664674161765477168">"Жайгашкан жерим"</string>
- <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"Жумуш профилинин жайгашкн жери"</string>
+ <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"Жумуш профилинин жери"</string>
<string name="location_app_level_permissions" msgid="1298041503927632960">"Колдонмонун уруксаты"</string>
<string name="location_app_permission_summary_location_off" msgid="541372845344796336">"Жайгашкан жерди аныктоо өчүрүлгөн"</string>
<plurals name="location_app_permission_summary_location_on" formatted="false" msgid="7904821382328758218">
@@ -1653,11 +1656,11 @@
</plurals>
<string name="location_category_recent_location_access" msgid="286059523360285026">"Гео маалымат акыркы жолу качан колдонулду"</string>
<string name="location_recent_location_access_view_details" msgid="2051602261436245905">"Кеңири маалымат"</string>
- <string name="location_no_recent_apps" msgid="77502059586413278">"Акыркы мезгилде жайгашууну сураган колдонмолор болгон жок"</string>
+ <string name="location_no_recent_apps" msgid="77502059586413278">"Жакында жайгашкан жерди сураган колдонмолор болгон жок"</string>
<string name="location_no_recent_accesses" msgid="6289916310397279890">"Жакында жайгашкан жерди аныктоо кызматына бир да колдонмо кирген жок"</string>
<string name="location_high_battery_use" msgid="7177199869979522663">"Батарейди көп колдонуу"</string>
<string name="location_low_battery_use" msgid="5030448574501435888">"Батареянын кубаты үнөмдөлүүдө"</string>
- <string name="location_scanning_screen_title" msgid="7663329319689413454">"Wi‑Fi жана Bluetooth менен издөө"</string>
+ <string name="location_scanning_screen_title" msgid="7663329319689413454">"Wi‑Fi менен Bluetooth\'ду издөө"</string>
<string name="location_scanning_wifi_always_scanning_title" msgid="6750542206763112172">"Wi‑Fi издөө"</string>
<string name="location_scanning_wifi_always_scanning_description" msgid="4956048135941851712">"Wi-Fi өчүп турса да, колдонмолор менен кызматтарга Wi-Fi тармактарын издегенге уруксат бересиз. Бул параметр менен жайгашкан жерди тагыраак аныктоого болот."</string>
<string name="location_scanning_bluetooth_always_scanning_title" msgid="196241746742607453">"Bluetooth түзмөктөрүн издөө"</string>
@@ -1684,7 +1687,7 @@
<string name="about_settings_summary" msgid="4506081667462281647">"Юридикалык маалыматты, абалын, программа версиясын көрүү"</string>
<string name="legal_information" msgid="2374267257615182139">"Юридикалык маалымат"</string>
<string name="contributors_title" msgid="6800028420806884340">"Салым кошуучулар"</string>
- <string name="manual" msgid="5431859421432581357">"Нускама"</string>
+ <string name="manual" msgid="5431859421432581357">"Кол менен"</string>
<string name="regulatory_labels" msgid="380968489247381025">"Тастыктама энбелгилери"</string>
<string name="safety_and_regulatory_info" msgid="7113766428000920132">"Коопсуздук жана стандарттарга жооп берүү"</string>
<string name="copyright_title" msgid="3847703367689932190">"Автордук укук"</string>
@@ -1693,7 +1696,7 @@
<string name="webview_license_title" msgid="8244960025549725051">"WebView тутум уруксаттамасы"</string>
<string name="wallpaper_attributions" msgid="2941987966332943253">"Тушкагаздар"</string>
<string name="wallpaper_attributions_values" msgid="4461979853894606323">"Спутник сүрөттөрү:\n©2014 CNES/Astrium, DigitalGlobe, Bluesky"</string>
- <string name="settings_manual_activity_title" msgid="7599911755054286789">"Нускама"</string>
+ <string name="settings_manual_activity_title" msgid="7599911755054286789">"Кол менен"</string>
<string name="settings_manual_activity_unavailable" msgid="4872502775018655343">"Нускаманы жүктөөдө көйгөй чыкты."</string>
<string name="settings_license_activity_title" msgid="1099045216283677608">"Үчүнчү тараптын уруксаттамалары"</string>
<string name="settings_license_activity_unavailable" msgid="1039356188263821287">"Уруксаттамалар жүктөлүп жатканда көйгөй келип чыкты."</string>
@@ -1705,17 +1708,17 @@
<string name="confirm_device_credential_use_alternate_method" msgid="1279869272895739941">"Башка ыкманы колдонуу"</string>
<string name="lockpassword_choose_your_screen_lock_header" msgid="6283518876031424798">"Экран кулпусун коюу"</string>
<string name="lockpassword_choose_your_password_message" msgid="2838273977481046536">"Коопсуздук үчүн сырсөз коюп алыңыз"</string>
- <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="4921343500484160894">"Манжа изин колдонуу үчүн сырсөздү коюңуз"</string>
- <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="314870151462139417">"Манжа изин колдонуу үчүн графикалык ачкычты коюңуз"</string>
+ <string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="4921343500484160894">"Сырсөздү коюңуз"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="314870151462139417">"Графикалык ачкычты коюңуз"</string>
<string name="lockpassword_choose_your_pin_message" msgid="8942598950627277885">"Коопсуздук үчүн PIN код коюп алыңыз"</string>
- <string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1102927520952116303">"Манжа изин колдонуу үчүн PIN кодду коюңуз"</string>
+ <string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1102927520952116303">"PIN код коюңуз"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="1503075455752279687">"Коопсуздук үчүн графикалык ачкыч коюп алыңыз"</string>
<string name="lockpassword_confirm_your_password_header" msgid="9055242184126838887">"Сырсөзүңүздү кайра киргизиңиз"</string>
<string name="lockpassword_confirm_your_pattern_header" msgid="7137526922696316545">"Графикалык ачкычыңызды ырастаңыз"</string>
<string name="lockpassword_confirm_your_pin_header" msgid="4335593948303036343">"PIN кодуңузду кайра киргизиңиз"</string>
<string name="lockpassword_confirm_passwords_dont_match" msgid="1783767008133345784">"Сырсөздөр дал келген жок"</string>
<string name="lockpassword_confirm_pins_dont_match" msgid="5444357293637748942">"PIN коддор дал келген жок"</string>
- <string name="lockpassword_draw_your_pattern_again_header" msgid="9017394036814402348">"Графикалык ачкычты кайрадан тартыңыз"</string>
+ <string name="lockpassword_draw_your_pattern_again_header" msgid="9017394036814402348">"Графикалык ачкычты кайра тартыңыз"</string>
<string name="lockpassword_choose_lock_generic_header" msgid="4418423132980560119">"Кулпуну ачуу ыкмасын тандоо"</string>
<string name="lockpassword_password_set_toast" msgid="601928982984489868">"Сырсөз коюлду"</string>
<string name="lockpassword_pin_set_toast" msgid="172594825722240059">"PIN код коюлду"</string>
@@ -1755,7 +1758,7 @@
<string name="lockpattern_need_to_confirm" msgid="4079482507985867389">"Ырастоо үчүн графикалык ачкычты дагы бир жолу тартыңыз"</string>
<string name="lockpattern_pattern_confirmed_header" msgid="5603156929428721407">"Жаңы графикалык ачкычыңыз"</string>
<string name="lockpattern_confirm_button_text" msgid="7059311304112902598">"Ырастоо"</string>
- <string name="lockpattern_restart_button_text" msgid="4322968353922529868">"Кайра тартуу"</string>
+ <string name="lockpattern_restart_button_text" msgid="4322968353922529868">"Кайра тартам"</string>
<string name="lockpattern_retry_button_text" msgid="5473976578241534298">"Тазалоо"</string>
<string name="lockpattern_continue_button_text" msgid="3328913552656376892">"Улантуу"</string>
<string name="lockpattern_settings_title" msgid="5152005866870766842">"Кулпуну ачуу үлгүсү"</string>
@@ -1812,7 +1815,7 @@
<string name="controls_label" msgid="5609285071259457221">"Көзөмөлдөр"</string>
<string name="force_stop" msgid="9213858124674772386">"Мажбурлап токтотуу"</string>
<string name="total_size_label" msgid="3929917501176594692">"Жалпы"</string>
- <string name="application_size_label" msgid="175357855490253032">"Колдонмонун өлчөмү"</string>
+ <string name="application_size_label" msgid="175357855490253032">"Колдонмонун көлөмү"</string>
<string name="external_code_size_label" msgid="3434421216268309411">"USB сактагычтын колдонмосу"</string>
<string name="data_size_label" msgid="7790201846922671662">"Колдонуучунун дайындары"</string>
<string name="external_data_size_label" product="nosdcard" msgid="8004991551882573479">"USB сактагычтын дайындары"</string>
@@ -1840,7 +1843,7 @@
<string name="show_background_processes" msgid="88012264528093617">"Кэштелген процсстрд көрст"</string>
<string name="default_emergency_app" msgid="286530070173495823">"Өзгөчө кырдаал колдонмосу"</string>
<string name="reset_app_preferences" msgid="1426500030595212077">"Колдонмонун жөндөөлөрүн кайра коюу"</string>
- <string name="reset_app_preferences_title" msgid="792909865493673598">"Колдонмо кайра баштан жөндөлсүнбү?"</string>
+ <string name="reset_app_preferences_title" msgid="792909865493673598">"Колдонмону кайра баштан жөндөйсүзбү?"</string>
<string name="reset_app_preferences_desc" msgid="7935273005301096031">"Ушуну менен төмөнкү жөндөөлөр жоюлат:\n\n "<li>"Өчүрүлгөн колдонмолор"</li>\n" "<li>"Өчүрүлгөн колдонмолордун билдирмелери"</li>\n" "<li>"Демейки колдонмолор"</li>\n" "<li>"Фондук дайындарга коюлган чектөөлөр"</li>\n" "<li>"Бардык уруксат чектөөлөрү"</li>\n\n"Колдонмолордун дайындары жоголбойт."</string>
<string name="reset_app_preferences_button" msgid="2041894727477934656">"Баштапкы абалга келтирүү"</string>
<string name="manage_space_text" msgid="6166469422303124302">"Бош орунду башкаруу"</string>
@@ -1999,7 +2002,7 @@
<string name="user_dict_settings_edit_dialog_title" msgid="6492621665762797309">"Сөздү түзөтүү"</string>
<string name="user_dict_settings_context_menu_edit_title" msgid="4577283176672181497">"Түзөтүү"</string>
<string name="user_dict_settings_context_menu_delete_title" msgid="670470172230144069">"Жок кылуу"</string>
- <string name="user_dict_settings_empty_text" msgid="2774939221998982609">"Колдонуучу сөздүгүңүздө бир дагы сөз жок. Сөз кошуу үчүн кошуу (+) баскычын таптап коюңуз."</string>
+ <string name="user_dict_settings_empty_text" msgid="2774939221998982609">"Сөздүгүңүздө бир дагы сөз жок. Сөз кошуу үчүн кошуу (+) баскычын таптап коюңуз."</string>
<string name="user_dict_settings_all_languages" msgid="8839702015353418176">"Бардык тилдер үчүн"</string>
<string name="user_dict_settings_more_languages" msgid="8345984308635521364">"Дагы тилдер…"</string>
<string name="testing" msgid="4255916838792186365">"Сыноо"</string>
@@ -2036,7 +2039,7 @@
<string name="accessibility_settings_summary" msgid="5742379519336396561">"Экрандагыны окугучтар, экран, башкаруу элементтери"</string>
<string name="vision_settings_title" msgid="7315352351051423944">"Атайн мүмкүнчлктрдн жөндлр"</string>
<string name="vision_settings_description" msgid="3476589459009287332">"Түзмөктү өзүңүзгө карап ыңгайлаштырып алыңыз. Бул атайын мүмкүнчүлүктөрдүн параметрлерин кийинчерээк өзгөртсөңүз болот."</string>
- <string name="vision_settings_suggestion_title" msgid="7268661419110951128">"Арип өлчөмүн өзгөртсөңүз болот"</string>
+ <string name="vision_settings_suggestion_title" msgid="7268661419110951128">"Арип өлчөмүн өзгөртө аласыз"</string>
<string name="screen_reader_category_title" msgid="6300714148519645544">"Экрандагыны окугучтар"</string>
<string name="audio_and_captions_category_title" msgid="6140472938769619212">"Аудио жана текстти окуп берүү"</string>
<string name="display_category_title" msgid="545168481672250195">"Экран"</string>
@@ -2046,13 +2049,13 @@
<string name="feature_flags_dashboard_title" msgid="3153034144122754381">"Функцияларды белгилөө"</string>
<string name="talkback_title" msgid="3717960404234260050">"Talkback"</string>
<string name="talkback_summary" msgid="6602857105831641574">"Экрандагы нерсени окуп берүүчү курал көздөрү начар көргөн адамдарга арналган"</string>
- <string name="select_to_speak_summary" msgid="7514180457557735421">"Экраныңыздагы элементтерди түзмөк окуп бериши үчүн аларды таптап коюңуз"</string>
+ <string name="select_to_speak_summary" msgid="7514180457557735421">"Экрандагы нерсени түзмөк окуп бериши үчүн, аны басып коесуз"</string>
<string name="accessibility_captioning_title" msgid="5878371993023439642">"Коштомо жазуулар"</string>
<string name="accessibility_screen_magnification_title" msgid="7250949681883917360">"Чоңойтуу"</string>
<string name="accessibility_screen_magnification_gestures_title" msgid="9199287875401817974">"Үч жолу таптап чоңойтуу"</string>
<string name="accessibility_screen_magnification_navbar_title" msgid="400655612610761242">"Баскыч менен чоңойтуу"</string>
<string name="accessibility_screen_magnification_state_navbar_gesture" msgid="1863831350878995600">"Баскыч менен жана үч жолу таптоо аркылуу чоңойтуу"</string>
- <string name="accessibility_preference_magnification_summary" msgid="753307741814376312">"Экранды чоңойтуу"</string>
+ <string name="accessibility_preference_magnification_summary" msgid="753307741814376312">"Экран чоңоет"</string>
<string name="accessibility_screen_magnification_short_summary" msgid="5698545174944494486">"Өлчөмүн өзгөртүү үчүн 3 жолу таптаңыз"</string>
<string name="accessibility_screen_magnification_navbar_short_summary" msgid="5418767043532322397">"Чоңойтуп/кичирейтүү үчүн баскычты басыңыз"</string>
<string name="accessibility_screen_magnification_summary" msgid="3363006902079431772"><b>"Чоңойтуу үчүн"</b>" экранды бир манжаңыз менен 3 жолу бат-бат таптаңыз.\n"<ul><li>"Эки манжаңыз менен сыдырып карасаңыз болот."</li>\n<li>"Масштабын тууралоо үчүн эки манжаңызды бириктирип жана ажыратыңыз."</li></ul>\n\n<b>"Ал эми убактылуу чоңойтуу үчүн"</b>" экранды 3 жолу бат-бат таптап, үчүнчүсүндө манжаңызды басып туруңуз.\n"<ul><li>"Көрүнүштүн экранга батпаган жерлерин ары-бери сүйрөп карасаңыз болот."</li>\n<li>"Кичирейтүү үчүн манжаңызды көтөрүп коюңуз."</li></ul>\n\n"Баскычтоптон же чабыттоо тилкесинен чоңойто албайсыз."</string>
@@ -2092,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Билдирменин дирилдөөсү"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Шыңгырдын дирилдөөсү"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Тийгенде дирилдейт"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Кызматты колдонуу"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Түсүн тууралоону иштетүү"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Коштомо жазууларды иштетүү"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Кызматты колдонуу"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Түстөрдү тууралоону колдонуу"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Коштомо жазууларды колдонуу"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Улантуу"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Угуу аппараттары"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Бир да угуу аппараты туташкан эмес"</string>
@@ -2171,7 +2174,7 @@
<string name="color_red" msgid="7426040122729897596">"Кызыл"</string>
<string name="color_green" msgid="3432648781089648971">"Жашыл"</string>
<string name="color_blue" msgid="4055855996393833996">"Көк"</string>
- <string name="color_cyan" msgid="7669317410901991453">"Кызгылт көк"</string>
+ <string name="color_cyan" msgid="7669317410901991453">"Көгүш"</string>
<string name="color_yellow" msgid="8847327436896180799">"Сары"</string>
<string name="color_magenta" msgid="721976999611563071">"Кочкул"</string>
<string name="enable_service_title" msgid="2746143093464928251">"<xliff:g id="SERVICE">%1$s</xliff:g> колдоносузбу?"</string>
@@ -2230,7 +2233,7 @@
<string name="power_usage_level_and_status" msgid="8873534076894160727">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g>"</string>
<string name="power_discharge_remaining" msgid="3461915627093471868">"<xliff:g id="REMAIN">%1$s</xliff:g> калды"</string>
<string name="power_charge_remaining" msgid="2730510256218879651">"<xliff:g id="UNTIL_CHARGED">%1$s</xliff:g> кубаттоо"</string>
- <string name="background_activity_title" msgid="7207836362312111483">"Фондо колдонууну чектөө"</string>
+ <string name="background_activity_title" msgid="7207836362312111483">"Фондо керектелишин чектөө"</string>
<string name="background_activity_summary" msgid="582372194738538145">"Колдонмо фондо аткарылсын"</string>
<string name="background_activity_summary_disabled" msgid="457944930942085876">"Колдонмону фондо иштетүүгө уруксат жок"</string>
<string name="background_activity_summary_whitelisted" msgid="4713321059375873828">"Фондо колдонуу чектелбейт"</string>
@@ -2260,7 +2263,7 @@
<string name="bluetooth_on_time" msgid="6400569492287292639">"Өз убагындагы Wi‑Fi"</string>
<string name="advanced_battery_title" msgid="5026866913848464170">"Батареянын колдонулушу"</string>
<string name="history_details_title" msgid="8608193822257799936">"Таржымалдын чоо-жайы"</string>
- <string name="battery_details_title" msgid="5358230551490703067">"Батарея колдонулушу"</string>
+ <string name="battery_details_title" msgid="5358230551490703067">"Батареянын керектелиши"</string>
<string name="details_subtitle" msgid="7279638828004951382">"Чоо-жайын колдонуу"</string>
<string name="controls_subtitle" msgid="6920199888882834620">"Кубат сарпталышын тууралоо"</string>
<string name="packages_subtitle" msgid="6506269487892204413">"Камтылган топтомдор"</string>
@@ -2274,14 +2277,14 @@
<string name="battery_tip_smart_battery_title" product="tablet" msgid="203494973250969040">"Планшетиңиздин батарея кубатынын мөөнөтүн узартыңыз"</string>
<string name="battery_tip_smart_battery_title" product="device" msgid="7419448992583346364">"Түзмөгүңүздүн батарея кубатынын мөөнөтүн узартыңыз"</string>
<string name="battery_tip_smart_battery_summary" msgid="5344821856478265778">"Battery Manager\'ди күйгүзүңүз"</string>
- <string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"Батареяны үнөмдөгүч режимин күйгүзүү"</string>
- <string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Батарея адаттагыдан эртерээк отуруп калышы мүмкүн"</string>
+ <string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"Батареяны үнөмдөгүчтү күйгүзүү"</string>
+ <string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Батарея эртерээк отуруп калышы мүмкүн"</string>
<string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"Батареяны үнөмдөгүч режими күйүк"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"Айрым кызматтардын функциялары чектелиши мүмкүн"</string>
<string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Телефон адаттагыдан көбүрөөк колдонулду"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"Планшет адаттагыдан көбүрөөк колдонулду"</string>
<string name="battery_tip_high_usage_title" product="device" msgid="8304138287288309490">"Түзмөк адаттагыдан көбүрөөк колдонулду"</string>
- <string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"Батарея адаттагыдан эртерээк отуруп калышы мүмкүн"</string>
+ <string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"Батарея эртерээк отуруп калышы мүмкүн"</string>
<string name="battery_tip_dialog_message" product="default" msgid="8453700079047810964">"Телефонуңуз адаттагыдан көбүрөөк колдонулду. Батареяңыз күтүлгөндөн эртерээк отуруп калышы мүмкүн.\n\nАкыркы толук кубаттоодон бери эң көп батарея сарптаган колдонмолор:"</string>
<string name="battery_tip_dialog_message" product="tablet" msgid="6489981050645444068">"Планшетиңиз адаттагыдан көбүрөөк колдонулду. Батареяңыз күтүлгөндөн эртерээк отуруп калышы мүмкүн.\n\nАкыркы толук кубаттоодон бери эң көп батарея сарптаган колдонмолор:"</string>
<string name="battery_tip_dialog_message" product="device" msgid="6348123094674390337">"Түзмөгүңүз адаттагыдан көбүрөөк колдонулду. Батареяңыз күтүлгөндөн эртерээк отуруп калышы мүмкүн.\n\nАкыркы толук кубаттоодон бери эң көп батарея сарптаган колдонмолор:"</string>
@@ -2295,8 +2298,8 @@
<item quantity="one">%1$s колдонмо жакында чектелди</item>
</plurals>
<plurals name="battery_tip_restrict_summary" formatted="false" msgid="984148373944071669">
- <item quantity="other">%2$d колдонмо батареяны фондо сарптайт</item>
- <item quantity="one">%1$s колдонмо батареяны фондо сарптайт</item>
+ <item quantity="other">%2$d батареяны бат отургузуп жатат</item>
+ <item quantity="one">%1$s батареяны бат отургузуп жатат</item>
</plurals>
<plurals name="battery_tip_restrict_handled_summary" formatted="false" msgid="469696766640020557">
<item quantity="other">Бул колдонмолор фондо иштебейт</item>
@@ -2311,12 +2314,12 @@
<string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"Батареяны үнөмдөө максатында, бул колдонмолордун фондо иштөөсүн токтотуп койсоңуз болот. Чектелген колдонмолор талаптагыдай иштебей, билдирмелери кечигүү менен көрсөтүлүшү мүмкүн.\n\nКолдонмолор:\n<xliff:g id="APP_LIST">%1$s</xliff:g>."</string>
<string name="battery_tip_restrict_app_dialog_ok" msgid="2573410775701913487">"Чектөө"</string>
<string name="battery_tip_unrestrict_app_dialog_title" msgid="812458516399125710">"Чектөөлөр өчүрүлсүнбү?"</string>
- <string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"Бул колдонмо батареяны фондо колдоно берет. Батареяңыз күтүлгөндөн эртерээк отуруп калышы мүмкүн."</string>
+ <string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"Бул колдонмо батареяны фондо керектей берет. Батареяңыз күтүлгөндөн эртерээк отуруп калышы мүмкүн."</string>
<string name="battery_tip_unrestrict_app_dialog_ok" msgid="9154938931448151479">"Алып салуу"</string>
<string name="battery_tip_unrestrict_app_dialog_cancel" msgid="7331148618292397166">"Жокко чыгаруу"</string>
- <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"Колдонмолоруңуз батареяны орточо деңгээлде колдонуп жатышат. Эгер алар батареяны өтө көп колдонушса, телефонуңуз ал боюнча чара көрүүнү сунуштайт.\n\nЭгер батареяңыз азайып баратса, каалаган убакта Батареяны үнөмдөгүч режимин күйгүзүп койсоңуз болот."</string>
- <string name="battery_tip_dialog_summary_message" product="tablet" msgid="1721081030632329647">"Колдонмолоруңуз батареяны орточо деңгээлде колдонуп жатышат. Эгер алар батареяны өтө көп колдонушса, планшетиңиз ал боюнча чара көрүүнү сунуштайт.\n\nЭгер батареяңыз азайып баратса, каалаган убакта Батареяны үнөмдөгүч режимин күйгүзүп койсоңуз болот."</string>
- <string name="battery_tip_dialog_summary_message" product="device" msgid="146872407040848465">"Колдонмолоруңуз батареяны орточо деңгээлде колдонуп жатышат. Эгер алар батареяны өтө көп колдонушса, түзмөгүңүз ал боюнча чара көрүүнү сунуштайт.\n\nЭгер батареяңыз азайып баратса, каалаган убакта Батареяны үнөмдөгүч режимин күйгүзүп койсоңуз болот."</string>
+ <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"Колдонмолоруңуз батареяны орточо деңгээлде керектеп жатышат. Эгер өтө көп керектеп жиберишсе, телефонуңуз ал боюнча чара көрүүнү сунуштайт.\n\nАл эми таптакыр калбай баратса, Батареяны үнөмдөгүчтү күйгүзүп койсоңуз болот."</string>
+ <string name="battery_tip_dialog_summary_message" product="tablet" msgid="1721081030632329647">"Колдонмолоруңуз батареяны орточо деңгээлде керектеп жатышат. Эгер өтө көп керектеп жиберишсе, планшетиңиз ал боюнча чара көрүүнү сунуштайт.\n\nАл эми таптакыр калбай баратса, Батареяны үнөмдөгүчтү күйгүзүп койсоңуз болот."</string>
+ <string name="battery_tip_dialog_summary_message" product="device" msgid="146872407040848465">"Колдонмолоруңуз батареяны орточо деңгээлде керектеп жатышат. Эгер өтө көп керектеп жиберишсе, түзмөгүңүз ал боюнча чара көрүүнү сунуштайт.\n\nАл эми таптакыр калбай баратса, Батареяны үнөмдөгүчтү күйгүзүп койсоңуз болот."</string>
<string name="smart_battery_manager_title" msgid="5744035036663849515">"Battery Manager"</string>
<string name="smart_battery_title" msgid="4919670408532804351">"Колдонмолорду автоматтык түрдө башкаруу"</string>
<string name="smart_battery_summary" msgid="640027046471198174">"Сейрек колдонулган колдонмолор чектелген режимде иштешет"</string>
@@ -2426,12 +2429,12 @@
<string name="battery_detail_since_full_charge" msgid="3814176986148084378">"Толук кубатталгандан бери канчасы колдонулду:"</string>
<string name="battery_last_full_charge" msgid="5624033030647170717">"Акыркы жолу толук кубатталды"</string>
<string name="battery_full_charge_last" msgid="4614554109170251301">"Толук кубатталгандан кийинки иштөө убакыты"</string>
- <string name="battery_footer_summary" msgid="4828444679643906943">"Батареяны пайдалануу убактысы болжол менен көрсөтүлүп, колдонулушуна жараша өзгөрүшү мүмкүн"</string>
- <string name="battery_detail_foreground" msgid="6616408559186553085">"Колдонулуп жатканда"</string>
+ <string name="battery_footer_summary" msgid="4828444679643906943">"Батареяны керектөө убактысы болжол менен көрсөтүлүп, түзмөктүн колдонулушуна жараша өзгөрүшү мүмкүн"</string>
+ <string name="battery_detail_foreground" msgid="6616408559186553085">"Активдүү режимде"</string>
<string name="battery_detail_background" msgid="7938146832943604280">"Фондук режимде"</string>
- <string name="battery_detail_power_usage" msgid="3606930232257489212">"Батарея колдонулушу"</string>
+ <string name="battery_detail_power_usage" msgid="3606930232257489212">"Батареянын керектелиши"</string>
<string name="battery_detail_info_title" msgid="4617514228447481336">"Толук кубатталгандан бери"</string>
- <string name="battery_detail_manage_title" msgid="745194290572617507">"Батареянын колдонулушун башкаруу"</string>
+ <string name="battery_detail_manage_title" msgid="745194290572617507">"Батареянын керектелишин башкаруу"</string>
<string name="advanced_battery_graph_subtext" msgid="3349760453669664057">"Калган убакыт түзмөктүн колдонулушуна жараша эсептелип, көрсөтүлүүдө."</string>
<string name="estimated_time_left" msgid="8849913193475011250">"Болжолдуу калган убакыт"</string>
<string name="estimated_charging_time_left" msgid="7597080379844486777">"Батарея толгонго чейин калган убакыт"</string>
@@ -2449,16 +2452,16 @@
<string name="battery_saver_auto_routine" msgid="886514412067906980">"Кубаттоо таржымалынын негизинде"</string>
<string name="battery_saver_auto_percentage" msgid="5791982309331921556">"Кубат деңгээлинин негизинде"</string>
<string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"Кубат деңгээли кубаттала турган убакытка чейин жетпей кала турган болгондо иштетилет"</string>
- <string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"<xliff:g id="PERCENT">%1$s</xliff:g> жеткенде, күйгүзүлөт"</string>
- <string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Ырааттама түзүү"</string>
+ <string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"<xliff:g id="PERCENT">%1$s</xliff:g> жеткенде автоматтык түрдө күйөт"</string>
+ <string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Пландаштыруу"</string>
<string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"Толук кубатталганда өчүрүү"</string>
- <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"Телефон <xliff:g id="PERCENT">%1$s</xliff:g> болгондо, батареяны үнөмдөгүч өчүрүлөт"</string>
- <string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"Планшет <xliff:g id="PERCENT">%1$s</xliff:g> болгондо, батареяны үнөмдөгүч өчүрүлөт"</string>
- <string name="battery_saver_sticky_description_new" product="device" msgid="5056520668081504111">"Түзмөк <xliff:g id="PERCENT">%1$s</xliff:g> болгондо, батареяны үнөмдөгүч өчүрүлөт"</string>
+ <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"Телефон <xliff:g id="PERCENT">%1$s</xliff:g> жеткенде, батареяны үнөмдөгүч өчүп калат"</string>
+ <string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"Планшет <xliff:g id="PERCENT">%1$s</xliff:g> жеткенде, батареяны үнөмдөгүч өчүп калат"</string>
+ <string name="battery_saver_sticky_description_new" product="device" msgid="5056520668081504111">"Түзмөк <xliff:g id="PERCENT">%1$s</xliff:g> жеткенде, батареяны үнөмдөгүч өчүп калат"</string>
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Күйгүзүү"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Батареяны үнөмдөгүчтү колдонуу"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Батареяны үнөмдөгүчтү колдонуу"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Автоматтык түрдө күйгүзүү"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Эч качан"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"<xliff:g id="PERCENT">%1$s</xliff:g> батарея менен"</string>
@@ -2537,7 +2540,7 @@
<string name="credentials_settings_not_available" msgid="5490259681690183274">"Бул колдонуучу далдаштырма дайындарын колдоно албайт"</string>
<string name="credential_for_vpn_and_apps" msgid="2462642486949593841">"VPN жана колдонмолор үчүн орнотулган"</string>
<string name="credential_for_wifi" msgid="2903295786961726388">"Wi-Fi үчүн орнотулган"</string>
- <string name="credentials_reset_hint" msgid="3484350477764088169">"Бардык мазмундар өчүрүлсүнбү?"</string>
+ <string name="credentials_reset_hint" msgid="3484350477764088169">"Баарын өчүрөсүзбү?"</string>
<string name="credentials_erased" msgid="7287088033523869085">"Каттоо маалыматы сакталган жер тазаланды."</string>
<string name="credentials_not_erased" msgid="9137227570738627637">"Сертификат сактагычты тазалоо мүмкүн эмес."</string>
<string name="usage_access_title" msgid="7981321142726540574">"Пайдалануу уруксаты бар колдн."</string>
@@ -2577,7 +2580,7 @@
<string name="add_device_admin" msgid="1621152410207260584">"Түзмөктү башкарган колдонмону иштетүү"</string>
<string name="device_admin_add_title" msgid="6097881332139146897">"Түзмөктү башкаруу"</string>
<string name="device_admin_warning" msgid="4421817419326480449">"Түзмөктү башкаруучу колдонмо иштетилгенде, <xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу төмөнкү аракеттерди аткарат:"</string>
- <string name="device_admin_status" msgid="5424944611789040723">"Администратордун колдонмосу иштетилген жана <xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосуна төмөнкү аракеттерди аткарууга уруксат берет:"</string>
+ <string name="device_admin_status" msgid="5424944611789040723">"Администратордун колдонмосу иштетилип, <xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосуна төмөнкү аракеттерди аткарууга уруксат берет:"</string>
<string name="profile_owner_add_title" msgid="735805919754362791">"Профиль башкаргычы жандырылсынбы?"</string>
<string name="adding_profile_owner_warning" msgid="1284541194547382194">"Улантсаңыз, профилиңизди администратор башкарып, ал жеке дайын-даректериңиз менен кошо башка тийиштүү дайындарды да сактап турат.\n\nАдминистратор бул колдонуучунун жөндөөлөрүн, кирүү мүмкүнчүлүгүн, колдонмолорду жана дайындарды, ошондой эле тармактагы аракеттер менен түзмөгүңүздүн жайгашкан жери тууралуу маалыматты көзөмөлдөп, башкара алат."</string>
<string name="admin_disabled_other_options" msgid="8097063307730025707">"Башка параметрлер администратор тарабынан өчүрүлгөн"</string>
@@ -2620,7 +2623,7 @@
<string name="sync_contacts" msgid="5687434785723746534">"Байланыштар"</string>
<string name="sync_plug" msgid="6703804441408427257"><font fgcolor="#ffffffff">"Google sync\'ке кош келиңиз!"</font>" \nБайланыштарды, жолугушууларды жана башкаларды, сиз кайдан болбосун жеткидей кылуунун Google сунуштаган жолу."</string>
<string name="header_application_sync_settings" msgid="4581847153669774489">"Колдонмонун синхрондошуу тууралоолору"</string>
- <string name="header_data_and_synchronization" msgid="400831816068697286">"Дайындар жана шайкештирүү"</string>
+ <string name="header_data_and_synchronization" msgid="400831816068697286">"Дайын-даректер жана шайкештирүү"</string>
<string name="preference_change_password_title" msgid="7243527448378789274">"Сызсөздү өзгөртүү"</string>
<string name="header_account_settings" msgid="8586173964125512219">"Аккаунттун жөндөөлөрү"</string>
<string name="remove_account_label" msgid="5885425720323823387">"Аккаунтту алып салуу"</string>
@@ -2668,7 +2671,7 @@
<string name="data_usage_cellular_data_summary" msgid="9162777397135709280">"Тындырылды (лимит)"</string>
<string name="account_settings_menu_auto_sync" msgid="2673669556006027506">"Дайындарды авто-шайкештирүү"</string>
<string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"Жеке дайындарды авто-шайкештирүү"</string>
- <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Жумуш дайындарын авто-шайкештирүү"</string>
+ <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Жумуш маалыматын автошайкештирүү"</string>
<string name="data_usage_change_cycle" msgid="447761920472170031">"Циклди өзгөртүү…"</string>
<string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"Дайындарды колдонуу циклин баштапкы абалга келтире турган күн:"</string>
<string name="data_usage_empty" msgid="7981405723435034032">"Бул мезгилде колдонмолор трафик сарптаган жок."</string>
@@ -2791,7 +2794,7 @@
<string name="vpn_always_on_summary" msgid="3639994551631437397">"VPN кызматына ар дайым туташып турсун"</string>
<string name="vpn_always_on_summary_not_supported" msgid="9077720997795965133">"Бул колдонмодо колдоого алынбайт"</string>
<string name="vpn_always_on_summary_active" msgid="8962619701962239088">"Иштеп турат"</string>
- <string name="vpn_require_connection" msgid="5413746839457797350">"VPN кызматынан башка туташуу бөгөттөлсүн"</string>
+ <string name="vpn_require_connection" msgid="5413746839457797350">"VPN\'сиз туташууларга тыюу салуу"</string>
<string name="vpn_require_connection_title" msgid="8361434328767853717">"VPN туташуусу талап кылынсынбы?"</string>
<string name="vpn_lockdown_summary" msgid="6770030025737770861">"Дайым туташып туруучу VPN профайл тандаңыз. Бул VPN\'ге кошулганда гана желе трафигине уруксат берилет."</string>
<string name="vpn_lockdown_none" msgid="3789288793603394679">"Эч бир"</string>
@@ -2847,7 +2850,7 @@
<string name="user_settings_title" msgid="7917598650933179545">"Бир нече колдонуучу"</string>
<string name="user_settings_footer_text" product="device" msgid="4573858247439190545">"Жаңы колдонуучуларды кошуу аркылуу түзмөгүңүздү башкалар менен чогуу колдонуңуз. Ар бир колдонуучунун түзмөктө ыңгайлаштырылган Башкы экран, аккаунттар, колдонмолор, жөндөөлөр жана башкалар үчүн жеке мейкиндиги болот."</string>
<string name="user_settings_footer_text" product="tablet" msgid="780018221428132918">"Жаңы колдонуучуларды кошуу аркылуу планшетиңизди башкалар менен чогуу колдонуңуз. Ар бир колдонуучунун планшетте ыңгайлаштырылган Башкы экран, аккаунттар, колдонмолор, жөндөөлөр жана башкалар үчүн жеке мейкиндиги болот."</string>
- <string name="user_settings_footer_text" product="default" msgid="1470859614968237491">"Жаңы колдонуучуларды кошуу аркылуу телефонуңузду башкалар менен чогуу колдонуңуз. Ар бир колдонуучунун телефондо ыңгайлаштырылган Башкы экран, аккаунттар, колдонмолор, жөндөөлөр жана башкалар үчүн жеке мейкиндиги болот."</string>
+ <string name="user_settings_footer_text" product="default" msgid="1470859614968237491">"Телефонуңузду бир нече адам менен чогуу пайдалансаңыз болот. Ал үчүн алардын ар бирине профиль түзүп бериңиз. Ар бир колдонуучу өз профилин өзү каалагандай жөндөп алышат (башкы экранын өзгөртүп, аккаунттарын жана колдонмолорун кошуп)."</string>
<string name="user_list_title" msgid="6670258645246192324">"Колдонуучулар жана профайлдар"</string>
<string name="user_add_user_or_profile_menu" msgid="4220679989900149336">"Колдонуучу же профиль кошуу"</string>
<string name="user_add_user_menu" msgid="9006572936456324794">"Колдонуучу кошуу"</string>
@@ -2870,7 +2873,7 @@
<string name="user_add_user_message_long" msgid="686637203224195465">"Эгер түзмөгүңүздү дагы бир адам колдонуп жаткан болсо, кошумча профилдерди түзүп коюңуз. Профилдин ээси аны өзү каалагандай жөндөп, тушкагаздарды коюп, керектүү колдонмолорду орнотуп алат. Мындан тышкары, колдонуучулар түзмөктүн Wi‑Fi´ды өчүрүү/күйгүзүү сыяктуу жалпы жөндөөлөрүн өзгөртө алат.\n\nПрофиль түзүлгөндөн кийин, аны жөндөп алуу керек.\n\nЖалпы колдонмолорду баары жаңырта алат, бирок атайын мүмкүнчүлүктөр өз-өзүнчө жөндөлөт."</string>
<string name="user_add_user_message_short" msgid="1802594476285458254">"Жаңы колдонуучу кошулганда, ал өз мейкиндигин түзүп алышы керек.\n\nКолдонмолорду бир колдонуучу жаңыртканда, ал калган бардык колдонуучулар үчүн да жаңырат."</string>
<string name="user_setup_dialog_title" msgid="6748950002206392396">"Профилди жөндөйсүзбү?"</string>
- <string name="user_setup_dialog_message" msgid="2988559933258353919">"Өз мейкиндигин жөндөп алышы үчүн түзмөктү колдонуучуга беришиңиз керек."</string>
+ <string name="user_setup_dialog_message" msgid="2988559933258353919">"Өз мейкиндигин жөндөп алышы үчүн, түзмөктү колдонуучуга беришиңиз керек."</string>
<string name="user_setup_profile_dialog_message" msgid="7611900802824048526">"Профайл азыр түзүлсүнбү?"</string>
<string name="user_setup_button_setup_now" msgid="4941459406266856176">"Азыр түзүү"</string>
<string name="user_setup_button_setup_later" msgid="6596031428556518752">"Азыр эмес"</string>
@@ -2906,7 +2909,7 @@
<string name="user_enable_calling_confirm_message" msgid="2490126715153125970">"Чалуулар таржымалы бул колдонуучу менен бөлүшүлөт."</string>
<string name="user_enable_calling_and_sms_confirm_title" msgid="4153856398523366976">"Чалуулар менен SMS иштетилсинби?"</string>
<string name="user_enable_calling_and_sms_confirm_message" msgid="3278802798876095734">"Чалуулар жана SMS таржымалы бул колдонуучу менен бөлүшүлөт."</string>
- <string name="emergency_info_title" msgid="1522609271881425375">"Өзгөчө кырдаал жөнүндө маалымат"</string>
+ <string name="emergency_info_title" msgid="1522609271881425375">"Кырсыктаганда керек болчу маалымат"</string>
<string name="emergency_info_summary" msgid="7280464759837387342">"<xliff:g id="USER_NAME">%1$s</xliff:g> жөнүндө маалымат жана байланыштар"</string>
<string name="application_restrictions" msgid="6871981013736536763">"Колдонмолорго жана мазмунга уруксат"</string>
<string name="apps_with_restrictions_header" msgid="8656739605673756176">"Чектелген колдонмолор"</string>
@@ -2919,10 +2922,10 @@
<string name="nfc_payment_app_and_desc" msgid="102312684211458190">"<xliff:g id="APP">%1$s</xliff:g> - <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
<string name="nfc_payment_use_default" msgid="3098724195746409476">"Демейкини колдонуу"</string>
<string name="nfc_payment_favor_default" msgid="7555356982142464260">"Ар дайым"</string>
- <string name="nfc_payment_favor_open" msgid="3739055715000436749">"Акы төлөнүүчү башка колдонмо ачылып турган учурларды эске албаганда"</string>
+ <string name="nfc_payment_favor_open" msgid="3739055715000436749">"Башка төлөм колдонмосу ачылып турбаса"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"Аралыктан төлөө терминалында төмөнкүнү колдонуу:"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"Терминалдан акы төлөө"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Акы төлөнүүчү колдонмону жөндөп туруп, телефондун арткы бетин колду тийгизбей туруп төлөө белгиси түшүрүлгөн терминалга ыктап кармап туруңуз."</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Төлөм колдонмосун жөндөп туруп, телефондун арткы бетин тийбей төлөө белгиси түшүрүлгөн терминалга жакындатыңыз."</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"Түшүндүм"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"Дагы…"</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"Сиздин тандооңуз катары орнотулсунбу?"</string>
@@ -2991,7 +2994,7 @@
<string name="sim_cellular_data_unavailable_summary" msgid="3093797406601964131">"Мобилдик Интернет үчүн SIM картаны тандоо үчүн таптап коюңуз"</string>
<string name="sim_calls_always_use" msgid="5322696995795851734">"Бул нерсе дайым чалуулр үчүн колдонулсн"</string>
<string name="select_sim_for_data" msgid="2099705792885526394">"Дайындар үчүн SIM тандаңыз"</string>
- <string name="select_sim_for_sms" msgid="2481682560233370731">"SMS жөнөтүү үчүн SIM-картаны тандаңыз"</string>
+ <string name="select_sim_for_sms" msgid="2481682560233370731">"SMS жөнөтүү үчүн SIM картаны тандаңыз"</string>
<string name="data_switch_started" msgid="4517966162053949265">"Дайындар SIM\'и которулууда, бул бир мүнөткө чейин созулушу мүмкүн…"</string>
<string name="select_sim_for_calls" msgid="131091573472832807">"Төмөнкү менен чалуу"</string>
<string name="sim_select_card" msgid="5558215843972182767">"SIM карта тандаңыз"</string>
@@ -3022,7 +3025,7 @@
<string name="sim_pref_divider" msgid="4967718397875240190">"Төмөнкү үчүн тандалган SIM"</string>
<string name="sim_calls_ask_first_prefs_title" msgid="8209265235625420102">"Чалган сайын сурасын"</string>
<string name="sim_selection_required_pref" msgid="8738591348923992419">"Тандоо керек"</string>
- <string name="sim_selection_channel_title" msgid="5671915549529226023">"SIM-картаны тандоо"</string>
+ <string name="sim_selection_channel_title" msgid="5671915549529226023">"SIM картаны тандоо"</string>
<string name="dashboard_title" msgid="3343056553551876215">"Жөндөөлөр"</string>
<plurals name="settings_suggestion_header_summary_hidden_items" formatted="false" msgid="4475734332610696843">
<item quantity="other">Жашырылган %d нерсе көрсөтүлсүн</item>
@@ -3030,9 +3033,9 @@
</plurals>
<string name="network_dashboard_title" msgid="8288134139584687806">"Тармак жана Интернет"</string>
<string name="network_dashboard_summary_mobile" msgid="5560545061217580626">"мобилдик"</string>
- <string name="network_dashboard_summary_data_usage" msgid="4695629715072542102">"дайындардын колдонулушу"</string>
+ <string name="network_dashboard_summary_data_usage" msgid="4695629715072542102">"дайын-даректердин өткөрүлүшү"</string>
<string name="network_dashboard_summary_hotspot" msgid="3928610802321995214">"байланыш түйүнү"</string>
- <string name="connected_devices_dashboard_title" msgid="7795222675849060444">"Туташкан түзмөктөр"</string>
+ <string name="connected_devices_dashboard_title" msgid="7795222675849060444">"Байланышкан түзмөктөр"</string>
<string name="connected_devices_dashboard_summary" msgid="1072664369515033179">"Bluetooth, айдоо режими, NFC"</string>
<string name="connected_devices_dashboard_no_nfc_summary" msgid="2610085597733526722">"Bluetooth, айдоо режими"</string>
<string name="connected_devices_dashboard_no_driving_mode_summary" msgid="3524409078596318803">"Bluetooth, NFC"</string>
@@ -3120,7 +3123,7 @@
<string name="keywords_assist_input" msgid="8392362788794886564">"демейки, жардамчы"</string>
<string name="keywords_default_payment_app" msgid="845369409578423996">"төлөм, демейки"</string>
<string name="keywords_ambient_display" msgid="8835182491798487184">"кирүүчү эскертме"</string>
- <string name="keywords_hotspot_tethering" msgid="1723591462602613867">"usb аркылуу туташуу, bluetooth аркылуу туташуу, wifi хотспоту"</string>
+ <string name="keywords_hotspot_tethering" msgid="1723591462602613867">"usb аркылуу туташуу, bluetooth аркылуу туташуу, wifi байланыш түйүнү"</string>
<string name="keywords_touch_vibration" msgid="2081175517528255224">"сенсорлор, дирилдөө, экран, сезгичтик"</string>
<string name="keywords_ring_vibration" msgid="4210509151866460210">"сенсорлор, дирилдөө, телефон, чалуу, сезгичтик, шыңгыратуу"</string>
<string name="keywords_notification_vibration" msgid="1077515502086745166">"сенсорлор, дирилдөө, сезгичтик"</string>
@@ -3131,10 +3134,10 @@
<string name="sound_settings_summary_vibrate" msgid="2194491116884798590">"Коңгуроо дирилдейт"</string>
<string name="sound_settings_summary_silent" msgid="899823817462768876">"Коңгуроонун үнү өчүрүлгөн"</string>
<string name="sound_settings_example_summary" msgid="2091822107298841827">"Шыңгырдын катуулугу 80%"</string>
- <string name="media_volume_option_title" msgid="3553411883305505682">"Мультимедианын үнү"</string>
+ <string name="media_volume_option_title" msgid="3553411883305505682">"Мультимедианын катуулугу"</string>
<string name="remote_media_volume_option_title" msgid="6355710054191873836">"Үндү алыстан башкаруу"</string>
- <string name="call_volume_option_title" msgid="5028003296631037334">"Чалуунун үнү"</string>
- <string name="alarm_volume_option_title" msgid="3184076022438477047">"Ойготкучтун үнү"</string>
+ <string name="call_volume_option_title" msgid="5028003296631037334">"Сүйлөшүү"</string>
+ <string name="alarm_volume_option_title" msgid="3184076022438477047">"Ойготкучтун катуулугу"</string>
<string name="ring_volume_option_title" msgid="2038924918468372264">"Шыңгырдын үнү"</string>
<string name="notification_volume_option_title" msgid="1358512611511348260">"Эскертме үнүнүн катуулугу"</string>
<string name="ringtone_title" msgid="1409086028485922583">"Телефондун шыңгыры"</string>
@@ -3148,7 +3151,7 @@
<string name="screen_locking_sounds_title" msgid="4407110895465866809">"Экран кулпуланганда үн чыксын"</string>
<string name="charging_sounds_title" msgid="5070437987230894287">"Кубаттоо үндөрү жана дирилдөө"</string>
<string name="docking_sounds_title" msgid="2573137471605541366">"Жалгаштыруу үндөрү"</string>
- <string name="touch_sounds_title" msgid="165237488496165652">"Экранга тийгенде үн чыксын"</string>
+ <string name="touch_sounds_title" msgid="165237488496165652">"Экранга тийгенде чыккан үндөр"</string>
<string name="vibrate_on_touch_title" msgid="6360155469279157684">"Тийгенде дирилдейт"</string>
<string name="vibrate_on_touch_summary" msgid="5504424764028676043">"Баскычтарды басканда, баскычтопко тийгенде ж.б. учурларда дирилдейт"</string>
<string name="dock_audio_media_title" msgid="1859521680502040781">"Док катуу сүйлөткүч ойнотот"</string>
@@ -3193,16 +3196,16 @@
<string name="zen_mode_visual_signals_settings_subtitle" msgid="6608239691864638854">"Визуалдык сигнал иштетилсин"</string>
<string name="zen_mode_settings_category" msgid="5601680733422424922">"\"Тынчымды алба\" режими күйүп турганда"</string>
<string name="zen_mode_restrict_notifications_title" msgid="7486753018073540477">"Билдирмелерди чектөө"</string>
- <string name="zen_mode_restrict_notifications_mute" msgid="2673665450311184875">"Билдирмелердин добушу чыкпайт"</string>
+ <string name="zen_mode_restrict_notifications_mute" msgid="2673665450311184875">"Билдирмелердин үнү чыкпайт"</string>
<string name="zen_mode_restrict_notifications_mute_summary" msgid="1696217042353376674">"Билдирмелерди экранда көрөсүз"</string>
<string name="zen_mode_restrict_notifications_mute_footer" msgid="3049522809520549054">"Билдирмелер келгенде телефонуңуздун үнү чыкпайт же дирилдебейт."</string>
<string name="zen_mode_restrict_notifications_hide" msgid="3296933643539682552">"Билдирмелерди көрбөйсүз да, укпайсыз"</string>
<string name="zen_mode_restrict_notifications_hide_summary" msgid="1449301153755270168">"Билдирмелерди көрбөйсүз да, укпайсыз"</string>
- <string name="zen_mode_restrict_notifications_hide_footer" msgid="7617688597593946765">"Жаңы же учурдагы билдирмелер көрүнбөйт, телефондун үнү чыкпайт же дирилдебейт. Бирок телефондун негизги функцияларынын иштеши үчүн керектүү маанилүү билдирмелерди ала бересиңер.\n\n\"Тынчымды алба\" режими өчүрүлгөндөн кийин, жашырылган билдирмелерди көрүү үчүн экранды ылдый сүрүп коюңуз."</string>
+ <string name="zen_mode_restrict_notifications_hide_footer" msgid="7617688597593946765">"Жаңы же учурдагы билдирмелер көрүнбөйт, телефондун үнү чыкпайт же дирилдебейт. Бирок телефондун негизги функцияларынын иштеши үчүн керектүү болгон билдирмелерди ала бересиңер.\n\n\"Тынчымды алба\" режими өчүрүлгөндөн кийин, жашырылган билдирмелерди көрүү үчүн экранды ылдый сүрүп коюңуз."</string>
<string name="zen_mode_restrict_notifications_custom" msgid="3167252482570424133">"Ыңгайлаштырылган"</string>
<string name="zen_mode_restrict_notifications_enable_custom" msgid="6376983315529894440">"Ыңгайлаштырылган жөндөөнү иштетүү"</string>
<string name="zen_mode_restrict_notifications_disable_custom" msgid="8004212081465043044">"Ыңгайлаштырылган жөндөөнү алып салуу"</string>
- <string name="zen_mode_restrict_notifications_summary_muted" msgid="1075196788469381282">"Билдирмелердин добушу чыкпайт"</string>
+ <string name="zen_mode_restrict_notifications_summary_muted" msgid="1075196788469381282">"Билдирмелердин үнү чыкпайт"</string>
<string name="zen_mode_restrict_notifications_summary_custom" msgid="4982187708274505748">"Жарым-жартылай жашырылган"</string>
<string name="zen_mode_restrict_notifications_summary_hidden" msgid="7637206880685474111">"Билдирмелерди көрбөйсүз да, укпайсыз"</string>
<string name="zen_mode_what_to_block_title" msgid="2142809942549840800">"Ыңгайлаштырылган чектөөлөр"</string>
@@ -3228,7 +3231,7 @@
<string name="zen_mode_add" msgid="2533484377786927366">"Кошуу"</string>
<string name="zen_mode_enable_dialog_turn_on" msgid="6396050543542026184">"Күйгүзүү"</string>
<string name="zen_mode_button_turn_on" msgid="1097964136225943415">"Күйгүзүү"</string>
- <string name="zen_mode_button_turn_off" msgid="3990967728457149454">"Азыр өчүрүлсүн"</string>
+ <string name="zen_mode_button_turn_off" msgid="3990967728457149454">"Өчүрүү"</string>
<string name="zen_mode_settings_dnd_manual_end_time" msgid="4307574188962071429">"<xliff:g id="FORMATTED_TIME">%s</xliff:g> чейин \"Тынчымды алба\" режими күйгүзүлгөн"</string>
<string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"Өзүңүз өчүрмөйүнчө, \"Тынчымды алба\" режими күйүп турат"</string>
<string name="zen_mode_settings_dnd_automatic_rule" msgid="2843297614114625408">"\"Тынчымды алба\" режими автоматтык түрдө <xliff:g id="RULE_NAME">%s</xliff:g> ырааттамасына ылайык күйгүзүлдү"</string>
@@ -3273,7 +3276,7 @@
<string name="zen_onboarding_ok" msgid="6403635918125323678">"Бүттү"</string>
<string name="zen_onboarding_settings" msgid="1416466597876383322">"Жөндөөлөр"</string>
<string name="zen_onboarding_new_setting_title" msgid="3622673375041304362">"Билдирмелерди көрбөйсүз да, укпайсыз"</string>
- <string name="zen_onboarding_current_setting_title" msgid="2560330551761407563">"Билдирмелердин добушу чыкпайт"</string>
+ <string name="zen_onboarding_current_setting_title" msgid="2560330551761407563">"Билдирмелердин үнү чыкпайт"</string>
<string name="zen_onboarding_new_setting_summary" msgid="8264430315983860075">"Билдирмелерди көрбөйсүз да, укпайсыз. Жылдызчаланган байланыштарга жана кайталап чалгандарга уруксат берилди."</string>
<string name="zen_onboarding_current_setting_summary" msgid="3569246708507270821">"(Учурдагы жөндөө)"</string>
<string name="zen_onboarding_dnd_visual_disturbances_header" msgid="7584229011611927613">"\"Тынчымды алба\" режиминин билдирмелеринин жөндөөлөрү өзгөртүлсүнбү?"</string>
@@ -3414,7 +3417,7 @@
<string name="notification_toggle_on" msgid="5119816745741139542">"Күйүк"</string>
<string name="notification_toggle_off" msgid="5289843670514922751">"Өчүк"</string>
<string name="app_notification_block_title" msgid="7898269373875294367">"Баарын бөгөттөө"</string>
- <string name="app_notification_block_summary" msgid="4502146897785692336">"Бул билдирмелер эч качан көрсөтүлбөсүн"</string>
+ <string name="app_notification_block_summary" msgid="4502146897785692336">"Бул билдирмелер эч качан көрүнбөсүн"</string>
<string name="notification_content_block_title" msgid="2805138591864484587">"Билдирмелер"</string>
<string name="notification_content_block_summary" msgid="2743896875255591743">"Билдирмелер эч качан фондо же тышкы түзмөктөрдө көрүнбөсүн"</string>
<string name="notification_badge_title" msgid="8989086619255666442">"Билдирмелер белгиси көрүнсүн"</string>
@@ -3574,7 +3577,7 @@
<string name="encryption_interstitial_yes" msgid="1839339586101502601">"Ооба"</string>
<string name="encryption_interstitial_no" msgid="6517277668879344227">"Жок"</string>
<string name="restricted_true_label" msgid="1545180379083441282">"Чектелген"</string>
- <string name="restricted_false_label" msgid="4512495920090068495">"Колдонмо батареяны фондо колдоно алат"</string>
+ <string name="restricted_false_label" msgid="4512495920090068495">"Колдонмо батареяны фондо керектей алат"</string>
<string name="encrypt_talkback_dialog_require_pin" msgid="2781758476498571031">"PIN талап кылынсынбы?"</string>
<string name="encrypt_talkback_dialog_require_pattern" msgid="8705104812047332411">"Үлгү талап кылынсынбы?"</string>
<string name="encrypt_talkback_dialog_require_password" msgid="5070710417271353306">"Сырсөз талап кылынсынбы?"</string>
@@ -3677,7 +3680,7 @@
<string name="apps_storage" msgid="5658466038269046038">"Колдонмолор кампасы"</string>
<string name="usage_access" msgid="2023443456361489516">"Колдонуу таржымалын көрүү"</string>
<string name="permit_usage_access" msgid="3321727608629752758">"Колдонуу мүмкүнчүлүгүнө уруксат берүү"</string>
- <string name="app_usage_preference" msgid="5691545073101551727">"Колдонмону пайдалануунун жеке жөндөөлөрү"</string>
+ <string name="app_usage_preference" msgid="5691545073101551727">"Колдонмону пайдалануунун жөндөөлөрү"</string>
<string name="time_spent_in_app_pref_title" msgid="2803186835902798451">"Түзмөктү колдонуу убакыты"</string>
<string name="usage_access_description" msgid="2178083292760305207">"Колдонуу таржымалы аркылуу кайсы колдонмолор канчалык көп колдонула турганын, ошондой эле байланыш операторуңузду, тил жөндөөлөрүн жана башка параметрлерди көрө аласыз."</string>
<string name="memory_settings_title" msgid="7867148522014070721">"Эстутум"</string>
@@ -3709,7 +3712,7 @@
<string name="high_power_system" msgid="739584574711292753">"Кубатты үнөмдөөнү иштетүү мүмкүн эмес"</string>
<string name="high_power_desc" msgid="333756885680362741">"Батареянын кубаты үнөмдөлбөсүн. Батареяңыз тез эле отуруп калышы мүмкүн."</string>
<string name="high_power_prompt_title" msgid="2805745781720454052">"Колдонмо фондо тынымсыз иштей берсинби?"</string>
- <string name="high_power_prompt_body" msgid="8067395096053552289">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу фондо тынымсыз иштей берсе, батареянын кубаты тез сарпталышы мүмкүн. \n\nАны кийинчерээк Жөндөөлөр, Колдонмолор жана билдирмелер бөлүмүнөн өзгөртсөңүз болот."</string>
+ <string name="high_power_prompt_body" msgid="8067395096053552289">"<xliff:g id="APP_NAME">%1$s</xliff:g> колдонмосу фондо тынымсыз иштей берсе, батарея бат отуруп калышы мүмкүн. \n\nАны кийинчерээк Жөндөөлөр, Колдонмолор жана билдирмелер бөлүмүнөн өзгөртсөңүз болот."</string>
<string name="battery_summary" msgid="4345690800899981339">"Акыркы жолу толук кубатталгандан бери <xliff:g id="PERCENTAGE">%1$s</xliff:g> сарпталды"</string>
<string name="battery_power_management" msgid="2853925857548647969">"Батареянын кубатын башкаруу"</string>
<string name="no_battery_summary" msgid="4105932628367471314">"Акыркы жолу толук кубатталгандан бери батарея керектеле элек"</string>
@@ -3723,7 +3726,7 @@
<string name="sharing_remote_bugreport_dialog_message" msgid="3814787466701526359">"Мүчүлүштүк тууралуу бул баяндама IT администраторуңуз менен бөлүшүлүүдө. Көбүрөөк маалымат үчүн администраторуңузга кайрылыңыз."</string>
<string name="share_remote_bugreport_action" msgid="8600797271670537888">"Бөлүшүү"</string>
<string name="decline_remote_bugreport_action" msgid="706319275774199033">"Четке кагуу"</string>
- <string name="usb_use_charging_only" msgid="2344625733377110164">"Дайындар өткөрүлбөйт"</string>
+ <string name="usb_use_charging_only" msgid="2344625733377110164">"Дайын-даректер өткөрүлбөйт"</string>
<string name="usb_use_charging_only_desc" msgid="3283518562582478950">"Жөн гана бул түзмөктү кубаттоо"</string>
<string name="usb_use_power_only" msgid="6595783381323810697">"Туташкан түзмөктү кубаттоо"</string>
<string name="usb_use_file_transfers" msgid="6153021302176151884">"Файл өткөрүү"</string>
@@ -3737,7 +3740,7 @@
<string name="usb_default_label" msgid="7471316635263936101">"USB\'нин демейки конфигурациясы"</string>
<string name="usb_default_info" msgid="953775292571786528">"Телефонуңуз башка түзмөккө туташып, кулпуланбай турганда, ушул жөндөөлөр колдонулат. Телефонуңузду ишенимдүү түзмөктөргө гана туташтырыңыз."</string>
<string name="usb_pref" msgid="6194821550693495068">"USB"</string>
- <string name="usb_preference" msgid="7092987095048592826">"USB\'нин жеке жөндөөлөрү"</string>
+ <string name="usb_preference" msgid="7092987095048592826">"USB\'нин жөндөөлөрү"</string>
<string name="usb_control_title" msgid="2379698856760894768">"USB\'ни көзөмөлдөгөн түзмөк:"</string>
<string name="usb_control_host" msgid="193292043691034178">"Туташкан түзмөк"</string>
<string name="usb_control_device" msgid="9154790265254725254">"Ушул түзмөк"</string>
@@ -3756,9 +3759,9 @@
<string name="background_check_pref" msgid="664081406854758392">"Фондо текшерүү"</string>
<string name="background_check_title" msgid="4136736684290307970">"Фондук режимде толук мүмкүнчүлүк"</string>
<string name="assist_access_context_title" msgid="2274614501747710439">"Экрандагы текстти колдонуу"</string>
- <string name="assist_access_context_summary" msgid="5867997494395842785">"Көмөкчү колдонмого экрандагы текстти колдонууга уруксат бересиз"</string>
+ <string name="assist_access_context_summary" msgid="5867997494395842785">"Көмөкчү колдонмого экрандагы текстти көрүү мүмкүнчүлүгүн бересиз"</string>
<string name="assist_access_screenshot_title" msgid="1991014038776117688">"Скриншот колдонуу"</string>
- <string name="assist_access_screenshot_summary" msgid="3010943864000489424">"Көмөкчү колдонмого экрандагы сүрөттү колдонууга уруксат бересиз"</string>
+ <string name="assist_access_screenshot_summary" msgid="3010943864000489424">"Көмөкчү колдонмого экрандагы сүрөттү көрүү мүмкүнчүлүгүн бересиз"</string>
<string name="assist_flash_title" msgid="8852484250748551092">"Экран жаркылдасын"</string>
<string name="assist_flash_summary" msgid="6697095786317559129">"Көмөкчү колдонмо скриншотту же текстти колдонуу мүмкүнчүлүгүн алганда, экрандын чети жаркылдайт"</string>
<string name="assist_footer" msgid="7030121180457472165">"Көмөкчү колдонмолор экрандагы маалымат менен иштейт. Айрым колдонмолордо үн буйруктары жана жүргүзгүч тактасы колдоого алынат."</string>
@@ -3801,7 +3804,7 @@
<string name="system_alert_window_apps_title" msgid="9188448296493699566">"Колдонмолор"</string>
<string name="system_alert_window_access_title" msgid="5187343732185369675">"Башка терезелердин үстүнөн көрсөтүү"</string>
<string name="permit_draw_overlay" msgid="9039092257052422344">"Башка терезелердин үстүнөн көрсөтүүгө уруксат"</string>
- <string name="allow_overlay_description" msgid="6669524816705082807">"Бул колдонмону башка терезелердин үстүнөн көрсөтүүгө уруксат бериңиз. Бирок башка колдонмолорду пайдаланууга тоскоол болуп же алардын интерфейсин бузуп салышы мүмкүн."</string>
+ <string name="allow_overlay_description" msgid="6669524816705082807">"Интерфейстин элементтери башка терезелердин үстүнөн көрүнөт. Ушундан улам, колдонмолор менен иштей албай, алардын интерфейстери бузулушу мүмкүн."</string>
<string name="keywords_vr_listener" msgid="5312633527788917750">"vr виртуалдык дүйнө режими көмөкчү кызмат"</string>
<string name="keywords_system_alert_window" msgid="3936658600272194599">"системдик шашылыш билдирүүлөр башка колдонмолордун үстүнөн көрүнөт"</string>
<string name="overlay_settings" msgid="3325154759946433666">"Башка терезел-н үст-н көрсөтүү"</string>
@@ -3828,7 +3831,7 @@
<string name="camera_double_tap_power_gesture_title" msgid="8874747801078147525">"Камера үчүн кубат баскычын эки басыңыз"</string>
<string name="camera_double_tap_power_gesture_desc" msgid="6166349645433682873">"Камераны экраныңыздын кулпусун ачпастан, тез эле ачып алыңыз"</string>
<string name="screen_zoom_title" msgid="164369086350486104">"Көрсөтүлүүчү өлчөмү"</string>
- <string name="screen_zoom_short_summary" msgid="5508079362742276703">"Экрандагы нерселерди чоңойтуп же кичирейтиңиз"</string>
+ <string name="screen_zoom_short_summary" msgid="5508079362742276703">"Экрандагы нерселерди чоңойтуп же кичирейтесиз"</string>
<string name="screen_zoom_keywords" msgid="8358462497896524092">"дисплей тыгыздыгы, экранды чоңойтуу, шкла, шкалалоо"</string>
<string name="screen_zoom_summary" msgid="5294003755961312560">"Экраныңыздагы нерселерди кичирейтип же чоңойтуңуз. Экраныңыздагы айрым колдонмолордун орду өзгөрүшү мүмкүн."</string>
<string name="screen_zoom_preview_title" msgid="2924312934036753091">"Алдын ала көрүү"</string>
@@ -3868,7 +3871,7 @@
<string name="backup_disabled" msgid="6941165814784765643">"Камдык көчүрмө өчүрүлгөн"</string>
<string name="android_version_summary" msgid="2192751442789395445">"Android <xliff:g id="VERSION">%1$s</xliff:g> версиясына жаңырды"</string>
<string name="android_version_pending_update_summary" msgid="3554543810520655076">"Жаңы версия бар"</string>
- <string name="disabled_by_policy_title" msgid="1238318274952958846">"Аракетке уруксат жок"</string>
+ <string name="disabled_by_policy_title" msgid="1238318274952958846">"Аракетке тыюу салынган"</string>
<string name="disabled_by_policy_title_adjust_volume" msgid="7094547090629203316">"Үнү өзгөртүлбөйт"</string>
<string name="disabled_by_policy_title_outgoing_calls" msgid="3805836913095496278">"Чалууга тыюу салынган"</string>
<string name="disabled_by_policy_title_sms" msgid="1453236584236681105">"SMS жөнөтүүгө тыюу салынган"</string>
@@ -3941,9 +3944,9 @@
<string name="ethernet_data_template" msgid="6414118030827090119">"<xliff:g id="AMOUNT">^1</xliff:g> Ethernet дайындары"</string>
<string name="billing_cycle" msgid="5740717948341713190">"Трафик жана чектөөлөр"</string>
<string name="app_usage_cycle" msgid="213483325132959663">"Статистика цикли"</string>
- <string name="cell_data_warning" msgid="8902740337286652689">"Трафик тууралуу эскертүү: <xliff:g id="ID_1">^1</xliff:g>"</string>
- <string name="cell_data_limit" msgid="3175933829235314233">"Трафикти чектөө: <xliff:g id="ID_1">^1</xliff:g>"</string>
- <string name="cell_data_warning_and_limit" msgid="3846150001253927594">"Трафик тууралуу эскертүү: <xliff:g id="ID_1">^1</xliff:g> / Трафикти чектөө: <xliff:g id="ID_2">^2</xliff:g>"</string>
+ <string name="cell_data_warning" msgid="8902740337286652689">"Качан эскертүү берилет: <xliff:g id="ID_1">^1</xliff:g>"</string>
+ <string name="cell_data_limit" msgid="3175933829235314233">"Трафик чектелген: <xliff:g id="ID_1">^1</xliff:g>"</string>
+ <string name="cell_data_warning_and_limit" msgid="3846150001253927594">"Качан эскертүү берилет: <xliff:g id="ID_1">^1</xliff:g> / Трафик чектелген: <xliff:g id="ID_2">^2</xliff:g>"</string>
<string name="billing_cycle_fragment_summary" msgid="4926047002107855543">"Ай сайын <xliff:g id="ID_1">%1$s</xliff:g> күнү"</string>
<string name="network_restrictions" msgid="196294262243618198">"Тармак чектөөлөрү"</string>
<plurals name="network_restrictions_summary" formatted="false" msgid="1664494781594839837">
@@ -3979,7 +3982,7 @@
<string name="carrier_and_update_text" msgid="4100603877929297103">"<xliff:g id="ID_1">^1</xliff:g> тарабынан <xliff:g id="ID_2">^2</xliff:g> мурда жаңырды"</string>
<string name="no_carrier_update_text" msgid="8797522203060970532">"<xliff:g id="ID_1">^2</xliff:g> мурда жаңырды"</string>
<string name="carrier_and_update_now_text" msgid="7619705504438908034">"<xliff:g id="ID_1">^1</xliff:g> тарабынан жаңы эле жаңырды"</string>
- <string name="no_carrier_update_now_text" msgid="4405472895804759042">"Азыр эле жаңырды"</string>
+ <string name="no_carrier_update_now_text" msgid="4405472895804759042">"Жаңы эле жаңырды"</string>
<string name="launch_mdp_app_text" msgid="9186559496664208252">"Планды көрүү"</string>
<string name="launch_wifi_text" msgid="317820210431682605">"Кеңири маалымат"</string>
<string name="data_saver_title" msgid="7903308134514179256">"Трафикти үнөмдөө"</string>
@@ -3999,15 +4002,15 @@
<string name="suggestion_additional_fingerprints" msgid="3434467207282466411">"Дагы бир манжа изин кошуңуз"</string>
<string name="suggestion_additional_fingerprints_summary" msgid="1916547587832484196">"Кулпуну башка манжа менен ачуу"</string>
<string name="battery_saver_on_summary" msgid="6841062406467435672">"Күйүк"</string>
- <string name="battery_saver_off_scheduled_summary" msgid="3740414764069188669">"<xliff:g id="BATTERY_PERCENTAGE">%1$s</xliff:g> жеткенде, күйгүзүлөт"</string>
+ <string name="battery_saver_off_scheduled_summary" msgid="3740414764069188669">"<xliff:g id="BATTERY_PERCENTAGE">%1$s</xliff:g> жеткенде автоматтык түрдө күйөт"</string>
<string name="battery_saver_off_summary" msgid="8736555723004299721">"Өчүк"</string>
<string name="battery_saver_button_turn_on" msgid="3748696527267573793">"Күйгүзүү"</string>
- <string name="battery_saver_button_turn_off" msgid="2912950982503267828">"Азыр өчүрүлсүн"</string>
+ <string name="battery_saver_button_turn_off" msgid="2912950982503267828">"Өчүрүү"</string>
<string name="not_battery_optimizing" msgid="2616044774307734160">"Батареянын кубатын үнөмдөө функциясы колдонулбай эле"</string>
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Түзмөк кулпуланып турса, эскертмелерде жооптор жана башка тексттер жазылбасын"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Демейки орфография текшергич"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Орфографияны текшергич тандаңыз"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Орфографияны текшергичти колдонуу"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Орфография текшергичин колдонуу"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Тандалган жок"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(эч бири)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4100,38 +4103,38 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Орун бошотуу үчүн сактагычты көзөмөлдөгүч камдык көчүрмөсү сакталган сүрөттөр менен видеолорду жок кылат."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Сүрөттөрдү жана видеолорду алып салуу"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Сактагычты көзөмөлдөгүч"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Сактагычты көзөмөлдөгүчтү колдонуу"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Сактагычты башкаргыч куралын колдонуу"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Автоматтык"</string>
- <string name="deletion_helper_manual_title" msgid="1011785013431162078">"Нускама"</string>
+ <string name="deletion_helper_manual_title" msgid="1011785013431162078">"Кол менен"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Орун бошотуу"</string>
<string name="gesture_preference_title" msgid="583646591518373785">"Жаңсоолор"</string>
<string name="gesture_preference_summary" product="default" msgid="2990736567599191163">"Телефонуңузду көзөмөлдөй турган ыкчам жаңсоолор"</string>
<string name="gesture_preference_summary" product="tablet" msgid="8303793594714075580">"Планшетиңизди көзөмөлдөй турган ыкчам жаңсоолор"</string>
<string name="gesture_preference_summary" product="device" msgid="7792199669106960922">"Түзмөгүңүздү көзөмөлдөй турган ыкчам жаңсоолор"</string>
<string name="double_tap_power_for_camera_title" msgid="5480829329052517484">"Камерага өтүү"</string>
- <string name="double_tap_power_for_camera_summary" msgid="6591026425496323965">"Камераны тез ачуу үчүн каалаган экрандан кубат баскычын эки жолу басыңыз."</string>
+ <string name="double_tap_power_for_camera_summary" msgid="6591026425496323965">"Камераны тез ачуу үчүн, каалаган экрандан кубат баскычын эки жолу басыңыз."</string>
<string name="double_tap_power_for_camera_suggestion_title" msgid="509078029429865036">"Камераны тез ачуу"</string>
<string name="double_twist_for_camera_mode_title" msgid="2606032140297556018">"Камераны которуштуруу"</string>
<string name="double_twist_for_camera_mode_summary" msgid="8979914206876018137"></string>
<string name="double_twist_for_camera_suggestion_title" msgid="5932411386316771246">"Селфилерди тез тартуу"</string>
- <string name="swipe_up_to_switch_apps_summary" msgid="4644068184114154787">"Колдонмолорду которуштуруу үчүн Башкы бет баскычын өйдө сүрүп коюңуз. Бардык колдонмолорду көрүү үчүн кайра өйдө сүрүп коюңуз. Бардык экрандарда иштейт. Мындан ары экраныңыздын төмөнкү оң жагында Сереп салуу баскычы болбойт."</string>
+ <string name="swipe_up_to_switch_apps_summary" msgid="4644068184114154787">"Башка колдонмого которулуу үчүн, Башкы бет баскычын басып, өйдө сүрүңүз. Бардык колдонмолорду көрүү үчүн, дагы бир жолу өйдө сүрүп коюңуз. Бул жаңсоо бардык экрандарда иштейт. Мындан ары экраныңыздын төмөнкү оң жагында Сереп салуу баскычы болбойт."</string>
<string name="swipe_up_to_switch_apps_suggestion_title" msgid="7641846365137536128">"Жаңы Башкы бет баскычын колдонуп көрүңүз"</string>
- <string name="swipe_up_to_switch_apps_suggestion_summary" msgid="7338653224520387852">"Колдонмолорду которуштуруу үчүн жаңы жаңсоону күйгүзүңүз"</string>
+ <string name="swipe_up_to_switch_apps_suggestion_summary" msgid="7338653224520387852">"Башка колдонмого которулуу үчүн,, жаңы жаңсоону күйгүзүңүз"</string>
<string name="ambient_display_title" product="default" msgid="6785677099744344088">"Убакытты жана билдирмелерди текшерүү үчүн эки жолу басуу"</string>
<string name="ambient_display_title" product="tablet" msgid="1106285490888683613">"Планшетти текшерүү үчүн эки жолу таптаңыз"</string>
<string name="ambient_display_title" product="device" msgid="5064644474876041478">"Түзмөктү текшерүү үчүн эки жолу таптаңыз"</string>
- <string name="ambient_display_summary" msgid="4882910328216411109">"Убакытты, билдирмелерди жана башка маалыматты көрүү үчүн экраныңызды эки жолу таптаңыз."</string>
+ <string name="ambient_display_summary" msgid="4882910328216411109">"Убакытты, билдирмелерди жана башка маалыматты көрүү үчүн, экраныңызды эки жолу таптаңыз."</string>
<string name="ambient_display_pickup_title" product="default" msgid="7141652156907066938">"Билдирмелерди текшерүү үчүн телефонду көтөрүү"</string>
<string name="ambient_display_pickup_title" product="tablet" msgid="1555456400210301959">"Планшетти текшерүү үчүн көтөрүңүз"</string>
<string name="ambient_display_pickup_title" product="device" msgid="2480126522988135037">"Түзмөктү текшерүү үчүн көтөрүңүз"</string>
<string name="ambient_display_wake_screen_title" msgid="3376988352851077102">"Дисплейди ачуу"</string>
- <string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"Убакытты, билдирмелерди жана башка маалыматты көрүү үчүн телефонуңузду колуңузга алыңыз."</string>
- <string name="ambient_display_pickup_summary" product="tablet" msgid="1077745287100012928">"Убакытты, билдирмелерди жана башка маалыматты көрүү үчүн планшетиңизди колуңузга алыңыз."</string>
- <string name="ambient_display_pickup_summary" product="device" msgid="404199660076598026">"Убакытты, билдирмелерди жана башка маалыматты көрүү үчүн түзмөгүңүздү колуңузга алыңыз."</string>
+ <string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"Убакытты, билдирмелерди жана башка маалыматты көрүү үчүн, телефонуңузду колуңузга алыңыз."</string>
+ <string name="ambient_display_pickup_summary" product="tablet" msgid="1077745287100012928">"Убакытты, билдирмелерди жана башка маалыматты көрүү үчүн, планшетиңизди колуңузга алыңыз."</string>
+ <string name="ambient_display_pickup_summary" product="device" msgid="404199660076598026">"Убакытты, билдирмелерди жана башка маалыматты көрүү үчүн, түзмөгүңүздү колуңузга алыңыз."</string>
<string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"Телефонду текшерүү үчүн басып коюу"</string>
<string name="ambient_display_tap_screen_title" product="tablet" msgid="6434521782016864148">"Планшетти текшерүү үчүн басып коюу"</string>
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"Түзмөктү текшерүү үчүн басып коюу"</string>
- <string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"Убакытты, билдирмелерди жана башка маалыматты көрүү үчүн экранды таптап коюңуз."</string>
+ <string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"Убакытты, билдирмелерди жана башка маалыматты көрүү үчүн, экранды таптап коюңуз."</string>
<string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"Билдирмелерди манжа изинин сенсору менен көрүү"</string>
<string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"Манжа изинин сканери"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"Билдирмелериңизди текшерүү үчүн телефондун аркасындагы манжа изинин сенсорун ылдый сүртүп коюңуз"</string>
@@ -4154,7 +4157,7 @@
<string name="automatic_storage_manager_activation_warning" msgid="2630083316417707308">"Учурда сактагычыңыз сактагычты көзөмөлдөгүч тарабынан башкарылууда"</string>
<string name="account_for_section_header" msgid="5975241715840642563">"<xliff:g id="USER_NAME">%1$s</xliff:g> таандык аккаунттар"</string>
<string name="configure_section_header" msgid="6988981883075615136">"Конфигурациялоо"</string>
- <string name="auto_sync_account_title" msgid="2394463123733529506">"Дайындарды автоматтык түрдө шайкештирүү"</string>
+ <string name="auto_sync_account_title" msgid="2394463123733529506">"Дайын-даректердин автоматтык түрдө шайкештирилиши"</string>
<string name="auto_sync_personal_account_title" msgid="6844465157916100655">"Жеке дайындарды автоматтык түрдө шайкештирүү"</string>
<string name="auto_sync_work_account_title" msgid="2403222633447522376">"Жумушка байланыштуу дайындарды автоматтык түрдө шайкештирүү"</string>
<string name="auto_sync_account_summary" msgid="6316230976974033772">"Колдонмолордун маалыматы автоматтык түрдө жаңырып турат"</string>
@@ -4165,7 +4168,7 @@
<string name="enterprise_privacy_settings" msgid="2777101678653072889">"Башкарылган түзмөк жөнүндө маалымат"</string>
<string name="enterprise_privacy_settings_summary_generic" msgid="5557859169062703683">"Өзгөртүүлөр жана жөндөөлөр уюмуңуз тарабынан башкарылат"</string>
<string name="enterprise_privacy_settings_summary_with_name" msgid="4884479123751308407">"Өзгөртүүлөр жана жөндөөлөр <xliff:g id="ORGANIZATION_NAME">%s</xliff:g> тарабынан башкарылат"</string>
- <string name="enterprise_privacy_header" msgid="2680588186952421841">"Жумуш дайындарына кирүүгө уруксат берүү үчүн, уюмуңуз жөндөөлөрдү өзгөртүп, түзмөгүңүзгө программа орнотушу мүмкүн. \n\nКененирээк маалымат алуу үчүн уюмуңуздун администратору менен байланышыңыз."</string>
+ <string name="enterprise_privacy_header" msgid="2680588186952421841">"Жумуш дайындарына кирүүгө уруксат берүү үчүн, уюмуңуз жөндөөлөрдү өзгөртүп, түзмөгүңүзгө программа орнотушу мүмкүн. \n\nКененирээк маалымат алуу үчүн, уюмуңуздун администратору менен байланышыңыз."</string>
<string name="enterprise_privacy_exposure_category" msgid="4474576266043636753">"Уюмуңуз көрө алган маалыматтын түрлөрү"</string>
<string name="enterprise_privacy_exposure_changes_category" msgid="1877045221796512001">"Уюмуңуздун администратору киргизген өзгөртүүлөр"</string>
<string name="enterprise_privacy_device_access_category" msgid="2967602674816237833">"Бул түзмөккө кирүү мүмкүнчүлүгүңүз"</string>
@@ -4173,7 +4176,7 @@
<string name="enterprise_privacy_installed_packages" msgid="4376014821459811800">"Түзмөгүңүздөгү колдонмолордун тизмеси"</string>
<string name="enterprise_privacy_usage_stats" msgid="445762931318731975">"Ар бир колдонмого сарпталган убакыт жана колдонулган дайындар"</string>
<string name="enterprise_privacy_network_logs" msgid="5427398751599441159">"Эң акыркы тармак трафигинин таржымалы"</string>
- <string name="enterprise_privacy_bug_reports" msgid="283443567328836380">"Эң акыркы мүчүлүштүк тууралуу кабар берүү"</string>
+ <string name="enterprise_privacy_bug_reports" msgid="283443567328836380">"Эң акыркы мүчүлүштүк тууралуу кабарлоо"</string>
<string name="enterprise_privacy_security_logs" msgid="8936969480449604726">"Эң акыркы коопсуздук таржымалы"</string>
<string name="enterprise_privacy_none" msgid="5990646476868794882">"Жок"</string>
<string name="enterprise_privacy_enterprise_installed_packages" msgid="6575025134782391212">"Орнотулган колдонмолор"</string>
@@ -4285,7 +4288,7 @@
<string name="angle_enabled_app" msgid="4359266182151708733">"ANGLE иштетилген колдонмону тандоо"</string>
<string name="angle_enabled_app_not_set" msgid="7428910515748621910">"ANGLE иштетилген колдонмо жөндөлгөн жок"</string>
<string name="angle_enabled_app_set" msgid="7313088703610569320">"ANGLE иштетилген колдонмо: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
- <string name="game_driver_dashboard_title" msgid="219443350404091201">"Оюн драйверинин жеке жөндөөлөрү"</string>
+ <string name="game_driver_dashboard_title" msgid="219443350404091201">"Оюн драйверинин жөндөөлөрү"</string>
<string name="game_driver_dashboard_summary" msgid="1500674075618790528">"Оюн драйверинин жөндөөлөрү өзгөрөт"</string>
<string name="game_driver_footer_text" msgid="1540158284161797913">"Оюн драйвери күйүк болгондо, түзмөктө орнотулган колдонмолор үчүн жаңыртылган графикалык драйверди колдонууну тандасаңыз болот."</string>
<string name="game_driver_all_apps_preference_title" msgid="2453795714218707495">"Бардык колдонмолор үчүн иштетүү"</string>
@@ -4306,7 +4309,7 @@
<string name="my_device_info_device_name_preference_title" msgid="7384446683248009296">"Түзмөктүн аталышы"</string>
<string name="change_wifi_state_title" msgid="5140754955787584174">"Wi-Fi\'ды көзөмөлдөө"</string>
<string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"Колдонмого Wi-Fi\'ды көзөмөлдөөгө уруксат берүү"</string>
- <string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Бул колдонмого Wi-Fi\'ды өчүрүп же күйгүзүүгө, Wi-Fi тармактарын издеп, аларга туташууга, тармактарды кошуп же алып салууга же жергиликтүү туташуу түйүнүн иштетүүгө уруксат берүү"</string>
+ <string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Бул колдонмого Wi-Fi\'ды өчүрүп же күйгүзүүгө, Wi-Fi тармактарын издеп, аларга туташууга, тармактарды кошуп же алып салууга же жергиликтүү байланыш түйүнүн иштетүүгө уруксат берүү"</string>
<string name="media_output_title" msgid="8710632337456601848">"Медиа файл төмөнкүдө ойнотулсун:"</string>
<string name="media_output_default_summary" msgid="3159237976830415584">"Ушул түзмөк"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"Телефон"</string>
@@ -4330,7 +4333,7 @@
<string name="prevent_ringing_option_mute_summary" msgid="3509459199090688328">"Күйүк (үнсүз)"</string>
<string name="prevent_ringing_option_none_summary" msgid="5152618221093037451">"Өчүк"</string>
<string name="pref_title_network_details" msgid="3971074015034595956">"Тармактын чоо-жайы"</string>
- <string name="about_phone_device_name_warning" msgid="9088572775969880106">"Түзмөгүңүздүн аталышы телефонуңуздагы колдонмолорго көрүнүктүү. Bluetooth түзмөктөрүнө туташканыңызда же Wi‑Fi туташуу түйүнүн жөндөгөнүңүздө, аны башка адамдар да көрүшү мүмкүн."</string>
+ <string name="about_phone_device_name_warning" msgid="9088572775969880106">"Түзмөгүңүздүн аталышы телефонуңуздагы колдонмолорго көрүнүктүү. Bluetooth түзмөктөрүнө туташканыңызда же Wi‑Fi байланыш түйүнүн жөндөгөнүңүздө, аны башка адамдар да көрүшү мүмкүн."</string>
<string name="devices_title" msgid="4768432575951993648">"Түзмөктөр"</string>
<string name="homepage_all_settings" msgid="3201220879559136116">"Бардык жөндөөлөр"</string>
<string name="homepage_personal_settings" msgid="7472638597249114564">"Сунуштар"</string>
@@ -4375,7 +4378,7 @@
<string name="label_available" msgid="8167122783750674408">"Жеткиликтүү тармактар"</string>
<string name="load_networks_progress" msgid="8155227447618984212">"Издөөдө…"</string>
<string name="register_on_network" msgid="423929472895070205">"<xliff:g id="NETWORK">%s</xliff:g> тармагына катталууда…"</string>
- <string name="not_allowed" msgid="3047048893776257915">"Сиздин SIM-картаңыз менен бул тармакка туташууга болбойт."</string>
+ <string name="not_allowed" msgid="3047048893776257915">"Сиздин SIM картаңыз менен бул тармакка туташууга болбойт."</string>
<string name="connect_later" msgid="4742215038190504328">"Бул тармакка азыр кошулуу мүмкүн эмес. Бир аздан кийин кайталап көрүңүз."</string>
<string name="registration_done" msgid="8635020229073784432">"Тармакка катталды."</string>
<string name="select_automatically" msgid="3421552364854534865">"Тармак автоматтык түрдө тандалат"</string>
@@ -4442,7 +4445,7 @@
<string name="mobile_network_mode_error" msgid="6818434186286086554">"Тармактын режими жараксыз: <xliff:g id="NETWORKMODEID">%1$d</xliff:g>. Баш тартыңыз."</string>
<string name="mobile_network_apn_title" msgid="5628635067747404382">"Байланыш түйүнүнүн аталыштары"</string>
<string name="manual_mode_disallowed_summary" msgid="799800630000340665">"<xliff:g id="CARRIER">%1$s</xliff:g> операторуна туташып турганда жеткиликсиз"</string>
- <string name="emergency_info_contextual_card_summary" msgid="5541444321969803486">"Медициналык маалымат, өзгөчө кырдаал байланыштары"</string>
+ <string name="emergency_info_contextual_card_summary" msgid="5541444321969803486">"Медициналык маалымат, кырсыктаганда байланышуучу адамдар"</string>
<string name="see_more" msgid="7463940160389802632">"Дагы көрүү"</string>
<string name="see_less" msgid="3718892257002813387">"Азыраак көрүү"</string>
<string name="network_connection_request_dialog_title" msgid="3150489262902506588">"<xliff:g id="APPNAME">%1$s</xliff:g> менен колдонулуучу түзмөк"</string>
@@ -4474,7 +4477,7 @@
<string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"Бул сунуш өчүрүлсүнбү?"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"Сунуш өчүрүлдү"</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"Кайтаруу"</string>
- <string name="low_storage_summary" msgid="4562224870189133400">"Сактагычта бош орун аз калды. <xliff:g id="PERCENTAGE">%1$s</xliff:g> ээленген – <xliff:g id="FREE_SPACE">%2$s</xliff:g> бош"</string>
+ <string name="low_storage_summary" msgid="4562224870189133400">"Сактагычта орун калбай баратат. <xliff:g id="PERCENTAGE">%1$s</xliff:g> ээленген – <xliff:g id="FREE_SPACE">%2$s</xliff:g> бош"</string>
<string name="contextual_card_feedback_send" msgid="8698649023854350623">"Пикир билдирүү"</string>
<string name="contextual_card_feedback_confirm_message" msgid="3987973028353264878">"Бул сунуш боюнча бизге пикириңизди билдирбейт белеңиз?"</string>
<string name="copyable_slice_toast" msgid="1357518174923789947">"<xliff:g id="COPY_CONTENT">%1$s</xliff:g> буферге көчүрүлдү."</string>
diff --git a/tests/CarDeveloperOptions/res/values-lo/arrays.xml b/tests/CarDeveloperOptions/res/values-lo/arrays.xml
index 0dabc66..ff9fc4a 100644
--- a/tests/CarDeveloperOptions/res/values-lo/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-lo/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"ນຳໃຊ້ໃນພື້ນຫຼັງ"</item>
<item msgid="6423861043647911030">"accessibility volume"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"ສະຖານທີ່"</item>
+ <item msgid="6656077694190491067">"ສະຖານທີ່"</item>
+ <item msgid="8790228218278477369">"ສະຖານທີ່"</item>
+ <item msgid="7836406246005211990">"ສັ່ນເຕືອນ"</item>
+ <item msgid="3951439024549922598">"ອ່ານລາຍຊື່ຜູ່ຕິດຕໍ່"</item>
+ <item msgid="8802152411647068">"ແກ້ໄຂລາຍຊື່ຜູ່ຕິດຕໍ່"</item>
+ <item msgid="229544934599698735">"ອ່ານບັນທຶກການໂທ"</item>
+ <item msgid="7396102294405899613">"ແກ້ໄຂບັນທຶກການໂຕ"</item>
+ <item msgid="3597797992398484655">"ອ່ານປະຕິທິນ"</item>
+ <item msgid="2705975774250907343">"ແກ້ໄຂປະຕິທິນ"</item>
+ <item msgid="4668747371441932697">"ສະຖານທີ່"</item>
+ <item msgid="1487578921720243646">"ການແຈ້ງເຕືອນໂພສ"</item>
+ <item msgid="4636080349724146638">"Location"</item>
+ <item msgid="673510900286463926">"ໂທຫາໂທລະສັບ"</item>
+ <item msgid="542083422784609790">"ອ່ານ SMS/MMS"</item>
+ <item msgid="1033780373029588436">"ຂຽນ SMS/MMS"</item>
+ <item msgid="5647111115517787488">"ຮັບ SMS/MMS"</item>
+ <item msgid="8591105601108455893">"ຮັບ SMS/MMS"</item>
+ <item msgid="7730995008517841903">"ຮັບ SMS/MMS"</item>
+ <item msgid="2613033109026626086">"ຮັບ SMS/MMS"</item>
+ <item msgid="3037159047591081136">"ສົ່ງ SMS/MMS"</item>
+ <item msgid="4726682243833913568">"ອ່ານ SMS/MMS"</item>
+ <item msgid="6555678522277865572">"ຂຽນ SMS/MMS"</item>
+ <item msgid="6981734935578130884">"ແກ້ໄຂການຕັ້ງຄ່າ"</item>
+ <item msgid="8705854389991425629">"ແຕ້ມທາງເທິງ"</item>
+ <item msgid="5861356020344153651">"ເຂົ້າເຖິງການແຈ້ງເຕືອນ"</item>
+ <item msgid="78432174621628659">"ກ້ອງຖ່າຍຮູບ"</item>
+ <item msgid="3986116419882154794">"ບັນທຶກສຽງ"</item>
+ <item msgid="4516840825756409490">"ຫຼິ້ນສຽງ"</item>
+ <item msgid="6811712502798183957">"ອ່ານຄລິບບອດ"</item>
+ <item msgid="2780369012602289114">"ແກ້ໄຂຄລິບບອດ"</item>
+ <item msgid="2331359440170850868">"ປຸ່ມມີເດຍ"</item>
+ <item msgid="6133599737122751231">"Audio focus"</item>
+ <item msgid="6844485713404805301">"ລະດັບສຽງຫຼັກ"</item>
+ <item msgid="1600379420669104929">"ລະດັບສຽງເວົ້າ"</item>
+ <item msgid="6296768210470214866">"ລະດັບສຽງໂທລະສັບ"</item>
+ <item msgid="510690696071629241">"ລະດັບສຽງມີເດຍ"</item>
+ <item msgid="406861638631430109">"ລະດັບສຽງໂມງປຸກ"</item>
+ <item msgid="4715864795872233884">"ລະດັບສຽງແຈ້ງເຕືອນ"</item>
+ <item msgid="2311478519251301183">"ລະດັບສຽງ Bluetooth"</item>
+ <item msgid="5133991377896747027">"ເຮັດວຽກຕະຫຼອດເວລາ"</item>
+ <item msgid="2464189519136248621">"ສະຖານທີ່"</item>
+ <item msgid="2062677934050803037">"ສະຖານທີ່"</item>
+ <item msgid="1735171933192715957">"ໂຫຼດສະຖິຕິການນຳໃຊ້"</item>
+ <item msgid="1014093788778383554">"ປິດ/ເປີດ ໄມໂຄຣໂຟນ"</item>
+ <item msgid="4199297950608622850">"ສະແດງຂໍ້ຄວາມປາກົດຂຶ້ນຊົ່ວຄາວ"</item>
+ <item msgid="2527962435313398821">"ໂປຣເຈັກມີເດຍ"</item>
+ <item msgid="5117506254221861929">"ເປີດນຳໃຊ້ VPN"</item>
+ <item msgid="8291198322681891160">"ຂຽນວອລເປເປີ"</item>
+ <item msgid="7106921284621230961">"ໂຄງຮ່າງຊ່ວຍ"</item>
+ <item msgid="4496533640894624799">"ຮູບຖ່າຍໜ້າຈໍຊ່ວຍ"</item>
+ <item msgid="2598847264853993611">"ອ່ານສະຖານະໂທລະສັບ"</item>
+ <item msgid="9215610846802973353">"ເພີ່ມຂໍ້ຄວາມສຽງ"</item>
+ <item msgid="9186411956086478261">"ໃຊ້ sip"</item>
+ <item msgid="6884763100104539558">"ດຳເນີນການໂທອອກ"</item>
+ <item msgid="125513972170580692">"ລາຍນີ້ວມື"</item>
+ <item msgid="2556071024281275619">"ເຊັນເຊີຮ່າງກາຍ"</item>
+ <item msgid="617168514928339387">"ອ່ານການປະກາດຜ່ານເຄືອຂ່າຍ"</item>
+ <item msgid="7134693570516523585">"ສະຖານທີ່ຈຳລອງ"</item>
+ <item msgid="7224489175375229399">"ອ່ານພື້ນທີ່ຈັດເກັບ"</item>
+ <item msgid="8472735063903258202">"ຂຽນພື້ນທີ່ຈັດເກັບ"</item>
+ <item msgid="4069276819909595110">"ເປີດໜ້າຈໍ"</item>
+ <item msgid="1228338896751121025">"ຮັບບັນຊີ"</item>
+ <item msgid="3181581793459233672">"ນຳໃຊ້ໃນພື້ນຫຼັງ"</item>
+ <item msgid="2340936043025374076">"Accessibility volume"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"ສັ້ນ"</item>
<item msgid="4816511817309094890">"ປານກາງ"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"ບໍ່ອະນຸຍາດ"</item>
<item msgid="8184570120217958741">"ອະນຸຍາດສະເໝີ"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"ທົ່ວໄປ"</item>
+ <item msgid="5101233285497327432">"ປານກາງ"</item>
+ <item msgid="1555861583162930714">"ຕ່ຳ"</item>
+ <item msgid="1719683776264798117">"ອັນຕະລາຍ"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"ປົກກະຕິ"</item>
+ <item msgid="6107138933849816768">"ປານກາງ"</item>
+ <item msgid="182695359839047859">"ຕ່ຳ"</item>
+ <item msgid="8577246509202964244">"ວິກິດ"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"ໜຽວແໜ້ນ"</item>
<item msgid="167418068739176448">"ການເຄື່ອນໄຫວສູງສຸດ"</item>
diff --git a/tests/CarDeveloperOptions/res/values-lo/strings.xml b/tests/CarDeveloperOptions/res/values-lo/strings.xml
index 4a8e1a2..a160dd5 100644
--- a/tests/CarDeveloperOptions/res/values-lo/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-lo/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"ເຮັດໃຫ້ຂໍ້ຄວາມໃນໜ້າຈໍນ້ອຍລົງ ຫຼື ໃຫຍ່ຂຶ້ນ."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"ເຮັດໃຫ້ນ້ອຍລົງ"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"ເຮັດໃຫ້ໃຫຍ່ຂຶ້ນ"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"ຂໍ້ຄວາມຕົວຢ່າງ"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"ພໍ່ມົດອັດສະຈັນແຫ່ງອອດຊ໌"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"ບົດທີ 11: ເມືອງມໍລະກົດອັນໜ້າອັດສະຈັນຂອງອອດຊ໌"</string>
@@ -208,7 +207,7 @@
<string name="proxy_error_empty_port" msgid="8034561724923076215">"ທ່ານຈຳເປັນຕ້ອງຕື່ມຂໍ້ມູນໃສ່ໃນຊ່ອງພອດ."</string>
<string name="proxy_error_empty_host_set_port" msgid="8471455809508588255">"ຊ່ອງຂໍ້ມູນພອດຈະຕ້ອງປ່ອຍຫວ່າງໄວ້ ຫາກວ່າຊ່ອງ host ຫວ່າງຢູ່."</string>
<string name="proxy_error_invalid_port" msgid="4046559920586100637">"ພອດທີ່ທ່ານລະບຸນັ້ນບໍ່ຖືກຕ້ອງ."</string>
- <string name="proxy_warning_limited_support" msgid="9026539134219095768">"HTTP proxy ນີ້ຖືກໃຊ້ໂດຍໂປຣແກຣມທ່ອງເວັບແລ້ວ ແລະບໍ່ອາດໃຊ້ກັບແອັບຯອື່ນໄດ້."</string>
+ <string name="proxy_warning_limited_support" msgid="9026539134219095768">"HTTP proxy ນີ້ຖືກໃຊ້ໂດຍໂປຣແກຣມທ່ອງເວັບແລ້ວ ແລະ ບໍ່ອາດໃຊ້ກັບແອັບອື່ນໄດ້."</string>
<string name="proxy_url_title" msgid="882042361706435904">"PAC URL: "</string>
<string name="radio_info_dl_kbps" msgid="2903778264453410272">"ແບນວິດ DL (kbps):"</string>
<string name="radio_info_ul_kbps" msgid="3802245899811732716">"ແບນວິດ UL (kbps):"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"ຂໍ້ມູນໂປຣໄຟລ໌"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"ບັນຊີ"</string>
<string name="location_settings_title" msgid="2707201457572301030">"ສະຖານທີ່"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"ໃຊ້ສະຖານທີ່"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"ໃຊ້ສະຖານທີ່"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"ປິດ"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">ເປີດ - <xliff:g id="COUNT_1">%1$d</xliff:g> ແອັບສາມາດເຂົ້າເຖິງສະຖານທີ່ໄດ້</item>
@@ -456,7 +455,7 @@
<string name="lock_screen_intro_skip_dialog_text" product="tablet" msgid="7572334562915795226">"ບໍ່ສາມາດເປີດຄຸນສົມບັດການປ້ອງກັນອຸປະກອນໄດ້. ທ່ານຈະບໍ່ສາມາດປ້ອງກັນບໍ່ໃຫ້ຄົນອື່ນໃຊ້ແທັບເລັດນີ້ໄດ້ຫາກມັນເສຍ ຫຼື ຖືກລັກ."</string>
<string name="lock_screen_intro_skip_dialog_text" product="device" msgid="3819285334459763813">"ບໍ່ສາມາດເປີດຄຸນສົມບັດການປ້ອງກັນອຸປະກອນໄດ້. ທ່ານຈະບໍ່ສາມາດປ້ອງກັນບໍ່ໃຫ້ຄົນອື່ນໃຊ້ອຸປະກອນນີ້ໄດ້ຫາກມັນເສຍ ຫຼື ຖືກລັກ."</string>
<string name="lock_screen_intro_skip_dialog_text" product="default" msgid="5361573789585652826">"ບໍ່ສາມາດເປີດຄຸນສົມບັດການປ້ອງກັນອຸປະກອນໄດ້. ທ່ານຈະບໍ່ສາມາດປ້ອງກັນບໍ່ໃຫ້ຄົນອື່ນໃຊ້ໂທລະສັບນີ້ໄດ້ຫາກມັນເສຍ ຫຼື ຖືກລັກ."</string>
- <string name="skip_anyway_button_label" msgid="4437815969645175429">"ແນວໃດກໍຂ້າມໄປ"</string>
+ <string name="skip_anyway_button_label" msgid="4437815969645175429">"ຢືນຢັນການຂ້າມ"</string>
<string name="go_back_button_label" msgid="7310586887969860472">"ກັບຄືນ"</string>
<string name="skip_lock_screen_dialog_button_label" msgid="6706047245716780006">"ຂ້າມ"</string>
<string name="cancel_lock_screen_dialog_button_label" msgid="2534925227627658819">"ຍົກເລີກ"</string>
@@ -489,7 +488,7 @@
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"ອຸ້ຍ, ນັ້ນບໍ່ແມ່ນເຊັນເຊີ"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"ແຕະທີ່ເຊັນເຊີຢູ່ຫຼັງຂອງໂທລະສັບຂອງທ່ານ. ໃຫ້ໃຊ້ນິ້ວຊີ້ທ່ານ."</string>
<string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"ການລົງທະບຽນບໍ່ສຳເລັດ"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"ຮອດຂີດຈຳກັດເວລາການລົງທະບຽນລາຍນີ້ວມືແລ້ວ. ລອງໃໝ່ອີກ."</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"ຮອດຂີດຈຳກັດເວລາການລົງທະບຽນລາຍນີ້ວມືແລ້ວ. ກະລຸນາລອງໃໝ່ອີກຄັ້ງ."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"ການລົງທະບຽນລາຍນີ້ວມືບໍ່ເຮັດວຽກ. ລອງໃໝ່ອີກ ຫຼື ໃຊ້ນີ້ວມືນີ້ວອື່ນ."</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"ເພີ່ມອັນອື່ນ"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"ຕໍ່ໄປ"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"ເປີດໃຊ້ Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"ໃຊ້ Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"ໃຊ້ Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"ການຕັ້ງຄ່າ Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"ຕັ້ງຄ່າ & ຈັດການຈຸດການເຂົ້າໃຊ້ລະບົບໄຮ້ສາຍ"</string>
@@ -971,7 +970,7 @@
<string name="wifi_unchanged" msgid="6804964646942333992">"(ບໍ່ມີການປ່ຽນແປງ)"</string>
<string name="wifi_unspecified" msgid="893491188483500809">"ກະລຸນາເລືອກ"</string>
<string name="wifi_multiple_cert_added" msgid="7986200585749147204">"(ເພີ່ມຫຼາຍໃບຢັ້ງຢືນແລ້ວ)"</string>
- <string name="wifi_use_system_certs" msgid="4794489370929885022">"ໃຊ້ໃບຢັ້ງຢືນຂອງລະບົບ"</string>
+ <string name="wifi_use_system_certs" msgid="4794489370929885022">"ໃຊ້ໃບຮັບຮອງລະບົບ"</string>
<string name="wifi_do_not_provide_eap_user_cert" msgid="4044301449482425250">"ບໍ່ໃຫ້"</string>
<string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"ບໍ່ກວດຮັບຮອງ"</string>
<string name="wifi_do_not_validate_eap_server_warning" msgid="3895397996759837323">"ບໍ່ໄດ້ລະບຸໃບຢັ້ງຢືນໃດໆ. ການເຊື່ອມຕໍ່ຂອງທ່ານຈະບໍ່ເປັນສ່ວນຕົວ."</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"ມືຖື"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"ຫາກບໍ່ສາມາດໃຊ້ Wi‑Fi ໄດ້, ໃຫ້ໃຊ້ເຄືອຂ່າຍມືຖືແທນ"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"ຫາກເຄືອຂ່າຍມືຖືບໍ່ສາມາດໃຊ້ໄດ້, ໃຫ້ໃຊ້ Wi‑Fi ແທນ"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"ໂທຜ່ານ Wi‑Fi. ຫາກໃຊ້ Wi‑Fi ບໍ່ໄດ້, ການໂທຈະສິ້ນສຸດລົງ."</string>
@@ -1536,7 +1538,7 @@
<string name="apn_server" msgid="625116221513279678">"ເຊີບເວີ"</string>
<string name="apn_mmsc" msgid="4621771343217824216">"MMSC"</string>
<string name="apn_mms_proxy" msgid="636948562860444714">"MMS proxy"</string>
- <string name="apn_mms_port" msgid="6606572282014819299">"ພອດ MMS"</string>
+ <string name="apn_mms_port" msgid="6606572282014819299">"ຜອດ MMS"</string>
<string name="apn_mcc" msgid="9138301167194779180">"MCC"</string>
<string name="apn_mnc" msgid="1276161191283274976">"MNC"</string>
<string name="apn_auth_type" msgid="4286147728662523362">"ປະເພດການພິສູດຢືນຢັນ"</string>
@@ -1645,7 +1647,7 @@
<string name="mobile_insert_sim_card" msgid="7594550403454243732">"ກະລຸນາໃສ່ຊິມກາດ ແລະເປີດເຄື່ອງຄືນໃໝ່"</string>
<string name="mobile_connect_to_internet" msgid="6031886097365170913">"ກະລຸນາເຊື່ອມຕໍ່ກັບອິນເຕີເນັດ"</string>
<string name="location_title" msgid="8664674161765477168">"ທີ່ຢູ່ຂອງຂ້ອຍ"</string>
- <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"ຈຸດທີ່ຕັ້ງສຳລັບໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ"</string>
+ <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"ສະຖານທີ່ສຳລັບໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ"</string>
<string name="location_app_level_permissions" msgid="1298041503927632960">"ສິດອະນຸຍາດແອັບ"</string>
<string name="location_app_permission_summary_location_off" msgid="541372845344796336">"ປິດສະຖານທີ່ແລ້ວ"</string>
<plurals name="location_app_permission_summary_location_on" formatted="false" msgid="7904821382328758218">
@@ -1654,7 +1656,7 @@
</plurals>
<string name="location_category_recent_location_access" msgid="286059523360285026">"ສິດການເຂົ້າເຖິງຫຼ້າສຸດ"</string>
<string name="location_recent_location_access_view_details" msgid="2051602261436245905">"ເບິ່ງລາຍລະອຽດ"</string>
- <string name="location_no_recent_apps" msgid="77502059586413278">"ຫຼ້າສຸດນີ້ບໍ່ມີແອັບຯໃດເອີ້ນໃຊ້ຂໍ້ມູນຕຳແໜ່ງ"</string>
+ <string name="location_no_recent_apps" msgid="77502059586413278">"ບໍ່ມີແອັບທີ່ຮ້ອງຂໍສະຖານທີ່ເມື່ອບໍ່ດົນມານີ້"</string>
<string name="location_no_recent_accesses" msgid="6289916310397279890">"ບໍ່ມີແອັບໃດເຂົ້າເຖິງສະຖານທີ່ຫຼ້າສຸດ"</string>
<string name="location_high_battery_use" msgid="7177199869979522663">"ໃຊ້ແບັດເຕີຣີ່ຫຼາຍ"</string>
<string name="location_low_battery_use" msgid="5030448574501435888">"ໃຊ້ແບັດເຕີຣີ່ໜ້ອຍ"</string>
@@ -1753,7 +1755,7 @@
<string name="lockpattern_recording_inprogress" msgid="4060818382176523671">"ປ່ອຍນິ້ວມືຂອງທ່ານເມື່ອເຮັດແລ້ວ."</string>
<string name="lockpattern_recording_incorrect_too_short" msgid="6374760294545431845">"ໃຫ້ເຊື່ອມຕໍ່ຢ່າງໜ້ອຍ <xliff:g id="NUMBER">%d</xliff:g> ຈຸດເຂົ້າຫາກັນ. ແລ້ວລອງໃໝ່ອີກຄັ້ງ."</string>
<string name="lockpattern_pattern_entered_header" msgid="2108106638322637851">"ຮູບແບບຖືກບັນທຶກແລ້ວ"</string>
- <string name="lockpattern_need_to_confirm" msgid="4079482507985867389">"ແຕ້ມຮູບແບບຄືນອີກຄັ້ງເພື່ອຢັ້ງຢືນ"</string>
+ <string name="lockpattern_need_to_confirm" msgid="4079482507985867389">"ແຕ້ມຮູບແບບຄືນອີກຄັ້ງເພື່ອຢືນຢັນ"</string>
<string name="lockpattern_pattern_confirmed_header" msgid="5603156929428721407">"ຮູບແບບປົດລັອກໃໝ່ຂອງທ່ານ"</string>
<string name="lockpattern_confirm_button_text" msgid="7059311304112902598">"ຢືນຢັນ"</string>
<string name="lockpattern_restart_button_text" msgid="4322968353922529868">"ແຕ້ມໃໝ່"</string>
@@ -1796,7 +1798,7 @@
<string name="install_all_warning" product="device" msgid="9141585291103603515">"ອຸປະກອນ ແລະ ຂໍ້ມູນສ່ວນຕົວຂອງທ່ານຈະສາມາດຖືກແອັບທີ່ບໍ່ຮູ້ຈັກໂຈມຕີໄດ້ງ່າຍຂຶ້ນ. ໂດຍການຕິດຕັ້ງແອັບຕ່າງໆຈາກແຫລ່ງທີ່ມາເຫຼົ່ານີ້, ແມ່ນທ່ານຍອມຮັບວ່າຈະຮັບຜິດຊອບຕໍ່ຄວາມເສຍຫາຍທີ່ເກີດຂຶ້ນກັບອຸປະກອນຂອງທ່ານ ຫຼື ການສູນເສຍຂໍ້ມູນທີ່ອາດເກີດຂຶ້ນຈາກການນຳໃຊ້ແອັບເຫຼົ່ານັ້ນ."</string>
<string name="advanced_settings" msgid="6282069364060968122">"ການຕັ້ງຄ່າຂັ້ນສູງ"</string>
<string name="advanced_settings_summary" msgid="5912237062506771716">"ເປີດໃຊ້ໂຕເລືອກການຕັ້ງຄ່າເພີ່ມເຕີມ."</string>
- <string name="application_info_label" msgid="3886253474964599105">"ຂໍ້ມູນແອັບຯ"</string>
+ <string name="application_info_label" msgid="3886253474964599105">"ຂໍ້ມູນແອັບ"</string>
<string name="storage_label" msgid="1109537840103290384">"ພື້ນທີ່ຈັດເກັບຂໍ້ມູນ"</string>
<string name="auto_launch_label" msgid="47089737922907379">"ເປີດຕາມຄ່າເລີ່ມຕົ້ນ"</string>
<string name="auto_launch_label_generic" msgid="7865828543459493308">"ຄ່າເລີ່ມຕົ້ນ"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"ການແຈ້ງເຕືອນແບບສັ່ນເຕືອນ"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"ສຽງພ້ອມການສັ່ນເຕືອນ"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"ການສັ່ນເມື່ອສຳຜັດ"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"ໃຊ້ບໍລິການ"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"ໃຊ້ການແກ້ໄຂສີ"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"ໃຊ້ຄຳບັນຍາຍ"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"ໃຊ້ການບໍລິການ"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"ໃຊ້ການແກ້ໄຂສີ"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"ໃຊ້ຄຳບັນຍາຍ"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"ສືບຕໍ່"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"ເຄື່ອງຊ່ວຍຟັງ"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"ບໍ່ໄດ້ເຊື່ອມຕໍ່ການຊ່ວຍຟັງ"</string>
@@ -2391,7 +2393,7 @@
<string name="usage_type_computed_power" msgid="2594890316149868151">"ການນຳໃຊ້ພະລັງງານທີ່ຄຳນວນໄວ້"</string>
<string name="usage_type_actual_power" msgid="8067253427718526111">"ການນຳໃຊ້ພະລັງງານທີ່ຕິດຕາມ"</string>
<string name="battery_action_stop" msgid="1866624019460630143">"ບັງຄັບປິດ"</string>
- <string name="battery_action_app_details" msgid="1077011181969550402">"ຂໍ້ມູນແອັບຯ"</string>
+ <string name="battery_action_app_details" msgid="1077011181969550402">"ຂໍ້ມູນແອັບ"</string>
<string name="battery_action_app_settings" msgid="587998773852488539">"ການຕັ້ງຄ່າແອັບຯ"</string>
<string name="battery_action_display" msgid="4887913003634317465">"ການຕັ້ງຄ່າໜ້າຈໍ"</string>
<string name="battery_action_wifi" msgid="7123520587925323824">"ການຕັ້ງຄ່າ Wi-Fi"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"ເປີດ"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"ໃຊ້ຕົວປະຢັດແບັດເຕີຣີ"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"ໃຊ້ຕົວປະຢັດແບັດເຕີຣີ"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"ເປີດໃຊ້ອັດຕະໂນມັດ"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"ບໍ່ມີປິດ"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"at <xliff:g id="PERCENT">%1$s</xliff:g>battery"</string>
@@ -2538,7 +2540,7 @@
<string name="credentials_settings_not_available" msgid="5490259681690183274">"ບໍ່ມີຂໍ້ມູນຮັບຮອງໂຕສຳລັບຜູ່ໃຊ້ນີ້"</string>
<string name="credential_for_vpn_and_apps" msgid="2462642486949593841">"ຕິດຕັ້ງສຳລັບ VPN ແລະ ແອັບຕ່າງໆແລ້ວ"</string>
<string name="credential_for_wifi" msgid="2903295786961726388">"ຕິດຕັ້ງສຳລັບ Wi-Fi ແລ້ວ"</string>
- <string name="credentials_reset_hint" msgid="3484350477764088169">"ລຶບເນື້ອຫາທັງໝົດອອກ?"</string>
+ <string name="credentials_reset_hint" msgid="3484350477764088169">"ລຶບເນື້ອຫາທັງໝົດອອກບໍ?"</string>
<string name="credentials_erased" msgid="7287088033523869085">"ພື້ນທີ່ຈັດເກັບຂໍ້ມູນຮັບຮອງຖືກລຶບແລ້ວ."</string>
<string name="credentials_not_erased" msgid="9137227570738627637">"ບ່ອນຈັດເກັບຂໍ້ມູນຮັບຮອງບໍ່ສາມາດຖືກລຶບໄດ້."</string>
<string name="usage_access_title" msgid="7981321142726540574">"ແອັບທີ່ມີສິດອະນຸຍາດເຂົ້າເຖິງ"</string>
@@ -2922,8 +2924,8 @@
<string name="nfc_payment_favor_default" msgid="7555356982142464260">"ທຸກເທື່ອ"</string>
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"ຍົກເວັ້ນເມື່ອແອັບການຊຳລະເງິນອື່ນເປີດ"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"ຢູ່ທີ່ຊ່ອງແຕະ ແລະຈ່າຍ, ຈ່າຍດ້ວຍ:"</string>
- <string name="nfc_how_it_works_title" msgid="6531433737926327904">"ການຈ່າຍຢູ່ປາຍທາງ"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"ຕັ້ງແອັບການຊຳລະເງິນ. ຈາກນັ້ນຈັບໂທລະສັບຂອງທ່ານທາງດ້ານຫຼັງໄປຈົນຮອດບ່ອນວາງໃດໜຶ່ງທີ່ມີສັນຍາລັກບໍ່ມີການສຳຜັດ."</string>
+ <string name="nfc_how_it_works_title" msgid="6531433737926327904">"ການຈ່າຍເງິນຢູ່ເຄື່ອງຈ່າຍເງິນ"</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"ຕັ້ງແອັບການຈ່າຍເງິນ. ຈາກນັ້ນຈັບໂທລະສັບຂອງທ່ານທາງດ້ານຫຼັງໄປຈົນຮອດບ່ອນວາງໃດໜຶ່ງທີ່ມີສັນຍາລັກ contactless."</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"ໄດ້ແລ້ວ"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"ເພີ່ມເຕີມ..."</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"ກຳນົດເປັນຄ່າທີ່ທ່ານຕ້ອງການ?"</string>
@@ -3401,7 +3403,7 @@
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ໝວດໝູ່</item>
<item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ໝວດໝູ່</item>
</plurals>
- <string name="no_channels" msgid="8884254729302501652">"This app has not posted any notifications"</string>
+ <string name="no_channels" msgid="8884254729302501652">"ແອັບນີ້ຍັງບໍ່ໄດ້ໂພສການແຈ້ງເຕືອນໃດເທື່ອ"</string>
<string name="app_settings_link" msgid="8465287765715790984">"ການຕັ້ງຄ່າເພີ່ມເຕີມໃນແອັບ"</string>
<string name="app_notification_listing_summary_zero" msgid="4047782719487686699">"ເປີດສຳລັບທຸກແອັບ"</string>
<plurals name="app_notification_listing_summary_others" formatted="false" msgid="1161774065480666519">
@@ -3707,7 +3709,7 @@
<string name="high_power_filter_on" msgid="5294209328473386403">"ບໍ່ໄດ້ປັບໃຫ້ເໝາະສົມ"</string>
<string name="high_power_on" msgid="3573501822510580334">"ບໍ່ໄດ້ປັບໃຫ້ເໝາະສົມ"</string>
<string name="high_power_off" msgid="5906679734326490426">"ກຳລັງປັບການໃຊ້ແບັດເຕີຣີໃຫ້ເໝາະສົມ"</string>
- <string name="high_power_system" msgid="739584574711292753">"ການປັບແບັດເຕີຣີໃຫ້ເໝາະສົມບໍ່ມີໃຫ້ໃຊ້ງານ"</string>
+ <string name="high_power_system" msgid="739584574711292753">"ບໍ່ສາມາດໃຊ້ການປັບແບັດເຕີຣີໃຫ້ເໝາະສົມໄດ້"</string>
<string name="high_power_desc" msgid="333756885680362741">"ບໍ່ນໍາໃຊ້ການປັບແບັດເຕີຣີໃຫ້ເໝາະສົມ. ອາດຈະເຮັດໃຫ້ແບັດເຕີຣີຂອງທ່ານໝົດໄວ."</string>
<string name="high_power_prompt_title" msgid="2805745781720454052">"ໃຫ້ແອັບເຮັດວຽກໃນພື້ນຫຼັງໄດ້ຕະຫຼອດເວລາບໍ?"</string>
<string name="high_power_prompt_body" msgid="8067395096053552289">"ການອະນຸຍາດໃຫ້ <xliff:g id="APP_NAME">%1$s</xliff:g> ເຮັດວຽກໃນພື້ນຫຼັງໄດ້ຕະຫຼອດເວລາອາດຫຼຸດອາຍຸແບັດເຕີຣີລົງ. \n\nທ່ານສາມາດປ່ຽນແປງຄ່ານີ້ໃນພາຍຫຼັງໄດ້ຈາກການຕັ້ງຄ່າ > ແອັບ & ການແຈ້ງເຕືອນ."</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"ຫາກອຸປະກອນຖືກລັອກໄວ້, ຈະມີການປ້ອງກັນບໍ່ໃຫ້ພິມຕອບກັບ ຫຼື ຂໍ້ຄວາມອື່ນໆໃນການແຈ້ງເຕືອນ"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"ຕົວກວດການສະກົດຄຳເລີ່ມຕົ້ນ"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"ເລືອກຕົວກວດການສະກົດຄຳ"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"ໃຊ້ຕົວກວດການສະກົດຄຳ"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"ໃຊ້ຕົວກວດການສະກົດຄຳ"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"ບໍ່ໄດ້ເລືອກ"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(ບໍ່ມີ)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"ເພື່ອຊ່ວຍເພີ່ມພື້ນທີ່ຫວ່າງສຳລັບການຈັດເກັບຂໍ້ມູນ, ຕົວຈັດການບ່ອນຈັດເກັບຂໍ້ມູນຈະລຶບຮູບພາບ ແລະ ວິດີໂອທີ່ສຳຮອງຂໍ້ມູນໄວ້ອອກຈາກອຸປະກອນຂອງທ່ານ."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"ລຶບຮູບພາບ ແລະ ວິດີໂອ"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"ຕົວຈັດການບ່ອນຈັດເກັບຂໍ້ມູນ"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"ໃຊ້ຕົວຈັດການບ່ອນຈັດເກັບຂໍ້ມູນ"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"ໃຊ້ຕົວຈັດການບ່ອນຈັດເກັບຂໍ້ມູນ"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"ອັດຕະໂນມັດ"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"ຕັ້ງຄ່າເອງ"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"ສ້າງພື້ນທີ່ຈັດເກັບຂໍ້ມູນເພີ່ມ"</string>
@@ -4135,9 +4137,9 @@
<string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"ເພື່ອກວດສອບເວລາ, ການແຈ້ງເຕືອນ ແລະ ຂໍ້ມູນອື່ນໆ, ໃຫ້ແຕະໃສ່ໜ້າຈໍຂອງທ່ານ."</string>
<string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"ປັດລາຍນິ້ວມືສຳລັບການແຈ້ງເຕືອນ"</string>
<string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"ປັດລາຍນິ້ວມື"</string>
- <string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"ເພື່ອກວດເບິ່ງການແຈ້ງເຕືອນຂອງທ່ານ, ໃຫ້ເລື່ອນລົງໃສ່ເຊັນເຊີນລາຍນິ້ວມືທີ່ຢູ່ຫຼັງໂທລະສັບຂອງທ່ານ"</string>
- <string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"ເພື່ອກວດເບິ່ງການແຈ້ງເຕືອນຂອງທ່ານ, ໃຫ້ເລື່ອນລົງໃສ່ເຊັນເຊີນລາຍນິ້ວມືທີ່ຢູ່ຫຼັງແທັບເລັດຂອງທ່ານ"</string>
- <string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="7950264130913070035">"ເພື່ອກວດເບິ່ງການແຈ້ງເຕືອນຂອງທ່ານ, ໃຫ້ເລື່ອນລົງໃສ່ເຊັນເຊີນລາຍນິ້ວມືທີ່ຢູ່ຫຼັງອຸປະກອນຂອງທ່ານ"</string>
+ <string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"ເພື່ອກວດເບິ່ງການແຈ້ງເຕືອນຂອງທ່ານ, ໃຫ້ເລື່ອນລົງໃສ່ເຊັນເຊີນລາຍນິ້ວມືທີ່ຢູ່ຫຼັງໂທລະສັບຂອງທ່ານ."</string>
+ <string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"ເພື່ອກວດເບິ່ງການແຈ້ງເຕືອນຂອງທ່ານ, ໃຫ້ເລື່ອນລົງໃສ່ເຊັນເຊີນລາຍນິ້ວມືທີ່ຢູ່ຫຼັງແທັບເລັດຂອງທ່ານ."</string>
+ <string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="7950264130913070035">"ເພື່ອກວດເບິ່ງການແຈ້ງເຕືອນຂອງທ່ານ, ໃຫ້ເລື່ອນລົງໃສ່ເຊັນເຊີນລາຍນິ້ວມືທີ່ຢູ່ຫຼັງອຸປະກອນຂອງທ່ານ."</string>
<string name="fingerprint_swipe_for_notifications_suggestion_title" msgid="948946491233738823">"ເບິ່ງການແຈ້ງເຕືອນແບບດ່ວນ"</string>
<string name="gesture_setting_on" msgid="7573680730101327866">"ເປີດ"</string>
<string name="gesture_setting_off" msgid="2540159841716890511">"ປິດ"</string>
diff --git a/tests/CarDeveloperOptions/res/values-lt/arrays.xml b/tests/CarDeveloperOptions/res/values-lt/arrays.xml
index 18c51ce..b7ef95c 100644
--- a/tests/CarDeveloperOptions/res/values-lt/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-lt/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"vykdyti fone"</item>
<item msgid="6423861043647911030">"pritaikymo neįgaliesiems garsas"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Vietovė"</item>
+ <item msgid="6656077694190491067">"Vietovė"</item>
+ <item msgid="8790228218278477369">"Vietovė"</item>
+ <item msgid="7836406246005211990">"Vibruoti"</item>
+ <item msgid="3951439024549922598">"Skaityti kontaktus"</item>
+ <item msgid="8802152411647068">"Keisti kontaktus"</item>
+ <item msgid="229544934599698735">"Skaityti skambučių žurnalą"</item>
+ <item msgid="7396102294405899613">"Keisti skambučių žurnalą"</item>
+ <item msgid="3597797992398484655">"Nuskaityti kalendorių"</item>
+ <item msgid="2705975774250907343">"Keisti kalendorių"</item>
+ <item msgid="4668747371441932697">"Vietovė"</item>
+ <item msgid="1487578921720243646">"Paskelbti pranešimą"</item>
+ <item msgid="4636080349724146638">"Vietovė"</item>
+ <item msgid="673510900286463926">"Skambinti į telefoną"</item>
+ <item msgid="542083422784609790">"Skaityti SMS / MMS"</item>
+ <item msgid="1033780373029588436">"Rašyti SMS / MMS"</item>
+ <item msgid="5647111115517787488">"Gauti SMS / MMS"</item>
+ <item msgid="8591105601108455893">"Gauti SMS / MMS"</item>
+ <item msgid="7730995008517841903">"Gauti SMS / MMS"</item>
+ <item msgid="2613033109026626086">"Gauti SMS / MMS"</item>
+ <item msgid="3037159047591081136">"Siųsti SMS / MMS"</item>
+ <item msgid="4726682243833913568">"Skaityti SMS / MMS"</item>
+ <item msgid="6555678522277865572">"Rašyti SMS / MMS"</item>
+ <item msgid="6981734935578130884">"Keisti nustatymus"</item>
+ <item msgid="8705854389991425629">"Piešti viršuje"</item>
+ <item msgid="5861356020344153651">"Pasiekti pranešimus"</item>
+ <item msgid="78432174621628659">"Fotoaparatas"</item>
+ <item msgid="3986116419882154794">"Įrašyti garso įrašą"</item>
+ <item msgid="4516840825756409490">"Leisti garso įrašą"</item>
+ <item msgid="6811712502798183957">"Skaityti iškarpinę"</item>
+ <item msgid="2780369012602289114">"Keisti iškarpinę"</item>
+ <item msgid="2331359440170850868">"Medijos mygtukai"</item>
+ <item msgid="6133599737122751231">"Garso sutelktis"</item>
+ <item msgid="6844485713404805301">"Pagrindinis garsumas"</item>
+ <item msgid="1600379420669104929">"Balso garsumas"</item>
+ <item msgid="6296768210470214866">"Skambučio garsumas"</item>
+ <item msgid="510690696071629241">"Medijų garsumas"</item>
+ <item msgid="406861638631430109">"Signalo garsumas"</item>
+ <item msgid="4715864795872233884">"Pranešimo garsumas"</item>
+ <item msgid="2311478519251301183">"„Bluetooth“ garsumas"</item>
+ <item msgid="5133991377896747027">"Neužmigdyti"</item>
+ <item msgid="2464189519136248621">"Vietovė"</item>
+ <item msgid="2062677934050803037">"Vietovė"</item>
+ <item msgid="1735171933192715957">"Gauti naudojimo statistiką"</item>
+ <item msgid="1014093788778383554">"Nutildyti / įjungti mikrofono garsą"</item>
+ <item msgid="4199297950608622850">"Rodyti pranešimą"</item>
+ <item msgid="2527962435313398821">"Projektuoti mediją"</item>
+ <item msgid="5117506254221861929">"Suaktyvinti VPN"</item>
+ <item msgid="8291198322681891160">"Rašymo ekrano fonas"</item>
+ <item msgid="7106921284621230961">"Pagalbinė struktūra"</item>
+ <item msgid="4496533640894624799">"Pagalbinė ekrano kopija"</item>
+ <item msgid="2598847264853993611">"Skaityti telefono būseną"</item>
+ <item msgid="9215610846802973353">"Pridėti balso pašto pranešimą"</item>
+ <item msgid="9186411956086478261">"Naudoti SIP"</item>
+ <item msgid="6884763100104539558">"Apdoroti siunčiamąjį skambutį"</item>
+ <item msgid="125513972170580692">"Piršto antspaudas"</item>
+ <item msgid="2556071024281275619">"Kūno jutikliai"</item>
+ <item msgid="617168514928339387">"Skaityti transliacijas mobiliuoju"</item>
+ <item msgid="7134693570516523585">"Imituoti vietovę"</item>
+ <item msgid="7224489175375229399">"Skaityti saugyklą"</item>
+ <item msgid="8472735063903258202">"Rašyti į saugyklą"</item>
+ <item msgid="4069276819909595110">"Įjungti ekraną"</item>
+ <item msgid="1228338896751121025">"Gauti paskyras"</item>
+ <item msgid="3181581793459233672">"Vykdyti fone"</item>
+ <item msgid="2340936043025374076">"Pritaikymo neįgaliesiems garsas"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Trumpa"</item>
<item msgid="4816511817309094890">"Vidutinis"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Niekada neleisti"</item>
<item msgid="8184570120217958741">"Visada leisti"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Įprasta"</item>
+ <item msgid="5101233285497327432">"Vidutiniška"</item>
+ <item msgid="1555861583162930714">"Mažas"</item>
+ <item msgid="1719683776264798117">"Kritinė"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Įprasta"</item>
+ <item msgid="6107138933849816768">"Vidutinė"</item>
+ <item msgid="182695359839047859">"Mažas"</item>
+ <item msgid="8577246509202964244">"Kritinė"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Nuolatinė"</item>
<item msgid="167418068739176448">"Populiariausia veikla"</item>
diff --git a/tests/CarDeveloperOptions/res/values-lt/strings.xml b/tests/CarDeveloperOptions/res/values-lt/strings.xml
index 7fbf042..73f100a 100644
--- a/tests/CarDeveloperOptions/res/values-lt/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-lt/strings.xml
@@ -85,8 +85,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Sumažinkite arba padidinkite ekrane rodomą tekstą."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Padaryti mažesnius"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Padaryti didesnius"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Pavyzdinis tekstas"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Nuostabusis Ozo šalies burtininkas"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"11 skyrius. Nuostabusis Smaragdo miestas"</string>
@@ -373,7 +372,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Profilio informacija"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Paskyros"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Vietovė"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Naudoti vietovę"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Naudoti vietovę"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Išjungti"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">Įjungta – <xliff:g id="COUNT_1">%1$d</xliff:g> programa gali pasiekti vietovę</item>
@@ -384,7 +383,7 @@
<string name="location_settings_loading_app_permission_stats" msgid="7818169326621327628">"Įkeliama…"</string>
<string name="account_settings_title" msgid="7870321267198486578">"Paskyros"</string>
<string name="security_settings_title" msgid="8228075165942416425">"Sauga"</string>
- <string name="encryption_and_credential_settings_title" msgid="6911729638397745353">"Šifruotė ir prisijungimo duomenys"</string>
+ <string name="encryption_and_credential_settings_title" msgid="6911729638397745353">"Šifruotė ir prisi. duom."</string>
<string name="encryption_and_credential_settings_summary" product="default" msgid="468749700109808546">"Telefonas užšifruotas"</string>
<string name="decryption_settings_summary" product="default" msgid="7401802133199522441">"Telefonas nešifruotas"</string>
<string name="encryption_and_credential_settings_summary" product="tablet" msgid="8170667308598998791">"Įrenginys šifruotas"</string>
@@ -871,7 +870,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Įjungti „Wi-Fi“"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Naudoti „Wi-Fi“"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Naudoti „Wi-Fi“"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"„Wi-Fi“ nustatymai"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Nustatyti ir valdyti bevielius prieigos taškus"</string>
@@ -1139,7 +1138,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Mobiliojo ryšio tinklas"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Jei „Wi‑Fi“ nepasiekiamas, naudokite mobiliojo ryšio tinklą"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Jei mobiliojo ryšio tinklas nepasiekiamas, naudoti „Wi‑Fi“"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Skambinimas naudojant „Wi-Fi“. Nutrūkus „Wi‑Fi“ skambutis bus baigtas."</string>
@@ -2135,9 +2137,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Vibravimas gavus pranešimą"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Vibravimas skambant telefonui"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Palietimų vibravimas"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Naudoti paslaugą"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Naudoti spalvų taisymą"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Naudoti subtitrus"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Naudoti paslaugą"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Naudoti spalvų taisymą"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Naudoti subtitrus"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Tęsti"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Klausos aparatai"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Prijungtų klausos aparatų nėra"</string>
@@ -2531,7 +2533,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Įjungti"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Naudoti Akumuliatoriaus tausojimo priemonę"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Naudoti Akumuliatoriaus tausojimo priemonę"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Įjungti automatiškai"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Niekada"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"kai akumuliatoriaus įkrovos lygis yra <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
@@ -2646,7 +2648,7 @@
<string name="sms_access_restriction_enabled" msgid="3006320256764718303">"Apriboti SMS ir skambučių žurnalo prieigą"</string>
<string name="sms_access_restriction_enabled_summary" msgid="9011946580977780063">"Tik numatytosios telefono ir susirašinėjimo programos turi SMS ir skambučių žurnalo leidimus"</string>
<string name="no_trust_agents" msgid="5757792915019113084">"Nėra jokių galimų „trust agents“"</string>
- <string name="add_device_admin_msg" msgid="3573765823476931173">"Suaktyvinti įrenginio administravimo programą?"</string>
+ <string name="add_device_admin_msg" msgid="3573765823476931173">"Suaktyvinti įren. administravimo progr.?"</string>
<string name="add_device_admin" msgid="1621152410207260584">"Suaktyvinti šio įrenginio administravimo programą"</string>
<string name="device_admin_add_title" msgid="6097881332139146897">"Įrenginio administratorius"</string>
<string name="device_admin_warning" msgid="4421817419326480449">"Suaktyvinus šią administravimo programą programai <xliff:g id="APP_NAME">%1$s</xliff:g> bus leidžiama vykdyti toliau nurodytas operacijas."</string>
@@ -4140,7 +4142,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Jei įrenginys užrakintas, neleisti įvesti atsakymų ar kito teksto pranešimuose"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Numatytasis rašybos tikrinimas"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Rašybos tikrinimo pasirinkimas"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Naudoti rašybos tikrinimą"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Naudoti rašybos tikrinimą"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Nepasirinkta"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(nėra)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4241,7 +4243,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Kad padėtų atlaisvinti saugyklos vietos, saugyklos tvarkytuvė iš įrenginio pašalina nuotraukas ir vaizdo įrašus, kurių atsarginė kopija sukurta."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Pašalinti nuotraukas ir vaizdo įrašus"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Saugyklos tvarkytuvė"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Naudoti Saugyklos tvarkytuvę"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Naudoti Saugyklos tvarkytuvę"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatiniai"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Neautomatiniai"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Atlaisvinkite vietos dabar"</string>
diff --git a/tests/CarDeveloperOptions/res/values-lv/arrays.xml b/tests/CarDeveloperOptions/res/values-lv/arrays.xml
index 32d2fbc..69c113f 100644
--- a/tests/CarDeveloperOptions/res/values-lv/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-lv/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"darbināt fonā"</item>
<item msgid="6423861043647911030">"pieejamības paziņojumu skaļums"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Atrašanās vieta"</item>
+ <item msgid="6656077694190491067">"Atrašanās vieta"</item>
+ <item msgid="8790228218278477369">"Atrašanās vieta"</item>
+ <item msgid="7836406246005211990">"Vibrācija"</item>
+ <item msgid="3951439024549922598">"Lasīt kontaktpersonas"</item>
+ <item msgid="8802152411647068">"Mainīt kontaktpersonu informāciju"</item>
+ <item msgid="229544934599698735">"Nolasīt zvanu žurnālu"</item>
+ <item msgid="7396102294405899613">"Modificēt zvanu žurnālu"</item>
+ <item msgid="3597797992398484655">"Lasīt kalendāru"</item>
+ <item msgid="2705975774250907343">"Modificēt kalendāru"</item>
+ <item msgid="4668747371441932697">"Atrašanās vieta"</item>
+ <item msgid="1487578921720243646">"Publicēt paziņojumu"</item>
+ <item msgid="4636080349724146638">"Atrašanās vieta"</item>
+ <item msgid="673510900286463926">"Zvanīt uz tālruņa numuru"</item>
+ <item msgid="542083422784609790">"Lasīt īsziņu vai multiziņu"</item>
+ <item msgid="1033780373029588436">"Rakstīt īsziņu vai multiziņu"</item>
+ <item msgid="5647111115517787488">"Saņemt īsziņu vai multiziņu"</item>
+ <item msgid="8591105601108455893">"Saņemt īsziņu vai multiziņu"</item>
+ <item msgid="7730995008517841903">"Saņemt īsziņu vai multiziņu"</item>
+ <item msgid="2613033109026626086">"Saņemt īsziņu vai multiziņu"</item>
+ <item msgid="3037159047591081136">"Sūtīt īsziņu vai multiziņu"</item>
+ <item msgid="4726682243833913568">"Lasīt īsziņu vai multiziņu"</item>
+ <item msgid="6555678522277865572">"Rakstīt īsziņu vai multiziņu"</item>
+ <item msgid="6981734935578130884">"Modificēt iestatījumus"</item>
+ <item msgid="8705854389991425629">"Zīmēt augšdaļā"</item>
+ <item msgid="5861356020344153651">"Piekļūt paziņojumiem"</item>
+ <item msgid="78432174621628659">"Kamera"</item>
+ <item msgid="3986116419882154794">"Ierakstīt audio"</item>
+ <item msgid="4516840825756409490">"Atskaņot audio"</item>
+ <item msgid="6811712502798183957">"Lasīt starpliktuvi"</item>
+ <item msgid="2780369012602289114">"Modificēt starpliktuvi"</item>
+ <item msgid="2331359440170850868">"Multivides pogas"</item>
+ <item msgid="6133599737122751231">"Audio uzsvars"</item>
+ <item msgid="6844485713404805301">"Galvenais skaļums"</item>
+ <item msgid="1600379420669104929">"Balss skaļums"</item>
+ <item msgid="6296768210470214866">"Zvana skaļums"</item>
+ <item msgid="510690696071629241">"Multivides skaļums"</item>
+ <item msgid="406861638631430109">"Signāla skaļums"</item>
+ <item msgid="4715864795872233884">"Paziņojumu skaļums"</item>
+ <item msgid="2311478519251301183">"Bluetooth apjoms"</item>
+ <item msgid="5133991377896747027">"Neļaut pāriet miega rež."</item>
+ <item msgid="2464189519136248621">"Atrašanās vieta"</item>
+ <item msgid="2062677934050803037">"Atrašanās vieta"</item>
+ <item msgid="1735171933192715957">"Iegūt lietojuma statistiku"</item>
+ <item msgid="1014093788778383554">"Izslēgt/ieslēgt mikrofonu"</item>
+ <item msgid="4199297950608622850">"Rādīt paziņojumu"</item>
+ <item msgid="2527962435313398821">"Projicēt saturu"</item>
+ <item msgid="5117506254221861929">"Aktivizēt VPN"</item>
+ <item msgid="8291198322681891160">"Izveidot fona tapeti"</item>
+ <item msgid="7106921284621230961">"Palīdzīga struktūra"</item>
+ <item msgid="4496533640894624799">"Palīdzīgs ekrānuzņēmums"</item>
+ <item msgid="2598847264853993611">"Lasīt tālruņa stāvokļa datus"</item>
+ <item msgid="9215610846802973353">"Pievienot balss pastu"</item>
+ <item msgid="9186411956086478261">"Izmantot SIP"</item>
+ <item msgid="6884763100104539558">"Apstrādāt izejošo zvanu"</item>
+ <item msgid="125513972170580692">"Pirksta nospiedums"</item>
+ <item msgid="2556071024281275619">"Ķermeņa sensori"</item>
+ <item msgid="617168514928339387">"Lasīt šūnu apraides"</item>
+ <item msgid="7134693570516523585">"Neīsta atrašanās vieta"</item>
+ <item msgid="7224489175375229399">"Lasīt krātuves datus"</item>
+ <item msgid="8472735063903258202">"Rakstīt krātuves datus"</item>
+ <item msgid="4069276819909595110">"Ieslēgt ekrānu"</item>
+ <item msgid="1228338896751121025">"Iegūt kontus"</item>
+ <item msgid="3181581793459233672">"Darbināt fonā"</item>
+ <item msgid="2340936043025374076">"Pieejamības paziņojumu skaļums"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Īss"</item>
<item msgid="4816511817309094890">"Vidēji svarīgs"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Neatļaut nekad"</item>
<item msgid="8184570120217958741">"Vienmēr atļaut"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normāls"</item>
+ <item msgid="5101233285497327432">"Vidējs"</item>
+ <item msgid="1555861583162930714">"Zems"</item>
+ <item msgid="1719683776264798117">"Kritisks"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normāls"</item>
+ <item msgid="6107138933849816768">"Vidējs"</item>
+ <item msgid="182695359839047859">"Zems"</item>
+ <item msgid="8577246509202964244">"Kritisks"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Pastāvīgs"</item>
<item msgid="167418068739176448">"Biežākā darbība"</item>
diff --git a/tests/CarDeveloperOptions/res/values-lv/strings.xml b/tests/CarDeveloperOptions/res/values-lv/strings.xml
index b429375..ad2e18f 100644
--- a/tests/CarDeveloperOptions/res/values-lv/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-lv/strings.xml
@@ -84,8 +84,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Palieliniet vai samaziniet tekstu ekrānā."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Samazināt"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Palielināt"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Teksta paraugs"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Brīnumainais burvis no Oza zemes"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"11. nodaļa: Oza zemes brīnumainā Smaragda pilsēta"</string>
@@ -371,7 +370,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Profila informācija"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Konti"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Atrašanās vieta"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Izmantot atrašanās vietu"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Izmantot atrašanās vietu"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Izslēgta"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="zero">Ieslēgts — <xliff:g id="COUNT_1">%1$d</xliff:g> lietotnes var piekļūt atrašanās vietai</item>
@@ -472,7 +471,7 @@
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="4312297515772004580">"Dzēst"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"Pieskarieties sensoram"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Novietojiet pirkstu uz sensora un paceliet to pēc tam, kad sajūtat vibrāciju"</string>
- <string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"Paceliet un vēlreiz pieskar."</string>
+ <string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"Pieskarieties vēlreiz"</string>
<string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Atkārtoti uzlieciet pirkstu, lai pievienotu dažādas pirksta nospieduma daļas."</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"Pirksta nospiedums pievienots"</string>
<string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"Kad tiek rādīta šī ikona, izmantojiet pirksta nospiedumu identifikācijai vai pirkuma autorizēšanai."</string>
@@ -854,7 +853,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Ieslēgt Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Izmantot Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Izmantot Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi-Fi iestatījumi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Bezvadu piekļuves punktu iestatīšana un pārvaldība"</string>
@@ -1121,7 +1120,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Mobilie dati"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Ja Wi-Fi savienojums nav pieejams, izmantot mobilo tīklu"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Ja mobilais tīkls nav pieejams, izmantot Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Zvans Wi-Fi tīklā. Ja Wi-Fi savienojums tiks zaudēts, zvans beigsies."</string>
@@ -1685,7 +1687,7 @@
<string name="location_scanning_bluetooth_always_scanning_description" msgid="3796673798637848690">"Ļauj lietotnēm un pakalpojumiem meklēt tuvumā esošas ierīces vienmēr, pat ja Bluetooth ir izslēgts. Šo iestatījumu var izmantot, piemēram, lai uzlabotu atrašanās vietas funkcijas un pakalpojumus."</string>
<string name="managed_profile_location_services" msgid="224925483299159541">"Atrašanās vietu pakalpojumi darbam"</string>
<string name="location_network_based" msgid="1535812159327454835">"Wi-Fi un mob. tīklu atr. vieta"</string>
- <string name="location_neighborhood_level" msgid="8459352741296587916">"Ļaut lietotnēm izmantot Google atrašanās vietas pakalpojumu, lai ātrāk noteiktu jūsu atrašanās vietu. Tiks apkopoti un nosūtīti uz Google serveriem anonīmi atrašanās vietas dati."</string>
+ <string name="location_neighborhood_level" msgid="8459352741296587916">"Ļaut lietotnēm izmantot Google atrašanās vietas pakalpojumu, lai ātrāk noteiktu jūsu atrašanās vietu. Tiks vākti un nosūtīti uz Google serveriem anonīmi atrašanās vietas dati."</string>
<string name="location_neighborhood_level_wifi" msgid="6120133551482003840">"Wi-Fi noteikta atrašanās vieta"</string>
<string name="location_gps" msgid="688049341158297763">"GPS satelīti"</string>
<string name="location_street_level" product="tablet" msgid="4459804798444296650">"Ļaut lietotnēm izmantot jūsu planšetdatorā esošo GPS, lai noteiktu jūsu atrašanās vietu."</string>
@@ -2114,9 +2116,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Paziņojuma vibrācija"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Zvana vibrācija"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Pieskāriena vibrācija"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Izmantot pakalpojumu"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Izmantot krāsu korekciju"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Izmantot parakstus"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Izmantot pakalpojumu"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Izmantot krāsu korekciju"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Izmantot subtitrus"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Turpināt"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Dzirdes aparāti"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Nav pievienots neviens dzirdes aparāts."</string>
@@ -2349,9 +2351,9 @@
<string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"Šī lietotne varēs izmantot akumulatora enerģiju fonā. Tādējādi akumulators var izlādēties ātrāk nekā parasti."</string>
<string name="battery_tip_unrestrict_app_dialog_ok" msgid="9154938931448151479">"Noņemt"</string>
<string name="battery_tip_unrestrict_app_dialog_cancel" msgid="7331148618292397166">"Atcelt"</string>
- <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"Jūsu lietotnes patērē normālu akumulatora enerģijas apjomu. Ja lietotnes patērē pārāk daudz akumulatora enerģijas, jūsu tālrunī tiks parādītas ieteicamās darbības.\n\nJa akumulatora uzlādes līmenis ir zems, varat jebkurā laikā ieslēgt akumulatora jaudas taupīšanas režīmu."</string>
- <string name="battery_tip_dialog_summary_message" product="tablet" msgid="1721081030632329647">"Jūsu lietotnes patērē normālu akumulatora enerģijas apjomu. Ja lietotnes patērē pārāk daudz akumulatora enerģijas, jūsu planšetdatorā tiks parādītas ieteicamās darbības.\n\nJa akumulatora uzlādes līmenis ir zems, varat jebkurā laikā ieslēgt akumulatora jaudas taupīšanas režīmu."</string>
- <string name="battery_tip_dialog_summary_message" product="device" msgid="146872407040848465">"Jūsu lietotnes patērē normālu akumulatora enerģijas apjomu. Ja lietotnes patērē pārāk daudz akumulatora enerģijas, jūsu ierīcē tiks parādītas ieteicamās darbības.\n\nJa akumulatora uzlādes līmenis ir zems, varat jebkurā laikā ieslēgt akumulatora jaudas taupīšanas režīmu."</string>
+ <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"Jūsu lietotnes patērē normālu akumulatora enerģijas apjomu. Ja lietotnes patērē pārāk daudz akumulatora enerģijas, jūsu tālrunī tiks parādītas ieteicamās darbības.\n\nJa akumulatora uzlādes līmenis ir zems, varat jebkurā laikā ieslēgt akumulatora enerģijas taupīšanas režīmu."</string>
+ <string name="battery_tip_dialog_summary_message" product="tablet" msgid="1721081030632329647">"Jūsu lietotnes patērē normālu akumulatora enerģijas apjomu. Ja lietotnes patērē pārāk daudz akumulatora enerģijas, jūsu planšetdatorā tiks parādītas ieteicamās darbības.\n\nJa akumulatora uzlādes līmenis ir zems, varat jebkurā laikā ieslēgt akumulatora enerģijas taupīšanas režīmu."</string>
+ <string name="battery_tip_dialog_summary_message" product="device" msgid="146872407040848465">"Jūsu lietotnes patērē normālu akumulatora enerģijas apjomu. Ja lietotnes patērē pārāk daudz akumulatora enerģijas, jūsu ierīcē tiks parādītas ieteicamās darbības.\n\nJa akumulatora uzlādes līmenis ir zems, varat jebkurā laikā ieslēgt akumulatora enerģijas taupīšanas režīmu."</string>
<string name="smart_battery_manager_title" msgid="5744035036663849515">"Akumulatora pārvaldnieks"</string>
<string name="smart_battery_title" msgid="4919670408532804351">"Automātiska akumulatora enerģijas patēriņa pārvaldība"</string>
<string name="smart_battery_summary" msgid="640027046471198174">"Ierobežojiet akumulatora enerģijas patēriņu tām lietotnēm, kuras neizmantojat bieži"</string>
@@ -2448,7 +2450,7 @@
<string name="battery_sugg_bluetooth_headset" msgid="2421931037149315202">"Mēģiniet izveidot savienojumu ar citu Bluetooth ierīci"</string>
<string name="battery_desc_apps" msgid="6826726880149226823">"Lietotnes darbībai izmantotā akumulatora enerģija"</string>
<string name="battery_sugg_apps_info" msgid="9175761965559743977">"Apturiet lietotnes darbību vai atinstalējiet lietotni"</string>
- <string name="battery_sugg_apps_gps" msgid="489694612870772770">"Atlasiet akumulatora jaudas taupīšanas režīmu"</string>
+ <string name="battery_sugg_apps_gps" msgid="489694612870772770">"Atlasiet akumulatora enerģijas taupīšanas režīmu"</string>
<string name="battery_sugg_apps_settings" msgid="20465932930350295">"Lietotnē var būt pieejami iestatījumi akumulatora enerģijas patēriņa samazināšanai"</string>
<string name="battery_desc_users" msgid="3736510265433457165">"Lietotāja patērētā akumulatora jauda"</string>
<string name="battery_desc_unaccounted" msgid="1713437127406964501">"Dažādu avotu enerģijas patēriņš"</string>
@@ -2480,22 +2482,22 @@
<string name="process_kernel_label" msgid="4175060316414593760">"Android OS"</string>
<string name="process_mediaserver_label" msgid="8591722404282619153">"Mediaserver"</string>
<string name="process_dex2oat_label" msgid="8249082119748556085">"Lietotnes optimizācija"</string>
- <string name="battery_saver" msgid="3989710213758938398">"Akumulatora jaudas taupīšanas režīms"</string>
+ <string name="battery_saver" msgid="3989710213758938398">"Akumulatora enerģijas taupīšanas režīms"</string>
<string name="battery_saver_auto_title" msgid="4158659069641849952">"Automātiska ieslēgšana"</string>
<string name="battery_saver_auto_no_schedule" msgid="739814529432092706">"Nav grafika"</string>
<string name="battery_saver_auto_routine" msgid="886514412067906980">"Atbilstoši jūsu ikdienas grafikam"</string>
<string name="battery_saver_auto_percentage" msgid="5791982309331921556">"Atbilstoši uzlādes līmenim"</string>
- <string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"Akumulatora jaudas taupīšanas režīms ieslēgsies, ja akumulators var izlādēties vēl pirms ierastā uzlādes laika."</string>
+ <string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"Akumulatora enerģijas taupīšanas režīms ieslēgsies, ja akumulators var izlādēties vēl pirms ierastā uzlādes laika."</string>
<string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"Ieslēgsies uzlādes līmenim sasniedzot <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Iestatīt grafiku"</string>
<string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"Izslēgt, kad akumulators ir pilnībā uzlādēts"</string>
- <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"Akumulatora jaudas taupīšanas režīms tiek izslēgts, kad tālruņa uzlādes līmenis ir <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
- <string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"Akumulatora jaudas taupīšanas režīms tiek izslēgts, kad planšetdatora uzlādes līmenis ir <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
- <string name="battery_saver_sticky_description_new" product="device" msgid="5056520668081504111">"Akumulatora jaudas taupīšanas režīms tiek izslēgts, kad ierīces uzlādes līmenis ir <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
+ <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"Akumulatora enerģijas taupīšanas režīms tiek izslēgts, kad tālruņa uzlādes līmenis ir <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
+ <string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"Akumulatora enerģijas taupīšanas režīms tiek izslēgts, kad planšetdatora uzlādes līmenis ir <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
+ <string name="battery_saver_sticky_description_new" product="device" msgid="5056520668081504111">"Akumulatora enerģijas taupīšanas režīms tiek izslēgts, kad ierīces uzlādes līmenis ir <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Ieslēgt"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Izmantot akumulatora jaudas taupīšanas režīmu"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Izmantot akumulatora enerģijas taupīšanas režīmu"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Ieslēgt automātiski"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Nekad"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"ar akumulatora uzlādes līmeni <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
@@ -2741,7 +2743,7 @@
<string name="data_usage_auto_sync_on_dialog" product="tablet" msgid="4935430284683238901">"Visas izmaiņas, ko veiksiet kontos tīmeklī, tiks automātiski pārkopētas planšetdatorā.\n\nDažos kontos planšetdatorā veiktās izmaiņas var automātiski pārkopēt tīmeklī. Šādi darbojas Google konts."</string>
<string name="data_usage_auto_sync_on_dialog" product="default" msgid="5004823486046340090">"Visas izmaiņas, ko veiksiet kontos tīmeklī, tiks automātiski pārkopētas tālrunī.\n\nDažos kontos tālrunī veiktās izmaiņas var automātiski pārkopēt tīmeklī. Šādi darbojas Google konts."</string>
<string name="data_usage_auto_sync_off_dialog_title" msgid="7105334544291643305">"Vai izslēgt datu automātisko sinhronizāciju?"</string>
- <string name="data_usage_auto_sync_off_dialog" msgid="4057984234450947964">"Tiks saglabāti dati un akumulatora lietojums, bet jums vajadzēs manuāli sinhronizēt katru kontu, lai apkopotu jaunāko informāciju. Un jūs nesaņemsiet paziņojumus par atjauninājumiem."</string>
+ <string name="data_usage_auto_sync_off_dialog" msgid="4057984234450947964">"Tiks saglabāti dati un akumulatora lietojums, bet jums vajadzēs manuāli sinhronizēt katru kontu, lai vāktu jaunāko informāciju. Un jūs nesaņemsiet paziņojumus par atjauninājumiem."</string>
<string name="data_usage_cycle_editor_title" msgid="4967309390043599889">"Izmantošanas cikla atiestatīšanas datums"</string>
<string name="data_usage_cycle_editor_subtitle" msgid="6043098041946166597">"Katra mēneša datums:"</string>
<string name="data_usage_cycle_editor_positive" msgid="9155752056537811646">"Iestatīt"</string>
@@ -3166,7 +3168,7 @@
<string name="keywords_touch_vibration" msgid="2081175517528255224">"haptisks, vibrēt, ekrāns, jutīgums"</string>
<string name="keywords_ring_vibration" msgid="4210509151866460210">"skārienjutīgs, vibrācija, tālrunis, zvans, jutīgums, zvanīšana"</string>
<string name="keywords_notification_vibration" msgid="1077515502086745166">"skārienjutīgs, vibrācija, jutīgums"</string>
- <string name="keywords_battery_saver_sticky" msgid="8733804259716284872">"akumulatora jaudas taupīšanas režīms, fiksēts, saglabāties, jaudas taupīšanas režīms, akumulators"</string>
+ <string name="keywords_battery_saver_sticky" msgid="8733804259716284872">"akumulatora enerģijas taupīšanas režīms, fiksēts, saglabāties, enerģijas taupīšanas režīms, akumulators"</string>
<string name="default_sound" msgid="6675629744816442953">"Noklusējuma skaņa"</string>
<string name="sound_settings_summary" msgid="8467549670633195109">"Zvana skaļums: <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="5187301919242823508">"Skaļums, vibrācija, režīms “Netraucēt”"</string>
@@ -3952,7 +3954,7 @@
<string name="condition_zen_title" msgid="2128184708916052585">"Režīms “Netraucēt” ir ieslēgts"</string>
<string name="condition_zen_summary_phone_muted" msgid="4396050395522974654">"Tālruņa skaņa izslēgta"</string>
<string name="condition_zen_summary_with_exceptions" msgid="3435216391993785818">"Ar izņēmumiem"</string>
- <string name="condition_battery_title" msgid="6704870010912986274">"Akumulatora jaudas taupīšana"</string>
+ <string name="condition_battery_title" msgid="6704870010912986274">"Akumulatora enerģijas taupīšana"</string>
<string name="condition_battery_summary" msgid="1236078243905690620">"Funkcijas ir ierobežotas"</string>
<string name="condition_cellular_title" msgid="6605277435894307935">"Mobilie dati ir izslēgti"</string>
<string name="condition_cellular_summary" msgid="3607459310548343777">"Internets ir pieejams, izmantojot tikai Wi-Fi savienojumu"</string>
@@ -4074,7 +4076,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Ja ierīce ir bloķēta, neļaut paziņojumos rakstīt atbildes vai citu tekstu"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Nokl. pareizrakstības pārbaude"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Pareizrakst. pārb. atlasīšana"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Pareizrakstības pārbaudītāja izmantošana"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Izmantot pareizrakstības pārbaudītāju"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Nav atlasīta"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(nav)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4171,7 +4173,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Lai atbrīvotu vietu krātuvē, krātuves pārvaldnieks noņem no jūsu ierīces dublētos fotoattēlus un videoklipus."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Fotoattēlu un videoklipu noņemšana"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Krātuves pārvaldnieks"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Izmantot krātuves pārvaldnieku"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Izmantot krātuves pārvaldnieku"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automātiski"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manuāli"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Atbrīvot vietu"</string>
@@ -4588,7 +4590,7 @@
<string name="wfc_disclaimer_agree_button_text" msgid="4706101805260434404">"TURPINĀT"</string>
<string name="wfc_disclaimer_disagree_text" msgid="908289420390194127">"NĒ, PALDIES"</string>
<string name="wfc_disclaimer_location_title_text" msgid="5696194250838686019">"Atrašanās vieta"</string>
- <string name="wfc_disclaimer_location_desc_text" msgid="3879710366995108723">"Pakalpojuma sniedzējs var apkopot jūsu atrašanās informāciju, lai nodrošinātu šo pakalpojumu.\n\nSkatiet pakalpojuma sniedzēja konfidencialitātes politiku."</string>
+ <string name="wfc_disclaimer_location_desc_text" msgid="3879710366995108723">"Pakalpojuma sniedzējs var vākt jūsu atrašanās informāciju, lai nodrošinātu šo pakalpojumu.\n\nSkatiet pakalpojuma sniedzēja konfidencialitātes politiku."</string>
<string name="forget_passpoint_dialog_message" msgid="3337626966248310367">"Iespējams, zaudēsiet piekļuvi atlikušajam laikam vai datiem. Pirms noņemšanas sazinieties ar pakalpojuma sniedzēju."</string>
<string name="keywords_content_capture" msgid="5401877823529928976">"satura uzņēmums, viedie ieteikumi"</string>
<string name="content_capture" msgid="1709538093513983279">"Viedie ieteikumi"</string>
diff --git a/tests/CarDeveloperOptions/res/values-mcc262-mnc02-b+sr+Latn/strings.xml b/tests/CarDeveloperOptions/res/values-mcc262-mnc02-b+sr+Latn/strings.xml
index d7af2e2..f4c855b 100644
--- a/tests/CarDeveloperOptions/res/values-mcc262-mnc02-b+sr+Latn/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-mcc262-mnc02-b+sr+Latn/strings.xml
@@ -16,5 +16,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="wifi_calling_off_explanation_2" msgid="4142074253083399456">\n\n"Ne možete da upućujete hitne pozive pomoću pozivanja preko Wi-Fi-ja. Ako probate da uputite hitan poziv, uređaj će automatski koristiti mobilnu mrežu. Hitni pozivi mogu da se upućuju samo u oblastima pokrivenim mobilnom mrežom."</string>
+ <string name="wifi_calling_off_explanation_2" msgid="4142074253083399456">\n\n"Ne možete da upućujete hitne pozive pomoću pozivanja preko WiFi-ja. Ako probate da uputite hitan poziv, uređaj će automatski koristiti mobilnu mrežu. Hitni pozivi mogu da se upućuju samo u oblastima pokrivenim mobilnom mrežom."</string>
</resources>
diff --git a/tests/CarDeveloperOptions/res/values-mcc262-mnc02-ne/strings.xml b/tests/CarDeveloperOptions/res/values-mcc262-mnc02-ne/strings.xml
index 51ca01e..48022a0 100644
--- a/tests/CarDeveloperOptions/res/values-mcc262-mnc02-ne/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-mcc262-mnc02-ne/strings.xml
@@ -16,5 +16,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="wifi_calling_off_explanation_2" msgid="4142074253083399456">\n\n"तपाईं Wi-Fi को कल गर्ने सुविधामार्फत आपतकालीन कलहरू गर्न सक्नुहुन्न। तपाईंले आपतकालीन कल गर्न खोज्नुभयो भने तपाईंको यन्त्रले स्वतः मोबाइल नेटवर्कको प्रयोग गर्ने छ। मोबाइल नेटवर्क उपलब्ध भएका क्षेत्रहरूबाट मात्र आपतकालीन कलहरू गर्न सकिन्छ।"</string>
+ <string name="wifi_calling_off_explanation_2" msgid="4142074253083399456">\n\n"तपाईं Wi-Fi को कल गर्ने सुविधामार्फत आपत्कालीन कलहरू गर्न सक्नुहुन्न। तपाईंले आपत्कालीन कल गर्न खोज्नुभयो भने तपाईंको यन्त्रले स्वतः मोबाइल नेटवर्कको प्रयोग गर्ने छ। मोबाइल नेटवर्क उपलब्ध भएका क्षेत्रहरूबाट मात्र आपत्कालीन कलहरू गर्न सकिन्छ।"</string>
</resources>
diff --git a/tests/CarDeveloperOptions/res/values-mcc262-mnc02-sr/strings.xml b/tests/CarDeveloperOptions/res/values-mcc262-mnc02-sr/strings.xml
index e1618bd..0ad1f81 100644
--- a/tests/CarDeveloperOptions/res/values-mcc262-mnc02-sr/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-mcc262-mnc02-sr/strings.xml
@@ -16,5 +16,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="wifi_calling_off_explanation_2" msgid="4142074253083399456">\n\n"Не можете да упућујете хитне позиве помоћу позивања преко Wi-Fi-ја. Ако пробате да упутите хитан позив, уређај ће аутоматски користити мобилну мрежу. Хитни позиви могу да се упућују само у областима покривеним мобилном мрежом."</string>
+ <string name="wifi_calling_off_explanation_2" msgid="4142074253083399456">\n\n"Не можете да упућујете хитне позиве помоћу позивања преко WiFi-ја. Ако пробате да упутите хитан позив, уређај ће аутоматски користити мобилну мрежу. Хитни позиви могу да се упућују само у областима покривеним мобилном мрежом."</string>
</resources>
diff --git a/tests/CarDeveloperOptions/res/values-mk/arrays.xml b/tests/CarDeveloperOptions/res/values-mk/arrays.xml
index 626ab54..000a585 100644
--- a/tests/CarDeveloperOptions/res/values-mk/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-mk/arrays.xml
@@ -29,8 +29,25 @@
<item msgid="5194868215515664953">"Пацифик"</item>
<item msgid="7044520255415007865">"Сите"</item>
</string-array>
- <!-- no translation found for screen_timeout_entries:0 (8596143519087753804) -->
- <!-- no translation found for dream_timeout_entries:7 (8271452751594598661) -->
+ <string-array name="screen_timeout_entries">
+ <item msgid="8596143519087753804">"15 секунди"</item>
+ <item msgid="772029947136115322">"30 секунди"</item>
+ <item msgid="8743663928349474087">"1 минута"</item>
+ <item msgid="1506508631223164814">"2 минути"</item>
+ <item msgid="8664703938127907662">"5 минути"</item>
+ <item msgid="5827960506924849753">"10 минути"</item>
+ <item msgid="6677424950124253938">"30 минути"</item>
+ </string-array>
+ <string-array name="dream_timeout_entries">
+ <item msgid="6487043225269853023">"Никогаш"</item>
+ <item msgid="2517785806387977252">"15 секунди"</item>
+ <item msgid="6347954399441173672">"30 секунди"</item>
+ <item msgid="4858305253279921789">"1 минута"</item>
+ <item msgid="8109273437140044073">"2 минути"</item>
+ <item msgid="2788593551142462622">"5 минути"</item>
+ <item msgid="8012672183888404961">"10 минути"</item>
+ <item msgid="8271452751594598661">"30 минути"</item>
+ </string-array>
<string-array name="lock_after_timeout_entries">
<item msgid="2232921187970351881">"Веднаш"</item>
<item msgid="2038544972632026612">"5 секунди"</item>
@@ -42,25 +59,60 @@
<item msgid="811192536981678974">"10 минути"</item>
<item msgid="7258394417241706272">"30 минути"</item>
</string-array>
- <!-- no translation found for entries_font_size:0 (2340391964816059553) -->
- <!-- no translation found for entries_font_size:0 (6490061470416867723) -->
- <!-- no translation found for entries_font_size:2 (1714184661981538355) -->
- <!-- no translation found for entries_font_size:2 (1678068858001018666) -->
- <!-- no translation found for wifi_status:3 (5848277343965362748) -->
- <!-- no translation found for wifi_status_with_ssid:1 (6816207058895999545) -->
- <!-- no translation found for wifi_status_with_ssid:3 (7547609081339573756) -->
- <!-- no translation found for wifi_status_with_ssid:4 (5145158315060185414) -->
+ <string-array name="entries_font_size">
+ <item msgid="2340391964816059553">"Мал"</item>
+ <item msgid="591935967183159581">"Стандардно"</item>
+ <item msgid="1714184661981538355">"Голем"</item>
+ <item msgid="6195563047686707484">"Најголем"</item>
+ </string-array>
+ <string-array name="wifi_status">
+ <item msgid="1304883790721412351"></item>
+ <item msgid="4157625910392775808">"Скенирање..."</item>
+ <item msgid="5597394826455877834">"Се поврзува..."</item>
+ <item msgid="5848277343965362748">"Се проверува…"</item>
+ <item msgid="3391238031431440676">"Добивање ИП адреса..."</item>
+ <item msgid="5257597310494000224">"Поврзано"</item>
+ <item msgid="8472497592913050396">"Суспендирани"</item>
+ <item msgid="1228072488815999109">"Се исклучува..."</item>
+ <item msgid="7253087004422991731">"Исклучени"</item>
+ <item msgid="4169850917304751227">"Неуспешно"</item>
+ <item msgid="6266658166690831131">"Блокирана"</item>
+ <item msgid="4517230805854909775">"Привремено избегнува лоша врска"</item>
+ </string-array>
+ <string-array name="wifi_status_with_ssid">
+ <item msgid="4853670665485437464"></item>
+ <item msgid="6816207058895999545">"Се скенира…"</item>
+ <item msgid="8058143476674427024">"Поврзување на <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</item>
+ <item msgid="7547609081339573756">"Се проверува со <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
+ <item msgid="5145158315060185414">"Се добива IP-адресата од <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
+ <item msgid="3283243151651124831">"Поврзано на <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</item>
+ <item msgid="6600156231416890902">"Суспендирани"</item>
+ <item msgid="4133290864821295785">"Исклучување од <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</item>
+ <item msgid="3980154971187953257">"Исклучени"</item>
+ <item msgid="2847316776634969068">"Неуспешно"</item>
+ <item msgid="4390990424746035383">"Блокирана"</item>
+ <item msgid="3618248791367063949">"Привремено избегнува лоша врска"</item>
+ </string-array>
<!-- no translation found for wifi_tether_security:0 (5586343370515598801) -->
<!-- no translation found for wifi_tether_security:1 (6136336549994615745) -->
- <!-- no translation found for wifi_p2p_wps_setup:0 (5390235347963255303) -->
+ <string-array name="wifi_p2p_wps_setup">
+ <item msgid="5390235347963255303">"Копче „Притисни“"</item>
+ <item msgid="7401896200768713930">"PIN од спарен уред"</item>
+ <item msgid="4526848028011846710">"PIN од овој уред"</item>
+ </string-array>
<string-array name="wifi_p2p_status">
- <item msgid="8741947238021758201">"Поврзана"</item>
+ <item msgid="8741947238021758201">"Поврзано"</item>
<item msgid="983792611851499732">"Покането"</item>
<item msgid="5438273405428201793">"Неуспешно"</item>
<item msgid="4646663015449312554">"Достапна"</item>
<item msgid="3230556734162006146">"Надвор од опсег"</item>
</string-array>
- <!-- no translation found for bluetooth_visibility_timeout_entries:1 (2759776603549270587) -->
+ <string-array name="bluetooth_visibility_timeout_entries">
+ <item msgid="8247986727324120082">"2 минути"</item>
+ <item msgid="2759776603549270587">"5 минути"</item>
+ <item msgid="167772676068860015">"1 час"</item>
+ <item msgid="5985477119043628504">"Времето никогаш да не истече"</item>
+ </string-array>
<string-array name="bluetooth_max_connected_audio_devices">
<item msgid="3800257971619063588">"Користи ја стандардната поставка на системот: <xliff:g id="DEFAULT_BLUETOOTH_MAX_CONNECTED_AUDIO_DEVICES">%1$d</xliff:g>"</item>
<item msgid="8572230405241423895">"1"</item>
@@ -69,10 +121,15 @@
<item msgid="1644506614010085798">"4"</item>
<item msgid="3132506679404897150">"5"</item>
</string-array>
- <!-- no translation found for wifi_signal:1 (7882129634982603782) -->
- <!-- no translation found for wifi_signal:4 (999948812884919584) -->
+ <string-array name="wifi_signal">
+ <item msgid="1709949377823900951">"Слаб"</item>
+ <item msgid="7882129634982603782">"Слаб"</item>
+ <item msgid="6457357501905996224">"Умерен"</item>
+ <item msgid="405271628162918841">"Добар"</item>
+ <item msgid="999948812884919584">"Одличен"</item>
+ </string-array>
<string-array name="data_usage_data_range">
- <item msgid="8986775481492954015">"Последните 30 дена"</item>
+ <item msgid="8986775481492954015">"Минатите 30 дена"</item>
<item msgid="3211287705232736964">"Пост. цикл. на корист...."</item>
</string-array>
<string-array name="usage_stats_display_order_types">
@@ -106,11 +163,14 @@
<item msgid="7330627471456865502">"MSCHAPV2"</item>
<item msgid="6255179395132581882">"GTC"</item>
</string-array>
- <!-- no translation found for wifi_ip_settings:1 (4377002609760712163) -->
+ <string-array name="wifi_ip_settings">
+ <item msgid="2717196390555072244">"DHCP"</item>
+ <item msgid="4377002609760712163">"Статична"</item>
+ </string-array>
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"Ниедна"</item>
<item msgid="1464741437353223198">"Упатство"</item>
- <item msgid="5793600062487886090">"Прокси автоконфигурација"</item>
+ <item msgid="5793600062487886090">"Прокси: автоконфигурација"</item>
</string-array>
<string-array name="apn_auth_entries">
<item msgid="7099647881902405997">"Ниедна"</item>
@@ -226,11 +286,73 @@
<item msgid="1165623660533024666">"извршувај во заднина"</item>
<item msgid="6423861043647911030">"јачина на звук на пристапноста"</item>
</string-array>
- <!-- no translation found for app_ops_labels:3 (7836406246005211990) -->
- <!-- no translation found for app_ops_labels:4 (3951439024549922598) -->
- <!-- no translation found for app_ops_labels:8 (3597797992398484655) -->
- <!-- no translation found for app_ops_labels:20 (3037159047591081136) -->
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Локација"</item>
+ <item msgid="6656077694190491067">"Локација"</item>
+ <item msgid="8790228218278477369">"Локација"</item>
+ <item msgid="7836406246005211990">"Вибрации"</item>
+ <item msgid="3951439024549922598">"Прочитај ги контактите"</item>
+ <item msgid="8802152411647068">"Измени контакти"</item>
+ <item msgid="229544934599698735">"Прочитај евиденција на повици"</item>
+ <item msgid="7396102294405899613">"Измени евиденција на повици"</item>
+ <item msgid="3597797992398484655">"Прочитај го календарот"</item>
+ <item msgid="2705975774250907343">"Измени календар"</item>
+ <item msgid="4668747371441932697">"Локација"</item>
+ <item msgid="1487578921720243646">"Објави известување"</item>
+ <item msgid="4636080349724146638">"Локација"</item>
+ <item msgid="673510900286463926">"Повикај телефонски број"</item>
+ <item msgid="542083422784609790">"Прочитај SMS/MMS порака"</item>
+ <item msgid="1033780373029588436">"Напиши SMS/MMS порака"</item>
+ <item msgid="5647111115517787488">"Прими SMS/MMS порака"</item>
+ <item msgid="8591105601108455893">"Прими SMS/MMS порака"</item>
+ <item msgid="7730995008517841903">"Прими SMS/MMS порака"</item>
+ <item msgid="2613033109026626086">"Прими SMS/MMS порака"</item>
+ <item msgid="3037159047591081136">"Испрати SMS/MMS-порака"</item>
+ <item msgid="4726682243833913568">"Прочитај SMS/MMS порака"</item>
+ <item msgid="6555678522277865572">"Напиши SMS/MMS порака"</item>
+ <item msgid="6981734935578130884">"Измени поставки"</item>
+ <item msgid="8705854389991425629">"Цртај на врвот"</item>
+ <item msgid="5861356020344153651">"Пристапи кон известувања"</item>
+ <item msgid="78432174621628659">"Камера"</item>
+ <item msgid="3986116419882154794">"Снимај аудио"</item>
+ <item msgid="4516840825756409490">"Репродуцирај аудио"</item>
+ <item msgid="6811712502798183957">"Прочитај табла со исечоци"</item>
+ <item msgid="2780369012602289114">"Измени табла со исечоци"</item>
+ <item msgid="2331359440170850868">"Копчиња за медиуми"</item>
+ <item msgid="6133599737122751231">"Аудио фокус"</item>
+ <item msgid="6844485713404805301">"Основна јачина на звук"</item>
+ <item msgid="1600379420669104929">"Јачина на звук на глас"</item>
+ <item msgid="6296768210470214866">"Јачина на звук на ѕвонење"</item>
+ <item msgid="510690696071629241">"Јачина на аудио/видео звук"</item>
+ <item msgid="406861638631430109">"Јачина на звук на аларм"</item>
+ <item msgid="4715864795872233884">"Јачина на звук на известување"</item>
+ <item msgid="2311478519251301183">"Јачина на звук на Bluetooth"</item>
+ <item msgid="5133991377896747027">"Задржи активен"</item>
+ <item msgid="2464189519136248621">"Локација"</item>
+ <item msgid="2062677934050803037">"Локација"</item>
+ <item msgid="1735171933192715957">"Добиј статистики за користење"</item>
+ <item msgid="1014093788778383554">"Вклучи/исклучи звук на микрофон"</item>
+ <item msgid="4199297950608622850">"Прикажи известување"</item>
+ <item msgid="2527962435313398821">"Прикажувај содржини"</item>
+ <item msgid="5117506254221861929">"Активирај ВПН"</item>
+ <item msgid="8291198322681891160">"Напиши тапет"</item>
+ <item msgid="7106921284621230961">"Помошна структура"</item>
+ <item msgid="4496533640894624799">"Помошна слика од екранот"</item>
+ <item msgid="2598847264853993611">"Прочитај ја состојбата на телефонот"</item>
+ <item msgid="9215610846802973353">"Додај говорна пошта"</item>
+ <item msgid="9186411956086478261">"Користи SIP"</item>
+ <item msgid="6884763100104539558">"Обработи појдовен повик"</item>
+ <item msgid="125513972170580692">"Отпечаток"</item>
+ <item msgid="2556071024281275619">"Телесни сензори"</item>
+ <item msgid="617168514928339387">"Читај пораки Cell Broadcast"</item>
+ <item msgid="7134693570516523585">"Лажна локација"</item>
+ <item msgid="7224489175375229399">"Прочитај ја меморијата"</item>
+ <item msgid="8472735063903258202">"Напиши во меморијата"</item>
+ <item msgid="4069276819909595110">"Вклучи го екранот"</item>
+ <item msgid="1228338896751121025">"Земи сметки"</item>
+ <item msgid="3181581793459233672">"Извршувај во заднина"</item>
+ <item msgid="2340936043025374076">"Јачина на звук на пристапноста"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Кратко"</item>
<item msgid="4816511817309094890">"Средно"</item>
@@ -247,7 +369,13 @@
<item msgid="4627069151979553527">"Курзив"</item>
<item msgid="6896773537705206194">"Мали големи букви"</item>
</string-array>
- <!-- no translation found for captioning_font_size_selector_titles:3 (2784236342175159295) -->
+ <string-array name="captioning_font_size_selector_titles">
+ <item msgid="1680223634161592855">"Многу мали"</item>
+ <item msgid="5091603983404027034">"Мали"</item>
+ <item msgid="176844712416932112">"Нормално"</item>
+ <item msgid="2784236342175159295">"Голем"</item>
+ <item msgid="218913203203160606">"Многу големи"</item>
+ </string-array>
<string-array name="captioning_edge_type_selector_titles">
<item msgid="3865198759294188069">"Стандардно"</item>
<item msgid="6488643537808152001">"Ниедна"</item>
@@ -262,7 +390,14 @@
<item msgid="1874668269931014581">"75%"</item>
<item msgid="6462911487571123954">"100%"</item>
</string-array>
- <!-- no translation found for captioning_preset_selector_titles:2 (5891360837786277638) -->
+ <string-array name="captioning_preset_selector_titles">
+ <item msgid="326819345272910536">"Користи стандарди на апликација"</item>
+ <item msgid="8611890312638868524">"Бели на црно"</item>
+ <item msgid="5891360837786277638">"Црни на бело"</item>
+ <item msgid="2798457065945456853">"Жолти на црно"</item>
+ <item msgid="5799049811524553967">"Жолти на сино"</item>
+ <item msgid="3673930830658169860">"Приспособен"</item>
+ </string-array>
<string-array name="vpn_types_long">
<item msgid="6566768880689730097">"PPTP VPN"</item>
<item msgid="1349760781118368659">"L2TP/IPSec VPN со претходно споделени клучеви"</item>
@@ -275,15 +410,32 @@
<item msgid="2958623927055120839">"Ништо"</item>
<item msgid="1157046369795346308">"Упатство"</item>
</string-array>
- <!-- no translation found for vpn_states:4 (9135049670787351881) -->
+ <string-array name="vpn_states">
+ <item msgid="5408915841694583740">"Исклучени"</item>
+ <item msgid="8754480102834556765">"Се иницијализира..."</item>
+ <item msgid="3351334355574270250">"Се поврзува..."</item>
+ <item msgid="8303882153995748352">"Поврзано"</item>
+ <item msgid="9135049670787351881">"Времето истече"</item>
+ <item msgid="2124868417182583926">"Неуспешно"</item>
+ </string-array>
<string-array name="security_settings_premium_sms_values">
<item msgid="1164265643455394443">"Прашај"</item>
<item msgid="7718817231348607934">"Никогаш не дозволувај"</item>
<item msgid="8184570120217958741">"Секогаш дозволувај"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Нормална"</item>
+ <item msgid="5101233285497327432">"Умерена"</item>
+ <item msgid="1555861583162930714">"Ниска"</item>
+ <item msgid="1719683776264798117">"Критично"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Нормално"</item>
+ <item msgid="6107138933849816768">"Умерено"</item>
+ <item msgid="182695359839047859">"Ниска"</item>
+ <item msgid="8577246509202964244">"Критична"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Постојано"</item>
<item msgid="167418068739176448">"Врвна активност"</item>
@@ -320,7 +472,7 @@
<item msgid="3118234477029486741">"0"</item>
</string-array>
<string-array name="wifi_metered_entries">
- <item msgid="4329206416008519163">"Откриј автоматски"</item>
+ <item msgid="4329206416008519163">"Откривај автоматски"</item>
<item msgid="773943026484148895">"Сметај како ограничена мрежа"</item>
<item msgid="1008268820118852416">"Сметај како неограничена мрежа"</item>
</string-array>
diff --git a/tests/CarDeveloperOptions/res/values-mk/strings.xml b/tests/CarDeveloperOptions/res/values-mk/strings.xml
index c69807b..e9ea40e 100644
--- a/tests/CarDeveloperOptions/res/values-mk/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-mk/strings.xml
@@ -27,7 +27,7 @@
<item quantity="other">Сега сте на <xliff:g id="STEP_COUNT_1">%1$d</xliff:g> чекори поблиску да станете програмер.</item>
</plurals>
<string name="show_dev_on" msgid="9075712234786224065">"Сега сте развивач"</string>
- <string name="show_dev_already" msgid="7665948832405148689">"Нема потреба, веќе сте развивач"</string>
+ <string name="show_dev_already" msgid="7665948832405148689">"Нема потреба, веќе сте програмер"</string>
<string name="dev_settings_disabled_warning" msgid="3198732189395396721">"Прво овозможете ги опциите за програмери."</string>
<string name="header_category_wireless_networks" msgid="8968405993937795898">"Безжичен и мрежи"</string>
<string name="header_category_system" msgid="4045988717359334410">"Систем"</string>
@@ -52,7 +52,7 @@
<string name="radio_info_ims_reg_status_registered" msgid="2500942310925593662">"Регистриран"</string>
<string name="radio_info_ims_reg_status_not_registered" msgid="1286050699734226077">"Не е регистриран"</string>
<string name="radio_info_ims_feature_status_available" msgid="2040629393134756058">"Достапен"</string>
- <string name="radio_info_ims_feature_status_unavailable" msgid="3348223769202693596">"Недостапен"</string>
+ <string name="radio_info_ims_feature_status_unavailable" msgid="3348223769202693596">"Недостапно"</string>
<string name="radio_info_ims_reg_status" msgid="4771711884059371514">"IMS-регистрација: <xliff:g id="STATUS">%1$s</xliff:g>\nКомуникација преку LTE (VoLTE): <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nКомуникација преку Wi-Fi: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nВидеоповици: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT-интерфејс: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
<string name="radioInfo_service_in" msgid="1297020186765943857">"Во употреба"</string>
<string name="radioInfo_service_out" msgid="8460363463722476510">"Надвор од употреба"</string>
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Намалете го или зголемете го текстот на екранот."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Намали"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Зголеми"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Примерок на текст"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Чудесниот волшебник од Оз"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Поглавје 11: Чудесниот смарагден град Оз"</string>
@@ -101,7 +100,7 @@
<string name="bluetooth_lock_voice_dialing" msgid="1600385868298081015">"Заклучи гласовно бирање"</string>
<string name="bluetooth_lock_voice_dialing_summary" msgid="5005776616112427980">"Спречи употреба на бирач со Bluetooth кога екранот е заклучен"</string>
<string name="bluetooth_devices" msgid="4143880830505625666">"Уреди со Bluetooth"</string>
- <string name="bluetooth_device_name" msgid="3682016026866302981">"Име на уред"</string>
+ <string name="bluetooth_device_name" msgid="3682016026866302981">"Име на уредот"</string>
<string name="bluetooth_device_details" msgid="2500840679106321361">"Поставки за уред"</string>
<string name="bluetooth_profile_details" msgid="1785505059738682493">"Поставки на профил"</string>
<string name="bluetooth_name_not_set" msgid="1886067683138385142">"Нема поставено име, се користи името на сметката"</string>
@@ -196,11 +195,11 @@
<string name="intent_sender_account_label" msgid="7904284551281213567">"Сметка:"</string>
<string name="proxy_settings_title" msgid="6014901859338211713">"Прокси"</string>
<string name="proxy_clear_text" msgid="498317431076294101">"Исчисти"</string>
- <string name="proxy_port_label" msgid="8285157632538848509">"Порт за прокси"</string>
+ <string name="proxy_port_label" msgid="8285157632538848509">"Порта за прокси"</string>
<string name="proxy_exclusionlist_label" msgid="8179084955547941904">"Заобиколи прокси за"</string>
<string name="proxy_defaultView_text" msgid="5785775257042403261">"Врати стандардни вредности"</string>
<string name="proxy_action_text" msgid="814511434843981413">"Готово"</string>
- <string name="proxy_hostname_label" msgid="6798891831427287847">"Име на домаќин на прокси"</string>
+ <string name="proxy_hostname_label" msgid="6798891831427287847">"Име на хост за прокси"</string>
<string name="proxy_error" msgid="5036164133669802299">"Внимание"</string>
<string name="proxy_error_dismiss" msgid="883805570485635650">"Во ред"</string>
<string name="proxy_error_invalid_host" msgid="5430640241353307223">"Името на домаќинот што го внесовте не е важечко."</string>
@@ -208,7 +207,7 @@
<string name="proxy_error_empty_port" msgid="8034561724923076215">"Порт полето треба да се пополни."</string>
<string name="proxy_error_empty_host_set_port" msgid="8471455809508588255">"Полето на портот мора да биде празно ако полето на хостот е празно."</string>
<string name="proxy_error_invalid_port" msgid="4046559920586100637">"Внесениот порт не е исправен."</string>
- <string name="proxy_warning_limited_support" msgid="9026539134219095768">"HTTP проксито го користи прелистувачот, но не може да го користат другите апликации."</string>
+ <string name="proxy_warning_limited_support" msgid="9026539134219095768">"Прелистувачот користи HTTP-прокси, но не може да го користат и другите апликации."</string>
<string name="proxy_url_title" msgid="882042361706435904">"PAC URL: "</string>
<string name="radio_info_dl_kbps" msgid="2903778264453410272">"Брзина на пренос при преземање (кбит/с):"</string>
<string name="radio_info_ul_kbps" msgid="3802245899811732716">"Брзина на пренос при прикачување (кбит/с):"</string>
@@ -268,7 +267,7 @@
<string name="next_label" msgid="4710056309804362410">"Следно"</string>
<string name="language_picker_title" msgid="7807759931261107686">"Јазици"</string>
<string name="locale_remove_menu" msgid="3395565699934985486">"Отстрани"</string>
- <string name="add_a_language" msgid="4103889327406274800">"Додај јазик"</string>
+ <string name="add_a_language" msgid="4103889327406274800">"Додајте јазик"</string>
<plurals name="dlg_remove_locales_title" formatted="false" msgid="7362450618787242592">
<item quantity="one">Да се отстранат избраните јазици?</item>
<item quantity="other">Да се отстранат избраните јазици?</item>
@@ -323,8 +322,8 @@
<string name="date_and_time_settings_title" msgid="7827088656940910631">"Датум и време"</string>
<string name="date_and_time_settings_title_setup_wizard" msgid="1573030770187844365">"Постави датум и време"</string>
<string name="date_and_time_settings_summary" msgid="4617979434474713417">"Постави датум, време, временска зона и формати"</string>
- <string name="date_time_auto" msgid="2679132152303750218">"Користи време дадено од мрежа"</string>
- <string name="zone_auto_title" msgid="5500880975376882488">"Користи временска зона обезбедена од мрежа"</string>
+ <string name="date_time_auto" msgid="2679132152303750218">"Користи време од мрежата"</string>
+ <string name="zone_auto_title" msgid="5500880975376882488">"Користи часовна зона од мрежата"</string>
<string name="date_time_24hour_auto" msgid="7499659679134962547">"Користи локален стандард"</string>
<string name="date_time_24hour_title" msgid="6209923858891621283">"Формат од 24 часа"</string>
<string name="date_time_24hour" msgid="1265706705061608742">"Користи 24-часовен формат"</string>
@@ -356,7 +355,7 @@
<string name="security_enable_widgets_title" msgid="1701510007926738088">"Овозможи виџети"</string>
<string name="security_enable_widgets_disabled_summary" msgid="4408176087132339331">"Оневозможено од администраторот"</string>
<string name="lockdown_settings_title" msgid="4534779922580115990">"Приказ на опцијата за заклучување"</string>
- <string name="lockdown_settings_summary" msgid="7270756909878256174">"Опција на копчето за вклучување на екранот што ги исклучува Smart Lock, отклучувањето со отпечаток и известувањата на заклучениот екран"</string>
+ <string name="lockdown_settings_summary" msgid="7270756909878256174">"Прикажувај опција на копчето за вклучување на екранот што ги исклучува Smart Lock, отклучувањето со отпечаток и известувањата на заклучениот екран"</string>
<string name="trust_agents_extend_unlock_title" msgid="3582017561316089951">"Продолжено отклуч. за агенти од доверба"</string>
<string name="trust_agents_extend_unlock_summary" msgid="3543997596586078084">"Ако се овозможени, агентите од доверба ќе го држат уредот отклучен подолго време, но веќе нема да може да отклучат заклучен уред."</string>
<string name="trust_lost_locks_screen_title" msgid="3094736590690459372">"Заклучен екран кога довербата е загубена"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Информации за профил"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Сметки"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Локација"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Користи ја локацијата"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Користи ја локацијата"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Исклучено"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">Вклучено - <xliff:g id="COUNT_1">%1$d</xliff:g> апликација може да пристапи до локацијата</item>
@@ -411,7 +410,7 @@
<string name="face_add_max" msgid="8870899421165189413">"Може да додадете до <xliff:g id="COUNT">%d</xliff:g> лица"</string>
<string name="face_intro_error_max" msgid="4024147799079828937">"Додадовте максимален број лица"</string>
<string name="face_intro_error_unknown" msgid="3241592604198351134">"Не може да додадете повеќе лица"</string>
- <string name="security_settings_face_enroll_error_dialog_title" msgid="3933492758701563051">"Запишувањето не е завршено"</string>
+ <string name="security_settings_face_enroll_error_dialog_title" msgid="3933492758701563051">"Регистрацијата не е завршена"</string>
<string name="security_settings_face_enroll_dialog_ok" msgid="1078348922734845090">"Во ред"</string>
<string name="security_settings_face_enroll_error_timeout_dialog_message" msgid="4917894418448325405">"Се достигна временското ограничување на запишувањето со лице. Обидете се повторно."</string>
<string name="security_settings_face_enroll_error_generic_dialog_message" msgid="5160473187142616862">"Не успеа запишувањето со лице."</string>
@@ -488,7 +487,7 @@
<string name="security_settings_fingerprint_enroll_done" msgid="4111289529758845926">"Готово"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"Упс, тоа не е сензорот"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"Допрете го сензорот одзади со показалецот."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"Запишувањето не е завршено"</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"Регистрацијата не е завршена"</string>
<string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Се достигна временското ограничување на запишувањето со отпечаток од прст. Обидете се повторно."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"Запишувањето со отпечаток од прст не успеа. Обидете се повторно или користете друг прст."</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"Додај друг"</string>
@@ -504,7 +503,7 @@
<string name="fingerprint_delete_message" msgid="5895802741486967970">"Дали сакате да го избришете отпечатоков?"</string>
<string name="fingerprint_last_delete_message" msgid="3346252479778971442">"Нема да може да ги користите отпечатоците за да го отклучите телефонот, да одобрувате купувања или да се најавувате на апликации со нив"</string>
<string name="fingerprint_last_delete_message_profile_challenge" msgid="5385095150532247025">"Нема да може да ги користите отпечатоците за да го отклучите работниот профил, да одобрувате купувања или да се најавувате на апликациите за работа"</string>
- <string name="fingerprint_last_delete_confirm" msgid="7984595457589664004">"Отстрани го"</string>
+ <string name="fingerprint_last_delete_confirm" msgid="7984595457589664004">"Отстрани"</string>
<string name="crypt_keeper_settings_title" msgid="839783588093862748">"Шифрирање"</string>
<string name="crypt_keeper_encrypt_title" product="tablet" msgid="2292129135369853167">"Шифрирај таблет"</string>
<string name="crypt_keeper_encrypt_title" product="default" msgid="3110852053238357832">"Шифрирање на телефонот"</string>
@@ -544,7 +543,7 @@
<string name="suggested_fingerprint_lock_settings_summary" product="tablet" msgid="8114514312665251311"></string>
<string name="suggested_fingerprint_lock_settings_summary" product="device" msgid="8114514312665251311"></string>
<string name="suggested_fingerprint_lock_settings_summary" product="default" msgid="8114514312665251311"></string>
- <string name="lock_settings_picker_title" msgid="1034741644461982205">"Избери заклучување на екранот"</string>
+ <string name="lock_settings_picker_title" msgid="1034741644461982205">"Заклучување на екранот"</string>
<string name="lock_settings_picker_title_profile" msgid="5086594364428782115">"Избери закл. раб. профил"</string>
<string name="setup_lock_settings_picker_title" product="tablet" msgid="2429667472335773519">"Заштитете го таблетот"</string>
<string name="setup_lock_settings_picker_title" product="device" msgid="4739290104106645233">"Заштитете го уредот"</string>
@@ -656,8 +655,8 @@
<item quantity="other">Мора да содржи барем <xliff:g id="COUNT_1">%d</xliff:g> знаци</item>
</plurals>
<plurals name="lockpassword_pin_too_short" formatted="false" msgid="6805936168283187298">
- <item quantity="one">PIN-от мора да има најмалку <xliff:g id="COUNT_1">%d</xliff:g> цифра</item>
- <item quantity="other">PIN-от мора да има најмалку <xliff:g id="COUNT_1">%d</xliff:g> цифри</item>
+ <item quantity="one">PIN-кодот мора да содржи барем <xliff:g id="COUNT_1">%d</xliff:g> цифра</item>
+ <item quantity="other">PIN-кодот мора да содржи барем <xliff:g id="COUNT_1">%d</xliff:g> цифри</item>
</plurals>
<string name="lockpassword_continue_label" msgid="7279261861924400655">"Продолжи"</string>
<plurals name="lockpassword_password_too_long" formatted="false" msgid="7994068708438608179">
@@ -719,7 +718,7 @@
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> активни апликации</item>
</plurals>
<string name="manage_trust_agents" msgid="8129970926213142261">"Агенти од доверба"</string>
- <string name="disabled_because_no_backup_security" msgid="8127039979909203528">"Прво поставете заклучување на екран"</string>
+ <string name="disabled_because_no_backup_security" msgid="8127039979909203528">"Прво поставете заклучување екран"</string>
<string name="manage_trust_agents_summary" msgid="2023116850759962248">"Ниеден"</string>
<plurals name="manage_trust_agents_summary_on" formatted="false" msgid="5550538038916606097">
<item quantity="one"><xliff:g id="COUNT">%d</xliff:g> активен агент од доверба</item>
@@ -730,7 +729,7 @@
<string name="bluetooth_settings" msgid="5228032727293770389">"Bluetooth"</string>
<string name="bluetooth_settings_title" msgid="7261244857456521825">"Bluetooth"</string>
<string name="bluetooth_settings_summary" msgid="1221689092429277887">"Управувај со конекции, постави име и откривливост на уредот"</string>
- <string name="bluetooth_pairing_request" msgid="7221745525632573125">"Спарете со <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
+ <string name="bluetooth_pairing_request" msgid="7221745525632573125">"Да се спари со <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="bluetooth_pairing_key_msg" msgid="1139230917419961975">"Код за спарување на Bluetooth"</string>
<string name="bluetooth_enter_passkey_msg" msgid="6205151011298670207">"Внесете го кодот за спарување, а потоа притиснете Врати или Внеси"</string>
<string name="bluetooth_enable_alphanumeric_pin" msgid="9138308197078115672">"PIN-от содржи букви или симболи"</string>
@@ -747,7 +746,7 @@
<string name="bluetooth_preference_scan_title" msgid="457781003962324807">"Скенирај за уреди"</string>
<string name="bluetooth_search_for_devices" msgid="6796307228261078451">"Освежи"</string>
<string name="bluetooth_searching_for_devices" msgid="7820814625522702494">"Пребарување..."</string>
- <string name="bluetooth_preference_device_settings" msgid="4247085616427015908">"Поставки на уред"</string>
+ <string name="bluetooth_preference_device_settings" msgid="4247085616427015908">"Поставки за уредот"</string>
<string name="bluetooth_preference_paired_dialog_title" msgid="3567187438908143693">"Спарен уред"</string>
<string name="bluetooth_preference_paired_dialog_internet_option" msgid="3693599743477470469">"Интернет врска"</string>
<string name="bluetooth_preference_paired_dialog_keyboard_option" msgid="4627309436489645755">"Тастатура"</string>
@@ -803,7 +802,7 @@
<string name="wifi_display_enable_menu_item" msgid="4578340247147692250">"Овозможи приказ на безжични мрежи"</string>
<string name="wifi_display_no_devices_found" msgid="186501729518830451">"Не се пронајдени уреди во близина."</string>
<string name="wifi_display_status_connecting" msgid="3799827425457383349">"Се поврзува"</string>
- <string name="wifi_display_status_connected" msgid="85692409327461403">"Поврзана"</string>
+ <string name="wifi_display_status_connected" msgid="85692409327461403">"Поврзано"</string>
<string name="wifi_display_status_in_use" msgid="7646114501132773174">"Во употреба"</string>
<string name="wifi_display_status_not_available" msgid="5600448733204688205">"Недостапна"</string>
<string name="wifi_display_details" msgid="6379855523460749126">"Поставки за приказ"</string>
@@ -827,7 +826,7 @@
<string name="nfc_disclaimer_title" msgid="4860231267351602970">"Вклучете NFC"</string>
<string name="nfc_disclaimer_content" msgid="3066113577854565782">"NFC разменува податоци меѓу уредов и други уреди или цели во близина, како што се терминали за плаќање, читачи за пристап и интерактивни реклами или ознаки."</string>
<string name="nfc_secure_settings_title" msgid="5153751163174916581">"Заштитете ја NFC"</string>
- <string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"Дозволете употреба на плаќања и јавен превоза преку NFC само кога екранот е отклучен"</string>
+ <string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"Дозволи користење на NFC за плаќање и јавен превоз само кога екранот е отклучен"</string>
<string name="android_beam_settings_title" msgid="3083436415873738389">"Android Beam"</string>
<string name="android_beam_on_summary" msgid="8068287225180474199">"Подготвено за пренос на содржина на апликација преку комуникација на блиско поле (NFC)"</string>
<string name="android_beam_off_summary" msgid="7365818039159364600">"Исклучено"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Вклучи Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Користи Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Користи Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Поставки за Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Постави и управувај со безжични пристапни точки"</string>
@@ -845,22 +844,22 @@
<string name="wifi_starting" msgid="1299466156783469023">"Вклучување на Wi-Fi..."</string>
<string name="wifi_stopping" msgid="413711069039939520">"Исклучување на Wi-Fi..."</string>
<string name="wifi_error" msgid="5605801874484465557">"Грешка"</string>
- <string name="wifi_sap_no_channel_error" msgid="6881796988574851628">"Појас од 5 GHz не е достапен во земјава"</string>
+ <string name="wifi_sap_no_channel_error" msgid="6881796988574851628">"Опсег од 5 GHz не е достапен во земјава"</string>
<string name="wifi_in_airplane_mode" msgid="4729571191578262246">"Во режим на работа во авион"</string>
- <string name="wifi_notify_open_networks" msgid="4782239203624619655">"Известување за отворени мрежи"</string>
+ <string name="wifi_notify_open_networks" msgid="4782239203624619655">"Известувај за отворени мрежи"</string>
<string name="wifi_notify_open_networks_summary" msgid="1383681260705466715">"Извести ме кога ќе биде достапна јавна мрежа со висок квалитет"</string>
- <string name="wifi_wakeup" msgid="4963732992164721548">"Автоматски вклучи Wi‑Fi"</string>
- <string name="wifi_wakeup_summary" msgid="1152699417411690">"Wi‑Fi ќе се вклучи автоматски на зачувани мрежи со висок квалитет во близина, како на пр., вашата домашна мрежа"</string>
+ <string name="wifi_wakeup" msgid="4963732992164721548">"Автоматски вклучувај Wi‑Fi"</string>
+ <string name="wifi_wakeup_summary" msgid="1152699417411690">"Wi‑Fi ќе се вклучува автоматски во близина на зачувани мрежи со висок квалитет, како на пр., вашата домашна мрежа"</string>
<string name="wifi_wakeup_summary_no_location" msgid="3007457288587966962">"Недостапно бидејќи локацијата е исклучена. Вклучете ја "<annotation id="link">"локацијата"</annotation>"."</string>
<string name="wifi_wakeup_summary_scanning_disabled" msgid="6820040651529910914">"Недостапно бидејќи скенирањето на Wi-Fi е исклучено"</string>
- <string name="wifi_wakeup_summary_scoring_disabled" msgid="7067018832237903151">"За користење, изберете оператор за оценување мрежа"</string>
+ <string name="wifi_wakeup_summary_scoring_disabled" msgid="7067018832237903151">"За користење, изберете оценувач на мрежата"</string>
<string name="wifi_poor_network_detection" msgid="7193423327400703073">"Избегнувај слаби поврзувања"</string>
- <string name="wifi_poor_network_detection_summary" msgid="5539951465985614590">"Не користи Wi-Fi-мрежа, освен ако има добра интернет-врска"</string>
+ <string name="wifi_poor_network_detection_summary" msgid="5539951465985614590">"Не користи Wi-Fi мрежа, освен ако има добра интернет-врска"</string>
<string name="wifi_avoid_poor_network_detection_summary" msgid="1976503191780928104">"Користи само мрежи со добра интернет-врска"</string>
<string name="use_open_wifi_automatically_title" msgid="3084513215481454350">"Поврзувај се на отворени мрежи"</string>
<string name="use_open_wifi_automatically_summary" msgid="8338020172673161754">"Автоматски поврзувај се на јавни мрежи со висок квалитет"</string>
- <string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"За користење, изберете оператор за оценување мрежа"</string>
- <string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"За користење, изберете компатибилен оператор за оценување мрежа"</string>
+ <string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"За користење, изберете оценувач на мрежата"</string>
+ <string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"За користење, изберете компатибилен оценувач на мрежата"</string>
<string name="wifi_install_credentials" msgid="5650088113710858289">"Инсталирај сертификати"</string>
<string name="wifi_scan_notify_text" msgid="7614101215028336927">"За да се подобри точноста на локацијата, апликациите и услугите можат да скенираат Wi‑Fi мрежи во секое време, дури и кога Wi‑Fi е исклучено. Ова може да се користи, на пример, за подобрување на функциите и услугите базирани на локација. Може да го измените ова во <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>поставките за скенирање<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
<string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"За да се подобри точноста на локацијата, вклучете „Скенирање на Wi‑Fi“ во <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>поставките за скенирање<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
@@ -875,10 +874,10 @@
<string name="wifi_switch_away_when_unvalidated" msgid="2418577764071293971">"Префрли се на мобилен интернет ако Wi-Fi-мрежата го губи пристапот до интернет."</string>
<string name="wifi_cellular_data_fallback_title" msgid="5067241930716252665">"Автоматски префрли се на мобилен интернет"</string>
<string name="wifi_cellular_data_fallback_summary" msgid="2721467405851519769">"Користете мобилен интернет кога Wi‑Fi нема пристап до интернет. Може да ви се наплати за потрошениот сообраќај."</string>
- <string name="wifi_add_network" msgid="4094957940791876640">"Додај мрежа"</string>
+ <string name="wifi_add_network" msgid="4094957940791876640">"Додајте мрежа"</string>
<string name="wifi_configure_settings_preference_title" msgid="2678534679408777268">"Поставки за Wi‑Fi"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="5714892572614655675">"Wi‑Fi се вклучува повторно автоматски"</string>
- <string name="wifi_configure_settings_preference_summary_wakeup_off" msgid="286904094152909651">"Wi‑Fi не се вклучува повторно автоматски"</string>
+ <string name="wifi_configure_settings_preference_summary_wakeup_off" msgid="286904094152909651">"Wi‑Fi не се вклучува автоматски"</string>
<string name="wifi_access_points" msgid="1647976498906871869">"Wi-Fi мрежи"</string>
<string name="wifi_menu_more_options" msgid="8318269834264035524">"Повеќе опции"</string>
<string name="wifi_menu_p2p" msgid="4945665601551289791">"Wi‑Fi Direct"</string>
@@ -890,7 +889,7 @@
<string name="wifi_menu_forget" msgid="7561140554450163075">"Заборави мрежа"</string>
<string name="wifi_menu_modify" msgid="4080178040721021101">"Измени мрежа"</string>
<string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"За да ги видите достапните мрежи, вклучете Wi-Fi."</string>
- <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"Се пребарува за Wi-Fi мрежи..."</string>
+ <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"Се бараат Wi-Fi мрежи..."</string>
<string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"Немате дозвола за промена на Wi-Fi мрежата."</string>
<string name="wifi_more" msgid="3538241640407382185">"Повеќе"</string>
<string name="wifi_setup_wps" msgid="6730131677695521321">"Автоматско подесување (WPS)"</string>
@@ -903,19 +902,19 @@
<string name="wifi_advanced_toggle_description_expanded" msgid="1506697245302596510">"Паѓачки список „Напредни опции“. Допрете двапати за да се собере."</string>
<string name="wifi_advanced_toggle_description_collapsed" msgid="3014965593695454879">"Паѓачки список „Напредни опции“. Допрете двапати за да се прошири."</string>
<string name="wifi_ssid" msgid="6746270925975522641">"Име на мрежа"</string>
- <string name="wifi_ssid_hint" msgid="5010024648106585165">"Внеси SSID"</string>
+ <string name="wifi_ssid_hint" msgid="5010024648106585165">"Внесете SSID"</string>
<string name="wifi_security" msgid="9136702039496152831">"Безбедност"</string>
<string name="wifi_hidden_network" msgid="6647772204699776833">"Сокриена мрежа"</string>
<string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Ако вашиот рутер не емитува мрежен ID, а сакате да се поврзете со него во иднина, може да ја поставите мрежата како сокриена.\n\nОва може да создаде безбедносен ризик бидејќи вашиот телефон редовно ќе го емитува својот сигнал за да ја најде мрежата.\n\nПоставувањето на мрежата како сокриена нема да ги смени поставките на рутерот."</string>
<string name="wifi_signal" msgid="696548364467704808">"Јачина на сигнал"</string>
<string name="wifi_status" msgid="3439931558930689940">"Статус"</string>
- <string name="tx_wifi_speed" msgid="2571810085003261073">"Брзина на линкот за пренесување"</string>
- <string name="rx_wifi_speed" msgid="7392873246110937187">"Брзина на линкот за примање"</string>
+ <string name="tx_wifi_speed" msgid="2571810085003261073">"Брзина на пренос"</string>
+ <string name="rx_wifi_speed" msgid="7392873246110937187">"Брзина на прием"</string>
<string name="wifi_frequency" msgid="6132852924995724246">"Фреквенција"</string>
<string name="wifi_ip_address" msgid="5572539114989914831">"IP-адреса"</string>
<string name="passpoint_label" msgid="7429247462404128615">"Зачувано преку"</string>
<string name="passpoint_content" msgid="340527524510304327">"Акредитиви на <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="wifi_eap_method" msgid="3752116941487485859">"EAP метод"</string>
+ <string name="wifi_eap_method" msgid="3752116941487485859">"EAP-метод"</string>
<string name="please_select_phase2" msgid="5848080896810435677">"Автентикација во фаза 2"</string>
<string name="wifi_eap_ca_cert" msgid="1496395241849383785">"Сертификат CA"</string>
<string name="wifi_eap_domain" msgid="3298302320003640130">"Домен"</string>
@@ -926,22 +925,22 @@
<string name="wifi_show_password" msgid="7878398590772942202">"Прикажи лозинка"</string>
<string name="wifi_ap_band_config" msgid="6565016368079288433">"Изберете појас на АП"</string>
<string name="wifi_ap_choose_auto" msgid="7927637960569365785">"Автоматски"</string>
- <string name="wifi_ap_choose_2G" msgid="43198403259714736">"Појас од 2,4 GHz"</string>
- <string name="wifi_ap_choose_5G" msgid="2624859713183683146">"Појас од 5,0 GHz"</string>
- <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"Претпочитан појас: 5,0 GHz"</string>
+ <string name="wifi_ap_choose_2G" msgid="43198403259714736">"Опсег од 2,4 GHz"</string>
+ <string name="wifi_ap_choose_5G" msgid="2624859713183683146">"Опсег од 5,0 GHz"</string>
+ <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"Претпочитан опсег: 5,0 GHz"</string>
<string name="wifi_ap_2G" msgid="5793110086517338494">"2,4 GHz"</string>
<string name="wifi_ap_5G" msgid="4584892544393675403">"5,0 GHz"</string>
<string name="wifi_ap_band_select_one" msgid="4409754936554360355">"Изберете барем еден појас за Wi‑Fi точка на пристап:"</string>
- <string name="wifi_ip_settings" msgid="4636102290236116946">"Поставки на IP"</string>
+ <string name="wifi_ip_settings" msgid="4636102290236116946">"Поставки за IP"</string>
<string name="wifi_privacy_settings" msgid="4462092795794247809">"Приватност"</string>
<string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"Рандомизирана MAC-адреса"</string>
<string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"Додајте уред"</string>
- <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"Наместете го QR-кодот во средината на подолниот прозорец за да го додадете уредот на „<xliff:g id="SSID">%1$s</xliff:g>“"</string>
- <string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"Скенирај QR-код"</string>
+ <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"Наместете го QR-кодот во средината на подолниот прозорец за да го додадете уредот во мрежата „<xliff:g id="SSID">%1$s</xliff:g>“"</string>
+ <string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"Скенирајте QR-код"</string>
<string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"Наместете го QR-кодот во средината на подолниот прозорец за да се поврзете со „<xliff:g id="SSID">%1$s</xliff:g>“"</string>
- <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"Придружете се на Wi‑Fi со скенирање на QR-кодот"</string>
- <string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Сподели Wi‑Fi"</string>
- <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"Скенирајте го овој QR-код за да се поврзете со „<xliff:g id="SSID">%1$s</xliff:g>“ и споделете ја лозинката"</string>
+ <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"Скенирајте го QR-кодот за да се поврзете на Wi‑Fi"</string>
+ <string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Споделете Wi‑Fi"</string>
+ <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"Скенирајте го овој QR-код за да се поврзете со „<xliff:g id="SSID">%1$s</xliff:g>“ и да ја споделите лозинката"</string>
<string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"Скенирајте го овој QR-код за да се поврзете со „<xliff:g id="SSID">%1$s</xliff:g>“"</string>
<string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"Не можеше да се прочита QR-кодот. Центрирајте го кодот и обидете се повторно"</string>
<string name="wifi_dpp_failure_authentication_or_configuration" msgid="9142051662156233679">"Обидете се повторно. Ако проблемот продолжи, контактирајте со производителот на уредот"</string>
@@ -963,15 +962,15 @@
<string name="wifi_dpp_share_hotspot" msgid="847987212473038179">"Споделете точка на пристап"</string>
<string name="wifi_dpp_lockscreen_title" msgid="3910665850075275963">"Потврдете дека сте вие"</string>
<string name="wifi_dpp_wifi_password" msgid="8007558344032612455">"Лозинка за Wi-Fi: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
- <string name="wifi_dpp_hotspot_password" msgid="6172326289042241924">"Лозинка за точка на пристап: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
+ <string name="wifi_dpp_hotspot_password" msgid="6172326289042241924">"Лозинка за точката на пристап: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
<string name="wifi_dpp_add_device" msgid="1347056725253936358">"Додајте уред"</string>
<string name="wifi_dpp_connect_network_using_qr_code" msgid="115993715600532357">"ПОврзете се на мрежава со QR-код"</string>
<string name="retry" msgid="8500839563577344702">"Обиди се повторно"</string>
<string name="wifi_shared" msgid="5054256778276524960">"Сподели со други корисници на уредот"</string>
- <string name="wifi_unchanged" msgid="6804964646942333992">"(непроменети)"</string>
+ <string name="wifi_unchanged" msgid="6804964646942333992">"(непроменето)"</string>
<string name="wifi_unspecified" msgid="893491188483500809">"Изберете"</string>
<string name="wifi_multiple_cert_added" msgid="7986200585749147204">"(Додадени се повеќе сертификати)"</string>
- <string name="wifi_use_system_certs" msgid="4794489370929885022">"Користете системски сертификати"</string>
+ <string name="wifi_use_system_certs" msgid="4794489370929885022">"Користи системски сертификати"</string>
<string name="wifi_do_not_provide_eap_user_cert" msgid="4044301449482425250">"Не обезбедувај"</string>
<string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"Не потврдувај"</string>
<string name="wifi_do_not_validate_eap_server_warning" msgid="3895397996759837323">"Нема назначено сертификат. Вашата врска нема да биде приватна."</string>
@@ -1021,26 +1020,26 @@
<string name="wifi_advanced_ssid_title" msgid="4229741334913894856">"SSID"</string>
<string name="wifi_advanced_mac_address_title" msgid="1162782083754021737">"MAC адреса"</string>
<string name="wifi_advanced_ip_address_title" msgid="2708185994512829071">"IP-адреса"</string>
- <string name="wifi_details_title" msgid="2164042631550920157">"Детали за мрежа"</string>
- <string name="wifi_details_subnet_mask" msgid="53396707004763012">"Маска на подмрежа"</string>
+ <string name="wifi_details_title" msgid="2164042631550920157">"Детали за мрежата"</string>
+ <string name="wifi_details_subnet_mask" msgid="53396707004763012">"Подмрежна маска"</string>
<string name="wifi_details_dns" msgid="1118251455740116559">"DNS"</string>
- <string name="wifi_details_ipv6_address_header" msgid="1642310137145363299">"IPv6 адреси"</string>
+ <string name="wifi_details_ipv6_address_header" msgid="1642310137145363299">"IPv6-адреси"</string>
<string name="wifi_saved_access_points_label" msgid="3790693285928292563">"Зачувани мрежи"</string>
<string name="wifi_subscribed_access_points_tab" msgid="7498765485953257229">"Претплати"</string>
<!-- no translation found for wifi_saved_access_points_tab (4677730543624191122) -->
<skip />
- <string name="wifi_advanced_settings_label" msgid="9147669851658738784">"Поставки на IP"</string>
+ <string name="wifi_advanced_settings_label" msgid="9147669851658738784">"Поставки за IP"</string>
<string name="wifi_advanced_not_available" msgid="5751084989400195009">"Напредни поставки за Wi‑Fi не се достапни за корисников"</string>
<string name="wifi_ip_settings_menu_save" msgid="6557330818360425933">"Зачувај"</string>
<string name="wifi_ip_settings_menu_cancel" msgid="8098696509412462494">"Откажи"</string>
<string name="wifi_ip_settings_invalid_ip_address" msgid="7764507690387286292">"Внеси важечка ИП адреса."</string>
<string name="wifi_ip_settings_invalid_gateway" msgid="7602732367437862422">"Внеси важечка адреса на капија."</string>
<string name="wifi_ip_settings_invalid_dns" msgid="4471473055625376300">"Внеси важечка адреса на DNS."</string>
- <string name="wifi_ip_settings_invalid_network_prefix_length" msgid="392977552691002076">"Напишете префикс на мрежа со должина меѓу 0 и 32."</string>
+ <string name="wifi_ip_settings_invalid_network_prefix_length" msgid="392977552691002076">"Внесете мрежен префикс со должина од 0 до 32."</string>
<string name="wifi_dns1" msgid="5250809981658822505">"DNS 1"</string>
<string name="wifi_dns2" msgid="1905876166783761641">"DNS 2"</string>
- <string name="wifi_gateway" msgid="7455334454444443397">"Мрежен мост"</string>
- <string name="wifi_network_prefix_length" msgid="1941206966133010633">"Долж. на префикс на мрежа"</string>
+ <string name="wifi_gateway" msgid="7455334454444443397">"Портал"</string>
+ <string name="wifi_network_prefix_length" msgid="1941206966133010633">"Должина на мрежен префикс"</string>
<string name="wifi_p2p_settings_title" msgid="3213180637906683308">"Wi‑Fi Direct"</string>
<string name="wifi_p2p_device_info" msgid="4717490498956029237">"Информации за уредот"</string>
<string name="wifi_p2p_persist_network" msgid="1110453878886476660">"Запомни ја оваа врска"</string>
@@ -1063,11 +1062,11 @@
<string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="8914285514605049879">"Интернет-врската на телефонов се споделува преку точка на пристап"</string>
<string name="wifi_hotspot_on_local_only_subtext" msgid="7415381343846704553">"Апликацијата споделува содржини. За споделување на интернет-врската, исклучете ја, а потоа вклучете ја точката на пристап"</string>
<string name="wifi_hotspot_no_password_subtext" msgid="5400500962974373706">"Не е поставена лозинка"</string>
- <string name="wifi_hotspot_name_title" msgid="6572202165400226127">"Име на точка на пристап"</string>
+ <string name="wifi_hotspot_name_title" msgid="6572202165400226127">"Име на точката на пристап"</string>
<string name="wifi_hotspot_name_summary_connecting" msgid="5176787959408511889">"Се вклучува <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>…"</string>
<string name="wifi_hotspot_name_summary_connected" msgid="8387768642326756749">"Другите уреди може да се поврзат на <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>"</string>
- <string name="wifi_hotspot_password_title" msgid="4289338152595154889">"Лозинка на точка на пристап"</string>
- <string name="wifi_hotspot_ap_band_title" msgid="3485744480410441949">"Појас на точката на пристап"</string>
+ <string name="wifi_hotspot_password_title" msgid="4289338152595154889">"Лозинка за точката на пристап"</string>
+ <string name="wifi_hotspot_ap_band_title" msgid="3485744480410441949">"Опсег на точката на пристап"</string>
<string name="wifi_hotspot_footer_info_regular" msgid="3876006922622827363">"Користете точка на пристап за да создадете Wi‑Fi мрежа за другите уреди. Точката на пристап обезбедува интернет со помош на мобилната интернет-врска. Може да ви се наплатат дополнителни трошоци за мобилен интернет."</string>
<string name="wifi_hotspot_footer_info_local_only" msgid="3339582350894639261">"Апликациите може да создадат точка на пристап за да споделуваат содржини со уредите во близина."</string>
<string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"Автоматско исклучување на точката на пристап"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Мобилен интернет"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Ако Wi‑Fi не е достапно, користи ја мобилната мрежа"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Ако мобилната мрежа не е достапна, користи Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Повикувај преку Wi-Fi. Ако Wi‑Fi врската се загуби, повикот ќе заврши."</string>
@@ -1284,7 +1286,7 @@
<string name="sim_reenter_new" msgid="5692585822458989725">"Повторно внеси нов PIN"</string>
<string name="sim_change_pin" msgid="1674620855223900785">"PIN на SIM картичка"</string>
<string name="sim_bad_pin" msgid="2409776007569751629">"Неточен PIN"</string>
- <string name="sim_pins_dont_match" msgid="1076283313667637902">"PIN-овите не се совпаѓаат"</string>
+ <string name="sim_pins_dont_match" msgid="1076283313667637902">"PIN-кодовите не се совпаѓаат"</string>
<string name="sim_change_failed" msgid="8874765697694275459">"Не може да го промените PIN-от.\nМожно е PIN-от да е погрешен."</string>
<string name="sim_change_succeeded" msgid="8802418023120614533">"PIN на SIM картичката е успешно променет"</string>
<string name="sim_lock_failed" msgid="7949781515066772755">"Не може да се промени состојбата на заклучување на SIM картичката.\nМожно е PIN-от да е погрешен."</string>
@@ -1314,7 +1316,7 @@
<string name="hardware_info" msgid="174270144950621815">"Модел и хардвер"</string>
<string name="hardware_revision" msgid="3315744162524354246">"Верзија на хардвер"</string>
<string name="fcc_equipment_id" msgid="8681995718533066093">"ID на опрема"</string>
- <string name="baseband_version" msgid="9115560821840757786">"Верзија со основен појас на фреквенција"</string>
+ <string name="baseband_version" msgid="9115560821840757786">"Верзија на немодулиран опсег"</string>
<string name="kernel_version" msgid="8226014277756019297">"Верзија на кернел"</string>
<string name="build_number" msgid="8648447688306248633">"Број на верзија"</string>
<string name="module_version" msgid="1127871672527968730">"Верзии на модулот за главната линија"</string>
@@ -1355,7 +1357,7 @@
<string name="status_signal_strength" msgid="4302597886933728789">"Јачина на сигнал"</string>
<string name="status_roaming" msgid="5191044997355099561">"Роаминг"</string>
<string name="status_operator" msgid="6017986100643755390">"Мрежа"</string>
- <string name="status_wifi_mac_address" msgid="3868452167971295995">"Адреса на MAC за Wi-Fi"</string>
+ <string name="status_wifi_mac_address" msgid="3868452167971295995">"MAC-адреса на Wi-Fi"</string>
<string name="status_bt_address" msgid="460568179311735657">"Адреса на Bluetooth"</string>
<string name="status_serial_number" msgid="8257722124627415159">"Сериски број"</string>
<string name="status_up_time" msgid="77128395333934087">"Време од последно рестартирање"</string>
@@ -1414,7 +1416,7 @@
<string name="storage_menu_migrate" msgid="1885806122515759703">"Мигрирај податоци"</string>
<string name="storage_menu_forget" msgid="4345021250834642640">"Заборави"</string>
<string name="storage_menu_set_up" msgid="2849170579745958513">"Постави"</string>
- <string name="storage_menu_explore" msgid="3733439525636202662">"Истражувај"</string>
+ <string name="storage_menu_explore" msgid="3733439525636202662">"Разгледајте"</string>
<string name="storage_menu_free" msgid="6586253660759145508">"Ослободи простор"</string>
<string name="storage_menu_manage" msgid="461380717863926516">"Управувајте со капацитетот"</string>
<string name="storage_title_usb" msgid="2015671467177303099">"USB врска со компјутер"</string>
@@ -1456,7 +1458,7 @@
<string name="storage_detail_system" msgid="6784247618772153283">"Систем"</string>
<string name="storage_detail_explore" msgid="8206900269596580264">"Истражи <xliff:g id="NAME">^1</xliff:g>"</string>
<string name="storage_detail_dialog_other" msgid="5073511663616043370">"Под друго, се подразбира споделени датотеки што ги зачувале апликациите, датотеки преземени од интернет или Bluetooth, датотеки на Android итн. \n\nЗа да ги видите видливите содржини на <xliff:g id="NAME">^1</xliff:g>, допрете „Истражете“."</string>
- <string name="storage_detail_dialog_system" msgid="1472572861360014226">"Системот опфаќа датотеки што се извршуваат на верзијата <xliff:g id="VERSION">%s</xliff:g> на Android"</string>
+ <string name="storage_detail_dialog_system" msgid="1472572861360014226">"Системот опфаќа датотеки што се користат за извршување на верзијата <xliff:g id="VERSION">%s</xliff:g> на Android"</string>
<string name="storage_detail_dialog_user" msgid="1663117417635010371">"<xliff:g id="USER_0">^1</xliff:g> може да има зачувани фотографии, музика, апликации или други податоци што зафаќаат <xliff:g id="SIZE">^2</xliff:g> меморија. \n\nЗа детали, префрлете се на <xliff:g id="USER_1">^1</xliff:g>."</string>
<string name="storage_wizard_init_title" msgid="3407283236421089014">"Поставете <xliff:g id="NAME">^1</xliff:g>"</string>
<string name="storage_wizard_init_external_title" msgid="6853250619674645478">"Користи како пренослива меморија"</string>
@@ -1526,7 +1528,7 @@
<string name="battery_level_title" msgid="5207775387973771646">"Ниво на батерија"</string>
<string name="apn_settings" msgid="8130776653826271664">"Поставки на APN"</string>
<string name="apn_edit" msgid="4350571070853305357">"Измени пристапна точка"</string>
- <string name="apn_not_set" msgid="5344235604466825691">"Не е подесено"</string>
+ <string name="apn_not_set" msgid="5344235604466825691">"Не е поставено"</string>
<string name="apn_name" msgid="8431432886706852226">"Име"</string>
<string name="apn_apn" msgid="190519449579357696">"APN"</string>
<string name="apn_http_proxy" msgid="8816906767987944465">"Прокси"</string>
@@ -1567,11 +1569,11 @@
<string name="menu_restore" msgid="3799288817317293115">"Ресетирај на стандардни вредности"</string>
<string name="restore_default_apn_completed" msgid="5671734152740058937">"Ресетирањето стандардни поставки на APN е завршено."</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"Опции за ресетирање"</string>
- <string name="reset_dashboard_summary" msgid="8778383341461126642">"Може да се ресетира мрежа, апликации или уред"</string>
+ <string name="reset_dashboard_summary" msgid="8778383341461126642">"Мрежата, апликациите или уредот може да се ресетираат"</string>
<string name="reset_network_title" msgid="8944059136930806211">"Ресетирај Wi-Fi, мобилен интернет и Bluetooth"</string>
<string name="reset_network_desc" msgid="4982633363916261109">"Ова ќе ги ресетира сите мрежни поставки, вклучувајќи:\n\n"<li>"Wi‑Fi"</li>\n<li>"Мобилен интернет"</li>\n<li>"Bluetooth"</li></string>
<string name="reset_esim_title" msgid="7630781767040831893">"Избриши преземени SIM-картички"</string>
- <string name="reset_esim_desc" msgid="433226911566802">"За да преземете SIM-картички за замена, контактирајте со операторот. Ова нема да ги откаже плановите за мобилни услуги."</string>
+ <string name="reset_esim_desc" msgid="433226911566802">"За да преземете SIM-картички за замена, контактирајте со операторот. Со ова не се откажуваат пакети за мобилни услуги."</string>
<string name="reset_network_button_text" msgid="4293271046867912819">"Ресетирај поставки"</string>
<string name="reset_network_final_desc" msgid="2463817067048751373">"Да се ресетираат сите мрежни поставки? Ова дејство не може да се врати."</string>
<string name="reset_network_final_desc_esim" msgid="4676436976372555750">"Да се ресетираат сите мрежни поставки и да се избришат преземените SIM-картички? Ова дејство не може да се врати."</string>
@@ -1583,13 +1585,13 @@
<string name="reset_esim_error_msg" msgid="4716366079119742235">"Преземените SIM-картички не може да се избришат поради грешка.\n\nРестартирајте го уредот и обидете се повторно."</string>
<string name="master_clear_title" msgid="1560712943955904673">"Избриши ги сите податоци (фабричко ресетирање)"</string>
<string name="master_clear_short_title" msgid="919098101581335101">"Избриши ги сите податоци"</string>
- <string name="master_clear_desc" product="tablet" msgid="3432373610755760899">"Ова ќе ги избрише сите податоци од "<b>"внатрешна меморија"</b>"на вашиот таблет, заедно со:\n\n"<li>"вашата сметка на Google;"</li>\n<li>"податоците и поставките на системот и апликациите;"</li>\n<li>"преземените апликации."</li></string>
- <string name="master_clear_desc" product="default" msgid="8765543541962866697">"Ова ќе ги избрише сите податоци од "<b>"внатрешната меморија"</b>" на телефонот, заедно со:\n\n"<li>"вашата сметка на Google;"</li>\n<li>"податоците и поставките на системот и апликациите;"</li>\n<li>"преземените апликации."</li></string>
+ <string name="master_clear_desc" product="tablet" msgid="3432373610755760899">"Ова ќе ги избрише сите податоци од "<b>"внатрешната меморија"</b>"на таблетот, заедно со:\n\n"<li>"вашата сметка на Google"</li>\n<li>"податоците и поставките на системот и апликациите"</li>\n<li>"преземените апликации"</li></string>
+ <string name="master_clear_desc" product="default" msgid="8765543541962866697">"Ова ќе ги избрише сите податоци од "<b>"внатрешната меморија"</b>" на телефонот, заедно со:\n\n"<li>"вашата сметка на Google"</li>\n<li>"податоците и поставките на системот и апликациите"</li>\n<li>"преземените апликации"</li></string>
<string name="master_clear_accounts" product="default" msgid="3432884235445405376">\n\n"Моментално сте најавени на следниве сметки:\n"</string>
<string name="master_clear_other_users_present" product="default" msgid="5993259656117566767">\n\n"Присутни се и други корисници на уредот.\n"</string>
<string name="master_clear_desc_also_erases_external" msgid="3947303501615091903"><li>"Музика"</li>\n<li>"Фотографии"</li>\n<li>"Други податоци за корисникот"</li></string>
- <string name="master_clear_desc_also_erases_esim" msgid="4497260499055258773"><li>"eSIM-картички"</li></string>
- <string name="master_clear_desc_no_cancel_mobile_plan" msgid="6072668588881679461">\n\n"Тоа нема да го откаже вашиот пакет за мобилни услуги."</string>
+ <string name="master_clear_desc_also_erases_esim" msgid="4497260499055258773"><li>"eSIM-картичките"</li></string>
+ <string name="master_clear_desc_no_cancel_mobile_plan" msgid="6072668588881679461">\n\n"Со ова нема да се откаже вашиот пакет за мобилни услуги."</string>
<string name="master_clear_desc_erase_external_storage" product="nosdcard" msgid="2723272952715259307">\n\n"За да исчистите музика, слики и други податоци на корисникот, "<b>"меморијата"</b>" треба да се избрише."</string>
<string name="master_clear_desc_erase_external_storage" product="default" msgid="9003555775524798797">\n\n"За да исчистите музика, слики и други податоци на корисникот, "<b>"СД картичката"</b>" треба да се избрише."</string>
<string name="erase_external_storage" product="nosdcard" msgid="8989746770347525207">"Избриши USB меморија"</string>
@@ -1606,22 +1608,22 @@
<string name="master_clear_not_available" msgid="4676613348163652454">"Фабричкото ресетирање не е достапно за овој корисник"</string>
<string name="master_clear_progress_title" msgid="378953167274114857">"Се брише"</string>
<string name="master_clear_progress_text" msgid="5418958116008976218">"Почекајте..."</string>
- <string name="call_settings_title" msgid="5033906789261282752">"Поставки на повик"</string>
+ <string name="call_settings_title" msgid="5033906789261282752">"Поставки за повици"</string>
<string name="call_settings_summary" msgid="2119161087671450035">"Постави говорна пошта, проследување на повик, повик на чекање, ID на повикувач"</string>
- <string name="tether_settings_title_usb" msgid="4265582654602420357">"Поврзување со USB"</string>
+ <string name="tether_settings_title_usb" msgid="4265582654602420357">"Интернет преку USB"</string>
<string name="tether_settings_title_wifi" msgid="2060965130234484613">"Преносл. точка на пристап"</string>
- <string name="tether_settings_title_bluetooth" msgid="1999590158102569959">"Поврзување со Bluetooth"</string>
- <string name="tether_settings_title_usb_bluetooth" msgid="1159128764162788159">"Поврзување"</string>
+ <string name="tether_settings_title_bluetooth" msgid="1999590158102569959">"Интернет преку Bluetooth"</string>
+ <string name="tether_settings_title_usb_bluetooth" msgid="1159128764162788159">"Врзување"</string>
<string name="tether_settings_title_all" msgid="6935843543433954181">"Точка на пристап и врзување"</string>
<string name="tether_settings_summary_hotspot_on_tether_on" msgid="1289593649526514499">"Точката на пристап е вклучена, се поврзува"</string>
<string name="tether_settings_summary_hotspot_on_tether_off" msgid="8010689354668285422">"Точката на пристап е вклучена"</string>
- <string name="tether_settings_summary_hotspot_off_tether_on" msgid="1349909238672649877">"Поврзување"</string>
+ <string name="tether_settings_summary_hotspot_off_tether_on" msgid="1349909238672649877">"Врзување"</string>
<string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"Не може да се врзе или се да користат преносни точки на пристап додека е вклучен Штедачот на интернет"</string>
<string name="usb_title" msgid="7480927657535578688">"USB"</string>
- <string name="usb_tethering_button_text" msgid="6242228383142012332">"Поврзување со USB"</string>
+ <string name="usb_tethering_button_text" msgid="6242228383142012332">"Интернет преку USB"</string>
<string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Споделете ја интернет-врската на телефонот преку USB"</string>
<string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"Споделете ја интернет-врската на таблетот преку USB"</string>
- <string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"Поврзување со Bluetooth"</string>
+ <string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"Интернет преку Bluetooth"</string>
<string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"Споделете ја интернет-врската на таблетот преку Bluetooth"</string>
<string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Споделете ја интернет-врската на телефонот преку Bluetooth"</string>
<string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"Интернет-врската на <xliff:g id="DEVICE_NAME">%1$d</xliff:g> се споделува преку Bluetooth"</string>
@@ -1635,8 +1637,8 @@
<string name="sms_change_default_dialog_title" msgid="6301260161969667578">"Избери апликација за SMS"</string>
<string name="sms_change_default_dialog_text" msgid="8275088077930942680">"Да се користи <xliff:g id="NEW_APP">%1$s</xliff:g> наместо <xliff:g id="CURRENT_APP">%2$s</xliff:g> како SMS-апликација?"</string>
<string name="sms_change_default_no_previous_dialog_text" msgid="4680224695080527907">"Користи <xliff:g id="NEW_APP">%s</xliff:g> како SMS-апликација?"</string>
- <string name="network_scorer_picker_title" msgid="1691073966560952916">"Оператор за оценување мрежа"</string>
- <string name="network_scorer_picker_none_preference" msgid="6448280557733231737">"Ниедно"</string>
+ <string name="network_scorer_picker_title" msgid="1691073966560952916">"Оценувач на мрежата"</string>
+ <string name="network_scorer_picker_none_preference" msgid="6448280557733231737">"Нема"</string>
<string name="network_scorer_change_active_dialog_title" msgid="4274159562371475090">"Да се промени помошникот за Wi‑Fi?"</string>
<string name="network_scorer_change_active_dialog_text" msgid="4264089809189760730">"Да се користи <xliff:g id="NEW_APP">%1$s</xliff:g> наместо <xliff:g id="CURRENT_APP">%2$s</xliff:g> за управување со мрежните врски?"</string>
<string name="network_scorer_change_active_no_previous_dialog_text" msgid="6394483538843474495">"Да се користи <xliff:g id="NEW_APP">%s</xliff:g> за управување на вашите мрежни врски?"</string>
@@ -1654,7 +1656,7 @@
</plurals>
<string name="location_category_recent_location_access" msgid="286059523360285026">"Неодамнешен пристап до локацијата"</string>
<string name="location_recent_location_access_view_details" msgid="2051602261436245905">"Прикажи ги деталите"</string>
- <string name="location_no_recent_apps" msgid="77502059586413278">"Нема апликации што скоро побарале локација"</string>
+ <string name="location_no_recent_apps" msgid="77502059586413278">"Нема апликации што неодамна побарале утврдување на локацијата"</string>
<string name="location_no_recent_accesses" msgid="6289916310397279890">"Ниедна апликација нема пристапено до локацијата неодамна"</string>
<string name="location_high_battery_use" msgid="7177199869979522663">"Голема искористеност на бат."</string>
<string name="location_low_battery_use" msgid="5030448574501435888">"Мала искористеност на бат."</string>
@@ -1690,7 +1692,7 @@
<string name="safety_and_regulatory_info" msgid="7113766428000920132">"Упатство за безбедност и регулатива"</string>
<string name="copyright_title" msgid="3847703367689932190">"Авторски права"</string>
<string name="license_title" msgid="7582145947873528540">"Лиценца"</string>
- <string name="terms_title" msgid="1804549588198223771">"Правила и услови"</string>
+ <string name="terms_title" msgid="1804549588198223771">"Одредби и услови"</string>
<string name="webview_license_title" msgid="8244960025549725051">"Системска лиценца за WebView"</string>
<string name="wallpaper_attributions" msgid="2941987966332943253">"Тапети"</string>
<string name="wallpaper_attributions_values" msgid="4461979853894606323">"Извор на сателитски снимки:\n©2014 CNES/Astrium, DigitalGlobe, Bluesky"</string>
@@ -1715,7 +1717,7 @@
<string name="lockpassword_confirm_your_pattern_header" msgid="7137526922696316545">"Потврдете ја шемата"</string>
<string name="lockpassword_confirm_your_pin_header" msgid="4335593948303036343">"Внесете го PIN-кодот повторно"</string>
<string name="lockpassword_confirm_passwords_dont_match" msgid="1783767008133345784">"Лозинките не се совпаѓаат"</string>
- <string name="lockpassword_confirm_pins_dont_match" msgid="5444357293637748942">"PIN-овите не се совпаѓаат"</string>
+ <string name="lockpassword_confirm_pins_dont_match" msgid="5444357293637748942">"PIN-кодовите не се совпаѓаат"</string>
<string name="lockpassword_draw_your_pattern_again_header" msgid="9017394036814402348">"Нацртајте ја шемата повторно"</string>
<string name="lockpassword_choose_lock_generic_header" msgid="4418423132980560119">"Избери начин на отклучување"</string>
<string name="lockpassword_password_set_toast" msgid="601928982984489868">"Лозинката е поставена"</string>
@@ -1740,7 +1742,7 @@
<string name="lockpassword_confirm_your_pin_details_frp" msgid="6849889353126558761">"Телефонот е ресетиран на фабрички поставки. За да го користите, внесете го претходниот PIN."</string>
<string name="lockpassword_confirm_your_password_details_frp" msgid="3239944795659418737">"Телефонот е ресетиран на фабрички поставки. За да го користите, внесете ја претходната лозинка."</string>
<string name="lockpassword_confirm_your_pattern_header_frp" msgid="3290569334665839860">"Потврдете ја шемата"</string>
- <string name="lockpassword_confirm_your_pin_header_frp" msgid="8520474869079710782">"Потврди PIN"</string>
+ <string name="lockpassword_confirm_your_pin_header_frp" msgid="8520474869079710782">"Потврдете го PIN-от"</string>
<string name="lockpassword_confirm_your_password_header_frp" msgid="7326670978891793470">"Потврдете ја лозинката"</string>
<string name="lockpassword_invalid_pin" msgid="3059022215815900137">"Погрешен PIN"</string>
<string name="lockpassword_invalid_password" msgid="8374331995318204099">"Погрешна лозинка"</string>
@@ -1748,12 +1750,12 @@
<string name="lock_settings_title" msgid="233657584969886812">"Безбедност на уред"</string>
<string name="lockpattern_change_lock_pattern_label" msgid="333149762562581510">"Промени шема на отклучување"</string>
<string name="lockpattern_change_lock_pin_label" msgid="3435796032210265723">"Промени PIN за отклучување"</string>
- <string name="lockpattern_recording_intro_header" msgid="2262005028838969839">"Нацртајте ја шемата за отклучување"</string>
+ <string name="lockpattern_recording_intro_header" msgid="2262005028838969839">"Нацртајте шема за отклучување"</string>
<string name="lockpattern_recording_intro_footer" msgid="5426745740754065099">"Притисни „Мени“ за помош."</string>
<string name="lockpattern_recording_inprogress" msgid="4060818382176523671">"Отпуштете го прстот кога ќе завршите"</string>
<string name="lockpattern_recording_incorrect_too_short" msgid="6374760294545431845">"Поврзете најмалку <xliff:g id="NUMBER">%d</xliff:g> точки. Обидете се повторно."</string>
<string name="lockpattern_pattern_entered_header" msgid="2108106638322637851">"Шемата е снимена"</string>
- <string name="lockpattern_need_to_confirm" msgid="4079482507985867389">"Употреби ја шемата повторно за потврда"</string>
+ <string name="lockpattern_need_to_confirm" msgid="4079482507985867389">"Нацртајте ја шемата повторно за потврда"</string>
<string name="lockpattern_pattern_confirmed_header" msgid="5603156929428721407">"Вашата нова шема за отклучување"</string>
<string name="lockpattern_confirm_button_text" msgid="7059311304112902598">"Потврди"</string>
<string name="lockpattern_restart_button_text" msgid="4322968353922529868">"Измени"</string>
@@ -1790,7 +1792,7 @@
<string name="install_applications" msgid="7745902974984889179">"Непознати извори"</string>
<string name="install_applications_title" msgid="8164828577588659496">"Дозв. ги сите изв. на аплик."</string>
<string name="recent_app_category_title" msgid="7688788038277126727">"Неодамна отворени апликации"</string>
- <string name="see_all_apps_title" msgid="6435061912110347474">"Видете ги сите <xliff:g id="COUNT">%1$d</xliff:g> апликации"</string>
+ <string name="see_all_apps_title" msgid="6435061912110347474">"Видете ги сите апликации (<xliff:g id="COUNT">%1$d</xliff:g>)"</string>
<string name="install_all_warning" product="tablet" msgid="4580699862358542727">"Вашиот таблет и личните податоци се повеќе подложни на напади од апликации од непознати извори. Ако инсталирате апликации од изворов, се согласувате дека сте одговорни за каква било штета на таблетот или губењето податоци што може да произлезат од користењето на овие апликации."</string>
<string name="install_all_warning" product="default" msgid="7445839116997296358">"Вашиот телефон и личните податоци се повеќе подложни на напади од апликации од непознати извори. Ако инсталирате апликации од изворов, се согласувате дека сте одговорни за каква било штета на телефонот или губењето податоци што може да произлезат од користењето на овие апликации."</string>
<string name="install_all_warning" product="device" msgid="9141585291103603515">"Вашиот уред и личните податоци се повеќе подложни на напади од непознати апликации. Ако инсталирате апликации од изворов, се согласувате дека сте одговорни за каква било штета на уредот или губење податоци што може да произлезат од користењето на апликациите."</string>
@@ -1803,7 +1805,7 @@
<string name="screen_compatibility_label" msgid="3638271673726075815">"Компатибилност на екран"</string>
<string name="permissions_label" msgid="7341733648403464213">"Дозволи"</string>
<string name="cache_header_label" msgid="3202284481380361966">"Кеш"</string>
- <string name="clear_cache_btn_text" msgid="107507684844780651">"Исчисти кеш"</string>
+ <string name="clear_cache_btn_text" msgid="107507684844780651">"Избриши кеш"</string>
<string name="cache_size_label" msgid="6205173678102220499">"Кеш"</string>
<plurals name="uri_permissions_text" formatted="false" msgid="8938478333743197020">
<item quantity="one">%d ставка</item>
@@ -1815,7 +1817,7 @@
<string name="total_size_label" msgid="3929917501176594692">"Вкупно"</string>
<string name="application_size_label" msgid="175357855490253032">"Големина на апликација"</string>
<string name="external_code_size_label" msgid="3434421216268309411">"Апликација за USB меморија"</string>
- <string name="data_size_label" msgid="7790201846922671662">"Податоци на корисникот"</string>
+ <string name="data_size_label" msgid="7790201846922671662">"Кориснички податоци"</string>
<string name="external_data_size_label" product="nosdcard" msgid="8004991551882573479">"Податоци на USB меморија"</string>
<string name="external_data_size_label" product="default" msgid="1097584278225902734">"СД картичка"</string>
<string name="uninstall_text" msgid="4859715815689705801">"Деинсталирај"</string>
@@ -1823,7 +1825,7 @@
<string name="install_text" msgid="2798092278891807849">"Инсталирај"</string>
<string name="disable_text" msgid="5065834603951474397">"Оневозможи"</string>
<string name="enable_text" msgid="7179141636849225884">"Овозможи"</string>
- <string name="clear_user_data_text" msgid="8894073247302821764">"Исчисти ја меморијата"</string>
+ <string name="clear_user_data_text" msgid="8894073247302821764">"Ослободи простор"</string>
<string name="app_factory_reset" msgid="8718986000278776272">"Деинсталирај ажурирања"</string>
<string name="auto_launch_enable_text" msgid="3372898942144027341">"Избравте оваа апликација да се стартува стандардно за некои дејства."</string>
<string name="always_allow_bind_appwidgets_text" msgid="2286211654774611037">"Сте одбрале да ѝ дозволите за апликацијата да создава виџети и да пристапува кон нивните податоци."</string>
@@ -1840,8 +1842,8 @@
<string name="show_running_services" msgid="1895994322704667543">"Прикажи активни услуги"</string>
<string name="show_background_processes" msgid="88012264528093617">"Прикажи кеширани процеси"</string>
<string name="default_emergency_app" msgid="286530070173495823">"Апликација за итност"</string>
- <string name="reset_app_preferences" msgid="1426500030595212077">"Ресет. парам. на аплик."</string>
- <string name="reset_app_preferences_title" msgid="792909865493673598">"Ресетирај параметри на апликација?"</string>
+ <string name="reset_app_preferences" msgid="1426500030595212077">"Ресетирај ги поставките за апликациите"</string>
+ <string name="reset_app_preferences_title" msgid="792909865493673598">"Да се ресетираат поставките за апликациите?"</string>
<string name="reset_app_preferences_desc" msgid="7935273005301096031">"Со ова се ресетираат сите параметри за:\n\n"<li>"оневозможени апликации"</li>\n<li>"оневозможени известувања на апликација"</li>\n<li>"стандардни апликации за дејства"</li>\n<li>"ограничувања за податоци во заднина за апликации"</li>\n<li>"сите ограничувања за дозволи"</li>\n\n" Нема да изгубите никакви податоци од апликациите."</string>
<string name="reset_app_preferences_button" msgid="2041894727477934656">"Ресетирај апликации"</string>
<string name="manage_space_text" msgid="6166469422303124302">"Управувај со простор"</string>
@@ -2036,7 +2038,7 @@
<string name="accessibility_settings_title" msgid="1687226556576913576">"Поставки на пристапност"</string>
<string name="accessibility_settings_summary" msgid="5742379519336396561">"Читачи на екран, екран, контроли за интеракција"</string>
<string name="vision_settings_title" msgid="7315352351051423944">"Визуелна пристапност"</string>
- <string name="vision_settings_description" msgid="3476589459009287332">"Уредот може да го приспособите да одговара на вашите потреби. Овие карактеристики за пристапност може да ги смените подоцна во Поставки."</string>
+ <string name="vision_settings_description" msgid="3476589459009287332">"Уредот може да го приспособите да одговара на вашите потреби. Овие функции за пристапност може да ги смените подоцна во Поставки."</string>
<string name="vision_settings_suggestion_title" msgid="7268661419110951128">"Променете ја големината на фонтот"</string>
<string name="screen_reader_category_title" msgid="6300714148519645544">"Читачи на екран"</string>
<string name="audio_and_captions_category_title" msgid="6140472938769619212">"Аудио и текст на екранот"</string>
@@ -2081,8 +2083,8 @@
<string name="accessibility_timeout_2mins" msgid="4124259290444829477">"2 минути"</string>
<string name="accessibility_content_timeout_preference_title" msgid="5160746882250939464">"Време за читање"</string>
<string name="accessibility_control_timeout_preference_title" msgid="2771808346038759474">"Време за преземање дејство"</string>
- <string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"Изберете колку долго да се прикажуваат пораките што треба да ги прочитате, но се видливи само привремено.\n\nНе сите апликации ја поддржуваат оваа поставка."</string>
- <string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"Изберете колку долго да се прикажуваат пораките што бараат да преземете дејство, но се видливи само привремено.\n\nНе сите апликации ја поддржуваат оваа поставка."</string>
+ <string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"Изберете колку долго да се прикажуваат пораките што треба да ги прочитате, но се видливи само привремено.\n\nНекои апликации не ја поддржуваат оваа поставка."</string>
+ <string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"Изберете колку долго да се прикажуваат пораките што бараат да преземете дејство, но се видливи само привремено.\n\nНекои апликации не ја поддржуваат оваа поставка."</string>
<string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"Должина на допир и задржување"</string>
<string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"Инверзија на бои"</string>
<string name="accessibility_display_inversion_preference_subtitle" msgid="69291255322175323">"Може да влијае на изведбата"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Вибрации при известување"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Вибрации при ѕвонење"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Вибрации при допир"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Користи ја услугата"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Користи корекција на бои"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Користи титлoви"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Користи ја услугата"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Користи корекција на боите"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Користи титли"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Продолжи"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Слушни помагала"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Нема поврзани слушни помагала"</string>
@@ -2108,7 +2110,7 @@
<item quantity="other"><xliff:g id="NUMBER_DEVICE_COUNT_1">%1$d</xliff:g> зачувани слушни помагала</item>
</plurals>
<string name="accessibility_summary_state_enabled" msgid="7357731696603247963">"Вклучен"</string>
- <string name="accessibility_summary_state_disabled" msgid="9197369047683087620">"Исклучен"</string>
+ <string name="accessibility_summary_state_disabled" msgid="9197369047683087620">"Исклучено"</string>
<string name="accessibility_summary_state_stopped" msgid="3170264683616172746">"Не работи. Допрете за информации."</string>
<string name="accessibility_description_state_stopped" msgid="7666178628053039493">"Услугава е дефектна."</string>
<string name="enable_quick_setting" msgid="1580451877998661255">"Прикажи во „Брзи поставки“"</string>
@@ -2238,7 +2240,7 @@
<string name="background_activity_warning_dialog_title" msgid="2170790412855899678">"Да се ограничи активноста во заднина?"</string>
<string name="background_activity_warning_dialog_text" msgid="8242749826732375096">"Апликацијата може да се однесува необично ако ја ограничите нејзината активност во заднина"</string>
<string name="background_activity_disabled_dialog_text" msgid="4234598000779459640">"Апликацијава не е оптимизирана и не може да се ограничи.\n\nЗа да ја ограничите, прво вклучете оптимизација на батеријата."</string>
- <string name="device_screen_usage" msgid="4470485475363132750">"Искористеност на екранот по целосно полнење"</string>
+ <string name="device_screen_usage" msgid="4470485475363132750">"Користење на екранот по целосно полнење"</string>
<string name="power_usage_list_summary" msgid="4314438658308211057">"Искористеност на батеријата по целосното полнење"</string>
<string name="screen_usage_summary" msgid="263396144684078341">"Време на активен екран по целосно полнење"</string>
<string name="device_usage_list_summary" msgid="8299017481332816368">"Искористеност на уредот по целосно полнење"</string>
@@ -2259,7 +2261,7 @@
<string name="awake" msgid="8956720170442161285">"Време на активност на уред"</string>
<string name="wifi_on_time" msgid="2487820618265936068">"Wi-Fi на време"</string>
<string name="bluetooth_on_time" msgid="6400569492287292639">"Wi-Fi на време"</string>
- <string name="advanced_battery_title" msgid="5026866913848464170">"Користење на батеријата"</string>
+ <string name="advanced_battery_title" msgid="5026866913848464170">"Искористеност на батеријата"</string>
<string name="history_details_title" msgid="8608193822257799936">"Детали на историја"</string>
<string name="battery_details_title" msgid="5358230551490703067">"Искористеност на батеријата"</string>
<string name="details_subtitle" msgid="7279638828004951382">"Користи детали"</string>
@@ -2334,7 +2336,7 @@
<string name="battery_auto_restriction_title" msgid="488905332794794076">"Користење управник со батерија"</string>
<string name="battery_auto_restriction_summary" msgid="1638072655581821837">"Откријте кога апликациите ја трошат батеријата"</string>
<string name="battery_manager_on" msgid="5626982529932239656">"Вклучено/Се открива кога апликациите ја трошат батеријата"</string>
- <string name="battery_manager_off" msgid="9114027524232450371">"Исклучен"</string>
+ <string name="battery_manager_off" msgid="9114027524232450371">"Исклучено"</string>
<plurals name="battery_manager_app_restricted" formatted="false" msgid="6721813588142691216">
<item quantity="one">%1$d апликација е ограничена</item>
<item quantity="other">%1$d апликации се ограничени</item>
@@ -2427,7 +2429,7 @@
<string name="battery_detail_since_full_charge" msgid="3814176986148084378">"Детали по последното целосно полнење"</string>
<string name="battery_last_full_charge" msgid="5624033030647170717">"Последно целосно полнење"</string>
<string name="battery_full_charge_last" msgid="4614554109170251301">"Целосното полнење трае околу"</string>
- <string name="battery_footer_summary" msgid="4828444679643906943">"Податоците за батеријата се приближни и може да се променат според употребата"</string>
+ <string name="battery_footer_summary" msgid="4828444679643906943">"Податоците за батеријата се приближни и може да се менуваат зависно од користењето"</string>
<string name="battery_detail_foreground" msgid="6616408559186553085">"Во активна употреба"</string>
<string name="battery_detail_background" msgid="7938146832943604280">"Употреба во заднина"</string>
<string name="battery_detail_power_usage" msgid="3606930232257489212">"Искористеност на батеријата"</string>
@@ -2453,13 +2455,13 @@
<string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"Ќе се вклучи на <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Поставете распоред"</string>
<string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"Исклучи кога е целосно полна"</string>
- <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"„Штедачот на батерија“ ќе се исклучи кога нивото на батеријата на телефонот ќе биде на <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
+ <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"„Штедачот на батерија“ ќе се исклучи кога нивото на батеријата на телефонот ќе биде <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"„Штедачот на батерија“ ќе се исклучи кога нивото на батеријата на таблетот ќе биде на <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<string name="battery_saver_sticky_description_new" product="device" msgid="5056520668081504111">"„Штедачот на батерија“ ќе се исклучи кога нивото на батеријата на уредот ќе биде на <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Вклучи"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Користи го штедачот на батерија"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Користи го „Штедачот на батерија“"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Вклучи автоматски"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Никогаш"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"при <xliff:g id="PERCENT">%1$s</xliff:g> батерија"</string>
@@ -2525,11 +2527,11 @@
<string name="credentials_install" product="default" msgid="8997183776710118353">"Инсталирај од СД картичка"</string>
<string name="credentials_install_summary" product="nosdcard" msgid="3426661965567059596">"Инсталирај сертификати од меморија"</string>
<string name="credentials_install_summary" product="default" msgid="4943897416156671633">"Инсталирај сертификати од СД картичка"</string>
- <string name="credentials_reset" msgid="355080737664731678">"Исчисти акредитиви"</string>
+ <string name="credentials_reset" msgid="355080737664731678">"Избриши акредитиви"</string>
<string name="credentials_reset_summary" msgid="7622528359699428555">"Отстрани ги сите акредитиви"</string>
<string name="trusted_credentials" msgid="6989242522455395200">"Доверливи акредитиви"</string>
<string name="trusted_credentials_summary" msgid="7411781319056251582">"Прикажи доверливи CA сертификати"</string>
- <string name="user_credentials" msgid="8365731467650306757">"Акредитиви на корисникот"</string>
+ <string name="user_credentials" msgid="8365731467650306757">"Кориснички акредитиви"</string>
<string name="user_credentials_summary" msgid="7350223899317423252">"Прегледајте и изменете ги зачуваните акредитиви"</string>
<string name="advanced_security_title" msgid="286883005673855845">"Напредни"</string>
<string name="credential_storage_type" msgid="2585337320206095255">"Тип меморија"</string>
@@ -2538,7 +2540,7 @@
<string name="credentials_settings_not_available" msgid="5490259681690183274">"Акредитивите не се достапни за овој корисник"</string>
<string name="credential_for_vpn_and_apps" msgid="2462642486949593841">"Инсталиран за VPN и апликации"</string>
<string name="credential_for_wifi" msgid="2903295786961726388">"Инсталиран за Wi-Fi"</string>
- <string name="credentials_reset_hint" msgid="3484350477764088169">"Отстрани ги сите содржини?"</string>
+ <string name="credentials_reset_hint" msgid="3484350477764088169">"Да се отстранат сите содржини?"</string>
<string name="credentials_erased" msgid="7287088033523869085">"Меморијата на акредитиви е избришана."</string>
<string name="credentials_not_erased" msgid="9137227570738627637">"Мемо за. акредит. не се брише."</string>
<string name="usage_access_title" msgid="7981321142726540574">"Апликации со пристап до корис."</string>
@@ -2563,8 +2565,8 @@
<string name="fullbackup_erase_dialog_message" msgid="2588536036471144070">"Дали да се престане со создавање резервна копија на податоците за уредот (како што се лозинки за Wi-Fi и историја на повици) и податоците за апликациите (како што се поставки и датотеки што ги складирале апликациите) и да се избришат сите копии на далечински сервери?"</string>
<string name="fullbackup_data_summary" msgid="406274198094268556">"Автоматски создајте резервна копија на податоците на уредот (како што се лозинки за Wi-Fi и историја на повици) и податоците за апликациите (како што се поставки и датотеки кои ги складирале апликациите) од далечина.\n\nОткако ќе вклучите автоматско создавање резервна копија, податоците за уредот и апликациите повремено се зачувуваат на далечина. Податоците за апликацијата може да бидат секакви податоци кои ги зачувала апликацијата (според поставките на програмерот), вклучувајќи потенцијално чувствителни податоци како што се контакти, пораки и фотографии."</string>
<string name="device_admin_settings_title" msgid="2074319456047334589">"Поставки за администраторот на уредот"</string>
- <string name="active_device_admin_msg" msgid="6929247869516924549">"Апликација на администраторот на уредот"</string>
- <string name="remove_device_admin" msgid="4413438593788336400">"Деактивирај ја апликацијата на администраторот на уредот"</string>
+ <string name="active_device_admin_msg" msgid="6929247869516924549">"Апликација за администраторот на уредот"</string>
+ <string name="remove_device_admin" msgid="4413438593788336400">"Деактивирај ја апликацијата за администраторот на уредот"</string>
<string name="uninstall_device_admin" msgid="9017499299961719830">"Деинсталирај ја апликацијата"</string>
<string name="remove_and_uninstall_device_admin" msgid="5607703579731496253">"Деактивирај и деинсталирај"</string>
<string name="select_device_admin_msg" msgid="4173769638399075387">"Апликации за администраторот"</string>
@@ -2574,18 +2576,18 @@
<string name="sms_access_restriction_enabled" msgid="3006320256764718303">"Ограничи пристап до SMS и евиденцијата на повици"</string>
<string name="sms_access_restriction_enabled_summary" msgid="9011946580977780063">"Само стандардните апликации за телефон и пораки имаат дозволи за SMS и евиденција на повици"</string>
<string name="no_trust_agents" msgid="5757792915019113084">"Нема достапни агенти од доверба"</string>
- <string name="add_device_admin_msg" msgid="3573765823476931173">"Да се активира аплик. на администратор?"</string>
- <string name="add_device_admin" msgid="1621152410207260584">"Активирај ја апликацијата на администраторот на уредот"</string>
+ <string name="add_device_admin_msg" msgid="3573765823476931173">"Да се активира аплик. за администратор?"</string>
+ <string name="add_device_admin" msgid="1621152410207260584">"Активирај ја апликацијата за администраторот на уредот"</string>
<string name="device_admin_add_title" msgid="6097881332139146897">"Администратор на уредот"</string>
- <string name="device_admin_warning" msgid="4421817419326480449">"Со активирање на апликацијата на администраторот ќе се дозволи апликацијата „<xliff:g id="APP_NAME">%1$s</xliff:g>“ да ги извршува следните операции:"</string>
- <string name="device_admin_status" msgid="5424944611789040723">"Апликацијата на администраторот е активна и дозволува апликацијата „<xliff:g id="APP_NAME">%1$s</xliff:g>“ да ги извршува следните операции:"</string>
+ <string name="device_admin_warning" msgid="4421817419326480449">"Со активирање на апликацијата за администраторот ќе се дозволи апликацијата <xliff:g id="APP_NAME">%1$s</xliff:g> да ги извршува следниве операции:"</string>
+ <string name="device_admin_status" msgid="5424944611789040723">"Апликацијата за администраторот е активна и дозволува апликацијата <xliff:g id="APP_NAME">%1$s</xliff:g> да ги извршува следниве операции:"</string>
<string name="profile_owner_add_title" msgid="735805919754362791">"Да се активира Управникот со профил?"</string>
<string name="adding_profile_owner_warning" msgid="1284541194547382194">"Ако продолжите, администраторот ќе управува со вашиот корисник, а ќе може и да складира поврзани податоци, заедно со вашите лични податоци.\n\nАдминистраторот може да ги следи поставките, пристапот, апликациите и податоците поврзани со овој корисник и да управува со нив, како и со мрежната активност и информациите за локацијата на уредот."</string>
<string name="admin_disabled_other_options" msgid="8097063307730025707">"Другите опции се оневозможени од администраторот"</string>
<string name="admin_more_details" msgid="1719819589822345585">"Повеќе детали"</string>
<string name="notification_log_title" msgid="4200467765474474753">"Дневник за известувања"</string>
<string name="sound_category_call_ringtone_vibrate_title" msgid="4678065664534722153">"Мелодија на повик и вибрации"</string>
- <string name="wifi_setup_detail" msgid="3551227109377008779">"Детали за мрежа"</string>
+ <string name="wifi_setup_detail" msgid="3551227109377008779">"Детали за мрежата"</string>
<string name="accessibility_sync_enabled" msgid="4620153705473448002">"Синхронизација е овозможена"</string>
<string name="accessibility_sync_disabled" msgid="3810092470274708197">"Синхронизацијата е оневозможена"</string>
<string name="accessibility_sync_in_progress" msgid="440606222479878898">"Се синхронизира"</string>
@@ -2594,7 +2596,7 @@
<string name="sync_active" msgid="1112604707180806364">"Синхронизирањето е активно"</string>
<string name="account_sync_settings_title" msgid="3344538161552327748">"Синхронизирај"</string>
<string name="sync_is_failing" msgid="8284618104132302644">"Во моментов има проблеми со синхронизацијата. Ќе се среди наскоро."</string>
- <string name="add_account_label" msgid="4461298847239641874">"Додај сметка"</string>
+ <string name="add_account_label" msgid="4461298847239641874">"Додајте сметка"</string>
<string name="managed_profile_not_available_label" msgid="8784246681719821917">"Работниот профил уште не е достапен"</string>
<string name="work_mode_label" msgid="6845849194740195757">"Работен профил"</string>
<string name="work_mode_on_summary" msgid="1682781113156323592">"Управувано од вашата организација"</string>
@@ -2625,8 +2627,8 @@
<string name="preference_change_password_title" msgid="7243527448378789274">"Смени лозинка"</string>
<string name="header_account_settings" msgid="8586173964125512219">"Поставки на сметка"</string>
<string name="remove_account_label" msgid="5885425720323823387">"Отстрани сметка"</string>
- <string name="header_add_an_account" msgid="8482614556580804956">"Додај сметка"</string>
- <string name="really_remove_account_title" msgid="4166512362915154319">"Отстрани сметка?"</string>
+ <string name="header_add_an_account" msgid="8482614556580804956">"Додајте сметка"</string>
+ <string name="really_remove_account_title" msgid="4166512362915154319">"Да се отстрани сметката?"</string>
<string name="really_remove_account_message" product="tablet" msgid="7403843371045856719">"Со отстранување на оваа сметка ќе се избришат сите нејзини пораки, контакти и другите податоци од таблетот!"</string>
<string name="really_remove_account_message" product="default" msgid="8951224626153163914">"Со отстранување на оваа сметка ќе се избришат сите нејзини пораки, контакти и другите податоци од телефонот!"</string>
<string name="really_remove_account_message" product="device" msgid="3751798556257519916">"Со отстранување на оваа сметка ќе се избришат сите нејзини пораки, контакти и другите податоци од уредот!"</string>
@@ -2703,7 +2705,7 @@
<string name="data_usage_restrict_denied_dialog" msgid="18928292832775805">"Ограничување на интернет во заднина е можно само откога ќе поставите ограничување за мобилен интернет."</string>
<string name="data_usage_auto_sync_on_dialog_title" msgid="2342323408229702005">"Вклучи авто синхрон. на подат.?"</string>
<string name="data_usage_auto_sync_on_dialog" product="tablet" msgid="4935430284683238901">"Сите промени што ги правите на вашите сметки на интернет автоматски ќе се копираат на вашиот таблет.\n\nНекои сметки може и автоматски да ги копираат сите промени направени на телефонот на интернет. Сметката на Google го прави тоа."</string>
- <string name="data_usage_auto_sync_on_dialog" product="default" msgid="5004823486046340090">"Сите промени што ќе ги направите на вашите сметки на интернет автоматски ќе се ископираат на телефонот.\n\nНекои сметки можеби автоматски ќе ги ископираат и промените што ги правите од телефонот на интернет. Сметката на Google го прави тоа."</string>
+ <string name="data_usage_auto_sync_on_dialog" product="default" msgid="5004823486046340090">"Сите промени што ќе ги направите на вашите сметки на интернет автоматски ќе се ископираат на телефонот.\n\nНекои сметки можеби автоматски ќе ги ископираат и промените што ги вршите од телефонот на интернет. Сметката на Google го прави тоа."</string>
<string name="data_usage_auto_sync_off_dialog_title" msgid="7105334544291643305">"Исклучи авто синхрон. на подат.?"</string>
<string name="data_usage_auto_sync_off_dialog" msgid="4057984234450947964">"Ова ќе ви заштеди интернет и батерија, но секоја сметка ќе треба да ја синхронизирате рачно за да се соберат најновите информации. Освен тоа, нема да добивате известувања за ажурирања."</string>
<string name="data_usage_cycle_editor_title" msgid="4967309390043599889">"Датум на ресетирање циклус на употреба"</string>
@@ -2868,7 +2870,7 @@
<string name="user_add_user_item_title" msgid="6835385073795492410">"Корисник"</string>
<string name="user_add_profile_item_title" msgid="4932743891449790664">"Ограничен профил"</string>
<string name="user_add_user_title" msgid="2320897397066676472">"Да се додаде нов корисник?"</string>
- <string name="user_add_user_message_long" msgid="686637203224195465">"Уредов може да го споделувате со други лица преку создавање дополнителни корисници. Секој корисник има сопствен простор што може да го приспособува со апликации, тапети и слично. Корисниците може да приспособуваат и поставки на уредот, како на пр., Wi‑Fi, што се однесуваат на сите.\n\nКога додавате нов корисник, тоа лице треба да го постави својот простор.\n\nСекој корисник може да ажурира апликации за сите други корисници. Поставките и услугите за пристапност не може да се префрлат на новиот корисник."</string>
+ <string name="user_add_user_message_long" msgid="686637203224195465">"Уредов може да го споделувате со други лица ако додадете дополнителни корисници. Секој корисник има сопствен простор што може да го приспособува со апликации, тапети и слично. Корисниците може да приспособуваат и поставки за уредот, како на пр., Wi‑Fi, што важат за сите.\n\nКога додавате нов корисник, тоа лице треба да го постави својот простор.\n\nСекој корисник може да ажурира апликации за сите други корисници. Поставките и услугите за пристапност не може да се префрлат на новиот корисник."</string>
<string name="user_add_user_message_short" msgid="1802594476285458254">"Кога додавате нов корисник, тоа лице треба да го постави својот простор.\n\nСекој корисник може да ажурира апликации за сите други корисници."</string>
<string name="user_setup_dialog_title" msgid="6748950002206392396">"Ќе поставите корисник сега?"</string>
<string name="user_setup_dialog_message" msgid="2988559933258353919">"Проверете дали лицето е достапно да го земе уредот и да го постави својот простор"</string>
@@ -2880,7 +2882,7 @@
<string name="user_cannot_add_accounts_message" msgid="5993561303748749097">"Ограничените профили не можат да додаваат сметки"</string>
<string name="user_remove_user_menu" msgid="3505139157217459864">"Избриши го <xliff:g id="USER_NAME">%1$s</xliff:g> од тука"</string>
<string name="user_lockscreen_settings" msgid="3820813814848394568">"Поставки на екранот за заклучување"</string>
- <string name="user_add_on_lockscreen_menu" msgid="5211604808199585774">"Додајте корисници од заклучен екран"</string>
+ <string name="user_add_on_lockscreen_menu" msgid="5211604808199585774">"Додавање корисници од заклучен екран"</string>
<string name="user_new_user_name" msgid="3880395219777884838">"Нов корисник"</string>
<string name="user_new_profile_name" msgid="3074939718101489937">"Нов профил"</string>
<string name="user_confirm_remove_self_title" msgid="6739480453680217543">"Избриши се себеси?"</string>
@@ -2907,15 +2909,15 @@
<string name="user_enable_calling_confirm_message" msgid="2490126715153125970">"Историјата на повици ќе се сподели со овој корисник."</string>
<string name="user_enable_calling_and_sms_confirm_title" msgid="4153856398523366976">"Вклучи телефонски повици и SMS?"</string>
<string name="user_enable_calling_and_sms_confirm_message" msgid="3278802798876095734">"Историјата на повици и пораки ќе се сподели со овој корисник."</string>
- <string name="emergency_info_title" msgid="1522609271881425375">"Информации за итни случаи"</string>
- <string name="emergency_info_summary" msgid="7280464759837387342">"Информации и контакти за <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
+ <string name="emergency_info_title" msgid="1522609271881425375">"Податоци за итни случаи"</string>
+ <string name="emergency_info_summary" msgid="7280464759837387342">"Податоци и контакти за <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
<string name="application_restrictions" msgid="6871981013736536763">"Дозволи апликации и содржина"</string>
<string name="apps_with_restrictions_header" msgid="8656739605673756176">"Апликации со ограничувања"</string>
<string name="apps_with_restrictions_settings_button" msgid="5065896213467171744">"Прошири поставки за апликација"</string>
<string name="nfc_payment_settings_title" msgid="5070077706735415291">"Допри и плати"</string>
<string name="nfc_payment_how_it_works" msgid="7607901964687787177">"Како функционира"</string>
<string name="nfc_payment_no_apps" msgid="8844440783395420860">"Плаќајте со телефонот во продавници"</string>
- <string name="nfc_payment_default" msgid="7869273092463612271">"Стандард за плаќање"</string>
+ <string name="nfc_payment_default" msgid="7869273092463612271">"Стандардна апликација за плаќање"</string>
<string name="nfc_payment_default_not_set" msgid="955804193510335338">"Не е поставено"</string>
<string name="nfc_payment_app_and_desc" msgid="102312684211458190">"<xliff:g id="APP">%1$s</xliff:g> - <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
<string name="nfc_payment_use_default" msgid="3098724195746409476">"Користи ја стандардната"</string>
@@ -2923,8 +2925,8 @@
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"Освен кога е отворена друга апликација за плаќање"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"На терминалот Допри и плати плаќајте со:"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"Плаќање на терминалот"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Поставете апликација за плаќање. Потоа само држете ја задната страна на телефонот до кој било терминал со симболот без допир."</string>
- <string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"Разбрав"</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Поставете апликација за плаќање. Потоа само задржете ја задната страна на телефонот до кој било терминал означен со симболот за плаќање без контакт."</string>
+ <string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"Сфатив"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"Повеќе..."</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"Постави како свој параметар?"</string>
<string name="nfc_payment_set_default" msgid="1186837502664412132">"Секогаш користи <xliff:g id="APP">%1$s</xliff:g> кога користиш Допри и плати?"</string>
@@ -2950,7 +2952,7 @@
<!-- no translation found for call_manager_summary (1232655174841493040) -->
<skip />
<string name="cell_broadcast_settings" msgid="5750066270993255966">"Предупредувања за итни случаи"</string>
- <string name="network_operators_settings" msgid="7822337582828465633">"Оператори на мрежа"</string>
+ <string name="network_operators_settings" msgid="7822337582828465633">"Мрежни оператори"</string>
<string name="access_point_names" msgid="7992382237358800596">"Имиња на пристапни точки"</string>
<string name="enhanced_4g_lte_mode_title" msgid="1624079276378568594">"VoLTE"</string>
<string name="enhanced_4g_lte_mode_title_advanced_calling" msgid="5155507161065290507">"Напредно повикување"</string>
@@ -2979,8 +2981,8 @@
<string name="wizard_back" msgid="223654213898117594">"Назад"</string>
<string name="wizard_next" msgid="5239664512608113542">"Следно"</string>
<string name="wizard_finish" msgid="3742102879981212094">"Заврши"</string>
- <string name="user_image_take_photo" msgid="2000247510236178111">"Фотографирај"</string>
- <string name="user_image_choose_photo" msgid="4920315415203051898">"Избери слика"</string>
+ <string name="user_image_take_photo" msgid="2000247510236178111">"Фотографирајте"</string>
+ <string name="user_image_choose_photo" msgid="4920315415203051898">"Изберете слика"</string>
<string name="user_image_photo_selector" msgid="8429694590849882411">"Избери фотографија"</string>
<string name="regulatory_info_text" msgid="9112993912873512834"></string>
<string name="sim_setup_wizard_title" msgid="77627575294867180">"SIM-картички"</string>
@@ -3121,7 +3123,7 @@
<string name="keywords_assist_input" msgid="8392362788794886564">"стандарден, помошник"</string>
<string name="keywords_default_payment_app" msgid="845369409578423996">"плаќање, стандарден"</string>
<string name="keywords_ambient_display" msgid="8835182491798487184">"дојдовно известување"</string>
- <string name="keywords_hotspot_tethering" msgid="1723591462602613867">"врзување преку USB, врзување преку Bluetooth, Wi-Fi точка на пристап"</string>
+ <string name="keywords_hotspot_tethering" msgid="1723591462602613867">"интернет преку USB, интернет преку Bluetooth, Wi-Fi точка на пристап"</string>
<string name="keywords_touch_vibration" msgid="2081175517528255224">"повратни информации со допир, вибрации, чувствителност"</string>
<string name="keywords_ring_vibration" msgid="4210509151866460210">"повратни информации со допир, вибрации, телефон, повик, чувствителност, ѕвонење"</string>
<string name="keywords_notification_vibration" msgid="1077515502086745166">"повратни информации со допир, вибрации, чувствителност"</string>
@@ -3159,7 +3161,7 @@
<string name="emergency_tone_alert" msgid="907868135091891015">"Тонови"</string>
<string name="emergency_tone_vibrate" msgid="5020068066905681181">"Вибрации"</string>
<string name="boot_sounds_title" msgid="7583926202411353620">"Вклучете ги звуците"</string>
- <string name="live_caption_title" msgid="7926591158657997051">"Титли во живо"</string>
+ <string name="live_caption_title" msgid="7926591158657997051">"Автоматски титлови"</string>
<string name="live_caption_summary" msgid="9064771862352393125">"Автоматски титлови за аудиовизуелни содржини"</string>
<string name="zen_mode_settings_summary_off" msgid="6929319200478424962">"Никогаш"</string>
<plurals name="zen_mode_settings_summary_on" formatted="false" msgid="6061723291126091396">
@@ -3214,7 +3216,7 @@
<string name="zen_mode_block_effect_light" msgid="8679333758037487644">"Не трепкај со светлото"</string>
<string name="zen_mode_block_effect_peek" msgid="6075662813575910221">"Без скокачки известувања на екранот"</string>
<string name="zen_mode_block_effect_status" msgid="6516614225115681068">"Сокриј ги иконите на статусната лента на врвот од екранот"</string>
- <string name="zen_mode_block_effect_badge" msgid="3891743027347075136">"Сокриј точки за известување на иконите на апликацијата"</string>
+ <string name="zen_mode_block_effect_badge" msgid="3891743027347075136">"Сокриј точки за известување во иконите за апликациите"</string>
<string name="zen_mode_block_effect_ambient" msgid="6382013125863616197">"Не прикажувај известувања"</string>
<string name="zen_mode_block_effect_list" msgid="6081548478844912181">"Сокриј од списокот со известувања"</string>
<string name="zen_mode_block_effect_summary_none" msgid="7166175186759564510">"Никогаш"</string>
@@ -3294,7 +3296,7 @@
<string name="other_sound_category_preference_title" msgid="2045757472469840859">"Други звуци и вибрации"</string>
<string name="configure_notification_settings" msgid="291914315140851270">"Известувања"</string>
<string name="recent_notifications" msgid="8125865995065032049">"Неодамна испратени"</string>
- <string name="recent_notifications_see_all_title" msgid="4089007770442871469">"Приказ на сите од последните 7 дена"</string>
+ <string name="recent_notifications_see_all_title" msgid="4089007770442871469">"Преглед на сите од минатите 7 дена"</string>
<string name="advanced_section_header" msgid="984680389373090015">"Напредни"</string>
<string name="profile_section_header" msgid="5471479005472037417">"Известувања за работен профил"</string>
<string name="asst_capability_prioritizer_title" msgid="3488284760645922160">"Автоматско доделување предност на известувањата"</string>
@@ -3358,7 +3360,7 @@
<string name="notifications_sent_daily" msgid="6874886521964822824">"околу <xliff:g id="NUMBER">%1$s</xliff:g> дневно"</string>
<string name="notifications_sent_weekly" msgid="5859675428990259432">"околу <xliff:g id="NUMBER">%1$s</xliff:g> неделно"</string>
<string name="notifications_sent_never" msgid="237997329598144638">"Никогаш"</string>
- <string name="manage_notification_access_title" msgid="5348743662189787547">"Пристап до известување"</string>
+ <string name="manage_notification_access_title" msgid="5348743662189787547">"Пристап до известувања"</string>
<string name="work_profile_notification_access_blocked_summary" msgid="8148871282484870576">"Пристапот до известувањата на работниот профил е блокиран"</string>
<string name="manage_notification_access_summary_zero" msgid="236809421271593016">"Апликациите не можат да читаат известувања"</string>
<plurals name="manage_notification_access_summary_nonzero" formatted="false" msgid="8496218948429646792">
@@ -3441,7 +3443,7 @@
<string name="zen_mode_add_time_rule" msgid="5999467757140524729">"Додај распоред за време"</string>
<string name="zen_mode_delete_rule" msgid="2292933835997203801">"Избришете го распоредот"</string>
<string name="zen_mode_choose_rule_type" msgid="8877138307319450306">"Изберете тип распоред"</string>
- <string name="zen_mode_delete_rule_confirmation" msgid="2646596466259025978">"Избриши правило за „<xliff:g id="RULE">%1$s</xliff:g>“?"</string>
+ <string name="zen_mode_delete_rule_confirmation" msgid="2646596466259025978">"Да се избрише правилото „<xliff:g id="RULE">%1$s</xliff:g>“?"</string>
<string name="zen_mode_delete_rule_button" msgid="611058106279881991">"Избриши"</string>
<string name="zen_mode_rule_type_unknown" msgid="2819480113355191421">"Непознато"</string>
<string name="zen_mode_app_set_behavior" msgid="8597398780262575571">"Поставкиве не може да се променат во моментов. Дадена апликација (<xliff:g id="APP_NAME">%1$s</xliff:g>) го вклучи режимот „Не вознемирувај“ автоматски со приспособено однесување."</string>
@@ -3507,7 +3509,7 @@
<string name="zen_mode_reminders_list" msgid="7347061314032326677">"потсетници"</string>
<string name="zen_mode_events" msgid="5784076928339534984">"Дозволи настани"</string>
<string name="zen_mode_bypassing_apps" msgid="3080739479028713449">"Дозволете апликациите да занемаруваат"</string>
- <string name="zen_mode_bypassing_apps_title" msgid="2115024664615538847">"Исклучоци на апликацијата"</string>
+ <string name="zen_mode_bypassing_apps_title" msgid="2115024664615538847">"Исклучоци за апликации"</string>
<plurals name="zen_mode_bypassing_apps_subtext" formatted="false" msgid="8723144434730871572">
<item quantity="one">Известувања од <xliff:g id="NUMBER">%1$d</xliff:g> апликација може да ја занемарат „Не вознемирувај“</item>
<item quantity="other">Известувања од <xliff:g id="NUMBER">%1$d</xliff:g> апликации може да ја занемарат „Не вознемирувај“</item>
@@ -3602,7 +3604,7 @@
<string name="notifications_label" msgid="2792398288062643318">"Известувања"</string>
<string name="notifications_enabled" msgid="439339392141736137">"Вклучено"</string>
<string name="notifications_enabled_with_info" msgid="7706460489443809452">"<xliff:g id="NOTIFICATIONS_SENT">%1$s</xliff:g>/<xliff:g id="NOTIFICATIONS_CATEGORIES_OFF">%2$s</xliff:g>"</string>
- <string name="notifications_disabled" msgid="316658185757688983">"Исклучи"</string>
+ <string name="notifications_disabled" msgid="316658185757688983">"Исклучено"</string>
<string name="notifications_partly_blocked" msgid="6330451240669068819">"<xliff:g id="COUNT_0">%1$d</xliff:g> од <xliff:g id="COUNT_1">%2$d</xliff:g> категории се исклучени"</string>
<string name="notifications_silenced" msgid="538923056987616372">"Стишено"</string>
<string name="notifications_redacted" msgid="308836040236690014">"Без чувствителни содржини на заклучен екран"</string>
@@ -3643,14 +3645,14 @@
<string name="advanced_apps" msgid="6643869089344883537">"Напредни"</string>
<string name="configure_apps" msgid="4066683118857400943">"Конфигурирање апликации"</string>
<string name="unknown_app" msgid="2312052973570376877">"Непозната апликација"</string>
- <string name="app_permissions" msgid="3215958256821756086">"Управник со дозволи"</string>
+ <string name="app_permissions" msgid="3215958256821756086">"Управувач со дозволи"</string>
<string name="app_permissions_summary" msgid="8785798165776061594">"Апликации што користат <xliff:g id="APPS">%1$s</xliff:g>"</string>
<string name="tap_to_wake" msgid="1902991239401652323">"Допрете за будење"</string>
<string name="tap_to_wake_summary" msgid="8485222120721006793">"Допрете двапати каде било на екранот за да го разбудите уредот"</string>
<string name="domain_urls_title" msgid="7939209950373945367">"За отворање линкови"</string>
<string name="domain_urls_summary_none" msgid="5401203416941265109">"Не отворај поддржани линкови"</string>
<string name="domain_urls_summary_one" msgid="3893975485064803435">"Отвори <xliff:g id="DOMAIN">%s</xliff:g>"</string>
- <string name="domain_urls_summary_some" msgid="2130534984153210797">"Отворете <xliff:g id="DOMAIN">%s</xliff:g> и други URL-адреси"</string>
+ <string name="domain_urls_summary_some" msgid="2130534984153210797">"Отворај <xliff:g id="DOMAIN">%s</xliff:g> и други URL-адреси"</string>
<string name="domain_urls_apps_summary_off" msgid="1110203970617922543">"Ниедна апликација не отвора поддржани линкови"</string>
<plurals name="domain_urls_apps_summary_on" formatted="false" msgid="3571309605151815405">
<item quantity="one"><xliff:g id="COUNT">%d</xliff:g> апликација отвора поддржани линкови</item>
@@ -3710,7 +3712,7 @@
<string name="high_power_system" msgid="739584574711292753">"Оптимизација на батеријата не е достапна"</string>
<string name="high_power_desc" msgid="333756885680362741">"Не применувајте оптимизација на батеријата. Може побрзо да ја истроши вашата батерија."</string>
<string name="high_power_prompt_title" msgid="2805745781720454052">"Да се извршува во заднина?"</string>
- <string name="high_power_prompt_body" msgid="8067395096053552289">"Ако дозволите <xliff:g id="APP_NAME">%1$s</xliff:g> секогаш да се извршува во заднина, тоа може да ја намали трајноста на батеријата. \n\nТоа може да го промените подоцна во Поставки > Апликации и известувања."</string>
+ <string name="high_power_prompt_body" msgid="8067395096053552289">"Ако дозволите <xliff:g id="APP_NAME">%1$s</xliff:g> секогаш да се извршува во заднина, тоа може да го намали траењето на батеријата. \n\nОва може да го промените подоцна во „Поставки > Апликации и известувања“."</string>
<string name="battery_summary" msgid="4345690800899981339">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> употреба од последното целосно полнење"</string>
<string name="battery_power_management" msgid="2853925857548647969">"Управување со напојувањето"</string>
<string name="no_battery_summary" msgid="4105932628367471314">"Нема употреба на батерија од последното целосно полнење"</string>
@@ -3724,14 +3726,14 @@
<string name="sharing_remote_bugreport_dialog_message" msgid="3814787466701526359">"Извештајот за грешки е споделен со вашиот администратор за информатичка технологија. За повеќе детали, контактирајте со него."</string>
<string name="share_remote_bugreport_action" msgid="8600797271670537888">"Сподели"</string>
<string name="decline_remote_bugreport_action" msgid="706319275774199033">"Одбиј"</string>
- <string name="usb_use_charging_only" msgid="2344625733377110164">"Нема пренос на податоци"</string>
+ <string name="usb_use_charging_only" msgid="2344625733377110164">"Без пренос на податоци"</string>
<string name="usb_use_charging_only_desc" msgid="3283518562582478950">"Само ја полни батеријата"</string>
<string name="usb_use_power_only" msgid="6595783381323810697">"Полнење на поврзаниот уред"</string>
<string name="usb_use_file_transfers" msgid="6153021302176151884">"Пренос на датотеки"</string>
<string name="usb_use_file_transfers_desc" msgid="6953866660041189580">"Пренесете ги датотеките на друг уред"</string>
<string name="usb_use_photo_transfers" msgid="5974236250197451257">"PTP"</string>
<string name="usb_use_photo_transfers_desc" msgid="2325112887316125320">"Пренесувај фотографии или датотеки ако не е подржан MTP (PTP)"</string>
- <string name="usb_use_tethering" msgid="4250626730173163846">"Врзување преку USB"</string>
+ <string name="usb_use_tethering" msgid="4250626730173163846">"Интернет преку USB"</string>
<string name="usb_use_MIDI" msgid="4710632870781041401">"MIDI"</string>
<string name="usb_use_MIDI_desc" msgid="1770966187150010947">"Користете го уредов како MIDI"</string>
<string name="usb_use" msgid="8940500223316278632">"Користи USB за"</string>
@@ -3747,11 +3749,11 @@
<string name="usb_summary_charging_only" msgid="4118449308708872339">"Полнење на уредот"</string>
<string name="usb_summary_power_only" msgid="3552240122641051107">"Се полни поврзаниот уред"</string>
<string name="usb_summary_file_transfers" msgid="7805342797099821502">"Пренос на датотеки"</string>
- <string name="usb_summary_tether" msgid="778845069037366883">"Врзување преку USB"</string>
+ <string name="usb_summary_tether" msgid="778845069037366883">"Интернет преку USB"</string>
<string name="usb_summary_photo_transfers" msgid="4743028167400644354">"PTP"</string>
<string name="usb_summary_MIDI" msgid="5540604166270861247">"MIDI"</string>
<string name="usb_summary_file_transfers_power" msgid="1684501026426766867">"Пренос на датотеки и полнење уред"</string>
- <string name="usb_summary_tether_power" msgid="5684170912136320002">"Врзување преку USB и полнење уред"</string>
+ <string name="usb_summary_tether_power" msgid="5684170912136320002">"Интернет преку USB и полнење уред"</string>
<string name="usb_summary_photo_transfers_power" msgid="4424106272137720464">"PTP и полнење уред"</string>
<string name="usb_summary_MIDI_power" msgid="7685597621357005180">"MIDI и полнење уред"</string>
<string name="background_check_pref" msgid="664081406854758392">"Проверка на заднината"</string>
@@ -3801,7 +3803,7 @@
<string name="system_alert_window_settings" msgid="3024330223417646567">"Приказ врз други апликации"</string>
<string name="system_alert_window_apps_title" msgid="9188448296493699566">"Апликации"</string>
<string name="system_alert_window_access_title" msgid="5187343732185369675">"Приказ врз други апликации"</string>
- <string name="permit_draw_overlay" msgid="9039092257052422344">"Дозволи прикажување врз други апликации"</string>
+ <string name="permit_draw_overlay" msgid="9039092257052422344">"Дозволи приказ врз други апликации"</string>
<string name="allow_overlay_description" msgid="6669524816705082807">"Дозволете ѝ на апликација да се прикажува врз другите апликации што ги користите. Тоа може да го попречи користењето на другите апликации или да го промени начинот на кој се појавуваат или однесуваат."</string>
<string name="keywords_vr_listener" msgid="5312633527788917750">"vr виртуелна реалност слушател стерео помошна услуга"</string>
<string name="keywords_system_alert_window" msgid="3936658600272194599">"дијалог прозорец системски предупредувања прикажување врз други апликации"</string>
@@ -3811,14 +3813,14 @@
<string name="app_permission_summary_allowed" msgid="6458476982015518778">"Дозволено"</string>
<string name="app_permission_summary_not_allowed" msgid="1171642541675462584">"Не е дозволено"</string>
<string name="keywords_install_other_apps" msgid="5383559540695847668">"инсталирање апликации непознати извори"</string>
- <string name="write_settings" msgid="9009040811145552108">"Менување поставки на системот"</string>
+ <string name="write_settings" msgid="9009040811145552108">"Менување системски поставки"</string>
<string name="keywords_write_settings" msgid="3450405263390246293">"пишувај менувај поставки на системот"</string>
<string name="write_settings_summary" msgid="4650251358459404247">"<xliff:g id="COUNT_0">%1$d</xliff:g> од <xliff:g id="COUNT_1">%2$d</xliff:g> апликации имаат дозвола да менуваат поставки на систем"</string>
<string name="financial_apps_sms_access_title" msgid="3422655018008259655">"Пристап до SMS за финансиски апликации"</string>
<string name="filter_install_sources_apps" msgid="4519839764020866701">"Може да инсталира други апликации"</string>
<string name="filter_write_settings_apps" msgid="6864144615530081121">"Може да ги менува поставките на системот"</string>
<string name="write_settings_title" msgid="5852614614193830632">"Може да ги менува поставките на системот"</string>
- <string name="write_system_settings" msgid="20450765210832463">"Менување поставки на системот"</string>
+ <string name="write_system_settings" msgid="20450765210832463">"Менување системски поставки"</string>
<string name="permit_write_settings" msgid="4198491281216818756">"Дозволи менување на поставките на системот"</string>
<string name="write_settings_description" msgid="2536706293042882500">"Оваа дозвола овозможува апликацијата да менува поставки на системот."</string>
<string name="write_settings_on" msgid="7328986337962635118">"Да"</string>
@@ -3876,7 +3878,7 @@
<string name="disabled_by_policy_title_camera" msgid="3741138901926111197">"Камерата не е дозволена"</string>
<string name="disabled_by_policy_title_screen_capture" msgid="1856835333536274665">"Слика од екранот не е дозволена"</string>
<string name="disabled_by_policy_title_suspend_packages" msgid="4254714213391802322">"Апликацијава не може да се отвори"</string>
- <string name="default_admin_support_msg" msgid="5789424433689798637">"Ако имате прашања, контактирајте со администраторот за информатичка технологија"</string>
+ <string name="default_admin_support_msg" msgid="5789424433689798637">"Ако имате прашања, контактирајте со IT-администраторот"</string>
<string name="admin_support_more_info" msgid="8737842638087863477">"Повеќе детали"</string>
<string name="admin_profile_owner_message" msgid="3199544166281052845">"Администраторот може да ги следи и да управува со апликациите и податоците поврзани со вашиот работен профил, заедно со поставките, дозволите, корпоративниот пристап, мрежната активност и информациите за локацијата на уредот."</string>
<string name="admin_profile_owner_user_message" msgid="2991249382056855531">"Администраторот може да ги следи и да управува со апликациите и податоците поврзани со корисников, заедно со поставките, дозволите, корпоративниот пристап, мрежната активност и информациите за локацијата на уредот."</string>
@@ -3933,7 +3935,7 @@
<string name="usage" msgid="9172908720164431622">"Користење"</string>
<string name="cellular_data_usage" msgid="1236562234207782386">"Потрошен мобилен интернет"</string>
<string name="app_cellular_data_usage" msgid="8499761516172121957">"Потрошен сообраќај на апликациите"</string>
- <string name="wifi_data_usage" msgid="275569900562265895">"Потрошен Wi-Fi сообраќај"</string>
+ <string name="wifi_data_usage" msgid="275569900562265895">"Сообраќај преку Wi-Fi"</string>
<string name="ethernet_data_usage" msgid="747614925362556718">"Потрошен етернет сообраќај"</string>
<string name="wifi" msgid="1586738489862966138">"Wi-Fi"</string>
<string name="ethernet" msgid="2365753635113154667">"Етернет"</string>
@@ -3944,7 +3946,7 @@
<string name="app_usage_cycle" msgid="213483325132959663">"Циклус потрошен сообраќај од апликации"</string>
<string name="cell_data_warning" msgid="8902740337286652689">"Предупредување за потрошен сообраќај: <xliff:g id="ID_1">^1</xliff:g>"</string>
<string name="cell_data_limit" msgid="3175933829235314233">"Ограничување на сообраќајот: <xliff:g id="ID_1">^1</xliff:g>"</string>
- <string name="cell_data_warning_and_limit" msgid="3846150001253927594">"Предупредување за потрошен сообраќај: <xliff:g id="ID_1">^1</xliff:g>/Ограничување на сообраќајот:<xliff:g id="ID_2">^2</xliff:g>"</string>
+ <string name="cell_data_warning_and_limit" msgid="3846150001253927594">"Предупредување за потрошен сообраќај: <xliff:g id="ID_1">^1</xliff:g>/Ограничување на сообраќајот: <xliff:g id="ID_2">^2</xliff:g>"</string>
<string name="billing_cycle_fragment_summary" msgid="4926047002107855543">"На <xliff:g id="ID_1">%1$s</xliff:g> секој месец"</string>
<string name="network_restrictions" msgid="196294262243618198">"Ограничувања на мрежата"</string>
<plurals name="network_restrictions_summary" formatted="false" msgid="1664494781594839837">
@@ -3962,8 +3964,8 @@
<string name="configure" msgid="8232696842838580549">"Конфигурирај"</string>
<string name="data_usage_other_apps" msgid="7002491980141402084">"Други апликации вклучени во употребата"</string>
<plurals name="data_saver_unrestricted_summary" formatted="false" msgid="6046013861315713697">
- <item quantity="one"><xliff:g id="COUNT">%1$d</xliff:g> апликација има дозвола да користи неограничен интернет кога е вклучен „Штедачот на интернет“</item>
- <item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> апликации имаат дозвола да користат неограничен интернет кога е вклучен „Штедачот на интернет“</item>
+ <item quantity="one"><xliff:g id="COUNT">%1$d</xliff:g> апликација има дозвола да користи неограничен мобилен интернет кога е вклучен „Штедачот на интернет“</item>
+ <item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> апликации имаат дозвола да користат неограничен мобилен интернет кога е вклучен „Штедачот на интернет“</item>
</plurals>
<string name="data_usage_title" msgid="7874606430902201083">"Примарни податоци"</string>
<string name="data_usage_wifi_title" msgid="7161828479387766556">"Wi‑Fi-сообраќај"</string>
@@ -3984,7 +3986,7 @@
<string name="launch_mdp_app_text" msgid="9186559496664208252">"Прикажи план"</string>
<string name="launch_wifi_text" msgid="317820210431682605">"Прикажи ги деталите"</string>
<string name="data_saver_title" msgid="7903308134514179256">"Штедач на интернет"</string>
- <string name="unrestricted_data_saver" msgid="9139401849550738720">"Неограничен интернет"</string>
+ <string name="unrestricted_data_saver" msgid="9139401849550738720">"Неограничен мобилен интернет"</string>
<string name="restrict_background_blacklisted" msgid="7158991683849067124">"Исклучен сообраќај во заднина"</string>
<string name="data_saver_on" msgid="7281809065420480881">"Вклучено"</string>
<string name="data_saver_off" msgid="7439439787358504018">"Исклучено"</string>
@@ -4002,13 +4004,13 @@
<string name="battery_saver_on_summary" msgid="6841062406467435672">"Вклучено"</string>
<string name="battery_saver_off_scheduled_summary" msgid="3740414764069188669">"Ќе се вклучи на <xliff:g id="BATTERY_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="battery_saver_off_summary" msgid="8736555723004299721">"Исклучено"</string>
- <string name="battery_saver_button_turn_on" msgid="3748696527267573793">"Вклучи го сега"</string>
+ <string name="battery_saver_button_turn_on" msgid="3748696527267573793">"Вклучи сега"</string>
<string name="battery_saver_button_turn_off" msgid="2912950982503267828">"Исклучи сега"</string>
<string name="not_battery_optimizing" msgid="2616044774307734160">"Не се користи оптимизација на батеријата"</string>
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Ако уредот е заклучен, спречете внесување одговори или друг текст во известувања"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Стандард. проверка на правопис"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Избери проверка на правопис"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Користење проверка на правопис"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Користи проверка на правопис"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Не е избран"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(нема)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4052,8 +4054,8 @@
<string name="overlay_toast_failed_to_apply" msgid="5692251825129250040">"Не успеа да се примени прекривка"</string>
<string name="special_access" msgid="1453926335914696206">"Посебни пристапи"</string>
<plurals name="special_access_summary" formatted="false" msgid="5182092345063909346">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> апликација може да користи неограничен интернет</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> апликации може да користат неограничен интернет</item>
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> апликација може да користи неограничен мобилен интернет</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> апликации може да користат неограничен мобилен интернет</item>
</plurals>
<string name="special_access_more" msgid="7086690625048471400">"Видете повеќе"</string>
<string name="confirm_convert_to_fbe_warning" msgid="4972595831034280189">"Навистина ли да се избришат податоците за корисникот и да се конвертираат во шифрирана датотека?"</string>
@@ -4068,7 +4070,7 @@
<string name="premium_sms_none" msgid="940723020871007898">"Ниедна од инсталираните апликации не побара пристап до премиум SMS"</string>
<string name="premium_sms_warning" msgid="7604011651486294515">"Премиум SMS може да ве чини пари, а сумата ќе се додаде на сметките од операторот. Ако овозможите дозвола за апликацијата, ќе може да испраќате премиум SMS со неа."</string>
<string name="premium_sms_access" msgid="4550027460595822851">"Пристап до премиум SMS"</string>
- <string name="bluetooth_disabled" msgid="6588102116819268238">"Исклучен"</string>
+ <string name="bluetooth_disabled" msgid="6588102116819268238">"Исклучено"</string>
<string name="bluetooth_connected_summary" msgid="439920840053965217">"Поврзан со <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="bluetooth_connected_multiple_devices_summary" msgid="596205630653123250">"Поврзан со повеќе уреди"</string>
<string name="demo_mode" msgid="3831081808592541104">"Демо-режим на кориснички интерфејс на систем"</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"За помош при ослободувањето простор за меморијата, управникот со меморијата ги отстранува резервните копии од фотографиите и видеата од уредот."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Отстранете фотографии и видеа"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Управник со меморија"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Користи го управникот со меморија"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Користи го „Управувачот со простор“"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Автоматски"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Рачни"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Ослободете простор сега"</string>
@@ -4111,29 +4113,29 @@
<string name="gesture_preference_summary" product="device" msgid="7792199669106960922">"Брзи движења за контролирање на уредот"</string>
<string name="double_tap_power_for_camera_title" msgid="5480829329052517484">"Префрли на камера"</string>
<string name="double_tap_power_for_camera_summary" msgid="6591026425496323965">"За брзо отворање на камерата, притиснете го копчето за вклучување двапати. Работи од секој екран."</string>
- <string name="double_tap_power_for_camera_suggestion_title" msgid="509078029429865036">"Отворајте ја камерата набрзина"</string>
+ <string name="double_tap_power_for_camera_suggestion_title" msgid="509078029429865036">"Брзо отворање на камерата"</string>
<string name="double_twist_for_camera_mode_title" msgid="2606032140297556018">"Смени ја камерата"</string>
<string name="double_twist_for_camera_mode_summary" msgid="8979914206876018137"></string>
<string name="double_twist_for_camera_suggestion_title" msgid="5932411386316771246">"Направете селфи-фотографии побрзо"</string>
<string name="swipe_up_to_switch_apps_summary" msgid="4644068184114154787">"За да префрлате апликации, повлечете нагоре на копчето „Почеток“. Повлечете нагоре уште еднаш за да ги видите сите апликации. Ова функционира од секој екран. Повеќе нема да имате копче „Преглед“ во долниот десен дел од екранот."</string>
<string name="swipe_up_to_switch_apps_suggestion_title" msgid="7641846365137536128">"Пробајте го новото копче за Почеток"</string>
<string name="swipe_up_to_switch_apps_suggestion_summary" msgid="7338653224520387852">"Вклучете го новото движење за да префрлате апликации"</string>
- <string name="ambient_display_title" product="default" msgid="6785677099744344088">"Допрете двапати за да го проверите телефонот"</string>
- <string name="ambient_display_title" product="tablet" msgid="1106285490888683613">"Допрете двапати за да го проверите таблетот"</string>
- <string name="ambient_display_title" product="device" msgid="5064644474876041478">"Допрете двапати за да го проверите уредот"</string>
+ <string name="ambient_display_title" product="default" msgid="6785677099744344088">"Допрете двапати за проверка на телефонот"</string>
+ <string name="ambient_display_title" product="tablet" msgid="1106285490888683613">"Допрете двапати за проверка на таблетот"</string>
+ <string name="ambient_display_title" product="device" msgid="5064644474876041478">"Допрете двапати за проверка на уредот"</string>
<string name="ambient_display_summary" msgid="4882910328216411109">"За да ги проверите времето, известувањата и другите информации, допрете двапати на екранот."</string>
- <string name="ambient_display_pickup_title" product="default" msgid="7141652156907066938">"Подигни за проверка"</string>
+ <string name="ambient_display_pickup_title" product="default" msgid="7141652156907066938">"Подигни за проверка на телефонот"</string>
<string name="ambient_display_pickup_title" product="tablet" msgid="1555456400210301959">"Подигнете за да го проверите таблетот"</string>
<string name="ambient_display_pickup_title" product="device" msgid="2480126522988135037">"Подигнете за да го проверите уредот"</string>
<string name="ambient_display_wake_screen_title" msgid="3376988352851077102">"Екран за будење"</string>
<string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"За да ги проверите времето, известувањата и другите информации, земете го телефонот."</string>
<string name="ambient_display_pickup_summary" product="tablet" msgid="1077745287100012928">"За да ги проверите времето, известувањата и другите информации, земете го таблетот."</string>
<string name="ambient_display_pickup_summary" product="device" msgid="404199660076598026">"За да ги проверите времето, известувањата и другите информации, земете го уредот."</string>
- <string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"Допрете за да го проверите телефонот"</string>
+ <string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"Допри за проверка на телефонот"</string>
<string name="ambient_display_tap_screen_title" product="tablet" msgid="6434521782016864148">"Допрете за да го проверите таблетот"</string>
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"Допрете за да го проверите уредот"</string>
<string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"За да ги проверите времето, известувањата и другите информации, допрете го екранот."</string>
- <string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"Повлечи отпечаток за известувања"</string>
+ <string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"Повлечете отпечаток за известувања"</string>
<string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"Повлечете отпечаток"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"За да ги проверите известувањата, повлечете надолу на сензорот за отпечатоци на задната страна на телефонот."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"За да ги проверите известувањата, повлечете надолу на сензорот за отпечатоци на задната страна на таблетот."</string>
@@ -4245,7 +4247,7 @@
<string name="clear_instant_app_confirmation" msgid="1778553115373698061">"Дали сакате да ја отстраните оваа инстант апликација?"</string>
<string name="launch_instant_app" msgid="5251693061228352333">"Отвори"</string>
<string name="game_storage_settings" msgid="6856911551799175914">"Игри"</string>
- <string name="audio_files_title" msgid="3073879661731363935">"Аудио датотеки"</string>
+ <string name="audio_files_title" msgid="3073879661731363935">"Аудиодатотеки"</string>
<string name="app_info_storage_title" msgid="6643391804949509308">"Искористен простор"</string>
<string name="webview_uninstalled_for_user" msgid="3407952144444040557">"(деинсталирано за корисникот <xliff:g id="USER">%s</xliff:g>)"</string>
<string name="webview_disabled_for_user" msgid="8057805373224993504">"(оневозможено за корисникот <xliff:g id="USER">%s</xliff:g>)"</string>
@@ -4263,7 +4265,7 @@
<string name="show_operator_name_title" msgid="5056163028128447308">"Име на мрежата"</string>
<string name="show_operator_name_summary" msgid="6352180285743777497">"Прикажи го името на мрежата во статусната лента"</string>
<string name="storage_manager_indicator" msgid="4255140732848476875">"„Управник со меморија“: <xliff:g id="STATUS">^1</xliff:g>"</string>
- <string name="storage_manager_indicator_off" msgid="6404056007102580777">"Исклучен"</string>
+ <string name="storage_manager_indicator_off" msgid="6404056007102580777">"Исклучено"</string>
<string name="storage_manager_indicator_on" msgid="5295306384982062320">"Вклучен"</string>
<string name="install_type_instant" msgid="6248487669862821874">"Инстант апликација"</string>
<string name="automatic_storage_manager_deactivation_warning" msgid="7867793739491286374">"Да се исклучи управникот со меморијата?"</string>
@@ -4304,17 +4306,17 @@
<string name="disabled_dependent_setting_summary" msgid="7668590009599010842">"Зависи од друга поставка"</string>
<string name="unknown_unavailability_setting_summary" msgid="5785931810977403534">"Поставката е недостапна"</string>
<string name="my_device_info_account_preference_title" msgid="7965847995028952373">"Сметка"</string>
- <string name="my_device_info_device_name_preference_title" msgid="7384446683248009296">"Име на уред"</string>
+ <string name="my_device_info_device_name_preference_title" msgid="7384446683248009296">"Име на уредот"</string>
<string name="change_wifi_state_title" msgid="5140754955787584174">"Контрола на Wi-Fi"</string>
<string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"Дозволете апликацијата да контролира Wi-Fi"</string>
<string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Дозволете апликацијава да вклучува или исклучува Wi-Fi, да скенира и да се поврзува на Wi-Fi мрежи, да додава или отстранува мрежи или да започне локална точка на пристап"</string>
- <string name="media_output_title" msgid="8710632337456601848">"Пуштање содржина на"</string>
+ <string name="media_output_title" msgid="8710632337456601848">"Пуштај содржини на"</string>
<string name="media_output_default_summary" msgid="3159237976830415584">"Овој уред"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"Телефон"</string>
<string name="media_output_summary" product="tablet" msgid="6672024060360538526">"Таблет"</string>
<string name="media_output_summary" product="device" msgid="5132223072593052660">"Уред"</string>
<string name="media_out_summary_ongoing_call_state" msgid="3081034548396491775">"Недостапно за време на повици"</string>
- <string name="media_output_summary_unavailable" msgid="6629338032551086053">"Недостапен"</string>
+ <string name="media_output_summary_unavailable" msgid="6629338032551086053">"Недостапно"</string>
<string name="take_call_on_title" msgid="6570776899869030724">"Прифатете повик на"</string>
<string name="cannot_change_apn_toast" msgid="5405823369239466817">"Ова APN не може да се промени."</string>
<string name="battery_suggestion_title" product="tablet" msgid="10172199242166440">"Подобрете го траењето на батеријата"</string>
@@ -4325,19 +4327,19 @@
<string name="gesture_prevent_ringing_title" msgid="8827963588425673557">"Притиснете ги копчињата за напојување и зголемување на јачината на звукот заедно за"</string>
<string name="gesture_prevent_ringing_sound_title" msgid="8642330448721033641">"Кратенка за спречување на ѕвонењето"</string>
<string name="prevent_ringing_option_vibrate" msgid="6456505293904544108">"Вибрации"</string>
- <string name="prevent_ringing_option_mute" msgid="53662688921253613">"Исклучи звук"</string>
+ <string name="prevent_ringing_option_mute" msgid="53662688921253613">"Исклучен звук"</string>
<string name="prevent_ringing_option_none" msgid="1450985763137666231">"Не прави ништо"</string>
<string name="prevent_ringing_option_vibrate_summary" msgid="7961818570574683926">"Вклучено (вибрации)"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3509459199090688328">"Вклучено (исклучен звук)"</string>
<string name="prevent_ringing_option_none_summary" msgid="5152618221093037451">"Исклучено"</string>
- <string name="pref_title_network_details" msgid="3971074015034595956">"Детали за мрежа"</string>
+ <string name="pref_title_network_details" msgid="3971074015034595956">"Детали за мрежата"</string>
<string name="about_phone_device_name_warning" msgid="9088572775969880106">"Името на уредот е видливо за апликациите на телефонот. Може да го видат и други луѓе кога ќе се поврзете со уреди со Bluetooth или кога ќе поставите Wi-Fi точка на пристап."</string>
<string name="devices_title" msgid="4768432575951993648">"Уреди"</string>
<string name="homepage_all_settings" msgid="3201220879559136116">"Сите поставки"</string>
<string name="homepage_personal_settings" msgid="7472638597249114564">"Предлози"</string>
<string name="choose_network_title" msgid="3213314359630522396">"Изберете мрежа"</string>
<string name="network_disconnected" msgid="8677203031237141594">"Исклучена"</string>
- <string name="network_connected" msgid="8197627827976712053">"Поврзана"</string>
+ <string name="network_connected" msgid="8197627827976712053">"Поврзано"</string>
<string name="network_connecting" msgid="8798611458457547110">"Се поврзува…"</string>
<string name="network_could_not_connect" msgid="552874922030763713">"Не може да се поврзе"</string>
<string name="empty_networks_list" msgid="5170020017144403884">"Не се најдени мрежи."</string>
@@ -4443,7 +4445,7 @@
<string name="mobile_network_mode_error" msgid="6818434186286086554">"Неважечки режим на мрежа <xliff:g id="NETWORKMODEID">%1$d</xliff:g>. Игнорирајте."</string>
<string name="mobile_network_apn_title" msgid="5628635067747404382">"Имиња на пристапни точки"</string>
<string name="manual_mode_disallowed_summary" msgid="799800630000340665">"Недостапно кога сте поврзани на <xliff:g id="CARRIER">%1$s</xliff:g>"</string>
- <string name="emergency_info_contextual_card_summary" msgid="5541444321969803486">"Медицински информации, контакти за итни случаи"</string>
+ <string name="emergency_info_contextual_card_summary" msgid="5541444321969803486">"Медицински податоци, контакти за итни случаи"</string>
<string name="see_more" msgid="7463940160389802632">"Видете повеќе"</string>
<string name="see_less" msgid="3718892257002813387">"Види помалку"</string>
<string name="network_connection_request_dialog_title" msgid="3150489262902506588">"Уред за користење со <xliff:g id="APPNAME">%1$s</xliff:g>"</string>
@@ -4463,7 +4465,7 @@
<string name="settings_panel_title" msgid="8181989386118232534">"Табла за поставки"</string>
<string name="internet_connectivity_panel_title" msgid="341712994620215750">"Интернет-врска"</string>
<string name="volume_connectivity_panel_title" msgid="4998755371496690971">"Јачина на звук"</string>
- <string name="mobile_data_ap_mode_disabled" msgid="2452716524753472885">"Недостапен во авионски режим"</string>
+ <string name="mobile_data_ap_mode_disabled" msgid="2452716524753472885">"Недостапно во авионски режим"</string>
<string name="force_desktop_mode" msgid="6973100177551040740">"Наметни режим на работна површина"</string>
<string name="force_desktop_mode_summary" msgid="8865007610266954719">"Наметнете го експерименталниот режим на работна површина на секундарните екрани"</string>
<string name="hwui_force_dark_title" msgid="3744825212652331461">"Отфрли го наметнувањето темен режим"</string>
@@ -4481,7 +4483,7 @@
<string name="copyable_slice_toast" msgid="1357518174923789947">"<xliff:g id="COPY_CONTENT">%1$s</xliff:g> копирано во привремената меморија."</string>
<string name="search_bar_account_avatar_content_description" msgid="947628881535053409"></string>
<string name="permission_bar_chart_empty_text" msgid="5893326513700540130">"0 апликации користеле дозволи"</string>
- <string name="permission_bar_chart_title" msgid="874145405516650073">"Користење дозволи во последните 24 часа"</string>
+ <string name="permission_bar_chart_title" msgid="874145405516650073">"Користење дозволи во минатите 24 часа"</string>
<string name="permission_bar_chart_details" msgid="942094334321073927">"Прикажи ги сите на контролната табла"</string>
<plurals name="permission_bar_chart_label" formatted="false" msgid="2831305719356562097">
<item quantity="one"><xliff:g id="NUMBER">%s</xliff:g> апликација</item>
diff --git a/tests/CarDeveloperOptions/res/values-ml/arrays.xml b/tests/CarDeveloperOptions/res/values-ml/arrays.xml
index 933d78c..6fbe7e4 100644
--- a/tests/CarDeveloperOptions/res/values-ml/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-ml/arrays.xml
@@ -38,7 +38,16 @@
<item msgid="5827960506924849753">"10 മിനിറ്റ്"</item>
<item msgid="6677424950124253938">"30 മിനിറ്റ്"</item>
</string-array>
- <!-- no translation found for dream_timeout_entries:7 (8271452751594598661) -->
+ <string-array name="dream_timeout_entries">
+ <item msgid="6487043225269853023">"ഒരിക്കലും വേണ്ട"</item>
+ <item msgid="2517785806387977252">"15 സെക്കൻഡ്"</item>
+ <item msgid="6347954399441173672">"30 സെക്കൻഡ്"</item>
+ <item msgid="4858305253279921789">"ഒരു മിനിറ്റ്"</item>
+ <item msgid="8109273437140044073">"2 മിനിറ്റ്"</item>
+ <item msgid="2788593551142462622">"5 മിനിറ്റ്"</item>
+ <item msgid="8012672183888404961">"10 മിനിറ്റ്"</item>
+ <item msgid="8271452751594598661">"30 മിനിറ്റ്"</item>
+ </string-array>
<string-array name="lock_after_timeout_entries">
<item msgid="2232921187970351881">"ഉടന്"</item>
<item msgid="2038544972632026612">"5 സെക്കൻഡ്"</item>
@@ -50,17 +59,47 @@
<item msgid="811192536981678974">"10 മിനിറ്റ്"</item>
<item msgid="7258394417241706272">"30 മിനിറ്റ്"</item>
</string-array>
- <!-- no translation found for entries_font_size:0 (2340391964816059553) -->
- <!-- no translation found for entries_font_size:0 (6490061470416867723) -->
- <!-- no translation found for entries_font_size:2 (1714184661981538355) -->
- <!-- no translation found for entries_font_size:2 (1678068858001018666) -->
- <!-- no translation found for wifi_status:3 (5848277343965362748) -->
- <!-- no translation found for wifi_status_with_ssid:1 (6816207058895999545) -->
- <!-- no translation found for wifi_status_with_ssid:3 (7547609081339573756) -->
- <!-- no translation found for wifi_status_with_ssid:4 (5145158315060185414) -->
+ <string-array name="entries_font_size">
+ <item msgid="2340391964816059553">"ചെറുത്"</item>
+ <item msgid="591935967183159581">"ഡിഫോൾട്ട്"</item>
+ <item msgid="1714184661981538355">"വലുത്"</item>
+ <item msgid="6195563047686707484">"ഏറ്റവും വലുത്"</item>
+ </string-array>
+ <string-array name="wifi_status">
+ <item msgid="1304883790721412351"></item>
+ <item msgid="4157625910392775808">"സ്കാൻചെയ്യുന്നു..."</item>
+ <item msgid="5597394826455877834">"കണക്റ്റുചെയ്യുന്നു..."</item>
+ <item msgid="5848277343965362748">"പരിശോധിച്ചുറപ്പിക്കുന്നു…"</item>
+ <item msgid="3391238031431440676">"IP വിലാസം നേടുന്നു..."</item>
+ <item msgid="5257597310494000224">"കണക്റ്റ് ചെയ്തു"</item>
+ <item msgid="8472497592913050396">"താൽക്കാലികമായി നിർത്തി"</item>
+ <item msgid="1228072488815999109">"വിച്ഛേദിക്കുന്നു..."</item>
+ <item msgid="7253087004422991731">"വിച്ഛേദിച്ചു"</item>
+ <item msgid="4169850917304751227">"പരാജയപ്പെട്ടു"</item>
+ <item msgid="6266658166690831131">"തടഞ്ഞു"</item>
+ <item msgid="4517230805854909775">"മോശം കണക്ഷൻ താൽക്കാലികമായി ഒഴിവാക്കുന്നു"</item>
+ </string-array>
+ <string-array name="wifi_status_with_ssid">
+ <item msgid="4853670665485437464"></item>
+ <item msgid="6816207058895999545">"സ്കാൻ ചെയ്യുന്നു…"</item>
+ <item msgid="8058143476674427024">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> എന്നതിലേക്ക് കണക്റ്റുചെയ്യുന്നു..."</item>
+ <item msgid="7547609081339573756">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> മുഖേന പരിശോധിച്ചുറപ്പിക്കുന്നു…"</item>
+ <item msgid="5145158315060185414">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> എന്നതിൽ നിന്ന് IP വിലാസം നേടുന്നു…"</item>
+ <item msgid="3283243151651124831">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> എന്നതിൽ കണക്റ്റുചെയ്തു"</item>
+ <item msgid="6600156231416890902">"താൽക്കാലികമായി നിർത്തി"</item>
+ <item msgid="4133290864821295785">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> എന്നതിൽ നിന്ന് വിച്ഛേദിക്കുന്നു..."</item>
+ <item msgid="3980154971187953257">"വിച്ഛേദിച്ചു"</item>
+ <item msgid="2847316776634969068">"പരാജയപ്പെട്ടു"</item>
+ <item msgid="4390990424746035383">"തടഞ്ഞു"</item>
+ <item msgid="3618248791367063949">"മോശം കണക്ഷൻ താൽക്കാലികമായി ഒഴിവാക്കുന്നു"</item>
+ </string-array>
<!-- no translation found for wifi_tether_security:0 (5586343370515598801) -->
<!-- no translation found for wifi_tether_security:1 (6136336549994615745) -->
- <!-- no translation found for wifi_p2p_wps_setup:0 (5390235347963255303) -->
+ <string-array name="wifi_p2p_wps_setup">
+ <item msgid="5390235347963255303">"പുഷ് ബട്ടൺ"</item>
+ <item msgid="7401896200768713930">"പിയർ ഉപകരണത്തിൽ നിന്നുള്ള പിൻ"</item>
+ <item msgid="4526848028011846710">"ഈ ഉപകരണത്തിൽ നിന്നുള്ള പിൻ"</item>
+ </string-array>
<string-array name="wifi_p2p_status">
<item msgid="8741947238021758201">"കണക്റ്റ് ചെയ്തു"</item>
<item msgid="983792611851499732">"ക്ഷണിച്ചു"</item>
@@ -82,8 +121,13 @@
<item msgid="1644506614010085798">"4"</item>
<item msgid="3132506679404897150">"5"</item>
</string-array>
- <!-- no translation found for wifi_signal:1 (7882129634982603782) -->
- <!-- no translation found for wifi_signal:4 (999948812884919584) -->
+ <string-array name="wifi_signal">
+ <item msgid="1709949377823900951">"മോശം"</item>
+ <item msgid="7882129634982603782">"മോശം"</item>
+ <item msgid="6457357501905996224">"തൃപ്തികരം"</item>
+ <item msgid="405271628162918841">"നല്ലത്"</item>
+ <item msgid="999948812884919584">"മികച്ചത്"</item>
+ </string-array>
<string-array name="data_usage_data_range">
<item msgid="8986775481492954015">"കഴിഞ്ഞ 30 ദിവസം"</item>
<item msgid="3211287705232736964">"ഉപയോഗ സൈക്കിൾ സജ്ജമാക്കുക..."</item>
@@ -119,7 +163,10 @@
<item msgid="7330627471456865502">"MSCHAPV2"</item>
<item msgid="6255179395132581882">"GTC"</item>
</string-array>
- <!-- no translation found for wifi_ip_settings:1 (4377002609760712163) -->
+ <string-array name="wifi_ip_settings">
+ <item msgid="2717196390555072244">"DHCP"</item>
+ <item msgid="4377002609760712163">"സ്റ്റാറ്റിക്ക്"</item>
+ </string-array>
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"ഒന്നുമില്ല"</item>
<item msgid="1464741437353223198">"മാനുവൽ"</item>
@@ -239,11 +286,73 @@
<item msgid="1165623660533024666">"പശ്ചാത്തലത്തിൽ റൺ ചെയ്യുക"</item>
<item msgid="6423861043647911030">"ഉപയോഗസഹായി വോളിയം"</item>
</string-array>
- <!-- no translation found for app_ops_labels:3 (7836406246005211990) -->
- <!-- no translation found for app_ops_labels:4 (3951439024549922598) -->
- <!-- no translation found for app_ops_labels:8 (3597797992398484655) -->
- <!-- no translation found for app_ops_labels:20 (3037159047591081136) -->
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"ലൊക്കേഷൻ"</item>
+ <item msgid="6656077694190491067">"ലൊക്കേഷൻ"</item>
+ <item msgid="8790228218278477369">"ലൊക്കേഷൻ"</item>
+ <item msgid="7836406246005211990">"വൈബ്രേറ്റ് ചെയ്യുക"</item>
+ <item msgid="3951439024549922598">"കോൺടാക്റ്റുകൾ റീഡ് ചെയ്യുക"</item>
+ <item msgid="8802152411647068">"കോൺടാക്റ്റുകൾ പരിഷ്ക്കരിക്കുക"</item>
+ <item msgid="229544934599698735">"കോൾ ചരിത്രം റീഡ് ചെയ്യുക"</item>
+ <item msgid="7396102294405899613">"കോൾ ചരിത്രം പരിഷ്ക്കരിക്കുക"</item>
+ <item msgid="3597797992398484655">"കലണ്ടർ റീഡ് ചെയ്യുക"</item>
+ <item msgid="2705975774250907343">"കലണ്ടർ പരിഷ്ക്കരിക്കുക"</item>
+ <item msgid="4668747371441932697">"ലൊക്കേഷൻ"</item>
+ <item msgid="1487578921720243646">"അറിയിപ്പ് പോസ്റ്റുചെയ്യുക"</item>
+ <item msgid="4636080349724146638">"ലൊക്കേഷൻ"</item>
+ <item msgid="673510900286463926">"ഫോണ് വിളിക്കുക"</item>
+ <item msgid="542083422784609790">"SMS/MMS വായിക്കുക"</item>
+ <item msgid="1033780373029588436">"SMS/MMS എഴുതുക"</item>
+ <item msgid="5647111115517787488">"SMS/MMS നേടുക"</item>
+ <item msgid="8591105601108455893">"SMS/MMS നേടുക"</item>
+ <item msgid="7730995008517841903">"SMS/MMS നേടുക"</item>
+ <item msgid="2613033109026626086">"SMS/MMS നേടുക"</item>
+ <item msgid="3037159047591081136">"SMS/MMS അയയ്ക്കുക"</item>
+ <item msgid="4726682243833913568">"SMS/MMS വായിക്കുക"</item>
+ <item msgid="6555678522277865572">"SMS/MMS എഴുതുക"</item>
+ <item msgid="6981734935578130884">"ക്രമീകരണങ്ങൾ പരിഷ്ക്കരിക്കുക"</item>
+ <item msgid="8705854389991425629">"മുകളിൽ ഡ്രോ ചെയ്യുക"</item>
+ <item msgid="5861356020344153651">"ആക്സസ്സ് അറിയിപ്പുകൾ"</item>
+ <item msgid="78432174621628659">"ക്യാമറ"</item>
+ <item msgid="3986116419882154794">"ഓഡിയോ റെക്കോർഡുചെയ്യുക"</item>
+ <item msgid="4516840825756409490">"ഓഡിയോ പ്ലേ ചെയ്യുക"</item>
+ <item msgid="6811712502798183957">"ക്ലിപ്പ്ബോർഡ് റീഡുചെയ്യുക"</item>
+ <item msgid="2780369012602289114">"ക്ലിപ്പ്ബോർഡ് പരിഷ്ക്കരിക്കുക"</item>
+ <item msgid="2331359440170850868">"മീഡിയ ബട്ടണുകൾ"</item>
+ <item msgid="6133599737122751231">"ഓഡിയോ ഫോക്കസ്"</item>
+ <item msgid="6844485713404805301">"മൊത്തം വോളിയം"</item>
+ <item msgid="1600379420669104929">"വോയ്സ് വോളിയം"</item>
+ <item msgid="6296768210470214866">"റിംഗ് വോളിയം"</item>
+ <item msgid="510690696071629241">"മീഡിയാ വോളിയം"</item>
+ <item msgid="406861638631430109">"അലാറം വോളിയം"</item>
+ <item msgid="4715864795872233884">"അറിയിപ്പ് വോളിയം"</item>
+ <item msgid="2311478519251301183">"ബ്ലൂടൂത്ത് വോളിയം"</item>
+ <item msgid="5133991377896747027">"സജീവമായി തുടരുക"</item>
+ <item msgid="2464189519136248621">"ലൊക്കേഷൻ"</item>
+ <item msgid="2062677934050803037">"ലൊക്കേഷൻ"</item>
+ <item msgid="1735171933192715957">"ഉപയോഗ സ്ഥിതിവിവരക്കണക്കുകൾ നേടുക"</item>
+ <item msgid="1014093788778383554">"മൈക്രോഫോൺ മ്യൂട്ടുചെയ്യുക/അൺമ്യൂട്ടുചെയ്യുക"</item>
+ <item msgid="4199297950608622850">"ടോസ്റ്റ് കാണിക്കുക"</item>
+ <item msgid="2527962435313398821">"പ്രോജക്റ്റ് മീഡിയ"</item>
+ <item msgid="5117506254221861929">"VPN സജീവമാക്കുക"</item>
+ <item msgid="8291198322681891160">"വാൾപേപ്പർ എഴുതുക"</item>
+ <item msgid="7106921284621230961">"അസിസ്റ്റ് ഘടന"</item>
+ <item msgid="4496533640894624799">"അസിസ്റ്റ് സ്ക്രീൻഷോട്ട്"</item>
+ <item msgid="2598847264853993611">"ഫോൺ നില വായിക്കുക"</item>
+ <item msgid="9215610846802973353">"വോയ്സ്മെയിൽ ചേർക്കുക"</item>
+ <item msgid="9186411956086478261">"sip ഉപയോഗിക്കുക"</item>
+ <item msgid="6884763100104539558">"ഔട്ട്ഗോയിംഗ് കോൾ പ്രോസസ്സുചെയ്യുക"</item>
+ <item msgid="125513972170580692">"ഫിംഗർപ്രിന്റ്"</item>
+ <item msgid="2556071024281275619">"ബോഡി സെൻസറുകൾ"</item>
+ <item msgid="617168514928339387">"സെൽ ബ്രോഡ്കാസ്റ്റുകൾ വായിക്കുക"</item>
+ <item msgid="7134693570516523585">"മോക്ക് ലൊക്കേഷൻ"</item>
+ <item msgid="7224489175375229399">"സ്റ്റോറേജ് വായിക്കുക"</item>
+ <item msgid="8472735063903258202">"സ്റ്റോറേജ് എഴുതുക"</item>
+ <item msgid="4069276819909595110">"സ്ക്രീൻ ഓണാക്കുക"</item>
+ <item msgid="1228338896751121025">"അക്കൗണ്ടുകൾ സ്വന്തമാക്കുക"</item>
+ <item msgid="3181581793459233672">"പശ്ചാത്തലത്തിൽ റൺ ചെയ്യുക"</item>
+ <item msgid="2340936043025374076">"ഉപയോഗസഹായി വോളിയം"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"ഹ്രസ്വം"</item>
<item msgid="4816511817309094890">"ഇടത്തരം"</item>
@@ -260,7 +369,13 @@
<item msgid="4627069151979553527">"കൂട്ടെഴുത്ത്"</item>
<item msgid="6896773537705206194">"ചെറിയ കാപ്പിറ്റലുകൾ"</item>
</string-array>
- <!-- no translation found for captioning_font_size_selector_titles:3 (2784236342175159295) -->
+ <string-array name="captioning_font_size_selector_titles">
+ <item msgid="1680223634161592855">"തീരെ ചെറുത്"</item>
+ <item msgid="5091603983404027034">"ചെറുത്"</item>
+ <item msgid="176844712416932112">"സാധാരണം"</item>
+ <item msgid="2784236342175159295">"വലുത്"</item>
+ <item msgid="218913203203160606">"വളരെ വലുത്"</item>
+ </string-array>
<string-array name="captioning_edge_type_selector_titles">
<item msgid="3865198759294188069">"ഡിഫോൾട്ട്"</item>
<item msgid="6488643537808152001">"ഒന്നുമില്ല"</item>
@@ -275,7 +390,14 @@
<item msgid="1874668269931014581">"75%"</item>
<item msgid="6462911487571123954">"100%"</item>
</string-array>
- <!-- no translation found for captioning_preset_selector_titles:2 (5891360837786277638) -->
+ <string-array name="captioning_preset_selector_titles">
+ <item msgid="326819345272910536">"സ്ഥിര ആപ്പ് ഉപയോഗിക്കൂ"</item>
+ <item msgid="8611890312638868524">"കറുപ്പിൽ വെളുപ്പ്"</item>
+ <item msgid="5891360837786277638">"വെളുപ്പിൽ കറുപ്പ്"</item>
+ <item msgid="2798457065945456853">"കറുപ്പിൽ മഞ്ഞ"</item>
+ <item msgid="5799049811524553967">"നീലയിൽ മഞ്ഞ"</item>
+ <item msgid="3673930830658169860">"ഇഷ്ടാനുസൃതം"</item>
+ </string-array>
<string-array name="vpn_types_long">
<item msgid="6566768880689730097">"PPTP VPN"</item>
<item msgid="1349760781118368659">"മുമ്പ് പങ്കിട്ട കീകൾ ഉപയോഗിക്കുന്ന L2TP/IPSec VPN"</item>
@@ -288,15 +410,32 @@
<item msgid="2958623927055120839">"ഒന്നുമില്ല"</item>
<item msgid="1157046369795346308">"മാനുവൽ"</item>
</string-array>
- <!-- no translation found for vpn_states:4 (9135049670787351881) -->
+ <string-array name="vpn_states">
+ <item msgid="5408915841694583740">"വിച്ഛേദിച്ചു"</item>
+ <item msgid="8754480102834556765">"സമാരംഭിക്കുന്നു..."</item>
+ <item msgid="3351334355574270250">"കണക്റ്റുചെയ്യുന്നു..."</item>
+ <item msgid="8303882153995748352">"കണക്റ്റ് ചെയ്തു"</item>
+ <item msgid="9135049670787351881">"ടൈംഔട്ട്"</item>
+ <item msgid="2124868417182583926">"പരാജയപ്പെട്ടു"</item>
+ </string-array>
<string-array name="security_settings_premium_sms_values">
<item msgid="1164265643455394443">"ചോദിക്കുക"</item>
<item msgid="7718817231348607934">"ഒരിക്കലുമനുവദിക്കരുത്"</item>
<item msgid="8184570120217958741">"എല്ലായ്പ്പോഴും അനുവദിക്കുക"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"സാധാരണം"</item>
+ <item msgid="5101233285497327432">"ഇടത്തരം"</item>
+ <item msgid="1555861583162930714">"കുറഞ്ഞത്"</item>
+ <item msgid="1719683776264798117">"കഴിയാറായി"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"സാധാരണം"</item>
+ <item msgid="6107138933849816768">"ഇടത്തരം"</item>
+ <item msgid="182695359839047859">"കുറഞ്ഞത്"</item>
+ <item msgid="8577246509202964244">"കഴിയാറായി"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"നിരന്തരമായ"</item>
<item msgid="167418068739176448">"മികച്ച പ്രവർത്തനം"</item>
@@ -334,8 +473,8 @@
</string-array>
<string-array name="wifi_metered_entries">
<item msgid="4329206416008519163">"സ്വയമേവ കണ്ടെത്തുക"</item>
- <item msgid="773943026484148895">"മീറ്റർ-മാപകമായി കണക്കാക്കുക"</item>
- <item msgid="1008268820118852416">"മീറ്റർ മാപകമല്ലാത്തതായി കണക്കാക്കുക"</item>
+ <item msgid="773943026484148895">"മീറ്റർ ചെയ്തതായി കണക്കാക്കുക"</item>
+ <item msgid="1008268820118852416">"മീറ്റർ ചെയ്യാത്തതായി കണക്കാക്കുക"</item>
</string-array>
<string-array name="wifi_privacy_entries">
<item msgid="6545683814310036454">"ക്രമരഹിതമാക്കിയ MAC ഉപയോഗിക്കുക (ഡിഫോൾട്ട്)"</item>
diff --git a/tests/CarDeveloperOptions/res/values-ml/strings.xml b/tests/CarDeveloperOptions/res/values-ml/strings.xml
index 585800c..2413d00 100644
--- a/tests/CarDeveloperOptions/res/values-ml/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-ml/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"സ്ക്രീനിലെ ടെക്സ്റ്റ് ചെറുതോ വലുതോ ആക്കുക."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"ചെറുതാക്കുക"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"വലുതാക്കുക"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"സാമ്പിൾ ടെക്സ്റ്റ്"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"ഓസ് നഗരത്തിലെ അതിശയിപ്പിക്കുന്ന മന്ത്രവാദി"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"അധ്യായം 11: ഓസ് എന്ന അത്ഭുതകരമായ മരതകനഗരം"</string>
@@ -208,7 +207,7 @@
<string name="proxy_error_empty_port" msgid="8034561724923076215">"നിങ്ങൾ പോർട്ട് ഫീൽഡ് പൂർത്തിയാക്കേണ്ടതുണ്ട്."</string>
<string name="proxy_error_empty_host_set_port" msgid="8471455809508588255">"ഹോസ്റ്റ് ഫീൽഡ് ശൂന്യമാണെങ്കിൽ പോർട്ട് ഫീൽഡും ശൂന്യമായിരിക്കണം."</string>
<string name="proxy_error_invalid_port" msgid="4046559920586100637">"നിങ്ങൾ ടൈപ്പുചെയ്ത പോർട്ട് സാധുവായതല്ല."</string>
- <string name="proxy_warning_limited_support" msgid="9026539134219095768">"ബ്രൗസർ HTTP പ്രോക്സി ഉപയോഗിക്കുന്നുവെങ്കിലും മറ്റ് അപ്ലിക്കേഷനുകൾ ഉപയോഗിക്കാനിടയില്ല."</string>
+ <string name="proxy_warning_limited_support" msgid="9026539134219095768">"ബ്രൗസർ HTTP പ്രോക്സി ഉപയോഗിക്കുന്നുവെങ്കിലും മറ്റ് ആപ്പുകൾ ഉപയോഗിക്കാനിടയില്ല."</string>
<string name="proxy_url_title" msgid="882042361706435904">"PAC URL: "</string>
<string name="radio_info_dl_kbps" msgid="2903778264453410272">"DL ബാന്ഡ്വിത്ത് (kbps):"</string>
<string name="radio_info_ul_kbps" msgid="3802245899811732716">"UL ബാന്ഡ്വിത്ത് (kbps):"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"പ്രൊഫൈൽ വിവരം"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"അക്കൗണ്ടുകൾ"</string>
<string name="location_settings_title" msgid="2707201457572301030">"ലൊക്കേഷൻ"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"ലൊക്കേഷൻ ഉപയോഗിക്കുക"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"ലൊക്കേഷൻ ഉപയോഗിക്കുക"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"ഓഫാക്കുക"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other"> - <xliff:g id="COUNT_1">%1$d</xliff:g> ആപ്പുകളിൽ, ലൊക്കേഷൻ ആക്സസ് ചെയ്യാനാവും</item>
@@ -419,7 +418,7 @@
<string name="security_settings_face_enroll_done" msgid="5409739233373490971">"പൂർത്തിയായി"</string>
<string name="security_settings_face_settings_use_face_category" msgid="1586532139528115416">"മുഖം ഉപയോഗിക്കേണ്ടത്"</string>
<string name="security_settings_face_settings_use_face_unlock_phone" msgid="318274519126401671">"ഉപകരണം അൺലോക്ക് ചെയ്യൽ"</string>
- <string name="security_settings_face_settings_use_face_for_apps" msgid="5479369083370664351">"സൈൻ ഇൻ ചെയ്യലും പണമടയ്ക്കലും"</string>
+ <string name="security_settings_face_settings_use_face_for_apps" msgid="5479369083370664351">"ആപ്പ് സൈൻ ഇൻ, പേയ്മെന്റുകൾ"</string>
<string name="security_settings_face_settings_require_attention" msgid="2755140150841557225">"അൺലോക്ക് ചെയ്യാൻ കണ്ണുകൾ തുറന്നിരിക്കണം"</string>
<string name="security_settings_face_settings_require_attention_details" msgid="2557060433599942587">"മുഖം പരിശോധിച്ചുറപ്പിക്കുമ്പോൾ, കണ്ണുകൾ തുറന്നിരിക്കണം"</string>
<string name="security_settings_face_settings_require_confirmation" msgid="7312024271060416438">"എപ്പോഴും സ്ഥിരീകരണം ആവശ്യമാണ്"</string>
@@ -456,7 +455,7 @@
<string name="lock_screen_intro_skip_dialog_text" product="tablet" msgid="7572334562915795226">"ഉപകരണ പരിരക്ഷാ ഫീച്ചറുകൾ ഓണാക്കില്ല. ഈ ടാബ്ലെറ്റ് നഷ്ടപ്പെടുകയോ മോഷ്ടിക്കപ്പെടുകയോ ചെയ്താൽ, ടാബ്ലെറ്റ് ഉപയോഗിക്കുന്നതിൽ നിന്ന് മറ്റുള്ളവരെ തടയാൻ നിങ്ങൾക്കാവില്ല."</string>
<string name="lock_screen_intro_skip_dialog_text" product="device" msgid="3819285334459763813">"ഉപകരണ പരിരക്ഷാ ഫീച്ചറുകൾ ഓണാക്കില്ല. ഈ ഉപകരണം നഷ്ടപ്പെടുകയോ മോഷ്ടിക്കപ്പെടുകയോ ചെയ്താൽ, ഉപകരണം ഉപയോഗിക്കുന്നതിൽ നിന്ന് മറ്റുള്ളവരെ തടയാൻ നിങ്ങൾക്കാവില്ല."</string>
<string name="lock_screen_intro_skip_dialog_text" product="default" msgid="5361573789585652826">"ഉപകരണ പരിരക്ഷാ ഫീച്ചറുകൾ ഓണാക്കില്ല. ഈ ഫോൺ നഷ്ടപ്പെടുകയോ മോഷ്ടിക്കപ്പെടുകയോ ചെയ്താൽ, ഫോൺ ഉപയോഗിക്കുന്നതിൽ നിന്ന് മറ്റുള്ളവരെ തടയാൻ നിങ്ങൾക്കാവില്ല."</string>
- <string name="skip_anyway_button_label" msgid="4437815969645175429">"ഏതുവിധേനയും ഒഴിവാക്കുക"</string>
+ <string name="skip_anyway_button_label" msgid="4437815969645175429">"എന്തായാലും ഒഴിവാക്കുക"</string>
<string name="go_back_button_label" msgid="7310586887969860472">"തിരിച്ചുപോവുക"</string>
<string name="skip_lock_screen_dialog_button_label" msgid="6706047245716780006">"ഒഴിവാക്കുക"</string>
<string name="cancel_lock_screen_dialog_button_label" msgid="2534925227627658819">"റദ്ദാക്കുക"</string>
@@ -468,7 +467,7 @@
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="4312297515772004580">"ഇല്ലാതാക്കുക"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"സെൻസർ സ്പർശിക്കുക"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"സെൻസറിൽ വിരൽ വച്ച് വൈബ്രേഷൻ അനുഭവപ്പെട്ട ശേഷം വിരൽ മാറ്റുക."</string>
- <string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"ഉയർത്തുക, വീണ്ടും സ്പർശിക്കുക"</string>
+ <string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"വിരലെടുക്കുക, വീണ്ടും സ്പർശിക്കുക"</string>
<string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"നിങ്ങളുടെ ഫിംഗർപ്രിന്റിന്റെ വ്യത്യസ്ത ഭാഗങ്ങൾ ചേർക്കുന്നതിന് നിങ്ങളുടെ വിരൽ ഉയർത്തിക്കൊണ്ടിരിക്കുക"</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"ഫിംഗർപ്രിന്റ് ചേർത്തു"</string>
<string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"നിങ്ങൾ ഈ ഐക്കൺ കാണുമ്പോൾ, തിരിച്ചറിയലിനോ വാങ്ങലിന് അംഗീകാരം നൽകാനോ നിങ്ങളുടെ ഫിംഗർപ്രിന്റ് ഉപയോഗിക്കുക"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"വൈഫൈ"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"വൈഫൈ ഓണാക്കുക"</string>
<string name="wifi_settings" msgid="7486492317310514109">"വൈഫൈ"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"വൈഫൈ ഉപയോഗിക്കുക"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"വൈഫൈ ഉപയോഗിക്കുക"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"വൈഫൈ ക്രമീകരണങ്ങൾ"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"വൈഫൈ"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"വയർലെസ് ആക്സസ് പോയിന്റുകൾ സജ്ജീകരിക്കുക, നിയന്ത്രിക്കുക"</string>
@@ -858,7 +857,7 @@
<string name="wifi_poor_network_detection_summary" msgid="5539951465985614590">"മികച്ച ഇന്റർനെറ്റ് കണക്ഷൻ ഉണ്ടാകുന്നതുവരെ വൈഫൈ നെറ്റ്വർക്ക് ഉപയോഗിക്കരുത്"</string>
<string name="wifi_avoid_poor_network_detection_summary" msgid="1976503191780928104">"മികച്ച ഇന്റർനെറ്റ് കണക്ഷനുള്ള നെറ്റ്വർക്കുകൾ മാത്രം ഉപയോഗിക്കുക"</string>
<string name="use_open_wifi_automatically_title" msgid="3084513215481454350">"ഓപ്പൺ നെറ്റ്വർക്കിലേക്ക് കണക്റ്റ് ചെയ്യുക"</string>
- <string name="use_open_wifi_automatically_summary" msgid="8338020172673161754">"ഉയർന്ന ഗുണമേന്മയുള്ള പബ്ലിക് നെറ്റ്വർക്കുകളിലേക്ക് സ്വയമേവ കണക്റ്റ് ചെയ്യുക"</string>
+ <string name="use_open_wifi_automatically_summary" msgid="8338020172673161754">"ഉയർന്ന നിലവാരമുള്ള പൊതു നെറ്റ്വർക്കുകളിലേക്ക് സ്വയമേവ കണക്റ്റ് ചെയ്യുക"</string>
<string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"ഉപയോഗിക്കാനായി, ഒരു നെറ്റ്വർക്ക് റേറ്റിംഗ് ദാതാവിനെ തിരഞ്ഞെടുക്കുക"</string>
<string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"ഉപയോഗിക്കാനായി, അനുയോജ്യമായ ഒരു നെറ്റ്വർക്ക് റേറ്റിംഗ് ദാതാവിനെ തിരഞ്ഞെടുക്കുക"</string>
<string name="wifi_install_credentials" msgid="5650088113710858289">"സർട്ടിഫിക്കറ്റുകൾ ഇൻസ്റ്റാളുചെയ്യുക"</string>
@@ -906,7 +905,7 @@
<string name="wifi_ssid_hint" msgid="5010024648106585165">"SSID നൽകുക"</string>
<string name="wifi_security" msgid="9136702039496152831">"സുരക്ഷ"</string>
<string name="wifi_hidden_network" msgid="6647772204699776833">"മറയ്ക്കപ്പെട്ട നെറ്റ്വർക്ക്"</string>
- <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"നിങ്ങളുടെ റൂട്ടർ ഒരു നെറ്റ്വര്ക്ക് ഐഡി പ്രക്ഷേപണം ചെയ്യുന്നില്ലെങ്കിൽ, എന്നാൽ ഭാവിയിൽ നിങ്ങൾ ഇതിലേക്ക് കണക്റ്റ് ചെയ്യാൻ ആഗ്രഹിക്കുന്നെങ്കിൽ, നെറ്റ്വര്ക്ക് അദൃശ്യമാക്കി സജ്ജീകരിക്കാനാവും.\n\nനെറ്റ്വര്ക്ക് കണ്ടെത്താനായി നിങ്ങളുടെ ഫോൺ അതിന്റെ സിഗ്നലുകളെ പതിവായി പ്രക്ഷേപണം ചെയ്യും എന്നതിനാൽ ഇത് സുരക്ഷയുമായി ബന്ധപ്പെട്ട അപകടസാധ്യത സൃഷ്ടിക്കാൻ സാധ്യതയുണ്ട്.\n\nനെറ്റ്വര്ക്ക് അദൃശ്യമായി ക്രമീകരിക്കുന്നത്, നിങ്ങളുടെ റൂട്ടർ ക്രമീകരണം മാറ്റില്ല."</string>
+ <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"നിങ്ങളുടെ റൂട്ടർ ഒരു നെറ്റ്വര്ക്ക് ഐഡി പ്രക്ഷേപണം ചെയ്യുന്നില്ല,എന്നാൽ ഭാവിയിൽ നിങ്ങൾ ഇതിലേക്ക് കണക്റ്റ് ചെയ്യാൻ ആഗ്രഹിക്കുന്നു എങ്കിൽ, നെറ്റ്വര്ക്ക് മറയ്ക്കപ്പെട്ടതായി സജ്ജീകരിക്കാനാവും.\n\nനെറ്റ്വര്ക്ക് കണ്ടെത്താനായി നിങ്ങളുടെ ഫോൺ അതിന്റെ സിഗ്നലുകളെ പതിവായി പ്രക്ഷേപണം ചെയ്യും എന്നതിനാൽ ഇത് സുരക്ഷാ ഭീഷണി സൃഷ്ടിച്ചേക്കും.\n\nനെറ്റ്വര്ക്ക് മറയ്ക്കപ്പെട്ടതായി ക്രമീകരിക്കുന്നത്, നിങ്ങളുടെ റൂട്ടർ ക്രമീകരണം മാറ്റില്ല."</string>
<string name="wifi_signal" msgid="696548364467704808">"സിഗ്നൽ ശക്തി"</string>
<string name="wifi_status" msgid="3439931558930689940">"നില"</string>
<string name="tx_wifi_speed" msgid="2571810085003261073">"പ്രക്ഷേപണ ലിങ്കിന്റെ വേഗത"</string>
@@ -916,7 +915,7 @@
<string name="passpoint_label" msgid="7429247462404128615">"ഇതുവഴി സംരക്ഷിച്ചു"</string>
<string name="passpoint_content" msgid="340527524510304327">"<xliff:g id="NAME">%1$s</xliff:g> ക്രെഡൻഷ്യലുകൾ"</string>
<string name="wifi_eap_method" msgid="3752116941487485859">"EAP രീതി"</string>
- <string name="please_select_phase2" msgid="5848080896810435677">"ഘട്ടം 2 പ്രമാണീകരണം"</string>
+ <string name="please_select_phase2" msgid="5848080896810435677">"രണ്ടാം ഘട്ട പരിശോധിച്ചുറപ്പിക്കൽ"</string>
<string name="wifi_eap_ca_cert" msgid="1496395241849383785">"CA സർട്ടിഫിക്കറ്റ്"</string>
<string name="wifi_eap_domain" msgid="3298302320003640130">"ഡൊമെയ്ൻ"</string>
<string name="wifi_eap_user_cert" msgid="6786839531765719173">"ഉപയോക്തൃ സർട്ടിഫിക്കറ്റ്"</string>
@@ -928,7 +927,7 @@
<string name="wifi_ap_choose_auto" msgid="7927637960569365785">"സ്വമേധയാ"</string>
<string name="wifi_ap_choose_2G" msgid="43198403259714736">"2.4 GHz ബാൻഡ്"</string>
<string name="wifi_ap_choose_5G" msgid="2624859713183683146">"5.0 GHz ബാൻഡ്"</string>
- <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"5.0 GHz ബാൻഡ് തിരഞ്ഞെടുത്തു"</string>
+ <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"5.0 GHz ബാൻഡിന് മുൻഗണന"</string>
<string name="wifi_ap_2G" msgid="5793110086517338494">"2.4 GHz"</string>
<string name="wifi_ap_5G" msgid="4584892544393675403">"5.0 GHz"</string>
<string name="wifi_ap_band_select_one" msgid="4409754936554360355">"വൈഫൈ ഹോട്ട്സ്പോട്ടിനായി കുറഞ്ഞത് ഒരു ബാൻഡ് എങ്കിലും തിരഞ്ഞെടുക്കുക:"</string>
@@ -939,14 +938,14 @@
<string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"“<xliff:g id="SSID">%1$s</xliff:g>” എന്നതിലേക്ക് ഉപകരണം ചേർക്കാൻ, ചുവടെയുള്ള QR കോഡിലേക്ക് കേന്ദ്രീകരിക്കുക"</string>
<string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"QR കോഡ് സ്കാൻ ചെയ്യുക"</string>
<string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"“<xliff:g id="SSID">%1$s</xliff:g>” എന്നതിലേക്ക് കണക്റ്റ് ചെയ്യാൻ, ചുവടെയുള്ള QR കോഡിലേക്ക് കേന്ദ്രീകരിക്കുക"</string>
- <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"QR കോഡ് പരിശോധിച്ച് വൈഫൈയിൽ ചേരുക"</string>
+ <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"QR കോഡ് സ്കാൻ ചെയ്ത് വൈഫൈയിൽ ചേരുക"</string>
<string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"വൈഫൈ പങ്കിടുക"</string>
<string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"“<xliff:g id="SSID">%1$s</xliff:g>” എന്നതിലേക്ക് കണക്റ്റ് ചെയ്യാൻ ഈ QR കോഡ് സ്കാൻ ചെയ്യുകയും പാസ്വേഡ് പങ്കിടുകയും ചെയ്യുക"</string>
<string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"“<xliff:g id="SSID">%1$s</xliff:g>\" എന്നതിലേക്ക് കണക്റ്റ് ചെയ്യാൻ ഈ QR കോഡ് സ്കാൻ ചെയ്യുക"</string>
<string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"QR കോഡ് റീഡ് ചെയ്യാനായില്ല. കോഡ് വീണ്ടും മധ്യത്തിലാക്കി വീണ്ടും ശ്രമിക്കുക"</string>
<string name="wifi_dpp_failure_authentication_or_configuration" msgid="9142051662156233679">"വീണ്ടും ശ്രമിക്കുക. പ്രശ്നം തുടരുകയാണെങ്കിൽ, ഉപകരണ നിർമ്മാതാവിനെ ബന്ധപ്പെടുക"</string>
<string name="wifi_dpp_failure_not_compatible" msgid="4320027179973678283">"എന്തോ കുഴപ്പമുണ്ടായി"</string>
- <string name="wifi_dpp_failure_timeout" msgid="5060065168142109420">"ഉപകരണം പ്ലഗിൻ ചെയ്തെന്നും, ചാർജ്ജ് ചെയ്തെന്നും, ഓണാണെന്നും ഉറപ്പാക്കുക"</string>
+ <string name="wifi_dpp_failure_timeout" msgid="5060065168142109420">"ഉപകരണം പ്ലഗിൻ ചെയ്തിട്ടുണ്ടെന്നും ചാർജ്ജ് ചെയ്തിട്ടുണ്ടെന്നും ഓണാണെന്നും ഉറപ്പാക്കുക"</string>
<string name="wifi_dpp_failure_generic" msgid="7840142544736640189">"ഉപകരണം പ്ലഗിൻ ചെയ്തെന്നും, ചാർജ്ജ് ചെയ്തെന്നും, ഓണാണെന്നും ഉറപ്പാക്കുക. പ്രശ്നം തുടരുകയാണെങ്കിൽ, ഉപകരണ നിർമ്മാതാവിനെ ബന്ധപ്പെടുക"</string>
<string name="wifi_dpp_failure_not_supported" msgid="111779621766171626">"ഈ ഉപകരണം \"<xliff:g id="SSID">%1$s</xliff:g>\" ചേർക്കുന്നതിനെ പിന്തുണയ്ക്കുന്നില്ല"</string>
<string name="wifi_dpp_check_connection_try_again" msgid="7144663015219170999">"കണക്ഷൻ പരിശോധിച്ച് വീണ്ടും ശ്രമിക്കുക"</string>
@@ -973,7 +972,7 @@
<string name="wifi_multiple_cert_added" msgid="7986200585749147204">"(ഒന്നിലധികം സർട്ടിഫിക്കറ്റുകൾ ചേർത്തു)"</string>
<string name="wifi_use_system_certs" msgid="4794489370929885022">"സിസ്റ്റം സർട്ടിഫിക്കറ്റുകൾ ഉപയോഗിക്കുക"</string>
<string name="wifi_do_not_provide_eap_user_cert" msgid="4044301449482425250">"നൽകരുത്"</string>
- <string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"മൂല്യനിർണ്ണയം ചെയ്യരുത്"</string>
+ <string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"സാധൂകരിക്കരുത്"</string>
<string name="wifi_do_not_validate_eap_server_warning" msgid="3895397996759837323">"സർട്ടിഫിക്കറ്റൊന്നും വ്യക്തമാക്കിയിട്ടില്ല. നിങ്ങളുടെ കണക്ഷൻ സ്വകാര്യമായിരിക്കുകയില്ല."</string>
<string name="wifi_ssid_too_long" msgid="34911971389775920">"നെറ്റ്വർക്കിന്റെ പേര് ദൈർഘ്യമേറിയതാണ്."</string>
<string name="wifi_no_domain_warning" msgid="735859919311067606">"ഒരു ഡൊമെയ്ൻ വ്യക്തമാക്കിയിരിക്കണം."</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"വൈഫൈ"</item>
+ <item msgid="2271962426654621656">"മൊബൈൽ"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"വൈഫൈ ലഭ്യമല്ലെങ്കിൽ, മൊബൈൽ നെറ്റ്വർക്ക് ഉപയോഗിക്കുക"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"മൊബൈൽ നെറ്റ്വർക്ക് ലഭ്യമല്ലെങ്കിൽ, വൈഫൈ ഉപയോഗിക്കുക"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"വൈഫൈ മുഖേനയുള്ള കോൾ. വൈഫൈ നഷ്ടപ്പെട്ടാൽ, കോൾ അവസാനിക്കും."</string>
@@ -1166,7 +1168,7 @@
<string name="accessibility_category_personal" msgid="1423427301759058762">"വ്യക്തിഗത പ്രൊഫൈൽ അക്കൗണ്ടുകൾ"</string>
<string name="accessibility_work_account_title" msgid="3195468574776888011">"ഔദ്യോഗിക അക്കൗണ്ട് - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
<string name="accessibility_personal_account_title" msgid="7251761883688839354">"വ്യക്തിഗത അക്കൗണ്ട് - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
- <string name="search_settings" msgid="5809250790214921377">"തിരയൽ"</string>
+ <string name="search_settings" msgid="5809250790214921377">"Search"</string>
<string name="display_settings" msgid="1045535829232307190">"ഡിസ്പ്ലേ"</string>
<string name="accelerometer_title" msgid="2427487734964971453">"സ്ക്രീൻ സ്വയമേവ തിരിക്കുക"</string>
<string name="color_mode_title" msgid="8164858320869449142">"നിറങ്ങൾ"</string>
@@ -1679,11 +1681,11 @@
<string name="location_access_summary" msgid="6919495149026354355">"നിങ്ങളുടെ അനുമതി ആവശ്യപ്പെട്ട അപ്ലിക്കേഷനുകളെ ലൊക്കേഷൻ വിവരങ്ങൾ ഉപയോഗിക്കാൻ അനുവദിക്കുക"</string>
<string name="location_sources_heading" msgid="8526658357120282741">"ലൊക്കേഷൻ ഉറവിടങ്ങൾ"</string>
<string name="about_settings" product="tablet" msgid="4869626690708456341">"ടാബ്ലെറ്റിന് ഒരാമുഖം"</string>
- <string name="about_settings" product="default" msgid="6019547763377294261">"ഫോണിന് ഒരാമുഖം"</string>
+ <string name="about_settings" product="default" msgid="6019547763377294261">"ഫോണിനെക്കുറിച്ച്"</string>
<string name="about_settings" product="device" msgid="1770438316234693655">"ഉപകരണ വിവരം"</string>
<string name="about_settings" product="emulator" msgid="4497482494770487014">"എമുലേറ്റഡ് ഉപകരണത്തെ കുറിച്ച്"</string>
<string name="about_settings_summary" msgid="4506081667462281647">"നിയമ വിവരം, നില, സോഫ്റ്റ്വെയർ പതിപ്പ് എന്നിവ കാണുക"</string>
- <string name="legal_information" msgid="2374267257615182139">"നിയമപരമായ വിവരം"</string>
+ <string name="legal_information" msgid="2374267257615182139">"നിയമപരമായ വിവരങ്ങൾ"</string>
<string name="contributors_title" msgid="6800028420806884340">"സംഭാവകർ"</string>
<string name="manual" msgid="5431859421432581357">"മാനുവൽ"</string>
<string name="regulatory_labels" msgid="380968489247381025">"റെഗുലേറ്ററി ലേബലുകൾ"</string>
@@ -1766,7 +1768,7 @@
<string name="lockpattern_settings_enable_visible_pattern_title_profile" msgid="5338893138982642228">"പ്രൊഫൈൽ പാറ്റേൺ ദൃശ്യമാക്കുക"</string>
<string name="lockpattern_settings_enable_tactile_feedback_title" msgid="3203621862806531947">"ടാപ്പുചെയ്യുമ്പോൾ വൈബ്രേറ്റുചെയ്യൂ"</string>
<string name="lockpattern_settings_enable_power_button_instantly_locks" msgid="5890335732200257777">"പവർബട്ടൺ ഉടൻ ലോക്കാകുന്നു"</string>
- <string name="lockpattern_settings_power_button_instantly_locks_summary" msgid="1279989004145567840">"<xliff:g id="TRUST_AGENT_NAME">%1$s</xliff:g> അൺലോക്കുചെയ്തിരിക്കുമ്പോൾ ഒഴികെ"</string>
+ <string name="lockpattern_settings_power_button_instantly_locks_summary" msgid="1279989004145567840">"<xliff:g id="TRUST_AGENT_NAME">%1$s</xliff:g> അൺലോക്ക് ചെയ്തിരിക്കുമ്പോൾ ഒഴികെ"</string>
<string name="lockpattern_settings_choose_lock_pattern" msgid="9042142745571386381">"അൺലോക്ക് പാറ്റേൺ സജ്ജീകരിക്കുക"</string>
<string name="lockpattern_settings_change_lock_pattern" msgid="1456643060737114885">"അൺലോക്ക് പാറ്റേൺ മാറ്റുക"</string>
<string name="lockpattern_settings_help_how_to_record" msgid="6037403647312543908">"ഒരു അൺലോക്ക് പാറ്റേൺ വരയ്ക്കേണ്ടതെങ്ങനെ"</string>
@@ -1888,7 +1890,7 @@
<string name="app_disable_dlg_positive" msgid="5508828271100168073">"ആപ്പ് പ്രവർത്തനരഹിതമാക്കുക"</string>
<string name="app_disable_dlg_text" msgid="9221864774943530281">"നിങ്ങൾ ഈ ആപ്പ് പ്രവർത്തനരഹിതമാക്കിയാൽ, Android-ഉം മറ്റ് ആപ്പുകളും ഇനി ഉദ്ദേശിച്ചത് പോലെ പ്രവർത്തിച്ചേക്കില്ല. ശ്രദ്ധിക്കുക, നിങ്ങളുടെ ഉപകരണത്തിൽ മുമ്പേ ഇൻസ്റ്റാൾ ചെയ്തതായതിനാൽ ഈ ആപ്പ് നിങ്ങൾക്ക് ഇല്ലാതാക്കാനാവില്ല. പ്രവർത്തനരഹിതമാക്കുന്നത് വഴി, ഈ ആപ്പ് ഓഫാക്കി നിങ്ങൾക്കിത് ഉപകരണത്തിൽ മറച്ചു വയ്ക്കാം."</string>
<string name="app_disable_notifications_dlg_title" msgid="699530661413553928">"അറിയിപ്പുകൾ ഓഫാക്കണോ?"</string>
- <string name="app_install_details_group_title" msgid="2909597319422976921">"സ്റ്റോർ"</string>
+ <string name="app_install_details_group_title" msgid="2909597319422976921">"Store"</string>
<string name="app_install_details_title" msgid="6954953384372934881">"ആപ്പ് വിശദാംശങ്ങൾ"</string>
<string name="app_install_details_summary" msgid="6612222941121363940">"<xliff:g id="APP_STORE">%1$s</xliff:g> എന്നതിൽ നിന്ന് ആപ്പ് ഇൻസ്റ്റാൾ ചെയ്തു"</string>
<string name="instant_app_details_summary" msgid="6384264315914966114">"<xliff:g id="APP_STORE">%1$s</xliff:g> സംബന്ധിച്ച കൂടുതൽ വിവരങ്ങൾ"</string>
@@ -1983,7 +1985,7 @@
<string name="keyboard_layout_dialog_switch_hint" msgid="138516114253502182">"മാറാൻ, Control-Spacebar അമർത്തുക"</string>
<string name="keyboard_layout_default_label" msgid="8368579311667189793">"സ്ഥിരമായത്"</string>
<string name="keyboard_layout_picker_title" msgid="6958831599253031987">"കീബോർഡ് ലേഔട്ടുകൾ"</string>
- <string name="user_dict_settings_title" msgid="1415462066249818756">"വ്യക്തിഗത നിഘണ്ടു"</string>
+ <string name="user_dict_settings_title" msgid="1415462066249818756">"വ്യക്തിപരമായ നിഘണ്ടു"</string>
<string name="user_dict_settings_for_work_title" msgid="3995828731001225748">"ജോലിക്കായുള്ള വ്യക്തിഗത നിഘണ്ഡു"</string>
<string name="user_dict_settings_summary" msgid="3131259534814181196"></string>
<string name="user_dict_settings_add_menu_title" msgid="1553743292556229909">"ചേര്ക്കുക"</string>
@@ -2034,8 +2036,8 @@
<string name="usage_time_label" msgid="5615725415876461039">"ഉപയോഗ സമയം"</string>
<string name="accessibility_settings" msgid="9140621093888234485">"ഉപയോഗസഹായി"</string>
<string name="accessibility_settings_title" msgid="1687226556576913576">"ഉപയോഗസഹായി ക്രമീകരണങ്ങൾ"</string>
- <string name="accessibility_settings_summary" msgid="5742379519336396561">"സ്ക്രീൻ റീഡറുകൾ, ഡിസ്പ്ലേ, ഇന്ററാക്ഷൻ നിയന്ത്രണങ്ങൾ"</string>
- <string name="vision_settings_title" msgid="7315352351051423944">"വീക്ഷണ ക്രമീകരണം"</string>
+ <string name="accessibility_settings_summary" msgid="5742379519336396561">"സ്ക്രീൻ റീഡറുകൾ, ഡിസ്പ്ലേ, ഇടപെടൽ നിയന്ത്രണങ്ങൾ"</string>
+ <string name="vision_settings_title" msgid="7315352351051423944">"കാഴ്ചാ ക്രമീകരണം"</string>
<string name="vision_settings_description" msgid="3476589459009287332">"ആവശ്യങ്ങൾക്ക് അനുസരിച്ച് നിങ്ങൾക്ക് ഈ ഉപകരണം ഇഷ്ടാനുസൃതമാക്കാം. ഈ ഉപയോഗസഹായി ഫീച്ചറുകൾ പിന്നീട് ക്രമീകരണത്തിൽ മാറ്റാവുന്നതാണ്."</string>
<string name="vision_settings_suggestion_title" msgid="7268661419110951128">"ഫോണ്ട് വലുപ്പം മാറ്റുക"</string>
<string name="screen_reader_category_title" msgid="6300714148519645544">"സ്ക്രീൻ റീഡറുകൾ"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"അറിയിപ്പ് വൈബ്രേഷൻ"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"റിംഗ് വൈബ്രേഷൻ"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"ടച്ച് വൈബ്രേഷൻ"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"സേവനം ഉപയോഗിക്കുക"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"നിറം ക്രമീകരിക്കൽ ഉപയോഗിക്കുക"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"അടിക്കുറിപ്പുകൾ ഉപയോഗിക്കുക"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"സേവനം ഉപയോഗിക്കുക"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"നിറം ശരിയാക്കൽ ഉപയോഗിക്കുക"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"അടിക്കുറിപ്പുകൾ ഉപയോഗിക്കുക"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"തുടരുക"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"ശ്രവണ സഹായികൾ"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"ശ്രവണ സഹായികളൊന്നും കണക്റ്റ് ചെയ്തിട്ടില്ല"</string>
@@ -2209,7 +2211,7 @@
<string name="print_feature_state_off" msgid="208580346723223688">"ഓഫ്"</string>
<string name="print_menu_item_add_service" msgid="6803000110578493782">"സേവനം ചേർക്കുക"</string>
<string name="print_menu_item_add_printer" msgid="8529196211179574921">"പ്രിന്റർ ചേർക്കുക"</string>
- <string name="print_menu_item_search" msgid="1165316329772287360">"തിരയൽ"</string>
+ <string name="print_menu_item_search" msgid="1165316329772287360">"Search"</string>
<string name="print_searching_for_printers" msgid="6538687129687642542">"പ്രിന്ററുകൾക്കായി തിരയുന്നു"</string>
<string name="print_service_disabled" msgid="6376344992705893436">"സേവനം പ്രവർത്തനരഹിതമാക്കി"</string>
<string name="print_print_jobs" msgid="7357841034181762157">"പ്രിന്റ് ജോലികൾ"</string>
@@ -2307,7 +2309,7 @@
<item quantity="other">%1$d ആപ്പുകളെ നിയന്ത്രിക്കണോ?</item>
<item quantity="one">ആപ്പിനെ നിയന്ത്രിക്കണോ?</item>
</plurals>
- <string name="battery_tip_restrict_app_dialog_message" msgid="6905822297507947381">"ബാറ്ററി ലാഭിക്കാൻ, പശ്ചാത്തലത്തിൽ <xliff:g id="APP">%1$s</xliff:g>-ന്റെ ബാറ്ററി ഉപഭോഗം നിർത്തുക. ഈ ആപ്പ് ശരിയായ രീതിയിൽ പ്രവർത്തിക്കാതിരിക്കുകയും അറിയിപ്പുകൾ വൈകുകയും ചെയ്തേക്കാം."</string>
+ <string name="battery_tip_restrict_app_dialog_message" msgid="6905822297507947381">"ബാറ്ററി ലാഭിക്കാൻ, <xliff:g id="APP">%1$s</xliff:g> എന്നതിനെ പശ്ചാത്തലത്തിൽ ബാറ്ററി ഉപഭോഗിക്കുന്നതിൽ നിന്നും തടയുക. ഈ ആപ്പ് ശരിയായ രീതിയിൽ പ്രവർത്തിക്കാതിരിക്കുകയും അറിയിപ്പുകൾ വൈകുകയും ചെയ്തേക്കാം."</string>
<string name="battery_tip_restrict_apps_less_than_5_dialog_message" msgid="4225881888543582456">"ബാറ്ററി ലാഭിക്കാൻ, പശ്ചാത്തലത്തിൽ ഈ ആപ്പുകളുടെ ബാറ്ററി ഉപഭോഗം നിർത്തുക. നിയന്ത്രിത ആപ്പുകൾ ശരിയായ രീതിയിൽ പ്രവർത്തിക്കാതിരിക്കുകയും അറിയിപ്പുകൾ വൈകുകയും ചെയ്തേക്കാം.\n\nആപ്പുകൾ:"</string>
<string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"ബാറ്ററി ലാഭിക്കാൻ, പശ്ചാത്തലത്തിൽ ഈ ആപ്പുകളുടെ ബാറ്ററി ഉപഭോഗം നിർത്തുക. നിയന്ത്രിത ആപ്പുകൾ ശരിയായ രീതിയിൽ പ്രവർത്തിക്കാതിരിക്കുകയും അറിയിപ്പുകൾ വൈകുകയും ചെയ്തേക്കാം.\n\nആപ്പുകൾ:\n<xliff:g id="APP_LIST">%1$s</xliff:g>."</string>
<string name="battery_tip_restrict_app_dialog_ok" msgid="2573410775701913487">"നിയന്ത്രിക്കുക"</string>
@@ -2453,13 +2455,13 @@
<string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"<xliff:g id="PERCENT">%1$s</xliff:g>-ത്തിൽ ഇത് ഓണാകും"</string>
<string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"ഷെഡ്യൂള് സജ്ജീകരിക്കൂ"</string>
<string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"മുഴുവൻ ചാർജായാൽ ഓഫാക്കുക"</string>
- <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"നിങ്ങളുടെ ഫോൺ <xliff:g id="PERCENT">%1$s</xliff:g> എത്തുമ്പോൾ ബാറ്ററി ലാഭിക്കൽ ഓഫാവും"</string>
+ <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"നിങ്ങളുടെ ഫോൺ <xliff:g id="PERCENT">%1$s</xliff:g>-ത്തിൽ എത്തുമ്പോൾ ബാറ്ററി ലാഭിക്കൽ ഓഫാകും"</string>
<string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"നിങ്ങളുടെ ടാബ്ലെറ്റ് <xliff:g id="PERCENT">%1$s</xliff:g> എത്തുമ്പോൾ ബാറ്ററി ലാഭിക്കൽ ഓഫാവും"</string>
<string name="battery_saver_sticky_description_new" product="device" msgid="5056520668081504111">"നിങ്ങളുടെ ഉപകരണം <xliff:g id="PERCENT">%1$s</xliff:g> എത്തുമ്പോൾ ബാറ്ററി ലാഭിക്കൽ ഓഫാവും"</string>
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"ഓണാക്കുക"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"ബാറ്ററി ലാഭിക്കൽ ഉപയോഗിക്കുക"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"ബാറ്ററി ലാഭിക്കൽ ഉപയോഗിക്കുക"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"ഓട്ടോമാറ്റിക്കായി ഓണാക്കുക"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"ഒരിക്കലും"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"<xliff:g id="PERCENT">%1$s</xliff:g> ബാറ്ററിയിൽ"</string>
@@ -2489,7 +2491,7 @@
<string name="menu_duration_6h" msgid="6169009210638008417">"6 മണിക്കൂർ"</string>
<string name="menu_duration_12h" msgid="1435242738163843797">"12 മണിക്കൂർ"</string>
<string name="menu_duration_1d" msgid="6476370834372352174">"ഒരു ദിവസം"</string>
- <string name="menu_show_system" msgid="6315865548558708248">"സിസ്റ്റം ദൃശ്യമാക്കുക"</string>
+ <string name="menu_show_system" msgid="6315865548558708248">"സിസ്റ്റം കാണിക്കുക"</string>
<string name="menu_hide_system" msgid="8457027118873733782">"സിസ്റ്റം മറയ്ക്കുക"</string>
<string name="menu_show_percentage" msgid="6983272380729890884">"ശതമാനങ്ങൾ കാണിക്കുക"</string>
<string name="menu_use_uss" msgid="3765054705208926803">"Uss ഉപയോഗിക്കുക"</string>
@@ -2527,7 +2529,7 @@
<string name="credentials_install_summary" product="default" msgid="4943897416156671633">"SD കാർഡിൽ നിന്ന് സർട്ടിഫിക്കറ്റുകൾ ഇൻസ്റ്റാൾ ചെയ്യുക"</string>
<string name="credentials_reset" msgid="355080737664731678">"ക്രെഡൻഷ്യലുകൾ മായ്ക്കുക"</string>
<string name="credentials_reset_summary" msgid="7622528359699428555">"എല്ലാം നീക്കംചെയ്യുക"</string>
- <string name="trusted_credentials" msgid="6989242522455395200">"വിശ്വസ്ത ക്രെഡൻഷ്യൽ"</string>
+ <string name="trusted_credentials" msgid="6989242522455395200">"വിശ്വസ്ത ക്രെഡൻഷ്യലുകൾ"</string>
<string name="trusted_credentials_summary" msgid="7411781319056251582">"വിശ്വസ്ത CA സർട്ടിഫിക്കറ്റുകൾ പ്രദർശിപ്പിക്കുക"</string>
<string name="user_credentials" msgid="8365731467650306757">"ഉപയോക്തൃ ക്രെഡന്ഷ്യലുകൾ"</string>
<string name="user_credentials_summary" msgid="7350223899317423252">"സംഭരിച്ച ക്രെഡന്ഷ്യലുകൾ കാണുക, പരിഷ്ക്കരിക്കുക"</string>
@@ -2564,7 +2566,7 @@
<string name="fullbackup_data_summary" msgid="406274198094268556">"ഉപകരണ വിവരവും (വൈഫൈ പാസ്വേഡുകളും കോൾ ചരിത്രവും പോലുള്ളവ) ആപ്പ് വിവരവും (ക്രമീകരണവും ആപ്പുകൾ സംഭരിച്ച ഫയലുകളും പോലുള്ളവ) വിദൂരമായി സ്വയമേവ ബാക്കപ്പെടുക്കുന്നു.\n\nനിങ്ങൾ സ്വയമേയുള്ള ബാക്കപ്പ് ഓണാക്കുമ്പോൾ, ഉപകരണ, ആപ്പ് വിവരം ഇടയ്ക്കിടെ വിദൂരമായി സംരക്ഷിക്കും. ആപ്പ് വിവരം എന്നത് കോൺടാക്റ്റുകൾ, സന്ദേശങ്ങൾ, ഫോട്ടോകൾ എന്നിവ പോലുള്ള രഹസ്യസ്വഭാവമുള്ളവ ഉൾപ്പെടെ ആപ്പ് സംരക്ഷിച്ചിട്ടുള്ള ഏതൊരു വിവരവും (ഡെവലപ്പർ ക്രമീകരണം അടിസ്ഥാനമാക്കി) ആകാം."</string>
<string name="device_admin_settings_title" msgid="2074319456047334589">"ഉപകരണ അഡ്മിൻ ക്രമീകരണം"</string>
<string name="active_device_admin_msg" msgid="6929247869516924549">"ഉപകരണ അഡ്മിൻ ആപ്പ്"</string>
- <string name="remove_device_admin" msgid="4413438593788336400">"ഈ ഉപകരണ അഡ്മിൻ ആപ്പ് നിർജീവമാക്കുക"</string>
+ <string name="remove_device_admin" msgid="4413438593788336400">"ഈ ഉപകരണ അഡ്മിൻ ആപ്പ് നിഷ്ക്രിയമാക്കുക"</string>
<string name="uninstall_device_admin" msgid="9017499299961719830">"ആപ്പ് അൺഇൻസ്റ്റാളുചെയ്യുക"</string>
<string name="remove_and_uninstall_device_admin" msgid="5607703579731496253">"നിർജീവമാക്കി അൺഇൻസ്റ്റാൾ ചെയ്യുക"</string>
<string name="select_device_admin_msg" msgid="4173769638399075387">"ഉപകരണ അഡ്മിൻ ആപ്പുകൾ"</string>
@@ -2617,7 +2619,7 @@
<string name="sync_one_time_sync" msgid="6005174168405784256">"ഇപ്പോൾ സമന്വയിപ്പിക്കുന്നതിന് ടാപ്പുചെയ്യുക<xliff:g id="LAST_SYNC_TIME">
%1$s</xliff:g>"</string>
<string name="sync_gmail" msgid="4457967084840001296">"Gmail"</string>
- <string name="sync_calendar" msgid="6573708019827519372">"കലണ്ടർ"</string>
+ <string name="sync_calendar" msgid="6573708019827519372">"Calendar"</string>
<string name="sync_contacts" msgid="5687434785723746534">"കോണ്ടാക്റ്റ്"</string>
<string name="sync_plug" msgid="6703804441408427257"><font fgcolor="#ffffffff">"Google സമന്വയത്തിലേക്ക് സ്വാഗതം!"</font>" \nനിങ്ങൾ എവിടെയായിരുന്നാലും കോൺടാക്റ്റുകളും അപ്പോയ്ന്റ്മെന്റുകളും അതിലധികം കാര്യങ്ങളും ആക്സസ്സുചെയ്യാൻ അനുവദിക്കുന്നതിനായി ഡാറ്റ സമന്വയിപ്പിക്കാനുള്ള Google-ന്റെ ഒരു സമീപനം."</string>
<string name="header_application_sync_settings" msgid="4581847153669774489">"അപ്ലിക്കേഷൻ സമന്വയ ക്രമീകരണങ്ങൾ"</string>
@@ -2668,7 +2670,7 @@
<string name="data_usage_menu_sim_cards" msgid="8508154611676507088">"സിം കാർഡുകൾ"</string>
<string name="data_usage_cellular_data_summary" msgid="9162777397135709280">"പരിധിയിൽ തൽക്കാലം നിർത്തി"</string>
<string name="account_settings_menu_auto_sync" msgid="2673669556006027506">"ഡാറ്റ സ്വയമേ സമന്വയിപ്പിക്കൂ"</string>
- <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"വ്യക്തിഗത ഡാറ്റ സ്വയമേവ സമന്വയിപ്പിക്കുക"</string>
+ <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"വ്യക്തിപരമായ ഡാറ്റ സ്വയമേവ സമന്വയിപ്പിക്കുക"</string>
<string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"ഔദ്യോഗിക ഡാറ്റ സ്വയമേവ സമന്വയിപ്പിക്കുക"</string>
<string name="data_usage_change_cycle" msgid="447761920472170031">"സൈക്കിൾ മാറ്റുക..."</string>
<string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"ഡാറ്റ ഉപയോഗ സൈക്കിൾ പുനഃസജ്ജീകരിക്കുന്നതിനുള്ള മാസത്തിലെ ദിവസം:"</string>
@@ -2732,7 +2734,7 @@
<string name="data_usage_metered_wifi" msgid="2955256408132426720">"മീറ്റർ-മാപക വൈഫൈ നെറ്റ്വർക്ക്"</string>
<string name="data_usage_metered_wifi_disabled" msgid="5771083253782103415">"മീറ്റർ-മാപക നെറ്റ്വർക്കുകൾ തിരഞ്ഞെടുക്കാൻ വൈഫൈ ഓണാക്കുക."</string>
<string name="data_usage_metered_auto" msgid="7924116401382629319">"സ്വയമേവ"</string>
- <string name="data_usage_metered_yes" msgid="7333744880035386073">"മീറ്റർചെയ്ത"</string>
+ <string name="data_usage_metered_yes" msgid="7333744880035386073">"മീറ്റർ ചെയ്തത്"</string>
<string name="data_usage_metered_no" msgid="1961524615778610008">"മീറ്റർമാപകം"</string>
<string name="data_usage_disclaimer" msgid="4683321532922590425">"കാരിയർ ഡാറ്റ കണക്കാക്കുന്നത് ഉപകരണത്തിൽ നിന്നും വ്യത്യാസപ്പെട്ടിരിക്കാം."</string>
<string name="cryptkeeper_emergency_call" msgid="4625420047524693116">"അടിയന്തര കോൾ"</string>
@@ -2934,7 +2936,7 @@
<string name="restriction_menu_change_pin" msgid="592512748243421101">"പിൻ മാറ്റുക"</string>
<string name="app_notifications_switch_label" msgid="670683308275498821">"അറിയിപ്പുകൾ ദൃശ്യമാക്കുക"</string>
<string name="help_label" msgid="1296484776243905646">"സഹായവും ഫീഡ്ബാക്കും"</string>
- <string name="support_summary" msgid="3278943815956130740">"സഹായ ലേഖനങ്ങൾ, ഫോൺ, ചാറ്റ് എന്നിവ ആരംഭിക്കുക"</string>
+ <string name="support_summary" msgid="3278943815956130740">"സഹായ ലേഖനങ്ങൾ, ഫോൺ, ചാറ്റ്, ആരംഭിക്കൽ"</string>
<string name="user_account_title" msgid="2108666882630552859">"ഉള്ളടക്കത്തിനുള്ള അക്കൗണ്ട്"</string>
<string name="user_picture_title" msgid="6664602422948159123">"ഫോട്ടോ ഐഡി"</string>
<string name="extreme_threats_title" msgid="1405820547540456436">"അതീവ ഗുരുതരമായ ഭീഷണികൾ"</string>
@@ -3092,7 +3094,7 @@
<string name="keywords_lockscreen" msgid="4936846554280830394">"അൺലോക്കുചെയ്യാൻ സ്ലൈഡുചെയ്യുക, പാസ്വേഡ്, പാറ്റേൺ, പിൻ"</string>
<string name="keywords_profile_challenge" msgid="8653718001253979611">"ഔദ്യോഗിക വെല്ലുവിളി, ഔദ്യോഗികം, പ്രൊഫൈൽ"</string>
<string name="keywords_unification" msgid="2020759909366983593">"ഔദ്യോഗിക പ്രൊഫൈൽ, മാനേജുചെയ്യപ്പെടുന്ന പ്രൊഫൈൽ, ഏകീകരിക്കുക, ഏകീകരിക്കൽ, ഔദ്യോഗികം, പ്രൊഫൈൽ"</string>
- <string name="keywords_gesture" msgid="5031323247529869644">"ജെസ്റ്ററുകൾ"</string>
+ <string name="keywords_gesture" msgid="5031323247529869644">"ജെസ്ചറുകൾ"</string>
<string name="keywords_payment_settings" msgid="4745023716567666052">"പണമടയ്ക്കുക. ടാപ്പുചെയ്യുക, പേയ്മെന്റുകൾ"</string>
<string name="keywords_backup" msgid="7433356270034921627">"ബാക്കപ്പ് ചെയ്യൂ"</string>
<string name="keywords_assist_gesture_launch" msgid="2711433664837843513">"വിരൽചലനം"</string>
@@ -3103,7 +3105,7 @@
<string name="keywords_android_version" msgid="4842749998088987740">"android സുരക്ഷാ പാച്ച് നില, ബേസ്ബാൻഡ് പതിപ്പ്, കെർണൽ പതിപ്പ്"</string>
<string name="keywords_dark_ui_mode" msgid="1027966176887770318">"തീം, പ്രകാശം, ഇരുണ്ട മോഡ്"</string>
<string name="keywords_financial_apps_sms_access" msgid="3236014691838121857">"സാമ്പത്തിക ആപ്പ്, SMS, അനുമതി"</string>
- <string name="keywords_systemui_theme" msgid="9150908170417305866">"ഇരുണ്ട തീം"</string>
+ <string name="keywords_systemui_theme" msgid="9150908170417305866">"ഡാർക്ക് തീം"</string>
<string name="keywords_device_feedback" msgid="6948977907405738490">"ബഗ്"</string>
<string name="keywords_ambient_display_screen" msgid="5873935693887583428">"പാതിമയക്ക ഡിസ്പ്ലേ, ലോക്ക് സ്ക്രീൻ ഡിസ്പ്ലേ"</string>
<string name="keywords_lock_screen_notif" msgid="4914337222856805463">"ലോക്ക് സ്ക്രീൻ അറിയിപ്പ്, അറിയിപ്പുകൾ"</string>
@@ -3215,7 +3217,7 @@
<string name="zen_mode_block_effect_peek" msgid="6075662813575910221">"സ്ക്രീനിൽ അറിയിപ്പുകൾ പോപ്പ് ചെയ്യരുത്"</string>
<string name="zen_mode_block_effect_status" msgid="6516614225115681068">"സ്ക്രീനിന്റെ മുകളിലുള്ള സ്റ്റാറ്റസ് ബാർ ഐക്കണുകൾ അദൃശ്യമാക്കുക"</string>
<string name="zen_mode_block_effect_badge" msgid="3891743027347075136">"ആപ്പ് ഐക്കണുകളിൽ അറിയിപ്പ് ഡോട്ടുകൾ അദൃശ്യമാക്കുക"</string>
- <string name="zen_mode_block_effect_ambient" msgid="6382013125863616197">"അറിയിപ്പുകൾക്കായി സജീവമാക്കരുത്"</string>
+ <string name="zen_mode_block_effect_ambient" msgid="6382013125863616197">"അറിയിപ്പുകൾ വരുമ്പോൾ സജീവമാക്കരുത്"</string>
<string name="zen_mode_block_effect_list" msgid="6081548478844912181">"അറിയിപ്പ് ലിസ്റ്റിൽ നിന്നും അദൃശ്യമാക്കുക"</string>
<string name="zen_mode_block_effect_summary_none" msgid="7166175186759564510">"ഒരിക്കലും വേണ്ട"</string>
<string name="zen_mode_block_effect_summary_screen_off" msgid="2985086455557755722">"സ്ക്രീൻ ഓഫായിരിക്കുമ്പോൾ"</string>
@@ -3280,7 +3282,7 @@
<string name="zen_onboarding_dnd_visual_disturbances_header" msgid="7584229011611927613">"ശല്ല്യപ്പെടുത്തരുത് അറിയിപ്പ് ക്രമീകരണം മാറ്റണോ?"</string>
<string name="sound_work_settings" msgid="4140215240360927923">"ഔദ്യോഗിക പ്രൊഫൈൽ ശബ്ദങ്ങൾ"</string>
<string name="work_use_personal_sounds_title" msgid="531727195073003599">"സ്വകാര്യ പ്രൊഫൈൽ ശബ്ദങ്ങൾ ഉപയോഗിക്കുക"</string>
- <string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"ഔദ്യോഗിക പ്രൊഫൈലുകൾക്കും വ്യക്തിഗത പ്രൊഫൈലുകൾക്കുമുള്ള ശബ്ദങ്ങൾ ഒന്നുതന്നെ ആയിരിക്കും"</string>
+ <string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"ഔദ്യോഗിക പ്രൊഫൈലുകൾക്കും സ്വകാര്യ പ്രൊഫൈലുകൾക്കുമുള്ള ശബ്ദങ്ങൾ ഒന്നുതന്നെ ആയിരിക്കും"</string>
<string name="work_ringtone_title" msgid="5499360583947410224">"ഔദ്യോഗിക ഫോൺ റിംഗ്ടോൺ"</string>
<string name="work_notification_ringtone_title" msgid="8059159087214025757">"ഡിഫോൾട്ട് ഔദ്യോഗിക അറിയിപ്പ് ശബ്ദം"</string>
<string name="work_alarm_ringtone_title" msgid="5328487181385375130">"ഡിഫോൾട്ട് ഔദ്യോഗിക അലാറം ശബ്ദം"</string>
@@ -3294,7 +3296,7 @@
<string name="other_sound_category_preference_title" msgid="2045757472469840859">"മറ്റ് ശബ്ദങ്ങളും വൈബ്രേഷനുകളും"</string>
<string name="configure_notification_settings" msgid="291914315140851270">"അറിയിപ്പുകൾ"</string>
<string name="recent_notifications" msgid="8125865995065032049">"അടുത്തിടെ അയച്ചവ"</string>
- <string name="recent_notifications_see_all_title" msgid="4089007770442871469">"അവസാന 7 ദിവസങ്ങളിൽ നിന്ന് എല്ലാം കാണുക"</string>
+ <string name="recent_notifications_see_all_title" msgid="4089007770442871469">"കഴിഞ്ഞ 7 ദിവസത്തെ എല്ലാം കാണുക"</string>
<string name="advanced_section_header" msgid="984680389373090015">"വിപുലമായത്"</string>
<string name="profile_section_header" msgid="5471479005472037417">"ഔദ്യോഗിക അറിയിപ്പുകൾ"</string>
<string name="asst_capability_prioritizer_title" msgid="3488284760645922160">"സ്വയമേവയുള്ള അറിയിപ്പ് മുൻഗണന നൽകൽ"</string>
@@ -3319,7 +3321,7 @@
<string name="notification_pulse_title" msgid="4861418327614907116">"ലൈറ്റ് മിന്നുക"</string>
<string name="lock_screen_notifications_title" msgid="6889072265118747835">"ലോക്ക് സ്ക്രീനിൽ"</string>
<string name="locked_work_profile_notification_title" msgid="8307025804986190658">"ഔദ്യോഗിക പ്രൊഫൈൽ ലോക്ക് ചെയ്തിരിക്കുമ്പോൾ"</string>
- <string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"അറിയിപ്പുകളിലെ ഉള്ളടക്കം പൂർണമായി കാണിക്കുക"</string>
+ <string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"എല്ലാ അറിയിപ്പുകളും ഉള്ളടക്കം സഹിതം കാണിക്കുക"</string>
<string name="lock_screen_notifications_summary_hide" msgid="3668806866535260143">"രഹസ്യാത്മകമായ ഉള്ളടക്കം അദൃശ്യമാക്കുക"</string>
<string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"ഒരു അറിയിപ്പും കാണിക്കരുത്"</string>
<string name="lock_screen_notifications_interstitial_message" msgid="4230189215124387818">"നിങ്ങളുടെ ഉപകരണം ലോക്ക് ചെയ്തിരിക്കുമ്പോൾ, അറിയിപ്പുകൾ എങ്ങനെയാണ് കാണിക്കേണ്ടത്?"</string>
@@ -3466,7 +3468,7 @@
<string name="zen_mode_schedule_rule_days" msgid="220627703673691816">"ദിവസം"</string>
<string name="zen_mode_schedule_rule_days_none" msgid="6011716195119389956">"ഒന്നുമില്ല"</string>
<string name="zen_mode_schedule_rule_days_all" msgid="8814173364016139675">"എല്ലാ ദിവസവും"</string>
- <string name="zen_mode_schedule_alarm_title" msgid="2078194049274875023">"അലാറമിന് അവസാനിക്കുന്ന സമയം അസാധുവാക്കാൻ കഴിയും"</string>
+ <string name="zen_mode_schedule_alarm_title" msgid="2078194049274875023">"അലാറത്തിന് അവസാനിക്കുന്ന സമയം അസാധുവാക്കാൻ കഴിയും"</string>
<string name="zen_mode_schedule_alarm_summary" msgid="5556997989911412070">"ഒരു അലാറം റിംഗ് ചെയ്യുമ്പോൾ, ഷെഡ്യൂൾ ഓഫാകുന്നു"</string>
<string name="zen_mode_custom_behavior_title" msgid="8908861697886331001">"\'ശല്യപ്പെടുത്തരുത്\' എന്ന് അർത്ഥമാക്കുന്ന പെരുമാറ്റം"</string>
<string name="zen_mode_custom_behavior_summary_default" msgid="3509865340195397447">"ഡിഫോൾട്ട് ക്രമീകരണം ഉപയോഗിക്കുക"</string>
@@ -3587,7 +3589,7 @@
<string name="imei_information_summary" msgid="716516316022275083">"IMEI അനുബന്ധ വിവരങ്ങൾ"</string>
<string name="slot_number" msgid="785422579177068698">"(സ്ലോട്ട്<xliff:g id="SLOT_NUM">%1$d</xliff:g>)"</string>
<string name="launch_by_default" msgid="6106985160202769725">"സ്ഥിരമായി തുറക്കുക"</string>
- <string name="app_launch_domain_links_title" msgid="2987289657348349133">"ലിങ്കുകൾ തുറക്കുന്നു"</string>
+ <string name="app_launch_domain_links_title" msgid="2987289657348349133">"ലിങ്കുകൾ തുറക്കൽ"</string>
<string name="app_launch_open_domain_urls_title" msgid="8595126859922391331">"പിന്തുണയ്ക്കുന്ന ലിങ്കുകൾ തുറക്കുക"</string>
<string name="app_launch_open_domain_urls_summary" msgid="6803029846855502366">"ആവശ്യപ്പെടാതെ തുറക്കുക"</string>
<string name="app_launch_supported_domain_urls_title" msgid="503976327533974142">"പിന്തുണയ്ക്കുന്ന ലിങ്കുകൾ"</string>
@@ -3647,7 +3649,7 @@
<string name="app_permissions_summary" msgid="8785798165776061594">"<xliff:g id="APPS">%1$s</xliff:g> ഉപയോഗിക്കുന്ന ആപ്പുകൾ"</string>
<string name="tap_to_wake" msgid="1902991239401652323">"സജീവമാക്കാൻ ടാപ്പുചെയ്യുക"</string>
<string name="tap_to_wake_summary" msgid="8485222120721006793">"ഉപകരണം സജീവമാക്കാൻ സ്ക്രീനിലെവിടെയെങ്കിലും രണ്ടുതവണ ടാപ്പുചെയ്യുക"</string>
- <string name="domain_urls_title" msgid="7939209950373945367">"ലിങ്കുകൾ തുറക്കുന്നു"</string>
+ <string name="domain_urls_title" msgid="7939209950373945367">"ലിങ്കുകൾ തുറക്കൽ"</string>
<string name="domain_urls_summary_none" msgid="5401203416941265109">"പിന്തുണയ്ക്കുന്ന ലിങ്കുകൾ തുറക്കരുത്"</string>
<string name="domain_urls_summary_one" msgid="3893975485064803435">"<xliff:g id="DOMAIN">%s</xliff:g> തുറക്കുക"</string>
<string name="domain_urls_summary_some" msgid="2130534984153210797">"<xliff:g id="DOMAIN">%s</xliff:g> ഡൊമെയ്നും മറ്റ് URL-കളും തുറക്കുക"</string>
@@ -3710,10 +3712,10 @@
<string name="high_power_system" msgid="739584574711292753">"ബാറ്ററി ഓപ്റ്റിമൈസേഷൻ ലഭ്യമല്ല"</string>
<string name="high_power_desc" msgid="333756885680362741">"ബാറ്ററി ഒപ്റ്റിമൈസേഷൻ പ്രയോഗിക്കരുത്. ഇത് ബാറ്ററിയെ വേഗത്തിൽ തീർത്തേക്കാം."</string>
<string name="high_power_prompt_title" msgid="2805745781720454052">"ആപ്പിനെ എല്ലായ്പ്പോഴും പശ്ചാത്തലത്തിൽ റൺ ചെയ്യാൻ അനുവദിക്കണോ?"</string>
- <string name="high_power_prompt_body" msgid="8067395096053552289">"<xliff:g id="APP_NAME">%1$s</xliff:g> ആപ്പിനെ എല്ലായ്പ്പോഴും പശ്ചാത്തലത്തിൽ റൺ ചെയ്യാൻ അനുവദിക്കുന്നത് ബാറ്ററി ലൈഫ് കുറയ്ക്കാനിടയാക്കും. \n\nനിങ്ങൾക്ക്, ക്രമീകരണം > ആപ്പുകളും അറിയിപ്പുകളും എന്നതിൽ നിന്ന് പിന്നീട് ഇത് മാറ്റാവുന്നതാണ്."</string>
+ <string name="high_power_prompt_body" msgid="8067395096053552289">"<xliff:g id="APP_NAME">%1$s</xliff:g> ആപ്പിനെ എല്ലായ്പ്പോഴും പശ്ചാത്തലത്തിൽ റൺ ചെയ്യാൻ അനുവദിക്കുന്നത് ബാറ്ററി ലൈഫ് കുറയ്ക്കാനിടയാക്കും. \n\nനിങ്ങൾക്ക്, ക്രമീകരണം > ആപ്പുകളും അറിയിപ്പുകളും എന്നതിൽ പിന്നീട് ഇത് മാറ്റാവുന്നതാണ്."</string>
<string name="battery_summary" msgid="4345690800899981339">"അവസാനം പൂർണ്ണമായി ചാർജ് ആയതിനുശേഷം <xliff:g id="PERCENTAGE">%1$s</xliff:g> ഉപയോഗം"</string>
<string name="battery_power_management" msgid="2853925857548647969">"ഊർജ്ജ ഉപഭോഗ നിയന്ത്രണം"</string>
- <string name="no_battery_summary" msgid="4105932628367471314">"അവസാനമായി പൂർണ്ണ ചാർജ് ആയതിനുശേഷം ബാറ്ററി ഉപയോഗമില്ല"</string>
+ <string name="no_battery_summary" msgid="4105932628367471314">"അവസാനമായി ഫുൾ ചാർജ് ചെയ്തത് മുതൽ ബാറ്ററി ഉപയോഗമൊന്നുമില്ല"</string>
<string name="app_notification_preferences" msgid="5154466638524523201">"ആപ്പ് ക്രമീകരണം"</string>
<string name="system_ui_settings" msgid="6751165163665775447">"SystemUI ട്യൂണർ കാണിക്കുക"</string>
<string name="additional_permissions" msgid="3142290772324571654">"അധിക അനുമതികൾ"</string>
@@ -3801,7 +3803,7 @@
<string name="system_alert_window_settings" msgid="3024330223417646567">"മറ്റ് ആപ്പുകൾക്ക് മുകളിൽ പ്രദർശിപ്പിക്കുക"</string>
<string name="system_alert_window_apps_title" msgid="9188448296493699566">"ആപ്സ്"</string>
<string name="system_alert_window_access_title" msgid="5187343732185369675">"മറ്റ് ആപ്പുകൾക്ക് മുകളിൽ പ്രദർശിപ്പിക്കുക"</string>
- <string name="permit_draw_overlay" msgid="9039092257052422344">"മറ്റ് ആപ്സിന് മുകളിൽ പ്രദർശിക്കുന്നത് അനുവദിക്കുക"</string>
+ <string name="permit_draw_overlay" msgid="9039092257052422344">"മറ്റ് ആപ്പുകൾക്ക് മുകളിൽ പ്രദർശിക്കുന്നത് അനുവദിക്കുക"</string>
<string name="allow_overlay_description" msgid="6669524816705082807">"നിങ്ങൾ ഉപയോഗിക്കുന്ന മറ്റ് ആപ്പുകൾക്ക് മുകളിൽ ഒരു ആപ്പിനെ ദൃശ്യമാക്കുന്നതിന് ഈ ആപ്പിനെ അനുവദിക്കുക. നിങ്ങൾ ആ ആപ്പുകൾ ഉപയോഗിക്കുന്നതിനെ ഇത് തടസ്സപ്പെടുത്തുകയോ അവ കാണപ്പെടുന്ന അല്ലെങ്കിൽ പെരുമാറുന്ന രീതിയെ മാറ്റുകയോ ചെയ്തേക്കാം."</string>
<string name="keywords_vr_listener" msgid="5312633527788917750">"vr വെർച്വൽ റിയാലിറ്റി ലിസണർ സ്റ്റീരിയോ സഹായി സേവനം"</string>
<string name="keywords_system_alert_window" msgid="3936658600272194599">"മറ്റ് ആപ്സിന് മുകളിൽ സിസ്റ്റം അലേർട്ട് വിൻഡോ ഡയലോഗ് പ്രദർശിപ്പിക്കുക"</string>
@@ -3962,7 +3964,7 @@
<string name="configure" msgid="8232696842838580549">"കോൺഫിഗർ ചെയ്യുക"</string>
<string name="data_usage_other_apps" msgid="7002491980141402084">"ഉപയോഗത്തിൽ ഉൾപ്പെട്ട മറ്റ് ആപ്സ്"</string>
<plurals name="data_saver_unrestricted_summary" formatted="false" msgid="6046013861315713697">
- <item quantity="other">ഡാറ്റ സേവർ ഓണായിരിക്കുമ്പോൾ, പരിധിയില്ലാതെ ഡാറ്റ ഉപയോഗിക്കുന്നതിന് <xliff:g id="COUNT">%1$d</xliff:g> ആപ്സിനെ അനുവദിച്ചു</item>
+ <item quantity="other">ഡാറ്റ സേവർ ഓണായിരിക്കുമ്പോൾ, പരിധിയില്ലാതെ ഡാറ്റ ഉപയോഗിക്കുന്നതിന് <xliff:g id="COUNT">%1$d</xliff:g> ആപ്പുകളെ അനുവദിച്ചു</item>
<item quantity="one">ഡാറ്റ സേവർ ഓണായിരിക്കുമ്പോൾ, പരിധിയില്ലാതെ ഡാറ്റ ഉപയോഗിക്കുന്നതിന് ഒരു ആപ്പിനെ അനുവദിച്ചു</item>
</plurals>
<string name="data_usage_title" msgid="7874606430902201083">"പ്രാഥമിക ഡാറ്റ"</string>
@@ -4000,7 +4002,7 @@
<string name="suggestion_additional_fingerprints" msgid="3434467207282466411">"മറ്റൊരു ഫിംഗർപ്രിന്റ് ചേർക്കുക"</string>
<string name="suggestion_additional_fingerprints_summary" msgid="1916547587832484196">"മറ്റൊരു വിരൽ ഉപയോഗിച്ച് അൺലോക്കുചെയ്യുക"</string>
<string name="battery_saver_on_summary" msgid="6841062406467435672">"ഓണാണ്"</string>
- <string name="battery_saver_off_scheduled_summary" msgid="3740414764069188669">"<xliff:g id="BATTERY_PERCENTAGE">%1$s</xliff:g>-ത്തിൽ ഇത് ഓണാക്കും"</string>
+ <string name="battery_saver_off_scheduled_summary" msgid="3740414764069188669">"<xliff:g id="BATTERY_PERCENTAGE">%1$s</xliff:g>-ത്തിൽ ഇത് ഓണാകും"</string>
<string name="battery_saver_off_summary" msgid="8736555723004299721">"ഓഫാണ്"</string>
<string name="battery_saver_button_turn_on" msgid="3748696527267573793">"ഇപ്പോൾ ഓണാക്കുക"</string>
<string name="battery_saver_button_turn_off" msgid="2912950982503267828">"ഇപ്പോൾ ഓഫാക്കുക"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"ഉപകരണം ലോക്കുചെയ്തിരിക്കുകയാണെങ്കിൽ അറിയിപ്പുകൾക്ക് മറുപടികളോ മറ്റ് ടെക്സ്റ്റുകളോ ടൈപ്പുചെയ്യുന്നത് തടയുക"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"ഡിഫോൾട്ട് സ്പെൽ ചെക്കർ"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"സ്പെൽ ചെക്കർ തിരഞ്ഞെടുക്കുക"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"സ്പെൽ ചെക്കര് ഉപയോഗിക്കുക"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"സ്പെൽ ചെക്കർ ഉപയോഗിക്കുക"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"തിരഞ്ഞെടുത്തില്ല"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(ഒന്നുമില്ല)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4050,7 +4052,7 @@
<string name="display_cutout_emulation_keywords" msgid="6795671536772871439">"ഡിസ്പ്ലേ കട്ടൗട്ട്, നോച്ച്"</string>
<string name="overlay_option_device_default" msgid="165508753381657697">"ഉപകരണ ഡിഫോള്ട്ട്"</string>
<string name="overlay_toast_failed_to_apply" msgid="5692251825129250040">"ഓവർലേ പ്രയോഗിക്കുന്നതിൽ പരാജയപ്പെട്ടു"</string>
- <string name="special_access" msgid="1453926335914696206">"പ്രത്യേക ആപ്പ് ആക്സസ്സ്"</string>
+ <string name="special_access" msgid="1453926335914696206">"പ്രത്യേക ആപ്പ് ആക്സസ്"</string>
<plurals name="special_access_summary" formatted="false" msgid="5182092345063909346">
<item quantity="other"><xliff:g id="COUNT">%d</xliff:g> ആപ്പുകൾക്ക് നിയന്ത്രണമില്ലാതെ ഡാറ്റ ഉപയോഗിക്കാം</item>
<item quantity="one">1 ആപ്പിന് നിയന്ത്രണമില്ലാതെ ഡാറ്റ ഉപയോഗിക്കാം</item>
@@ -4101,11 +4103,11 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"സ്റ്റോറേജ് ഇടം സൃഷ്ടിക്കുന്നതിന്, ബാക്കപ്പെടുത്ത ഫോട്ടോകളും വീഡിയോകളും നിങ്ങളുടെ ഉപകരണത്തിൽ നിന്ന് സ്റ്റോറേജ് മാനേജർ നീക്കംചെയ്യുന്നു."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"ഫോട്ടോകളും വീഡിയോകളും നീക്കംചെയ്യുക"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"സ്റ്റോറേജ് മാനേജർ"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"സ്റ്റോറേജ് മാനേജർ ഉപയോഗിക്കുക"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"സ്റ്റോറേജ് മാനേജർ ഉപയോഗിക്കുക"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"സ്വയമേവ"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"മാനുവൽ"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"ഇപ്പോൾ ഇടം സൃഷ്ടിക്കുക"</string>
- <string name="gesture_preference_title" msgid="583646591518373785">"ജെസ്റ്ററുകൾ"</string>
+ <string name="gesture_preference_title" msgid="583646591518373785">"ജെസ്ചറുകൾ"</string>
<string name="gesture_preference_summary" product="default" msgid="2990736567599191163">"നിങ്ങളുടെ ഫോൺ നിയന്ത്രിക്കുന്നതിനുള്ള ദ്രുത ജെസ്റ്ററുകൾ"</string>
<string name="gesture_preference_summary" product="tablet" msgid="8303793594714075580">"നിങ്ങളുടെ ടാബ്ലെറ്റ് നിയന്ത്രിക്കുന്നതിനുള്ള അതിവേഗ ജെസ്റ്ററുകൾ"</string>
<string name="gesture_preference_summary" product="device" msgid="7792199669106960922">"നിങ്ങളുടെ ഉപകരണം നിയന്ത്രിക്കുന്നതിനുള്ള അതിവേഗ ജെസ്റ്ററുകൾ"</string>
@@ -4122,7 +4124,7 @@
<string name="ambient_display_title" product="tablet" msgid="1106285490888683613">"ടാബ്ലെറ്റ് പരിശോധിക്കുന്നതിന്, രണ്ടുതവണ ടാപ്പുചെയ്യുക"</string>
<string name="ambient_display_title" product="device" msgid="5064644474876041478">"ഉപകരണം പരിശോധിക്കുന്നതിന്, രണ്ടുതവണ ടാപ്പുചെയ്യുക"</string>
<string name="ambient_display_summary" msgid="4882910328216411109">"സമയവും അറിയിപ്പുകളും മറ്റ് വിവരങ്ങളും പരിശോധിക്കുന്നതിന്, നിങ്ങളുടെ സ്ക്രീനിൽ രണ്ട് തവണ ടാപ്പ് ചെയ്യുക."</string>
- <string name="ambient_display_pickup_title" product="default" msgid="7141652156907066938">"പരിശോധിക്കാൻ ഫോണുയർത്തുക"</string>
+ <string name="ambient_display_pickup_title" product="default" msgid="7141652156907066938">"പരിശോധിക്കാൻ ഫോണെടുക്കുക"</string>
<string name="ambient_display_pickup_title" product="tablet" msgid="1555456400210301959">"പരിശോധിക്കുന്നതിന് ടാബ്ലെറ്റ് എടുത്തുയർത്തുക"</string>
<string name="ambient_display_pickup_title" product="device" msgid="2480126522988135037">"പരിശോധിക്കുന്നതിന് ഉപകരണം എടുത്തുയർത്തുക"</string>
<string name="ambient_display_wake_screen_title" msgid="3376988352851077102">"ഡിസ്പ്ലേ സജീവമാക്കുക"</string>
@@ -4153,7 +4155,7 @@
<string name="instant_apps_settings" msgid="879003203555847537">"ഇൻസ്റ്റന്റ് ആപ്പ് മുൻഗണനകൾ"</string>
<string name="domain_url_section_title" msgid="206403507921518321">"ഇൻസ്റ്റാൾ ചെയ്തിട്ടുള്ള ആപ്പുകൾ"</string>
<string name="automatic_storage_manager_activation_warning" msgid="2630083316417707308">"നിങ്ങളുടെ സ്റ്റോറേജ് ഇപ്പോൾ മാനേജുചെയ്യുന്നത് സ്റ്റോറേജ് മാനേജരാണ്"</string>
- <string name="account_for_section_header" msgid="5975241715840642563">"<xliff:g id="USER_NAME">%1$s</xliff:g> എന്ന ഉപയോക്താവിന്റെ അക്കൗണ്ടുകൾ"</string>
+ <string name="account_for_section_header" msgid="5975241715840642563">"<xliff:g id="USER_NAME">%1$s</xliff:g> എന്നയാളുടെ അക്കൗണ്ടുകൾ"</string>
<string name="configure_section_header" msgid="6988981883075615136">"ക്രമീകരിക്കുക"</string>
<string name="auto_sync_account_title" msgid="2394463123733529506">"ഡാറ്റ സ്വയം സമന്വയിപ്പിക്കുക"</string>
<string name="auto_sync_personal_account_title" msgid="6844465157916100655">"വ്യക്തിഗത ഡാറ്റ സ്വയം സമന്വയിപ്പിക്കുക"</string>
@@ -4237,7 +4239,7 @@
<string name="storage_music_audio" msgid="3661289086715297149">"സംഗീതവും ഓഡിയോയും"</string>
<string name="storage_games" msgid="7740038143749092373">"ഗെയിമുകള്"</string>
<string name="storage_other_apps" msgid="3202407095387420842">"മറ്റ് ആപ്പുകൾ"</string>
- <string name="storage_files" msgid="2087824267937487880">"ഫയലുകള്"</string>
+ <string name="storage_files" msgid="2087824267937487880">"Files"</string>
<string name="storage_size_large_alternate" msgid="1317796542509105857">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" "<font size="20">"<xliff:g id="UNIT">^2</xliff:g>"</font></small>""</string>
<string name="storage_volume_total" msgid="5021484171514159913">"<xliff:g id="TOTAL">%1$s</xliff:g> ഉപയോഗിച്ചു"</string>
<string name="storage_percent_full" msgid="6924662861545958442">"ഉപയോഗിച്ചു"</string>
@@ -4308,8 +4310,8 @@
<string name="change_wifi_state_title" msgid="5140754955787584174">"വൈഫൈ നിയന്ത്രണം"</string>
<string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"വൈഫൈയെ നിയന്ത്രിക്കാൻ ആപ്പിനെ അനുവദിക്കുക"</string>
<string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"വൈഫൈ ഓണോ ഓഫോ ആക്കാനോ വൈഫൈ നെറ്റ്വർക്കുകൾ സ്കാൻ ചെയ്യാനോ അവയിലേക്ക് കണക്റ്റ് ചെയ്യാനോ നെറ്റ്വർക്കുകൾ ചേർക്കാനോ നീക്കം ചെയ്യാനോ ഉപകരണം ഉള്ളിടത്ത് മാത്രം പ്രവർത്തിക്കുന്ന ഒരു ഹോട്ട്സ്പോട്ട് ആരംഭിക്കാനോ ഈ ആപ്പിനെ അനുവദിക്കുക"</string>
- <string name="media_output_title" msgid="8710632337456601848">"ഇതിലേക്ക് മീഡിയ പ്ലേ ചെയ്യുക"</string>
- <string name="media_output_default_summary" msgid="3159237976830415584">"ഈ ഉപകരണം"</string>
+ <string name="media_output_title" msgid="8710632337456601848">"മീഡിയ പ്ലേ ചെയ്യുക:"</string>
+ <string name="media_output_default_summary" msgid="3159237976830415584">"ഈ ഉപകരണത്തിൽ"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"ഫോൺ"</string>
<string name="media_output_summary" product="tablet" msgid="6672024060360538526">"ടാബ്ലെറ്റ്"</string>
<string name="media_output_summary" product="device" msgid="5132223072593052660">"ഉപകരണം"</string>
@@ -4321,9 +4323,9 @@
<string name="battery_suggestion_title" product="device" msgid="765005476863631528">"ഉപകരണത്തിന്റെ ബാറ്ററി ലൈഫ് മെച്ചപ്പെടുത്തുക"</string>
<string name="battery_suggestion_title" product="default" msgid="3295786171830183688">"ഫോണിന്റെ ബാറ്ററി ലൈഫ് മെച്ചപ്പെടുത്തുക"</string>
<string name="battery_suggestion_summary" msgid="2669070349482656490"></string>
- <string name="gesture_prevent_ringing_screen_title" msgid="4173494225145223638">"റിംഗിംഗ് തടയുക"</string>
+ <string name="gesture_prevent_ringing_screen_title" msgid="4173494225145223638">"റിംഗ് ചെയ്യുന്നത് തടയുക"</string>
<string name="gesture_prevent_ringing_title" msgid="8827963588425673557">"പവറും ശബ്ദം കൂട്ടുന്ന ബട്ടണും ഒരുമിച്ച് ഇനിപ്പറയുന്നതിനായി, അമർത്തുക"</string>
- <string name="gesture_prevent_ringing_sound_title" msgid="8642330448721033641">"റിംഗ് ചെയ്യുന്നത് തടയാൻ കുറുക്കുവഴി"</string>
+ <string name="gesture_prevent_ringing_sound_title" msgid="8642330448721033641">"റിംഗ് ചെയ്യുന്നത് തടയാനുള്ള കുറുക്കുവഴി"</string>
<string name="prevent_ringing_option_vibrate" msgid="6456505293904544108">"വൈബ്രേറ്റ് ചെയ്യുക"</string>
<string name="prevent_ringing_option_mute" msgid="53662688921253613">"മ്യൂട്ട് ചെയ്യുക"</string>
<string name="prevent_ringing_option_none" msgid="1450985763137666231">"ഒന്നും ചെയ്യരുത്"</string>
diff --git a/tests/CarDeveloperOptions/res/values-mn/arrays.xml b/tests/CarDeveloperOptions/res/values-mn/arrays.xml
index 815dcbc..41cc6ae 100644
--- a/tests/CarDeveloperOptions/res/values-mn/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-mn/arrays.xml
@@ -85,7 +85,7 @@
<item msgid="8058143476674427024">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> руу холбогдож байна…"</item>
<item msgid="7547609081339573756">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>-тай гэрчилж байна…"</item>
<item msgid="5145158315060185414">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>-с IP хаягийг авч байна…"</item>
- <item msgid="3283243151651124831">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> руу холбогдсон"</item>
+ <item msgid="3283243151651124831">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>-д холбогдсон"</item>
<item msgid="6600156231416890902">"Түр хаасан"</item>
<item msgid="4133290864821295785">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>-с салгагдаж байна…"</item>
<item msgid="3980154971187953257">"Салгагдсан"</item>
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"дэвсгэрт ажиллуулах"</item>
<item msgid="6423861043647911030">"хүртээмжийн дууны түвшин"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Байршил"</item>
+ <item msgid="6656077694190491067">"Байршил"</item>
+ <item msgid="8790228218278477369">"Байршил"</item>
+ <item msgid="7836406246005211990">"Чичиргээ"</item>
+ <item msgid="3951439024549922598">"Харилцагчдыг унших"</item>
+ <item msgid="8802152411647068">"Харилцагчдыг өөрчлөх"</item>
+ <item msgid="229544934599698735">"Дуудлагын жагсаалтыг унших"</item>
+ <item msgid="7396102294405899613">"Дуудлагын жагсаалтыг өөрчлөх"</item>
+ <item msgid="3597797992398484655">"Хуанли унших"</item>
+ <item msgid="2705975774250907343">"Календарийг өөрчлөх"</item>
+ <item msgid="4668747371441932697">"Байршил"</item>
+ <item msgid="1487578921720243646">"Пост мэдэгдэл"</item>
+ <item msgid="4636080349724146638">"Байршил"</item>
+ <item msgid="673510900286463926">"Утас руу залгах"</item>
+ <item msgid="542083422784609790">"SMS/MMS унших"</item>
+ <item msgid="1033780373029588436">"SMS/MMS бичих"</item>
+ <item msgid="5647111115517787488">"SMS/MMS хүлээн авах"</item>
+ <item msgid="8591105601108455893">"SMS/MMS хүлээн авах"</item>
+ <item msgid="7730995008517841903">"SMS/MMS хүлээн авах"</item>
+ <item msgid="2613033109026626086">"SMS/MMS хүлээн авах"</item>
+ <item msgid="3037159047591081136">"SMS/MMS илгээх"</item>
+ <item msgid="4726682243833913568">"SMS/MMS унших"</item>
+ <item msgid="6555678522277865572">"SMS/MMS бичих"</item>
+ <item msgid="6981734935578130884">"Тохиргоог өөрчлөх"</item>
+ <item msgid="8705854389991425629">"Дээр нь нээх"</item>
+ <item msgid="5861356020344153651">"Хандалтын мэдэгдэл"</item>
+ <item msgid="78432174621628659">"Камер"</item>
+ <item msgid="3986116419882154794">"Аудио бичих"</item>
+ <item msgid="4516840825756409490">"Аудио тоглуулах"</item>
+ <item msgid="6811712502798183957">"Түр санах ойг унших"</item>
+ <item msgid="2780369012602289114">"Түр санах ойг өөрчлөх"</item>
+ <item msgid="2331359440170850868">"Медиа товч"</item>
+ <item msgid="6133599737122751231">"Аудио фокус"</item>
+ <item msgid="6844485713404805301">"Үндсэн дууны хэмжээ"</item>
+ <item msgid="1600379420669104929">"Хоолойн дууны хэмжээ"</item>
+ <item msgid="6296768210470214866">"Хонхны дууны түвшин"</item>
+ <item msgid="510690696071629241">"Медиа дууны түвшин"</item>
+ <item msgid="406861638631430109">"Сэрүүлгийн дууны түвшин"</item>
+ <item msgid="4715864795872233884">"Мэдэгдлийн дууны хэмжээ"</item>
+ <item msgid="2311478519251301183">"Блютүүтийн хэмжээ"</item>
+ <item msgid="5133991377896747027">"Сэрүүн байлгах"</item>
+ <item msgid="2464189519136248621">"Байршил"</item>
+ <item msgid="2062677934050803037">"Байршил"</item>
+ <item msgid="1735171933192715957">"Ашиглалтын статистик авах"</item>
+ <item msgid="1014093788778383554">"Микрофон хаах/нээх"</item>
+ <item msgid="4199297950608622850">"toast харуулах"</item>
+ <item msgid="2527962435313398821">"Төслийн медиа"</item>
+ <item msgid="5117506254221861929">"VPN идэвхжүүлэх"</item>
+ <item msgid="8291198322681891160">"Ханын зураг бичих"</item>
+ <item msgid="7106921284621230961">"Бүтцийг өөрчлөх"</item>
+ <item msgid="4496533640894624799">"Дэлгэцийн агшинг өөрчлөх"</item>
+ <item msgid="2598847264853993611">"Гар утасны төлөвийг унших"</item>
+ <item msgid="9215610846802973353">"Дуут шуудан нэмэх"</item>
+ <item msgid="9186411956086478261">"Sip-г ашиглах"</item>
+ <item msgid="6884763100104539558">"Залгах дуудлагыг боловсруулах"</item>
+ <item msgid="125513972170580692">"Хурууны хээ"</item>
+ <item msgid="2556071024281275619">"Биеийн мэдрэгч"</item>
+ <item msgid="617168514928339387">"Үүрэн нэвтрүүлгийг унших"</item>
+ <item msgid="7134693570516523585">"Хуурамч байршил"</item>
+ <item msgid="7224489175375229399">"Санах ойг унших"</item>
+ <item msgid="8472735063903258202">"Санах ойг бичих"</item>
+ <item msgid="4069276819909595110">"Дэлгэцийг асаах"</item>
+ <item msgid="1228338896751121025">"Бүртгэл авах"</item>
+ <item msgid="3181581793459233672">"Дэвсгэрт ажиллуулах"</item>
+ <item msgid="2340936043025374076">"Хүртээмжийн дууны түвшин"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Богино"</item>
<item msgid="4816511817309094890">"Дунд"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Хэзээ ч зөвшөөрөхгүй"</item>
<item msgid="8184570120217958741">"Байнга зөвшөөрөх"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Хэвийн"</item>
+ <item msgid="5101233285497327432">"Дундаж"</item>
+ <item msgid="1555861583162930714">"Бага"</item>
+ <item msgid="1719683776264798117">"Эгзэгтэй"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Хэвийн"</item>
+ <item msgid="6107138933849816768">"Дундаж"</item>
+ <item msgid="182695359839047859">"Бага"</item>
+ <item msgid="8577246509202964244">"Эгзэгтэй"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Тогтвортой"</item>
<item msgid="167418068739176448">"Топ үйлдэл"</item>
@@ -377,7 +453,7 @@
<item msgid="6248998242443333892">"Кеш хийгдсэн (хоосон)"</item>
</string-array>
<string-array name="color_picker">
- <item msgid="3151827842194201728">"Усан цэнхэр"</item>
+ <item msgid="3151827842194201728">"Ногоон цэнхэр"</item>
<item msgid="3228505970082457852">"Цэнхэр"</item>
<item msgid="6590260735734795647">"Индиго"</item>
<item msgid="3521763377357218577">"Ягаан"</item>
diff --git a/tests/CarDeveloperOptions/res/values-mn/strings.xml b/tests/CarDeveloperOptions/res/values-mn/strings.xml
index c941ea4..e88a783 100644
--- a/tests/CarDeveloperOptions/res/values-mn/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-mn/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Дэлгэц дээрх текстийг томруулах, жижигрүүлэх."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Жижигрүүлэх"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Томруулах"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Жишээ текст"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Озын Гайхамшигт шидтэн"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Бүлэг 11: Озын Гайхамшигт Маргад эрдэнийн хот"</string>
@@ -208,7 +207,7 @@
<string name="proxy_error_empty_port" msgid="8034561724923076215">"Та порт талбарыг гүйцээх шаардлагатай."</string>
<string name="proxy_error_empty_host_set_port" msgid="8471455809508588255">"Хостын талбар хоосон байгаа бол портын талбар хоосон байх шаардлагатай."</string>
<string name="proxy_error_invalid_port" msgid="4046559920586100637">"Таны оруулсан порт буруу байна."</string>
- <string name="proxy_warning_limited_support" msgid="9026539134219095768">"HTTP проксиг хөтөч ашиглаж байгаа боловч бусад апп-ууд ашиглахгүй байж магадгүй."</string>
+ <string name="proxy_warning_limited_support" msgid="9026539134219095768">"HTTP проксиг хөтөч ашиглаж байгаа боловч бусад апп ашиглахгүй байж магадгүй."</string>
<string name="proxy_url_title" msgid="882042361706435904">"PAC URL: "</string>
<string name="radio_info_dl_kbps" msgid="2903778264453410272">"DL Зурвасын өргөн (kbps):"</string>
<string name="radio_info_ul_kbps" msgid="3802245899811732716">"UL Зурвасын өргөн (kbps):"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Профайлын мэдээлэл"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Бүртгэл"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Байршил"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Байршлыг ашиглах"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Байршлыг ашиглах"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Унтраалттай"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Асаалттай - <xliff:g id="COUNT_1">%1$d</xliff:g> апп байршилд хандах боломжтой</item>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Wi‑Fi-г асаах"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Wi-Fi-г ашиглах"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Wi-Fi-г ашиглах"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi‑Fi тохиргоо"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Утасгүй хандалтын цэгүүдийг тохируулах & удирдах"</string>
@@ -850,7 +849,7 @@
<string name="wifi_notify_open_networks" msgid="4782239203624619655">"Сүлжээний мэдэгдлийг нээх"</string>
<string name="wifi_notify_open_networks_summary" msgid="1383681260705466715">"Өндөр чанарын нийтийн сүлжээ боломжтой үед мэдэгдэх"</string>
<string name="wifi_wakeup" msgid="4963732992164721548">"Wi‑Fi-г автоматаар асаах"</string>
- <string name="wifi_wakeup_summary" msgid="1152699417411690">"Wi‑Fi таны гэрийн сүлжээ зэрэг ойролцоох хадгалсан өндөр чанарын сүлжээнд буцаж асах болно."</string>
+ <string name="wifi_wakeup_summary" msgid="1152699417411690">"Wi‑Fi таны гэрийн сүлжээ зэрэг ойролцоох хадгалсан өндөр чанартай сүлжээнд буцаж асах болно."</string>
<string name="wifi_wakeup_summary_no_location" msgid="3007457288587966962">"Байршил унтраалттай байгаа тул боломжгүй байна. "<annotation id="link">"Байршлыг"</annotation>" асаана уу."</string>
<string name="wifi_wakeup_summary_scanning_disabled" msgid="6820040651529910914">"Wi‑Fi сканыг унтраасан тул боломжгүй байна"</string>
<string name="wifi_wakeup_summary_scoring_disabled" msgid="7067018832237903151">"Ашиглахын тулд сүлжээний үнэлгээ үзүүлэгчийг сонгоно уу"</string>
@@ -906,7 +905,7 @@
<string name="wifi_ssid_hint" msgid="5010024648106585165">"SSID оруулна уу"</string>
<string name="wifi_security" msgid="9136702039496152831">"Аюулгүй байдал"</string>
<string name="wifi_hidden_network" msgid="6647772204699776833">"Нуугдсан сүлжээ"</string>
- <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Хэрэв таны чиглүүлэгч сүлжээний ID-г дамжуулахгүй байгаа хэдий ч та цаашдаа үүнд холбогдох хүсэлтэй байвал сүлжээг нуусан гэж тохируулах боломжтой.\n\nТаны утас сүлжээ олохын тулд дохиогоо тогтмол дамжуулах тул энэ нь аюулгүй байдлын эрсдэл үүсгэж болзошгүй.\n\nСүлжээг нуусан гэж тохируулах нь таны чиглүүлэгчийн тохиргоог өөрчлөхгүй."</string>
+ <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Хэрэв таны рүүтэр сүлжээний ID-г дамжуулахгүй байгаа хэдий ч та цаашдаа үүнд холбогдох хүсэлтэй байвал сүлжээг нуусан гэж тохируулах боломжтой.\n\nТаны утас сүлжээ олохын тулд дохиогоо тогтмол дамжуулах тул энэ нь аюулгүй байдлын эрсдэл үүсгэж болзошгүй.\n\nСүлжээг нуусан гэж тохируулах нь таны рүүтэрийн тохиргоог өөрчлөхгүй."</string>
<string name="wifi_signal" msgid="696548364467704808">"Сигналын хүч"</string>
<string name="wifi_status" msgid="3439931558930689940">"Статус"</string>
<string name="tx_wifi_speed" msgid="2571810085003261073">"Дамжуулах холбоосны хурд"</string>
@@ -936,18 +935,18 @@
<string name="wifi_privacy_settings" msgid="4462092795794247809">"Нууцлал"</string>
<string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"Санамсаргүй сонгосон MAC"</string>
<string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"Төхөөрөмж нэмэх"</string>
- <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"Энэ төхөөрөмжийг “<xliff:g id="SSID">%1$s</xliff:g>”-д нэмэхийн тулд доорх хурдан хариу үйлдлийн кодыг голлуулна уу"</string>
- <string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"Хурдан хариу үйлдлийн кодыг скан хийх"</string>
- <string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"“<xliff:g id="SSID">%1$s</xliff:g>”-д холбогдохын тулд доорх хурдан хариу үйлдлийн кодыг голлуулна уу"</string>
- <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"Хурдан хариу үйлдлийн кодыг скан хийж, Wi‑Fi-д нэгдэнэ үү"</string>
+ <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"Энэ төхөөрөмжийг “<xliff:g id="SSID">%1$s</xliff:g>”-д нэмэхийн тулд доорх QR кодыг голлуулна уу"</string>
+ <string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"QR кодыг скан хийх"</string>
+ <string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"“<xliff:g id="SSID">%1$s</xliff:g>”-д холбогдохын тулд доорх QR кодыг голлуулна уу"</string>
+ <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"QR кодыг скан хийж, Wi‑Fi-д нэгдэнэ үү"</string>
<string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Wi‑Fi-г хуваалцах"</string>
- <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"“<xliff:g id="SSID">%1$s</xliff:g>”-д холбогдохын тулд энэ хурдан хариу үйлдлийн кодыг скан хийж, нууц үгийг хуваалцана уу"</string>
- <string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"“<xliff:g id="SSID">%1$s</xliff:g>”-д холбогдохын тулд энэ хурдан хариу үйлдлийн кодыг скан хийнэ үү"</string>
- <string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"Хурдан хариу үйлдлийн кодыг уншиж чадсангүй. Кодыг дахин голлуулаад дахин оролдоно уу"</string>
+ <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"“<xliff:g id="SSID">%1$s</xliff:g>”-д холбогдохын тулд энэ QR кодыг скан хийж, нууц үгийг хуваалцана уу"</string>
+ <string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"“<xliff:g id="SSID">%1$s</xliff:g>”-д холбогдохын тулд энэ QR кодыг скан хийнэ үү"</string>
+ <string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"QR кодыг уншиж чадсангүй. Кодыг дахин голлуулаад дахин оролдоно уу"</string>
<string name="wifi_dpp_failure_authentication_or_configuration" msgid="9142051662156233679">"Дахин оролдоно уу. Хэрэв асуудал үргэлжилсээр байвал төхөөрөмжийн үйлдвэрлэгчтэй холбогдоно уу"</string>
<string name="wifi_dpp_failure_not_compatible" msgid="4320027179973678283">"Алдаа гарлаа"</string>
- <string name="wifi_dpp_failure_timeout" msgid="5060065168142109420">"Төхөөрөмжийг залгасан, цэнэглэсэн бөгөөд асаасан эсэхийг шалгана уу"</string>
- <string name="wifi_dpp_failure_generic" msgid="7840142544736640189">"Төхөөрөмжийг залгасан, цэнэглэсэн бөгөөд асаасан эсэхийг шалгана уу. Хэрэв асуудал үргэлжилсээр байвал төхөөрөмжийн үйлдвэрлэгчтэй холбогдоно уу"</string>
+ <string name="wifi_dpp_failure_timeout" msgid="5060065168142109420">"Төхөөрөмжийг залгасан, цэнэглэсэн, асаасан эсэхийг шалгана уу"</string>
+ <string name="wifi_dpp_failure_generic" msgid="7840142544736640189">"Төхөөрөмжийг залгасан, цэнэглэсэн, асаасан эсэхийг шалгана уу. Хэрэв асуудал үргэлжилсээр байвал төхөөрөмжийн үйлдвэрлэгчтэй холбогдоно уу"</string>
<string name="wifi_dpp_failure_not_supported" msgid="111779621766171626">"Энэ төхөөрөмж “<xliff:g id="SSID">%1$s</xliff:g>”-г нэмэхийг дэмжээгүй байна"</string>
<string name="wifi_dpp_check_connection_try_again" msgid="7144663015219170999">"Холболтыг шалгаад дахин оролдоно уу"</string>
<string name="wifi_dpp_choose_network" msgid="6251424431594491691">"Сүлжээ сонгох"</string>
@@ -965,7 +964,7 @@
<string name="wifi_dpp_wifi_password" msgid="8007558344032612455">"Wi‑Fi-н нууц үг: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
<string name="wifi_dpp_hotspot_password" msgid="6172326289042241924">"Сүлжээний цэгийн нууц үг: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
<string name="wifi_dpp_add_device" msgid="1347056725253936358">"Төхөөрөмж нэмэх"</string>
- <string name="wifi_dpp_connect_network_using_qr_code" msgid="115993715600532357">"Энэ сүлжээнд хурдан хариу үйлдлийн кодоор холбогдох"</string>
+ <string name="wifi_dpp_connect_network_using_qr_code" msgid="115993715600532357">"Энэ сүлжээнд QR кодоор холбогдох"</string>
<string name="retry" msgid="8500839563577344702">"Дахин оролдох"</string>
<string name="wifi_shared" msgid="5054256778276524960">"Төхөөрөмжийн бусад хэрэглэгчтэй хуваалцах"</string>
<string name="wifi_unchanged" msgid="6804964646942333992">"(өөрчлөгдөөгүй)"</string>
@@ -973,7 +972,7 @@
<string name="wifi_multiple_cert_added" msgid="7986200585749147204">"(Олон сертификат нэмсэн)"</string>
<string name="wifi_use_system_certs" msgid="4794489370929885022">"Системийн гэрчилгээ ашигла"</string>
<string name="wifi_do_not_provide_eap_user_cert" msgid="4044301449482425250">"\"Бүү олго\""</string>
- <string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"Хүчин төгөлдөр бүү болго"</string>
+ <string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"Бүү хүчин төгөлдөр болго"</string>
<string name="wifi_do_not_validate_eap_server_warning" msgid="3895397996759837323">"Ямар ч сертификат заагаагүй байна. Таны холболт хувийн биш байх болно."</string>
<string name="wifi_ssid_too_long" msgid="34911971389775920">"Сүлжээний нэр хэтэрхий урт байна."</string>
<string name="wifi_no_domain_warning" msgid="735859919311067606">"Домэйн зааж өгөх шаардлагатай."</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Мобайл"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Хэрэв Wi‑Fi боломжгүй бол мобайл сүлжээ ашиглана уу"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Хэрэв мобайл сүлжээ боломжгүй байвал Wi-Fi-г ашиглана уу"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Wi‑Fi-р залгана. Wi‑Fi салсан тохиолдолд залгахаа болино."</string>
@@ -1213,7 +1215,7 @@
<string name="night_display_auto_mode_title" msgid="8493573087102481588">"Хуваарь"</string>
<string name="night_display_auto_mode_never" msgid="2897444637217807088">"Аль нь ч биш"</string>
<string name="night_display_auto_mode_custom" msgid="1400891076453963151">"Тохируулсан хугацаанд асна"</string>
- <string name="night_display_auto_mode_twilight" msgid="4000162110017520674">"Нар мандахаас жаргах хүртэл асна"</string>
+ <string name="night_display_auto_mode_twilight" msgid="4000162110017520674">"Нар жаргахаас мандах хүртэл асна"</string>
<string name="night_display_start_time_title" msgid="1069255169673371077">"Эхлэх цаг"</string>
<string name="night_display_end_time_title" msgid="2760793157124245911">"Дуусах цаг"</string>
<string name="night_display_status_title" msgid="1727020934735770319">"Төлөв"</string>
@@ -1422,9 +1424,9 @@
<string name="usb_mtp_title" msgid="6893938968831995500">"Медиа төхөөрөмж (MTP)"</string>
<string name="usb_mtp_summary" msgid="4427354560399094322">"Windows дээр медиа файлуудыг дамжуулах буюу Андройд Файл Дамжуулагчийг Mac дээр ашиглах боломж олгоно (www.android.com/filetransfer харна уу)"</string>
<string name="usb_ptp_title" msgid="6629335976394685361">"Камер (PTP)"</string>
- <string name="usb_ptp_summary" msgid="460425275251168189">"Танд камерын програм ашиглан зураг дамжуулах, компьютер дээрээс MTP-г дэмждэггүй ямар ч файлыг дамжуулах боломж олгоно"</string>
+ <string name="usb_ptp_summary" msgid="460425275251168189">"Танд камерын программ ашиглан зураг дамжуулах, компьютер дээрээс MTP-г дэмждэггүй ямар ч файлыг дамжуулах боломж олгоно"</string>
<string name="usb_midi_title" msgid="8626512517313340943">"MIDI"</string>
- <string name="usb_midi_summary" msgid="3607444815743771712">"MIDI-г идэвхжүүлсэн програмуудыг өөрийн компьютер дээрх MIDI програм хангамжийг USB дээр ажиллуулах."</string>
+ <string name="usb_midi_summary" msgid="3607444815743771712">"MIDI-г идэвхжүүлсэн программуудыг өөрийн компьютер дээрх MIDI программ хангамжийг USB дээр ажиллуулах."</string>
<string name="storage_other_users" msgid="1055693465220962928">"Бусад хэрэглэгчид"</string>
<string name="storage_internal_title" msgid="7969898703086593200">"Төхөөрөмжийн хадгалах сан"</string>
<string name="storage_external_title" msgid="3308178326521953306">"Зөөврийн санах ой"</string>
@@ -1589,7 +1591,7 @@
<string name="master_clear_other_users_present" product="default" msgid="5993259656117566767">\n\n"Энэ төхөөрөмж дээр өөр хэрэглэгчид байна.\n"</string>
<string name="master_clear_desc_also_erases_external" msgid="3947303501615091903"><li>"Хөгжим"</li>\n<li>"Зураг"</li>\n<li>"Бусад хэрэглэгчийн өгөгдөл"</li></string>
<string name="master_clear_desc_also_erases_esim" msgid="4497260499055258773"><li>"eSIM-үүд"</li></string>
- <string name="master_clear_desc_no_cancel_mobile_plan" msgid="6072668588881679461">\n\n"Энэ нь таны мобайл үйлчилгээний төлөвлөгөөг цуцлахгүй."</string>
+ <string name="master_clear_desc_no_cancel_mobile_plan" msgid="6072668588881679461">\n\n"Энэ нь таны мобайл үйлчилгээний багцыг цуцлахгүй."</string>
<string name="master_clear_desc_erase_external_storage" product="nosdcard" msgid="2723272952715259307">\n\n"Хөгжим, зураг болон бусад хэрэглэгчийн өгөгдлийг цэвэрлэхийн тулд "<b>"USB санг"</b>" арилгах шаардлагатай."</string>
<string name="master_clear_desc_erase_external_storage" product="default" msgid="9003555775524798797">\n\n"Хөгжим, зураг болон бусад хэрэглэгчийн өгөгдлийг цэвэрлэхийн тулд "<b>"SD картыг"</b>" арилгах шаардлагатай."</string>
<string name="erase_external_storage" product="nosdcard" msgid="8989746770347525207">"USB санг арилгах"</string>
@@ -1641,7 +1643,7 @@
<string name="network_scorer_change_active_dialog_text" msgid="4264089809189760730">"Өөрийн сүлжээнии холболтуудыг удирдахад <xliff:g id="NEW_APP">%1$s</xliff:g>-г <xliff:g id="CURRENT_APP">%2$s</xliff:g>-н оронд ашиглах уу?"</string>
<string name="network_scorer_change_active_no_previous_dialog_text" msgid="6394483538843474495">"Сүлжээний холболтуудыг удирдахад <xliff:g id="NEW_APP">%s</xliff:g>-г ашиглах уу?"</string>
<string name="mobile_unknown_sim_operator" msgid="872589370085135817">"Тодорхойгүй SIM оператор"</string>
- <string name="mobile_no_provisioning_url" msgid="3216517414902166131">"<xliff:g id="OPERATOR">%1$s</xliff:g>-д мэдэгдэж буй хангалтын вэбсайт алга"</string>
+ <string name="mobile_no_provisioning_url" msgid="3216517414902166131">"<xliff:g id="OPERATOR">%1$s</xliff:g>-д мэдэгдэж буй хангалтын вебсайт алга"</string>
<string name="mobile_insert_sim_card" msgid="7594550403454243732">"SIM карт оруулаад дахин эхлүүлнэ үү"</string>
<string name="mobile_connect_to_internet" msgid="6031886097365170913">"Интернэтэд холбогдоно уу"</string>
<string name="location_title" msgid="8664674161765477168">"Миний Байршил"</string>
@@ -1682,7 +1684,7 @@
<string name="about_settings" product="default" msgid="6019547763377294261">"Утасны тухай"</string>
<string name="about_settings" product="device" msgid="1770438316234693655">"Төхөөрөмжийн тухай"</string>
<string name="about_settings" product="emulator" msgid="4497482494770487014">"Утасны мэдээллийн дэлгэц"</string>
- <string name="about_settings_summary" msgid="4506081667462281647">"Хууль эрх зүйн мэдээлэл, статус, програмын хувилбарыг харах"</string>
+ <string name="about_settings_summary" msgid="4506081667462281647">"Хууль эрх зүйн мэдээлэл, статус, программын хувилбарыг харах"</string>
<string name="legal_information" msgid="2374267257615182139">"Хууль эрх зүйн мэдээлэл"</string>
<string name="contributors_title" msgid="6800028420806884340">"Хувь оруулагчид"</string>
<string name="manual" msgid="5431859421432581357">"Гар ажиллагаатай"</string>
@@ -1798,7 +1800,7 @@
<string name="advanced_settings_summary" msgid="5912237062506771716">"Өөр тохиргоо сонголтыг идэвхжүүлнэ үү"</string>
<string name="application_info_label" msgid="3886253474964599105">"Апп мэдээлэл"</string>
<string name="storage_label" msgid="1109537840103290384">"Хадгалах сан"</string>
- <string name="auto_launch_label" msgid="47089737922907379">"Стандарт нээх утга"</string>
+ <string name="auto_launch_label" msgid="47089737922907379">"Өгөгдмөлөөр нээх"</string>
<string name="auto_launch_label_generic" msgid="7865828543459493308">"Үндсэн тохиргоо"</string>
<string name="screen_compatibility_label" msgid="3638271673726075815">"Дэлгэцийн нийцэл"</string>
<string name="permissions_label" msgid="7341733648403464213">"Зөвшөөрөл"</string>
@@ -1954,7 +1956,7 @@
<string name="auto_caps" msgid="5566082723106296847">"Автоматаар томруулах"</string>
<string name="auto_caps_summary" msgid="8505254799874525084">"Өгүүлбэрийн эхний үсгийг томруулах"</string>
<string name="auto_punctuate" msgid="8386007107100525931">"Авто-цэг таслал"</string>
- <string name="hardkeyboard_category" msgid="5937171470391551627">"Бодит гарын тохиргоо"</string>
+ <string name="hardkeyboard_category" msgid="5937171470391551627">"Биет гарын тохиргоо"</string>
<string name="auto_punctuate_summary" msgid="245694025030386370">"Зай авах товчийг хоёр удаа дарж \".\" оруулна"</string>
<string name="show_password" msgid="620964020348073739">"Нууц үг харуулах"</string>
<string name="show_password_summary" msgid="1403805089582258620">"Бичих явцад тэмдэгтийг товчхон харуулах"</string>
@@ -1966,9 +1968,9 @@
<string name="available_virtual_keyboard_category" msgid="2211375533762470875">"Боломжит виртуал гар"</string>
<string name="add_virtual_keyboard" msgid="490638727157806209">"Гарыг удирдах"</string>
<string name="keyboard_assistance_category" msgid="2276351807419818125">"Гарын тусламж"</string>
- <string name="physical_keyboard_title" msgid="3508591962962814313">"Бодит гар"</string>
+ <string name="physical_keyboard_title" msgid="3508591962962814313">"Биет гар"</string>
<string name="show_ime" msgid="7322620473198763563">"Виртуал гарыг харуулах"</string>
- <string name="show_ime_summary" msgid="3246628154011464373">"Бодит гар идэвхтэй үед үүнийг дэлгэцэд харуулна уу"</string>
+ <string name="show_ime_summary" msgid="3246628154011464373">"Биет гар идэвхтэй үед үүнийг дэлгэцэд харуулна уу"</string>
<string name="keyboard_shortcuts_helper" msgid="6574386807271399788">"Гарын товчлолын туслагч"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="8024313306403779742">"Боломжтой товчлолыг харуулах"</string>
<string name="language_and_input_for_work_category_title" msgid="2053255944038892588">"Ажлын профайлын гар & хэрэгсэл"</string>
@@ -2019,8 +2021,8 @@
<string name="input_methods_settings_label_format" msgid="5927400388781960176">"<xliff:g id="IME_NAME">%1$s</xliff:g> тохиргоо"</string>
<string name="input_methods_and_subtype_enabler_title" msgid="75557930915149416">"Идэвхтэй оруулах аргыг сонгоно уу"</string>
<string name="onscreen_keyboard_settings_summary" msgid="148763210673670769">"Дэлгэцэн дээрх гарын тохиргоо"</string>
- <string name="builtin_keyboard_settings_title" msgid="3683883402326039724">"Бодит гар"</string>
- <string name="builtin_keyboard_settings_summary" msgid="6498739864479285932">"Бодит гарын тохиргоо"</string>
+ <string name="builtin_keyboard_settings_title" msgid="3683883402326039724">"Биет гар"</string>
+ <string name="builtin_keyboard_settings_summary" msgid="6498739864479285932">"Биет гарын тохиргоо"</string>
<string name="gadget_picker_title" msgid="9146981887780645322">"Гаджет сонгоно уу"</string>
<string name="widget_picker_title" msgid="5424689728810684439">"Виджет сонгох"</string>
<string name="allow_bind_app_widget_activity_allow_bind_title" msgid="8168110035319637326">"Виджэт үүсгээд хандалт хийхийг зөвшөөрөх үү?"</string>
@@ -2046,7 +2048,7 @@
<string name="experimental_category_title" msgid="3797000069740110717">"Туршилтын"</string>
<string name="feature_flags_dashboard_title" msgid="3153034144122754381">"Онцлогийн дарцаг"</string>
<string name="talkback_title" msgid="3717960404234260050">"Talkback"</string>
- <string name="talkback_summary" msgid="6602857105831641574">"Дэлгэц уншигчийг ерөнхийдөө сохор буюу харааны гажигтай хүмүүст зориулсан"</string>
+ <string name="talkback_summary" msgid="6602857105831641574">"Дэлгэц уншигчийг ерөнхийдөө хараагүй болон сул хараатай хүмүүст зориулсан"</string>
<string name="select_to_speak_summary" msgid="7514180457557735421">"Дэлгэц дээрх зүйлсийг чанга уншуулахын тулд дарна уу"</string>
<string name="accessibility_captioning_title" msgid="5878371993023439642">"Тайлбар"</string>
<string name="accessibility_screen_magnification_title" msgid="7250949681883917360">"Томруулах"</string>
@@ -2084,7 +2086,7 @@
<string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"Та унших шаардлагатай хэдий ч зөвхөн түр хугацаанд харагддаг мессежийг хэр удаан харуулахыг сонгоно уу.\n\nЗарим апп энэ тохиргоог дэмждэггүй."</string>
<string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"Танаас үйлдэл хийхийг шаарддаг хэдий ч зөвхөн түр хугацаанд харагддаг зурвасыг хэр удаан хугацаагаар харуулахыг сонгоно уу.\n\nЗарим апп энэ тохиргоог дэмждэггүй."</string>
<string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"Хүрээд & барьж хүлээх"</string>
- <string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"Өнгө урвуулалт"</string>
+ <string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"Өнгө хувиргалт"</string>
<string name="accessibility_display_inversion_preference_subtitle" msgid="69291255322175323">"Үзүүлбэрт нөлөөлж болзошгүй"</string>
<string name="accessibility_autoclick_preference_title" msgid="9164599088410340405">"Тодорхой хугацаа"</string>
<string name="accessibility_autoclick_description" msgid="5492414927846407499">"Хэрэв та хулгана ашиглаж байвал тодорхой хугацааны туршид хөдлөхөө болсон үед нь автоматаар үйлдэл хийхийн тулд курсорыг тохируулах боломжтой."</string>
@@ -2093,12 +2095,12 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Мэдэгдлийн чичиргээ"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Хонхны чичиргээ"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Хүрэхэд мэдрэгдэх чичиргээ"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Үйлчилгээг ашиглах"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Өнгө тохируулагчийг ашиглах"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Тайлбар ашиглах"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Үйлчилгээг ашиглах"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Өнгөний засвар ашиглах"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Тайлбар ашиглах"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Үргэлжлүүлэх"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Сонсголын төхөөрөмжүүд"</string>
- <string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Холбогдсон сонсголын төхөөрөмжүүд алга"</string>
+ <string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Холбогдсон сонсголын төхөөрөмж алга"</string>
<string name="accessibility_hearingaid_adding_summary" msgid="4139031880828714300">"Сонсголын төхөөрөмж нэмэх"</string>
<string name="accessibility_hearingaid_pair_instructions_first_message" msgid="2671518890909750740">"Сонсголын төхөөрөмжүүдээ холбохын тулд төхөөрөмжөө дараагийн дэлгэцээс олж товшино уу."</string>
<string name="accessibility_hearingaid_pair_instructions_second_message" msgid="1584538735488464991">"Таны сонсголын төхөөрөмжүүд холболтын горимд байгаа эсэхийг шалгана уу."</string>
@@ -2275,8 +2277,8 @@
<string name="battery_tip_smart_battery_title" product="tablet" msgid="203494973250969040">"Таблетынхаа батарейн ажиллах хугацааг нэмэгдүүлэх"</string>
<string name="battery_tip_smart_battery_title" product="device" msgid="7419448992583346364">"Төхөөрөмжийнхөө батарейн ажиллах хугацааг нэмэгдүүлэх"</string>
<string name="battery_tip_smart_battery_summary" msgid="5344821856478265778">"Батерейны менежерийг асаах"</string>
- <string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"Тэжээл хэмнэгчийг асаах"</string>
- <string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Батерей ердийнхөөс хурдан дуусаж болзошгүй"</string>
+ <string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"Батарей хэмнэгчийг асаах"</string>
+ <string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Батарей ердийн үеийнхээс хурдан дуусаж болзошгүй"</string>
<string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"Тэжээл хэмнэгч асаалттай байна"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"Зарим онцлогийг хязгаарласан байж болзошгүй"</string>
<string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Утсыг ердийнхөөс их хэмжээгээр ашигласан"</string>
@@ -2296,8 +2298,8 @@
<item quantity="one">%1$s-г саяхан хязгаарласан</item>
</plurals>
<plurals name="battery_tip_restrict_summary" formatted="false" msgid="984148373944071669">
- <item quantity="other">%2$d аппын батерейг цаана ашиглах түвшин өндөр байна</item>
- <item quantity="one">%1$s-н батерейг цаана ашиглах түвшин өндөр байна</item>
+ <item quantity="other">%2$d аппын батарейг цаана ашиглах түвшин өндөр байна</item>
+ <item quantity="one">%1$s-н батарейг цаана ашиглах түвшин өндөр байна</item>
</plurals>
<plurals name="battery_tip_restrict_handled_summary" formatted="false" msgid="469696766640020557">
<item quantity="other">Эдгээр аппыг цаана ажиллуулах боломжгүй байна</item>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Асаах"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Tэжээл хэмнэгчийг ашиглах"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Батарей хэмнэгчийг ашиглах"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Автоматаар асаах"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Хэзээ ч үгүй"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"батерей <xliff:g id="PERCENT">%1$s</xliff:g> болоход"</string>
@@ -2534,7 +2536,7 @@
<string name="advanced_security_title" msgid="286883005673855845">"Дэлгэрэнгүй"</string>
<string name="credential_storage_type" msgid="2585337320206095255">"Хадгалах сангийн төрөл"</string>
<string name="credential_storage_type_hardware" msgid="5054143224259023600">"Техник хангамжаар дэмжигдсэн"</string>
- <string name="credential_storage_type_software" msgid="1335905150062717150">"Зөвхөн програм"</string>
+ <string name="credential_storage_type_software" msgid="1335905150062717150">"Зөвхөн программ"</string>
<string name="credentials_settings_not_available" msgid="5490259681690183274">"Энэ хэрэглэгчид итгэмжлэл байхгүй байна"</string>
<string name="credential_for_vpn_and_apps" msgid="2462642486949593841">"VPN, апп-д суулгасан"</string>
<string name="credential_for_wifi" msgid="2903295786961726388">"Wi-Fi-д суулгасан"</string>
@@ -2599,7 +2601,7 @@
<string name="work_mode_label" msgid="6845849194740195757">"Ажлын профайл"</string>
<string name="work_mode_on_summary" msgid="1682781113156323592">"Танай байгууллагаас удирддаг"</string>
<string name="work_mode_off_summary" msgid="1688885392211178315">"Апп болон мэдэгдэл унтраалттай байна"</string>
- <string name="remove_managed_profile_label" msgid="4625542553784793536">"Ажлын профайлыг арилгах"</string>
+ <string name="remove_managed_profile_label" msgid="4625542553784793536">"Ажлын профайлыг хасах"</string>
<string name="background_data" msgid="8275750862371471171">"Далд өгөгдөл"</string>
<string name="background_data_summary" msgid="799640633948841990">"Аппууд өгөгдлийг ямар ч үед синк хийж, илгээж, хүлээж авч болно"</string>
<string name="background_data_dialog_title" msgid="8306650658158895976">"Далд өгөгдлийг идэвхгүйжүүлэх үү?"</string>
@@ -2628,7 +2630,7 @@
<string name="header_add_an_account" msgid="8482614556580804956">"Бүртгэл нэмэх"</string>
<string name="really_remove_account_title" msgid="4166512362915154319">"Бүртгэлийг арилгах уу?"</string>
<string name="really_remove_account_message" product="tablet" msgid="7403843371045856719">"Энэ акаунтыг арилгаснаас үүний бүх зурвас, харилцагчид болон бусад өгөгдлүүдийг таблетаас устгах болно!"</string>
- <string name="really_remove_account_message" product="default" msgid="8951224626153163914">"Энэ акаунтыг арилгаснаар үүний бүх зурвас, харилцагчид, бусад өгөгдлүүдийг утаснаас устгах болно!"</string>
+ <string name="really_remove_account_message" product="default" msgid="8951224626153163914">"Энэ бүртгэлийг хассанаар үүний бүх зурвас, харилцагчид, бусад өгөгдлийг утаснаас устгах болно!"</string>
<string name="really_remove_account_message" product="device" msgid="3751798556257519916">"Энэ бүртгэлийг устгаснаар үүний бүх зурвас, харилцагч болон бусад өгөгдлийг төхөөрөмжөөс устгана!"</string>
<string name="remove_account_failed" msgid="491458185327106966">"Энэ өөрчлөлтийг таны админ зөвшөөрөөгүй байна"</string>
<string name="cant_sync_dialog_title" msgid="5483419398223189881">"Гараар синк хийх боломжгүй"</string>
@@ -2668,8 +2670,8 @@
<string name="data_usage_menu_sim_cards" msgid="8508154611676507088">"SIM карт"</string>
<string name="data_usage_cellular_data_summary" msgid="9162777397135709280">"Хязгаарт хүрмэгц зогсоосон"</string>
<string name="account_settings_menu_auto_sync" msgid="2673669556006027506">"Датаг автоматаар синклэх"</string>
- <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"Хувийн датаг автоматаар синк хийх"</string>
- <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Ажлын датаг автоматаар синк хийх"</string>
+ <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"Хувийн өгөгдлийг автоматаар синк хийх"</string>
+ <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Ажлын өгөгдлийг автоматаар синк хийх"</string>
<string name="data_usage_change_cycle" msgid="447761920472170031">"Циклийг өөрчлөх…"</string>
<string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"Дата ашиглалтын циклийг шинэчлэх сарын өдөр:"</string>
<string name="data_usage_empty" msgid="7981405723435034032">"Энэ хугацаанд дата ашигласан апп байхгүй."</string>
@@ -2702,8 +2704,8 @@
<string name="data_usage_app_restrict_dialog" msgid="4022530391896478031">"Зөвхөн мобайл сүлжээ байгаа тохиолдолд энэ функц далд датанаас шалтгаалдаг апп-н ажиллагааг зогсоож болно.\n\nТа апп доторх тохиргооноос илүү тохиромжтой дата ашиглалтын хяналтыг олж болно."</string>
<string name="data_usage_restrict_denied_dialog" msgid="18928292832775805">"Арын датаг мобайл датаны хязгаарыг тохируулсны дараа хязгаарлах боломжтой."</string>
<string name="data_usage_auto_sync_on_dialog_title" msgid="2342323408229702005">"Өгөгдлийг автоматаар синк хийхийг асаах уу?"</string>
- <string name="data_usage_auto_sync_on_dialog" product="tablet" msgid="4935430284683238901">"Таны вэб дээр өөрийн бүртгэлд оруулсан бүх өөрчлөлт таны таблет руу автоматаар хуулагдах болно.\n\nЗарим бүртгэл нь таны таблет дээр оруулсан аливаа өөрчлөлтийг мөн автоматаар вэб рүү хуулж болно. Google бүртгэл ийм маягаар ажилладаг."</string>
- <string name="data_usage_auto_sync_on_dialog" product="default" msgid="5004823486046340090">"Таны вэб дээрээс бүртгэлдээ оруулсан бүх өөрчлөлт автоматаар таны утсанд хуулагдах болно.\n\nЗарим бүртгэл нь таны утсан дээрээс оруулсан өөрчлөлтийг вэб рүү автоматаар хуулж болно. Google бүртгэл ингэж ажилладаг."</string>
+ <string name="data_usage_auto_sync_on_dialog" product="tablet" msgid="4935430284683238901">"Таны веб дээр өөрийн бүртгэлд оруулсан бүх өөрчлөлт таны таблет руу автоматаар хуулагдах болно.\n\nЗарим бүртгэл нь таны таблет дээр оруулсан аливаа өөрчлөлтийг мөн автоматаар веб рүү хуулж болно. Google бүртгэл ийм маягаар ажилладаг."</string>
+ <string name="data_usage_auto_sync_on_dialog" product="default" msgid="5004823486046340090">"Таны веб дээрээс бүртгэлдээ оруулсан бүх өөрчлөлт автоматаар таны утсанд хуулагдах болно.\n\nЗарим бүртгэл нь таны утсан дээрээс оруулсан өөрчлөлтийг веб рүү автоматаар хуулж болно. Google бүртгэл ингэж ажилладаг."</string>
<string name="data_usage_auto_sync_off_dialog_title" msgid="7105334544291643305">"Автоматаар өгөгдлийг синк хийхийг унтраах уу?"</string>
<string name="data_usage_auto_sync_off_dialog" msgid="4057984234450947964">"Энэ нь дата болон зайны цэнэг ашиглалтыг хэмнэх боловч та сүүлийн үеийн мэдээллийг цуглуулахын тулд бүртгэл бүрийг гараар синк хийх шаардлагатай болно. Мөн шинэчлэлт хийгдсэн үед танд мэдэгдэл ирэхгүй."</string>
<string name="data_usage_cycle_editor_title" msgid="4967309390043599889">"Ашиглалтын циклийг шинэчлэх огноо"</string>
@@ -2773,7 +2775,7 @@
<string name="vpn_disconnect_confirm" msgid="3505111947735651082">"Энэ VPN-г салгах уу?"</string>
<string name="vpn_disconnect" msgid="4625914562388652486">"Салгах"</string>
<string name="vpn_version" msgid="2006792987077940456">"Хувилбар <xliff:g id="VERSION">%s</xliff:g>"</string>
- <string name="vpn_forget_long" msgid="8457511440635534478">"VPN мартсан"</string>
+ <string name="vpn_forget_long" msgid="8457511440635534478">"VPN-г мартах"</string>
<string name="vpn_replace_vpn_title" msgid="8517436922021598103">"Энэ VPN-г солих уу?"</string>
<string name="vpn_set_vpn_title" msgid="6483554732067951052">"VPN-г тогтмол асаалттайгаар тохируулах уу?"</string>
<string name="vpn_first_always_on_vpn_message" msgid="7050017738816963855">"Энэ тохиргоо асаалттай үед та VPN-г амжилттай холбох хүртэл интернетэд холбогдохгүй"</string>
@@ -2833,12 +2835,12 @@
<item quantity="one">Сертификатад итгэх, эсвэл устгах</item>
</plurals>
<plurals name="ssl_ca_cert_info_message_device_owner" formatted="false" msgid="9046046586061880100">
- <item quantity="other"><xliff:g id="MANAGING_DOMAIN_1">%s</xliff:g> сертификатын эрхийг таны төхөөрөмжид суулгасан бөгөөд үүнд имэйл, апп, аюулгүй вэб хуудас зэрэг таны төхөөрөмжийн сүлжээний үйл ажиллагааг удирдах зөвшөөрлийг олгоно.\n\nЭдгээр сертификатын талаарх дэлгэрэнгүй мэдээлэл авахын тулд админтайгаа холбоо барина уу.</item>
- <item quantity="one"><xliff:g id="MANAGING_DOMAIN_0">%s</xliff:g> сертификатын эрхийг таны төхөөрөмжид суулгасан бөгөөд тэдгээрт имэйл, апп, аюулгүй вэб хуудас зэрэг таны төхөөрөмжийн сүлжээний үйл ажиллагааг удирдах зөвшөөрлийг олгоно.\n\nЭнэ сертификатын талаарх дэлгэрэнгүй мэдээлэл авахын тулд админтайгаа холбоо барина уу.</item>
+ <item quantity="other"><xliff:g id="MANAGING_DOMAIN_1">%s</xliff:g> сертификатын эрхийг таны төхөөрөмжид суулгасан бөгөөд үүнд имэйл, апп, аюулгүй веб хуудас зэрэг таны төхөөрөмжийн сүлжээний үйл ажиллагааг удирдах зөвшөөрлийг олгоно.\n\nЭдгээр сертификатын талаарх дэлгэрэнгүй мэдээлэл авахын тулд админтайгаа холбоо барина уу.</item>
+ <item quantity="one"><xliff:g id="MANAGING_DOMAIN_0">%s</xliff:g> сертификатын эрхийг таны төхөөрөмжид суулгасан бөгөөд тэдгээрт имэйл, апп, аюулгүй веб хуудас зэрэг таны төхөөрөмжийн сүлжээний үйл ажиллагааг удирдах зөвшөөрлийг олгоно.\n\nЭнэ сертификатын талаарх дэлгэрэнгүй мэдээлэл авахын тулд админтайгаа холбоо барина уу.</item>
</plurals>
<plurals name="ssl_ca_cert_info_message" formatted="false" msgid="8271858091418779584">
- <item quantity="other"><xliff:g id="MANAGING_DOMAIN_1">%s</xliff:g> сертификатын эрхийг таны ажлын профайлд суулгасан бөгөөд үүнд имэйл, апп, аюулгүй вэб хуудас зэрэг таны ажлын сүлжээний үйл ажиллагааг удирдах зөвшөөрлийг олгоно.\n\nЭдгээр сертификатын талаарх дэлгэрэнгүй мэдээлэл авахын тулд админтайгаа холбоо барина уу.</item>
- <item quantity="one"><xliff:g id="MANAGING_DOMAIN_0">%s</xliff:g> сертификатын эрхийг таны ажлын профайлд суулгасан бөгөөд тэдгээрт имэйл, апп, аюулгүй вэб хуудас зэрэг таны төхөөрөмжийн сүлжээний үйл ажиллагааг удирдах зөвшөөрлийг олгоно.\n\nЭнэ сертификатын талаарх дэлгэрэнгүй мэдээлэл авахын тулд админтайгаа холбоо барина уу.</item>
+ <item quantity="other"><xliff:g id="MANAGING_DOMAIN_1">%s</xliff:g> сертификатын эрхийг таны ажлын профайлд суулгасан бөгөөд үүнд имэйл, апп, аюулгүй веб хуудас зэрэг таны ажлын сүлжээний үйл ажиллагааг удирдах зөвшөөрлийг олгоно.\n\nЭдгээр сертификатын талаарх дэлгэрэнгүй мэдээлэл авахын тулд админтайгаа холбоо барина уу.</item>
+ <item quantity="one"><xliff:g id="MANAGING_DOMAIN_0">%s</xliff:g> сертификатын эрхийг таны ажлын профайлд суулгасан бөгөөд тэдгээрт имэйл, апп, аюулгүй веб хуудас зэрэг таны төхөөрөмжийн сүлжээний үйл ажиллагааг удирдах зөвшөөрлийг олгоно.\n\nЭнэ сертификатын талаарх дэлгэрэнгүй мэдээлэл авахын тулд админтайгаа холбоо барина уу.</item>
</plurals>
<string name="ssl_ca_cert_warning_message" msgid="8692156828262606685">"Гуравдагч талын этгээд таны имэйл, апп-ууд болон аюулгүй вебсайтууд гэх мэтийг оруулан таны сүлжээний үйл ажиллагааг хянах боломжтой.\n\nТаны төхөөрөмж дээр суулгасан итгэмжлэгдсэн жуухын тусламжтайгаар ингэх боломжтой."</string>
<plurals name="ssl_ca_cert_settings_button" formatted="false" msgid="3227175122066058245">
@@ -2868,8 +2870,8 @@
<string name="user_add_user_item_title" msgid="6835385073795492410">"Хэрэглэгч"</string>
<string name="user_add_profile_item_title" msgid="4932743891449790664">"Хязгаарлагдсан профайл"</string>
<string name="user_add_user_title" msgid="2320897397066676472">"Шинэ хэрэглэгч нэмэх үү?"</string>
- <string name="user_add_user_message_long" msgid="686637203224195465">"Та нэмэлт хэрэглэгч үүсгэх замаар бусад хүмүүстэй энэ төхөөрөмжийг хуваалцаж болно. Хэрэглэгч тус бүр апп, ханын цаас болон бусад зүйлээ өөрчлөх боломжтой хувийн орон зайтай байдаг. Түүнчлэн хэрэглэгч нь бүх хэрэглэгчид нөлөөлөх боломжтой Wi-Fi зэрэг төхөөрөмжийн тохиргоог өөрчлөх боломжтой.\n\nХэрэв та шинэ хэрэглэгч нэмэх бол тухайн хүн хувийн орон зайгаа бүрдүүлэх ёстой.\n\nХэрэглэгч бүр бусад бүх хэрэглэгчийн өмнөөс апп шинэчилж болно. Хүртээмжийн тохиргоо болон үйлчилгээг шинэ хэрэглэгчид шилжүүлэх боломжгүй байж болзошгүй."</string>
- <string name="user_add_user_message_short" msgid="1802594476285458254">"Та шинэ хэрэглэгч нэмбэл тухайн хүн өөрийн профайлыг тохируулах шаардлагатай.\n\nАль ч хэрэглэгч бүх хэрэглэгчийн апп-уудыг шинэчлэх боломжтой."</string>
+ <string name="user_add_user_message_long" msgid="686637203224195465">"Та нэмэлт хэрэглэгч үүсгэх замаар бусад хүнтэй энэ төхөөрөмжийг хуваалцаж болно. Хэрэглэгч тус бүр апп, ханын цаас болон бусад зүйлээ өөрчлөх боломжтой хувийн орон зайтай байдаг. Түүнчлэн хэрэглэгч нь бүх хэрэглэгчид нөлөөлөх боломжтой Wi-Fi зэрэг төхөөрөмжийн тохиргоог өөрчлөх боломжтой.\n\nХэрэв та шинэ хэрэглэгч нэмэх бол тухайн хүн хувийн орон зайгаа тохируулах ёстой.\n\nХэрэглэгч бүр бусад бүх хэрэглэгчийн өмнөөс апп шинэчилж болно. Хандалтын тохиргоо болон үйлчилгээг шинэ хэрэглэгчид шилжүүлэх боломжгүй байж болзошгүй."</string>
+ <string name="user_add_user_message_short" msgid="1802594476285458254">"Та шинэ хэрэглэгч нэмбэл тухайн хүн өөрийн профайлыг тохируулах шаардлагатай.\n\nАль ч хэрэглэгч бүх хэрэглэгчийн аппуудыг шинэчлэх боломжтой."</string>
<string name="user_setup_dialog_title" msgid="6748950002206392396">"Хэрэглэгчийг одоо тохируулах уу?"</string>
<string name="user_setup_dialog_message" msgid="2988559933258353919">"Хэрэглэгч төхөөрөмжийг авч өөрийн профайлыг тохируулах боломжтой эсэхийг шалгана уу"</string>
<string name="user_setup_profile_dialog_message" msgid="7611900802824048526">"Профайлыг одоо тохируулах уу?"</string>
@@ -2886,7 +2888,7 @@
<string name="user_confirm_remove_self_title" msgid="6739480453680217543">"Өөрийгөө устгах уу?"</string>
<string name="user_confirm_remove_title" msgid="1034498514019462084">"Энэ хэрэглэгчийг устгах уу?"</string>
<string name="user_profile_confirm_remove_title" msgid="6138684743385947063">"Энэ профайлыг устгах уу?"</string>
- <string name="work_profile_confirm_remove_title" msgid="3168910958076735800">"Ажлын профайлыг арилгах"</string>
+ <string name="work_profile_confirm_remove_title" msgid="3168910958076735800">"Ажлын профайлыг хасах уу?"</string>
<string name="user_confirm_remove_self_message" product="tablet" msgid="2889456786320157545">"Та энэ таблет дээрх өөрийн зай болон өгөгдлийг алдах болно. Та энэ үйлдлийг буцаах боломжгүй."</string>
<string name="user_confirm_remove_self_message" product="default" msgid="8441729423565705183">"Та энэ утсан дээрх өөрийн зай болон өгөгдлийг алдах болно. Та энэ үйлдлийг буцаах боломжгүй."</string>
<string name="user_confirm_remove_message" msgid="5202150470271756013">"Бүх апп болон дата устах болно."</string>
@@ -2914,7 +2916,7 @@
<string name="apps_with_restrictions_settings_button" msgid="5065896213467171744">"Аппликейшний тохиргоог дэлгэх"</string>
<string name="nfc_payment_settings_title" msgid="5070077706735415291">"Товшоод төлөөрэй"</string>
<string name="nfc_payment_how_it_works" msgid="7607901964687787177">"Энэ хэрхэн ажилладаг вэ"</string>
- <string name="nfc_payment_no_apps" msgid="8844440783395420860">"Дэлгүүрийн тооцоог утсаа ашиглан хийх"</string>
+ <string name="nfc_payment_no_apps" msgid="8844440783395420860">"Дэлгүүрт утсаараа тооцоо хийх"</string>
<string name="nfc_payment_default" msgid="7869273092463612271">"Төлбөр төлөх стандарт апп"</string>
<string name="nfc_payment_default_not_set" msgid="955804193510335338">"Тохируулаагүй"</string>
<string name="nfc_payment_app_and_desc" msgid="102312684211458190">"<xliff:g id="APP">%1$s</xliff:g> - <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
@@ -2923,7 +2925,7 @@
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"Өөр төлбөрийн апп нээлттэй байхаас бусад үед"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"\"Товшиж төлөх\" дээр төлөх:"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"Tерминалаар тооцоо хийж байна"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Төлбөрийн апп-г тохируулаарай. Холбоoгүй тэмдэг бүхий терминалд утасныхаа ард талыг бариарай."</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Төлбөрийн аппыг тохируулаарай. Зайнаас уншуулах тэмдэг бүхий терминалд утасныхаа ар талыг бариарай."</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"Ойлголоо"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"Илүү..."</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"Таны тохируулга болгох уу?"</string>
@@ -3199,7 +3201,7 @@
<string name="zen_mode_restrict_notifications_mute_footer" msgid="3049522809520549054">"Мэдэгдэл ирэх үед таны утас ямар нэгэн дуу гаргахгүй буюу эсвэл чичрэхгүй."</string>
<string name="zen_mode_restrict_notifications_hide" msgid="3296933643539682552">"Мэдэгдэл харагдахгүй бөгөөд дуугарахгүй"</string>
<string name="zen_mode_restrict_notifications_hide_summary" msgid="1449301153755270168">"Та мэдэгдлийг харахгүй бөгөөд сонсохгүй"</string>
- <string name="zen_mode_restrict_notifications_hide_footer" msgid="7617688597593946765">"Таны утас шинэ эсвэл хуучин мэдэгдлийг харуулахгүйгээс гадна чичрэхгүй бөгөөд дуугарахгүй. Утасны үйл ажиллагаа болон статусын чухал шинэчлэлт гарч ирсэн хэвээр байх болно гэдгийг анхаарна уу.\n\nТа Бүү саад бол горимыг унтраасан үедээ дэлгэцийнхээ дээд хэсгээс доош шударч, аваагүй мэдэгдлээ олоорой."</string>
+ <string name="zen_mode_restrict_notifications_hide_footer" msgid="7617688597593946765">"Таны утас шинэ эсвэл хуучин мэдэгдлийг харуулахгүйгээс гадна чичрэхгүй, дуугарахгүй. Утасны үйл ажиллагаа болон статустай холбоотой чухал мэдэгдлүүд харагдсан хэвээр байх болно гэдгийг анхаарна уу.\n\nТа Бүү саад бол горимыг унтраасан үедээ дэлгэцийнхээ дээд хэсгээс доош шударч, аваагүй мэдэгдлээ олоорой."</string>
<string name="zen_mode_restrict_notifications_custom" msgid="3167252482570424133">"Захиалгат"</string>
<string name="zen_mode_restrict_notifications_enable_custom" msgid="6376983315529894440">"Захиалгат тохиргоог идэвхжүүлэх"</string>
<string name="zen_mode_restrict_notifications_disable_custom" msgid="8004212081465043044">"Захиалгат тохиргоог устгах"</string>
@@ -3553,7 +3555,7 @@
<string name="screen_pinning_title" msgid="578020318289781102">"Дэлгэц тогтоох"</string>
<string name="screen_pinning_description" msgid="3814537379086412278">"Энэ тохиргоо асаалттай үед та одоогийн дэлгэцийг тогтоохоо болих хүртлээ үргэлжлүүлэн харуулахын тулд дэлгэц тогтоох онцлогийг ашиглах боломжтой.\n\nДэлгэц тогтоох онцлогийг ашиглахын тулд:\n\n1. Дэлгэц тогтоох онцлог асаалттай эсэхийг шалгах\n\n2. Тоймыг нээх\n\n3. Дэлгэцийн дээд хэсгийн аппын дүрс тэмдгийг товшиж Тогтоох гэснийг товшино уу"</string>
<string name="screen_pinning_unlock_pattern" msgid="1060334707088339444">"Тогтоосныг суллахаас өмнө түгжээ тайлах хээ асуух"</string>
- <string name="screen_pinning_unlock_pin" msgid="1441705536015645023">"Тогтоосныг суллахаас өмнө PIN асуух"</string>
+ <string name="screen_pinning_unlock_pin" msgid="1441705536015645023">"Бэхэлснийг болиулахаасаа өмнө PIN асуух"</string>
<string name="screen_pinning_unlock_password" msgid="1017776884000170841">"Тогтоосныг суллахаас өмнө нууц үг асуух"</string>
<string name="screen_pinning_unlock_none" msgid="9183040569733226911">"Unpinning хийх үед төхөөрөмжийг түгжинэ"</string>
<string name="opening_paragraph_delete_profile_unknown_company" msgid="2350380017136403670">"Энэ ажлын профайлыг удирдагч нь:"</string>
@@ -3584,7 +3586,7 @@
<string name="imei_information_title" msgid="7666097743700170757">"IMEI мэдээлэл"</string>
<string name="imei_information_summary" msgid="716516316022275083">"IMEI хамаарах мэдээлэл"</string>
<string name="slot_number" msgid="785422579177068698">"(Слот<xliff:g id="SLOT_NUM">%1$d</xliff:g>)"</string>
- <string name="launch_by_default" msgid="6106985160202769725">"Стандарт нээх утга"</string>
+ <string name="launch_by_default" msgid="6106985160202769725">"Өгөгдмөлөөр нээх"</string>
<string name="app_launch_domain_links_title" msgid="2987289657348349133">"Холбоосыг нээх"</string>
<string name="app_launch_open_domain_urls_title" msgid="8595126859922391331">"Дэмждэг холбоосыг нээх"</string>
<string name="app_launch_open_domain_urls_summary" msgid="6803029846855502366">"Асуулгүйгээр нээх"</string>
@@ -3667,7 +3669,7 @@
<string name="assistant_security_warning_disagree" msgid="4217490999193100459">"Зөвшөөрөхгүй"</string>
<string name="choose_voice_input_title" msgid="5369311838580756359">"Дууны оролтыг сонгох"</string>
<string name="default_browser_title" msgid="4933937500898014977">"Хөтөч апп"</string>
- <string name="default_browser_title_none" msgid="46431244274747124">"Үндсэн вэб хөтөч байхгүй"</string>
+ <string name="default_browser_title_none" msgid="46431244274747124">"Үндсэн веб хөтөч байхгүй"</string>
<string name="default_phone_title" msgid="6038690021912575740">"Гар утасны апп"</string>
<string name="roles_title" msgid="2825063787446244357">"Үүрэг"</string>
<string name="default_app" msgid="8861276008866619872">"(Үндсэн)"</string>
@@ -3705,13 +3707,13 @@
<string name="high_power_filter_on" msgid="5294209328473386403">"Оновчлоогүй"</string>
<string name="high_power_on" msgid="3573501822510580334">"Оновчлоогүй"</string>
<string name="high_power_off" msgid="5906679734326490426">"Батарей ашиглалтыг оновчилж байна"</string>
- <string name="high_power_system" msgid="739584574711292753">"Тэжээлийн оновчлолыг ашиглах боломжгүй байна"</string>
+ <string name="high_power_system" msgid="739584574711292753">"Батарейн оновчлолыг ашиглах боломжгүй байна"</string>
<string name="high_power_desc" msgid="333756885680362741">"Тэжээлийн оновчлол ашиглах шаардлагагүй. Учир нь тэжээлийг илүү түргэн дуусгаж болох юм."</string>
<string name="high_power_prompt_title" msgid="2805745781720454052">"Аппыг цаана тогтмол ажиллуулахыг зөвшөөрөх үү?"</string>
- <string name="high_power_prompt_body" msgid="8067395096053552289">"<xliff:g id="APP_NAME">%1$s</xliff:g>-г цаана ажиллуулахаар зөвшөөрсөн тохиолдолд батерейны түвшинг багасгах болно. \n\nТа үүнийг дараа нь Тохиргоо, Апп, мэдэгдэл хэсэгт өөрчлөх боломжтой."</string>
+ <string name="high_power_prompt_body" msgid="8067395096053552289">"<xliff:g id="APP_NAME">%1$s</xliff:g>-г байнга цаана ажиллуулахаар зөвшөөрсөн тохиолдолд батарейны түвшинг багасгах болно. \n\nТа үүнийг дараа нь Тохиргоо, Апп, мэдэгдэл хэсэгт өөрчлөх боломжтой."</string>
<string name="battery_summary" msgid="4345690800899981339">"Сүүлд бүрэн цэнэглэснээс хойш <xliff:g id="PERCENTAGE">%1$s</xliff:g>-г ашигласан"</string>
<string name="battery_power_management" msgid="2853925857548647969">"Цэнэгний менежмент"</string>
- <string name="no_battery_summary" msgid="4105932628367471314">"Сүүлийн бүрэн цэнэглэлтээс хойш тэжээл огт ашиглаагүй"</string>
+ <string name="no_battery_summary" msgid="4105932628367471314">"Сүүлийн бүрэн цэнэглэлтээс хойш батарей огт ашиглаагүй"</string>
<string name="app_notification_preferences" msgid="5154466638524523201">"Апп-ийн тохиргоо"</string>
<string name="system_ui_settings" msgid="6751165163665775447">"SystemUI Tuner харуулах"</string>
<string name="additional_permissions" msgid="3142290772324571654">"Нэмэлт зөвшөөрөл"</string>
@@ -3760,7 +3762,7 @@
<string name="assist_access_screenshot_summary" msgid="3010943864000489424">"Туслах апп-ийг дэлгэцийн зурагт хандахыг зөвшөөрөх"</string>
<string name="assist_flash_title" msgid="8852484250748551092">"Дэлгэц гэрэлтэх"</string>
<string name="assist_flash_summary" msgid="6697095786317559129">"Дэлгэц эсвэл дэлгэцийн зургаас текст рүү туслах апп хандах үед дэлгэцийн ирмэг гэрэлтэх"</string>
- <string name="assist_footer" msgid="7030121180457472165">"Туслах апп нь таны харж байгаа дэлгэцийн мэдээлэл дээр тулгуурлан танд туслах боломжтой. Зарим апп нь танд нэгдсэн тусламжийн үйлчилгээ үзүүлэх үүднээс эхлүүлэгч болон дуун оролтыг дэмждэг."</string>
+ <string name="assist_footer" msgid="7030121180457472165">"Туслах апп нь таны харж байгаа дэлгэцийн мэдээлэлд тулгуурлан танд туслах боломжтой. Зарим апп нь танд нэгдсэн тусламжийн үйлчилгээ үзүүлэх үүднээс эхлүүлэгч болон дуун оролтыг дэмждэг."</string>
<string name="average_memory_use" msgid="5333366040118953945">"Санах ой дундаж ашиглалт"</string>
<string name="maximum_memory_use" msgid="6509872438499846077">"Санах ойн хамгийн хэрэглээ"</string>
<string name="memory_usage" msgid="7963253555330830906">"Санах ойн ашиглалт"</string>
@@ -3800,7 +3802,7 @@
<string name="system_alert_window_apps_title" msgid="9188448296493699566">"Апп"</string>
<string name="system_alert_window_access_title" msgid="5187343732185369675">"Бусад апп дээр харуулах"</string>
<string name="permit_draw_overlay" msgid="9039092257052422344">"Бусад апп дээр харуулахыг зөвшөөрөх"</string>
- <string name="allow_overlay_description" msgid="6669524816705082807">"Энэ аппыг ашиглаж буй бусад аппын дээр харуулахыг зөвшөөрнө үү. Ингэснээр таны бусад аппын ашиглалт эсвэл тэдгээрийн харагдац, ажиллагаанд өөрчлөлт орж болзошгүй."</string>
+ <string name="allow_overlay_description" msgid="6669524816705082807">"Энэ аппыг ашиглаж буй бусад апп дээр харуулахыг зөвшөөрнө үү. Ингэснээр таны бусад аппын ашиглалт эсвэл тэдгээрийн харагдац, ажиллагаанд өөрчлөлт орж болзошгүй."</string>
<string name="keywords_vr_listener" msgid="5312633527788917750">"vr виртуал бодит сонсогч стерео туслагч үйлчилгээ"</string>
<string name="keywords_system_alert_window" msgid="3936658600272194599">"системийн дохиоллын цонхны харилцан үйлдлийг бусад апп дээр харуулах"</string>
<string name="overlay_settings" msgid="3325154759946433666">"Бусад апп дээр харуулах"</string>
@@ -4006,7 +4008,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Төхөөрөмж түгжээтэй үед хариу бичих, бусад текстийг мэдэгдлээр ирэх эсэхийг тохируулна уу."</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Өгөгдмөл алдаа шалгагч"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Алдаа шалгагч сонгох"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Зөв бичгийн алдаа шалгагчийг ашиглах"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Зөв бичгийн алдаа шалгагчийг ашиглах"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Сонгоогүй"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(байхгүй)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4099,7 +4101,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Сангийн багтаамжийг нэмэгдүүлэхийн тулд сангийн менежер нөөцөлсөн зураг, видеог таны төхөөрөмжөөс устгах болно."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Зураг, видео устгах"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Сангийн менежер"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Сангийн менежерийг ашиглах"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Хадгалах сангийн менежерийг ашиглах"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Автомат"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Гар ажиллагаатай"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Одоо багтаамжаа нэмэгдүүлнэ үү"</string>
@@ -4156,7 +4158,7 @@
<string name="auto_sync_account_title" msgid="2394463123733529506">"Өгөгдлийг автоматаар синк хийх"</string>
<string name="auto_sync_personal_account_title" msgid="6844465157916100655">"Хувийн өгөгдлийг автоматаар синк хийх"</string>
<string name="auto_sync_work_account_title" msgid="2403222633447522376">"Ажлын өгөгдлийг автоматаар синк хийх"</string>
- <string name="auto_sync_account_summary" msgid="6316230976974033772">"Өгөгдлийг автоматаар дахин боловсруулахыг апп-д зөвшөөрөх"</string>
+ <string name="auto_sync_account_summary" msgid="6316230976974033772">"Өгөгдлийг автоматаар дахин боловсруулахыг аппад зөвшөөрөх"</string>
<string name="account_sync_title" msgid="1570164819114297154">"Бүртгэл синк хийх"</string>
<string name="account_sync_summary_some_on" msgid="1934556869158274053">"<xliff:g id="ID_2">%2$d</xliff:g>-с <xliff:g id="ID_1">%1$d</xliff:g> зүйлд синк асаалттай"</string>
<string name="account_sync_summary_all_on" msgid="3634161204232431700">"Бүх зүйлд синк асаалттай"</string>
@@ -4164,7 +4166,7 @@
<string name="enterprise_privacy_settings" msgid="2777101678653072889">"Удирдсан төхөөрөмжийн мэдээлэл"</string>
<string name="enterprise_privacy_settings_summary_generic" msgid="5557859169062703683">"Таны байгууллагын удирдсан тохиргооны өөрчлөлт"</string>
<string name="enterprise_privacy_settings_summary_with_name" msgid="4884479123751308407">"<xliff:g id="ORGANIZATION_NAME">%s</xliff:g>-н удирдсан тохиргооны өөрчлөлт"</string>
- <string name="enterprise_privacy_header" msgid="2680588186952421841">"Ажлынхаа өгөгдөлд хандах зөвшөөрлийг олгохын тулд таны байгууллага төхөөрөмжийн тохиргоог өөрчилж, програм хангамжийг суулгах шаардлагатай. \n\nДэлгэрэнгүй мэдээлэл авахын тулд байгууллагынхаа админтай холбогдоно уу."</string>
+ <string name="enterprise_privacy_header" msgid="2680588186952421841">"Ажлынхаа өгөгдөлд хандах зөвшөөрлийг олгохын тулд таны байгууллага төхөөрөмжийн тохиргоог өөрчилж, программ хангамжийг суулгах шаардлагатай. \n\nДэлгэрэнгүй мэдээлэл авахын тулд байгууллагынхаа админтай холбогдоно уу."</string>
<string name="enterprise_privacy_exposure_category" msgid="4474576266043636753">"Таны байгууллага харах боломжтой мэдээллийн төрөл"</string>
<string name="enterprise_privacy_exposure_changes_category" msgid="1877045221796512001">"Таны байгууллагын админы хийсэн өөрчлөлт"</string>
<string name="enterprise_privacy_device_access_category" msgid="2967602674816237833">"Таны энэ төхөөрөмж дэх хандалт"</string>
@@ -4470,7 +4472,7 @@
<string name="privacy_dashboard_summary" msgid="7916431309860824945">"Зөвшөөрөл, бүртгэлийн үйл ажиллагаа, хувийн өгөгдөл"</string>
<string name="contextual_card_dismiss_remove" msgid="1750420285615827309">"Хасах"</string>
<string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"Хадгалах"</string>
- <string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"Энэ саналыг устгах уу?"</string>
+ <string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"Энэ саналыг хасах уу?"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"Зөвлөмжийг устгасан"</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"Болих"</string>
<string name="low_storage_summary" msgid="4562224870189133400">"Хадгалах сангийн багтаамж бага байна. <xliff:g id="PERCENTAGE">%1$s</xliff:g>-г ашигласан - <xliff:g id="FREE_SPACE">%2$s</xliff:g> сул"</string>
diff --git a/tests/CarDeveloperOptions/res/values-mr/arrays.xml b/tests/CarDeveloperOptions/res/values-mr/arrays.xml
index 66a7810..55fda50 100644
--- a/tests/CarDeveloperOptions/res/values-mr/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-mr/arrays.xml
@@ -38,7 +38,16 @@
<item msgid="5827960506924849753">"10 मिनिटे"</item>
<item msgid="6677424950124253938">"30 मिनिटे"</item>
</string-array>
- <!-- no translation found for dream_timeout_entries:7 (8271452751594598661) -->
+ <string-array name="dream_timeout_entries">
+ <item msgid="6487043225269853023">"कधीही नाही"</item>
+ <item msgid="2517785806387977252">"15 सेकंद"</item>
+ <item msgid="6347954399441173672">"३० सेकंद"</item>
+ <item msgid="4858305253279921789">"एक मिनिट"</item>
+ <item msgid="8109273437140044073">"दोन मिनिटे"</item>
+ <item msgid="2788593551142462622">"5 मिनिटे"</item>
+ <item msgid="8012672183888404961">"10 मिनिटे"</item>
+ <item msgid="8271452751594598661">"३० मिनिटे"</item>
+ </string-array>
<string-array name="lock_after_timeout_entries">
<item msgid="2232921187970351881">"तत्काळ"</item>
<item msgid="2038544972632026612">"5 सेकंद"</item>
@@ -50,17 +59,47 @@
<item msgid="811192536981678974">"10 मिनिटे"</item>
<item msgid="7258394417241706272">"30 मिनिटे"</item>
</string-array>
- <!-- no translation found for entries_font_size:0 (2340391964816059553) -->
- <!-- no translation found for entries_font_size:0 (6490061470416867723) -->
- <!-- no translation found for entries_font_size:2 (1714184661981538355) -->
- <!-- no translation found for entries_font_size:2 (1678068858001018666) -->
- <!-- no translation found for wifi_status:3 (5848277343965362748) -->
- <!-- no translation found for wifi_status_with_ssid:1 (6816207058895999545) -->
- <!-- no translation found for wifi_status_with_ssid:3 (7547609081339573756) -->
- <!-- no translation found for wifi_status_with_ssid:4 (5145158315060185414) -->
+ <string-array name="entries_font_size">
+ <item msgid="2340391964816059553">"लहान"</item>
+ <item msgid="591935967183159581">"डीफॉल्ट"</item>
+ <item msgid="1714184661981538355">"मोठा"</item>
+ <item msgid="6195563047686707484">"सर्वात मोठा"</item>
+ </string-array>
+ <string-array name="wifi_status">
+ <item msgid="1304883790721412351"></item>
+ <item msgid="4157625910392775808">"स्कॅन करत आहे…"</item>
+ <item msgid="5597394826455877834">"कनेक्ट करत आहे..."</item>
+ <item msgid="5848277343965362748">"ऑथेंटिकेट करत आहे…"</item>
+ <item msgid="3391238031431440676">"IP पत्ता मिळवत आहे…"</item>
+ <item msgid="5257597310494000224">"कनेक्ट केलेले आहे"</item>
+ <item msgid="8472497592913050396">"निलंबित"</item>
+ <item msgid="1228072488815999109">"डिस्कनेक्ट करत आहे..."</item>
+ <item msgid="7253087004422991731">"डिस्कनेक्ट केले"</item>
+ <item msgid="4169850917304751227">"अयशस्वी"</item>
+ <item msgid="6266658166690831131">"अवरोधित"</item>
+ <item msgid="4517230805854909775">"तात्पुरते खराब कनेक्शन टाळत आहे"</item>
+ </string-array>
+ <string-array name="wifi_status_with_ssid">
+ <item msgid="4853670665485437464"></item>
+ <item msgid="6816207058895999545">"स्कॅन करत आहे…"</item>
+ <item msgid="8058143476674427024">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> वर कनेक्ट करत आहे…"</item>
+ <item msgid="7547609081339573756">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> सह ऑथेंटिकेट करत आहे…"</item>
+ <item msgid="5145158315060185414">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> वरून आयपी अॅड्रेस मिळवत आहे…"</item>
+ <item msgid="3283243151651124831">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> वर कनेक्ट केले आहे"</item>
+ <item msgid="6600156231416890902">"निलंबित"</item>
+ <item msgid="4133290864821295785">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> वरून डिस्कनेक्ट करत आहे…"</item>
+ <item msgid="3980154971187953257">"डिस्कनेक्ट केले"</item>
+ <item msgid="2847316776634969068">"अयशस्वी"</item>
+ <item msgid="4390990424746035383">"अवरोधित"</item>
+ <item msgid="3618248791367063949">"तात्पुरते खराब कनेक्शन टाळत आहे"</item>
+ </string-array>
<!-- no translation found for wifi_tether_security:0 (5586343370515598801) -->
<!-- no translation found for wifi_tether_security:1 (6136336549994615745) -->
- <!-- no translation found for wifi_p2p_wps_setup:0 (5390235347963255303) -->
+ <string-array name="wifi_p2p_wps_setup">
+ <item msgid="5390235347963255303">"पुश बटण"</item>
+ <item msgid="7401896200768713930">"पीअर डिव्हाइसवरील पिन"</item>
+ <item msgid="4526848028011846710">"या डिव्हाइसवरील पिन"</item>
+ </string-array>
<string-array name="wifi_p2p_status">
<item msgid="8741947238021758201">"कनेक्ट केलेले आहे"</item>
<item msgid="983792611851499732">"आमंत्रित केले"</item>
@@ -82,8 +121,13 @@
<item msgid="1644506614010085798">"४"</item>
<item msgid="3132506679404897150">"५"</item>
</string-array>
- <!-- no translation found for wifi_signal:1 (7882129634982603782) -->
- <!-- no translation found for wifi_signal:4 (999948812884919584) -->
+ <string-array name="wifi_signal">
+ <item msgid="1709949377823900951">"खराब"</item>
+ <item msgid="7882129634982603782">"वाईट"</item>
+ <item msgid="6457357501905996224">"चांगले"</item>
+ <item msgid="405271628162918841">"उत्तम"</item>
+ <item msgid="999948812884919584">"उत्कृष्ट"</item>
+ </string-array>
<string-array name="data_usage_data_range">
<item msgid="8986775481492954015">"अंतिम 30 दिवस"</item>
<item msgid="3211287705232736964">"वापर चक्र सेट करा..."</item>
@@ -119,7 +163,10 @@
<item msgid="7330627471456865502">"MSCHAPV2"</item>
<item msgid="6255179395132581882">"GTC"</item>
</string-array>
- <!-- no translation found for wifi_ip_settings:1 (4377002609760712163) -->
+ <string-array name="wifi_ip_settings">
+ <item msgid="2717196390555072244">"DHCP"</item>
+ <item msgid="4377002609760712163">"स्थिर"</item>
+ </string-array>
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"काहीही नाही"</item>
<item msgid="1464741437353223198">"व्यक्तिचलित"</item>
@@ -234,16 +281,78 @@
<item msgid="2633626056029384366">"बनावट स्थान"</item>
<item msgid="8356842191824684631">"वाचण्याचा स्टोरेज"</item>
<item msgid="5671906070163291500">"लिहिण्याचा स्टोरेज"</item>
- <item msgid="2791955098549340418">"स्क्रीन चालू करा"</item>
+ <item msgid="2791955098549340418">"स्क्रीन सुरू करा"</item>
<item msgid="5599435119609178367">"खाती मिळवा"</item>
<item msgid="1165623660533024666">"पार्श्वभूमीमध्ये चालवा"</item>
<item msgid="6423861043647911030">"प्रवेशयोग्यता आकारमान"</item>
</string-array>
- <!-- no translation found for app_ops_labels:3 (7836406246005211990) -->
- <!-- no translation found for app_ops_labels:4 (3951439024549922598) -->
- <!-- no translation found for app_ops_labels:8 (3597797992398484655) -->
- <!-- no translation found for app_ops_labels:20 (3037159047591081136) -->
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"स्थान"</item>
+ <item msgid="6656077694190491067">"स्थान"</item>
+ <item msgid="8790228218278477369">"स्थान"</item>
+ <item msgid="7836406246005211990">"व्हायब्रेट"</item>
+ <item msgid="3951439024549922598">"संपर्क वाचा"</item>
+ <item msgid="8802152411647068">"संपर्क सुधारित करा"</item>
+ <item msgid="229544934599698735">"कॉल लॉग वाचा"</item>
+ <item msgid="7396102294405899613">"कॉल लॉग सुधारित करा"</item>
+ <item msgid="3597797992398484655">"कॅलेंडर वाचा"</item>
+ <item msgid="2705975774250907343">"कॅलेंडर सुधारित करा"</item>
+ <item msgid="4668747371441932697">"स्थान"</item>
+ <item msgid="1487578921720243646">"पोस्ट सूचना"</item>
+ <item msgid="4636080349724146638">"स्थान"</item>
+ <item msgid="673510900286463926">"फोनवर कॉल करा"</item>
+ <item msgid="542083422784609790">"SMS/MMS वाचा"</item>
+ <item msgid="1033780373029588436">"SMS/MMS लिहा"</item>
+ <item msgid="5647111115517787488">"SMS/MMS प्राप्त करा"</item>
+ <item msgid="8591105601108455893">"SMS/MMS प्राप्त करा"</item>
+ <item msgid="7730995008517841903">"SMS/MMS प्राप्त करा"</item>
+ <item msgid="2613033109026626086">"SMS/MMS प्राप्त करा"</item>
+ <item msgid="3037159047591081136">"एसएमएस/MMS पाठवा"</item>
+ <item msgid="4726682243833913568">"SMS/MMS वाचा"</item>
+ <item msgid="6555678522277865572">"SMS/MMS लिहा"</item>
+ <item msgid="6981734935578130884">"सेटिंग्ज सुधारित करा"</item>
+ <item msgid="8705854389991425629">"शीर्षस्थानी रेखांकित करा"</item>
+ <item msgid="5861356020344153651">"सूचना अॅक्सेस करा"</item>
+ <item msgid="78432174621628659">"कॅमेरा"</item>
+ <item msgid="3986116419882154794">"ऑडिओ रेकॉर्ड करा"</item>
+ <item msgid="4516840825756409490">"ऑडिओ प्ले करा"</item>
+ <item msgid="6811712502798183957">"क्लिपबोर्ड वाचा"</item>
+ <item msgid="2780369012602289114">"क्लिपबोर्ड सुधारित करा"</item>
+ <item msgid="2331359440170850868">"मीडिया बटणे"</item>
+ <item msgid="6133599737122751231">"ऑडिओ फोकस"</item>
+ <item msgid="6844485713404805301">"प्रमुख व्हॉल्यूम"</item>
+ <item msgid="1600379420669104929">"आवाज व्हॉल्यूम"</item>
+ <item msgid="6296768210470214866">"रिंग व्हॉल्यूम"</item>
+ <item msgid="510690696071629241">"मीडिया व्हॉल्यूम"</item>
+ <item msgid="406861638631430109">"अलार्म व्हॉल्यूम"</item>
+ <item msgid="4715864795872233884">"सूचना व्हॉल्यूम"</item>
+ <item msgid="2311478519251301183">"ब्लूटूथ व्हॉल्यूम"</item>
+ <item msgid="5133991377896747027">"सक्रिय ठेवा"</item>
+ <item msgid="2464189519136248621">"स्थान"</item>
+ <item msgid="2062677934050803037">"स्थान"</item>
+ <item msgid="1735171933192715957">"वापर आकडेवारी मिळवा"</item>
+ <item msgid="1014093788778383554">"मायक्रोफोन निःशब्द/सशब्द करा"</item>
+ <item msgid="4199297950608622850">"टोस्ट दर्शवा"</item>
+ <item msgid="2527962435313398821">"प्रोजेक्ट मीडिया"</item>
+ <item msgid="5117506254221861929">"VPN सक्रिय करा"</item>
+ <item msgid="8291198322681891160">"लिहिण्याचा वॉलपेपर"</item>
+ <item msgid="7106921284621230961">"सहाय्य रचना"</item>
+ <item msgid="4496533640894624799">"सहाय्य स्क्रीनशॉट"</item>
+ <item msgid="2598847264853993611">"फोन स्थिती वाचा"</item>
+ <item msgid="9215610846802973353">"व्हॉइसमेल जोडा"</item>
+ <item msgid="9186411956086478261">"सिप वापरा"</item>
+ <item msgid="6884763100104539558">"केल्या जाणार्या कॉलवर प्रक्रिया करत आहे"</item>
+ <item msgid="125513972170580692">"फिंगरप्रिंट"</item>
+ <item msgid="2556071024281275619">"शरीर सेन्सर"</item>
+ <item msgid="617168514928339387">"सेल ब्रॉडकास्ट वाचा"</item>
+ <item msgid="7134693570516523585">"बनावट स्थान"</item>
+ <item msgid="7224489175375229399">"वाचण्याचा स्टोरेज"</item>
+ <item msgid="8472735063903258202">"लिहिण्याचा स्टोरेज"</item>
+ <item msgid="4069276819909595110">"स्क्रीन सुरू करा"</item>
+ <item msgid="1228338896751121025">"खाती मिळवा"</item>
+ <item msgid="3181581793459233672">"पार्श्वभूमीमध्ये चालवा"</item>
+ <item msgid="2340936043025374076">"प्रवेशयोग्यता आकारमान"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"लघु"</item>
<item msgid="4816511817309094890">"मध्यम"</item>
@@ -260,7 +369,13 @@
<item msgid="4627069151979553527">"Cursive"</item>
<item msgid="6896773537705206194">"Small capitals"</item>
</string-array>
- <!-- no translation found for captioning_font_size_selector_titles:3 (2784236342175159295) -->
+ <string-array name="captioning_font_size_selector_titles">
+ <item msgid="1680223634161592855">"खूप लहान"</item>
+ <item msgid="5091603983404027034">"लहान"</item>
+ <item msgid="176844712416932112">"सामान्य"</item>
+ <item msgid="2784236342175159295">"मोठा"</item>
+ <item msgid="218913203203160606">"खूप मोठा"</item>
+ </string-array>
<string-array name="captioning_edge_type_selector_titles">
<item msgid="3865198759294188069">"डीफॉल्ट"</item>
<item msgid="6488643537808152001">"काहीही नाही"</item>
@@ -275,7 +390,14 @@
<item msgid="1874668269931014581">"75%"</item>
<item msgid="6462911487571123954">"१००%"</item>
</string-array>
- <!-- no translation found for captioning_preset_selector_titles:2 (5891360837786277638) -->
+ <string-array name="captioning_preset_selector_titles">
+ <item msgid="326819345272910536">"अॅप डीफॉल्ट वापरा"</item>
+ <item msgid="8611890312638868524">"काळ्यावर पांढरे"</item>
+ <item msgid="5891360837786277638">"पांढर्यावर काळे"</item>
+ <item msgid="2798457065945456853">"काळ्यावर पिवळे"</item>
+ <item msgid="5799049811524553967">"निळ्यावर पिवळे"</item>
+ <item msgid="3673930830658169860">"कस्टम"</item>
+ </string-array>
<string-array name="vpn_types_long">
<item msgid="6566768880689730097">"PPTP VPN"</item>
<item msgid="1349760781118368659">"पूर्व-शेअर की सह L2TP/IPSec VPN"</item>
@@ -288,15 +410,32 @@
<item msgid="2958623927055120839">"काहीही नाही"</item>
<item msgid="1157046369795346308">"व्यक्तिचलित"</item>
</string-array>
- <!-- no translation found for vpn_states:4 (9135049670787351881) -->
+ <string-array name="vpn_states">
+ <item msgid="5408915841694583740">"डिस्कनेक्ट केले"</item>
+ <item msgid="8754480102834556765">"प्रारंभ करत आहे…"</item>
+ <item msgid="3351334355574270250">"कनेक्ट करत आहे..."</item>
+ <item msgid="8303882153995748352">"कनेक्ट केलेले आहे"</item>
+ <item msgid="9135049670787351881">"टाइमआउट"</item>
+ <item msgid="2124868417182583926">"अयशस्वी"</item>
+ </string-array>
<string-array name="security_settings_premium_sms_values">
<item msgid="1164265643455394443">"विचारा"</item>
<item msgid="7718817231348607934">"कधीही अनुमती देऊ नका"</item>
<item msgid="8184570120217958741">"नेहमी अनुमती द्या"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"सामान्य"</item>
+ <item msgid="5101233285497327432">"मध्यम"</item>
+ <item msgid="1555861583162930714">"कमी"</item>
+ <item msgid="1719683776264798117">"जटिल"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"सामान्य"</item>
+ <item msgid="6107138933849816768">"मध्यम"</item>
+ <item msgid="182695359839047859">"कमी"</item>
+ <item msgid="8577246509202964244">"गंभीर"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"कायम"</item>
<item msgid="167418068739176448">"आघाडीच्या ॲक्टिव्हिटी"</item>
@@ -309,9 +448,9 @@
<item msgid="6610439017684111046">"प्राप्तकर्ता"</item>
<item msgid="7367606086319921117">"होम"</item>
<item msgid="3344660712396741826">"शेवटच्या ॲक्टिव्हिटी"</item>
- <item msgid="5006559348883303865">"कॅशे केलेली (ॲक्टिव्हिटी)"</item>
- <item msgid="8633480732468137525">"कॅशे केलेला (ॲक्टिव्हिटी क्लायंट)"</item>
- <item msgid="6248998242443333892">"कॅश केलेला (रिक्त)"</item>
+ <item msgid="5006559348883303865">"कॅशे केलेली (ॲक्टिव्हिटी)"</item>
+ <item msgid="8633480732468137525">"कॅशे केलेला (ॲक्टिव्हिटी क्लायंट)"</item>
+ <item msgid="6248998242443333892">"कॅशे केलेला (रिक्त)"</item>
</string-array>
<string-array name="color_picker">
<item msgid="3151827842194201728">"हिरवट निळा"</item>
diff --git a/tests/CarDeveloperOptions/res/values-mr/strings.xml b/tests/CarDeveloperOptions/res/values-mr/strings.xml
index cbf29cb..f39b0d3 100644
--- a/tests/CarDeveloperOptions/res/values-mr/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-mr/strings.xml
@@ -23,11 +23,11 @@
<string name="deny" msgid="3998166389989144025">"नकार द्या"</string>
<string name="device_info_default" msgid="1548919563979154348">"अज्ञात"</string>
<plurals name="show_dev_countdown" formatted="false" msgid="3953785659137161981">
- <item quantity="other">तुम्ही आता विकासक बनण्यापासून <xliff:g id="STEP_COUNT_1">%1$d</xliff:g> चरणे दूर आहात.</item>
- <item quantity="one">तुम्ही आता विकासक बनण्यापासून <xliff:g id="STEP_COUNT_0">%1$d</xliff:g> चरण दूर आहात.</item>
+ <item quantity="other">तुम्ही आता डेव्हलपर बनण्यापासून <xliff:g id="STEP_COUNT_1">%1$d</xliff:g> पायऱ्या दूर आहात.</item>
+ <item quantity="one">तुम्ही आता डेव्हलपर बनण्यापासून <xliff:g id="STEP_COUNT_0">%1$d</xliff:g> पायरी दूर आहात.</item>
</plurals>
- <string name="show_dev_on" msgid="9075712234786224065">"आता तुम्ही एक विकासक आहात!"</string>
- <string name="show_dev_already" msgid="7665948832405148689">"आवश्यकता नाही, तुम्ही आधीपासून एक विकासक आहात."</string>
+ <string name="show_dev_on" msgid="9075712234786224065">"आता तुम्ही एक डेव्हलपर आहात!"</string>
+ <string name="show_dev_already" msgid="7665948832405148689">"आवश्यकता नाही, तुम्ही आधीपासून एक डेव्हलपर आहात."</string>
<string name="dev_settings_disabled_warning" msgid="3198732189395396721">"कृपया सर्वात आधी डेव्हलपर पर्याय सुरू करा."</string>
<string name="header_category_wireless_networks" msgid="8968405993937795898">"वायरलेस आणि नेटवर्क"</string>
<string name="header_category_system" msgid="4045988717359334410">"सिस्टम"</string>
@@ -38,7 +38,7 @@
<string name="wfc_provisioned_switch_string" msgid="5446697646596639516">"वायफाय कॉलिंगची तरतूद केली"</string>
<string name="eab_provisioned_switch_string" msgid="3921103790584572430">"EAB/उपस्थितीची तरतूद आहे"</string>
<string name="cbrs_data_switch_string" msgid="9120919504831536183">"Cbrs डेटा"</string>
- <string name="dsds_switch_string" msgid="2606482598327613264">"DSDS सुरु करा"</string>
+ <string name="dsds_switch_string" msgid="2606482598327613264">"DSDS सुरू करा"</string>
<string name="dsds_dialog_title" msgid="3279829304547130217">"डिव्हाइस रीस्टार्ट करायचे का?"</string>
<string name="dsds_dialog_message" msgid="571197076181853304">"ही सेटिंग बदलण्यासाठी तुम्ही तुमचे डिव्हाइस रीस्टार्ट करणे आवश्यक आहे."</string>
<string name="dsds_dialog_confirm" msgid="4858826679303698086">"रीस्टार्ट"</string>
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"स्क्रीन वरील मजकूर आणखी लहान किंवा आणखी मोठा करा."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"आणखी लहान करा"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"आणखी मोठे करा"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"नमुना मजकूर"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Oz चा अद्भूत जादूगार"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"अध्याय 11: Oz चे अद्भूत पाचूंचे शहर"</string>
@@ -124,15 +123,15 @@
<string name="bluetooth_device" msgid="3170974107364990008">"नाव नसलेले ब्लूटूथ डिव्हाइस"</string>
<string name="progress_scanning" msgid="633923400401041181">"शोधत आहे"</string>
<string name="bluetooth_no_devices_found" msgid="4396050022213494322">"जवळपास ब्लूटूथ डिव्हाइस आढळली नाहीत."</string>
- <string name="bluetooth_notif_ticker" msgid="8398481099943141819">"ब्लूटूथ पेअरींग विनंती"</string>
- <string name="bluetooth_notif_title" msgid="5090288898529286011">"पेअरींग विनंती"</string>
+ <string name="bluetooth_notif_ticker" msgid="8398481099943141819">"ब्लूटूथ पेअरिंग विनंती"</string>
+ <string name="bluetooth_notif_title" msgid="5090288898529286011">"पेअरिंग विनंती"</string>
<string name="bluetooth_notif_message" msgid="6612367890895077938">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> सह जोडण्यासाठी टॅप करा."</string>
- <string name="bluetooth_show_received_files" msgid="5060846395852236652">"मिळालेल्या फायली"</string>
- <string name="bluetooth_show_files_received_via_bluetooth" msgid="1699095577431389560">"फायली ब्लूटूथद्वारे मिळाल्या आहेत"</string>
+ <string name="bluetooth_show_received_files" msgid="5060846395852236652">"मिळालेल्या फाइल"</string>
+ <string name="bluetooth_show_files_received_via_bluetooth" msgid="1699095577431389560">"फाइल ब्लूटूथद्वारे मिळाल्या आहेत"</string>
<string name="device_picker" msgid="8345264486071697705">"ब्लूटूथ डिव्हाइस निवडा"</string>
- <string name="bluetooth_ask_enablement" msgid="8716802066127746062">"<xliff:g id="APP_NAME">%1$s</xliff:g> ब्लूटूथ चालू करू इच्छितो"</string>
+ <string name="bluetooth_ask_enablement" msgid="8716802066127746062">"<xliff:g id="APP_NAME">%1$s</xliff:g> ब्लूटूथ सुरू करू इच्छितो"</string>
<string name="bluetooth_ask_disablement" msgid="7125319551097350783">"<xliff:g id="APP_NAME">%1$s</xliff:g> ब्लूटूथ बंद करू इच्छितो"</string>
- <string name="bluetooth_ask_enablement_no_name" msgid="6105893027185475233">"अॅप ब्लूटूथ चालू करु इच्छित आहे"</string>
+ <string name="bluetooth_ask_enablement_no_name" msgid="6105893027185475233">"अॅप ब्लूटूथ सुरू करु इच्छित आहे"</string>
<string name="bluetooth_ask_disablement_no_name" msgid="8648888502291681310">"अॅप ब्लूटूथ बंद करू इच्छितो"</string>
<string name="bluetooth_ask_discovery" product="tablet" msgid="6871595755186170115">"<xliff:g id="APP_NAME">%1$s</xliff:g> तुमचा टॅबलेट अन्य ब्लूटूथ डीव्हाइससाठी <xliff:g id="TIMEOUT">%2$d</xliff:g> सेकंदांसाठी दृश्यमान करू इच्छितो."</string>
<string name="bluetooth_ask_discovery" product="default" msgid="3388041479101348095">"<xliff:g id="APP_NAME">%1$s</xliff:g> तुमचा फोन अन्य ब्लूटूथ डीव्हाइससाठी <xliff:g id="TIMEOUT">%2$d</xliff:g> सेकंदांसाठी दृश्यमान करू इच्छितो."</string>
@@ -142,15 +141,15 @@
<string name="bluetooth_ask_lasting_discovery" product="default" msgid="7796723473397303412">"<xliff:g id="APP_NAME">%1$s</xliff:g> तुमचा फोन इतर ब्लूटूथ डीव्हाइससाठी दृश्यमान करू इच्छित आहे. तुम्ही ब्लूटूथ सेटिंग्जमध्ये नंतर हे बदलू शकता."</string>
<string name="bluetooth_ask_lasting_discovery_no_name" product="tablet" msgid="5961921359655434504">"अॅप तुमचा टॅबलेट इतर ब्लूटूथ डीव्हाइससाठी दृश्यमान करू इच्छित आहे. तुम्ही ब्लूटूथ सेटिंग्जमध्ये नंतर हे बदलू शकता."</string>
<string name="bluetooth_ask_lasting_discovery_no_name" product="default" msgid="3585910858758443872">"अॅप तुमचा फोन इतर ब्लूटूथ डीव्हाइससाठी दृश्यमान करू इच्छित आहे. तुम्ही ब्लूटूथ सेटिंग्जमध्ये नंतर हे बदलू शकता."</string>
- <string name="bluetooth_ask_enablement_and_discovery" product="tablet" msgid="5676466923424941153">"<xliff:g id="APP_NAME">%1$s</xliff:g> ब्लूटूथ चालू करू इच्छितो आणि <xliff:g id="TIMEOUT">%2$d</xliff:g> सेकंदांसाठी तुमचा टॅबलेट अन्य डीव्हाइससाठी दृश्यमान करू इच्छितो."</string>
- <string name="bluetooth_ask_enablement_and_discovery" product="default" msgid="507088376226791063">"<xliff:g id="APP_NAME">%1$s</xliff:g> ब्लूटूथ चालू करू इच्छितो आणि <xliff:g id="TIMEOUT">%2$d</xliff:g> सेकंदांसाठी तुमचा फोन अन्य डीव्हाइससाठी दृश्यमान करू इच्छितो."</string>
- <string name="bluetooth_ask_enablement_and_discovery_no_name" product="tablet" msgid="1164681893121736219">"अॅप ब्लूटूथ चालू करु इच्छित आहे आणि इतर डीव्हाइससाठी <xliff:g id="TIMEOUT">%1$d</xliff:g> सेकंदांकरिता तुमचा टॅबलेट दृश्यमान बनवू इच्छित आहे."</string>
- <string name="bluetooth_ask_enablement_and_discovery_no_name" product="default" msgid="2542247690119921188">"अॅप ब्लूटूथ चालू करु इच्छित आहे आणि इतर डीव्हाइससाठी <xliff:g id="TIMEOUT">%1$d</xliff:g> सेकंदांकरिता तुमचा फोन दृश्यमान बनवू इच्छित आहे."</string>
- <string name="bluetooth_ask_enablement_and_lasting_discovery" product="tablet" msgid="7118362102769177771">"<xliff:g id="APP_NAME">%1$s</xliff:g> ब्लूटूथ चालू करु इच्छित आहे आणि तुमचा टॅबलेट इतर डीव्हाइससाठी दृश्यमान करू इच्छित आहे. तुम्ही ब्लूटूथ सेटिंग्जमध्ये नंतर हे बदलू शकता."</string>
- <string name="bluetooth_ask_enablement_and_lasting_discovery" product="default" msgid="2577488464813970727">"<xliff:g id="APP_NAME">%1$s</xliff:g> अॅप ब्लूटूथ चालू करु इच्छित आहे आणि तुमचा फोन इतर डीव्हाइससाठी दृश्यमान करू इच्छित आहे. तुम्ही ब्लूटूथ सेटिंग्जमध्ये नंतर हे बदलू शकता."</string>
- <string name="bluetooth_ask_enablement_and_lasting_discovery_no_name" product="tablet" msgid="7083038132794842691">"अॅप ब्लूटूथ चालू करु इच्छित आहे आणि तुमचा टॅबलेट इतर डीव्हाइससाठी दृश्यमान करू इच्छित आहे. तुम्ही ब्लूटूथ सेटिंग्जमध्ये नंतर हे बदलू शकता."</string>
- <string name="bluetooth_ask_enablement_and_lasting_discovery_no_name" product="default" msgid="3541668604020109525">"अॅप ब्लूटूथ चालू करु इच्छित आहे आणि तुमचा फोन इतर डीव्हाइससाठी दृश्यमान करू इच्छित आहे. तुम्ही ब्लूटूथ सेटिंग्जमध्ये नंतर हे बदलू शकता."</string>
- <string name="bluetooth_turning_on" msgid="6935183036449748493">"ब्लूटूथ चालू करत आहे…"</string>
+ <string name="bluetooth_ask_enablement_and_discovery" product="tablet" msgid="5676466923424941153">"<xliff:g id="APP_NAME">%1$s</xliff:g> ब्लूटूथ सुरू करू इच्छितो आणि <xliff:g id="TIMEOUT">%2$d</xliff:g> सेकंदांसाठी तुमचा टॅबलेट अन्य डीव्हाइससाठी दृश्यमान करू इच्छितो."</string>
+ <string name="bluetooth_ask_enablement_and_discovery" product="default" msgid="507088376226791063">"<xliff:g id="APP_NAME">%1$s</xliff:g> ब्लूटूथ सुरू करू इच्छितो आणि <xliff:g id="TIMEOUT">%2$d</xliff:g> सेकंदांसाठी तुमचा फोन अन्य डीव्हाइससाठी दृश्यमान करू इच्छितो."</string>
+ <string name="bluetooth_ask_enablement_and_discovery_no_name" product="tablet" msgid="1164681893121736219">"अॅप ब्लूटूथ सुरू करु इच्छित आहे आणि इतर डीव्हाइससाठी <xliff:g id="TIMEOUT">%1$d</xliff:g> सेकंदांकरिता तुमचा टॅबलेट दृश्यमान बनवू इच्छित आहे."</string>
+ <string name="bluetooth_ask_enablement_and_discovery_no_name" product="default" msgid="2542247690119921188">"अॅप ब्लूटूथ सुरू करु इच्छित आहे आणि इतर डीव्हाइससाठी <xliff:g id="TIMEOUT">%1$d</xliff:g> सेकंदांकरिता तुमचा फोन दृश्यमान बनवू इच्छित आहे."</string>
+ <string name="bluetooth_ask_enablement_and_lasting_discovery" product="tablet" msgid="7118362102769177771">"<xliff:g id="APP_NAME">%1$s</xliff:g> ब्लूटूथ सुरू करु इच्छित आहे आणि तुमचा टॅबलेट इतर डीव्हाइससाठी दृश्यमान करू इच्छित आहे. तुम्ही ब्लूटूथ सेटिंग्जमध्ये नंतर हे बदलू शकता."</string>
+ <string name="bluetooth_ask_enablement_and_lasting_discovery" product="default" msgid="2577488464813970727">"<xliff:g id="APP_NAME">%1$s</xliff:g> अॅप ब्लूटूथ सुरू करु इच्छित आहे आणि तुमचा फोन इतर डीव्हाइससाठी दृश्यमान करू इच्छित आहे. तुम्ही ब्लूटूथ सेटिंग्जमध्ये नंतर हे बदलू शकता."</string>
+ <string name="bluetooth_ask_enablement_and_lasting_discovery_no_name" product="tablet" msgid="7083038132794842691">"अॅप ब्लूटूथ सुरू करु इच्छित आहे आणि तुमचा टॅबलेट इतर डीव्हाइससाठी दृश्यमान करू इच्छित आहे. तुम्ही ब्लूटूथ सेटिंग्जमध्ये नंतर हे बदलू शकता."</string>
+ <string name="bluetooth_ask_enablement_and_lasting_discovery_no_name" product="default" msgid="3541668604020109525">"अॅप ब्लूटूथ सुरू करु इच्छित आहे आणि तुमचा फोन इतर डीव्हाइससाठी दृश्यमान करू इच्छित आहे. तुम्ही ब्लूटूथ सेटिंग्जमध्ये नंतर हे बदलू शकता."</string>
+ <string name="bluetooth_turning_on" msgid="6935183036449748493">"ब्लूटूथ सुरू करत आहे…"</string>
<string name="bluetooth_turning_off" msgid="9214026723789756620">"ब्लूटूथ बंद करत आहे…"</string>
<string name="bluetooth_connection_permission_request" msgid="2382506002340643398">"ब्लूटूथ कनेक्शन विनंती"</string>
<string name="bluetooth_connection_notif_message" msgid="6824654400460127108">"\"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>\" शी कनेक्ट करण्यासाठी टॅप करा."</string>
@@ -164,7 +163,7 @@
<string name="bluetooth_sap_request" msgid="6318039677671263261">"सिम प्रवेश विनंती"</string>
<string name="bluetooth_sap_acceptance_dialog_text" msgid="1909352413109340355">"<xliff:g id="DEVICE_NAME_0">%1$s</xliff:g> आपल्या सिम कार्डवर प्रवेश करू इच्छित आहे. सिम कार्डवर प्रवेश मंजूर केल्यामुळे कनेक्शनच्या कालावधीसाठी आपल्या डिव्हाइसवरील डेटा कनेक्टिव्हिटी अक्षम होईल. <xliff:g id="DEVICE_NAME_1">%2$s?</xliff:g> वर प्रवेश द्या"</string>
<string name="bluetooth_device_name_summary" msgid="8661066392056595005">"इतर डिव्हाइसना \'<xliff:g id="DEVICE_NAME">^1</xliff:g>\' म्हणून दिसत आहे"</string>
- <string name="bluetooth_off_footer" msgid="7658444560543730571">"इतर डिव्हाइसशी कनेक्ट करण्यासाठी ब्लूटूथ चालू करा."</string>
+ <string name="bluetooth_off_footer" msgid="7658444560543730571">"इतर डिव्हाइसशी कनेक्ट करण्यासाठी ब्लूटूथ सुरू करा."</string>
<string name="bluetooth_paired_device_title" msgid="8361860197780425286">"तुमचे डिव्हाइस"</string>
<string name="bluetooth_pairing_page_title" msgid="9053463656712597709">"नवीन डिव्हाइस जोडा"</string>
<string name="bluetooth_pref_summary" product="tablet" msgid="3601662966604648212">"तुमच्या टॅबलेटला जवळपासच्या ब्लूटूथ डिव्हाइसशी संवाद साधण्याची अनुमती द्या"</string>
@@ -213,7 +212,7 @@
<string name="radio_info_dl_kbps" msgid="2903778264453410272">"DL बँडविड्थ (kbps):"</string>
<string name="radio_info_ul_kbps" msgid="3802245899811732716">"UL बँडविड्थ (kbps):"</string>
<string name="radio_info_signal_location_label" msgid="6788144906873498013">"सेल स्थान माहिती (बहिष्कृत):"</string>
- <string name="radio_info_phy_chan_config" msgid="1184401689381480522">"LTE फिजिकल चॅनेल कॉन्फिगरेशन:"</string>
+ <string name="radio_info_phy_chan_config" msgid="1184401689381480522">"LTE फिजिकल चॅनल कॉंफिगरेशन:"</string>
<string name="radio_info_cell_info_refresh_rate" msgid="3557422342215875913">"सेल माहिती रिफ्रेश रेट:"</string>
<string name="radio_info_cellinfo_label" msgid="632796561627452215">"सर्व सेल परिमाण माहिती:"</string>
<string name="radio_info_gprs_service_label" msgid="7926626443442993242">"डेटा सेवा:"</string>
@@ -303,7 +302,7 @@
<string name="settings_shortcut" msgid="4503714880251502167">"सेटिंग्ज शॉर्टकट"</string>
<string name="airplane_mode" msgid="4508870277398231073">"विमान मोड"</string>
<string name="wireless_networks_settings_title" msgid="4298430520189173949">"वायरलेस आणि नेटवर्क"</string>
- <string name="radio_controls_summary" msgid="4596981962167684814">"Wi‑Fi, Bluetooth, विमान मोड, मोबाईल नेटवर्क आणि VPN व्यवस्थापित करा"</string>
+ <string name="radio_controls_summary" msgid="4596981962167684814">"Wi‑Fi, Bluetooth, विमान मोड, मोबाइल नेटवर्क आणि VPN व्यवस्थापित करा"</string>
<string name="cellular_data_title" msgid="7909624119432695022">"मोबाइल डेटा"</string>
<string name="calls_title" msgid="875693497825736550">"कॉलची अनुमती द्या"</string>
<string name="sms_messages_title" msgid="934188835214592753">"SMS मेसेज"</string>
@@ -313,7 +312,7 @@
<string name="roaming_enable" msgid="2108142024297441116">"रोमिंग असताना डेटा सेवांवर कनेक्ट करा"</string>
<string name="roaming_disable" msgid="1915440242079953809">"रोमिंगमध्ये असताना डेटा सेवांना कनेक्ट करा"</string>
<string name="roaming_reenable_message" msgid="8388505868655113258">"तुम्ही डेटा रोमिंग बंद करून तुमचे होम नेटवर्क सोडल्यामुळे तुम्ही डेटा कनेक्टिव्हिटी गमावली आहे."</string>
- <string name="roaming_turn_it_on_button" msgid="4370846458830537578">"हे चालू करा"</string>
+ <string name="roaming_turn_it_on_button" msgid="4370846458830537578">"हे सुरू करा"</string>
<string name="roaming_warning" msgid="5488050911277592868">"तुम्हाला बर्याच प्रमाणात शुल्क लागू शकते."</string>
<string name="roaming_warning_multiuser" product="tablet" msgid="7090388691615686893">"जेव्हा तुम्ही डेटा रोमिंगला अनुमती देता, तेव्हा तुम्हाला महत्त्वाचे रोमिंग शुल्क आकारले जाऊ शकते!\n\nही सेटिंग या टॅब्लेटवरील सर्व वापरकर्ते प्रभावित करते."</string>
<string name="roaming_warning_multiuser" product="default" msgid="6999819541078827556">"जेव्हा तुम्ही डेटा रोमिंगला अनुमती देता, तेव्हा आपल्याकडून महत्त्वाचे रोमिंग शुल्क आकारले जाऊ शकते!\n\nही सेटिंग या फोनवरील सर्व वापरकर्ते प्रभावित करते."</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"प्रोफाइल माहिती"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"खाती"</string>
<string name="location_settings_title" msgid="2707201457572301030">"स्थान"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"स्थान वापरा"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"स्थान वापरा"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"बंद आहे"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">सुरू करा - <xliff:g id="COUNT_1">%1$d</xliff:g> अॅप्स स्थान अॅक्सेस करू शकतात</item>
@@ -444,13 +443,13 @@
<string name="security_settings_fingerprint_enroll_introduction_message_unlock_disabled" msgid="1640839304679275468">"फोन अनलॉक करण्यासाठी किंवा खरेदींना मंजूरी देण्यासाठी तुमचे फिंगरप्रिंट वापरा.\n\nटीप: तुम्ही हे डिव्हाइस अनलॉक करण्यासाठी तुम्ही तुमचे फिंगरप्रिंट वापरू शकत नाही. अधिक माहितीसाठी संस्थेच्या प्रशासकाशी संपर्क साधा."</string>
<string name="security_settings_fingerprint_enroll_introduction_message_setup" msgid="6734490666593320711">"फोन अनलॉक करण्यासाठी किंवा खरेदीला मंजुरी देण्यासाठी तुमची फिंगरप्रिंट वापरा.\n\nटीप: क्लिष्ट पॅटर्न किंवा पिनच्या तुलनेत तुमची फिंगरप्रिंट ही कमी सुरक्षित असू शकते."</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel" msgid="9168637333731599827">"रद्द करा"</string>
- <string name="security_settings_fingerprint_enroll_introduction_continue" msgid="271662150372486535">"सुरु ठेवा"</string>
+ <string name="security_settings_fingerprint_enroll_introduction_continue" msgid="271662150372486535">"सुरू ठेवा"</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel_setup" msgid="756928427429893070">"वगळा"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue_setup" msgid="4125977169169671144">"पुढील"</string>
<string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"फिंगरप्रिंट पायरी वगळायची?"</string>
<string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"फिंगरप्रिंट सेटअपला फक्त एक किंवा दोन मिनिटे लागतात. ही पायरी वगळली तरी तुम्ही नंतर सेटिंग्जमध्ये जाऊन तुमची फिंगरप्रिंट जोडू शकता."</string>
<string name="lock_screen_intro_skip_title" msgid="5307431665496346914">"स्क्रीन लॉक वगळायचे?"</string>
- <string name="lock_screen_intro_skip_dialog_text_frp" product="tablet" msgid="7553945981266845264">"डिव्हाइस संरक्षण वैशिष्ट्ये चालू होणार नाहीत. हा टॅब्लेट हरवल्यास, चोरी झाल्यास किंवा रीसेट केल्यास तुम्ही इतरांना तो वापरण्यापासून रोखू शकणार नाही."</string>
+ <string name="lock_screen_intro_skip_dialog_text_frp" product="tablet" msgid="7553945981266845264">"डिव्हाइस संरक्षण वैशिष्ट्ये सुरू होणार नाहीत. हा टॅब्लेट हरवल्यास, चोरी झाल्यास किंवा रीसेट केल्यास तुम्ही इतरांना तो वापरण्यापासून रोखू शकणार नाही."</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="device" msgid="1378243257238015603">"डिव्हाइस संरक्षण वैशिष्ट्ये सुरू होणार नाहीत. हे डिव्हाइस हरवल्यास, चोरी झाल्यास किंवा रीसेट केल्यास तुम्ही इतरांना तो वापरण्यापासून रोखू शकणार नाही."</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="default" msgid="8395540117461339748">"डिव्हाइस संरक्षण वैशिष्ट्ये सुरू होणार नाहीत. हा फोन हरवल्यास, चोरी झाल्यास किंवा रीसेट केल्यास तुम्ही इतरांना तो वापरण्यापासून रोखू शकणार नाही."</string>
<string name="lock_screen_intro_skip_dialog_text" product="tablet" msgid="7572334562915795226">"डिव्हाइस संरक्षण वैशिष्ट्ये सुरू होणार नाहीत. हा टॅब्लेट हरवल्यास किंवा चोरी झाल्यास तुम्ही इतरांना तो वापरण्यापासून रोखू शकणार नाही."</string>
@@ -462,7 +461,7 @@
<string name="cancel_lock_screen_dialog_button_label" msgid="2534925227627658819">"रद्द करा"</string>
<string name="security_settings_fingerprint_enroll_find_sensor_title" msgid="8909829699273726469">"सेन्सरला स्पर्श करा"</string>
<string name="security_settings_fingerprint_enroll_find_sensor_message" msgid="581120963079780740">"ते तुमच्या फोनच्या मागील भागावर आहे. तुमची तर्जनी वापरा."</string>
- <string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="7835824123269738540">"डिव्हाइस आणि फिंगरप्रिंट सेंसर स्थानासह चित्रे"</string>
+ <string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="7835824123269738540">"डिव्हाइस आणि फिंगरप्रिंट सेन्सर स्थानासह चित्रे"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="3519748398694308901">"नाव"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="3428927518029038956">"ठीक आहे"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="4312297515772004580">"हटवा"</string>
@@ -509,14 +508,14 @@
<string name="crypt_keeper_encrypt_title" product="tablet" msgid="2292129135369853167">"टॅबलेट एंक्रिप्ट करा"</string>
<string name="crypt_keeper_encrypt_title" product="default" msgid="3110852053238357832">"फोन एंक्रिप्ट करा"</string>
<string name="crypt_keeper_encrypted_summary" msgid="2438498691741626642">"एंक्रिप्ट केले"</string>
- <string name="crypt_keeper_desc" product="tablet" msgid="9142792050252407734">"तुम्ही तुमची खाती, सेटिंग्ज, डाउनलोड केलेले अॅप्स आणि त्यांचा डेटा, मीडिया आणि इतर फायली एंक्रिप्ट करू शकता. तुम्ही तुमचा टॅब्लेट एंक्रिप्ट केल्यानंतर, तुम्ही स्क्रीन लॉक (म्हणजे, एक पॅटर्न किंवा अंकीय पिन किंवा पासवर्ड) सेट केला आहे हे गृहित धरून, प्रत्येकवेळी तुम्ही टॅब्लेट चालू करता तेव्हा त्याचे एंक्रिप्ट करण्यासाठी आपल्याला स्क्रीन अनलॉक करण्याची आवश्यकता असेल. एंक्रिप्ट करण्याचा अन्य एकमेव मार्ग तुमचा सर्व डेटा मिटवून, फॅक्टरी डेटा रीसेट करणे हा होय.\n\nएंक्रिप्शनला एक तास किंवा अधिक वेळ लागू शकतो. तुम्ही संपूर्ण प्रक्रियेत चार्ज केलेल्या बॅटरीसह प्रारंभ करणे आणि तुमचा टॅब्लेट प्लग इन केलेला ठेवणे आवश्यक आहे. तुम्ही त्यात व्यत्यय आणल्यास, तुम्ही तुमचा काही किंवा सर्व डेटा गमवाल."</string>
- <string name="crypt_keeper_desc" product="default" msgid="1996334685607444282">"तुम्ही तुमची खाती, सेटिंग्ज, डाउनलोड केलेली अॅप्स आणि त्यांचा डेटा, मीडिया आणि इतर फायली एंक्रिप्ट करू शकता. तुम्ही तुमचा फोन एंक्रिप्ट केल्यानंतर, तुम्ही स्क्रीन लॉक (म्हणजे, एक पॅटर्न किंवा अंकीय पिन किंवा पासवर्ड) सेट केला आहे हे गृहित धरून, प्रत्येकवेळी तुम्ही फोन चालू करता तेव्हा त्याचे एंक्रिप्ट करण्यासाठी आपल्याला स्क्रीन अनलॉक करण्याची आवश्यकता असेल. एंक्रिप्ट करण्याचा अन्य एकमेव मार्ग तुमचा सर्व डेटा मिटवून, फॅक्टरी डेटा रीसेट करणे हा होय.\n\nएंक्रिप्टीकरणास एक तास किंवा अधिक वेळ लागू शकतो. तुम्ही संपूर्ण प्रक्रियेत चार्ज केलेल्या बॅटरीसह प्रारंभ करणे आणि तुमचा फोन प्लग इन केलेला ठेवणे आवश्यक आहे. तुम्ही त्यात व्यत्यय आणल्यास, तुम्ही तुमचा काही किंवा सर्व डेटा गमवाल."</string>
+ <string name="crypt_keeper_desc" product="tablet" msgid="9142792050252407734">"तुम्ही तुमची खाती, सेटिंग्ज, डाउनलोड केलेले अॅप्स आणि त्यांचा डेटा, मीडिया आणि इतर फाइल एंक्रिप्ट करू शकता. तुम्ही तुमचा टॅब्लेट एंक्रिप्ट केल्यानंतर, तुम्ही स्क्रीन लॉक (म्हणजे, एक पॅटर्न किंवा अंकीय पिन किंवा पासवर्ड) सेट केला आहे हे गृहित धरून, प्रत्येकवेळी तुम्ही टॅब्लेट सुरू करता तेव्हा त्याचे एंक्रिप्ट करण्यासाठी आपल्याला स्क्रीन अनलॉक करण्याची आवश्यकता असेल. एंक्रिप्ट करण्याचा अन्य एकमेव मार्ग तुमचा सर्व डेटा मिटवून, फॅक्टरी डेटा रीसेट करणे हा होय.\n\nएंक्रिप्शनला एक तास किंवा अधिक वेळ लागू शकतो. तुम्ही संपूर्ण प्रक्रियेत चार्ज केलेल्या बॅटरीसह प्रारंभ करणे आणि तुमचा टॅब्लेट प्लग इन केलेला ठेवणे आवश्यक आहे. तुम्ही त्यात व्यत्यय आणल्यास, तुम्ही तुमचा काही किंवा सर्व डेटा गमवाल."</string>
+ <string name="crypt_keeper_desc" product="default" msgid="1996334685607444282">"तुम्ही तुमची खाती, सेटिंग्ज, डाउनलोड केलेली अॅप्स आणि त्यांचा डेटा, मीडिया आणि इतर फाइल एंक्रिप्ट करू शकता. तुम्ही तुमचा फोन एंक्रिप्ट केल्यानंतर, तुम्ही स्क्रीन लॉक (म्हणजे, एक पॅटर्न किंवा अंकीय पिन किंवा पासवर्ड) सेट केला आहे हे गृहित धरून, प्रत्येकवेळी तुम्ही फोन सुरू करता तेव्हा त्याचे एंक्रिप्ट करण्यासाठी आपल्याला स्क्रीन अनलॉक करण्याची आवश्यकता असेल. एंक्रिप्ट करण्याचा अन्य एकमेव मार्ग तुमचा सर्व डेटा मिटवून, फॅक्टरी डेटा रीसेट करणे हा होय.\n\nएंक्रिप्टीकरणास एक तास किंवा अधिक वेळ लागू शकतो. तुम्ही संपूर्ण प्रक्रियेत चार्ज केलेल्या बॅटरीसह प्रारंभ करणे आणि तुमचा फोन प्लग इन केलेला ठेवणे आवश्यक आहे. तुम्ही त्यात व्यत्यय आणल्यास, तुम्ही तुमचा काही किंवा सर्व डेटा गमवाल."</string>
<string name="crypt_keeper_button_text" product="tablet" msgid="7918671468758813824">"टॅबलेट एंक्रिप्ट करा"</string>
<string name="crypt_keeper_button_text" product="default" msgid="8737394386627318489">"फोन एंक्रिप्ट करा"</string>
<string name="crypt_keeper_low_charge_text" msgid="1422879728632636311">"तुमची बॅटरी चार्ज करा आणि पुन्हा प्रयत्न करा."</string>
<string name="crypt_keeper_unplugged_text" msgid="6597684068340036200">"तुमचा चार्जर प्लग इन करा आणि पुन्हा प्रयत्न करा."</string>
<string name="crypt_keeper_dialog_need_password_title" msgid="8532211509636340535">"कोणताही लॉक स्क्रीन पिन किंवा पासवर्ड नाही"</string>
- <string name="crypt_keeper_dialog_need_password_message" msgid="1341590897367808702">"तुम्ही एनक्रिप्शन सुरु करण्यापूर्वी तुम्हाला एक लॉक स्क्रीन पिन किंवा पासवर्ड सेट करण्याची आवश्यकता आहे."</string>
+ <string name="crypt_keeper_dialog_need_password_message" msgid="1341590897367808702">"तुम्ही एनक्रिप्शन सुरू करण्यापूर्वी तुम्हाला एक लॉक स्क्रीन पिन किंवा पासवर्ड सेट करण्याची आवश्यकता आहे."</string>
<string name="crypt_keeper_confirm_title" msgid="8884417036062084547">"एंक्रिप्ट करायचे?"</string>
<string name="crypt_keeper_final_desc" product="tablet" msgid="2713708841024805586">"एंक्रिप्शन कार्य परत न करता येणारे आहे आणि तुम्ही त्यात व्यत्यय आणल्यास, तुमचा डेटा गमावेल. एंक्रिप्शनला एखादा तास किंवा जास्त वेळ लागतो, यादरम्यान टॅबलेट कित्येक वेळा रीस्टार्ट होईल."</string>
<string name="crypt_keeper_final_desc" product="default" msgid="2483549885938505746">"एंक्रिप्शन कार्य परत न करता येणारे आहे आणि तुम्ही त्यात व्यत्यय आणल्यास, तुमचा डेटा गमावेल. एंक्रिप्शनला एखादा तास किंवा जास्त वेळ लागतो, यादरम्यान फोन कित्येक वेळा रीस्टार्ट होईल."</string>
@@ -525,16 +524,16 @@
<string name="crypt_keeper_setup_description" product="default" msgid="3391750289253411494">"तुमचा फोन एंक्रिप्ट केला जात असताना प्रतीक्षा करा. <xliff:g id="PERCENT">^1</xliff:g>% पूर्ण."</string>
<string name="crypt_keeper_setup_time_remaining" product="tablet" msgid="7841271240063858796">"तुमचा टॅब्लेट एंक्रिप्ट केला जात असताना प्रतीक्षा करा. शिल्लक वेळ: <xliff:g id="DURATION">^1</xliff:g>"</string>
<string name="crypt_keeper_setup_time_remaining" product="default" msgid="8049188590821796173">"तुमचा फोन एंक्रिप्ट केला जात असताना प्रतीक्षा करा. शिल्लक वेळ: <xliff:g id="DURATION">^1</xliff:g>"</string>
- <string name="crypt_keeper_force_power_cycle" product="tablet" msgid="9168213181845231795">"तुमचा टॅबलेट अनलॉक करण्यासाठी, तो बंद करा आणि नंतर चालू करा."</string>
+ <string name="crypt_keeper_force_power_cycle" product="tablet" msgid="9168213181845231795">"तुमचा टॅबलेट अनलॉक करण्यासाठी, तो बंद करा आणि नंतर सुरू करा."</string>
<string name="crypt_keeper_force_power_cycle" product="default" msgid="1182690469082263666">"तुमचा फोन अनलॉक करण्यासाठी, तो बंद करा आणि नंतर सुरू करा."</string>
<string name="crypt_keeper_warn_wipe" msgid="700814581500057050">"चेतावणी: अनलॉक करण्याच्या आणखी <xliff:g id="COUNT">^1</xliff:g> अयशस्वी प्रयत्नांनंतर तुमचे डिव्हाइस पुसले जाईल."</string>
<string name="crypt_keeper_enter_password" msgid="726933635335219421">"तुमचा पासवर्ड टाइप करा"</string>
<string name="crypt_keeper_failed_title" msgid="1906382607060855782">"एंक्रिप्शन अयशस्वी"</string>
- <string name="crypt_keeper_failed_summary" product="tablet" msgid="7844833877734529625">"कूटबद्धीकरणात व्यत्यय आला आणि हे पूर्ण होऊ शकत नाही. परिणामस्वरूप, आपल्या टॅबलेटवरील डेटा यापुढे प्रवेशयोग्य राहणार नाही. \n\n तुमचा टॅबलेट वापरून पुन्हा सुरु करण्यासाठी, तुम्हाला फॅक्टरी रीसेट करण्याची आवश्यकता आहे. रीसेट केल्यानंतर तुम्ही तुमचा टॅबलेट सेट करता, तेव्हा आपल्याकडे आपल्या Google खात्यावर बॅकअप घेतलेला कोणताही डेटा रीस्टोअर करण्याची संधी असेल."</string>
- <string name="crypt_keeper_failed_summary" product="default" msgid="2895589681839090312">"कूटबद्धीकरणात व्यत्यय आला आणि पूर्ण होऊ शकत नाही. परिणामस्वरूप, आपल्या फोनवरील डेटा यापुढे प्रवेशयोग्य नाही.\n\nतुमचा फोन वापरणे पुन्हा सुरु करण्यासाठी, तुम्हाला फॅक्टरी रीसेट करण्याची आवश्यकता आहे. रीसेट केल्यानंतर जेव्हा तुम्ही तुमचा फोन सेट करता, तेव्हा आपल्याकडे आपल्या Google खात्यावर बॅकअप घेतलेला कोणताही डेटा रीस्टोअर करण्याची संधी असेल."</string>
+ <string name="crypt_keeper_failed_summary" product="tablet" msgid="7844833877734529625">"कूटबद्धीकरणात व्यत्यय आला आणि हे पूर्ण होऊ शकत नाही. परिणामस्वरूप, आपल्या टॅबलेटवरील डेटा यापुढे प्रवेशयोग्य राहणार नाही. \n\n तुमचा टॅबलेट वापरून पुन्हा सुरू करण्यासाठी, तुम्हाला फॅक्टरी रीसेट करण्याची आवश्यकता आहे. रीसेट केल्यानंतर तुम्ही तुमचा टॅबलेट सेट करता, तेव्हा आपल्याकडे आपल्या Google खात्यावर बॅकअप घेतलेला कोणताही डेटा रीस्टोअर करण्याची संधी असेल."</string>
+ <string name="crypt_keeper_failed_summary" product="default" msgid="2895589681839090312">"कूटबद्धीकरणात व्यत्यय आला आणि पूर्ण होऊ शकत नाही. परिणामस्वरूप, आपल्या फोनवरील डेटा यापुढे प्रवेशयोग्य नाही.\n\nतुमचा फोन वापरणे पुन्हा सुरू करण्यासाठी, तुम्हाला फॅक्टरी रीसेट करण्याची आवश्यकता आहे. रीसेट केल्यानंतर जेव्हा तुम्ही तुमचा फोन सेट करता, तेव्हा आपल्याकडे आपल्या Google खात्यावर बॅकअप घेतलेला कोणताही डेटा रीस्टोअर करण्याची संधी असेल."</string>
<string name="crypt_keeper_data_corrupt_title" msgid="6561535293845985713">"विकूटन अयशस्वी"</string>
- <string name="crypt_keeper_data_corrupt_summary" product="tablet" msgid="7018748502706237323">"तुम्ही एंटर केलेला पासवर्ड चुकीचा आहे, परंतु दुर्दैवाने तुमचा डेटा दूषित आहे. \n\nतुमचा टॅबलेट वापरणे पुनः सुरु करण्यासाठी, तुम्हाला फॅक्टरी रीसेट करणे आवश्यक आहे. रीसेट केल्यानंतर तुम्ही तुमचा टॅबलेट सेट करता, तेव्हा तुम्हाला आपल्या Google खात्यावर बॅक अप घेतलेला कोणताही डेटा रीस्टोअर करण्याची संधी असेल."</string>
- <string name="crypt_keeper_data_corrupt_summary" product="default" msgid="5798580588985326937">"तुम्ही एंटर केलेला पासवर्ड बरोबर आहे, परंतु दुर्दैवाने तुमचा डेटा दूषित आहे. \n\nतुमचा फोन वापरणे पुनः सुरु करण्यासाठी, तुम्हाला फॅक्टरी रीसेट करणे आवश्यक आहे. रीसेट केल्यानंतर तुम्ही तुमचा फोन सेट करता, तेव्हा तुम्हाला आपल्या Google खात्यावर बॅक अप घेतलेला कोणताही डेटा रीस्टोअर करण्याची संधी असेल."</string>
+ <string name="crypt_keeper_data_corrupt_summary" product="tablet" msgid="7018748502706237323">"तुम्ही एंटर केलेला पासवर्ड चुकीचा आहे, परंतु दुर्दैवाने तुमचा डेटा दूषित आहे. \n\nतुमचा टॅबलेट वापरणे पुनः सुरू करण्यासाठी, तुम्हाला फॅक्टरी रीसेट करणे आवश्यक आहे. रीसेट केल्यानंतर तुम्ही तुमचा टॅबलेट सेट करता, तेव्हा तुम्हाला आपल्या Google खात्यावर बॅक अप घेतलेला कोणताही डेटा रीस्टोअर करण्याची संधी असेल."</string>
+ <string name="crypt_keeper_data_corrupt_summary" product="default" msgid="5798580588985326937">"तुम्ही एंटर केलेला पासवर्ड बरोबर आहे, परंतु दुर्दैवाने तुमचा डेटा दूषित आहे. \n\nतुमचा फोन वापरणे पुनः सुरू करण्यासाठी, तुम्हाला फॅक्टरी रीसेट करणे आवश्यक आहे. रीसेट केल्यानंतर तुम्ही तुमचा फोन सेट करता, तेव्हा तुम्हाला आपल्या Google खात्यावर बॅक अप घेतलेला कोणताही डेटा रीस्टोअर करण्याची संधी असेल."</string>
<string name="crypt_keeper_switch_input_method" msgid="4744137470890459582">"इनपुट पद्धत स्विच करा"</string>
<string name="suggested_lock_settings_title" msgid="1518155558803371661">"तुमचा फोन सुरक्षित ठेवा"</string>
<string name="suggested_lock_settings_summary" product="tablet" msgid="1861066918594412519">"टॅबलेटचे संरक्षण करण्यासाठी स्क्रीन लॉक सेट करा"</string>
@@ -579,7 +578,7 @@
<string name="fingerprint_unlock_set_unlock_pattern" msgid="132337696546315927">"फिंगरप्रिंट + पॅटर्न"</string>
<string name="fingerprint_unlock_set_unlock_pin" msgid="886426673328906002">"फिंगरप्रिंट + पिन"</string>
<string name="fingerprint_unlock_set_unlock_password" msgid="3325527833422156515">"फिंगरप्रिंट + पासवर्ड"</string>
- <string name="fingerprint_unlock_skip_fingerprint" msgid="2063700014903801639">"फिंगरप्रिंट न वापरता सुरु ठेवा"</string>
+ <string name="fingerprint_unlock_skip_fingerprint" msgid="2063700014903801639">"फिंगरप्रिंट न वापरता सुरू ठेवा"</string>
<string name="fingerprint_unlock_title" msgid="8009992449332532869">"तुम्ही आपल्या फिंगरप्रिंटचा वापर करून तुमचा फोन अनलॉक करू शकता. सुरक्षिततेसाठी, या पर्यायाकरिता एक बॅक अप स्क्रीन लॉक आवश्यक आहे."</string>
<string name="face_unlock_set_unlock_pattern" msgid="3748596996869406905">"फेस ऑथेंटिकेशन + पॅटर्न"</string>
<string name="face_unlock_set_unlock_pin" msgid="3320824093518497476">"फेस ऑथेंटिकेशन + पिन"</string>
@@ -659,7 +658,7 @@
<item quantity="other">पिन किमान <xliff:g id="COUNT_1">%d</xliff:g> अंकी असणे आवश्यक आहे</item>
<item quantity="one">पिनमध्ये किमान <xliff:g id="COUNT_0">%d</xliff:g> अंक असणे आवश्यक आहे</item>
</plurals>
- <string name="lockpassword_continue_label" msgid="7279261861924400655">"सुरु ठेवा"</string>
+ <string name="lockpassword_continue_label" msgid="7279261861924400655">"सुरू ठेवा"</string>
<plurals name="lockpassword_password_too_long" formatted="false" msgid="7994068708438608179">
<item quantity="other"><xliff:g id="NUMBER_1">%d</xliff:g> वर्णांपेक्षा कमी असणे आवश्यक आहे</item>
<item quantity="one"><xliff:g id="NUMBER_0">%d</xliff:g> वर्णापेक्षा कमी असणे आवश्यक आहे</item>
@@ -712,7 +711,7 @@
<string name="lockpattern_tutorial_cancel_label" msgid="450401426127674369">"रद्द करा"</string>
<string name="lockpattern_tutorial_continue_label" msgid="8474690922559443018">"पुढील"</string>
<string name="lock_setup" msgid="8710689848703935088">"सेटअप पूर्ण झाले आहे"</string>
- <string name="manage_device_admin" msgid="322047441168191695">"डिव्हाइस अॅडमिन ॲप्स"</string>
+ <string name="manage_device_admin" msgid="322047441168191695">"डिव्हाइस अॅडमिन अॅप्स"</string>
<string name="number_of_device_admins_none" msgid="8519193548630223132">"सक्रिय अॅप्स नाहीत"</string>
<plurals name="number_of_device_admins" formatted="false" msgid="6445613288828151224">
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> सक्रिय अॅप्स</item>
@@ -726,13 +725,13 @@
<item quantity="one">1 सक्रिय विश्वासू एजंट</item>
</plurals>
<string name="bluetooth_quick_toggle_title" msgid="7410319268406112792">"ब्लूटूथ"</string>
- <string name="bluetooth_quick_toggle_summary" msgid="3951769568065428093">"ब्लूटूथ चालू करा"</string>
+ <string name="bluetooth_quick_toggle_summary" msgid="3951769568065428093">"ब्लूटूथ सुरू करा"</string>
<string name="bluetooth_settings" msgid="5228032727293770389">"ब्लूटूथ"</string>
<string name="bluetooth_settings_title" msgid="7261244857456521825">"ब्लूटूथ"</string>
<string name="bluetooth_settings_summary" msgid="1221689092429277887">"कनेक्शन व्यवस्थापित करा, डिव्हाइस नाव आणि शोधयोग्यता सेट करा"</string>
<string name="bluetooth_pairing_request" msgid="7221745525632573125">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> सह जोडायचे?"</string>
- <string name="bluetooth_pairing_key_msg" msgid="1139230917419961975">"ब्लूटूथ पेअरींग कोड"</string>
- <string name="bluetooth_enter_passkey_msg" msgid="6205151011298670207">"पेअरींग कोड टाइप करा नंतर Return किंवा Enter दाबा"</string>
+ <string name="bluetooth_pairing_key_msg" msgid="1139230917419961975">"ब्लूटूथ पेअरिंग कोड"</string>
+ <string name="bluetooth_enter_passkey_msg" msgid="6205151011298670207">"पेअरिंग कोड टाइप करा नंतर Return किंवा Enter दाबा"</string>
<string name="bluetooth_enable_alphanumeric_pin" msgid="9138308197078115672">"पिन मध्ये अक्षरे किंवा प्रतीके आहेत"</string>
<string name="bluetooth_pin_values_hint" msgid="8044671726261326240">"सामान्यतः 0000 किंवा 1234"</string>
<string name="bluetooth_pin_values_hint_16_digits" msgid="2665983525706661525">"16 अंक असणे आवश्यक आहे"</string>
@@ -741,7 +740,7 @@
<string name="bluetooth_confirm_passkey_msg" msgid="7094455604290076371">"यासह जोडण्यासाठी:<br><b><xliff:g id="DEVICE_NAME">%1$s</xliff:g></b><br><br>हे ही पासकी दर्शवत असल्याचे सुनिश्चित करा:<br><b><xliff:g id="PASSKEY">%2$s</xliff:g></b>"</string>
<string name="bluetooth_incoming_pairing_msg" msgid="940451919337185024">"यावरून:<br><b><xliff:g id="DEVICE_NAME">%1$s</xliff:g></b><br><br>हे डिव्हाइस जोडायचे?"</string>
<string name="bluetooth_display_passkey_pin_msg" msgid="5909423849232791647">"यासह जोडण्यासाठी:<xliff:g id="BOLD1_0"><br><b></xliff:g><xliff:g id="DEVICE_NAME">%1$s</xliff:g><xliff:g id="END_BOLD1"></b><br><br></xliff:g>यावर टाइप करा:<xliff:g id="BOLD2_1"><br><b></xliff:g><xliff:g id="PASSKEY">%2$s</xliff:g><xliff:g id="END_BOLD2"></b></xliff:g>, नंतर Return किंवा Enter दाबा."</string>
- <string name="bluetooth_pairing_shares_phonebook" msgid="7474404818877079813">"तुमच्या संपर्क आणि कॉल इतिहासातील अॅक्सेसची अनुमती द्या"</string>
+ <string name="bluetooth_pairing_shares_phonebook" msgid="7474404818877079813">"तुमचे संपर्क आणि कॉल इतिहास अॅक्सेस करण्याची अनुमती द्या"</string>
<string name="bluetooth_error_title" msgid="5718761586633101960"></string>
<string name="bluetooth_connecting_error_message" msgid="8473359363469518478">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> सह कनेक्ट करणे शक्य झाले नाही."</string>
<string name="bluetooth_preference_scan_title" msgid="457781003962324807">"डिव्हाइसेससाठी स्कॅन करा"</string>
@@ -766,8 +765,8 @@
<string name="bluetooth_device_context_connect_advanced" msgid="423463405499392444">"पर्याय…"</string>
<string name="bluetooth_menu_advanced" msgid="7566858513372603652">"प्रगत"</string>
<string name="bluetooth_advanced_titlebar" msgid="6459469494039004784">"प्रगत ब्लूटूथ"</string>
- <string name="bluetooth_empty_list_bluetooth_off" msgid="6255367297830430459">"ब्लूटूथ चालू असते तेव्हा, तुमचे डिव्हाइस इतर जवळच्या ब्लूटूथ डिव्हाइस सह संवाद करु शकते."</string>
- <string name="bluetooth_scanning_on_info_message" msgid="5460370815156050550">"ब्लूटूथ सुरू असताना, तुमचे डिव्हाइस इतर जवळपासच्या ब्लूटूथ डिव्हाइसशी संवाद साधू शकते.\n\nडिव्हाइस अनुभव सुधारण्यासाठी, ॲप्स आणि सेवा ब्लूटूथ सुरू असताना देखील, अजूनही जवळपासचे डिव्हाइस कधीही स्कॅन करू शकते. उदाहरणार्थ, याचा वापर स्थानावर आधारित वैशिष्ट्ये आणि सेवा सुधारण्यात केला जाऊ शकतो. तुम्ही हे "<annotation id="link">"स्कॅनिंग सेटिंग्ज"</annotation>" मध्ये जाऊन बदलू शकता."</string>
+ <string name="bluetooth_empty_list_bluetooth_off" msgid="6255367297830430459">"ब्लूटूथ सुरू असते तेव्हा, तुमचे डिव्हाइस इतर जवळच्या ब्लूटूथ डिव्हाइस सह संवाद करु शकते."</string>
+ <string name="bluetooth_scanning_on_info_message" msgid="5460370815156050550">"ब्लूटूथ सुरू असताना, तुमचे डिव्हाइस इतर जवळपासच्या ब्लूटूथ डिव्हाइसशी संवाद साधू शकते.\n\nडिव्हाइस अनुभव सुधारण्यासाठी, अॅप्स आणि सेवा ब्लूटूथ सुरू असताना देखील, अजूनही जवळपासचे डिव्हाइस कधीही स्कॅन करू शकते. उदाहरणार्थ, याचा वापर स्थानावर आधारित वैशिष्ट्ये आणि सेवा सुधारण्यात केला जाऊ शकतो. तुम्ही हे "<annotation id="link">"स्कॅनिंग सेटिंग्ज"</annotation>" मध्ये जाऊन बदलू शकता."</string>
<string name="ble_scan_notify_text" msgid="6290170236546386932">"स्थान अचूकता सुधारण्यासाठी, सिस्टम अॅप्स आणि सेवा अद्याप ब्लूटूथ डिव्हाइस शोधू शकतात. तुम्ही हे <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>स्कॅनिंग सेटिंग्ज<xliff:g id="LINK_END_1">LINK_END</xliff:g> मध्ये बदलू शकता."</string>
<string name="bluetooth_connect_failed" msgid="1151234676456333786">"कनेक्ट होऊ शकत नाही. पुन्हा प्रयत्न करा."</string>
<string name="device_details_title" msgid="726517818032923222">"डिव्हाइस तपशील"</string>
@@ -789,7 +788,7 @@
<string name="bluetooth_device_advanced_online_mode_summary" msgid="4180673788239241086">"ब्लूटूथ डीव्हाइसवर कनेक्ट करा"</string>
<string name="bluetooth_device_advanced_profile_header_title" msgid="1414487572426490659">"यासाठी वापरा"</string>
<string name="bluetooth_device_advanced_rename_device" msgid="2270087843175307865">"पुनर्नामित करा"</string>
- <string name="bluetooth_device_advanced_enable_opp_title" msgid="8258863155491651198">"येणार्या फाईल स्थानांतरणांना अनुमती द्या"</string>
+ <string name="bluetooth_device_advanced_enable_opp_title" msgid="8258863155491651198">"येणार्या फाइल स्थानांतरणांना अनुमती द्या"</string>
<string name="bluetooth_pan_user_profile_summary_connected" msgid="5934228955175911807">"इंटरनेट ॲक्सेससाठी डिव्हाइसशी कनेक्ट केले"</string>
<string name="bluetooth_pan_nap_profile_summary_connected" msgid="3103296701913705646">"डिव्हाइससह स्थानिक इंटरनेट कनेक्शन शेअर करत आहे"</string>
<string name="bluetooth_dock_settings" msgid="3193180757893817101">"डॉक सेटिंग्ज"</string>
@@ -817,32 +816,32 @@
<string name="wifi_tap_to_sign_in" msgid="1075925570550560453">"नेटवर्कवर साइन इन करण्यासाठी येथे टॅप करा"</string>
<string name="tx_link_speed" msgid="4557508597788146162">"<xliff:g id="TRANSMIT_LINK_SPEED">%1$d</xliff:g> Mbps"</string>
<string name="rx_link_speed" msgid="3735337600274627581">"<xliff:g id="RECEIVE_LINK_SPEED">%1$d</xliff:g> Mbps"</string>
- <string name="wifi_ask_enable" msgid="925862998663619616">"<xliff:g id="REQUESTER">%s</xliff:g> वाय-फाय चालू करू इच्छित आहे"</string>
+ <string name="wifi_ask_enable" msgid="925862998663619616">"<xliff:g id="REQUESTER">%s</xliff:g> वाय-फाय सुरू करू इच्छित आहे"</string>
<string name="wifi_ask_disable" msgid="2146839060110412974">"<xliff:g id="REQUESTER">%s</xliff:g> वाय-फाय बंद करू इच्छित आहे"</string>
<string name="art_verifier_for_debuggable_title" msgid="5223835619409464642">"डीबग करण्यायोग्य ॲप्सच्या बाइटकोडची पडताळणी करा"</string>
<string name="art_verifier_for_debuggable_summary" msgid="2204242476996701111">"डीबग करण्यायोग्य ॲप्ससाठी बाइटकोडची पडताळणी करण्यासाठी ART ला अनुमती द्या"</string>
<string name="nfc_quick_toggle_title" msgid="4990697912813795002">"NFC"</string>
<string name="nfc_quick_toggle_summary" product="tablet" msgid="983451155092850657">"टॅबलेट दुसर्या डिव्हाइसला स्पर्श करतो तेव्हा डेटा अदलाबदलीस अनुमती द्या"</string>
<string name="nfc_quick_toggle_summary" product="default" msgid="7141056939052895142">"फोन दुसर्या डिव्हाइसला स्पर्श करतो तेव्हा डेटा अदलाबदलीस अनुमती द्या"</string>
- <string name="nfc_disclaimer_title" msgid="4860231267351602970">"NFC चालू करा"</string>
+ <string name="nfc_disclaimer_title" msgid="4860231267351602970">"NFC सुरू करा"</string>
<string name="nfc_disclaimer_content" msgid="3066113577854565782">"NFC हे डिव्हाइस आणि दुसरे जवळपासचे डिव्हाइस किंवा पेमेंट टर्मिनल, ॲक्सेस रीडर आणि सुसंवादी जाहिराती किंवा टॅग यासारख्या लक्ष्यांमधील डेटाची अदलाबदल करते."</string>
<string name="nfc_secure_settings_title" msgid="5153751163174916581">"NFC चे संरक्षण करा"</string>
<string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"स्क्रीन अनलॉक केल्यावर NFC पेमेंट आणि फक्त परिवहन वापरासाठीला अनुमती द्या"</string>
<string name="android_beam_settings_title" msgid="3083436415873738389">"Android बीम"</string>
- <string name="android_beam_on_summary" msgid="8068287225180474199">"NFC द्वारे अॅप सामग्री प्रक्षेपित करण्यास तयार"</string>
+ <string name="android_beam_on_summary" msgid="8068287225180474199">"NFC द्वारे अॅप आशय प्रक्षेपित करण्यास तयार"</string>
<string name="android_beam_off_summary" msgid="7365818039159364600">"बंद"</string>
<string name="nfc_disabled_summary" msgid="2181777971122724361">"NFC बंद असल्यामुळे उपलब्ध नाही"</string>
<string name="android_beam_label" msgid="5340299879556025708">"Android बीम"</string>
- <string name="android_beam_explained" msgid="4501176353247859329">"जेव्हा हे वैशिष्ट्य चालू केलेले असते तेव्हा, तुम्ही डिव्हाइस एकत्र जवळ धरून दुसर्या NFC-सक्षम डिव्हाइस वर अॅपचा आशय बीम करू शकता. उदाहरणार्थ, तुम्ही वेब पेज, YouTube व्हिडिओ, संपर्क आणि बरेच काही बीम करू शकता.\n\nफक्त डिव्हाइस एकत्र आणा (विशेषतः पाठोपाठ) आणि नंतर स्क्रीन टॅप करा. काय बीम केले जाते हे अॅप निर्धारित करते."</string>
+ <string name="android_beam_explained" msgid="4501176353247859329">"जेव्हा हे वैशिष्ट्य सुरू केलेले असते तेव्हा, तुम्ही डिव्हाइस एकत्र जवळ धरून दुसर्या NFC-सक्षम डिव्हाइस वर अॅपचा आशय बीम करू शकता. उदाहरणार्थ, तुम्ही वेब पेज, YouTube व्हिडिओ, संपर्क आणि बरेच काही बीम करू शकता.\n\nफक्त डिव्हाइस एकत्र आणा (विशेषतः पाठोपाठ) आणि नंतर स्क्रीन टॅप करा. काय बीम केले जाते हे अॅप निर्धारित करते."</string>
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"वाय-फाय"</string>
- <string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"वाय-फाय चालू करा"</string>
+ <string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"वाय-फाय सुरू करा"</string>
<string name="wifi_settings" msgid="7486492317310514109">"वाय-फाय"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"वाय-फाय वापरा"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"वाय-फाय वापरा"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"वाय-फाय सेटिंग्ज"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"वाय-फाय"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"वायरलेस प्रवेश बिंदू सेट करा आणि व्यवस्थापित करा"</string>
<string name="wifi_select_network" msgid="2541598480767312831">"वाय-फाय निवडा"</string>
- <string name="wifi_starting" msgid="1299466156783469023">"वाय-फाय चालू करत आहे..."</string>
+ <string name="wifi_starting" msgid="1299466156783469023">"वाय-फाय सुरू करत आहे..."</string>
<string name="wifi_stopping" msgid="413711069039939520">"वाय-फाय बंद करत आहे…"</string>
<string name="wifi_error" msgid="5605801874484465557">"एरर"</string>
<string name="wifi_sap_no_channel_error" msgid="6881796988574851628">"या देशात 5 GHz बँड उपलब्ध नाही"</string>
@@ -863,33 +862,33 @@
<string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"वापरण्यासाठी, सुसंगत नेटवर्क रेटिंग पुरवठादार निवडा"</string>
<string name="wifi_install_credentials" msgid="5650088113710858289">"प्रमाणपत्रे इंस्टॉल करा"</string>
<string name="wifi_scan_notify_text" msgid="7614101215028336927">"स्थान अचूकता सुधारण्यासाठी अॅप्स आणि सेवा वाय-फाय बंद असतानाही कधीही वाय-फाय नेटवर्क शोधण्यासाठी स्कॅन करू शकतात. स्थानाधारित वैशिष्ट्ये आणि सेवांमध्ये सुधारणा करण्यासाठी हे वापरले जाऊ शकते. तुम्ही हे <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>स्कॅनिंग सेटिंग्ज<xliff:g id="LINK_END_1">LINK_END</xliff:g> मध्ये बदलू शकता."</string>
- <string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"स्थान अचूकता वाढवण्यासाठी, <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>स्कॅनिंग सेटिंग्ज<xliff:g id="LINK_END_1">LINK_END</xliff:g> मध्ये वाय-फाय स्कॅनिंग चालू करा."</string>
+ <string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"स्थान अचूकता वाढवण्यासाठी, <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>स्कॅनिंग सेटिंग्ज<xliff:g id="LINK_END_1">LINK_END</xliff:g> मध्ये वाय-फाय स्कॅनिंग सुरू करा."</string>
<string name="wifi_scan_notify_remember_choice" msgid="1235445971400237444">"पुन्हा दर्शवू नका"</string>
- <string name="wifi_setting_sleep_policy_title" msgid="2120785188625932076">"निष्क्रिय असताना वाय-फाय चालू ठेवा"</string>
- <string name="wifi_setting_on_during_sleep_title" msgid="856670183023402715">"निष्क्रिय करा दरम्यान वाय-फाय चालू"</string>
+ <string name="wifi_setting_sleep_policy_title" msgid="2120785188625932076">"निष्क्रिय असताना वाय-फाय सुरू ठेवा"</string>
+ <string name="wifi_setting_on_during_sleep_title" msgid="856670183023402715">"निष्क्रिय करा दरम्यान वाय-फाय सुरू"</string>
<string name="wifi_setting_sleep_policy_error" msgid="9029652631829560733">"सेटिंग बदलताना समस्या आली"</string>
<string name="wifi_suspend_efficiency_title" msgid="5292408676086580527">"कार्यक्षमतेत सुधारणा करा"</string>
<string name="wifi_suspend_optimizations" msgid="8826033336622472222">"वाय-फाय ऑप्टिमायझेशन"</string>
- <string name="wifi_suspend_optimizations_summary" msgid="2375789014394339008">"वाय-फाय चालू असताना बॅटरी वापर कमी करा"</string>
+ <string name="wifi_suspend_optimizations_summary" msgid="2375789014394339008">"वाय-फाय सुरू असताना बॅटरी वापर कमी करा"</string>
<string name="wifi_limit_optimizations_summary" msgid="1192849485764156570">"वाय-फाय द्वारे वापरलेल्या बॅटरीवर मर्यादा घाला"</string>
<string name="wifi_switch_away_when_unvalidated" msgid="2418577764071293971">"वाय-फायला इंटरनेट ॲक्सेस नसल्यास मोबाइल डेटावर स्विच करा."</string>
<string name="wifi_cellular_data_fallback_title" msgid="5067241930716252665">"मोबाइल डेटावर स्वयंचलितपणे स्विच करा"</string>
<string name="wifi_cellular_data_fallback_summary" msgid="2721467405851519769">"वाय-फायवरून इंटरनेट ॲक्सेस नसताना मोबाइल डेटा वापरा. डेटा वापर शुल्क लागू शकते."</string>
<string name="wifi_add_network" msgid="4094957940791876640">"नेटवर्क जोडा"</string>
<string name="wifi_configure_settings_preference_title" msgid="2678534679408777268">"वाय-फाय प्राधान्ये"</string>
- <string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="5714892572614655675">"वाय-फाय आपोआप परत चालू होते"</string>
+ <string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="5714892572614655675">"वाय-फाय आपोआप परत सुरू होते"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_off" msgid="286904094152909651">"वाय-फाय आपोआप परत सुरू होत नाही"</string>
<string name="wifi_access_points" msgid="1647976498906871869">"वाय-फाय नेटवर्क"</string>
<string name="wifi_menu_more_options" msgid="8318269834264035524">"अधिक पर्याय"</string>
<string name="wifi_menu_p2p" msgid="4945665601551289791">"वाय-फाय डिरेक्ट"</string>
<string name="wifi_menu_scan" msgid="9082691677803181629">"स्कॅन करा"</string>
<string name="wifi_menu_advanced" msgid="5984484498045511072">"प्रगत"</string>
- <string name="wifi_menu_configure" msgid="52192491120701266">"कॉन्फिगर करा"</string>
+ <string name="wifi_menu_configure" msgid="52192491120701266">"कॉंफिगर करा"</string>
<string name="wifi_menu_connect" msgid="3984327567173931219">"नेटवर्कवर कनेक्ट करा"</string>
<string name="wifi_menu_remember" msgid="717257200269700641">"नेटवर्क लक्षात ठेवा"</string>
<string name="wifi_menu_forget" msgid="7561140554450163075">"नेटवर्क विसरा"</string>
<string name="wifi_menu_modify" msgid="4080178040721021101">"नेटवर्क सुधारित करा"</string>
- <string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"उपलब्ध नेटवर्क पाहण्यासाठी, वाय-फाय चालू करा."</string>
+ <string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"उपलब्ध नेटवर्क पाहण्यासाठी, वाय-फाय सुरू करा."</string>
<string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"वाय-फाय नेटवर्क शोधत आहे…"</string>
<string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"तुम्हाला वाय-फाय नेटवर्क बदलण्याची परवानगी नाही."</string>
<string name="wifi_more" msgid="3538241640407382185">"अधिक"</string>
@@ -981,7 +980,7 @@
<string name="wifi_wps_available_second_item" msgid="5703265526619705185">" (WPS उपलब्ध)"</string>
<string name="wifi_carrier_connect" msgid="7202618367339982884">"वाहक वाय-फाय नेटवर्क"</string>
<string name="wifi_carrier_content" msgid="3467402515071949783">"<xliff:g id="NAME">%1$s</xliff:g> ने कनेक्ट करा"</string>
- <string name="wifi_scan_always_turnon_message" msgid="7811846312032594248">"स्थान अचूकता सुधारण्यासाठी आणि इतर हेतूंसाठी, <xliff:g id="APP_NAME">%1$s</xliff:g> ला नेटवर्क स्कॅनिंग चालू करण्याची आवश्यकता आहे, वाय-फाय बंद असताना देखील.\n\nस्कॅन करू इच्छित सर्व ॲप्सना अनुमती द्यायची?"</string>
+ <string name="wifi_scan_always_turnon_message" msgid="7811846312032594248">"स्थान अचूकता सुधारण्यासाठी आणि इतर हेतूंसाठी, <xliff:g id="APP_NAME">%1$s</xliff:g> ला नेटवर्क स्कॅनिंग सुरू करण्याची आवश्यकता आहे, वाय-फाय बंद असताना देखील.\n\nस्कॅन करू इच्छित सर्व ॲप्सना अनुमती द्यायची?"</string>
<string name="wifi_scan_always_turnoff_message" msgid="556993843641750002">"हे बंद करण्यासाठी, ओव्हरफ्लो मेनू मधील प्रगत वर जा."</string>
<string name="wifi_scan_always_confirm_allow" msgid="8857664849515496237">"अनुमती द्या"</string>
<string name="wifi_scan_always_confirm_deny" msgid="6190909841125369403">"नकार द्या"</string>
@@ -994,7 +993,7 @@
<string name="lost_internet_access_title" msgid="1061916948695946130">"वाय-फाय इंटरनेटशी कनेक्ट केलेले नाही"</string>
<string name="lost_internet_access_text" msgid="8962010031520731813">"वाय-फायचे कनेक्शन खराब असताना तुम्ही मोबाइल नेटवर्कवर स्विच करू शकता. डेटा वापर शुल्क लागू होऊ शकते."</string>
<string name="lost_internet_access_switch" msgid="9218006455779873700">"मोबाइलवर स्विच करा"</string>
- <string name="lost_internet_access_cancel" msgid="6577871064062518744">"वाय‑फाय वर सुरु ठेवा"</string>
+ <string name="lost_internet_access_cancel" msgid="6577871064062518744">"वाय‑फाय वर सुरू ठेवा"</string>
<string name="lost_internet_access_persist" msgid="6368659013482055611">"पुन्हा कधीही दर्शवू नका"</string>
<string name="wifi_connect" msgid="5653612760223533650">"कनेक्ट करा"</string>
<string name="wifi_turned_on_message" msgid="3377779146238242894">"वाय-फाय सुरू केले आहे"</string>
@@ -1046,7 +1045,7 @@
<string name="wifi_p2p_persist_network" msgid="1110453878886476660">"हे कनेक्शन लक्षात ठेवा"</string>
<string name="wifi_p2p_menu_search" msgid="8207638860263805291">"डिव्हाइसेस शोधा"</string>
<string name="wifi_p2p_menu_searching" msgid="7443249001543208106">"शोधत आहे..."</string>
- <string name="wifi_p2p_menu_rename" msgid="2129974878377065488">"डीव्हाइसला पुन्हा नाव द्या"</string>
+ <string name="wifi_p2p_menu_rename" msgid="2129974878377065488">"डिव्हाइसला पुन्हा नाव द्या"</string>
<string name="wifi_p2p_peer_devices" msgid="8232126067045093382">"पीअर डिव्हाइसेस"</string>
<string name="wifi_p2p_remembered_groups" msgid="1356458238836730346">"लक्षात ठेवलेले समूह"</string>
<string name="wifi_p2p_failed_connect_message" msgid="6103436959132424093">"कनेक्ट करु शकलो नाही"</string>
@@ -1061,10 +1060,10 @@
<string name="wifi_hotspot_off_subtext" msgid="6177054857136221058">"इतर डिव्हाइससोबत इंटरनेट किंवा आशय शेअर करत नाही"</string>
<string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="71421730039785897">"या टॅबलेटचे इंटरनेट कनेक्शन हॉटस्पॉटने शेअर करत आहे"</string>
<string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="8914285514605049879">"या फोनचे इंटरनेट कनेक्शन हॉटस्पॉटने शेअर करत आहे"</string>
- <string name="wifi_hotspot_on_local_only_subtext" msgid="7415381343846704553">"अॅप आशय शेअर करत आहे. इंटरनेट कनेक्शन शेअर करण्यासाठी, हॉटस्पॉट बंद करा, नंतर चालू करा"</string>
+ <string name="wifi_hotspot_on_local_only_subtext" msgid="7415381343846704553">"अॅप आशय शेअर करत आहे. इंटरनेट कनेक्शन शेअर करण्यासाठी, हॉटस्पॉट बंद करा, नंतर सुरू करा"</string>
<string name="wifi_hotspot_no_password_subtext" msgid="5400500962974373706">"पासवर्ड सेट केलेला नाही"</string>
<string name="wifi_hotspot_name_title" msgid="6572202165400226127">"हॉटस्पॉट नाव"</string>
- <string name="wifi_hotspot_name_summary_connecting" msgid="5176787959408511889">"<xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g> चालू करत आहे..."</string>
+ <string name="wifi_hotspot_name_summary_connecting" msgid="5176787959408511889">"<xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g> सुरू करत आहे..."</string>
<string name="wifi_hotspot_name_summary_connected" msgid="8387768642326756749">"इतर डिव्हाइस <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>शी कनेक्ट होऊ शकतात"</string>
<string name="wifi_hotspot_password_title" msgid="4289338152595154889">"हॉटस्पॉट पासवर्ड"</string>
<string name="wifi_hotspot_ap_band_title" msgid="3485744480410441949">"AP बॅंड"</string>
@@ -1072,7 +1071,7 @@
<string name="wifi_hotspot_footer_info_local_only" msgid="3339582350894639261">"जवळपासच्या डिव्हाइससोबत आशय शेअर करण्यासाठी अॅप्स हॉटस्पॉट तयार करू शकतात."</string>
<string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"हॉटस्पॉट आपोआप बंद करा"</string>
<string name="wifi_hotspot_auto_off_summary" msgid="3866769400624802105">"कुठलीही डिव्हाइस कनेक्ट केली नसल्यास, वाय-फाय हॉटस्पॉट बंद होईल"</string>
- <string name="wifi_tether_starting" msgid="7676952148471297900">"हॉटस्पॉट चालू करत आहे…"</string>
+ <string name="wifi_tether_starting" msgid="7676952148471297900">"हॉटस्पॉट सुरू करत आहे…"</string>
<string name="wifi_tether_stopping" msgid="7478561853791953349">"हॉटस्पॉट बंद करत आहे…"</string>
<string name="wifi_tether_enabled_subtext" msgid="7534760116478734006">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> सक्रिय आहे"</string>
<string name="wifi_tether_failed_subtext" msgid="3501001612207106">"पोर्टेबल वाय-फाय हॉटस्पॉट एरर"</string>
@@ -1103,11 +1102,14 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"वाय-फाय"</item>
+ <item msgid="2271962426654621656">"मोबाइल"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"वाय-फाय उपलब्ध नसल्यास, मोबाइल नेटवर्क वापरा"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"मोबाइल नेटवर्क उपलब्ध नसल्यास, वाय-फाय वापरा"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"वाय-फायवरून कॉल करा. वाय-फाय गमावल्यास, कॉल संपेल."</string>
- <string name="wifi_calling_off_explanation" msgid="1653424723742898015">"वाय-फाय कॉलिंग चालू असताना, तुमचा फोन तुमच्या प्राधान्यावर आणि कोणता सिग्नल मजबूत आहे याच्या आधारावर, वाय-फाय नेटवर्क किंवा तुमच्या वाहकाच्या नेटवर्कद्वारे कॉल राउट करू शकतो. हे वैशिष्ट्य सुरू करण्यापूर्वी, फी आणि इतर तपशीलांच्या संबंधात तुमच्या वाहकास विचारा. <xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
+ <string name="wifi_calling_off_explanation" msgid="1653424723742898015">"वाय-फाय कॉलिंग सुरू असताना, तुमचा फोन तुमच्या प्राधान्यावर आणि कोणता सिग्नल मजबूत आहे याच्या आधारावर, वाय-फाय नेटवर्क किंवा तुमच्या वाहकाच्या नेटवर्कद्वारे कॉल राउट करू शकतो. हे वैशिष्ट्य सुरू करण्यापूर्वी, फी आणि इतर तपशीलांच्या संबंधात तुमच्या वाहकास विचारा. <xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="8648609693875720408"></string>
<string name="emergency_address_title" msgid="5779915349686787024">"संकटकालीन पत्ता"</string>
<string name="emergency_address_summary" msgid="478668478569851714">"तुम्ही वाय-फाय वरून आणीबाणी कॉल केल्यावर हे तुमचे स्थान असल्याचे दाखवले जाते"</string>
@@ -1166,7 +1168,7 @@
<string name="accessibility_category_personal" msgid="1423427301759058762">"वैयक्तिक प्रोफाईल खाती"</string>
<string name="accessibility_work_account_title" msgid="3195468574776888011">"कार्य खाते - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
<string name="accessibility_personal_account_title" msgid="7251761883688839354">"वैयक्तिक खाते - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
- <string name="search_settings" msgid="5809250790214921377">"शोध"</string>
+ <string name="search_settings" msgid="5809250790214921377">"Search"</string>
<string name="display_settings" msgid="1045535829232307190">"डिस्प्ले"</string>
<string name="accelerometer_title" msgid="2427487734964971453">"ऑटो-रोटेट स्क्रीन"</string>
<string name="color_mode_title" msgid="8164858320869449142">"रंग"</string>
@@ -1180,7 +1182,7 @@
<string name="accelerometer_summary_on" product="default" msgid="6454733048264875491">"फोन फिरवताना ओरिएंटेशन आपोआप स्विच करा"</string>
<string name="accelerometer_summary_off" product="tablet" msgid="2663240868158338608">"टॅब्लेट फिरवताना ओरिएंटेशन आपोआप स्विच करा"</string>
<string name="accelerometer_summary_off" product="default" msgid="3366996018631557687">"फोन फिरवताना ओरिएंटेशन आपोआप स्विच करा"</string>
- <string name="brightness" msgid="7309120144111305275">"चकाकी स्तर"</string>
+ <string name="brightness" msgid="7309120144111305275">"ब्राइटनेस पातळी"</string>
<string name="brightness_title" msgid="5660190946911149690">"चकाकी"</string>
<string name="brightness_summary" msgid="8687101964451818730">"स्क्रीनची चकाकी समायोजित करा"</string>
<string name="auto_brightness_title" msgid="908511534369820426">"अॅडॅप्टिव्ह ब्राइटनेस"</string>
@@ -1200,7 +1202,7 @@
<string name="auto_brightness_subtitle" msgid="8516999348793100665">"तुम्ही प्राधान्य दिलेला उज्ज्वलता स्तर"</string>
<string name="auto_brightness_off_summary" msgid="6162650416289359104">"उपलब्ध प्रकाशासाठी समायोजित करू नका"</string>
<string name="auto_brightness_very_high_summary" msgid="7202032980509583918">"वाढलेला बॅटरी वापर"</string>
- <string name="auto_brightness_disclaimer" msgid="5416696351199148809">"उपलब्ध प्रकाशासाठी उज्ज्वलता स्तर अनुकूल करा. हे वैशिष्ट्य चालू असताना, तुम्ही तरीही उज्ज्वलता तात्पुरती समायोजित करू शकता."</string>
+ <string name="auto_brightness_disclaimer" msgid="5416696351199148809">"उपलब्ध प्रकाशासाठी उज्ज्वलता स्तर अनुकूल करा. हे वैशिष्ट्य सुरू असताना, तुम्ही तरीही उज्ज्वलता तात्पुरती समायोजित करू शकता."</string>
<string name="auto_brightness_description" msgid="8209140379089535411">"तुमच्या स्क्रीनचा ब्राइटनेस तुमच्या वातावरण आणि ॲक्टिव्हिटीशी आपोआप अॅडजस्ट होईल. अॅडॅप्टिव्ह ब्राइटनेसला तुमची प्राधान्ये जाणून घेण्यात मदत करण्यासाठी तुम्ही स्लाइडर मॅन्युअली हलवू शकता."</string>
<string name="display_white_balance_title" msgid="5747260735311935143">"व्हाइट बॅलन्स डिस्प्ले करा"</string>
<string name="adaptive_sleep_title" msgid="3237620948260957018">"स्क्रीन अवेअर"</string>
@@ -1212,7 +1214,7 @@
<string name="night_display_text" msgid="5330502493684652527">"रात्रीचा प्रकाश तुमच्या स्क्रीनला पिवळसर तपकिरी छटा देतो. यामुळे मंद प्रकाशात तुमची स्क्रीन पाहणे किंवा वाचणे सोपे होते आणि तुम्हाला झोप येण्यात मदत होऊ शकते."</string>
<string name="night_display_auto_mode_title" msgid="8493573087102481588">"शेड्युल"</string>
<string name="night_display_auto_mode_never" msgid="2897444637217807088">"काहीही नाही"</string>
- <string name="night_display_auto_mode_custom" msgid="1400891076453963151">"ठराविक वेळी सुरू होतो"</string>
+ <string name="night_display_auto_mode_custom" msgid="1400891076453963151">"ठरावीक वेळी सुरू होतो"</string>
<string name="night_display_auto_mode_twilight" msgid="4000162110017520674">"सूर्यास्त-सूर्योदय सुरू राहतो"</string>
<string name="night_display_start_time_title" msgid="1069255169673371077">"सुरू होण्याची वेळ"</string>
<string name="night_display_end_time_title" msgid="2760793157124245911">"संपण्याची वेळ"</string>
@@ -1220,9 +1222,9 @@
<string name="night_display_temperature_title" msgid="8375126629902616296">"तीव्रता"</string>
<string name="night_display_summary_off" msgid="8850539785332228069">"बंद / <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="night_display_summary_off_auto_mode_never" msgid="8618824386434992487">"आपोआप कधीही सुरू होणार नाही"</string>
- <string name="night_display_summary_off_auto_mode_custom" msgid="596847003171394411">"<xliff:g id="ID_1">%1$s</xliff:g> वाजता आपोआप चालू होईल"</string>
- <string name="night_display_summary_off_auto_mode_twilight" msgid="4071750976585359952">"सूर्यास्ताच्या वेळी आपोआप चालू होईल"</string>
- <string name="night_display_summary_on" msgid="6580571388791426596">"चालू / <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="night_display_summary_off_auto_mode_custom" msgid="596847003171394411">"<xliff:g id="ID_1">%1$s</xliff:g> वाजता आपोआप सुरू होईल"</string>
+ <string name="night_display_summary_off_auto_mode_twilight" msgid="4071750976585359952">"सूर्यास्ताच्या वेळी आपोआप सुरू होईल"</string>
+ <string name="night_display_summary_on" msgid="6580571388791426596">"सुरू / <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="night_display_summary_on_auto_mode_never" msgid="5461580863060506687">"आपोआप कधीही बंद होणार नाही"</string>
<string name="night_display_summary_on_auto_mode_custom" msgid="2200631112239399233">"<xliff:g id="ID_1">%1$s</xliff:g> वाजता आपोआप बंद होईल"</string>
<string name="night_display_summary_on_auto_mode_twilight" msgid="8386769601369289561">"सूर्योदयाच्या वेळी आपोआप बंद होईल"</string>
@@ -1250,9 +1252,9 @@
<string name="screensaver_settings_summary_dock" msgid="6297808146601570196">"डॉक केलेले असताना"</string>
<string name="screensaver_settings_summary_never" msgid="3995259444981620707">"कधीही नाही"</string>
<string name="screensaver_settings_summary_off" msgid="6119947316484763131">"बंद"</string>
- <string name="screensaver_settings_disabled_prompt" msgid="1897518064782596947">"फोन डॉक केलेला असताना आणि/किंवा निष्क्रिय असताना काय होते हे नियंत्रित करण्यासाठी स्क्रीन सेव्हर चालू करा."</string>
+ <string name="screensaver_settings_disabled_prompt" msgid="1897518064782596947">"फोन डॉक केलेला असताना आणि/किंवा निष्क्रिय असताना काय होते हे नियंत्रित करण्यासाठी स्क्रीन सेव्हर सुरू करा."</string>
<string name="screensaver_settings_when_to_dream" msgid="3763052013516826348">"कधी सुरू करायचे"</string>
- <string name="screensaver_settings_current" msgid="4017556173596361672">"सद्य स्क्रीन सेव्हर"</string>
+ <string name="screensaver_settings_current" msgid="4017556173596361672">"सध्याचा स्क्रीन सेव्हर"</string>
<string name="screensaver_settings_dream_start" msgid="3772227299054662550">"आता सुरू करा"</string>
<string name="screensaver_settings_button" msgid="4662384378821837589">"सेटिंग्ज"</string>
<string name="automatic_brightness" msgid="8663792987774126192">"स्वयंचलित चकाकी"</string>
@@ -1349,13 +1351,13 @@
<string name="status_data_network_type" msgid="2344720457353394909">"मोबाइल डेटा नेटवर्क प्रकार"</string>
<string name="status_voice_network_type" msgid="8767320162513876610">"मोबाइल व्हॉइस नेटवर्क प्रकार"</string>
<string name="status_latest_area_info" msgid="3043410596911526699">"ऑपरेटर माहिती"</string>
- <string name="status_data_state" msgid="4538705798873861963">"मोबाईल नेटवर्क स्थिती"</string>
+ <string name="status_data_state" msgid="4538705798873861963">"मोबाइल नेटवर्क स्थिती"</string>
<string name="status_esim_id" msgid="9201767073386770286">"EID"</string>
<string name="status_service_state" msgid="4406215321296496234">"सेवा स्थिती"</string>
- <string name="status_signal_strength" msgid="4302597886933728789">"सिग्नल स्ट्रेंथ"</string>
+ <string name="status_signal_strength" msgid="4302597886933728789">"सिग्नल सामर्थ्य"</string>
<string name="status_roaming" msgid="5191044997355099561">"रोमिंग"</string>
<string name="status_operator" msgid="6017986100643755390">"नेटवर्क"</string>
- <string name="status_wifi_mac_address" msgid="3868452167971295995">"वाय-फाय MAC पत्ता"</string>
+ <string name="status_wifi_mac_address" msgid="3868452167971295995">"वाय-फाय MAC अॅड्रेस"</string>
<string name="status_bt_address" msgid="460568179311735657">"ब्लूटूथ पत्ता"</string>
<string name="status_serial_number" msgid="8257722124627415159">"सिरीअल नंबर"</string>
<string name="status_up_time" msgid="77128395333934087">"सुरू असल्याचा कालावधी"</string>
@@ -1372,8 +1374,8 @@
<string name="memory_downloads_usage" msgid="7039979723012065168">"डाउनलोड"</string>
<string name="memory_dcim_usage" msgid="599009211606524732">"चित्रे, व्हिडिओ"</string>
<string name="memory_music_usage" msgid="809605300042546279">"ऑडिओ (संगीत, रिंगटोन, पॉडकास्ट इ.)"</string>
- <string name="memory_media_misc_usage" msgid="6258827529046910705">"इतर फायली"</string>
- <string name="memory_media_cache_usage" msgid="1307620682751377717">"कॅश केलेला डेटा"</string>
+ <string name="memory_media_misc_usage" msgid="6258827529046910705">"इतर फाइल"</string>
+ <string name="memory_media_cache_usage" msgid="1307620682751377717">"कॅशे केलेला डेटा"</string>
<string name="sd_eject" product="nosdcard" msgid="3016608823130472449">"शेअर केलेले संचयन अनमाउंट करा"</string>
<string name="sd_eject" product="default" msgid="4943338855474925396">"SD कार्ड अनमाउंट करा"</string>
<string name="sd_eject_summary" product="nosdcard" msgid="8571017212318899178">"अंतर्गत USB स्टोरेज अनमाउंट करा"</string>
@@ -1388,8 +1390,8 @@
<string name="sd_format" product="default" msgid="1346245995138883960">"SD कार्ड मिटवा"</string>
<string name="sd_format_summary" product="nosdcard" msgid="1179857727779521920">"अंतर्गत USB संचयनावरील सर्व डेटा मिटवते, जसे की संगीत आणि फोटो"</string>
<string name="sd_format_summary" product="default" msgid="4284028411908176234">"SD कार्डवरील सर्व डेटा मिटवते, जसे की संगीत आणि फोटो"</string>
- <string name="memory_clear_cache_title" msgid="4306793268129306684">"कॅश केलेला डेटा साफ करायचा?"</string>
- <string name="memory_clear_cache_message" msgid="6723120398411410031">"हे सर्व ॲप्ससाठी कॅश केलेला डेटा साफ करेल."</string>
+ <string name="memory_clear_cache_title" msgid="4306793268129306684">"कॅशे केलेला डेटा साफ करायचा?"</string>
+ <string name="memory_clear_cache_message" msgid="6723120398411410031">"हे सर्व ॲप्ससाठी कॅशे केलेला डेटा साफ करेल."</string>
<string name="mtp_ptp_mode_summary" msgid="6074099855478444183">"MTP किंवा TP कार्य सक्रिय आहे"</string>
<string name="dlg_confirm_unmount_title" product="nosdcard" msgid="3843209947310774105">"USB स्टोरेज अनमाउंट करायचे?"</string>
<string name="dlg_confirm_unmount_title" product="default" msgid="4400426555375434431">"SD कार्ड अनमाउंट करायचे?"</string>
@@ -1404,7 +1406,7 @@
<string name="sd_ejecting_title" msgid="595074246815112145">"अनमाउंट करत आहे"</string>
<string name="sd_ejecting_summary" msgid="5708943172014003213">"अनमाउंट प्रगतीवर"</string>
<string name="storage_low_title" msgid="6957178208426099592">"संचयन स्थान संपत आहे"</string>
- <string name="storage_low_summary" msgid="4475275204869514141">"सिंक करणे यासारखी, काही सिस्टम कार्ये, योग्यरितीने कार्य करू शकत नाही. अॅप्स किंवा मीडिया सामग्री यासारखे, आयटम हटवून किंवा अनपिन करून स्थान मोकळे करण्याचा प्रयत्न करा."</string>
+ <string name="storage_low_summary" msgid="4475275204869514141">"सिंक करणे यासारखी, काही सिस्टम कार्ये, योग्यरितीने कार्य करू शकत नाही. अॅप्स किंवा मीडिया आशय यासारखे, आयटम हटवून किंवा अनपिन करून स्थान मोकळे करण्याचा प्रयत्न करा."</string>
<string name="storage_menu_rename" msgid="3731682449294417745">"नाव बदला"</string>
<string name="storage_menu_mount" msgid="6395893560780365473">"माउंट करा"</string>
<string name="storage_menu_unmount" msgid="5041360076873514189">"बाहेर काढा"</string>
@@ -1420,9 +1422,9 @@
<string name="storage_title_usb" msgid="2015671467177303099">"USB कॉंप्युटर कनेक्शन"</string>
<string name="usb_connection_category" msgid="2888975803638116041">"म्हणून कनेक्ट करा"</string>
<string name="usb_mtp_title" msgid="6893938968831995500">"मीडिया डिव्हाइस (MTP)"</string>
- <string name="usb_mtp_summary" msgid="4427354560399094322">"Windows वरील मीडिया फायली वापरून किंवा Mac वरील Android फाईल स्थानांतरण वापरून तुम्हाला मीडिया फायली स्थानांतरण करू देते (www.android.com/filetransfer पहा)"</string>
+ <string name="usb_mtp_summary" msgid="4427354560399094322">"Windows वरील मीडिया फाइल वापरून किंवा Mac वरील Android फाइल स्थानांतरण वापरून तुम्हाला मीडिया फाइल स्थानांतरण करू देते (www.android.com/filetransfer पहा)"</string>
<string name="usb_ptp_title" msgid="6629335976394685361">"कॅमेरा (PTP)"</string>
- <string name="usb_ptp_summary" msgid="460425275251168189">"तुम्हाला कॅमेरा सॉफ्टवेअर वापरून फोटो स्थानांतर आणि MTP वर समर्थित नसलेल्या संगणकावर कोणत्याही फायली स्थानांतर करू देते"</string>
+ <string name="usb_ptp_summary" msgid="460425275251168189">"तुम्हाला कॅमेरा सॉफ्टवेअर वापरून फोटो स्थानांतर आणि MTP वर समर्थित नसलेल्या संगणकावर कोणत्याही फाइल स्थानांतर करू देते"</string>
<string name="usb_midi_title" msgid="8626512517313340943">"MIDI"</string>
<string name="usb_midi_summary" msgid="3607444815743771712">"MIDI सक्षम असलेल्या अनुप्रयोगांना आपल्या संगणकावर MIDI सॉफ्टवेअरसह USB वर कार्य करू द्या."</string>
<string name="storage_other_users" msgid="1055693465220962928">"इतर वापरकर्ते"</string>
@@ -1442,8 +1444,8 @@
<string name="storage_dialog_unmounted" msgid="515810851912430933">"हे <xliff:g id="NAME_0">^1</xliff:g> सुरक्षितपणे बाहेर काढले आहे परंतु अद्याप उपलब्ध आहे. \n\nहे <xliff:g id="NAME_1">^1</xliff:g> वापरण्यासाठी, आपल्याला प्रथम ते माउंट करणे आवश्यक आहे."</string>
<string name="storage_dialog_unmountable" msgid="7082856306456936054">"हे <xliff:g id="NAME_0">^1</xliff:g> दूषित झाले आहे. \n\n हे <xliff:g id="NAME_1">^1</xliff:g> वापरण्यासाठी, आपल्याला प्रथम ते सेट करणे आवश्यक आहे."</string>
<string name="storage_dialog_unsupported" msgid="8274023677580782553">"हे डिव्हाइस या <xliff:g id="NAME_0">^1</xliff:g> चे सपोर्ट करत नाही. \n\nया डिव्हाइससह हे <xliff:g id="NAME_1">^1</xliff:g> वापरण्यासाठी आपल्याला प्रथम ते सेट करणे आवश्यक आहे."</string>
- <string name="storage_internal_format_details" msgid="2780806013122012384">"फॉर्मेट झाल्यानंतर, तुम्ही हे <xliff:g id="NAME_0">^1</xliff:g> इतर डिव्हाइसमध्ये वापरू शकता. \n\nया <xliff:g id="NAME_1">^1</xliff:g> वरील सर्व डेटा मिटविला जाईल. बॅकअप घेण्याचा प्रथम विचार करा. \n\n"<b>"फोटो आणि इतर मीडियाचा बॅकअप घ्या"</b>\n"या डिव्हाइस वरील पर्यायी स्टोरेजवर तुमच्या मीडिया फायली हलवा किंवा USB केबल वापरून त्या कॉंप्युटरवर ट्रान्सफर करा. \n\n"<b>"अॅप्सचा बॅकअप घ्या"</b>\n" <xliff:g id="NAME_6">^1</xliff:g> वर स्टोअर केलेली सर्व अॅप्स अनइंस्टॉल केली जातील आणि त्यांचा डेटा मिटविला जाईल. हे अॅप्स ठेवण्यासाठी, ते या डिव्हाइस वरील पर्यायी स्टोरेजवर हलवा."</string>
- <string name="storage_internal_unmount_details" msgid="4667435317528624039"><b>"तुम्ही <xliff:g id="NAME_0">^1</xliff:g> हे बाहेर काढता तेव्हा, त्यावर स्टोअर केलेले अॅप्स कार्य करणे थांबवतील आणि ते पुन्हा घातले जाईपर्यंत त्यावर स्टोअर केलेल्या मीडिया फायली उपलब्ध असणार नाहीत."</b>" \n\nहे <xliff:g id="NAME_1">^1</xliff:g> केवळ या डिव्हाइसवर कार्य करण्यासाठी स्वरूपित केले आहे. ते इतर कशावरही कार्य करणार नाही."</string>
+ <string name="storage_internal_format_details" msgid="2780806013122012384">"फॉर्मेट झाल्यानंतर, तुम्ही हे <xliff:g id="NAME_0">^1</xliff:g> इतर डिव्हाइसमध्ये वापरू शकता. \n\nया <xliff:g id="NAME_1">^1</xliff:g> वरील सर्व डेटा मिटविला जाईल. बॅकअप घेण्याचा प्रथम विचार करा. \n\n"<b>"फोटो आणि इतर मीडियाचा बॅकअप घ्या"</b>\n"या डिव्हाइस वरील पर्यायी स्टोरेजवर तुमच्या मीडिया फाइल हलवा किंवा USB केबल वापरून त्या कॉंप्युटरवर ट्रान्सफर करा. \n\n"<b>"अॅप्सचा बॅकअप घ्या"</b>\n" <xliff:g id="NAME_6">^1</xliff:g> वर स्टोअर केलेली सर्व अॅप्स अनइंस्टॉल केली जातील आणि त्यांचा डेटा मिटविला जाईल. हे अॅप्स ठेवण्यासाठी, ते या डिव्हाइस वरील पर्यायी स्टोरेजवर हलवा."</string>
+ <string name="storage_internal_unmount_details" msgid="4667435317528624039"><b>"तुम्ही <xliff:g id="NAME_0">^1</xliff:g> हे बाहेर काढता तेव्हा, त्यावर स्टोअर केलेले अॅप्स कार्य करणे थांबवतील आणि ते पुन्हा घातले जाईपर्यंत त्यावर स्टोअर केलेल्या मीडिया फाइल उपलब्ध असणार नाहीत."</b>" \n\nहे <xliff:g id="NAME_1">^1</xliff:g> केवळ या डिव्हाइसवर कार्य करण्यासाठी स्वरूपित केले आहे. ते इतर कशावरही कार्य करणार नाही."</string>
<string name="storage_internal_forget_details" msgid="5655856574682184453">"अॅप्स, फोटो किंवा या <xliff:g id="NAME">^1</xliff:g> मध्ये असलेला डेटा वापरण्यासाठी, तो पुन्हा घाला. \n\nपर्यायीपणे, डिव्हाइस उपलब्ध नसल्यास तुम्ही हे स्टोरेज विसरणे निवडू शकता. \n\nतुम्ही विसरणे निवडल्यास, डिव्हाइस मध्ये असलेला सर्व डेटा नेहमीसाठी गमावला जाईल. \n\nतुम्ही नंतर अॅप्स पुन्हा इंस्टॉल करू शकता, परंतु या डिव्हाइस वर स्टोअर केलेला त्यांचा डेटा गमावला जाईल."</string>
<string name="storage_internal_forget_confirm_title" msgid="331032276130605241">"<xliff:g id="NAME">^1</xliff:g> ला विसरला?"</string>
<string name="storage_internal_forget_confirm" msgid="3052483375203727176">"या <xliff:g id="NAME">^1</xliff:g> वर स्टोअर केलेले सर्व अॅप्स, फोटो आणि डेटा कायमचा गमावला जाईल."</string>
@@ -1451,11 +1453,11 @@
<string name="storage_detail_images" msgid="6996202225684468964">"इमेज"</string>
<string name="storage_detail_videos" msgid="6030983354721080849">"व्हिडिओ"</string>
<string name="storage_detail_audio" msgid="6011098436589663944">"ऑडिओ"</string>
- <string name="storage_detail_cached" msgid="5761648455067920683">"कॅश केलेला डेटा"</string>
+ <string name="storage_detail_cached" msgid="5761648455067920683">"कॅशे केलेला डेटा"</string>
<string name="storage_detail_other" msgid="9164851767437306618">"इतर"</string>
<string name="storage_detail_system" msgid="6784247618772153283">"सिस्टम"</string>
<string name="storage_detail_explore" msgid="8206900269596580264">"<xliff:g id="NAME">^1</xliff:g> एक्सप्लोर करा"</string>
- <string name="storage_detail_dialog_other" msgid="5073511663616043370">"इतर गोष्टींमध्ये अॅप्सवरून सेव्ह करून शेअर केलेल्या फायली, इंटरनेट किंवा ब्लूटूथ वरून डाउनलोड केलेल्या फायली, Android फायली आणि इत्यादीचा समावेश असतो. \n\n<xliff:g id="NAME">^1</xliff:g> चा दिसणाराा आशय पाहण्यासाठी, एक्सप्लोर करा वर टॅप करा."</string>
+ <string name="storage_detail_dialog_other" msgid="5073511663616043370">"इतर गोष्टींमध्ये अॅप्सवरून सेव्ह करून शेअर केलेल्या फाइल, इंटरनेट किंवा ब्लूटूथ वरून डाउनलोड केलेल्या फाइल, Android फाइल आणि इत्यादीचा समावेश असतो. \n\n<xliff:g id="NAME">^1</xliff:g> चा दिसणाराा आशय पाहण्यासाठी, एक्सप्लोर करा वर टॅप करा."</string>
<string name="storage_detail_dialog_system" msgid="1472572861360014226">"सिस्टममध्ये Android व्हर्जन <xliff:g id="VERSION">%s</xliff:g> रन करण्यासाठी वापरल्या जाणाऱ्या फायलींचा समावेश आहे"</string>
<string name="storage_detail_dialog_user" msgid="1663117417635010371">"<xliff:g id="USER_0">^1</xliff:g> कडे <xliff:g id="SIZE">^2</xliff:g> स्टोरेज वापरणारे, सेव्ह केलेले फोटो, संगीत, अॅप्स किंवा इतर डेटा असू शकतो. \n\nतपशील पाहण्यासाठी, <xliff:g id="USER_1">^1</xliff:g> वर स्विच करा."</string>
<string name="storage_wizard_init_title" msgid="3407283236421089014">"तुमचे <xliff:g id="NAME">^1</xliff:g> सेट करा"</string>
@@ -1471,7 +1473,7 @@
<string name="storage_wizard_format_progress_title" msgid="6905902731208646436">"<xliff:g id="NAME">^1</xliff:g> फॉर्मेट करत आहे…"</string>
<string name="storage_wizard_format_progress_body" msgid="5346709539457190419">"फॉरमॅट होत असताना <xliff:g id="NAME">^1</xliff:g> काढू टाकू नका."</string>
<string name="storage_wizard_migrate_title" msgid="7440473364104826496">"डेटा नवीन संचयनावर हलवा"</string>
- <string name="storage_wizard_migrate_body" msgid="4959356431201831339">"या नवीन <xliff:g id="NAME">^1</xliff:g> वर तुम्ही तुमचे फोटो, फायली आणि काही अॅप्स हलवू शकता. \n\nहलविण्यास सुमारे <xliff:g id="TIME">^2</xliff:g> लागेल आणि अंतर्गत संचयनावर <xliff:g id="SIZE">^3</xliff:g> मोकळे करेल. काही अॅप्स सुरु असताना कार्य करणार नाहीत."</string>
+ <string name="storage_wizard_migrate_body" msgid="4959356431201831339">"या नवीन <xliff:g id="NAME">^1</xliff:g> वर तुम्ही तुमचे फोटो, फाइल आणि काही अॅप्स हलवू शकता. \n\nहलविण्यास सुमारे <xliff:g id="TIME">^2</xliff:g> लागेल आणि अंतर्गत संचयनावर <xliff:g id="SIZE">^3</xliff:g> मोकळे करेल. काही अॅप्स सुरू असताना कार्य करणार नाहीत."</string>
<string name="storage_wizard_migrate_now" msgid="9004605853000689024">"आता हलवा"</string>
<string name="storage_wizard_migrate_later" msgid="5303070653970922924">"नंतर हलवा"</string>
<string name="storage_wizard_migrate_confirm_title" msgid="5768497751644935313">"आता डेटा हलवा"</string>
@@ -1481,32 +1483,32 @@
<string name="storage_wizard_migrate_details" msgid="4269509141637554985">"हलवण्यादरम्यान: \n• <xliff:g id="NAME">^1</xliff:g>काढू नका. \n• काही अॅप्स योग्यरीत्या कार्य करणार नाहीत. \n• डिव्हाइस चार्ज केलेले ठेवा."</string>
<string name="storage_wizard_ready_title" msgid="4905921139763520341">"तुमचे <xliff:g id="NAME">^1</xliff:g> वापरण्यासाठी तयार आहे"</string>
<string name="storage_wizard_ready_external_body" msgid="8785407468656286236">"तुमचे <xliff:g id="NAME">^1</xliff:g> फोटो आणि इतर मीडियासह वापरण्यासाठी तयार आहे."</string>
- <string name="storage_wizard_ready_internal_body" msgid="2258287496678469217">"तुमचे नवीन <xliff:g id="NAME">^1</xliff:g> कार्य करत आहे. \n\nया डिव्हाइसवर फोटो, फायली आणि अॅप डेटा हलविण्यासाठी, सेटिंग्ज > संचयनावर जा."</string>
+ <string name="storage_wizard_ready_internal_body" msgid="2258287496678469217">"तुमचे नवीन <xliff:g id="NAME">^1</xliff:g> कार्य करत आहे. \n\nया डिव्हाइसवर फोटो, फाइल आणि अॅप डेटा हलविण्यासाठी, सेटिंग्ज > संचयनावर जा."</string>
<string name="storage_wizard_move_confirm_title" msgid="7362472162039287488">"<xliff:g id="APP">^1</xliff:g> हलवा"</string>
<string name="storage_wizard_move_confirm_body" msgid="502315190416551319">"<xliff:g id="APP">^1</xliff:g> आणि त्याचा डेटा <xliff:g id="NAME_0">^2</xliff:g> वर हलविण्यास केवळ काही क्षण लागतील. हलविणे पूर्ण होईपर्यंत तुम्ही अॅप वापरण्यास सक्षम असणार नाहीत. \n\nहलविण्यादरम्यान <xliff:g id="NAME_1">^2</xliff:g> काढू नका."</string>
<string name="storage_wizard_move_unlock" msgid="7978193904519827600">"डेटा हलवण्यासाठी तुम्हाला <xliff:g id="APP">^1</xliff:g> या वापरकर्त्याला अनलॉक करावे लागेल."</string>
<string name="storage_wizard_move_progress_title" msgid="5250929161803336592">"<xliff:g id="APP">^1</xliff:g> हलवित आहे…"</string>
<string name="storage_wizard_move_progress_body" msgid="1713792142250410169">"हलविण्यादरम्यान <xliff:g id="NAME">^1</xliff:g> काढू नका. \n\nहलविणे पूर्ण होईपर्यंत या डिव्हाइसवरील <xliff:g id="APP">^2</xliff:g> अॅप उपलब्ध नसेल."</string>
<string name="storage_wizard_move_progress_cancel" msgid="9047521329704060401">"हलविणे रद्द करा"</string>
- <string name="storage_wizard_slow_body" msgid="2307974936036261069">"हे <xliff:g id="NAME_0">^1</xliff:g> धीमे असल्याचे दिसते. \n\nतुम्ही सुरु ठेवू शकता परंतु या स्थानावर हलविलेल्या अॅप्समध्ये अडथळा येऊ शकतो आणि डेटा स्थानांतरणास बराच वेळ लागू शकतो. \n\nअधिक चांगल्या कार्यप्रदर्शनासाठी आणखी जलद <xliff:g id="NAME_1">^1</xliff:g> वापरण्याचा विचार करा."</string>
+ <string name="storage_wizard_slow_body" msgid="2307974936036261069">"हे <xliff:g id="NAME_0">^1</xliff:g> धीमे असल्याचे दिसते. \n\nतुम्ही सुरू ठेवू शकता परंतु या स्थानावर हलविलेल्या अॅप्समध्ये अडथळा येऊ शकतो आणि डेटा स्थानांतरणास बराच वेळ लागू शकतो. \n\nअधिक चांगल्या कार्यप्रदर्शनासाठी आणखी जलद <xliff:g id="NAME_1">^1</xliff:g> वापरण्याचा विचार करा."</string>
<string name="storage_wizard_init_v2_title" msgid="7408910177547901960">"तुम्ही हे <xliff:g id="NAME">^1</xliff:g> कसे वापराल?"</string>
<string name="storage_wizard_init_v2_internal_title" product="tablet" msgid="7948795312504302810">"अतिरिक्त टॅबलेट स्टोरेजसाठी वापरा"</string>
- <string name="storage_wizard_init_v2_internal_summary" product="tablet" msgid="6237770506398410172">"फक्त या टॅबलेटवरील अॅप्स, फायली आणि मीडियासाठी"</string>
+ <string name="storage_wizard_init_v2_internal_summary" product="tablet" msgid="6237770506398410172">"फक्त या टॅबलेटवरील अॅप्स, फाइल आणि मीडियासाठी"</string>
<string name="storage_wizard_init_v2_internal_action" product="tablet" msgid="1016850267330050231">"टॅब्लेट स्टोरेज"</string>
<string name="storage_wizard_init_v2_internal_title" product="default" msgid="2782907833711627804">"अतिरिक्त फोन स्टोरेजसाठी वापरा"</string>
- <string name="storage_wizard_init_v2_internal_summary" product="default" msgid="6352521760027924000">"फक्त या फोनवरील अॅप्स, फायली आणि मीडियासाठी"</string>
+ <string name="storage_wizard_init_v2_internal_summary" product="default" msgid="6352521760027924000">"फक्त या फोनवरील अॅप्स, फाइल आणि मीडियासाठी"</string>
<string name="storage_wizard_init_v2_internal_action" product="default" msgid="3383888882755852046">"फोन स्टोरेज"</string>
<string name="storage_wizard_init_v2_or" msgid="883906565226069620">"किंवा"</string>
<string name="storage_wizard_init_v2_external_title" msgid="7009571510941803101">"पोर्टेबल स्टोरेजसाठी वापरा"</string>
- <string name="storage_wizard_init_v2_external_summary" msgid="825409811302836460">"डिव्हाइसमध्ये फायली आणि मीडिया स्थानांतरित करण्यासाठी"</string>
+ <string name="storage_wizard_init_v2_external_summary" msgid="825409811302836460">"डिव्हाइसमध्ये फाइल आणि मीडिया स्थानांतरित करण्यासाठी"</string>
<string name="storage_wizard_init_v2_external_action" msgid="4649591913020218098">"पोर्टेबल स्टोरेज"</string>
<string name="storage_wizard_init_v2_later" msgid="2605006907172213466">"नंतर सेट करा"</string>
<string name="storage_wizard_format_confirm_v2_title" msgid="1884699177320256159">"<xliff:g id="NAME">^1</xliff:g> हे फॉरमॅट करायचे का?"</string>
<string name="storage_wizard_format_confirm_v2_body" msgid="977657376082074305">"अॅप्स, फाइल्स आणि मीडिया स्टोर करण्यासाठी <xliff:g id="NAME_0">^1</xliff:g> ला फॉरमॅट करणे आवश्यक आहे. \n\nफॉरमॅट केल्यामुळे <xliff:g id="NAME_1">^2</xliff:g> वरील विद्यमान डेटा मिटवला जाईल. आशय गमावणे टाळण्यासाठी, दुसऱ्या <xliff:g id="NAME_2">^3</xliff:g> वर किंवा डिव्हाइसवर त्याचा बॅकअप घ्या."</string>
<string name="storage_wizard_format_confirm_v2_action" msgid="5576917958786300415">"<xliff:g id="NAME">^1</xliff:g> फॉरमॅट करा"</string>
<string name="storage_wizard_migrate_v2_title" msgid="6728034411587320249">"<xliff:g id="NAME">^1</xliff:g> वर आशय हलवायचा का?"</string>
- <string name="storage_wizard_migrate_v2_body" product="tablet" msgid="6943007011251294950">"तुम्ही या <xliff:g id="NAME">^1</xliff:g> मध्ये फायली, मिडिया आणि विशिष्ट अॅप्स हलवू शकता. \n\nहे तुमच्या टॅबलेटच्या स्टोरेजमधून <xliff:g id="SIZE">^2</xliff:g> जागा मोकळी करेल आणि त्यासाठी अंदाजे <xliff:g id="DURATION">^3</xliff:g> कालावधी लागेल."</string>
- <string name="storage_wizard_migrate_v2_body" product="default" msgid="3211214309775524554">"तुम्ही या <xliff:g id="NAME">^1</xliff:g> मध्ये फायली, मिडिया आणि विशिष्ट अॅप्स हलवू शकता. \n\nहे तुमच्या फोनच्या स्टोरेजमधून <xliff:g id="SIZE">^2</xliff:g> जागा मोकळी करेल आणि त्यासाठी अंदाजे <xliff:g id="DURATION">^3</xliff:g> कालावधी लागेल."</string>
+ <string name="storage_wizard_migrate_v2_body" product="tablet" msgid="6943007011251294950">"तुम्ही या <xliff:g id="NAME">^1</xliff:g> मध्ये फाइल, मिडिया आणि विशिष्ट अॅप्स हलवू शकता. \n\nहे तुमच्या टॅबलेटच्या स्टोरेजमधून <xliff:g id="SIZE">^2</xliff:g> जागा मोकळी करेल आणि त्यासाठी अंदाजे <xliff:g id="DURATION">^3</xliff:g> कालावधी लागेल."</string>
+ <string name="storage_wizard_migrate_v2_body" product="default" msgid="3211214309775524554">"तुम्ही या <xliff:g id="NAME">^1</xliff:g> मध्ये फाइल, मिडिया आणि विशिष्ट अॅप्स हलवू शकता. \n\nहे तुमच्या फोनच्या स्टोरेजमधून <xliff:g id="SIZE">^2</xliff:g> जागा मोकळी करेल आणि त्यासाठी अंदाजे <xliff:g id="DURATION">^3</xliff:g> कालावधी लागेल."</string>
<string name="storage_wizard_migrate_v2_checklist" msgid="6283777617014793600">"हलविण्याच्या दरम्यान:"</string>
<string name="storage_wizard_migrate_v2_checklist_media" msgid="4626548613088549096">"<xliff:g id="NAME">^1</xliff:g> काढून टाकू नका"</string>
<string name="storage_wizard_migrate_v2_checklist_apps" msgid="6041914027863793837">"काही अॅप्स काम करू शकणार नाहीत"</string>
@@ -1518,7 +1520,7 @@
<string name="storage_wizard_slow_v2_title" msgid="4662009769135525740">"हळू <xliff:g id="NAME">^1</xliff:g>"</string>
<string name="storage_wizard_slow_v2_body" msgid="4443996335261861797">"तुम्ही तरीही <xliff:g id="NAME_0">^1</xliff:g> वापरू शकता, परंतु ते हळू असू शकते. \n\nया <xliff:g id="NAME_1">^2</xliff:g> वर स्टोअर केलेली अॅप्स योग्यरित्या काम करू शकणार नाहीत आणि आशय ट्रांसफरसाठी जास्त वेळ लागू शकतो. \n\n जलद <xliff:g id="NAME_2">^3</xliff:g> वापरण्याचा प्रयत्न करा, किंवा त्याऐवजी पोर्टेबल स्टोरेजसाठी <xliff:g id="NAME_3">^4</xliff:g> वापरा."</string>
<string name="storage_wizard_slow_v2_start_over" msgid="1686964124972424100">"पुन्हा सुरू करा"</string>
- <string name="storage_wizard_slow_v2_continue" msgid="2320238517431613392">"सुरु ठेवा"</string>
+ <string name="storage_wizard_slow_v2_continue" msgid="2320238517431613392">"सुरू ठेवा"</string>
<string name="storage_wizard_ready_v2_external_body" msgid="5803422587027895664">"तुम्ही <xliff:g id="NAME">^1</xliff:g> मध्ये आशय हलवू शकता"</string>
<!-- syntax error in translation for storage_wizard_ready_v2_internal_body (678829432420351228) org.xmlpull.v1.XmlPullParserException: expected: /string read: b (position:END_TAG </b>@1:142 in <string name="storage_wizard_ready_v2_internal_body" msgid="678829432420351228">"<xliff:g id="NAME">^1</xliff:g> वर आशय हलवण्यासाठी, "</b>"सेटिंग्ज > स्टोरेज"<b>" वर जा"</string>
) -->
@@ -1532,7 +1534,7 @@
<string name="apn_apn" msgid="190519449579357696">"APN"</string>
<string name="apn_http_proxy" msgid="8816906767987944465">"प्रॉक्सी"</string>
<string name="apn_http_port" msgid="5789193688960075486">"पोर्ट"</string>
- <string name="apn_user" msgid="6979724587671704006">"वापरकर्तानाव"</string>
+ <string name="apn_user" msgid="6979724587671704006">"वापरकर्ता नाव"</string>
<string name="apn_password" msgid="7140724726108226386">"पासवर्ड"</string>
<string name="apn_server" msgid="625116221513279678">"सर्व्हर"</string>
<string name="apn_mmsc" msgid="4621771343217824216">"MMSC"</string>
@@ -1569,10 +1571,10 @@
<string name="restore_default_apn_completed" msgid="5671734152740058937">"डीफॉल्ट APN सेटिंग्ज रीसेट करणे पूर्ण झाले."</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"रीसेट पर्याय"</string>
<string name="reset_dashboard_summary" msgid="8778383341461126642">"नेटवर्क, अॅप्स आणि डिव्हाइस रीसेट केले जाऊ शकतात"</string>
- <string name="reset_network_title" msgid="8944059136930806211">"वायफाय मोबाइल आणि ब्लूटूथ रीसेट करा"</string>
+ <string name="reset_network_title" msgid="8944059136930806211">"वाय-फाय, मोबाइल आणि ब्लूटूथ रीसेट करा"</string>
<string name="reset_network_desc" msgid="4982633363916261109">"हे यांसह सर्व नेटवर्क सेटिंग्ज रीसेट करेल:\n\n"<li>"वाय‑फाय"</li>\n<li>"मोबाइल डेटा"</li>\n<li>"ब्लूटुथ"</li></string>
<string name="reset_esim_title" msgid="7630781767040831893">"डाउनलोड केलेली सिम मिटवा"</string>
- <string name="reset_esim_desc" msgid="433226911566802">"बदली सिम डाउनलोड करण्यासाठी, तुमच्या वाहकाशी संपर्क साधा. हे कोणतेही मोबाइल सेवा प्लॅन रद्द करणार नाही."</string>
+ <string name="reset_esim_desc" msgid="433226911566802">"बदली सिम डाउनलोड करण्यासाठी तुमच्या वाहकाशी संपर्क साधा. हे केल्याने कोणतेही मोबाइल सेवा प्लॅन रद्द होणार नाहीत."</string>
<string name="reset_network_button_text" msgid="4293271046867912819">"सेटिंग्ज रीसेट करा"</string>
<string name="reset_network_final_desc" msgid="2463817067048751373">"सर्व नेटवर्क सेटिंग्ज रीसेट करायची? तुम्ही ही कृती पहिल्यासारखी करू शकत नाही."</string>
<string name="reset_network_final_desc_esim" msgid="4676436976372555750">"सर्व नेटवर्क सेटिंग्ज रीसेट करायची आणि डाउनलोड केलेली सिम मिटवायची? तुम्ही ही कृती पहिल्यासारखी करू शकत नाही."</string>
@@ -1584,13 +1586,13 @@
<string name="reset_esim_error_msg" msgid="4716366079119742235">"डाउनलोड केलेली सिम एका एररमुळे मिटवता येत नाहीत.\n\nतुमचे डिव्हाइस रीस्टार्ट करा आणि पुन्हा प्रयत्न करा."</string>
<string name="master_clear_title" msgid="1560712943955904673">"सर्व डेटा मिटवा (फॅक्टरी रीसेट)"</string>
<string name="master_clear_short_title" msgid="919098101581335101">"सर्व डेटा मिटवा (फॅक्टरी रीसेट)"</string>
- <string name="master_clear_desc" product="tablet" msgid="3432373610755760899">"हे तुमच्या टॅबलेटच्या "<b>"अंतर्गत स्टोरेज"</b>" वरील सर्व डेटा मिटवेल, यासह:\n\n"<li>"तुमचे Google खाते"</li>\n<li>"सिस्टम आणि ॲप डेटा आणि सेटिंग्ज"</li>\n<li>"डाउनलोड केलेली अॅप्स"</li></string>
- <string name="master_clear_desc" product="default" msgid="8765543541962866697">"हे तुमच्या फोनच्या "<b>"अंतर्गत स्टोरेज"</b>" वरील सर्व डेटा मिटवेल, यासह:\n\n"<li>"तुमचे Google खाते"</li>\n<li>"सिस्टम आणि अॅप डेटा सेटिंग्ज"</li>\n<li>"डाउनलोड केलेली अॅप्स"</li></string>
+ <string name="master_clear_desc" product="tablet" msgid="3432373610755760899">"हे तुमच्या टॅबलेटच्या "<b>"अंतर्गत स्टोरेज"</b>" वरील सर्व डेटा मिटवेल, यासह:\n\n"<li>"तुमचे Google खाते"</li>\n<li>"सिस्टम आणि अॅप डेटा आणि सेटिंग्ज"</li>\n<li>"डाउनलोड केलेली अॅप्स"</li></string>
+ <string name="master_clear_desc" product="default" msgid="8765543541962866697">"हे खालील ठिकाणी तुमच्या फोनच्या "<b>"अंतर्गत स्टोरेज"</b>" वरील सर्व डेटा मिटवेल:\n\n"<li>"तुमचे Google खाते"</li>\n<li>"सिस्टम आणि अॅप डेटा सेटिंग्ज"</li>\n<li>"डाउनलोड केलेली अॅप्स"</li></string>
<string name="master_clear_accounts" product="default" msgid="3432884235445405376">\n\n"तुम्ही खालील खात्यांवर सध्या साइन इन केले आहे:\n"</string>
<string name="master_clear_other_users_present" product="default" msgid="5993259656117566767">\n\n"या डिव्हाइसवर इतर वापरकर्ते उपस्थित आहेत.\n"</string>
<string name="master_clear_desc_also_erases_external" msgid="3947303501615091903"><li>"संगीत"</li>\n<li>"फोटो"</li>\n<li>"अन्य वापरकर्ता डेटा"</li></string>
<string name="master_clear_desc_also_erases_esim" msgid="4497260499055258773"><li>"eSIM"</li></string>
- <string name="master_clear_desc_no_cancel_mobile_plan" msgid="6072668588881679461">\n\n"असे केल्याने तुमचा मोबाइल सेवा प्लॅन रद्द होणार नाही."</string>
+ <string name="master_clear_desc_no_cancel_mobile_plan" msgid="6072668588881679461">\n\n"हे केल्याने तुमचा मोबाइल सेवा प्लॅन रद्द होणार नाही."</string>
<string name="master_clear_desc_erase_external_storage" product="nosdcard" msgid="2723272952715259307">\n\n"संगीत, चित्रे आणि अन्य वापरकर्ता डेटा साफ करण्यासाठी, "<b>"USB स्टोरेज"</b>" मिटविणे आवश्यक आहे."</string>
<string name="master_clear_desc_erase_external_storage" product="default" msgid="9003555775524798797">\n\n"संगीत, चित्रे आणि अन्य वापरकर्ता डेटा साफ करण्यासाठी, "<b>"SD कार्ड"</b>" पुसण्याची आवश्यकता आहे."</string>
<string name="erase_external_storage" product="nosdcard" msgid="8989746770347525207">"USB स्टोरेज मिटवा"</string>
@@ -1614,10 +1616,10 @@
<string name="tether_settings_title_bluetooth" msgid="1999590158102569959">"ब्लूटूथ टेदरिंग"</string>
<string name="tether_settings_title_usb_bluetooth" msgid="1159128764162788159">"टेदरिंग"</string>
<string name="tether_settings_title_all" msgid="6935843543433954181">"हॉटस्पॉट आणि टेदरिंग"</string>
- <string name="tether_settings_summary_hotspot_on_tether_on" msgid="1289593649526514499">"हॉटस्पॉट चालू, टेदरिंग करत आहे"</string>
- <string name="tether_settings_summary_hotspot_on_tether_off" msgid="8010689354668285422">"हॉटस्पॉट चालू"</string>
+ <string name="tether_settings_summary_hotspot_on_tether_on" msgid="1289593649526514499">"हॉटस्पॉट सुरू, टेदरिंग करत आहे"</string>
+ <string name="tether_settings_summary_hotspot_on_tether_off" msgid="8010689354668285422">"हॉटस्पॉट सुरू"</string>
<string name="tether_settings_summary_hotspot_off_tether_on" msgid="1349909238672649877">"टेदरिंग"</string>
- <string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"डेटा सेव्हर चालू असताना टिथर करू शकत नाही किंवा पोर्टेबल हॉटस्पॉटचा वापर करू शकत नाही"</string>
+ <string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"डेटा सेव्हर सुरू असताना टिथर करू शकत नाही किंवा पोर्टेबल हॉटस्पॉटचा वापर करू शकत नाही"</string>
<string name="usb_title" msgid="7480927657535578688">"USB"</string>
<string name="usb_tethering_button_text" msgid="6242228383142012332">"USB टेदरिंग"</string>
<string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"फोनचे इंटरनेट कनेक्शन USB ने शेअर करा"</string>
@@ -1631,7 +1633,7 @@
<string name="tethering_footer_info" msgid="8019555174339154124">"तुमच्या मोबाइल डेटा कनेक्शनने इतर डिव्हाइसना इंटरनेट देण्यासाठी हॉटस्पॉट आणि टेदरिंगचा वापर करा. जवळपासच्या डिव्हाइससोबत आशय शेअर करण्यासाठी अॅप्स हॉटस्पॉट देखील तयार करू शकतात."</string>
<string name="tethering_help_button_text" msgid="7653022000284543996">"मदत"</string>
<string name="network_settings_title" msgid="8516526011407061679">"मोबाइल नेटवर्क"</string>
- <string name="manage_mobile_plan_title" msgid="3312016665522553062">"मोबाईल योजना"</string>
+ <string name="manage_mobile_plan_title" msgid="3312016665522553062">"मोबाइल योजना"</string>
<string name="sms_application_title" msgid="7815840568119334679">"SMS अॅप"</string>
<string name="sms_change_default_dialog_title" msgid="6301260161969667578">"SMS अॅप बदलायचा?"</string>
<string name="sms_change_default_dialog_text" msgid="8275088077930942680">"<xliff:g id="CURRENT_APP">%2$s</xliff:g> च्याऐवजी <xliff:g id="NEW_APP">%1$s</xliff:g> ला तुमचा SMS अॅप म्हणून वापराय?"</string>
@@ -1646,7 +1648,7 @@
<string name="mobile_insert_sim_card" msgid="7594550403454243732">"कृपया सिम कार्ड घाला आणि रीस्टार्ट करा"</string>
<string name="mobile_connect_to_internet" msgid="6031886097365170913">"कृपया इंटरनेटशी कनेक्ट करा"</string>
<string name="location_title" msgid="8664674161765477168">"माझे स्थान"</string>
- <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"कार्य प्रोफाईलसाठी स्थान"</string>
+ <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"कार्य प्रोफाइलसाठी स्थान"</string>
<string name="location_app_level_permissions" msgid="1298041503927632960">"अॅप परवानगी"</string>
<string name="location_app_permission_summary_location_off" msgid="541372845344796336">"स्थान बंद आहे"</string>
<plurals name="location_app_permission_summary_location_on" formatted="false" msgid="7904821382328758218">
@@ -1655,7 +1657,7 @@
</plurals>
<string name="location_category_recent_location_access" msgid="286059523360285026">"अलीकडील स्थान अॅक्सेस"</string>
<string name="location_recent_location_access_view_details" msgid="2051602261436245905">"तपशील पहा"</string>
- <string name="location_no_recent_apps" msgid="77502059586413278">"अलीकडे कोणत्याही ॲप्सने स्थानाची विनंती केलेली नाही"</string>
+ <string name="location_no_recent_apps" msgid="77502059586413278">"अलीकडे कोणत्याही अॅप्सनी स्थानाची विनंती केलेली नाही"</string>
<string name="location_no_recent_accesses" msgid="6289916310397279890">"अलीकडे अॅक्सेस केलेल्या अॅप्सचे स्थान नाही"</string>
<string name="location_high_battery_use" msgid="7177199869979522663">"उच्च बॅटरी वापर"</string>
<string name="location_low_battery_use" msgid="5030448574501435888">"अल्प बॅटरी वापर"</string>
@@ -1665,7 +1667,7 @@
<string name="location_scanning_bluetooth_always_scanning_title" msgid="196241746742607453">"ब्लूटूथ स्कॅनिंग"</string>
<string name="location_scanning_bluetooth_always_scanning_description" msgid="3796673798637848690">"ब्लूटूथ बंद असले, तरीही अॅप्स आणि सेवांना जवळपासची डिव्हाइस कधीही स्कॅन करण्याची अनुमती द्या. याचा वापर उदाहरणार्थ, स्थान आधारित वैशिष्ट्ये आणि सेवा सुधारण्यासाठी केला जाऊ शकतो."</string>
<string name="managed_profile_location_services" msgid="224925483299159541">"ऑफिससाठीच्या स्थान सेवा"</string>
- <string name="location_network_based" msgid="1535812159327454835">"वाय-फाय आणि मोबाईल नेटवर्क स्थान"</string>
+ <string name="location_network_based" msgid="1535812159327454835">"वाय-फाय आणि मोबाइल नेटवर्क स्थान"</string>
<string name="location_neighborhood_level" msgid="8459352741296587916">"आपल्या स्थानाचा अधिक जलद अंदाज घेण्यासाठी ॲप्सना Google ची स्थान सेवा वापरू द्या. अनामित स्थान डेटा संकलित केला जाईल आणि Google कडे पाठविला जाईल."</string>
<string name="location_neighborhood_level_wifi" msgid="6120133551482003840">"वाय-फाय द्वारे निर्धारित केलेले स्थान"</string>
<string name="location_gps" msgid="688049341158297763">"GPS उपग्रह"</string>
@@ -1674,7 +1676,7 @@
<string name="assisted_gps" msgid="5411780261117055175">"साहाय्यक GPS वापरा"</string>
<string name="assisted_gps_enabled" msgid="2561022181775725369">"GPS ला साहाय्य करण्यासाठी सर्व्हर वापरा (नेटवर्क वापर कमी करण्यासाठी अनचेक करा)"</string>
<string name="assisted_gps_disabled" msgid="6448758788217415937">"GPS ला साहाय्य करण्यासाठी सर्व्हर वापरा (GPS कामगिरी सुधारण्यासाठी अनचेक करा)"</string>
- <string name="use_location_title" msgid="7724788634359496634">"स्थान आणि Google शोध"</string>
+ <string name="use_location_title" msgid="7724788634359496634">"स्थान आणि Google Search"</string>
<string name="use_location_summary" msgid="7396716606067400283">"Google ला शोध परिणाम आणि अन्य सेवा सुधारण्यासाठी तुमचे स्थान वापरू द्या"</string>
<string name="location_access_title" msgid="8587974819606800029">"माझी स्थाने ॲक्सेस करा"</string>
<string name="location_access_summary" msgid="6919495149026354355">"तुमची परवानगी विचारणार्या ॲप्सना तुमची स्थान माहिती वापरु द्या"</string>
@@ -1725,12 +1727,12 @@
<string name="lockpassword_choose_your_password_header_for_face" msgid="8823110536502072216">"फेस ऑथेंटिकेशन वापरण्यासाठी, पासवर्ड सेट करा"</string>
<string name="lockpassword_choose_your_pattern_header_for_face" msgid="5563793748503883666">"फेस ऑथेंटिकेशन वापरण्यासाठी, पॅटर्न सेट करा"</string>
<string name="lockpassword_choose_your_pin_header_for_face" msgid="7238352632535405068">"फेस ऑथेंटिकेशन वापरण्यासाठी, पिन सेट करा"</string>
- <string name="lockpassword_confirm_your_pattern_generic" msgid="6146545393074070916">"सुरु ठेवण्यासाठी तुमच्या डिव्हाइस पॅटर्नचा वापर करा"</string>
- <string name="lockpassword_confirm_your_pin_generic" msgid="8732268389177735264">"सुरु ठेवण्यासाठी तुमचे डिव्हाइस पिन एंटर करा"</string>
- <string name="lockpassword_confirm_your_password_generic" msgid="6304552647060899594">"सुरु ठेवण्यासाठी तुमचे डिव्हाइस पासवर्ड एंटर करा"</string>
- <string name="lockpassword_confirm_your_pattern_generic_profile" msgid="3074250084050465513">"सुरु ठेवण्यासाठी आपल्या कार्य नमुन्याचा वापर करा"</string>
- <string name="lockpassword_confirm_your_pin_generic_profile" msgid="6037908971086439523">"सुरु ठेवण्यासाठी तुमचा कार्य पिन एंटर करा"</string>
- <string name="lockpassword_confirm_your_password_generic_profile" msgid="2646162490703489685">"सुरु ठेवण्यासाठी तुमचा कार्य पासवर्ड एंटर करा"</string>
+ <string name="lockpassword_confirm_your_pattern_generic" msgid="6146545393074070916">"सुरू ठेवण्यासाठी तुमच्या डिव्हाइस पॅटर्नचा वापर करा"</string>
+ <string name="lockpassword_confirm_your_pin_generic" msgid="8732268389177735264">"सुरू ठेवण्यासाठी तुमचे डिव्हाइस पिन एंटर करा"</string>
+ <string name="lockpassword_confirm_your_password_generic" msgid="6304552647060899594">"सुरू ठेवण्यासाठी तुमचे डिव्हाइस पासवर्ड एंटर करा"</string>
+ <string name="lockpassword_confirm_your_pattern_generic_profile" msgid="3074250084050465513">"सुरू ठेवण्यासाठी आपल्या कार्य नमुन्याचा वापर करा"</string>
+ <string name="lockpassword_confirm_your_pin_generic_profile" msgid="6037908971086439523">"सुरू ठेवण्यासाठी तुमचा कार्य पिन एंटर करा"</string>
+ <string name="lockpassword_confirm_your_password_generic_profile" msgid="2646162490703489685">"सुरू ठेवण्यासाठी तुमचा कार्य पासवर्ड एंटर करा"</string>
<string name="lockpassword_strong_auth_required_device_pattern" msgid="1014214190135045781">"वाढीव सुरक्षिततेसाठी, तुमच्या डीव्हाइसचा पॅटर्न वापरा"</string>
<string name="lockpassword_strong_auth_required_device_pin" msgid="24030584350601016">"वाढीव सुरक्षिततेसाठी, तुमच्या डिव्हाइसचा पिन टाका"</string>
<string name="lockpassword_strong_auth_required_device_password" msgid="7746588206458754598">"वाढीव सुरक्षिततेसाठी, तुमच्या डिव्हाइसचा पासवर्ड टाका"</string>
@@ -1754,12 +1756,12 @@
<string name="lockpattern_recording_inprogress" msgid="4060818382176523671">"पूर्ण झाल्यावर बोट सोडा"</string>
<string name="lockpattern_recording_incorrect_too_short" msgid="6374760294545431845">"कमीत कमी <xliff:g id="NUMBER">%d</xliff:g> बिंदू कनेक्ट करा. पुन्हा प्रयत्न करा."</string>
<string name="lockpattern_pattern_entered_header" msgid="2108106638322637851">"पॅटर्न रेकॉर्ड झाला"</string>
- <string name="lockpattern_need_to_confirm" msgid="4079482507985867389">"पुष्टी करण्यासाठी पुन्हा नमूना रेखांकित करा"</string>
+ <string name="lockpattern_need_to_confirm" msgid="4079482507985867389">"खात्री करण्यासाठी पॅटर्न पुन्हा एकदा काढा"</string>
<string name="lockpattern_pattern_confirmed_header" msgid="5603156929428721407">"तुमचा नवीन अनलॉक पॅटर्न"</string>
<string name="lockpattern_confirm_button_text" msgid="7059311304112902598">"निश्चित करा"</string>
<string name="lockpattern_restart_button_text" msgid="4322968353922529868">"पुन्हा रेखाटा"</string>
<string name="lockpattern_retry_button_text" msgid="5473976578241534298">"साफ करा"</string>
- <string name="lockpattern_continue_button_text" msgid="3328913552656376892">"सुरु ठेवा"</string>
+ <string name="lockpattern_continue_button_text" msgid="3328913552656376892">"सुरू ठेवा"</string>
<string name="lockpattern_settings_title" msgid="5152005866870766842">"पॅटर्न अनलॉक करा"</string>
<string name="lockpattern_settings_enable_title" msgid="8508410891939268080">"आवश्यक पॅटर्न"</string>
<string name="lockpattern_settings_enable_summary" msgid="8027605503917737512">"स्क्रीन अनलॉक करण्यासाठी पॅटर्न रेखाटणे आवश्यक आहे"</string>
@@ -1803,9 +1805,9 @@
<string name="auto_launch_label_generic" msgid="7865828543459493308">"डीफॉल्ट"</string>
<string name="screen_compatibility_label" msgid="3638271673726075815">"स्क्रीन सुसंगतता"</string>
<string name="permissions_label" msgid="7341733648403464213">"परवानग्या"</string>
- <string name="cache_header_label" msgid="3202284481380361966">"कॅश"</string>
- <string name="clear_cache_btn_text" msgid="107507684844780651">"कॅश साफ करा"</string>
- <string name="cache_size_label" msgid="6205173678102220499">"कॅश"</string>
+ <string name="cache_header_label" msgid="3202284481380361966">"कॅशे"</string>
+ <string name="clear_cache_btn_text" msgid="107507684844780651">"कॅशे साफ करा"</string>
+ <string name="cache_size_label" msgid="6205173678102220499">"कॅशे"</string>
<plurals name="uri_permissions_text" formatted="false" msgid="8938478333743197020">
<item quantity="other">%d आयटम</item>
<item quantity="one"> 1 आयटम</item>
@@ -1838,11 +1840,11 @@
<string name="sort_order_size" msgid="3167376197248713027">"आकारानुसार क्रमवारी लावा"</string>
<string name="sort_order_recent_notification" msgid="5592496977404445941">"सर्वात अलीकडील"</string>
<string name="sort_order_frequent_notification" msgid="5640245013098010347">"सर्वाधिक"</string>
- <string name="show_running_services" msgid="1895994322704667543">"चालू सेवा दर्शवा"</string>
- <string name="show_background_processes" msgid="88012264528093617">"कॅश केलेल्या प्रक्रिया दर्शवा"</string>
+ <string name="show_running_services" msgid="1895994322704667543">"सुरू सेवा दर्शवा"</string>
+ <string name="show_background_processes" msgid="88012264528093617">"कॅशे केलेल्या प्रक्रिया दर्शवा"</string>
<string name="default_emergency_app" msgid="286530070173495823">"आणीबाणी अॅप"</string>
<string name="reset_app_preferences" msgid="1426500030595212077">"अॅप प्राधान्ये रीसेट करा"</string>
- <string name="reset_app_preferences_title" msgid="792909865493673598">"अॅप प्राधान्ये रीसेट करायचे?"</string>
+ <string name="reset_app_preferences_title" msgid="792909865493673598">"अॅप प्राधान्ये रीसेट करायची?"</string>
<string name="reset_app_preferences_desc" msgid="7935273005301096031">"हे यासाठी सर्व प्राधान्ये रीसेट करेल:\n\n "<li>"बंद केलेली अॅप्स"</li>\n" "<li>"बंद केलेल्या अॅप्स सूचना"</li>\n" "<li>"क्रियांसाठी डीफॉल्ट अॅप्लिकेशन्स"</li>\n" "<li>"अॅप्ससाठी पार्श्वभूमीवरील डेटा प्रतिबंध"</li>\n" "<li>"कोणतेही परवानगी प्रतिबंध"</li>\n\n" तुम्ही कोणताही अॅप डेटा गमावणार नाही."</string>
<string name="reset_app_preferences_button" msgid="2041894727477934656">"अॅप्स रीसेट करा"</string>
<string name="manage_space_text" msgid="6166469422303124302">"जागा व्यवस्थापित करा"</string>
@@ -1851,7 +1853,7 @@
<string name="filter_apps_all" msgid="3938077534861382701">"सर्व अॅप्स"</string>
<string name="filter_apps_disabled" msgid="5394488790555678117">"बंद केलेले अॅप्स"</string>
<string name="filter_apps_third_party" msgid="3985794876813232322">"डाउनलोड केले"</string>
- <string name="filter_apps_running" msgid="6852975378502426359">"चालू आहे"</string>
+ <string name="filter_apps_running" msgid="6852975378502426359">"सुरू आहे"</string>
<string name="filter_apps_onsdcard" product="nosdcard" msgid="3501701148760911442">"USB स्टोरेज"</string>
<string name="filter_apps_onsdcard" product="default" msgid="135989136394672864">"SD कार्डवर"</string>
<string name="not_installed" msgid="6432131218496140253">"या वापरकर्त्यासाठी इंस्टॉल केले नाही"</string>
@@ -1860,7 +1862,7 @@
<string name="internal_storage" msgid="7392373600013294853">"अंतर्गत स्टोरेज"</string>
<string name="recompute_size" msgid="4290692197892743928">"आकाराचे पुनर्संगणन करत आहे…"</string>
<string name="clear_data_dlg_title" msgid="7388024498687029597">"अॅप डेटा हटवायचा?"</string>
- <string name="clear_data_dlg_text" msgid="6849657743695013414">"या अॅपचा सर्व डेटा कायमचा हटवला जाईल. यात सर्व फायली, सेटिंग्ज, खाती, डेटाबेस इ. समाविष्ट असेल."</string>
+ <string name="clear_data_dlg_text" msgid="6849657743695013414">"या अॅपचा सर्व डेटा कायमचा हटवला जाईल. यात सर्व फाइल, सेटिंग्ज, खाती, डेटाबेस इ. समाविष्ट असेल."</string>
<string name="dlg_ok" msgid="4666570206507476557">"ठीक"</string>
<string name="dlg_cancel" msgid="2434951039156262467">"रद्द करा"</string>
<string name="app_not_found_dlg_title" msgid="394147475018718483"></string>
@@ -1889,17 +1891,17 @@
<string name="app_disable_dlg_positive" msgid="5508828271100168073">"अॅप अक्षम करा"</string>
<string name="app_disable_dlg_text" msgid="9221864774943530281">"तुम्ही हे अॅप बंद केल्यास, Android आणि इतर अॅप्स कदाचित अपेक्षेप्रमाणे काम करणार नाहीत. लक्षात ठेवा, हे अॅप तुमच्या डिव्हाइसवर आधीच इंस्टॉल करून आलेले असल्यामुळे तुम्ही ते हटवू शकत नाही. बंद करून, तुम्ही हे अॅप बंद करता आणि ते तुमच्या डिव्हाइसवर लपवता."</string>
<string name="app_disable_notifications_dlg_title" msgid="699530661413553928">"सूचना बंद करायच्या?"</string>
- <string name="app_install_details_group_title" msgid="2909597319422976921">"स्टोअर"</string>
+ <string name="app_install_details_group_title" msgid="2909597319422976921">"Store"</string>
<string name="app_install_details_title" msgid="6954953384372934881">"अॅप तपशील"</string>
<string name="app_install_details_summary" msgid="6612222941121363940">"अॅप <xliff:g id="APP_STORE">%1$s</xliff:g> मधून इंस्टॉल केला"</string>
<string name="instant_app_details_summary" msgid="6384264315914966114">"<xliff:g id="APP_STORE">%1$s</xliff:g> ची अधिक माहिती"</string>
- <string name="app_ops_running" msgid="6378418969742957805">"चालू आहे"</string>
+ <string name="app_ops_running" msgid="6378418969742957805">"सुरू आहे"</string>
<string name="app_ops_never_used" msgid="8305262378162525813">"(कधीही न वापरलेले)"</string>
<string name="no_default_apps" msgid="4519038578011412532">"कोणतेही डीफॉल्ट अॅप्स नाहीत."</string>
<string name="storageuse_settings_title" msgid="3390798597982116048">"संचयन वापर"</string>
<string name="storageuse_settings_summary" msgid="3013328092465903687">"ॲप्सद्वारे वापरलेले संचयन पहा"</string>
<string name="service_restarting" msgid="1190995225643385568">"रीस्टार्ट करत आहे"</string>
- <string name="cached" msgid="4019482949725020855">"पार्श्वभूमी प्रक्रिया कॅश केली"</string>
+ <string name="cached" msgid="4019482949725020855">"पार्श्वभूमी प्रक्रिया कॅशे केली"</string>
<string name="no_running_services" msgid="618823924559385173">"काहीही चालत नाही."</string>
<string name="service_started_by_app" msgid="6906027340122215035">"अॅप द्वारे प्रारंभ केला."</string>
<!-- no translation found for service_client_name (7083258170099389413) -->
@@ -1921,9 +1923,9 @@
<string name="running_processes_header_apps_prefix" msgid="4024980745400903746">"अॅप्स"</string>
<string name="running_processes_header_free_prefix" msgid="1092348393136753031">"मोकळी"</string>
<string name="running_processes_header_used_prefix" msgid="2984090414986096084">"वापरलेली"</string>
- <string name="running_processes_header_cached_prefix" msgid="8398315634778729026">"कॅश केलेले"</string>
+ <string name="running_processes_header_cached_prefix" msgid="8398315634778729026">"कॅशे केलेले"</string>
<string name="running_processes_header_ram" msgid="3867954556214535588">"RAM चे <xliff:g id="RAM_0">%1$s</xliff:g>"</string>
- <string name="runningservicedetails_settings_title" msgid="7075556369123578372">"चालू अॅप"</string>
+ <string name="runningservicedetails_settings_title" msgid="7075556369123578372">"सुरू अॅप"</string>
<string name="no_services" msgid="2085012960886321920">"सक्रिय नाहीत"</string>
<string name="runningservicedetails_services_title" msgid="5890094559748633615">"सेवा"</string>
<string name="runningservicedetails_processes_title" msgid="5496507383850423763">"प्रक्रिया"</string>
@@ -1937,8 +1939,8 @@
<string name="process_service_in_use_description" msgid="2253782391122637651">"<xliff:g id="COMP_NAME">%1$s</xliff:g> सेवा वापरात आहे."</string>
<string name="process_provider_in_use_description" msgid="7841332986505618569">"<xliff:g id="COMP_NAME">%1$s</xliff:g> प्रदाता वापरात आहे."</string>
<string name="runningservicedetails_stop_dlg_title" msgid="6022380394950336262">"सिस्टम सेवा थांबवायची?"</string>
- <string name="runningservicedetails_stop_dlg_text" product="tablet" msgid="7619909495973395025">"तुम्ही ही सेवा थांबविल्यास, तुम्ही तीचा पॉवर बंद करून पुन्हा चालू करेपर्यंत आपल्या टॅब्लेटची काही वैशिष्ट्ये योग्यरितीने कार्य करणे थांबवू शकतात."</string>
- <string name="runningservicedetails_stop_dlg_text" product="default" msgid="8168850859827213988">"तुम्ही ही सेवा थांबविल्यास, तुम्ही तीचा पॉवर बंद करून पुन्हा चालू करेपर्यंत आपल्या टॅब्लेटची काही वैशिष्ट्ये योग्यरितीने कार्य करणे थांबवू शकतात."</string>
+ <string name="runningservicedetails_stop_dlg_text" product="tablet" msgid="7619909495973395025">"तुम्ही ही सेवा थांबविल्यास, तुम्ही तीचा पॉवर बंद करून पुन्हा सुरू करेपर्यंत आपल्या टॅब्लेटची काही वैशिष्ट्ये योग्यरितीने कार्य करणे थांबवू शकतात."</string>
+ <string name="runningservicedetails_stop_dlg_text" product="default" msgid="8168850859827213988">"तुम्ही ही सेवा थांबविल्यास, तुम्ही तीचा पॉवर बंद करून पुन्हा सुरू करेपर्यंत आपल्या टॅब्लेटची काही वैशिष्ट्ये योग्यरितीने कार्य करणे थांबवू शकतात."</string>
<string name="language_input_gesture_title" msgid="7547999017999159601">"भाषा, इनपुट आणि जेश्चर"</string>
<string name="language_input_gesture_summary_on_with_assist" msgid="315262339899294132"></string>
<string name="language_input_gesture_summary_on_non_assist" msgid="6054599939153669225"></string>
@@ -2050,7 +2052,7 @@
<string name="talkback_summary" msgid="6602857105831641574">"स्क्रीन रीडर प्रामुख्याने दृष्टीहीन किंवा कमी दृष्टी असलेल्या लोकांसाठी आहे"</string>
<string name="select_to_speak_summary" msgid="7514180457557735421">"आयटमना मोठ्याने ऐकण्यासाठी स्क्रीनवरील आयटमवर टॅप करा"</string>
<string name="accessibility_captioning_title" msgid="5878371993023439642">"मथळे"</string>
- <string name="accessibility_screen_magnification_title" msgid="7250949681883917360">"मोठे करणे"</string>
+ <string name="accessibility_screen_magnification_title" msgid="7250949681883917360">"मॅग्निफिकेशन"</string>
<string name="accessibility_screen_magnification_gestures_title" msgid="9199287875401817974">"तीन वेळा टॅप करून मोठे करा"</string>
<string name="accessibility_screen_magnification_navbar_title" msgid="400655612610761242">"बटणासह मोठे करा"</string>
<string name="accessibility_screen_magnification_state_navbar_gesture" msgid="1863831350878995600">"बटण आणि तीन वेळा टॅप करून मोठे करा"</string>
@@ -2058,12 +2060,12 @@
<string name="accessibility_screen_magnification_short_summary" msgid="5698545174944494486">"झूम करण्यासाठी 3 वेळा टॅप करा"</string>
<string name="accessibility_screen_magnification_navbar_short_summary" msgid="5418767043532322397">"झूम करण्यासाठी बटणावर टॅप करा"</string>
<string name="accessibility_screen_magnification_summary" msgid="3363006902079431772"><b>"झूम करण्यासाठी"</b>", स्क्रीनवर 3 वेळा पटपट टॅप करा.\n"<ul><li>"स्क्रोल करण्यासाठी 2 किंवा अधिक बोटांनी ड्रॅग करा"</li>\n<li>"झूम ॲडजस्ट करण्यासाठी 2 किंवा अधिक बोटांनी पिंच करा"</li></ul>\n\n<b>"तात्पुरते झूम करण्यासाठी"</b>", स्क्रीनवर 3 वेळा पटपट टॅप करा आणि तिसर्या टॅपवर तुमचे बोट धरून ठेवा.\n"<ul><li>"स्क्रीनवर इथेतिथे जाण्यासाठी ड्रॅग करा"</li>\n<li>"झूम कमी करण्यासाठी बोट उचला"</li></ul>\n\n"तुम्ही कीबोर्ड किंवा नेव्हिगेशन बारचा झूम वाढवू शकत नाही."</string>
- <string name="accessibility_screen_magnification_navbar_summary" msgid="4726360285256503132">"मोठे करणे चालू केले असताना, त्वरित मोठे करण्यासाठी, स्क्रीनच्या तळाशी असलेले प्रवेशयोग्यता बटण वापरा.\n\n"<b>"झूम करण्यासाठी"</b>", प्रवेशयोग्यता बटण टॅप करा, नंतर स्क्रीनवर कुठेही टॅप करा.\n"<ul><li>"स्क्रोल करण्यासाठी 2 किंवा अधिक बोटे ड्रॅग करा"</li>\n<li>"झूम समायोजित करण्यासाठी 2 किंवा अधिक बोटे पिंच करा"</li></ul>\n\n<b>"तात्पुरते झूम करण्यासाठी"</b>", प्रवेशयोग्यता बटण दाबा, नंतर स्क्रीनवर कुठेही स्पर्श करा आणि धरून ठेवा.\n"<ul><li>"स्क्रीनवर अवतीभवती हलवण्यासाठी ड्रॅग करा"</li>\n<li>"झूम कमी करण्यासाठी बोट उचला"</li></ul>\n\n"आपण कीबोर्ड किंवा नेव्हिगेशन बारचा झूम वाढवू शकत नाही."</string>
- <string name="accessibility_screen_magnification_navbar_configuration_warning" msgid="6477234309484795550">"प्रवेशयोग्यता बटण <xliff:g id="SERVICE">%1$s</xliff:g> वर सेट केले आहे. मोठे करणे वापरण्यासाठी, प्रवेशयोग्यता बटणाला स्पर्श करा आणि धरून ठेवा, नंतर मोठे करणे निवडा."</string>
+ <string name="accessibility_screen_magnification_navbar_summary" msgid="4726360285256503132">"मॅग्निफिकेशन सुरू केले असताना, त्वरित मोठे करण्यासाठी, स्क्रीनच्या तळाशी असलेले प्रवेशयोग्यता बटण वापरा.\n\n"<b>"झूम करण्यासाठी"</b>", प्रवेशयोग्यता बटण टॅप करा, नंतर स्क्रीनवर कुठेही टॅप करा.\n"<ul><li>"स्क्रोल करण्यासाठी 2 किंवा अधिक बोटे ड्रॅग करा"</li>\n<li>"झूम समायोजित करण्यासाठी 2 किंवा अधिक बोटे पिंच करा"</li></ul>\n\n<b>"तात्पुरते झूम करण्यासाठी"</b>", प्रवेशयोग्यता बटण दाबा, नंतर स्क्रीनवर कुठेही स्पर्श करा आणि धरून ठेवा.\n"<ul><li>"स्क्रीनवर अवतीभवती हलवण्यासाठी ड्रॅग करा"</li>\n<li>"झूम कमी करण्यासाठी बोट उचला"</li></ul>\n\n"आपण कीबोर्ड किंवा नेव्हिगेशन बारचा झूम वाढवू शकत नाही."</string>
+ <string name="accessibility_screen_magnification_navbar_configuration_warning" msgid="6477234309484795550">"प्रवेशयोग्यता बटण <xliff:g id="SERVICE">%1$s</xliff:g> वर सेट केले आहे. मॅग्निफिकेशन वापरण्यासाठी, प्रवेशयोग्यता बटणाला स्पर्श करा आणि धरून ठेवा, नंतर मॅग्निफिकेशन निवडा."</string>
<string name="accessibility_global_gesture_preference_title" msgid="3842279082831426816">"आवाज की शॉर्टकट"</string>
<string name="accessibility_shortcut_service_title" msgid="3516052294376744060">"शॉर्टकट सेवा"</string>
<string name="accessibility_shortcut_service_on_lock_screen_title" msgid="1279441617927949980">"लॉक स्क्रीनवरून अनुमती द्या"</string>
- <string name="accessibility_shortcut_description" msgid="1427049334225166395">"शॉर्टकट चालू असताना, प्रवेशयोग्यता वैशिष्ट्य सुरू करण्यासाठी तुम्ही आवाज बटणे 3 सेकंद दाबू शकता."</string>
+ <string name="accessibility_shortcut_description" msgid="1427049334225166395">"शॉर्टकट सुरू असताना, प्रवेशयोग्यता वैशिष्ट्य सुरू करण्यासाठी तुम्ही आवाज बटणे 3 सेकंद दाबू शकता."</string>
<string name="accessibility_toggle_high_text_contrast_preference_title" msgid="5652244684961877255">"उच्च कॉंट्रास्ट मजकूर"</string>
<string name="accessibility_toggle_screen_magnification_auto_update_preference_title" msgid="2466317284195934003">"स्क्रीन विस्तृतीकरण स्वयं अद्ययावत करा"</string>
<string name="accessibility_toggle_screen_magnification_auto_update_preference_summary" msgid="6625473745911276917">"अॅप संक्रमणांवर स्क्रीन विस्तृतीकरण अद्ययावत करा"</string>
@@ -2071,7 +2073,7 @@
<string name="accessibility_toggle_large_pointer_icon_title" msgid="9127905775116570565">"मोठा माउस पॉइंटर"</string>
<string name="accessibility_disable_animations" msgid="8378441317115710009">"अॅनिमेशन काढा"</string>
<string name="accessibility_toggle_master_mono_title" msgid="899550848196702565">"मोनो ऑडिओ"</string>
- <string name="accessibility_toggle_master_mono_summary" msgid="3847052868469033235">"ऑडिओ प्ले करताना चॅनेल एकत्र करा"</string>
+ <string name="accessibility_toggle_master_mono_summary" msgid="3847052868469033235">"ऑडिओ प्ले करताना चॅनल एकत्र करा"</string>
<string name="accessibility_toggle_master_balance_title" msgid="8723492001092647562">"ऑडिओ संतुलन"</string>
<string name="accessibility_toggle_master_balance_left_label" msgid="8531986342666527970">"डावे"</string>
<string name="accessibility_toggle_master_balance_right_label" msgid="7757024572140589558">"उजवे"</string>
@@ -2081,11 +2083,11 @@
<string name="accessibility_timeout_1min" msgid="5019003178551730551">"एक मिनिट"</string>
<string name="accessibility_timeout_2mins" msgid="4124259290444829477">"दोन मिनिटे"</string>
<string name="accessibility_content_timeout_preference_title" msgid="5160746882250939464">"वाचण्यासाठी वेळ"</string>
- <string name="accessibility_control_timeout_preference_title" msgid="2771808346038759474">"कृती करण्यासाठी लागणारा वेळ"</string>
+ <string name="accessibility_control_timeout_preference_title" msgid="2771808346038759474">"कृतीसाठी लागणारा वेळ"</string>
<string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"तात्पुरता दृश्यमान असेल असा तुम्हाला वाचायचा असलेला मेसेज किती वेळ दाखवायचा ते निवडा.\n\nसर्व अॅप्स यासेटिंगला सपोर्ट करत नाहीत."</string>
<string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"तुम्हाला कृती करण्यास सांगणारे, परंतु केवळ तात्पुरते दृश्यमान असलेले मेसेज किती वेळ दाखवले जावेत ते निवडा.\n\nया सेटिंगला सर्व अॅप्समध्ये सपोर्ट असेल असे नाही."</string>
<string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"स्पर्श आणि धरण्याचा विलंब"</string>
- <string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"रंग व्युत्क्रम"</string>
+ <string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"कलर इन्व्हर्जन"</string>
<string name="accessibility_display_inversion_preference_subtitle" msgid="69291255322175323">"कार्यप्रदर्शन प्रभावित करू शकते"</string>
<string name="accessibility_autoclick_preference_title" msgid="9164599088410340405">"थांबल्याची वेळ"</string>
<string name="accessibility_autoclick_description" msgid="5492414927846407499">"तुम्ही माउस वापरत असल्यास, जेव्हा कर्सर काही वेळासाठी हलणे थांबवतो तेव्हा तुम्ही तो आपोआप कृती करण्यासाठी सेट करू शकता."</string>
@@ -2094,21 +2096,21 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"सूचना कंपन"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"रिंग कंपन"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"स्पर्श व्हायब्रेशन"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"ही सेवा वापरा"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"रंग सुधारणा वापरा"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"कॅप्शन वापरा"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"सेवा वापरा"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"रंग सुधारणा वापरा"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"कॅप्शन वापरा"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"सुरू ठेवा"</string>
- <string name="accessibility_hearingaid_title" msgid="3700978781235124891">"श्रवण यंत्रे"</string>
- <string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"कोणतीही श्रवण यंत्रे जोडलेली नाहीत"</string>
- <string name="accessibility_hearingaid_adding_summary" msgid="4139031880828714300">"श्रवण यंत्रे जोडा"</string>
- <string name="accessibility_hearingaid_pair_instructions_first_message" msgid="2671518890909750740">"तुमची श्रवण यंत्रे पेअर करण्यासाठी पुढील स्क्रीनवर तुमचे डिव्हाइस शोधा आणि त्यावर टॅप करा."</string>
- <string name="accessibility_hearingaid_pair_instructions_second_message" msgid="1584538735488464991">"तुमची श्रवण यंत्रे पेअरिंग मोडमध्ये असल्याची खात्री करा."</string>
+ <string name="accessibility_hearingaid_title" msgid="3700978781235124891">"श्रवणयंत्रे"</string>
+ <string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"कोणतीही श्रवणयंत्रे जोडलेली नाहीत"</string>
+ <string name="accessibility_hearingaid_adding_summary" msgid="4139031880828714300">"श्रवणयंत्रे जोडा"</string>
+ <string name="accessibility_hearingaid_pair_instructions_first_message" msgid="2671518890909750740">"तुमची श्रवणयंत्रे पेअर करण्यासाठी पुढील स्क्रीनवर तुमचे डिव्हाइस शोधा आणि त्यावर टॅप करा."</string>
+ <string name="accessibility_hearingaid_pair_instructions_second_message" msgid="1584538735488464991">"तुमची श्रवणयंत्रे पेअरिंग मोडमध्ये असल्याची खात्री करा."</string>
<string name="accessibility_hearingaid_active_device_summary" msgid="6081382497207168885">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> सुरू आहे"</string>
<plurals name="show_number_hearingaid_count" formatted="false" msgid="7906547154695855096">
- <item quantity="other"> सेव्ह केलेली <xliff:g id="NUMBER_DEVICE_COUNT_1">%1$d</xliff:g> श्रवण यंत्रे</item>
- <item quantity="one"> सेव्ह केलेले <xliff:g id="NUMBER_DEVICE_COUNT_0">%1$d</xliff:g> श्रवण यंत्र</item>
+ <item quantity="other"> सेव्ह केलेली <xliff:g id="NUMBER_DEVICE_COUNT_1">%1$d</xliff:g> श्रवणयंत्रे</item>
+ <item quantity="one"> सेव्ह केलेले <xliff:g id="NUMBER_DEVICE_COUNT_0">%1$d</xliff:g> श्रवणयंत्र</item>
</plurals>
- <string name="accessibility_summary_state_enabled" msgid="7357731696603247963">"चालू"</string>
+ <string name="accessibility_summary_state_enabled" msgid="7357731696603247963">"सुरू"</string>
<string name="accessibility_summary_state_disabled" msgid="9197369047683087620">"बंद"</string>
<string name="accessibility_summary_state_stopped" msgid="3170264683616172746">"काम करत नाही आहे. माहितीसाठी टॅप करा."</string>
<string name="accessibility_description_state_stopped" msgid="7666178628053039493">"या सेवेमध्ये बिघाड आहे."</string>
@@ -2179,11 +2181,11 @@
<string name="enable_service_title" msgid="2746143093464928251">"<xliff:g id="SERVICE">%1$s</xliff:g> वापरायचे?"</string>
<string name="capabilities_list_title" msgid="8177719542886123788">"यासाठी <xliff:g id="SERVICE">%1$s</xliff:g> आवश्यक आहे:"</string>
<string name="touch_filtered_warning" msgid="3072665526993043879">"अॅप परवानगी विनंती अस्पष्ट करीत असल्याने, सेटिंग्ज आपल्या प्रतिसादाची पडताळणी करू शकत नाहीत."</string>
- <string name="enable_service_encryption_warning" msgid="3580275420826492351">"तुम्ही <xliff:g id="SERVICE">%1$s</xliff:g> चालू केल्यास, तुमचे डिव्हाइस डेटा एंक्रिप्शन वर्धित करण्यासाठी तुमचे स्क्रीन लॉक वापरणार नाही."</string>
- <string name="secure_lock_encryption_warning" msgid="8724670910924531152">"तुम्ही ॲक्सेसयोग्यता सेवा चालू केली असल्यामुळे, तुमचे डिव्हाइस डेटा एंक्रिप्शन वर्धित करण्यासाठी तुमचे स्क्रीन लॉक वापरणार नाही."</string>
- <string name="enable_service_pattern_reason" msgid="7415969807374459848">"<xliff:g id="SERVICE">%1$s</xliff:g> चालू करण्यामुळे डेटा एंक्रिप्शनवर परिणाम होतो, तुम्हाला तुमच्या पॅटर्नची पुष्टी करण्याची आवश्यकता आहे."</string>
- <string name="enable_service_pin_reason" msgid="2899057249007636608">"<xliff:g id="SERVICE">%1$s</xliff:g> चालू करण्याने एंक्रिप्शन डेटा प्रभावित होतो, तुम्हाला तुमच्या पिन ची पुष्टी करण्याची आवश्यकता आहे."</string>
- <string name="enable_service_password_reason" msgid="5210815233227388083">"<xliff:g id="SERVICE">%1$s</xliff:g> चालू करण्यामुळे डेटा एंक्रिप्शनवर परिणाम होतो, तुम्हाला तुमच्या पासवर्डची पुष्टी करण्याची आवश्यकता आहे."</string>
+ <string name="enable_service_encryption_warning" msgid="3580275420826492351">"तुम्ही <xliff:g id="SERVICE">%1$s</xliff:g> सुरू केल्यास, तुमचे डिव्हाइस डेटा एंक्रिप्शन वर्धित करण्यासाठी तुमचे स्क्रीन लॉक वापरणार नाही."</string>
+ <string name="secure_lock_encryption_warning" msgid="8724670910924531152">"तुम्ही ॲक्सेसयोग्यता सेवा सुरू केली असल्यामुळे, तुमचे डिव्हाइस डेटा एंक्रिप्शन वर्धित करण्यासाठी तुमचे स्क्रीन लॉक वापरणार नाही."</string>
+ <string name="enable_service_pattern_reason" msgid="7415969807374459848">"<xliff:g id="SERVICE">%1$s</xliff:g> सुरू करण्यामुळे डेटा एंक्रिप्शनवर परिणाम होतो, तुम्हाला तुमच्या पॅटर्नची पुष्टी करण्याची आवश्यकता आहे."</string>
+ <string name="enable_service_pin_reason" msgid="2899057249007636608">"<xliff:g id="SERVICE">%1$s</xliff:g> सुरू करण्याने एंक्रिप्शन डेटा प्रभावित होतो, तुम्हाला तुमच्या पिन ची पुष्टी करण्याची आवश्यकता आहे."</string>
+ <string name="enable_service_password_reason" msgid="5210815233227388083">"<xliff:g id="SERVICE">%1$s</xliff:g> सुरू करण्यामुळे डेटा एंक्रिप्शनवर परिणाम होतो, तुम्हाला तुमच्या पासवर्डची पुष्टी करण्याची आवश्यकता आहे."</string>
<string name="accessibility_service_warning" msgid="345702253188068806">"<xliff:g id="SERVICE">%1$s</xliff:g>या डिव्हाइसच्या पूर्ण नियंत्रणासाठी विनंती करत आहे. सेवा स्क्रीन रीड करू शकते आणि अॅक्सेसिबिलिटीच्या गरजा असलेल्या वापरकर्त्यांच्या वतीने कृती करू शकते. नियंत्रणाची ही पातळी बहुतांश अॅप्ससाठी योग्य नाही."</string>
<string name="disable_service_title" msgid="6234243399949005825">"<xliff:g id="SERVICE">%1$s</xliff:g> थांबवायचे?"</string>
<string name="disable_service_message" msgid="4250593674885651779">"ठीक आहेवर टॅप करण्यामुळे <xliff:g id="SERVICE">%1$s</xliff:g> थांबेल."</string>
@@ -2194,8 +2196,8 @@
<string name="print_settings" msgid="7886184656544483072">"प्रिंट"</string>
<string name="print_settings_summary_no_service" msgid="634173687975841526">"बंद"</string>
<plurals name="print_settings_summary" formatted="false" msgid="7580293760281445137">
- <item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> प्रिंट सेवा चालू</item>
- <item quantity="one">1 प्रिंट सेवा चालू</item>
+ <item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> प्रिंट सेवा सुरू</item>
+ <item quantity="one">1 प्रिंट सेवा सुरू</item>
</plurals>
<plurals name="print_jobs_summary" formatted="false" msgid="6180308415569432845">
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> प्रिंट कार्ये</item>
@@ -2210,7 +2212,7 @@
<string name="print_feature_state_off" msgid="208580346723223688">"बंद"</string>
<string name="print_menu_item_add_service" msgid="6803000110578493782">"सेवा जोडा"</string>
<string name="print_menu_item_add_printer" msgid="8529196211179574921">"प्रिंटर जोडा"</string>
- <string name="print_menu_item_search" msgid="1165316329772287360">"शोध"</string>
+ <string name="print_menu_item_search" msgid="1165316329772287360">"Search"</string>
<string name="print_searching_for_printers" msgid="6538687129687642542">"प्रिंटर शोधत आहे"</string>
<string name="print_service_disabled" msgid="6376344992705893436">"सेवा अक्षम केली"</string>
<string name="print_print_jobs" msgid="7357841034181762157">"प्रिंट कार्ये"</string>
@@ -2218,7 +2220,7 @@
<string name="print_restart" msgid="4090462480288441779">"रीस्टार्ट"</string>
<string name="print_cancel" msgid="4567831028966698753">"रद्द करा"</string>
<string name="print_job_summary" msgid="438156926959424058">"<xliff:g id="PRINTER">%1$s</xliff:g>\n<xliff:g id="TIME">%2$s</xliff:g>"</string>
- <string name="print_configuring_state_title_template" msgid="5052801061241050737">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> कॉन्फिगर करत आहे"</string>
+ <string name="print_configuring_state_title_template" msgid="5052801061241050737">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> कॉंफिगर करत आहे"</string>
<string name="print_printing_state_title_template" msgid="8796814912920963803">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> प्रिंट करत आहे"</string>
<string name="print_cancelling_state_title_template" msgid="4627355699517405600">"<xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g> रद्द करत आहे"</string>
<string name="print_failed_state_title_template" msgid="6575080578316671101">"प्रिंटर एरर <xliff:g id="PRINT_JOB_NAME">%1$s</xliff:g>"</string>
@@ -2241,25 +2243,25 @@
<string name="background_activity_disabled_dialog_text" msgid="4234598000779459640">"हे अॅप बॅटरी ऑप्टिमाइझ करण्यासाठी सेट केलेले नसल्याने, तुम्ही ते प्रतिबंधित करू शकत नाही.\n\nअॅप प्रतिबंधित करण्यासाठी, प्रथम बॅटरी ऑप्टिमायझेशन सुरू करा"</string>
<string name="device_screen_usage" msgid="4470485475363132750">"पूर्ण चार्ज झाल्यानंतरचा स्क्रीन वापर"</string>
<string name="power_usage_list_summary" msgid="4314438658308211057">"पूर्ण चार्ज केल्यापासूनचा बॅटरी वापर"</string>
- <string name="screen_usage_summary" msgid="263396144684078341">"पूर्ण चार्जपासून स्क्रीन चालू असण्याच्या वेळाचे प्रमाण"</string>
+ <string name="screen_usage_summary" msgid="263396144684078341">"पूर्ण चार्जपासून स्क्रीन सुरू असण्याच्या वेळाचे प्रमाण"</string>
<string name="device_usage_list_summary" msgid="8299017481332816368">"शेवटच्या पूर्ण चार्जपासून डिव्हाइस वापर"</string>
<string name="battery_since_unplugged" msgid="6486555910264026856">"अनप्लग केल्यापासून बॅटरी वापर"</string>
<string name="battery_since_reset" msgid="4747587791838336661">"रीसेट केल्यापासून बॅटरी वापर"</string>
<string name="battery_stats_on_battery" msgid="2644055304085279716">"बॅटरीवरील <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_stats_duration" msgid="4867858933068728005">"अनप्लग केल्यापासून <xliff:g id="TIME">%1$s</xliff:g>"</string>
<string name="battery_stats_charging_label" msgid="3156586822576998231">"चार्ज होत आहे"</string>
- <string name="battery_stats_screen_on_label" msgid="1223495366609581497">"स्क्रीन चालू"</string>
- <string name="battery_stats_gps_on_label" msgid="3944533098574423359">"GPS चालू"</string>
- <string name="battery_stats_camera_on_label" msgid="557892808497848886">"कॅमेरा चालू"</string>
- <string name="battery_stats_flashlight_on_label" msgid="162279812156241905">"फ्लॅशलाइट चालू"</string>
+ <string name="battery_stats_screen_on_label" msgid="1223495366609581497">"स्क्रीन सुरू"</string>
+ <string name="battery_stats_gps_on_label" msgid="3944533098574423359">"GPS सुरू"</string>
+ <string name="battery_stats_camera_on_label" msgid="557892808497848886">"कॅमेरा सुरू"</string>
+ <string name="battery_stats_flashlight_on_label" msgid="162279812156241905">"फ्लॅशलाइट सुरू"</string>
<string name="battery_stats_wifi_running_label" msgid="3223557320252465826">"वाय-फाय"</string>
<string name="battery_stats_wake_lock_label" msgid="670884103452713535">"सक्रिय"</string>
- <string name="battery_stats_phone_signal_label" msgid="2502589944816260503">"मोबाईल नेटवर्क सिग्नल"</string>
+ <string name="battery_stats_phone_signal_label" msgid="2502589944816260503">"मोबाइल नेटवर्क सिग्नल"</string>
<!-- no translation found for battery_stats_last_duration (8190573267292309839) -->
<skip />
<string name="awake" msgid="8956720170442161285">"डिव्हाइस ॲक्टिव्हेट होण्याची वेळ"</string>
- <string name="wifi_on_time" msgid="2487820618265936068">"वाय-फाय चालू केल्याची वेळ"</string>
- <string name="bluetooth_on_time" msgid="6400569492287292639">"वाय-फाय चालू केल्याची वेळ"</string>
+ <string name="wifi_on_time" msgid="2487820618265936068">"वाय-फाय सुरू केल्याची वेळ"</string>
+ <string name="bluetooth_on_time" msgid="6400569492287292639">"वाय-फाय सुरू केल्याची वेळ"</string>
<string name="advanced_battery_title" msgid="5026866913848464170">"बॅटरी वापर"</string>
<string name="history_details_title" msgid="8608193822257799936">"इतिहास तपशील"</string>
<string name="battery_details_title" msgid="5358230551490703067">"बॅटरी वापर"</string>
@@ -2275,10 +2277,10 @@
<string name="battery_tip_smart_battery_title" product="default" msgid="5517122075918038665">"तुमच्या फोनचे बॅटरी लाइफ सुधारा"</string>
<string name="battery_tip_smart_battery_title" product="tablet" msgid="203494973250969040">"तुमच्या टॅबलेटचे बॅटरी लाइफ सुधारा"</string>
<string name="battery_tip_smart_battery_title" product="device" msgid="7419448992583346364">"तुमच्या डिव्हाइसचे बॅटरी लाइफ सुधारा"</string>
- <string name="battery_tip_smart_battery_summary" msgid="5344821856478265778">"बॅटरी व्यवस्थापक चालू करा"</string>
- <string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"बॅटरी सेव्हर चालू करा"</string>
+ <string name="battery_tip_smart_battery_summary" msgid="5344821856478265778">"बॅटरी व्यवस्थापक सुरू करा"</string>
+ <string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"बॅटरी सेव्हर सुरू करा"</string>
<string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"बॅटरी नेहमीपेक्षा लवकर संपू शकते"</string>
- <string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"बॅटरी सेव्हर चालू आहे"</string>
+ <string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"बॅटरी सेव्हर सुरू आहे"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"काही वैशिष्ट्ये मर्यादित असू शकतात"</string>
<string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"फोन नेहमीपेक्षा जास्त वापरला गेला"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"टॅबलेट नेहमीपेक्षा जास्त वापरले गेला"</string>
@@ -2301,8 +2303,8 @@
<item quantity="one">%1$s चा बॅकग्राउंड बॅटरी वापर जास्त आहे</item>
</plurals>
<plurals name="battery_tip_restrict_handled_summary" formatted="false" msgid="469696766640020557">
- <item quantity="other">ही अॅप्स बॅकग्राउंडमध्ये चालू शकत नाहीत</item>
- <item quantity="one">हे अॅप बॅकग्राउंडमध्ये चालू शकत नाही</item>
+ <item quantity="other">ही अॅप्स बॅकग्राउंडमध्ये सुरू शकत नाहीत</item>
+ <item quantity="one">हे अॅप बॅकग्राउंडमध्ये सुरू शकत नाही</item>
</plurals>
<plurals name="battery_tip_restrict_app_dialog_title" formatted="false" msgid="3042021435866172168">
<item quantity="other">%1$d अॅप्स प्रतिबंधित करायची?</item>
@@ -2377,16 +2379,16 @@
<string name="usage_type_wifi_running" msgid="4192567991891907030">"वाय-फाय चालत आहे"</string>
<string name="usage_type_phone" product="tablet" msgid="4279605085824633501">"टॅबलेट"</string>
<string name="usage_type_phone" product="default" msgid="3901842461077646153">"फोन"</string>
- <string name="usage_type_data_send" msgid="6339880867171142725">"मोबाईल पॅकेट पाठविली"</string>
- <string name="usage_type_data_recv" msgid="2099757621601333453">"मोबाईल पॅकेट प्राप्त झाली"</string>
- <string name="usage_type_radio_active" msgid="4123481281606636561">"मोबाईल रेडिओ सक्रिय"</string>
+ <string name="usage_type_data_send" msgid="6339880867171142725">"मोबाइल पॅकेट पाठविली"</string>
+ <string name="usage_type_data_recv" msgid="2099757621601333453">"मोबाइल पॅकेट प्राप्त झाली"</string>
+ <string name="usage_type_radio_active" msgid="4123481281606636561">"मोबाइल रेडिओ सक्रिय"</string>
<string name="usage_type_data_wifi_send" msgid="4457097885099163617">"वाय-फाय पॅकेट पाठविली"</string>
<string name="usage_type_data_wifi_recv" msgid="6629526425662663926">"वाय-फाय पॅकेट प्राप्त झाली"</string>
<string name="usage_type_audio" msgid="510459400845396879">"ऑडिओ"</string>
<string name="usage_type_video" msgid="8161701367674306793">"व्हिडिओ"</string>
<string name="usage_type_camera" msgid="2276450385733155264">"कॅमेरा"</string>
<string name="usage_type_flashlight" msgid="954750302897154167">"फ्लॅशलाइट"</string>
- <string name="usage_type_on_time" msgid="4622180623970638221">"वेळ चालू"</string>
+ <string name="usage_type_on_time" msgid="4622180623970638221">"वेळ सुरू"</string>
<string name="usage_type_no_coverage" msgid="6032663899998431817">"सिग्नलशिवायची वेळ"</string>
<string name="usage_type_total_battery_capacity" msgid="1954889791720119945">"एकूण बॅटरी क्षमता"</string>
<string name="usage_type_computed_power" msgid="2594890316149868151">"गणना केलेला पॉवर वापर"</string>
@@ -2430,7 +2432,7 @@
<string name="battery_full_charge_last" msgid="4614554109170251301">"पूर्ण चार्ज सुमारे इतका वेळ टिकते"</string>
<string name="battery_footer_summary" msgid="4828444679643906943">"बॅटरी वापर डेटा अंदाजे आहे आणि वापराच्या आधारे बदलू शकतो"</string>
<string name="battery_detail_foreground" msgid="6616408559186553085">"सक्रिय वापरात असताना"</string>
- <string name="battery_detail_background" msgid="7938146832943604280">"पार्श्वभूमीत असताना"</string>
+ <string name="battery_detail_background" msgid="7938146832943604280">"बॅकग्राउंडमध्ये असताना"</string>
<string name="battery_detail_power_usage" msgid="3606930232257489212">"बॅटरी वापर"</string>
<string name="battery_detail_info_title" msgid="4617514228447481336">"पूर्ण चार्जपासून"</string>
<string name="battery_detail_manage_title" msgid="745194290572617507">"बॅटरी वापर व्यवस्थापित करा"</string>
@@ -2446,7 +2448,7 @@
<string name="process_mediaserver_label" msgid="8591722404282619153">"मीडियासर्व्हर"</string>
<string name="process_dex2oat_label" msgid="8249082119748556085">"अॅप ऑप्टिमायझेशन"</string>
<string name="battery_saver" msgid="3989710213758938398">"बॅटरी सेव्हर"</string>
- <string name="battery_saver_auto_title" msgid="4158659069641849952">"आपोआप चालू करा"</string>
+ <string name="battery_saver_auto_title" msgid="4158659069641849952">"आपोआप सुरू करा"</string>
<string name="battery_saver_auto_no_schedule" msgid="739814529432092706">"कोणतेही शेड्युल नाही"</string>
<string name="battery_saver_auto_routine" msgid="886514412067906980">"तुमच्या दिनक्रमावर आधारित"</string>
<string name="battery_saver_auto_percentage" msgid="5791982309331921556">"टक्केवारीवर आधारित"</string>
@@ -2460,8 +2462,8 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"सुरू करा"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"बॅटरी सेव्हर वापरा"</string>
- <string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"स्वयंचलितपणे चालू करा"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"बॅटरी सेव्हर वापरा"</string>
+ <string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"स्वयंचलितपणे सुरू करा"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"कधीही नाही"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"<xliff:g id="PERCENT">%1$s</xliff:g>बॅटरीवर"</string>
<string name="battery_percentage" msgid="7782252476471033843">"बॅटरी टक्केवारी"</string>
@@ -2473,12 +2475,12 @@
<string name="process_stats_total_duration_percentage" msgid="737215062610178960">"<xliff:g id="TIMEDURATION">%2$s</xliff:g> पासून <xliff:g id="PERCENT">%1$s</xliff:g> रॅम वापरली"</string>
<string name="process_stats_type_background" msgid="7867552451658035199">"पार्श्वभूमी"</string>
<string name="process_stats_type_foreground" msgid="9185538008409818577">"पुरोभाग"</string>
- <string name="process_stats_type_cached" msgid="6774816751826613732">"कॅश केलेले"</string>
+ <string name="process_stats_type_cached" msgid="6774816751826613732">"कॅशे केलेले"</string>
<string name="process_stats_os_label" msgid="2866711070924260440">"Android OS"</string>
<string name="process_stats_os_native" msgid="8971193568864959041">"मूळ"</string>
<string name="process_stats_os_kernel" msgid="496627624157605578">"कर्नेल"</string>
<string name="process_stats_os_zram" msgid="5654662484619165424">"Z-Ram"</string>
- <string name="process_stats_os_cache" msgid="5662578472981137018">"कॅश"</string>
+ <string name="process_stats_os_cache" msgid="5662578472981137018">"कॅशे"</string>
<string name="process_stats_ram_use" msgid="7064754065505886755">"RAM वापर"</string>
<string name="process_stats_bg_ram_use" msgid="1489397892092393257">"RAM वापर (पार्श्वभूमी)"</string>
<string name="process_stats_run_time" msgid="4961296157434073261">"चालण्याचा कालावधी"</string>
@@ -2497,7 +2499,7 @@
<string name="menu_proc_stats_type" msgid="2680179749566186247">"आकडेवारी प्रकार"</string>
<string name="menu_proc_stats_type_background" msgid="1898036847606845052">"पार्श्वभूमी"</string>
<string name="menu_proc_stats_type_foreground" msgid="8244384283966204023">"पुरोभाग"</string>
- <string name="menu_proc_stats_type_cached" msgid="8238824117399683217">"कॅश केलेले"</string>
+ <string name="menu_proc_stats_type_cached" msgid="8238824117399683217">"कॅशे केलेले"</string>
<string name="voice_input_output_settings" msgid="2180337183089517667">"आवाज इनपुट आणि आउटपुट"</string>
<string name="voice_input_output_settings_title" msgid="7080213653518526025">"आवाज इनपुट आणि आउटपुट सेटिंग्ज"</string>
<string name="voice_search_settings_title" msgid="4999026024622014272">"व्हॉइस शोध"</string>
@@ -2507,7 +2509,7 @@
<string name="voice_service_preference_section_title" msgid="2984112696100778038">"व्हॉइस इनपुट सेवा"</string>
<string name="voice_interactor_preference_summary" msgid="7321365727286121067">"पूर्ण हॉटवर्ड आणि परस्परसंवाद"</string>
<string name="voice_recognizer_preference_summary" msgid="3681161319745912594">"मजकूर पाठविण्यासाठी सोपे उच्चारण"</string>
- <string name="voice_interaction_security_warning" msgid="4986261746316889768">"आपल्या वतीने व्हॉइस परीक्षण नेहमी-चालू कार्यप्रदर्शन करण्यासाठी आणि व्हॉइस सक्षम ॲप्लिकेशन नियंत्रित करण्यासाठी व्हॉइस इनपुट सेवा सक्षम असेल. हे <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> ॲप्लिकेशनावरून येते. या सेवेचा वापर सक्षम करायचा?"</string>
+ <string name="voice_interaction_security_warning" msgid="4986261746316889768">"आपल्या वतीने व्हॉइस परीक्षण नेहमी-सुरू कार्यप्रदर्शन करण्यासाठी आणि व्हॉइस सक्षम ॲप्लिकेशन नियंत्रित करण्यासाठी व्हॉइस इनपुट सेवा सक्षम असेल. हे <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g> ॲप्लिकेशनावरून येते. या सेवेचा वापर सक्षम करायचा?"</string>
<string name="tts_engine_preference_title" msgid="1183116842356275061">"प्राधान्य इंजिन"</string>
<string name="tts_engine_settings_title" msgid="4079757915136562358">"इंजिन सेटिंग्ज"</string>
<string name="tts_sliders_title" msgid="1927481069989092278">"भाषण गती आणि पिच"</string>
@@ -2561,8 +2563,8 @@
<string name="backup_configure_account_default_summary" msgid="5718298066335006412">"कोणतेही खाते सध्या बॅक अप घेतलेला डेटा स्टोअर करत नाहीये"</string>
<string name="backup_erase_dialog_title" msgid="8178424339104463014"></string>
<string name="backup_erase_dialog_message" msgid="8767843355330070902">"Google सर्व्हरवरील आपल्या वाय-फाय पासवर्ड, बुकमार्क, इतर सेटिंग्ज आणि अॅप डेटाचा बॅक अप घेणे थांबवायचे तसेच सर्व प्रती मिटवायच्या?"</string>
- <string name="fullbackup_erase_dialog_message" msgid="2588536036471144070">"डिव्हाइस डेटाचा (जसे की वाय-फाय पासवर्ड आणि कॉल इतिहास) आणि (अॅप्सद्वारे स्टोअर केलेल्या सेटिंग्ज आणि फायली यासारख्या) अॅप डेटाचा बॅकअप घेणे थांबवायचे, तसेच दूरस्थ सर्व्हर वरील सर्व प्रती मिटवायच्या?"</string>
- <string name="fullbackup_data_summary" msgid="406274198094268556">"आपोआप डिव्हाइस डेटाचा (जसे की वाय-फाय पासवर्ड आणि कॉल इतिहास) आणि अॅप डेटाचा (जसे की अॅप्स द्वारे स्टोअर केलेल्या सेटिंग्ज आणि फायली) दूरस्थपणे बॅकअप घ्या.\n\nतुम्ही स्वयंचलित बॅकअप चालू करता तेव्हा, डिव्हाइस आणि अॅप डेटा ठराविक कालावधीने दूरस्थपणे सेव्ह केला जातो. अॅप डेटा हा संपर्क, मेसेज आणि फोटो यासारख्या संभाव्य संवेदनशील डेटासह अॅपने सेव्ह केलेला (डेव्हलपरच्या सेटिंग्जवर आधारित) कोणताही डेटा असू शकतो."</string>
+ <string name="fullbackup_erase_dialog_message" msgid="2588536036471144070">"डिव्हाइस डेटाचा (जसे की वाय-फाय पासवर्ड आणि कॉल इतिहास) आणि (अॅप्सद्वारे स्टोअर केलेल्या सेटिंग्ज आणि फाइल यासारख्या) अॅप डेटाचा बॅकअप घेणे थांबवायचे, तसेच दूरस्थ सर्व्हर वरील सर्व प्रती मिटवायच्या?"</string>
+ <string name="fullbackup_data_summary" msgid="406274198094268556">"आपोआप डिव्हाइस डेटाचा (जसे की वाय-फाय पासवर्ड आणि कॉल इतिहास) आणि अॅप डेटाचा (जसे की अॅप्स द्वारे स्टोअर केलेल्या सेटिंग्ज आणि फाइल) दूरस्थपणे बॅकअप घ्या.\n\nतुम्ही स्वयंचलित बॅकअप सुरू करता तेव्हा, डिव्हाइस आणि अॅप डेटा ठराविक कालावधीने दूरस्थपणे सेव्ह केला जातो. अॅप डेटा हा संपर्क, मेसेज आणि फोटो यासारख्या संभाव्य संवेदनशील डेटासह अॅपने सेव्ह केलेला (डेव्हलपरच्या सेटिंग्जवर आधारित) कोणताही डेटा असू शकतो."</string>
<string name="device_admin_settings_title" msgid="2074319456047334589">"डिव्हाइस प्रशासक सेटिंग्ज"</string>
<string name="active_device_admin_msg" msgid="6929247869516924549">"डिव्हाइस प्रशासक अॅप"</string>
<string name="remove_device_admin" msgid="4413438593788336400">"हे डिव्हाइस अॅडमिन अॅप बंद करा"</string>
@@ -2606,7 +2608,7 @@
<string name="background_data_dialog_title" msgid="8306650658158895976">"पार्श्वभूमीवरील डेटा अक्षम करायचा?"</string>
<string name="background_data_dialog_message" msgid="8126774244911656527">"पार्श्वभूमीवरील डेटा बंद केल्याने बॅटरी लाइफ वाढते आणि डेटा वापर कमी होतो. तरीही, काही अॅप्स पार्श्वभूमीवर डेटा कनेक्शन वापरतात."</string>
<string name="sync_automatically" msgid="5746117156896468099">"अॅप डेटा स्वयं-संकालित करा"</string>
- <string name="sync_enabled" msgid="535172627223336983">"सिंक चालू आहे"</string>
+ <string name="sync_enabled" msgid="535172627223336983">"सिंक सुरू आहे"</string>
<string name="sync_disabled" msgid="713721807204805062">"सिंक बंद आहे"</string>
<string name="sync_error" msgid="988155155932442765">"सिंक एरर"</string>
<string name="last_synced" msgid="4511434057768999129">"अंतिम सिंक केले: <xliff:g id="LAST_SYNC_TIME">%1$s</xliff:g>"</string>
@@ -2618,7 +2620,7 @@
<string name="sync_one_time_sync" msgid="6005174168405784256">"आता संकालित करण्यासाठी टॅप करा<xliff:g id="LAST_SYNC_TIME">
%1$s</xliff:g>"</string>
<string name="sync_gmail" msgid="4457967084840001296">"Gmail"</string>
- <string name="sync_calendar" msgid="6573708019827519372">"कॅलेंडर"</string>
+ <string name="sync_calendar" msgid="6573708019827519372">"Calendar"</string>
<string name="sync_contacts" msgid="5687434785723746534">"संपर्क"</string>
<string name="sync_plug" msgid="6703804441408427257"><font fgcolor="#ffffffff">"Google सिंकामध्ये स्वागत आहे!"</font>" \nतुम्ही जेथे आहात तेथून आपल्या संपर्क, भेटी आणि अधिक मध्ये प्रवेश करण्याची अनुमती देण्यासाठी डेटा सिंक करण्याकरिता एक Google दृष्टिकोन."</string>
<string name="header_application_sync_settings" msgid="4581847153669774489">"अॅप सिंक सेटिंग्ज"</string>
@@ -2633,7 +2635,7 @@
<string name="really_remove_account_message" product="device" msgid="3751798556257519916">"हे खाते काढल्याने त्याचे सर्व मेसेज, संपर्क आणि डिव्हाइसवरील इतर डेटा हटवला जाईल!"</string>
<string name="remove_account_failed" msgid="491458185327106966">"या बदलाला आपल्या प्रशासकाद्वारे अनुमती नाही"</string>
<string name="cant_sync_dialog_title" msgid="5483419398223189881">"व्यक्तिचलितपणे सिंक करू शकत नाही"</string>
- <string name="cant_sync_dialog_message" msgid="3467126947262857534">"या आयटमसाठी सध्या सिंक अक्षम केले आहे. हे सेटिंग बदलण्यासाठी, पार्श्वभूमीवरील डेटा आणि आपोआप होणारे सिंक तात्पुरते चालू करा."</string>
+ <string name="cant_sync_dialog_message" msgid="3467126947262857534">"या आयटमसाठी सध्या सिंक अक्षम केले आहे. हे सेटिंग बदलण्यासाठी, पार्श्वभूमीवरील डेटा आणि आपोआप होणारे सिंक तात्पुरते सुरू करा."</string>
<string name="enter_password" msgid="2963496904625715235">"Android प्रारंभ करण्यासाठी, तुमचा पासवर्ड प्रविष्ट करा"</string>
<string name="enter_pin" msgid="7140938268709546890">"Android प्रारंभ करण्यासाठी, तुमचा पिन प्रविष्ट करा"</string>
<string name="enter_pattern" msgid="1653841963422825336">"Android प्रारंभ करण्यासाठी, आपल्या नमुन्याची रेखाटणी करा"</string>
@@ -2643,7 +2645,7 @@
<string name="checking_decryption" msgid="5927759912073053101">"तपासत आहे..."</string>
<string name="starting_android" msgid="4774187626261253089">"Android प्रारंभ करत आहोत..."</string>
<string name="delete" msgid="2325292565700865366">"हटवा"</string>
- <string name="misc_files" msgid="1012397035001764693">"संकीर्ण फायली"</string>
+ <string name="misc_files" msgid="1012397035001764693">"संकीर्ण फाइल"</string>
<string name="misc_files_selected_count" msgid="1434146080729502726">"<xliff:g id="TOTAL">%2$d</xliff:g> पैकी <xliff:g id="NUMBER">%1$d</xliff:g> निवडले"</string>
<string name="misc_files_selected_count_bytes" msgid="3752262902203465861">"<xliff:g id="TOTAL">%2$s</xliff:g> पैकी <xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="select_all" msgid="452240217913675728">"सर्व निवडा"</string>
@@ -2678,7 +2680,7 @@
<string name="data_usage_label_background" msgid="1618794447370396845">"पार्श्वभूमी"</string>
<string name="data_usage_app_restricted" msgid="7569077654579299326">"प्रतिबंधित"</string>
<string name="data_usage_disable_mobile" msgid="4125335076749119451">"मोबाइल डेटा बंद करायचा?"</string>
- <string name="data_usage_disable_mobile_limit" msgid="1937796699758613667">"मोबाईल डेटा मर्यादा सेट करा"</string>
+ <string name="data_usage_disable_mobile_limit" msgid="1937796699758613667">"मोबाइल डेटा मर्यादा सेट करा"</string>
<string name="data_usage_disable_4g_limit" msgid="7131367986548147266">"4G डेटा मर्यादा सेट करा"</string>
<string name="data_usage_disable_3g_limit" msgid="6746819313032692220">"2G-3G डेटा मर्यादा सेट करा"</string>
<string name="data_usage_disable_wifi_limit" msgid="8214267551888018353">"वाय-फाय डेटा मर्यादा सेट करा"</string>
@@ -2687,9 +2689,9 @@
<string name="data_usage_tab_mobile" msgid="540101181815160147">"मोबाइल"</string>
<string name="data_usage_tab_4g" msgid="6677000649094593958">"4G"</string>
<string name="data_usage_tab_3g" msgid="4262659656028408064">"2G-3G"</string>
- <string name="data_usage_list_mobile" msgid="5623011459774885900">"मोबाईल"</string>
+ <string name="data_usage_list_mobile" msgid="5623011459774885900">"मोबाइल"</string>
<string name="data_usage_list_none" msgid="5948870220795490796">"काहीही नाही"</string>
- <string name="data_usage_enable_mobile" msgid="7238385042860001374">"मोबाईल डेटा"</string>
+ <string name="data_usage_enable_mobile" msgid="7238385042860001374">"मोबाइल डेटा"</string>
<string name="data_usage_enable_3g" msgid="3725838726334043367">"2G-3G डेटा"</string>
<string name="data_usage_enable_4g" msgid="8872517106293561179">"4G डेटा"</string>
<string name="data_roaming_enable_mobile" msgid="5886394350890765947">"रोमिंग"</string>
@@ -2698,9 +2700,9 @@
<string name="data_usage_app_settings" msgid="3276444867375694809">"अॅप सेटिंग्ज"</string>
<string name="data_usage_app_restrict_background" msgid="649167881583859169">"पार्श्वभूमीवरील डेटा"</string>
<string name="data_usage_app_restrict_background_summary" msgid="2703967920234671881">"पार्श्वभूमीमध्ये मोबाइल डेटाचा वापर सुरू करा"</string>
- <string name="data_usage_app_restrict_background_summary_disabled" msgid="7211921499365814638">"या ॲपसाठी पार्श्वभूमीवरील डेटा प्रतिबंधित करताना प्रथम मोबाईल डेटा मर्यादा सेट करा."</string>
+ <string name="data_usage_app_restrict_background_summary_disabled" msgid="7211921499365814638">"या ॲपसाठी पार्श्वभूमीवरील डेटा प्रतिबंधित करताना प्रथम मोबाइल डेटा मर्यादा सेट करा."</string>
<string name="data_usage_app_restrict_dialog_title" msgid="750037964591673167">"पार्श्वभूमीवरील डेटा प्रतिबंधित करायचा?"</string>
- <string name="data_usage_app_restrict_dialog" msgid="4022530391896478031">"जेव्हा फक्त मोबाईल नेटवर्क उपलब्ध असतात तेव्हा या वैशिष्ट्यामुळे पार्श्वभूमी डेटावर अवलंबून असलेला अॅप कार्य करणे थांबवते.\n\nतुम्ही अॅप मध्ये उपलब्ध असलेल्या सेटिंग्जमध्ये अधिक योग्य डेटा वापर नियंत्रणे शोधू शकता."</string>
+ <string name="data_usage_app_restrict_dialog" msgid="4022530391896478031">"जेव्हा फक्त मोबाइल नेटवर्क उपलब्ध असतात तेव्हा या वैशिष्ट्यामुळे पार्श्वभूमी डेटावर अवलंबून असलेला अॅप कार्य करणे थांबवते.\n\nतुम्ही अॅप मध्ये उपलब्ध असलेल्या सेटिंग्जमध्ये अधिक योग्य डेटा वापर नियंत्रणे शोधू शकता."</string>
<string name="data_usage_restrict_denied_dialog" msgid="18928292832775805">"तुम्ही मोबाइल डेटा मर्यादा सेट करता तेव्हाच पार्श्वभूमीवरील डेटा प्रतिबंधित करणे शक्य आहे."</string>
<string name="data_usage_auto_sync_on_dialog_title" msgid="2342323408229702005">"डेटाचे ऑटो-सिंक सुरू करायचे?"</string>
<string name="data_usage_auto_sync_on_dialog" product="tablet" msgid="4935430284683238901">"तुम्ही वेबवरून आपल्या खात्यामध्ये कोणतेही बदल करता ते आपल्या टॅब्लेटवर स्वयंचलितपणे कॉपी केले जातील.\n\nकाही खाती तुम्ही टॅब्लेटवर करता ते कोणतेही बदल स्वयंचलितपणे वेबवर देखील कॉपी करू शकतात. Google खाते याप्रकारे कार्य करते."</string>
@@ -2729,9 +2731,9 @@
<string name="data_usage_total_during_range_mobile" product="default" msgid="3504412681869806383">"<xliff:g id="RANGE">%2$s</xliff:g>: आपल्या फोनच्या मापनाप्रमाणे सुमारे <xliff:g id="TOTAL">%1$s</xliff:g> वापरले. आपल्या वाहकाच्या डेटा वापराची गणना भिन्न असू शकते."</string>
<string name="data_usage_metered_title" msgid="6827619643999794429">"नेटवर्क प्रतिबंध"</string>
<string name="data_usage_metered_body" msgid="1342905101297753439">"पार्श्वभूमीवरील डेटा प्रतिबंधित असताना मीटर केलेली नेटवर्क मोबाइल नेटवर्कप्रमाणे वापरली जातात. मोठ्या डाउनलोडसाठी ही नेटवर्क वापरण्यापूर्वी अॅप्सकडून चेतावणी मिळू शकते."</string>
- <string name="data_usage_metered_mobile" msgid="3675591449158207593">"मोबाईल नेटवर्क"</string>
+ <string name="data_usage_metered_mobile" msgid="3675591449158207593">"मोबाइल नेटवर्क"</string>
<string name="data_usage_metered_wifi" msgid="2955256408132426720">"मीटर केलेली वाय-फाय नेटवर्क"</string>
- <string name="data_usage_metered_wifi_disabled" msgid="5771083253782103415">"मीटर केलेली नेटवर्क निवडण्यासाठी, वाय-फाय चालू करा."</string>
+ <string name="data_usage_metered_wifi_disabled" msgid="5771083253782103415">"मीटर केलेली नेटवर्क निवडण्यासाठी, वाय-फाय सुरू करा."</string>
<string name="data_usage_metered_auto" msgid="7924116401382629319">"स्वयंचलित"</string>
<string name="data_usage_metered_yes" msgid="7333744880035386073">"मर्यादित डेटा वापराचे नेटवर्क"</string>
<string name="data_usage_metered_no" msgid="1961524615778610008">"मीटरने मोजले नाही"</string>
@@ -2752,17 +2754,17 @@
<string name="vpn_search_domains" msgid="8469394307693909080">"DNS शोध डोमेन"</string>
<string name="vpn_dns_servers" msgid="3017453300909321239">"DNS सर्व्हर (उदा. 8.8.8.8)"</string>
<string name="vpn_routes" msgid="3393989650778663742">"फॉरवर्ड करण्याचा मार्ग (उदा. 10.0.0.0/8)"</string>
- <string name="vpn_username" msgid="5357878823189445042">"वापरकर्तानाव"</string>
+ <string name="vpn_username" msgid="5357878823189445042">"वापरकर्ता नाव"</string>
<string name="vpn_password" msgid="5325943601523662246">"पासवर्ड"</string>
<string name="vpn_save_login" msgid="6215503139606646915">"खाते माहिती सेव्ह करा"</string>
<string name="vpn_not_used" msgid="2889520789132261454">"(वापरले नाही)"</string>
<string name="vpn_no_ca_cert" msgid="486605757354800838">"(सर्व्हर सत्यापित करू नका)"</string>
<string name="vpn_no_server_cert" msgid="679622228649855629">"(सर्व्हरवरुन प्राप्त झालेले)"</string>
<string name="vpn_always_on_invalid_reason_type" msgid="165810330614905489">"हा VPN प्रकार सर्व वेळी कनेक्ट केलेला राहू शकत नाही"</string>
- <string name="vpn_always_on_invalid_reason_server" msgid="3864424127328210700">"नेहमी-चालू VPN केवळ अंकीय सर्व्हर पत्त्यांना समर्थित करतात"</string>
- <string name="vpn_always_on_invalid_reason_no_dns" msgid="3814114757059738225">"नेहमी-चालू VPN साठी DNS सर्व्हर नमूद करणे आवश्यक आहे"</string>
- <string name="vpn_always_on_invalid_reason_dns" msgid="501388894176868973">"नेहमी-चालू VPN साठी DNS सर्व्हर पत्ते अंकीय असणे आवश्यक आहे"</string>
- <string name="vpn_always_on_invalid_reason_other" msgid="8504512156730364447">"एंटर केलेली माहिती नेहमी-चालू VPN ला समर्थित करत नाही"</string>
+ <string name="vpn_always_on_invalid_reason_server" msgid="3864424127328210700">"नेहमी-सुरू VPN केवळ अंकीय सर्व्हर पत्त्यांना समर्थित करतात"</string>
+ <string name="vpn_always_on_invalid_reason_no_dns" msgid="3814114757059738225">"नेहमी-सुरू VPN साठी DNS सर्व्हर नमूद करणे आवश्यक आहे"</string>
+ <string name="vpn_always_on_invalid_reason_dns" msgid="501388894176868973">"नेहमी-सुरू VPN साठी DNS सर्व्हर पत्ते अंकीय असणे आवश्यक आहे"</string>
+ <string name="vpn_always_on_invalid_reason_other" msgid="8504512156730364447">"एंटर केलेली माहिती नेहमी-सुरू VPN ला समर्थित करत नाही"</string>
<string name="vpn_cancel" msgid="440645172381062337">"रद्द करा"</string>
<string name="vpn_done" msgid="6314426362224527349">"डिसमिस करा"</string>
<string name="vpn_save" msgid="1332625259182278316">"सेव्ह करा"</string>
@@ -2776,14 +2778,14 @@
<string name="vpn_version" msgid="2006792987077940456">"आवृत्ती <xliff:g id="VERSION">%s</xliff:g>"</string>
<string name="vpn_forget_long" msgid="8457511440635534478">"VPN विसरा"</string>
<string name="vpn_replace_vpn_title" msgid="8517436922021598103">"विद्यमान VPN पुनर्स्थित करायचे?"</string>
- <string name="vpn_set_vpn_title" msgid="6483554732067951052">"नेहमी-चालू VPN सेट करायचे?"</string>
- <string name="vpn_first_always_on_vpn_message" msgid="7050017738816963855">"हे सेटिंग चालू असताना, VPN यशस्वीरीत्या कनेक्ट करेपर्यंत तुमच्याकडे इंटरनेट कनेक्शन असणार नाही"</string>
+ <string name="vpn_set_vpn_title" msgid="6483554732067951052">"नेहमी-सुरू VPN सेट करायचे?"</string>
+ <string name="vpn_first_always_on_vpn_message" msgid="7050017738816963855">"हे सेटिंग सुरू असताना, VPN यशस्वीरीत्या कनेक्ट करेपर्यंत तुमच्याकडे इंटरनेट कनेक्शन असणार नाही"</string>
<string name="vpn_replace_always_on_vpn_enable_message" msgid="4149931501300203205">"तुमचे सद्य VPN बदलले जाईल आणि VPN यशस्वीरित्या कनेक्ट करेपर्यंत तुमच्याकडे इंटरनेट कनेक्शन असणार नाही"</string>
- <string name="vpn_replace_always_on_vpn_disable_message" msgid="4924947523200883088">"तुम्ही आधीपासून नेहमी-चालू VPN शी कनेक्ट केले आहे. तुम्ही एका भिन्न VPN शी कनेक्ट केल्यास, तुमचे विद्यमान VPN पुनर्स्थित केले जाईल आणि नेहमी-चालू मोड बंद होईल."</string>
+ <string name="vpn_replace_always_on_vpn_disable_message" msgid="4924947523200883088">"तुम्ही आधीपासून नेहमी-सुरू VPN शी कनेक्ट केले आहे. तुम्ही एका भिन्न VPN शी कनेक्ट केल्यास, तुमचे विद्यमान VPN पुनर्स्थित केले जाईल आणि नेहमी-सुरू मोड बंद होईल."</string>
<string name="vpn_replace_vpn_message" msgid="8009433728523145393">"तुम्ही आधीपासून एका VPN शी कनेक्ट केले आहे. तुम्ही भिन्न VPN शी कनेक्ट केल्यास, तुमचे विद्यमान VPN बदलले जाईल."</string>
- <string name="vpn_turn_on" msgid="2334736319093953055">"चालू करा"</string>
+ <string name="vpn_turn_on" msgid="2334736319093953055">"सुरू करा"</string>
<string name="vpn_cant_connect_title" msgid="5803347131129293771">"<xliff:g id="VPN_NAME">%1$s</xliff:g> कनेक्ट करू शकत नाही"</string>
- <string name="vpn_cant_connect_message" msgid="7729125036551401236">"हे अॅप नेहमी-चालू VPN ला समर्थित करत नाही"</string>
+ <string name="vpn_cant_connect_message" msgid="7729125036551401236">"हे अॅप नेहमी-सुरू VPN ला समर्थित करत नाही"</string>
<string name="vpn_title" msgid="7801918186865029203">"VPN"</string>
<string name="vpn_create" msgid="2477570636472897359">"VPN प्रोफाइल जोडा"</string>
<string name="vpn_menu_edit" msgid="8061437799373333593">"प्रोफाईल संपादित करा"</string>
@@ -2792,12 +2794,12 @@
<string name="vpn_no_vpns_added" msgid="6616183541896197147">"कोणतेही VPN जोडलेले नाहीत"</string>
<string name="vpn_always_on_summary" msgid="3639994551631437397">"VPN शी नेहमी कनेक्ट केलेले रहा"</string>
<string name="vpn_always_on_summary_not_supported" msgid="9077720997795965133">"या ॲपद्वारे समर्थित नाही"</string>
- <string name="vpn_always_on_summary_active" msgid="8962619701962239088">"नेहमी-चालू सक्रिय"</string>
+ <string name="vpn_always_on_summary_active" msgid="8962619701962239088">"नेहमी-सुरू सक्रिय"</string>
<string name="vpn_require_connection" msgid="5413746839457797350">"VPN शिवायची कनेक्शन ब्लॉक करा"</string>
<string name="vpn_require_connection_title" msgid="8361434328767853717">"VPN कनेक्शन आवश्यक आहे?"</string>
<string name="vpn_lockdown_summary" msgid="6770030025737770861">"नेहमी कनेक्ट केलेले राहण्यासाठी एक VPN प्रोफाईल निवडा. केवळ या VPN शी कनेक्ट केलेले असताना नेटवर्क रहदारीला अनुमती दिली जाईल."</string>
<string name="vpn_lockdown_none" msgid="3789288793603394679">"काहीही नाही"</string>
- <string name="vpn_lockdown_config_error" msgid="8761770968704589885">"नेहमी चालू असलेल्या VPN ला सर्व्हर आणि DNS दोन्हीसाठी एका IP पत्त्याची आवश्यकता आहे."</string>
+ <string name="vpn_lockdown_config_error" msgid="8761770968704589885">"नेहमी सुरू असलेल्या VPN ला सर्व्हर आणि DNS दोन्हीसाठी एका IP पत्त्याची आवश्यकता आहे."</string>
<string name="vpn_no_network" msgid="8313250136194588023">"कोणतेही नेटवर्क कनेक्शन नाही. कृपया नंतर पुन्हा प्रयत्न करा."</string>
<string name="vpn_disconnected" msgid="4597953053220332539">"VPN पासून डिस्कनेक्ट झाले"</string>
<string name="vpn_disconnected_summary" msgid="3784118965271376808">"काहीही नाही"</string>
@@ -2849,7 +2851,7 @@
<string name="user_settings_title" msgid="7917598650933179545">"एकाहून अधिक वापरकर्ते"</string>
<string name="user_settings_footer_text" product="device" msgid="4573858247439190545">"नवीन वापरकर्त्यांना जोडून तुमचे डिव्हाइस शेअर करा. प्रत्येक वापरकर्त्याला कस्टम होम स्क्रीन, खाती, अॅप्स, सेटिंग्ज आणि बर्याच गोष्टीसाठी तुमच्या डिव्हाइसवर वैयक्तिक जागा आहे."</string>
<string name="user_settings_footer_text" product="tablet" msgid="780018221428132918">"नवीन वापरकर्त्यांना जोडून तुमचा टॅबलेट शेअर करा. प्रत्येक वापरकर्त्याला कस्टम होम स्क्रीन, खाती अॅप्स, सेटिंग्ज आणि बर्याच गोष्टीसाठी तुमच्या टॅबलेटवर वैयक्तिक जागा आहे."</string>
- <string name="user_settings_footer_text" product="default" msgid="1470859614968237491">"नवीन वापरकर्त्यांना जोडून तुमचा फोन शेअर करा. प्रत्येक वापरकर्त्याला कस्टम होम स्क्रीन, खाती अॅप्स, सेटिंग्ज आणि बर्याच गोष्टीसाठी तुमच्या फोनवर वैयक्तिक जागा आहे."</string>
+ <string name="user_settings_footer_text" product="default" msgid="1470859614968237491">"नवीन वापरकर्त्यांना जोडून तुमचा फोन शेअर करा. प्रत्येक वापरकर्त्याला कस्टम होम स्क्रीन, खाती, अॅप्स, सेटिंग्ज आणि बर्याच गोष्टीसाठी तुमच्या फोनवर वैयक्तिक जागा आहे."</string>
<string name="user_list_title" msgid="6670258645246192324">"वापरकर्ते आणि प्रोफाईल्स"</string>
<string name="user_add_user_or_profile_menu" msgid="4220679989900149336">"वापरकर्ता किंवा प्रोफाइल जोडा"</string>
<string name="user_add_user_menu" msgid="9006572936456324794">"वापरकर्ता जोडा"</string>
@@ -2864,15 +2866,15 @@
<string name="user_nickname" msgid="1088216221559125529">"टोपणनाव"</string>
<string name="user_add_user_type_title" msgid="8672326434351387845">"जोडा"</string>
<string name="user_add_max_count" msgid="4524573950126500416">"तुम्ही सुमारे <xliff:g id="USER_COUNT">%1$d</xliff:g> वापरकर्ते जोडू शकता"</string>
- <string name="user_add_user_item_summary" msgid="6114355152711455716">"वापरकर्त्यांकडे त्यांचे स्वत:चे अॅप्स आणि सामग्री आहे"</string>
+ <string name="user_add_user_item_summary" msgid="6114355152711455716">"वापरकर्त्यांकडे त्यांचे स्वत:चे अॅप्स आणि आशय आहे"</string>
<string name="user_add_profile_item_summary" msgid="6386283837789573755">"तुम्ही आपल्या खात्यावरुन अॅप्स आणि सामग्रीमध्ये प्रवेश करण्यास प्रतिबंध करु शकता"</string>
<string name="user_add_user_item_title" msgid="6835385073795492410">"वापरकर्ता"</string>
<string name="user_add_profile_item_title" msgid="4932743891449790664">"प्रतिबंधित प्रोफाईल"</string>
<string name="user_add_user_title" msgid="2320897397066676472">"नवीन वापरकर्ता जोडायचा?"</string>
- <string name="user_add_user_message_long" msgid="686637203224195465">"अतिरिक्त वापरकर्ते तयार करून तुम्ही इतर लोकांसोबत हे डिव्हाइस शेअर करू शकता. प्रत्येक वापरकर्त्यास त्यांची स्वतःची स्पेस असते, जी ते अॅप्स, वॉलपेपर आणि यासारख्या गोष्टींनी कस्टमाइझ करू शकतात. वापरकर्ते प्रत्येकाला प्रभावित करणाऱ्या वाय-फाय सारख्या डिव्हाइस सेटिंग्ज अॅडजस्ट देखील करू शकतात.\n\nतुम्ही एक नवीन वापरकर्ता जोडता, तेव्हा त्या व्यक्तीला त्याची स्पेस सेट अप करण्याची आवश्यकता असते.\n\nकोणताही वापरकर्ता इतर सर्व वापरकर्त्यांसाठी अॅप अपडेट करू शकतो. ॲक्सेसिबिलिटी सेटिंग्ज आणि सेवा नवीन वापरकर्त्याला कदाचित ट्रान्सफर होणार नाहीत."</string>
+ <string name="user_add_user_message_long" msgid="686637203224195465">"अतिरिक्त वापरकर्ते तयार करून तुम्ही इतर लोकांसोबत हे डिव्हाइस शेअर करू शकता. प्रत्येक वापरकर्त्यास त्यांची स्वतःची स्पेस असते, जी ते अॅप्स, वॉलपेपर आणि यासारख्या गोष्टींनी कस्टमाइझ करू शकतात. वापरकर्ते प्रत्येकाला प्रभावित करणारी वाय-फाय सारखी डिव्हाइस सेटिंग्ज अॅडजस्ट देखील करू शकतात.\n\nतुम्ही एक नवीन वापरकर्ता जोडता, तेव्हा त्या व्यक्तीला त्याची स्पेस सेट अप करण्याची आवश्यकता असते.\n\nकोणताही वापरकर्ता इतर सर्व वापरकर्त्यांसाठी अॅप अपडेट करू शकतो. अॅक्सेसिबिलिटी सेटिंग्ज आणि सेवा नवीन वापरकर्त्याला कदाचित ट्रान्सफर होणार नाहीत."</string>
<string name="user_add_user_message_short" msgid="1802594476285458254">"तुम्ही एक नवीन वापरकर्ता जोडता तेव्हा, त्या व्यक्तीस त्यांचे स्थान सेट करण्याची आवश्यकता असते.\n\nकोणताही वापरकर्ता इतर सर्व वापरकर्त्यांसाठी अॅप्स अपडेट करू शकतो."</string>
<string name="user_setup_dialog_title" msgid="6748950002206392396">"आता वापरकर्ता सेट करायचा?"</string>
- <string name="user_setup_dialog_message" msgid="2988559933258353919">"डिव्हाइस घेण्यासाठी आणि त्यांचे स्थान सेट करण्यासाठी व्यक्ती उपलब्ध असल्याची खात्री करा"</string>
+ <string name="user_setup_dialog_message" msgid="2988559933258353919">"तो वापरकर्ता डिव्हाइसजवळ आहे आणि त्याचे स्थान सेट करण्यासाठी उपलब्ध आहे याची खात्री करा"</string>
<string name="user_setup_profile_dialog_message" msgid="7611900802824048526">"आता प्रोफाईल सेट करायचा?"</string>
<string name="user_setup_button_setup_now" msgid="4941459406266856176">"आता सेट करा"</string>
<string name="user_setup_button_setup_later" msgid="6596031428556518752">"आत्ता नाही"</string>
@@ -2891,7 +2893,7 @@
<string name="user_confirm_remove_self_message" product="tablet" msgid="2889456786320157545">"तुम्ही या टॅब्लेटवरील तुमचे स्थान आणि डेटा गमवाल. तुम्ही ही क्रिया पूर्ववत करु शकत नाही."</string>
<string name="user_confirm_remove_self_message" product="default" msgid="8441729423565705183">"तुम्ही या फोनवरील तुमचे स्थान आणि डेटा गमवाल. तुम्ही ही क्रिया पूर्ववत करु शकत नाही."</string>
<string name="user_confirm_remove_message" msgid="5202150470271756013">"सर्व अॅप्स आणि डेटा हटवला जाईल."</string>
- <string name="work_profile_confirm_remove_message" msgid="1220672284385083128">"तुम्ही सुरु ठेवल्यास या प्रोफाईलमधील सर्व अॅप्स आणि डेटा हटवला जाईल."</string>
+ <string name="work_profile_confirm_remove_message" msgid="1220672284385083128">"तुम्ही सुरू ठेवल्यास या प्रोफाईलमधील सर्व अॅप्स आणि डेटा हटवला जाईल."</string>
<string name="user_profile_confirm_remove_message" msgid="8376289888144561545">"सर्व अॅप्स आणि डेटा हटवला जाईल."</string>
<string name="user_adding_new_user" msgid="381717945749193417">"नवीन वापरकर्त्यास जोडत आहे…"</string>
<string name="user_delete_user_description" msgid="3627684990761268859">"वापरकर्ता हटवा"</string>
@@ -2902,7 +2904,7 @@
<string name="user_exit_guest_confirm_message" msgid="6955182181145748919">"या सत्रातील सर्व अॅप्स आणि डेटा हटवला जाईल."</string>
<string name="user_exit_guest_dialog_remove" msgid="1878866060881115716">"काढा"</string>
<string name="user_enable_calling" msgid="864760054792249503">"फोन कॉल सुरू करा"</string>
- <string name="user_enable_calling_sms" msgid="3450252891736718793">"फोन कॉल आणि SMS चालू करा"</string>
+ <string name="user_enable_calling_sms" msgid="3450252891736718793">"फोन कॉल आणि SMS सुरू करा"</string>
<string name="user_remove_user" msgid="3687544420125911166">"वापरकर्ता हटवा"</string>
<string name="user_enable_calling_confirm_title" msgid="1141612415529158542">"फोन कॉल सुरू करायचे?"</string>
<string name="user_enable_calling_confirm_message" msgid="2490126715153125970">"या वापरकर्त्याशी कॉल इतिहास शेअर केला जाईल."</string>
@@ -2921,7 +2923,7 @@
<string name="nfc_payment_app_and_desc" msgid="102312684211458190">"<xliff:g id="APP">%1$s</xliff:g> - <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
<string name="nfc_payment_use_default" msgid="3098724195746409476">"डीफॉल्ट वापरा"</string>
<string name="nfc_payment_favor_default" msgid="7555356982142464260">"नेहमी"</string>
- <string name="nfc_payment_favor_open" msgid="3739055715000436749">"दुसरा पेमेंट अॅप खुला असतो तेव्हा त्यास वगळून"</string>
+ <string name="nfc_payment_favor_open" msgid="3739055715000436749">"दुसरे पेमेंट अॅप खुले असते तेव्हा त्यास वगळून"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"टॅप आणि पे टर्मिनलवर, यासह पे करा:"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"टर्मिनलवर पेमेंट करा"</string>
<string name="nfc_how_it_works_content" msgid="9174575836302449343">"पेमेंट अॅप सेट करा. त्यानंतर संपर्करहित आयकन असलेल्या कोणत्याही टर्मिनलवर आपल्या फोनची मागील बाजू धरा."</string>
@@ -2935,7 +2937,7 @@
<string name="restriction_menu_change_pin" msgid="592512748243421101">"पिन बदला"</string>
<string name="app_notifications_switch_label" msgid="670683308275498821">"सूचना दर्शवा"</string>
<string name="help_label" msgid="1296484776243905646">"मदत आणि अभिप्राय"</string>
- <string name="support_summary" msgid="3278943815956130740">"मदत लेख, फोन आणि चॅट, सुरूवात करणे"</string>
+ <string name="support_summary" msgid="3278943815956130740">"मदत लेख, फोन आणि चॅट, सुरुवात करणे"</string>
<string name="user_account_title" msgid="2108666882630552859">"सामग्रीसाठी खाते"</string>
<string name="user_picture_title" msgid="6664602422948159123">"फोटो आयडी"</string>
<string name="extreme_threats_title" msgid="1405820547540456436">"अत्याधिक धोके"</string>
@@ -2961,14 +2963,14 @@
<string name="preferred_network_type_title" msgid="1980819233332592332">"प्राधान्यकृत नेटवर्क प्रकार"</string>
<string name="preferred_network_type_summary" msgid="8828375904939960006">"LTE (शिफारस केलेले)"</string>
<string name="work_sim_title" msgid="2885654516046971985">"कार्यालय सिम"</string>
- <string name="user_restrictions_title" msgid="6454305007320972740">"अॅप आणि सामग्री प्रवेश"</string>
+ <string name="user_restrictions_title" msgid="6454305007320972740">"अॅप आणि आशय प्रवेश"</string>
<string name="user_rename" msgid="5624446289379780361">"पुनर्नामित करा"</string>
<string name="app_restrictions_custom_label" msgid="8791627858467265176">"अॅप प्रतिबंध सेट करा"</string>
<string name="user_restrictions_controlled_by" msgid="3442508299902131033">"<xliff:g id="APP">%1$s</xliff:g> द्वारे नियंत्रित"</string>
<string name="app_sees_restricted_accounts" msgid="2210750497683265281">"हा अॅप आपल्या खात्यांमध्ये प्रवेश करु शकतो"</string>
<string name="app_sees_restricted_accounts_and_controlled_by" msgid="5028333644657350816">"हा अॅप आपल्या खात्यांमध्ये प्रवेश करू शकतो. <xliff:g id="APP">%1$s</xliff:g> द्वारे नियंत्रित"</string>
- <string name="restriction_wifi_config_title" msgid="1689176998451296068">"वाय-फाय आणि मोबाईल"</string>
- <string name="restriction_wifi_config_summary" msgid="2450206736438594690">"वाय-फाय आणि मोबाईल सेटिंग्जच्या सुधारणेस अनुमती द्या"</string>
+ <string name="restriction_wifi_config_title" msgid="1689176998451296068">"वाय-फाय आणि मोबाइल"</string>
+ <string name="restriction_wifi_config_summary" msgid="2450206736438594690">"वाय-फाय आणि मोबाइल सेटिंग्जच्या सुधारणेस अनुमती द्या"</string>
<string name="restriction_bluetooth_config_title" msgid="34551118506640221">"ब्लूटूथ"</string>
<string name="restriction_bluetooth_config_summary" msgid="5304900222614952895">"ब्लूटूथ जोडण्या आणि सेटिंग्जच्या सुधारणेस अनुमती द्या"</string>
<string name="restriction_nfc_enable_title" msgid="5146674482590550598">"NFC"</string>
@@ -3047,7 +3049,7 @@
<string name="app_default_dashboard_title" msgid="6575301028225232193">"डीफॉल्ट अॅप्स"</string>
<string name="system_dashboard_summary" msgid="6582464466735779394">"भाषा, जेश्चर, वेळ, बॅकअप"</string>
<string name="search_results_title" msgid="4160717656435503940">"सेटिंग्ज"</string>
- <string name="keywords_wifi" msgid="8477688080895466846">"वायफाय, वाय-फाय, नेटवर्क कनेक्शन, इंटरनेट, वायरलेस, डेटा, वाय फाय"</string>
+ <string name="keywords_wifi" msgid="8477688080895466846">"वायफाय, वाय-फाय, नेटवर्क कनेक्शन, इंटरनेट, वायरलेस, डेटा, वाय-फाय"</string>
<string name="keywords_wifi_notify_open_networks" msgid="1031260564121854773">"वाय-फाय सूचना, वायफाय सूचना"</string>
<string name="keywords_auto_brightness" msgid="5007188989783072428">"ऑटो ब्राइटनेस"</string>
<string name="keywords_vibrate_on_touch" msgid="3615173661462446877">"व्हायब्रेशन थांबवा, टॅप करा, कीबोर्ड"</string>
@@ -3116,7 +3118,7 @@
<string name="keywords_system_update_settings" msgid="4419971277998986067">"अपग्रेड करा, Android"</string>
<string name="keywords_zen_mode_settings" msgid="4103819458182535493">"डीएनडी, शेड्यूल, सूचना, ब्लॉक, शांतता, व्हायब्रेट, झोप, काम, फोकस, ध्वनी, म्यूट, दिवस, कार्य दिवस, शनिवार व रविवार, आठवड्याची शेवटची रात्र, इव्हेंट"</string>
<string name="keywords_screen_timeout" msgid="4328381362313993666">"स्क्रीन, लॉक टाइम, कालबाह्य, लॉकस्क्रीन"</string>
- <string name="keywords_storage_settings" msgid="6422454520424236476">"मेमरी, कॅशे, डेटा, हटवा, साफ करा, मोकळी करा, जागा"</string>
+ <string name="keywords_storage_settings" msgid="6422454520424236476">"मेमरी, कॅशे , डेटा, हटवा, साफ करा, मोकळी करा, जागा"</string>
<string name="keywords_bluetooth_settings" msgid="1152229891590622822">"कनेक्ट केलेले, डिव्हाइस, हेडफोन, हेडसेट, स्पीकर, वायरलेस, पेअर, इयरबड, संगीत, मीडिया"</string>
<string name="keywords_wallpaper" msgid="7665778626293643625">"पार्श्वभूमी, स्क्रीन, लॉकस्क्रीन, थीम"</string>
<string name="keywords_assist_input" msgid="8392362788794886564">"डीफॉल्ट, सहाय्यक"</string>
@@ -3144,11 +3146,11 @@
<string name="notification_unknown_sound_title" msgid="8043718667804838398">"ॲपने प्रदान केलेला ध्वनी"</string>
<string name="notification_sound_default" msgid="2664544380802426260">"डीफॉल्ट सूचना ध्वनी"</string>
<string name="alarm_ringtone_title" msgid="6411326147408635902">"डीफॉल्ट अलार्म ध्वनी"</string>
- <string name="vibrate_when_ringing_title" msgid="2757996559847126952">"कॉलसाठी कंपन सुरू करा"</string>
+ <string name="vibrate_when_ringing_title" msgid="2757996559847126952">"कॉलसाठी व्हायब्रेट करा"</string>
<string name="other_sound_settings" msgid="5250376066099818676">"इतर ध्वनी"</string>
<string name="dial_pad_tones_title" msgid="8877212139988655769">"डायल पॅड टोन"</string>
<string name="screen_locking_sounds_title" msgid="4407110895465866809">"स्क्रीन लॉक करणारे ध्वनी"</string>
- <string name="charging_sounds_title" msgid="5070437987230894287">"आवाज आणि कंपन चार्ज होत आहे"</string>
+ <string name="charging_sounds_title" msgid="5070437987230894287">"चार्जिंगचा आवाज आणि व्हायब्रेशन"</string>
<string name="docking_sounds_title" msgid="2573137471605541366">"डॉकिंग ध्वनी"</string>
<string name="touch_sounds_title" msgid="165237488496165652">"स्पर्श ध्वनी"</string>
<string name="vibrate_on_touch_title" msgid="6360155469279157684">"स्पर्श व्हायब्रेट"</string>
@@ -3159,7 +3161,7 @@
<string name="emergency_tone_silent" msgid="804809075282717882">"शांतता"</string>
<string name="emergency_tone_alert" msgid="907868135091891015">"टोन"</string>
<string name="emergency_tone_vibrate" msgid="5020068066905681181">"स्पंदने"</string>
- <string name="boot_sounds_title" msgid="7583926202411353620">"ध्वनी चालू करा"</string>
+ <string name="boot_sounds_title" msgid="7583926202411353620">"ध्वनी सुरू करा"</string>
<string name="live_caption_title" msgid="7926591158657997051">"लाइव्ह कॅप्शन"</string>
<string name="live_caption_summary" msgid="9064771862352393125">"मीडियाला आपोआप सबटायटल द्या"</string>
<string name="zen_mode_settings_summary_off" msgid="6929319200478424962">"कधीही नाही"</string>
@@ -3168,7 +3170,7 @@
<item quantity="one">एक सुरू केले</item>
</plurals>
<string name="zen_mode_settings_title" msgid="3425263414594779244">"व्यत्यय आणू नका"</string>
- <string name="zen_mode_settings_turn_on_dialog_title" msgid="3062548369931058282">"व्यत्यय आणू नका चालू करा"</string>
+ <string name="zen_mode_settings_turn_on_dialog_title" msgid="3062548369931058282">"व्यत्यय आणू नका सुरू करा"</string>
<string name="zen_mode_behavior_settings_title" msgid="423125904296667490">"अपवाद"</string>
<string name="zen_mode_duration_settings_title" msgid="5522668871014735728">"डीफॉल्ट कालावधी"</string>
<string name="zen_mode_behavior_allow_title" msgid="2440627647424280842">"यांचे ध्वनी आणि व्हायब्रेशन राहू द्या"</string>
@@ -3208,7 +3210,7 @@
<string name="zen_mode_restrict_notifications_summary_custom" msgid="4982187708274505748">"अंशतः लपवलेले"</string>
<string name="zen_mode_restrict_notifications_summary_hidden" msgid="7637206880685474111">"सूचना आल्यावर व्हिज्युअल किंवा आवाज नाही"</string>
<string name="zen_mode_what_to_block_title" msgid="2142809942549840800">"कस्टम प्रतिबंध"</string>
- <string name="zen_mode_block_effects_screen_on" msgid="1042489123800404560">"स्क्रीन चालू असताना"</string>
+ <string name="zen_mode_block_effects_screen_on" msgid="1042489123800404560">"स्क्रीन सुरू असताना"</string>
<string name="zen_mode_block_effects_screen_off" msgid="6380935819882837552">"स्क्रीन बंद असताना"</string>
<string name="zen_mode_block_effect_sound" msgid="1499243540186357631">"ध्वनी आणि व्हायब्रेट म्यूट करा"</string>
<string name="zen_mode_block_effect_intent" msgid="5666951244667422668">"स्क्रीन सुरू करू नका"</string>
@@ -3220,7 +3222,7 @@
<string name="zen_mode_block_effect_list" msgid="6081548478844912181">"सूचना सूचीमधून लपवा"</string>
<string name="zen_mode_block_effect_summary_none" msgid="7166175186759564510">"कधीही नाही"</string>
<string name="zen_mode_block_effect_summary_screen_off" msgid="2985086455557755722">"स्क्रीन बंद असताना"</string>
- <string name="zen_mode_block_effect_summary_screen_on" msgid="6183282342145215594">"स्क्रीन चालू असताना"</string>
+ <string name="zen_mode_block_effect_summary_screen_on" msgid="6183282342145215594">"स्क्रीन सुरू असताना"</string>
<string name="zen_mode_block_effect_summary_sound" msgid="4907185880913861880">"ध्वनी आणि व्हायब्रेट"</string>
<string name="zen_mode_block_effect_summary_some" msgid="6035118904496072665">"ध्वनी, व्हायब्रेट आणि काही व्हिज्युअल चिन्हांच्या काही सूचना"</string>
<string name="zen_mode_block_effect_summary_all" msgid="2830443565687247759">"सूचनांचा ध्वनी, व्हायब्रेट आणि व्हिज्युअल चिन्ह"</string>
@@ -3228,13 +3230,13 @@
<string name="zen_mode_no_exceptions" msgid="3099578343994492857">"काहीही नाही"</string>
<string name="zen_mode_other_options" msgid="7216192179063769057">"इतर पर्याय"</string>
<string name="zen_mode_add" msgid="2533484377786927366">"जोडा"</string>
- <string name="zen_mode_enable_dialog_turn_on" msgid="6396050543542026184">"चालू करा"</string>
+ <string name="zen_mode_enable_dialog_turn_on" msgid="6396050543542026184">"सुरू करा"</string>
<string name="zen_mode_button_turn_on" msgid="1097964136225943415">"आता सुरू करा"</string>
<string name="zen_mode_button_turn_off" msgid="3990967728457149454">"आता बंद करा"</string>
- <string name="zen_mode_settings_dnd_manual_end_time" msgid="4307574188962071429">"व्यत्यय आणू नका <xliff:g id="FORMATTED_TIME">%s</xliff:g> पर्यंत चालू असणार आहे"</string>
+ <string name="zen_mode_settings_dnd_manual_end_time" msgid="4307574188962071429">"व्यत्यय आणू नका <xliff:g id="FORMATTED_TIME">%s</xliff:g> पर्यंत सुरू असणार आहे"</string>
<string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"तुम्ही बंद करेपर्यंत व्यत्यय आणू नका सुरू राहील"</string>
<string name="zen_mode_settings_dnd_automatic_rule" msgid="2843297614114625408">"(<xliff:g id="RULE_NAME">%s</xliff:g>) शेड्युलने व्यत्यय आणू नका आपोआप सुरू केले"</string>
- <string name="zen_mode_settings_dnd_automatic_rule_app" msgid="5103454923160912313">"<xliff:g id="APP_NAME">%s</xliff:g> या ॲपने व्यत्यय आणू नका आपोआप चालू केले"</string>
+ <string name="zen_mode_settings_dnd_automatic_rule_app" msgid="5103454923160912313">"<xliff:g id="APP_NAME">%s</xliff:g> या ॲपने व्यत्यय आणू नका आपोआप सुरू केले"</string>
<string name="zen_mode_settings_dnd_custom_settings_footer" msgid="6335108298640066560">"<xliff:g id="RULE_NAMES">%s</xliff:g>साठी व्यत्यय आणू नका कस्टम सेटिंग्ज सह सुरू आहे."</string>
<string name="zen_mode_settings_dnd_custom_settings_footer_link" msgid="4007974052885089379"><annotation id="link">" कस्टम सेटिंग्ज पाहा"</annotation></string>
<string name="zen_interruption_level_priority" msgid="9178419297408319234">"केवळ प्राधान्य"</string>
@@ -3306,7 +3308,7 @@
<string name="hide_silent_icons_summary" msgid="2624346914488256888">"स्टेटस बारमध्ये शांत सूचनांसाठी आयकन लपवा"</string>
<string name="notification_badging_title" msgid="6311699476970264712">"सूचना बिंदूंना अनुमती द्या"</string>
<string name="notification_bubbles_title" msgid="9196562435741861317">"बबल"</string>
- <string name="notification_bubbles_summary" msgid="4624512775901949578">"फ्लोटिंग शॉर्टकट वापरून कुठूनही ॲप आशय झटपट ॲक्सेस करा"</string>
+ <string name="notification_bubbles_summary" msgid="4624512775901949578">"फ्लोटिंग शॉर्टकट वापरून कुठूनही अॅप आशय झटपट ॲक्सेस करा"</string>
<string name="bubbles_feature_education" msgid="8979109826818881018">"काही सूचना आणि इतर आशय स्क्रीनवर बबल म्हणून दिसू शकतात. बबल उघडण्यासाठी, त्यावर टॅप करा. डिसमिस करण्यासाठी, तो स्क्रीनच्या खालच्या बाजूला ड्रॅग करा."</string>
<string name="bubbles_app_toggle_title" msgid="6401217027603326439">"बबल"</string>
<string name="bubbles_app_toggle_summary" msgid="7707611139796553855">"<xliff:g id="APP_NAME">%1$s</xliff:g> ला काही सूचना बबल म्हणून दाखवू द्या"</string>
@@ -3372,7 +3374,7 @@
<string name="notification_assistant_security_warning_title" msgid="4190584438086738496">"<xliff:g id="SERVICE">%1$s</xliff:g> ला सूचना अॅक्सेस करण्याची अनुमती द्यायची का?"</string>
<string name="notification_assistant_security_warning_summary" msgid="6924513399671031930">"संपर्क नावे आणि तुम्हाला येणारे एसएमएस यासारख्या वैयक्तिक माहितीच्या समावेशासह <xliff:g id="NOTIFICATION_ASSISTANT_NAME">%1$s</xliff:g> सर्व सूचना पाहू शकेल. ते त्यांच्यामधील सूचनांमध्ये बदल करू शकेल किंवा त्यांना डिसमिस करू शकेल अथवा त्यामध्ये असलेली अॅक्शन बटणे ट्रिगर करू शकेल. \n\nयामुळे ॲपला व्यत्यय आणू नका सुरू किंवा बंद करता येईल आणि संबंधित सेटिंग्ज बदलता येतील."</string>
<string name="notification_listener_security_warning_title" msgid="4902253246428777797">"<xliff:g id="SERVICE">%1$s</xliff:g> साठी सूचना प्रवेशास अनुमती द्यायची?"</string>
- <string name="notification_listener_security_warning_summary" msgid="4454702907350100288">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> तुम्ही प्राप्त करता ती संपर्क नावे आणि मजकूर मेसेज यासारख्या वैयक्तिक माहितीसह सर्व सूचना वाचण्यात सक्षम असेल. तो सूचना डिसमिस करण्यात किंवा त्यामध्ये असलेली क्रिया बटणे ट्रिगर करण्यात देखील सक्षम असेल. \n\nहे ॲपला व्यत्यय आणू नका चालू किंवा बंद करण्याची आणि सबंधित सेटिंग्ज बदलण्याची क्षमता देखील देईल."</string>
+ <string name="notification_listener_security_warning_summary" msgid="4454702907350100288">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> तुम्ही प्राप्त करता ती संपर्क नावे आणि मजकूर मेसेज यासारख्या वैयक्तिक माहितीसह सर्व सूचना वाचण्यात सक्षम असेल. तो सूचना डिसमिस करण्यात किंवा त्यामध्ये असलेली क्रिया बटणे ट्रिगर करण्यात देखील सक्षम असेल. \n\nहे ॲपला व्यत्यय आणू नका सुरू किंवा बंद करण्याची आणि सबंधित सेटिंग्ज बदलण्याची क्षमता देखील देईल."</string>
<string name="notification_listener_disable_warning_summary" msgid="162165151519082978">"तुम्ही <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> साठी सूचनांमधील प्रवेश बंद केल्यास, व्यत्यय आणू नका मधील प्रवेश देखील बंद केला जाऊ शकतो."</string>
<string name="notification_listener_disable_warning_confirm" msgid="7863495391671154188">"बंद करा"</string>
<string name="notification_listener_disable_warning_cancel" msgid="6264631825225298458">"रद्द करा"</string>
@@ -3413,7 +3415,7 @@
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> वर्गवाऱ्या हटवल्या</item>
<item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> वर्गवारी हटवली</item>
</plurals>
- <string name="notification_toggle_on" msgid="5119816745741139542">"चालू"</string>
+ <string name="notification_toggle_on" msgid="5119816745741139542">"सुरू"</string>
<string name="notification_toggle_off" msgid="5289843670514922751">"बंद"</string>
<string name="app_notification_block_title" msgid="7898269373875294367">"सर्व ब्लॉक करा"</string>
<string name="app_notification_block_summary" msgid="4502146897785692336">"या सूचना कधीही दर्शवू नका"</string>
@@ -3445,13 +3447,13 @@
<string name="zen_mode_delete_rule_confirmation" msgid="2646596466259025978">"\"<xliff:g id="RULE">%1$s</xliff:g>\" नियम हटवायचा?"</string>
<string name="zen_mode_delete_rule_button" msgid="611058106279881991">"हटवा"</string>
<string name="zen_mode_rule_type_unknown" msgid="2819480113355191421">"अज्ञात"</string>
- <string name="zen_mode_app_set_behavior" msgid="8597398780262575571">"या सेटिंग्ज आत्ता बदलता येणार नाहीत. एका (<xliff:g id="APP_NAME">%1$s</xliff:g>) अॅपने कस्टम वर्तनासह व्यत्यय आणू नका आपोआप चालू केलेले आहे."</string>
- <string name="zen_mode_unknown_app_set_behavior" msgid="5666462954329932302">"या सेटिंग्ज आत्ता बदलता येणार नाहीत. एका अॅपने व्यत्यय आणू नका हे कस्टम वर्तनासह आपोआप चालू केले."</string>
- <string name="zen_mode_qs_set_behavior" msgid="788646569296973998">"या सेटिंग्ज आत्ता बदलता येणार नाहीत. व्यत्यय आणू नका हे मॅन्युअली कस्टम वर्तनासह चालू करण्यात आले."</string>
+ <string name="zen_mode_app_set_behavior" msgid="8597398780262575571">"या सेटिंग्ज आत्ता बदलता येणार नाहीत. एका (<xliff:g id="APP_NAME">%1$s</xliff:g>) अॅपने कस्टम वर्तनासह व्यत्यय आणू नका आपोआप सुरू केलेले आहे."</string>
+ <string name="zen_mode_unknown_app_set_behavior" msgid="5666462954329932302">"या सेटिंग्ज आत्ता बदलता येणार नाहीत. एका अॅपने व्यत्यय आणू नका हे कस्टम वर्तनासह आपोआप सुरू केले."</string>
+ <string name="zen_mode_qs_set_behavior" msgid="788646569296973998">"या सेटिंग्ज आत्ता बदलता येणार नाहीत. व्यत्यय आणू नका हे मॅन्युअली कस्टम वर्तनासह सुरू करण्यात आले."</string>
<string name="zen_schedule_rule_type_name" msgid="4516851728113801329">"वेळ"</string>
- <string name="zen_schedule_rule_enabled_toast" msgid="1742354493045049048">"निर्दिष्ट केलेल्या कालावधींसाठी व्यत्यय आणू नका चालू करण्याकरिता स्वयंचलित नियम सेट केला"</string>
+ <string name="zen_schedule_rule_enabled_toast" msgid="1742354493045049048">"निर्दिष्ट केलेल्या कालावधींसाठी व्यत्यय आणू नका सुरू करण्याकरिता स्वयंचलित नियम सेट केला"</string>
<string name="zen_event_rule_type_name" msgid="7467729997336583342">"इव्हेंट"</string>
- <string name="zen_event_rule_enabled_toast" msgid="7087368268966855976">"निर्दिष्ट केलेल्या इव्हेंटसाठी व्यत्यय आणू नका चालू करण्याकरिता स्वयंचलित नियम सेट केला"</string>
+ <string name="zen_event_rule_enabled_toast" msgid="7087368268966855976">"निर्दिष्ट केलेल्या इव्हेंटसाठी व्यत्यय आणू नका सुरू करण्याकरिता स्वयंचलित नियम सेट केला"</string>
<string name="zen_mode_event_rule_calendar" msgid="6088077103908487442">"यासाठी इव्हेंट दरम्यान"</string>
<string name="zen_mode_event_rule_summary_calendar_template" msgid="4027207992040792657">"<xliff:g id="CALENDAR">%1$s</xliff:g> साठी इव्हेंट दरम्यान"</string>
<string name="zen_mode_event_rule_summary_any_calendar" msgid="7590085295784895885">"कोणतेही कॅलेंडर"</string>
@@ -3462,7 +3464,7 @@
<string name="zen_mode_event_rule_reply_yes_or_maybe" msgid="5042234361937256329">"होय किंवा कदाचित"</string>
<string name="zen_mode_event_rule_reply_yes" msgid="7039756546321205552">"होय"</string>
<string name="zen_mode_rule_not_found_text" msgid="6553855397424553685">"नियम आढळला नाही."</string>
- <string name="zen_mode_rule_summary_enabled_combination" msgid="8269105393636454359">"चालू / <xliff:g id="MODE">%1$s</xliff:g>"</string>
+ <string name="zen_mode_rule_summary_enabled_combination" msgid="8269105393636454359">"सुरू / <xliff:g id="MODE">%1$s</xliff:g>"</string>
<string name="zen_mode_rule_summary_provider_combination" msgid="8674730656585528193">"<xliff:g id="PACKAGE">%1$s</xliff:g>\n<xliff:g id="SUMMARY">%2$s</xliff:g>"</string>
<string name="zen_mode_schedule_rule_days" msgid="220627703673691816">"दिवस"</string>
<string name="zen_mode_schedule_rule_days_none" msgid="6011716195119389956">"काहीही नाही"</string>
@@ -3524,7 +3526,7 @@
<string name="zen_mode_calls_summary_two" msgid="9017678770532673578">"<xliff:g id="CALLER_TYPE">%1$s</xliff:g> आणि <xliff:g id="CALLERT_TPYE">%2$s</xliff:g> कडून अनुमती द्या"</string>
<string name="zen_mode_repeat_callers_summary" msgid="1752513516040525545">"एकाच व्यक्तीने <xliff:g id="MINUTES">%d</xliff:g> मिनिटांच्या आत दुसर्यांदा कॉल केल्यास"</string>
<string name="zen_mode_behavior_summary_custom" msgid="3909532602640130841">"कस्टम"</string>
- <string name="zen_mode_when" msgid="7835420687948416255">"स्वयंचलितपणे चालू करा"</string>
+ <string name="zen_mode_when" msgid="7835420687948416255">"स्वयंचलितपणे सुरू करा"</string>
<string name="zen_mode_when_never" msgid="4506296396609224524">"कधीही नाही"</string>
<string name="zen_mode_when_every_night" msgid="3942151668791426194">"प्रत्येक रात्री"</string>
<string name="zen_mode_when_weeknights" msgid="2412709309122408474">"आठवड्याच्या रात्री"</string>
@@ -3542,11 +3544,11 @@
</plurals>
<string name="zen_mode_summary_alarms_only_by_time" msgid="2462898862757904560">"केवळ <xliff:g id="FORMATTEDTIME">%1$s</xliff:g> पर्यंत अलार्मवर बदला"</string>
<string name="zen_mode_summary_always" msgid="2703276042913200837">"नेहमी व्यत्यय आणा वर बदला"</string>
- <string name="zen_mode_screen_on" msgid="7098470659072167219">"स्क्रीन चालू असताना"</string>
+ <string name="zen_mode_screen_on" msgid="7098470659072167219">"स्क्रीन सुरू असताना"</string>
<string name="zen_mode_screen_on_summary" msgid="8275416649295357524">"सूचनांना स्क्रीनवरील व्यत्यय आणू नका पॉपने शांत होऊ द्या, आणि एक स्टेटस बार आयकॉन दाखवू द्या"</string>
<string name="zen_mode_screen_off" msgid="84211490206459038">"स्क्रीन बंद असताना"</string>
- <string name="zen_mode_screen_off_summary" msgid="8592179073243001267">"व्यत्यय आणू नका ने स्क्रीन चालू करून लाइटची उघडझाप करू द्या आणि सूचनांना मूक होऊ द्या"</string>
- <string name="zen_mode_screen_off_summary_no_led" msgid="7255874108150630145">"व्यत्यय आणू नका ने स्क्रीन चालू करा आणि सूचनांना मूक होऊ द्या"</string>
+ <string name="zen_mode_screen_off_summary" msgid="8592179073243001267">"व्यत्यय आणू नका ने स्क्रीन सुरू करून लाइटची उघडझाप करू द्या आणि सूचनांना मूक होऊ द्या"</string>
+ <string name="zen_mode_screen_off_summary_no_led" msgid="7255874108150630145">"व्यत्यय आणू नका ने स्क्रीन सुरू करा आणि सूचनांना मूक होऊ द्या"</string>
<string name="notification_app_settings_button" msgid="3651180424198580907">"सूचना सेटिंग्ज"</string>
<string name="suggestion_button_text" msgid="5783566542423813847">"ठीक"</string>
<string name="device_feedback" msgid="4042352891448769818">"या डिव्हाइस बद्दल अभिप्राय पाठवा"</string>
@@ -3563,7 +3565,7 @@
<string name="managing_admin" msgid="3212584016377581608">"<xliff:g id="ADMIN_APP_LABEL">%s</xliff:g> द्वारे व्यवस्थापित"</string>
<string name="experimental_preference" msgid="5903223408406906322">"(प्रायोगिक)"</string>
<string name="encryption_interstitial_header" msgid="3298397268731647519">"सुरक्षित प्रारंभ"</string>
- <string name="encryption_continue_button" msgid="2808797091460167842">"सुरु ठेवा"</string>
+ <string name="encryption_continue_button" msgid="2808797091460167842">"सुरू ठेवा"</string>
<string name="encryption_interstitial_message_pin" msgid="6592265582286340307">"सुरू होण्यापूर्वी तुमचा पिन आवश्यक करून तुम्ही हे डिव्हाइस अधिक संरक्षित करू शकता. डिव्हाइस सुरू होईपर्यंत, ते कॉल, मेसेज किंवा अलार्मसह सूचना प्राप्त करू शकत नाही. \n\nयामुळे हरवलेल्या किंवा चोरीला गेलेल्या डिव्हाइस वरील डेटाचे संरक्षण करण्यात मदत होते. तुमचे डिव्हाइस सुरू करण्यासाठी पिन हवा?"</string>
<string name="encryption_interstitial_message_pattern" msgid="5620724295995735120">"सुरू होण्यापूर्वी तुमचा पॅटर्न आवश्यक करून तुम्ही हे डिव्हाइस अधिक संरक्षित करू शकता. डिव्हाइस सुरू होईपर्यंत, ते कॉल, मेसेज किंवा अलार्मसह सूचना प्राप्त करू शकत नाही. \n\nयामुळे हरवलेल्या किंवा चोरीला गेलेल्या डिव्हाइस वरील डेटाचे संरक्षण करण्यात मदत होते. तुमचे डिव्हाइस सुरू करण्यासाठी पॅटर्न हवा?"</string>
<string name="encryption_interstitial_message_password" msgid="7236688467386126401">"सुरू होण्यापूर्वी तुमचा पासवर्ड आवश्यक करून तुम्ही हे डिव्हाइस अधिक संरक्षित करू शकता. डिव्हाइस सुरू होईपर्यंत, ते कॉल, मेसेज किंवा अलार्मसह सूचना प्राप्त करू शकत नाही. \n\nयामुळे हरवलेल्या किंवा चोरीला गेलेल्या डिव्हाइस वरील डेटाचे संरक्षण करण्यात मदत होते. तुमचे डिव्हाइस सुरू करण्यासाठी पासवर्ड हवा?"</string>
@@ -3606,7 +3608,7 @@
<string name="notifications_disabled" msgid="316658185757688983">"बंद"</string>
<string name="notifications_partly_blocked" msgid="6330451240669068819">"<xliff:g id="COUNT_1">%2$d</xliff:g> पैकी <xliff:g id="COUNT_0">%1$d</xliff:g> वर्गवाऱ्या बंद"</string>
<string name="notifications_silenced" msgid="538923056987616372">"शांत केले"</string>
- <string name="notifications_redacted" msgid="308836040236690014">"संवेदनशील सामग्री लॉक स्क्रीनवर नाही"</string>
+ <string name="notifications_redacted" msgid="308836040236690014">"संवेदनशील आशय लॉक स्क्रीनवर नाही"</string>
<string name="notifications_hidden" msgid="3665505522897010205">"लॉक स्क्रीनवर नाही"</string>
<string name="notifications_priority" msgid="8849045645983017929">"व्यत्यय आणू नका अधिशून्य केले"</string>
<string name="notifications_summary_divider" msgid="3148951310482572028">" / "</string>
@@ -3710,8 +3712,8 @@
<string name="high_power_off" msgid="5906679734326490426">"बॅटरी वापर ऑप्टिमाइझ करत आहे"</string>
<string name="high_power_system" msgid="739584574711292753">"बॅटरी ऑप्टिमायझेशन उपलब्ध नाही"</string>
<string name="high_power_desc" msgid="333756885680362741">"बॅटरी ऑप्टिमायझेशन वापरू नका. तुमची बॅटरी अधिक द्रुतपणे संपवू शकते."</string>
- <string name="high_power_prompt_title" msgid="2805745781720454052">"अॅप नेहमी पार्श्वभूमीत चालू द्यायचे?"</string>
- <string name="high_power_prompt_body" msgid="8067395096053552289">"<xliff:g id="APP_NAME">%1$s</xliff:g> नेहमी पार्श्वभूमीमध्ये चालू दिल्याने बॅटरीचे आयुर्मान कमी होऊ शकते. \n\nतुम्ही हे नंतर सेटिंग्ज > अॅप्स आणि सूचना मधून बदलू शकता."</string>
+ <string name="high_power_prompt_title" msgid="2805745781720454052">"अॅप नेहमी पार्श्वभूमीत सुरू द्यायचे?"</string>
+ <string name="high_power_prompt_body" msgid="8067395096053552289">"<xliff:g id="APP_NAME">%1$s</xliff:g> नेहमी पार्श्वभूमीमध्ये सुरू दिल्याने बॅटरीचे आयुर्मान कमी होऊ शकते. \n\nतुम्ही हे नंतर सेटिंग्ज > अॅप्स आणि सूचना मधून बदलू शकता."</string>
<string name="battery_summary" msgid="4345690800899981339">"शेवटच्या पूर्ण चार्जनंतर <xliff:g id="PERCENTAGE">%1$s</xliff:g> वापर"</string>
<string name="battery_power_management" msgid="2853925857548647969">"ऊर्जा व्यवस्थापन"</string>
<string name="no_battery_summary" msgid="4105932628367471314">"पूर्ण चार्ज झाल्यानंतर बॅटरी वापर नाही"</string>
@@ -3729,9 +3731,9 @@
<string name="usb_use_charging_only_desc" msgid="3283518562582478950">"फक्त हे डिव्हाइस चार्ज करा"</string>
<string name="usb_use_power_only" msgid="6595783381323810697">"कनेक्ट केलेले डिव्हाइस चार्ज करा"</string>
<string name="usb_use_file_transfers" msgid="6153021302176151884">"फाइल ट्रान्सफर"</string>
- <string name="usb_use_file_transfers_desc" msgid="6953866660041189580">"दुसऱ्या डिव्हाइसवर फायली स्थानांतरित करा"</string>
+ <string name="usb_use_file_transfers_desc" msgid="6953866660041189580">"दुसऱ्या डिव्हाइसवर फाइल स्थानांतरित करा"</string>
<string name="usb_use_photo_transfers" msgid="5974236250197451257">"PTP"</string>
- <string name="usb_use_photo_transfers_desc" msgid="2325112887316125320">"MTP (PTP) समर्थित नसल्यास फोटो किंवा फायली स्थानांतरित करा"</string>
+ <string name="usb_use_photo_transfers_desc" msgid="2325112887316125320">"MTP (PTP) समर्थित नसल्यास फोटो किंवा फाइल स्थानांतरित करा"</string>
<string name="usb_use_tethering" msgid="4250626730173163846">"USB टेदरिंग"</string>
<string name="usb_use_MIDI" msgid="4710632870781041401">"MIDI"</string>
<string name="usb_use_MIDI_desc" msgid="1770966187150010947">"या डिव्हाइसचा MIDI म्हणून वापर करा"</string>
@@ -3786,8 +3788,8 @@
<string name="memory_maximum_usage" msgid="4734981118293469479">"कमाल वापर"</string>
<string name="no_data_usage" msgid="903383745620135746">"डेटा वापरला गेलेला नाही"</string>
<string name="zen_access_warning_dialog_title" msgid="7704910289810337055">"<xliff:g id="APP">%1$s</xliff:g> वर व्यत्यय आणू नका ला ॲक्सेस द्यायचा का?"</string>
- <string name="zen_access_warning_dialog_summary" msgid="2717755746850874577">"व्यत्यय आणू नका चालू/बंद करण्यात आणि संबंधित स्ट्रिंगमध्ये बदल करण्यात अॅप सक्षम असेल."</string>
- <string name="zen_access_disabled_package_warning" msgid="7086237569177576966">"सूचना प्रवेश चालू असल्याने चालू केलेले ठेवणे आवश्यक आहे"</string>
+ <string name="zen_access_warning_dialog_summary" msgid="2717755746850874577">"व्यत्यय आणू नका सुरू/बंद करण्यात आणि संबंधित स्ट्रिंगमध्ये बदल करण्यात अॅप सक्षम असेल."</string>
+ <string name="zen_access_disabled_package_warning" msgid="7086237569177576966">"सूचना प्रवेश सुरू असल्याने सुरू केलेले ठेवणे आवश्यक आहे"</string>
<string name="zen_access_revoke_warning_dialog_title" msgid="6850994585577513299">"<xliff:g id="APP">%1$s</xliff:g> साठी व्यत्यय आणू नका मध्ये प्रवेश करणे रद्द करायचे?"</string>
<string name="zen_access_revoke_warning_dialog_summary" msgid="3487422193181311403">"या ॲपने तयार केलेले सर्व व्यत्यय आणू नका नियम काढले जातील."</string>
<string name="ignore_optimizations_on" msgid="4373971641328943551">"ऑप्टिमाइझ करू नका"</string>
@@ -3854,7 +3856,7 @@
<item quantity="other"><xliff:g id="COUNT">%d</xliff:g> अॅप्ससाठी बंद</item>
<item quantity="one">1 अॅपसाठी बंद</item>
</plurals>
- <string name="notification_summary_none" msgid="5003043219430054784">"सर्व ॲप्ससाठी चालू"</string>
+ <string name="notification_summary_none" msgid="5003043219430054784">"सर्व ॲप्ससाठी सुरू"</string>
<string name="apps_summary" msgid="8355759446490212195">"<xliff:g id="COUNT">%1$d</xliff:g> अॅप्स इंस्टॉल केले"</string>
<string name="apps_summary_example" msgid="3011143598675185269">"24 अॅप्स इंस्टॉल केली"</string>
<string name="storage_summary" msgid="4835916510511133784">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> वापरले - <xliff:g id="FREE_SPACE">%2$s</xliff:g> मोकळे"</string>
@@ -3883,16 +3885,16 @@
<string name="admin_profile_owner_user_message" msgid="2991249382056855531">"तुमचा प्रशासक सेटिंग्ज, परवानग्या, कॉर्पोरेट ॲक्सेस, नेटवर्क ॲक्टिव्हिटी आणि डीव्हाइसची स्थान माहिती यांसह तुमच्या कार्य प्रोफाइलशी संबधित ॲप्सचे आणि डेटाचे परीक्षण व व्यवस्थापन करू शकतो."</string>
<string name="admin_device_owner_message" msgid="1823477572459610869">"तुमच्या प्रशासकाकडे तुमच्या नेटवर्क ॲक्टिव्हिटी तसेच या डीव्हाइसशी संबधित सेटिंग्ज, कॉर्पोरेट ॲक्सेस, परवानग्या यांसह अॅप्स आणि डेटा यांचे परीक्षण आणि व्यवस्थापन करण्याची क्षमता आहे."</string>
<string name="condition_turn_off" msgid="4395150881365143558">"बंद करा"</string>
- <string name="condition_turn_on" msgid="1699088245481841159">"चालू करा"</string>
+ <string name="condition_turn_on" msgid="1699088245481841159">"सुरू करा"</string>
<string name="condition_expand_show" msgid="4118818022763913777">"दर्शवा"</string>
<string name="condition_expand_hide" msgid="1112721783024332643">"लपवा"</string>
<string name="condition_hotspot_title" msgid="4143299802283098506">"हॉटस्पॉट अॅक्टिव्ह आहे"</string>
- <string name="condition_airplane_title" msgid="8484582712516148433">"विमान मोड चालू आहे"</string>
+ <string name="condition_airplane_title" msgid="8484582712516148433">"विमान मोड सुरू आहे"</string>
<string name="condition_airplane_summary" msgid="3021193218494740742">"नेटवर्क उपलब्ध नाही"</string>
- <string name="condition_zen_title" msgid="2128184708916052585">"व्यत्यय आणू नका चालू आहे"</string>
+ <string name="condition_zen_title" msgid="2128184708916052585">"व्यत्यय आणू नका सुरू आहे"</string>
<string name="condition_zen_summary_phone_muted" msgid="4396050395522974654">"फोन म्यूट केला आहे"</string>
<string name="condition_zen_summary_with_exceptions" msgid="3435216391993785818">"अपवादांसह"</string>
- <string name="condition_battery_title" msgid="6704870010912986274">"बॅटरी बचतकर्ता चालू आहे"</string>
+ <string name="condition_battery_title" msgid="6704870010912986274">"बॅटरी सेव्हर सुरू आहे"</string>
<string name="condition_battery_summary" msgid="1236078243905690620">"वैशिष्ट्ये प्रतिबंधित केलेली आहेत"</string>
<string name="condition_cellular_title" msgid="6605277435894307935">"मोबाइल डेटा बंद आहे"</string>
<string name="condition_cellular_summary" msgid="3607459310548343777">"इंटरनेट फक्त वाय-फायद्वारे उपलब्ध आहे"</string>
@@ -3907,7 +3909,7 @@
<string name="condition_device_vibrate_summary" msgid="9073880731894828604">"कॉल आणि सूचनांसाठी"</string>
<string name="night_display_suggestion_title" msgid="4222839610992282188">"रात्रीच्या प्रकाशाचे वेळापत्रक सेट करा"</string>
<string name="night_display_suggestion_summary" msgid="1754361016383576916">"दररोज रात्री स्क्रीन आपोआप टिंट करा"</string>
- <string name="condition_night_display_title" msgid="9171491784857160135">"रात्रीचा प्रकाश चालू आहे"</string>
+ <string name="condition_night_display_title" msgid="9171491784857160135">"रात्रीचा प्रकाश सुरू आहे"</string>
<string name="condition_night_display_summary" msgid="7885776986937527558">"स्क्रीनची छटा मंद पिवळसर केली आहे"</string>
<string name="condition_grayscale_title" msgid="1226351649203551299">"ग्रेस्केल"</string>
<string name="condition_grayscale_summary" msgid="749172886527349546">"फक्त ग्रे रंगात दाखवा"</string>
@@ -3960,14 +3962,14 @@
<string name="set_data_limit" msgid="5043770023229990674">"डेटा मर्यादा सेट करा"</string>
<string name="data_limit" msgid="5793521160051596228">"डेटा मर्यादा"</string>
<string name="data_usage_template" msgid="6848274347956096882">"<xliff:g id="ID_1">%1$s</xliff:g> दरम्यान <xliff:g id="ID_2">%2$s</xliff:g> वापरले"</string>
- <string name="configure" msgid="8232696842838580549">"कॉन्फिगर करा"</string>
+ <string name="configure" msgid="8232696842838580549">"कॉंफिगर करा"</string>
<string name="data_usage_other_apps" msgid="7002491980141402084">"वापरामध्ये समाविष्ट केलेली इतर अॅप्स"</string>
<plurals name="data_saver_unrestricted_summary" formatted="false" msgid="6046013861315713697">
- <item quantity="other">डेटा सेव्हर चालू असताना <xliff:g id="COUNT">%1$d</xliff:g> अनुप्रयोगांना अनिर्बंध डेटा वापरण्याची अनुमती दिली</item>
- <item quantity="one"> डेटा सेव्हर चालू असताना 1 अनुप्रयोगास अनिर्बंध डेटा वापरण्याची अनुमती दिली</item>
+ <item quantity="other">डेटा सेव्हर सुरू असताना <xliff:g id="COUNT">%1$d</xliff:g> अॅप्सना अनिर्बंध डेटा वापरण्याची अनुमती दिली</item>
+ <item quantity="one"> डेटा सेव्हर सुरू असताना 1 अॅपला अनिर्बंध डेटा वापरण्याची अनुमती दिली</item>
</plurals>
<string name="data_usage_title" msgid="7874606430902201083">"प्राथमिक डेटा"</string>
- <string name="data_usage_wifi_title" msgid="7161828479387766556">"वाय फाय डेटा"</string>
+ <string name="data_usage_wifi_title" msgid="7161828479387766556">"वाय-फाय डेटा"</string>
<string name="data_used" msgid="1063553292806661784">"<xliff:g id="ID_1">^1</xliff:g> वापरला"</string>
<string name="data_used_formatted" msgid="9150356955895106822">"<xliff:g id="ID_1">^1</xliff:g> <xliff:g id="ID_2">^2</xliff:g> वापरला"</string>
<string name="data_overusage" msgid="1570432641791021533">"<xliff:g id="ID_1">^1</xliff:g> मर्यादा संपली"</string>
@@ -3991,7 +3993,7 @@
<string name="data_saver_off" msgid="7439439787358504018">"बंद"</string>
<string name="data_saver_switch_title" msgid="8244008132112735207">"डेटा सेव्हर वापरा"</string>
<string name="unrestricted_app_title" msgid="4390661122069905122">"अनिर्बंध डेटा वापर"</string>
- <string name="unrestricted_app_summary" msgid="2829141815077800483">"डेटा सेव्हर चालू असताना अनिर्बंध डेटा प्रवेशास अनुमती द्या"</string>
+ <string name="unrestricted_app_summary" msgid="2829141815077800483">"डेटा सेव्हर सुरू असताना अनिर्बंध डेटा प्रवेशास अनुमती द्या"</string>
<string name="home_app" msgid="3695063566006954160">"होम अॅप"</string>
<string name="no_default_home" msgid="1518949210961918497">"डीफॉल्ट होम नाही"</string>
<string name="lockpattern_settings_require_cred_before_startup" msgid="63693894094570367">"सुरक्षित प्रारंभ"</string>
@@ -4009,7 +4011,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"डिव्हाइस लॉक केले असल्यास, प्रत्युत्तरे किंवा सूचनांमध्ये इतर मजकूर टाइप करण्यास प्रतिबंधित करा"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"डीफॉल्ट शब्दलेखन तपासक"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"शब्दलेखन तपासक निवडा"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"स्पेलचेकर वापरा"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"स्पेल-चेकर वापरा"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"न निवडलेले"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(काहीही नाही)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4057,12 +4059,12 @@
<item quantity="one">1 अॅप अनिर्बंधित डेटा वापरू शकते</item>
</plurals>
<string name="special_access_more" msgid="7086690625048471400">"आणखी पहा"</string>
- <string name="confirm_convert_to_fbe_warning" msgid="4972595831034280189">"वापरकर्ता डेटा खरोखर पुसायचा आणि फाईल कूटबद्धीकरणमध्ये रूपांतरित करायचा?"</string>
+ <string name="confirm_convert_to_fbe_warning" msgid="4972595831034280189">"वापरकर्ता डेटा खरोखर पुसायचा आणि फाइल कूटबद्धीकरणमध्ये रूपांतरित करायचा?"</string>
<string name="button_confirm_convert_fbe" msgid="419832223125147297">"पुसा आणि रुपांतरित करा"</string>
<string name="reset_shortcut_manager_throttling" msgid="1912184636360233397">"ShortcutManager दर-मर्यादित करणे रीसेट करा"</string>
<string name="reset_shortcut_manager_throttling_complete" msgid="2932990541160593632">"ShortcutManager दर-मर्यादित करणे रीसेट केले गेले आहे"</string>
<string name="notification_suggestion_title" msgid="3292107671498148560">"लॉक स्क्रीनवरील माहिती नियंत्रित करा"</string>
- <string name="notification_suggestion_summary" msgid="6516827892359614597">"सूचना सामग्री दर्शवा किंवा लपवा"</string>
+ <string name="notification_suggestion_summary" msgid="6516827892359614597">"सूचना आशय दर्शवा किंवा लपवा"</string>
<string name="page_tab_title_summary" msgid="4824744863994538006">"सर्व"</string>
<string name="page_tab_title_support" msgid="5569262185010367870">"टिपा आणि सपोर्ट"</string>
<string name="developer_smallest_width" msgid="2603134476228805075">"सर्वात लहान रुंदी"</string>
@@ -4079,7 +4081,7 @@
<string name="dark_ui_settings_dark_summary" msgid="7042737828943784289">"सपोर्ट असलेली अॅप्सदेखील गडद थीमवर स्विच करतील"</string>
<string name="quick_settings_developer_tiles" msgid="7423485925757678719">"द्रुत सेटिंग्ज डेव्हलपर टाइल"</string>
<string name="winscope_trace_quick_settings_title" msgid="940971040388411374">"विनस्कोप ट्रेस"</string>
- <string name="sensors_off_quick_settings_title" msgid="3655699045300438902">"सेंसर बंद आहेत"</string>
+ <string name="sensors_off_quick_settings_title" msgid="3655699045300438902">"सेन्सर बंद आहेत"</string>
<string name="managed_profile_settings_title" msgid="4340409321523532402">"कार्य प्रोफाइल सेटिंग्ज"</string>
<string name="managed_profile_contact_search_title" msgid="7337225196804457095">"संपर्क शोध"</string>
<string name="managed_profile_contact_search_summary" msgid="7278267480246726951">"कॉलर आणि संपर्कांना ओळखण्यासाठी आपल्या संस्थेनुसार संपर्क शोधांची अनुमती द्या"</string>
@@ -4102,7 +4104,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"स्टोरेज स्थान मोकळे करण्यात मदत करण्यासाठी, स्टोरेज व्यवस्थापक तुमच्या डिव्हाइस वरून बॅक अप घेतलेले फोटो आणि व्हिडिओ काढतो."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"फोटो आणि व्हिडिओ काढा"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"स्टोरेज व्यवस्थापक"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"स्टोरेज व्यवस्थापक वापरा"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"स्टोरेज व्यवस्थापक वापरा"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"स्वयंचलित"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"व्यक्तिचलित"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"आता स्थान मोकळे करा"</string>
@@ -4140,7 +4142,7 @@
<string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"तुमच्या सूचना तपासण्यासाठी, तुमच्या टॅबलेटच्या मागे फिंगरप्रिंट सेन्सरवर खाली स्वाइप करा."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="7950264130913070035">"आपल्या सूचना तपासण्यासाठी, आपल्या डिव्हाइसच्या मागे फिंगरप्रिंट सेन्सरवर खाली स्वाइप करा."</string>
<string name="fingerprint_swipe_for_notifications_suggestion_title" msgid="948946491233738823">"सूचना पटकन पहा"</string>
- <string name="gesture_setting_on" msgid="7573680730101327866">"चालू"</string>
+ <string name="gesture_setting_on" msgid="7573680730101327866">"सुरू"</string>
<string name="gesture_setting_off" msgid="2540159841716890511">"बंद"</string>
<string name="oem_unlock_enable_disabled_summary_bootloader_unlocked" msgid="7233244080078311793">"बुटलोडर आधीपासून अनलॉक केले"</string>
<string name="oem_unlock_enable_disabled_summary_connectivity" msgid="262986780389836168">"अगोदर इंटरनेटशी कनेक्ट करा"</string>
@@ -4155,7 +4157,7 @@
<string name="domain_url_section_title" msgid="206403507921518321">"इंस्टॉल केलेली अॅप्स"</string>
<string name="automatic_storage_manager_activation_warning" msgid="2630083316417707308">"तुमचा स्टोरेज आता स्टोरेज व्यवस्थापक व्यवस्थापित करत आहे"</string>
<string name="account_for_section_header" msgid="5975241715840642563">"<xliff:g id="USER_NAME">%1$s</xliff:g> साठी खाती"</string>
- <string name="configure_section_header" msgid="6988981883075615136">"कॉन्फिगर करा"</string>
+ <string name="configure_section_header" msgid="6988981883075615136">"कॉंफिगर करा"</string>
<string name="auto_sync_account_title" msgid="2394463123733529506">"डेटा आपोआप सिंक करा"</string>
<string name="auto_sync_personal_account_title" msgid="6844465157916100655">"वैयक्तिक डेटा स्वयंचलितपणे संकालित करा"</string>
<string name="auto_sync_work_account_title" msgid="2403222633447522376">"कार्य डेटा स्वयंचलितपणे संकालित करा"</string>
@@ -4194,9 +4196,9 @@
</plurals>
<string name="enterprise_privacy_input_method" msgid="5885916325874284011">"डीफॉल्ट कीबोर्ड"</string>
<string name="enterprise_privacy_input_method_name" msgid="439610095825218563">"<xliff:g id="APP_LABEL">%s</xliff:g> वर सेट करा"</string>
- <string name="enterprise_privacy_always_on_vpn_device" msgid="2022700916516458213">"नेहमी VPN चालू असणे सक्रिय आहे"</string>
- <string name="enterprise_privacy_always_on_vpn_personal" msgid="5644065780843002044">"आपल्या वैयक्तिक प्रोफाइलमध्ये नेहमी VPN चालू असणे सक्रिय आहे"</string>
- <string name="enterprise_privacy_always_on_vpn_work" msgid="6443089897985373564">"आपल्या कार्य प्रोफाइलमध्ये नेहमी VPN चालू असणे सक्रिय आहे"</string>
+ <string name="enterprise_privacy_always_on_vpn_device" msgid="2022700916516458213">"नेहमी VPN सुरू असणे सक्रिय आहे"</string>
+ <string name="enterprise_privacy_always_on_vpn_personal" msgid="5644065780843002044">"आपल्या वैयक्तिक प्रोफाइलमध्ये नेहमी VPN सुरू असणे सक्रिय आहे"</string>
+ <string name="enterprise_privacy_always_on_vpn_work" msgid="6443089897985373564">"आपल्या कार्य प्रोफाइलमध्ये नेहमी VPN सुरू असणे सक्रिय आहे"</string>
<string name="enterprise_privacy_global_http_proxy" msgid="3862135895716080830">"जागतिक HTTP प्रॉक्सी सेट आहे"</string>
<string name="enterprise_privacy_ca_certs_device" msgid="7715658848470643878">"विश्वसनीय क्रेडेंशिअल"</string>
<string name="enterprise_privacy_ca_certs_personal" msgid="1356447417193483802">"तुमच्या खाजगी प्रोफाइलमधील विश्वसनीय क्रेडेंशिअल"</string>
@@ -4238,7 +4240,7 @@
<string name="storage_music_audio" msgid="3661289086715297149">"संगीत आणि ऑडिओ"</string>
<string name="storage_games" msgid="7740038143749092373">"गेम"</string>
<string name="storage_other_apps" msgid="3202407095387420842">"अन्य अॅप्स"</string>
- <string name="storage_files" msgid="2087824267937487880">"फायली"</string>
+ <string name="storage_files" msgid="2087824267937487880">"Files"</string>
<string name="storage_size_large_alternate" msgid="1317796542509105857">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" "<font size="20">"<xliff:g id="UNIT">^2</xliff:g>"</font></small>""</string>
<string name="storage_volume_total" msgid="5021484171514159913">"<xliff:g id="TOTAL">%1$s</xliff:g> पैकी वापरले"</string>
<string name="storage_percent_full" msgid="6924662861545958442">"वापरली"</string>
@@ -4246,7 +4248,7 @@
<string name="clear_instant_app_confirmation" msgid="1778553115373698061">"तुम्हाला हे इन्स्टंट अॅप काढायचे आहे का?"</string>
<string name="launch_instant_app" msgid="5251693061228352333">"उघडा"</string>
<string name="game_storage_settings" msgid="6856911551799175914">"गेम"</string>
- <string name="audio_files_title" msgid="3073879661731363935">"ऑडिओ फायली"</string>
+ <string name="audio_files_title" msgid="3073879661731363935">"ऑडिओ फाइल"</string>
<string name="app_info_storage_title" msgid="6643391804949509308">"वापरलेली जागा"</string>
<string name="webview_uninstalled_for_user" msgid="3407952144444040557">"(<xliff:g id="USER">%s</xliff:g> वापरकर्त्यासाठी विस्थापित)"</string>
<string name="webview_disabled_for_user" msgid="8057805373224993504">"(<xliff:g id="USER">%s</xliff:g> वापरकर्त्यासाठी अक्षम केले)"</string>
@@ -4265,7 +4267,7 @@
<string name="show_operator_name_summary" msgid="6352180285743777497">"स्टेटस बारमध्ये नेटवर्क नाव प्रदर्शित करा"</string>
<string name="storage_manager_indicator" msgid="4255140732848476875">"स्टोरेज व्यवस्थापक: <xliff:g id="STATUS">^1</xliff:g>"</string>
<string name="storage_manager_indicator_off" msgid="6404056007102580777">"बंद"</string>
- <string name="storage_manager_indicator_on" msgid="5295306384982062320">"चालू"</string>
+ <string name="storage_manager_indicator_on" msgid="5295306384982062320">"सुरू"</string>
<string name="install_type_instant" msgid="6248487669862821874">"इन्सटंट अॅप"</string>
<string name="automatic_storage_manager_deactivation_warning" msgid="7867793739491286374">"स्टोरेज व्यवस्थापक बंद करायचा?"</string>
<string name="storage_movies_tv" msgid="7282484273991655296">"चित्रपट आणि टीव्ही अॅप्स"</string>
@@ -4308,8 +4310,8 @@
<string name="my_device_info_device_name_preference_title" msgid="7384446683248009296">"डिव्हाइसचे नाव"</string>
<string name="change_wifi_state_title" msgid="5140754955787584174">"वाय-फाय नियंत्रण"</string>
<string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"ॲपला वाय-फाय नियंत्रित करू द्या"</string>
- <string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"या ॲपला वाय-फाय चालू किंवा बंद करू द्या, वाय-फाय नेटवर्क स्कॅन करू द्या आणि त्याच्याशी कनेक्ट करू द्या, नेटवर्क जोडू किंवा काढू द्या किंवा केवळ-स्थानिक हॉटस्पॉट सुरू करू द्या"</string>
- <string name="media_output_title" msgid="8710632337456601848">"मीडिया प्ले करा"</string>
+ <string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"या ॲपला वाय-फाय सुरू किंवा बंद करू द्या, वाय-फाय नेटवर्क स्कॅन करू द्या आणि त्याच्याशी कनेक्ट करू द्या, नेटवर्क जोडू किंवा काढू द्या किंवा केवळ-स्थानिक हॉटस्पॉट सुरू करू द्या"</string>
+ <string name="media_output_title" msgid="8710632337456601848">"मीडिया यावर प्ले करा"</string>
<string name="media_output_default_summary" msgid="3159237976830415584">"हे डिव्हाइस"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"फोन"</string>
<string name="media_output_summary" product="tablet" msgid="6672024060360538526">"टॅबलेट"</string>
@@ -4473,7 +4475,7 @@
<string name="privacy_dashboard_summary" msgid="7916431309860824945">"परवानग्या, खाते अॅक्टिव्हिटी, वैयक्तिक डेटा"</string>
<string name="contextual_card_dismiss_remove" msgid="1750420285615827309">"काढून टाका"</string>
<string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"ठेवा"</string>
- <string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"ही सुचाना काढून टाकायची आहे का?"</string>
+ <string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"ही सूचना काढून टाकायची आहे का?"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"सूचना काढली"</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"पहिल्यासारखे करा"</string>
<string name="low_storage_summary" msgid="4562224870189133400">"स्टोरेज कमी आहे. <xliff:g id="PERCENTAGE">%1$s</xliff:g> वापरले - <xliff:g id="FREE_SPACE">%2$s</xliff:g> मोकळे"</string>
@@ -4496,10 +4498,10 @@
<string name="manage_app_notification" msgid="9072118910762792295">"<xliff:g id="APP_NAME">%1$s</xliff:g> सूचना व्यवस्थापित करा"</string>
<string name="no_suggested_app" msgid="509257628685025383">"सुचवलेले अॅप्लिकेशन नाही"</string>
<plurals name="notification_few_channel_count_summary" formatted="false" msgid="5165639207390218085">
- <item quantity="other"><xliff:g id="NOTIFICATION_CHANNEL_COUNT_1">%1$d</xliff:g> सूचना चॅनेल.</item>
- <item quantity="one"><xliff:g id="NOTIFICATION_CHANNEL_COUNT_0">%1$d</xliff:g> सूचना चॅनेल.</item>
+ <item quantity="other"><xliff:g id="NOTIFICATION_CHANNEL_COUNT_1">%1$d</xliff:g> सूचना चॅनल.</item>
+ <item quantity="one"><xliff:g id="NOTIFICATION_CHANNEL_COUNT_0">%1$d</xliff:g> सूचना चॅनल.</item>
</plurals>
- <string name="notification_many_channel_count_summary" msgid="9205641731142529086">"<xliff:g id="NOTIFICATION_CHANNEL_COUNT">%1$d</xliff:g> सूचना चॅनेल. सर्व व्यवस्थापित करण्यासाठी टॅप करा."</string>
+ <string name="notification_many_channel_count_summary" msgid="9205641731142529086">"<xliff:g id="NOTIFICATION_CHANNEL_COUNT">%1$d</xliff:g> सूचना चॅनल. सर्व व्यवस्थापित करण्यासाठी टॅप करा."</string>
<string name="recently_installed_app" msgid="6491959945747808096">"तुम्ही हे अॅप नुकतेच इंस्टॉल केले."</string>
<string name="media_output_panel_title" msgid="8429272102437211530">"आउटपुट स्विच करा"</string>
<string name="media_output_panel_summary_of_playing_device" msgid="7425231720911606911">"सध्या <xliff:g id="DEVICE_NAME">%1$s</xliff:g> वर प्ले करत आहे"</string>
diff --git a/tests/CarDeveloperOptions/res/values-ms/arrays.xml b/tests/CarDeveloperOptions/res/values-ms/arrays.xml
index e7eead6..bc4c748 100644
--- a/tests/CarDeveloperOptions/res/values-ms/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-ms/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"jalankan di latar belakang"</item>
<item msgid="6423861043647911030">"kelantangan kebolehaksesan"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Lokasi"</item>
+ <item msgid="6656077694190491067">"Lokasi"</item>
+ <item msgid="8790228218278477369">"Lokasi"</item>
+ <item msgid="7836406246005211990">"Getar"</item>
+ <item msgid="3951439024549922598">"Baca kenalan"</item>
+ <item msgid="8802152411647068">"Ubah suai kenalan"</item>
+ <item msgid="229544934599698735">"Baca log panggilan"</item>
+ <item msgid="7396102294405899613">"Ubah suai log panggilan"</item>
+ <item msgid="3597797992398484655">"Baca kalendar"</item>
+ <item msgid="2705975774250907343">"Ubah suai kalendar"</item>
+ <item msgid="4668747371441932697">"Lokasi"</item>
+ <item msgid="1487578921720243646">"Siarkan pemberitahuan"</item>
+ <item msgid="4636080349724146638">"Lokasi"</item>
+ <item msgid="673510900286463926">"Hubungi telefon"</item>
+ <item msgid="542083422784609790">"Baca SMS/MMS"</item>
+ <item msgid="1033780373029588436">"Tulis SMS/MMS"</item>
+ <item msgid="5647111115517787488">"Terima SMS/MMS"</item>
+ <item msgid="8591105601108455893">"Terima SMS/MMS"</item>
+ <item msgid="7730995008517841903">"Terima SMS/MMS"</item>
+ <item msgid="2613033109026626086">"Terima SMS/MMS"</item>
+ <item msgid="3037159047591081136">"Hantar SMS/MMS"</item>
+ <item msgid="4726682243833913568">"Baca SMS/MMS"</item>
+ <item msgid="6555678522277865572">"Tulis SMS/MMS"</item>
+ <item msgid="6981734935578130884">"Ubah suai tetapan"</item>
+ <item msgid="8705854389991425629">"Lukiskan di atas"</item>
+ <item msgid="5861356020344153651">"Pemberitahuan akses"</item>
+ <item msgid="78432174621628659">"Kamera"</item>
+ <item msgid="3986116419882154794">"Rakam audio"</item>
+ <item msgid="4516840825756409490">"Mainkan audio"</item>
+ <item msgid="6811712502798183957">"Baca papan keratan"</item>
+ <item msgid="2780369012602289114">"Ubah suai papan keratan"</item>
+ <item msgid="2331359440170850868">"Butang media"</item>
+ <item msgid="6133599737122751231">"Tumpuan audio"</item>
+ <item msgid="6844485713404805301">"Kelantangan utama"</item>
+ <item msgid="1600379420669104929">"Kelantangan suara"</item>
+ <item msgid="6296768210470214866">"Kelantangan deringan"</item>
+ <item msgid="510690696071629241">"Kelantangan media"</item>
+ <item msgid="406861638631430109">"Kelantangan penggera"</item>
+ <item msgid="4715864795872233884">"Kelantangan pemberitahuan"</item>
+ <item msgid="2311478519251301183">"Kelantangan Bluetooth"</item>
+ <item msgid="5133991377896747027">"Kekal berjaga"</item>
+ <item msgid="2464189519136248621">"Lokasi"</item>
+ <item msgid="2062677934050803037">"Lokasi"</item>
+ <item msgid="1735171933192715957">"Dapatkan statistik penggunaan"</item>
+ <item msgid="1014093788778383554">"Redam/nyahredam mikrofon"</item>
+ <item msgid="4199297950608622850">"Tunjukkan toast"</item>
+ <item msgid="2527962435313398821">"Tayangkan media"</item>
+ <item msgid="5117506254221861929">"Aktifkan VPN"</item>
+ <item msgid="8291198322681891160">"Tulis kertas dinding"</item>
+ <item msgid="7106921284621230961">"Bantu struktur"</item>
+ <item msgid="4496533640894624799">"Bantu tangkapan skrin"</item>
+ <item msgid="2598847264853993611">"Baca keadaan telefon"</item>
+ <item msgid="9215610846802973353">"Tambahkan mel suara"</item>
+ <item msgid="9186411956086478261">"Gunakan sip"</item>
+ <item msgid="6884763100104539558">"Proses panggilan keluar"</item>
+ <item msgid="125513972170580692">"Cap jari"</item>
+ <item msgid="2556071024281275619">"Penderia badan"</item>
+ <item msgid="617168514928339387">"Baca siaran sel"</item>
+ <item msgid="7134693570516523585">"Lokasi palsu"</item>
+ <item msgid="7224489175375229399">"Baca storan"</item>
+ <item msgid="8472735063903258202">"Tulis storan"</item>
+ <item msgid="4069276819909595110">"Hidupkan skrin"</item>
+ <item msgid="1228338896751121025">"Dapatkan akaun"</item>
+ <item msgid="3181581793459233672">"Jalankan di latar belakang"</item>
+ <item msgid="2340936043025374076">"Kelantangan kebolehaksesan"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Pendek"</item>
<item msgid="4816511817309094890">"Sederhana"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Jangan benarkan"</item>
<item msgid="8184570120217958741">"Sentiasa benarkan"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Biasa"</item>
+ <item msgid="5101233285497327432">"Sederhana"</item>
+ <item msgid="1555861583162930714">"Rendah"</item>
+ <item msgid="1719683776264798117">"Kritikal"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Biasa"</item>
+ <item msgid="6107138933849816768">"Sederhana"</item>
+ <item msgid="182695359839047859">"Rendah"</item>
+ <item msgid="8577246509202964244">"Kritikal"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Berterusan"</item>
<item msgid="167418068739176448">"Aktiviti popular"</item>
diff --git a/tests/CarDeveloperOptions/res/values-ms/strings.xml b/tests/CarDeveloperOptions/res/values-ms/strings.xml
index bf141c2..09cb70b 100644
--- a/tests/CarDeveloperOptions/res/values-ms/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-ms/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Kecilkan atau besarkan teks pada skrin."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Kecilkan"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Besarkan"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Teks contoh"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Ahli Sihir Oz yang Menakjubkan"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Bab 11: Oz, Kota Zamrud yang Menakjubkan"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Maklumat profil"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Akaun"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Lokasi"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Gunakan lokasi"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Gunakan lokasi"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Mati"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Hidup - <xliff:g id="COUNT_1">%1$d</xliff:g> apl boleh mengakses lokasi</item>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Hidupkan Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Gunakan Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Gunakan Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Tetapan Wi‑Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Sediakan & urus titik capaian wayarles"</string>
@@ -850,7 +849,7 @@
<string name="wifi_notify_open_networks" msgid="4782239203624619655">"Pemberitahuan rangkaian terbuka"</string>
<string name="wifi_notify_open_networks_summary" msgid="1383681260705466715">"Beritahu apabila rangkaian awam berkualiti tinggi tersedia"</string>
<string name="wifi_wakeup" msgid="4963732992164721548">"Hidupkan Wi-Fi secara automatik"</string>
- <string name="wifi_wakeup_summary" msgid="1152699417411690">"Wi-Fi akan dihidupkan kembali berdekatan dengan rangkaian disimpan yang berkualiti tinggi, seperti rangkaian rumah"</string>
+ <string name="wifi_wakeup_summary" msgid="1152699417411690">"Wi-Fi akan dihidupkan kembali apabila berdekatan dengan rangkaian disimpan yang berkualiti tinggi, seperti rangkaian rumah"</string>
<string name="wifi_wakeup_summary_no_location" msgid="3007457288587966962">"Tidak tersedia kerana lokasi dimatikan. Hidupkan "<annotation id="link">"lokasi"</annotation>"."</string>
<string name="wifi_wakeup_summary_scanning_disabled" msgid="6820040651529910914">"Tidak tersedia kerana pengimbasan Wi-Fi dimatikan"</string>
<string name="wifi_wakeup_summary_scoring_disabled" msgid="7067018832237903151">"Untuk menggunakan ciri, pilih pembekal penilaian rangkaian"</string>
@@ -881,7 +880,7 @@
<string name="wifi_configure_settings_preference_summary_wakeup_off" msgid="286904094152909651">"Wi-Fi tidak dihidupkan kembali secara automatik"</string>
<string name="wifi_access_points" msgid="1647976498906871869">"Rangkaian Wi-Fi"</string>
<string name="wifi_menu_more_options" msgid="8318269834264035524">"Lagi pilihan"</string>
- <string name="wifi_menu_p2p" msgid="4945665601551289791">"Wi-Fi Langsung"</string>
+ <string name="wifi_menu_p2p" msgid="4945665601551289791">"Wi-Fi Direct"</string>
<string name="wifi_menu_scan" msgid="9082691677803181629">"Imbas"</string>
<string name="wifi_menu_advanced" msgid="5984484498045511072">"Terperinci"</string>
<string name="wifi_menu_configure" msgid="52192491120701266">"Konfigurasikan"</string>
@@ -928,7 +927,7 @@
<string name="wifi_ap_choose_auto" msgid="7927637960569365785">"Automatik"</string>
<string name="wifi_ap_choose_2G" msgid="43198403259714736">"Jalur 2.4 GHz"</string>
<string name="wifi_ap_choose_5G" msgid="2624859713183683146">"Jalur 5.0 GHz"</string>
- <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"Lajur 5.0 GHz diutamakan"</string>
+ <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"Jalur 5.0 GHz diutamakan"</string>
<string name="wifi_ap_2G" msgid="5793110086517338494">"2.4 GHz"</string>
<string name="wifi_ap_5G" msgid="4584892544393675403">"5.0 GHz"</string>
<string name="wifi_ap_band_select_one" msgid="4409754936554360355">"Pilih sekurang-kurangnya satu jalur untuk tempat liputan Wi-Fi:"</string>
@@ -1041,7 +1040,7 @@
<string name="wifi_dns2" msgid="1905876166783761641">"DNS 2"</string>
<string name="wifi_gateway" msgid="7455334454444443397">"Get laluan"</string>
<string name="wifi_network_prefix_length" msgid="1941206966133010633">"Panjang awalan rangkaian"</string>
- <string name="wifi_p2p_settings_title" msgid="3213180637906683308">"Wi-Fi Langsung"</string>
+ <string name="wifi_p2p_settings_title" msgid="3213180637906683308">"Wi-Fi Direct"</string>
<string name="wifi_p2p_device_info" msgid="4717490498956029237">"Maklumat peranti"</string>
<string name="wifi_p2p_persist_network" msgid="1110453878886476660">"Ingat sambungan ini"</string>
<string name="wifi_p2p_menu_search" msgid="8207638860263805291">"Mencari peranti"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Mudah alih"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Jika Wi-Fi tidak tersedia, gunakan rangkaian mudah alih"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Jika rangkaian mudah alih tidak tersedia, gunakan Wi-Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Panggil melalui Wi‑Fi. Jika Wi-Fi terputus, panggilan akan ditamatkan."</string>
@@ -2047,7 +2049,7 @@
<string name="feature_flags_dashboard_title" msgid="3153034144122754381">"Bendera ciri"</string>
<string name="talkback_title" msgid="3717960404234260050">"Talkback"</string>
<string name="talkback_summary" msgid="6602857105831641574">"Pembaca skrin terutamanya untuk orang yang buta dan rabun"</string>
- <string name="select_to_speak_summary" msgid="7514180457557735421">"Ketik item pada skrn anda untuk mendengar item itu dibaca"</string>
+ <string name="select_to_speak_summary" msgid="7514180457557735421">"Ketik item pada skrin anda untuk mendengar item itu dibaca"</string>
<string name="accessibility_captioning_title" msgid="5878371993023439642">"Kapsyen"</string>
<string name="accessibility_screen_magnification_title" msgid="7250949681883917360">"Pembesaran"</string>
<string name="accessibility_screen_magnification_gestures_title" msgid="9199287875401817974">"Besarkan dengan tiga ketikan"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Getaran pemberitahuan"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Getaran deringan"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Getaran sentuhan"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Gunakan perkhidmatan"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Gunakan pembetulan warna"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Gunakan kapsyen"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Gunakan perkhidmatan"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Gunakan pembetulan warna"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Gunakan kapsyen"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Teruskan"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Alat bantu pendengaran"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Tiada alat bantu pendengaran disambungkan"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Hidupkan"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Gunakan Penjimat Bateri"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Gunakan Penjimat Bateri"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Hidupkan secara automatik"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Tidak sekali-kali"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"pada <xliff:g id="PERCENT">%1$s</xliff:g> bateri"</string>
@@ -3160,7 +3162,7 @@
<string name="emergency_tone_vibrate" msgid="5020068066905681181">"Getaran"</string>
<string name="boot_sounds_title" msgid="7583926202411353620">"Bunyi semasa kuasa dihidupkan"</string>
<string name="live_caption_title" msgid="7926591158657997051">"Sari Kata Langsung"</string>
- <string name="live_caption_summary" msgid="9064771862352393125">"Kapsyen media automatik"</string>
+ <string name="live_caption_summary" msgid="9064771862352393125">"Sari kata media automatik"</string>
<string name="zen_mode_settings_summary_off" msgid="6929319200478424962">"Jangan sekali-kali"</string>
<plurals name="zen_mode_settings_summary_on" formatted="false" msgid="6061723291126091396">
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> didayakan</item>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Jika peranti dikunci, halang penaipan balasan atau teks lain dalam pemberitahuan"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Penyemak ejaan lalai"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Pilih penyemak ejaan"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Gunakan penyemak ejaan"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Gunakan penyemak ejaan"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Tidak dipilih"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(tiada)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Untuk membantu mengosongkan ruang storan, pengurus storan akan mengalih keluar foto dan video sandaran daripada peranti anda."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Alih keluar foto & video"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Pengurus storan"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Gunakan pengurus Storan"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Gunakan pengurus Storan"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatik"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manual"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Kosongkan ruang sekarang"</string>
@@ -4472,7 +4474,7 @@
<string name="privacy_dashboard_summary" msgid="7916431309860824945">"Kebenaran, aktiviti akaun, data peribadi"</string>
<string name="contextual_card_dismiss_remove" msgid="1750420285615827309">"Alih keluar"</string>
<string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"Simpan"</string>
- <string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"Alih keluarkan cadangan ini?"</string>
+ <string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"Alih keluar cadangan ini?"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"Cadangan dialih keluar"</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"Buat asal"</string>
<string name="low_storage_summary" msgid="4562224870189133400">"Storan tinggal sedikit. <xliff:g id="PERCENTAGE">%1$s</xliff:g> digunakan - <xliff:g id="FREE_SPACE">%2$s</xliff:g> kosong"</string>
diff --git a/tests/CarDeveloperOptions/res/values-my/arrays.xml b/tests/CarDeveloperOptions/res/values-my/arrays.xml
index c87c35c..9fbddfa 100644
--- a/tests/CarDeveloperOptions/res/values-my/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-my/arrays.xml
@@ -29,8 +29,25 @@
<item msgid="5194868215515664953">"ပစိဖိတ်"</item>
<item msgid="7044520255415007865">"အားလုံး"</item>
</string-array>
- <!-- no translation found for screen_timeout_entries:0 (8596143519087753804) -->
- <!-- no translation found for dream_timeout_entries:7 (8271452751594598661) -->
+ <string-array name="screen_timeout_entries">
+ <item msgid="8596143519087753804">"၁၅ စက္ကန့်"</item>
+ <item msgid="772029947136115322">"စက္ကန့် ၃၀"</item>
+ <item msgid="8743663928349474087">"၁ မိနစ်"</item>
+ <item msgid="1506508631223164814">"၂ မိနစ်"</item>
+ <item msgid="8664703938127907662">"၅ မိနစ်"</item>
+ <item msgid="5827960506924849753">"၁၀ မိနစ်"</item>
+ <item msgid="6677424950124253938">"၃၀ မိနစ်"</item>
+ </string-array>
+ <string-array name="dream_timeout_entries">
+ <item msgid="6487043225269853023">"ဘယ်တော့မှ"</item>
+ <item msgid="2517785806387977252">"၁၅ စက္ကန့်"</item>
+ <item msgid="6347954399441173672">"စက္ကန့် ၃၀"</item>
+ <item msgid="4858305253279921789">"၁ မိနစ်"</item>
+ <item msgid="8109273437140044073">"၂ မိနစ်"</item>
+ <item msgid="2788593551142462622">"၅ မိနစ်"</item>
+ <item msgid="8012672183888404961">"၁၀ မိနစ်"</item>
+ <item msgid="8271452751594598661">"မိနစ် ၃၀"</item>
+ </string-array>
<string-array name="lock_after_timeout_entries">
<item msgid="2232921187970351881">"ချက်ချင်း"</item>
<item msgid="2038544972632026612">"၅ စက္ကန့်"</item>
@@ -42,17 +59,47 @@
<item msgid="811192536981678974">"၁၀ မိနစ်"</item>
<item msgid="7258394417241706272">"၃၀ မိနစ်"</item>
</string-array>
- <!-- no translation found for entries_font_size:0 (2340391964816059553) -->
- <!-- no translation found for entries_font_size:0 (6490061470416867723) -->
- <!-- no translation found for entries_font_size:2 (1714184661981538355) -->
- <!-- no translation found for entries_font_size:2 (1678068858001018666) -->
- <!-- no translation found for wifi_status:3 (5848277343965362748) -->
- <!-- no translation found for wifi_status_with_ssid:1 (6816207058895999545) -->
- <!-- no translation found for wifi_status_with_ssid:3 (7547609081339573756) -->
- <!-- no translation found for wifi_status_with_ssid:4 (5145158315060185414) -->
+ <string-array name="entries_font_size">
+ <item msgid="2340391964816059553">"သေး"</item>
+ <item msgid="591935967183159581">"မူရင်း"</item>
+ <item msgid="1714184661981538355">"ကြီး"</item>
+ <item msgid="6195563047686707484">"အကြီးဆုံး"</item>
+ </string-array>
+ <string-array name="wifi_status">
+ <item msgid="1304883790721412351"></item>
+ <item msgid="4157625910392775808">"စကင်ပြုလုပ်နေပြီ"</item>
+ <item msgid="5597394826455877834">"ချိတ်ဆက်နေသည်"</item>
+ <item msgid="5848277343965362748">"အထောက်အထားစိစစ်နေသည်…"</item>
+ <item msgid="3391238031431440676">"အိုင်ပီလိပ်စာရယူနေသည်"</item>
+ <item msgid="5257597310494000224">"ချိတ်ဆက်ထားသည်"</item>
+ <item msgid="8472497592913050396">"ဆိုင်းငံ့ထားသည်"</item>
+ <item msgid="1228072488815999109">"အဆက်အသွယ်ဖြတ်တောက်သည်"</item>
+ <item msgid="7253087004422991731">"ချိတ်ဆက်မှုပြတ်တောက်သည်"</item>
+ <item msgid="4169850917304751227">"မအောင်မြင်ပါ"</item>
+ <item msgid="6266658166690831131">"ပိတ်ဆို့ထား"</item>
+ <item msgid="4517230805854909775">"နှေးကွေးသောဆက်သွယ်မှုကို ယာယီရှောင်ရှားထားသည်"</item>
+ </string-array>
+ <string-array name="wifi_status_with_ssid">
+ <item msgid="4853670665485437464"></item>
+ <item msgid="6816207058895999545">"ရှာဖွေနေသည်…"</item>
+ <item msgid="8058143476674427024">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> နှင့် ဆက်သွယ်နေပါသည်"</item>
+ <item msgid="7547609081339573756">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> ဖြင့် အထောက်အထားစိစစ်နေသည်…"</item>
+ <item msgid="5145158315060185414">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> မှ အိုင်ပီလိပ်စာကို ရယူနေသည်…"</item>
+ <item msgid="3283243151651124831">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> နှင့် ဆက်သွယ်ထားပြီး"</item>
+ <item msgid="6600156231416890902">"ဆိုင်းငံ့ထားသည်"</item>
+ <item msgid="4133290864821295785">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>မှ ဆက်သွယ်မှုဖြတ်တောက်သွားသည်"</item>
+ <item msgid="3980154971187953257">"ချိတ်ဆက်မှုပြတ်တောက်သည်"</item>
+ <item msgid="2847316776634969068">"မအောင်မြင်ပါ"</item>
+ <item msgid="4390990424746035383">"ပိတ်ဆို့ထား"</item>
+ <item msgid="3618248791367063949">"နှေးကွေးသောဆက်သွယ်မှုကို ယာယီရှောင်ရှားထားသည်"</item>
+ </string-array>
<!-- no translation found for wifi_tether_security:0 (5586343370515598801) -->
<!-- no translation found for wifi_tether_security:1 (6136336549994615745) -->
- <!-- no translation found for wifi_p2p_wps_setup:0 (5390235347963255303) -->
+ <string-array name="wifi_p2p_wps_setup">
+ <item msgid="5390235347963255303">"နှိပ်ရန်ခလုတ်"</item>
+ <item msgid="7401896200768713930">"တန်းတူစက်ပစ္စည်းမှပင်နံပါတ်"</item>
+ <item msgid="4526848028011846710">"ဤစက်မှပင်နံပါတ်"</item>
+ </string-array>
<string-array name="wifi_p2p_status">
<item msgid="8741947238021758201">"ချိတ်ဆက်ထားသည်"</item>
<item msgid="983792611851499732">"ဖိတ်ခေါ်ထားပြီး"</item>
@@ -60,7 +107,12 @@
<item msgid="4646663015449312554">"အသုံးပြုနိုင်သည်"</item>
<item msgid="3230556734162006146">"စက်ကွင်းပြင်ပ"</item>
</string-array>
- <!-- no translation found for bluetooth_visibility_timeout_entries:1 (2759776603549270587) -->
+ <string-array name="bluetooth_visibility_timeout_entries">
+ <item msgid="8247986727324120082">"၂ မိနစ်"</item>
+ <item msgid="2759776603549270587">"၅ မိနစ်"</item>
+ <item msgid="167772676068860015">"၁ နာရီ"</item>
+ <item msgid="5985477119043628504">"ဘယ်တော့မှ ပိတ်မပစ်ရန်"</item>
+ </string-array>
<string-array name="bluetooth_max_connected_audio_devices">
<item msgid="3800257971619063588">"စနစ်မူရင်းကို အသုံးပြုရန်− <xliff:g id="DEFAULT_BLUETOOTH_MAX_CONNECTED_AUDIO_DEVICES">%1$d</xliff:g>"</item>
<item msgid="8572230405241423895">"၁"</item>
@@ -69,8 +121,13 @@
<item msgid="1644506614010085798">"၄"</item>
<item msgid="3132506679404897150">"၅"</item>
</string-array>
- <!-- no translation found for wifi_signal:1 (7882129634982603782) -->
- <!-- no translation found for wifi_signal:4 (999948812884919584) -->
+ <string-array name="wifi_signal">
+ <item msgid="1709949377823900951">"ညံ့သည်"</item>
+ <item msgid="7882129634982603782">"ညံ့သည်"</item>
+ <item msgid="6457357501905996224">"အတန်အသင့်"</item>
+ <item msgid="405271628162918841">"ကောင်းသည်"</item>
+ <item msgid="999948812884919584">"အလွန်ကောင်းသည်"</item>
+ </string-array>
<string-array name="data_usage_data_range">
<item msgid="8986775481492954015">"နောက်ဆုံး ရက် ၃၀"</item>
<item msgid="3211287705232736964">"သုံးစွဲမှု စက်ဝန်း သတ်မှတ်ရန်..."</item>
@@ -106,7 +163,10 @@
<item msgid="7330627471456865502">"MSCHAPV2"</item>
<item msgid="6255179395132581882">"GTC"</item>
</string-array>
- <!-- no translation found for wifi_ip_settings:1 (4377002609760712163) -->
+ <string-array name="wifi_ip_settings">
+ <item msgid="2717196390555072244">"DHCP"</item>
+ <item msgid="4377002609760712163">"ပုံသေ"</item>
+ </string-array>
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"မရှိ"</item>
<item msgid="1464741437353223198">"ကိုယ်တိုင်ထည့်သွင်းခြင်း"</item>
@@ -226,11 +286,73 @@
<item msgid="1165623660533024666">"နောက်ခံမှာ အလုပ်လုပ်ပါ"</item>
<item msgid="6423861043647911030">"အများသုံးစွဲနိုင်မှု အသံ"</item>
</string-array>
- <!-- no translation found for app_ops_labels:3 (7836406246005211990) -->
- <!-- no translation found for app_ops_labels:4 (3951439024549922598) -->
- <!-- no translation found for app_ops_labels:8 (3597797992398484655) -->
- <!-- no translation found for app_ops_labels:20 (3037159047591081136) -->
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"တည်နေရာ"</item>
+ <item msgid="6656077694190491067">"တည်နေရာ"</item>
+ <item msgid="8790228218278477369">"တည်နေရာ"</item>
+ <item msgid="7836406246005211990">"တုန်ခါရန်"</item>
+ <item msgid="3951439024549922598">"အဆက်အသွယ်များ ဖတ်ရန်"</item>
+ <item msgid="8802152411647068">"အဆက်အသွယ်များပြင်ဆင်ရန်"</item>
+ <item msgid="229544934599698735">"ခေါ်ဆိုထားသော မှတ်တမ်းကိုဖတ်ရန်"</item>
+ <item msgid="7396102294405899613">"ခေါ်ဆိုထားသော မှတ်တမ်းကို ပြင်ဆင်ရန်"</item>
+ <item msgid="3597797992398484655">"ပြက္ခဒိန်ကို ဖတ်ရန်"</item>
+ <item msgid="2705975774250907343">"ပြက္ခဒိန်ပြင်ဆင်ရန်"</item>
+ <item msgid="4668747371441932697">"တည်နေရာ"</item>
+ <item msgid="1487578921720243646">"အကြောင်းကြားစာကို တင်ရန်"</item>
+ <item msgid="4636080349724146638">"တည်နေရာ"</item>
+ <item msgid="673510900286463926">"ဖုန်းခေါ်ရန်"</item>
+ <item msgid="542083422784609790">"စာတို/ရုပ်သံစာ ဖတ်ရန်"</item>
+ <item msgid="1033780373029588436">"စာတို/ရုပ်သံစာ ရေးရန်"</item>
+ <item msgid="5647111115517787488">"စာတို/ရုပ်သံစာ လက်ခံရန်"</item>
+ <item msgid="8591105601108455893">"စာတို/ရုပ်သံစာ လက်ခံရန်"</item>
+ <item msgid="7730995008517841903">"စာတို/ရုပ်သံစာ လက်ခံရန်"</item>
+ <item msgid="2613033109026626086">"စာတို/ရုပ်သံစာ လက်ခံရန်"</item>
+ <item msgid="3037159047591081136">"SMS/MMS ပို့ရန်"</item>
+ <item msgid="4726682243833913568">"စာတို/ရုပ်သံစာ ဖတ်ရန်"</item>
+ <item msgid="6555678522277865572">"စာတို/ရုပ်သံစာ ရေးရန်"</item>
+ <item msgid="6981734935578130884">"ဆက်တင်များ ပြင်ဆင်ရန်"</item>
+ <item msgid="8705854389991425629">"အပေါ်မှ ဆွဲရန်"</item>
+ <item msgid="5861356020344153651">"အကြောင်းကြားချက်များအား အသုံးပြုခွင့်"</item>
+ <item msgid="78432174621628659">"ကင်မရာ"</item>
+ <item msgid="3986116419882154794">"အသံဖမ်းရန်"</item>
+ <item msgid="4516840825756409490">"အသံဖွင့်ရန်"</item>
+ <item msgid="6811712502798183957">"နောက်ခံမှတ်တမ်း ဖတ်ရန်"</item>
+ <item msgid="2780369012602289114">"နောက်ခံမှတ်တမ်းပြင်ဆင်ရန်"</item>
+ <item msgid="2331359440170850868">"မီဒီယာခလုတ်များ"</item>
+ <item msgid="6133599737122751231">"အသံပြတ်သားအောင်ချိန်ရန်"</item>
+ <item msgid="6844485713404805301">"ပင်မအသံအတိုးအကျယ်"</item>
+ <item msgid="1600379420669104929">"စကားသံအတိုးအကျယ်"</item>
+ <item msgid="6296768210470214866">"ဖုန်းမြည်သံ အတိုးအကျယ်"</item>
+ <item msgid="510690696071629241">"မီဒီယာ အသံအတိုးအကျယ်"</item>
+ <item msgid="406861638631430109">"နှိုးစက်အသံ အတိုးအကျယ်"</item>
+ <item msgid="4715864795872233884">"အကြောင်းကြားချက်သံ ပမာဏ"</item>
+ <item msgid="2311478519251301183">"ဘလူးတုသ်သံအတိုးအကျယ်"</item>
+ <item msgid="5133991377896747027">"ဖွင့်လျှက်ထားရှိရန်"</item>
+ <item msgid="2464189519136248621">"တည်နေရာ"</item>
+ <item msgid="2062677934050803037">"တည်နေရာ"</item>
+ <item msgid="1735171933192715957">"သုံးစွဲမှု စာရင်းအင်းများကို ရယူရန်"</item>
+ <item msgid="1014093788778383554">"မိုက်ခရိုဖုန်း အသံတိတ်/မတိတ်ရန်"</item>
+ <item msgid="4199297950608622850">"အမည်ကို ပြပါ"</item>
+ <item msgid="2527962435313398821">"ပရိုဂျက် မီဒီယာ"</item>
+ <item msgid="5117506254221861929">"VPN ကို စဖွင့်သုံးပါ"</item>
+ <item msgid="8291198322681891160">"နောက်ခံရေးပါ"</item>
+ <item msgid="7106921284621230961">"ဖွဲ့စည်းပုံကို ကူညီပါ"</item>
+ <item msgid="4496533640894624799">"မျက်နှာပြင်ကို ကူညီပါ"</item>
+ <item msgid="2598847264853993611">"ဖုန်း အခြေအနေကို ဖတ်ပါ"</item>
+ <item msgid="9215610846802973353">"အသံမေးလ် ထည့်ပါ"</item>
+ <item msgid="9186411956086478261">"ငုံခြင်းကို သုံးပါ"</item>
+ <item msgid="6884763100104539558">"အထွက် ခေါ်ဆိုမှုများကို စီမံဆောင်ရွက်ပါ"</item>
+ <item msgid="125513972170580692">"လက်ဗွေ"</item>
+ <item msgid="2556071024281275619">"ခန္ဓာကိုယ် အာရုံခံကိရိယာများ"</item>
+ <item msgid="617168514928339387">"ဆဲလ် ထုတ်လွှင့်မှုများကို ဖတ်ပါ"</item>
+ <item msgid="7134693570516523585">"တည်နေရာကို အတုဖန်တီးပါ"</item>
+ <item msgid="7224489175375229399">"သိုလှောင်ခန်းကို ဖတ်ပါ"</item>
+ <item msgid="8472735063903258202">"သိုလှောင်ခန်းကို ရေးပါ"</item>
+ <item msgid="4069276819909595110">"မျက်နှာပြင်ကို ဖွင့်ပါ"</item>
+ <item msgid="1228338896751121025">"အကောင့်များကို ရယူပါ"</item>
+ <item msgid="3181581793459233672">"နောက်ခံမှာ အလုပ်လုပ်ပါ"</item>
+ <item msgid="2340936043025374076">"အများသုံးစွဲနိုင်မှု အသံ"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"အတို"</item>
<item msgid="4816511817309094890">"အတော်အသင့်"</item>
@@ -247,7 +369,13 @@
<item msgid="4627069151979553527">"Cursiv"</item>
<item msgid="6896773537705206194">"စာလုံးကြီး ဆိုဒ်သေးများ"</item>
</string-array>
- <!-- no translation found for captioning_font_size_selector_titles:3 (2784236342175159295) -->
+ <string-array name="captioning_font_size_selector_titles">
+ <item msgid="1680223634161592855">"အလွန်သေးရန်"</item>
+ <item msgid="5091603983404027034">"သေး"</item>
+ <item msgid="176844712416932112">"ပုံမှန်"</item>
+ <item msgid="2784236342175159295">"ကြီး"</item>
+ <item msgid="218913203203160606">"အလွန်ကြီးရန်"</item>
+ </string-array>
<string-array name="captioning_edge_type_selector_titles">
<item msgid="3865198759294188069">"မူရင်း"</item>
<item msgid="6488643537808152001">"မရှိ"</item>
@@ -262,7 +390,14 @@
<item msgid="1874668269931014581">"၇၅%"</item>
<item msgid="6462911487571123954">"၁၀၀%"</item>
</string-array>
- <!-- no translation found for captioning_preset_selector_titles:2 (5891360837786277638) -->
+ <string-array name="captioning_preset_selector_titles">
+ <item msgid="326819345272910536">"အက်ပ်ပုံသေများကို သုံးရန်"</item>
+ <item msgid="8611890312638868524">"အမည်းပေါ်အဖြူ"</item>
+ <item msgid="5891360837786277638">"အဖြူပေါ်အမည်း"</item>
+ <item msgid="2798457065945456853">"အမည်းပေါ်အဝါ"</item>
+ <item msgid="5799049811524553967">"အပြာပေါ်အဝါ"</item>
+ <item msgid="3673930830658169860">"စိတ်ကြိုက်"</item>
+ </string-array>
<string-array name="vpn_types_long">
<item msgid="6566768880689730097">"PPTP VPN"</item>
<item msgid="1349760781118368659">"ကြိုတင် ပေးထားတဲ့ ကီးပါရှိသောL2TP/IPSec VPN"</item>
@@ -275,15 +410,32 @@
<item msgid="2958623927055120839">"မရှိ"</item>
<item msgid="1157046369795346308">"ကိုယ်တိုင်ထည့်သွင်းခြင်း"</item>
</string-array>
- <!-- no translation found for vpn_states:4 (9135049670787351881) -->
+ <string-array name="vpn_states">
+ <item msgid="5408915841694583740">"ချိတ်ဆက်မှုပြတ်တောက်သည်"</item>
+ <item msgid="8754480102834556765">"စတင်နေသည်"</item>
+ <item msgid="3351334355574270250">"ချိတ်ဆက်နေသည်"</item>
+ <item msgid="8303882153995748352">"ချိတ်ဆက်ထားသည်"</item>
+ <item msgid="9135049670787351881">"အချိန်ကုန်ပါပြီ"</item>
+ <item msgid="2124868417182583926">"မအောင်မြင်ပါ"</item>
+ </string-array>
<string-array name="security_settings_premium_sms_values">
<item msgid="1164265643455394443">"မေးပါ"</item>
<item msgid="7718817231348607934">"ဘယ်တော့မှခွင့်မပြုပါ"</item>
<item msgid="8184570120217958741">"အမြဲခွင့်ပြုပါ"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"ပုံမှန်"</item>
+ <item msgid="5101233285497327432">"အတော်အသင့်"</item>
+ <item msgid="1555861583162930714">"နိမ့်"</item>
+ <item msgid="1719683776264798117">"အရေးပါ"</item>
+ <item msgid="1567326459340152525">"။"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"ပုံမှန်"</item>
+ <item msgid="6107138933849816768">"အတော်အသင့်"</item>
+ <item msgid="182695359839047859">"နိမ့်"</item>
+ <item msgid="8577246509202964244">"အရေးကြီး"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"တချိန်လုံး"</item>
<item msgid="167418068739176448">"အသုံး အများဆုံး"</item>
diff --git a/tests/CarDeveloperOptions/res/values-my/strings.xml b/tests/CarDeveloperOptions/res/values-my/strings.xml
index 7cb218b..1396cb5 100644
--- a/tests/CarDeveloperOptions/res/values-my/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-my/strings.xml
@@ -19,7 +19,7 @@
<string name="yes" msgid="39117354665111159">"Yes"</string>
<string name="no" msgid="4709057267400907161">"No"</string>
<string name="create" msgid="5131953868544187847">"ဖန်တီးရန်"</string>
- <string name="allow" msgid="128867119174713893">"ခွင့်ပြုပါ"</string>
+ <string name="allow" msgid="128867119174713893">"ခွင့်ပြုရန်"</string>
<string name="deny" msgid="3998166389989144025">"ငြင်းပယ်ရန်"</string>
<string name="device_info_default" msgid="1548919563979154348">"မသိ"</string>
<plurals name="show_dev_countdown" formatted="false" msgid="3953785659137161981">
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"မျက်နှာပြင်ပေါ်ရှိ စာလုံးကို ပိုသေးအောင် သို့မဟုတ် ပိုကြီးအောင် လုပ်ပါ။"</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"ပိုသေးအောင် ပြုလုပ်ပါ"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"ပိုကြီးအောင် ပြုလုပ်ပါ"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"နမူနာ စာသား"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Oz ၏အံ့ဖွယ်ဝိဇ္ဇာ"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"အခန်းကြီး ၁၁ − Oz ၏အံ့ဖွယ် မြစိမ်းရောင်မြို့တော်"</string>
@@ -239,7 +238,7 @@
<string name="ping_test_label" msgid="4759194831308897624">"Ping စမ်းသပ်ခြင်း လုပ်ဆောင်ပါ"</string>
<string name="radio_info_smsc_label" msgid="4561160340649588034">"SMSC:"</string>
<string name="radio_info_smsc_update_label" msgid="3992739670219389246">"အပ်ဒိတ်"</string>
- <string name="radio_info_smsc_refresh_label" msgid="5343925292858337909">"ပြန်လည်ဆန်းသစ်ရန်"</string>
+ <string name="radio_info_smsc_refresh_label" msgid="5343925292858337909">"ပြန်လည်စတင်ရန်"</string>
<string name="radio_info_toggle_dns_check_label" msgid="3058615074503857400">"DNS စစ်ဆေးမှုခလုတ်နှိပ်ပါ"</string>
<string name="oem_radio_info_label" msgid="8679815523111164378">"ထုတ်လုပ်သူနှင့် သက်ဆိုင်သော အချက်အလက်/ဆက်တင်များ"</string>
<string name="band_mode_title" msgid="8180320100446559884">"ရေဒီယိုလိုင်းမုဒ်သို့ သတ်မှတ်ပါ"</string>
@@ -324,7 +323,7 @@
<string name="date_and_time_settings_title_setup_wizard" msgid="1573030770187844365">"ရက်စွဲနှင့် အချိန် သတ်မှတ်ရန်"</string>
<string name="date_and_time_settings_summary" msgid="4617979434474713417">"ရက်စွဲ အချိန် အချိန်ဇုန်နှင့် ပုံစံများအား သတ်မှတ်ရန်"</string>
<string name="date_time_auto" msgid="2679132152303750218">"ကွန်ရက်က ပြသောအချိန် သုံးပါ"</string>
- <string name="zone_auto_title" msgid="5500880975376882488">"ကွန်ရက်ကပြသော စံတော်ချိန် သုံးပါ"</string>
+ <string name="zone_auto_title" msgid="5500880975376882488">"ကွန်ရက်က ဖော်ပြထားသောအချိန်ဇုန်ကို အသုံးပြုရန်"</string>
<string name="date_time_24hour_auto" msgid="7499659679134962547">"အသုံးပြုမည့် ဒေသဘာသာစကား၏စနစ်ကို သုံးရန်"</string>
<string name="date_time_24hour_title" msgid="6209923858891621283">"၂၄-နာရီပုံစံ"</string>
<string name="date_time_24hour" msgid="1265706705061608742">"၂၄-နာရီပုံစံကို အသုံးပြုမည်"</string>
@@ -364,12 +363,12 @@
<string name="owner_info_settings_summary" msgid="4208702251226725583">"မရှိ"</string>
<string name="owner_info_settings_status" msgid="8049975536717685126">"<xliff:g id="COUNT_0">%1$d</xliff:g> / <xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
<string name="owner_info_settings_edit_text_hint" msgid="2250029417257939706">"ဥပမာ၊ Joe ၏ Android"</string>
- <string name="user_info_settings_title" msgid="1125111518759995748">"သုံးစွဲသူအကြောင်း"</string>
+ <string name="user_info_settings_title" msgid="1125111518759995748">"အသုံးပြုသူအကြောင်း"</string>
<string name="show_profile_info_on_lockscreen_label" msgid="5204282771893683026">"သော့ခတ်ထားသောမျက်နှာပြင်ပေါ်သုံးစွဲသူ၏အကြောင်းပြရန်"</string>
<string name="profile_info_settings_title" msgid="4855892878512562551">"ကိုယ်ရေးအချက်အလက်"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"အကောင့်များ"</string>
<string name="location_settings_title" msgid="2707201457572301030">"တည်နေရာ"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"တည်နေရာကို သုံးရန်"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"တည်နေရာကို သုံးရန်"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"ပိတ်ထားသည်"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">ဖွင့်ထားသည် - အက်ပ် <xliff:g id="COUNT_1">%1$d</xliff:g> ခုသည် တည်နေရာကို အသုံးပြုနိုင်သည်</item>
@@ -489,7 +488,7 @@
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"အိုး။ ဒါ အာရုံခံကိရိယာမဟုတ်ဘူး"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"သင့်ဖုန်း ကျောဘက်ရှိ အာရုံခံကိရိယာကို ထိပါ။ လက်ညှိုးကို အသုံးပြုပါ။"</string>
<string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"စာရင်းသွင်းမှု မပြီးစီးခဲ့ပါ"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"လက်ဗွေ ပေးသွင်းမှု ကန့်သတ်ချိန် ကုန်သွားပြီ။ ထပ်စမ်းကြည့်ပါ။"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"လက်ဗွေစာရင်းသွင်းမှု ကန့်သတ်ချိန် ကုန်သွားပြီ။ ထပ်စမ်းကြည့်ပါ။"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"လက်ဗွေထည့်သွင်းမှု အဆင်မပြေပါ။ အခြားလက်ချောင်းကို သုံးပါ သို့မဟုတ် ထပ်စမ်းကြည့်ပါ။"</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"နောက်တစ်ခု ထည့်ရန်"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"ရှေ့သို့"</string>
@@ -544,7 +543,7 @@
<string name="suggested_fingerprint_lock_settings_summary" product="tablet" msgid="8114514312665251311"></string>
<string name="suggested_fingerprint_lock_settings_summary" product="device" msgid="8114514312665251311"></string>
<string name="suggested_fingerprint_lock_settings_summary" product="default" msgid="8114514312665251311"></string>
- <string name="lock_settings_picker_title" msgid="1034741644461982205">"မျက်နှာပြင်လော့ခ်ချနည်းရွေးရန်"</string>
+ <string name="lock_settings_picker_title" msgid="1034741644461982205">"ဖန်သားပြင်လော့ခ်"</string>
<string name="lock_settings_picker_title_profile" msgid="5086594364428782115">"အလုပ် လော့ခ်ချခြင်းကို ရွေးပါ"</string>
<string name="setup_lock_settings_picker_title" product="tablet" msgid="2429667472335773519">"သင့်တက်ဘလက်ကို ကာကွယ်ပါ"</string>
<string name="setup_lock_settings_picker_title" product="device" msgid="4739290104106645233">"သင့်စက်ပစ္စည်းကို ကာကွယ်ပါ"</string>
@@ -745,7 +744,7 @@
<string name="bluetooth_error_title" msgid="5718761586633101960"></string>
<string name="bluetooth_connecting_error_message" msgid="8473359363469518478">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ကို ချိတ်ဆက်မရပါ။"</string>
<string name="bluetooth_preference_scan_title" msgid="457781003962324807">"စက်များကိုရှာဖွေရန် စကင်ပြုလုပ်နေသည်"</string>
- <string name="bluetooth_search_for_devices" msgid="6796307228261078451">"ပြန်လည်ဆန်းသစ်ရန်"</string>
+ <string name="bluetooth_search_for_devices" msgid="6796307228261078451">"ပြန်လည်စတင်ရန်"</string>
<string name="bluetooth_searching_for_devices" msgid="7820814625522702494">"ရှာဖွေနေသည်…"</string>
<string name="bluetooth_preference_device_settings" msgid="4247085616427015908">"စက်ပစ္စည်း အပြင်အဆင်များ"</string>
<string name="bluetooth_preference_paired_dialog_title" msgid="3567187438908143693">"ချိတ်တွဲထားသည့် ကိရိယာ"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"ဝိုင်ဖိုင်ဖွင့်ရန်"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Wi-Fi သုံးရန်"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Wi-Fi သုံးရန်"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"ဝိုင်ဖိုင်ဆက်တင်များ"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"ကြိုးမဲ့ချိတ်ဆက်ပွိုင့်များအား သတ်မှတ်ခြင်း & စီမံခြင်း"</string>
@@ -890,7 +889,7 @@
<string name="wifi_menu_forget" msgid="7561140554450163075">"ကွန်ရက်အား မေ့ရန်"</string>
<string name="wifi_menu_modify" msgid="4080178040721021101">"ကွန်ယက်အား ပြင်ရန်"</string>
<string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"ရနိုင်သည့်ကွန်ရက်များကို မြင်ရန် Wi-Fi ဖွင့်ပါ"</string>
- <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"ဝိုင်ဖိုင်ကွန်ယက်များရှာဖွေနေသည်"</string>
+ <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"Wi-Fi ကွန်ရက်များ ရှာဖွေနေသည်…"</string>
<string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"သင့်မှာ Wi-Fi ကွန်ရက်ကို ပြောင်းလဲရန် ခွင့်ပြုချက် မရှိပါ။"</string>
<string name="wifi_more" msgid="3538241640407382185">"နောက်ထပ်"</string>
<string name="wifi_setup_wps" msgid="6730131677695521321">"အလိုအလျောက် အစီအမံ (WPS)"</string>
@@ -913,7 +912,7 @@
<string name="rx_wifi_speed" msgid="7392873246110937187">"လက်ခံခြင်းလင့်ခ် အမြန်နှုန်း"</string>
<string name="wifi_frequency" msgid="6132852924995724246">"လှိုင်းနှုန်း"</string>
<string name="wifi_ip_address" msgid="5572539114989914831">"အိုင်ပီလိပ်စာ"</string>
- <string name="passpoint_label" msgid="7429247462404128615">"မှတဆင့် သိမ်းရန်"</string>
+ <string name="passpoint_label" msgid="7429247462404128615">"မှတစ်ဆင့် သိမ်းရန်"</string>
<string name="passpoint_content" msgid="340527524510304327">"<xliff:g id="NAME">%1$s</xliff:g> အထောက်အထားများ"</string>
<string name="wifi_eap_method" msgid="3752116941487485859">"EAPနည်းလမ်း"</string>
<string name="please_select_phase2" msgid="5848080896810435677">"အဆင့်(၂) စစ်မှန်ကြောင်းအတည်ပြုခြင်း"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"မိုဘိုင်း"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Wi‑Fi မရနိုင်လျှင် မိုဘိုင်းကွန်ရက် သုံးပါ"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"မိုဘိုင်းကွန်ရက် မရနိုင်လျှင် Wi‑Fi သုံးပါ"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Wi-Fi သုံး၍ ခေါ်ဆိုသည်။ Wi‑Fi မရတော့လျှင် ခေါ်ဆိုမှု ပြီးသွားပါမည်။"</string>
@@ -1323,7 +1325,7 @@
<string name="device_status" msgid="395318738663800026">"အခြေအနေ"</string>
<string name="device_status_summary" product="tablet" msgid="8975790197766171710">"ဘက်ထရီ၊ ကွန်ယက်နှင့် တစ်ခြားအချက်အလက်၏ အခြေအနေများ"</string>
<string name="device_status_summary" product="default" msgid="8282235230720651642">"ဖုန်းနံပါတ်၊ ထုတ်လွင့်မှု စသည်"</string>
- <string name="storage_settings" msgid="7009733301485139652">"သိုလှောင်မှုများ"</string>
+ <string name="storage_settings" msgid="7009733301485139652">"သိုလှောင်ခန်း"</string>
<string name="storage_settings_for_app" msgid="3028887232073069965">"သိုလှောင်ခန်းနှင့် ကက်ရှ်"</string>
<string name="storage_usb_settings" msgid="4470138799276333403">"သိုလှောင်ခန်း"</string>
<string name="storage_settings_title" msgid="7348362600789024415">"သိုလှောင်မှု ဆက်တင်များ"</string>
@@ -1704,7 +1706,7 @@
<string name="settings_safetylegal_activity_unreachable" msgid="3541894966476445833">"သင့်တွင်ဒေတာချိတ်ဆက်မှု မရှိပါ။ ဤအချက်အလက်ကိုကြည့်ရန် အင်တာနက်ချိတ်ဆက်မှုရှိသည့် မည်သည့်ကွန်ပျူတာမှမဆို %s ထံသို့ သွားပါ။"</string>
<string name="settings_safetylegal_activity_loading" msgid="7680998654145172">"ဖွင့်နေဆဲ…"</string>
<string name="confirm_device_credential_use_alternate_method" msgid="1279869272895739941">"အခြားနည်းလမ်း သုံးရန်"</string>
- <string name="lockpassword_choose_your_screen_lock_header" msgid="6283518876031424798">"မျက်နှာပြင်လော့ခ် သတ်မှတ်ခြင်း"</string>
+ <string name="lockpassword_choose_your_screen_lock_header" msgid="6283518876031424798">"ဖန်သားပြင်လော့ခ် သတ်မှတ်ခြင်း"</string>
<string name="lockpassword_choose_your_password_message" msgid="2838273977481046536">"လုံခြုံရေးအတွက် စကားဝှက် သတ်မှတ်ပါ"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="4921343500484160894">"လက်ဗွေသုံးရန် စကားဝှက်သတ်မှတ်ပါ"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="314870151462139417">"လက်ဗွေသုံးရန် ပုံစံသတ်မှတ်ပါ"</string>
@@ -1797,7 +1799,7 @@
<string name="advanced_settings" msgid="6282069364060968122">"အဆင့်မြင့်အပြင်အဆင်များ"</string>
<string name="advanced_settings_summary" msgid="5912237062506771716">"ပိုမိုပြီးရွေးချယ်နိုင်သော အပြင်အဆင်များ ရရှိခြင်း"</string>
<string name="application_info_label" msgid="3886253474964599105">"အက်ပ်အချက်အလက်များ"</string>
- <string name="storage_label" msgid="1109537840103290384">"သိုလှောင်မှုများ"</string>
+ <string name="storage_label" msgid="1109537840103290384">"သိုလှောင်ခန်း"</string>
<string name="auto_launch_label" msgid="47089737922907379">"မူရင်းအတိုင်းဖွင့်ရန်"</string>
<string name="auto_launch_label_generic" msgid="7865828543459493308">"မူရင်းအတိုင်း"</string>
<string name="screen_compatibility_label" msgid="3638271673726075815">"ဖန်သားပြင် လိုက်ဖက်မှု"</string>
@@ -1827,7 +1829,7 @@
<string name="app_factory_reset" msgid="8718986000278776272">"အဆင့်မြင့်မှုများကိုဖယ်ထုတ်မည်လား?"</string>
<string name="auto_launch_enable_text" msgid="3372898942144027341">"မူလကတည်းမှ တစ်ချို့လုပ်ဆောင်ချက်များအတွက် ဤအပလီကေးရှင်းကို ဖွင့်ရန်သင်ရွေး ချယ်ထားပြီးသားဖြစ်သည်"</string>
<string name="always_allow_bind_appwidgets_text" msgid="2286211654774611037">"၀ဒ်ဂျက်များ ဖန်တီးရန်နှင့် ၎င်းတို့၏ အချက်အလက်များရယူရန် ဤအပလီကေးရှင်းကို ခွင့်ပြုကြောင်း သင်ရွေးချယ်ထားသည်။"</string>
- <string name="auto_launch_disable_text" msgid="8560921288036801416">"မူရင်း သတ်မှတ်ထားခြင်းမရှိ"</string>
+ <string name="auto_launch_disable_text" msgid="8560921288036801416">"မူရင်း သတ်မှတ်မထားပါ။"</string>
<string name="clear_activities" msgid="2068014972549235347">"မူရင်းများကို ရှင်းလင်းခြင်း"</string>
<string name="screen_compatibility_text" msgid="1768064020294301496">"သင့်ဖန်သားပြင်အတွက် ဤအပ်ပလီကေးရှင်းမှာ လိုက်ဖက်အောင် လုပ်ထားခြင်း မရှိနိုင်ပါ။ ဤနေရာတွင် သင့်ဖန်သားပြင်နှင့်ကိုက်ညီအောင် ထိန်းချုပ်နိုင်ပါသည်။"</string>
<string name="ask_compatibility" msgid="6687958195768084807">"ဖွင့်သည့်အခါ မေးမြန်းရန်။"</string>
@@ -2000,7 +2002,7 @@
<string name="user_dict_settings_edit_dialog_title" msgid="6492621665762797309">"စာလုံးကို ပြင်ဆင်မည်"</string>
<string name="user_dict_settings_context_menu_edit_title" msgid="4577283176672181497">"ပြင်ဆင်ရန်"</string>
<string name="user_dict_settings_context_menu_delete_title" msgid="670470172230144069">"ဖျက်ရန်"</string>
- <string name="user_dict_settings_empty_text" msgid="2774939221998982609">"အသုံးပြုသူအဘိဓာန်တွင် သင့်စကားလုံးများမရှိပါ။ စကားလုံးတစ်ခု ပေါင်းထည့်ရန်၊ (+) ခလုတ်ကိုနှိပ်ပါ။"</string>
+ <string name="user_dict_settings_empty_text" msgid="2774939221998982609">"အသုံးပြုသူအဘိဓာန်တွင် စကားလုံးများမရှိပါ။ စကားလုံးတစ်ခု ပေါင်းထည့်ရန်၊ (+) ခလုတ်ကိုနှိပ်ပါ။"</string>
<string name="user_dict_settings_all_languages" msgid="8839702015353418176">"ဘာသာစကားအားလုံးအတွက်"</string>
<string name="user_dict_settings_more_languages" msgid="8345984308635521364">"ဘာသာစကားပိုများများ…"</string>
<string name="testing" msgid="4255916838792186365">"စမ်းသပ်မှု"</string>
@@ -2080,7 +2082,7 @@
<string name="accessibility_timeout_1min" msgid="5019003178551730551">"၁ မိနစ်"</string>
<string name="accessibility_timeout_2mins" msgid="4124259290444829477">"၂ မိနစ်"</string>
<string name="accessibility_content_timeout_preference_title" msgid="5160746882250939464">"ဖတ်ရန် အချိန်"</string>
- <string name="accessibility_control_timeout_preference_title" msgid="2771808346038759474">"တစ်ခုခုလုပ်ဆောင်ရန် အချိန်"</string>
+ <string name="accessibility_control_timeout_preference_title" msgid="2771808346038759474">"လုပ်ဆောင်ရန် အချိန်"</string>
<string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"သင် ဖတ်ရှုရမည့် မက်ဆေ့ဂျ်များအား ပြရမည့် ကြာချိန် ရွေးပါ။ သို့သော်လည်း ယာယီသာ မြင်ရပါမည်။\n\nဤဆက်တင်ကို အက်ပ်အားလုံးတွင် အသုံးမပြုနိုင်ပါ။"</string>
<string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"တစ်ခုခုလုပ်ဆောင်ရန် မေးသည့် မက်ဆေ့ဂျ်များ ပြရမည့်ကြာချိန် ရွေးပါ၊ သို့သော်လည်း ယာယီသာ မြင်ရပါမည်။\n\nအက်ပ်အားလုံးတွင် ဤဆက်တင် အသုံးမပြုနိုင်ပါ။"</string>
<string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"ထိထားရန် လိုအပ်ချိန်"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"အကြောင်းကြားချက် တုန်ခါမှု"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"ဖုန်းမြည်သံ တုန်ခါမှု"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"ထိသည့် တုန်ခါမှု"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"ဝန်ဆောင်မှုကို သုံးရန်"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"အရောင်ပြင်ဆင်ခြင်းကို သုံးရန်"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"စာတန်းကို ထိုးရန်"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"ဝန်ဆောင်မှုကို သုံးရန်"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"အရောင်ပြင်ဆင်ခြင်းကို သုံးရန်"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"စာတန်းထိုးသုံးရန်"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"ရှေ့ဆက်ရန်"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"နားကြားကိရိယာ"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"မည်သည့် နားကြားကိရိယာကိုမျှ ချိတ်ဆက်မထားပါ"</string>
@@ -2276,13 +2278,13 @@
<string name="battery_tip_smart_battery_title" product="device" msgid="7419448992583346364">"စက်ပစ္စည်း၏ ဘက်ထရီသက်တမ်းကို ပိုကောင်းလာအောင်လုပ်ခြင်း"</string>
<string name="battery_tip_smart_battery_summary" msgid="5344821856478265778">"\'ဘက်ထရီ စီမံခန့်ခွဲမှုစနစ်\' ကို ဖွင့်ပါ"</string>
<string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"\'ဘက်ထရီ အားထိန်း\' ကို ဖွင့်ရန်"</string>
- <string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"ဘက်ထရီသည် ပုံမှန်ထက် စောလျင်စွာ ကုန်နိုင်ပါသည်"</string>
+ <string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"ပုံမှန်ထက် ဘက်ထရီ အကုန်မြန်နိုင်သည်"</string>
<string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"\'ဘက်ထရီ အားထိန်း\' ကို ဖွင့်ထားသည်"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"အချို့သော ဝန်ဆောင်မှုများကို ကန့်သတ်ထားနိုင်ပါသည်"</string>
<string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"ဖုန်းကို ပုံမှန်ထက် ပိုသုံးထားသည်"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"တက်ဘလက်ကို ပုံမှန်ထက် ပိုသုံးထားသည်"</string>
<string name="battery_tip_high_usage_title" product="device" msgid="8304138287288309490">"စက်ပစ္စည်းကို ပုံမှန်ထက် ပိုသုံးထားသည်"</string>
- <string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"ဘက်ထရီသည် ပုံမှန်ထက် စောလျင်စွာ ကုန်နိုင်ပါသည်"</string>
+ <string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"ပုံမှန်ထက် ဘက်ထရီ အကုန်မြန်နိုင်သည်"</string>
<string name="battery_tip_dialog_message" product="default" msgid="8453700079047810964">"သင့်ဖုန်းကို ပုံမှန်ထက် ပိုသုံးထားသည်။ သင့်ဘက်ထရီသည် ခန့်မှန်းထားသည်ထက် စောလျင်စွာ ကုန်နိုင်ပါသည်။\n\nအားအပြည့်သွင်းပြီးသည့် အချိန်မှစ၍ သင် အသုံးအများဆုံးအက်ပ်−"</string>
<string name="battery_tip_dialog_message" product="tablet" msgid="6489981050645444068">"သင့်တက်ဘလက်ကို ပုံမှန်ထက် ပိုသုံးထားသည်။ သင့်ဘက်ထရီသည် ခန့်မှန်းထားသည်ထက် စောလျင်စွာ ကုန်နိုင်ပါသည်။\n\nအားအပြည့်သွင်းပြီးသည့် အချိန်မှစ၍ သင် အသုံးအများဆုံးအက်ပ်−"</string>
<string name="battery_tip_dialog_message" product="device" msgid="6348123094674390337">"သင့်စက်ပစ္စည်းကို ပုံမှန်ထက် ပိုသုံးထားသည်။ သင့်ဘက်ထရီသည် ခန့်မှန်းထားသည်ထက် စောလျင်စွာ ကုန်နိုင်ပါသည်။\n\nအားအပြည့်သွင်းပြီးသည့် အချိန်မှစ၍ သင် အသုံးအများဆုံးအက်ပ်−"</string>
@@ -2440,7 +2442,7 @@
<string name="menu_stats_unplugged" msgid="774132771877485277">"<xliff:g id="UNPLUGGED">%1$s</xliff:g> အားသွင်းကြိုးဖြုတ်စဥ်မှ"</string>
<string name="menu_stats_last_unplugged" msgid="197591229866380225">"<xliff:g id="UNPLUGGED">%1$s</xliff:g>မှ ကြိုးဖြုတ်ထားသည်"</string>
<string name="menu_stats_total" msgid="2270006562448894071">"အသုံးပြုမှု စုစုပေါင်း"</string>
- <string name="menu_stats_refresh" msgid="9017362786647223203">"ပြန်လည်ဆန်းသစ်ရန်"</string>
+ <string name="menu_stats_refresh" msgid="9017362786647223203">"ပြန်လည်စတင်ရန်"</string>
<string name="process_kernel_label" msgid="4175060316414593760">"Android OS"</string>
<string name="process_mediaserver_label" msgid="8591722404282619153">"မီဒီယာဆာဗာ"</string>
<string name="process_dex2oat_label" msgid="8249082119748556085">"အက်ပ်ပိုမိုကောင်းအောင်ပြုခြင်း"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"ဖွင့်ရန်"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"ဘက်ထရီအားထိန်းကို သုံးရန်"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"ဘက်ထရီအားထိန်းကို သုံးရန်"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"အလိုအလျောက် ဖွင့်ရန်"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"ဘယ်တော့မှ"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"ဘတ်ထရီ <xliff:g id="PERCENT">%1$s</xliff:g> ၌"</string>
@@ -2599,7 +2601,7 @@
<string name="work_mode_label" msgid="6845849194740195757">"အလုပ်ပရိုဖိုင်"</string>
<string name="work_mode_on_summary" msgid="1682781113156323592">"သင်၏ အဖွဲ့အစည်းက စီမံခန့်ခွဲထားပါသည်"</string>
<string name="work_mode_off_summary" msgid="1688885392211178315">"အက်ပ်နှင့် အကြောင်းကြားချက်များကို ပိတ်ထားသည်"</string>
- <string name="remove_managed_profile_label" msgid="4625542553784793536">"အလုပ် ပရိုဖိုင်ကို ဖယ်ရှားပစ်ရန်"</string>
+ <string name="remove_managed_profile_label" msgid="4625542553784793536">"အလုပ်ပရိုဖိုင် ဖယ်ရှားရန်"</string>
<string name="background_data" msgid="8275750862371471171">"နောက်ခံတွင်အသုံးပြုသောဒေတာ"</string>
<string name="background_data_summary" msgid="799640633948841990">"အက်ပ်များက ဒေတာ ပို့၊ လက်ခံ၊ စင့်ခ် အချိန်မရွေးလုပ်နိုင်သည်"</string>
<string name="background_data_dialog_title" msgid="8306650658158895976">"နောက်ခံဒေတာဖျက်မလား"</string>
@@ -2886,7 +2888,7 @@
<string name="user_confirm_remove_self_title" msgid="6739480453680217543">"သင့်ကို ဖယ်ရှားမလား။"</string>
<string name="user_confirm_remove_title" msgid="1034498514019462084">"ဤအသုံးပြုသူကို ဖျက်မလား။"</string>
<string name="user_profile_confirm_remove_title" msgid="6138684743385947063">"ဒီပရိုဖိုင်ကို ဖယ်ရှားရမလား?"</string>
- <string name="work_profile_confirm_remove_title" msgid="3168910958076735800">"အလုပ်ပရိုဖိုင် ဖယ်မည်လား?"</string>
+ <string name="work_profile_confirm_remove_title" msgid="3168910958076735800">"အလုပ်ပရိုဖိုင် ဖယ်ရှားမလား။"</string>
<string name="user_confirm_remove_self_message" product="tablet" msgid="2889456786320157545">"ဤ တက်ဘလက်ပေါ်မှ သင့်နေရာနှင့် အချက်အလက်များသည် ပျောက်သွားလိမ့်မည်။ ဤလုပ်ဆောင်ချက်ကို သင် နောက်ပြန်သွား၍ မရနိုင်ပါ။"</string>
<string name="user_confirm_remove_self_message" product="default" msgid="8441729423565705183">"ဤဖုန်းပေါ်မှ သင့်နေရာနှင့် အချက်အလက်များသည် ပျောက်သွားလိမ့်မည်။ ဤလုပ်ဆောင်ချက်ကို သင် နောက်ပြန်သွား၍ မရနိုင်ပါ။"</string>
<string name="user_confirm_remove_message" msgid="5202150470271756013">"အက်ပ်များ အားလုံး နှင့် ဒေတာကို ဖျက်သွားမည်။"</string>
@@ -2922,8 +2924,8 @@
<string name="nfc_payment_favor_default" msgid="7555356982142464260">"အမြဲတမ်း"</string>
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"အခြား ငွေပေးချေရေး အက်ပ်ပွင့်နေချိန်မှ လွဲပြီး"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"တို့ထိပြီးပေးရန် နေရာတွင် အောက်ပါနည်းဖြင့် ပေးပါ-"</string>
- <string name="nfc_how_it_works_title" msgid="6531433737926327904">"မှတ်တိုင်တွင် ငွေချေခြင်း"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"ငွေပေးချေရေး အက်ပ်ကို သတ်မှတ်ပေးပါ။ ၎င်းနောက်မှာ သင့်ဖုန်း၏ နောက်ကျောကို ချိတ်ဆက်ရန် မလိုသည့် သင်္ကေတ ပါရှိသော တာမီနယ် တခုခုဆီသို့ ကပ်ပေးလိုက်ရုံပါပဲ။"</string>
+ <string name="nfc_how_it_works_title" msgid="6531433737926327904">"ငွေချေစက်တွင် ငွေပေးချေခြင်း"</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"ငွေပေးချေရေး အက်ပ်ကို သတ်မှတ်ပါ။ ၎င်းနောက် သင့်ဖုန်း၏ ကျောဘက်ကို ချိတ်ဆက်ရန် မလိုသင်္ကေတပါ ငွေချေစက် တစ်ခုဆီသို့ ကပ်လိုက်ပါ။"</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"ရပါပြီ"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"နောက်ထပ်..."</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"သင်၏ ဦးစားပေးချက်များ သတ်မှတ်မည်လား?"</string>
@@ -3160,7 +3162,7 @@
<string name="emergency_tone_vibrate" msgid="5020068066905681181">"တုန်ခါမှုများ"</string>
<string name="boot_sounds_title" msgid="7583926202411353620">"အသံများ ဖွင့်ထားပါ"</string>
<string name="live_caption_title" msgid="7926591158657997051">"တိုက်ရိုက်စာတန်းထိုး"</string>
- <string name="live_caption_summary" msgid="9064771862352393125">"အလိုလို မီဒီယာ စာတန်းထိုးရန်"</string>
+ <string name="live_caption_summary" msgid="9064771862352393125">"အလိုအလျောက် စာတန်းထိုးရန်"</string>
<string name="zen_mode_settings_summary_off" msgid="6929319200478424962">"ဘယ်တော့မှ"</string>
<plurals name="zen_mode_settings_summary_on" formatted="false" msgid="6061723291126091396">
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> ခု ဖွင့်ထားသည်</item>
@@ -3316,7 +3318,7 @@
<string name="swipe_direction_title" msgid="7535031630668873009">"ပွတ်ဆွဲ လုပ်ဆောင်ချက်များ"</string>
<string name="swipe_direction_ltr" msgid="944932514821822709">"ပယ်ရန် ညာသို့၊ မီနူးပြရန် ဘယ်သို့ ပွတ်ဆွဲပါ"</string>
<string name="swipe_direction_rtl" msgid="4521416787262888813">"ပယ်ရန် ဘယ်သို့၊ မီနူးပြရန် ညာသို့ ပွတ်ဆွဲပါ"</string>
- <string name="notification_pulse_title" msgid="4861418327614907116">"မီး မှိတ်တုတ်မှိတ်တုတ်လုပ်ရန်"</string>
+ <string name="notification_pulse_title" msgid="4861418327614907116">"မီး မှိတ်တုတ်မှိတ်တုတ်လုပ်ပါ"</string>
<string name="lock_screen_notifications_title" msgid="6889072265118747835">"လော့ခ်ချချိန် မျက်နှာပြင်တွင်"</string>
<string name="locked_work_profile_notification_title" msgid="8307025804986190658">"အလုပ်ပရိုဖိုင်လော့ခ်ချထားချိန်"</string>
<string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"အကြောင်းကြားချက်ပါ အရာအားလုံး ပြပါ"</string>
@@ -3330,7 +3332,7 @@
<string name="lock_screen_notifications_interstitial_title_profile" msgid="4043621508889929254">"ပရိုဖိုင်သတိပေးချက်များ"</string>
<string name="notifications_title" msgid="8334011924253810654">"အကြောင်းကြားချက်များ"</string>
<string name="app_notifications_title" msgid="1141791221581312325">"အက်ပ် အကြောင်းကြားချက်များ"</string>
- <string name="notification_channel_title" msgid="6637705960909690229">"အသိပေးချက် အမျိုးအစား"</string>
+ <string name="notification_channel_title" msgid="6637705960909690229">"အကြောင်းကြားချက် အမျိုးအစား"</string>
<string name="notification_group_title" msgid="6105337987437608590">"အကြောင်းကြားချက် အုပ်စုအမျိုးအစား"</string>
<string name="notification_importance_title" msgid="4131979083408000545">"အပြုအမူ"</string>
<string name="notification_importance_unspecified" msgid="2515778981253707724">"အသံကို ခွင့်ပြုရန်"</string>
@@ -3675,7 +3677,7 @@
<string name="default_app" msgid="8861276008866619872">"(မူသေ)"</string>
<string name="system_app" msgid="4111402206594443265">"(စနစ်)"</string>
<string name="system_default_app" msgid="1454719098589351197">"(စနစ်မူလ)"</string>
- <string name="apps_storage" msgid="5658466038269046038">"အက်ပ်များ သိုလှောင်မှု"</string>
+ <string name="apps_storage" msgid="5658466038269046038">"အက်ပ်များ သိုလှောင်ခန်း"</string>
<string name="usage_access" msgid="2023443456361489516">"သုံးစွဲမှုကို ကြည့်ရှုနိုင်ခြင်း"</string>
<string name="permit_usage_access" msgid="3321727608629752758">"ဝင်ရောက်သုံးစွဲမှုအား ခွင့့်ပြုရန်"</string>
<string name="app_usage_preference" msgid="5691545073101551727">"အက်ပ်သုံးစွဲမှု ရွေးချယ်စရာများ"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"စက်ပစ္စည်းကိုလော့ခ်ချထားလျှင်၊ သတိပေးချက်များတွင် ပြန်စာရေးခြင်း သို့မဟုတ် အခြားစာရေးခြင်းများ မပြုလုပ်နိုင်ရန် ကာကွယ်ထားပါသည်။"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"မူရင်းစာလုံးပေါင်းသတ်ပုံစစ်စနစ်"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"သတ်ပုံစစ်စနစ် ရွေးချယ်ပါ"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"စာလုံးပေါင်းသတ်ပုံစစ်စနစ် အသုံးပြုပါ"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"စာလုံးပေါင်းသတ်ပုံစစ်စနစ် အသုံးပြုပါ"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"မရွေးထားပါ"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(တစ်ခုမျှမဟုတ်ပါ)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">"− "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"သိုလှောင်ခန်း နေရာလွတ်များ ရှိလာစေရန် သိုလှောင်ခန်းမန်နေဂျာသည် သင့်စက်ပစ္စည်းပေါ်ရှိ မိတ္တူကူးယူထားသည့် ဓာတ်ပုံနှင့် ဗီဒီယိုများကို ဖယ်ရှားလိုက်ပါမည်။"</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"ဓာတ်ပုံနှင့် ဗီဒီယိုများကို ဖယ်ရှားပါ"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"သိုလှောင်ခန်းမန်နေဂျာ"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"သိုလှောင်ခန်း စီမံခန့်ခွဲမှုစနစ်ကို သုံးရန်"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"သိုလှောင်ခန်း စီမံခန့်ခွဲမှုစနစ်ကို သုံးရန်"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"အလိုအလျောက်"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"ကိုယ်တိုင်ထည့်သွင်းခြင်း"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"ယခုနေရာလွတ်ပြုလုပ်ပါ"</string>
@@ -4133,7 +4135,7 @@
<string name="ambient_display_tap_screen_title" product="tablet" msgid="6434521782016864148">"တက်ဘလက်ကို စစ်ဆေးရန် တို့ပါ"</string>
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"စက်ပစ္စည်းကို စစ်ဆေးရန် တို့ပါ"</string>
<string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"အချိန်၊ အကြောင်းကြားချက်များနှင့် အခြားအချက်အလက်များကို စစ်ဆေးရန် သင့်ဖန်သားပြင်ကို တို့ပါ။"</string>
- <string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"သတိပေးချက်အတွက် လက်ဗွေပွတ်ဆွဲပါ"</string>
+ <string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"သတိပေးချက်အတွက် လက်ဗွေပွတ်ဆွဲခြင်း"</string>
<string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"လက်ဗွေပွတ်ဆွဲခြင်း"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"အကြောင်းကြားချက်များကို ကြည့်ရန် ဖုန်း၏ နောက်ကျောဘက်ရှိ လက်ဗွေ အာရုံခံကိရိယာပေါ်တွင် အောက်သို့ ပွတ်ဆွဲပါ။"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"အကြောင်းကြားချက်များကို ကြည့်ရန် တက်ဘလက်၏ နောက်ကျောဘက်ရှိ လက်ဗွေ အာရုံခံကိရိယာပေါ်တွင် အောက်သို့ ပွတ်ဆွဲပါ။"</string>
@@ -4517,6 +4519,6 @@
<string name="automatic_system_heap_dump_title" msgid="2153897396923488317">"စနစ်၏ လျှပ်တစ်ပြက် မှတ်ဉာဏ်ကို အလိုအလျောက် ဖမ်းယူပါ"</string>
<string name="automatic_system_heap_dump_summary" msgid="4962129546638974661">"မှတ်ဉာဏ် အလွန်အသုံးပြုသည့်အခါ \'Android စနစ်\' အတွက် လျှပ်တစ်ပြက် မှတ်ဉာဏ် အလိုအလျောက် ဖမ်းယူပေးသည်"</string>
<string name="wifi_disconnect_button_text" msgid="787688024070426706">"ချိတ်ဆက်မှု ဖြုတ်ရန်"</string>
- <string name="wfc_disclaimer_emergency_limitation_title_text" msgid="26884532087670844">"အရေးပေါ် ဖုန်းခေါ်ခြင်းများ"</string>
+ <string name="wfc_disclaimer_emergency_limitation_title_text" msgid="26884532087670844">"အရေးပေါ်ခေါ်ဆိုမှုများ"</string>
<string name="wfc_disclaimer_emergency_limitation_desc_text" msgid="8726152486964822599">"\'Wi‑Fi ခေါ်ဆိုခြင်း\' မှတစ်ဆင့် အရေးပေါ်ဖုန်းခေါ်ခြင်းများကို သင့်ဝန်ဆောင်မှုပေးသူက ပံ့ပိုးမထားပါ။\nအရေးပေါ်ဖုန်းခေါ်ခြင်း ပြုလုပ်ရန် စက်ပစ္စည်းသည် ဆယ်လူလာကွန်ရက်သို့ အလိုအလျောက် ပြောင်းသွားပါမည်။\nဆယ်လူလာကွန်ရက် ရရှိနိုင်သည့် နယ်မြေများတွင်သာ အရေးပေါ်ဖုန်းခေါ်ခြင်းများ ပြုလုပ်နိုင်ပါသည်။"</string>
</resources>
diff --git a/tests/CarDeveloperOptions/res/values-nb/arrays.xml b/tests/CarDeveloperOptions/res/values-nb/arrays.xml
index 04b22b6..1719b05 100644
--- a/tests/CarDeveloperOptions/res/values-nb/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-nb/arrays.xml
@@ -392,8 +392,8 @@
</string-array>
<string-array name="captioning_preset_selector_titles">
<item msgid="326819345272910536">"Bruk appens standardvalg"</item>
- <item msgid="8611890312638868524">"Hvitt på svart"</item>
- <item msgid="5891360837786277638">"Svart på hvitt"</item>
+ <item msgid="8611890312638868524">"Hvit på svart"</item>
+ <item msgid="5891360837786277638">"Svart på hvit"</item>
<item msgid="2798457065945456853">"Gult på svart"</item>
<item msgid="5799049811524553967">"Gult på blått"</item>
<item msgid="3673930830658169860">"Tilpasset"</item>
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"Aldri tillat"</item>
<item msgid="8184570120217958741">"Alltid tillat"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normal"</item>
+ <item msgid="5101233285497327432">"Moderat"</item>
+ <item msgid="1555861583162930714">"Lav"</item>
+ <item msgid="1719683776264798117">"Kritisk"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normal"</item>
+ <item msgid="6107138933849816768">"Moderat"</item>
+ <item msgid="182695359839047859">"Lav"</item>
+ <item msgid="8577246509202964244">"Kritisk"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Vedvarende"</item>
<item msgid="167418068739176448">"Høyeste aktivitet"</item>
@@ -467,7 +477,7 @@
<item msgid="1008268820118852416">"Behandle som uten datamåling"</item>
</string-array>
<string-array name="wifi_privacy_entries">
- <item msgid="6545683814310036454">"Bruk tilfeldig valgt MAC-adresse (standard)"</item>
+ <item msgid="6545683814310036454">"Bruk tilfeldig MAC-adresse (standard)"</item>
<item msgid="214234417308375326">"Bruk enhetens MAC-adresse"</item>
</string-array>
<string-array name="wifi_hidden_entries">
diff --git a/tests/CarDeveloperOptions/res/values-nb/strings.xml b/tests/CarDeveloperOptions/res/values-nb/strings.xml
index 98d8827..675a761 100644
--- a/tests/CarDeveloperOptions/res/values-nb/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-nb/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Gjør teksten på skjermen større eller mindre."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Gjør mindre"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Gjør større"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Eksempeltekst"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Trollmannen fra Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Kapittel 11: Den vidunderlige smaragdbyen Oz"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Profilinformasjon"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Kontoer"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Posisjon"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Bruk posisjon"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Bruk posisjon"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Av"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">På – <xliff:g id="COUNT_1">%1$d</xliff:g> apper har tilgang til posisjonen</item>
@@ -470,7 +469,7 @@
<string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Plassér fingeren på sensoren, og løft den når du kjenner en vibrasjon"</string>
<string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"Løft fingeren og berør igjen"</string>
<string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Løft fingeren gjentatte ganger for å legge til de forskjellige delene av fingeravtrykket ditt"</string>
- <string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"Fingeravtrykk lagt til"</string>
+ <string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"Fingeravtrykket er lagt til"</string>
<string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"Når du ser dette ikonet, kan du bruke fingeravtrykket ditt til å identifisere deg eller godkjenne kjøp"</string>
<string name="security_settings_fingerprint_enroll_enrolling_skip" msgid="1473280156532146933">"Gjør det senere"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_title" msgid="2816424026528101690">"Vil du hoppe over fingeravtrykk-konfig.?"</string>
@@ -488,7 +487,7 @@
<string name="security_settings_fingerprint_enroll_done" msgid="4111289529758845926">"Ferdig"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"Ops, det er ikke sensoren"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"Berør sensoren på baksiden av telefonen. Bruk pekefingeren."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"Registrering er ikke fullført"</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"Registreringen er ikke fullført"</string>
<string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Tidsgrensen for registrering av fingeravtrykk er nådd. Prøv på nytt."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"Registrering av fingeravtrykket mislyktes. Prøv på nytt, eller bruk en annen finger."</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"Legg til ett til"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Slå på Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Bruk Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Bruk Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Innstillinger for Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Sett opp og styr trådløse aksesspunkt"</string>
@@ -847,7 +846,7 @@
<string name="wifi_error" msgid="5605801874484465557">"Feil"</string>
<string name="wifi_sap_no_channel_error" msgid="6881796988574851628">"5 GHz-bånd er ikke tilgjengelig i dette landet"</string>
<string name="wifi_in_airplane_mode" msgid="4729571191578262246">"I flymodus"</string>
- <string name="wifi_notify_open_networks" msgid="4782239203624619655">"Varsel om åpent nettverk"</string>
+ <string name="wifi_notify_open_networks" msgid="4782239203624619655">"Varsel om åpne nettverk"</string>
<string name="wifi_notify_open_networks_summary" msgid="1383681260705466715">"Varsle når et offentlig nettverk av høy kvalitet er tilgjengelig"</string>
<string name="wifi_wakeup" msgid="4963732992164721548">"Slå på Wi‑Fi automatisk"</string>
<string name="wifi_wakeup_summary" msgid="1152699417411690">"Wi‑Fi slås på igjen i nærheten av lagrede nettverk av høy kvalitet, for eksempel hjemmenettverket ditt"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Mobil"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Bruk mobilnettverk hvis Wi-Fi er utilgjengelig"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Bruk Wi-Fi hvis mobilnettverket er utilgjengelig"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Ring via Wi‑Fi. Samtalen avsluttes hvis du mister Wi‑Fi-tilkoblingen."</string>
@@ -1635,7 +1637,7 @@
<string name="sms_change_default_dialog_title" msgid="6301260161969667578">"Vil du bytte SMS-app?"</string>
<string name="sms_change_default_dialog_text" msgid="8275088077930942680">"Vil du bruke <xliff:g id="NEW_APP">%1$s</xliff:g> i stedet for <xliff:g id="CURRENT_APP">%2$s</xliff:g> for SMS?"</string>
<string name="sms_change_default_no_previous_dialog_text" msgid="4680224695080527907">"Vil du bruke <xliff:g id="NEW_APP">%s</xliff:g> som SMS-app?"</string>
- <string name="network_scorer_picker_title" msgid="1691073966560952916">"Nettverksvurdering levert av"</string>
+ <string name="network_scorer_picker_title" msgid="1691073966560952916">"Leverandør av nettverksvurdering"</string>
<string name="network_scorer_picker_none_preference" msgid="6448280557733231737">"Ingen"</string>
<string name="network_scorer_change_active_dialog_title" msgid="4274159562371475090">"Vil du endre Wi-Fi-assistent?"</string>
<string name="network_scorer_change_active_dialog_text" msgid="4264089809189760730">"Vil du bruke <xliff:g id="NEW_APP">%1$s</xliff:g> i stedet for <xliff:g id="CURRENT_APP">%2$s</xliff:g> til å administrere nettverkstilkoblingene?"</string>
@@ -1705,7 +1707,7 @@
<string name="settings_safetylegal_activity_loading" msgid="7680998654145172">"Laster inn …"</string>
<string name="confirm_device_credential_use_alternate_method" msgid="1279869272895739941">"Bruk en annen metode"</string>
<string name="lockpassword_choose_your_screen_lock_header" msgid="6283518876031424798">"Angi skjermlås"</string>
- <string name="lockpassword_choose_your_password_message" msgid="2838273977481046536">"Angi et passord for sikkerheten"</string>
+ <string name="lockpassword_choose_your_password_message" msgid="2838273977481046536">"Angi et passord av hensyn til sikkerheten"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="4921343500484160894">"Angi passord for å bruke fingeravtrykk"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="314870151462139417">"Angi mønster for å bruke fingeravtrykk"</string>
<string name="lockpassword_choose_your_pin_message" msgid="8942598950627277885">"Angi en PIN-kode for sikkerheten"</string>
@@ -1750,7 +1752,7 @@
<string name="lockpattern_change_lock_pin_label" msgid="3435796032210265723">"Endre PIN-kode for opplåsning"</string>
<string name="lockpattern_recording_intro_header" msgid="2262005028838969839">"Tegn et opplåsingsmønster"</string>
<string name="lockpattern_recording_intro_footer" msgid="5426745740754065099">"Trykk menyknappen for hjelp."</string>
- <string name="lockpattern_recording_inprogress" msgid="4060818382176523671">"Slipp opp fingeren når du er ferdig."</string>
+ <string name="lockpattern_recording_inprogress" msgid="4060818382176523671">"Løft fingeren når du er ferdig."</string>
<string name="lockpattern_recording_incorrect_too_short" msgid="6374760294545431845">"Berør minst <xliff:g id="NUMBER">%d</xliff:g> punkter. Prøv på nytt."</string>
<string name="lockpattern_pattern_entered_header" msgid="2108106638322637851">"Mønsteret er registrert"</string>
<string name="lockpattern_need_to_confirm" msgid="4079482507985867389">"Tegn mønsteret på nytt for å bekrefte"</string>
@@ -2087,15 +2089,15 @@
<string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"Fargeinvertering"</string>
<string name="accessibility_display_inversion_preference_subtitle" msgid="69291255322175323">"Kan påvirke ytelsen"</string>
<string name="accessibility_autoclick_preference_title" msgid="9164599088410340405">"Holdetid"</string>
- <string name="accessibility_autoclick_description" msgid="5492414927846407499">"Hvis du bruker en mus, kan du stille musepekeren til å klikke automatisk når den slutter å bevege seg i en bestemt periode."</string>
+ <string name="accessibility_autoclick_description" msgid="5492414927846407499">"Hvis du bruker en mus, kan du stille musepekeren til å klikke automatisk etter at den har stått i ro en viss tid."</string>
<string name="accessibility_autoclick_delay_preference_title" msgid="8303022510942147049">"Forsinkelse før klikk"</string>
<string name="accessibility_vibration_settings_title" msgid="1902649657883159406">"Vibrasjon"</string>
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Varselvibrering"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Ringevibrering"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Berøringsvibrering"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Bruk tjenesten"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Bruk fargekorrigering"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Bruk teksting"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Bruk tjenesten"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Bruk fargekorrigering"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Bruk teksting"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Fortsett"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Høreapparater"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Ingen høreapparater er tilkoblet"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Slå på"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Bruk batterisparing"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Bruk Batterisparing"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Slå på automatisk"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Aldri"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"med <xliff:g id="PERCENT">%1$s</xliff:g> batteri"</string>
@@ -2599,7 +2601,7 @@
<string name="work_mode_label" msgid="6845849194740195757">"Jobbprofil"</string>
<string name="work_mode_on_summary" msgid="1682781113156323592">"Administreres av organisasjonen din"</string>
<string name="work_mode_off_summary" msgid="1688885392211178315">"Apper og varsler er slått av"</string>
- <string name="remove_managed_profile_label" msgid="4625542553784793536">"Fjern arbeidsprofilen"</string>
+ <string name="remove_managed_profile_label" msgid="4625542553784793536">"Fjern jobbprofilen"</string>
<string name="background_data" msgid="8275750862371471171">"Bakgrunnsdata"</string>
<string name="background_data_summary" msgid="799640633948841990">"Apper kan når som helst synkronisere, sende og motta data"</string>
<string name="background_data_dialog_title" msgid="8306650658158895976">"Vil du deaktivere bakgrunnsdata?"</string>
@@ -2792,7 +2794,7 @@
<string name="vpn_always_on_summary" msgid="3639994551631437397">"La enheten være tilkoblet VPN hele tiden"</string>
<string name="vpn_always_on_summary_not_supported" msgid="9077720997795965133">"Støttes ikke av denne appen"</string>
<string name="vpn_always_on_summary_active" msgid="8962619701962239088">"Alltid på er aktiv"</string>
- <string name="vpn_require_connection" msgid="5413746839457797350">"Blokker tilkoblinger uten VPN"</string>
+ <string name="vpn_require_connection" msgid="5413746839457797350">"Blokkér tilkoblinger uten VPN"</string>
<string name="vpn_require_connection_title" msgid="8361434328767853717">"Vil du kreve VPN-tilkobling?"</string>
<string name="vpn_lockdown_summary" msgid="6770030025737770861">"Velg en VPN-profil du vil forbli tilkoblet til. Nettverkstrafikk blir bare tillatt når du er tilkoblet denne VPN-en."</string>
<string name="vpn_lockdown_none" msgid="3789288793603394679">"Ingen"</string>
@@ -2886,7 +2888,7 @@
<string name="user_confirm_remove_self_title" msgid="6739480453680217543">"Vil du slette deg selv?"</string>
<string name="user_confirm_remove_title" msgid="1034498514019462084">"Vil du slette brukeren?"</string>
<string name="user_profile_confirm_remove_title" msgid="6138684743385947063">"Fjerne denne profilen?"</string>
- <string name="work_profile_confirm_remove_title" msgid="3168910958076735800">"Vil du fjerne arbeidsprofilen?"</string>
+ <string name="work_profile_confirm_remove_title" msgid="3168910958076735800">"Fjern jobbprofilen?"</string>
<string name="user_confirm_remove_self_message" product="tablet" msgid="2889456786320157545">"Lagringsplassen og dataene dine blir fjernet fra dette nettbrettet. Denne handlingen kan ikke angres."</string>
<string name="user_confirm_remove_self_message" product="default" msgid="8441729423565705183">"Lagringsplassen og dataene dine blir fjernet fra telefonen. Denne handlingen kan ikke angres."</string>
<string name="user_confirm_remove_message" msgid="5202150470271756013">"Alle apper og data slettes."</string>
@@ -2914,7 +2916,7 @@
<string name="apps_with_restrictions_settings_button" msgid="5065896213467171744">"Utvidelsesinnstillinger for appen"</string>
<string name="nfc_payment_settings_title" msgid="5070077706735415291">"Berøringsbetaling"</string>
<string name="nfc_payment_how_it_works" msgid="7607901964687787177">"Slik fungerer det"</string>
- <string name="nfc_payment_no_apps" msgid="8844440783395420860">"Betal med telefonen din i butikker"</string>
+ <string name="nfc_payment_no_apps" msgid="8844440783395420860">"Betal med telefonen i butikker"</string>
<string name="nfc_payment_default" msgid="7869273092463612271">"Standardapp for betaling"</string>
<string name="nfc_payment_default_not_set" msgid="955804193510335338">"Ikke angitt"</string>
<string name="nfc_payment_app_and_desc" msgid="102312684211458190">"<xliff:g id="APP">%1$s</xliff:g> – <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
@@ -2923,7 +2925,7 @@
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"Unntatt når en annen betalingsapp er åpen"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"På betalingsterminaler med berøringsfunksjonalitet vil du betale med"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"Betaling ved terminaler"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Konfigurer en betalingsapp. Deretter holder du baksiden av telefonen din mot en terminal som har symbolet for kontaktløs betaling."</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Konfigurer en betalingsapp. Deretter holder du baksiden av telefonen mot en terminal som har symbolet for kontaktløs betaling."</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"Skjønner"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"Mr"</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"Angi som foretrukket?"</string>
@@ -3159,8 +3161,8 @@
<string name="emergency_tone_alert" msgid="907868135091891015">"Toner"</string>
<string name="emergency_tone_vibrate" msgid="5020068066905681181">"Vibrasjoner"</string>
<string name="boot_sounds_title" msgid="7583926202411353620">"Lyder ved oppstart"</string>
- <string name="live_caption_title" msgid="7926591158657997051">"Liveteksting"</string>
- <string name="live_caption_summary" msgid="9064771862352393125">"Automatisk teksting av media"</string>
+ <string name="live_caption_title" msgid="7926591158657997051">"Direkteteksting"</string>
+ <string name="live_caption_summary" msgid="9064771862352393125">"Automatisk medieteksting"</string>
<string name="zen_mode_settings_summary_off" msgid="6929319200478424962">"Aldri"</string>
<plurals name="zen_mode_settings_summary_on" formatted="false" msgid="6061723291126091396">
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> er slått på</item>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Når enheten er låst, kan man ikke skrive svar eller annen tekst i varsler"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Standard stavekontroll"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Velg stavekontroll"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Bruk stavekontroll"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Bruk stavekontroll"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Ikke valgt"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(ingen)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"For å frigjøre lagringsplass fjernes sikkerhetskopierte bilder og videoer fra enheten din av lagringsadministratoren."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Fjern bilder og videoer"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Lagringsadministrator"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Bruk lagringsadministrator"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Bruk Lagringsbehandling"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatisk"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manuelle innstillinger"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Frigjør lagringsplass nå"</string>
diff --git a/tests/CarDeveloperOptions/res/values-ne-nokeys/strings.xml b/tests/CarDeveloperOptions/res/values-ne-nokeys/strings.xml
index 782928a..7f158d4 100644
--- a/tests/CarDeveloperOptions/res/values-ne-nokeys/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-ne-nokeys/strings.xml
@@ -16,5 +16,5 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applications_settings_summary" msgid="1051076839604862240">"अनुप्रयोगहरू प्रबन्ध गर्नुहोस्"</string>
+ <string name="applications_settings_summary" msgid="1051076839604862240">"एपहरू प्रबन्ध गर्नुहोस्"</string>
</resources>
diff --git a/tests/CarDeveloperOptions/res/values-ne/arrays.xml b/tests/CarDeveloperOptions/res/values-ne/arrays.xml
index aad8f88..9288081 100644
--- a/tests/CarDeveloperOptions/res/values-ne/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-ne/arrays.xml
@@ -62,8 +62,8 @@
<string-array name="entries_font_size">
<item msgid="2340391964816059553">"सानो"</item>
<item msgid="591935967183159581">"पूर्वनिर्धारित"</item>
- <item msgid="1714184661981538355">"ठूलो"</item>
- <item msgid="6195563047686707484">"सबैभन्दा ठूलो"</item>
+ <item msgid="1714184661981538355">"ठुलो"</item>
+ <item msgid="6195563047686707484">"सबैभन्दा ठुलो"</item>
</string-array>
<string-array name="wifi_status">
<item msgid="1304883790721412351"></item>
@@ -85,7 +85,7 @@
<item msgid="8058143476674427024">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>सँग जडान हुँदै..."</item>
<item msgid="7547609081339573756">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>का साथ प्रमाणीकरण गर्दै..."</item>
<item msgid="5145158315060185414">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>बाट IP ठेगाना प्राप्त गर्दै..."</item>
- <item msgid="3283243151651124831">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>सँग जडित"</item>
+ <item msgid="3283243151651124831">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> मा जोडिएको छ"</item>
<item msgid="6600156231416890902">"निलम्बित"</item>
<item msgid="4133290864821295785">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>बाट विच्छेदन गर्दै..."</item>
<item msgid="3980154971187953257">"जडान विच्छेद भयो"</item>
@@ -135,7 +135,7 @@
<string-array name="usage_stats_display_order_types">
<item msgid="1266031014388516303">"उपयोग समय"</item>
<item msgid="2784401352592276015">"पछिल्लो समय प्रयोग गरिएको"</item>
- <item msgid="249854287216326349">"अनुप्रयोगको नाम"</item>
+ <item msgid="249854287216326349">"एपको नाम"</item>
</string-array>
<string-array name="wifi_eap_entries">
<item msgid="5538816743897530343">"PEAP"</item>
@@ -170,7 +170,7 @@
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"कुनै पनि होइन"</item>
<item msgid="1464741437353223198">"म्यानुअल"</item>
- <item msgid="5793600062487886090">"प्रोक्सी स्वतः समायोजन"</item>
+ <item msgid="5793600062487886090">"प्रोक्सी अटो-कन्फिगुरेसन"</item>
</string-array>
<string-array name="apn_auth_entries">
<item msgid="7099647881902405997">"कुनै पनि होइन"</item>
@@ -237,7 +237,7 @@
<item msgid="3254999273961542982">"SMS पढ्नुहोस्"</item>
<item msgid="7711446453028825171">"SMS लेख्नुहोस्"</item>
<item msgid="6123238544099198034">"SMS प्राप्त गर्नुहोस्"</item>
- <item msgid="838342167431596036">"आपतकालीन SMS प्राप्त गर्नुहोस्"</item>
+ <item msgid="838342167431596036">"आपत्कालीन SMS प्राप्त गर्नुहोस्"</item>
<item msgid="8554432731560956686">"MMS प्राप्त गर्नुहोस्"</item>
<item msgid="7464863464299515059">"WAP push प्राप्त गर्नुहोस्"</item>
<item msgid="310463075729606765">"SMS पठाउनुहोस्"</item>
@@ -256,8 +256,8 @@
<item msgid="7565226799008076833">"मास्टर ध्वनि मात्रा"</item>
<item msgid="5420704980305018295">"वाणी मात्रा"</item>
<item msgid="5797363115508970204">"घन्टी मात्रा"</item>
- <item msgid="8233154098550715999">"मिडियाको आवाजको मात्रा"</item>
- <item msgid="5196715605078153950">"अलार्मको आवाजको मात्रा"</item>
+ <item msgid="8233154098550715999">"मिडियाको भोल्युम"</item>
+ <item msgid="5196715605078153950">"अलार्मको भोल्युम"</item>
<item msgid="394030698764284577">"सूचना मात्रा"</item>
<item msgid="8952898972491680178">"ब्लुटुथ मात्रा"</item>
<item msgid="8506227454543690851">"जागा रहनुहोस्"</item>
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"पृष्ठभूमिमा सञ्चालन गर्नुहोस्"</item>
<item msgid="6423861043647911030">"पहुँचको मात्रा"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"स्थान"</item>
+ <item msgid="6656077694190491067">"स्थान"</item>
+ <item msgid="8790228218278477369">"स्थान"</item>
+ <item msgid="7836406246005211990">"भाइब्रेट गर्नुहोस्"</item>
+ <item msgid="3951439024549922598">"सम्पर्कहरू पढ्नुहोस्"</item>
+ <item msgid="8802152411647068">"सम्पर्कहरू परिमार्जन गर्नुहोस्"</item>
+ <item msgid="229544934599698735">"कल लग पढ्नुहोस्"</item>
+ <item msgid="7396102294405899613">"कल लग परिमार्जन गर्नुहोस्"</item>
+ <item msgid="3597797992398484655">"पात्रो पढ्नुहोस्"</item>
+ <item msgid="2705975774250907343">"पात्रो परिमार्जन गर्नुहोस्"</item>
+ <item msgid="4668747371441932697">"स्थान"</item>
+ <item msgid="1487578921720243646">"सूचना पोस्ट गर्नुहोस्"</item>
+ <item msgid="4636080349724146638">"स्थान"</item>
+ <item msgid="673510900286463926">"कल फोन"</item>
+ <item msgid="542083422784609790">"SMS/MMS पढ्नुहोस्"</item>
+ <item msgid="1033780373029588436">"SMS/MMS लेख्नुहोस्"</item>
+ <item msgid="5647111115517787488">"SMS/MMS प्राप्त गर्नुहोस्"</item>
+ <item msgid="8591105601108455893">"SMS/MMS प्राप्त गर्नुहोस्"</item>
+ <item msgid="7730995008517841903">"SMS/MMS प्राप्त गर्नुहोस्"</item>
+ <item msgid="2613033109026626086">"SMS/MMS प्राप्त गर्नुहोस्"</item>
+ <item msgid="3037159047591081136">"SMS/MMS पठाउनुहोस्"</item>
+ <item msgid="4726682243833913568">"SMS/MMS पढ्नुहोस्"</item>
+ <item msgid="6555678522277865572">"SMS/MMS लेख्नुहोस्"</item>
+ <item msgid="6981734935578130884">"सेटिङ परिमार्जन गर्नुहोस्"</item>
+ <item msgid="8705854389991425629">"शीर्षमा कोर्नुहोस्"</item>
+ <item msgid="5861356020344153651">"सूचनाहरू पहुँच गर्नुहोस्"</item>
+ <item msgid="78432174621628659">"क्यामेरा"</item>
+ <item msgid="3986116419882154794">"अडियो रेकर्ड गर्नुहोस्"</item>
+ <item msgid="4516840825756409490">"अडियो बजाउनुहोस्"</item>
+ <item msgid="6811712502798183957">"क्लिपबोर्ड पढ्नुहोस्"</item>
+ <item msgid="2780369012602289114">"क्लिपबोर्ड परिमार्जन गर्नुहोस्"</item>
+ <item msgid="2331359440170850868">"मिडिया बटनहरू"</item>
+ <item msgid="6133599737122751231">"श्रब्य फोकस"</item>
+ <item msgid="6844485713404805301">"मास्टर ध्वनि मात्रा"</item>
+ <item msgid="1600379420669104929">"वाणीको मात्रा"</item>
+ <item msgid="6296768210470214866">"घन्टीको भोल्युम"</item>
+ <item msgid="510690696071629241">"मिडियाको भोल्युम"</item>
+ <item msgid="406861638631430109">"अलार्मको भोल्युम"</item>
+ <item msgid="4715864795872233884">"ध्वनी सूचना"</item>
+ <item msgid="2311478519251301183">"ब्लुटुथ भोल्युम"</item>
+ <item msgid="5133991377896747027">"जागा रहनुहोस्"</item>
+ <item msgid="2464189519136248621">"स्थान"</item>
+ <item msgid="2062677934050803037">"स्थान"</item>
+ <item msgid="1735171933192715957">"तथ्याङ्क उपयोग प्राप्त गर्नुहोस्"</item>
+ <item msgid="1014093788778383554">"माइक्रोफोनको आवाज बन्द्/खुला गर्नुहोस्"</item>
+ <item msgid="4199297950608622850">"टोस्ट देखाउनुहोस्"</item>
+ <item msgid="2527962435313398821">"मिडिया प्रोजेक्ट गर्नुहोस्"</item>
+ <item msgid="5117506254221861929">"VPN सक्रिय पार्नुहोस्"</item>
+ <item msgid="8291198322681891160">"वालपेपर लेख्नुहोस्"</item>
+ <item msgid="7106921284621230961">"संरचनालाई मद्दत गर्नुहोस्"</item>
+ <item msgid="4496533640894624799">"स्क्रिनसटलाई मद्दत गर्नुहोस्"</item>
+ <item msgid="2598847264853993611">"फोन अवस्था पढ्नुहोस्"</item>
+ <item msgid="9215610846802973353">"भ्वाइसमेल थप्नुहोस्"</item>
+ <item msgid="9186411956086478261">"SIP प्रयोग गर्नुहोस्"</item>
+ <item msgid="6884763100104539558">"बहिर्गमन कललाई प्रशोधन गर्नुहोस्"</item>
+ <item msgid="125513972170580692">"फिंगरप्रिन्ट"</item>
+ <item msgid="2556071024281275619">"शारीरिक सेन्सर"</item>
+ <item msgid="617168514928339387">"सेल प्रसारणहरू पढ्नुहोस्"</item>
+ <item msgid="7134693570516523585">"स्थानको नक्कल गर्नुहोस्"</item>
+ <item msgid="7224489175375229399">"भण्डारण पढ्नुहोस्"</item>
+ <item msgid="8472735063903258202">"भण्डारण लेख्नहोस्"</item>
+ <item msgid="4069276819909595110">"स्क्रिन सक्रिय गर्नुहोस्"</item>
+ <item msgid="1228338896751121025">"खाताहरू प्राप्त गर्नुहोस्"</item>
+ <item msgid="3181581793459233672">"पृष्ठभूमिमा सञ्चालन गर्नुहोस्"</item>
+ <item msgid="2340936043025374076">"पहुँचको मात्रा"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"छोटो"</item>
<item msgid="4816511817309094890">"सामान्य"</item>
@@ -307,8 +373,8 @@
<item msgid="1680223634161592855">"ज्यादै साना"</item>
<item msgid="5091603983404027034">"सानो"</item>
<item msgid="176844712416932112">"सामान्य"</item>
- <item msgid="2784236342175159295">"ठूलो"</item>
- <item msgid="218913203203160606">"ज्यादै ठूलो"</item>
+ <item msgid="2784236342175159295">"ठुलो"</item>
+ <item msgid="218913203203160606">"ज्यादै ठुलो"</item>
</string-array>
<string-array name="captioning_edge_type_selector_titles">
<item msgid="3865198759294188069">"पूर्वनिर्धारित"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"कहिल्यै पनि अनुमति नदिनुहोस्"</item>
<item msgid="8184570120217958741">"सधैँ अनुमति दिनुहोस्"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"मेमोरीको स्थिति सामान्य छ"</item>
+ <item msgid="5101233285497327432">"मध्यम"</item>
+ <item msgid="1555861583162930714">"न्यून"</item>
+ <item msgid="1719683776264798117">"चिन्ताजनक"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"सामान्य"</item>
+ <item msgid="6107138933849816768">"मध्यम"</item>
+ <item msgid="182695359839047859">"न्यून"</item>
+ <item msgid="8577246509202964244">"मेमोरी अत्यन्त कम छ"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"लगातार"</item>
<item msgid="167418068739176448">"उच्च गतिविधि"</item>
@@ -378,16 +454,16 @@
</string-array>
<string-array name="color_picker">
<item msgid="3151827842194201728">"टिल"</item>
- <item msgid="3228505970082457852">"नीलो"</item>
+ <item msgid="3228505970082457852">"निलो"</item>
<item msgid="6590260735734795647">"इन्डिगो"</item>
<item msgid="3521763377357218577">"बैजनी"</item>
<item msgid="5932337981182999919">"गुलाबी"</item>
<item msgid="5642914536624000094">"रातो"</item>
</string-array>
<string-array name="automatic_storage_management_days">
- <item msgid="2860293514533486236">"३० दिनभन्दा बढी पुरानो"</item>
- <item msgid="8699273238891265610">"६० दिनभन्दा बढी पुरानो"</item>
- <item msgid="8346279419423837266">"९० दिनभन्दा बढी पुरानो"</item>
+ <item msgid="2860293514533486236">"कम्तीमा ३० दिन पुरानो"</item>
+ <item msgid="8699273238891265610">"कम्तीमा ६० दिन पुरानो"</item>
+ <item msgid="8346279419423837266">"कम्तीमा ९० दिन पुरानो"</item>
</string-array>
<!-- no translation found for swipe_direction_titles:0 (6583090603341402282) -->
<!-- no translation found for swipe_direction_titles:1 (4965730704403236310) -->
@@ -398,7 +474,7 @@
<string-array name="wifi_metered_entries">
<item msgid="4329206416008519163">"स्वतः पत्ता लगाउनुहोस्"</item>
<item msgid="773943026484148895">"शुल्क लाग्ने वाइफाइका रूपमा लिनुहोस्"</item>
- <item msgid="1008268820118852416">"मिटर नगरिएको रूपमा व्यवहार गर्नुहोस्"</item>
+ <item msgid="1008268820118852416">"नि:शुल्क वाइफाइको रूपमा व्यवहार गर्नुहोस्"</item>
</string-array>
<string-array name="wifi_privacy_entries">
<item msgid="6545683814310036454">"क्रमरहित MAC प्रयोग गर्नुहोस् (पूर्वनिर्धारित)"</item>
diff --git a/tests/CarDeveloperOptions/res/values-ne/strings.xml b/tests/CarDeveloperOptions/res/values-ne/strings.xml
index 5764cb0..b7762a8 100644
--- a/tests/CarDeveloperOptions/res/values-ne/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-ne/strings.xml
@@ -56,7 +56,7 @@
<string name="radio_info_ims_reg_status" msgid="4771711884059371514">"IMS को दर्ता: <xliff:g id="STATUS">%1$s</xliff:g>\nभ्वाइस ओभर LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nभ्वाइस ओभर WiFi: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nभिडियो कलिङ: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT को इन्टरफेस: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
<string name="radioInfo_service_in" msgid="1297020186765943857">"सेवामा"</string>
<string name="radioInfo_service_out" msgid="8460363463722476510">"सेवा उपलब्ध छैन"</string>
- <string name="radioInfo_service_emergency" msgid="7674989004735662599">"आपतकालीन कल मात्र"</string>
+ <string name="radioInfo_service_emergency" msgid="7674989004735662599">"आपत्कालीन कल मात्र"</string>
<string name="radioInfo_service_off" msgid="1873939869994136791">"रेडियो निष्क्रिय छ"</string>
<string name="radioInfo_roaming_in" msgid="7059350234710947417">"रोमिङ"</string>
<string name="radioInfo_roaming_not" msgid="7733269160603599835">"रोमिङमा छैन"</string>
@@ -80,11 +80,10 @@
<string name="sdcard_format" product="default" msgid="4831611387627849108">"SD कार्ड मेटाउनुहोस्"</string>
<string name="preview_pager_content_description" msgid="5731599395893090038">"पूर्वावलोकन"</string>
<string name="preview_page_indicator_content_description" msgid="3192955679074998362">"पूर्वावलोकन, <xliff:g id="NUM_PAGES">%2$d</xliff:g> मध्ये पृष्ठ <xliff:g id="CURRENT_PAGE">%1$d</xliff:g>"</string>
- <string name="font_size_summary" msgid="9120023206321191067">"स्क्रिनमा भएको पाठलाई अझै सानो वा ठूलो बनाउनुहोस्।"</string>
+ <string name="font_size_summary" msgid="9120023206321191067">"स्क्रिनमा भएको पाठलाई अझै सानो वा ठुलो बनाउनुहोस्।"</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"अझ सानो बनाउनुहोस्"</string>
- <string name="font_size_make_larger_desc" msgid="2907824418252785875">"अझ ठूलो बनाउनुहोस्"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_make_larger_desc" msgid="2907824418252785875">"अझ ठुलो बनाउनुहोस्"</string>
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"नमूना पाठ"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"दि वन्डरफुल विजार्ड अफ ओज"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"अध्याय ११: दि वन्डरफुल एमरल्ड सिटी अफ ओज"</string>
@@ -114,7 +113,7 @@
<string name="bluetooth_disconnect_all_profiles" product="device" msgid="4707569949253450208">"तपाईंको यन्त्र <xliff:g id="DEVICE_NAME">%1$s</xliff:g> बाट विच्छेद हुनेछ।"</string>
<string name="bluetooth_disconnect_dialog_ok" msgid="4183522987246110145">"विच्छेद गर्नुहोस्"</string>
<string name="bluetooth_empty_list_user_restricted" msgid="3616298363281495777">"तपाईं सँग ब्लुटुथ सेटिङहरू परिवर्तन गर्न अनुमति छैन।"</string>
- <string name="bluetooth_pairing_pref_title" msgid="2904954138013884029">"नयाँ यन्त्रलाई जोडा बनाउनुहोस्"</string>
+ <string name="bluetooth_pairing_pref_title" msgid="2904954138013884029">"नयाँ यन्त्रको जोडा बनाउनुहोस्"</string>
<string name="bluetooth_is_visible_message" msgid="6341088682252805612">"ब्लुटुथ सेटिङहरू खुला हुँदा <xliff:g id="DEVICE_NAME">%1$s</xliff:g> लाई नजिकैका उपकरणहरू देख्न सक्नेछन्।"</string>
<string name="bluetooth_footer_mac_message" product="default" msgid="335341476746836260">"फोनको ब्लुटुथ ठेगाना: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_footer_mac_message" product="tablet" msgid="6033609611245782463">"ट्याब्लेटको ब्लुटुथ ठेगाना: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
@@ -128,28 +127,28 @@
<string name="bluetooth_notif_title" msgid="5090288898529286011">"जोडी पार्ने अनुरोध"</string>
<string name="bluetooth_notif_message" msgid="6612367890895077938">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>सँग जोड्न ट्याप गर्नुहोस्।"</string>
<string name="bluetooth_show_received_files" msgid="5060846395852236652">"प्राप्त गरिएका फाइलहरू"</string>
- <string name="bluetooth_show_files_received_via_bluetooth" msgid="1699095577431389560">"ब्लुटुथमार्फत फाइलहरू प्राप्त गरियो"</string>
+ <string name="bluetooth_show_files_received_via_bluetooth" msgid="1699095577431389560">"ब्लुटुथमार्फत प्राप्त फाइलहरू"</string>
<string name="device_picker" msgid="8345264486071697705">"ब्लुटुथ उपकरण छान्नुहोस्"</string>
<string name="bluetooth_ask_enablement" msgid="8716802066127746062">"<xliff:g id="APP_NAME">%1$s</xliff:g> ब्लुटुथ सक्रिय गर्न चाहन्छ"</string>
<string name="bluetooth_ask_disablement" msgid="7125319551097350783">"<xliff:g id="APP_NAME">%1$s</xliff:g> ब्लुटुथ निष्क्रिय पार्न चाहन्छ"</string>
- <string name="bluetooth_ask_enablement_no_name" msgid="6105893027185475233">"एउटा अनुप्रयोग ब्लुटुथ सक्रिय गर्न चाहन्छ"</string>
- <string name="bluetooth_ask_disablement_no_name" msgid="8648888502291681310">"एउटा अनुप्रयोग ब्लुटुथ निष्क्रिय पार्न चाहन्छ"</string>
+ <string name="bluetooth_ask_enablement_no_name" msgid="6105893027185475233">"एउटा एप ब्लुटुथ सक्रिय गर्न चाहन्छ"</string>
+ <string name="bluetooth_ask_disablement_no_name" msgid="8648888502291681310">"एउटा एप ब्लुटुथ निष्क्रिय पार्न चाहन्छ"</string>
<string name="bluetooth_ask_discovery" product="tablet" msgid="6871595755186170115">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="TIMEOUT">%2$d</xliff:g> सेकेन्डसम्म अन्य ब्लुटुथ यन्त्रहरूले तपाईँको ट्याब्लेट देख्न सक्ने बनाउन चाहन्छ।"</string>
<string name="bluetooth_ask_discovery" product="default" msgid="3388041479101348095">"<xliff:g id="APP_NAME">%1$s</xliff:g> <xliff:g id="TIMEOUT">%2$d</xliff:g> सेकेन्डसम्म अन्य ब्लुटुथ यन्त्रहरूले तपाईँको फोन देख्न सक्ने बनाउन चाहन्छ।"</string>
- <string name="bluetooth_ask_discovery_no_name" product="tablet" msgid="1472358802231150345">"एउटा अनुप्रयोग <xliff:g id="TIMEOUT">%1$d</xliff:g> सेकेन्डसम्म अन्य ब्लुटुथ यन्त्रहरूले तपाईँको ट्याब्लेट देख्न सक्ने बनाउन चाहन्छ।"</string>
- <string name="bluetooth_ask_discovery_no_name" product="default" msgid="6195796094297507404">"एउटा अनुप्रयोग <xliff:g id="TIMEOUT">%1$d</xliff:g> सेकेन्डसम्म अन्य ब्लुटुथ यन्त्रहरूले तपाईँको फोन देख्न सक्ने बनाउन चाहन्छ।"</string>
+ <string name="bluetooth_ask_discovery_no_name" product="tablet" msgid="1472358802231150345">"एउटा एप <xliff:g id="TIMEOUT">%1$d</xliff:g> सेकेन्डसम्म अन्य ब्लुटुथ यन्त्रहरूले तपाईँको ट्याब्लेट देख्न सक्ने बनाउन चाहन्छ।"</string>
+ <string name="bluetooth_ask_discovery_no_name" product="default" msgid="6195796094297507404">"एउटा एप <xliff:g id="TIMEOUT">%1$d</xliff:g> सेकेन्डसम्म अन्य ब्लुटुथ यन्त्रहरूले तपाईँको फोन देख्न सक्ने बनाउन चाहन्छ।"</string>
<string name="bluetooth_ask_lasting_discovery" product="tablet" msgid="2702942027812132427">"<xliff:g id="APP_NAME">%1$s</xliff:g> अन्य ब्लुटुथ यन्त्रहरूले तपाईंको ट्याब्लेट देख्न सक्ने बनाउन चाहन्छ। तपाईं पछि ब्लुटुथ सम्बन्धी सेटिङहरूमा गई यसलाई परिवर्तन गर्न सक्नुहुन्छ।"</string>
<string name="bluetooth_ask_lasting_discovery" product="default" msgid="7796723473397303412">"<xliff:g id="APP_NAME">%1$s</xliff:g> अन्य ब्लुटुथ यन्त्रहरूले तपाईंको फोन देख्न सक्ने बनाउन चाहन्छ। तपाईं पछि ब्लुटुथ सम्बन्धी सेटिङहरूमा गई यसलाई परिवर्तन गर्न सक्नुहुन्छ।"</string>
- <string name="bluetooth_ask_lasting_discovery_no_name" product="tablet" msgid="5961921359655434504">"एउटा अनुप्रयोग अन्य ब्लुटुथ यन्त्रहरूले तपाईंको ट्याब्लेट देख्न सक्ने बनाउन चाहन्छ। तपाईं पछि ब्लुटुथ सम्बन्धी सेटिङहरूमा गई यसलाई परिवर्तन गर्न सक्नुहुन्छ।"</string>
- <string name="bluetooth_ask_lasting_discovery_no_name" product="default" msgid="3585910858758443872">"एउटा अनुप्रयोग अन्य ब्लुटुथ यन्त्रहरूले तपाईंको फोन देख्न सक्ने बनाउन चाहन्छ। तपाईं पछि ब्लुटुथ सम्बन्धी सेटिङहरूमा गई यसलाई परिवर्तन गर्न सक्नुहुन्छ।"</string>
+ <string name="bluetooth_ask_lasting_discovery_no_name" product="tablet" msgid="5961921359655434504">"एउटा एप अन्य ब्लुटुथ यन्त्रहरूले तपाईंको ट्याब्लेट देख्न सक्ने बनाउन चाहन्छ। तपाईं पछि ब्लुटुथ सम्बन्धी सेटिङहरूमा गई यसलाई परिवर्तन गर्न सक्नुहुन्छ।"</string>
+ <string name="bluetooth_ask_lasting_discovery_no_name" product="default" msgid="3585910858758443872">"एउटा एप अन्य ब्लुटुथ यन्त्रहरूले तपाईंको फोन देख्न सक्ने बनाउन चाहन्छ। तपाईं पछि ब्लुटुथ सम्बन्धी सेटिङहरूमा गई यसलाई परिवर्तन गर्न सक्नुहुन्छ।"</string>
<string name="bluetooth_ask_enablement_and_discovery" product="tablet" msgid="5676466923424941153">"<xliff:g id="APP_NAME">%1$s</xliff:g> ब्लुटुथ सक्रिय गर्न र <xliff:g id="TIMEOUT">%2$d</xliff:g> सेकेन्डसम्म अन्य यन्त्रहरूले तपाईँको ट्याब्लेट देख्न सक्ने बनाउन चाहन्छ।"</string>
<string name="bluetooth_ask_enablement_and_discovery" product="default" msgid="507088376226791063">"<xliff:g id="APP_NAME">%1$s</xliff:g> ब्लुटुथ सक्रिय गर्न र <xliff:g id="TIMEOUT">%2$d</xliff:g> सेकेन्डसम्म अन्य यन्त्रहरूले तपाईँको फोन देख्न सक्ने बनाउन चाहन्छ।"</string>
- <string name="bluetooth_ask_enablement_and_discovery_no_name" product="tablet" msgid="1164681893121736219">"एउटा अनुप्रयोग ब्लुटुथ सक्रिय गर्न र <xliff:g id="TIMEOUT">%1$d</xliff:g> सेकेन्डसम्म अन्य यन्त्रहरूले तपाईँको ट्याब्लेट देख्न सक्ने बनाउन चाहन्छ।"</string>
- <string name="bluetooth_ask_enablement_and_discovery_no_name" product="default" msgid="2542247690119921188">"एउटा अनुप्रयोग ब्लुटुथ सक्रिय गर्न र <xliff:g id="TIMEOUT">%1$d</xliff:g> सेकेन्डसम्म अन्य यन्त्रहरूले तपाईँको फोन देख्न सक्ने बनाउन चाहन्छ।"</string>
+ <string name="bluetooth_ask_enablement_and_discovery_no_name" product="tablet" msgid="1164681893121736219">"एउटा एप ब्लुटुथ सक्रिय गर्न र <xliff:g id="TIMEOUT">%1$d</xliff:g> सेकेन्डसम्म अन्य यन्त्रहरूले तपाईँको ट्याब्लेट देख्न सक्ने बनाउन चाहन्छ।"</string>
+ <string name="bluetooth_ask_enablement_and_discovery_no_name" product="default" msgid="2542247690119921188">"एउटा एप ब्लुटुथ सक्रिय गर्न र <xliff:g id="TIMEOUT">%1$d</xliff:g> सेकेन्डसम्म अन्य यन्त्रहरूले तपाईँको फोन देख्न सक्ने बनाउन चाहन्छ।"</string>
<string name="bluetooth_ask_enablement_and_lasting_discovery" product="tablet" msgid="7118362102769177771">"<xliff:g id="APP_NAME">%1$s</xliff:g> ब्लुटुथ सक्रिय गर्न र अन्य यन्त्रहरूले तपाईंको ट्याब्लेट देख्न सक्ने बनाउन चाहन्छ। तपाईं पछि ब्लुटुथ सम्बन्धी सेटिङहरूमा गई यसलाई परिवर्तन गर्न सक्नुहुन्छ।"</string>
<string name="bluetooth_ask_enablement_and_lasting_discovery" product="default" msgid="2577488464813970727">"<xliff:g id="APP_NAME">%1$s</xliff:g> ब्लुटुथ सक्रिय गर्न र अन्य यन्त्रहरूले तपाईंको फोन देख्न सक्ने बनाउन चाहन्छ। तपाईं पछि ब्लुटुथ सम्बन्धी सेटिङहरूमा गई यसलाई परिवर्तन गर्न सक्नुहुन्छ।"</string>
- <string name="bluetooth_ask_enablement_and_lasting_discovery_no_name" product="tablet" msgid="7083038132794842691">"एउटा अनुप्रयोग ब्लुटुथ सक्रिय गर्न र अन्य यन्त्रहरूले तपाईंको ट्याब्लेट देख्न सक्ने बनाउन चाहन्छ। तपाईं पछि ब्लुटुथ सम्बन्धी सेटिङहरूमा गई यसलाई परिवर्तन गर्न सक्नुहुन्छ।"</string>
- <string name="bluetooth_ask_enablement_and_lasting_discovery_no_name" product="default" msgid="3541668604020109525">"एउटा अनुप्रयोग ब्लुटुथ सक्रिय गर्न र अन्य यन्त्रहरूले तपाईंको फोन देख्न सक्ने बनाउन चाहन्छ। तपाईं पछि ब्लुटुथ सम्बन्धी सेटिङहरूमा गई यसलाई परिवर्तन गर्न सक्नुहुन्छ।"</string>
+ <string name="bluetooth_ask_enablement_and_lasting_discovery_no_name" product="tablet" msgid="7083038132794842691">"एउटा एप ब्लुटुथ सक्रिय गर्न र अन्य यन्त्रहरूले तपाईंको ट्याब्लेट देख्न सक्ने बनाउन चाहन्छ। तपाईं पछि ब्लुटुथ सम्बन्धी सेटिङहरूमा गई यसलाई परिवर्तन गर्न सक्नुहुन्छ।"</string>
+ <string name="bluetooth_ask_enablement_and_lasting_discovery_no_name" product="default" msgid="3541668604020109525">"एउटा एप ब्लुटुथ सक्रिय गर्न र अन्य यन्त्रहरूले तपाईंको फोन देख्न सक्ने बनाउन चाहन्छ। तपाईं पछि ब्लुटुथ सम्बन्धी सेटिङहरूमा गई यसलाई परिवर्तन गर्न सक्नुहुन्छ।"</string>
<string name="bluetooth_turning_on" msgid="6935183036449748493">"ब्लुटुथ खुल्दै..."</string>
<string name="bluetooth_turning_off" msgid="9214026723789756620">"ब्लुटुथ बन्द हुँदैछ..."</string>
<string name="bluetooth_connection_permission_request" msgid="2382506002340643398">"ब्लुटुथ जडान अनुरोध"</string>
@@ -166,7 +165,7 @@
<string name="bluetooth_device_name_summary" msgid="8661066392056595005">"अन्य यन्त्रहरूमा <xliff:g id="DEVICE_NAME">^1</xliff:g> को रूपमा देखिन्छ"</string>
<string name="bluetooth_off_footer" msgid="7658444560543730571">"अन्य यन्त्रहरूमा जडान गर्न ब्लुटुथ सक्रिय गर्नुहोस्।"</string>
<string name="bluetooth_paired_device_title" msgid="8361860197780425286">"तपाईंका यन्त्रहरू"</string>
- <string name="bluetooth_pairing_page_title" msgid="9053463656712597709">"नयाँ यन्त्रलाई जोडा बनाउनुहोस्"</string>
+ <string name="bluetooth_pairing_page_title" msgid="9053463656712597709">"नयाँ यन्त्रको जोडा बनाउनुहोस्"</string>
<string name="bluetooth_pref_summary" product="tablet" msgid="3601662966604648212">"आफ्नो ट्याब्लेटलाई वरपरका ब्लुटुथ यन्त्रहरूसँग सञ्चार गर्न दिनुहोस्"</string>
<string name="bluetooth_pref_summary" product="device" msgid="2286727776570956969">"आफ्नो यन्त्रलाई वरपरका ब्लुटुथ यन्त्रहरूसँग सञ्चार गर्न दिनुहोस्"</string>
<string name="bluetooth_pref_summary" product="default" msgid="863659221858781186">"आफ्नो फोनलाई वरपरका ब्लुटुथ यन्त्रहरूसँग सञ्चार गर्न दिनुहोस्"</string>
@@ -180,7 +179,7 @@
<string name="connected_device_connected_title" msgid="6255107326608785482">"हाल जडान अवस्थामा छ"</string>
<string name="connected_device_saved_title" msgid="8270136893488475163">"सुरक्षित गरिएका यन्त्रहरू"</string>
<string name="connected_device_add_device_summary" msgid="7960491471270158891">"जोडा बनाउनका लागि ब्लुटुथ सक्रिय हुने छ"</string>
- <string name="connected_device_connections_title" msgid="9205000271382018428">"जडानसम्बन्धी प्राथमिकताहरू"</string>
+ <string name="connected_device_connections_title" msgid="9205000271382018428">"कनेक्सनका प्राथमिकताहरू"</string>
<string name="connected_device_previously_connected_title" msgid="225918223397410428">"यसअघि जडान भएका यन्त्रहरू"</string>
<string name="connected_device_previously_connected_screen_title" msgid="2018789662358162716">"यसअघि जडान भएका यन्त्रहरू"</string>
<string name="connected_device_bluetooth_turned_on_toast" msgid="4652326177920814476">"ब्लुटुथ सक्रिय गरियो"</string>
@@ -208,7 +207,7 @@
<string name="proxy_error_empty_port" msgid="8034561724923076215">"तपाईँले पोर्टक्षेत्र पूरा गर्नु जरुरी छ।"</string>
<string name="proxy_error_empty_host_set_port" msgid="8471455809508588255">"यदि होस्ट फिल्ड खाली छ भने पोर्ट फिल्ड पनि खाली हुनु पर्छ।"</string>
<string name="proxy_error_invalid_port" msgid="4046559920586100637">"तपाईंले टाइप गर्नुभएको पोर्ट मान्य छैन।"</string>
- <string name="proxy_warning_limited_support" msgid="9026539134219095768">"HTTP प्रोक्सी ब्राउजरद्वारा प्रयोग गरिन्छ तर अन्य अनुप्रयोगहरूद्वारा प्रयोग गर्न नसकिने पनि हुन सक्छ।"</string>
+ <string name="proxy_warning_limited_support" msgid="9026539134219095768">"ब्राउजरले HTTP प्रोक्सी प्रयोग गर्छ तर अन्य अनुप्रयोगले यसको प्रयोग नगर्न पनि सक्छन्।"</string>
<string name="proxy_url_title" msgid="882042361706435904">"PAC URL: "</string>
<string name="radio_info_dl_kbps" msgid="2903778264453410272">"DL ब्यान्डविथ (kbps):"</string>
<string name="radio_info_ul_kbps" msgid="3802245899811732716">"UL व्यान्डविथ (kbps):"</string>
@@ -238,7 +237,7 @@
<string name="radio_info_http_client_test" msgid="781411599778629953">"HTTP क्लाइन्टको परीक्षण:"</string>
<string name="ping_test_label" msgid="4759194831308897624">"पिङ सम्बन्धी परीक्षण सञ्चालन गर्नुहोस्"</string>
<string name="radio_info_smsc_label" msgid="4561160340649588034">"SMSC:"</string>
- <string name="radio_info_smsc_update_label" msgid="3992739670219389246">"अद्यावधिक गर्नुहोस्"</string>
+ <string name="radio_info_smsc_update_label" msgid="3992739670219389246">"अपडेट गर्नुहोस्"</string>
<string name="radio_info_smsc_refresh_label" msgid="5343925292858337909">"पुनःताजा गर्नुहोस्"</string>
<string name="radio_info_toggle_dns_check_label" msgid="3058615074503857400">"DNS को जाँचलाई टगल गर्नुहोस्"</string>
<string name="oem_radio_info_label" msgid="8679815523111164378">"OEM-विशिष्ट जानकारी/सेटिङहरू"</string>
@@ -248,13 +247,13 @@
<string name="band_mode_failed" msgid="8350123391471974137">"असफल"</string>
<string name="band_mode_succeeded" msgid="5516613616395402809">"सफलता"</string>
<string name="sdcard_changes_instructions" msgid="4138217393448114001">"जब USB तार पुन|जडित हुन्छ तब परिवर्तनहरू प्रभावकारी हुन्छन्।"</string>
- <string name="sdcard_settings_screen_mass_storage_text" msgid="7486030250999007641">"USB ठूलो भण्डारण सक्रिय गर्नुहोस्"</string>
+ <string name="sdcard_settings_screen_mass_storage_text" msgid="7486030250999007641">"USB ठुलो भण्डारण सक्रिय गर्नुहोस्"</string>
<string name="sdcard_settings_total_bytes_label" msgid="6461741874400909157">"कूल बाइट्स:"</string>
<string name="sdcard_settings_not_present_status" product="nosdcard" msgid="5419085128792417589">"USB भण्डारण माउन्ट गरिएको छैन।"</string>
<string name="sdcard_settings_not_present_status" product="default" msgid="5831286239151349794">"कुनै SD कार्ड छैन।"</string>
<string name="sdcard_settings_available_bytes_label" msgid="2392868635606041278">"उपलब्ध बाइटहरू:"</string>
- <string name="sdcard_settings_mass_storage_status" product="nosdcard" msgid="5888349723543445382">"USB भण्डारण एउटा ठूलो भण्डारण उपकरणको रूपमा प्रयोग भएको छ।"</string>
- <string name="sdcard_settings_mass_storage_status" product="default" msgid="637014061735266364">"SD कार्डलाई एउटा ठूलो भण्डारण उपकरणको रूपमा प्रयोग गरिरहिएको छ।"</string>
+ <string name="sdcard_settings_mass_storage_status" product="nosdcard" msgid="5888349723543445382">"USB भण्डारण एउटा ठुलो भण्डारण उपकरणको रूपमा प्रयोग भएको छ।"</string>
+ <string name="sdcard_settings_mass_storage_status" product="default" msgid="637014061735266364">"SD कार्डलाई एउटा ठुलो भण्डारण उपकरणको रूपमा प्रयोग गरिरहिएको छ।"</string>
<string name="sdcard_settings_unmounted_status" product="nosdcard" msgid="1489916516292644696">"अब USB भण्डारण मेटाउन सुरक्षित छ।"</string>
<string name="sdcard_settings_unmounted_status" product="default" msgid="6250598657624241686">"अब SD कार्ड हटाउन सुरक्षित छ।"</string>
<string name="sdcard_settings_bad_removal_status" product="nosdcard" msgid="4694941967864756404">"अझै प्रयोग भइरहेको बेलामा USB भण्डारण हटाइएयो।"</string>
@@ -276,7 +275,7 @@
<string name="dlg_remove_locales_message" msgid="5179370688876343176">"पाठ अर्को भाषामा प्रदर्शन हुनेछ।"</string>
<string name="dlg_remove_locales_error_title" msgid="9090578326002163975">"सबै भाषाहरूलाई हटाउन सक्दैन"</string>
<string name="dlg_remove_locales_error_message" msgid="6799897638891903618">"कम्तीमा एउटा रुचाइएको भाषालाई राख्नुहोस्"</string>
- <string name="locale_not_translated" msgid="7943669576006420058">"केही अनुप्रयोगहरूमा उपलब्ध नहुन सक्छ"</string>
+ <string name="locale_not_translated" msgid="7943669576006420058">"केही एपहरूमा उपलब्ध नहुन सक्छ"</string>
<string name="action_drag_label_move_up" msgid="2074064283966078352">"माथि सार्नुहोस्"</string>
<string name="action_drag_label_move_down" msgid="1367989732445492291">"तल सार्नुहोस्"</string>
<string name="action_drag_label_move_top" msgid="2033098833739345957">"माथिल्लो भागमा सार्नुहोस्"</string>
@@ -296,7 +295,7 @@
<string name="save" msgid="3418211178410498517">"सुरक्षित गर्नुहोस्"</string>
<string name="done" msgid="5143229467535372339">"सम्पन्न भयो"</string>
<string name="apply" msgid="951230399613164126">"लागू गर्नुहोस्"</string>
- <string name="share" msgid="3567029787293158575">"आदान प्रदान गर्नुहोस्"</string>
+ <string name="share" msgid="3567029787293158575">"सेयर गर्नुहोस्"</string>
<string name="add" msgid="903114118076816060">"थप्नुहोस्"</string>
<string name="settings_label" msgid="7263237773415875813">"सेटिङहरू"</string>
<string name="settings_label_launcher" msgid="500627679902923496">"सेटिङहरू"</string>
@@ -365,14 +364,14 @@
<string name="owner_info_settings_status" msgid="8049975536717685126">"<xliff:g id="COUNT_0">%1$d</xliff:g> / <xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
<string name="owner_info_settings_edit_text_hint" msgid="2250029417257939706">"उदाहरण, Joe को Android।"</string>
<string name="user_info_settings_title" msgid="1125111518759995748">"प्रयोगकर्ता जानकारी"</string>
- <string name="show_profile_info_on_lockscreen_label" msgid="5204282771893683026">"लक स्क्रिनमा प्रोफाइल जानकारी देखाउनुहोस्"</string>
- <string name="profile_info_settings_title" msgid="4855892878512562551">"प्रोफाइल जानकारी"</string>
+ <string name="show_profile_info_on_lockscreen_label" msgid="5204282771893683026">"लक स्क्रिनमा प्रोफाइलको जानकारी देखाउनुहोस्"</string>
+ <string name="profile_info_settings_title" msgid="4855892878512562551">"प्रोफाइलको जानकारी"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"खाताहरू"</string>
<string name="location_settings_title" msgid="2707201457572301030">"स्थान"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"स्थान प्रयोग गर्नुहोस्"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"स्थानसम्बन्धी सेवा प्रयोग गर्नुहोस्"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"निष्क्रिय"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
- <item quantity="other">सक्रिय - <xliff:g id="COUNT_1">%1$d</xliff:g> अनुप्रयोगहरूले स्थानमाथि पहुँच राख्न सक्छन्</item>
+ <item quantity="other">सक्रिय - <xliff:g id="COUNT_1">%1$d</xliff:g> एपहरूले स्थानमाथि पहुँच राख्न सक्छन्</item>
<item quantity="one">सक्रिय - <xliff:g id="COUNT_0">%1$d</xliff:g> अनुप्रयोगले स्थानमाथि पहुँच राख्न सक्छ</item>
</plurals>
<string name="location_settings_loading_app_permission_stats" msgid="7818169326621327628">"लोड गर्दै…"</string>
@@ -402,16 +401,16 @@
<string name="security_settings_face_enroll_introduction_cancel" msgid="4190924649721437238">"रद्द गर्नुहोस्"</string>
<string name="security_settings_face_enroll_introduction_title" msgid="6073249653318265486">"आफ्नो अनुहारमार्फत अनलक गर्नु…"</string>
<string name="security_settings_face_enroll_introduction_title_unlock_disabled" msgid="9223270521083202896">"प्रमाणीकरण गर्न आफ्नो अनुहार प्रयोग गर्नु…"</string>
- <string name="security_settings_face_enroll_introduction_message" msgid="484806903869220184">"आफ्नो फोन अनलक गर्न, खरिद अधिकार दिन वा अनुप्रयोगहरूमा साइन इन गर्न आफ्नो अनुहार प्रयोग गर्नुहोस्।"</string>
+ <string name="security_settings_face_enroll_introduction_message" msgid="484806903869220184">"आफ्नो फोन अनलक गर्न, खरिद अधिकार दिन वा एपहरूमा साइन इन गर्न आफ्नो अनुहार प्रयोग गर्नुहोस्।"</string>
<string name="security_settings_face_enroll_introduction_message_unlock_disabled" msgid="2850101281254663082">"तपाईंको फोन अनलक वा खरिदहरूको अनुमोदन गर्न आफ्ना अनुहारको प्रयोग गर्नुहोस्।\n\nटिपोट: तपाईं यो यन्त्र अनलक गर्न आफ्नो अनुहारको प्रयोग गर्न सक्नुहुन्न। थप जानकारीका लागि आफ्नो सङ्गठनको प्रशासकसँग सम्पर्क गर्नुहोस्।"</string>
- <string name="security_settings_face_enroll_introduction_message_setup" msgid="4533297059466270074">"आफ्नो फोन अनलक गर्न, खरिद अधिकार दिन वा अनुप्रयोगहरूमा साइन इन गर्न आफ्नो अनुहार प्रयोग गर्नुहोस्"</string>
+ <string name="security_settings_face_enroll_introduction_message_setup" msgid="4533297059466270074">"आफ्नो फोन अनलक गर्न, खरिद अधिकार दिन वा एपहरूमा साइन इन गर्न आफ्नो अनुहार प्रयोग गर्नुहोस्"</string>
<string name="security_settings_face_enroll_introduction_footer_message" msgid="7764021721107723266"></string>
<string name="security_settings_face_enroll_repeat_title" msgid="2507710348140837875">"आफ्नो अनुहार वृतको बिचमा पार्नुहोस्"</string>
<string name="security_settings_face_enroll_enrolling_skip" msgid="4346077260378772613">"यो कार्य पछि गर्नुहोस्"</string>
<string name="face_add_max" msgid="8870899421165189413">"तपाईं अधिकतम <xliff:g id="COUNT">%d</xliff:g> अनुहारहरू थप्न सक्नुहुन्छ"</string>
<string name="face_intro_error_max" msgid="4024147799079828937">"तपाईंले थप्न मिल्ने अधिकतम सङ्ख्या बराबरका अनुहारहरू थप्नुभएको छ"</string>
<string name="face_intro_error_unknown" msgid="3241592604198351134">"थप अनुहारहरू थप्न सकिँदैन"</string>
- <string name="security_settings_face_enroll_error_dialog_title" msgid="3933492758701563051">"दर्ता गर्ने कार्य पूर्ण भएन"</string>
+ <string name="security_settings_face_enroll_error_dialog_title" msgid="3933492758701563051">"फिंगरप्रिन्ट सेभ भइसकेको छैन"</string>
<string name="security_settings_face_enroll_dialog_ok" msgid="1078348922734845090">"ठिक छ"</string>
<string name="security_settings_face_enroll_error_timeout_dialog_message" msgid="4917894418448325405">"अनुहार दर्ताको समय सीमा पुग्यो। फेरि प्रयास गर्नुहोस्।"</string>
<string name="security_settings_face_enroll_error_generic_dialog_message" msgid="5160473187142616862">"अनुहार दर्ता गर्ने प्रक्रियाले काम गरेन।"</string>
@@ -419,15 +418,15 @@
<string name="security_settings_face_enroll_done" msgid="5409739233373490971">"सम्पन्न भयो"</string>
<string name="security_settings_face_settings_use_face_category" msgid="1586532139528115416">"निम्न प्रयोजनमा आफ्नो अनुहार प्रयोग गर्नु…"</string>
<string name="security_settings_face_settings_use_face_unlock_phone" msgid="318274519126401671">"तपाईंको यन्त्र अनलक गर्दै"</string>
- <string name="security_settings_face_settings_use_face_for_apps" msgid="5479369083370664351">"अनुप्रयोगको साइन इन र भुक्तानी"</string>
+ <string name="security_settings_face_settings_use_face_for_apps" msgid="5479369083370664351">"एपको साइन इन र भुक्तानी"</string>
<string name="security_settings_face_settings_require_attention" msgid="2755140150841557225">"अनलक गर्न आँखा खुल्ला छन्"</string>
<string name="security_settings_face_settings_require_attention_details" msgid="2557060433599942587">"अनुहारको प्रमाणीकरण प्रयोग गर्दा तपाईंका आँखा खुल्ला हुनै पर्छ"</string>
<string name="security_settings_face_settings_require_confirmation" msgid="7312024271060416438">"सधैँ पुष्टि गर्न आवश्यक पर्छ"</string>
- <string name="security_settings_face_settings_require_confirmation_details" msgid="8740564864091803429">"अनुप्रयोगहरूमा प्रमाणीकरण गर्दा सधैँ पुष्टि गर्न आवश्यक पर्छ"</string>
+ <string name="security_settings_face_settings_require_confirmation_details" msgid="8740564864091803429">"एपहरूमा प्रमाणीकरण गर्दा सधैँ पुष्टि गर्न आवश्यक पर्छ"</string>
<string name="security_settings_face_settings_remove_face_data" msgid="2821359954483136239">"अनुहारसम्बन्धी डेटा हटाउनुहोस्"</string>
- <string name="security_settings_face_settings_footer" msgid="4627175759990550715">"तपाईंको यन्त्र अनलक गर्न र अनुप्रयोगहरूमाथि पहुँच राख्न तपाईंको अनुहार प्रयोग गर्न सकिन्छ। "<annotation id="url">"थप जान्नुहोस्"</annotation></string>
+ <string name="security_settings_face_settings_footer" msgid="4627175759990550715">"तपाईंको यन्त्र अनलक गर्न र एपमाथि पहुँच राख्न तपाईंको अनुहार प्रयोग गर्न सकिन्छ। "<annotation id="url">"थप जान्नुहोस्"</annotation></string>
<string name="security_settings_face_settings_remove_dialog_title" msgid="5675319895815271094">"अनुहारसम्बन्धी डेटा मेट्ने हो?"</string>
- <string name="security_settings_face_settings_remove_dialog_details" msgid="3754494807169276107">"फेस अनलक गर्ने सुविधामार्फत रेकर्ड गरिएको डेटा स्थायी रूपमा र सुरक्षित रूपमा मेटिने छ। हटाइसकेपछि, आफ्नो फोन अनलक गर्न, अनुप्रयोगहरूमा साइन इन गर्न र भुक्तानी पुष्टि गर्न तपाईंसँग आफ्नो PIN, ढाँचा वा पासवर्ड हुनु पर्ने छ।"</string>
+ <string name="security_settings_face_settings_remove_dialog_details" msgid="3754494807169276107">"फेस अनलक गर्ने सुविधामार्फत रेकर्ड गरिएको डेटा स्थायी रूपमा र सुरक्षित रूपमा मेटिने छ। हटाइसकेपछि, आफ्नो फोन अनलक गर्न, एपहरूमा साइन इन गर्न र भुक्तानी पुष्टि गर्न तपाईंसँग आफ्नो PIN, ढाँचा वा पासवर्ड हुनु पर्ने छ।"</string>
<string name="security_settings_fingerprint_preference_title" msgid="4177132225930582928">"औंठाछाप"</string>
<string name="fingerprint_manage_category_title" msgid="1463406696801542090">"औंठाछापहरू व्यवस्थापन गर्नुहोस्"</string>
<string name="fingerprint_usage_category_title" msgid="7298369141954599706">"निम्नको लागि औठाछाप प्रयोग गर्नुहोस्"</string>
@@ -440,7 +439,7 @@
<string name="security_settings_fingerprint_preference_summary_none" msgid="3613424536269750172"></string>
<string name="security_settings_fingerprint_enroll_introduction_title" msgid="889558002683900544">"फिंगरप्रिन्टमार्फत अनलक"</string>
<string name="security_settings_fingerprint_enroll_introduction_title_unlock_disabled" msgid="7915504118657864429">"आफ्नो फिंगरप्रिन्टको प्रयोग गर्नुहोस्"</string>
- <string name="security_settings_fingerprint_enroll_introduction_message" msgid="5586198131986682472">"आफ्नो फोन अनलक गर्न, खरिदहरूका लागि अनुमति दिन वा अनुप्रयोगहरूमा साइन इन गर्न फिंगरप्रिन्ट सेन्सरलाई केवल छुनुहोस्। तपाईं कसका फिंगरप्रिन्टहरू थप्दै हुनुहुन्छ भन्ने कुरामा सावधान रहनुहोस्। थपिएको एउटै फिंगरप्रिन्टले यी मध्ये कुनै कुरा गर्न सक्छ।\n\nतपाईंको फिंगरप्रिन्ट कुनै बलियो ढाँचा वा PIN भन्दा कम सुरक्षित हुन सक्छ।"</string>
+ <string name="security_settings_fingerprint_enroll_introduction_message" msgid="5586198131986682472">"आफ्नो फोन अनलक गर्न, खरिदहरूका लागि अनुमति दिन वा एपहरूमा साइन इन गर्न फिंगरप्रिन्ट सेन्सरलाई केवल छुनुहोस्। तपाईं कसका फिंगरप्रिन्टहरू थप्दै हुनुहुन्छ भन्ने कुरामा सावधान रहनुहोस्। थपिएको एउटै फिंगरप्रिन्टले यी मध्ये कुनै कुरा गर्न सक्छ।\n\nतपाईंको फिंगरप्रिन्ट कुनै बलियो ढाँचा वा PIN भन्दा कम सुरक्षित हुन सक्छ।"</string>
<string name="security_settings_fingerprint_enroll_introduction_message_unlock_disabled" msgid="1640839304679275468">"तपाईंको फोन अनलक वा खरिदहरूको अनुमोदन गर्न आफ्ना फिंगरप्रिन्टहरूको प्रयोग गर्नुहोस्।\n\nटिपोट: तपाईं यो यन्त्र अनलक गर्न आफ्नो फिंगरप्रिन्टको प्रयोग गर्न सक्नुहुन्न। थप जानकारीका लागि आफ्नो संगठनको प्रशासकलाई सम्पर्क गर्नुहोस्।"</string>
<string name="security_settings_fingerprint_enroll_introduction_message_setup" msgid="6734490666593320711">"तपाईंको फोन अनलक वा खरिदहरूको अनुमोदन गर्न आफ्नो फिंगरप्रिन्ट प्रयोग गर्नुहोस्।\n\nटिपोट: तपाईंको फिंगरप्रिन्ट भरपर्दो ढाँचा वा PIN भन्दा कम सुरक्षित हुनसक्छ।"</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel" msgid="9168637333731599827">"रद्द गर्नुहोस्"</string>
@@ -471,7 +470,7 @@
<string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"औंला उठाई फेरि छुनुहोस्"</string>
<string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"तपाईंको फिंगरप्रिन्टका फरक-फरक भागहरू थप्न आफ्नो औंलालाई उठाउँदै राख्दै गर्नुहोस्"</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"फिंगरप्रिन्ट थपियो"</string>
- <string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"तपाईंले यस आइकनलाई देख्नुहुँदा पहिचानका लागि वा खरिदहरूको अनुमोदन गर्न आफ्नो फिंगरप्रिन्ट प्रयोग गर्नुहोस्"</string>
+ <string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"यो आइकन देख्दा आफ्नो पहिचान दिन वा खरिदहरूको अनुमोदन गर्न आफ्नो फिंगरप्रिन्ट प्रयोग गर्नुहोस्"</string>
<string name="security_settings_fingerprint_enroll_enrolling_skip" msgid="1473280156532146933">"यसलाई पछि गर्नुहोस्"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_title" msgid="2816424026528101690">"फिंगरप्रिन्ट सेटअप छोड्न चाहनुहुन्छ?"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_message" msgid="8139299964344809780">"तपाईँले आफ्नो फोन अनलक गर्ने एक तरिका रूपमा फिंगरप्रिन्ट छान्नुभएको छ। यदि तपाईँले अहिले छोड्नु भएमा पछि पुन: सेटअप गर्न पर्नेछ। सेटअप गर्न मात्र केहि मिनेट लाग्नेछ।"</string>
@@ -488,13 +487,13 @@
<string name="security_settings_fingerprint_enroll_done" msgid="4111289529758845926">"सम्पन्न भयो"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"आच्यौं, त्यो सेन्सर होइन नि त"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"तपाईंको फोनको पछाडि भागमा रहेको सेन्सरमा छुनुहोस्। चोर औंला प्रयोग गर्नुहोस्।"</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"दर्ता पूर्ण भएको थिएन"</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"फिंगरप्रिन्ट सेभ भइसकेको छैन"</string>
<string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"फिंगरप्रिन्ट दर्ताको समय सीमा पुग्यो। पुन: प्रयास गर्नुहोस्।"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"फिंगरप्रिन्ट दर्ताले काम गरेन। पुन: प्रयास गर्नुहोस् वा अरू औँलाको प्रयोग गर्नुहोस्।"</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"अर्को थप्नुहोस्"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"अर्को"</string>
- <string name="security_settings_fingerprint_enroll_disclaimer" msgid="5831834311961551423">"तपाईँले आफ्नो फोन खोल्नका अतिरिक्त खरिद र अनुप्रयोग पहुँच प्राधिकरण गर्नाका लागि पनि आफ्नो फिंगरप्रिन्ट प्रयोग गर्न सक्नुहुन्छ। "<annotation id="url">"थप जान्नुहोस्"</annotation></string>
- <string name="security_settings_fingerprint_enroll_disclaimer_lockscreen_disabled" msgid="7954742554236652690">" स्क्रिन लकको विकल्प असक्षम पारिएको छ। थप जान्नलाई आफ्नो सङ्गठनको प्रशासकलाई सम्पर्क गर्नुहोस्। "<annotation id="admin_details">"थप विवरणहरू"</annotation>\n\n"तपाईं खरिदहरूलाई अधिकार दिन र अनुप्रयोगमाथि पहुँच पाउनका लागि आफ्नो फिंगरप्रिन्ट समेत प्रयोग गर्न सक्नुहुन्छ। "<annotation id="url">"थप जान्नुहोस्"</annotation></string>
+ <string name="security_settings_fingerprint_enroll_disclaimer" msgid="5831834311961551423">"तपाईँले आफ्नो फोन खोल्नका अतिरिक्त खरिद र एप पहुँच प्राधिकरण गर्नाका लागि पनि आफ्नो फिंगरप्रिन्ट प्रयोग गर्न सक्नुहुन्छ। "<annotation id="url">"थप जान्नुहोस्"</annotation></string>
+ <string name="security_settings_fingerprint_enroll_disclaimer_lockscreen_disabled" msgid="7954742554236652690">" स्क्रिन लकको विकल्प असक्षम पारिएको छ। थप जान्नलाई आफ्नो सङ्गठनको प्रशासकलाई सम्पर्क गर्नुहोस्। "<annotation id="admin_details">"थप विवरणहरू"</annotation>\n\n"तपाईं खरिदहरूलाई अधिकार दिन र एपमाथि पहुँच पाउनका लागि आफ्नो फिंगरप्रिन्ट समेत प्रयोग गर्न सक्नुहुन्छ। "<annotation id="url">"थप जान्नुहोस्"</annotation></string>
<string name="security_settings_fingerprint_enroll_lift_touch_again" msgid="1670703069782212223">"औँला उठाई, फेरि सेंसर छुनुहोस्"</string>
<string name="fingerprint_add_max" msgid="2939393314646115661">"तपाईं <xliff:g id="COUNT">%d</xliff:g> सम्म फिंगरप्रिन्टहरू थप्न सक्नुहुन्छ"</string>
<string name="fingerprint_intro_error_max" msgid="3247720976621039437">"तपाईंले अधिकतम संख्यामा फिंगरप्रिन्टहरू थप्नुभएको छ"</string>
@@ -502,21 +501,21 @@
<string name="fingerprint_last_delete_title" msgid="3104596858161269635">"सबै फिंगरप्रिन्टहरू हटाउने हो?"</string>
<string name="fingerprint_delete_title" msgid="3120894112324235536">"\'<xliff:g id="FINGERPRINT_ID">%1$s</xliff:g>\' हटाउनुहोस्"</string>
<string name="fingerprint_delete_message" msgid="5895802741486967970">"तपाईं यो फिंगरप्रिन्ट मेट्न चाहनुहुन्छ?"</string>
- <string name="fingerprint_last_delete_message" msgid="3346252479778971442">"तपाईं फोन अनलक गर्न, खरिद अधिकार प्रदान गर्न वा तिनीहरूमार्फत अनुप्रयोगहरूमा साइन इन गर्नाका लागि तपाईं आफ्नो फिंगरप्रिन्टहरूको प्रयोग गर्न सक्षम हुनु हुने छैन।"</string>
- <string name="fingerprint_last_delete_message_profile_challenge" msgid="5385095150532247025">"तपाईं आफ्नो कार्य प्रोफाइल अनलक गर्न, खरिद गर्ने अनुमति दिन, वा कार्यसँग सम्बन्धित अनुप्रयोगहरूमा साइन इन गर्नाका लागि आफ्नो फिंगरप्रिन्ट प्रयोग गर्न सक्नुहुने छैन।"</string>
+ <string name="fingerprint_last_delete_message" msgid="3346252479778971442">"फोन अनलक गर्न, खरिद अधिकार प्रदान गर्न वा एपहरूमा साइन इन गर्न तपाईं आफ्ना फिंगरप्रिन्टहरूको प्रयोग गर्न सक्नु हुने छैन।"</string>
+ <string name="fingerprint_last_delete_message_profile_challenge" msgid="5385095150532247025">"तपाईं आफ्नो कार्य प्रोफाइल अनलक गर्न, खरिद गर्ने अनुमति दिन, वा कार्यसँग सम्बन्धित एपहरूमा साइन इन गर्नाका लागि आफ्नो फिंगरप्रिन्ट प्रयोग गर्न सक्नुहुने छैन।"</string>
<string name="fingerprint_last_delete_confirm" msgid="7984595457589664004">"हो, हटाउनुहोस्"</string>
<string name="crypt_keeper_settings_title" msgid="839783588093862748">"एन्क्रिप्सन"</string>
<string name="crypt_keeper_encrypt_title" product="tablet" msgid="2292129135369853167">"इन्क्रिप्ट ट्याब्लेट"</string>
<string name="crypt_keeper_encrypt_title" product="default" msgid="3110852053238357832">"फोन इन्क्रिप्ट गर्नुहोस्"</string>
<string name="crypt_keeper_encrypted_summary" msgid="2438498691741626642">"इन्क्रिप्ट गरिएको"</string>
- <string name="crypt_keeper_desc" product="tablet" msgid="9142792050252407734">"तपाईं आफ्नो खाताहरू, सेटिङहरू, डाउनलोड गरिएका अनुप्रयोगहरू र तिनीहरूको डेटा, मिडिया, र अन्य फाइलहरू इन्क्रिप्ट गर्न सक्नुहुन्छ। आफ्नो ट्याब्लेट इन्क्रिप्ट गरेपछि, स्क्रिन लक सेट गरिएको मानेर (यो कि, नमुना वा संख्यात्मक PIN वा पासवर्ड), तपाईंले संचालन गर्दा हरेक समय ट्याब्लेटको इन्क्रिप्ट उल्टाइ बन्द खोल्न आवश्यक छ। इन्क्रिप्ट उल्टाउने मात्र अन्य तरिका, आफ्नो सबै डेटा मेटाएर फ्याक्ट्री डेटा रिसेट गर्नुपर्छ।\n\nइन्क्रिप्ट गर्न एक घन्टा वा बढी समय लाग्छ। प्रक्रिया अवधिभरमा ट्याब्लेट तपाईंले चार्ज भएको ब्याट्रिको साथ सुरु गरि र प्लग इन गरिराख्नुपर्छ। यदि कार्यमा अवरोध भयो भने तपाईंले केही वा सबै डेटा गुमाउनुहुन्छ।"</string>
- <string name="crypt_keeper_desc" product="default" msgid="1996334685607444282">"तपाईं आफ्नो खाताहरू, सेटिङहरू, डाउनलोड गरिएका अनुप्रयोगहरू र तिनीहरूको डेटा, मिडिया, र अन्य फाइलहरू इन्क्रिप्ट गर्न सक्नुहुन्छ। आफ्नो फोन इन्क्रिप्ट गरेपछि, स्क्रिन लक सेट गरिएको मानेर (यो कि, नमुना वा संख्यात्मक PIN वा पासवर्ड), तपाईंले संचालन गर्दा हरेक समय फोनको इन्क्रिप्ट उल्टाइ बन्द खोल्न आवश्यक छ। इन्क्रिप्ट उल्टाउने मात्र अन्य तरिका, आफ्नो सबै डेटा मेटाएर फ्याक्ट्री डेटा रिसेट गर्नुपर्छ।\n\nइन्क्रिप्ट गर्न एक घन्टा वा बढी समय लाग्छ। प्रक्रिया अवधिभरमा फोन तपाईंले चार्ज भएको ब्याट्रिको साथ सुरुगरि र प्लग इन गरि राख्नुपर्छ। यदि कार्यमा अवरोध भयो भने तपाईंले केही वा सबै डेटा गुमाउनुहुन्छ।"</string>
+ <string name="crypt_keeper_desc" product="tablet" msgid="9142792050252407734">"तपाईं आफ्नो खाताहरू, सेटिङहरू, डाउनलोड गरिएका एपहरू र तिनीहरूको डेटा, मिडिया, र अन्य फाइलहरू इन्क्रिप्ट गर्न सक्नुहुन्छ। आफ्नो ट्याब्लेट इन्क्रिप्ट गरेपछि, स्क्रिन लक सेट गरिएको मानेर (यो कि, नमुना वा संख्यात्मक PIN वा पासवर्ड), तपाईंले संचालन गर्दा हरेक समय ट्याब्लेटको इन्क्रिप्ट उल्टाइ बन्द खोल्न आवश्यक छ। इन्क्रिप्ट उल्टाउने मात्र अन्य तरिका, आफ्नो सबै डेटा मेटाएर फ्याक्ट्री डेटा रिसेट गर्नुपर्छ।\n\nइन्क्रिप्ट गर्न एक घन्टा वा बढी समय लाग्छ। प्रक्रिया अवधिभरमा ट्याब्लेट तपाईंले चार्ज भएको ब्याट्रिको साथ सुरु गरि र प्लग इन गरिराख्नुपर्छ। यदि कार्यमा अवरोध भयो भने तपाईंले केही वा सबै डेटा गुमाउनुहुन्छ।"</string>
+ <string name="crypt_keeper_desc" product="default" msgid="1996334685607444282">"तपाईं आफ्नो खाताहरू, सेटिङहरू, डाउनलोड गरिएका एपहरू र तिनीहरूको डेटा, मिडिया, र अन्य फाइलहरू इन्क्रिप्ट गर्न सक्नुहुन्छ। आफ्नो फोन इन्क्रिप्ट गरेपछि, स्क्रिन लक सेट गरिएको मानेर (यो कि, नमुना वा संख्यात्मक PIN वा पासवर्ड), तपाईंले संचालन गर्दा हरेक समय फोनको इन्क्रिप्ट उल्टाइ बन्द खोल्न आवश्यक छ। इन्क्रिप्ट उल्टाउने मात्र अन्य तरिका, आफ्नो सबै डेटा मेटाएर फ्याक्ट्री डेटा रिसेट गर्नुपर्छ।\n\nइन्क्रिप्ट गर्न एक घन्टा वा बढी समय लाग्छ। प्रक्रिया अवधिभरमा फोन तपाईंले चार्ज भएको ब्याट्रिको साथ सुरुगरि र प्लग इन गरि राख्नुपर्छ। यदि कार्यमा अवरोध भयो भने तपाईंले केही वा सबै डेटा गुमाउनुहुन्छ।"</string>
<string name="crypt_keeper_button_text" product="tablet" msgid="7918671468758813824">"ट्याब्लेट इन्क्रिप्ट गर्नुहोस्"</string>
<string name="crypt_keeper_button_text" product="default" msgid="8737394386627318489">"फोन इन्क्रिप्ट गर्नुहोस्"</string>
<string name="crypt_keeper_low_charge_text" msgid="1422879728632636311">"तपाईँको ब्याट्री चार्ज गरी पुनःप्रयास गर्नुहोस्।"</string>
<string name="crypt_keeper_unplugged_text" msgid="6597684068340036200">"तपाईंको चार्जरमा प्लग इन गरेर फेरि प्रयास गर्नुहोस्।"</string>
<string name="crypt_keeper_dialog_need_password_title" msgid="8532211509636340535">"कुनै लक स्क्रिन PIN वा पासवर्ड छैन"</string>
- <string name="crypt_keeper_dialog_need_password_message" msgid="1341590897367808702">"तपाईंले इन्क्रिप्सन सुरु गर्नु अघि लक स्क्रिन PIN वा पासवर्ड सेट गर्न आवश्यक छ।"</string>
+ <string name="crypt_keeper_dialog_need_password_message" msgid="1341590897367808702">"तपाईंले इन्क्रिप्सन सुरु गर्नुअघि लक स्क्रिन PIN वा पासवर्ड सेट गर्न आवश्यक छ।"</string>
<string name="crypt_keeper_confirm_title" msgid="8884417036062084547">"इन्क्रिप्ट गर्ने हो?"</string>
<string name="crypt_keeper_final_desc" product="tablet" msgid="2713708841024805586">"इन्क्रिप्सन कार्य उल्ट्याउन मिल्दैन र यदि तपाईँले अवरोध पुर्याउनु भयो भने तपाईँले डेटा गुमाउनु हुने छ। इन्क्रिप्सनले एक घन्टा वा बढी समय लिन सक्छ, यस समयमा ट्याब्लेट धेरै पटक पुनःस्टार्ट हुन सक्छ।"</string>
<string name="crypt_keeper_final_desc" product="default" msgid="2483549885938505746">"इन्क्रिप्सन अपरेसन उल्टाउन मिल्दैन र यदि तपाईँले यसलाई अवरूद्ध गर्नु भयो भने तपाईँले डेटा गुमाउनु हुने छ। इनक्रिप्सनलाई करिब एक घन्टा वा बढी लाग्छ जुन समय फोन धेरै चोटि पुनःस्टार्ट हुन सक्छ।"</string>
@@ -530,8 +529,8 @@
<string name="crypt_keeper_warn_wipe" msgid="700814581500057050">"चेतावनी: खुला गर्न <xliff:g id="COUNT">^1</xliff:g> भन्दा बढी असफल प्रयासहरू पछि तपाईँको उपकरण पुछिने छ!"</string>
<string name="crypt_keeper_enter_password" msgid="726933635335219421">"तपाईँको पासवर्ड टाइप गर्नुहोस्"</string>
<string name="crypt_keeper_failed_title" msgid="1906382607060855782">"इन्क्रिप्सन असफल"</string>
- <string name="crypt_keeper_failed_summary" product="tablet" msgid="7844833877734529625">"इन्क्रिप्सन अवरूद्ध भयो र पूरा हुन सक्दैन। परिणामस्वरूप तपाईंको ट्याब्लेटको डेटा अब पहुँचयोग्य हुँदैन।\n \n तपाईंको ट्याब्लेटको प्रयोग सुरु गर्नाका लागि तपाईंले कारखाना पुनःसेट गर्नु पर्छ। जब पुनःसेट हुन्छ तब तपाईं ट्याब्लेट सेट गर्नुहुन्छ, तपाईंको Google खातामा जगेडा गरिएको कुनै पनि डेटा पुनर्स्थापना गर्ने अवसर तपाईंलाई हुने छ।"</string>
- <string name="crypt_keeper_failed_summary" product="default" msgid="2895589681839090312">"एन्क्रिप्सन रोकिएको थियो र पूरा हुन सकेन। नतिजाको रूपमा तपाईंको फोनमा डेटा पहुँच यग्य छैन। \n\nतपाईंको फोनको उपयोग फरि सुरु गर्नको लागि तपाईंले एउटा फ्याक्ट्रि पुनःसेट गर्न जरुरी छ। जब तपाईं पुनःसेटपछि तपाईंको फोन सेटअप गर्नु हुन्छ भने कुनै पनि डेटा जुन तपाईंको Google खातामा ब्याकअप गरिएको थियो तपाईंलाई पुनःप्राप्त गर्ने अवसर हुने छ।"</string>
+ <string name="crypt_keeper_failed_summary" product="tablet" msgid="7844833877734529625">"इन्क्रिप्सन अवरूद्ध भयो र पूरा हुन सक्दैन। परिणामस्वरूप तपाईंको ट्याब्लेटको डेटा अब पहुँचयोग्य हुँदैन।\n \n तपाईंको ट्याब्लेटको प्रयोग सुरु गर्नाका लागि तपाईंले कारखाना रिसेट गर्नु पर्छ। जब रिसेट हुन्छ तब तपाईं ट्याब्लेट सेट गर्नुहुन्छ, तपाईंको Google खातामा जगेडा गरिएको कुनै पनि डेटा पुनर्स्थापना गर्ने अवसर तपाईंलाई हुने छ।"</string>
+ <string name="crypt_keeper_failed_summary" product="default" msgid="2895589681839090312">"एन्क्रिप्सन रोकिएको थियो र पूरा हुन सकेन। नतिजाको रूपमा तपाईंको फोनमा डेटा पहुँच यग्य छैन। \n\nतपाईंको फोनको उपयोग फरि सुरु गर्नको लागि तपाईंले एउटा फ्याक्ट्रि रिसेट गर्न जरुरी छ। जब तपाईं रिसेटपछि तपाईंको फोन सेटअप गर्नु हुन्छ भने कुनै पनि डेटा जुन तपाईंको Google खातामा ब्याकअप गरिएको थियो तपाईंलाई पुनःप्राप्त गर्ने अवसर हुने छ।"</string>
<string name="crypt_keeper_data_corrupt_title" msgid="6561535293845985713">"गुप्तिकरण उल्टाउन असफल"</string>
<string name="crypt_keeper_data_corrupt_summary" product="tablet" msgid="7018748502706237323">"तपाईँले प्रविष्ट गर्नुभएको पासवर्ड ठिक छ, तर दुर्भाग्यबश तपाईँको डेटा बिग्रिएको छ।\n\n तपाईँको ट्याब्लेट पुन: प्रयोग गर्न फ्याक्ट्री रिसेट गर्न पर्छ। रिसेट गरे पश्चात जब तपाई आफ्नो ट्याब्लेट सेटअप गर्नुहुन्छ तपाईँले Google खातामा ब्याकअप भए सम्मका डेटा पुनर्स्थापना गर्ने अवसर प्राप्त गर्नु हुनेछ।"</string>
<string name="crypt_keeper_data_corrupt_summary" product="default" msgid="5798580588985326937">"तपाईंले प्रविष्ट गर्नुभएको पासवर्ड ठिक छ, तर दुर्भाग्यबश तपाईंको डेटा बिग्रिएको छ।\n\n तपाईंको फोन पुन: प्रयोग गर्न फ्याक्ट्री रिसेट गर्न पर्छ। रिसेट गरे पश्चात जब तपाईं आफ्नो फोन सेटअप गर्नुहुन्छ तपाईंले Google खातामा ब्याकअप भए सम्मका डेटा पुनर्स्थापना गर्ने अवसर प्राप्त गर्नु हुनेछ।"</string>
@@ -599,35 +598,35 @@
<string name="unlock_disable_frp_warning_content_pattern" msgid="1843950215687159135">"यन्त्र सुरक्षा सुविधाहरू तपाईँको ढाँचा बिना काम गर्ने छैनन्।"</string>
<string name="unlock_disable_frp_warning_content_pattern_fingerprint" msgid="8846957650251741548">"यन्त्रका सुरक्षासम्बन्धी सुविधाहरूले तपाईंको ढाँचाबिना काम गर्ने छैनन्। <xliff:g id="EMPTY_LINE">
-</xliff:g> यस यन्त्रबाट तपाईंका सुरक्षित गरिएका फिंगरप्रिन्टहरू पनि हटाइने छन् र तपाईं तिनीहरूमार्फत आफ्नो फोन अनलक गर्ने, खरिदसम्बन्धी आधिकार प्रदान गर्ने वा अनुप्रयोगहरूमा साइन इन गर्ने कार्यहरू गर्न सक्नुहुनेछैन।"</string>
+</xliff:g> यस यन्त्रबाट तपाईंका सुरक्षित गरिएका फिंगरप्रिन्टहरू पनि हटाइने छन् र तपाईं तिनीहरूमार्फत आफ्नो फोन अनलक गर्ने, खरिदसम्बन्धी आधिकार प्रदान गर्ने वा एपहरूमा साइन इन गर्ने कार्यहरू गर्न सक्नुहुनेछैन।"</string>
<string name="unlock_disable_frp_warning_content_pin" msgid="6760473271034592796">"यन्त्र सुरक्षा सुविधाहरू तपाईँको PIN बिना काम गर्ने छैनन्।"</string>
<string name="unlock_disable_frp_warning_content_pin_fingerprint" msgid="4384632309103635233">"यन्त्रका सुरक्षासम्बन्धी सुविधाहरूले तपाईंको PIN बिना काम गर्ने छैनन्। <xliff:g id="EMPTY_LINE">
-</xliff:g>यस यन्त्रबाट तपाईंका सुरक्षित गरिएका फिंगरप्रिन्टहरू पनि हटाइने छन् र तपाईं तिनीहरूमार्फत आफ्नो फोन अनलक गर्ने, खरिदसम्बन्धी आधिकार प्रदान गर्ने वा अनुप्रयोगहरूमा साइन इन गर्ने कार्यहरू गर्न सक्नुहुनेछैन।"</string>
+</xliff:g>यस यन्त्रबाट तपाईंका सुरक्षित गरिएका फिंगरप्रिन्टहरू पनि हटाइने छन् र तपाईं तिनीहरूमार्फत आफ्नो फोन अनलक गर्ने, खरिदसम्बन्धी आधिकार प्रदान गर्ने वा एपहरूमा साइन इन गर्ने कार्यहरू गर्न सक्नुहुनेछैन।"</string>
<string name="unlock_disable_frp_warning_content_password" msgid="854665587186358170">"यन्त्र सुरक्षा सुविधाहरू तपाईँको पासवर्ड बिना काम गर्ने छैनन्।"</string>
<string name="unlock_disable_frp_warning_content_password_fingerprint" msgid="218143910981979545">"यन्त्रका सुरक्षासम्बन्धी सुविधाहरूले तपाईंको पासवर्डबिना काम गर्ने छैनन्। <xliff:g id="EMPTY_LINE">
-</xliff:g> यस यन्त्रबाट तपाईंका सुरक्षित गरिएका फिंगरप्रिन्टहरू पनि हटाइने छन् र तपाईं तिनीहरूमार्फत आफ्नो फोन अनलक गर्ने, खरिदसम्बन्धी आधिकार प्रदान गर्ने वा अनुप्रयोगहरूमा साइन इन गर्ने कार्यहरू गर्न सक्नुहुनेछैन।"</string>
+</xliff:g> यस यन्त्रबाट तपाईंका सुरक्षित गरिएका फिंगरप्रिन्टहरू पनि हटाइने छन् र तपाईं तिनीहरूमार्फत आफ्नो फोन अनलक गर्ने, खरिदसम्बन्धी आधिकार प्रदान गर्ने वा एपहरूमा साइन इन गर्ने कार्यहरू गर्न सक्नुहुनेछैन।"</string>
<string name="unlock_disable_frp_warning_content_unknown" msgid="3570135744390201244">"यन्त्र सुरक्षा सुविधाहरू तपाईँको स्क्रिन लक बिना काम गर्ने छैनन्।"</string>
<string name="unlock_disable_frp_warning_content_unknown_fingerprint" msgid="5775815077478538855">"यन्त्रका सुरक्षासम्बन्धी सुविधाहरूले तपाईंको स्क्रिन लकबिना काम गर्ने छैनन्। <xliff:g id="EMPTY_LINE">
-</xliff:g>यस यन्त्रबाट तपाईंका सुरक्षित गरिएका फिंगरप्रिन्टहरू पनि हटाइने छन् र तपाईं तिनीहरूमार्फत आफ्नो फोन अनलक गर्ने, खरिदसम्बन्धी आधिकार प्रदान गर्ने वा अनुप्रयोगहरूमा साइन इन गर्ने कार्यहरू गर्न सक्नुहुनेछैन।"</string>
+</xliff:g>यस यन्त्रबाट तपाईंका सुरक्षित गरिएका फिंगरप्रिन्टहरू पनि हटाइने छन् र तपाईं तिनीहरूमार्फत आफ्नो फोन अनलक गर्ने, खरिदसम्बन्धी आधिकार प्रदान गर्ने वा एपहरूमा साइन इन गर्ने कार्यहरू गर्न सक्नुहुनेछैन।"</string>
<string name="unlock_disable_frp_warning_content_pattern_profile" msgid="2369992898062808499">"प्रोफाइल सुरक्षा विशेषताहरूले तपाईँको ढाँचा बिना काम गर्नेछैनन्।"</string>
<string name="unlock_disable_frp_warning_content_pattern_fingerprint_profile" msgid="8511105093090018735">"प्रोफाइलका सुरक्षासम्बन्धी सुविधाहरूले तपाईंको ढाँचाबिना काम गर्ने छैनन्।<xliff:g id="EMPTY_LINE">
-</xliff:g>यस प्रोफाइलबाट तपाईंका सुरक्षित गरिएका फिंगरप्रिन्टहरू पनि हटाइने छन् र तपाईं तिनीहरूमार्फत आफ्नो प्रोफाइल अनलक गर्ने, खरिदसम्बन्धी अधिकार प्रदान गर्ने वा अनुप्रयोगहरूमा साइन इन गर्ने कार्यहरू सक्नुहुनेछैन।"</string>
+</xliff:g>यस प्रोफाइलबाट तपाईंका सुरक्षित गरिएका फिंगरप्रिन्टहरू पनि हटाइने छन् र तपाईं तिनीहरूमार्फत आफ्नो प्रोफाइल अनलक गर्ने, खरिदसम्बन्धी अधिकार प्रदान गर्ने वा एपहरूमा साइन इन गर्ने कार्यहरू सक्नुहुनेछैन।"</string>
<string name="unlock_disable_frp_warning_content_pin_profile" msgid="7114165651000498040">"प्रोफाइल सुरक्षा विशेषताहरूले तपाईँको PIN बिना काम गर्नेछैनन्।"</string>
<string name="unlock_disable_frp_warning_content_pin_fingerprint_profile" msgid="5118210431544156122">"प्रोफाइलका सुरक्षासम्बन्धी सुविधाहरूले तपाईंको PIN बिना काम गर्ने छैनन्।<xliff:g id="EMPTY_LINE">
-</xliff:g>यस प्रोफाइलबाट तपाईंका सुरक्षित गरिएका फिंगरप्रिन्टहरू पनि हटाइने छन् र तपाईं तिनीहरूमार्फत आफ्नो प्रोफाइल अनलक गर्ने, खरिदसम्बन्धी अधिकार प्रदान गर्ने वा अनुप्रयोगहरूमा साइन इन गर्ने कार्यहरू गर्न सक्नुहुनेछैन।"</string>
+</xliff:g>यस प्रोफाइलबाट तपाईंका सुरक्षित गरिएका फिंगरप्रिन्टहरू पनि हटाइने छन् र तपाईं तिनीहरूमार्फत आफ्नो प्रोफाइल अनलक गर्ने, खरिदसम्बन्धी अधिकार प्रदान गर्ने वा एपहरूमा साइन इन गर्ने कार्यहरू गर्न सक्नुहुनेछैन।"</string>
<string name="unlock_disable_frp_warning_content_password_profile" msgid="3989497526180082037">"प्रोफाइल सुरक्षा विशेषताहरूले तपाईँको पासवर्ड बिना काम गर्नेछैनन्।"</string>
<string name="unlock_disable_frp_warning_content_password_fingerprint_profile" msgid="8360485354164416198">"प्रोफाइलका सुरक्षासम्बन्धी सुविधाहरूले तपाईंको पासवर्डबिना काम गर्ने छैनन्।<xliff:g id="EMPTY_LINE">
-</xliff:g>यस प्रोफाइलबाट तपाईंका सुरक्षित गरिएका फिंगरप्रिन्टहरू पनि हटाइने छन् र तपाईं तिनीहरूमार्फत आफ्नो फोन अनलक गर्ने, खरिदसम्बन्धी आधिकार प्रदान गर्ने वा अनुप्रयोगहरूमा साइन इन गर्ने कार्यहरू गर्न सक्नुहुनेछैन।"</string>
+</xliff:g>यस प्रोफाइलबाट तपाईंका सुरक्षित गरिएका फिंगरप्रिन्टहरू पनि हटाइने छन् र तपाईं तिनीहरूमार्फत आफ्नो फोन अनलक गर्ने, खरिदसम्बन्धी आधिकार प्रदान गर्ने वा एपहरूमा साइन इन गर्ने कार्यहरू गर्न सक्नुहुनेछैन।"</string>
<string name="unlock_disable_frp_warning_content_unknown_profile" msgid="4066001421137974082">"प्रोफाइल सुरक्षा विशेषताहरूले तपाईँको स्क्रिन लक बिना काम गर्नेछैनन्।"</string>
<string name="unlock_disable_frp_warning_content_unknown_fingerprint_profile" msgid="1201259228331105948">"प्रोफाइलका सुरक्षासम्बन्धी सुविधाहरूले तपाईंको स्क्रिन लकबिना काम गर्ने छैनन्।<xliff:g id="EMPTY_LINE">
-</xliff:g>यस प्रोफाइलबाट तपाईंका सुरक्षित गरिएका फिंगरप्रिन्टहरू पनि हटाइने छन् र तपाईं तिनीहरूमार्फत आफ्नो प्रोफाइल अनलक गर्ने, खरिदसम्बन्धी अधिकार प्रदान गर्ने वा अनुप्रयोगहरूमा साइन इन गर्ने कार्यहरू गर्न सक्नुहुनेछैन।"</string>
+</xliff:g>यस प्रोफाइलबाट तपाईंका सुरक्षित गरिएका फिंगरप्रिन्टहरू पनि हटाइने छन् र तपाईं तिनीहरूमार्फत आफ्नो प्रोफाइल अनलक गर्ने, खरिदसम्बन्धी अधिकार प्रदान गर्ने वा एपहरूमा साइन इन गर्ने कार्यहरू गर्न सक्नुहुनेछैन।"</string>
<string name="unlock_disable_frp_warning_ok" msgid="2373890505202766456">"हो, हटाउनुहोस्"</string>
<string name="unlock_change_lock_pattern_title" msgid="7622476883851319877">"अनलक ढाँचा बदल्नुहोस्"</string>
<string name="unlock_change_lock_pin_title" msgid="6671224158800812238">"अनलक PIN परिवर्तन गर्नुहोस्"</string>
@@ -684,7 +683,7 @@
</plurals>
<plurals name="lockpassword_password_requires_uppercase" formatted="false" msgid="6026476732572657588">
<item quantity="other">कम्तीमा पनि <xliff:g id="COUNT">%d</xliff:g> वटा ठूला अक्षर हुनु अनिवार्य छ</item>
- <item quantity="one">कम्तीमा पनि एउटा ठूलो अक्षर हुनु अनिवार्य छ</item>
+ <item quantity="one">कम्तीमा पनि एउटा ठुलो अक्षर हुनु अनिवार्य छ</item>
</plurals>
<plurals name="lockpassword_password_requires_numeric" formatted="false" msgid="5072581827825645338">
<item quantity="other">कम्तीमा पनि <xliff:g id="COUNT">%d</xliff:g> वटा संख्यात्मक अङ्क हुनु अनिवार्य छ</item>
@@ -712,14 +711,14 @@
<string name="lockpattern_tutorial_cancel_label" msgid="450401426127674369">"रद्द गर्नुहोस्"</string>
<string name="lockpattern_tutorial_continue_label" msgid="8474690922559443018">"अर्को"</string>
<string name="lock_setup" msgid="8710689848703935088">"सेटअप पूरा भयो।"</string>
- <string name="manage_device_admin" msgid="322047441168191695">"यन्त्रका प्रशासकीय अनुप्रयोगहरू"</string>
- <string name="number_of_device_admins_none" msgid="8519193548630223132">"कुनै सक्रिय अनुप्रयोगहरू छैनन्"</string>
+ <string name="manage_device_admin" msgid="322047441168191695">"यन्त्रका प्रशासकीय एपहरू"</string>
+ <string name="number_of_device_admins_none" msgid="8519193548630223132">"कुनै सक्रिय एपहरू छैनन्"</string>
<plurals name="number_of_device_admins" formatted="false" msgid="6445613288828151224">
- <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> सक्रिय अनुप्रयोगहरू</item>
- <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> सक्रिय अनुप्रयोग</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> सक्रिय एपहरू</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> सक्रिय एप</item>
</plurals>
<string name="manage_trust_agents" msgid="8129970926213142261">"विश्वसनीय प्रतिनिधि"</string>
- <string name="disabled_because_no_backup_security" msgid="8127039979909203528">"प्रयोग गर्न, पहिले स्क्रिन लक सेट गर्नुहोस्"</string>
+ <string name="disabled_because_no_backup_security" msgid="8127039979909203528">"यो सेवा प्रयोग गर्न, पहिले स्क्रिन लक सेट गर्नुहोस्"</string>
<string name="manage_trust_agents_summary" msgid="2023116850759962248">"कुनै पनि होइन"</string>
<plurals name="manage_trust_agents_summary_on" formatted="false" msgid="5550538038916606097">
<item quantity="other"><xliff:g id="COUNT">%d</xliff:g> वटा सक्रिय विश्वसनीय एजेन्ट</item>
@@ -767,8 +766,8 @@
<string name="bluetooth_menu_advanced" msgid="7566858513372603652">"जटिल"</string>
<string name="bluetooth_advanced_titlebar" msgid="6459469494039004784">"जटिल ब्लुटुथ"</string>
<string name="bluetooth_empty_list_bluetooth_off" msgid="6255367297830430459">"ब्लुटुथ खोलेको बेला तपाईँको उपकरणले नजिकैका अन्य ब्लुटुथ उपकरणहरूसँग संचार गर्न सक्छन्।"</string>
- <string name="bluetooth_scanning_on_info_message" msgid="5460370815156050550">"ब्लुटुथ सक्रिय गरिएको बेला तपाईंको यन्त्र वरपरका अन्य ब्लुटुथ यन्त्रहरूसँग सञ्चार गर्न सक्नुहुन्छ।, \n\nअनुभवमा सुधार गर्न अनुप्रयोग तथा सेवाहरू अझै पनि जुनसुकै बेला (ब्लुटुथ निष्क्रिय भएको बेलामा पनि) वरपरका यन्त्रहरू स्क्यान गर्न सक्छन्। यसलाई स्थानमा आधारित सुविधा तथा सेवाहरू सुधार गर्ने जस्ता कार्यहरू गर्नका लागि प्रयोग गर्न सकिन्छ। तपाईं "<annotation id="link">"स्क्यानिङसम्बन्धी सेटिङहरू"</annotation>" मा गई यसलाई परिवर्तन गर्न सक्नुहुन्छ।"</string>
- <string name="ble_scan_notify_text" msgid="6290170236546386932">"स्थान पहिचान सामर्थ्यतामा सुधार गर्न, प्रणाली अनुप्रयोगहरू र सेवाहरूले अझै पनि ब्लुटुथ यन्त्रहरूलाई पहिचान गर्न सक्छन्। तपाईँले यसलाई <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g> स्क्यानिङ सेटिङहरू <xliff:g id="LINK_END_1">LINK_END</xliff:g> मा परिवर्तन गर्न सक्नुहुन्छ।"</string>
+ <string name="bluetooth_scanning_on_info_message" msgid="5460370815156050550">"ब्लुटुथ सक्रिय गरिएको बेला तपाईंको यन्त्र वरपरका अन्य ब्लुटुथ यन्त्रहरूसँग सञ्चार गर्न सक्नुहुन्छ।, \n\nअनुभवमा सुधार गर्न एप तथा सेवाहरू अझै पनि जुनसुकै बेला (ब्लुटुथ निष्क्रिय भएको बेलामा पनि) वरपरका यन्त्रहरू स्क्यान गर्न सक्छन्। यसलाई स्थानमा आधारित सुविधा तथा सेवाहरू सुधार गर्ने जस्ता कार्यहरू गर्नका लागि प्रयोग गर्न सकिन्छ। तपाईं "<annotation id="link">"स्क्यानिङसम्बन्धी सेटिङहरू"</annotation>" मा गई यसलाई परिवर्तन गर्न सक्नुहुन्छ।"</string>
+ <string name="ble_scan_notify_text" msgid="6290170236546386932">"स्थान पहिचान सामर्थ्यतामा सुधार गर्न, प्रणाली एपहरू र सेवाहरूले अझै पनि ब्लुटुथ यन्त्रहरूलाई पहिचान गर्न सक्छन्। तपाईँले यसलाई <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g> स्क्यानिङ सेटिङहरू <xliff:g id="LINK_END_1">LINK_END</xliff:g> मा परिवर्तन गर्न सक्नुहुन्छ।"</string>
<string name="bluetooth_connect_failed" msgid="1151234676456333786">"जडान गर्न सकिएन। फेरि प्रयास गर्नुहोस्।"</string>
<string name="device_details_title" msgid="726517818032923222">"यन्त्रसम्बन्धी विवरणहरू"</string>
<string name="bluetooth_device_mac_address" msgid="5328203122581150405">"यन्त्रको ब्लुटुथ ठेगाना: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
@@ -823,21 +822,21 @@
<string name="art_verifier_for_debuggable_summary" msgid="2204242476996701111">"ART लाई डिबग गर्न मिल्ने अनुप्रयोगहरूको बाइटकोड पुष्टि गर्न दिनुहोस्"</string>
<string name="nfc_quick_toggle_title" msgid="4990697912813795002">"NFC"</string>
<string name="nfc_quick_toggle_summary" product="tablet" msgid="983451155092850657">"ट्याब्लेटले कुनै अन्य उपकरणलाई छुँदा डेटा विनिमयको अनुमति दिनुहोस्।"</string>
- <string name="nfc_quick_toggle_summary" product="default" msgid="7141056939052895142">"फोनले अर्को उपकरणलाई छुँदा डेटा विनिमयलाई अनुमति दिनुहोस्"</string>
+ <string name="nfc_quick_toggle_summary" product="default" msgid="7141056939052895142">"फोनले अर्को उपकरणलाई छुँदा डेटा एक अर्कामा सर्ने अनुमति दिनुहोस्"</string>
<string name="nfc_disclaimer_title" msgid="4860231267351602970">"NFC सक्रिय गर्नुहोस्"</string>
<string name="nfc_disclaimer_content" msgid="3066113577854565782">"NFC ले यो यन्त्र र भुक्तानीको टर्मिनल, पहुँच सम्बन्धी रिडर र अन्तरक्रियात्मक विज्ञापन वा ट्यागहरू जस्ता अन्य नजिकका यन्त्र वा लक्ष्यहरू बीच डेटा आदानप्रदान गर्छ।"</string>
<string name="nfc_secure_settings_title" msgid="5153751163174916581">"NFC सुरक्षित पार्नुहोस्"</string>
<string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"स्क्रिन अनलक भएका बेलामा मात्र NFC भुक्तानी र ट्रान्जिटको प्रयोगलाई अनुमति दिनुहोस्"</string>
<string name="android_beam_settings_title" msgid="3083436415873738389">"एन्ड्रोइड बिम"</string>
- <string name="android_beam_on_summary" msgid="8068287225180474199">"NFCको माध्यमबाट अनुप्रयोग सामग्री प्रसारित गर्नको लागि तयार"</string>
+ <string name="android_beam_on_summary" msgid="8068287225180474199">"NFCको माध्यमबाट एप सामग्री प्रसारित गर्नको लागि तयार"</string>
<string name="android_beam_off_summary" msgid="7365818039159364600">"बन्द"</string>
<string name="nfc_disabled_summary" msgid="2181777971122724361">"NFC निष्क्रिय पारिएका कारण उपलब्ध छैन"</string>
<string name="android_beam_label" msgid="5340299879556025708">"एन्ड्रोइड बिम"</string>
- <string name="android_beam_explained" msgid="4501176353247859329">"यो सुविधा सक्रिय पारिएको बेला तपाईं यन्त्रहरूलाई आपसमा नजिक राखेर अनुप्रयोगको सामग्री अर्को NFC सक्षम यन्त्रमा बिम गर्न सक्नुहुन्छ। उदाहरणका लागि तपाईं वेबपृष्ठ, YouTube का भिडियो, सम्पर्क र अरू थुप्रै कुराहरू बिम गर्न सक्नुहुन्छ।\n\nयसको लागि केवल यन्त्रहरूलाई (सामान्यता दुवै यन्त्रको पछाडिको भाग) आपसमा नजिक ल्याउनुहोस् र त्यसपछि आफ्नो यन्त्रको स्क्रिनमा ट्याप गर्नुहोस्। बिम हुने कुरा अनुप्रयोगले निर्धारण गर्दछ।"</string>
+ <string name="android_beam_explained" msgid="4501176353247859329">"यो सुविधा सक्रिय पारिएको बेला तपाईं यन्त्रहरूलाई आपसमा नजिक राखेर एपको सामग्री अर्को NFC सक्षम यन्त्रमा बिम गर्न सक्नुहुन्छ। उदाहरणका लागि तपाईं वेबपृष्ठ, YouTube का भिडियो, सम्पर्क र अरू थुप्रै कुराहरू बिम गर्न सक्नुहुन्छ।\n\nयसको लागि केवल यन्त्रहरूलाई (सामान्यता दुवै यन्त्रको पछाडिको भाग) आपसमा नजिक ल्याउनुहोस् र त्यसपछि आफ्नो यन्त्रको स्क्रिनमा ट्याप गर्नुहोस्। बिम हुने कुरा अनुप्रयोगले निर्धारण गर्दछ।"</string>
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Wi-Fi खोल्नुहोस्"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Wi-Fi प्रयोग गर्नुहोस्"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Wi-Fi प्रयोग गर्नुहोस्"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi-Fi सेटिङहरू"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"ताररहित पहुँच बिन्दुहरू सेटअप र प्रबन्ध गर्नुहोस्"</string>
@@ -858,11 +857,11 @@
<string name="wifi_poor_network_detection_summary" msgid="5539951465985614590">"Wi-Fi नेटवर्कमा राम्रो इन्टरनेट जडान उपलब्ध नभएसम्म प्रयोग नगर्नुहोस्"</string>
<string name="wifi_avoid_poor_network_detection_summary" msgid="1976503191780928104">"राम्रो इन्टरनेट जडान हुने नेटवर्क मात्र प्रयोग गर्नुहोस्"</string>
<string name="use_open_wifi_automatically_title" msgid="3084513215481454350">"खुला नेटवर्कहरूमा जडान गर्नुहोस्"</string>
- <string name="use_open_wifi_automatically_summary" msgid="8338020172673161754">"उच्च गुणस्तरको सार्वजनिक नेटवर्कहरूमा स्वतः जडान गर्नुहोस्"</string>
+ <string name="use_open_wifi_automatically_summary" msgid="8338020172673161754">"द्रूत इन्टरनेट भएका सार्वजनिक नेटवर्कहरूमा स्वतः कनेक्ट गर्नुहोस्"</string>
<string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"प्रयोग गर्न कुनै नेटवर्क मूल्याङ्कनसम्बन्धी प्रदायक चयन गर्नुहोस्"</string>
<string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"प्रयेाग गर्न कुनै उपयुक्त नेटवर्क मूल्याङ्कनसम्बन्धी प्रदायक चयन गर्नुहोस्"</string>
<string name="wifi_install_credentials" msgid="5650088113710858289">"प्रमाणपत्रहरू स्थापना गर्नुहोस्"</string>
- <string name="wifi_scan_notify_text" msgid="7614101215028336927">"स्थानको सटीकतामा सुधार गर्न, अनुप्रयोग तथा सेवाहरूले अझै पनि जुनसुकै बेला (Wi‑Fi निष्क्रिय भएको बेलामा पनि) Wi‑Fi नेटवर्क स्क्यान गर्न सक्छ। यसलाई स्थानमा आधारित सुविधा तथा सेवाहरूमा सुधार गर्ने जस्ता कार्यहरू गर्नाका लागि प्रयोग गर्न सकिन्छ। तपाईं यसलाई <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>स्क्यानिङ सेटिङहरू<xliff:g id="LINK_END_1">LINK_END</xliff:g> मा परिवर्तन गर्न सक्नुहुन्छ।"</string>
+ <string name="wifi_scan_notify_text" msgid="7614101215028336927">"स्थानको सटीकतामा सुधार गर्न, एप तथा सेवाहरूले अझै पनि जुनसुकै बेला (Wi‑Fi निष्क्रिय भएको बेलामा पनि) Wi‑Fi नेटवर्क स्क्यान गर्न सक्छन्। यसलाई स्थानमा आधारित सुविधा तथा सेवाहरूमा सुधार गर्ने जस्ता कार्यहरू गर्नका लागि प्रयोग गर्न सकिन्छ। तपाईं यसलाई <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>स्क्यानिङ सेटिङहरू<xliff:g id="LINK_END_1">LINK_END</xliff:g> मा परिवर्तन गर्न सक्नुहुन्छ।"</string>
<string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"स्थानसम्बन्धी सटीकतामा सुधार गर्न <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>स्क्यानिङ सम्बन्धी सेटिङहरू<xliff:g id="LINK_END_1">LINK_END</xliff:g> मा गई Wi-Fi स्क्यान गर्ने सेवालाई सक्रिय गर्नुहोस्।"</string>
<string name="wifi_scan_notify_remember_choice" msgid="1235445971400237444">"फेरि नदेखाउनुहोस्"</string>
<string name="wifi_setting_sleep_policy_title" msgid="2120785188625932076">"सुतेको बेलामा Wi-Fi खुला राख्नुहोस्"</string>
@@ -881,7 +880,7 @@
<string name="wifi_configure_settings_preference_summary_wakeup_off" msgid="286904094152909651">"Wi‑Fi स्वत: पुनः सक्रिय हुँदैन"</string>
<string name="wifi_access_points" msgid="1647976498906871869">"Wi-Fi नेटवर्कहरू"</string>
<string name="wifi_menu_more_options" msgid="8318269834264035524">"थप विकल्पहरू"</string>
- <string name="wifi_menu_p2p" msgid="4945665601551289791">"Wi-Fi प्रत्यक्ष"</string>
+ <string name="wifi_menu_p2p" msgid="4945665601551289791">"Wi-fi Direct"</string>
<string name="wifi_menu_scan" msgid="9082691677803181629">"स्क्यान"</string>
<string name="wifi_menu_advanced" msgid="5984484498045511072">"जटिल"</string>
<string name="wifi_menu_configure" msgid="52192491120701266">"कन्फिगर गर्नुहोस्"</string>
@@ -890,26 +889,26 @@
<string name="wifi_menu_forget" msgid="7561140554450163075">"सञ्जाल बिर्सनुहोस्"</string>
<string name="wifi_menu_modify" msgid="4080178040721021101">"नेटवर्क परिमार्जन गर्नुहोस्"</string>
<string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"उपलब्ध नेटवर्कहरू हेर्नको लागि Wi-Fi खुला गर्नुहोस्।"</string>
- <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"Wi-Fi सञ्जालका लागि खोज्दै ..."</string>
+ <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">" Wi-Fi नेटवर्क खोज्दै ..."</string>
<string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"Wi-Fi सञ्जाल बदल्न तपाईँसँग अनुमति छैन।"</string>
<string name="wifi_more" msgid="3538241640407382185">"बढी"</string>
<string name="wifi_setup_wps" msgid="6730131677695521321">"स्वचालित सेटअप (WPS)"</string>
<string name="wifi_settings_scanning_required_title" msgid="3593457187659922490">"Wi‑Fi स्क्यान गर्ने सुविधा सक्रिय गर्ने हो?"</string>
<string name="wifi_settings_scanning_required_summary" msgid="7469610959462708782">"Wi‑Fi स्वतः सक्रिय गर्न तपाईंले सर्वप्रथम Wi‑Fi स्क्यान गर्ने सुविधालाई सक्रिय गर्नु पर्ने हुन्छ।"</string>
- <string name="wifi_settings_scanning_required_info" msgid="5913535073390607386">"Wi-Fi स्क्यान गर्ने सुविधाले अनुप्रयोग र सेवाहरूलाई Wi‑Fi निष्क्रिय भएको बेलालगायत जुनसुकै बेला वरपरका Wi-Fi नेटवर्कहरू स्क्यान गर्ने अनुमति दिन्छ। उदाहरणका लागि यसलाई स्थानमा आधारित सुविधा तथा सेवाहरूको सुधार गर्नका लागि प्रयोग गर्न सकिन्छ।"</string>
+ <string name="wifi_settings_scanning_required_info" msgid="5913535073390607386">"Wi-Fi स्क्यान गर्ने सुविधाले एप र सेवाहरूलाई Wi‑Fi निष्क्रिय भएको बेलालगायत जुनसुकै बेला वरपरका Wi-Fi नेटवर्कहरू स्क्यान गर्ने अनुमति दिन्छ। उदाहरणका लागि यसलाई स्थानमा आधारित सुविधा तथा सेवाहरूको सुधार गर्नका लागि प्रयोग गर्न सकिन्छ।"</string>
<string name="wifi_settings_scanning_required_turn_on" msgid="4327570180594277049">"सक्रिय गर्नुहोस्"</string>
<string name="wifi_settings_scanning_required_enabled" msgid="3336102100425307040">"Wi‑Fi स्क्यान गर्ने सेवा सक्रिय छ"</string>
<string name="wifi_show_advanced" msgid="8199779277168030597">"उन्नत विकल्पहरू"</string>
<string name="wifi_advanced_toggle_description_expanded" msgid="1506697245302596510">"ड्रप डाउन सूचीका उन्नत विकल्पहरू। संक्षिप्त गर्न डबल-ट्याप गर्नुहोस्।"</string>
<string name="wifi_advanced_toggle_description_collapsed" msgid="3014965593695454879">"ड्रप डाउन सूचीका उन्नत विकल्पहरू। विस्तृत गर्न डबल-ट्याप गर्नुहोस्।"</string>
- <string name="wifi_ssid" msgid="6746270925975522641">"सञ्जाल नाम"</string>
+ <string name="wifi_ssid" msgid="6746270925975522641">"नेटवर्कको नाम"</string>
<string name="wifi_ssid_hint" msgid="5010024648106585165">"SSID प्रविष्टि गर्नुहोस्"</string>
<string name="wifi_security" msgid="9136702039496152831">"सुरक्षा"</string>
<string name="wifi_hidden_network" msgid="6647772204699776833">"लुकाइएको नेटवर्क"</string>
<string name="wifi_hidden_network_warning" msgid="8182333050353796473">"यदि तपाईंको राउटरले कुनै नेटवर्कको ID प्रसारण गरिरहेको छैन तर तपाईं भविष्यमा यसमा जडान गर्न चाहनुहुन्छ भने, तपाईं उक्त नेटवर्कलाई लुकाइएको रूपमा सेट गर्न सक्नुहुन्छ।\n\n तपाईंको फोनले नेटवर्क फेला पार्नका लागि नियमित रूपमा आफ्नो सिग्नल प्रसारण गर्ने हुँदा यसले सुरक्षासम्बन्धी जोखिम सिर्जना गर्न सक्छ।\n\nनेटवर्कलाई लुकाइएको रूपमा सेट गर्नुले तपाईंको राउटरको सेटिङ परिवर्तन गर्ने छैन।"</string>
- <string name="wifi_signal" msgid="696548364467704808">"सङ्केत क्षमता"</string>
+ <string name="wifi_signal" msgid="696548364467704808">"सिग्नलको क्षमता"</string>
<string name="wifi_status" msgid="3439931558930689940">"वस्तुस्थिति"</string>
- <string name="tx_wifi_speed" msgid="2571810085003261073">"लिंकको गति ट्रान्समिट गर्नुहोस्"</string>
+ <string name="tx_wifi_speed" msgid="2571810085003261073">"लिंक पठाउने गति"</string>
<string name="rx_wifi_speed" msgid="7392873246110937187">"लिंक प्राप्त गर्ने गति"</string>
<string name="wifi_frequency" msgid="6132852924995724246">"आवृत्ति"</string>
<string name="wifi_ip_address" msgid="5572539114989914831">"IP ठेगाना"</string>
@@ -920,7 +919,7 @@
<string name="wifi_eap_ca_cert" msgid="1496395241849383785">"CA प्रमाणपत्र"</string>
<string name="wifi_eap_domain" msgid="3298302320003640130">"डोमेन"</string>
<string name="wifi_eap_user_cert" msgid="6786839531765719173">"प्रयोगकर्ता प्रमाणपत्र"</string>
- <string name="wifi_eap_identity" msgid="5280457017705738773">"पहिचान गर्नुहोस्"</string>
+ <string name="wifi_eap_identity" msgid="5280457017705738773">"पहिचान"</string>
<string name="wifi_eap_anonymous" msgid="6352344972490839958">"अज्ञात पहिचान"</string>
<string name="wifi_password" msgid="6942983531275177771">"पासवर्ड:"</string>
<string name="wifi_show_password" msgid="7878398590772942202">"पासवर्ड देखाउनुहोस्"</string>
@@ -928,7 +927,7 @@
<string name="wifi_ap_choose_auto" msgid="7927637960569365785">"स्वतः निर्धारित"</string>
<string name="wifi_ap_choose_2G" msgid="43198403259714736">"2.4 GHz ब्यान्ड"</string>
<string name="wifi_ap_choose_5G" msgid="2624859713183683146">"५.० GHz ब्यान्ड"</string>
- <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"५.० GHz ब्यान्ड रुचाइयो"</string>
+ <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"५.० GHz ब्यान्ड भए राम्रो"</string>
<string name="wifi_ap_2G" msgid="5793110086517338494">"२.४ GHz"</string>
<string name="wifi_ap_5G" msgid="4584892544393675403">"५.० GHz"</string>
<string name="wifi_ap_band_select_one" msgid="4409754936554360355">"Wi‑Fi हटस्पटका लागि कम्तीमा एक ब्यान्ड छनौट गर्नुहोस्:"</string>
@@ -936,12 +935,12 @@
<string name="wifi_privacy_settings" msgid="4462092795794247809">"गोपनीयता"</string>
<string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"अनियमित MAC"</string>
<string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"कुनै यन्त्र थप्नुहोस्"</string>
- <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"उक्त यन्त्रलाई “<xliff:g id="SSID">%1$s</xliff:g>” मा यन्त्र थप्न तलको QR कोडलाई मध्य भागमा राख्नुहोस्"</string>
+ <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"उक्त यन्त्रलाई “<xliff:g id="SSID">%1$s</xliff:g>” मा थप्न तलको QR कोडलाई मध्य भागमा पार्नुहोस्"</string>
<string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"QR कोड स्क्यान गर्नुहोस्"</string>
<string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"“<xliff:g id="SSID">%1$s</xliff:g>” मा जडान गर्न तलको QR कोडलाई मध्य भागमा राख्नुहोस्"</string>
- <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"QR कोड स्क्यान गरी Wi‑Fi मा सामेल हुनुहोस्"</string>
- <string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Wi‑Fi साझा रूपमा प्रयोग गर्नुहोस्"</string>
- <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"“<xliff:g id="SSID">%1$s</xliff:g>” मा जडान गर्न यो QR कोड स्क्यान गर्नुहोस् र पासवर्ड आदान प्रदान गर्नुहोस्"</string>
+ <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">" Wi‑Fi जोड्न QR कोड स्क्यान गर्नुहोस्"</string>
+ <string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Wi‑Fi सेयर गर्नुहोस्"</string>
+ <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"“<xliff:g id="SSID">%1$s</xliff:g>” मा कनेक्ट गर्न र पासवर्ड सेयर गर्न यो QR कोड स्क्यान गर्नुहोस्"</string>
<string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"“<xliff:g id="SSID">%1$s</xliff:g>” मा जडान गर्न QR कोड स्क्यान गर्नुहोस्"</string>
<string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"QR कोड पढ्न सकिएन। कोडलाई पुनः केन्द्रमा ल्याउनुहोस् र फेरि प्रयास गर्नुहोस्"</string>
<string name="wifi_dpp_failure_authentication_or_configuration" msgid="9142051662156233679">"फेरि प्रयास गर्नुहोस्। समस्या यथावत् रहिरहेमा यन्त्रका निर्मातासँग सम्पर्क गर्नुहोस्"</string>
@@ -960,14 +959,14 @@
<string name="wifi_dpp_device_found" msgid="6488461467496850841">"यन्त्र भेटियो"</string>
<string name="wifi_dpp_sharing_wifi_with_this_device" msgid="2540529164687476827">"यो सेवामार्फत Wi‑Fi आदान प्रदान गर्दै…"</string>
<string name="wifi_dpp_connecting" msgid="4229290407210299897">"जडान गर्दै…"</string>
- <string name="wifi_dpp_share_hotspot" msgid="847987212473038179">"हटस्पट आदान प्रदान गर्नुहोस्"</string>
+ <string name="wifi_dpp_share_hotspot" msgid="847987212473038179">"हटस्पट सेयर गर्नुहोस्"</string>
<string name="wifi_dpp_lockscreen_title" msgid="3910665850075275963">"यो तपाईं नै हो भन्ने पुष्टि गर्नुहोस्"</string>
<string name="wifi_dpp_wifi_password" msgid="8007558344032612455">"Wi-Fi को पासवर्ड: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
<string name="wifi_dpp_hotspot_password" msgid="6172326289042241924">"हटस्पटको पासवर्ड: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
<string name="wifi_dpp_add_device" msgid="1347056725253936358">"यन्त्र थप्नुहोस्"</string>
<string name="wifi_dpp_connect_network_using_qr_code" msgid="115993715600532357">"कुनै QR कोड प्रयोग गरी यस नेटवर्कमा जोड्नुहोस्"</string>
<string name="retry" msgid="8500839563577344702">"पुनः प्रयास गर्नु…"</string>
- <string name="wifi_shared" msgid="5054256778276524960">"अन्य यन्त्र प्रयोगकर्ताहरूसँग साझेदारी गर्नुहोस्"</string>
+ <string name="wifi_shared" msgid="5054256778276524960">"अन्य यन्त्र प्रयोगकर्ताहरूसँग सेयर गर्नुहोस्"</string>
<string name="wifi_unchanged" msgid="6804964646942333992">"(अपरिवर्तित)"</string>
<string name="wifi_unspecified" msgid="893491188483500809">"कृपया चयन गर्नुहोस्"</string>
<string name="wifi_multiple_cert_added" msgid="7986200585749147204">"(बहु प्रमाणपत्रहरू थपिए)"</string>
@@ -976,7 +975,7 @@
<string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"प्रमाणित नगर्नुहोस्"</string>
<string name="wifi_do_not_validate_eap_server_warning" msgid="3895397996759837323">"कुनै प्रमाणपत्र निर्दिष्ट गरिएको छैन। तपाईंको जडान निजी हुने छैन।"</string>
<string name="wifi_ssid_too_long" msgid="34911971389775920">"नेटवर्कको नाम धेरै लामो भयो।"</string>
- <string name="wifi_no_domain_warning" msgid="735859919311067606">"डोमेन निर्दिष्ट गर्नुपर्छ"</string>
+ <string name="wifi_no_domain_warning" msgid="735859919311067606">"डोमेन तोक्नु पर्छ"</string>
<string name="wifi_wps_available_first_item" msgid="3221671453930485243">"WPS उपलब्ध छ"</string>
<string name="wifi_wps_available_second_item" msgid="5703265526619705185">" (WPS उपलब्ध)"</string>
<string name="wifi_carrier_connect" msgid="7202618367339982884">"सेवा प्रदायकको Wi‑Fi नेटवर्क"</string>
@@ -989,9 +988,9 @@
<string name="wifi_hotspot_message" msgid="6762452611090766607">"<xliff:g id="APP_NAME">%1$s</xliff:g> सञ्जाल जड्न पहिले अनलाइनमा हस्ताक्षर गर्न आवश्यक।"</string>
<string name="wifi_hotspot_connect" msgid="409079339360849653">"CONNECT"</string>
<string name="no_internet_access_text" msgid="7093326244145734504">"यो नेटवर्कसँग इन्टरनेटमाथि पहुँच छैन। जडान भइरहने हो?"</string>
- <string name="partial_connectivity_text" msgid="2142157808079235684">"इन्टरनेट जडान सीमित हुँदा कतिपय अनुप्रयोग तथा सेवाहरूले काम नगर्न सक्छन्। अघि बढ्नुहोस्"</string>
+ <string name="partial_connectivity_text" msgid="2142157808079235684">"इन्टरनेट जडान सीमित हुँदा कतिपय एप तथा सेवाहरूले काम नगर्न सक्छन्। अघि बढ्नुहोस्"</string>
<string name="no_internet_access_remember" msgid="1368137189939004202">"यस नेटवर्कको लागि फेरि नसोध्नुहोस्"</string>
- <string name="lost_internet_access_title" msgid="1061916948695946130">"Wi-Fi इन्टरनेटमा जडान भएको छैन"</string>
+ <string name="lost_internet_access_title" msgid="1061916948695946130">"Wi-Fi इन्टरनेटमा कनेक्ट भएको छैन"</string>
<string name="lost_internet_access_text" msgid="8962010031520731813">"Wi-Fi को जडान खराब हुँदा तपाईं मोबाइल नेटवर्कमा स्विच गर्न सक्नुहुन्छ। डेटा उपयोग शुल्कहरू लाग्न सक्छन्।"</string>
<string name="lost_internet_access_switch" msgid="9218006455779873700">"मोबाइलमा स्विच गर्नुहोस्"</string>
<string name="lost_internet_access_cancel" msgid="6577871064062518744">"Wi‑Fi मा कायम रहनुहोस्"</string>
@@ -1021,11 +1020,11 @@
<string name="wifi_advanced_ssid_title" msgid="4229741334913894856">"SSID"</string>
<string name="wifi_advanced_mac_address_title" msgid="1162782083754021737">"म्याक ठेगाना"</string>
<string name="wifi_advanced_ip_address_title" msgid="2708185994512829071">"IP ठेगाना"</string>
- <string name="wifi_details_title" msgid="2164042631550920157">"नेटवर्कसम्बन्धी विवरणहरू"</string>
+ <string name="wifi_details_title" msgid="2164042631550920157">"नेटवर्कको विवरण"</string>
<string name="wifi_details_subnet_mask" msgid="53396707004763012">"सबनेट मास्क"</string>
<string name="wifi_details_dns" msgid="1118251455740116559">"DNS"</string>
<string name="wifi_details_ipv6_address_header" msgid="1642310137145363299">"IPv6 ठेगानाहरू"</string>
- <string name="wifi_saved_access_points_label" msgid="3790693285928292563">"सुरक्षित सञ्जालहरू"</string>
+ <string name="wifi_saved_access_points_label" msgid="3790693285928292563">"सेभ गरिएका नेटवर्कहरू"</string>
<string name="wifi_subscribed_access_points_tab" msgid="7498765485953257229">"सदस्यताहरू"</string>
<!-- no translation found for wifi_saved_access_points_tab (4677730543624191122) -->
<skip />
@@ -1041,7 +1040,7 @@
<string name="wifi_dns2" msgid="1905876166783761641">"DNS 2"</string>
<string name="wifi_gateway" msgid="7455334454444443397">"गेटवे"</string>
<string name="wifi_network_prefix_length" msgid="1941206966133010633">"नेटवर्क उपसर्ग लम्बाइ"</string>
- <string name="wifi_p2p_settings_title" msgid="3213180637906683308">"Wi-Fi प्रत्यक्ष"</string>
+ <string name="wifi_p2p_settings_title" msgid="3213180637906683308">"Wi-fi Direct"</string>
<string name="wifi_p2p_device_info" msgid="4717490498956029237">"उपकरण जानकारी"</string>
<string name="wifi_p2p_persist_network" msgid="1110453878886476660">"यस जडानलाई सम्झनुहोस्"</string>
<string name="wifi_p2p_menu_search" msgid="8207638860263805291">"उपकरणहरू खोजी गर्नुहोस्"</string>
@@ -1069,8 +1068,8 @@
<string name="wifi_hotspot_password_title" msgid="4289338152595154889">"हटस्पटको पासवर्ड"</string>
<string name="wifi_hotspot_ap_band_title" msgid="3485744480410441949">"AP ब्यान्ड"</string>
<string name="wifi_hotspot_footer_info_regular" msgid="3876006922622827363">"आफ्ना अन्य यन्त्रहरूका लागि Wi‑Fi नेटवर्क सिर्जना गर्न हटस्पट प्रयोग गर्नुहोस्। हटस्पटले तपाईंको मोबाइल डेटा जडान प्रयोग गरेर इन्टरनेट प्रदान गर्दछ। अतिरिक्त मोबाइल डेटाको शुल्क लाग्न सक्छ।"</string>
- <string name="wifi_hotspot_footer_info_local_only" msgid="3339582350894639261">"अनुप्रयोगहरूले नजिकैका यन्त्रहरूसँग सामग्री आदान प्रदान गर्न एउटा हटस्पट सिर्जना गर्न सक्छन्।"</string>
- <string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"Wi‑Fi हटस्पट स्वतः निष्क्रिय पार्नुहोस्"</string>
+ <string name="wifi_hotspot_footer_info_local_only" msgid="3339582350894639261">"एपहरूले नजिकैका यन्त्रहरूसँग सामग्री आदान प्रदान गर्न एउटा हटस्पट सिर्जना गर्न सक्छन्।"</string>
+ <string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"स्वतः Wi‑Fi हटस्पट अफ गर्नुहोस्"</string>
<string name="wifi_hotspot_auto_off_summary" msgid="3866769400624802105">"कुनै पनि यन्त्र जडान नहुँदा Wi‑Fi हटस्पट स्वतः निष्क्रिय हुनेछ"</string>
<string name="wifi_tether_starting" msgid="7676952148471297900">"हटस्पट खुल्दै..."</string>
<string name="wifi_tether_stopping" msgid="7478561853791953349">"हटस्पट बन्द गरिँदै..."</string>
@@ -1103,14 +1102,17 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"मोबाइल"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Wi‑Fi उपलब्ध छैन भने मोबाइल नेटवर्क प्रयोग गर्नुहोस्"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"मोबाइल नेटवर्क उपलब्ध नभएमा Wi‑Fi प्रयोग गर्नुहोस्"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Wi‑Fi मार्फत कल गर्नुहोस्। Wi‑Fi नेटवर्कले काम गरेन भने सम्पर्क विच्छेद हुने छ।"</string>
<string name="wifi_calling_off_explanation" msgid="1653424723742898015">"Wi-Fi कलिङ सक्रिय पारिएका बेला तपाईंको फोनले तपाईंको प्राथमिकता र सङ्केतको बलियोपनाका आधारमा कलहरूलाई Wi-Fi नेटवर्कहरू वा तपाईंको सेवा प्रदायकको नेटवर्कमार्फत पठाउन सक्छ। यो सुविधा सक्रिय गर्नुअघि लाग्ने शुल्क र अन्य विवरणहरूबारे बुझ्न आफ्नो सेवा प्रदायकसँग सम्पर्क गर्नुहोस्।<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="8648609693875720408"></string>
- <string name="emergency_address_title" msgid="5779915349686787024">"आपतकालीन ठेगाना"</string>
- <string name="emergency_address_summary" msgid="478668478569851714">"तपाईंले Wi‑Fi मार्फत आपतकालीन कल गर्दा उक्त ठेगानालाई तपाईंको स्थानको रूपमा प्रयोग गरिन्छ"</string>
+ <string name="emergency_address_title" msgid="5779915349686787024">"आपत्कालीन ठेगाना"</string>
+ <string name="emergency_address_summary" msgid="478668478569851714">"तपाईंले Wi‑Fi मार्फत आपत्कालीन कल गर्दा उक्त ठेगानालाई तपाईंको स्थानको रूपमा प्रयोग गरिन्छ"</string>
<string name="private_dns_help_message" msgid="7633526525131196650">"DNS का सुविधाहरूबारे "<annotation id="url">"थप जान्नुहोस्"</annotation></string>
<string name="wifi_calling_pref_managed_by_carrier" msgid="5458050015417972072">"सेवा प्रदायकद्वारा व्यवस्थापन गरिएको सेटिङ"</string>
<string name="wifi_calling_settings_activation_instructions" msgid="2863642668648110908">"Wi-Fi कलिङ सक्रिय गर्नुहोस्"</string>
@@ -1155,7 +1157,7 @@
<string name="dock_audio_summary_unknown" msgid="1615958511030469507">"संलग्न डकको लागि सेटिङहरू"</string>
<string name="dock_not_found_title" msgid="2035088760477532435">"डक भेटिएन"</string>
<string name="dock_not_found_text" product="tablet" msgid="5996654431405111902">"डक अडियो सेट गर्न अघि तपाईँले ट्याब्लेट डक गर्नु पर्ने हुन्छ।"</string>
- <string name="dock_not_found_text" product="default" msgid="8275091896320216368">"तपाईंले डक अडियो सेटिङ गर्नु अघि फोन डक गर्नु आवश्यक पर्दछ।"</string>
+ <string name="dock_not_found_text" product="default" msgid="8275091896320216368">"तपाईंले डक अडियो सेटिङ गर्नुअघि फोन डक गर्नु आवश्यक पर्दछ।"</string>
<string name="dock_sounds_enable_title" msgid="3385931465312084061">"डक राख्ने आवाज"</string>
<string name="dock_sounds_enable_summary_on" product="tablet" msgid="4322104626905111669">"डकबाट ट्याब्लेट हटाउँदा वा राख्दा आवाज बजाउनुहोस्"</string>
<string name="dock_sounds_enable_summary_on" product="default" msgid="2751810717801098293">"फोन डकमा राख्दा वा झिक्दा आवाज बजाउनुहोस्"</string>
@@ -1172,7 +1174,7 @@
<string name="color_mode_title" msgid="8164858320869449142">"रङहरू"</string>
<string name="color_mode_option_natural" msgid="1292837781836645320">"प्राकृतिक"</string>
<string name="color_mode_option_boosted" msgid="453557938434778933">"बुस्ट गरिएको"</string>
- <string name="color_mode_option_saturated" msgid="7758384943407859851">"परिपूर्ण पारिएको"</string>
+ <string name="color_mode_option_saturated" msgid="7758384943407859851">"स्याचुरेटेड"</string>
<string name="color_mode_option_automatic" msgid="6572718611315165117">"अनुकूलनीय"</string>
<string name="color_mode_summary_natural" msgid="1247153893843263340">"सही रङहरू मात्र प्रयोग गर्नुहोस्"</string>
<string name="color_mode_summary_automatic" msgid="6066740785261330514">"स्पष्ट र सही रङहरूबीच समायोजन गर्नुहोस्"</string>
@@ -1227,7 +1229,7 @@
<string name="night_display_summary_on_auto_mode_custom" msgid="2200631112239399233">"<xliff:g id="ID_1">%1$s</xliff:g> मा स्वतः निष्क्रिय हुनेछ"</string>
<string name="night_display_summary_on_auto_mode_twilight" msgid="8386769601369289561">"सूर्योदयको बेला स्वतः निष्क्रिय हुनेछ"</string>
<string name="night_display_activation_on_manual" msgid="8379477527072027346">"अहिले नै सक्रिय गर्नुहोस्"</string>
- <string name="night_display_activation_off_manual" msgid="7776082151269794201">"अहिले नै निष्क्रिय पार्नुहोस्"</string>
+ <string name="night_display_activation_off_manual" msgid="7776082151269794201">"अहिले नै अफ गर्नुहोस्"</string>
<string name="night_display_activation_on_twilight" msgid="5610294051700287249">"सूर्योदयसम्म सक्रिय गर्नुहोस्"</string>
<string name="night_display_activation_off_twilight" msgid="6846727701281556110">"सूर्यास्तसम्म निष्क्रिय पार्नुहोस्"</string>
<string name="night_display_activation_on_custom" msgid="4761140206778957611">"<xliff:g id="ID_1">%1$s</xliff:g> सम्म सक्रिय गर्नुहोस्"</string>
@@ -1247,7 +1249,7 @@
<string name="screensaver_settings_summary_either_long" msgid="6078038506795498288">"चार्ज वा डक गरिरहँदा"</string>
<string name="screensaver_settings_summary_either_short" msgid="2453772128682850053">"कुनै"</string>
<string name="screensaver_settings_summary_sleep" msgid="6097363596749362692">"चार्ज हुँदा"</string>
- <string name="screensaver_settings_summary_dock" msgid="6297808146601570196">"डक भएको बेला"</string>
+ <string name="screensaver_settings_summary_dock" msgid="6297808146601570196">"डक गरिएको बेला"</string>
<string name="screensaver_settings_summary_never" msgid="3995259444981620707">"कहिल्यै पनि होइन"</string>
<string name="screensaver_settings_summary_off" msgid="6119947316484763131">"बन्द"</string>
<string name="screensaver_settings_disabled_prompt" msgid="1897518064782596947">"फोन डकमा र/वा शयन अवस्थामा हुँदा हुने कुरालाई नियन्त्रण गर्न स्क्रिन सेभरलाई सक्रिय गर्नुहोस्।"</string>
@@ -1264,7 +1266,7 @@
<string name="doze_always_on_title" msgid="8555184965031789941">"सधैँ सक्रिय"</string>
<string name="doze_always_on_summary" msgid="7654436900436328950">"समय, सूचनाका आइकनहरू र अन्य जानकारी देखाउनुहोस्। ब्याट्रीको बढेको उपयोग।"</string>
<string name="title_font_size" msgid="5021464556860010851">"फन्ट आकार"</string>
- <string name="short_summary_font_size" msgid="4141077908728522946">"पाठ सन्देश अझ ठूलो वा सानो पार्नुहोस्"</string>
+ <string name="short_summary_font_size" msgid="4141077908728522946">"पाठ सन्देश अझ ठुलो वा सानो पार्नुहोस्"</string>
<string name="sim_lock_settings" msgid="1986924650622642189">"SIM कार्ड लक सेटिङहरू"</string>
<string name="sim_lock_settings_category" msgid="1126759898277681516">"सिमकार्ड लक"</string>
<string name="sim_lock_settings_summary_off" msgid="348656447968142307">"निष्क्रिय छ"</string>
@@ -1352,7 +1354,7 @@
<string name="status_data_state" msgid="4538705798873861963">"मोबाइल सञ्जाल वस्तुस्थिति"</string>
<string name="status_esim_id" msgid="9201767073386770286">"EID"</string>
<string name="status_service_state" msgid="4406215321296496234">"सेवा स्थिति"</string>
- <string name="status_signal_strength" msgid="4302597886933728789">"सङ्केत क्षमता"</string>
+ <string name="status_signal_strength" msgid="4302597886933728789">"सिग्नलको क्षमता"</string>
<string name="status_roaming" msgid="5191044997355099561">"रोमिङ"</string>
<string name="status_operator" msgid="6017986100643755390">"सञ्जाल"</string>
<string name="status_wifi_mac_address" msgid="3868452167971295995">"Wi-Fi म्याक ठेगाना"</string>
@@ -1367,10 +1369,10 @@
<string name="memory_available_read_only" msgid="9125440204248584531">"उपलब्ध (केवल पढ्नका लागि मात्र)"</string>
<string name="memory_size" msgid="6637939229251056764">"जम्मा ठाउँ"</string>
<string name="memory_calculating_size" msgid="8407591625479256510">"गणना गर्दै ..."</string>
- <string name="memory_apps_usage" msgid="1886814780760368266">"अनुप्रयोग & अनुप्रयोग डेटा"</string>
+ <string name="memory_apps_usage" msgid="1886814780760368266">"एप & एप डेटा"</string>
<string name="memory_media_usage" msgid="2744652206722240527">"मिडिया"</string>
<string name="memory_downloads_usage" msgid="7039979723012065168">"डाउनलोडहरू"</string>
- <string name="memory_dcim_usage" msgid="599009211606524732">"तस्बिरहरू, भिडियोहरू"</string>
+ <string name="memory_dcim_usage" msgid="599009211606524732">"फोटोहरू, भिडियोहरू"</string>
<string name="memory_music_usage" msgid="809605300042546279">"अडियो (सङ्गीत, रिङ्गटोन, पडकास्ट, आदि)"</string>
<string name="memory_media_misc_usage" msgid="6258827529046910705">"अन्य फाइलहरू"</string>
<string name="memory_media_cache_usage" msgid="1307620682751377717">"क्यास गरेको डेटा"</string>
@@ -1386,15 +1388,15 @@
<string name="sd_mount_summary" product="default" msgid="6849124618494311233"></string>
<string name="sd_format" product="nosdcard" msgid="918370986254863144">"USB भण्डारण मेटाउनुहोस्"</string>
<string name="sd_format" product="default" msgid="1346245995138883960">"SD कार्ड मेटाउनुहोस्"</string>
- <string name="sd_format_summary" product="nosdcard" msgid="1179857727779521920">"आन्तरिक USB भण्डारणमा सम्पूर्ण डेटाहरू मेटाउँछ, जस्तै सङ्गीत र तस्बिरहरू"</string>
- <string name="sd_format_summary" product="default" msgid="4284028411908176234">"SD कार्डमा सबै डेटा जस्तै सङ्गीत र फोटाहरू मेटाउँछ"</string>
+ <string name="sd_format_summary" product="nosdcard" msgid="1179857727779521920">"आन्तरिक USB भण्डारणमा सम्पूर्ण डेटाहरू मेटाउँछ, जस्तै सङ्गीत र फोटोहरू"</string>
+ <string name="sd_format_summary" product="default" msgid="4284028411908176234">"SD कार्डमा सबै डेटा जस्तै सङ्गीत र फोटोहरू मेटाउँछ"</string>
<string name="memory_clear_cache_title" msgid="4306793268129306684">"क्यास डेटा हटाउनु हुन्छ?"</string>
<string name="memory_clear_cache_message" msgid="6723120398411410031">"यसले सबै अनुप्रयोगहरूको लागि केस गरिएको डेटा हटाउँछ।"</string>
<string name="mtp_ptp_mode_summary" msgid="6074099855478444183">"MTP वा PTP प्रकार्य सक्रिय छ"</string>
<string name="dlg_confirm_unmount_title" product="nosdcard" msgid="3843209947310774105">"USB भण्डारण अनमाउन्ट गर्ने हो?"</string>
<string name="dlg_confirm_unmount_title" product="default" msgid="4400426555375434431">"SD कार्ड अनमाउन्ट गर्ने हो?"</string>
- <string name="dlg_confirm_unmount_text" product="nosdcard" msgid="1423648405874813948">"यदि तपाईँले USB भण्डारण अनमाउन्ट गर्नु भयो भने फेरि तपाईँले USB भण्डारण पुनः माउन्ट नगरेसम्म तपाईँले चलाउनु भएका केही अनुप्रयोगहरू अनुपलब्ध हुन सक्छन्।"</string>
- <string name="dlg_confirm_unmount_text" product="default" msgid="4099391737780732622">"यदि तपाईँले SD कार्ड अनमाउन्ट गर्नु भयो भने फेरि तपाईँले SD कार्ड पुनःमाउन्ट नगरेसम्म तपाईँले चलाउनु भएका केही अनुप्रयोगहरू अनुपलब्ध हुन सक्छन्।"</string>
+ <string name="dlg_confirm_unmount_text" product="nosdcard" msgid="1423648405874813948">"यदि तपाईँले USB भण्डारण अनमाउन्ट गर्नु भयो भने फेरि तपाईँले USB भण्डारण पुनः माउन्ट नगरेसम्म तपाईँले चलाउनु भएका केही एपहरू अनुपलब्ध हुन सक्छन्।"</string>
+ <string name="dlg_confirm_unmount_text" product="default" msgid="4099391737780732622">"यदि तपाईँले SD कार्ड अनमाउन्ट गर्नु भयो भने फेरि तपाईँले SD कार्ड पुनःमाउन्ट नगरेसम्म तपाईँले चलाउनु भएका केही एपहरू अनुपलब्ध हुन सक्छन्।"</string>
<string name="dlg_error_unmount_title" product="nosdcard" msgid="3132640848329117857"></string>
<string name="dlg_error_unmount_title" product="default" msgid="3132640848329117857"></string>
<string name="dlg_error_unmount_text" product="nosdcard" msgid="4710773826053117136">"USB भण्डारण अनमाउन्ट गर्न सकेन। पछि फेरि प्रयास गर्नुहोस्।"</string>
@@ -1404,13 +1406,13 @@
<string name="sd_ejecting_title" msgid="595074246815112145">"अनमाउन्ट गरिंदै"</string>
<string name="sd_ejecting_summary" msgid="5708943172014003213">"अनमाउन्ट प्रगतिमा"</string>
<string name="storage_low_title" msgid="6957178208426099592">"भण्डारण ठाउँ सकिँदै छ"</string>
- <string name="storage_low_summary" msgid="4475275204869514141">"केही प्रणाली प्रकार्यहरू जस्तै सिंक गर्ने, ठिकसँग काम नगर्न सक्छ। वस्तुहरू जस्तै अनुप्रयोग वा मिडिया सामग्री मेटाएर वा पिन हटाएर ठाउँ खाली बनाउनुहोस् ।"</string>
+ <string name="storage_low_summary" msgid="4475275204869514141">"केही प्रणाली प्रकार्यहरू जस्तै सिंक गर्ने, ठिकसँग काम नगर्न सक्छ। वस्तुहरू जस्तै एप वा मिडिया सामग्री मेटाएर वा पिन हटाएर ठाउँ खाली बनाउनुहोस् ।"</string>
<string name="storage_menu_rename" msgid="3731682449294417745">"पुन: नामाकरण गर्नुहोस्"</string>
<string name="storage_menu_mount" msgid="6395893560780365473">"माउन्ट गर्नुहोस्"</string>
<string name="storage_menu_unmount" msgid="5041360076873514189">"निकाल्नुहोस्"</string>
- <string name="storage_menu_format" msgid="4285487419855632896">"फरम्याट गर्नुहोस्"</string>
- <string name="storage_menu_format_public" msgid="5361388353980722971">"पोर्टेबल रूपमा फरम्याट गर्नुहोस्"</string>
- <string name="storage_menu_format_private" msgid="5288599205435858720">"आन्तरिक रूपमा फरम्याट गर्नुहोस्"</string>
+ <string name="storage_menu_format" msgid="4285487419855632896">"फर्म्याट गर्नुहोस्"</string>
+ <string name="storage_menu_format_public" msgid="5361388353980722971">"पोर्टेबल रूपमा फर्म्याट गर्नुहोस्"</string>
+ <string name="storage_menu_format_private" msgid="5288599205435858720">"आन्तरिक रूपमा फर्म्याट गर्नुहोस्"</string>
<string name="storage_menu_migrate" msgid="1885806122515759703">"डेटा सार्नुहोस्"</string>
<string name="storage_menu_forget" msgid="4345021250834642640">"बिर्सनुहोस्"</string>
<string name="storage_menu_set_up" msgid="2849170579745958513">"सेटअप गर्नुहोस्"</string>
@@ -1422,7 +1424,7 @@
<string name="usb_mtp_title" msgid="6893938968831995500">"मिडिया उपकरण (MTP)"</string>
<string name="usb_mtp_summary" msgid="4427354560399094322">"तपाईँलाई विन्डोजमा मिडिया फाइलहरू सार्न वा म्याकमा एन्ड्रोइड फाइल सार्न अनुमति दिन्छ (हेर्नुहोस् (www.android.com/filetransfer)"</string>
<string name="usb_ptp_title" msgid="6629335976394685361">"क्यामेरा (PTP)"</string>
- <string name="usb_ptp_summary" msgid="460425275251168189">"तपाईँलाई क्यामेरा सफ्टवेयर प्रयोग गरेर फोटाहरू स्थानान्तरण गर्न, र MTP समर्थन नगर्ने कम्प्युटरमा कुनै पनि फाइलहरू स्थानान्तरण दिन्छ।"</string>
+ <string name="usb_ptp_summary" msgid="460425275251168189">"तपाईँलाई क्यामेरा सफ्टवेयर प्रयोग गरेर फोटोहरू स्थानान्तरण गर्न, र MTP समर्थन नगर्ने कम्प्युटरमा कुनै पनि फाइलहरू स्थानान्तरण दिन्छ।"</string>
<string name="usb_midi_title" msgid="8626512517313340943">"MIDI"</string>
<string name="usb_midi_summary" msgid="3607444815743771712">"MIDI द्वारा सक्रिय अनुप्रयोगहरूलाई तपाईंको कम्प्युटरमा USB मार्फत MIDI सफ्टवेयरसँग काम गर्न दिन्छ।"</string>
<string name="storage_other_users" msgid="1055693465220962928">"अन्य प्रयोगकर्ताहरू"</string>
@@ -1436,18 +1438,18 @@
<string name="storage_mount_failure" msgid="3189035117100226603">"<xliff:g id="NAME">%1$s</xliff:g> लाई माउन्ट गर्न सकेन"</string>
<string name="storage_unmount_success" msgid="4671254520043852798">"<xliff:g id="NAME">%1$s</xliff:g> सुरक्षित तवरले निकालिएको छ"</string>
<string name="storage_unmount_failure" msgid="2224554531048745614">"<xliff:g id="NAME">%1$s</xliff:g> सुरक्षित तवरले निकाल्न सकिएन"</string>
- <string name="storage_format_success" msgid="5626883039766897517">"<xliff:g id="NAME">%1$s</xliff:g> फरम्याट गरियो"</string>
- <string name="storage_format_failure" msgid="4383764964041410256">"<xliff:g id="NAME">%1$s</xliff:g> फरम्याट गर्न सकिएन"</string>
+ <string name="storage_format_success" msgid="5626883039766897517">"<xliff:g id="NAME">%1$s</xliff:g> फर्म्याट गरियो"</string>
+ <string name="storage_format_failure" msgid="4383764964041410256">"<xliff:g id="NAME">%1$s</xliff:g> फर्म्याट गर्न सकिएन"</string>
<string name="storage_rename_title" msgid="9117863170875961530">"भण्डारण पुन: नामाकरण गर्नुहोस्"</string>
<string name="storage_dialog_unmounted" msgid="515810851912430933">"यो <xliff:g id="NAME_0">^1</xliff:g> सुरक्षित रूपमा निकालियो, तर अझै पनि उपलब्ध छ। \n\n यो <xliff:g id="NAME_1">^1</xliff:g> प्रयोग गर्न, तपाईँले पहिला यो माउन्ट गर्नुपर्छ।"</string>
<string name="storage_dialog_unmountable" msgid="7082856306456936054">"यो <xliff:g id="NAME_0">^1</xliff:g> बिग्रिएको छ। \n\n यो <xliff:g id="NAME_1">^1</xliff:g> प्रयोग गर्न, तपाईँले पहिले यसलाई सेटअप गर्नुहोस्।"</string>
<string name="storage_dialog_unsupported" msgid="8274023677580782553">"यो यन्त्रले यो <xliff:g id="NAME_0">^1</xliff:g> लाई समर्थन गर्दैन। \n\n यस यन्त्रसँग यो <xliff:g id="NAME_1">^1</xliff:g> प्रयोग गर्न, तपाईँले पहिला यो सेटअप गर्नुपर्छ।"</string>
- <string name="storage_internal_format_details" msgid="2780806013122012384">"ढाँचामा मिलाएपछि, तपाईँले यसलाई <xliff:g id="NAME_0">^1</xliff:g> अन्य यन्त्रहरूमा प्रयोग गर्न सक्नुहुन्छ। \n\nयसका <xliff:g id="NAME_1">^1</xliff:g> सबै डेटा मेटिनेछन्। पहिले ब्याकअप राख्ने बारे विचार गर्नुहोस्। \n\n"<b>"तस्बिर तथा अन्य मिडिया ब्याकअप गर्नुहोस्"</b>" \n यस यन्त्रमा वैकल्पिक भण्डारण गर्न आफ्नो मिडिया फाइलहरू सार्नुहोस्, वा USB केबल प्रयोग गरी कम्प्युटरको स्थानान्तरण गर्नुहोस्। \n\n"<b>"अनुप्रयोगहरू ब्याकअप गर्नुहोस्"</b>" \n यसमा <xliff:g id="NAME_6">^1</xliff:g> भण्डारित सबै अनुप्रयोगहरू हटाइने छन् र तिनका डेटा मेटिनेछन्। यी अनुप्रयोगहरू राख्न, यस यन्त्रमा वैकल्पिक भण्डारण गर्न तिनीहरूलाई सार्नुहोस्।"</string>
- <string name="storage_internal_unmount_details" msgid="4667435317528624039"><b>"जब तपाईं <xliff:g id="NAME_0">^1</xliff:g> लाई निकाल्नुहुन्छ, यसमा भएका अनुप्रयोगहरू चल्न छोड्नेछन्, र पुनः नघुसाएसम्म त्यसमा भएका मिडिया फाइलहरू उपलब्ध हुने छैनन्।"</b>\n\n"यो <xliff:g id="NAME_1">^1</xliff:g> यस यन्त्रमा मात्र काम गर्ने हिसाबले फरम्याट गरिएको छ। यो अन्य कुनैमा काम गर्ने छैन।"</string>
- <string name="storage_internal_forget_details" msgid="5655856574682184453">"<xliff:g id="NAME">^1</xliff:g> मा भएका अनुप्रयोगहरू, तस्बिरहरु, र डेटाको प्रयोग गर्न, यसलाई पुन: घुसाउनुहोस्।\n\nवैकल्पिक रूपमा, यन्त्र उपलब्ध नभएको खण्डमा यस भण्डारणलाई भुल्नको लागि रोज्न सक्नुहुनेछ।\n\nयदि तपाईँले भुल्ने विकल्प रोज्नु हुन्छ भने, यन्त्रमा भएका सम्पूर्ण डेटा सदाको लागि नष्ट हुनेछ।\n\nतपाईँले पछि पनि अनुप्रयोगहरू पुन: स्थापना गर्न सक्नुहुन्छ तर यस यन्त्रमा भण्डारण भएका डेटा नष्ट हुनेछ।"</string>
+ <string name="storage_internal_format_details" msgid="2780806013122012384">"ढाँचामा मिलाएपछि, तपाईँले यसलाई <xliff:g id="NAME_0">^1</xliff:g> अन्य यन्त्रहरूमा प्रयोग गर्न सक्नुहुन्छ। \n\nयसका <xliff:g id="NAME_1">^1</xliff:g> सबै डेटा मेटिनेछन्। पहिले ब्याकअप राख्ने बारे विचार गर्नुहोस्। \n\n"<b>"फोटो तथा अन्य मिडिया ब्याकअप गर्नुहोस्"</b>" \n यस यन्त्रमा वैकल्पिक भण्डारण गर्न आफ्नो मिडिया फाइलहरू सार्नुहोस्, वा USB केबल प्रयोग गरी कम्प्युटरको स्थानान्तरण गर्नुहोस्। \n\n"<b>"एपहरू ब्याकअप गर्नुहोस्"</b>" \n यसमा <xliff:g id="NAME_6">^1</xliff:g> भण्डारित सबै एपहरू हटाइने छन् र तिनका डेटा मेटिनेछन्। यी एपहरू राख्न, यस यन्त्रमा वैकल्पिक भण्डारण गर्न तिनीहरूलाई सार्नुहोस्।"</string>
+ <string name="storage_internal_unmount_details" msgid="4667435317528624039"><b>"जब तपाईं <xliff:g id="NAME_0">^1</xliff:g> लाई निकाल्नुहुन्छ, यसमा भएका एपहरू चल्न छोड्नेछन्, र पुनः नघुसाएसम्म त्यसमा भएका मिडिया फाइलहरू उपलब्ध हुने छैनन्।"</b>\n\n"यो <xliff:g id="NAME_1">^1</xliff:g> यस यन्त्रमा मात्र काम गर्ने हिसाबले फर्म्याट गरिएको छ। यो अन्य कुनैमा काम गर्ने छैन।"</string>
+ <string name="storage_internal_forget_details" msgid="5655856574682184453">"<xliff:g id="NAME">^1</xliff:g> मा भएका एपहरू, तस्बिरहरु, र डेटाको प्रयोग गर्न, यसलाई पुन: घुसाउनुहोस्।\n\nवैकल्पिक रूपमा, यन्त्र उपलब्ध नभएको खण्डमा यस भण्डारणलाई भुल्नको लागि रोज्न सक्नुहुनेछ।\n\nयदि तपाईँले भुल्ने विकल्प रोज्नु हुन्छ भने, यन्त्रमा भएका सम्पूर्ण डेटा सदाको लागि नष्ट हुनेछ।\n\nतपाईँले पछि पनि एपहरू पुन: स्थापना गर्न सक्नुहुन्छ तर यस यन्त्रमा भण्डारण भएका डेटा नष्ट हुनेछ।"</string>
<string name="storage_internal_forget_confirm_title" msgid="331032276130605241">"<xliff:g id="NAME">^1</xliff:g> भुल्नुभयो?"</string>
- <string name="storage_internal_forget_confirm" msgid="3052483375203727176">"यो <xliff:g id="NAME">^1</xliff:g> मा भण्डारण गरिएका सबै अनुप्रयोगहरू, तस्बिरहरू, र डेटा सधैंका लागि नष्ट हुनेछन्।"</string>
- <string name="storage_detail_apps" msgid="8154648512504196820">"अनुप्रयोगहरू"</string>
+ <string name="storage_internal_forget_confirm" msgid="3052483375203727176">"यो <xliff:g id="NAME">^1</xliff:g> मा भण्डारण गरिएका सबै एपहरू, फोटोहरू, र डेटा सधैंका लागि नष्ट हुनेछन्।"</string>
+ <string name="storage_detail_apps" msgid="8154648512504196820">"एपहरू"</string>
<string name="storage_detail_images" msgid="6996202225684468964">"छविहरू"</string>
<string name="storage_detail_videos" msgid="6030983354721080849">"भिडियोहरू"</string>
<string name="storage_detail_audio" msgid="6011098436589663944">"अडियो"</string>
@@ -1455,46 +1457,46 @@
<string name="storage_detail_other" msgid="9164851767437306618">"अन्य"</string>
<string name="storage_detail_system" msgid="6784247618772153283">"प्रणाली"</string>
<string name="storage_detail_explore" msgid="8206900269596580264">"<xliff:g id="NAME">^1</xliff:g> अन्वेषण गर्नुहोस्"</string>
- <string name="storage_detail_dialog_other" msgid="5073511663616043370">"अन्यमा अनुप्रयोगहरूले सुरक्षित गेरका साझा फाइल, इन्टरनेट वा ब्लुटुथबाट डाउनलोड गरिएका फाइल, Android का फाइलहरू र यस्तै थप कुराहरू पर्छन्। \n\nयो <xliff:g id="NAME">^1</xliff:g> का देख्न सकिने सामग्रीहरू हेर्न अन्वेषण गर्नुहोस् नामक विकल्पमा ट्याप गर्नुहोस्।"</string>
- <string name="storage_detail_dialog_system" msgid="1472572861360014226">"Android संस्करण <xliff:g id="VERSION">%s</xliff:g> चलाउनका लागि प्रयोग भएका फाइलहरू प्रणालीमा समावेश छन्"</string>
- <string name="storage_detail_dialog_user" msgid="1663117417635010371">"<xliff:g id="USER_0">^1</xliff:g> ले तस्बिर, सङ्गीत, अनुप्रयोग वा अन्य डेटा सुरक्षित गर्नुभएको हुनसक्छ, जसले <xliff:g id="SIZE">^2</xliff:g> भण्डारण ओगटिरहेको छ। \n\nविवरणहरू हेर्न <xliff:g id="USER_1">^1</xliff:g> मा स्विच गर्नुहोस्।"</string>
+ <string name="storage_detail_dialog_other" msgid="5073511663616043370">"अन्यमा एपहरूले सुरक्षित गेरका साझा फाइल, इन्टरनेट वा ब्लुटुथबाट डाउनलोड गरिएका फाइल, Android का फाइलहरू र यस्तै थप कुराहरू पर्छन्। \n\nयो <xliff:g id="NAME">^1</xliff:g> का देख्न सकिने सामग्रीहरू हेर्न अन्वेषण गर्नुहोस् नामक विकल्पमा ट्याप गर्नुहोस्।"</string>
+ <string name="storage_detail_dialog_system" msgid="1472572861360014226">"प्रणालीमा Android संस्करण <xliff:g id="VERSION">%s</xliff:g> चलाउनका लागि प्रयोग भएका फाइलहरू समावेश छन्"</string>
+ <string name="storage_detail_dialog_user" msgid="1663117417635010371">"<xliff:g id="USER_0">^1</xliff:g> ले फोटो, सङ्गीत, एप वा अन्य डेटा सुरक्षित गर्नुभएको हुनसक्छ, जसले <xliff:g id="SIZE">^2</xliff:g> भण्डारण ओगटिरहेको छ। \n\nविवरणहरू हेर्न <xliff:g id="USER_1">^1</xliff:g> मा स्विच गर्नुहोस्।"</string>
<string name="storage_wizard_init_title" msgid="3407283236421089014">"तपाईँको <xliff:g id="NAME">^1</xliff:g> सेट गर्नुहोस्"</string>
<string name="storage_wizard_init_external_title" msgid="6853250619674645478">"पोर्टेबल भण्डारणको रूपमा प्रयोग गर्नुहोस्"</string>
- <string name="storage_wizard_init_external_summary" msgid="6993815290050489327">"यन्त्रहरू बीच तस्बिर र अन्य मिडिया सार्नका लागि।"</string>
+ <string name="storage_wizard_init_external_summary" msgid="6993815290050489327">"यन्त्रहरू बीच फोटो र अन्य मिडिया सार्नका लागि।"</string>
<string name="storage_wizard_init_internal_title" msgid="8750856962785644870">"आन्तरिक भण्डारणको रूपमा प्रयोग गर्नुहोस्"</string>
- <string name="storage_wizard_init_internal_summary" msgid="4510546464921608029">"यस यन्त्रमा मात्र कुनै पनि चिज, अनुप्रयोग र तस्बिरहरू भण्डारण गर्नाका लागि। यसलाई ढाँचा मिलाउन आवश्यक हुन्छ जसले अर्का यन्त्रहरूसँग काम गर्नबाट रोक्छ।"</string>
+ <string name="storage_wizard_init_internal_summary" msgid="4510546464921608029">"यस यन्त्रमा मात्र कुनै पनि चिज, एप र फोटोहरू भण्डारण गर्नाका लागि। यसलाई ढाँचा मिलाउन आवश्यक हुन्छ जसले अर्का यन्त्रहरूसँग काम गर्नबाट रोक्छ।"</string>
<string name="storage_wizard_format_confirm_title" msgid="7785358616068633439">"आन्तरिक भण्डारणको रुपमा ढाँचा गर्नुहोस्"</string>
<string name="storage_wizard_format_confirm_body" msgid="4107762933332992624">"यो सुरक्षित बनाउन यसलाई <xliff:g id="NAME_0">^1</xliff:g> ढाँचा बनाउन आवश्यकता छ। \n\nढाँचामा मिलाएपछि, यो यन्त्रमा यसले <xliff:g id="NAME_1">^1</xliff:g> मात्र काम गर्ने छ। \n\n"<b>" ढाँचा मिलाउँदा <xliff:g id="NAME_2">^1</xliff:g> मा हालैका भण्डारित सबै डेटा मेटिन्छ।"</b>" डेटा गुमाउनुपर्ने बाट जोगिन, यसको ब्याकअप राख्ने बारे विचार गर्नुहोस्।"</string>
- <string name="storage_wizard_format_confirm_public_title" msgid="5866830103788091426">"पोर्टेबल भण्डारणका रूपमा फरम्याट गर्नुहोस्"</string>
- <string name="storage_wizard_format_confirm_public_body" msgid="1451308701654703353">"यसको लागि <xliff:g id="NAME_0">^1</xliff:g> फरम्याट गर्न आवश्यक छ।\n\n"<b>"फरम्याट गर्दा <xliff:g id="NAME_1">^1</xliff:g> भण्डार गरिएका सबै डेटा नष्ट हुनेछ।"</b>"डेटा जोगाउन ब्याकअप गर्ने बारे बिचार गर्नुहोस्।"</string>
+ <string name="storage_wizard_format_confirm_public_title" msgid="5866830103788091426">"पोर्टेबल भण्डारणका रूपमा फर्म्याट गर्नुहोस्"</string>
+ <string name="storage_wizard_format_confirm_public_body" msgid="1451308701654703353">"यसको लागि <xliff:g id="NAME_0">^1</xliff:g> फर्म्याट गर्न आवश्यक छ।\n\n"<b>"फर्म्याट गर्दा <xliff:g id="NAME_1">^1</xliff:g> भण्डार गरिएका सबै डेटा नष्ट हुनेछ।"</b>"डेटा जोगाउन ब्याकअप गर्ने बारे बिचार गर्नुहोस्।"</string>
<string name="storage_wizard_format_confirm_next" msgid="236947984802247625">"ढाँचा मेटाउनुहोस्"</string>
<string name="storage_wizard_format_progress_title" msgid="6905902731208646436">"<xliff:g id="NAME">^1</xliff:g> ढाँचा मिलाइदै ..."</string>
<string name="storage_wizard_format_progress_body" msgid="5346709539457190419">"<xliff:g id="NAME">^1</xliff:g> फर्म्याट भइरहेको बेला यसलाई नहटाउनुहोस्।"</string>
<string name="storage_wizard_migrate_title" msgid="7440473364104826496">"नयाँ भण्डारणमा डेटा सार्नुहोस्"</string>
- <string name="storage_wizard_migrate_body" msgid="4959356431201831339">"तपाईँले यो नयाँ <xliff:g id="NAME">^1</xliff:g>मा आफ्नो तस्बिरहरु, फाइलहरू र केही अनुप्रयोगहरू सार्न सक्नुहुन्छ। \n\n स्थानान्तरणले करिब <xliff:g id="TIME">^2</xliff:g> लिन्छ र आन्तरिक भण्डारणमा <xliff:g id="SIZE">^3</xliff:g> खाली गर्ने छ। यस क्रममा केही अनुप्रयोगहरूले काम गर्ने छैनन्।"</string>
+ <string name="storage_wizard_migrate_body" msgid="4959356431201831339">"तपाईँले यो नयाँ <xliff:g id="NAME">^1</xliff:g>मा आफ्नो तस्बिरहरु, फाइलहरू र केही एपहरू सार्न सक्नुहुन्छ। \n\n स्थानान्तरणले करिब <xliff:g id="TIME">^2</xliff:g> लिन्छ र आन्तरिक भण्डारणमा <xliff:g id="SIZE">^3</xliff:g> खाली गर्ने छ। यस क्रममा केही एपहरूले काम गर्ने छैनन्।"</string>
<string name="storage_wizard_migrate_now" msgid="9004605853000689024">"अब सार्नुहोस्"</string>
<string name="storage_wizard_migrate_later" msgid="5303070653970922924">"पछि सार्नुहोस्"</string>
<string name="storage_wizard_migrate_confirm_title" msgid="5768497751644935313">"अब डेटा सार्नुहोस्"</string>
<string name="storage_wizard_migrate_confirm_body" msgid="7297723787416643076"><b>"कार्यले करिब <xliff:g id="TIME">^1</xliff:g> लिन्छ। यसले <xliff:g id="NAME">^3</xliff:g> मा <xliff:g id="SIZE">^2</xliff:g> खाली गर्छ।"</b></string>
<string name="storage_wizard_migrate_confirm_next" msgid="6539804689462991087">"सार्नुहोस्"</string>
<string name="storage_wizard_migrate_progress_title" msgid="7542196688665109833">"डेटा सार्दै..."</string>
- <string name="storage_wizard_migrate_details" msgid="4269509141637554985">"सार्दाको समयमा: \n• <xliff:g id="NAME">^1</xliff:g> नहटाउनुहोस्। \n• केही अनुप्रयोगहरूले सही काम गर्ने छैन। \n• यन्त्र चार्जमा राख्नुहोस्।"</string>
+ <string name="storage_wizard_migrate_details" msgid="4269509141637554985">"सार्दाको समयमा: \n• <xliff:g id="NAME">^1</xliff:g> नहटाउनुहोस्। \n• केही एपहरूले सही काम गर्ने छैन। \n• यन्त्र चार्जमा राख्नुहोस्।"</string>
<string name="storage_wizard_ready_title" msgid="4905921139763520341">"तपाईंको <xliff:g id="NAME">^1</xliff:g> प्रयोगका लागि तयार छ"</string>
- <string name="storage_wizard_ready_external_body" msgid="8785407468656286236">"तपाईँको <xliff:g id="NAME">^1</xliff:g> तस्बिर र अन्य मिडिया प्रयोग गर्न सबै सेट छ।"</string>
- <string name="storage_wizard_ready_internal_body" msgid="2258287496678469217">"तपाईँको नयाँ <xliff:g id="NAME">^1</xliff:g> ले काम गर्दैछ। \n\n यो यन्त्रमा तस्बिरहरू, फाइलहरू, र अनुप्रयोग डेटा सार्न, सेटिङ &gt मा जानुहोस्; भण्डारण गर्नुहोस्।"</string>
+ <string name="storage_wizard_ready_external_body" msgid="8785407468656286236">"तपाईँको <xliff:g id="NAME">^1</xliff:g> फोटो र अन्य मिडिया प्रयोग गर्न सबै सेट छ।"</string>
+ <string name="storage_wizard_ready_internal_body" msgid="2258287496678469217">"तपाईँको नयाँ <xliff:g id="NAME">^1</xliff:g> ले काम गर्दैछ। \n\n यो यन्त्रमा फोटोहरू, फाइलहरू, र एप डेटा सार्न, सेटिङ &gt मा जानुहोस्; भण्डारण गर्नुहोस्।"</string>
<string name="storage_wizard_move_confirm_title" msgid="7362472162039287488">"सार्नुहोस् <xliff:g id="APP">^1</xliff:g>"</string>
- <string name="storage_wizard_move_confirm_body" msgid="502315190416551319">"<xliff:g id="NAME_0">^2</xliff:g> मा <xliff:g id="APP">^1</xliff:g> र यसको डेटा सार्न केही बेर मात्र लिनेछ। तपाईं सार्ने क्रम पूरा नहुन्जेल अनुप्रयोग प्रयोग गर्न सक्नुहुने छैन। \n\n सार्ने क्रममा <xliff:g id="NAME_1">^2</xliff:g> नहटाउनुहोस्।"</string>
+ <string name="storage_wizard_move_confirm_body" msgid="502315190416551319">"<xliff:g id="NAME_0">^2</xliff:g> मा <xliff:g id="APP">^1</xliff:g> र यसको डेटा सार्न केही बेर मात्र लिनेछ। तपाईं सार्ने क्रम पूरा नहुन्जेल एप प्रयोग गर्न सक्नुहुने छैन। \n\n सार्ने क्रममा <xliff:g id="NAME_1">^2</xliff:g> नहटाउनुहोस्।"</string>
<string name="storage_wizard_move_unlock" msgid="7978193904519827600">"डेटा सार्न तपाईंले प्रयोगकर्ताको <xliff:g id="APP">^1</xliff:g> अनलक गर्नु पर्ने हुन्छ।"</string>
<string name="storage_wizard_move_progress_title" msgid="5250929161803336592">"सार्दै <xliff:g id="APP">^1</xliff:g>..."</string>
- <string name="storage_wizard_move_progress_body" msgid="1713792142250410169">"सार्ने क्रममा <xliff:g id="NAME">^1</xliff:g> नहटाउनुहोस्। \n\nसार्ने क्रम पूरा नहुन्जेल सम्म यो यन्त्रको<xliff:g id="APP">^2</xliff:g> अनुप्रयोग उपलब्ध हुने छैन।"</string>
+ <string name="storage_wizard_move_progress_body" msgid="1713792142250410169">"सार्ने क्रममा <xliff:g id="NAME">^1</xliff:g> नहटाउनुहोस्। \n\nसार्ने क्रम पूरा नहुन्जेल सम्म यो यन्त्रको<xliff:g id="APP">^2</xliff:g> एप उपलब्ध हुने छैन।"</string>
<string name="storage_wizard_move_progress_cancel" msgid="9047521329704060401">"सार्ने कार्य रद्द गर्नुहोस्"</string>
- <string name="storage_wizard_slow_body" msgid="2307974936036261069">"यो <xliff:g id="NAME_0">^1</xliff:g> सुस्त जस्तो देखिन्छ। \n\n तपाईं जारी राख्न सक्नुहुन्छ, तर यस स्थानमा सारिएका अनुप्रयोगहरू अड्किन सक्छ र डेटा स्थानान्तरणले लामो समय लिन सक्छ। \n\nराम्रो प्रदर्शनको लागि थप छिटो <xliff:g id="NAME_1">^1</xliff:g> प्रयोग गर्ने विचार गर्नुहोस्।"</string>
+ <string name="storage_wizard_slow_body" msgid="2307974936036261069">"यो <xliff:g id="NAME_0">^1</xliff:g> सुस्त जस्तो देखिन्छ। \n\n तपाईं जारी राख्न सक्नुहुन्छ, तर यस स्थानमा सारिएका एपहरू अड्किन सक्छ र डेटा स्थानान्तरणले लामो समय लिन सक्छ। \n\nराम्रो प्रदर्शनको लागि थप छिटो <xliff:g id="NAME_1">^1</xliff:g> प्रयोग गर्ने विचार गर्नुहोस्।"</string>
<string name="storage_wizard_init_v2_title" msgid="7408910177547901960">"तपाईं यो <xliff:g id="NAME">^1</xliff:g> कसरी प्रयोग गर्नुहुन्छ?"</string>
<string name="storage_wizard_init_v2_internal_title" product="tablet" msgid="7948795312504302810">"ट्याब्लेटको अतिरिक्त भण्डारणका रूपमा प्रयोग गर्नुहोस्"</string>
- <string name="storage_wizard_init_v2_internal_summary" product="tablet" msgid="6237770506398410172">"केवल यो ट्याब्लेटका अनुप्रयोग, फाइल तथा मिडियाका लागि"</string>
+ <string name="storage_wizard_init_v2_internal_summary" product="tablet" msgid="6237770506398410172">"केवल यो ट्याब्लेटका एप, फाइल तथा मिडियाका लागि"</string>
<string name="storage_wizard_init_v2_internal_action" product="tablet" msgid="1016850267330050231">"ट्याब्लेटको भण्डारण"</string>
<string name="storage_wizard_init_v2_internal_title" product="default" msgid="2782907833711627804">"फोनको अतिरिक्त भण्डारणका रूपमा प्रयोग गर्नुहोस्"</string>
- <string name="storage_wizard_init_v2_internal_summary" product="default" msgid="6352521760027924000">"केवल यो फोनका अनुप्रयोग, फाइल तथा मिडियाका लागि"</string>
+ <string name="storage_wizard_init_v2_internal_summary" product="default" msgid="6352521760027924000">"केवल यो फोनका एप, फाइल तथा मिडियाका लागि"</string>
<string name="storage_wizard_init_v2_internal_action" product="default" msgid="3383888882755852046">"फोनको भण्डारण"</string>
<string name="storage_wizard_init_v2_or" msgid="883906565226069620">"वा"</string>
<string name="storage_wizard_init_v2_external_title" msgid="7009571510941803101">"पोर्टेबल भण्डारणका रूपमा प्रयोग गर्नु…"</string>
@@ -1502,21 +1504,21 @@
<string name="storage_wizard_init_v2_external_action" msgid="4649591913020218098">"पोर्टेबल भण्डारण"</string>
<string name="storage_wizard_init_v2_later" msgid="2605006907172213466">"पछि सेटअप गर्नुहोस्"</string>
<string name="storage_wizard_format_confirm_v2_title" msgid="1884699177320256159">"यो <xliff:g id="NAME">^1</xliff:g> फर्म्याट गर्ने हो?"</string>
- <string name="storage_wizard_format_confirm_v2_body" msgid="977657376082074305">"अनुप्रयोग, फाइल तथा मिडिया भण्डारण गर्नका लागि यो <xliff:g id="NAME_0">^1</xliff:g> लाई फर्म्याट गर्नु पर्ने हुन्छ। \n\nफर्म्याट गर्नुले <xliff:g id="NAME_1">^2</xliff:g> मा हाल विद्यमान रहेका सामग्री मेट्नेछ। सामग्री गुमाउनबाट बच्न त्यसलाई कुनै अर्को <xliff:g id="NAME_2">^3</xliff:g> वा यन्त्रमा ब्याकअप गर्नुहोस्।"</string>
+ <string name="storage_wizard_format_confirm_v2_body" msgid="977657376082074305">"एप, फाइल तथा मिडिया भण्डारण गर्नका लागि यो <xliff:g id="NAME_0">^1</xliff:g> लाई फर्म्याट गर्नु पर्ने हुन्छ। \n\nफर्म्याट गर्नुले <xliff:g id="NAME_1">^2</xliff:g> मा हाल विद्यमान रहेका सामग्री मेट्नेछ। सामग्री गुमाउनबाट बच्न त्यसलाई कुनै अर्को <xliff:g id="NAME_2">^3</xliff:g> वा यन्त्रमा ब्याकअप गर्नुहोस्।"</string>
<string name="storage_wizard_format_confirm_v2_action" msgid="5576917958786300415">"<xliff:g id="NAME">^1</xliff:g> फर्म्याट गर्नु…"</string>
<string name="storage_wizard_migrate_v2_title" msgid="6728034411587320249">"सामग्रीलाई <xliff:g id="NAME">^1</xliff:g> मा सार्ने हो?"</string>
- <string name="storage_wizard_migrate_v2_body" product="tablet" msgid="6943007011251294950">"तपाईं यो <xliff:g id="NAME">^1</xliff:g> मा फाइल, मिडिया र निश्चित अनुप्रयोगहरू सार्न सक्नुहुन्छ। \n\nयस कार्यले तपाईंको ट्याब्लेटको भण्डारणबाट <xliff:g id="SIZE">^2</xliff:g> खाली गर्ने छ र यसो गर्न लगभग <xliff:g id="DURATION">^3</xliff:g> लाग्छ।"</string>
- <string name="storage_wizard_migrate_v2_body" product="default" msgid="3211214309775524554">"तपाईं यो <xliff:g id="NAME">^1</xliff:g> मा फाइल, मिडिया र निश्चित अनुप्रयोगहरू सार्न सक्नुहुन्छ। \n\nयस कार्यले तपाईंको फोनको भण्डारणबाट <xliff:g id="SIZE">^2</xliff:g> खाली गर्ने छ र यसो गर्न लगभग <xliff:g id="DURATION">^3</xliff:g> लाग्छ।"</string>
+ <string name="storage_wizard_migrate_v2_body" product="tablet" msgid="6943007011251294950">"तपाईं यो <xliff:g id="NAME">^1</xliff:g> मा फाइल, मिडिया र निश्चित एपहरू सार्न सक्नुहुन्छ। \n\nयस कार्यले तपाईंको ट्याब्लेटको भण्डारणबाट <xliff:g id="SIZE">^2</xliff:g> खाली गर्ने छ र यसो गर्न लगभग <xliff:g id="DURATION">^3</xliff:g> लाग्छ।"</string>
+ <string name="storage_wizard_migrate_v2_body" product="default" msgid="3211214309775524554">"तपाईं यो <xliff:g id="NAME">^1</xliff:g> मा फाइल, मिडिया र निश्चित एपहरू सार्न सक्नुहुन्छ। \n\nयस कार्यले तपाईंको फोनको भण्डारणबाट <xliff:g id="SIZE">^2</xliff:g> खाली गर्ने छ र यसो गर्न लगभग <xliff:g id="DURATION">^3</xliff:g> लाग्छ।"</string>
<string name="storage_wizard_migrate_v2_checklist" msgid="6283777617014793600">"सार्ने क्रममा:"</string>
<string name="storage_wizard_migrate_v2_checklist_media" msgid="4626548613088549096">"<xliff:g id="NAME">^1</xliff:g> लाई नहटाउनुहोस्"</string>
- <string name="storage_wizard_migrate_v2_checklist_apps" msgid="6041914027863793837">"केही अनुप्रयोगहरूले काम गर्ने छैनन"</string>
+ <string name="storage_wizard_migrate_v2_checklist_apps" msgid="6041914027863793837">"केही एपहरूले काम गर्ने छैनन"</string>
<string name="storage_wizard_migrate_v2_checklist_battery" product="tablet" msgid="5086689918108465503">"यो ट्याब्लेटलाई चार्जमा राख्नुहोस्"</string>
<string name="storage_wizard_migrate_v2_checklist_battery" product="default" msgid="7801835366851130972">"यो फोनलाई चार्जमा राख्नुहोस्"</string>
<string name="storage_wizard_migrate_v2_now" msgid="6818811520564682413">"सामग्री सार्नुहोस्"</string>
<string name="storage_wizard_migrate_v2_later" msgid="4909412563144649085">"सामग्री पछि सार्नुहोस्"</string>
<string name="storage_wizard_migrate_progress_v2_title" msgid="1796255772658203586">"सामग्री सार्दै…"</string>
<string name="storage_wizard_slow_v2_title" msgid="4662009769135525740">"<xliff:g id="NAME">^1</xliff:g> ढिलो छ"</string>
- <string name="storage_wizard_slow_v2_body" msgid="4443996335261861797">"तपाईं अझै यो <xliff:g id="NAME_0">^1</xliff:g> प्रयोग गर्न सक्नुहुन्छ तर यो निकै ढिलो हुन सक्छ। \n\nयो <xliff:g id="NAME_1">^2</xliff:g> मा सुरक्षित गरिएका अनुप्रयोगहरूले राम्ररी काम नगर्न सक्छन् र सामग्री स्थानान्तरण गर्दा लामो समय लाग्न सक्छ। \n\nकुनै अझ छिटो <xliff:g id="NAME_2">^3</xliff:g> प्रयोग गरी हेर्नुहोस् वा पोर्टेबल भण्डारणका लागि यसको साटो <xliff:g id="NAME_3">^4</xliff:g> प्रयोग गर्नुहोस्।"</string>
+ <string name="storage_wizard_slow_v2_body" msgid="4443996335261861797">"तपाईं अझै यो <xliff:g id="NAME_0">^1</xliff:g> प्रयोग गर्न सक्नुहुन्छ तर यो निकै ढिलो हुन सक्छ। \n\nयो <xliff:g id="NAME_1">^2</xliff:g> मा सुरक्षित गरिएका एपहरूले राम्ररी काम नगर्न सक्छन् र सामग्री स्थानान्तरण गर्दा लामो समय लाग्न सक्छ। \n\nकुनै अझ छिटो <xliff:g id="NAME_2">^3</xliff:g> प्रयोग गरी हेर्नुहोस् वा पोर्टेबल भण्डारणका लागि यसको साटो <xliff:g id="NAME_3">^4</xliff:g> प्रयोग गर्नुहोस्।"</string>
<string name="storage_wizard_slow_v2_start_over" msgid="1686964124972424100">"फेरि सुरु गर्नुहोस्"</string>
<string name="storage_wizard_slow_v2_continue" msgid="2320238517431613392">"जारी राख्नुहोस्"</string>
<string name="storage_wizard_ready_v2_external_body" msgid="5803422587027895664">"तपाईं सामग्रीलाई <xliff:g id="NAME">^1</xliff:g> मा सार्न सक्नुहुन्छ"</string>
@@ -1564,14 +1566,14 @@
<string name="error_mnc_not23" msgid="6738398924368729180">"MNC क्षेत्रमा २ वा ३ अंकहरू हुनुपर्दछ"</string>
<string name="error_adding_apn_type" msgid="671634520340569678">"सेवा प्रदायकले %s प्रकारका APN हरू थप्ने अनुमति दिँदैन।"</string>
<string name="restore_default_apn" msgid="7195266404077471007">"पूर्वनिर्धारित APN सेटिङहरू पुनःप्राप्त गर्दै।"</string>
- <string name="menu_restore" msgid="3799288817317293115">"पूर्वनिर्धारितमा पुनःसेट गर्नुहोस्"</string>
- <string name="restore_default_apn_completed" msgid="5671734152740058937">"पूर्वनिर्धारित APN सेटिङहरू पुनःसेट पुरा भयो।"</string>
+ <string name="menu_restore" msgid="3799288817317293115">"पूर्वनिर्धारितमा रिसेट गर्नुहोस्"</string>
+ <string name="restore_default_apn_completed" msgid="5671734152740058937">"पूर्वनिर्धारित APN सेटिङहरू रिसेट पुरा भयो।"</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"रिसेटका विकल्पहरू"</string>
- <string name="reset_dashboard_summary" msgid="8778383341461126642">"नेटवर्क, अनुप्रयोगहरू वा यन्त्रलाई रिसेट गर्न सकिन्छ"</string>
+ <string name="reset_dashboard_summary" msgid="8778383341461126642">"नेटवर्क, एपहरू वा यन्त्रलाई रिसेट गर्न सकिन्छ"</string>
<string name="reset_network_title" msgid="8944059136930806211">"Wi-Fi, मोबाइल र ब्लुटुथ रिसेट गर्नुहोस्"</string>
<string name="reset_network_desc" msgid="4982633363916261109">"यसले निम्न सेटिङहरू लगायत सम्पूर्ण नेटवर्क सम्बन्धी सेटिहरूलाई रिसेट गर्ने छ:\n\n"<li>"Wi‑Fi"</li>\n<li>"मोबाइल डेटा"</li>\n<li>"ब्लुटुथ"</li></string>
<string name="reset_esim_title" msgid="7630781767040831893">"डाउनलोड गरिएका SIM हरू मेट्नुहोस्"</string>
- <string name="reset_esim_desc" msgid="433226911566802">"प्रतिस्थापनका लागि SIM हरू डाउनलोड गर्न आफ्ना सेवा प्रदायकसँग सम्पर्क गर्नुहोस्। यसले मोबाइल सेवासम्बन्धी कुनै पनि योजना रद्द गर्ने छैन।"</string>
+ <string name="reset_esim_desc" msgid="433226911566802">"प्रतिस्थापनका लागि SIM हरू डाउनलोड गर्न आफ्ना सेवा प्रदायकसँग सम्पर्क गर्नुहोस्। यसले मोबाइल सेवाको कुनै पनि योजना रद्द गर्ने छैन।"</string>
<string name="reset_network_button_text" msgid="4293271046867912819">"सेटिङहरू रिसेट गर्नुहोस्"</string>
<string name="reset_network_final_desc" msgid="2463817067048751373">"नेटवर्कसम्बन्धी सबै सेटिङहरू रिसेट गर्ने हो? तपाईं यो कार्य उल्टाउन सक्नुहुन्न।"</string>
<string name="reset_network_final_desc_esim" msgid="4676436976372555750">"नेटवर्कसम्बन्धी सबै सेटिङहरू रिसेट गर्ने र डाउनलोड गरिएका SIM हरू मेटाउने हो? तपाईं यस कार्यलाई अन्डू गर्न सक्नुहुन्न!"</string>
@@ -1583,8 +1585,8 @@
<string name="reset_esim_error_msg" msgid="4716366079119742235">"कुनै त्रुटि भएका कारण डाउनलोड गरिएका SIM हरू मेटाउन सकिएन।\n\nआफ्नो यन्त्र पुनः सुरु गरी फेरि प्रयास गर्नुहोस्।"</string>
<string name="master_clear_title" msgid="1560712943955904673">"सबै डेटा मेटाउनुहोस् (फ्याक्ट्री रिसेट गर्नुहोस्)"</string>
<string name="master_clear_short_title" msgid="919098101581335101">"सबै डेटा मेटाउनुहोस् (फ्याक्ट्री रिसेट गर्नुहोस्)"</string>
- <string name="master_clear_desc" product="tablet" msgid="3432373610755760899">"यसले निम्नलगायतका सबै डेटा तपाईंको "<b>"आन्तरिक भण्डारणबाट मेटाउँदछ"</b>":\n\n"<li>"तपाईंको Google खाता"</li>\n<li>"प्रणाली र अनुप्रयोग डेटा र सेटिङहरू"</li>\n<li>"डाउनलोड गरिएका अनुप्रयोगहरू"</li></string>
- <string name="master_clear_desc" product="default" msgid="8765543541962866697">"यस कार्यले तपाईंको यन्त्रको "<b>"आन्तरिक भण्डारण"</b>" बाट सम्पूर्ण डेटा मेटाउँछ, जसमा निम्न कुराहरू पर्दछन्:\n\n"<li>"तपाईंको Google खाता"</li>\n<li>"प्रणाली र अनुप्रयोगका डेटा तथा सेटिङहरू"</li>\n<li>"डाउनलोड गरिएका अनुप्रयोगहरू"</li></string>
+ <string name="master_clear_desc" product="tablet" msgid="3432373610755760899">"यसले निम्नलगायतका सबै डेटा तपाईंको "<b>"आन्तरिक भण्डारणबाट मेटाउँदछ"</b>":\n\n"<li>"तपाईंको Google खाता"</li>\n<li>"प्रणाली र एप डेटा र सेटिङहरू"</li>\n<li>"डाउनलोड गरिएका एपहरू"</li></string>
+ <string name="master_clear_desc" product="default" msgid="8765543541962866697">"यस कार्यले तपाईंको यन्त्रको "<b>"आन्तरिक भण्डारण"</b>" बाट सम्पूर्ण डेटा मेटाउँछ, जसमा निम्न कुराहरू पर्दछन्:\n\n"<li>"तपाईंको Google खाता"</li>\n<li>"प्रणाली र अनुप्रयोगका डेटा तथा सेटिङहरू"</li>\n<li>"डाउनलोड गरिएका एपहरू"</li></string>
<string name="master_clear_accounts" product="default" msgid="3432884235445405376">\n" \nतपाईं अहिले निम्न खाताहरूमा साइन इन हुनुहुन्छ:\n"</string>
<string name="master_clear_other_users_present" product="default" msgid="5993259656117566767">\n\n" यस यन्त्रमा हाल अन्य प्रयोगकर्ताहरु छन्। \n"</string>
<string name="master_clear_desc_also_erases_external" msgid="3947303501615091903"><li>"संगीत"</li>\n<li>"तस्बिरहरू"</li>\n<li>"अन्य उपयोगकर्ता डेटा"</li></string>
@@ -1594,23 +1596,23 @@
<string name="master_clear_desc_erase_external_storage" product="default" msgid="9003555775524798797">\n" \n सङ्गीत, तस्वीरहरू, र अन्य प्रयोगकर्ता डेटा मेटाउनका लागि, "<b>" SD कार्ड "</b>" मेटाउनु पर्छ।"</string>
<string name="erase_external_storage" product="nosdcard" msgid="8989746770347525207">"USB भण्डारण मेटाउनुहोस्"</string>
<string name="erase_external_storage" product="default" msgid="194249742376770215">"SD कार्ड मेटाउनुहोस्"</string>
- <string name="erase_external_storage_description" product="nosdcard" msgid="8020275102431496261">"आन्तरिक USB भण्डारणमा सबै डेटा मेटाउनुहोस्, जस्तै सङ्गीत वा फोटाहरू"</string>
- <string name="erase_external_storage_description" product="default" msgid="5029355708082861798">"SD कार्डबाट सबै डाटाहरू जस्तै सङ्गीत वा फोटाहरू मेटाउनुहोस्"</string>
+ <string name="erase_external_storage_description" product="nosdcard" msgid="8020275102431496261">"आन्तरिक USB भण्डारणमा सबै डेटा मेटाउनुहोस्, जस्तै सङ्गीत वा फोटोहरू"</string>
+ <string name="erase_external_storage_description" product="default" msgid="5029355708082861798">"SD कार्डबाट सबै डाटाहरू जस्तै सङ्गीत वा फोटोहरू मेटाउनुहोस्"</string>
<string name="master_clear_button_text" product="tablet" msgid="8000547818499182920">"सबै डेटा मेट्नुहोस्"</string>
<string name="master_clear_button_text" product="default" msgid="8000547818499182920">"सबै डेटा मेट्नुहोस्"</string>
- <string name="master_clear_final_desc" msgid="5189365498015339294">"तपाईंका सबै व्यक्तिगत जानकारी र डाउनलोड गरिएका अनुप्रयोगहरू मेटिने छन्। तपाईं यस कार्यलाई अन्डू गर्न सक्नुहुन्न!"</string>
- <string name="master_clear_final_desc_esim" msgid="3058919823436953662">"तपाईंका डाउनलोड गरिएका अनुप्रयोग तथा SIM हरू लगायत सबै निजी जानकारी मेटाइने छन्। तपाईं यस कार्यलाई अन्डू गर्न सक्नुहुन्न!"</string>
+ <string name="master_clear_final_desc" msgid="5189365498015339294">"तपाईंका सबै व्यक्तिगत जानकारी र डाउनलोड गरिएका एपहरू मेटिने छन्। तपाईं यस कार्यलाई अन्डू गर्न सक्नुहुन्न!"</string>
+ <string name="master_clear_final_desc_esim" msgid="3058919823436953662">"तपाईंका डाउनलोड गरिएका एप तथा SIM हरू लगायत सबै निजी जानकारी मेटाइने छन्। तपाईं यस कार्यलाई अन्डू गर्न सक्नुहुन्न!"</string>
<string name="master_clear_final_button_text" msgid="866772743886027768">"सबै मेटाउनुहोस्"</string>
- <string name="master_clear_failed" msgid="7588397453984229892">"कुनै पुनःसेट हुन सकेन किनभने सिस्टम क्लिएर सेवा उपलब्ध छैन।"</string>
+ <string name="master_clear_failed" msgid="7588397453984229892">"कुनै रिसेट हुन सकेन किनभने सिस्टम क्लिएर सेवा उपलब्ध छैन।"</string>
<string name="master_clear_confirm_title" msgid="698328669893512402">"सबै डेटा मेट्ने हो?"</string>
- <string name="master_clear_not_available" msgid="4676613348163652454">"यस प्रयोगकर्ताको लागि कारखाना पुनःसेट गर्ने उपलब्ध छैन"</string>
+ <string name="master_clear_not_available" msgid="4676613348163652454">"यस प्रयोगकर्ताको लागि कारखाना रिसेट गर्ने उपलब्ध छैन"</string>
<string name="master_clear_progress_title" msgid="378953167274114857">"मेटाउँदै"</string>
<string name="master_clear_progress_text" msgid="5418958116008976218">"कृपया प्रतीक्षा गर्नुहोला..."</string>
<string name="call_settings_title" msgid="5033906789261282752">"कल सेटिङहरू"</string>
<string name="call_settings_summary" msgid="2119161087671450035">"भ्वाइस मेल, कल फर्वार्ड, कल प्रतीक्षा, र कलर ID सेटअप गर्नुहोस्"</string>
- <string name="tether_settings_title_usb" msgid="4265582654602420357">"USB टेथर गर्दै"</string>
+ <string name="tether_settings_title_usb" msgid="4265582654602420357">"USB टेदर गर्दै"</string>
<string name="tether_settings_title_wifi" msgid="2060965130234484613">"पोर्टेबल हटस्पट"</string>
- <string name="tether_settings_title_bluetooth" msgid="1999590158102569959">"ब्लुटुथ टेथर गर्दै"</string>
+ <string name="tether_settings_title_bluetooth" msgid="1999590158102569959">"ब्लुटुथ टेदर गर्दै"</string>
<string name="tether_settings_title_usb_bluetooth" msgid="1159128764162788159">"टेदर गर्दै"</string>
<string name="tether_settings_title_all" msgid="6935843543433954181">"हटस्पट र टेदरिङ"</string>
<string name="tether_settings_summary_hotspot_on_tether_on" msgid="1289593649526514499">"हटस्पट सक्रिय छ, टेदरिङ"</string>
@@ -1619,22 +1621,22 @@
<string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"डेटा सेभर अन हुँदा टेदरिङ वा पोर्टेबल हटस्पटहरूको प्रयोग गर्न सक्दैन"</string>
<string name="usb_title" msgid="7480927657535578688">"USB"</string>
<string name="usb_tethering_button_text" msgid="6242228383142012332">"USB टेदर गर्दै"</string>
- <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"USB मार्फत फोनको इन्टरनेट जडान साझा गर्नुहोस्"</string>
+ <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"USB मार्फत फोनको इन्टरनेट सेयर गर्नुहोस्"</string>
<string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"USB मार्फत ट्याब्लेटको इन्टरनेट जडान साझा गर्नुहोस्"</string>
- <string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"ब्लुटुथ टेथर गर्दै"</string>
+ <string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"ब्लुटुथ टेदर गर्दै"</string>
<string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"ब्लुटुथमार्फत ट्याब्लेटको इन्टरनेट जडान सझा गर्नुहोस्"</string>
- <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"ब्लुटुथमार्फत फोनको इन्टरनेट जडान साझा गर्नुहोस्"</string>
+ <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"ब्लुटुथमार्फत फोनको इन्टरनेट सेयर गर्नुहोस्"</string>
<string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"ब्लुटुथमार्फत यो <xliff:g id="DEVICE_NAME">%1$d</xliff:g> को इन्टरनेट जडान साझा गर्दै"</string>
<string name="bluetooth_tethering_overflow_error" msgid="6946561351369376943">"<xliff:g id="MAXCONNECTION">%1$d</xliff:g> उपकरणहरूभन्दा बढीसँग टेदर गर्न सक्दैन।"</string>
<string name="bluetooth_untether_blank" msgid="5428300773782256084">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> अनटेथर गरिने छ।"</string>
- <string name="tethering_footer_info" msgid="8019555174339154124">"आफ्नो मोबाइल डेटा जडानमार्फत अन्य यन्त्रहरूलाई इन्टरनेट उपलब्ध गराउन हटस्पट र टेदरिङ प्रयोग गर्नुहोस्। नजिकैका यन्त्रहरूसँग सामग्री आदान प्रदान गर्नाका निम्ति अनुप्रयोगहरूले हटस्पट सिर्जना गर्न पनि सक्छन्।"</string>
+ <string name="tethering_footer_info" msgid="8019555174339154124">"आफ्नो मोबाइल डेटा जडानमार्फत अन्य यन्त्रहरूलाई इन्टरनेट उपलब्ध गराउन हटस्पट र टेदरिङ प्रयोग गर्नुहोस्। नजिकैका यन्त्रहरूसँग सामग्री आदान प्रदान गर्नाका निम्ति एपहरूले हटस्पट सिर्जना गर्न पनि सक्छन्।"</string>
<string name="tethering_help_button_text" msgid="7653022000284543996">"मद्दत"</string>
<string name="network_settings_title" msgid="8516526011407061679">"मोबाइल नेटवर्क"</string>
<string name="manage_mobile_plan_title" msgid="3312016665522553062">"मोबाईल योजना"</string>
- <string name="sms_application_title" msgid="7815840568119334679">"SMS अनुप्रयोग"</string>
- <string name="sms_change_default_dialog_title" msgid="6301260161969667578">"SMS अनुप्रयोग परिवर्तन गर्ने हो?"</string>
- <string name="sms_change_default_dialog_text" msgid="8275088077930942680">"तपाईँको <xliff:g id="CURRENT_APP">%2$s</xliff:g> SMS अनुप्रयोगको सट्टामा <xliff:g id="NEW_APP">%1$s</xliff:g> प्रयोग गर्नुहुन्छ?"</string>
- <string name="sms_change_default_no_previous_dialog_text" msgid="4680224695080527907">"<xliff:g id="NEW_APP">%s</xliff:g>लाई SMS अनुप्रयोगको रूपमा प्रयोग गर्नुहुन्छ?"</string>
+ <string name="sms_application_title" msgid="7815840568119334679">"SMS एप"</string>
+ <string name="sms_change_default_dialog_title" msgid="6301260161969667578">"SMS एप परिवर्तन गर्ने हो?"</string>
+ <string name="sms_change_default_dialog_text" msgid="8275088077930942680">"तपाईँको <xliff:g id="CURRENT_APP">%2$s</xliff:g> SMS एपको सट्टामा <xliff:g id="NEW_APP">%1$s</xliff:g> प्रयोग गर्नुहुन्छ?"</string>
+ <string name="sms_change_default_no_previous_dialog_text" msgid="4680224695080527907">"<xliff:g id="NEW_APP">%s</xliff:g>लाई SMS एपको रूपमा प्रयोग गर्नुहुन्छ?"</string>
<string name="network_scorer_picker_title" msgid="1691073966560952916">"नेटवर्कको दर्जा प्रदायक"</string>
<string name="network_scorer_picker_none_preference" msgid="6448280557733231737">"कुनै पनि होइन"</string>
<string name="network_scorer_change_active_dialog_title" msgid="4274159562371475090">"Wi-Fi सहायक परिवर्तन गर्नुहुन्छ?"</string>
@@ -1646,7 +1648,7 @@
<string name="mobile_connect_to_internet" msgid="6031886097365170913">"कृपया इन्टरनेटसँग जोड्नुहोस्"</string>
<string name="location_title" msgid="8664674161765477168">"मेरो स्थान"</string>
<string name="managed_profile_location_switch_title" msgid="8157384427925389680">"काम प्रोफाइलका लागि स्थान"</string>
- <string name="location_app_level_permissions" msgid="1298041503927632960">"अनुप्रयोगको अनुमति"</string>
+ <string name="location_app_level_permissions" msgid="1298041503927632960">"एपको अनुमति"</string>
<string name="location_app_permission_summary_location_off" msgid="541372845344796336">"स्थान निष्क्रिय छ"</string>
<plurals name="location_app_permission_summary_location_on" formatted="false" msgid="7904821382328758218">
<item quantity="other"> <xliff:g id="TOTAL_LOCATION_APP_COUNT_3">%2$d</xliff:g> मध्ये <xliff:g id="BACKGROUND_LOCATION_APP_COUNT_2">%1$d</xliff:g> अनुप्रयोगहरूमाथिको असीमित पहुँच छ</item>
@@ -1654,22 +1656,22 @@
</plurals>
<string name="location_category_recent_location_access" msgid="286059523360285026">"हालसालै राखिएको स्थानमाथिको पहुँच"</string>
<string name="location_recent_location_access_view_details" msgid="2051602261436245905">"विवरणहरू हेर्नुहोस्"</string>
- <string name="location_no_recent_apps" msgid="77502059586413278">"हाल कुनै पनि अनुप्रयोगहरूले स्थान अनुरोध गरिएका छैनन्"</string>
+ <string name="location_no_recent_apps" msgid="77502059586413278">"अहिले कुनै पनि एपहरूले स्थानको जानकारी मागेका छैनन्"</string>
<string name="location_no_recent_accesses" msgid="6289916310397279890">"कुनै पनि अनुप्रयोगले हाल स्थानमाथि पहुँच गरेको छैन"</string>
<string name="location_high_battery_use" msgid="7177199869979522663">"उच्च ब्याट्री प्रयोग"</string>
<string name="location_low_battery_use" msgid="5030448574501435888">"कम ब्याट्री प्रयोग"</string>
<string name="location_scanning_screen_title" msgid="7663329319689413454">"Wi‑Fi तथा ब्लुटुथ स्क्यान गर्दै"</string>
<string name="location_scanning_wifi_always_scanning_title" msgid="6750542206763112172">"Wi-Fi स्क्यान गर्दै"</string>
- <string name="location_scanning_wifi_always_scanning_description" msgid="4956048135941851712">"अनुप्रयोग र सेवाहरूलाई जुनसुकै बेला (Wi‑Fi निष्क्रिय भएको बेलामा पनि) वरपरका Wi-Fi नेटवर्कहरू स्क्यान गर्न अनुमति दिनुहोस्। यसलाई स्थानमा आधारित सुविधा तथा सेवाहरू सुधार गर्ने जस्ता कार्यहरू गर्नाका लागि प्रयोग गर्न सकिन्छ।"</string>
+ <string name="location_scanning_wifi_always_scanning_description" msgid="4956048135941851712">"एप र सेवाहरूलाई जुनसुकै बेला (Wi‑Fi निष्क्रिय भएको बेलामा पनि) वरपरका Wi-Fi नेटवर्कहरू स्क्यान गर्न अनुमति दिनुहोस्। यसलाई स्थानमा आधारित सुविधा तथा सेवाहरू सुधार गर्ने जस्ता कार्यहरू गर्नाका लागि प्रयोग गर्न सकिन्छ।"</string>
<string name="location_scanning_bluetooth_always_scanning_title" msgid="196241746742607453">"ब्लुटुथ स्क्यान हुँदै"</string>
- <string name="location_scanning_bluetooth_always_scanning_description" msgid="3796673798637848690">"अनुप्रयोग तथा सेवाहरूलाई जुनसुकै बेला (ब्लुटुथ निष्क्रिय भएको बेलामा पनि) वरपरका यन्त्रहरू स्क्यान गर्न अनुमति दिनुहोस्। यसलाई स्थानमा आधारित सुविधा तथा सेवाहरू सुधार गर्ने जस्ता कार्यहरू गर्नाका लागि प्रयोग गर्न सकिन्छ।"</string>
+ <string name="location_scanning_bluetooth_always_scanning_description" msgid="3796673798637848690">"एप तथा सेवाहरूलाई जुनसुकै बेला (ब्लुटुथ निष्क्रिय भएको बेलामा पनि) वरपरका यन्त्रहरू स्क्यान गर्न अनुमति दिनुहोस्। यसलाई स्थानमा आधारित सुविधा तथा सेवाहरू सुधार गर्ने जस्ता कार्यहरू गर्नाका लागि प्रयोग गर्न सकिन्छ।"</string>
<string name="managed_profile_location_services" msgid="224925483299159541">"कार्यस्थलका स्थानसम्बन्धी सेवाहरू"</string>
<string name="location_network_based" msgid="1535812159327454835">"Wi-Fi; मोबाइल नेटवर्क स्थान"</string>
<string name="location_neighborhood_level" msgid="8459352741296587916">"तपाईँको स्थानलाई सीघ्र अनुमान गर्न अनुप्रयोगहरूलाई Google स्थान सेवा प्रयोग गर्न अनुमति दिनुहोस्। बेनामी स्थान डेटा भेला गरिने छ र Googleमा पठाइने छ।"</string>
<string name="location_neighborhood_level_wifi" msgid="6120133551482003840">"वाइ-फाइद्वारा निर्धारित स्थान"</string>
<string name="location_gps" msgid="688049341158297763">"GPS सेटेलाइट"</string>
- <string name="location_street_level" product="tablet" msgid="4459804798444296650">"तपाईँको स्थान इङ्गित गर्नको लागि तपाईँको ट्याब्लेटमा अनुप्रयोगलाई GPS को प्रयोग गर्न दिनुहोस्"</string>
- <string name="location_street_level" product="default" msgid="7407688345675450051">"तपाईँको स्थान इङ्गित गर्नको लागि तपाईँको फोनमा अनुप्रयोगलाई GPS को प्रयोग गर्न दिनुहोस्"</string>
+ <string name="location_street_level" product="tablet" msgid="4459804798444296650">"तपाईँको स्थान इङ्गित गर्नको लागि तपाईँको ट्याब्लेटमा एपलाई GPS को प्रयोग गर्न दिनुहोस्"</string>
+ <string name="location_street_level" product="default" msgid="7407688345675450051">"तपाईँको स्थान इङ्गित गर्नको लागि तपाईँको फोनमा एपलाई GPS को प्रयोग गर्न दिनुहोस्"</string>
<string name="assisted_gps" msgid="5411780261117055175">"सहायोगी GPSको प्रयोग गर्नुहोस्"</string>
<string name="assisted_gps_enabled" msgid="2561022181775725369">"GPS लाई सहयोग पुर्याउन सर्भरको प्रयोग गर्नुहोस् (सञ्जाल प्रयोग घटाउन अनचेक गर्नुहोस्)"</string>
<string name="assisted_gps_disabled" msgid="6448758788217415937">"GPS लाई मद्दत पुर्याउन सर्भर प्रयोग गर्नुहोस् (GPS कार्यसम्पादन सुधार्न अनचेक गर्नुहोस्)"</string>
@@ -1707,16 +1709,16 @@
<string name="lockpassword_choose_your_screen_lock_header" msgid="6283518876031424798">"स्क्रिन लक सेट गर्नुहोस्"</string>
<string name="lockpassword_choose_your_password_message" msgid="2838273977481046536">"सुरक्षाका लागि पासवर्ड सेट गर्नुहोस्"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="4921343500484160894">"फिंगरप्रिन्ट प्रयोग गर्न पासवर्ड सेट गर्नुहोस्"</string>
- <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="314870151462139417">"फिंगरप्रिन्ट प्रयोग गर्न ढाँचा सेट गर्नुहोस्"</string>
+ <string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="314870151462139417">"फिंगरप्रिन्ट प्रयोग गर्न प्याटर्न सेट गर्नुहोस्"</string>
<string name="lockpassword_choose_your_pin_message" msgid="8942598950627277885">"सुरक्षाका लागि PIN सेट गर्नुहोस्"</string>
<string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1102927520952116303">"फिंगरप्रिन्ट प्रयोग गर्न PIN सेट गर्नुहोस्"</string>
- <string name="lockpassword_choose_your_pattern_message" msgid="1503075455752279687">"सुरक्षाका लागि ढाँचा सेट गर्नुहोस्"</string>
+ <string name="lockpassword_choose_your_pattern_message" msgid="1503075455752279687">"सुरक्षाका लागि प्याटर्न सेट गर्नुहोस्"</string>
<string name="lockpassword_confirm_your_password_header" msgid="9055242184126838887">"आफ्नो पासवर्ड पुन: प्रविष्टि गर्नुहोस्"</string>
<string name="lockpassword_confirm_your_pattern_header" msgid="7137526922696316545">"तपाईँको ढाँचा निश्चित गर्नुहोस्"</string>
<string name="lockpassword_confirm_your_pin_header" msgid="4335593948303036343">"आफ्नो PIN पुन: प्रविष्टि गर्नुहोस्"</string>
<string name="lockpassword_confirm_passwords_dont_match" msgid="1783767008133345784">"पासवर्ड मेल खाँदैन"</string>
<string name="lockpassword_confirm_pins_dont_match" msgid="5444357293637748942">"PIN मिल्दैन"</string>
- <string name="lockpassword_draw_your_pattern_again_header" msgid="9017394036814402348">"आफ्नो ढाँचा फेरि कोर्नुहोस्"</string>
+ <string name="lockpassword_draw_your_pattern_again_header" msgid="9017394036814402348">"प्याटर्न फेरि बनाउनुहोस्"</string>
<string name="lockpassword_choose_lock_generic_header" msgid="4418423132980560119">"चयन अनलक गर्नुहोस्"</string>
<string name="lockpassword_password_set_toast" msgid="601928982984489868">"पासवर्ड सेट भएको छ"</string>
<string name="lockpassword_pin_set_toast" msgid="172594825722240059">"PIN सेट भएको छ।"</string>
@@ -1744,17 +1746,17 @@
<string name="lockpassword_confirm_your_password_header_frp" msgid="7326670978891793470">"पासवर्ड पुष्टि गर्नुहोस्"</string>
<string name="lockpassword_invalid_pin" msgid="3059022215815900137">"गलत PIN"</string>
<string name="lockpassword_invalid_password" msgid="8374331995318204099">"गलत पासवर्ड"</string>
- <string name="lockpattern_need_to_unlock_wrong" msgid="1328670466959377948">"गलत ढाँचा"</string>
+ <string name="lockpattern_need_to_unlock_wrong" msgid="1328670466959377948">"प्याटर्न मिलेन"</string>
<string name="lock_settings_title" msgid="233657584969886812">"यन्त्र सुरक्षा"</string>
<string name="lockpattern_change_lock_pattern_label" msgid="333149762562581510">"अनलक ढाँचा परिवर्तन गर्नुहोस्"</string>
<string name="lockpattern_change_lock_pin_label" msgid="3435796032210265723">"PIN अनलक बदल्नुहोस्"</string>
- <string name="lockpattern_recording_intro_header" msgid="2262005028838969839">"एउटा अनलक ढाँचा कोर्नुहोस्"</string>
+ <string name="lockpattern_recording_intro_header" msgid="2262005028838969839">"अनलक प्याटर्न बनाउनुहोस्"</string>
<string name="lockpattern_recording_intro_footer" msgid="5426745740754065099">"मद्दतका लागि मेनुमा थिच्नुहोस्।"</string>
<string name="lockpattern_recording_inprogress" msgid="4060818382176523671">"सकिएपछि औँला उचाल्नुहोस्।"</string>
<string name="lockpattern_recording_incorrect_too_short" msgid="6374760294545431845">"कम्तीमा <xliff:g id="NUMBER">%d</xliff:g>वटा थोप्लाहरू जोड्नुहोस्। फेरि प्रयास गर्नुहोस्:"</string>
<string name="lockpattern_pattern_entered_header" msgid="2108106638322637851">"ढाँचा रेकर्ड भयो।"</string>
- <string name="lockpattern_need_to_confirm" msgid="4079482507985867389">"पुष्टि गर्नको लागि ढाँचा पुन: कोर्नुहोस्"</string>
- <string name="lockpattern_pattern_confirmed_header" msgid="5603156929428721407">"तपाईँको नयाँ अनलक ढाँचा:"</string>
+ <string name="lockpattern_need_to_confirm" msgid="4079482507985867389">"पुष्टि गर्न प्याटर्न फेरि बनाउनुहोस्"</string>
+ <string name="lockpattern_pattern_confirmed_header" msgid="5603156929428721407">"नयाँ अनलक प्याटर्न:"</string>
<string name="lockpattern_confirm_button_text" msgid="7059311304112902598">"निश्चित गर्नुहोस्"</string>
<string name="lockpattern_restart_button_text" msgid="4322968353922529868">"पुनःचित्रण गर्नुहोस्"</string>
<string name="lockpattern_retry_button_text" msgid="5473976578241534298">"खाली गर्नुहोस्"</string>
@@ -1766,12 +1768,12 @@
<string name="lockpattern_settings_enable_visible_pattern_title_profile" msgid="5338893138982642228">"प्रोफाइलको ढाँचालाई देखिने बनाउनुहोस्"</string>
<string name="lockpattern_settings_enable_tactile_feedback_title" msgid="3203621862806531947">"ट्याप गर्दा भाइब्रेट गर्नुहोस्"</string>
<string name="lockpattern_settings_enable_power_button_instantly_locks" msgid="5890335732200257777">"पावर बटनले तुरुन्त लक गर्दछ"</string>
- <string name="lockpattern_settings_power_button_instantly_locks_summary" msgid="1279989004145567840">"<xliff:g id="TRUST_AGENT_NAME">%1$s</xliff:g> द्वारा जब अनलक गर्ने बाहेक"</string>
+ <string name="lockpattern_settings_power_button_instantly_locks_summary" msgid="1279989004145567840">"<xliff:g id="TRUST_AGENT_NAME">%1$s</xliff:g> जे अनलक अवस्थामा राखेका बेला बाहेक"</string>
<string name="lockpattern_settings_choose_lock_pattern" msgid="9042142745571386381">"अनलक ढाँचा सेट गर्नुहोस्"</string>
<string name="lockpattern_settings_change_lock_pattern" msgid="1456643060737114885">"अनलक ढाँचा बदल्नुहोस्"</string>
<string name="lockpattern_settings_help_how_to_record" msgid="6037403647312543908">"अनलक ढाँचा कसरी कोर्ने?"</string>
<string name="lockpattern_too_many_failed_confirmation_attempts" msgid="3043127997770535921">"अत्यन्तै धेरै गलत प्रयास। <xliff:g id="NUMBER">%d</xliff:g> सेकेन्ड पछि पुन: प्रयास गर्नुहोस्।"</string>
- <string name="activity_not_found" msgid="3492413375341165453">"अनुप्रयोग तपाईँको फोनमा स्थापना गरिएको छैन।"</string>
+ <string name="activity_not_found" msgid="3492413375341165453">"एप तपाईँको फोनमा स्थापना गरिएको छैन।"</string>
<string name="lock_settings_profile_title" msgid="3928992050074556160">"कार्य प्रोफाइलको सुरक्षा"</string>
<string name="lock_settings_profile_screen_lock_title" msgid="285267471459162203">"कार्य प्रोफाइलको स्क्रिन लक"</string>
<string name="lock_settings_profile_unification_title" msgid="2629698644191935287">"एउटै लकको प्रयोग गर्नुहोस्"</string>
@@ -1782,21 +1784,21 @@
<string name="lock_settings_profile_unification_dialog_confirm" msgid="888942752619181804">"एउटै लकको प्रयोग गर्नुहोस्"</string>
<string name="lock_settings_profile_unification_dialog_uncompliant_confirm" msgid="8046452284593057185">"एउटै लकको प्रयोग गर्नुहोस्"</string>
<string name="lock_settings_profile_unified_summary" msgid="5347244550751740962">"यन्त्रको स्क्रिन लक जस्तै"</string>
- <string name="manageapplications_settings_title" msgid="6876782217962262376">"अनुप्रयोगहरू व्यवस्थापन गर्नुहोस्"</string>
- <string name="manageapplications_settings_summary" msgid="5092964799412478962">"स्थापित अनुप्रयोगहरू प्रबन्ध गर्नुहोस् र हटाउनुहोस्"</string>
- <string name="applications_settings" msgid="368331725658793179">"अनुप्रयोगको जानकारी"</string>
- <string name="applications_settings_summary" msgid="8888258399577123906">"अनुप्रयोगहरू प्रबन्ध गर्नुहोस्, छिटो लन्च सर्टकटहरू सेटअप गर्नुहोस्"</string>
- <string name="applications_settings_header" msgid="3766501606045211098">"अनुप्रयोग सेटिङहरू"</string>
+ <string name="manageapplications_settings_title" msgid="6876782217962262376">"एपहरू व्यवस्थापन गर्नुहोस्"</string>
+ <string name="manageapplications_settings_summary" msgid="5092964799412478962">"स्थापित एपहरू प्रबन्ध गर्नुहोस् र हटाउनुहोस्"</string>
+ <string name="applications_settings" msgid="368331725658793179">"एपको जानकारी"</string>
+ <string name="applications_settings_summary" msgid="8888258399577123906">"एपहरू प्रबन्ध गर्नुहोस्, छिटो लन्च सर्टकटहरू सेटअप गर्नुहोस्"</string>
+ <string name="applications_settings_header" msgid="3766501606045211098">"एप सेटिङहरू"</string>
<string name="install_applications" msgid="7745902974984889179">"अज्ञात स्रोतहरू"</string>
- <string name="install_applications_title" msgid="8164828577588659496">"सबै अनुप्रयोग स्रोतहरू अनुमति"</string>
- <string name="recent_app_category_title" msgid="7688788038277126727">"हालै खोलिएका अनुप्रयोगहरू"</string>
- <string name="see_all_apps_title" msgid="6435061912110347474">"सबै <xliff:g id="COUNT">%1$d</xliff:g> अनुप्रयोगहरू हेर्नुहोस्"</string>
+ <string name="install_applications_title" msgid="8164828577588659496">"सबै एप स्रोतहरू अनुमति"</string>
+ <string name="recent_app_category_title" msgid="7688788038277126727">"हालै खोलिएका एपहरू"</string>
+ <string name="see_all_apps_title" msgid="6435061912110347474">"सबै <xliff:g id="COUNT">%1$d</xliff:g> एपहरू हेर्नुहोस्"</string>
<string name="install_all_warning" product="tablet" msgid="4580699862358542727">"तपाईंको ट्याब्लेट र व्यक्तिगत डेटा अज्ञात अनुप्रयोगहरूबाट हुने आक्रमणमा पर्न सक्ने जोखिम अझ बढी हुन्छ। यो स्रोतबाट प्राप्त हुने अनुप्रयोगहरूको स्थापना गरेर, तिनीहरूको प्रयोगबाट तपाईंको ट्याब्लेटमा हुनसक्ने क्षति वा डेटाको नोक्सानीको जिम्मेवार तपाईं आफैँ हुनुहुन्छ भन्ने कुरामा तपाईं सहमत हुनुहुन्छ।"</string>
<string name="install_all_warning" product="default" msgid="7445839116997296358">"तपाईंको फोन र व्यक्तिगत डेटा अज्ञात अनुप्रयोगहरूबाट हुने आक्रमणमा पर्न सक्ने जोखिम अझ बढी हुन्छ। यो स्रोतबाट प्राप्त हुने अनुप्रयोगहरूको स्थापना गरेर, तिनीहरूको प्रयोगबाट तपाईंको फोनमा हुनसक्ने क्षति वा डेटाको नोक्सानीको जिम्मेवार तपाईं आफैँ हुनुहुन्छ भन्ने कुरामा तपाईं सहमत हुनुहुन्छ।"</string>
<string name="install_all_warning" product="device" msgid="9141585291103603515">"तपाईंको यन्त्र र व्यक्तिगत डेटा अज्ञात अनुप्रयोगहरूबाट हुने आक्रमणमा पर्न सक्ने जोखिम अझ बढी हुन्छ। यो स्रोतबाट प्राप्त हुने अनुप्रयोगहरूको स्थापना गरेर, तिनीहरूको प्रयोगबाट फोनमा हुनसक्ने क्षति वा डेटाको नोक्सानीको जिम्मेवार तपाईं आफैँ हुनुहुन्छ भन्ने कुरामा तपाईं सहमत हुनुहुन्छ।"</string>
<string name="advanced_settings" msgid="6282069364060968122">"जटिल सेटिङहरू"</string>
<string name="advanced_settings_summary" msgid="5912237062506771716">"थप सेटिङ विकल्पहरू सक्षम पार्नुहोस्"</string>
- <string name="application_info_label" msgid="3886253474964599105">"अनुप्रयोग जानकारी"</string>
+ <string name="application_info_label" msgid="3886253474964599105">"एपको जानकारी"</string>
<string name="storage_label" msgid="1109537840103290384">"भण्डारण"</string>
<string name="auto_launch_label" msgid="47089737922907379">"पूर्वनिर्धारितद्वारा खोल्नुहोस्"</string>
<string name="auto_launch_label_generic" msgid="7865828543459493308">"पूर्वनिर्धारितहरू"</string>
@@ -1813,8 +1815,8 @@
<string name="controls_label" msgid="5609285071259457221">"नियन्त्रणहरू"</string>
<string name="force_stop" msgid="9213858124674772386">"जबरजस्ती रोक्नुहोस्"</string>
<string name="total_size_label" msgid="3929917501176594692">"कूल"</string>
- <string name="application_size_label" msgid="175357855490253032">"अनुप्रयोगको आकार"</string>
- <string name="external_code_size_label" msgid="3434421216268309411">"USB भण्डारण अनुप्रयोग"</string>
+ <string name="application_size_label" msgid="175357855490253032">"एपको आकार"</string>
+ <string name="external_code_size_label" msgid="3434421216268309411">"USB भण्डारण एप"</string>
<string name="data_size_label" msgid="7790201846922671662">"प्रयोगकर्ताको डेटा"</string>
<string name="external_data_size_label" product="nosdcard" msgid="8004991551882573479">"USB भण्डारण डेटा"</string>
<string name="external_data_size_label" product="default" msgid="1097584278225902734">"SD कार्ड"</string>
@@ -1825,45 +1827,45 @@
<string name="enable_text" msgid="7179141636849225884">"सक्रिय गर्नुहोस्"</string>
<string name="clear_user_data_text" msgid="8894073247302821764">"भण्डारण खाली गर्नुहोस्"</string>
<string name="app_factory_reset" msgid="8718986000278776272">"अद्यावधिकहरू अस्थापना गर्नुहोस्"</string>
- <string name="auto_launch_enable_text" msgid="3372898942144027341">"केही कारवाहीका लागि पूर्वनिर्धारतिबाट यो अनुप्रयोग सुरु गर्न तपाईँले छान्नु भयो।"</string>
- <string name="always_allow_bind_appwidgets_text" msgid="2286211654774611037">"तपाईंले यो अनुप्रयोगलाई विजेटहरू सिर्जना गर्न र तिनीहरूको डेटा पहुँच गर्न अनुमतिको लागि छान्नुभयो।"</string>
+ <string name="auto_launch_enable_text" msgid="3372898942144027341">"केही कारवाहीका लागि पूर्वनिर्धारतिबाट यो एप सुरु गर्न तपाईँले छान्नु भयो।"</string>
+ <string name="always_allow_bind_appwidgets_text" msgid="2286211654774611037">"तपाईंले यो एपलाई विजेटहरू सिर्जना गर्न र तिनीहरूको डेटा पहुँच गर्न अनुमतिको लागि छान्नुभयो।"</string>
<string name="auto_launch_disable_text" msgid="8560921288036801416">"कुनै पूर्वनिर्धारित सेट गरिएको छैन।"</string>
<string name="clear_activities" msgid="2068014972549235347">"पूर्वनिर्धारितहरू मेटाउनुहोस्"</string>
- <string name="screen_compatibility_text" msgid="1768064020294301496">"तपाईंको स्क्रिनका लागि यस अनुप्रयोग डिजाइन नहुन सक्छ। तपाईंको स्क्रिनमा कसरी मिल्छ तपाईं यहाँ नियन्त्रण गर्न सक्नु हुन्छ।"</string>
+ <string name="screen_compatibility_text" msgid="1768064020294301496">"तपाईंको स्क्रिनका लागि यस एप डिजाइन नहुन सक्छ। तपाईंको स्क्रिनमा कसरी मिल्छ तपाईं यहाँ नियन्त्रण गर्न सक्नु हुन्छ।"</string>
<string name="ask_compatibility" msgid="6687958195768084807">"सुरु भइसकेपछि सोध्नुहोस्"</string>
- <string name="enable_compatibility" msgid="1754177974320410195">"स्केल अनुप्रयोग"</string>
+ <string name="enable_compatibility" msgid="1754177974320410195">"स्केल एप"</string>
<string name="unknown" msgid="2780743426415501227">"अज्ञात"</string>
<string name="sort_order_alpha" msgid="6689698854460261212">"नामबाट क्रमबद्ध गर्नुहोस्"</string>
<string name="sort_order_size" msgid="3167376197248713027">"आकारद्वारा क्रमबद्ध गर्नुहोस्"</string>
- <string name="sort_order_recent_notification" msgid="5592496977404445941">"सबैभन्दा हालसालैका"</string>
- <string name="sort_order_frequent_notification" msgid="5640245013098010347">"प्रायः"</string>
+ <string name="sort_order_recent_notification" msgid="5592496977404445941">"नवीनतम"</string>
+ <string name="sort_order_frequent_notification" msgid="5640245013098010347">"प्रायःजसो प्रयोग हुने"</string>
<string name="show_running_services" msgid="1895994322704667543">"चालु सेवाहरू देखाउनुहोस्"</string>
<string name="show_background_processes" msgid="88012264528093617">"केस गरिएका प्रक्रियाहरू"</string>
- <string name="default_emergency_app" msgid="286530070173495823">"आपतकालीन अनुप्रयोग"</string>
- <string name="reset_app_preferences" msgid="1426500030595212077">"अनुप्रयोग प्राथमिकताहरू पुनःसेट गर्नुहोस्"</string>
- <string name="reset_app_preferences_title" msgid="792909865493673598">"अनुप्रयोगका प्राथमिकताहरू पुनःसेट गर्ने हो?"</string>
- <string name="reset_app_preferences_desc" msgid="7935273005301096031">"यसले सबै प्राथमिकताहरूलाई पुनःसेट गर्ने छ:\n\n "<li>"असक्षम पारिएका अनुप्रयोगहरू"</li>\n" "<li>"असक्षम पारिएका अनुप्रयोग सूचनाहरू"</li>\n" "<li>"कार्यका लागि पूर्वनिर्धारित अनुप्रयोगहरू"</li>\n" "<li>"अनुप्रयोगहरूको लागि पृष्ठभूमि डेटा प्रतिबन्धहरू"</li>\n" "<li>"कुनै अनुमति प्रतिबन्धहरू"</li>\n\n" तपाईँले कुनै पनि अनुप्रयोग डेटा गुमाउनु हुने छैन।"</string>
- <string name="reset_app_preferences_button" msgid="2041894727477934656">"अनुप्रयोगहरू पुनःसेट गर्नुहोस्"</string>
+ <string name="default_emergency_app" msgid="286530070173495823">"आपत्कालीन एप"</string>
+ <string name="reset_app_preferences" msgid="1426500030595212077">"अनुप्रयोगका प्राथमिकताहरू रिसेट गर्नुहोस् रिसेट गर्नुहोस्"</string>
+ <string name="reset_app_preferences_title" msgid="792909865493673598">"अनुप्रयोगका अनुप्रयोगका प्राथमिकताहरू रिसेट गर्ने हो?"</string>
+ <string name="reset_app_preferences_desc" msgid="7935273005301096031">"यसले सबै प्राथमिकताहरूलाई रिसेट गर्ने छ:\n\n "<li>"असक्षम पारिएका एपहरू"</li>\n" "<li>"असक्षम पारिएका एप सूचनाहरू"</li>\n" "<li>"कार्यका लागि पूर्वनिर्धारित एपहरू"</li>\n" "<li>"एपहरूको लागि पृष्ठभूमि डेटा प्रतिबन्धहरू"</li>\n" "<li>"कुनै अनुमति प्रतिबन्धहरू"</li>\n\n" तपाईँले कुनै पनि एप डेटा गुमाउनु हुने छैन।"</string>
+ <string name="reset_app_preferences_button" msgid="2041894727477934656">"एपहरू रिसेट गर्नुहोस्"</string>
<string name="manage_space_text" msgid="6166469422303124302">"ठाउँको प्रबन्ध गर्नुहोस्"</string>
<string name="filter" msgid="2426943916212457962">"फिल्टर गर्नुहोस्"</string>
<string name="filter_dlg_title" msgid="115313222190512670">"फिल्टर विकल्पहरू छान्नुहोस्"</string>
- <string name="filter_apps_all" msgid="3938077534861382701">"सबै अनुप्रयोगहरू"</string>
- <string name="filter_apps_disabled" msgid="5394488790555678117">"असक्षम पारिएका अनुप्रयोगहरू"</string>
+ <string name="filter_apps_all" msgid="3938077534861382701">"सबै एपहरू"</string>
+ <string name="filter_apps_disabled" msgid="5394488790555678117">"असक्षम पारिएका एपहरू"</string>
<string name="filter_apps_third_party" msgid="3985794876813232322">"डाउनलोड गरियो"</string>
<string name="filter_apps_running" msgid="6852975378502426359">"चालु"</string>
<string name="filter_apps_onsdcard" product="nosdcard" msgid="3501701148760911442">"USB भण्डारण"</string>
<string name="filter_apps_onsdcard" product="default" msgid="135989136394672864">"SD कार्डमा"</string>
<string name="not_installed" msgid="6432131218496140253">"यो प्रयोगकर्ताको लागि स्थापित गरिएको छैन"</string>
<string name="installed" msgid="4824212968888080451">"स्थापना गरियो"</string>
- <string name="no_applications" msgid="6811396016303576024">"कुनै अनुप्रयोगहरू छैनन्"</string>
+ <string name="no_applications" msgid="6811396016303576024">"कुनै एपहरू छैनन्"</string>
<string name="internal_storage" msgid="7392373600013294853">"आन्तरिक भण्डारण"</string>
<string name="recompute_size" msgid="4290692197892743928">"आकार पुनःगणना गर्दै ..."</string>
- <string name="clear_data_dlg_title" msgid="7388024498687029597">"अनुप्रयोग डेटा मेटाउन चाहनुहुन्छ?"</string>
+ <string name="clear_data_dlg_title" msgid="7388024498687029597">"एप डेटा मेटाउन चाहनुहुन्छ?"</string>
<string name="clear_data_dlg_text" msgid="6849657743695013414">"यस अनुप्रयोगका सम्पूर्ण डेटाहरू स्थायी रूपमा मेटाइने छ। यसमा सम्पूर्ण फाइल, सेटिङ, खाताहरू, डेटाबेस आदि पर्दछन्।"</string>
<string name="dlg_ok" msgid="4666570206507476557">"ठिक छ"</string>
<string name="dlg_cancel" msgid="2434951039156262467">"रद्द गर्नुहोस्"</string>
<string name="app_not_found_dlg_title" msgid="394147475018718483"></string>
- <string name="app_not_found_dlg_text" msgid="8807428608938210212">"स्थापित अनुप्रयोगको सूचीमा अनुप्रयोग भेटिएन।"</string>
+ <string name="app_not_found_dlg_text" msgid="8807428608938210212">"स्थापित एपको सूचीमा एप भेटिएन।"</string>
<string name="clear_failed_dlg_text" msgid="8072859778950498232">"अनुप्रयोगका लागि भण्डारण खाली गर्न सकिएन।"</string>
<string name="join_two_items" msgid="3833831843199356403">"<xliff:g id="FIRST_ITEM">%1$s</xliff:g> र <xliff:g id="SECOND_ITEM">%2$s</xliff:g>"</string>
<string name="join_two_unrelated_items" msgid="8257688498236358394">"<xliff:g id="FIRST_ITEM">%1$s</xliff:g>, <xliff:g id="SECOND_ITEM">%2$s</xliff:g>"</string>
@@ -1877,24 +1879,24 @@
<string name="move_app_to_sdcard" product="default" msgid="2348845109583354505">"SD कार्डमा सार्नुहोस्"</string>
<string name="another_migration_already_in_progress" msgid="3159694008286196454">"अर्को माइग्रेसन पहिलेदेखि नै जारी छ।"</string>
<string name="insufficient_storage" msgid="7089626244018569405">"पर्याप्त भण्डारण ठाउँ छैन।"</string>
- <string name="does_not_exist" msgid="4821267479183197109">"अनुप्रयोग छैन"</string>
+ <string name="does_not_exist" msgid="4821267479183197109">"एप छैन"</string>
<string name="invalid_location" msgid="8057409982223429673">"स्थापना स्थान वैध छैन।"</string>
<string name="system_package" msgid="1824541892695233351">"प्रणाली अपडेटहरू बाह्य मिडियामा स्थापित गर्न सकिँदैनन्।"</string>
- <string name="move_error_device_admin" msgid="6640501923867066901">"बाह्य मिडियामा यन्त्र प्रशासक अनुप्रयोगलाई स्थापना गर्न सकिँदैन"</string>
+ <string name="move_error_device_admin" msgid="6640501923867066901">"बाह्य मिडियामा यन्त्र प्रशासक एपलाई स्थापना गर्न सकिँदैन"</string>
<string name="force_stop_dlg_title" msgid="8822779487097246675">"बलपूर्वक रोक्ने हो?"</string>
- <string name="force_stop_dlg_text" msgid="7435245769456493398">"यदि तपाईँले अनुप्रयोगलाई जबर्जस्ती रोक्नु भएको खण्डमा त्यसले चाहेअनुसार काम नगर्न सक्छ।"</string>
+ <string name="force_stop_dlg_text" msgid="7435245769456493398">"यदि तपाईँले एपलाई जबर्जस्ती रोक्नु भएको खण्डमा त्यसले चाहेअनुसार काम नगर्न सक्छ।"</string>
<string name="app_install_location_title" msgid="5121617802063021720">"मन परेको स्थापना स्थान"</string>
<string name="app_install_location_summary" msgid="109719780117187797">"नयाँ अनुप्रयोगका लागि रुचाइएको स्थापना स्थान बदल्नुहोस्"</string>
- <string name="app_disable_dlg_positive" msgid="5508828271100168073">"अनुप्रयोग असक्षम गर्नुहोस्"</string>
- <string name="app_disable_dlg_text" msgid="9221864774943530281">"तपाईंले यो अनुप्रयोगलाई असक्षम पार्नुभयो भने Android र अन्य अनुप्रयोगहरूले अब उप्रान्त अपेक्षाअनुसार कार्य नगर्न सक्छन्। स्मरण रहोस्, तपाईं यो अनुप्रयोग तपाईंको यन्त्रसँग पहिल्यै स्थापना भएर आएको हुँदा तपाईं यसलाई मेट्न सक्नुहुन्न। यो अनुप्रयोग असक्षम पारेर, तपाईं यसलाई निष्क्रिय पार्नुहुन्छ र यसलाई आफ्नो यन्त्रमा लुकाउनुहुन्छ।"</string>
+ <string name="app_disable_dlg_positive" msgid="5508828271100168073">"एप असक्षम गर्नुहोस्"</string>
+ <string name="app_disable_dlg_text" msgid="9221864774943530281">"तपाईंले यो एपलाई असक्षम पार्नुभयो भने Android र अन्य एपहरूले अब उप्रान्त अपेक्षाअनुसार कार्य नगर्न सक्छन्। स्मरण रहोस्, तपाईं यो एप तपाईंको यन्त्रसँग पहिल्यै स्थापना भएर आएको हुँदा तपाईं यसलाई मेट्न सक्नुहुन्न। यो एप असक्षम पारेर, तपाईं यसलाई निष्क्रिय पार्नुहुन्छ र यसलाई आफ्नो यन्त्रमा लुकाउनुहुन्छ।"</string>
<string name="app_disable_notifications_dlg_title" msgid="699530661413553928">"सूचनाहरू बन्द गर्नुहोस्?"</string>
<string name="app_install_details_group_title" msgid="2909597319422976921">"स्टोर"</string>
- <string name="app_install_details_title" msgid="6954953384372934881">"अनुप्रयोग बारे विवरणहरू"</string>
- <string name="app_install_details_summary" msgid="6612222941121363940">"<xliff:g id="APP_STORE">%1$s</xliff:g> बाट स्थापना गरिएको अनुप्रयोग"</string>
+ <string name="app_install_details_title" msgid="6954953384372934881">"एप बारे विवरणहरू"</string>
+ <string name="app_install_details_summary" msgid="6612222941121363940">"<xliff:g id="APP_STORE">%1$s</xliff:g> बाट स्थापना गरिएको एप"</string>
<string name="instant_app_details_summary" msgid="6384264315914966114">"<xliff:g id="APP_STORE">%1$s</xliff:g> मा थप जानकारी छ"</string>
<string name="app_ops_running" msgid="6378418969742957805">"चालु भइरहेको"</string>
<string name="app_ops_never_used" msgid="8305262378162525813">"(कहिल्यै प्रयोग नभएको)"</string>
- <string name="no_default_apps" msgid="4519038578011412532">"कुनै पूर्वनिर्धारित अनुप्रयोगहरू छैनन्"</string>
+ <string name="no_default_apps" msgid="4519038578011412532">"कुनै पूर्वनिर्धारित एपहरू छैनन्"</string>
<string name="storageuse_settings_title" msgid="3390798597982116048">"भण्डारण प्रयोग"</string>
<string name="storageuse_settings_summary" msgid="3013328092465903687">"अनुप्रयोगद्वारा प्रयोग गरिएको भण्डारण हेर्नुहोस्"</string>
<string name="service_restarting" msgid="1190995225643385568">"पुनःसुरु हुँदै"</string>
@@ -1915,22 +1917,22 @@
<string name="running_processes_item_description_p_s" msgid="707216865096533078">"<xliff:g id="NUMPROCESS">%1$d</xliff:g> प्रक्रियाहरू र <xliff:g id="NUMSERVICES">%2$d</xliff:g> सेवा"</string>
<string name="running_processes_item_description_p_p" msgid="8039478314818162001">"<xliff:g id="NUMPROCESS">%1$d</xliff:g> प्रक्रियाहरू र <xliff:g id="NUMSERVICES">%2$d</xliff:g> सेवाहरू"</string>
<string name="running_processes_header_title" msgid="6505983796524910467">"यन्त्रको मेमोरी"</string>
- <string name="running_processes_header_footer" msgid="6365963816942632771">"अनुप्रयोग RAM उपयोग"</string>
+ <string name="running_processes_header_footer" msgid="6365963816942632771">"एप RAM उपयोग"</string>
<string name="running_processes_header_system_prefix" msgid="3812089317725567449">"प्रणाली"</string>
- <string name="running_processes_header_apps_prefix" msgid="4024980745400903746">"अनुप्रयोगहरू"</string>
+ <string name="running_processes_header_apps_prefix" msgid="4024980745400903746">"एपहरू"</string>
<string name="running_processes_header_free_prefix" msgid="1092348393136753031">"नि:शुल्क"</string>
<string name="running_processes_header_used_prefix" msgid="2984090414986096084">"प्रयोग भयो"</string>
<string name="running_processes_header_cached_prefix" msgid="8398315634778729026">"क्यास्ड"</string>
<string name="running_processes_header_ram" msgid="3867954556214535588">"RAM को <xliff:g id="RAM_0">%1$s</xliff:g>"</string>
- <string name="runningservicedetails_settings_title" msgid="7075556369123578372">"चालु अनुप्रयोग"</string>
+ <string name="runningservicedetails_settings_title" msgid="7075556369123578372">"चालु एप"</string>
<string name="no_services" msgid="2085012960886321920">"सक्रिय छैन"</string>
<string name="runningservicedetails_services_title" msgid="5890094559748633615">"सेवाहरू"</string>
<string name="runningservicedetails_processes_title" msgid="5496507383850423763">"प्रक्रियाहरू"</string>
<string name="service_stop" msgid="8812777462903125191">"रोक्नुहोस्"</string>
<string name="service_manage" msgid="7045214643721276662">"सेटिङहरू"</string>
- <string name="service_stop_description" msgid="4184180745938573707">"सेवा यसको अनुप्रयोगले सुरु गरेको हो। यसलाई रोक्दा अनुप्रयोग विफल हुन सक्छ।"</string>
- <string name="heavy_weight_stop_description" msgid="7444148811046611463">"यो अनुप्रयोग सुरक्षित तरिकाले रोक्न मिल्दैन। यदि तपाईंले यसलाई रोक्नुभयो भने तपाईंले हालको केही काम हराउन सक्नु हुने छ"</string>
- <string name="background_process_stop_description" msgid="8971810208873038109">"यो पुरानो अनुप्रयोग प्रक्रिया हो जुन अझैं चलिरहेको छ, यो कुनै पनि बेला चाहिन सक्छ। सामान्यतया: यसलाई रोक्नु पर्ने कुनै कारण छैन।"</string>
+ <string name="service_stop_description" msgid="4184180745938573707">"सेवा यसको एपले सुरु गरेको हो। यसलाई रोक्दा एप विफल हुन सक्छ।"</string>
+ <string name="heavy_weight_stop_description" msgid="7444148811046611463">"यो एप सुरक्षित तरिकाले रोक्न मिल्दैन। यदि तपाईंले यसलाई रोक्नुभयो भने तपाईंले हालको केही काम हराउन सक्नु हुने छ"</string>
+ <string name="background_process_stop_description" msgid="8971810208873038109">"यो पुरानो एप प्रक्रिया हो जुन अझैं चलिरहेको छ, यो कुनै पनि बेला चाहिन सक्छ। सामान्यतया: यसलाई रोक्नु पर्ने कुनै कारण छैन।"</string>
<string name="service_manage_description" msgid="8058123524402833082">"<xliff:g id="CLIENT_NAME">%1$s</xliff:g>: अहिले प्रयोगमा छ। यसलाई नियन्त्रण गर्न सेटिङमा ट्याप गर्नुहोस्।"</string>
<string name="main_running_process_description" msgid="7733268956566861797">"मुख्य प्रक्रिया प्रयोगमा।"</string>
<string name="process_service_in_use_description" msgid="2253782391122637651">"सेवा <xliff:g id="COMP_NAME">%1$s</xliff:g> प्रयोगमा छ।"</string>
@@ -1952,7 +1954,7 @@
<string name="auto_replace" msgid="4908063993127848521">"स्वतः परिवर्तन"</string>
<string name="auto_replace_summary" msgid="5484123340142696252">"गलत टाइप गरिएका शब्दहरू सच्याउनुहोस्"</string>
<string name="auto_caps" msgid="5566082723106296847">"स्वतः क्यापटिल"</string>
- <string name="auto_caps_summary" msgid="8505254799874525084">"वाक्यहरूको पहिलो अक्षर ठूलो पार्नुहोस्"</string>
+ <string name="auto_caps_summary" msgid="8505254799874525084">"वाक्यहरूको पहिलो अक्षर ठुलो पार्नुहोस्"</string>
<string name="auto_punctuate" msgid="8386007107100525931">"अटो-पङ्चुएट"</string>
<string name="hardkeyboard_category" msgid="5937171470391551627">"वास्तविक किबोर्ड सेटिङहरू"</string>
<string name="auto_punctuate_summary" msgid="245694025030386370">"\".\" सम्मिलित गर्न दुई पटक स्पेस कुञ्जी थिच्नुहोस्"</string>
@@ -2029,7 +2031,7 @@
<string name="usage_stats_label" msgid="3128999956478977035">"उपयोग तथ्याङ्क"</string>
<string name="testing_usage_stats" msgid="704965692323956976">"प्रयोग तथ्याङ्क"</string>
<string name="display_order_text" msgid="2973620313510295873">"बाट क्रमबद्घ:"</string>
- <string name="app_name_label" msgid="2258469951312794816">"अनुप्रयोग"</string>
+ <string name="app_name_label" msgid="2258469951312794816">"एप"</string>
<string name="last_time_used_label" msgid="1119322667349666930">"पछिल्लो समय प्रयोग गरिएको"</string>
<string name="usage_time_label" msgid="5615725415876461039">"उपयोग समय"</string>
<string name="accessibility_settings" msgid="9140621093888234485">"पहुँच"</string>
@@ -2047,7 +2049,7 @@
<string name="feature_flags_dashboard_title" msgid="3153034144122754381">"विशेष फ्ल्यागहरू"</string>
<string name="talkback_title" msgid="3717960404234260050">"Talkback"</string>
<string name="talkback_summary" msgid="6602857105831641574">"मुख्तया दृष्टिविहीन र कम दृष्टि भएका व्यक्तिहरूको लागि स्क्रिन रिडर"</string>
- <string name="select_to_speak_summary" msgid="7514180457557735421">"ठूलो आवाजमा सुन्न आफ्नो स्क्रिनमा भएका वस्तुहरूमा ट्याप गर्नुहोस्"</string>
+ <string name="select_to_speak_summary" msgid="7514180457557735421">"ठुलो आवाजमा सुन्न आफ्नो स्क्रिनमा भएका वस्तुहरूमा ट्याप गर्नुहोस्"</string>
<string name="accessibility_captioning_title" msgid="5878371993023439642">"क्याप्सन"</string>
<string name="accessibility_screen_magnification_title" msgid="7250949681883917360">"म्याग्निफिकेसन"</string>
<string name="accessibility_screen_magnification_gestures_title" msgid="9199287875401817974">"तीन ट्यापमा म्याग्निफाइ गर्नुहोस्"</string>
@@ -2063,11 +2065,11 @@
<string name="accessibility_shortcut_service_title" msgid="3516052294376744060">"सर्टकट सेवा"</string>
<string name="accessibility_shortcut_service_on_lock_screen_title" msgid="1279441617927949980">"लक स्क्रिनबाट अनुमति दिनुहोस्"</string>
<string name="accessibility_shortcut_description" msgid="1427049334225166395">"सर्टकट सक्रिय हुँदा पहुँचसम्बन्धी सुविधा सुरु गर्न तपाईं दुवै भोल्युम कुञ्जीहरूलाई ३ सेकेन्डसम्म थिच्न सक्नुहुन्छ।"</string>
- <string name="accessibility_toggle_high_text_contrast_preference_title" msgid="5652244684961877255">"उच्च विपरीत पाठ"</string>
- <string name="accessibility_toggle_screen_magnification_auto_update_preference_title" msgid="2466317284195934003">"स्क्रिन आवर्धन स्वतः अद्यावधिक गर्नुहोस्"</string>
- <string name="accessibility_toggle_screen_magnification_auto_update_preference_summary" msgid="6625473745911276917">"अनुप्रयोग ट्रान्जिसनहरूमा स्क्रिन आवर्धन अद्यावधिक गर्नुहोस्"</string>
- <string name="accessibility_power_button_ends_call_prerefence_title" msgid="6172987104538172869">"पावर बटनले कल समाप्त गर्दछ"</string>
- <string name="accessibility_toggle_large_pointer_icon_title" msgid="9127905775116570565">"ठूलो माउस पोइन्टर"</string>
+ <string name="accessibility_toggle_high_text_contrast_preference_title" msgid="5652244684961877255">"हाइ कन्ट्रास्ट पाठ"</string>
+ <string name="accessibility_toggle_screen_magnification_auto_update_preference_title" msgid="2466317284195934003">"स्क्रिन आवर्धन स्वतः अपडेट गर्नुहोस्"</string>
+ <string name="accessibility_toggle_screen_magnification_auto_update_preference_summary" msgid="6625473745911276917">"एप ट्रान्जिसनहरूमा स्क्रिन आवर्धन अपडेट गर्नुहोस्"</string>
+ <string name="accessibility_power_button_ends_call_prerefence_title" msgid="6172987104538172869">"पावर बटनले कल काट्छ"</string>
+ <string name="accessibility_toggle_large_pointer_icon_title" msgid="9127905775116570565">"ठुलो माउस पोइन्टर"</string>
<string name="accessibility_disable_animations" msgid="8378441317115710009">"एनिमेसनहरू हटाउनुहोस्"</string>
<string name="accessibility_toggle_master_mono_title" msgid="899550848196702565">"मोनो अडियो"</string>
<string name="accessibility_toggle_master_mono_summary" msgid="3847052868469033235">"अडियो प्ले गर्दा च्यानलहरूलाई संयोजन गर्नुहोस्"</string>
@@ -2081,10 +2083,10 @@
<string name="accessibility_timeout_2mins" msgid="4124259290444829477">"२ मिनेट"</string>
<string name="accessibility_content_timeout_preference_title" msgid="5160746882250939464">"पढ्ने समय"</string>
<string name="accessibility_control_timeout_preference_title" msgid="2771808346038759474">"कारबाही गर्ने समय"</string>
- <string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"तपाईंले पढ्नु पर्ने तर अस्थायी रूपमा मात्र देखिने सन्देशहरू देखाइने समय छनौट गर्नुहोस्।\n\nयो सेटिङले सबै अनुप्रयोगहरूमा काम गर्दैन।"</string>
- <string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"तपाईंलाई कारबाही गर्न लगाउने तर अस्थायी रूपमा मात्र देखिने सन्देशहरू देखाइने समय छनौट गर्नुहोस्।\n\nसबै अनुप्रयोगहरूले यो सेटिङ समर्थन गर्दैनन्।"</string>
- <string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"छुनुहोस् र केहीबेर समाउनुहोस्"</string>
- <string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"रंग इन्भर्सन"</string>
+ <string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"तपाईंले पढ्नु पर्ने तर अस्थायी रूपमा मात्र देखिने सन्देशहरू देखाइने समय छनौट गर्नुहोस्।\n\nयो सेटिङले सबै एपहरूमा काम गर्दैन।"</string>
+ <string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"तपाईंलाई कारबाही गर्न लगाउँदै अस्थायी रूपमा देखिने सन्देशहरू कति बेर देखाइनु पर्छ भन्ने कुरा छान्नुहोस्।\n\nयो सेटिङले सबै अनुप्रयोगमा काम गर्दैन।"</string>
+ <string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"टच एण्ड होल्डको ढिलाइ"</string>
+ <string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"रङ्ग उल्टाउनुहोस्"</string>
<string name="accessibility_display_inversion_preference_subtitle" msgid="69291255322175323">"कार्यसम्पादनमा असर पार्न सक्छ"</string>
<string name="accessibility_autoclick_preference_title" msgid="9164599088410340405">"कुनै वस्तुमा कर्सर रहने अवधि"</string>
<string name="accessibility_autoclick_description" msgid="5492414927846407499">"तपाईं माउस प्रयोग गर्दै हुनुहुन्छ भने कुनै स्थानमा निश्चित अवधिसम्मका लागि रोकिएको कर्सर स्वत: चल्न थाल्ने गरी सेट गर्न सक्नुहुन्छ।"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"सूचना आएको जनाउने कम्पन"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"कम्पनसहितको घन्टी"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"छुवाइसम्बन्धी कम्पन"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"सुविधा प्रयोग गर्नुहोस्"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"रङ सुधार गर्ने सुविधा प्रयोग गर्नुहोस्"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"क्याप्सनहरू प्रयोग गर्नुहोस्"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"सेवा प्रयोग गर्नुहोस्"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"रङ सच्याउने सुविधा प्रयोग गर्नुहोस्"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"क्याप्सनहरू प्रयोग गर्नुहोस्"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"जारी राख्नुहोस्"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"श्रवण यन्त्रहरू"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"कुनै पनि श्रवण यन्त्र जडान गरिएको छैन"</string>
@@ -2171,7 +2173,7 @@
<string name="color_black" msgid="5766435778956454652">"कालो"</string>
<string name="color_red" msgid="7426040122729897596">"रातो"</string>
<string name="color_green" msgid="3432648781089648971">"हरियो"</string>
- <string name="color_blue" msgid="4055855996393833996">"नीलो"</string>
+ <string name="color_blue" msgid="4055855996393833996">"निलो"</string>
<string name="color_cyan" msgid="7669317410901991453">"सायन"</string>
<string name="color_yellow" msgid="8847327436896180799">"पहेँलो"</string>
<string name="color_magenta" msgid="721976999611563071">"म्याजेन्टा"</string>
@@ -2190,11 +2192,11 @@
<string name="accessibility_no_service_selected" msgid="3909390566736834080">"कुनै पनि सेवा चयन गरिएको छैन"</string>
<string name="accessibility_service_default_description" msgid="857921874644864502">"वर्णन प्रदान गरिएको छैन।"</string>
<string name="settings_button" msgid="8557747862035866953">"सेटिङहरू"</string>
- <string name="print_settings" msgid="7886184656544483072">"मुद्रण"</string>
+ <string name="print_settings" msgid="7886184656544483072">"प्रिन्टिङ"</string>
<string name="print_settings_summary_no_service" msgid="634173687975841526">"निष्क्रिय छ"</string>
<plurals name="print_settings_summary" formatted="false" msgid="7580293760281445137">
- <item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> वटा छाप्ने सेवा खुला छन्</item>
- <item quantity="one">१ वटा छाप्ने सेवा खुला छ</item>
+ <item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> वटा प्रिन्टर खुला छन्</item>
+ <item quantity="one">१ वटा प्रिन्टर खुला छ</item>
</plurals>
<plurals name="print_jobs_summary" formatted="false" msgid="6180308415569432845">
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> छपाइ कार्यहरू</item>
@@ -2232,18 +2234,18 @@
<string name="power_discharge_remaining" msgid="3461915627093471868">"<xliff:g id="REMAIN">%1$s</xliff:g> बाँकी"</string>
<string name="power_charge_remaining" msgid="2730510256218879651">"<xliff:g id="UNTIL_CHARGED">%1$s</xliff:g> चार्जमा"</string>
<string name="background_activity_title" msgid="7207836362312111483">"पृष्ठभूमिको प्रतिबन्ध"</string>
- <string name="background_activity_summary" msgid="582372194738538145">"अनुप्रयोगलाई पृष्ठभूमिमा चल्न अनुमति दिनुहोस्"</string>
- <string name="background_activity_summary_disabled" msgid="457944930942085876">"अनुप्रयोगलाई पृष्ठभूमिमा चल्न दिइएको छैन"</string>
+ <string name="background_activity_summary" msgid="582372194738538145">"एपलाई पृष्ठभूमिमा चल्न अनुमति दिनुहोस्"</string>
+ <string name="background_activity_summary_disabled" msgid="457944930942085876">"एपलाई पृष्ठभूमिमा चल्न दिइएको छैन"</string>
<string name="background_activity_summary_whitelisted" msgid="4713321059375873828">"पृष्ठभूमिको प्रयोगमा प्रतिबन्ध लगाउन सकिँदैन"</string>
<string name="background_activity_warning_dialog_title" msgid="2170790412855899678">"पृष्ठभूमिको गतिविधिलाई सीमित गर्ने हो?"</string>
- <string name="background_activity_warning_dialog_text" msgid="8242749826732375096">"तपाईंले कुनै अनुप्रयोगको पृष्ठभूमिको गतिविधिलाई सीमित गर्नुभयो भने यसले सही तरिकाले काम नगर्न सक्छ"</string>
- <string name="background_activity_disabled_dialog_text" msgid="4234598000779459640">"यो अनुप्रयोगलाई ब्याट्री अप्टिमाइज गर्न भनी सेट नगरिएको हुनाले तपाईं यसमा बन्देज लगाउन सक्नुहुन्न।\n\nअनुप्रयोगमा बन्देज लगाउन पहिले ब्याट्री अप्टिमाइजेसन सुविधा सक्रिय गर्नुहोस्।"</string>
+ <string name="background_activity_warning_dialog_text" msgid="8242749826732375096">"तपाईंले कुनै एपको पृष्ठभूमिको गतिविधिलाई सीमित गर्नुभयो भने यसले सही तरिकाले काम नगर्न सक्छ"</string>
+ <string name="background_activity_disabled_dialog_text" msgid="4234598000779459640">"यो एपलाई ब्याट्री अप्टिमाइज गर्न भनी सेट नगरिएको हुनाले तपाईं यसमा बन्देज लगाउन सक्नुहुन्न।\n\nअनुप्रयोगमा बन्देज लगाउन पहिले ब्याट्री अप्टिमाइजेसन सुविधा सक्रिय गर्नुहोस्।"</string>
<string name="device_screen_usage" msgid="4470485475363132750">"पूर्ण चार्ज भएदेखि स्क्रिनको प्रयोग"</string>
<string name="power_usage_list_summary" msgid="4314438658308211057">"पूर्ण चार्ज भएदेखि ब्याट्रीको प्रयोग"</string>
<string name="screen_usage_summary" msgid="263396144684078341">"पूर्ण चार्ज भएदेखि स्क्रिन सक्रिय रहेको समय"</string>
<string name="device_usage_list_summary" msgid="8299017481332816368">"पूर्ण चार्ज भएदेखि यन्त्रको प्रयोग"</string>
<string name="battery_since_unplugged" msgid="6486555910264026856">"अनप्लग भएदेखि ब्याट्री प्रयोग"</string>
- <string name="battery_since_reset" msgid="4747587791838336661">"पुनःसेट गरेदेखि ब्याट्री प्रयोग"</string>
+ <string name="battery_since_reset" msgid="4747587791838336661">"रिसेट गरेदेखि ब्याट्री प्रयोग"</string>
<string name="battery_stats_on_battery" msgid="2644055304085279716">"<xliff:g id="TIME">%1$s</xliff:g> ब्याट्रिमा"</string>
<string name="battery_stats_duration" msgid="4867858933068728005">"<xliff:g id="TIME">%1$s</xliff:g> प्लग छुटाइएपछि"</string>
<string name="battery_stats_charging_label" msgid="3156586822576998231">"चार्ज हुँदै"</string>
@@ -2265,10 +2267,10 @@
<string name="details_subtitle" msgid="7279638828004951382">"विवरणहरू प्रयोग गर्नुहोस्"</string>
<string name="controls_subtitle" msgid="6920199888882834620">"उर्जा प्रयोग मिलाउनुहोस्"</string>
<string name="packages_subtitle" msgid="6506269487892204413">"सम्मिलित प्याकेजहरू"</string>
- <string name="battery_tip_summary_title" msgid="2750922152518825526">"अनुप्रयोगहरू सामान्य रूपमा चलिरहेका छन्"</string>
- <string name="battery_tip_summary_summary" product="default" msgid="6294900413896440006">"फोनले पृष्ठभूमिमा ब्याट्री सामान्य खपत गरेको छ"</string>
- <string name="battery_tip_summary_summary" product="tablet" msgid="5280099016800644130">"ट्याब्लेटले पृष्ठभूमिमा ब्याट्री सामान्य खपत गरेको छ"</string>
- <string name="battery_tip_summary_summary" product="device" msgid="4459840492610842705">"यन्त्रले पृष्ठभूमिमा ब्याट्री सामान्य खपत गरेको छ"</string>
+ <string name="battery_tip_summary_title" msgid="2750922152518825526">"एपहरू सामान्य रूपमा चलिरहेका छन्"</string>
+ <string name="battery_tip_summary_summary" product="default" msgid="6294900413896440006">"फोनले पृष्ठभूमिमा सदाको जति नै ब्याट्री खपत गरेको छ"</string>
+ <string name="battery_tip_summary_summary" product="tablet" msgid="5280099016800644130">"ट्याब्लेटले पृष्ठभूमिमा सदाको जति नै ब्याट्री खपत गरेको छ"</string>
+ <string name="battery_tip_summary_summary" product="device" msgid="4459840492610842705">"यन्त्रले पृष्ठभूमिमा सदाको जति नै ब्याट्री खपत गरेको छ"</string>
<string name="battery_tip_low_battery_title" msgid="6784043681672161175">"ब्याट्रीको कम चार्ज क्षमता"</string>
<string name="battery_tip_low_battery_summary" msgid="9151355911381188604">"ब्याट्रीको चार्ज स्तर बढी समयसम्म कायम रहन सक्दैन"</string>
<string name="battery_tip_smart_battery_title" product="default" msgid="5517122075918038665">"आफ्नो फोनको ब्याट्रीको आयुमा सुधार गर्नुहोस्"</string>
@@ -2277,86 +2279,86 @@
<string name="battery_tip_smart_battery_summary" msgid="5344821856478265778">"ब्याट्री प्रबन्धकलाई सक्रिय गर्नुहोस्"</string>
<string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"ब्याट्री सेभर सक्रिय गर्नुहोस्"</string>
<string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"ब्याट्री सामान्यभन्दा पहिले सकिन सक्छ"</string>
- <string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"ब्याट्री सेभर सक्रिय छ"</string>
+ <string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"ब्याट्री सेभर अन छ"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"केही सुविधाहरू सीमित हुन सक्छन्"</string>
<string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"फोन सामान्यभन्दा बढी प्रयोग भयो"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"ट्याब्लेट सामान्यभन्दा बढी प्रयोग भयो"</string>
<string name="battery_tip_high_usage_title" product="device" msgid="8304138287288309490">"यन्त्रलाई सामान्यभन्दा बढी प्रयोग भयो"</string>
<string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"ब्याट्री अरू बेलाभन्दा छिटै सकिन सक्छ"</string>
- <string name="battery_tip_dialog_message" product="default" msgid="8453700079047810964">"तपाईंको फोन असामान्य ढङ्गले धेरै पटक प्रयोग गरिएको छ। तपाईंको ब्याट्रीको चार्ज अपेक्षा गरिएभन्दा चाँडो सकिने छ।\n \n चार्ज पूरा भएपछि सबैभन्दा बढी प्रयोग गरिएका अनुप्रयोगहरू:"</string>
- <string name="battery_tip_dialog_message" product="tablet" msgid="6489981050645444068">"तपाईंको ट्याब्लेट असामान्य ढङ्गले धेरै पटक प्रयोग गरिएको छ। तपाईंको ब्याट्रीको चार्ज अपेक्षा गरिएभन्दा चाँडो सकिने छ।\n \n चार्ज पूरा भएपछि सबैभन्दा बढी प्रयोग गरिएका अनुप्रयोगहरू:"</string>
- <string name="battery_tip_dialog_message" product="device" msgid="6348123094674390337">"तपाईंको यन्त्र असामान्य ढङ्गले धेरै पटक प्रयोग गरिएको छ। तपाईंको ब्याट्रीको चार्ज अपेक्षा गरिएभन्दा चाँडो सकिने छ।\n \n चार्ज पूरा भएपछि सबैभन्दा बढी प्रयोग गरिएका अनुप्रयोगहरू:"</string>
+ <string name="battery_tip_dialog_message" product="default" msgid="8453700079047810964">"तपाईंको फोन असामान्य ढङ्गले धेरै पटक प्रयोग गरिएको छ। तपाईंको ब्याट्रीको चार्ज अपेक्षा गरिएभन्दा चाँडो सकिने छ।\n \n चार्ज पूरा भएपछि सबैभन्दा बढी प्रयोग गरिएका एपहरू:"</string>
+ <string name="battery_tip_dialog_message" product="tablet" msgid="6489981050645444068">"तपाईंको ट्याब्लेट असामान्य ढङ्गले धेरै पटक प्रयोग गरिएको छ। तपाईंको ब्याट्रीको चार्ज अपेक्षा गरिएभन्दा चाँडो सकिने छ।\n \n चार्ज पूरा भएपछि सबैभन्दा बढी प्रयोग गरिएका एपहरू:"</string>
+ <string name="battery_tip_dialog_message" product="device" msgid="6348123094674390337">"तपाईंको यन्त्र असामान्य ढङ्गले धेरै पटक प्रयोग गरिएको छ। तपाईंको ब्याट्रीको चार्ज अपेक्षा गरिएभन्दा चाँडो सकिने छ।\n \n चार्ज पूरा भएपछि सबैभन्दा बढी प्रयोग गरिएका एपहरू:"</string>
<string name="battery_tip_dialog_message_footer" msgid="1118827395267487197">"यसले उच्च क्षमतायुक्त पृष्ठभूमिको गतिविधि समावेश गर्दछ"</string>
<plurals name="battery_tip_restrict_title" formatted="false" msgid="7140926804142734420">
- <item quantity="other">%1$d अनुप्रयोगहरूमाथि बन्देज लगाउनुहोस्</item>
+ <item quantity="other">%1$d एपमाथि बन्देज लगाउनुहोस्</item>
<item quantity="one">%1$d माथि बन्देज लगाउनुहोस्</item>
</plurals>
<plurals name="battery_tip_restrict_handled_title" formatted="false" msgid="5509363095891806748">
- <item quantity="other">%1$d अनुप्रयोगहरूमाथि हालसालै बन्देज लगाइयो</item>
+ <item quantity="other">%1$d एपमाथि हालसालै बन्देज लगाइयो</item>
<item quantity="one">%1$s माथि हालसालै बन्देज लगाइयो</item>
</plurals>
<plurals name="battery_tip_restrict_summary" formatted="false" msgid="984148373944071669">
- <item quantity="other">%2$d अनुप्रयोगहरूले पृष्ठभूमिमा धेरै ब्याट्री खपत गरेको छ</item>
+ <item quantity="other">%2$d एपहरूले पृष्ठभूमिमा धेरै ब्याट्री खपत गरेको छ</item>
<item quantity="one">%1$s ले पृष्ठभूमिमा धेरै ब्याट्री खपत गरेको छ</item>
</plurals>
<plurals name="battery_tip_restrict_handled_summary" formatted="false" msgid="469696766640020557">
- <item quantity="other">यी अनुप्रयोगहरू पृष्ठभूमिमा चल्न सक्दैनन्</item>
- <item quantity="one">यो अनुप्रयोग पृष्ठभूमिमा चल्न सक्दैन</item>
+ <item quantity="other">यी एपहरू पृष्ठभूमिमा चल्न सक्दैनन्</item>
+ <item quantity="one">यो एप पृष्ठभूमिमा चल्न सक्दैन</item>
</plurals>
<plurals name="battery_tip_restrict_app_dialog_title" formatted="false" msgid="3042021435866172168">
- <item quantity="other">%1$d अनुप्रयोगमाथि बन्देज लगाउने हो?</item>
- <item quantity="one">अनुप्रयोगमाथि बन्देज लगाउने हो?</item>
+ <item quantity="other">%1$d एपमाथि बन्देज लगाउने हो?</item>
+ <item quantity="one">एपमाथि बन्देज लगाउने हो?</item>
</plurals>
<string name="battery_tip_restrict_app_dialog_message" msgid="6905822297507947381">"ब्याट्री जोगाउन, <xliff:g id="APP">%1$s</xliff:g> लाई पृष्ठभूमिमा ब्याट्री प्रयोग गर्नबाट रोक्नुहोस्। यो अनुप्रयोगले सही किसिमले काम नगर्न सक्छ र सूचनाहरू आइपुग्न ढिलाइ हुन सक्छ।"</string>
- <string name="battery_tip_restrict_apps_less_than_5_dialog_message" msgid="4225881888543582456">"ब्याट्री जोगाउन, यी अनुप्रयोगहरूलाई पृष्ठभूमिमा ब्याट्री प्रयोग गर्नबाट रोक्नुहोस्। प्रतिबन्ध लगाइएका अनुप्रयोगहरूले सही किसिमले काम नगर्न सक्छन् र सूचनाहरू आइपुग्न ढिलाइ हुन सक्छ।\n\nअनुप्रयोगहरू:"</string>
- <string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"ब्याट्री जोगाउन, यी अनुप्रयोगहरूलाई पृष्ठभूमिमा ब्याट्री प्रयोग गर्नबाट रोक्नुहोस्। प्रतिबन्ध लगाइएका अनुप्रयोगहरूले सही किसिमले काम नगर्न सक्छन् र सूचनाहरू आइपुग्न ढिलाइ हुन सक्छ।\n\nअनुप्रयोगहरू:\n<xliff:g id="APP_LIST">%1$s</xliff:g>।"</string>
+ <string name="battery_tip_restrict_apps_less_than_5_dialog_message" msgid="4225881888543582456">"ब्याट्री जोगाउन, यी एपहरूलाई पृष्ठभूमिमा ब्याट्री प्रयोग गर्नबाट रोक्नुहोस्। प्रतिबन्ध लगाइएका एपहरूले सही किसिमले काम नगर्न सक्छन् र सूचनाहरू आइपुग्न ढिलाइ हुन सक्छ।\n\nएपहरू:"</string>
+ <string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"ब्याट्री जोगाउन, यी एपहरूलाई पृष्ठभूमिमा ब्याट्री प्रयोग गर्नबाट रोक्नुहोस्। प्रतिबन्ध लगाइएका एपहरूले सही किसिमले काम नगर्न सक्छन् र सूचनाहरू आइपुग्न ढिलाइ हुन सक्छ।\n\nएपहरू:\n<xliff:g id="APP_LIST">%1$s</xliff:g>।"</string>
<string name="battery_tip_restrict_app_dialog_ok" msgid="2573410775701913487">"बन्देज लगाउनुहोस्"</string>
<string name="battery_tip_unrestrict_app_dialog_title" msgid="812458516399125710">"प्रतिबन्ध हटाउने हो?"</string>
- <string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"यो अनुप्रयोग पृष्ठभूमिमा ब्याट्रीको प्रयोग गर्न सक्षम हुने छ। तपाईंको ब्याट्री अपेक्षा गरेभन्दा चाँडै सकिन सक्छ।"</string>
+ <string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"यो एप पृष्ठभूमिमा ब्याट्रीको प्रयोग गर्न सक्षम हुने छ। तपाईंको ब्याट्री अपेक्षा गरेभन्दा चाँडै सकिन सक्छ।"</string>
<string name="battery_tip_unrestrict_app_dialog_ok" msgid="9154938931448151479">"हटाउनुहोस्"</string>
<string name="battery_tip_unrestrict_app_dialog_cancel" msgid="7331148618292397166">"रद्द गर्नुहोस्"</string>
- <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"तपाईंका अनुप्रयोगहरूले सामान्य मात्रामा ब्याट्रीको प्रयोग गर्दै छन्। अनुप्रयोगहरूले अत्यन्त धेरै ब्याट्रीको प्रयोग गरेको खण्डमा तपाईंको फोनले कारबाहीको सुझाव दिन्छ। \n\nतपाईंको ब्याट्री कम हुँदै गएको छ भने तपाईंले सधैँ ब्याट्री सेभर सक्रिय पार्न सक्नुहुन्छ।"</string>
- <string name="battery_tip_dialog_summary_message" product="tablet" msgid="1721081030632329647">"तपाईंका अनुप्रयोगहरूले सामान्य मात्रामा ब्याट्रीको प्रयोग गर्दै छन्। अनुप्रयोगहरूले अत्यन्त धेरै ब्याट्रीको प्रयोग गरेको खण्डमा तपाईंको ट्याब्लेटले कारबाहीको सुझाव दिन्छ। \n\nतपाईंको ब्याट्री कम हुँदै गएको छ भने तपाईंले सधैँ ब्याट्री सेभर सक्रिय पार्न सक्नुहुन्छ।"</string>
- <string name="battery_tip_dialog_summary_message" product="device" msgid="146872407040848465">"तपाईंका अनुप्रयोगहरूले सामान्य मात्रामा ब्याट्रीको प्रयोग गर्दै छन्। अनुप्रयोगहरूले अत्यन्त धेरै ब्याट्रीको प्रयोग गरेको खण्डमा तपाईंको यन्त्रले कारबाहीको सुझाव दिन्छ। \n\nतपाईंको ब्याट्री कम हुँदै गएको छ भने तपाईंले सधैँ ब्याट्री सेभर सक्रिय पार्न सक्नुहुन्छ।"</string>
+ <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"तपाईंका एपहरूले सामान्य मात्रामा ब्याट्रीको प्रयोग गर्दै छन्। एपहरूले अत्यन्त धेरै ब्याट्रीको प्रयोग गरेको खण्डमा तपाईंको फोनले कारबाहीको सुझाव दिन्छ। \n\nतपाईंको ब्याट्री कम हुँदै गएको छ भने तपाईंले सधैँ ब्याट्री सेभर सक्रिय पार्न सक्नुहुन्छ।"</string>
+ <string name="battery_tip_dialog_summary_message" product="tablet" msgid="1721081030632329647">"तपाईंका एपहरूले सामान्य मात्रामा ब्याट्रीको प्रयोग गर्दै छन्। एपहरूले अत्यन्त धेरै ब्याट्रीको प्रयोग गरेको खण्डमा तपाईंको ट्याब्लेटले कारबाहीको सुझाव दिन्छ। \n\nतपाईंको ब्याट्री कम हुँदै गएको छ भने तपाईंले सधैँ ब्याट्री सेभर सक्रिय पार्न सक्नुहुन्छ।"</string>
+ <string name="battery_tip_dialog_summary_message" product="device" msgid="146872407040848465">"तपाईंका एपहरूले सामान्य मात्रामा ब्याट्रीको प्रयोग गर्दै छन्। एपहरूले अत्यन्त धेरै ब्याट्रीको प्रयोग गरेको खण्डमा तपाईंको यन्त्रले कारबाहीको सुझाव दिन्छ। \n\nतपाईंको ब्याट्री कम हुँदै गएको छ भने तपाईंले सधैँ ब्याट्री सेभर सक्रिय पार्न सक्नुहुन्छ।"</string>
<string name="smart_battery_manager_title" msgid="5744035036663849515">"ब्याट्री प्रबन्धक"</string>
<string name="smart_battery_title" msgid="4919670408532804351">"अनुप्रयोगहरूलाई स्वतः व्यवस्थित गर्नुहोस्"</string>
- <string name="smart_battery_summary" msgid="640027046471198174">"तपाईंले प्रायः प्रयोग नगर्ने अनुप्रयोगहरूमा ब्याट्री सीमित गर्नुहोस्"</string>
- <string name="smart_battery_footer" product="default" msgid="3971715848890205632">"ब्याट्री प्रबन्धकले अनुप्रयोगहरूले ब्याट्री खर्च गरिरहेको पता लगाउँदा, तपाईंसँग यी अनुप्रयोगहरूलाई प्रतिबन्धित गर्ने विकल्प हुन्छ। प्रतिबन्धित अनुप्रयोगहरूले सही किसिमले काम नगर्न सक्छन् र सूचनाहरू आउन ढिलाइ हुन सक्छ।"</string>
- <string name="smart_battery_footer" product="tablet" msgid="3971715848890205632">"ब्याट्री प्रबन्धकले अनुप्रयोगहरूले ब्याट्री खर्च गरिरहेको पता लगाउँदा, तपाईंसँग यी अनुप्रयोगहरूलाई प्रतिबन्धित गर्ने विकल्प हुन्छ। प्रतिबन्धित अनुप्रयोगहरूले सही किसिमले काम नगर्न सक्छन् र सूचनाहरू आउन ढिलाइ हुन सक्छ।"</string>
- <string name="smart_battery_footer" product="device" msgid="3971715848890205632">"ब्याट्री प्रबन्धकले अनुप्रयोगहरूले ब्याट्री खर्च गरिरहेको पता लगाउँदा, तपाईंसँग यी अनुप्रयोगहरूलाई प्रतिबन्धित गर्ने विकल्प हुन्छ। प्रतिबन्धित अनुप्रयोगहरूले सही किसिमले काम नगर्न सक्छन् र सूचनाहरू आउन ढिलाइ हुन सक्छ।"</string>
- <string name="restricted_app_title" msgid="4957644700640127606">"प्रतिबन्धित अनुप्रयोगहरू"</string>
+ <string name="smart_battery_summary" msgid="640027046471198174">"तपाईंले प्रायः प्रयोग नगर्ने एपहरूमा ब्याट्री सीमित गर्नुहोस्"</string>
+ <string name="smart_battery_footer" product="default" msgid="3971715848890205632">"ब्याट्री प्रबन्धकले एपहरूले ब्याट्री खर्च गरिरहेको पता लगाउँदा, तपाईंसँग यी अनुप्रयोगहरूलाई प्रतिबन्धित गर्ने विकल्प हुन्छ। प्रतिबन्धित एपहरूले सही किसिमले काम नगर्न सक्छन् र सूचनाहरू आउन ढिलाइ हुन सक्छ।"</string>
+ <string name="smart_battery_footer" product="tablet" msgid="3971715848890205632">"ब्याट्री प्रबन्धकले एपहरूले ब्याट्री खर्च गरिरहेको पता लगाउँदा, तपाईंसँग यी अनुप्रयोगहरूलाई प्रतिबन्धित गर्ने विकल्प हुन्छ। प्रतिबन्धित एपहरूले सही किसिमले काम नगर्न सक्छन् र सूचनाहरू आउन ढिलाइ हुन सक्छ।"</string>
+ <string name="smart_battery_footer" product="device" msgid="3971715848890205632">"ब्याट्री प्रबन्धकले एपहरूले ब्याट्री खर्च गरिरहेको पता लगाउँदा, तपाईंसँग यी अनुप्रयोगहरूलाई प्रतिबन्धित गर्ने विकल्प हुन्छ। प्रतिबन्धित एपहरूले सही किसिमले काम नगर्न सक्छन् र सूचनाहरू आउन ढिलाइ हुन सक्छ।"</string>
+ <string name="restricted_app_title" msgid="4957644700640127606">"प्रतिबन्धित एपहरू"</string>
<plurals name="restricted_app_summary" formatted="false" msgid="7609538735465186040">
- <item quantity="other">ब्याट्रीको प्रयोग %1$d अनुप्रयोगहरूमा सीमित पार्दै</item>
- <item quantity="one">ब्याट्रीको प्रयोग %1$d अनुप्रयोगहरूमा सीमित पार्दै</item>
+ <item quantity="other">ब्याट्रीको प्रयोग %1$d एपहरूमा सीमित पार्दै</item>
+ <item quantity="one">ब्याट्रीको प्रयोग %1$d एपहरूमा सीमित पार्दै</item>
</plurals>
<string name="restricted_app_time_summary" msgid="5205881852523135226">"<xliff:g id="TIME">%1$s</xliff:g> बजे बन्देज लगाइएको"</string>
- <string name="restricted_app_detail_footer" msgid="482460517275754465">"यी अनुप्रयोगहरूले पृष्ठभूमिमा ब्याट्री प्रयोग गरिरहेका छन्। प्रतिबन्ध लगाइएका अनुप्रयोगहरूले सही किसिमले काम नगर्न सक्छन् र सूचनाहरू आइपुग्न ढिलाइ हुन सक्छ।"</string>
+ <string name="restricted_app_detail_footer" msgid="482460517275754465">"यी एपहरूले पृष्ठभूमिमा ब्याट्री प्रयोग गरिरहेका छन्। प्रतिबन्ध लगाइएका एपहरूले सही किसिमले काम नगर्न सक्छन् र सूचनाहरू आइपुग्न ढिलाइ हुन सक्छ।"</string>
<string name="battery_auto_restriction_title" msgid="488905332794794076">"ब्याट्री प्रबन्धकको प्रयोग गर्नुहोस्"</string>
- <string name="battery_auto_restriction_summary" msgid="1638072655581821837">"अनुप्रयोगहरूले ब्याट्रीको चार्ज घटाउँदा थाहा पाउनुहोस्"</string>
- <string name="battery_manager_on" msgid="5626982529932239656">"सक्रिय छ / अनुप्रयोगहरूले ब्याट्रीको चार्ज घटाउने समय पत्ता लगाउँदै"</string>
+ <string name="battery_auto_restriction_summary" msgid="1638072655581821837">"एपहरूले ब्याट्रीको चार्ज घटाउँदा थाहा पाउनुहोस्"</string>
+ <string name="battery_manager_on" msgid="5626982529932239656">"सक्रिय छ / एपहरूले ब्याट्रीको चार्ज घटाउने समय पत्ता लगाउँदै"</string>
<string name="battery_manager_off" msgid="9114027524232450371">"निष्क्रिय छ"</string>
<plurals name="battery_manager_app_restricted" formatted="false" msgid="6721813588142691216">
- <item quantity="other">%1$d अनुप्रयोगहरूमा प्रतिबन्ध लगाइयो</item>
+ <item quantity="other">%1$d एपहरूमा प्रतिबन्ध लगाइयो</item>
<item quantity="one">%1$d अनुप्रयोगमा प्रतिबन्ध लगाइयो</item>
</plurals>
<string name="battery_header_title_alternate" msgid="1161081105263761743">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" "<font size="20">"<xliff:g id="UNIT">%</xliff:g>"</font></small>""</string>
- <string name="dialog_stop_title" msgid="4354544579084434590">"अनुप्रयोगलाई रोक्ने हो?"</string>
- <string name="dialog_stop_message" product="default" msgid="1361660290824872555">"<xliff:g id="APP">%1$s</xliff:g> ले तपाईंको फोनलाई सक्रिय गरिरहने हुनाले तपाईंको यन्त्रले सामान्य रूपमा ब्याट्रीको व्यवस्थापन गर्न सक्दैन।\n\nयो समस्याको समाधान गर्ने प्रयास गर्न तपाईं उक्त अनुप्रयोगलाई रोक्न सक्नुहुन्छ।\n\nयो समस्या भइरहेमा ब्याट्रीको कार्यसम्पादनमा सुधार गर्न तपाईंले उक्त अनुप्रयोगको स्थापना रद्द गर्नु पर्ने हुन सक्छ।"</string>
- <string name="dialog_stop_message" product="tablet" msgid="8948358625588034303">"<xliff:g id="APP">%1$s</xliff:g> ले तपाईंको ट्याब्लेटलाई सक्रिय गरिरहने हुनाले तपाईंको यन्त्रले सामान्य रूपमा ब्याट्रीको व्यवस्थापन गर्न सक्दैन।\n\nयो समस्याको समाधान गर्ने प्रयास गर्न तपाईं उक्त अनुप्रयोगलाई रोक्न सक्नुहुन्छ।\n\nयो समस्या भइरहेमा ब्याट्रीको कार्यसम्पादनमा सुधार गर्न तपाईंले उक्त अनुप्रयोगको स्थापना रद्द गर्नु पर्ने हुन सक्छ।"</string>
- <string name="dialog_stop_message" product="device" msgid="3550459274584461359">"<xliff:g id="APP">%1$s</xliff:g> ले तपाईंको यन्त्रलाई सक्रिय गरिरहने हुनाले तपाईंको यन्त्रले सामान्य रूपमा ब्याट्रीको व्यवस्थापन गर्न सक्दैन।\n\nयो समस्याको समाधान गर्ने प्रयास गर्न तपाईं उक्त अनुप्रयोगलाई रोक्न सक्नुहुन्छ।\n\nयो समस्या भइरहेमा ब्याट्रीको कार्यसम्पादनमा सुधार गर्न तपाईंले उक्त अनुप्रयोगको स्थापना रद्द गर्नु पर्ने हुन सक्छ।"</string>
- <string name="dialog_stop_message_wakeup_alarm" product="default" msgid="5361295199859282104">"<xliff:g id="APP_0">%1$s</xliff:g>ले तपाईंको फोनलाई सक्रिय गरिरहने हुनाले तपाईंको फोनले सामान्य रूपमा ब्याट्रीको व्यवस्थापन गर्न सक्दैन।\n\nयो समस्या समाधान गर्ने प्रयास गर्न तपाईं <xliff:g id="APP_1">%1$s</xliff:g>लाई रोक्न सक्नुहुन्छ।\n\nयो समस्या भइरहेमा ब्याट्रीको कार्यसम्पादनमा सुधार गर्न तपाईंले उक्त अनुप्रयोगको स्थापना रद्द गर्नु पर्ने हुन सक्छ।"</string>
- <string name="dialog_stop_message_wakeup_alarm" product="tablet" msgid="3270887403788487776">"<xliff:g id="APP_0">%1$s</xliff:g>ले तपाईंको ट्याब्लेटलाई सक्रिय गरिरहने हुनाले तपाईंको ट्याब्लेटले सामान्य रूपमा ब्याट्रीको व्यवस्थापन गर्न सक्दैन।\n\nयो समस्या समाधान गर्ने प्रयास गर्न तपाईं <xliff:g id="APP_1">%1$s</xliff:g>लाई रोक्न सक्नुहुन्छ।\n\nयो समस्या भइरहेमा ब्याट्रीको कार्यसम्पादनमा सुधार गर्न तपाईंले उक्त अनुप्रयोगको स्थापना रद्द गर्नु पर्ने हुन सक्छ।"</string>
- <string name="dialog_stop_message_wakeup_alarm" product="device" msgid="6577512995315373362">"<xliff:g id="APP_0">%1$s</xliff:g>ले तपाईंको यन्त्रलाई सक्रिय गरिरहने हुनाले तपाईंको यन्त्रले सामान्य रूपमा ब्याट्रीको व्यवस्थापन गर्न सक्दैन।\n\nयो समस्या समाधान गर्ने प्रयास गर्न तपाईं <xliff:g id="APP_1">%1$s</xliff:g>लाई रोक्न सक्नुहुन्छ।\n\nयो समस्या भइरहेमा ब्याट्रीको कार्यसम्पादनमा सुधार गर्न तपाईंले उक्त अनुप्रयोगको स्थापना रद्द गर्नु पर्ने हुन सक्छ।"</string>
- <string name="dialog_stop_ok" msgid="5809052504018242928">"अनुप्रयोगलाई रोक्नुहोस्"</string>
- <string name="dialog_background_check_title" msgid="6289139150963983470">"पृष्ठभूमिको प्रयोग निष्क्रिय पार्ने र अनुप्रयोगलाई रोक्ने हो?"</string>
+ <string name="dialog_stop_title" msgid="4354544579084434590">"एपलाई रोक्ने हो?"</string>
+ <string name="dialog_stop_message" product="default" msgid="1361660290824872555">"<xliff:g id="APP">%1$s</xliff:g> ले तपाईंको फोनलाई सक्रिय गरिरहने हुनाले तपाईंको यन्त्रले सामान्य रूपमा ब्याट्रीको व्यवस्थापन गर्न सक्दैन।\n\nयो समस्याको समाधान गर्ने प्रयास गर्न तपाईं उक्त एपलाई रोक्न सक्नुहुन्छ।\n\nयो समस्या भइरहेमा ब्याट्रीको कार्यसम्पादनमा सुधार गर्न तपाईंले उक्त एपको स्थापना रद्द गर्नु पर्ने हुन सक्छ।"</string>
+ <string name="dialog_stop_message" product="tablet" msgid="8948358625588034303">"<xliff:g id="APP">%1$s</xliff:g> ले तपाईंको ट्याब्लेटलाई सक्रिय गरिरहने हुनाले तपाईंको यन्त्रले सामान्य रूपमा ब्याट्रीको व्यवस्थापन गर्न सक्दैन।\n\nयो समस्याको समाधान गर्ने प्रयास गर्न तपाईं उक्त एपलाई रोक्न सक्नुहुन्छ।\n\nयो समस्या भइरहेमा ब्याट्रीको कार्यसम्पादनमा सुधार गर्न तपाईंले उक्त एपको स्थापना रद्द गर्नु पर्ने हुन सक्छ।"</string>
+ <string name="dialog_stop_message" product="device" msgid="3550459274584461359">"<xliff:g id="APP">%1$s</xliff:g> ले तपाईंको यन्त्रलाई सक्रिय गरिरहने हुनाले तपाईंको यन्त्रले सामान्य रूपमा ब्याट्रीको व्यवस्थापन गर्न सक्दैन।\n\nयो समस्याको समाधान गर्ने प्रयास गर्न तपाईं उक्त एपलाई रोक्न सक्नुहुन्छ।\n\nयो समस्या भइरहेमा ब्याट्रीको कार्यसम्पादनमा सुधार गर्न तपाईंले उक्त एपको स्थापना रद्द गर्नु पर्ने हुन सक्छ।"</string>
+ <string name="dialog_stop_message_wakeup_alarm" product="default" msgid="5361295199859282104">"<xliff:g id="APP_0">%1$s</xliff:g>ले तपाईंको फोनलाई सक्रिय गरिरहने हुनाले तपाईंको फोनले सामान्य रूपमा ब्याट्रीको व्यवस्थापन गर्न सक्दैन।\n\nयो समस्या समाधान गर्ने प्रयास गर्न तपाईं <xliff:g id="APP_1">%1$s</xliff:g>लाई रोक्न सक्नुहुन्छ।\n\nयो समस्या भइरहेमा ब्याट्रीको कार्यसम्पादनमा सुधार गर्न तपाईंले उक्त एपको स्थापना रद्द गर्नु पर्ने हुन सक्छ।"</string>
+ <string name="dialog_stop_message_wakeup_alarm" product="tablet" msgid="3270887403788487776">"<xliff:g id="APP_0">%1$s</xliff:g>ले तपाईंको ट्याब्लेटलाई सक्रिय गरिरहने हुनाले तपाईंको ट्याब्लेटले सामान्य रूपमा ब्याट्रीको व्यवस्थापन गर्न सक्दैन।\n\nयो समस्या समाधान गर्ने प्रयास गर्न तपाईं <xliff:g id="APP_1">%1$s</xliff:g>लाई रोक्न सक्नुहुन्छ।\n\nयो समस्या भइरहेमा ब्याट्रीको कार्यसम्पादनमा सुधार गर्न तपाईंले उक्त एपको स्थापना रद्द गर्नु पर्ने हुन सक्छ।"</string>
+ <string name="dialog_stop_message_wakeup_alarm" product="device" msgid="6577512995315373362">"<xliff:g id="APP_0">%1$s</xliff:g>ले तपाईंको यन्त्रलाई सक्रिय गरिरहने हुनाले तपाईंको यन्त्रले सामान्य रूपमा ब्याट्रीको व्यवस्थापन गर्न सक्दैन।\n\nयो समस्या समाधान गर्ने प्रयास गर्न तपाईं <xliff:g id="APP_1">%1$s</xliff:g>लाई रोक्न सक्नुहुन्छ।\n\nयो समस्या भइरहेमा ब्याट्रीको कार्यसम्पादनमा सुधार गर्न तपाईंले उक्त एपको स्थापना रद्द गर्नु पर्ने हुन सक्छ।"</string>
+ <string name="dialog_stop_ok" msgid="5809052504018242928">"एपलाई रोक्नुहोस्"</string>
+ <string name="dialog_background_check_title" msgid="6289139150963983470">"पृष्ठभूमिको प्रयोग निष्क्रिय पार्ने र एपलाई रोक्ने हो?"</string>
<string name="dialog_background_check_message" product="default" msgid="944264053032952679">"<xliff:g id="APP_0">%1$s</xliff:g> ले तपाईंको फोनलाई सक्रिय गरिरहने हुनाले तपाईंको फोनले सामान्य रूपमा ब्याट्रीको व्यवस्थापन गर्न सक्दैन।\n\nयो समस्या समाधान गर्ने प्रयासस्वरूप तपाईं <xliff:g id="APP_1">%1$s</xliff:g> लाई रोक्न र यसलाई पृष्ठभूमिमा चल्नबाट रोक्न सक्नुहुन्छ।"</string>
<string name="dialog_background_check_message" product="tablet" msgid="5246650726585461386">"<xliff:g id="APP_0">%1$s</xliff:g> ले तपाईंको ट्याब्लेटलाई सक्रिय गरिरहने हुनाले तपाईंको ट्याब्लेटले सामान्य रूपमा ब्याट्रीको व्यवस्थापन गर्न सक्दैन।\n\nयो समस्या समाधान गर्ने प्रयासस्वरूप, तपाईं <xliff:g id="APP_1">%1$s</xliff:g> लाई रोक्न र यसलाई पृष्ठभूमिमा चल्नबाट रोक्न सक्नुहुन्छ।"</string>
<string name="dialog_background_check_message" product="device" msgid="2746413739802588979">"<xliff:g id="APP_0">%1$s</xliff:g> ले तपाईंको यन्त्रलाई सक्रिय गरिरहने हुनाले तपाईंको यन्त्रले सामान्य रूपमा ब्याट्रीको व्यवस्थापन गर्न सक्दैन।\n\nयो समस्या समाधान गर्ने प्रयासस्वरूप तपाईं <xliff:g id="APP_1">%1$s</xliff:g> लाई रोक्न र यसलाई पृष्ठभूमिमा चल्नबाट रोक्न सक्नुहुन्छ।"</string>
<string name="dialog_background_check_ok" msgid="6916102434734525591">"निष्क्रिय पार्नुहोस्"</string>
<string name="dialog_location_title" msgid="8070185060438751995">"स्थानसम्बन्धी जानकारीलाई निष्क्रिय पार्ने हो?"</string>
- <string name="dialog_location_message" product="default" msgid="2445581202508387558">"<xliff:g id="APP">%1$s</xliff:g> ले तपाईं उक्त अनुप्रयोग प्रयोग नगरिरहनुभएको बेलामा पनि स्थानसम्बन्धी जानकारी प्राप्त गर्न अनुरोध गरिरहने भएकोले तपाईंको फोनले सामान्य रूपमा ब्याट्रीको व्यवस्थापन गर्न सक्दैन।\n\nयो समस्याको समाधान गर्न तपाईं यस फोनको स्थानसम्बन्धी जानकारी नामक विकल्पलाई निष्क्रिय पार्न सक्नुहुन्छ।"</string>
- <string name="dialog_location_message" product="tablet" msgid="4012891295493865096">"<xliff:g id="APP">%1$s</xliff:g> ले तपाईं उक्त अनुप्रयोग प्रयोग नगरिरहनुभएको बेलामा पनि स्थानसम्बन्धी जानकारी प्राप्त गर्न अनुरोध गरिरहने भएकोले तपाईंको ट्याब्लेटले सामान्य रूपमा ब्याट्रीको व्यवस्थापन गर्न सक्दैन।\n\nयो समस्याको समाधान गर्न तपाईं यस ट्याब्लेटको स्थानसम्बन्धी जानकारी नामक विकल्पलाई निष्क्रिय पार्नसक्नुहुन्छ।"</string>
- <string name="dialog_location_message" product="device" msgid="1454451610289205965">"<xliff:g id="APP">%1$s</xliff:g> ले तपाईं उक्त अनुप्रयोग प्रयोग नगरिरहनुभएको बेलामा पनि स्थानसम्बन्धी जानकारी प्राप्त गर्न अनुरोध गरिरहने भएकोले तपाईंको यन्त्रले सामान्य रूपमा ब्याट्रीको व्यवस्थापन गर्न सक्दैन।\n\nयो समस्याको समाधान गर्न तपाईं यस यन्त्रको स्थानसम्बन्धी जानकारी नामक विकल्पलाई निष्क्रिय पार्न सक्नुहुन्छ।"</string>
+ <string name="dialog_location_message" product="default" msgid="2445581202508387558">"<xliff:g id="APP">%1$s</xliff:g> ले तपाईं उक्त एप प्रयोग नगरिरहनुभएको बेलामा पनि स्थानसम्बन्धी जानकारी प्राप्त गर्न अनुरोध गरिरहने भएकोले तपाईंको फोनले सामान्य रूपमा ब्याट्रीको व्यवस्थापन गर्न सक्दैन।\n\nयो समस्याको समाधान गर्न तपाईं यस फोनको स्थानसम्बन्धी जानकारी नामक विकल्पलाई निष्क्रिय पार्न सक्नुहुन्छ।"</string>
+ <string name="dialog_location_message" product="tablet" msgid="4012891295493865096">"<xliff:g id="APP">%1$s</xliff:g> ले तपाईं उक्त एप प्रयोग नगरिरहनुभएको बेलामा पनि स्थानसम्बन्धी जानकारी प्राप्त गर्न अनुरोध गरिरहने भएकोले तपाईंको ट्याब्लेटले सामान्य रूपमा ब्याट्रीको व्यवस्थापन गर्न सक्दैन।\n\nयो समस्याको समाधान गर्न तपाईं यस ट्याब्लेटको स्थानसम्बन्धी जानकारी नामक विकल्पलाई निष्क्रिय पार्नसक्नुहुन्छ।"</string>
+ <string name="dialog_location_message" product="device" msgid="1454451610289205965">"<xliff:g id="APP">%1$s</xliff:g> ले तपाईं उक्त एप प्रयोग नगरिरहनुभएको बेलामा पनि स्थानसम्बन्धी जानकारी प्राप्त गर्न अनुरोध गरिरहने भएकोले तपाईंको यन्त्रले सामान्य रूपमा ब्याट्रीको व्यवस्थापन गर्न सक्दैन।\n\nयो समस्याको समाधान गर्न तपाईं यस यन्त्रको स्थानसम्बन्धी जानकारी नामक विकल्पलाई निष्क्रिय पार्न सक्नुहुन्छ।"</string>
<string name="dialog_location_ok" msgid="1893773880878134342">"निष्क्रिय पार्नुहोस्"</string>
<string name="power_screen" msgid="8581228752332223154">"स्क्रिन"</string>
<string name="power_flashlight" msgid="6939780588882301575">"फ्ल्यासलाइट"</string>
@@ -2391,8 +2393,8 @@
<string name="usage_type_computed_power" msgid="2594890316149868151">"शक्ति प्रयोगको हिसाब गरियो"</string>
<string name="usage_type_actual_power" msgid="8067253427718526111">"शक्ति प्रयोग अवलोकन गरियो"</string>
<string name="battery_action_stop" msgid="1866624019460630143">"जबरजस्ती रोक्नुहोस्"</string>
- <string name="battery_action_app_details" msgid="1077011181969550402">"अनुप्रयोगको जानकारी"</string>
- <string name="battery_action_app_settings" msgid="587998773852488539">"अनुप्रयोग सेटिङहरू"</string>
+ <string name="battery_action_app_details" msgid="1077011181969550402">"एपको जानकारी"</string>
+ <string name="battery_action_app_settings" msgid="587998773852488539">"एप सेटिङहरू"</string>
<string name="battery_action_display" msgid="4887913003634317465">"स्क्रिन सेटिङहरू"</string>
<string name="battery_action_wifi" msgid="7123520587925323824">"Wi-Fi सेटिङहरू"</string>
<string name="battery_action_bluetooth" msgid="718594420017519807">"ब्लुटुथ सेटिङहरू"</string>
@@ -2411,7 +2413,7 @@
<string name="battery_sugg_bluetooth_basic" msgid="6353294067057749310">"तपाईँले प्रयोग नगर्दा ब्लुटुथ बन्द गर्नुहोस्"</string>
<string name="battery_sugg_bluetooth_headset" msgid="2421931037149315202">"एउटा फरक ब्लुटुथ उपकरणसँग जोड्ने प्रयास गर्नुहोस्"</string>
<string name="battery_desc_apps" msgid="6826726880149226823">"अनुप्रयोगद्वारा प्रयोग गरिएको ब्याट्री"</string>
- <string name="battery_sugg_apps_info" msgid="9175761965559743977">"अनुप्रयोग बन्द गर्नुहोस् वा स्थापना रद्द गर्नुहोस्"</string>
+ <string name="battery_sugg_apps_info" msgid="9175761965559743977">"एप बन्द गर्नुहोस् वा स्थापना रद्द गर्नुहोस्"</string>
<string name="battery_sugg_apps_gps" msgid="489694612870772770">"ब्याट्री बचत मोड चयन गर्नुहोस्"</string>
<string name="battery_sugg_apps_settings" msgid="20465932930350295">"अनुप्रयोगले ब्याट्रिको प्रयोग कम गर्नाका लागि सेटिङहरू प्रस्ताव गर्न सक्छ"</string>
<string name="battery_desc_users" msgid="3736510265433457165">"प्रयोगकर्ताद्वारा प्रयोग गरिको ब्याट्री"</string>
@@ -2443,28 +2445,28 @@
<string name="menu_stats_refresh" msgid="9017362786647223203">"पुनःताजा गर्नुहोस्"</string>
<string name="process_kernel_label" msgid="4175060316414593760">"एन्ड्रोइड OS"</string>
<string name="process_mediaserver_label" msgid="8591722404282619153">"मिडिया सर्भर"</string>
- <string name="process_dex2oat_label" msgid="8249082119748556085">"अनुप्रयोग आफू अनुकूल"</string>
+ <string name="process_dex2oat_label" msgid="8249082119748556085">"एप आफू अनुकूल"</string>
<string name="battery_saver" msgid="3989710213758938398">"ब्याट्री सेभर"</string>
<string name="battery_saver_auto_title" msgid="4158659069641849952">"स्वतः सक्रिय गर्नुहोस्"</string>
<string name="battery_saver_auto_no_schedule" msgid="739814529432092706">"कुनै पनि समयतालिका छैन"</string>
- <string name="battery_saver_auto_routine" msgid="886514412067906980">"तपाईंको दिनचर्यामा आधारित"</string>
+ <string name="battery_saver_auto_routine" msgid="886514412067906980">"तपाईंको दिनचर्याको आधारमा"</string>
<string name="battery_saver_auto_percentage" msgid="5791982309331921556">"प्रतिशतमा आधारित"</string>
<string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"तपाईंले सामान्यतया ब्याट्री चार्ज गर्ने आगामी समयअगावै ब्याट्री सकिने सम्भावना भएमा ब्याट्री सेभर सुविधा सक्रिय हुन्छ"</string>
<string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"<xliff:g id="PERCENT">%1$s</xliff:g> हुँदा सक्रिय हुने छ"</string>
<string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"समयतालिका सेट गर्नुहोस्"</string>
<string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"चार्ज पूरा भएपछि निष्क्रिय पार्नुहोस्"</string>
- <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"तपाईंको फोन <xliff:g id="PERCENT">%1$s</xliff:g> भएपछि ब्याट्री सेभर निष्क्रिय हुन्छ"</string>
- <string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"तपाईंको ट्याब्लेटको चार्ज <xliff:g id="PERCENT">%1$s</xliff:g> भएपछि ब्याट्री सेभर निष्क्रिय हुन्छ"</string>
- <string name="battery_saver_sticky_description_new" product="device" msgid="5056520668081504111">"तपाईंको यन्त्र <xliff:g id="PERCENT">%1$s</xliff:g> भएपछि ब्याट्री सेभर निष्क्रिय हुन्छ"</string>
+ <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"तपाईंको फोन <xliff:g id="PERCENT">%1$s</xliff:g> भएपछि ब्याट्री सेभर अफ हुन्छ"</string>
+ <string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"तपाईंको ट्याब्लेटको चार्ज <xliff:g id="PERCENT">%1$s</xliff:g> भएपछि ब्याट्री सेभर अफ हुन्छ"</string>
+ <string name="battery_saver_sticky_description_new" product="device" msgid="5056520668081504111">"तपाईंको यन्त्र <xliff:g id="PERCENT">%1$s</xliff:g> भएपछि ब्याट्री सेभर अफ हुन्छ"</string>
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"सक्रिय गर्नुहोस्"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"ब्याट्री सेभर प्रयोग गर्नुहोस्"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"ब्याट्री सेभर प्रयोग गर्नुहोस्"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"स्वतः खोल्नुहोस्"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"कहिले पनि होइन"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"<xliff:g id="PERCENT">%1$s</xliff:g> ब्याट्री हुँदा"</string>
<string name="battery_percentage" msgid="7782252476471033843">"ब्याट्रीको प्रतिशत"</string>
- <string name="battery_percentage_description" msgid="9219875229166700610">"वस्तुस्थिति पट्टीमा ब्याट्रीको प्रतिशत देखाउनुहोस्"</string>
+ <string name="battery_percentage_description" msgid="9219875229166700610">"स्टाटस बारमा ब्याट्रीको प्रतिशत देखाउनुहोस्"</string>
<string name="process_stats_summary_title" msgid="9189588417488537954">"प्रक्रिया तथ्याङ्क"</string>
<string name="process_stats_summary" msgid="8077998499161221885">"चालु रहने प्रक्रियाहरूको बारेको geeky तथ्याङ्क"</string>
<string name="app_memory_use" msgid="5126237308545653706">"मेमोरी प्रयोग"</string>
@@ -2515,9 +2517,9 @@
<string name="tts_spoken_language" msgid="8057256621711361944">"बोलीचालीको भाषा"</string>
<string name="tts_install_voices_title" msgid="363811937643579286">"आवाजहरू स्थापना गर्नुहोस्"</string>
<string name="tts_install_voices_text" msgid="7464832428439739995">"आवाजहरू स्थापना गर्न <xliff:g id="TTS_APP_NAME">%s</xliff:g> अनुप्रयोगतर्फ अघि बढिरहनुहोस्"</string>
- <string name="tts_install_voices_open" msgid="686776451008134790">"अनुप्रयोग खोल्नुहोस्"</string>
+ <string name="tts_install_voices_open" msgid="686776451008134790">"एप खोल्नुहोस्"</string>
<string name="tts_install_voices_cancel" msgid="1622512922523479646">"रद्द गर्नुहोस्"</string>
- <string name="tts_reset" msgid="8864073594540705579">"पुनःसेट गर्नुहोस्"</string>
+ <string name="tts_reset" msgid="8864073594540705579">"रिसेट गर्नुहोस्"</string>
<string name="tts_play" msgid="9023430029380675514">"प्ले गर्नुहोस्"</string>
<string name="vpn_settings_title" msgid="7008219502396889192">"VPN"</string>
<string name="credentials_title" msgid="7119207354982673965">"प्रमाण संग्रहण"</string>
@@ -2541,7 +2543,7 @@
<string name="credentials_reset_hint" msgid="3484350477764088169">"सम्पूर्ण सामग्री हटाउने हो?"</string>
<string name="credentials_erased" msgid="7287088033523869085">"प्रमाण संग्रहण मेटियो।"</string>
<string name="credentials_not_erased" msgid="9137227570738627637">"प्रामाणिक डेटा भण्डारण मेटाउन सकिएन।"</string>
- <string name="usage_access_title" msgid="7981321142726540574">"उपयोग पहुँचसहितका अनुप्रयोग"</string>
+ <string name="usage_access_title" msgid="7981321142726540574">"उपयोग पहुँचसहितका एप"</string>
<string name="emergency_tone_title" msgid="130211364025984428">"इमर्जेन्सी डाइलिङसम्बन्धी सङ्केत"</string>
<string name="emergency_tone_summary" msgid="8035940153401622240">"आपातकालीन कल राखिएको बेलाको व्यवहार सेट गर्नुहोस्"</string>
<string name="privacy_settings_title" msgid="3573891462732375772">"ब्याकअप"</string>
@@ -2550,37 +2552,37 @@
<string name="backup_section_title" msgid="8177209731777904656">"ब्याकअप र पुनःस्थापना गर्नुहोस्"</string>
<string name="personal_data_section_title" msgid="9161854418510071558">"व्यक्तिगत डेटा"</string>
<string name="backup_data_title" msgid="4461508563849583624">"मेरो डेटा ब्याकअप गर्नुहोस्।"</string>
- <string name="backup_data_summary" msgid="555459891017933746">"अनुप्रयोग डेटा, Wi-Fi पासवर्डहरू र Google सर्भरहरूका अन्य सेटिङहरूको ब्याकअप गर्नुहोस्"</string>
+ <string name="backup_data_summary" msgid="555459891017933746">"एप डेटा, Wi-Fi पासवर्डहरू र Google सर्भरहरूका अन्य सेटिङहरूको ब्याकअप गर्नुहोस्"</string>
<string name="backup_configure_account_title" msgid="1534734650559070294">"ब्याकअप खाता"</string>
<string name="backup_data_management_title" msgid="6299288795610243508">"ब्याकअप खाता व्यवस्थित गर्नुहोस्"</string>
- <string name="include_app_data_title" msgid="6117211611131913293">"अनुप्रयोग डेटा समावेश"</string>
+ <string name="include_app_data_title" msgid="6117211611131913293">"एप डेटा समावेश"</string>
<string name="auto_restore_title" msgid="8367486774010915221">"स्वतः पुनःप्राप्त"</string>
- <string name="auto_restore_summary" msgid="1941047568966428377">"जब अनुप्रयोग पुनर्स्थापित गर्दा ब्याक अप गरिएका सेटिङहरू र डेटा पुनःप्राप्त गर्नुहोस्"</string>
+ <string name="auto_restore_summary" msgid="1941047568966428377">"जब एप पुनर्स्थापित गर्दा ब्याक अप गरिएका सेटिङहरू र डेटा पुनःप्राप्त गर्नुहोस्"</string>
<string name="backup_inactive_title" msgid="5513496915638307750">"ब्याकअप सेवा सक्रिय छैन"</string>
<string name="backup_configure_account_default_summary" msgid="5718298066335006412">"कुनै पनि खाताले ब्याकअप गरिएका डेटा हाल भण्डारण गरिरहेको छैन"</string>
<string name="backup_erase_dialog_title" msgid="8178424339104463014"></string>
- <string name="backup_erase_dialog_message" msgid="8767843355330070902">"तपाईँको Wi-Fi पासवर्डहरू, बुकमार्क, अन्य सेटिङहरू, र अनुप्रयोग डेटाको जगेडा राख्न बन्द गर्ने र Google सर्भरबाट सम्पूर्ण प्रतिलिपिहरू मेटाउने हो?"</string>
- <string name="fullbackup_erase_dialog_message" msgid="2588536036471144070">"के यन्त्र डेटा (जस्तै Wi-Fi पासवर्डहरू र इतिहास कल) र अनुप्रयोग डेटा (जस्तै अनुप्रयोगहरू द्वारा भण्डारण सेटिङहरू र फाइलहरू) को ब्याकअपलाई रोक्ने, र थप रिमोट सर्भरहरूमा सबै प्रतिलिपिहरू मेटाउन चाहनु हुन्छ?"</string>
- <string name="fullbackup_data_summary" msgid="406274198094268556">"यन्त्र डेटा (जस्तै Wi-Fi पासवर्डहरू र कल इतिहास) र अनुप्रयोग डेटा (जस्तै अनुप्रयोगहरूद्वारा भण्डारित सेटिङहरू र फाइलहरू) टाढाबाट स्वचालित रुपमा ब्याकअप गर्नुहोस्। \n\nजब तपाईं स्वचालित ब्याकअप यन्त्र सक्षम गर्नुहुन्छ, यन्त्र र अनुप्रयोग डेटा आवधिक रूपमा टाढाबाट सुरक्षित गरिएको छ। सम्पर्क, सन्देशहरू, र तस्बिरहरू जस्तै सम्भावित संवेदनशील डेटा सहित, अनुप्रयोग डेटा कुनै पनि डेटा हुनसक्छ जुन अनुप्रयोगले (विकासकर्ता सेटिङहरूमा आधारित) सुरक्षित गरेको छ।"</string>
+ <string name="backup_erase_dialog_message" msgid="8767843355330070902">"तपाईँको Wi-Fi पासवर्डहरू, बुकमार्क, अन्य सेटिङहरू, र एप डेटाको जगेडा राख्न बन्द गर्ने र Google सर्भरबाट सम्पूर्ण प्रतिलिपिहरू मेटाउने हो?"</string>
+ <string name="fullbackup_erase_dialog_message" msgid="2588536036471144070">"के यन्त्र डेटा (जस्तै Wi-Fi पासवर्डहरू र इतिहास कल) र एप डेटा (जस्तै एपहरू द्वारा भण्डारण सेटिङहरू र फाइलहरू) को ब्याकअपलाई रोक्ने, र थप रिमोट सर्भरहरूमा सबै प्रतिलिपिहरू मेटाउन चाहनु हुन्छ?"</string>
+ <string name="fullbackup_data_summary" msgid="406274198094268556">"यन्त्र डेटा (जस्तै Wi-Fi पासवर्डहरू र कल इतिहास) र एप डेटा (जस्तै एपहरूद्वारा भण्डारित सेटिङहरू र फाइलहरू) टाढाबाट स्वचालित रुपमा ब्याकअप गर्नुहोस्। \n\nजब तपाईं स्वचालित ब्याकअप यन्त्र सक्षम गर्नुहुन्छ, यन्त्र र एप डेटा आवधिक रूपमा टाढाबाट सुरक्षित गरिएको छ। सम्पर्क, सन्देशहरू, र फोटोहरू जस्तै सम्भावित संवेदनशील डेटा सहित, एप डेटा कुनै पनि डेटा हुनसक्छ जुन एपले (विकासकर्ता सेटिङहरूमा आधारित) सुरक्षित गरेको छ।"</string>
<string name="device_admin_settings_title" msgid="2074319456047334589">"यन्त्रका प्रशासक सम्बन्धी सेटिङहरू"</string>
- <string name="active_device_admin_msg" msgid="6929247869516924549">"यन्त्रको प्रशासन सम्बन्धी अनुप्रयोग"</string>
- <string name="remove_device_admin" msgid="4413438593788336400">"यो यन्त्रको प्रशासकीय अनुप्रयोगलाई निष्क्रिय पार्नुहोस्"</string>
- <string name="uninstall_device_admin" msgid="9017499299961719830">"अनुप्रयोगको स्थापना रद्द गर्नुहोस्"</string>
+ <string name="active_device_admin_msg" msgid="6929247869516924549">"यन्त्रको प्रशासन सम्बन्धी एप"</string>
+ <string name="remove_device_admin" msgid="4413438593788336400">"यो यन्त्रको प्रशासकीय एपलाई निष्क्रिय पार्नुहोस्"</string>
+ <string name="uninstall_device_admin" msgid="9017499299961719830">"एपको स्थापना रद्द गर्नुहोस्"</string>
<string name="remove_and_uninstall_device_admin" msgid="5607703579731496253">"निष्क्रिय पार्नुहोस् तथा स्थापना रद्द गर्नुहोस्"</string>
- <string name="select_device_admin_msg" msgid="4173769638399075387">"यन्त्रका प्रशासकीय अनुप्रयोगहरू"</string>
- <string name="no_device_admins" msgid="4129231900385977460">"यन्त्रका प्रशासकीय अनुप्रयोगहरू उपलब्ध छैनन्"</string>
+ <string name="select_device_admin_msg" msgid="4173769638399075387">"यन्त्रका प्रशासकीय एपहरू"</string>
+ <string name="no_device_admins" msgid="4129231900385977460">"यन्त्रका प्रशासकीय एपहरू उपलब्ध छैनन्"</string>
<string name="personal_device_admin_title" msgid="759440849188565661">"व्यक्तिगत"</string>
<string name="managed_device_admin_title" msgid="8021522755492551726">"काम"</string>
<string name="sms_access_restriction_enabled" msgid="3006320256764718303">"Restrict SMS तथा कलका लगहरूमाथिका पहुँचमा प्रतिबन्ध लगाउनुहोस्"</string>
<string name="sms_access_restriction_enabled_summary" msgid="9011946580977780063">"पूर्वनिर्धारित फोन र सन्देश अनुप्रयोगहरूसँग मात्र SMS र कल लग अनुमति हुन्छ"</string>
<string name="no_trust_agents" msgid="5757792915019113084">"विश्वस्त प्रतिनिधि उपलब्ध छैन"</string>
- <string name="add_device_admin_msg" msgid="3573765823476931173">"यन्त्रको प्रशासन सम्बन्धी अनुप्रयोगलाई सक्रिय गर्ने हो?"</string>
- <string name="add_device_admin" msgid="1621152410207260584">"यन्त्रको प्रशासन सम्बन्धी यो अनुप्रयोगलाई सक्रिय गर्नुहोस्"</string>
+ <string name="add_device_admin_msg" msgid="3573765823476931173">"यन्त्रको प्रशासन सम्बन्धी एपलाई सक्रिय गर्ने हो?"</string>
+ <string name="add_device_admin" msgid="1621152410207260584">"यन्त्रको प्रशासन सम्बन्धी यो एपलाई सक्रिय गर्नुहोस्"</string>
<string name="device_admin_add_title" msgid="6097881332139146897">"यन्त्रको प्रशासक"</string>
- <string name="device_admin_warning" msgid="4421817419326480449">"यस प्रशासक अनुप्रयोगलाई सक्रिय गर्नुले अनुप्रयोग <xliff:g id="APP_NAME">%1$s</xliff:g> लाई निम्न कार्यहरू गर्न दिनेछ:"</string>
- <string name="device_admin_status" msgid="5424944611789040723">"यो प्रशासक सक्रिय छ र अनुप्रयोग <xliff:g id="APP_NAME">%1$s</xliff:g> लाई निम्न कार्यहरू गर्न दिन्छ:"</string>
+ <string name="device_admin_warning" msgid="4421817419326480449">"यस प्रशासक एपलाई सक्रिय गर्नुले एप <xliff:g id="APP_NAME">%1$s</xliff:g> लाई निम्न कार्यहरू गर्न दिनेछ:"</string>
+ <string name="device_admin_status" msgid="5424944611789040723">"यो प्रशासक सक्रिय छ र एप <xliff:g id="APP_NAME">%1$s</xliff:g> लाई निम्न कार्यहरू गर्न दिन्छ:"</string>
<string name="profile_owner_add_title" msgid="735805919754362791">"प्रोफाइल प्रबन्धक सक्रिय गर्नुहुन्छ?"</string>
- <string name="adding_profile_owner_warning" msgid="1284541194547382194">"अगाडि बढेर, तपाईंको प्रयोगकर्तालाई तपाईंको प्रशासकले व्यवस्थित गर्ने छ, जसले तपाईंको व्यक्तिगत डेटाका साथै सम्बन्धित डेटा समेत भण्डारण गर्न सक्छ।\n\nतपाईंको प्रशासकसँग यो प्रयोगकर्तासँग सम्बन्धित सेटिङ, पहुँच, अनुप्रयोग, र डेटाका साथै नेटवर्क गतिविधि र तपाईंको यन्त्रका स्थानसम्बन्धी जानकारीहरूको अनुगमन र व्यवस्थापन गर्ने क्षमता छ।"</string>
+ <string name="adding_profile_owner_warning" msgid="1284541194547382194">"अगाडि बढेर, तपाईंको प्रयोगकर्तालाई तपाईंको प्रशासकले व्यवस्थित गर्ने छ, जसले तपाईंको व्यक्तिगत डेटाका साथै सम्बन्धित डेटा समेत भण्डारण गर्न सक्छ।\n\nतपाईंको प्रशासकसँग यो प्रयोगकर्तासँग सम्बन्धित सेटिङ, पहुँच, एप, र डेटाका साथै नेटवर्क गतिविधि र तपाईंको यन्त्रका स्थानसम्बन्धी जानकारीहरूको अनुगमन र व्यवस्थापन गर्ने क्षमता छ।"</string>
<string name="admin_disabled_other_options" msgid="8097063307730025707">"अन्य विकल्पहरूलाई तपाईंको प्रशासकले असक्षम पार्नुभएको छ"</string>
<string name="admin_more_details" msgid="1719819589822345585">"थप विवरणहरू"</string>
<string name="notification_log_title" msgid="4200467765474474753">"अधिसूचना लग"</string>
@@ -2598,13 +2600,13 @@
<string name="managed_profile_not_available_label" msgid="8784246681719821917">"कार्य प्रोफाइल अझै उपलब्ध भएको छैन"</string>
<string name="work_mode_label" msgid="6845849194740195757">"कार्य प्रोफाइल"</string>
<string name="work_mode_on_summary" msgid="1682781113156323592">"तपाईंको सङ्गठनले व्यवस्थापन गरेको"</string>
- <string name="work_mode_off_summary" msgid="1688885392211178315">"अनुप्रयोग तथा सूचनाहरू निष्क्रिय छन्"</string>
- <string name="remove_managed_profile_label" msgid="4625542553784793536">"कार्य प्रोफाइल हटाउनुहोस्"</string>
+ <string name="work_mode_off_summary" msgid="1688885392211178315">"एप तथा सूचनाहरू निष्क्रिय छन्"</string>
+ <string name="remove_managed_profile_label" msgid="4625542553784793536">"कार्यालयसम्बन्धी प्रोफाइल हटाउनुहोस्"</string>
<string name="background_data" msgid="8275750862371471171">"पृष्ठभूमि डेटा"</string>
- <string name="background_data_summary" msgid="799640633948841990">"अनुप्रयोगहरूले कुनै पनि समयमा डेटा सिंक गर्न पठाउन र प्राप्त गर्न सक्दछन्"</string>
+ <string name="background_data_summary" msgid="799640633948841990">"एपहरूले कुनै पनि समयमा डेटा सिंक गर्न पठाउन र प्राप्त गर्न सक्दछन्"</string>
<string name="background_data_dialog_title" msgid="8306650658158895976">"पृष्ठभूमि डेटा असक्षम पार्ने हो?"</string>
- <string name="background_data_dialog_message" msgid="8126774244911656527">"पृष्ठभूमि डेटा असक्षम पार्नाले ब्याट्रिको जीवनकाल बढाउदछ र डेटाको प्रयोग घटाउदछ, केही अनुप्रयोगहरूले अझैं पनि पृष्ठभूमि डेटा जडान प्रयोग गर्न सक्छ।"</string>
- <string name="sync_automatically" msgid="5746117156896468099">"अटो-सिंक अनुप्रयोग डेटा"</string>
+ <string name="background_data_dialog_message" msgid="8126774244911656527">"पृष्ठभूमि डेटा असक्षम पार्नाले ब्याट्रिको जीवनकाल बढाउदछ र डेटाको प्रयोग घटाउदछ, केही एपहरूले अझैं पनि पृष्ठभूमि डेटा जडान प्रयोग गर्न सक्छ।"</string>
+ <string name="sync_automatically" msgid="5746117156896468099">"अटो-सिंक एप डेटा"</string>
<string name="sync_enabled" msgid="535172627223336983">"सिंक खुला छ"</string>
<string name="sync_disabled" msgid="713721807204805062">"सिंक बन्द छ"</string>
<string name="sync_error" msgid="988155155932442765">"सिंक त्रुटि"</string>
@@ -2620,7 +2622,7 @@
<string name="sync_calendar" msgid="6573708019827519372">"पात्रो"</string>
<string name="sync_contacts" msgid="5687434785723746534">"सम्पर्कहरू"</string>
<string name="sync_plug" msgid="6703804441408427257"><font fgcolor="#ffffffff">"Google सिंकमा स्वागत छ!"</font>\n" तपाईंका सम्पर्कहरू, भेट्ने समयहरू, र तपाईं जहाँ भए पनि अरू बढी पहुँच दिनको लागि डेटा सिंक गर्न अनुमतिका लागि एउटा Google दृष्टिकोण।"</string>
- <string name="header_application_sync_settings" msgid="4581847153669774489">"अनुप्रयोग सिंक सेटिङहरू"</string>
+ <string name="header_application_sync_settings" msgid="4581847153669774489">"एप सिंक सेटिङहरू"</string>
<string name="header_data_and_synchronization" msgid="400831816068697286">"डेटा र सिङ्क्रोनाइजेसन"</string>
<string name="preference_change_password_title" msgid="7243527448378789274">"पासवर्ड बदल्नुहोस्"</string>
<string name="header_account_settings" msgid="8586173964125512219">"खाता सेटिङहरू"</string>
@@ -2636,7 +2638,7 @@
<string name="enter_password" msgid="2963496904625715235">"Android सुरु गर्न, आफ्नो पासवर्ड प्रविष्टि गर्नुहोस्"</string>
<string name="enter_pin" msgid="7140938268709546890">"Android सुरु गर्न, आफ्नो पिन प्रविष्टि गर्नुहोस्"</string>
<string name="enter_pattern" msgid="1653841963422825336">"Android सुरु गर्न, आफ्नो ढाँचा कोर्नुहोस्"</string>
- <string name="cryptkeeper_wrong_pattern" msgid="4580105105385125467">"गलत ढाँचा"</string>
+ <string name="cryptkeeper_wrong_pattern" msgid="4580105105385125467">"प्याटर्न मिलेन"</string>
<string name="cryptkeeper_wrong_password" msgid="1709534330303983166">"गलत पासवर्ड"</string>
<string name="cryptkeeper_wrong_pin" msgid="857757190077859245">"गलत PIN"</string>
<string name="checking_decryption" msgid="5927759912073053101">"जाँच गर्दै..."</string>
@@ -2649,12 +2651,12 @@
<string name="data_usage_summary_title" msgid="7288431048564861043">"डेटाको प्रयोग"</string>
<string name="data_usage_app_summary_title" msgid="8277327968906074983">"मोबाइल डेटा तथा Wi‑Fi"</string>
<string name="data_usage_accounting" msgid="4681642832010140640">"वाहक डेटा लेखा तपाईँको उपकरणबाट फरक हुन सक्छ।"</string>
- <string name="data_usage_app" msgid="4995297799363021198">"अनुप्रयोग उपयोग"</string>
+ <string name="data_usage_app" msgid="4995297799363021198">"एप उपयोग"</string>
<string name="data_usage_app_info_label" msgid="5358288895158910477">"APP INFO"</string>
<string name="data_usage_cellular_data" msgid="3509117353455285808">"मोबाइल डेटा"</string>
<string name="data_usage_data_limit" msgid="4070740691087063670">"डेटा सीमा सेट गर्नुहोस्"</string>
<string name="data_usage_cycle" msgid="1877235461828192940">"डेटाको प्रयोग चक्र"</string>
- <string name="data_usage_app_items_header_text" msgid="5396134508509913851">"अनुप्रयोग उपयोग"</string>
+ <string name="data_usage_app_items_header_text" msgid="5396134508509913851">"एप उपयोग"</string>
<string name="data_usage_menu_roaming" msgid="6933555994416977198">"डेटा रोमिङ"</string>
<string name="data_usage_menu_restrict_background" msgid="3539289148113800518">"पृष्ठभूमि डेटा प्रतिबन्धि गर्नुहोस्"</string>
<string name="data_usage_menu_allow_background" msgid="2874898501715368528">"पृष्ठभूमि डेटालाई अनुमति"</string>
@@ -2668,10 +2670,10 @@
<string name="data_usage_menu_sim_cards" msgid="8508154611676507088">"SIM कार्डहरू"</string>
<string name="data_usage_cellular_data_summary" msgid="9162777397135709280">"सीमामा रोकिएको"</string>
<string name="account_settings_menu_auto_sync" msgid="2673669556006027506">"डेटा स्वत: सिंक गर्नुहोस्"</string>
- <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"व्यक्तिगत डेटा स्वचालित सिंक"</string>
- <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"कार्य डेटा स्वचालित सिंक"</string>
+ <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"व्यक्तिगत डेटा स्वतः सिंक गरियोस् सिंक"</string>
+ <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"कार्यालयको डेटाको अटोसिंक सिंक"</string>
<string name="data_usage_change_cycle" msgid="447761920472170031">"साइकल परिवर्तन गर्नुहोस्..."</string>
- <string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"महिनाको दिनमा डेटाको प्रयोग चक्र पुनःसेट गर्ने:"</string>
+ <string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"महिनाको दिनमा डेटाको प्रयोग चक्र रिसेट गर्ने:"</string>
<string name="data_usage_empty" msgid="7981405723435034032">"यस समयमा कुनै अनुप्रयोगले डेटाको प्रयोग गरेन।"</string>
<string name="data_usage_label_foreground" msgid="2471091128648754601">"अग्रभूमि"</string>
<string name="data_usage_label_background" msgid="1618794447370396845">"पृष्ठभूमि"</string>
@@ -2694,19 +2696,19 @@
<string name="data_roaming_enable_mobile" msgid="5886394350890765947">"रोमिङ"</string>
<string name="data_usage_forground_label" msgid="8992577451178005406">"अग्रभूमि:"</string>
<string name="data_usage_background_label" msgid="8460891123904985128">"पृष्ठभूमि:"</string>
- <string name="data_usage_app_settings" msgid="3276444867375694809">"अनुप्रयोग सेटिङहरू"</string>
+ <string name="data_usage_app_settings" msgid="3276444867375694809">"एप सेटिङहरू"</string>
<string name="data_usage_app_restrict_background" msgid="649167881583859169">"पृष्ठभूमि डेटा"</string>
<string name="data_usage_app_restrict_background_summary" msgid="2703967920234671881">"पृष्ठभूमिमा मोबाइल डेटाको उपयोग सक्षम गर्नुहोस्"</string>
- <string name="data_usage_app_restrict_background_summary_disabled" msgid="7211921499365814638">"यस अनुप्रयोगलाई पृष्ठभूमि डेटामा सीमित गराउन पहिले मोबाइल डेटा सीमा सेट गर्नुहोस्।"</string>
+ <string name="data_usage_app_restrict_background_summary_disabled" msgid="7211921499365814638">"यस एपलाई पृष्ठभूमि डेटामा सीमित गराउन पहिले मोबाइल डेटा सीमा सेट गर्नुहोस्।"</string>
<string name="data_usage_app_restrict_dialog_title" msgid="750037964591673167">"पृष्ठभूमि डेटा प्रतिबन्ध गर्ने हो?"</string>
- <string name="data_usage_app_restrict_dialog" msgid="4022530391896478031">"यस फिचरले पृष्ठभूमि डेटामा निर्भर अनुप्रयोगलाई मोबाइल सञ्जाल उपलब्ध हुने समयमा मात्र काम नगर्ने बनाउन सक्छ। \n \n यस अनुप्रयोग भित्रको सेटिङमा तपाईँले थप उपयुक्त डेटाको प्रयोग नियन्त्रणहरू भेट्टाउन सक्नुहुन्छ।"</string>
+ <string name="data_usage_app_restrict_dialog" msgid="4022530391896478031">"यस फिचरले पृष्ठभूमि डेटामा निर्भर एपलाई मोबाइल सञ्जाल उपलब्ध हुने समयमा मात्र काम नगर्ने बनाउन सक्छ। \n \n यस एप भित्रको सेटिङमा तपाईँले थप उपयुक्त डेटाको प्रयोग नियन्त्रणहरू भेट्टाउन सक्नुहुन्छ।"</string>
<string name="data_usage_restrict_denied_dialog" msgid="18928292832775805">"तपाईंले मोबाइल डेटाको सीमा सेट गर्नुभएको बेलामा मात्र पृष्ठभूमिको डेटालाई सीमित गर्न सम्भव हुन्छ।"</string>
<string name="data_usage_auto_sync_on_dialog_title" msgid="2342323408229702005">"डेटा स्वचालित सिंक खोल्ने हो?"</string>
<string name="data_usage_auto_sync_on_dialog" product="tablet" msgid="4935430284683238901">"तपाईंले वेबमा आफ्नो खातामा गर्न हुने कुनै पनि परिवर्तनहरू स्वचालित रूपमा तपाईँको ट्याब्लेटमा प्रतिलिपि गरिने छ।\n\nकेही खाता पनि स्वचालित वेब ट्याब्लेटमा तपाईंले बनाउने कुनै पनि परिवर्तनहरू प्रतिलिपि हुनसक्छ। Google खाताले यसरी कार्य गर्दछ।"</string>
<string name="data_usage_auto_sync_on_dialog" product="default" msgid="5004823486046340090">"तपाईंले वेबमा आफ्नो खातामा गर्न हुने कुनै पनि परिवर्तनहरू स्वचालित रूपमा तपाईँको फोनमा प्रतिलिपि गरिने छ।\n\nकेही खाता पनि स्वचालित वेब फोनमा तपाईंले बनाउने कुनै पनि परिवर्तनहरू प्रतिलिपि हुनसक्छ। Google खाताले यसरी कार्य गर्दछ।"</string>
<string name="data_usage_auto_sync_off_dialog_title" msgid="7105334544291643305">"डेटा स्वतः सिंक हुने कार्य बन्द गर्ने हो?"</string>
<string name="data_usage_auto_sync_off_dialog" msgid="4057984234450947964">"यस कार्यले डेटा र ब्याट्री प्रयोगको बचत गर्दछ, तर तपाईंले प्रत्येक खाता म्यानुअल तरिकाले हालसालको जानकारी भेला पार्नु पर्ने हुन्छ। र तपाईंले अद्यावधिक हुने बेलामा सूचना प्राप्त गर्नु हुन्न।"</string>
- <string name="data_usage_cycle_editor_title" msgid="4967309390043599889">"प्रयोग चक्र पुनःसेट गर्ने मिति"</string>
+ <string name="data_usage_cycle_editor_title" msgid="4967309390043599889">"प्रयोग चक्र रिसेट गर्ने मिति"</string>
<string name="data_usage_cycle_editor_subtitle" msgid="6043098041946166597">"प्रत्येक महिनाको मिति:"</string>
<string name="data_usage_cycle_editor_positive" msgid="9155752056537811646">"सेट गर्नुहोस्"</string>
<string name="data_usage_warning_editor_title" msgid="1431385383278389290">"डेटा उपयोगबारे चेतावनी सेट गर्नुहोस्"</string>
@@ -2715,27 +2717,27 @@
<string name="data_usage_limit_dialog_mobile" product="tablet" msgid="2000713577999830647">"तपाईंको ट्याब्लेट तपाईंले सेट गर्नुभएको अधिकतम डेटा प्रयोगको सीमामा पुगेपछि यसले मोबाइल डेटालाई निष्क्रिय पार्नेछ।\n\nतपाईंको ट्याब्लेटले र तपाईंको सेवा प्रदायकले फरक तरिकाले डेटा प्रयोगको मापन गर्न सक्ने हुनाले विवेकपूर्ण तरिकाले यसको सीमा सेट गर्ने बारे विचार गर्नुहोस्।"</string>
<string name="data_usage_limit_dialog_mobile" product="default" msgid="943546278705619205">"तपाईंको फोन तपाईंले सेट गर्नुभएको अधिकतम डेटा प्रयोगको सीमामा पुगेपछि यसले मोबाइल डेटालाई निष्क्रिय पार्नेछ।\n\nतपाईंको फोनले र तपाईंको सेवा प्रदायकले फरक तरिकाले डेटा प्रयोगको मापन गर्न सक्ने हुनाले विवेकपूर्ण तरिकाले यसको सीमा सेट गर्ने बारे विचार गर्नुहोस्।"</string>
<string name="data_usage_restrict_background_title" msgid="3568746530413220844">"पृष्ठभूमि डेटा प्रतिबन्ध गर्न चाहनुहुन्छ?"</string>
- <string name="data_usage_restrict_background" msgid="995811034744808575">"तपाईंले पृष्ठभूमिको मोबाइल डेटालाई सीमित गर्नुहुन्छ भने केही अनुप्रयोग र सेवाहरूले तपाईं Wi‑Fi मा जडान नहुँदासम्म काम गर्ने छैनन्।"</string>
- <string name="data_usage_restrict_background_multiuser" product="tablet" msgid="6032810839234864814">"तपाईंले पृष्ठभूमिको मोबाइल डेटालाई सीमित गर्नुहुन्छ भने केही अनुप्रयोग र सेवाहरूले तपाईं Wi‑Fi मा जडान नहुँदासम्म काम गर्ने छैनन्।\n\nयस सेटिङले यस ट्याब्लेटमा भएका सबै प्रयोगकर्ताहरूलाई प्रभाव पार्दछ।"</string>
- <string name="data_usage_restrict_background_multiuser" product="default" msgid="6846901756455789858">"तपाईंले पृष्ठभूमिको मोबाइल डेटालाई सीमित गर्नुहुन्छ भने केही अनुप्रयोग र सेवाहरूले तपाईं Wi‑Fi मा जडान नहुँदासम्म काम गर्ने छैनन्।\n\nयस सेटिङले यस फोनमा भएका सबै प्रयोगकर्ताहरूलाई प्रभाव पार्दछ।"</string>
+ <string name="data_usage_restrict_background" msgid="995811034744808575">"तपाईंले पृष्ठभूमिको मोबाइल डेटालाई सीमित गर्नुहुन्छ भने केही एप र सेवाहरूले तपाईं Wi‑Fi मा जडान नहुँदासम्म काम गर्ने छैनन्।"</string>
+ <string name="data_usage_restrict_background_multiuser" product="tablet" msgid="6032810839234864814">"तपाईंले पृष्ठभूमिको मोबाइल डेटालाई सीमित गर्नुहुन्छ भने केही एप र सेवाहरूले तपाईं Wi‑Fi मा जडान नहुँदासम्म काम गर्ने छैनन्।\n\nयस सेटिङले यस ट्याब्लेटमा भएका सबै प्रयोगकर्ताहरूलाई प्रभाव पार्दछ।"</string>
+ <string name="data_usage_restrict_background_multiuser" product="default" msgid="6846901756455789858">"तपाईंले पृष्ठभूमिको मोबाइल डेटालाई सीमित गर्नुहुन्छ भने केही एप र सेवाहरूले तपाईं Wi‑Fi मा जडान नहुँदासम्म काम गर्ने छैनन्।\n\nयस सेटिङले यस फोनमा भएका सबै प्रयोगकर्ताहरूलाई प्रभाव पार्दछ।"</string>
<string name="data_usage_sweep_warning" msgid="4646401408698778092"><font size="18">" <xliff:g id="NUMBER">^1</xliff:g> "</font>" "<font size="9">" <xliff:g id="UNIT">^2</xliff:g> "</font>" \n "<font size="12">" चेतावनी "</font></string>
<string name="data_usage_sweep_limit" msgid="6101105504557548269"><font size="18">" <xliff:g id="NUMBER">^1</xliff:g> "</font>" "<font size="9">" <xliff:g id="UNIT">^2</xliff:g> "</font>" \n "<font size="12">" सीमा "</font></string>
- <string name="data_usage_uninstalled_apps" msgid="4152786786140875769">"हटाइएका अनुप्रयोगहरू"</string>
- <string name="data_usage_uninstalled_apps_users" msgid="61092462416505112">"अनुप्रयोगहरू र प्रयोगकर्ताहरू हटाइयो।"</string>
+ <string name="data_usage_uninstalled_apps" msgid="4152786786140875769">"हटाइएका एपहरू"</string>
+ <string name="data_usage_uninstalled_apps_users" msgid="61092462416505112">"एपहरू र प्रयोगकर्ताहरू हटाइयो।"</string>
<string name="data_usage_received_sent" msgid="5532467049487334656">"<xliff:g id="RECEIVED">%1$s</xliff:g> प्राप्त गरियो, <xliff:g id="SENT">%2$s</xliff:g> पठाइयो"</string>
<string name="data_usage_total_during_range" msgid="7307562900020512747">"<xliff:g id="RANGE">%2$s</xliff:g>: करिब <xliff:g id="TOTAL">%1$s</xliff:g> प्रयोग भएको।"</string>
<string name="data_usage_total_during_range_mobile" product="tablet" msgid="366118962920532455">"<xliff:g id="RANGE">%2$s</xliff:g>: को बारेमा <xliff:g id="TOTAL">%1$s</xliff:g> तपाईँको ट्याब्लेटले नापे जस्तो रूपमा प्रयोग भयो। तपाईँको ढुवानीको डेटा उपयोग लेखा सायद भिन्न हुन सक्छ।"</string>
<string name="data_usage_total_during_range_mobile" product="default" msgid="3504412681869806383">"<xliff:g id="RANGE">%2$s</xliff:g>: करिब<xliff:g id="TOTAL">%1$s</xliff:g> प्रयोग भएको, तपाईँको फोनले मापन गरेअनुसार। तपाईँको डेटाको प्रयोग बाहकको खाता अनुसार फरक पर्न सक्छ।"</string>
<string name="data_usage_metered_title" msgid="6827619643999794429">"सञ्जाल प्रतिबन्धहरू"</string>
- <string name="data_usage_metered_body" msgid="1342905101297753439">"पृष्ठभूमिको डेटा सीमित गरिएको बेला सीमित नेटवर्कहरूलाई मोबाइल डेटा जस्तै मानिन्छ। ठूला फाइलहरू डाउनलोड गर्नाका लागि यी नेटवर्कहरूको प्रयोग गर्नुअघि अनुप्रयोगहरूले चेतावनी दिन सक्छन्।"</string>
+ <string name="data_usage_metered_body" msgid="1342905101297753439">"पृष्ठभूमिको डेटा सीमित गरिएको बेला सीमित नेटवर्कहरूलाई मोबाइल डेटा जस्तै मानिन्छ। ठूला फाइलहरू डाउनलोड गर्नाका लागि यी नेटवर्कहरूको प्रयोग गर्नुअघि एपहरूले चेतावनी दिन सक्छन्।"</string>
<string name="data_usage_metered_mobile" msgid="3675591449158207593">"मोबाइल नेटवर्क"</string>
<string name="data_usage_metered_wifi" msgid="2955256408132426720">"मिटर राखिएका Wi-Fi सञ्जालहरू"</string>
<string name="data_usage_metered_wifi_disabled" msgid="5771083253782103415">"मिटर राखिएका सञ्जालहरू चयन गर्न, Wi-Fi खोल्नुहोस्।"</string>
<string name="data_usage_metered_auto" msgid="7924116401382629319">"स्वचालित"</string>
- <string name="data_usage_metered_yes" msgid="7333744880035386073">"मिटर चल्ने बनाइएको छ"</string>
+ <string name="data_usage_metered_yes" msgid="7333744880035386073">"शुल्क लाग्ने"</string>
<string name="data_usage_metered_no" msgid="1961524615778610008">"शुल्क लाग्ने प्रावधान तय नगरिसकिएको"</string>
<string name="data_usage_disclaimer" msgid="4683321532922590425">"वाहक डेटा लेखाकृत गर्ने तपाईँको उपकरणबाट फरक हुन सक्छ।"</string>
- <string name="cryptkeeper_emergency_call" msgid="4625420047524693116">"आपतकालीन कल"</string>
+ <string name="cryptkeeper_emergency_call" msgid="4625420047524693116">"आपत्कालीन कल"</string>
<string name="cryptkeeper_return_to_call" msgid="4433942821196822815">"कलमा फर्किनुहोस्"</string>
<string name="vpn_name" msgid="3538818658670774080">"नाम"</string>
<string name="vpn_type" msgid="6389116710008658550">"प्रकार"</string>
@@ -2833,27 +2835,27 @@
<item quantity="one">प्रमाणपत्रलाई विश्वास गर्नुहोस् वा हटाउनुहोस्</item>
</plurals>
<plurals name="ssl_ca_cert_info_message_device_owner" formatted="false" msgid="9046046586061880100">
- <item quantity="other"><xliff:g id="MANAGING_DOMAIN_1">%s</xliff:g> ले तपाईँको यन्त्रमा प्रमाणपत्र अख्तियारीहरूलाई स्थापना गरेको छ जसले त्यसलाई इमेल, अनुप्रयोग र सुरक्षित वेबसाइटहरू लगायत तपाईँको यन्त्रको नेटवर्क सम्बन्धी गतिविधिलाई अनुगमन गर्न अनुमति दिन सक्छ।\n\nयी प्रमाणपत्रहरू बारे थप जानकारीका लागि आफ्नो प्रशासकलाई सम्पर्क गर्नुहोस्।</item>
- <item quantity="one"><xliff:g id="MANAGING_DOMAIN_0">%s</xliff:g> ले तपाईँको यन्त्रमा प्रमाणपत्र अख्तियारीलाई स्थापना गरेको छ जसले त्यसलाई इमेल, अनुप्रयोग र सुरक्षित वेबसाइटहरू लगायत तपाईँको यन्त्रको नेटवर्क सम्बन्धी गतिविधिलाई अनुगमन गर्न अनुमति दिन सक्छ।\n\nयस प्रमाणपत्र बारे थप जानकारीका लागि आफ्नो प्रशासकलाई सम्पर्क गर्नुहोस्।</item>
+ <item quantity="other"><xliff:g id="MANAGING_DOMAIN_1">%s</xliff:g> ले तपाईँको यन्त्रमा प्रमाणपत्र अख्तियारीहरूलाई स्थापना गरेको छ जसले त्यसलाई इमेल, एप र सुरक्षित वेबसाइटहरू लगायत तपाईँको यन्त्रको नेटवर्क सम्बन्धी गतिविधिलाई अनुगमन गर्न अनुमति दिन सक्छ।\n\nयी प्रमाणपत्रहरू बारे थप जानकारीका लागि आफ्नो प्रशासकलाई सम्पर्क गर्नुहोस्।</item>
+ <item quantity="one"><xliff:g id="MANAGING_DOMAIN_0">%s</xliff:g> ले तपाईँको यन्त्रमा प्रमाणपत्र अख्तियारीलाई स्थापना गरेको छ जसले त्यसलाई इमेल, एप र सुरक्षित वेबसाइटहरू लगायत तपाईँको यन्त्रको नेटवर्क सम्बन्धी गतिविधिलाई अनुगमन गर्न अनुमति दिन सक्छ।\n\nयस प्रमाणपत्र बारे थप जानकारीका लागि आफ्नो प्रशासकलाई सम्पर्क गर्नुहोस्।</item>
</plurals>
<plurals name="ssl_ca_cert_info_message" formatted="false" msgid="8271858091418779584">
- <item quantity="other"><xliff:g id="MANAGING_DOMAIN_1">%s</xliff:g> ले तपाईँको कार्य प्रोफाइलका लागि प्रमाणपत्र अख्तियारीहरूलाई स्थापना गरेको छ जसले त्यसलाई इमेल, अनुप्रयोग र सुरक्षित वेबसाइटहरू लगायत कार्य प्रोफाइलको नेटवर्क सम्बन्धी गतिविधिलाई अनुगमन गर्न अनुमति दिन सक्छ।\n\nयी प्रमाणपत्रहरू बारे थप जानकारीका लागि आफ्नो प्रशासकलाई सम्पर्क गर्नुहोस्।</item>
- <item quantity="one"><xliff:g id="MANAGING_DOMAIN_0">%s</xliff:g> ले तपाईँको कार्य प्रोफाइलका लागि प्रमाणपत्र अख्तियारीलाई स्थापना गरेको छ जसले त्यसलाई इमेल, अनुप्रयोग र सुरक्षित वेबसाइटहरू लगायत कार्य प्रोफाइलको नेटवर्क सम्बन्धी गतिविधिलाई अनुगमन गर्न अनुमति दिन सक्छ।\n\nयस प्रमाणपत्र बारे थप जानकारीका लागि आफ्नो प्रशासकलाई सम्पर्क गर्नुहोस्।</item>
+ <item quantity="other"><xliff:g id="MANAGING_DOMAIN_1">%s</xliff:g> ले तपाईँको कार्य प्रोफाइलका लागि प्रमाणपत्र अख्तियारीहरूलाई स्थापना गरेको छ जसले त्यसलाई इमेल, एप र सुरक्षित वेबसाइटहरू लगायत कार्य प्रोफाइलको नेटवर्क सम्बन्धी गतिविधिलाई अनुगमन गर्न अनुमति दिन सक्छ।\n\nयी प्रमाणपत्रहरू बारे थप जानकारीका लागि आफ्नो प्रशासकलाई सम्पर्क गर्नुहोस्।</item>
+ <item quantity="one"><xliff:g id="MANAGING_DOMAIN_0">%s</xliff:g> ले तपाईँको कार्य प्रोफाइलका लागि प्रमाणपत्र अख्तियारीलाई स्थापना गरेको छ जसले त्यसलाई इमेल, एप र सुरक्षित वेबसाइटहरू लगायत कार्य प्रोफाइलको नेटवर्क सम्बन्धी गतिविधिलाई अनुगमन गर्न अनुमति दिन सक्छ।\n\nयस प्रमाणपत्र बारे थप जानकारीका लागि आफ्नो प्रशासकलाई सम्पर्क गर्नुहोस्।</item>
</plurals>
- <string name="ssl_ca_cert_warning_message" msgid="8692156828262606685">"तपाईँको सञ्जाल गतिविधिको साथ इमेल, अनुप्रयोग र सुरक्षित वेबसाइटहरू सहितको अनुगमन गर्न तेस्रो पक्ष सक्षम छ। \n \n तपाईँको उपकरणमा स्थापित भएको बिश्वस्त गोप्य डेटाले गर्दा यो सम्भव भएको हो।"</string>
+ <string name="ssl_ca_cert_warning_message" msgid="8692156828262606685">"तपाईँको सञ्जाल गतिविधिको साथ इमेल, एप र सुरक्षित वेबसाइटहरू सहितको अनुगमन गर्न तेस्रो पक्ष सक्षम छ। \n \n तपाईँको उपकरणमा स्थापित भएको बिश्वस्त गोप्य डेटाले गर्दा यो सम्भव भएको हो।"</string>
<plurals name="ssl_ca_cert_settings_button" formatted="false" msgid="3227175122066058245">
<item quantity="other">प्रमाणपत्रहरूलाई जाँच गर्नुहोस्</item>
<item quantity="one">प्रमाणपत्रलाई जाँच गर्नुहोस्</item>
</plurals>
<string name="user_settings_title" msgid="7917598650933179545">"बहु प्रयोगकर्ताहरू"</string>
- <string name="user_settings_footer_text" product="device" msgid="4573858247439190545">"नयाँ प्रयोगकर्ताहरू थपेर आफ्नो यन्त्र आदान प्रदान गर्नुहोस्। प्रत्येक प्रयोगकर्तासँग आफू अनुकूल गृह स्क्रिन, खाता, अनुप्रयोग, सेटिङ र थप कुराहरूका लागि तपाईंको यन्त्रमा व्यक्तिगत स्थान हुन्छ।"</string>
- <string name="user_settings_footer_text" product="tablet" msgid="780018221428132918">"नयाँ प्रयोगकर्ताहरू थपेर आफ्नो ट्याब्लेट आदान प्रदान गर्नुहोस्। प्रत्येक प्रयोगकर्तासँग आफू अनुकूल गृह स्क्रिन, खाता, अनुप्रयोग, सेटिङ र थप कुराहरूका लागि तपाईंको ट्याब्लेटमा व्यक्तिगत स्थान हुन्छ।"</string>
- <string name="user_settings_footer_text" product="default" msgid="1470859614968237491">"नयाँ प्रयोगकर्ताहरू थपेर आफ्नो फोनआदान प्रदान गर्नुहोस्। प्रत्येक प्रयोगकर्तासँग आफू अनुकूल गृह स्क्रिन, खाता, अनुप्रयोग, सेटिङ र थप कुराहरूका लागि तपाईंको फोनमा व्यक्तिगत स्थान हुन्छ।"</string>
+ <string name="user_settings_footer_text" product="device" msgid="4573858247439190545">"नयाँ प्रयोगकर्ताहरू थपेर आफ्नो यन्त्र सेयर गर्नुहोस्। प्रत्येक प्रयोगकर्तासँग आफू अनुकूल गृह स्क्रिन, खाता, एप, सेटिङ र थप कुराहरूका लागि तपाईंको यन्त्रमा व्यक्तिगत स्थान हुन्छ।"</string>
+ <string name="user_settings_footer_text" product="tablet" msgid="780018221428132918">"नयाँ प्रयोगकर्ताहरू थपेर आफ्नो ट्याब्लेट सेयर गर्नुहोस्। प्रत्येक प्रयोगकर्तासँग आफू अनुकूल गृह स्क्रिन, खाता, एप, सेटिङ र थप कुराहरूका लागि तपाईंको ट्याब्लेटमा व्यक्तिगत स्थान हुन्छ।"</string>
+ <string name="user_settings_footer_text" product="default" msgid="1470859614968237491">"नयाँ प्रयोगकर्ताहरू थपेर आफ्नो फोन सेयर गर्नुहोस्। प्रत्येक प्रयोगकर्तासँग आफू अनुकूल गृह स्क्रिन, खाता, एप, सेटिङ र थप कुराहरूका लागि तपाईंको फोनमा व्यक्तिगत स्थान हुन्छ।"</string>
<string name="user_list_title" msgid="6670258645246192324">"प्रयोगकर्ता र प्रोफाइलहरू"</string>
<string name="user_add_user_or_profile_menu" msgid="4220679989900149336">"प्रयोगकर्ता वा प्रोफाइल थप गर्नुहोस्"</string>
<string name="user_add_user_menu" msgid="9006572936456324794">"प्रयोगकर्ता थप्नुहोस्"</string>
<string name="user_summary_restricted_profile" msgid="5214838615043574917">"निषेध गरिएको प्रोफाइल"</string>
- <string name="user_need_lock_message" msgid="3421243467724322311">"निषेधयुक्त प्रोफाइल बनाउनु अघि तपाईँको अनुप्रयोग र व्यक्तिगत डेटा सुरक्षा गर्नाका लागि तपाईँले स्क्रिन लक सेटअप गर्नु पर्दछ ।"</string>
+ <string name="user_need_lock_message" msgid="3421243467724322311">"निषेधयुक्त प्रोफाइल बनाउनु अघि तपाईँको एप र व्यक्तिगत डेटा सुरक्षा गर्नाका लागि तपाईँले स्क्रिन लक सेटअप गर्नु पर्दछ ।"</string>
<string name="user_set_lock_button" msgid="4660971133148866612">"लक सेट गर्नुहोस्"</string>
<string name="user_summary_not_set_up" msgid="6436691939044332679">"सेटअप छैन"</string>
<string name="user_summary_restricted_not_set_up" msgid="896552290436689508">"सेट भएको छैन - सीमित प्रोफाइल"</string>
@@ -2863,15 +2865,15 @@
<string name="user_nickname" msgid="1088216221559125529">"उपनाम"</string>
<string name="user_add_user_type_title" msgid="8672326434351387845">"थप्नुहोस्"</string>
<string name="user_add_max_count" msgid="4524573950126500416">"तपाईँले <xliff:g id="USER_COUNT">%1$d</xliff:g> जना प्रयोगकर्ता सम्म थप्न सक्नुहुनेछ"</string>
- <string name="user_add_user_item_summary" msgid="6114355152711455716">"प्रयोगकर्ताहरूसँग आफ्नै अनुप्रयोगहरू र सामग्री हुन्छ"</string>
- <string name="user_add_profile_item_summary" msgid="6386283837789573755">"तपाईं आफ्नो खाताबाट अनुप्रयोगहरू र सामग्रीहरूको पहुँचलाई प्रतिबन्ध गर्न सक्नुहुन्छ"</string>
+ <string name="user_add_user_item_summary" msgid="6114355152711455716">"प्रयोगकर्ताहरूसँग आफ्नै एपहरू र सामग्री हुन्छ"</string>
+ <string name="user_add_profile_item_summary" msgid="6386283837789573755">"तपाईं आफ्नो खाताबाट एपहरू र सामग्रीहरूको पहुँचलाई प्रतिबन्ध गर्न सक्नुहुन्छ"</string>
<string name="user_add_user_item_title" msgid="6835385073795492410">"प्रयोगकर्ता"</string>
<string name="user_add_profile_item_title" msgid="4932743891449790664">"प्रतिबन्धित प्रोफाइल"</string>
<string name="user_add_user_title" msgid="2320897397066676472">"नयाँ प्रयोगकर्ता थप्ने हो?"</string>
- <string name="user_add_user_message_long" msgid="686637203224195465">"तपाईं थप प्रयोगकर्ताहरू सिर्जना गरेर यो यन्त्र अन्य मान्छेहरूसँग साझा रूपमा प्रयोग गर्न सक्नुहुन्छ। हरेक प्रयोगकर्ताको आफ्नै ठाउँ हुन्छ, जसलाई उनीहरू अनुप्रयोग, वालपेपर इत्यादिमार्फत आफू अनुकूल पार्न सक्छन्। प्रयोगकर्ताहरू सबैजनालाई असर पार्ने Wi-Fi जस्ता यन्त्रका सेटिङहरू पनि समायोजन गर्न सक्छन्।\n\nतपाईंले नयाँ प्रयोगकर्ता थप्दा उक्त व्यक्तिले आफ्नो ठाउँ सेटअप गर्नु पर्ने हुन्छ।\n\nकुनै पनि प्रयोगकर्ताले अन्य सबै प्रयोगकर्ताहरूका लागि अनुप्रयोगहरू अद्यावधिक गर्न सक्छन्। पहुँचसम्बन्धी सेटिङ तथा सेवाहरू नयाँ प्रयोगकर्तामा स्थानान्तरण नहुन सक्छन्।"</string>
- <string name="user_add_user_message_short" msgid="1802594476285458254">"जब तपाईंले नयाँ प्रयोगकर्ता थप्नुहुन्छ, त्यो व्यक्तिले आफ्नो ठाउँ सेट गर्न आवश्यक छ।\n\nकुनै पनि प्रयोगकर्ताले सबै अन्य प्रयोगकर्ताहरूका लागि अनुप्रयोगहरू अद्यावधिक गर्न सक्छन्।"</string>
+ <string name="user_add_user_message_long" msgid="686637203224195465">"तपाईं थप प्रयोगकर्ताहरू सिर्जना गरेर ती प्रयोगकर्तालाई यो यन्त्र प्रयोग गर्न दिन सक्नुहुन्छ। हरेक प्रयोगकर्ताको आफ्नै ठाउँ हुन्छ। उनीहरू यो ठाउँमा आफ्नै एप, वालपेपर आदिका लागि प्रयोग गर्न सक्छन्। उनीहरू सबैजनालाई असर पार्ने Wi-Fi जस्ता यन्त्रका सेटिङहरू पनि परिवर्तन गर्न सक्छन्।\n\nतपाईंले नयाँ प्रयोगकर्ता थप्दा उक्त व्यक्तिले आफ्नो ठाउँ सेटअप गर्नु पर्ने हुन्छ।\n\nसबै प्रयोगकर्ता अन्य सबै प्रयोगकर्ताले प्रयोग गर्ने एपहरू अद्यावधिक गर्न सक्छन्। तर पहुँचसम्बन्धी सेटिङ तथा सेवाहरू नयाँ प्रयोगकर्तामा नसर्न सक्छ।"</string>
+ <string name="user_add_user_message_short" msgid="1802594476285458254">"जब तपाईंले नयाँ प्रयोगकर्ता थप्नुहुन्छ, त्यो व्यक्तिले आफ्नो ठाउँ सेट गर्न आवश्यक छ।\n\nकुनै पनि प्रयोगकर्ताले सबै अन्य प्रयोगकर्ताहरूका लागि एपहरू अद्यावधिक गर्न सक्छन्।"</string>
<string name="user_setup_dialog_title" msgid="6748950002206392396">"अहिले प्रयोगकर्ता सेटअप गर्ने हो?"</string>
- <string name="user_setup_dialog_message" msgid="2988559933258353919">"यन्त्र लिन र आफ्नो ठाउँ बनाउन व्यक्ति उपलब्ध छ भन्ने कुराको निश्चित गर्नुहोस्"</string>
+ <string name="user_setup_dialog_message" msgid="2988559933258353919">"यी व्यक्ति यन्त्र यो यन्त्र चलाउन र आफ्नो ठाउँ सेट गर्न उपलब्ध छन् भन्ने कुरा सुनिश्चित गर्नुहोस्"</string>
<string name="user_setup_profile_dialog_message" msgid="7611900802824048526">"अहिले प्रोफाइल सेटअप गर्ने हो?"</string>
<string name="user_setup_button_setup_now" msgid="4941459406266856176">"अब सेटअप गर्नुहोस्"</string>
<string name="user_setup_button_setup_later" msgid="6596031428556518752">"अहिले होइन"</string>
@@ -2889,41 +2891,41 @@
<string name="work_profile_confirm_remove_title" msgid="3168910958076735800">"कार्य प्रोफाइल हटाउने?"</string>
<string name="user_confirm_remove_self_message" product="tablet" msgid="2889456786320157545">"तपाईं यस ट्याब्लेटमा आफ्नो ठाउँ र डेटा हराउनु हुने छ। तपाईं यो कार्यलाई अन्डु गर्न सक्नुहुन्न।"</string>
<string name="user_confirm_remove_self_message" product="default" msgid="8441729423565705183">"तपाईं यस फोनमा आफ्नो ठाउँ र डेटा गुमाउनु हुनेछ। तपाईं यो कार्य पूर्ववत गर्न हुन्न।"</string>
- <string name="user_confirm_remove_message" msgid="5202150470271756013">"सबै अनुप्रयोगहरू र डेटा मेटाइनेछन्।"</string>
- <string name="work_profile_confirm_remove_message" msgid="1220672284385083128">"यदि तपाईँले जारी राख्नुभयो भने यो प्रोफाइलका सबै अनुप्रयोगहरू र डेटा मेटाइने छन्।"</string>
- <string name="user_profile_confirm_remove_message" msgid="8376289888144561545">"सबै अनुप्रयोगहरू र डेटा मेटाइने छन्।"</string>
+ <string name="user_confirm_remove_message" msgid="5202150470271756013">"सबै एपहरू र डेटा मेटाइनेछन्।"</string>
+ <string name="work_profile_confirm_remove_message" msgid="1220672284385083128">"यदि तपाईँले जारी राख्नुभयो भने यो प्रोफाइलका सबै एपहरू र डेटा मेटाइने छन्।"</string>
+ <string name="user_profile_confirm_remove_message" msgid="8376289888144561545">"सबै एपहरू र डेटा मेटाइने छन्।"</string>
<string name="user_adding_new_user" msgid="381717945749193417">"नयाँ प्रयोगकर्ता थप गरिँदै..."</string>
<string name="user_delete_user_description" msgid="3627684990761268859">"प्रयोगकर्ता मेटाउनुहोस्"</string>
<string name="user_delete_button" msgid="6747802570634772774">"मेट्नुहोस्"</string>
<string name="user_guest" msgid="6226240869459683235">"अतिथि"</string>
<string name="user_exit_guest_title" msgid="7279886200373071797">"अतिथि हटाउनुहोस्"</string>
<string name="user_exit_guest_confirm_title" msgid="4767911571671099844">"अतिथि हटाउने हो?"</string>
- <string name="user_exit_guest_confirm_message" msgid="6955182181145748919">"यस सत्रमा सबै अनुप्रयोगहरू र डेटा मेटाइनेछ।"</string>
+ <string name="user_exit_guest_confirm_message" msgid="6955182181145748919">"यस सत्रमा सबै एपहरू र डेटा मेटाइनेछ।"</string>
<string name="user_exit_guest_dialog_remove" msgid="1878866060881115716">"हटाउनुहोस्"</string>
- <string name="user_enable_calling" msgid="864760054792249503">"फोन कलहरू सक्षम पार्नुहोस्"</string>
+ <string name="user_enable_calling" msgid="864760054792249503">"फोन गर्ने सेवा सक्रिय गर्नुहोस्"</string>
<string name="user_enable_calling_sms" msgid="3450252891736718793">"फोन कल तथा SMS सक्षम पार्नुहोस्"</string>
<string name="user_remove_user" msgid="3687544420125911166">"प्रयोगकर्ता मेटाउनुहोस्"</string>
<string name="user_enable_calling_confirm_title" msgid="1141612415529158542">"फोन कलहरू सक्षम गर्ने हो?"</string>
<string name="user_enable_calling_confirm_message" msgid="2490126715153125970">"कल इतिहासमा यो प्रयोगकर्ता सँग साझेदारी गरिने छ।"</string>
<string name="user_enable_calling_and_sms_confirm_title" msgid="4153856398523366976">"फोन कल तथा SMS सक्षम गर्ने हो?"</string>
<string name="user_enable_calling_and_sms_confirm_message" msgid="3278802798876095734">"कल र SMS इतिहास यो प्रयोगकर्तासँग साझेदारी गरिने छ।"</string>
- <string name="emergency_info_title" msgid="1522609271881425375">"आपतकालीन सूचना"</string>
+ <string name="emergency_info_title" msgid="1522609271881425375">"आपत्कालीन सूचना"</string>
<string name="emergency_info_summary" msgid="7280464759837387342">"<xliff:g id="USER_NAME">%1$s</xliff:g> का बारेमा जानकारी र सम्पर्क ठेगानाहरू"</string>
- <string name="application_restrictions" msgid="6871981013736536763">"अनुप्रयोगहरू र सामग्री अनुमति दिनुहोस्"</string>
- <string name="apps_with_restrictions_header" msgid="8656739605673756176">"प्रतिबन्धको साथ अनुप्रयोगहरू"</string>
- <string name="apps_with_restrictions_settings_button" msgid="5065896213467171744">"अनुप्रयोगको लागि सेटिङहरू विस्तार गर्नुहोस्"</string>
+ <string name="application_restrictions" msgid="6871981013736536763">"एपहरू र सामग्री अनुमति दिनुहोस्"</string>
+ <string name="apps_with_restrictions_header" msgid="8656739605673756176">"प्रतिबन्धको साथ एपहरू"</string>
+ <string name="apps_with_restrictions_settings_button" msgid="5065896213467171744">"एपको लागि सेटिङहरू विस्तार गर्नुहोस्"</string>
<string name="nfc_payment_settings_title" msgid="5070077706735415291">"ट्याप गरी भुक्तानी गर्नुहोस्"</string>
<string name="nfc_payment_how_it_works" msgid="7607901964687787177">"यसले कसरी काम गर्दछ"</string>
<string name="nfc_payment_no_apps" msgid="8844440783395420860">"स्टोरहरूमा तपाईँको फोनमार्फत भुक्तानी गर्नुहोस्।"</string>
- <string name="nfc_payment_default" msgid="7869273092463612271">"पूर्वनिर्धारित भुक्तानी"</string>
+ <string name="nfc_payment_default" msgid="7869273092463612271">"पूर्वनिर्धारित भुक्तानी विधि"</string>
<string name="nfc_payment_default_not_set" msgid="955804193510335338">"सेट गरिएको छैन"</string>
<string name="nfc_payment_app_and_desc" msgid="102312684211458190">"<xliff:g id="APP">%1$s</xliff:g> - <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
- <string name="nfc_payment_use_default" msgid="3098724195746409476">"पूर्वनिर्धारित प्रयोग गर्नुहोस्"</string>
+ <string name="nfc_payment_use_default" msgid="3098724195746409476">"पूर्वनिर्धारित विधि प्रयोग गर्नुहोस्"</string>
<string name="nfc_payment_favor_default" msgid="7555356982142464260">"सधैँ"</string>
- <string name="nfc_payment_favor_open" msgid="3739055715000436749">"अर्को भुक्तानी अनुप्रयोग खुला भएको बेला बाहेक"</string>
+ <string name="nfc_payment_favor_open" msgid="3739055715000436749">"अर्को भुक्तानी एप खुला भएको बेला बाहेक"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"ट्याप गरेर भुक्तानी गर्ने टर्मिनलमा यसमार्फत भुक्तानी गर्नुहोस्:"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"टर्मिनलमा भुक्तानी"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"एउटा भुक्तानी अनुप्रयोग सेटअप गर्नुहोस्। त्यसपछि तपाईँको फोनको पछाडिको भाग सम्पर्कविहीन सङ्केतमार्फत कुनै टर्मिनलमा होल्ड गर्नुहोस्।"</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"एउटा भुक्तानी एप सेटअप गर्नुहोस्। त्यसपछि आफ्नो फोनको पछाडिको भाग कन्ट्याक्टलेस सङ्केतभएको कुनै टर्मिनलले पहिचान गर्ने गरी होल्ड गर्नुहोस्।"</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"बुझेँ"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"थप..."</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"तपाईँको प्राथमिकताको रूपमा सेट गर्ने हो?"</string>
@@ -2936,7 +2938,7 @@
<string name="help_label" msgid="1296484776243905646">"मद्दत र प्रतिक्रिया"</string>
<string name="support_summary" msgid="3278943815956130740">"मद्दतसम्बन्धी लेखहरू, फोन, कुराकानी र सुरूवात गर्नेसम्बन्धी सहायता"</string>
<string name="user_account_title" msgid="2108666882630552859">"सामग्रीको लागि खाता"</string>
- <string name="user_picture_title" msgid="6664602422948159123">"तस्बिर ID"</string>
+ <string name="user_picture_title" msgid="6664602422948159123">"फोटो ID"</string>
<string name="extreme_threats_title" msgid="1405820547540456436">"चरम धम्की"</string>
<string name="extreme_threats_summary" msgid="4967919167246852181">"जीवन र सम्पत्तिको चरम खतराहरूको लागि चेतावनीहरू प्राप्त"</string>
<string name="severe_threats_title" msgid="1987698359027211862">"गम्भीर खतराहरू"</string>
@@ -2949,7 +2951,7 @@
<string name="call_manager_title" msgid="1118074011469650421">"प्रबन्धक कल"</string>
<!-- no translation found for call_manager_summary (1232655174841493040) -->
<skip />
- <string name="cell_broadcast_settings" msgid="5750066270993255966">"आपतकालीन सतर्कताहरू"</string>
+ <string name="cell_broadcast_settings" msgid="5750066270993255966">"आपत्कालीन सतर्कताहरू"</string>
<string name="network_operators_settings" msgid="7822337582828465633">"सञ्जाल संचालकहरू"</string>
<string name="access_point_names" msgid="7992382237358800596">"बिन्दु नामहरूमा पहुँच"</string>
<string name="enhanced_4g_lte_mode_title" msgid="1624079276378568594">"VoLTE"</string>
@@ -2960,9 +2962,9 @@
<string name="preferred_network_type_title" msgid="1980819233332592332">"सञ्जाल प्रकार रुचाइएको"</string>
<string name="preferred_network_type_summary" msgid="8828375904939960006">"LTE (सिफारिस गरिएको)"</string>
<string name="work_sim_title" msgid="2885654516046971985">"कार्य SIM"</string>
- <string name="user_restrictions_title" msgid="6454305007320972740">"अनुप्रयोग र सामग्री पहुँच"</string>
+ <string name="user_restrictions_title" msgid="6454305007320972740">"एप र सामग्री पहुँच"</string>
<string name="user_rename" msgid="5624446289379780361">"पुनःनामाकरण गर्नुहोस्"</string>
- <string name="app_restrictions_custom_label" msgid="8791627858467265176">"अनुप्रयोग प्रतिबन्धहरू सेट गर्नुहोस्"</string>
+ <string name="app_restrictions_custom_label" msgid="8791627858467265176">"एप प्रतिबन्धहरू सेट गर्नुहोस्"</string>
<string name="user_restrictions_controlled_by" msgid="3442508299902131033">"<xliff:g id="APP">%1$s</xliff:g>द्वारा नियन्त्रित"</string>
<string name="app_sees_restricted_accounts" msgid="2210750497683265281">"यो अनुप्रयोगले तपाईंको खाताहरू पहुँच गर्न सक्दैन।"</string>
<string name="app_sees_restricted_accounts_and_controlled_by" msgid="5028333644657350816">"यो अनुप्रयोगले तपाईंका खाताहरू पहुँच गर्न सक्छ। <xliff:g id="APP">%1$s</xliff:g> द्वारा नियन्त्रित"</string>
@@ -2972,16 +2974,16 @@
<string name="restriction_bluetooth_config_summary" msgid="5304900222614952895">"ब्लुटुथ जोडा बाँध्ने कार्य र सेटिङहरूलाई अनुमति दिनुहोस्।"</string>
<string name="restriction_nfc_enable_title" msgid="5146674482590550598">"NFC"</string>
<string name="restriction_nfc_enable_summary_config" msgid="405349698260328073">"जब यो <xliff:g id="DEVICE_NAME">%1$s</xliff:g> अर्को NFC उपकरणले छुन्छ डेटा विनिमयको अनुमति दिनुहोस्"</string>
- <string name="restriction_nfc_enable_summary" product="tablet" msgid="3292205836938064931">"ट्याब्लेटले अर्को उपकरण छुँदा डेटा विनिमयलाई अनुमति दिनुहोस्"</string>
- <string name="restriction_nfc_enable_summary" product="default" msgid="226439584043333608">"फोनले अर्को उपकरण छुँदा डेटा विनिमयलाई अनुमति दिनुहोस्"</string>
+ <string name="restriction_nfc_enable_summary" product="tablet" msgid="3292205836938064931">"ट्याब्लेटले अर्को उपकरण छुँदा डेटा एक अर्कामा सर्ने अनुमति दिनुहोस्"</string>
+ <string name="restriction_nfc_enable_summary" product="default" msgid="226439584043333608">"फोनले अर्को उपकरण छुँदा डेटा एक अर्कामा सर्ने अनुमति दिनुहोस्"</string>
<string name="restriction_location_enable_title" msgid="358506740636434856">"स्थान"</string>
<string name="restriction_location_enable_summary" msgid="4159500201124004463">"अनुप्रयोगहरुलाई तपाईँको स्थान जानकारी प्रयोग गर्न दिनुहोस्"</string>
<string name="wizard_back" msgid="223654213898117594">"पछाडि जानुहोस्"</string>
<string name="wizard_next" msgid="5239664512608113542">"अर्को"</string>
<string name="wizard_finish" msgid="3742102879981212094">"समाप्त गर्नुहोस्"</string>
- <string name="user_image_take_photo" msgid="2000247510236178111">"तस्बिर खिच्नुहोस्"</string>
- <string name="user_image_choose_photo" msgid="4920315415203051898">"कुनै तस्बिर छनौट गर्नुहोस्"</string>
- <string name="user_image_photo_selector" msgid="8429694590849882411">"तस्बिर छान्नुहोस्"</string>
+ <string name="user_image_take_photo" msgid="2000247510236178111">"फोटो खिच्नुहोस्"</string>
+ <string name="user_image_choose_photo" msgid="4920315415203051898">"कुनै फोटो छनौट गर्नुहोस्"</string>
+ <string name="user_image_photo_selector" msgid="8429694590849882411">"फोटो छान्नुहोस्"</string>
<string name="regulatory_info_text" msgid="9112993912873512834"></string>
<string name="sim_setup_wizard_title" msgid="77627575294867180">"सिम कार्ड"</string>
<string name="sim_settings_title" msgid="8818243954752261922">"SIM कार्डहरू"</string>
@@ -3003,7 +3005,7 @@
<string name="sim_editor_title" msgid="2303147682835318920">"SIM स्लट %1$d"</string>
<string name="sim_editor_carrier" msgid="8860370077829961512">"वाहक"</string>
<string name="sim_editor_number" msgid="1757338150165234970">"संख्या"</string>
- <string name="sim_editor_color" msgid="373059962306191123">"SIM रङ"</string>
+ <string name="sim_editor_color" msgid="373059962306191123">"SIM रङ्ग"</string>
<string name="sim_card_select_title" msgid="4925862525985187946">"सिम कार्ड चयन गर्नुहोस्"</string>
<string name="color_orange" msgid="3159707916066563431">"ओरेन्ज"</string>
<string name="color_purple" msgid="4391440966734810713">"बैजनी"</string>
@@ -3014,9 +3016,9 @@
<string name="sim_outgoing_call_title" msgid="4683645160838507363">"बहिर्गमन कलको लागि SIM"</string>
<string name="sim_other_call_settings" msgid="5656672788293240519">"अन्य कल सेटिङहरू"</string>
<string name="preferred_network_offload_title" msgid="341815233467695133">"सञ्जाल अफलोड गर्न रुचाइयो"</string>
- <string name="preferred_network_offload_header" msgid="7101507079686660843">"सञ्जाल नाम प्रसारण असक्षम"</string>
- <string name="preferred_network_offload_footer" msgid="7454087782004987490">"आफ्नो सञ्जाल जानकारी तेस्रो दलको पहुँचबाट सञ्जाल नाम प्रसारण जोगाउने कार्य असक्षम पार्नुहोस्।"</string>
- <string name="preferred_network_offload_popup" msgid="204626698006378960">"सञ्जाल नाम प्रसारणले लुकेका सञ्जालहरू स्वचालित जडान हुनमा रोक्ने असक्षम पार्दै।"</string>
+ <string name="preferred_network_offload_header" msgid="7101507079686660843">"नेटवर्कको नाम प्रसारण असक्षम"</string>
+ <string name="preferred_network_offload_footer" msgid="7454087782004987490">"आफ्नो सञ्जाल जानकारी तेस्रो दलको पहुँचबाट नेटवर्कको नाम प्रसारण जोगाउने कार्य असक्षम पार्नुहोस्।"</string>
+ <string name="preferred_network_offload_popup" msgid="204626698006378960">"नेटवर्कको नाम प्रसारणले लुकेका सञ्जालहरू स्वचालित जडान हुनमा रोक्ने असक्षम पार्दै।"</string>
<string name="sim_signal_strength" msgid="6426261068520364170">"<xliff:g id="DBM">%1$d</xliff:g> dBm <xliff:g id="ASU">%2$d</xliff:g> asu"</string>
<string name="sim_notification_title" msgid="2457890173055955672">"SIM कार्डहरू परिवर्तन गरिए।"</string>
<string name="sim_notification_summary" msgid="6421556454979313850">"सेटअप गर्न ट्याप गर्नुहोस्"</string>
@@ -3033,17 +3035,17 @@
<string name="network_dashboard_summary_mobile" msgid="5560545061217580626">"मोबाइल"</string>
<string name="network_dashboard_summary_data_usage" msgid="4695629715072542102">"डेटाको प्रयोग"</string>
<string name="network_dashboard_summary_hotspot" msgid="3928610802321995214">"हटस्पट"</string>
- <string name="connected_devices_dashboard_title" msgid="7795222675849060444">"जडान गरिएका यन्त्रहरू"</string>
+ <string name="connected_devices_dashboard_title" msgid="7795222675849060444">"जोडिएका यन्त्रहरू"</string>
<string name="connected_devices_dashboard_summary" msgid="1072664369515033179">"ब्लुटुथ, ड्राइभिङ मोड, NFC"</string>
<string name="connected_devices_dashboard_no_nfc_summary" msgid="2610085597733526722">"ब्लुटुथ, ड्राइभिङ मोड"</string>
<string name="connected_devices_dashboard_no_driving_mode_summary" msgid="3524409078596318803">"ब्लुटुथ, NFC"</string>
<string name="connected_devices_dashboard_no_driving_mode_no_nfc_summary" msgid="7881286613528299400">"ब्लुटुथ"</string>
- <string name="app_and_notification_dashboard_title" msgid="8448096608058843730">"अनुप्रयोग तथा सूचनाहरू"</string>
- <string name="app_and_notification_dashboard_summary" msgid="4165181440955038145">"सहायक, हालैका अनुप्रयोगहरू, पूर्वनिर्धारित अनुप्रयोगहरू"</string>
+ <string name="app_and_notification_dashboard_title" msgid="8448096608058843730">"एप तथा सूचनाहरू"</string>
+ <string name="app_and_notification_dashboard_summary" msgid="4165181440955038145">"सहायक, हालैका एपहरू, पूर्वनिर्धारित एपहरू"</string>
<string name="notification_settings_work_profile" msgid="7190550347842400029">"कार्य प्रोफाइलका अनुप्रयोगहरूको सूचनामाथि पहुँच छैन।"</string>
<string name="account_dashboard_title" msgid="4734300939532555885">"खाताहरू"</string>
<string name="account_dashboard_default_summary" msgid="6822549669771936206">"कुनै पनि खाता थप गरिएन"</string>
- <string name="app_default_dashboard_title" msgid="6575301028225232193">"पूर्वनिर्धारित अनुप्रयोगहरू"</string>
+ <string name="app_default_dashboard_title" msgid="6575301028225232193">"पूर्वनिर्धारित एपहरू"</string>
<string name="system_dashboard_summary" msgid="6582464466735779394">"भाषाहरू, इसाराहरू, समय, ब्याकअप"</string>
<string name="search_results_title" msgid="4160717656435503940">"सेटिङहरू"</string>
<string name="keywords_wifi" msgid="8477688080895466846">"wifi, wi-fi, नेटवर्क जडान, इन्टरनेट, वायरलेस, डेटा, wi fi"</string>
@@ -3053,7 +3055,7 @@
<string name="keywords_time_format" msgid="8265826377023617424">"२४-घन्टे ढाँचा प्रयोग गर्नुहोस्"</string>
<string name="keywords_storage_files" msgid="1995055540202216399">"डाउनलोड"</string>
<string name="keywords_app_default" msgid="1265502485415708667">"निम्नमार्फत खोल्नुहोस्"</string>
- <string name="keywords_applications_settings" msgid="2078776051110952597">"अनुप्रयोगहरू"</string>
+ <string name="keywords_applications_settings" msgid="2078776051110952597">"एपहरू"</string>
<string name="keywords_time_zone" msgid="1571973084865023954">"समय क्षेत्र"</string>
<string name="keywords_draw_overlay" msgid="3855954419750744775">"कुराकानीको हेड"</string>
<string name="keywords_flashlight" msgid="7733996050628473024">"फ्ल्यासलाइट, बत्ती, टर्च"</string>
@@ -3062,7 +3064,7 @@
<string name="keywords_wifi_calling" msgid="3554052148729818521">"wifi, wi-fi, कल गर्नुहोस्, कल गर्दै"</string>
<string name="keywords_display" msgid="355147521915213375">"स्क्रिन, टचस्क्रिन"</string>
<string name="keywords_display_brightness_level" msgid="7649410848561920512">"मधुरो स्क्रिन, टचस्क्रिन, ब्याट्री, चहकिलो"</string>
- <string name="keywords_display_night_display" msgid="3647370193110044967">"मधुरो स्क्रिन, रात, टिन्ट, रात्रि ड्युटी, उज्यालोपन, स्क्रिनको रङ, रङ"</string>
+ <string name="keywords_display_night_display" msgid="3647370193110044967">"मधुरो स्क्रिन, रात, टिन्ट, रात्रि ड्युटी, उज्यालोपन, स्क्रिनको रङ्ग, रङ्ग"</string>
<string name="keywords_display_wallpaper" msgid="1202089324795933197">"पृष्ठभूमि, निजीकृत गर्नुहोस्, प्रदर्शन आफू अनुकूल गर्नुहोस्"</string>
<string name="keywords_display_font_size" msgid="1496431330244040196">"पाठको आकार"</string>
<string name="keywords_display_cast_screen" msgid="5744566533025100355">"परियोजना, कास्ट, स्क्रिनको प्रतिविम्ब बनाउने, स्क्रिन आदान प्रदान गर्ने, प्रतिविम्ब बनाउने, स्क्रिन आदान प्रदान, स्क्रिन कास्टिङ"</string>
@@ -3083,12 +3085,12 @@
<string name="keywords_users" msgid="5880705776023155640">"प्रतिबन्ध, प्रतिबन्ध लगाउनुहोस्, प्रतिबन्धित"</string>
<string name="keywords_keyboard_and_ime" msgid="3327265741354129990">"पाठ सच्याइ, सही, ध्वनि, कम्पन, स्वतः, भाषा, इसारा, सुझाव दिनु, सुझाव, विषयवस्तु, अपमानजनक, शब्द, प्रकार, इमोजी, अन्तर्राष्ट्रिय"</string>
<string name="keywords_reset_apps" msgid="2645701455052020435">"रिसेट गर्नुहोस्, प्राथमिकताहरू, पूर्वनिर्धारित"</string>
- <string name="keywords_all_apps" msgid="846444448435698930">"अनुप्रयोगहरू, डाउनलोड, अनुप्रयोगहरू, प्रणाली"</string>
- <string name="keywords_app_permissions" msgid="8539841019997048500">"अनुप्रयोगहरू, अनुमतिहरू, सुरक्षा"</string>
- <string name="keywords_default_apps" msgid="7435952699323965532">"अनुप्रयोगहरू, पूर्वनिर्धारित"</string>
- <string name="keywords_ignore_optimizations" msgid="9127632532176249438">"अनुकूलनहरूलाई बेवास्ता गर्नुहोस्, डोज, अनुप्रयोग स्ट्यान्डबाइ"</string>
- <string name="keywords_color_mode" msgid="8893345199519181751">"चम्किलो RGB, sRGB, रङ, प्राकृतिक, मानक"</string>
- <string name="keywords_color_temperature" msgid="2255253972992035046">"रङ, तापक्रम, D65, D73, सेतो, पहेँलो, नीलो, न्यानो, शीतल"</string>
+ <string name="keywords_all_apps" msgid="846444448435698930">"एपहरू, डाउनलोड, एपहरू, प्रणाली"</string>
+ <string name="keywords_app_permissions" msgid="8539841019997048500">"एपहरू, अनुमतिहरू, सुरक्षा"</string>
+ <string name="keywords_default_apps" msgid="7435952699323965532">"एपहरू, पूर्वनिर्धारित"</string>
+ <string name="keywords_ignore_optimizations" msgid="9127632532176249438">"अनुकूलनहरूलाई बेवास्ता गर्नुहोस्, डोज, एप स्ट्यान्डबाइ"</string>
+ <string name="keywords_color_mode" msgid="8893345199519181751">"चम्किलो RGB, sRGB, रङ्ग, प्राकृतिक, मानक"</string>
+ <string name="keywords_color_temperature" msgid="2255253972992035046">"रङ्ग, तापक्रम, D65, D73, सेतो, पहेँलो, निलो, न्यानो, शीतल"</string>
<string name="keywords_lockscreen" msgid="4936846554280830394">"अनलक गर्न स्लाइड गर्नुहोस्, पासवर्ड, ढाँचा, PIN"</string>
<string name="keywords_profile_challenge" msgid="8653718001253979611">"कार्य चुनौती, कार्य, प्रोफाइल"</string>
<string name="keywords_unification" msgid="2020759909366983593">"कार्यको प्रोफाइल, व्यवस्थापन गरिएको प्रोफाइल, एकरूपता ल्याउनु, एकरूपता, कार्य, प्रोफाइल"</string>
@@ -3102,8 +3104,8 @@
<string name="keywords_model_and_hardware" msgid="2743197096210895251">"क्रम संख्या, हार्डवेयरको संस्करण"</string>
<string name="keywords_android_version" msgid="4842749998088987740">"android को सुरक्षासम्बन्धी प्याचको स्तर, बेसब्यान्ड संस्करण, कर्नेल संस्करण"</string>
<string name="keywords_dark_ui_mode" msgid="1027966176887770318">"विषयवस्तु, उज्यालो, अँध्यारो, मोड"</string>
- <string name="keywords_financial_apps_sms_access" msgid="3236014691838121857">"वित्तीय अनुप्रयोग, sms, अनुमति"</string>
- <string name="keywords_systemui_theme" msgid="9150908170417305866">"अँध्यारो विषयवस्तु"</string>
+ <string name="keywords_financial_apps_sms_access" msgid="3236014691838121857">"वित्तीय एप, sms, अनुमति"</string>
+ <string name="keywords_systemui_theme" msgid="9150908170417305866">"अँध्यारो थिम"</string>
<string name="keywords_device_feedback" msgid="6948977907405738490">"बग"</string>
<string name="keywords_ambient_display_screen" msgid="5873935693887583428">"परिवेशको प्रदर्शन, लक स्क्रिनको प्रदर्शन"</string>
<string name="keywords_lock_screen_notif" msgid="4914337222856805463">"लक स्क्रिनसम्बन्धी सूचना, सूचनाहरू"</string>
@@ -3132,11 +3134,11 @@
<string name="sound_settings_summary_vibrate" msgid="2194491116884798590">"घन्टी बजाउनेलाई कम्पनमा सेट गरिएको छ"</string>
<string name="sound_settings_summary_silent" msgid="899823817462768876">"घन्टी बजाउनेलाई मौनमा सेट गरिएको छ"</string>
<string name="sound_settings_example_summary" msgid="2091822107298841827">"८०% मा सेट गरिँदा घन्टीको भोल्युम"</string>
- <string name="media_volume_option_title" msgid="3553411883305505682">"मिडियाको आवाजको मात्रा"</string>
+ <string name="media_volume_option_title" msgid="3553411883305505682">"मिडियाको भोल्युम"</string>
<string name="remote_media_volume_option_title" msgid="6355710054191873836">"भोल्युम cast गर्नुहोस्"</string>
<string name="call_volume_option_title" msgid="5028003296631037334">"कलको भोल्युम"</string>
- <string name="alarm_volume_option_title" msgid="3184076022438477047">"अलार्मको आवाजको मात्रा"</string>
- <string name="ring_volume_option_title" msgid="2038924918468372264">"घन्टीको आवाजको मात्रा"</string>
+ <string name="alarm_volume_option_title" msgid="3184076022438477047">"अलार्मको भोल्युम"</string>
+ <string name="ring_volume_option_title" msgid="2038924918468372264">"घन्टीको भोल्युम"</string>
<string name="notification_volume_option_title" msgid="1358512611511348260">"ध्वनी सूचना"</string>
<string name="ringtone_title" msgid="1409086028485922583">"फोनको रिङटोन"</string>
<string name="notification_ringtone_title" msgid="2932960620843976285">"सूचना सम्बन्धी पूर्वनिर्धारित ध्वनि"</string>
@@ -3160,7 +3162,7 @@
<string name="emergency_tone_vibrate" msgid="5020068066905681181">"कम्पनहरू"</string>
<string name="boot_sounds_title" msgid="7583926202411353620">"यन्त्र सक्रिय हुँदाका ध्वनिहरू"</string>
<string name="live_caption_title" msgid="7926591158657997051">"लाइभ क्याप्सन"</string>
- <string name="live_caption_summary" msgid="9064771862352393125">"स्वचालित क्याप्सनहरूसम्बन्धी मिडिया"</string>
+ <string name="live_caption_summary" msgid="9064771862352393125">"मिडियाको स्वत: क्याप्सन बनाउनुहोस्"</string>
<string name="zen_mode_settings_summary_off" msgid="6929319200478424962">"कहिल्यै होइन"</string>
<plurals name="zen_mode_settings_summary_on" formatted="false" msgid="6061723291126091396">
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> समयतालिकाहरू सक्षम पारिए</item>
@@ -3194,28 +3196,28 @@
<string name="zen_mode_visual_signals_settings_subtitle" msgid="6608239691864638854">"सङ्केतहरूलाई देखिन दिनुहोस्"</string>
<string name="zen_mode_settings_category" msgid="5601680733422424922">"जब बाधा नपुर्याउनुहोस् सक्रिय छ"</string>
<string name="zen_mode_restrict_notifications_title" msgid="7486753018073540477">"सूचनाहरूलाई प्रतिबन्ध लगाउनुहोस्"</string>
- <string name="zen_mode_restrict_notifications_mute" msgid="2673665450311184875">"सूचनाहरूको कुनै पनि ध्वनि छैन"</string>
+ <string name="zen_mode_restrict_notifications_mute" msgid="2673665450311184875">"सूचना आउँदा साउन्ड नआओस्"</string>
<string name="zen_mode_restrict_notifications_mute_summary" msgid="1696217042353376674">"तपाईं आफ्नो स्क्रिनमा सूचनाहरू देख्नु हुने छ"</string>
<string name="zen_mode_restrict_notifications_mute_footer" msgid="3049522809520549054">"सूचनाहरू आउँदा तपाईंको फोनले आवाज निकाल्ने वा कम्पन गर्ने छैन।"</string>
- <string name="zen_mode_restrict_notifications_hide" msgid="3296933643539682552">"सूचनाहरूको कुनै पनि भिजुअल वा ध्वनि छैन"</string>
+ <string name="zen_mode_restrict_notifications_hide" msgid="3296933643539682552">" सूचना आउँदा भिजुअल वा साउन्ड नआओस्"</string>
<string name="zen_mode_restrict_notifications_hide_summary" msgid="1449301153755270168">"तपाईं सूचनाहरू देख्न वा सुन्न सक्नु हुने छैन।"</string>
<string name="zen_mode_restrict_notifications_hide_footer" msgid="7617688597593946765">"तपाईंको फोनले नयाँ वा विद्यमान सूचनाहरूका हकमा उक्त सूचना देखाउने, कम्पन गर्ने वा घन्टी बजाउने कार्य गर्ने छैन। फोनको क्रियाकलाप वा स्थितिसम्बन्धी महत्त्वपूर्ण सूचनाहरू देखिने क्रम भने जारी नै रहने छ भन्ने कुरा ख्याल गर्नुहोस्।\n\nतपाईंले बाधा नपुऱ्याउनुहोस् नामक सुविधा निष्क्रिय पार्नुभएका बेला आफ्नो स्क्रिनको सिरानबाट फेदतर्फ स्क्रोल गरी छुटेका सूचनाहरू फेला पार्न सक्नुहुन्छ।"</string>
<string name="zen_mode_restrict_notifications_custom" msgid="3167252482570424133">"आफू अनुकूल"</string>
<string name="zen_mode_restrict_notifications_enable_custom" msgid="6376983315529894440">"आफू अनुकूल सेटिङ सक्षम पार्नुहोस्"</string>
<string name="zen_mode_restrict_notifications_disable_custom" msgid="8004212081465043044">"आफू अनुकूल सेटिङ हटाउनुहोस्"</string>
- <string name="zen_mode_restrict_notifications_summary_muted" msgid="1075196788469381282">"सूचनाहरूको कुनै पनि ध्वनि छैन"</string>
+ <string name="zen_mode_restrict_notifications_summary_muted" msgid="1075196788469381282">"सूचना आउँदा साउन्ड नआओस्"</string>
<string name="zen_mode_restrict_notifications_summary_custom" msgid="4982187708274505748">"आंशिक रूपमा लुकेको"</string>
- <string name="zen_mode_restrict_notifications_summary_hidden" msgid="7637206880685474111">"सूचनाहरूको कुनै पनि भिजुअल वा ध्वनि छैन"</string>
+ <string name="zen_mode_restrict_notifications_summary_hidden" msgid="7637206880685474111">" सूचना आउँदा भिजुअल वा साउन्ड नआओस्"</string>
<string name="zen_mode_what_to_block_title" msgid="2142809942549840800">"आफू अनुकूल बन्देजहरू"</string>
<string name="zen_mode_block_effects_screen_on" msgid="1042489123800404560">"स्क्रिन सक्रिय रहेको अवस्थामा"</string>
<string name="zen_mode_block_effects_screen_off" msgid="6380935819882837552">"स्क्रिन निष्क्रिय रहेको अवस्थामा"</string>
<string name="zen_mode_block_effect_sound" msgid="1499243540186357631">"ध्वनि र कम्पनलाई म्यूट गर्नुहोस्"</string>
<string name="zen_mode_block_effect_intent" msgid="5666951244667422668">"स्क्रिन सक्रिय नगर्नुहोस्"</string>
<string name="zen_mode_block_effect_light" msgid="8679333758037487644">"बत्तीलाई धिपधिपाउन नदिनुहोस्"</string>
- <string name="zen_mode_block_effect_peek" msgid="6075662813575910221">"स्क्रिनमा सूचनाहरू पप गर्न नदिनुहोस्"</string>
+ <string name="zen_mode_block_effect_peek" msgid="6075662813575910221">"स्क्रिनमा सूचनाहरू स्क्रिनमा सूचनाहरू देखिन नदिनुहोस्"</string>
<string name="zen_mode_block_effect_status" msgid="6516614225115681068">"स्क्रीनको शीर्षमा वस्तुस्थिति पट्टीका आइकनहरू लुकाउनुहोस्"</string>
- <string name="zen_mode_block_effect_badge" msgid="3891743027347075136">"अनुप्रयोग आइकनमा सूचनाको प्रतीक जनाउने थोप्लो लुकाउनुहोस्"</string>
- <string name="zen_mode_block_effect_ambient" msgid="6382013125863616197">"सूचनाहरूका लागि सक्रिय नगर्नुहोस्"</string>
+ <string name="zen_mode_block_effect_badge" msgid="3891743027347075136">"एप आइकनमा सूचनाको प्रतीक जनाउने थोप्लो लुकाउनुहोस्"</string>
+ <string name="zen_mode_block_effect_ambient" msgid="6382013125863616197">"सूचना आउँदा सक्रिय नहोस्"</string>
<string name="zen_mode_block_effect_list" msgid="6081548478844912181">"सूचनाको सूचीबाट लुकाउनुहोस्"</string>
<string name="zen_mode_block_effect_summary_none" msgid="7166175186759564510">"कहिल्यै होइन"</string>
<string name="zen_mode_block_effect_summary_screen_off" msgid="2985086455557755722">"स्क्रिन निष्क्रिय रहेको अवस्थामा"</string>
@@ -3223,17 +3225,17 @@
<string name="zen_mode_block_effect_summary_sound" msgid="4907185880913861880">"ध्वनि र कम्पन"</string>
<string name="zen_mode_block_effect_summary_some" msgid="6035118904496072665">"सुचनाहरूका ध्वनि, कम्पन र केही भिजुअल संकेतहरू"</string>
<string name="zen_mode_block_effect_summary_all" msgid="2830443565687247759">"सुचनाहरूका ध्वनि, कम्पन र भिजुअल संकेतहरू"</string>
- <string name="zen_mode_blocked_effects_footer" msgid="4375156159613413924">"सामान्य फोन गतिविधिको सूचना आवश्यक हुन्छ र स्थिति कहिल्यै लुक्ने छैन"</string>
+ <string name="zen_mode_blocked_effects_footer" msgid="4375156159613413924">"फोन सामान्य रूपले चल्न आवश्यक क्रियाकलाप र स्टाटस कहिलै पनि लुकाइँदैन"</string>
<string name="zen_mode_no_exceptions" msgid="3099578343994492857">"कुनै पनि होइन"</string>
<string name="zen_mode_other_options" msgid="7216192179063769057">"अन्य विकल्पहरू"</string>
<string name="zen_mode_add" msgid="2533484377786927366">"थप्नुहोस्"</string>
<string name="zen_mode_enable_dialog_turn_on" msgid="6396050543542026184">"सक्रिय गर्नुहोस्"</string>
<string name="zen_mode_button_turn_on" msgid="1097964136225943415">"अहिले नै सक्रिय गर्नुहोस्"</string>
- <string name="zen_mode_button_turn_off" msgid="3990967728457149454">"अहिले नै निष्क्रिय पार्नुहोस्"</string>
+ <string name="zen_mode_button_turn_off" msgid="3990967728457149454">"अहिले नै अफ गर्नुहोस्"</string>
<string name="zen_mode_settings_dnd_manual_end_time" msgid="4307574188962071429">"<xliff:g id="FORMATTED_TIME">%s</xliff:g> सम्म बाधा नपुर्याउनुहोस् नामक मोड सक्रिय हुन्छ"</string>
<string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"तपाईंले निष्क्रिय नपारेसम्म बाधा नपुर्याउनुहोस् नामक मोड सक्रिय रहनेछ"</string>
<string name="zen_mode_settings_dnd_automatic_rule" msgid="2843297614114625408">"(<xliff:g id="RULE_NAME">%s</xliff:g>) नामक समयतालिकाले बाधा नपुर्याउनुहोस् नामक मोडलाई स्वतः सक्रिय गरेको थियो"</string>
- <string name="zen_mode_settings_dnd_automatic_rule_app" msgid="5103454923160912313">"कुनै अनुप्रयोग <xliff:g id="APP_NAME">%s</xliff:g> ले बाधा नपुर्याउनुहोस् नामक मोडलाई स्वतः सक्रिय गर्यो"</string>
+ <string name="zen_mode_settings_dnd_automatic_rule_app" msgid="5103454923160912313">"कुनै एप <xliff:g id="APP_NAME">%s</xliff:g> ले बाधा नपुर्याउनुहोस् नामक मोडलाई स्वतः सक्रिय गर्यो"</string>
<string name="zen_mode_settings_dnd_custom_settings_footer" msgid="6335108298640066560">"बाधा नपुऱ्याउनुहोस् नामक मोड आफू अनुकूल सेटिङहरू भएका <xliff:g id="RULE_NAMES">%s</xliff:g> का लागि सक्रिय छ।"</string>
<string name="zen_mode_settings_dnd_custom_settings_footer_link" msgid="4007974052885089379"><annotation id="link">" आफू अनुकूल सेटिङहरू हेर्नुहोस्"</annotation></string>
<string name="zen_interruption_level_priority" msgid="9178419297408319234">"प्राथमिकता मात्र"</string>
@@ -3273,8 +3275,8 @@
<string name="zen_msg_event_reminder_footer" msgid="164400918479831580">"बाधा नपुर्याउनुहोस् मोड सक्रिय भएका बेला तपाईंले माथि अनुमति दिनुभएका वस्तुहरूबाहेक सन्देश, रिमाइन्डर तथा कार्यक्रमहरूलाई म्युट गरिने छ। तपाईं आफ्ना साथीभाइ, परिवारजन वा अन्य सम्पर्कहरूलाई आफूसँग सम्पर्क राख्न दिने गरी सन्देशसम्बन्धी सेटिङहरू समायोजन गर्न सक्नुहुन्छ।"</string>
<string name="zen_onboarding_ok" msgid="6403635918125323678">"सम्पन्न भयो"</string>
<string name="zen_onboarding_settings" msgid="1416466597876383322">"सेटिङहरू"</string>
- <string name="zen_onboarding_new_setting_title" msgid="3622673375041304362">"सूचनाहरूको कुनै पनि भिजुअल वा ध्वनि छैन"</string>
- <string name="zen_onboarding_current_setting_title" msgid="2560330551761407563">"सूचनाहरूको कुनै पनि ध्वनि छैन"</string>
+ <string name="zen_onboarding_new_setting_title" msgid="3622673375041304362">" सूचना आउँदा भिजुअल वा साउन्ड नआओस्"</string>
+ <string name="zen_onboarding_current_setting_title" msgid="2560330551761407563">"सूचना आउँदा साउन्ड नआओस्"</string>
<string name="zen_onboarding_new_setting_summary" msgid="8264430315983860075">"तपाईं सूचनाहरू देख्न वा सुन्न सक्नु हुने छैन। ताराङ्कित सम्पर्क ठेगाना तथा बारम्बार कल गर्ने व्यक्तिका कलहरू।"</string>
<string name="zen_onboarding_current_setting_summary" msgid="3569246708507270821">"(हालको सेटिङ)"</string>
<string name="zen_onboarding_dnd_visual_disturbances_header" msgid="7584229011611927613">"बाधा नपुर्याउनुहोस् नामक मोडका सूचनासम्बन्धी सेटिङहरू बदल्ने हो?"</string>
@@ -3293,7 +3295,7 @@
<string name="ringtones_category_preference_title" msgid="4491932700769815470">"रिङटोनहरू"</string>
<string name="other_sound_category_preference_title" msgid="2045757472469840859">"ध्वनि र कम्पन सम्बन्धी अन्य कुराहरू"</string>
<string name="configure_notification_settings" msgid="291914315140851270">"सूचनाहरू"</string>
- <string name="recent_notifications" msgid="8125865995065032049">"हालै पठाइएका अनुप्रयोगहरू"</string>
+ <string name="recent_notifications" msgid="8125865995065032049">"हालै पठाइएका एपहरू"</string>
<string name="recent_notifications_see_all_title" msgid="4089007770442871469">"विगत ७ दिनयताका सबै हेर्नुहोस्"</string>
<string name="advanced_section_header" msgid="984680389373090015">"उन्नत"</string>
<string name="profile_section_header" msgid="5471479005472037417">"कार्यका सूचनाहरू"</string>
@@ -3302,7 +3304,7 @@
<string name="asst_capabilities_actions_replies_title" msgid="3929395108744251338">"स्मार्ट कारबाही र जवाफहरू"</string>
<string name="asst_capabilities_actions_replies_summary" msgid="5647029698181357902">"सान्दर्भिक सूचनासम्बन्धी कार्यहरू र सूचनाका द्रुत जवाफहरू स्वतः थप्नुहोस्"</string>
<string name="hide_silent_icons_title" msgid="1070905516921542662">"मौन सूचनाको स्थितिका आइकनहरू लुकाउनुहोस्"</string>
- <string name="hide_silent_icons_summary" msgid="2624346914488256888">"वस्तुस्थिति पट्टीमा मौन सूचनाका आइकनहरू लुकाउनुहोस्"</string>
+ <string name="hide_silent_icons_summary" msgid="2624346914488256888">"स्टाटस बारमा मौन सूचनाका आइकनहरू लुकाउनुहोस्"</string>
<string name="notification_badging_title" msgid="6311699476970264712">"सूचनाको प्रतीक जनाउने थोप्लोहरूलाई अनुमति दिनुहोस्"</string>
<string name="notification_bubbles_title" msgid="9196562435741861317">"बबलहरू"</string>
<string name="notification_bubbles_summary" msgid="4624512775901949578">"तैरने सर्टकटहरूको प्रयोग गरी अनुप्रयोगका सामग्रीमाथि जुनसुकै ठाउँबाट द्रुत पहुँच राख्नुहोस्"</string>
@@ -3310,7 +3312,7 @@
<string name="bubbles_app_toggle_title" msgid="6401217027603326439">"बबलहरू"</string>
<string name="bubbles_app_toggle_summary" msgid="7707611139796553855">"<xliff:g id="APP_NAME">%1$s</xliff:g> लाई केही सूचनाहरू बबलका रूपमा देखाउन दिनुहोस्"</string>
<string name="bubbles_feature_disabled_dialog_title" msgid="3375452386012079293">"बबलहरू सक्रिय पार्नुहोस्"</string>
- <string name="bubbles_feature_disabled_dialog_text" msgid="326945485806386477">"यस अनुप्रयोगमा बबल सक्रिय गर्न सर्वप्रथम तपाईंले आफ्नो यन्त्रमा तिनीहरूलाई सक्रिय गर्नु पर्ने हुन्छ यस कार्यले तपाईंले यसअघि बबलहरू सक्रिय गर्नुभएका अन्य अनुप्रयोगहरूमा प्रभाव पार्छ।"</string>
+ <string name="bubbles_feature_disabled_dialog_text" msgid="326945485806386477">"यस अनुप्रयोगमा बबल सक्रिय गर्न सर्वप्रथम तपाईंले आफ्नो यन्त्रमा तिनीहरूलाई सक्रिय गर्नु पर्ने हुन्छ यस कार्यले तपाईंले यसअघि बबलहरू सक्रिय गर्नुभएका अन्य एपहरूमा प्रभाव पार्छ।"</string>
<string name="bubbles_feature_disabled_button_approve" msgid="6661464849674493351">"यन्त्रमा सक्रिय गर्नुहोस्"</string>
<string name="bubbles_feature_disabled_button_cancel" msgid="4807286844588486198">"रद्द गर्नुहोस्"</string>
<string name="swipe_direction_title" msgid="7535031630668873009">"कारबाहीहरू स्वाइप गर्नुहोस्"</string>
@@ -3319,7 +3321,7 @@
<string name="notification_pulse_title" msgid="4861418327614907116">"झिम झिम गर्ने बत्ती"</string>
<string name="lock_screen_notifications_title" msgid="6889072265118747835">"लक स्क्रिनमा"</string>
<string name="locked_work_profile_notification_title" msgid="8307025804986190658">"कार्य प्रोफाइल लक हुँदा"</string>
- <string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"सबै सूचना सामग्री देखाउनुहोस्"</string>
+ <string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"सबै सूचना देखाउनुहोस्"</string>
<string name="lock_screen_notifications_summary_hide" msgid="3668806866535260143">"संवेदनशील सामग्री लुकाउनुहोस्"</string>
<string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"कुनै सूचनाहरू नदेखाउनुहोस्"</string>
<string name="lock_screen_notifications_interstitial_message" msgid="4230189215124387818">"तपाईंको उपकरण बन्द हुँदा, तपाईं कसरी सूचनाहरू देखाउन चाहनुहुन्छ?"</string>
@@ -3348,7 +3350,7 @@
<string name="notification_silence_title" msgid="6959637402003838093">"मौन रूपमा देखाउनुहोस्"</string>
<string name="notification_alert_title" msgid="750683027055192648">"अलर्ट"</string>
<string name="allow_interruption" msgid="3548841026410702850">"अवरोधहरूहरूलाई अनुमति दिनुहोस्"</string>
- <string name="allow_interruption_summary" msgid="5207637026831135377">"अनुप्रयोगलाई बज्न, कम्पन गर्न र/वा स्क्रिनमा सूचनाहरू पप गर्न दिनुहोस्"</string>
+ <string name="allow_interruption_summary" msgid="5207637026831135377">"एपलाई बज्न, कम्पन गर्न र/वा स्क्रिनमा सूचनाहरू पप गर्न दिनुहोस्"</string>
<string name="notification_channel_summary_min" msgid="8646305539478179811">"न्यून महत्त्वको सूचना"</string>
<string name="notification_channel_summary_low" msgid="7753266237705850510">"सामान्य महत्वको सूचना"</string>
<string name="notification_channel_summary_default" msgid="7529537115678964164">"उच्च महत्त्वको सूचना"</string>
@@ -3360,38 +3362,38 @@
<string name="notifications_sent_never" msgid="237997329598144638">"कहिल्यै होइन"</string>
<string name="manage_notification_access_title" msgid="5348743662189787547">"सूचनासम्बन्धी पहुँच"</string>
<string name="work_profile_notification_access_blocked_summary" msgid="8148871282484870576">"कार्य प्रोफाइलमाथिका पहुँच सम्बन्धी सूचनाहरूलाई बन्द गरिएको छ"</string>
- <string name="manage_notification_access_summary_zero" msgid="236809421271593016">"अनुप्रयोगहरूले सूचनाहरू पढ्न सक्दैन"</string>
+ <string name="manage_notification_access_summary_zero" msgid="236809421271593016">"एपहरूले सूचनाहरू पढ्न सक्दैन"</string>
<plurals name="manage_notification_access_summary_nonzero" formatted="false" msgid="8496218948429646792">
- <item quantity="other">%d अनुप्रयोगहरूले सूचनाहरू पढ्न सक्छन्</item>
+ <item quantity="other">%d एपहरूले सूचनाहरू पढ्न सक्छन्</item>
<item quantity="one">%d अनुप्रयोगले सूचनाहरू पढ्न सक्छ</item>
</plurals>
<string name="notification_assistant_title" msgid="8216604031352764011">"सूचनासम्बन्धी सहायक सेवा"</string>
<string name="no_notification_assistant" msgid="9140123568386413264">"सहायकसम्बन्धी कुनै सेवा छैन"</string>
- <string name="no_notification_listeners" msgid="1366386609506834717">"कुनै स्थापित अनुप्रयोगहरूले सूचना पहुँच अनुरोध गरेका छैनन्।"</string>
+ <string name="no_notification_listeners" msgid="1366386609506834717">"कुनै स्थापित एपहरूले सूचना पहुँच अनुरोध गरेका छैनन्।"</string>
<string name="notification_assistant_security_warning_title" msgid="4190584438086738496">"<xliff:g id="SERVICE">%1$s</xliff:g> लाई सूचनामाथि पहुँच राख्ने अनुमति दिने हो?"</string>
- <string name="notification_assistant_security_warning_summary" msgid="6924513399671031930">"<xliff:g id="NOTIFICATION_ASSISTANT_NAME">%1$s</xliff:g> ले सम्पर्कको नाम र तपाईंले प्राप्त गर्नुभएका पाठ सन्देशहरू जस्ता व्यक्तिगत जानकारीलगायत सबै सूचनाहरू पढ्न सक्ने छ। यसले सूचनाहरू परिमार्जन गर्न वा खारेज गर्न वा तिनमा रहेका कारबाहीमूलक बटनहरू ट्रिगर गर्न पनि सक्ने छ। \n\nयसले उक्त अनुप्रयोगलाई बाधा नपुऱ्याउनुहोस् नामक मोड सक्रिय गर्ने वा निष्क्रिय पार्ने र सम्बन्धित सेटिङहरू परिवर्तन गर्ने क्षमता पनि प्रदान गर्ने छ।"</string>
+ <string name="notification_assistant_security_warning_summary" msgid="6924513399671031930">"<xliff:g id="NOTIFICATION_ASSISTANT_NAME">%1$s</xliff:g> ले सम्पर्कको नाम र तपाईंले प्राप्त गर्नुभएका टेक्स्ट म्यासेजहरू जस्ता व्यक्तिगत जानकारीलगायत सबै सूचनाहरू पढ्न सक्ने छ। यसले सूचनाहरू परिमार्जन गर्न वा खारेज गर्न वा तिनमा रहेका कारबाहीमूलक बटनहरू ट्रिगर गर्न पनि सक्ने छ। \n\nयसले उक्त एपलाई बाधा नपुऱ्याउनुहोस् नामक मोड सक्रिय गर्ने वा निष्क्रिय पार्ने र सम्बन्धित सेटिङहरू परिवर्तन गर्ने क्षमता पनि प्रदान गर्ने छ।"</string>
<string name="notification_listener_security_warning_title" msgid="4902253246428777797">"<xliff:g id="SERVICE">%1$s</xliff:g> का लागि सूचना पहुँच अनुमति दिने हो?"</string>
- <string name="notification_listener_security_warning_summary" msgid="4454702907350100288">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> तपाईँले पाउनुहुने सन्देशहरूका सम्पर्कका नाम र पाठ जस्ता व्यक्तिगत जानकारी लगायत सबै सूचनाहरूलाई पढ्न सक्षम हुनेछ। यसले सूचनाहरूलाई खारेज गर्न वा तिनीहरूमा रहेका कारबाही सम्बन्धी बटनहरूलाई ट्रिगर गर्न पनि सक्नेछ। \n\nयसले अनुप्रयोगलाई बाधा नपुर्याउनुहोस् मोडलाई सक्रिय वा निष्क्रिय पार्ने र सम्बन्धित सेटिङहरूलाई परिवर्तन गर्ने क्षमता पनि दिनेछ।"</string>
+ <string name="notification_listener_security_warning_summary" msgid="4454702907350100288">"<xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> तपाईँले पाउनुहुने सन्देशहरूका सम्पर्कका नाम र पाठ जस्ता व्यक्तिगत जानकारी लगायत सबै सूचनाहरूलाई पढ्न सक्षम हुनेछ। यसले सूचनाहरूलाई खारेज गर्न वा तिनीहरूमा रहेका कारबाही सम्बन्धी बटनहरूलाई ट्रिगर गर्न पनि सक्नेछ। \n\nयसले एपलाई बाधा नपुर्याउनुहोस् मोडलाई सक्रिय वा निष्क्रिय पार्ने र सम्बन्धित सेटिङहरूलाई परिवर्तन गर्ने क्षमता पनि दिनेछ।"</string>
<string name="notification_listener_disable_warning_summary" msgid="162165151519082978">"यदि तपाईं <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> का लागि सूचना सम्बन्धी पहुँचलाई निष्क्रिय पार्नुहुन्छ भने बाधा नपुर्याउनुहोस् सम्बन्धी पहुँच पनि निष्क्रिय हुन सक्छ।"</string>
<string name="notification_listener_disable_warning_confirm" msgid="7863495391671154188">"निष्क्रिय पार्नुहोस्"</string>
<string name="notification_listener_disable_warning_cancel" msgid="6264631825225298458">"रद्द गर्नुहोस्"</string>
<string name="vr_listeners_title" msgid="511483902408792832">"VR का सहायक सेवाहरू"</string>
- <string name="no_vr_listeners" msgid="7675484190394450979">"कुनै पनि स्थापित अनुप्रयोगहरूले VR का सहायक सेवाहरूको रूपमा चल्नका लागि अनुरोध गरेका छैनन्।"</string>
+ <string name="no_vr_listeners" msgid="7675484190394450979">"कुनै पनि स्थापित एपहरूले VR का सहायक सेवाहरूको रूपमा चल्नका लागि अनुरोध गरेका छैनन्।"</string>
<string name="vr_listener_security_warning_title" msgid="7019322246707645361">"<xliff:g id="SERVICE">%1$s</xliff:g> लाई VR को सेवामा पहुँचका लागि अनुमति दिने हो?"</string>
<string name="vr_listener_security_warning_summary" msgid="5093225583584522067">"तपाईँले अनुप्रयोगहरूलाई भर्चुअल रियालिटी मोडमा प्रयोग गरिरहेको बेला <xliff:g id="VR_LISTENER_NAME">%1$s</xliff:g> चल्नका लागि सक्षम हुनेछ।"</string>
<string name="display_vr_pref_title" msgid="1088464812293416981">"यन्त्र VR मा हुँदा"</string>
<string name="display_vr_pref_low_persistence" msgid="3132583929174794245">"अस्पष्टता कम पार्नुहोस् (सिफारिस गरिएको)"</string>
<string name="display_vr_pref_off" msgid="4681320968818852691">"स्क्रिन झिलमिलाउने प्रभाव कम गर्नुहोस्"</string>
<string name="picture_in_picture_title" msgid="4960733106166035448">"Picture-in-picture"</string>
- <string name="picture_in_picture_empty_text" msgid="8664071475324685241">"स्थापना गरिएका कुनै पनि अनुप्रयोगहरूले Picture-in-picture मोडलाई समर्थन गर्दैनन्"</string>
- <string name="picture_in_picture_keywords" msgid="7326958702002259262">"तस्बिरमा तस्बिर मोडमा तस्बिर"</string>
+ <string name="picture_in_picture_empty_text" msgid="8664071475324685241">"स्थापना गरिएका कुनै पनि एपहरूले Picture-in-picture मोडलाई समर्थन गर्दैनन्"</string>
+ <string name="picture_in_picture_keywords" msgid="7326958702002259262">"फोटोमा फोटो मोडमा फोटो"</string>
<string name="picture_in_picture_app_detail_title" msgid="3916189052657425936">"Picture-in-picture"</string>
<string name="picture_in_picture_app_detail_switch" msgid="747422998967185418">"Picture-in-picture लाई अनुमति दिनुहोस्"</string>
- <string name="picture_in_picture_app_detail_summary" msgid="918632751775525347">"यो अनुप्रयोग खुला रहेको अवस्थामा वा तपाईंले यसलाई छाड्नुभएपछि (उदाहरणका लागि, भिडियो हेर्ने कार्य जारी राख्न) यस अनुप्रयोगलाई picture-in-picture विन्डो सिर्जना गर्न अनुमति दिनुहोस्। यो विन्डो तपाईंले प्रयोग गरिरहनुभएका अन्य अनुप्रयोगहरूको शीर्ष भागमा देखिन्छ।"</string>
- <string name="manage_zen_access_title" msgid="3058206309728524196">"पहुँचमा बाधा नपुर्यानुहोस्"</string>
+ <string name="picture_in_picture_app_detail_summary" msgid="918632751775525347">"यो एप खुला रहेको अवस्थामा वा तपाईंले यसलाई छाड्नुभएपछि (उदाहरणका लागि, भिडियो हेर्ने कार्य जारी राख्न) यस एपलाई picture-in-picture विन्डो सिर्जना गर्न अनुमति दिनुहोस्। यो विन्डो तपाईंले प्रयोग गरिरहनुभएका अन्य एपहरूको शीर्ष भागमा देखिन्छ।"</string>
+ <string name="manage_zen_access_title" msgid="3058206309728524196">"बाधा नपुर्यानुहोस् पहुँच"</string>
<string name="zen_access_detail_switch" msgid="8706332327904974500">"बाधा नपुर्याउनुहोस् नामक सुविधा सक्रिय गर्ने अनुमति दिनुहोस्"</string>
- <string name="zen_access_empty_text" msgid="7667538993781607731">"कुनै पनि स्थापित अनुप्रयोगहरू द्वारा पहुँचमा बाधा नपुर्यानुहोस् को माग गरेका छैनन्"</string>
- <string name="loading_notification_apps" msgid="1978345231934072091">"अनुप्रयोगहरू लोड हुँदै..."</string>
+ <string name="zen_access_empty_text" msgid="7667538993781607731">"कुनै पनि स्थापित एपहरू द्वारा बाधा नपुर्यानुहोस् पहुँच को माग गरेका छैनन्"</string>
+ <string name="loading_notification_apps" msgid="1978345231934072091">"एपहरू लोड हुँदै..."</string>
<string name="app_notifications_off_desc" msgid="3904090905748895146">"तपाईंको अनुरोधबमोजिम Android ले यस अनुप्रयोगका सूचनाहरूलाई यो यन्त्रमा देखाउन दिइरहेको छैन"</string>
<string name="channel_notifications_off_desc" msgid="8005444443218306611">"तपाईंको अनुरोधबमोजिम Android ले सूचनाहरूको यस कोटिलाई यो यन्त्रमा देखिन दिइरहेको छैन"</string>
<string name="channel_group_notifications_off_desc" msgid="7154205544298672850">"तपाईंको अनुरोधबमोजिम Android ले सूचनाहरूको यस समूहलाई यो यन्त्रमा देखाउन दिइरहेको छैन"</string>
@@ -3403,7 +3405,7 @@
</plurals>
<string name="no_channels" msgid="8884254729302501652">"यो अनुप्रयोगले कुनै पनि सूचना पोस्ट गरेको छैन"</string>
<string name="app_settings_link" msgid="8465287765715790984">"अनुप्रयोगका अतिरिक्त सेटिङहरू"</string>
- <string name="app_notification_listing_summary_zero" msgid="4047782719487686699">"सबै अनुप्रयोगहरूमा सक्रिय छ"</string>
+ <string name="app_notification_listing_summary_zero" msgid="4047782719487686699">"सबै एपहरूमा सक्रिय छ"</string>
<plurals name="app_notification_listing_summary_others" formatted="false" msgid="1161774065480666519">
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> अनुप्रयोगहरूका लागि निष्क्रिय पारिएका छन्</item>
<item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> अनुप्रयोगका लागि निष्क्रिय परिएको छ</item>
@@ -3487,7 +3489,7 @@
<string name="zen_mode_messages" msgid="2908722562188394107">"पाठ सन्देशलाई अनुमति दिनुहोस्"</string>
<string name="zen_mode_messages_footer" msgid="5048951937714668561">"अनुमति दिइएका सन्देशहरू आउँदा घन्टी बज्छ भन्ने कुरा सुनिश्चित गर्न आफ्नो यन्त्रलाई घन्टी बज्ने, कम्पन हुने वा मौन रहनेमध्ये कुन चाहिँ विकल्पमा सेट गरिएको छ भन्ने कुरा जाँच गर्नुहोस्।"</string>
<string name="zen_mode_custom_messages_footer" msgid="5566007423100361691">"‘<xliff:g id="SCHEDULE_NAME">%1$s</xliff:g>’ का आगमन पाठ सन्देशहरूलाई रोक लगाइएको छ। तपाईं आफ्ना साथीभाइ, परिवारजन वा अन्य सम्पर्कहरूलाई आफूसँग सम्पर्क राख्न दिने गरी सेटिङहरू समायोजन गर्न सक्नुहुन्छ।"</string>
- <string name="zen_mode_messages_title" msgid="786261471294055181">"SMS, MMS र सन्देश प्रवाह गर्ने अनुप्रयोग"</string>
+ <string name="zen_mode_messages_title" msgid="786261471294055181">"SMS, MMS र सन्देश प्रवाह गर्ने एप"</string>
<string name="zen_mode_from_anyone" msgid="7778836826814131083">"कसैबाट"</string>
<string name="zen_mode_from_contacts" msgid="267034158294332688">"मात्र सम्पर्कहरूबाट"</string>
<string name="zen_mode_from_starred" msgid="7349984569117392260">"ताराङ्कित सम्पर्कहरूबाट मात्र"</string>
@@ -3502,12 +3504,12 @@
<string name="zen_mode_media" msgid="3701280649874724055">"मिडियाका ध्वनिहरू प्ले गर्नुहोस्"</string>
<string name="zen_mode_media_list" msgid="509327580522287125">"मिडिया"</string>
<string name="zen_mode_system" msgid="597437265986355038">"छुवाइसम्बन्धी ध्वनि अनुमति दिनुहोस्"</string>
- <string name="zen_mode_system_list" msgid="480192458506838077">"छुवाइसम्बन्धी ध्वनि"</string>
+ <string name="zen_mode_system_list" msgid="480192458506838077">"टच गर्दा आउने आवाज"</string>
<string name="zen_mode_reminders" msgid="7560664194610054038">"रिमाइन्डरहरूलाई अनुमति दिनुहोस्"</string>
<string name="zen_mode_reminders_list" msgid="7347061314032326677">"रिमाइन्डरहरू"</string>
<string name="zen_mode_events" msgid="5784076928339534984">"कार्यक्रमहरूलाई अनुमति दिनुहोस्"</string>
<string name="zen_mode_bypassing_apps" msgid="3080739479028713449">"अनुप्रयोगहरूलाई ओभरराइड गर्ने अनुमति दिनुहोस्"</string>
- <string name="zen_mode_bypassing_apps_title" msgid="2115024664615538847">"अनुप्रयोगका अपवादहरू"</string>
+ <string name="zen_mode_bypassing_apps_title" msgid="2115024664615538847">"यो सेटिङ लागू हुने एप"</string>
<plurals name="zen_mode_bypassing_apps_subtext" formatted="false" msgid="8723144434730871572">
<item quantity="other"><xliff:g id="NUMBER">%1$d</xliff:g> अनुप्रयोगका सूचनाहरूले बाधा नपुऱ्याउनुहोस् नामक मोडलाई ओभरराइड गर्न सक्छन्</item>
<item quantity="one">१ अनुप्रयोगका सूचनाहरूले बाधा नपुऱ्याउनुहोस् नामक मोडलाई ओभरराइड गर्न सक्छन्</item>
@@ -3517,8 +3519,8 @@
<string name="zen_mode_contacts_callers" msgid="3116829245339716399">"सम्पर्क ठेगानाहरू"</string>
<string name="zen_mode_starred_callers" msgid="1317376207713013472">"ताराङ्कित सम्पर्कहरू"</string>
<string name="zen_mode_repeat_callers" msgid="1435309867554692340">"कलरहरू दोरोर्याउनुहोस्"</string>
- <string name="zen_mode_repeat_callers_list" msgid="2750270907597457279">"कलरहरू दोहोर्याउनुहोस्"</string>
- <string name="zen_mode_repeat_callers_title" msgid="7192952181541813487">"दोहोरिएका कल गर्ने व्यक्तिहरूलाई अनुमति दिनुहोस्"</string>
+ <string name="zen_mode_repeat_callers_list" msgid="2750270907597457279">"धेरै कल गर्ने व्यक्तिहरू"</string>
+ <string name="zen_mode_repeat_callers_title" msgid="7192952181541813487">"धेरै कल गर्ने व्यक्तिहरू"</string>
<string name="zen_mode_calls_summary_one" msgid="8327371053236689649">"<xliff:g id="CALLER_TYPE">%1$s</xliff:g> का कललाई अनुमति दिनुहोस्"</string>
<string name="zen_mode_calls_summary_two" msgid="9017678770532673578">"<xliff:g id="CALLER_TYPE">%1$s</xliff:g> र <xliff:g id="CALLERT_TPYE">%2$s</xliff:g> का कललाई अनुमति दिनुहोस्"</string>
<string name="zen_mode_repeat_callers_summary" msgid="1752513516040525545">"एउटै व्यक्तिले <xliff:g id="MINUTES">%d</xliff:g> मिनेटको अवधिमा दोस्रो पटक कल गरेको खण्डमा"</string>
@@ -3553,7 +3555,7 @@
<string name="switch_on_text" msgid="7100491749799298324">"सक्रिय"</string>
<string name="switch_off_text" msgid="3539551289454353555">"निष्क्रिय"</string>
<string name="screen_pinning_title" msgid="578020318289781102">"पर्दा पिन गर्दै"</string>
- <string name="screen_pinning_description" msgid="3814537379086412278">"यो सेटिङ सक्रिय गर्दा, हालको स्क्रिनलाई तपाईंले अनपिन नगरुन्जेल दृश्य अवस्थामा राख्न स्क्रिन पिनिङ प्रयोग गर्न सक्नुहुन्छ।\n\nस्क्रिन पिनिङ सुविधा प्रयोग गर्न:\n\n१. स्क्रिन पिनिङ सक्रिय रहेको सुनिश्चित गर्नुहोस् \n\n२. ओभरभ्यू खोल्नुहोस्\n\n३. स्क्रिनको सिरानमा रहेको अनुप्रयोग आइकनमा ट्याप गरी पिनमा ट्याप गर्नुहोस्"</string>
+ <string name="screen_pinning_description" msgid="3814537379086412278">"यो सेटिङ सक्रिय गर्दा, हालको स्क्रिनलाई तपाईंले अनपिन नगरुन्जेल दृश्य अवस्थामा राख्न स्क्रिन पिनिङ प्रयोग गर्न सक्नुहुन्छ।\n\nस्क्रिन पिनिङ सुविधा प्रयोग गर्न:\n\n१. स्क्रिन पिनिङ सक्रिय रहेको सुनिश्चित गर्नुहोस् \n\n२. ओभरभ्यू खोल्नुहोस्\n\n३. स्क्रिनको सिरानमा रहेको एप आइकनमा ट्याप गरी पिनमा ट्याप गर्नुहोस्"</string>
<string name="screen_pinning_unlock_pattern" msgid="1060334707088339444">"पिन निकाल्नुअघि खोल्ने ढाँचा सोध्नुहोस्"</string>
<string name="screen_pinning_unlock_pin" msgid="1441705536015645023">"पिन निकाल्नुअघि PIN सोध्नुहोस्"</string>
<string name="screen_pinning_unlock_password" msgid="1017776884000170841">"पिन निकाल्नुअघि पासवर्ड सोध्नुहोस्"</string>
@@ -3582,7 +3584,7 @@
<string name="encrypt_talkback_dialog_message_pin" msgid="1912533826818077891">"यो उपकरण सुरु गर्न जब तपाईँले आफ्नो PIN प्रविष्टि गर्नुहुन्छ, पहुँच सेवा जस्तै <xliff:g id="SERVICE">%1$s</xliff:g> अझै उपलब्ध हुने छैन।"</string>
<string name="encrypt_talkback_dialog_message_pattern" msgid="4415837749933863432">"यो उपकरण सुरु गर्न जब तपाईँले आफ्नो ढाँचा प्रविष्टि गर्नुहुन्छ, पहुँच सेवा जस्तै <xliff:g id="SERVICE">%1$s</xliff:g> अझै उपलब्ध हुने छैन।"</string>
<string name="encrypt_talkback_dialog_message_password" msgid="4276703366120881008">"यो उपकरण सुरु गर्न जब तपाईँले आफ्नो पासवर्ड प्रविष्टि गर्नुहुन्छ, पहुँच सेवा <xliff:g id="SERVICE">%1$s</xliff:g> जस्तो अझै उपलब्ध हुने छैन।"</string>
- <string name="direct_boot_unaware_dialog_message" msgid="5253248227337914350">"टिपोट: तपाईंले आफ्नो फोन पुनः सुरु गर्नुभयो र त्यसमा स्क्रिन लक सेट गरिएको छ भने तपाईंले आफ्नो फोन अनलक नगरून्जेल यो अनुप्रयोग सुरु हुन सक्दैन"</string>
+ <string name="direct_boot_unaware_dialog_message" msgid="5253248227337914350">"टिपोट: तपाईंले आफ्नो फोन पुनः सुरु गर्नुभयो र त्यसमा स्क्रिन लक सेट गरिएको छ भने तपाईंले आफ्नो फोन अनलक नगरून्जेल यो एप सुरु हुन सक्दैन"</string>
<string name="imei_information_title" msgid="7666097743700170757">"IMEI जानकारी"</string>
<string name="imei_information_summary" msgid="716516316022275083">"IMEI सान्दर्भिक जानकारी"</string>
<string name="slot_number" msgid="785422579177068698">"(घेरा<xliff:g id="SLOT_NUM">%1$d</xliff:g>)"</string>
@@ -3629,29 +3631,29 @@
</plurals>
<string name="runtime_permissions_summary_no_permissions_granted" msgid="3477934429220828771">"कुनै अनुमतिहरू प्रदान गरिएको छैन"</string>
<string name="runtime_permissions_summary_no_permissions_requested" msgid="3901636077467389637">"कुनै अनुमतिहरू अनुरोध गरिएको छैन"</string>
- <string name="filter_all_apps" msgid="4042756539846043675">"सबै अनुप्रयोगहरू"</string>
- <string name="filter_enabled_apps" msgid="5888459261768538489">"स्थापना गरिएका अनुप्रयोगहरू"</string>
- <string name="filter_instant_apps" msgid="8087483282854072366">"तात्कालिक अनुप्रयोगहरू"</string>
+ <string name="filter_all_apps" msgid="4042756539846043675">"सबै एपहरू"</string>
+ <string name="filter_enabled_apps" msgid="5888459261768538489">"स्थापना गरिएका एपहरू"</string>
+ <string name="filter_instant_apps" msgid="8087483282854072366">"तात्कालिक एपहरू"</string>
<string name="filter_personal_apps" msgid="3473268022652904457">"व्यक्तिगत"</string>
<string name="filter_work_apps" msgid="4202483998339465542">"कार्य"</string>
- <string name="filter_notif_all_apps" msgid="1862666327228804896">"अनुप्रयोगहरू: सबै"</string>
+ <string name="filter_notif_all_apps" msgid="1862666327228804896">"एपहरू: सबै"</string>
<string name="filter_notif_blocked_apps" msgid="5694956954776028202">"निष्क्रिय पारियो"</string>
<string name="filter_notif_urgent_channels" msgid="5000735867167027148">"प्रकारहरू: अत्यन्तै महत्त्वका"</string>
<string name="filter_notif_low_channels" msgid="6859599463135775287">"प्रकारहरू: कम महत्त्वका"</string>
<string name="filter_notif_blocked_channels" msgid="6110799550327612670">"प्रकारहरू: निष्क्रिय पारिएका"</string>
<string name="filter_notif_dnd_channels" msgid="3251570137256371092">"प्रकारहरू: बाधा नपुर्याउनुहोस् मोडलाई ओभरराइड गर्ने"</string>
<string name="advanced_apps" msgid="6643869089344883537">"उन्नत"</string>
- <string name="configure_apps" msgid="4066683118857400943">"अनुप्रयोगहरू कन्फिगर गर्नुहोस्"</string>
- <string name="unknown_app" msgid="2312052973570376877">"अज्ञात अनुप्रयोग"</string>
+ <string name="configure_apps" msgid="4066683118857400943">"एपहरू कन्फिगर गर्नुहोस्"</string>
+ <string name="unknown_app" msgid="2312052973570376877">"अज्ञात एप"</string>
<string name="app_permissions" msgid="3215958256821756086">"अनुमतिका प्रबन्धक"</string>
- <string name="app_permissions_summary" msgid="8785798165776061594">"<xliff:g id="APPS">%1$s</xliff:g> प्रयोग गरिरहेका अनुप्रयोगहरू"</string>
+ <string name="app_permissions_summary" msgid="8785798165776061594">"<xliff:g id="APPS">%1$s</xliff:g> प्रयोग गरिरहेका एपहरू"</string>
<string name="tap_to_wake" msgid="1902991239401652323">"सक्रिय पार्न ट्याप गर्नुहोस्"</string>
<string name="tap_to_wake_summary" msgid="8485222120721006793">"यन्त्र सक्रिय पार्न स्क्रिनको जहाँसुकै दुई पटक ट्याप गर्नुहोस्"</string>
<string name="domain_urls_title" msgid="7939209950373945367">"लिंकहरू खोल्दै"</string>
<string name="domain_urls_summary_none" msgid="5401203416941265109">"समर्थित लिंकहरू नखोल्नुहोस्"</string>
<string name="domain_urls_summary_one" msgid="3893975485064803435">"<xliff:g id="DOMAIN">%s</xliff:g> खोल्नुहोस्"</string>
<string name="domain_urls_summary_some" msgid="2130534984153210797">"<xliff:g id="DOMAIN">%s</xliff:g> र अन्य URL हरूलाई खोल्नुहोस्"</string>
- <string name="domain_urls_apps_summary_off" msgid="1110203970617922543">"समर्थित लिंकहरू खोल्न सक्ने अनुप्रयोग छैन"</string>
+ <string name="domain_urls_apps_summary_off" msgid="1110203970617922543">"समर्थित लिंकहरू खोल्न सक्ने एप छैन"</string>
<plurals name="domain_urls_apps_summary_on" formatted="false" msgid="3571309605151815405">
<item quantity="other"><xliff:g id="COUNT">%d</xliff:g> अनुप्रयोगले समर्थित लिंकहरू खोल्न सक्छन्</item>
<item quantity="one">एउटा अनुप्रयोगले समर्थित लिंकहरू खोल्न सक्छ</item>
@@ -3662,25 +3664,25 @@
<string name="default_apps_title" msgid="3848048391400989931">"पूर्वनिर्धारित"</string>
<string name="default_for_work" msgid="7290411716804495366">"कार्यका लागि पूर्वनिर्धारित"</string>
<string name="assist_and_voice_input_title" msgid="324148194703846130">"सहायक तथा आवाजको इनपुट"</string>
- <string name="default_assist_title" msgid="2060846994203235317">"सहायक अनुप्रयोग"</string>
+ <string name="default_assist_title" msgid="2060846994203235317">"सहायक एप"</string>
<string name="assistant_security_warning_title" msgid="8014460924169723059">"<xliff:g id="ASSISTANT_APP_NAME">%s</xliff:g>लाई आफ्नो सहायक बनाउन चाहनुहुन्छ?"</string>
- <string name="assistant_security_warning" msgid="1304057692847069938">"तपाईँको स्क्रिनमा देखिने वा अनुप्रयोगहरू भित्र पहुँचयोग्य जानकारी लगायत यो सहायकले तपाईँको प्रणालीमा प्रयोगमा रहेका अनुप्रयोगहरूकाबारे जानकारी पढ्न सक्षम हुनेछ।"</string>
+ <string name="assistant_security_warning" msgid="1304057692847069938">"तपाईँको स्क्रिनमा देखिने वा एपहरू भित्र पहुँचयोग्य जानकारी लगायत यो सहायकले तपाईँको प्रणालीमा प्रयोगमा रहेका एपहरूकाबारे जानकारी पढ्न सक्षम हुनेछ।"</string>
<string name="assistant_security_warning_agree" msgid="5105692801460137289">"सहमत छु"</string>
<string name="assistant_security_warning_disagree" msgid="4217490999193100459">"असहमत छु"</string>
<string name="choose_voice_input_title" msgid="5369311838580756359">"आवाज इनपुट रोज्नुहोस्"</string>
- <string name="default_browser_title" msgid="4933937500898014977">"ब्राउजर अनुप्रयोग"</string>
+ <string name="default_browser_title" msgid="4933937500898014977">"ब्राउजर एप"</string>
<string name="default_browser_title_none" msgid="46431244274747124">"कुनै पूर्वनिर्धारित ब्राउजर छैन"</string>
- <string name="default_phone_title" msgid="6038690021912575740">"फोन अनुप्रयोग"</string>
+ <string name="default_phone_title" msgid="6038690021912575740">"फोन एप"</string>
<string name="roles_title" msgid="2825063787446244357">"भूमिकाहरू"</string>
<string name="default_app" msgid="8861276008866619872">"(पूर्वनिर्धारित)"</string>
<string name="system_app" msgid="4111402206594443265">"(प्रणाली)"</string>
<string name="system_default_app" msgid="1454719098589351197">"(प्रणालीको पूर्वनिर्धारित)"</string>
- <string name="apps_storage" msgid="5658466038269046038">"अनुप्रयोग भण्डारण"</string>
+ <string name="apps_storage" msgid="5658466038269046038">"एप भण्डारण"</string>
<string name="usage_access" msgid="2023443456361489516">"प्रयोगसम्बन्धी पहुँच"</string>
<string name="permit_usage_access" msgid="3321727608629752758">"प्रयोग पहुँचलाई अनुमति दिनुहोस्"</string>
- <string name="app_usage_preference" msgid="5691545073101551727">"अनुप्रयोग प्रयोग प्राथमिकताहरू"</string>
+ <string name="app_usage_preference" msgid="5691545073101551727">"एप प्रयोग प्राथमिकताहरू"</string>
<string name="time_spent_in_app_pref_title" msgid="2803186835902798451">"यन्त्रमा हेरेर बिताउने समय"</string>
- <string name="usage_access_description" msgid="2178083292760305207">"प्रयोग पहुँचले अनुप्रयोगलाई तपाईंले तपाईँको वाहक, भाषा सेटिङहरू, र अन्य विवरणहरू सहित के अन्य अनुप्रयोगहरू प्रयोग गरिरहनु भएको छ र कत्तिको गर्नुभएको छ भनेर ट्र्याक गर्न अनुमति दिन्छ।"</string>
+ <string name="usage_access_description" msgid="2178083292760305207">"प्रयोग पहुँचले एपलाई तपाईंले तपाईँको वाहक, भाषा सेटिङहरू, र अन्य विवरणहरू सहित के अन्य एपहरू प्रयोग गरिरहनु भएको छ र कत्तिको गर्नुभएको छ भनेर ट्र्याक गर्न अनुमति दिन्छ।"</string>
<string name="memory_settings_title" msgid="7867148522014070721">"मेमोरी"</string>
<string name="memory_details_title" msgid="6364825184513396865">"मेमोरीका विवरणहरू"</string>
<string name="always_running" msgid="5320183445080208766">"सधैं चलिरहेको (<xliff:g id="PERCENTAGE">%s</xliff:g>)"</string>
@@ -3695,9 +3697,9 @@
<string name="high_power_apps" msgid="2518319744362028920">"ब्याट्रीको अप्टिमाइजेसन"</string>
<string name="additional_battery_info" msgid="6877663897819271203">"ब्याट्रीको प्रयोग सम्बन्धी अलर्ट"</string>
<string name="show_all_apps" msgid="5442552004569634846">"यन्त्रको पूर्ण प्रयोग देखाउनुहोस्"</string>
- <string name="hide_extra_apps" msgid="6798261081113299441">"अनुप्रयोगको प्रयोग देखाउनुहोस्"</string>
+ <string name="hide_extra_apps" msgid="6798261081113299441">"एपको प्रयोग देखाउनुहोस्"</string>
<plurals name="power_high_usage_summary" formatted="false" msgid="4658343710126205199">
- <item quantity="other"><xliff:g id="NUMBER">%2$d</xliff:g> अनुप्रयोगहरूले असामान्य व्यवहार देखाउँदैछन्</item>
+ <item quantity="other"><xliff:g id="NUMBER">%2$d</xliff:g> एपहरूले असामान्य व्यवहार देखाउँदैछन्</item>
<item quantity="one"><xliff:g id="APP">%1$s</xliff:g> ले असामान्य व्यवहार देखाउँदैछ</item>
</plurals>
<plurals name="power_high_usage_title" formatted="false" msgid="63134064262760835">
@@ -3709,20 +3711,20 @@
<string name="high_power_off" msgid="5906679734326490426">"ब्याट्री प्रयोग आफू अनुकूल गर्दै"</string>
<string name="high_power_system" msgid="739584574711292753">"ब्याट्री आफू अनुकूल उपलब्ध छैन"</string>
<string name="high_power_desc" msgid="333756885680362741">"ब्याट्री आफू अनुकूल लागू नगर्नुहोस्। तपाईँको ब्याट्री निकै छिटो सिध्याउन सक्छ।"</string>
- <string name="high_power_prompt_title" msgid="2805745781720454052">"अनुप्रयोगलाई सधैँ पृष्ठभूमिमा चल्न दिने हो?"</string>
- <string name="high_power_prompt_body" msgid="8067395096053552289">"<xliff:g id="APP_NAME">%1$s</xliff:g> लाई सधैँ पृष्ठभूमिमा चल्न दिनुले ब्याट्रीको आयु घट्न सक्छ। \n\nयसलाई तपाईं पछि सेटिङ> अनुप्रयोगहरू> सूचनाहरूबाट हटाउन सक्नुहुन्छ।"</string>
+ <string name="high_power_prompt_title" msgid="2805745781720454052">"एपलाई सधैँ पृष्ठभूमिमा चल्न दिने हो?"</string>
+ <string name="high_power_prompt_body" msgid="8067395096053552289">"<xliff:g id="APP_NAME">%1$s</xliff:g> लाई सधैँ पृष्ठभूमिका चल्न दिनुभयो भने ब्याट्रीको आयु घट्न सक्छ। \n\nयसलाई तपाईं पछि सेटिङ> एपहरू> सूचनाहरूबाट हटाउन सक्नुहुन्छ।"</string>
<string name="battery_summary" msgid="4345690800899981339">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> पछिल्लो पटक पूरा चार्ज भएदेखिको प्रयोग"</string>
<string name="battery_power_management" msgid="2853925857548647969">"पावर व्यवस्थापन"</string>
<string name="no_battery_summary" msgid="4105932628367471314">"पछिल्लो पूरा चार्ज देखि ब्याट्रीको प्रयोग गरिएको छैन"</string>
- <string name="app_notification_preferences" msgid="5154466638524523201">"अनुप्रयोग सेटिङहरू"</string>
+ <string name="app_notification_preferences" msgid="5154466638524523201">"एप सेटिङहरू"</string>
<string name="system_ui_settings" msgid="6751165163665775447">"SystemUI Tuner देखाउनुहोस्"</string>
<string name="additional_permissions" msgid="3142290772324571654">"अतिरिक्त अनुमतिहरू"</string>
<string name="additional_permissions_more" msgid="714264060348056246">"<xliff:g id="COUNT">%1$d</xliff:g> थप"</string>
<string name="share_remote_bugreport_dialog_title" msgid="1390719492733882678">"बग रिपोर्टलाई साझेदारी गर्ने हो?"</string>
- <string name="share_remote_bugreport_dialog_message_finished" msgid="5133489230646384192">"तपाईँको IT प्रशासकले यस यन्त्रको समस्या निवारण गर्नमा मद्दत गर्न बग रिपोर्टका लागि अनुरोध गर्नुभएको छ। अनुप्रयोग र डेटा साझेदारी हुन सक्छ।"</string>
- <string name="share_remote_bugreport_dialog_message" msgid="6680361103125933760">"तपाईँको IT प्रशासकले यस यन्त्रको समस्या निवारण गर्नमा मद्दत गर्न बग रिपोर्टका लागि अनुरोध गर्नुभएको छ। अनुप्रयोग र डेटा साझेदारी हुन सक्छ र तपाईँको यन्त्र अस्थायी रूपमा सुस्त हुन सक्छ।"</string>
+ <string name="share_remote_bugreport_dialog_message_finished" msgid="5133489230646384192">"तपाईँको IT एडमिनले यस यन्त्रको समस्या निवारण गर्नमा मद्दत गर्न बग रिपोर्टका लागि अनुरोध गर्नुभएको छ। एप र डेटा साझेदारी हुन सक्छ।"</string>
+ <string name="share_remote_bugreport_dialog_message" msgid="6680361103125933760">"तपाईँको IT एडमिनले यस यन्त्रको समस्या निवारण गर्नमा मद्दत गर्न बग रिपोर्टका लागि अनुरोध गर्नुभएको छ। एप र डेटा साझेदारी हुन सक्छ र तपाईँको यन्त्र अस्थायी रूपमा सुस्त हुन सक्छ।"</string>
<string name="sharing_remote_bugreport_dialog_message" msgid="3814787466701526359">"यो बग रिपोर्ट तपाईँको IT प्रशासकसँग साझेदारी भइरहेको छ। थप विवरणहरूका लागि प्रशासकलाई सम्पर्क गर्नुहोस्।"</string>
- <string name="share_remote_bugreport_action" msgid="8600797271670537888">"साझेदारी गर्नुहोस्"</string>
+ <string name="share_remote_bugreport_action" msgid="8600797271670537888">"सेयर गर्नुहोस्"</string>
<string name="decline_remote_bugreport_action" msgid="706319275774199033">"अस्वीकार गर्नुहोस्"</string>
<string name="usb_use_charging_only" msgid="2344625733377110164">"डेटा स्थानान्तरण गरिँदैन"</string>
<string name="usb_use_charging_only_desc" msgid="3283518562582478950">"केवल यो यन्त्र चार्ज गर्नुहोस्"</string>
@@ -3756,17 +3758,17 @@
<string name="usb_summary_MIDI_power" msgid="7685597621357005180">"MIDI र विद्युत् आपूर्ति"</string>
<string name="background_check_pref" msgid="664081406854758392">"पृष्ठभूमि जाँच"</string>
<string name="background_check_title" msgid="4136736684290307970">"पूर्ण पृष्ठभूमि पहुँच"</string>
- <string name="assist_access_context_title" msgid="2274614501747710439">"स्क्रिनबाट पाठ प्रयोग गर्नुहोस्"</string>
- <string name="assist_access_context_summary" msgid="5867997494395842785">"स्क्रिन सामग्रीहरूलाई पाठको रूपमा पहुँच गर्न सहायक अनुप्रयोगलाई अनुमति दिनुहोस्"</string>
+ <string name="assist_access_context_title" msgid="2274614501747710439">"स्क्रिनको पाठ प्रयोग गर्नुहोस्"</string>
+ <string name="assist_access_context_summary" msgid="5867997494395842785">"स्क्रिन सामग्रीहरूलाई पाठको रूपमा प्रयोग गर्न सहायक एपलाई अनुमति दिनुहोस्"</string>
<string name="assist_access_screenshot_title" msgid="1991014038776117688">"स्क्रिसट प्रयोग गर्नुहोस्"</string>
- <string name="assist_access_screenshot_summary" msgid="3010943864000489424">"स्क्रिनको एउटा छवि पहुँच गर्न सहायक अनुप्रयोगलाई अनुमति दिनुहोस्"</string>
+ <string name="assist_access_screenshot_summary" msgid="3010943864000489424">"स्क्रिनको एउटा सट लिन सहायक एपलाई अनुमति दिनुहोस्"</string>
<string name="assist_flash_title" msgid="8852484250748551092">"स्क्रिन झिमझिम पार्नुहोस्"</string>
- <string name="assist_flash_summary" msgid="6697095786317559129">"सहायक अनुप्रयोगले स्क्रिन वा स्क्रिनसटबाट पाठमाथि पहुँच राख्दा स्क्रिनका किनाराहरू झिमझिम पार्नुहोस्"</string>
- <string name="assist_footer" msgid="7030121180457472165">"सहायक अनुप्रयोगहरूले तपाईंले हेर्दै गर्नुभएको स्क्रिनबाट प्राप्त जानकारीमा आधारित भई तपाईंलाई मद्दत गर्न सक्छन्।केही अनुप्रयोगहरूले तपाईंलाई एकीकृत सहायता दिन दुवै लन्चर र आवाज संलग्न इनपुट सेवाहरूलाई समर्थन गर्दछन्।"</string>
+ <string name="assist_flash_summary" msgid="6697095786317559129">"सहायक अनुप्रयोगले स्क्रिन वा स्क्रिनसटबाट पाठ प्रयोग गर्दा स्क्रिनका किनाराहरू झिमझिम पार्नुहोस्"</string>
+ <string name="assist_footer" msgid="7030121180457472165">"सहायक एपहरूले तपाईंले हेर्दै गर्नुभएको स्क्रिनबाट प्राप्त जानकारीमा आधारित भई तपाईंलाई मद्दत गर्न सक्छन्।केही एपहरूले तपाईंलाई एकीकृत सहायता दिन दुवै लन्चर र आवाज संलग्न इनपुट सेवाहरूलाई समर्थन गर्दछन्।"</string>
<string name="average_memory_use" msgid="5333366040118953945">"औसत मेमोरी प्रयोग"</string>
<string name="maximum_memory_use" msgid="6509872438499846077">"अधिकतम मेमोरी प्रयोग"</string>
<string name="memory_usage" msgid="7963253555330830906">"मेमोरी प्रयोग"</string>
- <string name="app_list_memory_use" msgid="356095943215944031">"अनुप्रयोग उपयोग"</string>
+ <string name="app_list_memory_use" msgid="356095943215944031">"एप उपयोग"</string>
<string name="memory_details" msgid="5165105904103664110">"विवरणहरू"</string>
<string name="memory_use_summary" msgid="7676311343819965850">"पछिल्लो ३ घण्टामा <xliff:g id="SIZE">%1$s</xliff:g> औसत मेमोरी प्रयोग गरियो"</string>
<string name="no_memory_use_summary" msgid="3966550113388917978">"पछिल्लो ३ घण्टामा कुनै मेमोरी प्रयोग गरिएन"</string>
@@ -3778,7 +3780,7 @@
<string name="free_memory" msgid="4758919141048544927">"उपलब्ध"</string>
<string name="memory_usage_apps" msgid="2839241373381152354">"अनुप्रयोगहरूद्वारा प्रयोग गरिएको मेमोरी"</string>
<plurals name="memory_usage_apps_summary" formatted="false" msgid="1235024908546944704">
- <item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> अनुप्रयोगहरूले पछिल्लो <xliff:g id="DURATION_1">%2$s</xliff:g> मा मेमोरी प्रयोग गर्यो</item>
+ <item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> एपहरूले पछिल्लो <xliff:g id="DURATION_1">%2$s</xliff:g> मा मेमोरी प्रयोग गर्यो</item>
<item quantity="one">१ अनुप्रयोगले पछिल्लो <xliff:g id="DURATION_0">%2$s</xliff:g> मा मेमोरी प्रयोग गर्यो</item>
</plurals>
<string name="running_frequency" msgid="7545170806968474449">"आवृत्ति"</string>
@@ -3791,50 +3793,50 @@
<string name="zen_access_revoke_warning_dialog_summary" msgid="3487422193181311403">"यस अनुप्रयोगले बनाएका सबै बाधा नपुर्याउनुहोस् नियम हटाइने छ।"</string>
<string name="ignore_optimizations_on" msgid="4373971641328943551">"आफू अनुकूल नगर्नुहोस्"</string>
<string name="ignore_optimizations_off" msgid="4372289432580282870">"अनुकुलन गर्नुहोस्"</string>
- <string name="ignore_optimizations_on_desc" msgid="2904484569799521559">"यसले तपाईंको ब्याट्रीको चार्ज चाँडै घटाउन सक्छ। अनुप्रयोगलाई अब उप्रान्त पृष्ठभूमिमा ब्याट्री प्रयोग गर्न प्रतिबन्ध लगाइने छैन।"</string>
+ <string name="ignore_optimizations_on_desc" msgid="2904484569799521559">"यसले तपाईंको ब्याट्रीको चार्ज चाँडै घटाउन सक्छ। एपलाई अब उप्रान्त पृष्ठभूमिमा ब्याट्री प्रयोग गर्न प्रतिबन्ध लगाइने छैन।"</string>
<string name="ignore_optimizations_off_desc" msgid="5598702251817814289">"अझ टिकाउयुक्त ब्याट्रीका लागि सिफारिस गरिएको"</string>
<string name="ignore_optimizations_title" msgid="7924345545276166305">"<xliff:g id="APP">%s</xliff:g> लाई ब्याट्री आफू अनुकूल बेवास्ता गर्नै अनुमति दिने हो?"</string>
<string name="app_list_preference_none" msgid="7100409177446935028">"कुनै पनि होइन"</string>
- <string name="work_profile_usage_access_warning" msgid="403208064382097510">"यो अनुप्रयोगको प्रयोगको पहुँचलाई निष्क्रिय पार्नुले तपाईंको प्रशासकलाई तपाईंको कार्य प्रोफाइलमा रहेका अनुप्रयोगहरूको डेटा प्रयोगलाई ट्र्याक गर्नबाट रोक्दैन"</string>
+ <string name="work_profile_usage_access_warning" msgid="403208064382097510">"यो एपको प्रयोगको पहुँचलाई निष्क्रिय पार्नुले तपाईंको प्रशासकलाई तपाईंको कार्य प्रोफाइलमा रहेका अनुप्रयोगहरूको डेटा प्रयोगलाई ट्र्याक गर्नबाट रोक्दैन"</string>
<string name="accessibility_lock_screen_progress" msgid="8242917828598820049">"<xliff:g id="COUNT_1">%2$d</xliff:g> को <xliff:g id="COUNT_0">%1$d</xliff:g> वर्णहरू प्रयोग गरिए"</string>
<string name="draw_overlay" msgid="2878665072530660668">"अन्य एपहरूको माथिपट्टि देखाउनु"</string>
- <string name="system_alert_window_settings" msgid="3024330223417646567">"अन्य अनुप्रयोगहरूको माथिपट्टि देखाउनुहोस्"</string>
- <string name="system_alert_window_apps_title" msgid="9188448296493699566">"अनुप्रयोगहरू"</string>
- <string name="system_alert_window_access_title" msgid="5187343732185369675">"अन्य अनुप्रयोगहरूको माथिपट्टि देखाउनुहोस्"</string>
- <string name="permit_draw_overlay" msgid="9039092257052422344">"अन्य एपहरूको माथिपट्टि देखिने अनुमति दिनुहोस्"</string>
- <string name="allow_overlay_description" msgid="6669524816705082807">"यो अनुप्रयोगलाई तपाईंले प्रयोग गरिरहनुभएका अन्य अनुप्रयोगहरूको माथिपट्टि देखिन अनुमति दिनुहोस्। यसले तपाईंले गर्ने ती अनुप्रयोगहरूको प्रयोगमा हस्तक्षेप गर्न वा तिनीहरू देखा पर्ने वा तिनीहरूले काम गर्ने तरिकालाई परिवर्तन गर्न सक्छ।"</string>
+ <string name="system_alert_window_settings" msgid="3024330223417646567">"अन्य अनुप्रयोगमा देखाउनुहोस्"</string>
+ <string name="system_alert_window_apps_title" msgid="9188448296493699566">"एपहरू"</string>
+ <string name="system_alert_window_access_title" msgid="5187343732185369675">"अन्य अनुप्रयोगमा देखाउनुहोस्"</string>
+ <string name="permit_draw_overlay" msgid="9039092257052422344">"अन्य एपहरूमा देखिने अनुमति दिनुहोस्"</string>
+ <string name="allow_overlay_description" msgid="6669524816705082807">"यो एपलाई तपाईंले प्रयोग गरिरहनुभएका अन्य अनुप्रयोगहरूको माथिपट्टि देखिन अनुमति दिनुहोस्। यसले तपाईंले गर्ने ती अनुप्रयोगहरूको प्रयोगमा हस्तक्षेप गर्न वा तिनीहरू देखा पर्ने वा तिनीहरूले काम गर्ने तरिकालाई परिवर्तन गर्न सक्छ।"</string>
<string name="keywords_vr_listener" msgid="5312633527788917750">"vr भर्चुअल रियालिटी श्रोता स्टेरियो सहायक सेवा"</string>
- <string name="keywords_system_alert_window" msgid="3936658600272194599">"प्रणाली अलर्ट विन्डो संवाद माथिपट्टि देखिने अन्य अनुप्रयोगहरू"</string>
+ <string name="keywords_system_alert_window" msgid="3936658600272194599">"प्रणाली अलर्ट विन्डो संवाद माथिपट्टि देखिने अन्य एपहरू"</string>
<string name="overlay_settings" msgid="3325154759946433666">"अन्य एपहरूको माथिपट्टि देखाउनु"</string>
<string name="system_alert_window_summary" msgid="7703582115861844158">"<xliff:g id="COUNT_1">%2$d</xliff:g> मध्ये <xliff:g id="COUNT_0">%1$d</xliff:g> एपहरूलाई अन्य एपको माथिपट्टि देखिने अनुमति दिइएको छ"</string>
- <string name="filter_overlay_apps" msgid="6336897660213304743">"अनुमतिसहित अनुप्रयोगहरू"</string>
+ <string name="filter_overlay_apps" msgid="6336897660213304743">"अनुमतिसहित एपहरू"</string>
<string name="app_permission_summary_allowed" msgid="6458476982015518778">"अनुमति छ"</string>
<string name="app_permission_summary_not_allowed" msgid="1171642541675462584">"अनुमति छैन"</string>
- <string name="keywords_install_other_apps" msgid="5383559540695847668">"अज्ञात स्रोतहरूबाट प्राप्त हुने अनुप्रयोगहरू स्थापना गर्नुहोस्"</string>
- <string name="write_settings" msgid="9009040811145552108">"प्रणाली सेटिङहरू परिमार्जन"</string>
+ <string name="keywords_install_other_apps" msgid="5383559540695847668">"अज्ञात स्रोतहरूबाट प्राप्त हुने एपहरू स्थापना गर्नुहोस्"</string>
+ <string name="write_settings" msgid="9009040811145552108">"प्रणालीका सेटिङ बदल्नुहोस्"</string>
<string name="keywords_write_settings" msgid="3450405263390246293">"परिमार्जन प्रणाली सेटिङहरू लेख्नुहोस्"</string>
- <string name="write_settings_summary" msgid="4650251358459404247">"<xliff:g id="COUNT_1">%2$d</xliff:g> मा <xliff:g id="COUNT_0">%1$d</xliff:g> अनुप्रयोगलाई प्रणाली सेटिङहरू परिमार्जन गर्न अनुमति छ"</string>
- <string name="financial_apps_sms_access_title" msgid="3422655018008259655">"वित्तीय अनुप्रयोगको Sms माथिको पहुँच"</string>
- <string name="filter_install_sources_apps" msgid="4519839764020866701">"अन्य अनुप्रयोगहरू स्थापना गर्न सक्छ"</string>
+ <string name="write_settings_summary" msgid="4650251358459404247">"<xliff:g id="COUNT_1">%2$d</xliff:g> मा <xliff:g id="COUNT_0">%1$d</xliff:g> एपलाई प्रणाली सेटिङहरू परिमार्जन गर्न अनुमति छ"</string>
+ <string name="financial_apps_sms_access_title" msgid="3422655018008259655">"वित्तीय एपको Sms माथिको पहुँच"</string>
+ <string name="filter_install_sources_apps" msgid="4519839764020866701">"अन्य एपहरू स्थापना गर्न सक्छ"</string>
<string name="filter_write_settings_apps" msgid="6864144615530081121">"प्रणाली सेटिङहरू परिमार्जन गर्न सक्ने"</string>
<string name="write_settings_title" msgid="5852614614193830632">"प्रणाली सेटिङहरू परिमार्जन गर्न सक्ने"</string>
<string name="write_system_settings" msgid="20450765210832463">"प्रणाली सेटिङहरू परिमार्जन गर्नुहोस्"</string>
<string name="permit_write_settings" msgid="4198491281216818756">"प्रणालीका सेटिङहरू परिमार्जन गर्न दिनुहोस्"</string>
- <string name="write_settings_description" msgid="2536706293042882500">"यस अनुमतिले अनुप्रयोगलाई प्रणाली सेटिङहरू परिमार्जन गर्न दिन्छ।"</string>
+ <string name="write_settings_description" msgid="2536706293042882500">"यस अनुमतिले एपलाई प्रणाली सेटिङहरू परिमार्जन गर्न दिन्छ।"</string>
<string name="write_settings_on" msgid="7328986337962635118">"हो"</string>
<string name="write_settings_off" msgid="5708257434958406202">"होइन"</string>
<string name="external_source_switch_title" msgid="5947220058496373178">"यो स्रोतबाट अनुमति दिनुहोस्"</string>
<string name="camera_gesture_title" msgid="899403310746415135">"क्यामेराका लागि दुई पटक बटार्नुहोस्"</string>
- <string name="camera_gesture_desc" msgid="7751841175916789527">"दुई पटक आफ्नो नारी बटारेर क्यामेरा अनुप्रयोग खोल्नुहोस्"</string>
+ <string name="camera_gesture_desc" msgid="7751841175916789527">"दुई पटक आफ्नो नारी बटारेर क्यामेरा एप खोल्नुहोस्"</string>
<string name="camera_double_tap_power_gesture_title" msgid="8874747801078147525">"क्यामेराका लागि दुई पटक पावर बटन थिच्नुहोस्"</string>
<string name="camera_double_tap_power_gesture_desc" msgid="6166349645433682873">"स्क्रिन अनलक नगरी क्यामेरा चाँडै खोल्नुहोस्"</string>
<string name="screen_zoom_title" msgid="164369086350486104">"प्रदर्शन हुने आकार"</string>
- <string name="screen_zoom_short_summary" msgid="5508079362742276703">"स्क्रिनमा भएको वस्तुहरूलाई अझ ठूलो वा सानो पार्नुहोस्"</string>
+ <string name="screen_zoom_short_summary" msgid="5508079362742276703">"स्क्रिनमा भएको वस्तुहरूलाई अझ ठुलो वा सानो पार्नुहोस्"</string>
<string name="screen_zoom_keywords" msgid="8358462497896524092">"घनत्व प्रदर्शन गर्नुहोस्, स्क्रिन जुम, स्केल, स्केलिङ"</string>
- <string name="screen_zoom_summary" msgid="5294003755961312560">"तपाईंको स्क्रिनमा भएको वस्तुहरूलाई अझ सानो वा ठूलो पार्नुहोस्। तपाईंको स्क्रिनमा भएको केही अनुप्रयोगहरूको स्थिति परिवर्तन हुनसक्छ।"</string>
+ <string name="screen_zoom_summary" msgid="5294003755961312560">"तपाईंको स्क्रिनमा भएको वस्तुहरूलाई अझ सानो वा ठुलो पार्नुहोस्। तपाईंको स्क्रिनमा भएको केही अनुप्रयोगहरूको स्थिति परिवर्तन हुनसक्छ।"</string>
<string name="screen_zoom_preview_title" msgid="2924312934036753091">"पूर्वावलोकन"</string>
<string name="screen_zoom_make_smaller_desc" msgid="1374501139722916729">"सानो बनाउनुहोस्"</string>
- <string name="screen_zoom_make_larger_desc" msgid="5306684807895846141">"ठूलो बनाउनुहोस्"</string>
+ <string name="screen_zoom_make_larger_desc" msgid="5306684807895846141">"ठुलो बनाउनुहोस्"</string>
<string name="screen_zoom_conversation_icon_alex" msgid="2733983340094411661">"A"</string>
<string name="screen_zoom_conversation_icon_pete" msgid="4990733893088820204">"P"</string>
<string name="screen_zoom_conversation_message_1" msgid="7215516160541988278">"नमस्कार पिट!"</string>
@@ -3845,8 +3847,8 @@
<string name="screen_zoom_conversation_timestamp_2" msgid="816265985618121370">"मंगलबार बेलुका ६.०१ बजे"</string>
<string name="screen_zoom_conversation_timestamp_3" msgid="7346540212221792932">"मंगलबार बेलुका ६.०२ बजे"</string>
<string name="screen_zoom_conversation_timestamp_4" msgid="1452374487089625022">"मंगलबार बेलुका ६.०३ बजे"</string>
- <string name="disconnected" msgid="4088439352761747084">"जडान भएको छैन"</string>
- <string name="keyboard_disconnected" msgid="3068615097201531871">"जडान भएको छैन"</string>
+ <string name="disconnected" msgid="4088439352761747084">"कनेक्ट भएको छैन"</string>
+ <string name="keyboard_disconnected" msgid="3068615097201531871">"कनेक्ट भएको छैन"</string>
<string name="data_usage_summary_format" msgid="7788095271598602797">"डेटाको <xliff:g id="AMOUNT">%1$s</xliff:g> प्रयोग गरियो"</string>
<string name="data_usage_wifi_format" msgid="9028934101966264710">"Wi‑Fi मा प्रयोग भएको <xliff:g id="AMOUNT">^1</xliff:g>"</string>
<plurals name="notification_summary" formatted="false" msgid="761061343339229103">
@@ -3854,8 +3856,8 @@
<item quantity="one">१ अनुप्रयोगका लागि निष्क्रिय पारिएको छ</item>
</plurals>
<string name="notification_summary_none" msgid="5003043219430054784">"सबै अनुप्रयोगहरूका लागि खुला"</string>
- <string name="apps_summary" msgid="8355759446490212195">"<xliff:g id="COUNT">%1$d</xliff:g> अनुप्रयोगहरू स्थापना गरियो"</string>
- <string name="apps_summary_example" msgid="3011143598675185269">"२४ अनुप्रयोगहरू स्थापित गरियो"</string>
+ <string name="apps_summary" msgid="8355759446490212195">"<xliff:g id="COUNT">%1$d</xliff:g> एपहरू स्थापना गरियो"</string>
+ <string name="apps_summary_example" msgid="3011143598675185269">"२४ एपहरू स्थापित गरियो"</string>
<string name="storage_summary" msgid="4835916510511133784">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> प्रयोग भएको - खाली <xliff:g id="FREE_SPACE">%2$s</xliff:g>"</string>
<string name="storage_summary_with_sdcard" msgid="8742907204848352697">"आन्तरिक भण्डारण: <xliff:g id="PERCENTAGE">%1$s</xliff:g> प्रयोग गरिएको - <xliff:g id="FREE_SPACE">%2$s</xliff:g> खाली"</string>
<string name="display_summary" msgid="5725269449657325797">"<xliff:g id="TIMEOUT_DESCRIPTION">%1$s</xliff:g> को निष्क्रियता पछिको शयन"</string>
@@ -3869,18 +3871,18 @@
<string name="backup_disabled" msgid="6941165814784765643">"ब्याकअप असक्षम गरियो"</string>
<string name="android_version_summary" msgid="2192751442789395445">"Android <xliff:g id="VERSION">%1$s</xliff:g> मा अद्यावधिक गरियो"</string>
<string name="android_version_pending_update_summary" msgid="3554543810520655076">"अद्यावधिक उपलब्ध छ"</string>
- <string name="disabled_by_policy_title" msgid="1238318274952958846">"कार्यलाई अनुमति छैन"</string>
+ <string name="disabled_by_policy_title" msgid="1238318274952958846">"यो कार्य गर्न मिल्दैन"</string>
<string name="disabled_by_policy_title_adjust_volume" msgid="7094547090629203316">"भोल्युम परिवर्तन गर्न सकिँदैन"</string>
<string name="disabled_by_policy_title_outgoing_calls" msgid="3805836913095496278">"कल गर्न अनुमति छैन"</string>
<string name="disabled_by_policy_title_sms" msgid="1453236584236681105">"SMS लाई अनुमति छैन"</string>
<string name="disabled_by_policy_title_camera" msgid="3741138901926111197">"यो क्यामेरालाई अनुमति छैन"</string>
<string name="disabled_by_policy_title_screen_capture" msgid="1856835333536274665">"स्क्रिनसटलाई अनुमति छैन"</string>
- <string name="disabled_by_policy_title_suspend_packages" msgid="4254714213391802322">"यो अनुप्रयोग खोल्न सकिँदैन"</string>
+ <string name="disabled_by_policy_title_suspend_packages" msgid="4254714213391802322">"यो एप खोल्न सकिँदैन"</string>
<string name="default_admin_support_msg" msgid="5789424433689798637">"तपाईंसँग प्रश्नहरू छन् भने आफ्नो IT प्रशासकलाई सम्पर्क गर्नुहोस्"</string>
<string name="admin_support_more_info" msgid="8737842638087863477">"थप विवरणहरु"</string>
- <string name="admin_profile_owner_message" msgid="3199544166281052845">"तपाईंको प्रशासकले तपाईंको कार्य प्रोफाइलसँग सम्बन्धित अनुप्रयोग र डेटाका साथै सेटिङ। अनुमति, संस्थागत पहुँच, नेटवर्क सम्बन्धी गतिविधि र यस यन्त्रको स्थानसम्बन्धी जानकारीको अनुगमन र व्यवस्थापन गर्न सक्छ।"</string>
- <string name="admin_profile_owner_user_message" msgid="2991249382056855531">"तपाईंको प्रशासकले यस प्रयोगकर्तासँग सम्बन्धित अनुप्रयोग तथा डेटाका साथै सेटिङ, अनुमति, संस्थागत पहुँच, नेटवर्क सम्बन्धी गतिविधि र यस यन्त्रको स्थानसम्बन्धी जानकारीको अनुगमन र व्यवस्थापन गर्न सक्छ।"</string>
- <string name="admin_device_owner_message" msgid="1823477572459610869">"तपाईंको प्रशासकले यस यन्त्रसँग सम्बन्धित अनुप्रयोग र डेटाका साथै सेटिङ, अनुमति, संस्थागत पहुँच, नेटवर्क सम्बन्धी गतिविधि, र यस यन्त्रको स्थानसम्बन्धी जानकारीको अनुगमन र व्यवस्थापन गर्न सक्छ।"</string>
+ <string name="admin_profile_owner_message" msgid="3199544166281052845">"तपाईंको प्रशासकले तपाईंको कार्य प्रोफाइलसँग सम्बन्धित एप र डेटाका साथै सेटिङ। अनुमति, संस्थागत पहुँच, नेटवर्क सम्बन्धी गतिविधि र यस यन्त्रको स्थानसम्बन्धी जानकारीको अनुगमन र व्यवस्थापन गर्न सक्छ।"</string>
+ <string name="admin_profile_owner_user_message" msgid="2991249382056855531">"तपाईंको प्रशासकले यस प्रयोगकर्तासँग सम्बन्धित एप तथा डेटाका साथै सेटिङ, अनुमति, संस्थागत पहुँच, नेटवर्क सम्बन्धी गतिविधि र यस यन्त्रको स्थानसम्बन्धी जानकारीको अनुगमन र व्यवस्थापन गर्न सक्छ।"</string>
+ <string name="admin_device_owner_message" msgid="1823477572459610869">"तपाईंको प्रशासकले यस यन्त्रसँग सम्बन्धित एप र डेटाका साथै सेटिङ, अनुमति, संस्थागत पहुँच, नेटवर्क सम्बन्धी गतिविधि, र यस यन्त्रको स्थानसम्बन्धी जानकारीको अनुगमन र व्यवस्थापन गर्न सक्छ।"</string>
<string name="condition_turn_off" msgid="4395150881365143558">"बन्द गर्नुहोस्"</string>
<string name="condition_turn_on" msgid="1699088245481841159">"सक्रिय गर्नुहोस्"</string>
<string name="condition_expand_show" msgid="4118818022763913777">"देखाउनुहोस्"</string>
@@ -3898,16 +3900,16 @@
<string name="condition_bg_data_title" msgid="184684435298857712">"डेटा सेभर"</string>
<string name="condition_bg_data_summary" msgid="5194942860807136682">"सुविधाहरूलाई बन्देज लगाइएका छन्"</string>
<string name="condition_work_title" msgid="9046811302347490371">"कार्यको प्रोफाइल बन्द छ"</string>
- <string name="condition_work_summary" msgid="5586134491975748565">"अनुप्रयोग तथा सूचनाहरूका लागि"</string>
+ <string name="condition_work_summary" msgid="5586134491975748565">"एप तथा सूचनाहरूका लागि"</string>
<string name="condition_device_muted_action_turn_on_sound" msgid="5849285946804815263">"आवाज सक्रिय गर्नुहोस्"</string>
<string name="condition_device_muted_title" msgid="3930542786434609976">"रिङ्गर म्युट गरियो"</string>
<string name="condition_device_muted_summary" msgid="3101055117680109021">"कल तथा सूचनाहरूका लागि"</string>
<string name="condition_device_vibrate_title" msgid="5712659354868872338">"कम्पन मात्र"</string>
<string name="condition_device_vibrate_summary" msgid="9073880731894828604">"कल तथा सूचनाहरूका लागि"</string>
<string name="night_display_suggestion_title" msgid="4222839610992282188">"रात्रि प्रकाशको समय तालिका सेट गर्नुहोस्"</string>
- <string name="night_display_suggestion_summary" msgid="1754361016383576916">"प्रत्येक रात स्क्रिनको रङ स्वतः परिवर्तन गर्नुहोस्"</string>
+ <string name="night_display_suggestion_summary" msgid="1754361016383576916">"प्रत्येक रात स्क्रिनको रङ्ग स्वतः परिवर्तन गर्नुहोस्"</string>
<string name="condition_night_display_title" msgid="9171491784857160135">"रात्रिको प्रकाश सक्रिय छ"</string>
- <string name="condition_night_display_summary" msgid="7885776986937527558">"स्क्रिन रङ मधुरो गरियो"</string>
+ <string name="condition_night_display_summary" msgid="7885776986937527558">"स्क्रिन रङ्ग मधुरो गरियो"</string>
<string name="condition_grayscale_title" msgid="1226351649203551299">"ग्रेस्केल"</string>
<string name="condition_grayscale_summary" msgid="749172886527349546">"खरानी रङमा मात्र प्रदर्शन गर्नुहोस्"</string>
<string name="homepage_condition_footer_content_description" msgid="3563606465924396342">"संक्षिप्त गर्नुहोस्"</string>
@@ -3941,7 +3943,7 @@
<string name="wifi_data_template" msgid="3146090439147042068">"<xliff:g id="AMOUNT">^1</xliff:g> Wi-Fi को डेटा"</string>
<string name="ethernet_data_template" msgid="6414118030827090119">"<xliff:g id="AMOUNT">^1</xliff:g> इथरनेटको डेटा"</string>
<string name="billing_cycle" msgid="5740717948341713190">"डेटासम्बन्धी चेतावनी तथा सीमा"</string>
- <string name="app_usage_cycle" msgid="213483325132959663">"अनुप्रयोगको डेटा प्रयोगको चक्र"</string>
+ <string name="app_usage_cycle" msgid="213483325132959663">"एपको डेटा प्रयोगको चक्र"</string>
<string name="cell_data_warning" msgid="8902740337286652689">"डेटासम्बन्धी चेतावनी: <xliff:g id="ID_1">^1</xliff:g>"</string>
<string name="cell_data_limit" msgid="3175933829235314233">"डेटाको सीमा: <xliff:g id="ID_1">^1</xliff:g>"</string>
<string name="cell_data_warning_and_limit" msgid="3846150001253927594">"डेटासम्बन्धी चेतावनी: <xliff:g id="ID_1">^1</xliff:g> / डेटाको सीमा: <xliff:g id="ID_2">^2</xliff:g>"</string>
@@ -3951,7 +3953,7 @@
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> वटा बन्देजहरू</item>
<item quantity="one">१ वटा बन्देज</item>
</plurals>
- <string name="operator_warning" msgid="4676042739221117031">"वाहकको डेटाको हिसाब-किताब राख्ने कार्य तपाईँको यन्त्रको हिसाब-किताब राख्ने कार्य भन्दा फरक हुन सक्छ"</string>
+ <string name="operator_warning" msgid="4676042739221117031">"डेटाको प्रयोगसम्बन्धी वाहकले राखेको हिसाब-किताब र तपाईंको यन्त्रले राखेको हिसाब-किताब फरक हुन सक्छ"</string>
<string name="data_used_template" msgid="761605393453849477">"<xliff:g id="ID_1">%1$s</xliff:g> प्रयोग गरियो"</string>
<string name="set_data_warning" msgid="8115980184415563941">"डेटाबारे चेतावनी सेट गर्नुहोस्"</string>
<string name="data_warning" msgid="2699207195535036240">"डेटाबारे चेतावनी"</string>
@@ -3960,10 +3962,10 @@
<string name="data_limit" msgid="5793521160051596228">"डेटाको सीमा"</string>
<string name="data_usage_template" msgid="6848274347956096882">"<xliff:g id="ID_2">%2$s</xliff:g> सम्म <xliff:g id="ID_1">%1$s</xliff:g> प्रयोग गरियो"</string>
<string name="configure" msgid="8232696842838580549">"कन्फिगर गर्नुहोस्"</string>
- <string name="data_usage_other_apps" msgid="7002491980141402084">"प्रयोगमा समावेश गरिएका अन्य अनुप्रयोगहरू"</string>
+ <string name="data_usage_other_apps" msgid="7002491980141402084">"प्रयोगमा समावेश गरिएका अन्य एपहरू"</string>
<plurals name="data_saver_unrestricted_summary" formatted="false" msgid="6046013861315713697">
<item quantity="other">डेटा सेभर अन हुँदा <xliff:g id="COUNT">%1$d</xliff:g> अनुप्रयोगहरूलाई असीमित डेटाको प्रयोग गर्न अनुमति दिइयो</item>
- <item quantity="one">डेटा सेभर अन हुँदा १ अनुप्रयोगलाई असीमित डेटाको प्रयोग गर्न अनुमति दिइयो</item>
+ <item quantity="one">डेटा सेभर अन हुँदा १ एपलाई असीमित डेटाको प्रयोग गर्न अनुमति दिइयो</item>
</plurals>
<string name="data_usage_title" msgid="7874606430902201083">"प्राथमिक डेटा"</string>
<string name="data_usage_wifi_title" msgid="7161828479387766556">"Wi‑Fi डेटा"</string>
@@ -3991,7 +3993,7 @@
<string name="data_saver_switch_title" msgid="8244008132112735207">"डेटा सेभर प्रयोग गर्नुहोस्"</string>
<string name="unrestricted_app_title" msgid="4390661122069905122">"असीमित डेटाको प्रयोग"</string>
<string name="unrestricted_app_summary" msgid="2829141815077800483">"डेटा सेभर अन हुँदा असीमित डेटाको पहुँचलाई अनुमति दिनुहोस्"</string>
- <string name="home_app" msgid="3695063566006954160">"घरेलु अनुप्रयोग"</string>
+ <string name="home_app" msgid="3695063566006954160">"घरेलु एप"</string>
<string name="no_default_home" msgid="1518949210961918497">"पूर्वनिर्धारित गृहपृष्ठ छैन"</string>
<string name="lockpattern_settings_require_cred_before_startup" msgid="63693894094570367">"स्टार्ट-अप सुरक्षित गर्नुहोस्"</string>
<string name="lockpattern_settings_require_pattern_before_startup_summary" msgid="2330543541999937953">"तपाईंको यन्त्रलाई सुरुवात गर्न ढाँचा आवश्यक छ। यन्त्र बन्द हुँदा, यसले कल, सन्देश, सूचना, वा अलार्महरू प्राप्त गर्न सक्दैन।"</string>
@@ -4000,15 +4002,15 @@
<string name="suggestion_additional_fingerprints" msgid="3434467207282466411">"अर्को फिंगरप्रिन्ट थप्नुहोस्"</string>
<string name="suggestion_additional_fingerprints_summary" msgid="1916547587832484196">"अर्को औँलाको प्रयोग गरी अनलक गर्नुहोस्"</string>
<string name="battery_saver_on_summary" msgid="6841062406467435672">"सक्रिय"</string>
- <string name="battery_saver_off_scheduled_summary" msgid="3740414764069188669">"<xliff:g id="BATTERY_PERCENTAGE">%1$s</xliff:g> मा सक्रिय हुने छ"</string>
+ <string name="battery_saver_off_scheduled_summary" msgid="3740414764069188669">"<xliff:g id="BATTERY_PERCENTAGE">%1$s</xliff:g> मा अन हुने छ"</string>
<string name="battery_saver_off_summary" msgid="8736555723004299721">"निष्क्रिय"</string>
<string name="battery_saver_button_turn_on" msgid="3748696527267573793">"अहिले नै सक्रिय गर्नुहोस्"</string>
- <string name="battery_saver_button_turn_off" msgid="2912950982503267828">"अहिले नै निष्क्रिय पार्नुहोस्"</string>
+ <string name="battery_saver_button_turn_off" msgid="2912950982503267828">"अहिले नै अफ गर्नुहोस्"</string>
<string name="not_battery_optimizing" msgid="2616044774307734160">"ब्याट्री आफू अनुकूल प्रयोग गरिएको छैन"</string>
<string name="lockscreen_remote_input" msgid="3363310613165354434">"यदि यन्त्रलाई लक गरिएको छ भने सूचनाहरूमा जवाफ वा अन्य पाठ टाइप गर्न रोक लगाउनुहोस्"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"पूर्वनिर्धारित हिज्जे परीक्षक"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"हिज्जे परीक्षक छनोट गर्नुहोस्"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"हिज्जे जाँचकर्ता प्रयोग गर्नुहोस्"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"हिज्जे जाँचकर्ता प्रयोग गर्नुहोस्"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"चयन गरिएको छैन"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(कुनै पनि होइन)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4042,7 +4044,7 @@
<string name="notification_log_details_ranking_null" msgid="3907234749871463339">"वर्गीकरण सम्बन्धी वस्तु उपलब्ध छैन।"</string>
<string name="notification_log_details_ranking_none" msgid="3687243721168608404">"वर्गीकरण सम्बन्धी वस्तुमा यो साँचो छैन।"</string>
<string name="theme_customization_category" msgid="4043457940936660368">"विषयवस्तु"</string>
- <string name="theme_customization_accent_color_title" msgid="3949108608589133216">"एक्सेन्टको रङ"</string>
+ <string name="theme_customization_accent_color_title" msgid="3949108608589133216">"एक्सेन्टको रङ्ग"</string>
<string name="theme_customization_font_title" msgid="309728559821356597">"शीर्षक / मुख्य भागको फन्ट"</string>
<string name="theme_customization_icon_shape_title" msgid="4603248388639328322">"आइकनको आकार"</string>
<string name="theme_customization_device_default" msgid="7188874258500934312">"पूर्वनिर्धारित यन्त्र"</string>
@@ -4050,7 +4052,7 @@
<string name="display_cutout_emulation_keywords" msgid="6795671536772871439">"प्रदर्शनसम्बन्धी कटआउट, नच"</string>
<string name="overlay_option_device_default" msgid="165508753381657697">"पूर्वनिर्धारित यन्त्र"</string>
<string name="overlay_toast_failed_to_apply" msgid="5692251825129250040">"ओभरले लागू गर्न सकिएन"</string>
- <string name="special_access" msgid="1453926335914696206">"विशेष अनुप्रयोगको पहुँच"</string>
+ <string name="special_access" msgid="1453926335914696206">"विशेष एपको पहुँच"</string>
<plurals name="special_access_summary" formatted="false" msgid="5182092345063909346">
<item quantity="other"><xliff:g id="COUNT">%d</xliff:g> अनुप्रयोगले असीमित डेटा प्रयोग गर्न सक्छन्</item>
<item quantity="one">१ अनुप्रयोगले असीमित डेटा प्रयोग गर्न सक्छ</item>
@@ -4065,21 +4067,21 @@
<string name="page_tab_title_summary" msgid="4824744863994538006">"सबै"</string>
<string name="page_tab_title_support" msgid="5569262185010367870">"सुझाव तथा सहायता"</string>
<string name="developer_smallest_width" msgid="2603134476228805075">"सबैभन्दा सानो चौडाइ"</string>
- <string name="premium_sms_none" msgid="940723020871007898">"स्थापना गरिएका कुनै पनि अनुप्रयोगहरूले प्रिमियम SMS माथि पहुँचका लागि अनुरोध गरेका छैनन्"</string>
- <string name="premium_sms_warning" msgid="7604011651486294515">"प्रिमियम SMS सक्रिय गर्नाले तपाईंलाई पैसा लाग्न सक्छ र उक्त रकम तपाईंको वाहकलाई तिर्नु पर्ने बिलमा जोडिनेछ। यदि तपाईं अनुप्रयोगको लागि अनुमति सक्रिय गर्नुहुन्छ भने तपाईं त्यस अनुप्रयोगको प्रयोग गरेर प्रिमियम SMS पठाउन सक्नुहुनेछ।"</string>
+ <string name="premium_sms_none" msgid="940723020871007898">"स्थापना गरिएका कुनै पनि एपहरूले प्रिमियम SMS माथि पहुँचका लागि अनुरोध गरेका छैनन्"</string>
+ <string name="premium_sms_warning" msgid="7604011651486294515">"प्रिमियम SMS सक्रिय गर्नाले तपाईंलाई पैसा लाग्न सक्छ र उक्त रकम तपाईंको वाहकलाई तिर्नु पर्ने बिलमा जोडिनेछ। यदि तपाईं एपको लागि अनुमति सक्रिय गर्नुहुन्छ भने तपाईं त्यस एपको प्रयोग गरेर प्रिमियम SMS पठाउन सक्नुहुनेछ।"</string>
<string name="premium_sms_access" msgid="4550027460595822851">"प्रिमियम SMS माथि पहुँच"</string>
<string name="bluetooth_disabled" msgid="6588102116819268238">"निष्क्रिय छ"</string>
- <string name="bluetooth_connected_summary" msgid="439920840053965217">"<xliff:g id="ID_1">%1$s</xliff:g> मा जडान गरियो"</string>
+ <string name="bluetooth_connected_summary" msgid="439920840053965217">"<xliff:g id="ID_1">%1$s</xliff:g> मा कनेक्ट गरियो"</string>
<string name="bluetooth_connected_multiple_devices_summary" msgid="596205630653123250">"धेरै यन्त्रहरूमा जडान गरियो"</string>
<string name="demo_mode" msgid="3831081808592541104">"प्रणालीको UI को प्रदर्शन मोड"</string>
<string name="dark_ui_mode" msgid="703844190192599217">"विषयवस्तु"</string>
- <string name="dark_ui_mode_title" msgid="8774932716427742413">"विषयवस्तु छनौट गर्नुहोस्"</string>
- <string name="dark_ui_settings_light_summary" msgid="5219102347744462812">"यो सेटिङ अनुप्रयोगहरूमा पनि लागू हुन्छ"</string>
- <string name="dark_ui_settings_dark_summary" msgid="7042737828943784289">"समर्थन गरिएका अनुप्रयोगहरू पनि बदलिएर गाढा विषयवस्तुमा जाने छन्"</string>
+ <string name="dark_ui_mode_title" msgid="8774932716427742413">"थिम छनौट गर्नुहोस्"</string>
+ <string name="dark_ui_settings_light_summary" msgid="5219102347744462812">"यो सेटिङ एपहरूमा पनि लागू हुन्छ"</string>
+ <string name="dark_ui_settings_dark_summary" msgid="7042737828943784289">"समर्थन गरिएका एपहरू पनि बदलिएर गाढा विषयवस्तुमा जाने छन्"</string>
<string name="quick_settings_developer_tiles" msgid="7423485925757678719">"द्रुत सेटिङहरू सम्बन्धी विकासकर्ताका टाइलहरू"</string>
<string name="winscope_trace_quick_settings_title" msgid="940971040388411374">"Winscope को ट्रेस"</string>
<string name="sensors_off_quick_settings_title" msgid="3655699045300438902">"सेन्सरहरू निष्क्रिय पार्नु…"</string>
- <string name="managed_profile_settings_title" msgid="4340409321523532402">"कार्य प्रोफाइलका सेटिङहरू"</string>
+ <string name="managed_profile_settings_title" msgid="4340409321523532402">"कार्यालयसम्बन्धी प्रोफाइलका सेटिङ"</string>
<string name="managed_profile_contact_search_title" msgid="7337225196804457095">"सम्पर्कको खोजी"</string>
<string name="managed_profile_contact_search_summary" msgid="7278267480246726951">"कलर र सम्पर्कहरूको पहिचान गर्न तपाईँको संगठन अनुसार गरिने सम्पर्कका खोजीहरूलाई अनुमति दिनुहोस्"</string>
<string name="cross_profile_calendar_title" msgid="2351605904015067145">"अन्तरप्रोफाइल पात्रो"</string>
@@ -4098,10 +4100,10 @@
<item quantity="one">१ सेकेन्ड</item>
</plurals>
<string name="automatic_storage_manager_settings" msgid="2403621409625820182">"भण्डारणको व्यवस्थापन गर्नुहोस्"</string>
- <string name="automatic_storage_manager_text" msgid="4270379105066667493">"भण्डारण प्रबन्धकले भण्डारणको ठाउँ खाली गर्न मद्दतका लागि तपाईँको यन्त्रबाट ब्याक अप गरिएका तस्बिर र भिडियोहरू हटाउँदछ।"</string>
- <string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"तस्बिर र भिडियोहरूलाई मेट्नुहोस्"</string>
+ <string name="automatic_storage_manager_text" msgid="4270379105066667493">"भण्डारण प्रबन्धकले भण्डारणको ठाउँ खाली गर्न मद्दतका लागि तपाईँको यन्त्रबाट ब्याक अप गरिएका फोटो र भिडियोहरू हटाउँदछ।"</string>
+ <string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"फोटो र भिडियोहरूलाई मेट्नुहोस्"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"भण्डारण प्रबन्धक"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"भण्डारण प्रबन्धक प्रयोग गर्नुहोस्"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"स्टोरेज म्यानेजर प्रयोग गर्नुहोस्"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"स्वतः"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"म्यानुअल"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"अहिले नै ठाउँ खाली गर्नुहोस्"</string>
@@ -4115,25 +4117,25 @@
<string name="double_twist_for_camera_mode_title" msgid="2606032140297556018">"क्यामेरा फ्लिप गर्ने"</string>
<string name="double_twist_for_camera_mode_summary" msgid="8979914206876018137"></string>
<string name="double_twist_for_camera_suggestion_title" msgid="5932411386316771246">"अझ छिटो सेल्फी लिनुहोस्"</string>
- <string name="swipe_up_to_switch_apps_summary" msgid="4644068184114154787">"अनुप्रयोगहरू बदल्न, गृह बटनमा माथि स्वाइप गर्नुहोस्। सबै अनुप्रयोगहरू हेर्न फेरि माथि स्वाइप गर्नुहोस्। कुनै पनि स्क्रिनबाट काम गर्छ। अब उप्रान्त तपाईंको स्क्रिनको तल्लो भागको दायाँमा परिदृश्य बटन हुने छैन।"</string>
+ <string name="swipe_up_to_switch_apps_summary" msgid="4644068184114154787">"एपहरू बदल्न, गृह बटनमा माथि स्वाइप गर्नुहोस्। सबै एपहरू हेर्न फेरि माथि स्वाइप गर्नुहोस्। कुनै पनि स्क्रिनबाट काम गर्छ। अब उप्रान्त तपाईंको स्क्रिनको तल्लो भागको दायाँमा परिदृश्य बटन हुने छैन।"</string>
<string name="swipe_up_to_switch_apps_suggestion_title" msgid="7641846365137536128">"नयाँ गृह बटन प्रयास गर्नुहोस्"</string>
- <string name="swipe_up_to_switch_apps_suggestion_summary" msgid="7338653224520387852">"अनुप्रयोगहरू बदल्न नयाँ इसारा सक्रिय गर्नुहोस्"</string>
+ <string name="swipe_up_to_switch_apps_suggestion_summary" msgid="7338653224520387852">"एपहरू बदल्न नयाँ इसारा सक्रिय गर्नुहोस्"</string>
<string name="ambient_display_title" product="default" msgid="6785677099744344088">"फोनको जाँच गर्न डबल-ट्याप गर्नुहोस्"</string>
<string name="ambient_display_title" product="tablet" msgid="1106285490888683613">"ट्याब्लेटको जाँच गर्न डबल-ट्याप गर्नुहोस्"</string>
<string name="ambient_display_title" product="device" msgid="5064644474876041478">"यन्त्रको जाँच गर्न डबल-ट्याप गर्नुहोस्"</string>
- <string name="ambient_display_summary" msgid="4882910328216411109">"समय, सूचना र अन्य जानकारीको जाँच गर्न आफ्नो यन्त्रको स्क्रिनमा डबल ट्याप गर्नुहोस्।"</string>
+ <string name="ambient_display_summary" msgid="4882910328216411109">"समय, सूचना र अन्य जानकारी हेर्न आफ्नो यन्त्रको स्क्रिनमा डबल ट्याप गर्नुहोस्।"</string>
<string name="ambient_display_pickup_title" product="default" msgid="7141652156907066938">"फोनको जाँच गर्न उठाउनुहोस्"</string>
<string name="ambient_display_pickup_title" product="tablet" msgid="1555456400210301959">"ट्याब्लेटको जाँच गर्न उठाउनुहोस्"</string>
<string name="ambient_display_pickup_title" product="device" msgid="2480126522988135037">"यन्त्रको जाँच गर्न उठाउनुहोस्"</string>
<string name="ambient_display_wake_screen_title" msgid="3376988352851077102">"सञ्चालन गर्नका लागि डिस्प्ले"</string>
- <string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"समय, सूचना र अन्य जानकारीको जाँच गर्न आफ्नो फोन उठाउनुहोस्।"</string>
- <string name="ambient_display_pickup_summary" product="tablet" msgid="1077745287100012928">"समय, सूचना र अन्य जानकारीको जाँच गर्न आफ्नो ट्याब्लेट उठाउनुहोस्।"</string>
- <string name="ambient_display_pickup_summary" product="device" msgid="404199660076598026">"समय, सूचना तथा अन्य जानकारीको जाँच गर्न आफ्नो यन्त्र उठाउनुहोस्।"</string>
+ <string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"समय, सूचना र अन्य जानकारी हेर्न आफ्नो फोन उठाउनुहोस्।"</string>
+ <string name="ambient_display_pickup_summary" product="tablet" msgid="1077745287100012928">"समय, सूचना र अन्य जानकारी हेर्न आफ्नो ट्याब्लेट उठाउनुहोस्।"</string>
+ <string name="ambient_display_pickup_summary" product="device" msgid="404199660076598026">"समय, सूचना तथा अन्य जानकारी हेर्न आफ्नो यन्त्र उठाउनुहोस्।"</string>
<string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"फोनको जाँच गर्न ट्याप गर्नुहोस्"</string>
<string name="ambient_display_tap_screen_title" product="tablet" msgid="6434521782016864148">"ट्याब्लेटको जाँच गर्न ट्याप गर्नुहोस्"</string>
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"यन्त्रको जाँच गर्न ट्याप गर्नुहोस्"</string>
- <string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"समय, सूचना र अन्य जानकारीको जाँच गर्न आफ्नो यन्त्रको स्क्रिनमा ट्याप गर्नुहोस्।"</string>
- <string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"सूचनाहरू प्राप्त गर्न फिंगरप्रिन्ट स्वाइप गर्नुहोस्"</string>
+ <string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"समय, सूचना र अन्य जानकारी हेर्न आफ्नो यन्त्रको स्क्रिनमा ट्याप गर्नुहोस्।"</string>
+ <string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"सूचनाहरू हेर्न फिंगरप्रिन्ट स्वाइप गर्नुहोस्"</string>
<string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"फिंगरप्रिन्ट स्वाइप गर्नु"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"अफ्ना सूचनाहरूको जाँच गर्न आफ्नो फोनको पछाडिको भागमा रहेको फिंगरप्रिन्ट सेन्सरमा तलतिर स्वाइप गर्नुहोस्।"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"अफ्ना सूचनाहरूको जाँच गर्न आफ्नो ट्याब्लेटको पछाडिको भागमा रहेको फिंगरप्रिन्ट सेन्सरमा तलतिर स्वाइप गर्नुहोस्।"</string>
@@ -4147,18 +4149,18 @@
<string name="oem_unlock_enable_disabled_summary_sim_locked_device" msgid="5223278198179877704">"वाहकद्वारा लक गरिएका यन्त्रहरूमा उपलब्ध छैन"</string>
<string name="oem_lock_info_message" msgid="5090850412279403901">"यन्त्रको सुरक्षासम्बन्धी सुविधा सक्षम पार्न कृपया यन्त्र पुनः सुरु गर्नुहोस्।"</string>
<string name="automatic_storage_manager_freed_bytes" msgid="7360443072390107772">"कुल उपलब्ध गराइएको <xliff:g id="SIZE">%1$s</xliff:g>\n\nपछिल्लो पटक <xliff:g id="DATE">%2$s</xliff:g> मा सञ्चालन गरिएको"</string>
- <string name="web_action_enable_title" msgid="4462106633708675959">"तात्कालिक अनुप्रयोगहरू"</string>
+ <string name="web_action_enable_title" msgid="4462106633708675959">"तात्कालिक एपहरू"</string>
<string name="web_action_enable_summary" msgid="1729016644691793085">"अनुप्रयोगहरूको स्थापना नगरिए तापनि लिंकहरूलाई तिनीहरूमा खोल्नुहोस्"</string>
- <string name="web_action_section_title" msgid="5563229447734734662">"तात्कालिक अनुप्रयोगहरू"</string>
+ <string name="web_action_section_title" msgid="5563229447734734662">"तात्कालिक एपहरू"</string>
<string name="instant_apps_settings" msgid="879003203555847537">"तात्कालिक अनुप्रयोगका प्राथमिकताहरू"</string>
- <string name="domain_url_section_title" msgid="206403507921518321">"स्थापना गरिएका अनुप्रयोगहरू"</string>
+ <string name="domain_url_section_title" msgid="206403507921518321">"स्थापना गरिएका एपहरू"</string>
<string name="automatic_storage_manager_activation_warning" msgid="2630083316417707308">"तपाईंको भण्डारण अहिले भण्डारण प्रबन्धकद्वारा व्यवस्थापन भइरहेको छ"</string>
<string name="account_for_section_header" msgid="5975241715840642563">"<xliff:g id="USER_NAME">%1$s</xliff:g> का खाताहरू"</string>
<string name="configure_section_header" msgid="6988981883075615136">"कन्फिगर गर्नुहोस्"</string>
<string name="auto_sync_account_title" msgid="2394463123733529506">"स्वत: डेटा सिंक गर्नुहोस्"</string>
<string name="auto_sync_personal_account_title" msgid="6844465157916100655">"व्यक्तिगत डेटा स्वत: सिंक गर्नुहोस्"</string>
<string name="auto_sync_work_account_title" msgid="2403222633447522376">"कार्य सम्बन्धी डेटा स्वत: सिंक गर्नुहोस्"</string>
- <string name="auto_sync_account_summary" msgid="6316230976974033772">"अनुप्रयोगहरूलाई स्वत: डेटालाई ताजा पार्न दिनुहोस्"</string>
+ <string name="auto_sync_account_summary" msgid="6316230976974033772">"अनुप्रयोगहरूलाई स्वत: डेटा रिफ्रेस गर्न दिनुहोस्"</string>
<string name="account_sync_title" msgid="1570164819114297154">"खाताको सिंक"</string>
<string name="account_sync_summary_some_on" msgid="1934556869158274053">"<xliff:g id="ID_2">%2$d</xliff:g> मध्ये <xliff:g id="ID_1">%1$d</xliff:g> वस्तुहरूका लागि सिंक गर्ने सेवा सक्रिय छ"</string>
<string name="account_sync_summary_all_on" msgid="3634161204232431700">"सबै वस्तुहरूका लागि सिंक गर्ने सेवा सक्रिय छ"</string>
@@ -4177,19 +4179,19 @@
<string name="enterprise_privacy_bug_reports" msgid="283443567328836380">"सबैभन्दा पछिल्लो बग रिपोर्ट"</string>
<string name="enterprise_privacy_security_logs" msgid="8936969480449604726">"सबैभन्दा पछिल्लो सुरक्षा लग"</string>
<string name="enterprise_privacy_none" msgid="5990646476868794882">"कुनै पनि होइन"</string>
- <string name="enterprise_privacy_enterprise_installed_packages" msgid="6575025134782391212">"अनुप्रयोगहरू स्थापना गरियो"</string>
- <string name="enterprise_privacy_apps_count_estimation_info" msgid="5020730108878608500">"अनुप्रयोगको संख्या अनुमानित हो। Play Store भन्दा बाहिरबाट स्थापना गरिएका अनुप्रयोगहरूलाई यसले नसमेट्न सक्छ।"</string>
+ <string name="enterprise_privacy_enterprise_installed_packages" msgid="6575025134782391212">"एपहरू स्थापना गरियो"</string>
+ <string name="enterprise_privacy_apps_count_estimation_info" msgid="5020730108878608500">"एपको संख्या अनुमानित हो। Play Store भन्दा बाहिरबाट स्थापना गरिएका अनुप्रयोगहरूलाई यसले नसमेट्न सक्छ।"</string>
<plurals name="enterprise_privacy_number_packages_lower_bound" formatted="false" msgid="5161417161943060602">
- <item quantity="other">न्यूनतम <xliff:g id="COUNT_1">%d</xliff:g> अनुप्रयोग</item>
- <item quantity="one">न्यूनतम <xliff:g id="COUNT_0">%d</xliff:g> अनुप्रयोग</item>
+ <item quantity="other">न्यूनतम <xliff:g id="COUNT_1">%d</xliff:g> एप</item>
+ <item quantity="one">न्यूनतम <xliff:g id="COUNT_0">%d</xliff:g> एप</item>
</plurals>
<string name="enterprise_privacy_location_access" msgid="110406267468274216">"स्थानसम्बन्धी अनुमतिहरू"</string>
<string name="enterprise_privacy_microphone_access" msgid="4586428105675460207">"माइक्रोफोनसम्बन्धी अनुमतिहरू"</string>
<string name="enterprise_privacy_camera_access" msgid="2366392786153103482">"क्यामेरा सम्बन्धी अनुमतिहरू"</string>
- <string name="enterprise_privacy_enterprise_set_default_apps" msgid="6142937923758931242">"पूर्वनिर्धारित अनुप्रयोगहरू"</string>
+ <string name="enterprise_privacy_enterprise_set_default_apps" msgid="6142937923758931242">"पूर्वनिर्धारित एपहरू"</string>
<plurals name="enterprise_privacy_number_packages" formatted="false" msgid="1480745164313890415">
- <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> अनुप्रयोगहरू</item>
- <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> अनुप्रयोग</item>
+ <item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> एपहरू</item>
+ <item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> एप</item>
</plurals>
<string name="enterprise_privacy_input_method" msgid="5885916325874284011">"पूर्वनिर्धारित किबोर्ड"</string>
<string name="enterprise_privacy_input_method_name" msgid="439610095825218563">"<xliff:g id="APP_LABEL">%s</xliff:g> मा सेट गरिएको छ"</string>
@@ -4217,32 +4219,32 @@
<string name="do_disclosure_learn_more_separator" msgid="702345537118848010">" "</string>
<string name="learn_more" msgid="6844160787130206258">"थप जान्नुहोस्"</string>
<plurals name="default_camera_app_title" formatted="false" msgid="8762954032197483848">
- <item quantity="other">क्यामेरा अनुप्रयोगहरू</item>
+ <item quantity="other">क्यामेरा एपहरू</item>
<item quantity="one">क्यामेरा अनुप्रयोग</item>
</plurals>
- <string name="default_calendar_app_title" msgid="6484001237347739255">"पात्रो अनुप्रयोग"</string>
- <string name="default_contacts_app_title" msgid="1050372162465746272">"सम्पर्क अनुप्रयोग"</string>
+ <string name="default_calendar_app_title" msgid="6484001237347739255">"पात्रो एप"</string>
+ <string name="default_contacts_app_title" msgid="1050372162465746272">"सम्पर्क एप"</string>
<plurals name="default_email_app_title" formatted="false" msgid="6875559046625447168">
- <item quantity="other">इमेल क्लाइन्ट अनुप्रयोगहरू</item>
+ <item quantity="other">इमेल क्लाइन्ट एपहरू</item>
<item quantity="one">इमेल क्लाइन्ट अनुप्रयोग</item>
</plurals>
- <string name="default_map_app_title" msgid="6919751358166607185">"नक्सा अनुप्रयोग"</string>
+ <string name="default_map_app_title" msgid="6919751358166607185">"नक्सा एप"</string>
<plurals name="default_phone_app_title" formatted="false" msgid="7593838689002912108">
- <item quantity="other">फोन अनुप्रयोगहरू</item>
+ <item quantity="other">फोन एपहरू</item>
<item quantity="one">फोन अनुप्रयोग</item>
</plurals>
<string name="app_names_concatenation_template_2" msgid="8267577900046506189">"<xliff:g id="FIRST_APP_NAME">%1$s</xliff:g>, <xliff:g id="SECOND_APP_NAME">%2$s</xliff:g>"</string>
<string name="app_names_concatenation_template_3" msgid="5129064036161862327">"<xliff:g id="FIRST_APP_NAME">%1$s</xliff:g>, <xliff:g id="SECOND_APP_NAME">%2$s</xliff:g>, <xliff:g id="THIRD_APP_NAME">%3$s</xliff:g>"</string>
- <string name="storage_photos_videos" msgid="1890829312367477559">"तस्बिर र भिडियोहरू"</string>
+ <string name="storage_photos_videos" msgid="1890829312367477559">"फोटो र भिडियोहरू"</string>
<string name="storage_music_audio" msgid="3661289086715297149">"सङ्गीत तथा अडियो"</string>
<string name="storage_games" msgid="7740038143749092373">"खेलहरू"</string>
- <string name="storage_other_apps" msgid="3202407095387420842">"अन्य अनुप्रयोगहरू"</string>
+ <string name="storage_other_apps" msgid="3202407095387420842">"अन्य एपहरू"</string>
<string name="storage_files" msgid="2087824267937487880">"फाइलहरू"</string>
<string name="storage_size_large_alternate" msgid="1317796542509105857">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" "<font size="20">"<xliff:g id="UNIT">^2</xliff:g>"</font></small>""</string>
<string name="storage_volume_total" msgid="5021484171514159913">"<xliff:g id="TOTAL">%1$s</xliff:g> मध्ये प्रयोग भएको"</string>
<string name="storage_percent_full" msgid="6924662861545958442">"प्रयोग भयो"</string>
- <string name="clear_instant_app_data" msgid="3673669086522890405">"अनुप्रयोगको डेटा खाली गर्नुहोस्"</string>
- <string name="clear_instant_app_confirmation" msgid="1778553115373698061">"तपाईं यो तात्कालिक अनुप्रयोगलाई हटाउन चाहनुहुन्छ?"</string>
+ <string name="clear_instant_app_data" msgid="3673669086522890405">"एपको डेटा खाली गर्नुहोस्"</string>
+ <string name="clear_instant_app_confirmation" msgid="1778553115373698061">"तपाईं यो तात्कालिक एपलाई हटाउन चाहनुहुन्छ?"</string>
<string name="launch_instant_app" msgid="5251693061228352333">"खोल्नुहोस्"</string>
<string name="game_storage_settings" msgid="6856911551799175914">"खेलहरू"</string>
<string name="audio_files_title" msgid="3073879661731363935">"अडियो फाइलहरू"</string>
@@ -4251,7 +4253,7 @@
<string name="webview_disabled_for_user" msgid="8057805373224993504">"(प्रयोगकर्ता <xliff:g id="USER">%s</xliff:g> को लागि असक्षम पारियो)"</string>
<string name="autofill_app" msgid="3990765434980280073">"स्वतः भरण सेवा"</string>
<string name="autofill_keywords" msgid="7717726766232862218">"स्वतः, भरण, स्वतः भरण"</string>
- <string name="autofill_confirmation_message" msgid="1385894598730361304">"<b>तपाईं यो अनुप्रयोगमाथि भरोसा गर्नुहुन्छ भन्ने कुरा पक्का गर्नुहोस्</b> <br/> <br/> <xliff:g id=app_name example=Google Autofill>%1$s</xliff:g> यस अनुप्रयोगले स्वतः भर्नसकिने कुराहरूको निर्धारण गर्न तपाईंको स्क्रिनमा भएका वस्तुहरूको प्रयोग गर्छ।"</string>
+ <string name="autofill_confirmation_message" msgid="1385894598730361304">"<b>तपाईं यो एपमाथि भरोसा गर्नुहुन्छ भन्ने कुरा पक्का गर्नुहोस्</b> <br/> <br/> <xliff:g id=app_name example=Google Autofill>%1$s</xliff:g> यस अनुप्रयोगले स्वतः भर्नसकिने कुराहरूको निर्धारण गर्न तपाईंको स्क्रिनमा भएका वस्तुहरूको प्रयोग गर्छ।"</string>
<string name="debug_autofill_category" msgid="6262526615416295645">"स्वतः भरण"</string>
<string name="autofill_logging_level_title" msgid="2577340324541102626">"लगिङको स्तर"</string>
<string name="autofill_max_partitions" msgid="125269645910590057">"प्रति सत्र अनुरोधको अधिकतम सङ्ख्या"</string>
@@ -4261,16 +4263,16 @@
<string name="device_theme" msgid="8992291311481135893">"यन्त्रको विषयवस्तु"</string>
<string name="default_theme" msgid="5986996377385956138">"पूर्वनिर्धारित"</string>
<string name="show_operator_name_title" msgid="5056163028128447308">"नेटवर्कको नाम"</string>
- <string name="show_operator_name_summary" msgid="6352180285743777497">"वस्तुस्थिति पट्टीमा नेटवर्कको नाम देखाउनुहोस्"</string>
+ <string name="show_operator_name_summary" msgid="6352180285743777497">"स्टाटस बारमा नेटवर्कको नाम देखाउनुहोस्"</string>
<string name="storage_manager_indicator" msgid="4255140732848476875">"भण्डारणको प्रबन्धक: <xliff:g id="STATUS">^1</xliff:g>"</string>
<string name="storage_manager_indicator_off" msgid="6404056007102580777">"निष्क्रिय"</string>
<string name="storage_manager_indicator_on" msgid="5295306384982062320">"सक्रिय"</string>
- <string name="install_type_instant" msgid="6248487669862821874">"तात्कालिक अनुप्रयोग"</string>
+ <string name="install_type_instant" msgid="6248487669862821874">"तात्कालिक एप"</string>
<string name="automatic_storage_manager_deactivation_warning" msgid="7867793739491286374">"भण्डारण व्यवस्थापक निष्क्रिय पार्ने हो?"</string>
- <string name="storage_movies_tv" msgid="7282484273991655296">"चलचित्र तथा TV अनुप्रयोगहरू"</string>
+ <string name="storage_movies_tv" msgid="7282484273991655296">"चलचित्र तथा टिभी एपहरू"</string>
<string name="carrier_provisioning" msgid="3309125279191534469">"सेवा प्रदायकको प्रावधान सम्बन्धी जानकारी"</string>
<string name="trigger_carrier_provisioning" msgid="6284005970057901477">"सेवा प्रदायकको प्रावधानलाई ट्रिगर गर्नुहोस्"</string>
- <string name="zen_suggestion_title" msgid="2134699720214231950">"बाधा नपुर्याउनुहोस् नामक सेवालाई अद्यावधिक गर्नुहोस्"</string>
+ <string name="zen_suggestion_title" msgid="2134699720214231950">"बाधा नपुर्याउनुहोस् नामक सेवालाई अपडेट गर्नुहोस्"</string>
<string name="zen_suggestion_summary" msgid="4041062903237952737">"केन्द्रित रहन सूचनाहरू पज गर्नुहोस्"</string>
<string name="disabled_low_ram_device" msgid="4958060232123741721">"यस यन्त्रमा यो सुविधा उपलब्ध छैन"</string>
<string name="disabled_feature" msgid="3747549387387702365">"यो सुविधा उपलब्ध छैन"</string>
@@ -4282,10 +4284,10 @@
<string name="allow_background_activity_starts" msgid="6754016668813082728">"पृष्ठभूमिको क्रियाकलाप सुरु हुने अनुमति दिनुहोस्"</string>
<string name="allow_background_activity_starts_summary" msgid="8170749270869606692">"पृष्ठभूमिका सबै क्रियाकलाप सुरु हुने अनुमति दिनुहोस्"</string>
<string name="show_first_crash_dialog" msgid="3682063068903692710">"सधैँ क्र्याससम्बन्धी संवाद देखाउनुस्"</string>
- <string name="show_first_crash_dialog_summary" msgid="8197987550025401754">"प्रत्येकपटक अनुप्रयोग क्र्यास हुँदा संवाद देखाउनुहोस्"</string>
- <string name="angle_enabled_app" msgid="4359266182151708733">"कोण सक्षम पारिएको अनुप्रयोग चयन गर्नुहोस्"</string>
- <string name="angle_enabled_app_not_set" msgid="7428910515748621910">"कोण सक्षम पारिएको कुनै पनि अनुप्रयोग सेट गरिएको छैन"</string>
- <string name="angle_enabled_app_set" msgid="7313088703610569320">"कोण सक्षम पारिएको अनुप्रयोग: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
+ <string name="show_first_crash_dialog_summary" msgid="8197987550025401754">"प्रत्येकपटक एप क्र्यास हुँदा संवाद देखाउनुहोस्"</string>
+ <string name="angle_enabled_app" msgid="4359266182151708733">"कोण सक्षम पारिएको एप चयन गर्नुहोस्"</string>
+ <string name="angle_enabled_app_not_set" msgid="7428910515748621910">"कोण सक्षम पारिएको कुनै पनि एप सेट गरिएको छैन"</string>
+ <string name="angle_enabled_app_set" msgid="7313088703610569320">"कोण सक्षम पारिएको एप: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string>
<string name="game_driver_dashboard_title" msgid="219443350404091201">"गेम ड्राइभरका प्राथमिकताहरू"</string>
<string name="game_driver_dashboard_summary" msgid="1500674075618790528">"गेम ड्राइभरका सेटिङहरू परिमार्जन गर्नुहोस्"</string>
<string name="game_driver_footer_text" msgid="1540158284161797913">"गेम ड्राइभर सक्रिय गरिँदा, तपाईं यस यन्त्रमा स्थापना गरिएका अनुप्रयोगहरूका हकमा अद्यावधिक गरिएको ग्राफिक्स ड्राइभर प्रयोग गर्ने विकल्प छनौट गर्न सक्नुहुन्छ।"</string>
@@ -4306,8 +4308,8 @@
<string name="my_device_info_account_preference_title" msgid="7965847995028952373">"खाता"</string>
<string name="my_device_info_device_name_preference_title" msgid="7384446683248009296">"यन्त्रको नाम"</string>
<string name="change_wifi_state_title" msgid="5140754955787584174">"Wi-Fi को नियन्त्रण"</string>
- <string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"अनुप्रयोगलाई Wi-Fi नियन्त्रण गर्ने अनुमति दिनुहोस्"</string>
- <string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"यो अनुप्रयोगलाई Wi-Fi सक्रिय गर्ने वा निष्क्रिय पार्ने अनुमति दिनुहोस्, स्क्यान गरी Wi-Fi नेटवर्कमा जडान गर्नुहोस्, नेटवर्कहरू थप्नुहोस् वा हटाउनुहोस्, वा स्थानीय रूपमा मात्र प्रयोग गर्न मिल्ने हटस्पट सुरु गर्नुहोस्"</string>
+ <string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"एपलाई Wi-Fi नियन्त्रण गर्ने अनुमति दिनुहोस्"</string>
+ <string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"यो एपलाई Wi-Fi सक्रिय गर्ने वा निष्क्रिय पार्ने अनुमति दिनुहोस्, स्क्यान गरी Wi-Fi नेटवर्कमा जडान गर्नुहोस्, नेटवर्कहरू थप्नुहोस् वा हटाउनुहोस्, वा स्थानीय रूपमा मात्र प्रयोग गर्न मिल्ने हटस्पट सुरु गर्नुहोस्"</string>
<string name="media_output_title" msgid="8710632337456601848">"मिडिया यसमा प्ले गर्नुहोस्"</string>
<string name="media_output_default_summary" msgid="3159237976830415584">"यो यन्त्र"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"फोन"</string>
@@ -4321,7 +4323,7 @@
<string name="battery_suggestion_title" product="device" msgid="765005476863631528">"यन्त्रको ब्याट्रीको आयुमा सुधार गर्नुहोस्"</string>
<string name="battery_suggestion_title" product="default" msgid="3295786171830183688">"फोनको ब्याट्रीको आयुमा सुधार गर्नुहोस्"</string>
<string name="battery_suggestion_summary" msgid="2669070349482656490"></string>
- <string name="gesture_prevent_ringing_screen_title" msgid="4173494225145223638">"घन्टी बज्नबाट रोक्नुहोस्"</string>
+ <string name="gesture_prevent_ringing_screen_title" msgid="4173494225145223638">"घन्टी बज्न नदिनुहोस्"</string>
<string name="gesture_prevent_ringing_title" msgid="8827963588425673557">"पावर तथा भोल्युम बढाउने बटन एकैपटक थिच्नुहोस्"</string>
<string name="gesture_prevent_ringing_sound_title" msgid="8642330448721033641">"घन्टी बज्ने कार्य रोक्न सर्टकट"</string>
<string name="prevent_ringing_option_vibrate" msgid="6456505293904544108">"कम्पन"</string>
@@ -4330,8 +4332,8 @@
<string name="prevent_ringing_option_vibrate_summary" msgid="7961818570574683926">"सक्रिय (कम्पन)"</string>
<string name="prevent_ringing_option_mute_summary" msgid="3509459199090688328">"सक्रिय (म्युट)"</string>
<string name="prevent_ringing_option_none_summary" msgid="5152618221093037451">"निष्क्रिय"</string>
- <string name="pref_title_network_details" msgid="3971074015034595956">"नेटवर्कसम्बन्धी विवरणहरू"</string>
- <string name="about_phone_device_name_warning" msgid="9088572775969880106">"तपाईंको फोनमा रहेका अनुप्रयोगहरूले तपाईंको यन्त्रको नाम देख्न सक्छन्। तपाईंले ब्लुटुथ यन्त्रहरूमा जडान गर्दा वा कुनै Wi-Fi हटस्पट सेटअप गर्दा अरू मान्छेहरू पनि यसलाई देख्न सक्छन्।"</string>
+ <string name="pref_title_network_details" msgid="3971074015034595956">"नेटवर्कको विवरण"</string>
+ <string name="about_phone_device_name_warning" msgid="9088572775969880106">"तपाईंको फोनमा रहेका एपहरूले तपाईंको यन्त्रको नाम देख्न सक्छन्। तपाईंले ब्लुटुथ यन्त्रहरूमा जडान गर्दा वा कुनै Wi-Fi हटस्पट सेटअप गर्दा अरू मान्छेहरू पनि यसलाई देख्न सक्छन्।"</string>
<string name="devices_title" msgid="4768432575951993648">"यन्त्रहरू"</string>
<string name="homepage_all_settings" msgid="3201220879559136116">"सबै सेटिङहरू"</string>
<string name="homepage_personal_settings" msgid="7472638597249114564">"सुझावहरू"</string>
@@ -4439,11 +4441,11 @@
<string name="register_automatically" msgid="1858081641661493109">"स्वतः दर्ता…"</string>
<string name="roaming_alert_title" msgid="1849237823113454475">"डेटा रोमिङलाई अनुमति दिने हो?"</string>
<string name="roaming_check_price_warning" msgid="5883499714594419439">"मूल्यसम्बन्धी जानकारीका लागि आफ्नो नेटवर्क प्रदायकलाई सोध्नुहोस्।"</string>
- <string name="mobile_data_usage_title" msgid="2376358672434990037">"अनुप्रयोगको डेटाको प्रयोग"</string>
+ <string name="mobile_data_usage_title" msgid="2376358672434990037">"एपको डेटाको प्रयोग"</string>
<string name="mobile_network_mode_error" msgid="6818434186286086554">"अमान्य नेटवर्क मोड <xliff:g id="NETWORKMODEID">%1$d</xliff:g>। बेवास्ता गर्नुहोस्।"</string>
<string name="mobile_network_apn_title" msgid="5628635067747404382">"एक्सेस पोइन्ट नामहरू"</string>
<string name="manual_mode_disallowed_summary" msgid="799800630000340665">"<xliff:g id="CARRIER">%1$s</xliff:g> मा जडान हुँदा उपलब्ध छैन"</string>
- <string name="emergency_info_contextual_card_summary" msgid="5541444321969803486">"चिकित्सकीय जानकारी, आपतकालीन सम्पर्कहरू"</string>
+ <string name="emergency_info_contextual_card_summary" msgid="5541444321969803486">"चिकित्सकीय जानकारी, आपत्कालीन सम्पर्कहरू"</string>
<string name="see_more" msgid="7463940160389802632">"थप हेर्नुहोस्"</string>
<string name="see_less" msgid="3718892257002813387">"कम हेर्नुहोस्"</string>
<string name="network_connection_request_dialog_title" msgid="3150489262902506588">"<xliff:g id="APPNAME">%1$s</xliff:g> प्रयोग गरिने यन्त्र"</string>
@@ -4484,22 +4486,22 @@
<string name="permission_bar_chart_title" msgid="874145405516650073">"पछिल्लो २४ घन्टामा गरिएको अनुमतिको प्रयोग"</string>
<string name="permission_bar_chart_details" msgid="942094334321073927">"ड्यासबोर्डमा सबै कुरा हेर्नुहोस्"</string>
<plurals name="permission_bar_chart_label" formatted="false" msgid="2831305719356562097">
- <item quantity="other"><xliff:g id="NUMBER">%s</xliff:g> अनुप्रयोगहरू</item>
- <item quantity="one">१ अनुप्रयोग</item>
+ <item quantity="other"><xliff:g id="NUMBER">%s</xliff:g> एपहरू</item>
+ <item quantity="one">१ एप</item>
</plurals>
<string name="accessibility_usage_title" msgid="3920601240120963611">"पहुँचसम्बन्धी सेवाहरूको प्रयोग"</string>
<plurals name="accessibility_usage_summary" formatted="false" msgid="2604152087205501644">
- <item quantity="other"><xliff:g id="SERVICE_COUNT">%1$d</xliff:g> अनुप्रयोगहरूले तपाईंको यन्त्रमाथि पूर्ण रूपमा पहुँच राख्न सक्छन्</item>
+ <item quantity="other"><xliff:g id="SERVICE_COUNT">%1$d</xliff:g> एपहरूले तपाईंको यन्त्रमाथि पूर्ण रूपमा पहुँच राख्न सक्छन्</item>
<item quantity="one">१ अनुप्रयोगले तपाईंको यन्त्रमाथि पूर्ण रूपमा पहुँच राख्न सक्छ</item>
</plurals>
<string name="manage_app_notification" msgid="9072118910762792295">"<xliff:g id="APP_NAME">%1$s</xliff:g> सम्बन्धी सूचनाहरूको व्यवस्थापन गर्नुहोस्"</string>
- <string name="no_suggested_app" msgid="509257628685025383">"सिफारिस गरिएको कुनै पनि अनुप्रयोग छैन"</string>
+ <string name="no_suggested_app" msgid="509257628685025383">"सिफारिस गरिएको कुनै पनि एप छैन"</string>
<plurals name="notification_few_channel_count_summary" formatted="false" msgid="5165639207390218085">
<item quantity="other">सूचनाका <xliff:g id="NOTIFICATION_CHANNEL_COUNT_1">%1$d</xliff:g> च्यानलहरू।</item>
<item quantity="one">सूचनाको <xliff:g id="NOTIFICATION_CHANNEL_COUNT_0">%1$d</xliff:g> च्यानल।</item>
</plurals>
<string name="notification_many_channel_count_summary" msgid="9205641731142529086">"सूचनाका <xliff:g id="NOTIFICATION_CHANNEL_COUNT">%1$d</xliff:g> च्यानलहरू। सबैको व्यवस्थापन गर्न ट्याप गर्नुहोस्।"</string>
- <string name="recently_installed_app" msgid="6491959945747808096">"तपाईंले हालसालै यो अनुप्रयोग स्थापना गर्नुभयो।"</string>
+ <string name="recently_installed_app" msgid="6491959945747808096">"तपाईंले हालसालै यो एप स्थापना गर्नुभयो।"</string>
<string name="media_output_panel_title" msgid="8429272102437211530">"आउटपुट बदल्नुहोस्"</string>
<string name="media_output_panel_summary_of_playing_device" msgid="7425231720911606911">"हाल <xliff:g id="DEVICE_NAME">%1$s</xliff:g> मा प्ले भइरहेको"</string>
<string name="wfc_disclaimer_title_text" msgid="3245793509743182243">"महत्त्वपूर्ण जानकारी"</string>
@@ -4518,5 +4520,5 @@
<string name="automatic_system_heap_dump_summary" msgid="4962129546638974661">"Android प्रणालीले अत्यधिक मेमोरी प्रयोग गर्दा यसका लागि स्वतः हिप डम्प समावेश गर्नुहोस्"</string>
<string name="wifi_disconnect_button_text" msgid="787688024070426706">"विच्छेद गर्नुहोस्"</string>
<string name="wfc_disclaimer_emergency_limitation_title_text" msgid="26884532087670844">"आपताकालीन कल"</string>
- <string name="wfc_disclaimer_emergency_limitation_desc_text" msgid="8726152486964822599">"तपाईंको सेवा प्रदायकले Wi‑Fi मार्फत आपतकालीन कल गर्ने सुविधा समर्थन गदैन। \nअपतकालीन कल गर्नका लागि उक्त यन्त्रले स्वतः सेलुलर नेटवर्क प्रयोग गर्छ।\n सेलुलर नेटवर्कको कभरेज राम्रो भएका क्षेत्रमा मात्र अपतकालीन कल गर्न सम्भव हुन्छ।"</string>
+ <string name="wfc_disclaimer_emergency_limitation_desc_text" msgid="8726152486964822599">"तपाईंको सेवा प्रदायकले Wi‑Fi मार्फत आपत्कालीन कल गर्ने सुविधा समर्थन गदैन। \nअपतकालीन कल गर्नका लागि उक्त यन्त्रले स्वतः सेलुलर नेटवर्क प्रयोग गर्छ।\n सेलुलर नेटवर्कको कभरेज राम्रो भएका क्षेत्रमा मात्र अपतकालीन कल गर्न सम्भव हुन्छ।"</string>
</resources>
diff --git a/tests/CarDeveloperOptions/res/values-nl/arrays.xml b/tests/CarDeveloperOptions/res/values-nl/arrays.xml
index bb696eb..0e77dbd 100644
--- a/tests/CarDeveloperOptions/res/values-nl/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-nl/arrays.xml
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"Nooit toestaan"</item>
<item msgid="8184570120217958741">"Altijd toestaan"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normaal"</item>
+ <item msgid="5101233285497327432">"Gemiddeld"</item>
+ <item msgid="1555861583162930714">"Laag"</item>
+ <item msgid="1719683776264798117">"Kritiek"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normaal"</item>
+ <item msgid="6107138933849816768">"Gemiddeld"</item>
+ <item msgid="182695359839047859">"Laag"</item>
+ <item msgid="8577246509202964244">"Kritiek"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Permanent"</item>
<item msgid="167418068739176448">"Topactiviteit"</item>
diff --git a/tests/CarDeveloperOptions/res/values-nl/strings.xml b/tests/CarDeveloperOptions/res/values-nl/strings.xml
index a8d8d6f..4211351 100644
--- a/tests/CarDeveloperOptions/res/values-nl/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-nl/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Maak de tekst op het scherm kleiner of groter."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Verkleinen"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Vergroten"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Voorbeeldtekst"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"De tovenaar van Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Hoofdstuk 11: De prachtige Smaragden Stad van Oz"</string>
@@ -113,7 +112,7 @@
<string name="bluetooth_disconnect_all_profiles" product="tablet" msgid="7322773998151831579">"De verbinding tussen je tablet en <xliff:g id="DEVICE_NAME">%1$s</xliff:g> wordt verbroken."</string>
<string name="bluetooth_disconnect_all_profiles" product="device" msgid="4707569949253450208">"De verbinding tussen je apparaat en <xliff:g id="DEVICE_NAME">%1$s</xliff:g> wordt verbroken."</string>
<string name="bluetooth_disconnect_dialog_ok" msgid="4183522987246110145">"Koppel los"</string>
- <string name="bluetooth_empty_list_user_restricted" msgid="3616298363281495777">"Je hebt geen toestemming om de Bluetooth-instellingen te wijzigen."</string>
+ <string name="bluetooth_empty_list_user_restricted" msgid="3616298363281495777">"Je hebt geen rechten om de Bluetooth-instellingen te wijzigen."</string>
<string name="bluetooth_pairing_pref_title" msgid="2904954138013884029">"Apparaat koppelen"</string>
<string name="bluetooth_is_visible_message" msgid="6341088682252805612">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> is zichtbaar voor apparaten in de buurt wanneer het venster \'Bluetooth-instellingen\' is geopend."</string>
<string name="bluetooth_footer_mac_message" product="default" msgid="335341476746836260">"Bluetooth-adres van je telefoon: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
@@ -128,7 +127,7 @@
<string name="bluetooth_notif_title" msgid="5090288898529286011">"Koppelingsverzoek"</string>
<string name="bluetooth_notif_message" msgid="6612367890895077938">"Tik om te koppelen met <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
<string name="bluetooth_show_received_files" msgid="5060846395852236652">"Ontvangen bestanden"</string>
- <string name="bluetooth_show_files_received_via_bluetooth" msgid="1699095577431389560">"Bestanden ontvangen via Bluetooth"</string>
+ <string name="bluetooth_show_files_received_via_bluetooth" msgid="1699095577431389560">"Bestanden ontvangen via bluetooth"</string>
<string name="device_picker" msgid="8345264486071697705">"Bluetooth-apparaat kiezen"</string>
<string name="bluetooth_ask_enablement" msgid="8716802066127746062">"<xliff:g id="APP_NAME">%1$s</xliff:g> wil Bluetooth inschakelen"</string>
<string name="bluetooth_ask_disablement" msgid="7125319551097350783">"<xliff:g id="APP_NAME">%1$s</xliff:g> wil Bluetooth uitschakelen"</string>
@@ -199,7 +198,7 @@
<string name="proxy_port_label" msgid="8285157632538848509">"Proxy-poort"</string>
<string name="proxy_exclusionlist_label" msgid="8179084955547941904">"Proxy omzeilen voor"</string>
<string name="proxy_defaultView_text" msgid="5785775257042403261">"Standaardwaarden herstellen"</string>
- <string name="proxy_action_text" msgid="814511434843981413">"Gereed"</string>
+ <string name="proxy_action_text" msgid="814511434843981413">"Klaar"</string>
<string name="proxy_hostname_label" msgid="6798891831427287847">"Hostnaam van proxy"</string>
<string name="proxy_error" msgid="5036164133669802299">"Let op"</string>
<string name="proxy_error_dismiss" msgid="883805570485635650">"OK"</string>
@@ -209,7 +208,7 @@
<string name="proxy_error_empty_host_set_port" msgid="8471455809508588255">"Het poortveld moet leeg zijn als het hostveld leeg is."</string>
<string name="proxy_error_invalid_port" msgid="4046559920586100637">"De poort die je hebt ingevoerd, is ongeldig."</string>
<string name="proxy_warning_limited_support" msgid="9026539134219095768">"De HTTP-proxy wordt gebruikt door de browser, maar mogelijk niet door de andere apps."</string>
- <string name="proxy_url_title" msgid="882042361706435904">"PAC URL: "</string>
+ <string name="proxy_url_title" msgid="882042361706435904">"PAC-URL: "</string>
<string name="radio_info_dl_kbps" msgid="2903778264453410272">"DL-bandbreedte (kbps):"</string>
<string name="radio_info_ul_kbps" msgid="3802245899811732716">"UL-bandbreedte (kbps):"</string>
<string name="radio_info_signal_location_label" msgid="6788144906873498013">"Mobiele locatiegegevens (beëindigd):"</string>
@@ -294,7 +293,7 @@
<string name="okay" msgid="5838476766924989056">"OK"</string>
<string name="forget" msgid="7735525146062672874">"Vergeten"</string>
<string name="save" msgid="3418211178410498517">"Opslaan"</string>
- <string name="done" msgid="5143229467535372339">"Gereed"</string>
+ <string name="done" msgid="5143229467535372339">"Klaar"</string>
<string name="apply" msgid="951230399613164126">"Toepassen"</string>
<string name="share" msgid="3567029787293158575">"Delen"</string>
<string name="add" msgid="903114118076816060">"Toevoegen"</string>
@@ -356,7 +355,7 @@
<string name="security_enable_widgets_title" msgid="1701510007926738088">"Widgets inschakelen"</string>
<string name="security_enable_widgets_disabled_summary" msgid="4408176087132339331">"Uitgeschakeld door beheerder"</string>
<string name="lockdown_settings_title" msgid="4534779922580115990">"Lockdown-optie weergeven"</string>
- <string name="lockdown_settings_summary" msgid="7270756909878256174">"Optie voor aan/uit-knop weergeven waarmee Smart Lock, ontgrendeling via vingerafdruk en meldingen op het vergrendelingsscherm worden uitgeschakeld."</string>
+ <string name="lockdown_settings_summary" msgid="7270756909878256174">"Optie voor aan/uit-knop weergeven waarmee Smart Lock, ontgrendeling via vingerafdruk en meldingen op het vergrendelscherm worden uitgeschakeld."</string>
<string name="trust_agents_extend_unlock_title" msgid="3582017561316089951">"Ontgrendelen verlengen voor trust agents"</string>
<string name="trust_agents_extend_unlock_summary" msgid="3543997596586078084">"Indien ingeschakeld houden trust agents je apparaat langer ontgrendeld, maar hiermee kan een vergrendeld apparaat niet meer worden ontgrendeld."</string>
<string name="trust_lost_locks_screen_title" msgid="3094736590690459372">"Scherm vergr. als vertrouwen kwijt is"</string>
@@ -365,11 +364,11 @@
<string name="owner_info_settings_status" msgid="8049975536717685126">"<xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
<string name="owner_info_settings_edit_text_hint" msgid="2250029417257939706">"Bijvoorbeeld \'Android van Jan\'."</string>
<string name="user_info_settings_title" msgid="1125111518759995748">"Gebruikersgegevens"</string>
- <string name="show_profile_info_on_lockscreen_label" msgid="5204282771893683026">"Profielinfo weergeven op vergrendelingsscherm"</string>
+ <string name="show_profile_info_on_lockscreen_label" msgid="5204282771893683026">"Profielinfo weergeven op vergrendelscherm"</string>
<string name="profile_info_settings_title" msgid="4855892878512562551">"Profielinfo"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Accounts"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Locatie"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Locatie gebruiken"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Locatie gebruiken"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Uit"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Aan: <xliff:g id="COUNT_1">%1$d</xliff:g> apps hebben toegang tot je locatie</item>
@@ -383,7 +382,7 @@
<string name="decryption_settings_summary" product="default" msgid="7401802133199522441">"Telefoon niet gecodeerd"</string>
<string name="encryption_and_credential_settings_summary" product="tablet" msgid="8170667308598998791">"Apparaat versleuteld"</string>
<string name="decryption_settings_summary" product="tablet" msgid="7524119945312453569">"Apparaat niet gecodeerd"</string>
- <string name="lockscreen_settings_title" msgid="1221505938891948413">"Weergave op vergrendelingsscherm"</string>
+ <string name="lockscreen_settings_title" msgid="1221505938891948413">"Weergave op vergrendelscherm"</string>
<string name="lockscreen_settings_what_to_show_category" msgid="3133378945821488654">"Wat wordt weergegeven"</string>
<string name="security_settings_summary" msgid="5210109100643223686">"\'Mijn locatie\', schermontgrendeling, sim- en certificaatopslagvergrendeling instellen"</string>
<string name="cdma_security_settings_summary" msgid="1783066617800041869">"\'Mijn locatie\' instellen, scherm ontgrendelen, certificaatopslag vergrendelen"</string>
@@ -416,7 +415,7 @@
<string name="security_settings_face_enroll_error_timeout_dialog_message" msgid="4917894418448325405">"Tijdlimiet voor gezichtsregistratie is bereikt. Probeer het opnieuw."</string>
<string name="security_settings_face_enroll_error_generic_dialog_message" msgid="5160473187142616862">"Gezichtsregistratie is mislukt"</string>
<string name="security_settings_face_enroll_finish_title" msgid="6800717857394410769">"Alles is ingesteld."</string>
- <string name="security_settings_face_enroll_done" msgid="5409739233373490971">"Gereed"</string>
+ <string name="security_settings_face_enroll_done" msgid="5409739233373490971">"Klaar"</string>
<string name="security_settings_face_settings_use_face_category" msgid="1586532139528115416">"Gezicht gebr. voor"</string>
<string name="security_settings_face_settings_use_face_unlock_phone" msgid="318274519126401671">"Apparaatontgrendeling"</string>
<string name="security_settings_face_settings_use_face_for_apps" msgid="5479369083370664351">"App-login en -betalingen"</string>
@@ -471,7 +470,7 @@
<string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"Til op en raak opnieuw aan"</string>
<string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Raak de sensor meerdere keren aan om de verschillende delen van je vingerafdruk toe te voegen."</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"Vingerafdruk toegevoegd"</string>
- <string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"Wanneer je dit pictogram ziet, kun je je vingerafdruk gebruiken voor identificatie of om een aankoop goed te keuren."</string>
+ <string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"Als je dit icoon ziet, kun je je vingerafdruk gebruiken voor identificatie of om een aankoop goed te keuren."</string>
<string name="security_settings_fingerprint_enroll_enrolling_skip" msgid="1473280156532146933">"Later doen"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_title" msgid="2816424026528101690">"Instellen van vingerafdruk overslaan?"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_message" msgid="8139299964344809780">"Je hebt ervoor gekozen je vingerafdruk te gebruiken als manier om je telefoon te ontgrendelen. Als je dit nu overslaat, moet je het later instellen. Het instellen neemt ongeveer een minuut in beslag."</string>
@@ -485,7 +484,7 @@
<string name="lock_screen_password_skip_title" msgid="3725788215672959827">"Instell. wachtwoord overslaan?"</string>
<string name="lock_screen_pattern_skip_title" msgid="4237030500353932005">"Instellen patroon overslaan?"</string>
<string name="security_settings_fingerprint_enroll_setup_screen_lock" msgid="9036983528330627756">"Schermvergrendeling instellen"</string>
- <string name="security_settings_fingerprint_enroll_done" msgid="4111289529758845926">"Gereed"</string>
+ <string name="security_settings_fingerprint_enroll_done" msgid="4111289529758845926">"Klaar"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"Dat is niet de sensor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"Raak de sensor achter op je telefoon aan. Gebruik je wijsvinger."</string>
<string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"Registratie is niet voltooid"</string>
@@ -566,7 +565,7 @@
<string name="unlock_set_unlock_launch_picker_enable_summary" msgid="9070847611379078795">"Kies een methode voor schermvergrendeling"</string>
<string name="unlock_set_unlock_off_title" msgid="5049876793411416079">"Geen"</string>
<string name="unlock_set_unlock_off_summary" msgid="3997346045783359119"></string>
- <string name="unlock_set_unlock_none_title" msgid="1922027966983146392">"Vegen"</string>
+ <string name="unlock_set_unlock_none_title" msgid="1922027966983146392">"Swipen"</string>
<string name="unlock_set_unlock_none_summary" msgid="4044529413627659031">"Geen beveiliging"</string>
<string name="unlock_set_unlock_pattern_title" msgid="7533759994999423587">"Patroon"</string>
<string name="unlock_set_unlock_pattern_summary" msgid="8858697834522201333">"Gemiddelde beveiliging"</string>
@@ -588,7 +587,7 @@
<string name="face_unlock_title" msgid="1298031162909236127">"Je kunt je telefoon ontgrendelen met je gezicht. Uit beveiligingsoverwegingen is voor deze optie een extra schermvergrendeling vereist."</string>
<string name="unlock_set_unlock_disabled_summary" msgid="1713159782896140817">"Uitgeschakeld door beheerder, versleutelingsbeleid of opslag certificaatgegevens"</string>
<string name="unlock_set_unlock_mode_off" msgid="2950701212659081973">"Geen"</string>
- <string name="unlock_set_unlock_mode_none" msgid="3441605629077912292">"Vegen"</string>
+ <string name="unlock_set_unlock_mode_none" msgid="3441605629077912292">"Swipen"</string>
<string name="unlock_set_unlock_mode_pattern" msgid="8564909572968419459">"Patroon"</string>
<string name="unlock_set_unlock_mode_pin" msgid="7828354651668392875">"Pincode"</string>
<string name="unlock_set_unlock_mode_password" msgid="397703731925549447">"Wachtwoord"</string>
@@ -755,7 +754,7 @@
<string name="bluetooth_pairing_dialog_title" msgid="7900515495932064945">"Koppelen met dit apparaat?"</string>
<string name="bluetooth_pairing_dialog_sharing_phonebook_title" msgid="7395493311980018460">"Telefoonboek delen?"</string>
<string name="bluetooth_pairing_dialog_contants_request" msgid="2103132762434487717">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> wil toegang tot je contacten en gespreksgeschiedenis."</string>
- <string name="bluetooth_pairing_dialog_paring_request" msgid="5513953935086446387">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> wil koppelen via Bluetooth. Na verbinding heeft het toegang tot je contacten en gespreksgeschiedenis."</string>
+ <string name="bluetooth_pairing_dialog_paring_request" msgid="5513953935086446387">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> wil koppelen via bluetooth. Na verbinding heeft het toegang tot je contacten en gespreksgeschiedenis."</string>
<string name="bluetooth_preference_found_media_devices" msgid="5748539613567836379">"Beschikbare apparaten"</string>
<string name="bluetooth_preference_no_found_devices" msgid="4190090666412408576">"Geen apparaten beschikbaar"</string>
<string name="bluetooth_device_context_connect" msgid="1812090541371432890">"Verbinden"</string>
@@ -766,8 +765,8 @@
<string name="bluetooth_device_context_connect_advanced" msgid="423463405499392444">"Opties..."</string>
<string name="bluetooth_menu_advanced" msgid="7566858513372603652">"Geavanceerd"</string>
<string name="bluetooth_advanced_titlebar" msgid="6459469494039004784">"Geavanceerde Bluetooth"</string>
- <string name="bluetooth_empty_list_bluetooth_off" msgid="6255367297830430459">"Als Bluetooth is ingeschakeld, kan je apparaat communiceren met andere Bluetooth-apparaten in de buurt."</string>
- <string name="bluetooth_scanning_on_info_message" msgid="5460370815156050550">"Als Bluetooth is ingeschakeld, kan je apparaat communiceren met andere Bluetooth-apparaten in de buurt.\n\nApps en services kunnen nog steeds op elk gewenst moment naar apparaten in de buurt scannen om de apparaatfunctionaliteit te verbeteren, zelfs als Bluetooth is uitgeschakeld. Dit kan worden gebruikt om bijvoorbeeld locatiegebaseerde functies en services te verbeteren. Je kunt dit wijzigen in de "<annotation id="link">"scaninstellingen"</annotation>"."</string>
+ <string name="bluetooth_empty_list_bluetooth_off" msgid="6255367297830430459">"Als bluetooth is ingeschakeld, kan je apparaat communiceren met andere bluetooth-apparaten in de buurt."</string>
+ <string name="bluetooth_scanning_on_info_message" msgid="5460370815156050550">"Als bluetooth is ingeschakeld, kan je apparaat communiceren met andere bluetooth-apparaten in de buurt.\n\nApps en services kunnen nog steeds op elk gewenst moment naar apparaten in de buurt scannen om de apparaatfunctionaliteit te verbeteren, zelfs als bluetooth is uitgeschakeld. Dit kan worden gebruikt om bijvoorbeeld locatiegebaseerde functies en services te verbeteren. Je kunt dit wijzigen in de "<annotation id="link">"scaninstellingen"</annotation>"."</string>
<string name="ble_scan_notify_text" msgid="6290170236546386932">"Systeem-apps en -services kunnen nog steeds Bluetooth-apparaten detecteren om de nauwkeurigheid van locaties te verbeteren. Je kunt dit wijzigen in de <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>instellingen voor scannen<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
<string name="bluetooth_connect_failed" msgid="1151234676456333786">"Kan geen verbinding maken. Probeer het opnieuw."</string>
<string name="device_details_title" msgid="726517818032923222">"Apparaatgegevens"</string>
@@ -809,7 +808,7 @@
<string name="wifi_display_details" msgid="6379855523460749126">"Weergave-instellingen"</string>
<string name="wifi_display_options_title" msgid="4587264519668872213">"Opties voor draadloze weergave"</string>
<string name="wifi_display_options_forget" msgid="7882982544626742073">"Vergeten"</string>
- <string name="wifi_display_options_done" msgid="5922060890309265817">"Gereed"</string>
+ <string name="wifi_display_options_done" msgid="5922060890309265817">"Klaar"</string>
<string name="wifi_display_options_name" msgid="8477627781133827607">"Naam"</string>
<string name="wifi_band_24ghz" msgid="2973143764653628618">"2,4 GHz"</string>
<string name="wifi_band_5ghz" msgid="6469832209748522207">"5 GHz"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wifi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Wifi inschakelen"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wifi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Wifi gebruiken"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Wifi gebruiken"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wifi-instellingen"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wifi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Draadloze toegangspunten instellen en beheren"</string>
@@ -853,14 +852,14 @@
<string name="wifi_wakeup_summary" msgid="1152699417411690">"Wifi wordt opnieuw ingeschakeld in de buurt van opgeslagen netwerken van hoge kwaliteit, zoals je thuisnetwerk"</string>
<string name="wifi_wakeup_summary_no_location" msgid="3007457288587966962">"Niet beschikbaar omdat locatietoegang is uitgeschakeld. Schakel "<annotation id="link">"locatietoegang"</annotation>" in."</string>
<string name="wifi_wakeup_summary_scanning_disabled" msgid="6820040651529910914">"Niet beschikbaar omdat wifi-scannen is uitgeschakeld"</string>
- <string name="wifi_wakeup_summary_scoring_disabled" msgid="7067018832237903151">"Selecteer een netwerkbeoordelaar om deze optie te gebruiken"</string>
+ <string name="wifi_wakeup_summary_scoring_disabled" msgid="7067018832237903151">"Selecteer een provider van netwerkbeoordelingen om deze optie te gebruiken"</string>
<string name="wifi_poor_network_detection" msgid="7193423327400703073">"Slechte verbindingen vermijden"</string>
<string name="wifi_poor_network_detection_summary" msgid="5539951465985614590">"Wifi-netwerk niet gebruiken, tenzij dit een goede internetverbinding heeft"</string>
<string name="wifi_avoid_poor_network_detection_summary" msgid="1976503191780928104">"Alleen netwerken gebruiken met een goede internetverbinding"</string>
<string name="use_open_wifi_automatically_title" msgid="3084513215481454350">"Verbinding maken met open netwerken"</string>
<string name="use_open_wifi_automatically_summary" msgid="8338020172673161754">"Automatisch verbinding maken met openbare netwerken van hoge kwaliteit"</string>
- <string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"Selecteer een netwerkbeoordelaar om deze optie te gebruiken"</string>
- <string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"Selecteer een geschikte netwerkbeoordelaar om deze optie te gebruiken"</string>
+ <string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"Selecteer een provider van netwerkbeoordelingen om deze optie te gebruiken"</string>
+ <string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"Selecteer een geschikte provider van netwerkbeoordelingen om deze optie te gebruiken"</string>
<string name="wifi_install_credentials" msgid="5650088113710858289">"Certificaten installeren"</string>
<string name="wifi_scan_notify_text" msgid="7614101215028336927">"Apps en services kunnen gewoon wifi-netwerken detecteren, zelfs als wifi is uitgeschakeld, om de locatienauwkeurigheid te verbeteren. Dit kan worden gebruikt om bijvoorbeeld locatiegebaseerde functies en services te verbeteren. Je kunt dit wijzigen in de <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>scaninstellingen<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
<string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"Schakel wifi-scannen in via de <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>scaninstellingen<xliff:g id="LINK_END_1">LINK_END</xliff:g> om de locatienauwkeurigheid te verbeteren."</string>
@@ -891,7 +890,7 @@
<string name="wifi_menu_modify" msgid="4080178040721021101">"Netwerk aanpassen"</string>
<string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"Schakel wifi in om beschikbare netwerken te zien."</string>
<string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"Wifi-netwerken zoeken…"</string>
- <string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"Je hebt geen toestemming om het wifi-netwerk te wijzigen."</string>
+ <string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"Je hebt geen rechten om het wifi-netwerk te wijzigen."</string>
<string name="wifi_more" msgid="3538241640407382185">"Meer"</string>
<string name="wifi_setup_wps" msgid="6730131677695521321">"Autom. config. (WPS)"</string>
<string name="wifi_settings_scanning_required_title" msgid="3593457187659922490">"Wifi-scannen inschakelen?"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wifi"</item>
+ <item msgid="2271962426654621656">"Mobiel"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Mobiel netwerk gebruiken als er geef wifi beschikbaar is"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Gebruik wifi als er geen mobiel netwerk beschikbaar is"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Bellen via wifi. Zonder wifi-signaal wordt het gesprek beëindigd."</string>
@@ -1343,7 +1345,7 @@
<string name="scanning_status_text_wifi_on_ble_on" msgid="6370507836346838473">"Zowel wifi-scannen als Bluetooth-scannen zijn ingeschakeld"</string>
<string name="scanning_status_text_wifi_on_ble_off" msgid="8205014713732412608">"Wifi-scannen is ingeschakeld en Bluetooth-scannen is uitgeschakeld"</string>
<string name="scanning_status_text_wifi_off_ble_on" msgid="7400522456303307057">"Bluetooth-scannen is ingeschakeld en wifi-scannen is uitgeschakeld"</string>
- <string name="scanning_status_text_wifi_off_ble_off" msgid="8575026386237481457">"Zowel wifi-scannen als Bluetooth-scannen zijn uitgeschakeld"</string>
+ <string name="scanning_status_text_wifi_off_ble_off" msgid="8575026386237481457">"Zowel wifi-scannen als bluetooth-scannen zijn uitgeschakeld"</string>
<string name="status_meid_number" msgid="8756271256760479835">"MEID"</string>
<string name="status_icc_id" msgid="9191847562997702709">"ICCID"</string>
<string name="status_data_network_type" msgid="2344720457353394909">"Type mobiele-datanetwerk"</string>
@@ -1455,7 +1457,7 @@
<string name="storage_detail_other" msgid="9164851767437306618">"Overige"</string>
<string name="storage_detail_system" msgid="6784247618772153283">"Systeem"</string>
<string name="storage_detail_explore" msgid="8206900269596580264">"<xliff:g id="NAME">^1</xliff:g> verkennen"</string>
- <string name="storage_detail_dialog_other" msgid="5073511663616043370">"Overig omvat gedeelde bestanden die zijn opgeslagen door apps, bestanden die zijn gedownload van internet of via Bluetooth, Android-bestanden, enzovoort. \n\nAls je de zichtbare content van deze <xliff:g id="NAME">^1</xliff:g> wilt bekijken, tik je op Verkennen."</string>
+ <string name="storage_detail_dialog_other" msgid="5073511663616043370">"Overig omvat gedeelde bestanden die zijn opgeslagen door apps, bestanden die zijn gedownload van internet of via bluetooth, Android-bestanden, enzovoort. \n\nAls je de zichtbare content van deze <xliff:g id="NAME">^1</xliff:g> wilt bekijken, tik je op Verkennen."</string>
<string name="storage_detail_dialog_system" msgid="1472572861360014226">"Systeem omvat bestanden die worden gebruikt om Android-versie <xliff:g id="VERSION">%s</xliff:g> uit te voeren"</string>
<string name="storage_detail_dialog_user" msgid="1663117417635010371">"<xliff:g id="USER_0">^1</xliff:g> kan <xliff:g id="SIZE">^2</xliff:g> van de opslag hebben gebruikt voor foto\'s, muziek, apps of andere gegevens. \n\nSchakel over naar <xliff:g id="USER_1">^1</xliff:g> voor meer informatie."</string>
<string name="storage_wizard_init_title" msgid="3407283236421089014">"Je <xliff:g id="NAME">^1</xliff:g> configureren"</string>
@@ -1556,7 +1558,7 @@
<string name="menu_delete" msgid="8646081395424055735">"APN verwijderen"</string>
<string name="menu_new" msgid="7529219814721969024">"Nieuwe APN"</string>
<string name="menu_save" msgid="7310230314430623215">"Opslaan"</string>
- <string name="menu_cancel" msgid="1292949233623397786">"Weggooien"</string>
+ <string name="menu_cancel" msgid="1292949233623397786">"Niet opslaan"</string>
<string name="error_title" msgid="6595678722641187629"></string>
<string name="error_name_empty" msgid="4638536651499727722">"Het veld \'Naam\' mag niet leeg zijn."</string>
<string name="error_apn_empty" msgid="4849569239327147849">"De APN mag niet leeg zijn."</string>
@@ -1568,8 +1570,8 @@
<string name="restore_default_apn_completed" msgid="5671734152740058937">"Herstellen van standaard-APN-instellingen voltooid."</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"Opties voor resetten"</string>
<string name="reset_dashboard_summary" msgid="8778383341461126642">"Netwerk, apps of apparaat kunnen worden gereset"</string>
- <string name="reset_network_title" msgid="8944059136930806211">"Wifi, mobiel en Bluetooth resetten"</string>
- <string name="reset_network_desc" msgid="4982633363916261109">"Hiermee worden alle netwerkinstellingen gereset, waaronder:\n\n"<li>"wifi"</li>\n<li>"mobiele data"</li>\n<li>"Bluetooth"</li></string>
+ <string name="reset_network_title" msgid="8944059136930806211">"Wifi, mobiel en bluetooth resetten"</string>
+ <string name="reset_network_desc" msgid="4982633363916261109">"Hiermee worden alle netwerkinstellingen gereset, waaronder:\n\n"<li>"wifi"</li>\n<li>"mobiele data"</li>\n<li>"bluetooth"</li></string>
<string name="reset_esim_title" msgid="7630781767040831893">"Gedownloade simkaarten wissen"</string>
<string name="reset_esim_desc" msgid="433226911566802">"Neem contact op met je provider als je vervangende simkaarten wilt downloaden. Hiermee worden geen mobiele abonnementen opgezegd."</string>
<string name="reset_network_button_text" msgid="4293271046867912819">"Instellingen resetten"</string>
@@ -1622,9 +1624,9 @@
<string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Internetverbinding van telefoon delen via USB"</string>
<string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"Internetverbinding van tablet delen via USB"</string>
<string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"Bluetooth-tethering"</string>
- <string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"Internetverbinding van deze tablet delen via Bluetooth"</string>
- <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Internetverbinding van deze telefoon delen via Bluetooth"</string>
- <string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"Internetverbinding van deze <xliff:g id="DEVICE_NAME">%1$d</xliff:g> delen via Bluetooth"</string>
+ <string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"Internetverbinding van deze tablet delen via bluetooth"</string>
+ <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Internetverbinding van telefoon delen via bluetooth"</string>
+ <string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"Internetverbinding van deze <xliff:g id="DEVICE_NAME">%1$d</xliff:g> delen via bluetooth"</string>
<string name="bluetooth_tethering_overflow_error" msgid="6946561351369376943">"Kan niet meer dan <xliff:g id="MAXCONNECTION">%1$d</xliff:g> apparaten tetheren."</string>
<string name="bluetooth_untether_blank" msgid="5428300773782256084">"Tethering van <xliff:g id="DEVICE_NAME">%1$s</xliff:g> wordt opgeheven."</string>
<string name="tethering_footer_info" msgid="8019555174339154124">"Gebruik hotspot en tethering om internet aan andere apparaten te leveren via je mobiele dataverbinding. Apps kunnen ook hotspots maken om content te delen met apparaten in de buurt."</string>
@@ -1635,7 +1637,7 @@
<string name="sms_change_default_dialog_title" msgid="6301260161969667578">"Sms-app wijzigen?"</string>
<string name="sms_change_default_dialog_text" msgid="8275088077930942680">"Wil je <xliff:g id="NEW_APP">%1$s</xliff:g> als je sms-app gebruiken in plaats van <xliff:g id="CURRENT_APP">%2$s</xliff:g>?"</string>
<string name="sms_change_default_no_previous_dialog_text" msgid="4680224695080527907">"Wil je <xliff:g id="NEW_APP">%s</xliff:g> gebruiken als je sms-app?"</string>
- <string name="network_scorer_picker_title" msgid="1691073966560952916">"Netwerkbeoordelaar"</string>
+ <string name="network_scorer_picker_title" msgid="1691073966560952916">"Provider van netwerkbeoordelingen"</string>
<string name="network_scorer_picker_none_preference" msgid="6448280557733231737">"Geen"</string>
<string name="network_scorer_change_active_dialog_title" msgid="4274159562371475090">"Wifi-assistent wijzigen?"</string>
<string name="network_scorer_change_active_dialog_text" msgid="4264089809189760730">"<xliff:g id="NEW_APP">%1$s</xliff:g> gebruiken in plaats van <xliff:g id="CURRENT_APP">%2$s</xliff:g> om je netwerkverbindingen te beheren?"</string>
@@ -1654,15 +1656,15 @@
</plurals>
<string name="location_category_recent_location_access" msgid="286059523360285026">"Recente locatietoegang"</string>
<string name="location_recent_location_access_view_details" msgid="2051602261436245905">"Details weergeven"</string>
- <string name="location_no_recent_apps" msgid="77502059586413278">"Er zijn geen apps die je locatie onlangs hebben aangevraagd"</string>
+ <string name="location_no_recent_apps" msgid="77502059586413278">"Er zijn geen apps die je locatie onlangs hebben opgevraagd"</string>
<string name="location_no_recent_accesses" msgid="6289916310397279890">"Er zijn geen apps die recent toegang hebben gehad tot je locatie"</string>
<string name="location_high_battery_use" msgid="7177199869979522663">"Hoog accugebruik"</string>
<string name="location_low_battery_use" msgid="5030448574501435888">"Laag batterijgebruik"</string>
- <string name="location_scanning_screen_title" msgid="7663329319689413454">"Scannen via wifi en Bluetooth"</string>
+ <string name="location_scanning_screen_title" msgid="7663329319689413454">"Scannen via wifi en bluetooth"</string>
<string name="location_scanning_wifi_always_scanning_title" msgid="6750542206763112172">"Wifi-scannen"</string>
<string name="location_scanning_wifi_always_scanning_description" msgid="4956048135941851712">"Apps en services toestaan altijd te scannen naar wifi-netwerken in de buurt, zelfs als wifi is uitgeschakeld. Dit kan worden gebruikt om bijvoorbeeld locatiegebaseerde functies en services te verbeteren."</string>
<string name="location_scanning_bluetooth_always_scanning_title" msgid="196241746742607453">"Bluetooth-scannen"</string>
- <string name="location_scanning_bluetooth_always_scanning_description" msgid="3796673798637848690">"Apps en services toestaan altijd te scannen naar apparaten in de buurt, zelfs als Bluetooth is uitgeschakeld. Dit kan worden gebruikt om bijvoorbeeld locatiegebaseerde functies en services te verbeteren."</string>
+ <string name="location_scanning_bluetooth_always_scanning_description" msgid="3796673798637848690">"Apps en services toestaan altijd te scannen naar apparaten in de buurt, zelfs als bluetooth is uitgeschakeld. Dit kan worden gebruikt om bijvoorbeeld locatiegebaseerde functies en services te verbeteren."</string>
<string name="managed_profile_location_services" msgid="224925483299159541">"Locatieservices voor het werk"</string>
<string name="location_network_based" msgid="1535812159327454835">"Wifi en mobiele netwerklocatie"</string>
<string name="location_neighborhood_level" msgid="8459352741296587916">"Apps toestaan de locatieservice van Google te gebruiken om je locatie sneller te schatten. Anonieme locatiegegevens worden verzameld en verzonden naar Google."</string>
@@ -1676,7 +1678,7 @@
<string name="use_location_title" msgid="7724788634359496634">"Locatie en Google Zoeken"</string>
<string name="use_location_summary" msgid="7396716606067400283">"Google toestaan je locatie te gebruiken om zoekresultaten en andere services te verbeteren"</string>
<string name="location_access_title" msgid="8587974819606800029">"Toegang tot mijn locatie"</string>
- <string name="location_access_summary" msgid="6919495149026354355">"Apps die je toestemming hebben gevraagd, toestaan je locatiegegevens te gebruiken"</string>
+ <string name="location_access_summary" msgid="6919495149026354355">"Apps die rechten hebben gevraagd, toestaan om je locatiegegevens te gebruiken"</string>
<string name="location_sources_heading" msgid="8526658357120282741">"Locatiebronnen"</string>
<string name="about_settings" product="tablet" msgid="4869626690708456341">"Over tablet"</string>
<string name="about_settings" product="default" msgid="6019547763377294261">"Over de telefoon"</string>
@@ -1704,7 +1706,7 @@
<string name="settings_safetylegal_activity_unreachable" msgid="3541894966476445833">"Je hebt geen gegevensverbinding. Als je deze informatie nu wilt weergeven, ga je op een computer met internetverbinding naar %s."</string>
<string name="settings_safetylegal_activity_loading" msgid="7680998654145172">"Laden..."</string>
<string name="confirm_device_credential_use_alternate_method" msgid="1279869272895739941">"Andere methode gebruiken"</string>
- <string name="lockpassword_choose_your_screen_lock_header" msgid="6283518876031424798">"Stel je schermvergrendeling in"</string>
+ <string name="lockpassword_choose_your_screen_lock_header" msgid="6283518876031424798">"Schermvergrendeling instellen"</string>
<string name="lockpassword_choose_your_password_message" msgid="2838273977481046536">"Stel een wachtwoord in voor betere beveiliging"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="4921343500484160894">"Stel wachtwoord in voor gebruik van vingerafdruk"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="314870151462139417">"Stel patroon in voor gebruik van vingerafdruk"</string>
@@ -1943,7 +1945,7 @@
<string name="language_input_gesture_summary_on_non_assist" msgid="6054599939153669225"></string>
<string name="language_input_gesture_summary_off" msgid="4108509077072348546"></string>
<string name="language_settings" msgid="3551012802762495835">"Talen en invoer"</string>
- <string name="language_empty_list_user_restricted" msgid="3837176532474949716">"Je hebt geen toestemming om de apparaattaal te wijzigen."</string>
+ <string name="language_empty_list_user_restricted" msgid="3837176532474949716">"Je hebt geen rechten om de apparaattaal te wijzigen."</string>
<string name="language_keyboard_settings_title" msgid="2672573191605298938">"Talen en invoer"</string>
<string name="input_assistance" msgid="6442646949054057707">"Tools"</string>
<string name="keyboard_settings_category" msgid="5857591390023852850">"Toetsenbord en invoermethoden"</string>
@@ -2093,19 +2095,19 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Trilling bij melding"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Trilling bij bellen"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Aanraaktrilling"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Service gebruiken"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Kleurcorrectie gebruiken"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Ondertiteling gebruiken"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Service gebruiken"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Kleurcorrectie gebruiken"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Ondertiteling gebruiken"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Doorgaan"</string>
- <string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Gehoorapparaten"</string>
- <string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Geen gehoorapparaten verbonden"</string>
- <string name="accessibility_hearingaid_adding_summary" msgid="4139031880828714300">"Gehoorapparaten toevoegen"</string>
- <string name="accessibility_hearingaid_pair_instructions_first_message" msgid="2671518890909750740">"Tik op het volgende scherm op je gehoorapparaat om dit te koppelen."</string>
- <string name="accessibility_hearingaid_pair_instructions_second_message" msgid="1584538735488464991">"Controleer of je gehoorapparaat zich in de koppelingsmodus bevindt."</string>
+ <string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Hoortoestellen"</string>
+ <string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Geen hoortoestellen verbonden"</string>
+ <string name="accessibility_hearingaid_adding_summary" msgid="4139031880828714300">"Hoortoestellen toevoegen"</string>
+ <string name="accessibility_hearingaid_pair_instructions_first_message" msgid="2671518890909750740">"Tik op het volgende scherm op je hoortoestel om dit te koppelen."</string>
+ <string name="accessibility_hearingaid_pair_instructions_second_message" msgid="1584538735488464991">"Controleer of je hoortoestel zich in de koppelingsmodus bevindt."</string>
<string name="accessibility_hearingaid_active_device_summary" msgid="6081382497207168885">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> actief"</string>
<plurals name="show_number_hearingaid_count" formatted="false" msgid="7906547154695855096">
- <item quantity="other"><xliff:g id="NUMBER_DEVICE_COUNT_1">%1$d</xliff:g> opgeslagen gehoorapparaten</item>
- <item quantity="one"><xliff:g id="NUMBER_DEVICE_COUNT_0">%1$d</xliff:g> opgeslagen gehoorapparaat</item>
+ <item quantity="other"><xliff:g id="NUMBER_DEVICE_COUNT_1">%1$d</xliff:g> opgeslagen hoortoestellen</item>
+ <item quantity="one"><xliff:g id="NUMBER_DEVICE_COUNT_0">%1$d</xliff:g> opgeslagen hoortoestel</item>
</plurals>
<string name="accessibility_summary_state_enabled" msgid="7357731696603247963">"Aan"</string>
<string name="accessibility_summary_state_disabled" msgid="9197369047683087620">"Uit"</string>
@@ -2114,16 +2116,16 @@
<string name="enable_quick_setting" msgid="1580451877998661255">"Weergeven in Snelle instellingen"</string>
<string name="daltonizer_type" msgid="6890356081036026791">"Correctiemodus"</string>
<plurals name="accessibilty_autoclick_preference_subtitle_extremely_short_delay" formatted="false" msgid="3810676455925024813">
- <item quantity="other">Extreem korte vertraging (<xliff:g id="CLICK_DELAY_LABEL_1">%1$d</xliff:g> ms)</item>
- <item quantity="one">Extreem korte vertraging (<xliff:g id="CLICK_DELAY_LABEL_0">%1$d</xliff:g> ms)</item>
+ <item quantity="other">Extreem kleine vertraging (<xliff:g id="CLICK_DELAY_LABEL_1">%1$d</xliff:g> ms)</item>
+ <item quantity="one">Extreem kleine vertraging (<xliff:g id="CLICK_DELAY_LABEL_0">%1$d</xliff:g> ms)</item>
</plurals>
<plurals name="accessibilty_autoclick_preference_subtitle_very_short_delay" formatted="false" msgid="8720846747098057703">
- <item quantity="other">Zeer korte vertraging (<xliff:g id="CLICK_DELAY_LABEL_1">%1$d</xliff:g> ms)</item>
- <item quantity="one">Zeer korte vertraging (<xliff:g id="CLICK_DELAY_LABEL_0">%1$d</xliff:g> ms)</item>
+ <item quantity="other">Zeer kleine vertraging (<xliff:g id="CLICK_DELAY_LABEL_1">%1$d</xliff:g> ms)</item>
+ <item quantity="one">Zeer kleine vertraging (<xliff:g id="CLICK_DELAY_LABEL_0">%1$d</xliff:g> ms)</item>
</plurals>
<plurals name="accessibilty_autoclick_preference_subtitle_short_delay" formatted="false" msgid="4311889107742293108">
- <item quantity="other">Korte vertraging (<xliff:g id="CLICK_DELAY_LABEL_1">%1$d</xliff:g> ms)</item>
- <item quantity="one">Korte vertraging (<xliff:g id="CLICK_DELAY_LABEL_0">%1$d</xliff:g> ms)</item>
+ <item quantity="other">Kleine vertraging (<xliff:g id="CLICK_DELAY_LABEL_1">%1$d</xliff:g> ms)</item>
+ <item quantity="one">Kleine vertraging (<xliff:g id="CLICK_DELAY_LABEL_0">%1$d</xliff:g> ms)</item>
</plurals>
<plurals name="accessibilty_autoclick_preference_subtitle_long_delay" formatted="false" msgid="285663535113656440">
<item quantity="other">Lange vertraging (<xliff:g id="CLICK_DELAY_LABEL_1">%1$d</xliff:g> ms)</item>
@@ -2177,7 +2179,7 @@
<string name="color_magenta" msgid="721976999611563071">"Magenta"</string>
<string name="enable_service_title" msgid="2746143093464928251">"\'<xliff:g id="SERVICE">%1$s</xliff:g>\' gebruiken?"</string>
<string name="capabilities_list_title" msgid="8177719542886123788">"\'<xliff:g id="SERVICE">%1$s</xliff:g>\' moet het volgende kunnen:"</string>
- <string name="touch_filtered_warning" msgid="3072665526993043879">"Aangezien een app een toestemmingsverzoek afdekt, kan Instellingen je reactie niet verifiëren."</string>
+ <string name="touch_filtered_warning" msgid="3072665526993043879">"Aangezien een app een rechtenverzoek afdekt, kan Instellingen je reactie niet verifiëren."</string>
<string name="enable_service_encryption_warning" msgid="3580275420826492351">"Als je <xliff:g id="SERVICE">%1$s</xliff:g> inschakelt, maakt je apparaat geen gebruik van schermvergrendeling om de gegevensversleuteling te verbeteren."</string>
<string name="secure_lock_encryption_warning" msgid="8724670910924531152">"Omdat je een toegankelijkheidsservice hebt ingeschakeld, maakt je apparaat geen gebruik van schermvergrendeling om de gegevensversleuteling te verbeteren."</string>
<string name="enable_service_pattern_reason" msgid="7415969807374459848">"Aangezien het inschakelen van <xliff:g id="SERVICE">%1$s</xliff:g> van invloed is op de gegevensversleuteling, moet je je patroon bevestigen."</string>
@@ -2279,7 +2281,7 @@
<string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Batterij is mogelijk eerder leeg dan normaal"</string>
<string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"Batterijbesparing aan"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"Sommige functies zijn mogelijk beperkt"</string>
- <string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Telefoon heeft meer verbruikt dan normaal"</string>
+ <string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Meer verbruikt dan normaal"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"Tablet heeft meer verbruikt dan normaal"</string>
<string name="battery_tip_high_usage_title" product="device" msgid="8304138287288309490">"Apparaat heeft meer verbruikt dan normaal"</string>
<string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"Batterij is mogelijk eerder leeg dan normaal"</string>
@@ -2453,13 +2455,13 @@
<string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"Wordt ingeschakeld bij <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Een planning instellen"</string>
<string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"Uitschakelen wanneer volledig opgeladen"</string>
- <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"Batterijbesparing wordt uitgeschakeld wanneer je telefoon <xliff:g id="PERCENT">%1$s</xliff:g> batterijlading heeft"</string>
+ <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"Batterijbesparing wordt uitgeschakeld als je telefoon <xliff:g id="PERCENT">%1$s</xliff:g> batterijlading heeft"</string>
<string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"Batterijbesparing wordt uitgeschakeld wanneer je tablet <xliff:g id="PERCENT">%1$s</xliff:g> batterijlading heeft"</string>
<string name="battery_saver_sticky_description_new" product="device" msgid="5056520668081504111">"Batterijbesparing wordt uitgeschakeld wanneer je apparaat <xliff:g id="PERCENT">%1$s</xliff:g> batterijlading heeft"</string>
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Inschakelen"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Batterijbesparing gebruiken"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Batterijbesparing gebruiken"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Automatisch inschakelen"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Nooit"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"bij <xliff:g id="PERCENT">%1$s</xliff:g> batterijlading"</string>
@@ -2559,7 +2561,7 @@
<string name="backup_inactive_title" msgid="5513496915638307750">"Back-upservice is niet actief"</string>
<string name="backup_configure_account_default_summary" msgid="5718298066335006412">"Er is momenteel geen account ingesteld voor het opslaan van back-upgegevens"</string>
<string name="backup_erase_dialog_title" msgid="8178424339104463014"></string>
- <string name="backup_erase_dialog_message" msgid="8767843355330070902">"Weet je zeker dat je het maken van back-ups van je wifi-wachtwoorden, bladwijzers, andere instellingen en app-gegevens wilt stoppen en alle kopieën op Google-servers wilt wissen?"</string>
+ <string name="backup_erase_dialog_message" msgid="8767843355330070902">"Weet je zeker dat je het maken van back-ups van je wifi-wachtwoorden, bookmarks, andere instellingen en app-gegevens wilt stoppen en alle kopieën op Google-servers wilt wissen?"</string>
<string name="fullbackup_erase_dialog_message" msgid="2588536036471144070">"Wil je stoppen met het maken van back-ups van apparaatgegevens (zoals wifi-wachtwoorden en gespreksgeschiedenis) en app-gegevens (zoals instellingen en bestanden opgeslagen door apps), en alle kopieën op externe servers wissen?"</string>
<string name="fullbackup_data_summary" msgid="406274198094268556">"Automatisch op afstand een back-up maken van apparaatgegevens (zoals wifi-wachtwoorden en gespreksgeschiedenis) en app-gegevens (zoals instellingen en bestanden opgeslagen door apps).\n\nAls je de functie voor automatische back-ups inschakelt, worden apparaat- en app-gegevens periodiek op afstand opgeslagen. App-gegevens kunnen gegevens omvatten die een app heeft opgeslagen (op basis van de instellingen van de ontwikkelaar), waaronder potentieel gevoelige gegevens als contacten, berichten en foto\'s."</string>
<string name="device_admin_settings_title" msgid="2074319456047334589">"Instellingen voor apparaatbeheer"</string>
@@ -2677,7 +2679,7 @@
<string name="data_usage_label_background" msgid="1618794447370396845">"Achtergrond"</string>
<string name="data_usage_app_restricted" msgid="7569077654579299326">"beperkt"</string>
<string name="data_usage_disable_mobile" msgid="4125335076749119451">"Mobiele data uitschakelen?"</string>
- <string name="data_usage_disable_mobile_limit" msgid="1937796699758613667">"Mobiele gegevenslimiet instellen"</string>
+ <string name="data_usage_disable_mobile_limit" msgid="1937796699758613667">"Mobiele-datalimiet instellen"</string>
<string name="data_usage_disable_4g_limit" msgid="7131367986548147266">"4G-gegevenslimiet instellen"</string>
<string name="data_usage_disable_3g_limit" msgid="6746819313032692220">"2G-3G-gegevenslimiet instellen"</string>
<string name="data_usage_disable_wifi_limit" msgid="8214267551888018353">"Wifi-datalimiet instellen"</string>
@@ -2697,7 +2699,7 @@
<string name="data_usage_app_settings" msgid="3276444867375694809">"App-instellingen"</string>
<string name="data_usage_app_restrict_background" msgid="649167881583859169">"Achtergrondgegevens"</string>
<string name="data_usage_app_restrict_background_summary" msgid="2703967920234671881">"Gebruik van mobiele data op de achtergrond toestaan"</string>
- <string name="data_usage_app_restrict_background_summary_disabled" msgid="7211921499365814638">"Als je achtergrondgegevens wilt beperken voor deze app, moet je eerst een mobiele gegevenslimiet instellen."</string>
+ <string name="data_usage_app_restrict_background_summary_disabled" msgid="7211921499365814638">"Als je achtergrondgegevens wilt beperken voor deze app, moet je eerst een mobiele-datalimiet instellen."</string>
<string name="data_usage_app_restrict_dialog_title" msgid="750037964591673167">"Achtergrondgegevens beperken?"</string>
<string name="data_usage_app_restrict_dialog" msgid="4022530391896478031">"Deze functie kan ervoor zorgen dat een app die afhankelijk is van achtergrondgegevens, stopt als er alleen mobiele netwerken beschikbaar zijn.\n\nJe kunt meer geschikte besturingselementen voor datagebruik vinden in de instellingen van de app."</string>
<string name="data_usage_restrict_denied_dialog" msgid="18928292832775805">"Je kunt achtergrondgegevens alleen beperken als je een limiet voor mobiele data hebt ingesteld."</string>
@@ -2707,7 +2709,7 @@
<string name="data_usage_auto_sync_off_dialog_title" msgid="7105334544291643305">"Auto-synchr. uitschakelen?"</string>
<string name="data_usage_auto_sync_off_dialog" msgid="4057984234450947964">"Hiermee beperk je data- en batterijgebruik. Je moet elk account echter handmatig synchroniseren om recente informatie te verzamelen. Je ontvangt geen meldingen wanneer er updates zijn."</string>
<string name="data_usage_cycle_editor_title" msgid="4967309390043599889">"Datum voor resetten gebruikscyclus"</string>
- <string name="data_usage_cycle_editor_subtitle" msgid="6043098041946166597">"Datum van elke maand:"</string>
+ <string name="data_usage_cycle_editor_subtitle" msgid="6043098041946166597">"Dag van elke maand:"</string>
<string name="data_usage_cycle_editor_positive" msgid="9155752056537811646">"Instellen"</string>
<string name="data_usage_warning_editor_title" msgid="1431385383278389290">"Waarschuwing voor datagebruik instellen"</string>
<string name="data_usage_limit_editor_title" msgid="1687908662154108293">"Limiet voor dataverbruik instellen"</string>
@@ -2827,7 +2829,7 @@
<string name="backup_pw_cancel_button_text" msgid="6170984655621611957">"Annuleren"</string>
<string name="additional_system_update_settings_list_item_title" msgid="8674710454802166341">"Aanvullende systeemupdates"</string>
<string name="ssl_ca_cert_warning" msgid="7794291734272626026">"Netwerk kan worden gemonitord"</string>
- <string name="done_button" msgid="7652373284597307008">"Gereed"</string>
+ <string name="done_button" msgid="7652373284597307008">"Klaar"</string>
<plurals name="ssl_ca_cert_dialog_title" formatted="false" msgid="7323708984446517980">
<item quantity="other">Certificaten vertrouwen of verwijderen</item>
<item quantity="one">Certificaat vertrouwen of verwijderen</item>
@@ -2879,8 +2881,8 @@
<string name="user_cannot_manage_message" product="default" msgid="915260531390608092">"Alleen de eigenaar van de telefoon kan gebruikers beheren."</string>
<string name="user_cannot_add_accounts_message" msgid="5993561303748749097">"Beperkte profielen kunnen geen accounts toevoegen"</string>
<string name="user_remove_user_menu" msgid="3505139157217459864">"<xliff:g id="USER_NAME">%1$s</xliff:g> verwijderen van dit apparaat"</string>
- <string name="user_lockscreen_settings" msgid="3820813814848394568">"Instellingen voor vergrendelingsscherm"</string>
- <string name="user_add_on_lockscreen_menu" msgid="5211604808199585774">"Gebruikers toevoegen vanaf vergrendelingsscherm"</string>
+ <string name="user_lockscreen_settings" msgid="3820813814848394568">"Instellingen voor vergrendelscherm"</string>
+ <string name="user_add_on_lockscreen_menu" msgid="5211604808199585774">"Gebruikers toevoegen vanaf vergrendelscherm"</string>
<string name="user_new_user_name" msgid="3880395219777884838">"Nieuwe gebruiker"</string>
<string name="user_new_profile_name" msgid="3074939718101489937">"Nieuw profiel"</string>
<string name="user_confirm_remove_self_title" msgid="6739480453680217543">"Wil je jezelf verwijderen?"</string>
@@ -3034,8 +3036,8 @@
<string name="network_dashboard_summary_data_usage" msgid="4695629715072542102">"datagebruik"</string>
<string name="network_dashboard_summary_hotspot" msgid="3928610802321995214">"hotspot"</string>
<string name="connected_devices_dashboard_title" msgid="7795222675849060444">"Verbonden apparaten"</string>
- <string name="connected_devices_dashboard_summary" msgid="1072664369515033179">"Bluetooth, rijmodus, NFC"</string>
- <string name="connected_devices_dashboard_no_nfc_summary" msgid="2610085597733526722">"Bluetooth, rijmodus"</string>
+ <string name="connected_devices_dashboard_summary" msgid="1072664369515033179">"Bluetooth, rijstand, NFC"</string>
+ <string name="connected_devices_dashboard_no_nfc_summary" msgid="2610085597733526722">"Bluetooth, rijstand"</string>
<string name="connected_devices_dashboard_no_driving_mode_summary" msgid="3524409078596318803">"Bluetooth, NFC"</string>
<string name="connected_devices_dashboard_no_driving_mode_no_nfc_summary" msgid="7881286613528299400">"Bluetooth"</string>
<string name="app_and_notification_dashboard_title" msgid="8448096608058843730">"Apps en meldingen"</string>
@@ -3105,8 +3107,8 @@
<string name="keywords_financial_apps_sms_access" msgid="3236014691838121857">"financiële app, sms, toegang, recht, toestemming"</string>
<string name="keywords_systemui_theme" msgid="9150908170417305866">"donker thema"</string>
<string name="keywords_device_feedback" msgid="6948977907405738490">"bug"</string>
- <string name="keywords_ambient_display_screen" msgid="5873935693887583428">"Inactief scherm, vergrendelingsscherm"</string>
- <string name="keywords_lock_screen_notif" msgid="4914337222856805463">"melding, meldingen op vergrendelingsscherm"</string>
+ <string name="keywords_ambient_display_screen" msgid="5873935693887583428">"Inactief scherm, vergrendelscherm"</string>
+ <string name="keywords_lock_screen_notif" msgid="4914337222856805463">"melding, meldingen op vergrendelscherm"</string>
<string name="keywords_face_settings" msgid="4117345666006836599">"gezicht"</string>
<string name="keywords_fingerprint_settings" msgid="902902368701134163">"vingerafdruk, vingerafdruk toevoegen"</string>
<string name="keywords_display_auto_brightness" msgid="1810596220466483996">"scherm dimmen, touchscreen, batterij, slimme helderheid, dynamische helderheid"</string>
@@ -3114,10 +3116,10 @@
<string name="keywords_auto_rotate" msgid="4320791369951647513">"roteren, draaien, omdraaien, rotatie, portret, landschap, oriëntatie, verticaal, horizontaal, staand, liggend"</string>
<string name="keywords_system_update_settings" msgid="4419971277998986067">"upgrade, android"</string>
<string name="keywords_zen_mode_settings" msgid="4103819458182535493">"dnd, schema, meldingen, blokkeren, stil, trillen, slapen, werken, focus, geluid, dempen, dag, weekdag, weekend, doordeweekse avond, evenement, afspraak"</string>
- <string name="keywords_screen_timeout" msgid="4328381362313993666">"scherm, vergrendelingstijd, time-out, vergrendelingsscherm"</string>
+ <string name="keywords_screen_timeout" msgid="4328381362313993666">"scherm, vergrendelingstijd, time-out, vergrendelscherm"</string>
<string name="keywords_storage_settings" msgid="6422454520424236476">"geheugen, cache, gegevens, wissen, verwijderen, vrij, vrijmaken, ruimte"</string>
<string name="keywords_bluetooth_settings" msgid="1152229891590622822">"verbonden, apparaat, hoofdtelefoon, koptelefoon, headset, speaker, luidspreker, draadloos, koppelen, oordoppen, oordopjes, muziek, media"</string>
- <string name="keywords_wallpaper" msgid="7665778626293643625">"achtergrond, scherm, vergrendelingsscherm, thema"</string>
+ <string name="keywords_wallpaper" msgid="7665778626293643625">"achtergrond, scherm, vergrendelscherm, thema"</string>
<string name="keywords_assist_input" msgid="8392362788794886564">"standaard, assistent"</string>
<string name="keywords_default_payment_app" msgid="845369409578423996">"betaling, standaard"</string>
<string name="keywords_ambient_display" msgid="8835182491798487184">"binnenkomende melding"</string>
@@ -3293,7 +3295,7 @@
<string name="ringtones_category_preference_title" msgid="4491932700769815470">"Ringtones"</string>
<string name="other_sound_category_preference_title" msgid="2045757472469840859">"Andere geluiden en trillingen"</string>
<string name="configure_notification_settings" msgid="291914315140851270">"Meldingen"</string>
- <string name="recent_notifications" msgid="8125865995065032049">"Recent verzonden"</string>
+ <string name="recent_notifications" msgid="8125865995065032049">"Recent verstuurd"</string>
<string name="recent_notifications_see_all_title" msgid="4089007770442871469">"Alles weergeven van de afgelopen zeven dagen"</string>
<string name="advanced_section_header" msgid="984680389373090015">"Geavanceerd"</string>
<string name="profile_section_header" msgid="5471479005472037417">"Werkmeldingen"</string>
@@ -3313,11 +3315,11 @@
<string name="bubbles_feature_disabled_dialog_text" msgid="326945485806386477">"Als je ballonnen wilt inschakelen voor deze app, moet je ze eerst inschakelen voor je apparaat. Dit heeft effect op andere apps waarin je eerder ballonnen hebt ingeschakeld."</string>
<string name="bubbles_feature_disabled_button_approve" msgid="6661464849674493351">"Inschakelen voor apparaat"</string>
<string name="bubbles_feature_disabled_button_cancel" msgid="4807286844588486198">"Annuleren"</string>
- <string name="swipe_direction_title" msgid="7535031630668873009">"Veegacties"</string>
- <string name="swipe_direction_ltr" msgid="944932514821822709">"Veeg naar rechts om te sluiten of naar links voor het menu"</string>
- <string name="swipe_direction_rtl" msgid="4521416787262888813">"Veeg naar links om te sluiten of naar rechts voor het menu"</string>
+ <string name="swipe_direction_title" msgid="7535031630668873009">"Swipe-acties"</string>
+ <string name="swipe_direction_ltr" msgid="944932514821822709">"Swipe naar rechts om te sluiten of naar links voor het menu"</string>
+ <string name="swipe_direction_rtl" msgid="4521416787262888813">"Swipe naar links om te sluiten of naar rechts voor het menu"</string>
<string name="notification_pulse_title" msgid="4861418327614907116">"Knipperlicht"</string>
- <string name="lock_screen_notifications_title" msgid="6889072265118747835">"Op vergrendelingsscherm"</string>
+ <string name="lock_screen_notifications_title" msgid="6889072265118747835">"Op vergrendelscherm"</string>
<string name="locked_work_profile_notification_title" msgid="8307025804986190658">"Als werkprofiel is vergrendeld"</string>
<string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"Content van alle meldingen weergeven"</string>
<string name="lock_screen_notifications_summary_hide" msgid="3668806866535260143">"Gevoelige content verbergen"</string>
@@ -3422,11 +3424,11 @@
<string name="notification_channel_badge_title" msgid="8228215248332054612">"Meldingsstipje weergeven"</string>
<string name="app_notification_override_dnd_title" msgid="1757042206738172601">"\'Niet storen\' negeren"</string>
<string name="app_notification_override_dnd_summary" msgid="3152957611171210980">"Deze meldingen nog steeds ontvangen, ook wanneer \'Niet storen\' is ingeschakeld"</string>
- <string name="app_notification_visibility_override_title" msgid="2349335170165637672">"Op vergrendelingsscherm"</string>
+ <string name="app_notification_visibility_override_title" msgid="2349335170165637672">"Op vergrendelscherm"</string>
<string name="app_notification_row_banned" msgid="2079325338122151677">"Geblokkeerd"</string>
<string name="app_notification_row_priority" msgid="432299064888787236">"Prioriteit"</string>
<string name="app_notification_row_sensitive" msgid="4919671519227722958">"Gevoelig"</string>
- <string name="app_notifications_dialog_done" msgid="5395611029779655968">"Gereed"</string>
+ <string name="app_notifications_dialog_done" msgid="5395611029779655968">"Klaar"</string>
<string name="app_notification_importance_title" msgid="1902794400671001142">"Belang"</string>
<string name="notification_show_lights_title" msgid="5381920725933228542">"Knipperlicht"</string>
<string name="notification_vibrate_title" msgid="8221718258793835282">"Trillen"</string>
@@ -3542,7 +3544,7 @@
<string name="zen_mode_summary_alarms_only_by_time" msgid="2462898862757904560">"Wijzigen in \'Alleen wekkers\' tot <xliff:g id="FORMATTEDTIME">%1$s</xliff:g>"</string>
<string name="zen_mode_summary_always" msgid="2703276042913200837">"Wijzigen in \'Altijd onderbreken\'"</string>
<string name="zen_mode_screen_on" msgid="7098470659072167219">"Wanneer het scherm is ingeschakeld"</string>
- <string name="zen_mode_screen_on_summary" msgid="8275416649295357524">"Meldingen die door \'Niet storen\' zijn gedempt, op het scherm laten weergeven en een pictogram in de statusbalk weergeven"</string>
+ <string name="zen_mode_screen_on_summary" msgid="8275416649295357524">"Meldingen die door \'Niet storen\' zijn gedempt, op het scherm laten weergeven en een icoon in de statusbalk weergeven"</string>
<string name="zen_mode_screen_off" msgid="84211490206459038">"Wanneer het scherm is uitgeschakeld"</string>
<string name="zen_mode_screen_off_summary" msgid="8592179073243001267">"Toestaan dat meldingen die op stil zijn gezet door \'Niet storen\', het scherm inschakelen of het meldingslampje laten knipperen"</string>
<string name="zen_mode_screen_off_summary_no_led" msgid="7255874108150630145">"Meldingen die op stil zijn gezet door \'Niet storen\', het scherm laten inschakelen"</string>
@@ -3553,7 +3555,7 @@
<string name="switch_on_text" msgid="7100491749799298324">"Aan"</string>
<string name="switch_off_text" msgid="3539551289454353555">"Uit"</string>
<string name="screen_pinning_title" msgid="578020318289781102">"Scherm vastzetten"</string>
- <string name="screen_pinning_description" msgid="3814537379086412278">"Wanneer deze instelling is ingeschakeld, kun je \'Scherm vastzetten\' gebruiken om het scherm in beeld te houden tot je het losmaakt.\n\nZo zet je je scherm vast:\n\n1. Zorg dat \'Scherm vastzetten\' is ingeschakeld\n\n2. Open \'Overzicht\'\n\n3. Tik op het app-pictogram bovenaan en tik op de speld"</string>
+ <string name="screen_pinning_description" msgid="3814537379086412278">"Als deze instelling is ingeschakeld, kun je \'Scherm vastzetten\' gebruiken om het scherm in beeld te houden tot je het losmaakt.\n\nZo zet je je scherm vast:\n\n1. Zorg dat \'Scherm vastzetten\' is ingeschakeld\n\n2. Open \'Overzicht\'\n\n3. Tik op het app-icoon bovenaan en tik op de speld"</string>
<string name="screen_pinning_unlock_pattern" msgid="1060334707088339444">"Vraag patroon voor losmaken"</string>
<string name="screen_pinning_unlock_pin" msgid="1441705536015645023">"Vraag pin voor losmaken"</string>
<string name="screen_pinning_unlock_password" msgid="1017776884000170841">"Vraag wachtwoord voor losmaken"</string>
@@ -3605,8 +3607,8 @@
<string name="notifications_disabled" msgid="316658185757688983">"Uit"</string>
<string name="notifications_partly_blocked" msgid="6330451240669068819">"<xliff:g id="COUNT_0">%1$d</xliff:g> van <xliff:g id="COUNT_1">%2$d</xliff:g> categorieën uit"</string>
<string name="notifications_silenced" msgid="538923056987616372">"Zonder geluid"</string>
- <string name="notifications_redacted" msgid="308836040236690014">"Gevoelige content niet op vergrendelingsscherm"</string>
- <string name="notifications_hidden" msgid="3665505522897010205">"Niet op vergrendelingsscherm"</string>
+ <string name="notifications_redacted" msgid="308836040236690014">"Gevoelige content niet op vergrendelscherm"</string>
+ <string name="notifications_hidden" msgid="3665505522897010205">"Niet op vergrendelscherm"</string>
<string name="notifications_priority" msgid="8849045645983017929">"\'Niet storen\' overschreven"</string>
<string name="notifications_summary_divider" msgid="3148951310482572028">" / "</string>
<string name="notification_summary_level" msgid="309162160355022027">"Niveau %d"</string>
@@ -3706,7 +3708,7 @@
</plurals>
<string name="high_power_filter_on" msgid="5294209328473386403">"Niet geoptimaliseerd"</string>
<string name="high_power_on" msgid="3573501822510580334">"Niet geoptimaliseerd"</string>
- <string name="high_power_off" msgid="5906679734326490426">"Accuverbruik optimaliseren"</string>
+ <string name="high_power_off" msgid="5906679734326490426">"Batterijverbruik optimaliseren"</string>
<string name="high_power_system" msgid="739584574711292753">"Batterijoptimalisatie niet beschikbaar"</string>
<string name="high_power_desc" msgid="333756885680362741">"Batterijoptimalisatie niet toepassen. Hierdoor kan je batterijverbruik toenemen."</string>
<string name="high_power_prompt_title" msgid="2805745781720454052">"App altijd uitvoeren op de achtergrond?"</string>
@@ -3807,7 +3809,7 @@
<string name="keywords_system_alert_window" msgid="3936658600272194599">"systeemmelding venster dialoogvenster weergeven over andere apps"</string>
<string name="overlay_settings" msgid="3325154759946433666">"Weergeven vóór andere apps"</string>
<string name="system_alert_window_summary" msgid="7703582115861844158">"<xliff:g id="COUNT_0">%1$d</xliff:g> van <xliff:g id="COUNT_1">%2$d</xliff:g> apps mogen worden weergegeven vóór andere apps"</string>
- <string name="filter_overlay_apps" msgid="6336897660213304743">"Apps met toestemming"</string>
+ <string name="filter_overlay_apps" msgid="6336897660213304743">"Apps met rechten"</string>
<string name="app_permission_summary_allowed" msgid="6458476982015518778">"Toegestaan"</string>
<string name="app_permission_summary_not_allowed" msgid="1171642541675462584">"Niet toegestaan"</string>
<string name="keywords_install_other_apps" msgid="5383559540695847668">"apps installeren via onbekende bronnen"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Het typen van reacties of andere tekst in meldingen blokkeren als het apparaat is vergrendeld"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Standaard spellingcontrole"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Spellingcontrole kiezen"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Spellingcontrole gebruiken"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Spellingcontrole gebruiken"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Niet geselecteerd"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(geen)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4030,7 +4032,7 @@
<string name="notification_log_details_remoteinput" msgid="739338559646354829">"externe invoer"</string>
<string name="notification_log_details_content_view" msgid="6690611908715230584">"aangepaste weergave"</string>
<string name="notification_log_details_extras" msgid="3202948662169885771">"extra\'s"</string>
- <string name="notification_log_details_icon" msgid="8464763276104577811">"pictogram"</string>
+ <string name="notification_log_details_icon" msgid="8464763276104577811">"icoon"</string>
<string name="notification_log_details_parcel" msgid="4024970850647594029">"pakketgrootte"</string>
<string name="notification_log_details_ashmem" msgid="4272241723105041393">"ashmem"</string>
<string name="notification_log_details_alerted" msgid="1891749888625061319">"waarschuwing voor melding weergegeven"</string>
@@ -4060,7 +4062,7 @@
<string name="button_confirm_convert_fbe" msgid="419832223125147297">"Wissen en converteren"</string>
<string name="reset_shortcut_manager_throttling" msgid="1912184636360233397">"Rate limiting van ShortcutManager resetten"</string>
<string name="reset_shortcut_manager_throttling_complete" msgid="2932990541160593632">"De rate limiting van ShortcutManager is gereset."</string>
- <string name="notification_suggestion_title" msgid="3292107671498148560">"Informatie op vergrendelingsscherm beheren"</string>
+ <string name="notification_suggestion_title" msgid="3292107671498148560">"Informatie op vergrendelscherm beheren"</string>
<string name="notification_suggestion_summary" msgid="6516827892359614597">"Content van meldingen weergeven of verbergen"</string>
<string name="page_tab_title_summary" msgid="4824744863994538006">"Alle"</string>
<string name="page_tab_title_support" msgid="5569262185010367870">"Tips en ondersteuning"</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Opslagbeheer verwijdert foto\'s en video\'s waarvan een back-up is gemaakt, van je apparaat om opslagruimte vrij te maken."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Foto\'s en video\'s verwijderen"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Opslagbeheer"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Opslagbeheer gebruiken"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Opslagbeheer gebruiken"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatisch"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Handmatig"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Nu ruimte vrijmaken"</string>
@@ -4115,7 +4117,7 @@
<string name="double_twist_for_camera_mode_title" msgid="2606032140297556018">"Schakelen tussen camera\'s"</string>
<string name="double_twist_for_camera_mode_summary" msgid="8979914206876018137"></string>
<string name="double_twist_for_camera_suggestion_title" msgid="5932411386316771246">"Sneller selfies maken"</string>
- <string name="swipe_up_to_switch_apps_summary" msgid="4644068184114154787">"Veeg omhoog over de startknop om tussen apps te schakelen. Veeg opnieuw omhoog om alle apps te bekijken. Dit werkt vanuit elk scherm. Je hebt aan de rechterkant van het scherm geen knop Overzicht meer."</string>
+ <string name="swipe_up_to_switch_apps_summary" msgid="4644068184114154787">"Swipe omhoog over de startknop om tussen apps te schakelen. Swipe opnieuw omhoog om alle apps te bekijken. Dit werkt vanuit elk scherm. Je hebt aan de rechterkant van het scherm geen knop Overzicht meer."</string>
<string name="swipe_up_to_switch_apps_suggestion_title" msgid="7641846365137536128">"Probeer de nieuwe startknop"</string>
<string name="swipe_up_to_switch_apps_suggestion_summary" msgid="7338653224520387852">"Schakel het nieuwe gebaar in om tussen apps te schakelen"</string>
<string name="ambient_display_title" product="default" msgid="6785677099744344088">"Dubbeltikken om telefoon te checken"</string>
@@ -4133,11 +4135,11 @@
<string name="ambient_display_tap_screen_title" product="tablet" msgid="6434521782016864148">"Tik om tablet te controleren"</string>
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"Tik om apparaat te controleren"</string>
<string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"Tik op je scherm om de tijd, meldingen en andere informatie te bekijken."</string>
- <string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"Over vingerafdruksensor vegen voor meldingen"</string>
- <string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"Over sensor vegen"</string>
- <string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"Als je je meldingen wilt bekijken, veeg je omlaag over de vingerafdruksensor achter op je telefoon."</string>
- <string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"Als je je meldingen wilt bekijken, veeg je omlaag over de vingerafdruksensor achter op je tablet."</string>
- <string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="7950264130913070035">"Als je je meldingen wilt bekijken, veeg je omlaag over de vingerafdruksensor achter op je apparaat."</string>
+ <string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"Over vingerafdruksensor swipen voor meldingen"</string>
+ <string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"Over sensor swipen"</string>
+ <string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"Als je je meldingen wilt bekijken, swipe je omlaag over de vingerafdruksensor achter op je telefoon."</string>
+ <string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"Als je je meldingen wilt bekijken, swipe je omlaag over de vingerafdruksensor achter op je tablet."</string>
+ <string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="7950264130913070035">"Als je je meldingen wilt bekijken, swipe je omlaag over de vingerafdruksensor achter op je apparaat."</string>
<string name="fingerprint_swipe_for_notifications_suggestion_title" msgid="948946491233738823">"Snel meldingen bekijken"</string>
<string name="gesture_setting_on" msgid="7573680730101327866">"Aan"</string>
<string name="gesture_setting_off" msgid="2540159841716890511">"Uit"</string>
@@ -4249,15 +4251,15 @@
<string name="app_info_storage_title" msgid="6643391804949509308">"Gebruikte ruimte"</string>
<string name="webview_uninstalled_for_user" msgid="3407952144444040557">"(verwijderd voor gebruiker <xliff:g id="USER">%s</xliff:g>)"</string>
<string name="webview_disabled_for_user" msgid="8057805373224993504">"(uitgezet voor gebruiker <xliff:g id="USER">%s</xliff:g>)"</string>
- <string name="autofill_app" msgid="3990765434980280073">"Service voor automatisch aanvullen"</string>
+ <string name="autofill_app" msgid="3990765434980280073">"Service voor automatisch invullen"</string>
<string name="autofill_keywords" msgid="7717726766232862218">"auto, automatisch, invullen, aanvullen"</string>
<string name="autofill_confirmation_message" msgid="1385894598730361304">"<b>Zorg dat je deze app vertrouwt</b> <br/> <br/> <xliff:g id=app_name example=Google Autofill>%1$s</xliff:g> maakt gebruik van de content op je scherm om te bepalen wat automatisch kan worden aangevuld."</string>
- <string name="debug_autofill_category" msgid="6262526615416295645">"Automatisch aanvullen"</string>
+ <string name="debug_autofill_category" msgid="6262526615416295645">"Automatisch invullen"</string>
<string name="autofill_logging_level_title" msgid="2577340324541102626">"Logniveau"</string>
<string name="autofill_max_partitions" msgid="125269645910590057">"Max. aantal verzoeken per sessie"</string>
<string name="autofill_max_visible_datasets" msgid="2791081640248423492">"Max. zichtbare gegevenssets"</string>
<string name="autofill_reset_developer_options" msgid="7208417230269613101">"Resetten naar standaardwaarden"</string>
- <string name="autofill_reset_developer_options_complete" msgid="5686061993002179524">"Ontwikkelaarsopties voor automatisch aanvullen zijn gereset"</string>
+ <string name="autofill_reset_developer_options_complete" msgid="5686061993002179524">"Ontwikkelaarsopties voor automatisch invullen zijn gereset"</string>
<string name="device_theme" msgid="8992291311481135893">"Apparaatthema"</string>
<string name="default_theme" msgid="5986996377385956138">"Standaard"</string>
<string name="show_operator_name_title" msgid="5056163028128447308">"Netwerknaam"</string>
diff --git a/tests/CarDeveloperOptions/res/values-or/arrays.xml b/tests/CarDeveloperOptions/res/values-or/arrays.xml
index 518431f..58fa092 100644
--- a/tests/CarDeveloperOptions/res/values-or/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-or/arrays.xml
@@ -29,9 +29,25 @@
<item msgid="5194868215515664953">"ପେସିଫିକ୍"</item>
<item msgid="7044520255415007865">"ସମସ୍ତ"</item>
</string-array>
- <!-- no translation found for screen_timeout_entries:0 (8596143519087753804) -->
- <!-- no translation found for screen_timeout_entries:5 (5827960506924849753) -->
- <!-- no translation found for dream_timeout_entries:7 (8271452751594598661) -->
+ <string-array name="screen_timeout_entries">
+ <item msgid="8596143519087753804">"15 ସେକେଣ୍ଡ"</item>
+ <item msgid="772029947136115322">"30 ସେକେଣ୍ଡ"</item>
+ <item msgid="8743663928349474087">"1 ମିନିଟ୍"</item>
+ <item msgid="1506508631223164814">"2 ମିନିଟ୍"</item>
+ <item msgid="8664703938127907662">"5 ମିନିଟ୍"</item>
+ <item msgid="5827960506924849753">"10 ମିନିଟ୍"</item>
+ <item msgid="6677424950124253938">"30 ମିନିଟ୍"</item>
+ </string-array>
+ <string-array name="dream_timeout_entries">
+ <item msgid="6487043225269853023">"ଆଦୌ ନୁହେଁ"</item>
+ <item msgid="2517785806387977252">"15 ସେକେଣ୍ଡ"</item>
+ <item msgid="6347954399441173672">"30 ସେକେଣ୍ଡ"</item>
+ <item msgid="4858305253279921789">"1 ମିନିଟ୍"</item>
+ <item msgid="8109273437140044073">"2 ମିନିଟ୍"</item>
+ <item msgid="2788593551142462622">"ମିନିଟ୍"</item>
+ <item msgid="8012672183888404961">"10 ମିନିଟ୍"</item>
+ <item msgid="8271452751594598661">"30 ମିନିଟ୍"</item>
+ </string-array>
<string-array name="lock_after_timeout_entries">
<item msgid="2232921187970351881">"ତୁରନ୍ତ"</item>
<item msgid="2038544972632026612">"5 ସେକେଣ୍ଡ"</item>
@@ -43,17 +59,47 @@
<item msgid="811192536981678974">"10 ମିନିଟ୍"</item>
<item msgid="7258394417241706272">"30 ମିନିଟ୍"</item>
</string-array>
- <!-- no translation found for entries_font_size:0 (2340391964816059553) -->
- <!-- no translation found for entries_font_size:0 (6490061470416867723) -->
- <!-- no translation found for entries_font_size:2 (1714184661981538355) -->
- <!-- no translation found for entries_font_size:2 (1678068858001018666) -->
- <!-- no translation found for wifi_status:3 (5848277343965362748) -->
- <!-- no translation found for wifi_status_with_ssid:1 (6816207058895999545) -->
- <!-- no translation found for wifi_status_with_ssid:3 (7547609081339573756) -->
- <!-- no translation found for wifi_status_with_ssid:4 (5145158315060185414) -->
+ <string-array name="entries_font_size">
+ <item msgid="2340391964816059553">"ଛୋଟ"</item>
+ <item msgid="591935967183159581">"ଡିଫଲ୍ଟ"</item>
+ <item msgid="1714184661981538355">"ବହୁତ ବଡ଼"</item>
+ <item msgid="6195563047686707484">"ବୃହତ୍ତମ"</item>
+ </string-array>
+ <string-array name="wifi_status">
+ <item msgid="1304883790721412351"></item>
+ <item msgid="4157625910392775808">"ସ୍କାନ୍ କରୁଛି…"</item>
+ <item msgid="5597394826455877834">"ସଂଯୋଗ କରାଯାଉଛି…"</item>
+ <item msgid="5848277343965362748">"ପ୍ରାମାଣିକରଣ କରାଯାଉଛି…"</item>
+ <item msgid="3391238031431440676">"IP ଠିକଣା ପ୍ରାପ୍ତ କରୁଛି…"</item>
+ <item msgid="5257597310494000224">"ସଂଯୋଗ ହୋଇଛି"</item>
+ <item msgid="8472497592913050396">"ସସ୍ପେଣ୍ଡ ହୋଇଛି"</item>
+ <item msgid="1228072488815999109">"ବିଚ୍ଛିନ୍ନ କରୁଛି…"</item>
+ <item msgid="7253087004422991731">"ବିଛିନ୍ନ"</item>
+ <item msgid="4169850917304751227">"ଅସଫଳ"</item>
+ <item msgid="6266658166690831131">"ଅବରୋଧିତ"</item>
+ <item msgid="4517230805854909775">"ସାମୟିକ ଭାବେ ଖରାପ ସଂଯୋଜନାକୁ ଏଡାଉଛି"</item>
+ </string-array>
+ <string-array name="wifi_status_with_ssid">
+ <item msgid="4853670665485437464"></item>
+ <item msgid="6816207058895999545">"ସ୍କାନ୍ ହେଉଛି…"</item>
+ <item msgid="8058143476674427024">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>କୁ ସଂଯୋଗ କରାଯାଉଛି…"</item>
+ <item msgid="7547609081339573756">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> ମାଧ୍ୟମରେ ପ୍ରାମାଣିକରଣ କରାଯାଉଛି…"</item>
+ <item msgid="5145158315060185414">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>ରୁ IP ଠିକଣା ହାସଲ କରୁଛି…"</item>
+ <item msgid="3283243151651124831">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> ସହ ସଂଯୁକ୍ତ"</item>
+ <item msgid="6600156231416890902">"ସସ୍ପେଣ୍ଡ ହୋଇଛି"</item>
+ <item msgid="4133290864821295785">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>ରୁ ବିଚ୍ଛିନ୍ନ ହେଉଛି…"</item>
+ <item msgid="3980154971187953257">"ବିଛିନ୍ନ"</item>
+ <item msgid="2847316776634969068">"ଅସଫଳ"</item>
+ <item msgid="4390990424746035383">"ଅବରୋଧିତ"</item>
+ <item msgid="3618248791367063949">"ଦୁର୍ବଳ ସଂଯୋଗକୂ ସାମୟିକ ଭାବେ ଏଡ଼ାଉଛି"</item>
+ </string-array>
<!-- no translation found for wifi_tether_security:0 (5586343370515598801) -->
<!-- no translation found for wifi_tether_security:1 (6136336549994615745) -->
- <!-- no translation found for wifi_p2p_wps_setup:0 (5390235347963255303) -->
+ <string-array name="wifi_p2p_wps_setup">
+ <item msgid="5390235347963255303">"ପୁଶ୍ ବଟନ୍"</item>
+ <item msgid="7401896200768713930">"ପୀଅର୍ ଡିଭାଇସ୍ରୁ PIN"</item>
+ <item msgid="4526848028011846710">"ଏହି ଡିଭାଇସ୍ରୁ PIN"</item>
+ </string-array>
<string-array name="wifi_p2p_status">
<item msgid="8741947238021758201">"ସଂଯୋଗ ହୋଇଛି"</item>
<item msgid="983792611851499732">"ଆମନ୍ତ୍ରିତ"</item>
@@ -61,7 +107,12 @@
<item msgid="4646663015449312554">"ଉପଲବ୍ଧ"</item>
<item msgid="3230556734162006146">"ପରିସୀମା ବାହାରେ"</item>
</string-array>
- <!-- no translation found for bluetooth_visibility_timeout_entries:1 (2759776603549270587) -->
+ <string-array name="bluetooth_visibility_timeout_entries">
+ <item msgid="8247986727324120082">"2 ମିନିଟ୍"</item>
+ <item msgid="2759776603549270587">"5 ମିନିଟ୍"</item>
+ <item msgid="167772676068860015">"1 ଘଣ୍ଟା"</item>
+ <item msgid="5985477119043628504">"କେବେବି ବନ୍ଦ କରନାହିଁ"</item>
+ </string-array>
<string-array name="bluetooth_max_connected_audio_devices">
<item msgid="3800257971619063588">"ସିଷ୍ଟମ୍ ଡିଫଲ୍ଟ ବ୍ୟବହାର କରନ୍ତୁ: <xliff:g id="DEFAULT_BLUETOOTH_MAX_CONNECTED_AUDIO_DEVICES">%1$d</xliff:g>"</item>
<item msgid="8572230405241423895">"୧"</item>
@@ -70,8 +121,13 @@
<item msgid="1644506614010085798">"4"</item>
<item msgid="3132506679404897150">"5"</item>
</string-array>
- <!-- no translation found for wifi_signal:1 (7882129634982603782) -->
- <!-- no translation found for wifi_signal:4 (999948812884919584) -->
+ <string-array name="wifi_signal">
+ <item msgid="1709949377823900951">"ଖରାପ"</item>
+ <item msgid="7882129634982603782">"ଦୁର୍ବଳ"</item>
+ <item msgid="6457357501905996224">"ଠିକଠାକ"</item>
+ <item msgid="405271628162918841">"ଭଲ"</item>
+ <item msgid="999948812884919584">"ସର୍ବୋତ୍ତମ"</item>
+ </string-array>
<string-array name="data_usage_data_range">
<item msgid="8986775481492954015">"ଗତ 30 ଦିନ"</item>
<item msgid="3211287705232736964">"ବ୍ୟବହାରର ଚକ୍ର ସେଟ୍ କରନ୍ତୁ…"</item>
@@ -107,7 +163,10 @@
<item msgid="7330627471456865502">"MSCHAPV2"</item>
<item msgid="6255179395132581882">"GTC"</item>
</string-array>
- <!-- no translation found for wifi_ip_settings:1 (4377002609760712163) -->
+ <string-array name="wifi_ip_settings">
+ <item msgid="2717196390555072244">"DHCP"</item>
+ <item msgid="4377002609760712163">"ଷ୍ଟାଟିକ୍"</item>
+ </string-array>
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"କିଛି ନୁହେଁ"</item>
<item msgid="1464741437353223198">"ମାନୁଆଲ୍"</item>
@@ -124,8 +183,24 @@
<item msgid="9148582221081416020">"IPv6"</item>
<item msgid="4094895508821270572">"IPv4/IPv6"</item>
</string-array>
- <!-- no translation found for bearer_entries:0 (5231094118929435723) -->
- <!-- no translation found for bearer_entries:9 (7246853278334311652) -->
+ <string-array name="bearer_entries">
+ <item msgid="5231094118929435723">"ଅନିର୍ଦ୍ଦିଷ୍ଟ"</item>
+ <item msgid="2740477081395679090">"LTE"</item>
+ <item msgid="1807866878276630064">"HSPAP"</item>
+ <item msgid="7945352669463358624">"HSPA"</item>
+ <item msgid="4152166097223929133">"HSUPA"</item>
+ <item msgid="5134662517319988296">"HSDPA"</item>
+ <item msgid="4997539146036732961">"UMTS"</item>
+ <item msgid="4910169712073083585">"EDGE"</item>
+ <item msgid="3505904588897578792">"GPRS"</item>
+ <item msgid="7246853278334311652">"eHRPD"</item>
+ <item msgid="7037248100126710307">"EVDO_B"</item>
+ <item msgid="3440758673769932256">"EVDO_A"</item>
+ <item msgid="1782525731958596741">"EVDO_0"</item>
+ <item msgid="1819765960790884441">"1xRTT"</item>
+ <item msgid="3148192102183107944">"IS95B"</item>
+ <item msgid="3778273775365258534">"IS95A"</item>
+ </string-array>
<string-array name="mvno_type_entries">
<item msgid="6984770764726663331">"କିଛି ନୁହେଁ"</item>
<item msgid="1469208769491004112">"SPN"</item>
@@ -144,28 +219,185 @@
<item msgid="8563996233342430477">"ମିଡିଆ"</item>
<item msgid="5323851085993963783">"ଡିଭାଇସ୍"</item>
</string-array>
- <!-- no translation found for app_ops_summaries:46 (4933375960222609935) -->
- <!-- no translation found for app_ops_labels:3 (7836406246005211990) -->
- <!-- no translation found for app_ops_labels:4 (3951439024549922598) -->
- <!-- no translation found for app_ops_labels:8 (3597797992398484655) -->
- <!-- no translation found for app_ops_labels:20 (3037159047591081136) -->
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
- <!-- no translation found for app_ops_labels:48 (8291198322681891160) -->
+ <string-array name="app_ops_summaries">
+ <item msgid="2585253854462134715">"ଆନୁମାନିକ ଲୋକେସନ୍"</item>
+ <item msgid="1830619568689922920">"ଫାଇନ୍ ଲୋକେସନ୍"</item>
+ <item msgid="3317274469481923141">"GPS"</item>
+ <item msgid="8931785990160383356">"କମ୍ପନ"</item>
+ <item msgid="8632513128515114092">"ଯୋଗାଯୋଗଗୁଡ଼ିକୁ ପଢ଼ନ୍ତୁ"</item>
+ <item msgid="3741042113569620272">"ଯୋଗାଯୋଗଗୁଡିକ ପରିବର୍ତ୍ତନ କରନ୍ତୁ"</item>
+ <item msgid="4204420969709009931">"କଲ୍ ଲଗ୍ ପଢ଼ନ୍ତୁ"</item>
+ <item msgid="2260380357119423209">"କଲ୍ ଲଗ୍ ସଂଶୋଧନ କରନ୍ତୁ"</item>
+ <item msgid="6550710385014530934">"କ୍ୟାଲେଣ୍ଡର ପଢ଼ନ୍ତୁ"</item>
+ <item msgid="3575906174264853951">"କ୍ୟାଲେଣ୍ଡର ସଂଶୋଧନ"</item>
+ <item msgid="4319843242568057174">"ୱାଇ-ଫାଇ ସ୍କାନ୍"</item>
+ <item msgid="2981791890467303819">"ବିଜ୍ଞପ୍ତି"</item>
+ <item msgid="6617825156152476692">"ସେଲ୍ ସ୍କାନ୍"</item>
+ <item msgid="8865260890611559753">"ଫୋନ୍ ନମ୍ବର୍ କଲ୍ କରନ୍ତୁ"</item>
+ <item msgid="3254999273961542982">"SMS ପଢ଼ନ୍ତୁ"</item>
+ <item msgid="7711446453028825171">"SMS ଲେଖନ୍ତୁ"</item>
+ <item msgid="6123238544099198034">"SMS ଗ୍ରହଣ"</item>
+ <item msgid="838342167431596036">"ଜରୁରୀକାଳୀନ SMS ପାଆନ୍ତୁ"</item>
+ <item msgid="8554432731560956686">"MMS ପାଆନ୍ତୁ"</item>
+ <item msgid="7464863464299515059">"ୱାପ୍ ପୁଶ୍ ପ୍ରାପ୍ତ କରନ୍ତୁ"</item>
+ <item msgid="310463075729606765">"SMS ପଠାନ୍ତୁ"</item>
+ <item msgid="7338021933527689514">"ICC SMS ପଢ଼ନ୍ତୁ"</item>
+ <item msgid="6130369335466613036">"ICC SMS ଲେଖନ୍ତୁ"</item>
+ <item msgid="6536865581421670942">"ସେଟିଙ୍ଗରେ ସଂଶୋଧନ କରନ୍ତୁ"</item>
+ <item msgid="4547203129183558973">"ସ୍କ୍ରୀନ୍ର ଉପର ଭାଗରେ ଆଙ୍କନ୍ତୁ"</item>
+ <item msgid="9080347512916542840">"ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଆକ୍ସେସ୍ କରନ୍ତୁ"</item>
+ <item msgid="5332718516635907742">"କ୍ୟାମେରା"</item>
+ <item msgid="6098422447246167852">"ଅଡିଓ ରେକର୍ଡ କରନ୍ତୁ"</item>
+ <item msgid="9182794235292595296">"ଅଡିଓ ବଜାନ୍ତୁ"</item>
+ <item msgid="8760743229597702019">"କ୍ଲିପବୋର୍ଡ ପଢନ୍ତୁ"</item>
+ <item msgid="2266923698240538544">"କ୍ଲିପ୍ବୋର୍ଡ ବଦଳାନ୍ତୁ"</item>
+ <item msgid="1801619438618539275">"ମିଡିଆର ବଟନ୍"</item>
+ <item msgid="31588119965784465">"ଅଡିଓ ଫୋକସ୍"</item>
+ <item msgid="7565226799008076833">"ମାଷ୍ଟର୍ ଭଲ୍ୟୁମ୍"</item>
+ <item msgid="5420704980305018295">"ଭଏସ ଭଲ୍ୟୁମ"</item>
+ <item msgid="5797363115508970204">"ରିଙ୍ଗ ଭଲ୍ୟୁମ୍"</item>
+ <item msgid="8233154098550715999">"ମିଡିଆ ଭଲ୍ୟୁମ୍"</item>
+ <item msgid="5196715605078153950">"ଆଲାର୍ମର ଭଲ୍ୟୁମ୍"</item>
+ <item msgid="394030698764284577">"ବିଜ୍ଞପ୍ତି ଭଲ୍ୟୁମ୍"</item>
+ <item msgid="8952898972491680178">"ବ୍ଲୁଟୂଥ୍ ଭଲ୍ୟୁମ୍"</item>
+ <item msgid="8506227454543690851">"ଜାଗ୍ରତ ରଖନ୍ତୁ"</item>
+ <item msgid="1108160036049727420">"ଜାଗା ଖୋଜନ୍ତୁ"</item>
+ <item msgid="1496205959751719491">"ମଜବୁତ ସିଗ୍ନାଲ୍ ଥିବା ଜାଗା ଖୋଜନ୍ତୁ"</item>
+ <item msgid="3776296279910987380">"ଉପଯୋଗର ହିସାବ ପାଆନ୍ତୁ"</item>
+ <item msgid="8827100324471975602">"ମାଇକ୍ରୋଫୋନ୍ର ସାଉଣ୍ଡ ବନ୍ଦ/ଚାଲୁ କରନ୍ତୁ"</item>
+ <item msgid="6880736730520126864">"ଟୋଷ୍ଟ୍ ଦେଖାନ୍ତୁ"</item>
+ <item msgid="4933375960222609935">"ପ୍ରୋଜେକ୍ଟ ମିଡିଆ"</item>
+ <item msgid="8357907018938895462">"VPN ସକ୍ରିୟ କରନ୍ତୁ"</item>
+ <item msgid="8143812849911310973">"ୱାଲପେପର୍ ଯୋଡ଼ନ୍ତୁ"</item>
+ <item msgid="6266277260961066535">"ସହାୟତାର ସଂରଚନା"</item>
+ <item msgid="7715498149883482300">"ସହାୟକ ସ୍କ୍ରିନ୍ସଟ୍"</item>
+ <item msgid="4046679376726313293">"ଫୋନ୍ର ସ୍ଥିତି ଜାଣନ୍ତୁ"</item>
+ <item msgid="6329507266039719587">"ଭଏସ୍ମେଲ୍ ଯୋଡ଼ନ୍ତୁ"</item>
+ <item msgid="7692440726415391408">"sip ବ୍ୟବହାର କରନ୍ତୁ"</item>
+ <item msgid="8572453398128326267">"ଆଉଟ୍ଗୋଇଙ୍ଗ କଲ୍ କରନ୍ତୁ"</item>
+ <item msgid="7775674394089376306">"ଆଙ୍ଗୁଠି ଚିହ୍ନ"</item>
+ <item msgid="3182815133441738779">"ବଡୀ ସେନ୍ସର୍"</item>
+ <item msgid="2793100005496829513">"ସେଲ୍ ବ୍ରଡକାଷ୍ଟ ପଢନ୍ତୁ"</item>
+ <item msgid="2633626056029384366">"ନକଲି ଅବସ୍ଥାନ"</item>
+ <item msgid="8356842191824684631">"ଷ୍ଟୋରେଜ୍ରୁ ଡାଟା ପଢ଼ିବାର ଅନୁମତି"</item>
+ <item msgid="5671906070163291500">"ଷ୍ଟୋରେଜ୍ରେ ଡାଟା ରଖିବାର ଅନୁମତି"</item>
+ <item msgid="2791955098549340418">"ସ୍କ୍ରୀନ୍ ଅନ୍ କରନ୍ତୁ"</item>
+ <item msgid="5599435119609178367">"ଆକାଉଣ୍ଟଗୁଡିକ ପ୍ରାପ୍ତ କରନ୍ତୁ"</item>
+ <item msgid="1165623660533024666">"ବ୍ୟାକ୍ଗ୍ରାଉଣ୍ଡରେ ଚଲାନ୍ତୁ"</item>
+ <item msgid="6423861043647911030">"ଆକ୍ସେସିବିଲିଟୀ ଭଲ୍ୟୁମ୍"</item>
+ </string-array>
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"ଅବସ୍ଥାନ"</item>
+ <item msgid="6656077694190491067">"ଅବସ୍ଥାନ"</item>
+ <item msgid="8790228218278477369">"ଅବସ୍ଥାନ"</item>
+ <item msgid="7836406246005211990">"ଭାଇବ୍ରେଟ୍"</item>
+ <item msgid="3951439024549922598">"ଯୋଗାଯୋଗଗୁଡ଼ିକ ପଢ଼ନ୍ତୁ"</item>
+ <item msgid="8802152411647068">"ଯୋଗାଯୋଗ ବଦଳାନ୍ତୁ"</item>
+ <item msgid="229544934599698735">"କଲ୍ ଲଗ୍ ପଢ଼ନ୍ତୁ"</item>
+ <item msgid="7396102294405899613">"କଲ୍ ଲଗ୍ ସଂଶୋଧନ କରନ୍ତୁ"</item>
+ <item msgid="3597797992398484655">"କ୍ୟାଲେଣ୍ଡର ପଢ଼ନ୍ତୁ"</item>
+ <item msgid="2705975774250907343">"କ୍ୟାଲେଣ୍ଡରରେ ପରିବର୍ତ୍ତନ କରନ୍ତୁ"</item>
+ <item msgid="4668747371441932697">"ଅବସ୍ଥାନ"</item>
+ <item msgid="1487578921720243646">"ପୋଷ୍ଟ ବିଜ୍ଞପ୍ତି"</item>
+ <item msgid="4636080349724146638">"ଲୋକେସନ୍"</item>
+ <item msgid="673510900286463926">"ଫୋନ୍କୁ କଲ୍ କରନ୍ତୁ"</item>
+ <item msgid="542083422784609790">"SMS/MMS ପଢ଼ନ୍ତୁ"</item>
+ <item msgid="1033780373029588436">"SMS/MMS ଲେଖନ୍ତୁ"</item>
+ <item msgid="5647111115517787488">"SMS/MMS ପାଆନ୍ତୁ"</item>
+ <item msgid="8591105601108455893">"SMS/MMS ପାଆନ୍ତୁ"</item>
+ <item msgid="7730995008517841903">"SMS/MMS ପାଆନ୍ତୁ"</item>
+ <item msgid="2613033109026626086">"SMS/MMS ପାଆନ୍ତୁ"</item>
+ <item msgid="3037159047591081136">"SMS/MMS ପଠାନ୍ତୁ"</item>
+ <item msgid="4726682243833913568">"SMS/MMS ପଢ଼ନ୍ତୁ"</item>
+ <item msgid="6555678522277865572">"SMS/MMS ଲେଖନ୍ତୁ"</item>
+ <item msgid="6981734935578130884">"ସେଟିଙ୍ଗଗୁଡ଼ିକ ବଦଳାନ୍ତୁ"</item>
+ <item msgid="8705854389991425629">"ଉପର ଭାଗରେ ଆଙ୍କନ୍ତୁ"</item>
+ <item msgid="5861356020344153651">"ବିଜ୍ଞପ୍ତି ଆକସେସ୍ କରନ୍ତୁ"</item>
+ <item msgid="78432174621628659">"କ୍ୟାମେରା"</item>
+ <item msgid="3986116419882154794">"ଅଡିଓ ରେକର୍ଡ କରନ୍ତୁ"</item>
+ <item msgid="4516840825756409490">"ଅଡିଓ ଚଲାନ୍ତୁ"</item>
+ <item msgid="6811712502798183957">"କ୍ଲିପ୍ବୋର୍ଡକୁ ପଢ଼ନ୍ତୁ"</item>
+ <item msgid="2780369012602289114">"କ୍ଲିପ୍ବୋର୍ଡରେ ସଂଶୋଧନ କରନ୍ତୁ"</item>
+ <item msgid="2331359440170850868">"ମିଡିଆ ବଟନ୍"</item>
+ <item msgid="6133599737122751231">"ଅଡିଓ ଫୋକସ୍"</item>
+ <item msgid="6844485713404805301">"ମାଷ୍ଟର୍ ଭଲ୍ୟୁମ୍"</item>
+ <item msgid="1600379420669104929">"ଭଏସ୍ ଭଲ୍ୟୁମ୍"</item>
+ <item msgid="6296768210470214866">"ରିଙ୍ଗ ଭଲ୍ୟୁମ୍"</item>
+ <item msgid="510690696071629241">"ମିଡିଆ ଭଲ୍ୟୁମ୍"</item>
+ <item msgid="406861638631430109">"ଆଲାର୍ମର ଭଲ୍ୟୁମ୍"</item>
+ <item msgid="4715864795872233884">"ସୂଚନା ଭଲ୍ୟୁମ"</item>
+ <item msgid="2311478519251301183">"ବ୍ଲୁଟୂଥ୍ ଭଲ୍ୟୁମ୍"</item>
+ <item msgid="5133991377896747027">"ଜାଗ୍ରତ କରି ରଖାଯାଉ"</item>
+ <item msgid="2464189519136248621">"ଲୋକେସନ୍"</item>
+ <item msgid="2062677934050803037">"ଅବସ୍ଥିତି"</item>
+ <item msgid="1735171933192715957">"ବ୍ୟବହାର ହିସାବ ପାଆନ୍ତୁ"</item>
+ <item msgid="1014093788778383554">"ମାଇକ୍ରୋଫୋନ୍କୁ ବନ୍ଦ କରନ୍ତୁ/ଖୋଲନ୍ତୁ"</item>
+ <item msgid="4199297950608622850">"ଟୋଷ୍ଟ ଦେଖାନ୍ତୁ"</item>
+ <item msgid="2527962435313398821">"ପ୍ରୋଜେକ୍ଟ ମିଡିଆ"</item>
+ <item msgid="5117506254221861929">"VPN ସକ୍ରିୟ କରନ୍ତୁ"</item>
+ <item msgid="8291198322681891160">"ୱାଲପେପର୍ ଲେଖନ୍ତୁ"</item>
+ <item msgid="7106921284621230961">"ସହାୟକ ସଂରଚନା"</item>
+ <item msgid="4496533640894624799">"ସହାୟତା ସ୍କ୍ରିନ୍ସଟ୍"</item>
+ <item msgid="2598847264853993611">"ଫୋନ୍ର ସ୍ଥିତି ଜାଣନ୍ତୁ"</item>
+ <item msgid="9215610846802973353">"ଭଏସ୍ମେଲ୍ ଯୋଡ଼ନ୍ତୁ"</item>
+ <item msgid="9186411956086478261">"ସିପ୍ ବ୍ୟବହାର କରନ୍ତୁ"</item>
+ <item msgid="6884763100104539558">"ଆଉଟ୍ଗୋଇଙ୍ଗ କଲ୍ ପ୍ରୋସେସ୍ କରନ୍ତୁ"</item>
+ <item msgid="125513972170580692">"ଆଙ୍ଗୁଠି ଚିହ୍ନ"</item>
+ <item msgid="2556071024281275619">"ବଡୀ ସେନ୍ସର୍"</item>
+ <item msgid="617168514928339387">"ସେଲ୍ର ସମ୍ପ୍ରସାରଣକୁ ପଢ଼ନ୍ତୁ"</item>
+ <item msgid="7134693570516523585">"ନକଲି ଲୋକେସନ୍"</item>
+ <item msgid="7224489175375229399">"ପଠନ ଷ୍ଟୋରେଜ୍"</item>
+ <item msgid="8472735063903258202">"ଷ୍ଟୋରେଜ୍ରେ ଡାଟା ରଖିବାର ଅନୁମତି"</item>
+ <item msgid="4069276819909595110">"ସ୍କ୍ରୀନ୍କୁ ଅନ୍ କରନ୍ତୁ"</item>
+ <item msgid="1228338896751121025">"ଆକାଉଣ୍ଟଗୁଡିକ ପ୍ରାପ୍ତ କରନ୍ତୁ"</item>
+ <item msgid="3181581793459233672">"ବ୍ୟାକ୍ଗ୍ରାଊଣ୍ଡରେ ଚଲାନ୍ତୁ"</item>
+ <item msgid="2340936043025374076">"ଦିବ୍ୟାଙ୍ଗମାନଙ୍କ ପାଇଁ ସୁବିଧାଗୁଡ଼ିକର ଭଲ୍ୟୁମ୍"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"କମ୍"</item>
<item msgid="4816511817309094890">"ମଧ୍ୟମ"</item>
<item msgid="8305084671259331134">"ଲମ୍ଵା"</item>
</string-array>
- <!-- no translation found for captioning_typeface_selector_titles:4 (1487203730637617924) -->
- <!-- no translation found for captioning_font_size_selector_titles:3 (2784236342175159295) -->
- <!-- no translation found for captioning_edge_type_selector_titles:4 (8019330250538856521) -->
+ <string-array name="captioning_typeface_selector_titles">
+ <item msgid="6928465258504250174">"ଡିଫଲ୍ଟ"</item>
+ <item msgid="4147246073737933622">"ସାନ୍ସ-ସେରିଫ୍"</item>
+ <item msgid="3117680749167407907">"ସାନ୍ସ-ସେରିଫ୍ କଣ୍ଡେନ୍ସଡ୍"</item>
+ <item msgid="6529379119163117545">"ସାନ୍ସ-ସେରିଫ୍ ମୋନୋସ୍ପେସ୍"</item>
+ <item msgid="1487203730637617924">"Serif"</item>
+ <item msgid="4937790671987480464">"Serif monospace"</item>
+ <item msgid="4448481989108928248">"ସାଧାରଣ"</item>
+ <item msgid="4627069151979553527">"କର୍ସିଭ"</item>
+ <item msgid="6896773537705206194">"ଛୋଟ ଆକାରର ଅକ୍ଷର"</item>
+ </string-array>
+ <string-array name="captioning_font_size_selector_titles">
+ <item msgid="1680223634161592855">"ବହୁତ ଛୋଟ"</item>
+ <item msgid="5091603983404027034">"ଛୋଟ"</item>
+ <item msgid="176844712416932112">"ସାଧାରଣ"</item>
+ <item msgid="2784236342175159295">"ବହୁତ ବଡ଼"</item>
+ <item msgid="218913203203160606">"ବହୁତ ବଡ଼"</item>
+ </string-array>
+ <string-array name="captioning_edge_type_selector_titles">
+ <item msgid="3865198759294188069">"ଡିଫଲ୍ଟ"</item>
+ <item msgid="6488643537808152001">"କିଛି ନୁହେଁ"</item>
+ <item msgid="552332815156010137">"ଆଉଟ୍ଲାଇନ୍"</item>
+ <item msgid="7187891159463789272">"ଡ୍ରପ୍ ଛାୟା"</item>
+ <item msgid="8019330250538856521">"ଉପରକୁ ଟିକିଏ ଉଠିଥିବା"</item>
+ <item msgid="8987385315647049787">"ସଂକ୍ଷିପ୍ତ"</item>
+ </string-array>
<string-array name="captioning_opacity_selector_titles">
<item msgid="313003243371588365">"25%"</item>
<item msgid="4665048002584838262">"50%"</item>
<item msgid="1874668269931014581">"75%"</item>
<item msgid="6462911487571123954">"100%"</item>
</string-array>
- <!-- no translation found for captioning_preset_selector_titles:2 (5891360837786277638) -->
+ <string-array name="captioning_preset_selector_titles">
+ <item msgid="326819345272910536">"ଆପ୍ର ପୂର୍ବ-ନିର୍ଦ୍ଧାରିତ ସେଟିଙ୍ଗ ବ୍ୟବହାର କରନ୍ତୁ"</item>
+ <item msgid="8611890312638868524">"କଳା ଉପରେ ଧଳା"</item>
+ <item msgid="5891360837786277638">"ଧଳା ଉପରେ କଳା"</item>
+ <item msgid="2798457065945456853">"କଳା ଉପରେ ହଳଦିଆ"</item>
+ <item msgid="5799049811524553967">"ନୀଳ ଉପରେ ହଳଦିଆ"</item>
+ <item msgid="3673930830658169860">"କଷ୍ଟମ"</item>
+ </string-array>
<string-array name="vpn_types_long">
<item msgid="6566768880689730097">"PPTP VPN"</item>
<item msgid="1349760781118368659">"ପୂର୍ବରୁ ସେୟାର୍ ହୋଇଥିବା କୀଗୁଡ଼ିକ ସହ L2TP/IPSec VPN"</item>
@@ -174,16 +406,36 @@
<item msgid="3319427315593649917">"ସର୍ଟିଫିକେଟ୍ ଏବଂ Xauth ପ୍ରାମାଣିକୀକରଣ ସହ IPSec VPN"</item>
<item msgid="8258927774145391041">"ସର୍ଟିଫିକେଟ୍ ଓ ହାଇବ୍ରିଡ୍ ସତ୍ୟାପନ ସହ IPSec VPN"</item>
</string-array>
- <!-- no translation found for vpn_proxy_settings:0 (2958623927055120839) -->
- <!-- no translation found for vpn_states:4 (9135049670787351881) -->
+ <string-array name="vpn_proxy_settings">
+ <item msgid="2958623927055120839">"କିଛି ନାହିଁ"</item>
+ <item msgid="1157046369795346308">"ମାନୁଆଲ୍"</item>
+ </string-array>
+ <string-array name="vpn_states">
+ <item msgid="5408915841694583740">"ବିଛିନ୍ନ"</item>
+ <item msgid="8754480102834556765">"ଆରମ୍ଭ କରୁଛି…"</item>
+ <item msgid="3351334355574270250">"ସଂଯୋଗ କରାଯାଉଛି…"</item>
+ <item msgid="8303882153995748352">"ସଂଯୋଗ ହୋଇଛି"</item>
+ <item msgid="9135049670787351881">"ସମୟ ସମାପ୍ତ"</item>
+ <item msgid="2124868417182583926">"ଅସଫଳ"</item>
+ </string-array>
<string-array name="security_settings_premium_sms_values">
<item msgid="1164265643455394443">"ପଚାରନ୍ତୁ"</item>
<item msgid="7718817231348607934">"ଆଦୌ ଅନୁମତି ଦିଅନାହିଁ"</item>
<item msgid="8184570120217958741">"ସର୍ବଦା ଅନୁମତି ଦିଅନ୍ତୁ"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"ସାଧାରଣ"</item>
+ <item msgid="5101233285497327432">"ମଧ୍ୟମ ଧରଣର"</item>
+ <item msgid="1555861583162930714">"କମ୍"</item>
+ <item msgid="1719683776264798117">"ଜଟିଳ"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"ସାଧାରଣ"</item>
+ <item msgid="6107138933849816768">"ମଧ୍ୟମ"</item>
+ <item msgid="182695359839047859">"କମ୍"</item>
+ <item msgid="8577246509202964244">"ଜଟିଳ"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"ନିରନ୍ତର"</item>
<item msgid="167418068739176448">"ଶ୍ରେଷ୍ଠ ଗତିବିଧି"</item>
@@ -245,7 +497,31 @@
<item msgid="8444727359525554695">"କେବଳ ହୋମ୍ ନେଟ୍ୱର୍କ"</item>
<item msgid="1161026694891024702">"ସ୍ଵତଃଚାଳିତ"</item>
</string-array>
- <!-- no translation found for preferred_network_mode_choices:11 (5713723042183940349) -->
+ <string-array name="preferred_network_mode_choices">
+ <item msgid="1823884522189328861">"GSM/WCDMA ପସନ୍ଦ କରାଯାଇଛି"</item>
+ <item msgid="7581481130337402578">"କେବଳ GSM"</item>
+ <item msgid="8579197487913425819">"କେବଳ WCDMA"</item>
+ <item msgid="8465243227505412498">"GSM/WCDMA ଅଟୋ"</item>
+ <item msgid="9107479914166352132">"CDMA/EvDo ଅଟୋ"</item>
+ <item msgid="4219607161971472471">"EvDo ବିନା CDMA"</item>
+ <item msgid="7278975240951052041">"କେବଳ EvDo"</item>
+ <item msgid="2295969832276827854">"CDMA/EvDo/GSM/WCDMA"</item>
+ <item msgid="9059227943989034424">"CDMA + LTE/EvDo"</item>
+ <item msgid="463168068025354541">"GSM/WCDMA/LTE"</item>
+ <item msgid="1770755308983338311">"ଗ୍ଲୋବାଲ୍"</item>
+ <item msgid="5713723042183940349">"LTE"</item>
+ <item msgid="8600184258612405670">"LTE / WCDMA"</item>
+ <item msgid="5638632460322750180">"କେବଳ TDSCDMA"</item>
+ <item msgid="4346392996298714633">"TDSCDMA/WCDMA"</item>
+ <item msgid="5004811216708487615">"LTE/TDSCDMA"</item>
+ <item msgid="9191730167201068525">"TDSCDMA/GSM"</item>
+ <item msgid="5874623229495009031">"LTE/TDSCDMA/GSM"</item>
+ <item msgid="5096480046347789213">"TDSCDMA/GSM/WCDMA"</item>
+ <item msgid="2075445917638134012">"LTE/TDSCDMA/WCDMA"</item>
+ <item msgid="3353351554070857366">"LTE/TDSCDMA/GSM/WCDMA"</item>
+ <item msgid="2067289929099567494">"TDSCDMA/CDMA/EVDO/GSM/WCDMA"</item>
+ <item msgid="4959483620561891661">"LTE/TDSCDMA/CDMA/EVDO/GSM/WCDMA"</item>
+ </string-array>
<string-array name="cdma_subscription_choices">
<item msgid="7691437408632563841">"RUIM/SIM"</item>
<item msgid="6219184455685527822">"NV"</item>
diff --git a/tests/CarDeveloperOptions/res/values-or/strings.xml b/tests/CarDeveloperOptions/res/values-or/strings.xml
index ca13d8f..5806e88 100644
--- a/tests/CarDeveloperOptions/res/values-or/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-or/strings.xml
@@ -20,7 +20,7 @@
<string name="no" msgid="4709057267400907161">"ନାହିଁ"</string>
<string name="create" msgid="5131953868544187847">"ତିଆରି କରନ୍ତୁ"</string>
<string name="allow" msgid="128867119174713893">"ଅନୁମତି"</string>
- <string name="deny" msgid="3998166389989144025">"ପ୍ରତ୍ୟାଖ୍ୟାନ"</string>
+ <string name="deny" msgid="3998166389989144025">"ଅଗ୍ରାହ୍ୟ କରନ୍ତୁ"</string>
<string name="device_info_default" msgid="1548919563979154348">"ଅଜଣା"</string>
<plurals name="show_dev_countdown" formatted="false" msgid="3953785659137161981">
<item quantity="other">ଜଣେ ଡେଭଲପର୍ ହେବାରେ ଆପଣ ବର୍ତ୍ତମାନ <xliff:g id="STEP_COUNT_1">%1$d</xliff:g> ଟି ପଦାଙ୍କ ଦୂରରେ ଅଛନ୍ତି।</item>
@@ -117,7 +117,7 @@
<string name="bluetooth_is_visible_message" msgid="6341088682252805612">"ବ୍ଲୁଟୂଥ୍ ସେଟିଙ୍ଗ ଖୋଲା ଥିବାବେଳେ ଆଖପାଖ ଡିଭାଇସ୍ଗୁଡ଼ିକୁ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ଦେଖାଦେଉଛି।"</string>
<string name="bluetooth_footer_mac_message" product="default" msgid="335341476746836260">"ଫୋନ୍ର ବ୍ଲୁଟୂଥ୍ ଠିକଣା ହେଉଛି: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_footer_mac_message" product="tablet" msgid="6033609611245782463">"ଟାବ୍ଲେଟ୍ର ବ୍ଲୁଟୂଥ୍ ଠିକଣା ହେଉଛି: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
- <string name="bluetooth_footer_mac_message" product="device" msgid="7639919867088358038">"ଡିଭାଇସ୍ର ବ୍ଲୁଟୂଥ୍ ଠିକଣା ହେଉଛି: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
+ <string name="bluetooth_footer_mac_message" product="device" msgid="7639919867088358038">"ଡିଭାଇସ୍ର ବ୍ଲୁଟୁଥ ଠିକଣା ହେଉଛି: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_is_disconnect_question" msgid="6180709281434591654">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>କୁ ବିଚ୍ଛିନ୍ନ କରିବେ?"</string>
<string name="bluetooth_broadcasting" msgid="8926408584599563760">"ବ୍ରଡ୍କାଷ୍ଟିଙ୍ଗ"</string>
<string name="bluetooth_device" msgid="3170974107364990008">"ନାମହୀନ ବ୍ଲୁଟୂଥ୍ ଡିଭାଇସ୍"</string>
@@ -223,7 +223,7 @@
<string name="radio_info_current_network_label" msgid="5785805819312999094">"ବର୍ତ୍ତମାନର ନେଟ୍ୱର୍କ:"</string>
<string name="radio_info_ppp_received_label" msgid="5217391494757374330">"ପାଇଥିବା ଡାଟା:"</string>
<string name="radio_info_gsm_service_label" msgid="7488842563230281026">"ଭଏସ୍ ସେବା:"</string>
- <string name="radio_info_signal_strength_label" msgid="7773514616083573394">"ସିଗ୍ନାଲ୍ ଶକ୍ତି:"</string>
+ <string name="radio_info_signal_strength_label" msgid="7773514616083573394">"ସିଗ୍ନାଲ୍ ଦକ୍ଷତା:"</string>
<string name="radio_info_call_status_label" msgid="8241020608714164780">"ଭଏସ୍ କଲ୍ ସ୍ଥିତି:"</string>
<string name="radio_info_ppp_sent_label" msgid="8397460098110761906">"ପଠାଯାଇଥିବା ଡାଟା:"</string>
<string name="radio_info_message_waiting_label" msgid="2660886722520568584">"ବାର୍ତ୍ତା ଅପକ୍ଷାରତ:"</string>
@@ -368,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"ପ୍ରୋଫାଇଲ୍ ସୂଚନା"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"ଆକାଉଣ୍ଟ"</string>
<string name="location_settings_title" msgid="2707201457572301030">"ଲୋକେସନ୍"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"ଲୋକେସନ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"ଲୋକେସନ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"ବନ୍ଦ"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">ଚାଲୁ ଅଛି - <xliff:g id="COUNT_1">%1$d</xliff:g>ଟି ଆପ୍ସ ଲୋକେସନ୍କୁ ଆକ୍ସେସ୍ କରିପାରିବେ</item>
@@ -425,7 +425,7 @@
<string name="security_settings_face_settings_require_confirmation_details" msgid="8740564864091803429">"ଆପ୍ସରେ ପ୍ରମାଣିକରଣ କରିବା ସମୟରେ, ସବୁବେଳେ ସୁନିଶ୍ଚିତକରଣ ଆବଶ୍ୟକ ହୋଇଥାଏ"</string>
<string name="security_settings_face_settings_remove_face_data" msgid="2821359954483136239">"ମୁହଁ ଡାଟା କାଢ଼ନ୍ତୁ"</string>
<string name="security_settings_face_settings_footer" msgid="4627175759990550715">"ଆପଣଙ୍କର ଡିଭାଇସ୍ ଅନ୍ଲକ୍ ଏବଂ ଆପ୍ସ ଆକ୍ସେସ୍ କରିବାକୁ ଆପଣଙ୍କ ମୁହଁକୁ ବ୍ୟବହାର କରି ହେବ। "<annotation id="url">"ଅଧିକ ଜାଣନ୍ତୁ"</annotation></string>
- <string name="security_settings_face_settings_remove_dialog_title" msgid="5675319895815271094">"ମୁହଁର ଡାଟା ଡିଲିଟ୍ କରିବେ?"</string>
+ <string name="security_settings_face_settings_remove_dialog_title" msgid="5675319895815271094">"ଫେସ୍ ଡାଟା ଡିଲିଟ୍ କରିବେ?"</string>
<string name="security_settings_face_settings_remove_dialog_details" msgid="3754494807169276107">"ମୁହଁ ଅନ୍ଲକ୍ ଦ୍ୱାରା ରେକର୍ଡ କରାଯାଇଥିବା ଡାଟା ସ୍ଥାୟୀ ଏବଂ ସୁରକ୍ଷିତ ରୂପେ ଡିଲିଟ୍ ହୋଇଯିବ। କାଢ଼ିଦେବା ପରେ, ଆପଣଙ୍କର ଫୋନ୍କୁ ଅନ୍ଲକ୍, ଆପ୍ସକୁ ସାଇନ୍ ଇନ୍, ଏବଂ ପେମେଣ୍ଟକୁ ସୁନିଶ୍ଚିତ କରିବାକୁ ଆପଣଙ୍କୁ PIN, ପେଟର୍ଣ୍ଣ, କିମ୍ବା ପାସ୍ୱର୍ଡର ଆବଶ୍ୟକ ହେବ।"</string>
<string name="security_settings_fingerprint_preference_title" msgid="4177132225930582928">"ଆଙ୍ଗୁଠି ଚିହ୍ନ"</string>
<string name="fingerprint_manage_category_title" msgid="1463406696801542090">"ଆଙ୍ଗୁଠି ଚିହ୍ନଗୁଡ଼ିକର ପରିଚାଳନା କରନ୍ତୁ"</string>
@@ -447,7 +447,7 @@
<string name="security_settings_fingerprint_enroll_introduction_cancel_setup" msgid="756928427429893070">"ଛାଡିଦିଅନ୍ତୁ"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue_setup" msgid="4125977169169671144">"ପରବର୍ତ୍ତୀ"</string>
<string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"ଆଙ୍ଗୁଠି ଚିହ୍ନ ସେଟ୍ଅପ୍ କରିବାର ପଦକ୍ଷେପଟି ଏଡ଼ାଇ ଯିବେ?"</string>
- <string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"ଟିପଚିହ୍ନ ସେଟଅପ୍ କେବଳ ଏକ ମିନିଟ୍ କିମ୍ବା ଦୁଇ ମିନିଟ୍ ସମୟ ନିଏ। ଯଦି ଆପଣ ଏହା ଛାଡି ଦିଅନ୍ତି, ଆପଣ ପରେ ସେଟିଙ୍ଗରେ ନିଜର ଟିପଚିହ୍ନ ଯୋଡିପାରିବେ।"</string>
+ <string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"ଟିପଚିହ୍ନ ସେଟଅପ୍ କେବଳ ଏକ ମିନିଟ୍ କିମ୍ବା ଦୁଇ ମିନିଟ୍ ସମୟ ନିଏ। ଯଦି ଆପଣ ଏହାକୁ ବାଦ୍ ଦିଅନ୍ତି, ଆପଣ ପରେ ସେଟିଂସରେ ନିଜର ଟିପଚିହ୍ନ ଯୋଗ କରିପାରିବେ।"</string>
<string name="lock_screen_intro_skip_title" msgid="5307431665496346914">"ସ୍କ୍ରୀନ୍ ଲକ୍ ଛାଡ଼ିଦେବେ?"</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="tablet" msgid="7553945981266845264">"ଡିଭାଇସ ସୁରକ୍ଷା ବୈଶିଷ୍ଟ୍ୟ ଚାଲୁ ହୋଇପାରିବ ନାହିଁ। ଏହି ଟାବ୍ଲେଟ୍ ଯଦି ଚୋରି ହୋଇଯାଏ, ହଜିଯାଏ କିମ୍ୱା ରିସେଟ୍ କରାଯାଏ, ତେବେ ଆପଣ ଏହାକୁ ବ୍ୟବହାର କରିବାରୁ ଅନ୍ୟମାନଙ୍କୁ ରୋକିପାରିବେ ନାହିଁ।"</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="device" msgid="1378243257238015603">"ଡିଭାଇସ୍ ସୁରକ୍ଷା ବୈଶିଷ୍ଟ୍ୟ ଅନ୍ ହେବନାହିଁ। ଏହି ଡିଭାଇସ୍ ହଜିଲେ କିମ୍ୱା ଚୋରି ହୋଇଗଲେ, ଅନ୍ୟମାନଙ୍କୁ ଏହାକୁ ବ୍ୟବହାର କରିବାରୁ ଆପଣ ରୋକିପାରିବେ ନାହିଁ।"</string>
@@ -455,7 +455,7 @@
<string name="lock_screen_intro_skip_dialog_text" product="tablet" msgid="7572334562915795226">"ଡିଭାଇସ ସୁରକ୍ଷା ବୈଶିଷ୍ଟ୍ୟ ଅନ୍ ହୋଇପାରିବ ନାହିଁ। ଏହି ଟାବଲେଟ୍ ଯଦି ଚୋରି ହୋଇଯାଏ କିମ୍ୱା ହଜିଯାଏ, ତେବେ ଆପଣ ଏହାକୁ ବ୍ୟବହାର କରିବାରେ ଅନ୍ୟମାନଙ୍କୁ ପ୍ରତିରୋଧ କରିପାରିବେ ନାହିଁ।"</string>
<string name="lock_screen_intro_skip_dialog_text" product="device" msgid="3819285334459763813">"ଡିଭାଇସ୍ର ସୁରକ୍ଷା ବୈଶିଷ୍ଟ୍ୟ ଚାଲୁ ହେବନାହିଁ। ଯଦି ଏହି ଡିଭାଇସ୍ ଚୋରି ହୋଇଯାଏ କିମ୍ୱା ହଜିଯାଏ, ତେବେ ଆପଣ ଏହାକୁ ବ୍ୟବହାର କରିବାରୁ ଅନ୍ୟମାନଙ୍କୁ ରୋକିପାରିବେ ନାହିଁ।"</string>
<string name="lock_screen_intro_skip_dialog_text" product="default" msgid="5361573789585652826">"ଡିଭାଇସ ସୁରକ୍ଷା ବୈଶିଷ୍ଟ୍ୟ ଚାଲୁ ହୋଇପାରିବ ନାହିଁ। ଯଦି ଏହି ଫୋନ୍ ଚୋରି ହୋଇଯାଏ କିମ୍ୱା ହଜିଯାଏ, ତେବେ ଆପଣ ଏହାକୁ ବ୍ୟବହାର କରିବାରୁ ଅନ୍ୟମାନଙ୍କୁ ରୋକିପାରିବେ ନାହିଁ।"</string>
- <string name="skip_anyway_button_label" msgid="4437815969645175429">"ତଥାପି ଆଗକୁ ବଢ଼ନ୍ତୁ"</string>
+ <string name="skip_anyway_button_label" msgid="4437815969645175429">"ଯେ କୌଣସି ଭାବେ ବାଦ୍ ଦିଅନ୍ତୁ"</string>
<string name="go_back_button_label" msgid="7310586887969860472">"ପଛକୁ ଫେରନ୍ତୁ"</string>
<string name="skip_lock_screen_dialog_button_label" msgid="6706047245716780006">"ବାଦ୍ ଦିଅନ୍ତୁ"</string>
<string name="cancel_lock_screen_dialog_button_label" msgid="2534925227627658819">"ବାତିଲ୍"</string>
@@ -468,8 +468,8 @@
<string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"ସେନ୍ସର୍କୁ ଛୁଅଁନ୍ତୁ"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"ନିଜ ଆଙ୍ଗୁଠିକୁ ସେନ୍ସର୍ ଉପରେ ରଖନ୍ତୁ ଏବଂ ଏକ କମ୍ପନ ଅନୁଭବ କରିବା ପରେ ଉଠାଇଦିଅନ୍ତୁ"</string>
<string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"ଉଠାନ୍ତୁ, ତା\'ପରେ ପୁଣି ଛୁଅଁନ୍ତୁ"</string>
- <string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"ନିଜ ଟିପଚିହ୍ନର ବିଭିନ୍ନ ଅଂଶ ଯୋଡ଼ିବା ପାଇଁ ଆଙ୍ଗୁଠି ଉଠାଉଥାନ୍ତୁ"</string>
- <string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"ଟିପଚିହ୍ନ ଯୋଡ଼ାଗଲା"</string>
+ <string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"ନିଜ ଟିପଚିହ୍ନର ବିଭିନ୍ନ ଅଂଶ ଯୋଗ କରିବା ପାଇଁ ଆଙ୍ଗୁଠି ଉଠାଉଥାନ୍ତୁ"</string>
+ <string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"ଟିପଚିହ୍ନ ଯୋଗ କରାଗଲା"</string>
<string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"ଆପଣ ଯେତେବେଳେ ଏହି ଆଇକନ୍କୁ ଦେଖିବେ, ପରିଚୟ ପାଇଁ କିମ୍ବା କ୍ରୟଗୁଡିକର ମଞ୍ଜୁରୀ ଦେବା ପାଇଁ ଆପଣଙ୍କ ଟିପଚିହ୍ନ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="security_settings_fingerprint_enroll_enrolling_skip" msgid="1473280156532146933">"ଏହାକୁ ପରେ କରନ୍ତୁ"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_title" msgid="2816424026528101690">"ଆଙ୍ଗୁଠି ଚିହ୍ନ ସେଟଅପ ଛାଡ଼ିଦେବେ?"</string>
@@ -490,7 +490,7 @@
<string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"ନାମାଙ୍କନ ସମ୍ପୂର୍ଣ୍ଣ ହୋଇନାହିଁ"</string>
<string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"ଆଙ୍ଗୁଠି ଚିହ୍ନ ନାମାଙ୍କନର ସମୟ ସମାପ୍ତ ହୋଇଯାଇଛି। ପୁଣିଥରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"ଆଙ୍ଗୁଠି ଚିହ୍ନ ନାମାଙ୍କନ ହୋଇପାରିଲା ନାହିଁ। ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ କିମ୍ବା ଭିନ୍ନ ଏକ ଆଙ୍ଗୁଠି ବ୍ୟବହାର କରନ୍ତୁ।"</string>
- <string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"ଆଉ ଗୋଟିଏ ଯୋଡ଼ନ୍ତୁ"</string>
+ <string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"ଆଉ ଗୋଟିଏ ଯୋଗ କରନ୍ତୁ"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"ପରବର୍ତ୍ତୀ"</string>
<string name="security_settings_fingerprint_enroll_disclaimer" msgid="5831834311961551423">"ଆପଣଙ୍କ ଫୋନ୍ ଅନଲକ୍ କରିବା ସହ, କ୍ରୟ କରିବାକୁ ଏବଂ ଆପ୍ ଆକ୍ସେସ୍ ସ୍ୱୀକୃତି ଦେବାକୁ ଆପଣଙ୍କ ଟିପଚିହ୍ନ ମଧ୍ୟ ବ୍ୟବହାର କରିପାରିବେ। "<annotation id="url">"ଅଧିକ ଜାଣନ୍ତୁ"</annotation></string>
<string name="security_settings_fingerprint_enroll_disclaimer_lockscreen_disabled" msgid="7954742554236652690">" ସ୍କ୍ରୀନ୍ ଲକ୍ ବିକଳ୍ପ ଅକ୍ଷମ ହୋଇଛି। ଅଧିକ ଜାଣିବା ପାଇଁ ନିଜ ସଂସ୍ଥାର ଆଡ୍ମିନ୍ଙ୍କୁ ସମ୍ପର୍କ କରନ୍ତୁ। "<annotation id="admin_details">"ଅଧିକ ବିବରଣୀ"</annotation>\n\n"କିଣାକିଣିକୁ ଆଧିକୃତ ଓ ଆପ୍ ଆକ୍ସେସ୍ ପାଇଁ ନିଜ ଆଙ୍ଗୁଠି ଚିହ୍ନକୁ ଆପଣ ତଥାପି ବ୍ୟବହାର କରିପାରିବେ। "<annotation id="url">"ଅଧିକ ଜାଣନ୍ତୁ"</annotation></string>
@@ -555,7 +555,7 @@
<string name="lock_settings_picker_fingerprint_message" msgid="1344567476145156885">"ନିଜର ବ୍ୟାକ୍ଅପ୍ ସ୍କ୍ରୀନ୍ ଲକ୍ ପଦ୍ଧତି ବାଛନ୍ତୁ"</string>
<string name="lock_settings_picker_face_message" msgid="6413145626861812959">"ନିଜର ବ୍ୟାକଅପ୍ ସ୍କ୍ରୀନ୍ ଲକ୍ ପଦ୍ଧତି ବାଛନ୍ତୁ"</string>
<string name="setup_lock_settings_options_button_label" msgid="4197315143877977385">"ସ୍କ୍ରିନ୍ ଲକ୍ର ବିକଳ୍ପଗୁଡ଼ିକ"</string>
- <string name="setup_lock_settings_options_dialog_title" msgid="5241946349173768827">"ସ୍କ୍ରୀନ୍ ଲକ୍ ବିକଳ୍ପ"</string>
+ <string name="setup_lock_settings_options_dialog_title" msgid="5241946349173768827">"ସ୍କ୍ରିନ୍ ଲକ୍ ବିକଳ୍ପ"</string>
<string name="unlock_set_unlock_launch_picker_title" msgid="2731152716948003853">"ସ୍କ୍ରୀନ୍ ଲକ୍"</string>
<string name="unlock_set_unlock_launch_picker_summary_lock_immediately" msgid="5596186270725220642">"<xliff:g id="UNLOCK_METHOD">%1$s</xliff:g> / ସୁପ୍ତାବସ୍ଥାର ତୁରନ୍ତ ପରେ"</string>
<string name="unlock_set_unlock_launch_picker_summary_lock_after_timeout" msgid="3861167251234952373">"<xliff:g id="UNLOCK_METHOD">%1$s</xliff:g> / <xliff:g id="TIMEOUT_STRING">%2$s</xliff:g> ସୁପ୍ତାବସ୍ଥା ପରେ"</string>
@@ -595,7 +595,7 @@
<string name="unlock_disable_lock_title" msgid="3508492427073600294">"ସ୍କ୍ରୀନ ଲକକୁ ବନ୍ଦ କର"</string>
<string name="unlock_disable_frp_warning_title" msgid="5858589970505254193">"ଡିଭାଇସ୍ ସୁରକ୍ଷାକୁ କାଢ଼ିଦେବେ?"</string>
<string name="unlock_disable_frp_warning_title_profile" msgid="3814123014295965266">"ପ୍ରୋଫାଇଲ୍ ସୁରକ୍ଷା କାଢ଼ିଦେବେ?"</string>
- <string name="unlock_disable_frp_warning_content_pattern" msgid="1843950215687159135">"ଆପଣଙ୍କ ପାଟର୍ନ ବିନା ଡିଭାଇସ୍ର ସୁରକ୍ଷା ବୈଶିଷ୍ଟ୍ୟ କାମ କରିବ ନାହିଁ।"</string>
+ <string name="unlock_disable_frp_warning_content_pattern" msgid="1843950215687159135">"ଆପଣଙ୍କ ପାଟର୍ନ ବିନା ଡିଭାଇସ୍ର ସୁରକ୍ଷା ଫିଚରଗୁଡ଼ିକ କାମ କରିବ ନାହିଁ।"</string>
<string name="unlock_disable_frp_warning_content_pattern_fingerprint" msgid="8846957650251741548">"ଆପଣଙ୍କ ପାଟର୍ନ ବିନା ଡିଭାଇସ ସୁରକ୍ଷା ବୈଶିଷ୍ଟ୍ୟ କାମ କରିବ ନାହିଁ।<xliff:g id="EMPTY_LINE">
</xliff:g>ଆପଣଙ୍କର ସେଭ ହୋଇଥିବା ଆଙ୍ଗୁଠି ଚିହ୍ନଗୁଡ଼ିକ ମଧ୍ୟ ଏହି ଡିଭାଇସରୁ ଉଡ଼ାଇଦିଆଯିବ ଏବଂ ଆପଣ ନିଜ ଫୋନକୁ ଅନଲକ କରିପାରିବେ ନାହିଁ, କିଣାକିଣି କରିପାରିବେ ନାହିଁ କିମ୍ୱା ତାହା ଦ୍ୱାରା ଏପଗୁଡ଼ିକରେ ସାଇନ ଇନ କରିପାରିବେ ନାହିଁ।"</string>
@@ -730,7 +730,7 @@
<string name="bluetooth_settings_title" msgid="7261244857456521825">"ବ୍ଲୁଟୂଥ୍"</string>
<string name="bluetooth_settings_summary" msgid="1221689092429277887">"ସଂଯୋଗଗୁଡ଼ିକର ପରିଚାଳନା, ଡିଭାଇସ୍ ନାମ ଓ ଖୋଜିବାଯୋଗ୍ୟତା ସେଟ୍ କରନ୍ତୁ"</string>
<string name="bluetooth_pairing_request" msgid="7221745525632573125">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ସହ ପେୟାର୍ କରିବେ?"</string>
- <string name="bluetooth_pairing_key_msg" msgid="1139230917419961975">"ବ୍ଲୁଟୂଥ୍ ପେୟାରିଂ କୋଡ୍"</string>
+ <string name="bluetooth_pairing_key_msg" msgid="1139230917419961975">"ବ୍ଲୁଟୁଥ ପେୟାରିଂ କୋଡ୍"</string>
<string name="bluetooth_enter_passkey_msg" msgid="6205151011298670207">"ପେୟାରିଂ କୋଡ୍ ଟାଇପ୍ କରନ୍ତୁ ତାପରେ ଫେରନ୍ତୁ କିମ୍ବା ପ୍ରବେଶ ଦବାନ୍ତୁ"</string>
<string name="bluetooth_enable_alphanumeric_pin" msgid="9138308197078115672">"ପିନ୍ରେ ଅକ୍ଷର କିମ୍ୱା ସଙ୍କେତ ରହିଥାଏ"</string>
<string name="bluetooth_pin_values_hint" msgid="8044671726261326240">"ସାଧାରଣତଃ 0000 କିମ୍ବା 1234"</string>
@@ -740,7 +740,7 @@
<string name="bluetooth_confirm_passkey_msg" msgid="7094455604290076371">"ଏହା ସହ ପେୟାର୍ କରିବାକୁ:<br><b><xliff:g id="DEVICE_NAME">%1$s</xliff:g></b><br><br>ନିଶ୍ଚିତ କରନ୍ତୁ ଏହା ଦେଖାଉଛି ପାସ୍କୀ:<br><b><xliff:g id="PASSKEY">%2$s</xliff:g></b>"</string>
<string name="bluetooth_incoming_pairing_msg" msgid="940451919337185024">"ଏହାଙ୍କ ପାଖରୁ:<br><b><xliff:g id="DEVICE_NAME">%1$s</xliff:g></b><br><br>ଏହି ଡିଭାଇସ୍ ସହ ପେୟାର୍ କରିବେ?"</string>
<string name="bluetooth_display_passkey_pin_msg" msgid="5909423849232791647">"ପେୟାର୍ କରିବା ପାଇଁ:<xliff:g id="BOLD1_0"><br><b></xliff:g><xliff:g id="DEVICE_NAME">%1$s</xliff:g><xliff:g id="END_BOLD1"></b><br><br></xliff:g>ଏହା ଉପରେ ଟାଇପ୍ କରନ୍ତୁ:<xliff:g id="BOLD2_1"><br><b></xliff:g><xliff:g id="PASSKEY">%2$s</xliff:g><xliff:g id="END_BOLD2"></b></xliff:g>, ତା’ପରେ ରିଟର୍ନ କିମ୍ୱା ଏଣ୍ଟର୍ ଦାବନ୍ତୁ।"</string>
- <string name="bluetooth_pairing_shares_phonebook" msgid="7474404818877079813">"ଆପଣଙ୍କ ଯୋଗାଯୋଗ ଓ କଲ୍ ହିଷ୍ଟୋରୀକୁ ଆକସେସ୍ ଦିଅନ୍ତୁ"</string>
+ <string name="bluetooth_pairing_shares_phonebook" msgid="7474404818877079813">"ଆପଣଙ୍କ ଯୋଗାଯୋଗ ଓ କଲ୍ ଇତିହାସକୁ ଆକସେସ୍ ଦିଅନ୍ତୁ"</string>
<string name="bluetooth_error_title" msgid="5718761586633101960"></string>
<string name="bluetooth_connecting_error_message" msgid="8473359363469518478">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ସହ ସଂଯୋଗ ସ୍ଥାପନା କରିପାରୁନାହିଁ।"</string>
<string name="bluetooth_preference_scan_title" msgid="457781003962324807">"ଡିଭାଇସ୍ଗୁଡ଼ିକୁ ଖୋଜ"</string>
@@ -770,7 +770,7 @@
<string name="ble_scan_notify_text" msgid="6290170236546386932">"ଲୋକେସନ୍ ସଠିକତାକୁ ଉନ୍ନତ କରିବା ପାଇଁ, ସିଷ୍ଟମ୍ ଆପ୍ ଓ ସେବାଗୁଡ଼ିକ ବ୍ଲୁଟୂଥ୍ ଡିଭାଇସ୍ଗୁଡ଼ିକୁ ଚିହ୍ନଟ କରିପାରିବେ। ଆପଣ ଏହାକୁ <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>ଖୋଜିବା ସେଟିଙ୍ଗରେ<xliff:g id="LINK_END_1">LINK_END</xliff:g>ବଦଳାଇପାରିବେ।"</string>
<string name="bluetooth_connect_failed" msgid="1151234676456333786">"ସଂଯୋଗ କରିପାରୁନାହିଁ। ପୁଣିଥରେ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
<string name="device_details_title" msgid="726517818032923222">"ଡିଭାଇସ୍ର ବିବରଣୀ"</string>
- <string name="bluetooth_device_mac_address" msgid="5328203122581150405">"ଡିଭାଇସ୍ର ବ୍ଲୁଟୂଥ୍ ଠିକଣା ହେଉଛି: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
+ <string name="bluetooth_device_mac_address" msgid="5328203122581150405">"ଡିଭାଇସ୍ର ବ୍ଲୁଟୁଥ ଠିକଣା ହେଉଛି: <xliff:g id="ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_unpair_dialog_title" msgid="3669848977755142047">"ଡିଭାଇସ୍ଟିକୁ ଭୁଲିଯିବେ?"</string>
<string name="bluetooth_unpair_dialog_body" product="default" msgid="5998071227980078077">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ସହିତ ଆପଣଙ୍କ ଫୋନ୍ ଆଉ ପେୟାର୍ ହେବନାହିଁ"</string>
<string name="bluetooth_unpair_dialog_body" product="tablet" msgid="4696157463230518866">"ଆପଣଙ୍କ ଟାବଲେଟ୍ ଏବେ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ସହ ପେୟାର୍ ହୋଇ ରହିବନାହିଁ"</string>
@@ -836,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"ୱାଇଫାଇ"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"ୱାଇ-ଫାଇ ଅନ୍ କରନ୍ତୁ"</string>
<string name="wifi_settings" msgid="7486492317310514109">"ୱାଇ-ଫାଇ"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"ୱାଇ-ଫାଇ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"ୱାଇ-ଫାଇ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"ୱାଇ-ଫାଇ ସେଟିଙ୍ଗ"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"ୱାଇ-ଫାଇ"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"ୱାୟର୍ଲେସ୍ ଆକ୍ସେସ୍ ପଏଣ୍ଟର ସେଟ୍ଅପ୍ ଓ ପରିଚାଳନା"</string>
@@ -874,7 +874,7 @@
<string name="wifi_switch_away_when_unvalidated" msgid="2418577764071293971">"ଯଦି ୱାଇ-ଫାଇ ଇଣ୍ଟରନେଟ୍ ଆକସେସ୍ ହରାଏ ମୋବାଇଲ୍ ଡାଟାକୁ ବଦଳାନ୍ତୁ।"</string>
<string name="wifi_cellular_data_fallback_title" msgid="5067241930716252665">"ସ୍ୱଚାଳିତ ଭାବେ ମୋବାଇଲ୍ ଡାଟାକୁ ଯାଆନ୍ତୁ"</string>
<string name="wifi_cellular_data_fallback_summary" msgid="2721467405851519769">"Wi‑Fiର ଇଣ୍ଟରନେଟ ଆକ୍ସେସ ନଥିବାବେଳେ ମୋବାଇଲ ଡାଟା ବ୍ୟବହାର କରନ୍ତୁ। ଡାଟା ବ୍ୟବହାର ଦେୟ ଲାଗୁ ହୋଇପାରେ।"</string>
- <string name="wifi_add_network" msgid="4094957940791876640">"ନେଟ୍ୱାର୍କ ଯୋଡ଼ନ୍ତୁ"</string>
+ <string name="wifi_add_network" msgid="4094957940791876640">"ନେଟ୍ୱାର୍କ ଯୋଗ କରନ୍ତୁ"</string>
<string name="wifi_configure_settings_preference_title" msgid="2678534679408777268">"ୱାଇ-ଫାଇ ପସନ୍ଦ"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="5714892572614655675">"ୱାଇ-ଫାଇ ସ୍ୱଚାଳିତ ଭାବେ ଅନ୍ ହୋଇଯାଉ"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_off" msgid="286904094152909651">"ସ୍ୱଚାଳିତ ଭାବେ ୱାଇ-ଫାଇ ପୁଣି ଅନ୍ ହେବନାହିଁ"</string>
@@ -902,11 +902,11 @@
<string name="wifi_advanced_toggle_description_expanded" msgid="1506697245302596510">"ଡ୍ରପ୍ ଡାଉନ୍ ତାଲିକା ବିକଶିତ ବିକଳ୍ପଗୁଡିକ। ହ୍ରାସ କରିବାକୁ ଦୁଇଥର-ଟାପ୍ କରନ୍ତୁ।"</string>
<string name="wifi_advanced_toggle_description_collapsed" msgid="3014965593695454879">"ଡ୍ରପ୍ ଡାଉନ୍ ତାଲିକା ବିକଶିତ ବିକଳ୍ପଗୁଡିକ। ବଢାଇବାକୁ ଦୁଇଥର-ଟାପ୍ କରନ୍ତୁ।"</string>
<string name="wifi_ssid" msgid="6746270925975522641">"ନେଟ୍ୱାର୍କର ନାମ"</string>
- <string name="wifi_ssid_hint" msgid="5010024648106585165">"SSID ପ୍ରବେଶ କରନ୍ତୁ"</string>
+ <string name="wifi_ssid_hint" msgid="5010024648106585165">"SSID ଲେଖନ୍ତୁ"</string>
<string name="wifi_security" msgid="9136702039496152831">"ସୁରକ୍ଷା"</string>
- <string name="wifi_hidden_network" msgid="6647772204699776833">"ଲୁଚିଥିବା ନେଟ୍ୱର୍କ"</string>
+ <string name="wifi_hidden_network" msgid="6647772204699776833">"ଲୁକ୍କାୟିତ ନେଟୱାର୍କ"</string>
<string name="wifi_hidden_network_warning" msgid="8182333050353796473">"ଯଦି ଆପଣଙ୍କ ରାଉଟର୍ ଗୋଟିଏ ନେଟ୍ୱର୍କ IDକୁ ପ୍ରସାରଣ ନକରେ କିନ୍ତୁ ଭବିଷ୍ୟତରେ ଆପଣ ତାହା ସହିତ କନେକ୍ଟ କରିବାକୁ ଚାହୁଁଛନ୍ତି, ତେବେ ଆପଣ ନେଟ୍ୱର୍କକୁ ଲୁକ୍କାୟିତ ଭାବେ ସେଟ୍ କରିପାରିବେ। \n\n ଏହା ଗୋଟିଏ ସୁରକ୍ଷା ପ୍ରଶ୍ନବାଚୀ ସୃଷ୍ଟି କରିପାରେ, କାରଣ ଆପଣଙ୍କ ଫୋନ୍ ନେଟ୍ୱର୍କ ପ୍ରାପ୍ତ କରିବା ପାଇଁ ନିୟମିତ ଭାବେ ନିଜର ସିଗନାଲ୍କୁ ପ୍ରସାରିତ କରିବ। \n\nଲୁକ୍କାୟିତ ଭାବେ ନେଟୱର୍କକୁ ସେଟ୍ କରିବା ଦ୍ଵାରା ରାଉଟର୍ର ସେଟିଙ୍ଗ ବଦଳିବ ନାହିଁ।"</string>
- <string name="wifi_signal" msgid="696548364467704808">"ସିଗ୍ନାଲ୍ର ଶକ୍ତି"</string>
+ <string name="wifi_signal" msgid="696548364467704808">"ସିଗନାଲର ଦକ୍ଷତା"</string>
<string name="wifi_status" msgid="3439931558930689940">"ସ୍ଥିତି"</string>
<string name="tx_wifi_speed" msgid="2571810085003261073">"ଟ୍ରାନ୍ସମିଟ୍ ଲିଙ୍କ୍ ବେଗ"</string>
<string name="rx_wifi_speed" msgid="7392873246110937187">"ଲିଙ୍କ୍ ସ୍ପିଡ୍ ପ୍ରାପ୍ତ କରନ୍ତୁ"</string>
@@ -915,23 +915,23 @@
<string name="passpoint_label" msgid="7429247462404128615">"ମାଧ୍ୟମରେ ସେଭ୍ ହୋଇଛି"</string>
<string name="passpoint_content" msgid="340527524510304327">"<xliff:g id="NAME">%1$s</xliff:g> କ୍ରେଡେନ୍ସିଆଲ୍"</string>
<string name="wifi_eap_method" msgid="3752116941487485859">"EAP ପଦ୍ଧତି"</string>
- <string name="please_select_phase2" msgid="5848080896810435677">"2ୟ ପର୍ଯ୍ୟାୟ ସତ୍ୟାପନ"</string>
+ <string name="please_select_phase2" msgid="5848080896810435677">"2ୟ ପର୍ଯ୍ୟାୟ ପ୍ରମାଣୀକରଣ"</string>
<string name="wifi_eap_ca_cert" msgid="1496395241849383785">"CA ସାର୍ଟିଫିକେଟ୍"</string>
<string name="wifi_eap_domain" msgid="3298302320003640130">"ଡୋମେନ୍"</string>
- <string name="wifi_eap_user_cert" msgid="6786839531765719173">"ଉପଯୋଗକର୍ତ୍ତା ସର୍ଟିଫିକେଟ୍"</string>
+ <string name="wifi_eap_user_cert" msgid="6786839531765719173">"ଉପଯୋଗକର୍ତ୍ତା ସାର୍ଟିଫିକେଟ୍"</string>
<string name="wifi_eap_identity" msgid="5280457017705738773">"ପରିଚୟ"</string>
<string name="wifi_eap_anonymous" msgid="6352344972490839958">"ଅଜ୍ଞାତ ପରିଚୟ"</string>
<string name="wifi_password" msgid="6942983531275177771">"ପାସ୍ୱର୍ଡ"</string>
- <string name="wifi_show_password" msgid="7878398590772942202">"ପାସ୍ୱର୍ଡ ଦେଖାନ୍ତୁ"</string>
+ <string name="wifi_show_password" msgid="7878398590772942202">"ପାସୱାର୍ଡ ଦେଖାନ୍ତୁ"</string>
<string name="wifi_ap_band_config" msgid="6565016368079288433">"AP ବ୍ୟାଣ୍ଡ ବାଛନ୍ତୁ"</string>
<string name="wifi_ap_choose_auto" msgid="7927637960569365785">"ସ୍ୱତଃ"</string>
<string name="wifi_ap_choose_2G" msgid="43198403259714736">"2.4 GHz ବ୍ୟାଣ୍ଡ"</string>
<string name="wifi_ap_choose_5G" msgid="2624859713183683146">"5 GHz ବ୍ୟାଣ୍ଡ"</string>
- <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"5.0 GHz ବ୍ୟାଣ୍ଡ ପ୍ରାଥମିକତା ଦିଆଗଲା"</string>
+ <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"5.0 GHz ବ୍ୟାଣ୍ଡକୁ ପ୍ରାଥମିକତା ଦିଆଯାଇଛି"</string>
<string name="wifi_ap_2G" msgid="5793110086517338494">"2.4 GHz"</string>
<string name="wifi_ap_5G" msgid="4584892544393675403">"2.4 GHz"</string>
<string name="wifi_ap_band_select_one" msgid="4409754936554360355">"ୱାଇ-ଫାଇ ହଟସ୍ପଟ୍ ପାଇଁ ଅତିକମ୍ରେ ଗୋଟିଏ ବ୍ୟାଣ୍ଡକୁ ଚୟନ କରନ୍ତୁ:"</string>
- <string name="wifi_ip_settings" msgid="4636102290236116946">"IP ସେଟିଙ୍ଗ"</string>
+ <string name="wifi_ip_settings" msgid="4636102290236116946">"IP ସେଟିଂସ୍"</string>
<string name="wifi_privacy_settings" msgid="4462092795794247809">"ଗୋପନୀୟତା"</string>
<string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"ଅନିୟମିତ MAC"</string>
<string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"ଏକ ଡିଭାଇସ୍ ଯୋଗ କରନ୍ତୁ"</string>
@@ -962,7 +962,7 @@
<string name="wifi_dpp_share_hotspot" msgid="847987212473038179">"ହଟସ୍ପଟ୍ ସେୟାର୍ କରନ୍ତୁ"</string>
<string name="wifi_dpp_lockscreen_title" msgid="3910665850075275963">"ସୁନିଶ୍ଚିତ କରାନ୍ତୁ ଏହା ଆପଣ ଅଟନ୍ତି"</string>
<string name="wifi_dpp_wifi_password" msgid="8007558344032612455">"ୱାଇ-ଫାଇ ପାସ୍ୱର୍ଡ: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
- <string name="wifi_dpp_hotspot_password" msgid="6172326289042241924">"ହଟସ୍ପଟ୍ ପାସ୍ୱର୍ଡ: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
+ <string name="wifi_dpp_hotspot_password" msgid="6172326289042241924">"ହଟସ୍ପଟ୍ ପାସୱାର୍ଡ: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
<string name="wifi_dpp_add_device" msgid="1347056725253936358">"ଡିଭାଇସ୍ ଯୋଗ କରନ୍ତୁ"</string>
<string name="wifi_dpp_connect_network_using_qr_code" msgid="115993715600532357">"ଏକ QR କୋଡ୍ ବ୍ୟବହାର କରି ଏହି ନେଟ୍ୱର୍କ ସହ ସଂଯୋଗ କରନ୍ତୁ"</string>
<string name="retry" msgid="8500839563577344702">"ପୁନଃଚେଷ୍ଟା କରନ୍ତୁ"</string>
@@ -970,9 +970,9 @@
<string name="wifi_unchanged" msgid="6804964646942333992">"(ଅପରିବର୍ତ୍ତିତ)"</string>
<string name="wifi_unspecified" msgid="893491188483500809">"ଦୟାକରି ଚୟନ କରନ୍ତୁ"</string>
<string name="wifi_multiple_cert_added" msgid="7986200585749147204">"(ଅନେକ ପ୍ରମାଣପତ୍ର ଯୋଡ଼ାଗଲା)"</string>
- <string name="wifi_use_system_certs" msgid="4794489370929885022">"ସିଷ୍ଟମ୍ ସର୍ଟିଫିକେଟ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <string name="wifi_use_system_certs" msgid="4794489370929885022">"ସିଷ୍ଟମ୍ ସାର୍ଟିଫିକେଟ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="wifi_do_not_provide_eap_user_cert" msgid="4044301449482425250">"ପ୍ରଦାନ କରନ୍ତୁ ନାହିଁ"</string>
- <string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"ମଞ୍ଜୁର କରନ୍ତୁ ନାହିଁ"</string>
+ <string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"ବୈଧ କରନ୍ତୁ ନାହିଁ"</string>
<string name="wifi_do_not_validate_eap_server_warning" msgid="3895397996759837323">"କୌଣସି ସର୍ଟିଫିକେଟ୍ ଦର୍ଶାଯାଇନାହିଁ। ଆପଣଙ୍କ ସଂଯୋଗ ଗୋପନ ରହିବ ନାହିଁ।"</string>
<string name="wifi_ssid_too_long" msgid="34911971389775920">"ନେଟୱାର୍କ ନାମ ବହୁତ ଲମ୍ଵା ଅଟେ।"</string>
<string name="wifi_no_domain_warning" msgid="735859919311067606">"ନିଶ୍ଚିତ ଭାବେ ଏକ ଡୋମେନ୍ ଦେବାକୁ ପଡ଼ିବ।"</string>
@@ -1028,7 +1028,7 @@
<string name="wifi_subscribed_access_points_tab" msgid="7498765485953257229">"ସଦସ୍ୟତା"</string>
<!-- no translation found for wifi_saved_access_points_tab (4677730543624191122) -->
<skip />
- <string name="wifi_advanced_settings_label" msgid="9147669851658738784">"IP ସେଟିଙ୍ଗ"</string>
+ <string name="wifi_advanced_settings_label" msgid="9147669851658738784">"IP ସେଟିଂସ୍"</string>
<string name="wifi_advanced_not_available" msgid="5751084989400195009">"ଏହି ଉପଯୋଗକର୍ତ୍ତାଙ୍କ ପାଇଁ ୱାଇ-ଫାଇ ଉନ୍ନତ ସେଟିଙ୍ଗ ଉପଲବ୍ଧ ନାହିଁ"</string>
<string name="wifi_ip_settings_menu_save" msgid="6557330818360425933">"ସେଭ୍ କରନ୍ତୁ"</string>
<string name="wifi_ip_settings_menu_cancel" msgid="8098696509412462494">"କ୍ୟାନ୍ସଲ୍ କରନ୍ତୁ"</string>
@@ -1046,7 +1046,7 @@
<string name="wifi_p2p_menu_search" msgid="8207638860263805291">"ଡିଭାଇସ୍ଗୁଡିକ ସନ୍ଧାନ କରନ୍ତୁ"</string>
<string name="wifi_p2p_menu_searching" msgid="7443249001543208106">"ଖୋଜୁଛି..."</string>
<string name="wifi_p2p_menu_rename" msgid="2129974878377065488">"ଡିଭାଇସ୍କୁ ଅନ୍ୟ ନାମ ଦିଅନ୍ତୁ"</string>
- <string name="wifi_p2p_peer_devices" msgid="8232126067045093382">"ପୀର୍ ଡିଭାଇସ୍ଗୁଡିକ"</string>
+ <string name="wifi_p2p_peer_devices" msgid="8232126067045093382">"ପିଅର୍ ଡିଭାଇସ୍"</string>
<string name="wifi_p2p_remembered_groups" msgid="1356458238836730346">"ସୁପାରିସକୃତ ଗ୍ରୁପ୍ସ"</string>
<string name="wifi_p2p_failed_connect_message" msgid="6103436959132424093">"ସଂଯୋଗ କରିପାରିଲା ନାହିଁ।"</string>
<string name="wifi_p2p_failed_rename_message" msgid="638656605352538706">"ଡିଭାଇସ୍କୁ ରିନେମ୍ କରିବାରେ ବିଫଳ"</string>
@@ -1102,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"ମୋବାଇଲ୍"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"ଯଦି ୱାଇ-ଫାଇ ଉପଲବ୍ଧ ନାହିଁ, ତେବେ ମୋବାଇଲ୍ ନେଟ୍ୱର୍କ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"ଯଦି ମୋବାଇଲ୍ ନେଟ୍ୱର୍କ ଉପଲବ୍ଧ ନାହିଁ, ତେବେ ୱାଇ-ଫାଇ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"ୱାଇ-ଫାଇ ମାଧ୍ୟମରେ କଲ୍ କରନ୍ତୁ ଯଦି ୱାଇ-ଫାଇ ରହିବ ନାହିଁ, ତେବେ କଲ୍ ସମାପ୍ତ ହୋଇଯିବ।"</string>
@@ -1122,7 +1125,7 @@
<string name="musicfx_title" msgid="6456079041566773649">"ମ୍ୟୁଜିକ୍ ଇଫେକ୍ଟସ୍"</string>
<string name="ring_volume_title" msgid="5874791723449821646">"ରିଙ୍ଗ ଭଲ୍ୟୁମ୍"</string>
<string name="vibrate_in_silent_title" msgid="2314667015729841220">"ନୀରବ ଥିବା ବେଳେ କମ୍ପନ କରନ୍ତୁ"</string>
- <string name="notification_sound_title" msgid="6812164482799723931">"ପୂର୍ବ-ନିର୍ଦ୍ଧାରିତ ବିଜ୍ଞପ୍ତିର ଶବ୍ଦ"</string>
+ <string name="notification_sound_title" msgid="6812164482799723931">"ଡିଫଲ୍ଟ ବିଜ୍ଞପ୍ତି ସାଉଣ୍ଡ"</string>
<string name="incoming_call_volume_title" msgid="4736570528754310450">"ରିଙ୍ଗଟୋନ୍"</string>
<string name="notification_volume_title" msgid="6022562909288085275">"ବିଜ୍ଞପ୍ତି"</string>
<string name="checkbox_notification_same_as_incoming_call" msgid="7312942422655861175">"ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ପାଇଁ ଇନ୍କମିଙ୍ଗ କଲ୍ ଭଲ୍ୟୁମ୍କୁ ବ୍ୟବହାର କର"</string>
@@ -1165,9 +1168,9 @@
<string name="accessibility_category_personal" msgid="1423427301759058762">"ବ୍ୟକ୍ତିଗତ ପ୍ରୋଫାଇଲ୍ ଆକାଉଣ୍ଟ"</string>
<string name="accessibility_work_account_title" msgid="3195468574776888011">"କାର୍ଯ୍ୟ ଆକାଉଣ୍ଟ - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
<string name="accessibility_personal_account_title" msgid="7251761883688839354">"ବ୍ୟକ୍ତିଗତ ଆକାଉଣ୍ଟ - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
- <string name="search_settings" msgid="5809250790214921377">"ସନ୍ଧାନ"</string>
+ <string name="search_settings" msgid="5809250790214921377">"Search"</string>
<string name="display_settings" msgid="1045535829232307190">"ଡିସ୍ପ୍ଲେ"</string>
- <string name="accelerometer_title" msgid="2427487734964971453">"ଅଟୋ-ରୋଟେଟ୍ ସ୍କ୍ରୀନ୍"</string>
+ <string name="accelerometer_title" msgid="2427487734964971453">"ଅଟୋ-ରୋଟେଟ୍ ସ୍କ୍ରିନ୍"</string>
<string name="color_mode_title" msgid="8164858320869449142">"ରଙ୍ଗ"</string>
<string name="color_mode_option_natural" msgid="1292837781836645320">"ପ୍ରାକୃତିକ"</string>
<string name="color_mode_option_boosted" msgid="453557938434778933">"ବର୍ଦ୍ଧିତ"</string>
@@ -1194,7 +1197,7 @@
<string name="auto_brightness_very_low_title" msgid="8716493755125824074">"ବହୁତ ନିମ୍ନ"</string>
<string name="auto_brightness_low_title" msgid="5005479920075366970">"ନିମ୍ନ"</string>
<string name="auto_brightness_default_title" msgid="5446692891470912829">"ପୂର୍ବ-ନିର୍ଦ୍ଧାରିତ"</string>
- <string name="auto_brightness_high_title" msgid="7653379331939225750">"ଅଧିକ"</string>
+ <string name="auto_brightness_high_title" msgid="7653379331939225750">"ଉଚ୍ଚ"</string>
<string name="auto_brightness_very_high_title" msgid="6649896560889239565">"ବହୁ ଉଚ୍ଚ"</string>
<string name="auto_brightness_subtitle" msgid="8516999348793100665">"ଆପଣଙ୍କ ପସନ୍ଦର ଉଜ୍ଜ୍ୱଳତା ସ୍ତର"</string>
<string name="auto_brightness_off_summary" msgid="6162650416289359104">"ଉପଲବ୍ଧ ଆଲୋକ ପାଇଁ ଆଡ୍ଜଷ୍ଟ କରନ୍ତୁ ନାହିଁ"</string>
@@ -1218,7 +1221,7 @@
<string name="night_display_status_title" msgid="1727020934735770319">"ସ୍ଥିତି"</string>
<string name="night_display_temperature_title" msgid="8375126629902616296">"ତୀବ୍ରତା"</string>
<string name="night_display_summary_off" msgid="8850539785332228069">"ବନ୍ଦ / <xliff:g id="ID_1">%1$s</xliff:g>"</string>
- <string name="night_display_summary_off_auto_mode_never" msgid="8618824386434992487">"ଆଦୌ ସ୍ୱଚାଳିତ ଭାବେ ଅନ୍ ହେବନାହିଁ"</string>
+ <string name="night_display_summary_off_auto_mode_never" msgid="8618824386434992487">"ଆଦୌ ସ୍ୱଚାଳିତ ଭାବେ ଚାଲୁ ହେବ ନାହିଁ"</string>
<string name="night_display_summary_off_auto_mode_custom" msgid="596847003171394411">"<xliff:g id="ID_1">%1$s</xliff:g> ରେ ସ୍ୱଚାଳିତ ଭାବେ ଅନ୍ ହେବ।"</string>
<string name="night_display_summary_off_auto_mode_twilight" msgid="4071750976585359952">"ସୂର୍ଯ୍ୟାସ୍ତରେ ସ୍ୱଚାଳିତ ଭାବେ ଅନ୍ ହେବ।"</string>
<string name="night_display_summary_on" msgid="6580571388791426596">"ଅନ୍ / <xliff:g id="ID_1">%1$s</xliff:g>"</string>
@@ -1236,7 +1239,7 @@
<string name="screen_timeout_title" msgid="150117777762864112">"ସ୍କ୍ରୀନ୍ ବନ୍ଦ ହୁଏ"</string>
<string name="screen_timeout_summary" msgid="8644192861778491060">"ନିଷ୍କ୍ରିୟତାର <xliff:g id="TIMEOUT_DESCRIPTION">%1$s</xliff:g> ପରେ"</string>
<string name="wallpaper_settings_title" msgid="347390905813529607">"ୱାଲପେପର୍"</string>
- <string name="style_and_wallpaper_settings_title" msgid="8898539141152705754">"ଶୈଳୀ ଏବଂ ୱାଲ୍ପେପର୍"</string>
+ <string name="style_and_wallpaper_settings_title" msgid="8898539141152705754">"ଷ୍ଟାଇଲ୍ ଏବଂ ୱାଲ୍ପେପର୍"</string>
<string name="wallpaper_settings_summary_default" msgid="2626880032742784599">"ପୂର୍ବ-ନିର୍ଦ୍ଧାରିତ"</string>
<string name="wallpaper_settings_summary_custom" msgid="8950504698015331202">"କଷ୍ଟମ୍"</string>
<string name="wallpaper_suggestion_title" msgid="3012130414886743201">"ୱାଲପେପର୍ ବଦଳାନ୍ତୁ"</string>
@@ -1351,7 +1354,7 @@
<string name="status_data_state" msgid="4538705798873861963">"ମୋବାଇଲ୍ ନେଟ୍ୱାର୍କ ସ୍ଥିତି"</string>
<string name="status_esim_id" msgid="9201767073386770286">"EID"</string>
<string name="status_service_state" msgid="4406215321296496234">"ସେବାର ସ୍ଥିତି"</string>
- <string name="status_signal_strength" msgid="4302597886933728789">"ସିଗ୍ନାଲ୍ ଶକ୍ତି"</string>
+ <string name="status_signal_strength" msgid="4302597886933728789">"ସିଗ୍ନାଲ୍ ଦକ୍ଷତା"</string>
<string name="status_roaming" msgid="5191044997355099561">"ରୋମିଙ୍ଗ"</string>
<string name="status_operator" msgid="6017986100643755390">"ନେଟ୍ୱର୍କ"</string>
<string name="status_wifi_mac_address" msgid="3868452167971295995">"ୱାଇ-ଫାଇ MAC ଠିକଣା"</string>
@@ -1583,7 +1586,7 @@
<string name="master_clear_title" msgid="1560712943955904673">"ସମସ୍ତ ଡାଟା ଖାଲି କରିଦିଅନ୍ତୁ (ଫ୍ୟାକ୍ଟୋରୀ ରିସେଟ୍)"</string>
<string name="master_clear_short_title" msgid="919098101581335101">"ସମସ୍ତ ଡାଟା ଖାଲି କରିଦିଅନ୍ତୁ (ଫ୍ୟାକ୍ଟୋରୀ ରିସେଟ୍)"</string>
<string name="master_clear_desc" product="tablet" msgid="3432373610755760899">"ଏହା, ଆପଣଙ୍କ ଟାବ୍ଲେଟ୍ର "<b>"ଇଣ୍ଟର୍ନଲ୍ ଷ୍ଟୋରେଜ୍"</b>"ରେ ଥିବା ସମସ୍ତ ଡାଟାକୁ ଖାଲି କରିଦେବ, ଯେପରିକି:\n\n"<li>"ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟ"</li>\n<li>"ସିଷ୍ଟମ ଓ ଆପ୍ ଡାଟା ଓ ସେଟିଂସ୍"</li>\n<li>"ଡାଉନ୍ଲୋଡ୍ ହୋଇଥିବା ଆପ୍ "</li></string>
- <string name="master_clear_desc" product="default" msgid="8765543541962866697">"ଏହା, ଆପଣଙ୍କ ଫୋନ୍ର "<b>"ଇଣ୍ଟର୍ନଲ୍ ଷ୍ଟୋରେଜ୍"</b>"ରେ ଥିବା ସମସ୍ତ ଡାଟାକୁ ଖାଲି କରିଦେବ, ଯେପରିକି:\n\n"<li>"ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟ"</li>\n<li>"ସିଷ୍ଟମ ଓ ଆପ୍ ଡାଟା ଓ ସେଟିଂସ୍"</li>\n<li>"ଡାଉନ୍ଲୋଡ୍ ହୋଇଥିବା ଆପ୍"</li></string>
+ <string name="master_clear_desc" product="default" msgid="8765543541962866697">"ଏହା ଆପଣଙ୍କ ଫୋନ୍ର "<b>"ଇଣ୍ଟର୍ନଲ୍ ଷ୍ଟୋରେଜ୍"</b>"ରେ ଥିବା ସମସ୍ତ ଡାଟା ସହିତ ଏସବୁକୁ ଖାଲି କରିଦେବ:\n\n"<li>"ଆପଣଙ୍କ Google ଆକାଉଣ୍ଟ"</li>\n<li>"ସିଷ୍ଟମ ଓ ଆପ୍ ଡାଟା ଓ ସେଟିଂସ୍"</li>\n<li>"ଡାଉନ୍ଲୋଡ୍ ହୋଇଥିବା ଆପ୍"</li></string>
<string name="master_clear_accounts" product="default" msgid="3432884235445405376">\n\n"ଆପଣ ବର୍ତ୍ତମାନ ନିମ୍ନ ଆକାଉଣ୍ଟଗୁଡ଼ିକରେ ସାଇନ୍ ଇନ୍ କରିଛନ୍ତି:\n"</string>
<string name="master_clear_other_users_present" product="default" msgid="5993259656117566767">\n\n"ଏହି ଡିଭାଇସ୍ରେ ଅନ୍ୟ ଉପଯୋଗକର୍ତ୍ତାମାନେ ଅଛନ୍ତି।\n"</string>
<string name="master_clear_desc_also_erases_external" msgid="3947303501615091903"><li>"ମ୍ୟୁଜିକ୍"</li>\n<li>"ଫଟୋ"</li>\n<li>"ଅନ୍ୟାନ୍ୟ ବ୍ୟବହାରକର୍ତ୍ତାଙ୍କ ଡାଟା"</li></string>
@@ -1605,24 +1608,24 @@
<string name="master_clear_not_available" msgid="4676613348163652454">"ଏହି ଉପଯୋଗକର୍ତ୍ତାଙ୍କ ପାଇଁ ଫ୍ୟାକ୍ଟୋରୀ ରିସେଟ୍ ଉପଲବ୍ଧ ନାହିଁ"</string>
<string name="master_clear_progress_title" msgid="378953167274114857">"ଲିଭାଉଛି"</string>
<string name="master_clear_progress_text" msgid="5418958116008976218">"ଦୟାକରି ଅପେକ୍ଷା କରନ୍ତୁ..."</string>
- <string name="call_settings_title" msgid="5033906789261282752">"କଲ୍ ସେଟିଙ୍ଗ"</string>
+ <string name="call_settings_title" msgid="5033906789261282752">"କଲ୍ ସେଟିଂସ୍"</string>
<string name="call_settings_summary" msgid="2119161087671450035">"ଭଏସ୍ମେଲ୍, କଲ୍ ଫର୍ୱାର୍ଡିଙ୍ଗ, କଲ୍ ୱେଟିଙ୍ଗ, କଲର୍ ID ସେଟ୍ କରନ୍ତୁ"</string>
- <string name="tether_settings_title_usb" msgid="4265582654602420357">"USB ଟିଥରିଙ୍ଗ"</string>
+ <string name="tether_settings_title_usb" msgid="4265582654602420357">"USB ଟିଥରିଂ"</string>
<string name="tether_settings_title_wifi" msgid="2060965130234484613">"ପୋର୍ଟବଲ୍ ହଟସ୍ପଟ୍"</string>
- <string name="tether_settings_title_bluetooth" msgid="1999590158102569959">"ବ୍ଲୁଟୂଥ ଟିଥରିଙ୍ଗ"</string>
- <string name="tether_settings_title_usb_bluetooth" msgid="1159128764162788159">"ଟିଥର୍ କରୁଛି"</string>
- <string name="tether_settings_title_all" msgid="6935843543433954181">"ହଟସ୍ପଟ୍ ଓ ଟିଥରିଙ୍ଗ"</string>
- <string name="tether_settings_summary_hotspot_on_tether_on" msgid="1289593649526514499">"Hotspot ଅନ୍ ଅଛି, ଟିଥର୍ କରୁଛି"</string>
+ <string name="tether_settings_title_bluetooth" msgid="1999590158102569959">"ବ୍ଲୁଟୁଥ ଟିଥରିଂ"</string>
+ <string name="tether_settings_title_usb_bluetooth" msgid="1159128764162788159">"ଟିଥରିଂ"</string>
+ <string name="tether_settings_title_all" msgid="6935843543433954181">"ହଟସ୍ପଟ୍ ଓ ଟିଥରିଂ"</string>
+ <string name="tether_settings_summary_hotspot_on_tether_on" msgid="1289593649526514499">"ହଟସ୍ପଟ୍ ଚାଲୁ ଅଛି, ଟିଥର୍ କରୁଛି"</string>
<string name="tether_settings_summary_hotspot_on_tether_off" msgid="8010689354668285422">"ହଟସ୍ପଟ୍ ଅନ୍"</string>
- <string name="tether_settings_summary_hotspot_off_tether_on" msgid="1349909238672649877">"ଟିଥର୍ କରୁଛି"</string>
+ <string name="tether_settings_summary_hotspot_off_tether_on" msgid="1349909238672649877">"ଟିଥରିଂ"</string>
<string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"ଡାଟା ସେଭର୍ ଅନ୍ ଥିବାବେଳେ ଟିଥର୍ କିମ୍ୱା ପୋର୍ଟେବଲ୍ ହଟ୍ସ୍ପଟ୍ ବ୍ୟବହାର କରିପାରିବ ନାହିଁ"</string>
<string name="usb_title" msgid="7480927657535578688">"USB"</string>
- <string name="usb_tethering_button_text" msgid="6242228383142012332">"USB ଟିଥରିଙ୍ଗ୍"</string>
- <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"USB ମାଧ୍ୟମରେ ଫୋନ୍ର ଇଣ୍ଟରନେଟ୍ କନେକ୍ସନ୍ ସେୟାର୍ କରନ୍ତୁ"</string>
+ <string name="usb_tethering_button_text" msgid="6242228383142012332">"USB ଟିଥରିଂ"</string>
+ <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"USB ମାଧ୍ୟମରେ ଫୋନ୍ର ଇଣ୍ଟରନେଟ୍ ସଂଯୋଗ ସେୟାର୍ କରନ୍ତୁ"</string>
<string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"USB ମାଧ୍ୟମରେ ଟାବ୍ଲେଟ୍ର ଇଣ୍ଟର୍ନେଟ୍ ସଂଯୋଗ ସେୟାର୍ କରନ୍ତୁ"</string>
- <string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"ବ୍ଲୁଟୂଥ୍ ଟିଥରିଙ୍ଗ"</string>
+ <string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"ବ୍ଲୁଟୁଥ ଟିଥରିଂ"</string>
<string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"ବ୍ଲୁଟୂଥ୍ ମାଧ୍ୟରେ ଟାବ୍ଲେଟ୍ର ଇଣ୍ଟରନେଟ୍ ସଂଯୋଗ ସେୟାର୍ କରନ୍ତୁ"</string>
- <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"ବ୍ଲୁଟୂଥ୍ ମାଧ୍ୟମରେ ଫୋନ୍ର ଇଣ୍ଟରନେଟ୍ ସଂଯୋଗ ସେୟାର୍ କରନ୍ତୁ"</string>
+ <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"ବ୍ଲୁଟୁଥ ମାଧ୍ୟମରେ ଫୋନ୍ର ଇଣ୍ଟରନେଟ୍ ସଂଯୋଗ ସେୟାର୍ କରନ୍ତୁ"</string>
<string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"ବ୍ଲୁଟୂଥ୍ ମାଧ୍ୟମରେ ଏହି <xliff:g id="DEVICE_NAME">%1$d</xliff:g>ର ଇଣ୍ଟରନେଟ୍ ସଂଯୋଗ ସେୟାର୍ କରୁଛି"</string>
<string name="bluetooth_tethering_overflow_error" msgid="6946561351369376943">"<xliff:g id="MAXCONNECTION">%1$d</xliff:g> ଡିଭାଇସ୍ଠାରୁ ଅଧିକ ସହ ଟିଥର୍ କରିପାରିବ ନାହିଁ।"</string>
<string name="bluetooth_untether_blank" msgid="5428300773782256084">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>କୁ ଅନ୍ଟିଥର୍ କରାଯିବ"</string>
@@ -1660,8 +1663,8 @@
<string name="location_scanning_screen_title" msgid="7663329319689413454">"ୱାଇ-ଫାଇ ଏବଂ ବ୍ଲୁଟୁଥ୍ ସ୍କାନିଂ"</string>
<string name="location_scanning_wifi_always_scanning_title" msgid="6750542206763112172">"ୱାଇ-ଫାଇ ସ୍କାନିଂ"</string>
<string name="location_scanning_wifi_always_scanning_description" msgid="4956048135941851712">"ଆପ୍ ଓ ସେବାଗୁଡ଼ିକୁ ଯେକୌଣସି ସମୟରେ ୱାଇ-ଫାଇ ନେଟ୍ୱର୍କ ଖୋଜିବାକୁ ଦିଅନ୍ତୁ, ଏପରିକି ୱାଇ-ଫାଇ ଅଫ୍ ଥିଲେ ମଧ୍ୟ। ଏହାକୁ ଲୋକେସନ୍ ଆଧାରିତ ଫିଚର୍ ଓ ସେବା ଇତ୍ୟାଦିକୁ ଉନ୍ନତ କରିବା ପାଇଁ ବ୍ୟବହାର କରାଯାଇପାରେ।"</string>
- <string name="location_scanning_bluetooth_always_scanning_title" msgid="196241746742607453">"ବ୍ଲୁଟୂଥ୍ ସ୍କାନିଙ୍ଗ"</string>
- <string name="location_scanning_bluetooth_always_scanning_description" msgid="3796673798637848690">"ଆପ୍ ଓ ସେବାଗୁଡ଼ିକୁ ଯେକୌଣସି ସମୟରେ ଆଖପାଖରେ ଥିବା ଡିଭାଇସ୍ ଖୋଜିବାକୁ ଦିଅନ୍ତୁ, ଏପରିକି ବ୍ଲୁଟୂଥ୍ ଅଫ୍ ଥିଲେ ମଧ୍ୟ। ଏହାକୁ ଲୋକେସନ୍ ଆଧାରିତ ଫିଚର୍ ଓ ସେବା ଇତ୍ୟାଦିକୁ ଉନ୍ନତ କରିବା ପାଇଁ ବ୍ୟବହାର କରାଯାଇପାରେ।"</string>
+ <string name="location_scanning_bluetooth_always_scanning_title" msgid="196241746742607453">"ବ୍ଲୁଟୁୁଥ ସ୍କାନିଂ"</string>
+ <string name="location_scanning_bluetooth_always_scanning_description" msgid="3796673798637848690">"ଆପ୍ ଓ ସେବାଗୁଡ଼ିକୁ ଯେ କୌଣସି ସମୟରେ ଆଖପାଖରେ ଥିବା ଡିଭାଇସଗୁଡ଼ିକୁ ସ୍କାନ୍ କରିବାକୁ ଦିଅନ୍ତୁ, ଏପରିକି ବ୍ଲୁଟୁଥ ବନ୍ଦ ଥିଲେ ମଧ୍ୟ। ଏହାକୁ ଲୋକେସନ୍ ଆଧାରିତ ଫିଚର୍ ଓ ସେବା ଇତ୍ୟାଦିକୁ ଉନ୍ନତ କରିବା ପାଇଁ ବ୍ୟବହାର କରାଯାଇପାରେ।"</string>
<string name="managed_profile_location_services" msgid="224925483299159541">"କାର୍ଯ୍ୟ ପାଇଁ ଲୋକେସନ୍ ସମ୍ପର୍କିତ ସେବା"</string>
<string name="location_network_based" msgid="1535812159327454835">"ୱାଇ-ଫାଇ ଓ ମୋବାଇଲ୍ ନେଟ୍ୱର୍କ ଲୋକେସନ୍"</string>
<string name="location_neighborhood_level" msgid="8459352741296587916">"ଆପଣଙ୍କର ଲୋକେସନ୍କୁ ଶୀଘ୍ର ଜାଣିବା ପାଇଁ, ଆପ୍ଗୁଡ଼ିକୁ Googleର ଲୋକେସନ୍ ସେବାର ବ୍ୟବହାର କରିବାକୁ ଦିଅନ୍ତୁ। ଅଜଣା ଲୋକେସନ୍ର ତଥ୍ୟ ସଂଗ୍ରହ କରାଯାଇ Googleକୁ ପଠାଯିବ।"</string>
@@ -1703,7 +1706,7 @@
<string name="settings_safetylegal_activity_unreachable" msgid="3541894966476445833">"ଆପଣଙ୍କ ପାଖରେ ଡାଟା ସଂଯୋଗ ନାହିଁ। ଏହି ସୂଚନାକୁ ଏବେ ଦେଖିବା ପାଇଁ, ଇଣ୍ଟରନେଟ୍ ସହ ସଂଯୁକ୍ତ ଥିବା ଯେକୌଣସି କମ୍ପ୍ୟୁଟର୍ରୁ %sକୁ ଯାଆନ୍ତୁ।"</string>
<string name="settings_safetylegal_activity_loading" msgid="7680998654145172">"ଲୋଡ୍ କରୁଛି…"</string>
<string name="confirm_device_credential_use_alternate_method" msgid="1279869272895739941">"ବୈକଳ୍ପିକ ପଦ୍ଧତି ବ୍ୟବହାର କରନ୍ତୁ"</string>
- <string name="lockpassword_choose_your_screen_lock_header" msgid="6283518876031424798">"ସ୍କ୍ରୀନ୍ ଲକ୍ ସେଟ୍ କରନ୍ତୁ"</string>
+ <string name="lockpassword_choose_your_screen_lock_header" msgid="6283518876031424798">"ସ୍କ୍ରିନ୍ ଲକ୍ ସେଟ୍ କରନ୍ତୁ"</string>
<string name="lockpassword_choose_your_password_message" msgid="2838273977481046536">"ସୁରକ୍ଷା ପାଇଁ ପାସ୍ୱର୍ଡ ସେଟ୍ କରନ୍ତୁ"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="4921343500484160894">"ଟିପଚିହ୍ନ ବ୍ୟବହାର କରିବା ପାଇଁ ପାସ୍ୱାର୍ଡ ସେଟ୍ କରନ୍ତୁ"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="314870151462139417">"ଟିପଚିହ୍ନ ବ୍ୟବହାର କରିବା ପାଇଁ ପାଟର୍ନ ସେଟ୍ କରନ୍ତୁ"</string>
@@ -1887,7 +1890,7 @@
<string name="app_disable_dlg_positive" msgid="5508828271100168073">"ଆପ୍ ଅକ୍ଷମ କରନ୍ତୁ"</string>
<string name="app_disable_dlg_text" msgid="9221864774943530281">"ଯଦି ଆପଣ ଏହି ଆପ୍କୁ ନିଷ୍କ୍ରିୟ କରନ୍ତି, ତେବେ Android ଓ ଅନ୍ୟାନ୍ୟ ଆପ୍ସ ଆଉ କାମ ନକରିପାରେ। ମନେ ରଖନ୍ତୁ, ଯେହେତୁ ଏହା ଆପଣଙ୍କ ଡିଭାଇସ୍ରେ ପୂର୍ବରୁ-ଇନ୍ଷ୍ଟଲ୍ ଅଛି, ତେଣୁ ଆପଣ ଏହି ଆପ୍କୁ ଡିଲିଟ୍ କରିପାରିବେ ନାହିଁ। ଏହାକୁ ଅକ୍ଷମ କରି, ଏହି ଆପ୍କୁ ଆପଣ ବନ୍ଦ କରିବେ ଏବଂ ଆପଣଙ୍କର ଡିଭାଇସ୍ରେ ଲୁଚାଇବେ।"</string>
<string name="app_disable_notifications_dlg_title" msgid="699530661413553928">"ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ବନ୍ଦ କରିବେ?"</string>
- <string name="app_install_details_group_title" msgid="2909597319422976921">"ଷ୍ଟୋର୍"</string>
+ <string name="app_install_details_group_title" msgid="2909597319422976921">"Store"</string>
<string name="app_install_details_title" msgid="6954953384372934881">"ଆପ୍ ବିବରଣୀ"</string>
<string name="app_install_details_summary" msgid="6612222941121363940">"<xliff:g id="APP_STORE">%1$s</xliff:g> ରୁ ଇନ୍ଷ୍ଟଲ୍ ହୋଇଥିବା ଆପ୍"</string>
<string name="instant_app_details_summary" msgid="6384264315914966114">"<xliff:g id="APP_STORE">%1$s</xliff:g> ଉପରେ ଅଧିକ ସୂଚନା"</string>
@@ -1999,7 +2002,7 @@
<string name="user_dict_settings_edit_dialog_title" msgid="6492621665762797309">"ଶବ୍ବ ସମ୍ପାଦନ କରନ୍ତୁ"</string>
<string name="user_dict_settings_context_menu_edit_title" msgid="4577283176672181497">"ସମ୍ପାଦନ"</string>
<string name="user_dict_settings_context_menu_delete_title" msgid="670470172230144069">"ଡିଲିଟ୍ କରନ୍ତୁ"</string>
- <string name="user_dict_settings_empty_text" msgid="2774939221998982609">"ୟୁଜର୍ ଶବ୍ଦକୋଷରେ ଆପଣ କୌଣସି ଶବ୍ଦ ଯୋଡ଼ିନାହାନ୍ତି। ଶବ୍ଦ ଯୋଡ଼ିବା ପାଇଁ \"ଯୋଡ଼ନ୍ତୁ (+)\" ବଟନ୍ରେ ଟାପ୍ କରନ୍ତୁ।"</string>
+ <string name="user_dict_settings_empty_text" msgid="2774939221998982609">"ଉପଯୋଗକର୍ତ୍ତା ଶବ୍ଦକୋଷରେ ଆପଣ କୌଣସି ଶବ୍ଦ ଯୋଗ କରିନାହାଁନ୍ତି। ଶବ୍ଦ ଯୋଗ କରିବା ପାଇଁ \"ଯୋଗ(+)\" ବଟନ୍ରେ ଟାପ୍ କରନ୍ତୁ।"</string>
<string name="user_dict_settings_all_languages" msgid="8839702015353418176">"ସମସ୍ତ ଭାଷାଗୁଡିକ ପାଇଁ"</string>
<string name="user_dict_settings_more_languages" msgid="8345984308635521364">"ଆହୁରି ଭାଷାମାନ…"</string>
<string name="testing" msgid="4255916838792186365">"ପରୀକ୍ଷା କରୁଛି"</string>
@@ -2033,26 +2036,26 @@
<string name="usage_time_label" msgid="5615725415876461039">"ବ୍ୟବହାର ସମୟ"</string>
<string name="accessibility_settings" msgid="9140621093888234485">"ଆକ୍ସେସିବିଲିଟୀ"</string>
<string name="accessibility_settings_title" msgid="1687226556576913576">"ଆକ୍ସେସିବିଲିଟୀ ସେଟିଙ୍ଗ"</string>
- <string name="accessibility_settings_summary" msgid="5742379519336396561">"ସ୍କ୍ରୀନ୍ ରିଡର୍, ପ୍ରଦର୍ଶନ, ଇଣ୍ଟରାକସନ କଣ୍ଟ୍ରୋଲ୍"</string>
- <string name="vision_settings_title" msgid="7315352351051423944">"ଭିଜନ୍ ସେଟିଙ୍ଗ"</string>
- <string name="vision_settings_description" msgid="3476589459009287332">"ନିଜର ଆବଶ୍ୟକତ ଅନୁସାରେ ଏହି ଡିଭାଇସ୍କୁ କଷ୍ଟମାଇଜ୍ କରିପାରିବେ। ଏହି ଦିବ୍ୟାଙ୍ଗମାନଙ୍କ ପାଇଁ ସୁବିଧାକୁ ପରେ ସେଟିଙ୍ଗରେ ବଦଳାଇହେବ।"</string>
+ <string name="accessibility_settings_summary" msgid="5742379519336396561">"ସ୍କ୍ରିନ୍ ରିଡର୍, ଡିସପ୍ଲେ, ଇଣ୍ଟରାକସନ କଣ୍ଟ୍ରୋଲ୍"</string>
+ <string name="vision_settings_title" msgid="7315352351051423944">"ଭିଜନ୍ ସେଟିଂସ୍"</string>
+ <string name="vision_settings_description" msgid="3476589459009287332">"ନିଜର ଆବଶ୍ୟକତା ଅନୁସାରେ ଆପଣ ଏହି ଡିଭାଇସ୍କୁ କଷ୍ଟମାଇଜ୍ କରିପାରିବେ। ଏଇ ଆକ୍ସେସିବିଲିଟୀ ଫିଚରଗୁଡ଼ିକୁ ପରେ ସେଟିଂସରେ ବଦଳା ଯାଇପାରିବ।"</string>
<string name="vision_settings_suggestion_title" msgid="7268661419110951128">"ଫଣ୍ଟ ସାଇଜ୍ ବଦଳାନ୍ତୁ"</string>
- <string name="screen_reader_category_title" msgid="6300714148519645544">"ସ୍କ୍ରୀନ୍ ପାଠକ"</string>
- <string name="audio_and_captions_category_title" msgid="6140472938769619212">"ଅଡିଓ ଓ ଅନ୍-ସ୍କ୍ରୀନ୍ ଟେକ୍ସଟ୍"</string>
+ <string name="screen_reader_category_title" msgid="6300714148519645544">"ସ୍କ୍ରିନ୍ ରିଡର୍"</string>
+ <string name="audio_and_captions_category_title" msgid="6140472938769619212">"ଅଡିଓ ଓ ଅନ୍-ସ୍କ୍ରିନ୍ ଟେକ୍ସଟ୍"</string>
<string name="display_category_title" msgid="545168481672250195">"ଡିସ୍ପ୍ଲେ"</string>
<string name="interaction_control_category_title" msgid="8775039211811947683">"ଇଣ୍ଟରାକସନ୍ ନିୟନ୍ତ୍ରଣ"</string>
<string name="user_installed_services_category_title" msgid="4288689493753221319">"ଡାଉନ୍ଲୋଡ୍ ହୋଇଥିବା ସେବାଗୁଡିକ"</string>
<string name="experimental_category_title" msgid="3797000069740110717">"ପରୀକ୍ଷାମୂଳକ"</string>
<string name="feature_flags_dashboard_title" msgid="3153034144122754381">"ଫିଚର୍ ଫ୍ଲାଗ୍"</string>
<string name="talkback_title" msgid="3717960404234260050">"Talkback"</string>
- <string name="talkback_summary" msgid="6602857105831641574">"ଅନ୍ଧ କିମ୍ବା କମ୍ ଦୃଷ୍ଟି ଶକ୍ତିଥିବା ଲୋକଙ୍କ ପାଇଁ ମୁଖ୍ୟତଃ ସ୍କ୍ରିନ୍ ରିଡର୍ ଅଟେ"</string>
- <string name="select_to_speak_summary" msgid="7514180457557735421">"ଜୋରରେ ପଢ଼ିବା ପାଇଁ ସ୍କ୍ରୀନ୍ ଉପରେ ଥିବା ଆଇଟମଗୁଡ଼ିକ ଉପରେ ଟାପ୍ କରନ୍ତୁ"</string>
+ <string name="talkback_summary" msgid="6602857105831641574">"ଦୃଷ୍ଟିହୀନ କିମ୍ବା କମ୍ ଦୃଷ୍ଟି ଶକ୍ତିଥିବା ଲୋକଙ୍କ ପାଇଁ ମୁଖ୍ୟତଃ ସ୍କ୍ରିନ୍ ରିଡର୍ ଅଟେ"</string>
+ <string name="select_to_speak_summary" msgid="7514180457557735421">"ଜୋରରେ ଶୁଣିବା ପାଇଁ ସ୍କ୍ରିନ୍ ଉପରେ ଥିବା ଆଇଟମଗୁଡ଼ିକ ଉପରେ ଟାପ୍ କରନ୍ତୁ"</string>
<string name="accessibility_captioning_title" msgid="5878371993023439642">"କ୍ୟାପଶନ୍"</string>
<string name="accessibility_screen_magnification_title" msgid="7250949681883917360">"ବଡ଼ କରିବା"</string>
<string name="accessibility_screen_magnification_gestures_title" msgid="9199287875401817974">"ଟ୍ରିପଲ୍-ଟାପ୍ ଦ୍ୱାରା ମାଗ୍ନିଫାଏ କରନ୍ତୁ"</string>
<string name="accessibility_screen_magnification_navbar_title" msgid="400655612610761242">"ବଟନ ସହ ବଡ଼ କରନ୍ତୁ"</string>
<string name="accessibility_screen_magnification_state_navbar_gesture" msgid="1863831350878995600">"ବଟନ୍ ଓ ଟ୍ରିପଲ୍-ଟାପ୍ ଦ୍ଵାରା ମ୍ୟାଗ୍ନିଫାଏ କରନ୍ତୁ"</string>
- <string name="accessibility_preference_magnification_summary" msgid="753307741814376312">"ସ୍କ୍ରୀନ୍ ଉପରେ ଜୁମ୍ ଇନ୍ କରନ୍ତୁ"</string>
+ <string name="accessibility_preference_magnification_summary" msgid="753307741814376312">"ସ୍କ୍ରିନ୍ ଉପରେ ଜୁମ୍ ଇନ୍ କରନ୍ତୁ"</string>
<string name="accessibility_screen_magnification_short_summary" msgid="5698545174944494486">"ଜୁମ୍ କରିବାକୁ 3ଥର ଟାପ୍ କରନ୍ତୁ"</string>
<string name="accessibility_screen_magnification_navbar_short_summary" msgid="5418767043532322397">"ଜୁମ୍ କରିବା ପାଇଁ ଗୋଟିଏ ବଟନ୍ ଉପରେ ଟାପ୍ କରନ୍ତୁ"</string>
<string name="accessibility_screen_magnification_summary" msgid="3363006902079431772"><b>"ଜୁମ୍ କରିବାକୁ"</b>", ସ୍କ୍ରିନ୍ 3 ଥର ଦ୍ରୁତ ଭାବେ ଟାପ୍ କରନ୍ତୁ।\n"<ul><li>"ସ୍କ୍ରୋଲ୍ କରିବାକୁ 2 କିମ୍ବା ଅଧିକ ଆଙ୍ଗୁଠି ଟାଣନ୍ତୁ"</li>\n<li>"ଜୁମ୍ ଆଡଜଷ୍ଟ କରିବାକୁ 2 କିମ୍ବା ଅଧିକ ଆଙ୍ଗୁଠି ଚିମୁଟା ପରି ବ୍ୟବହାର କରନ୍ତୁ"</li></ul>\n\n<b>"ସାମୟିକ ଭାବେ ଜୁମ୍ କରିବାକୁ"</b>", ସ୍କ୍ରିନ୍ 3 ଥର ଦ୍ରୁତ ଭାବେ ଟାପ୍ କରନ୍ତୁ ଏବଂ 3 ନମ୍ବର ଟାପ୍ରେ ଆପଣଙ୍କ ଆଙ୍ଗୁଠିକୁ ତଳକୁ କରି ରଖନ୍ତୁ।\n"<ul><li>"ସ୍କ୍ରିନ୍ ଚାରିପାଖେ ବୁଲିବାକୁ ଡ୍ରାଗ୍ କରନ୍ତୁ"</li>\n<li>"ଜୁମ୍ ଆଉଟ୍ କରିବାକୁ ଆଙ୍ଗୁଠି ବାହାର କରି ଦିଅନ୍ତୁ"</li></ul>\n\n"କୀବୋର୍ଡ କିମ୍ବା ନେଭିଗେସନ୍ ବାର୍ରେ ଆପଣ ଜୁମ୍ ଇନ୍ କରିପାରିବେ ନାହିଁ।"</string>
@@ -2067,7 +2070,7 @@
<string name="accessibility_toggle_screen_magnification_auto_update_preference_summary" msgid="6625473745911276917">"ଆପ୍ ବଦଳିବାବେଳେ ସ୍କ୍ରୀନ୍କୁ ବଡ଼ କର"</string>
<string name="accessibility_power_button_ends_call_prerefence_title" msgid="6172987104538172869">"ପାୱର୍ ବଟନ୍ କଲ୍ ସମାପ୍ତ କରେ"</string>
<string name="accessibility_toggle_large_pointer_icon_title" msgid="9127905775116570565">"ବହୁତ ବଡ଼ ମାଉସ୍ ପଏଣ୍ଟର୍"</string>
- <string name="accessibility_disable_animations" msgid="8378441317115710009">"ଆନିମେଶନ୍ଗୁଡ଼ିକୁ କାଢ଼ିଦିଅନ୍ତୁ"</string>
+ <string name="accessibility_disable_animations" msgid="8378441317115710009">"ଆନିମେସନ୍ଗୁଡ଼ିକୁ କାଢ଼ିଦିଅନ୍ତୁ"</string>
<string name="accessibility_toggle_master_mono_title" msgid="899550848196702565">"ମୋନୋ ଅଡିଓ"</string>
<string name="accessibility_toggle_master_mono_summary" msgid="3847052868469033235">"ଅଡିଓ ଚାଲୁଥିବା ସମୟରେ ଚାନେଲ୍ଗୁଡ଼ିକୁ ଯୋଡ଼ନ୍ତୁ"</string>
<string name="accessibility_toggle_master_balance_title" msgid="8723492001092647562">"ଅଡିଓ ବ୍ୟାଲେନ୍ସ"</string>
@@ -2092,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"ବିଜ୍ଞପ୍ତି ଭାଇବ୍ରେସନ୍"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"ରିଙ୍ଗ ଭାଇବ୍ରେସନ୍"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"ସ୍ପର୍ଶ ଭାଇବ୍ରେସନ୍"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"ସେବା ବ୍ୟବହାର କରନ୍ତୁ"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"ରଙ୍ଗ ସଂଶୋଧନକୁ ବ୍ୟବହାର କରନ୍ତୁ"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"କ୍ୟାପଶନ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"ସେବା ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"ରଙ୍ଗ ସଂଶୋଧନ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"କ୍ୟାପ୍ସନ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"ଜାରି ରଖନ୍ତୁ"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"ଶ୍ରବଣ ଯନ୍ତ୍ର"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"କୌଣସି ଶ୍ରବଣ ଯନ୍ତ୍ର ସଂଯୋଗ ହୋଇନାହିଁ"</string>
@@ -2208,7 +2211,7 @@
<string name="print_feature_state_off" msgid="208580346723223688">"ଅଫ୍"</string>
<string name="print_menu_item_add_service" msgid="6803000110578493782">"ସେବା ଯୋଡ଼ନ୍ତୁ"</string>
<string name="print_menu_item_add_printer" msgid="8529196211179574921">"ପ୍ରିଣ୍ଟର୍ ଯୋଡ଼ନ୍ତୁ"</string>
- <string name="print_menu_item_search" msgid="1165316329772287360">"ସର୍ଚ୍ଚ"</string>
+ <string name="print_menu_item_search" msgid="1165316329772287360">"Search"</string>
<string name="print_searching_for_printers" msgid="6538687129687642542">"ପ୍ରିଣ୍ଟର୍ ଖୋଜୁଛି"</string>
<string name="print_service_disabled" msgid="6376344992705893436">"ସେବା ବନ୍ଦ ଅଛି"</string>
<string name="print_print_jobs" msgid="7357841034181762157">"ପ୍ରିଣ୍ଟ ଜବ୍"</string>
@@ -2237,7 +2240,7 @@
<string name="background_activity_warning_dialog_title" msgid="2170790412855899678">"ବ୍ୟାକ୍ଗ୍ରାଉଣ୍ଡ କାର୍ଯ୍ୟକଳାପ ସୀମିତ କରିବେ?"</string>
<string name="background_activity_warning_dialog_text" msgid="8242749826732375096">"ଯଦି ଆପଣ ଗୋଟିଏ ଆପ୍ର ବ୍ୟାକ୍ଗ୍ରାଉଣ୍ଡ କାର୍ଯ୍ୟକଳାପକୁ ସୀମିତ କରିବେ, ଏହା ଠିକ୍ ଭାବରେ କାମ କରିନପାରେ"</string>
<string name="background_activity_disabled_dialog_text" msgid="4234598000779459640">"ବ୍ୟାଟେରୀକୁ ଅପ୍ଟିମାଇଜ୍ କରିବା ପାଇଁ ଯେହେତୁ ଏହି ଆପ୍କୁ ସେଟ୍ କରାଯାଇନାହିଁ, ତେଣୁ ଆପଣ ଏହାକୁ ସୀମାବଦ୍ଧ କରିପାରିବେ ନାହିଁ। \n\nଆପ୍କୁ ସୀମାବଦ୍ଧ କରିବା ପାଇଁ ପ୍ରଥମେ ବ୍ୟାଟେରୀ ଅପ୍ଟିମାଇଜେସନ୍କୁ ଚାଲୁ କରନ୍ତୁ।"</string>
- <string name="device_screen_usage" msgid="4470485475363132750">"ସମ୍ପୂର୍ଣ୍ଣ ଚାର୍ଜ ହେବା ପରଠାରୁ ସ୍କ୍ରୀନ୍ର ବ୍ୟବହାର"</string>
+ <string name="device_screen_usage" msgid="4470485475363132750">"ସମ୍ପୂର୍ଣ୍ଣ ଚାର୍ଜ ହେବା ପରଠାରୁ ସ୍କ୍ରିନ୍ର ବ୍ୟବହାର"</string>
<string name="power_usage_list_summary" msgid="4314438658308211057">"ପୂରା ଚାର୍ଜ ହେବା ପରଠାରୁ ଖର୍ଚ୍ଚ ହୋଇଥିବା ବ୍ୟାଟେରୀ"</string>
<string name="screen_usage_summary" msgid="263396144684078341">"ସମ୍ପୂର୍ଣ୍ଣ ଚାର୍ଜ ହେବା ପରଠାରୁ ସ୍କ୍ରୀନ୍ ଅନ୍ ହୋଇଥିବାର ସମୟ"</string>
<string name="device_usage_list_summary" msgid="8299017481332816368">"ଫୁଲ୍ ଚାର୍ଜ ପରଠାରୁ ଡିଭାଇସ୍ର ବ୍ୟବହାର"</string>
@@ -2264,7 +2267,7 @@
<string name="details_subtitle" msgid="7279638828004951382">"ବିବରଣୀ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="controls_subtitle" msgid="6920199888882834620">"ପାୱାର୍ ବ୍ୟବହାର ଆଡ୍ଜଷ୍ଟ କରନ୍ତୁ"</string>
<string name="packages_subtitle" msgid="6506269487892204413">"ଅନ୍ତର୍ଭୁକ୍ତ ଥିବା ପ୍ୟାକେଜ୍ଗୁଡିକ"</string>
- <string name="battery_tip_summary_title" msgid="2750922152518825526">"ଆପ୍ ଠିକ୍ ଭାବେ ଚାଲୁଛି"</string>
+ <string name="battery_tip_summary_title" msgid="2750922152518825526">"ଆପ୍ସ ଠିକ୍ ଭାବେ ଚାଲୁଛି"</string>
<string name="battery_tip_summary_summary" product="default" msgid="6294900413896440006">"ଫୋନର ସାଧାରଣ ବ୍ୟାକଗ୍ରାଉଣ୍ଡ୍ ବ୍ୟାଟେରୀ ବ୍ୟବହାର ରହିଛି"</string>
<string name="battery_tip_summary_summary" product="tablet" msgid="5280099016800644130">"ଟାବଲେଟ୍ର ବିଶେଷ ବ୍ୟାକ୍ଗ୍ରାଉଣ୍ଡ ବ୍ୟାଟେରୀ ବ୍ୟବହାର ରହିଛି"</string>
<string name="battery_tip_summary_summary" product="device" msgid="4459840492610842705">"ଡିଭାଇସ୍ର ବିଶେଷ ବ୍ୟାକ୍ଗ୍ରାଉଣ୍ଡ ବ୍ୟାଟେରୀ ବ୍ୟବହାର ରହିଛି"</string>
@@ -2287,8 +2290,8 @@
<string name="battery_tip_dialog_message" product="device" msgid="6348123094674390337">"ଆପଣଙ୍କ ଡିଭାଇସ୍ ସାଧାରଣ ତୁଳନାରେ ଅଧିକ ବ୍ୟବହାର କରାଯାଇଛି। ଆଶା କରାଯାଉଥିବା ସମୟଠାରୁ ଆପଣଙ୍କ ବ୍ୟାଟେରୀ ଶୀଘ୍ର ସରି ଯାଇପାରେ।\n\nପୂର୍ଣ୍ଣ ଚାର୍ଜ ହେବା ପରଠାରୁ ଅଧିକ ବ୍ୟବହୃତ ଆପ୍ସ।"</string>
<string name="battery_tip_dialog_message_footer" msgid="1118827395267487197">"ଉଚ୍ଚ-ଶକ୍ତି ପୃଷ୍ଟଭୂମୀ କାର୍ଯ୍ୟ ଅନ୍ତର୍ଭୁକ୍ତ କରେ"</string>
<plurals name="battery_tip_restrict_title" formatted="false" msgid="7140926804142734420">
- <item quantity="other">%1$dଟି ଆପ୍କୁ ଅବରୋଧ କରନ୍ତୁ</item>
- <item quantity="one">%1$dଟି ଆପ୍କୁ ଅବରୋଧ କରନ୍ତୁ</item>
+ <item quantity="other">%1$dଟି ଆପ୍କୁ ପ୍ରତିବନ୍ଧିତ କରନ୍ତୁ</item>
+ <item quantity="one">%1$dଟି ଆପ୍କୁ ପ୍ରତିବନ୍ଧିତ କରନ୍ତୁ</item>
</plurals>
<plurals name="battery_tip_restrict_handled_title" formatted="false" msgid="5509363095891806748">
<item quantity="other">%2$dଟି ଆପ୍କୁ ସମ୍ପ୍ରତି ପ୍ରତିବନ୍ଧିତ କରାଯାଇଛି</item>
@@ -2314,7 +2317,7 @@
<string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"ଏହି ଆପ୍ ବ୍ୟାକ୍ଗ୍ରାଉଣ୍ଡରେ ବ୍ୟାଟେରୀ ବ୍ୟବହାର କରି ପାରିବ। ଆପଣଙ୍କ ବ୍ୟାଟେରୀ ଅନୁମାନ କରିଥିବା ସମୟର ପୂର୍ବରୁହିଁ ସରିଯାଇପାରେ।"</string>
<string name="battery_tip_unrestrict_app_dialog_ok" msgid="9154938931448151479">"କାଢ଼ିଦିଅନ୍ତୁ"</string>
<string name="battery_tip_unrestrict_app_dialog_cancel" msgid="7331148618292397166">"କ୍ୟାନ୍ସଲ୍"</string>
- <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"ଆପଣଙ୍କର ଆପ୍ ସାଧାରଣ ଭାବେ ବ୍ୟାଟେରୀ ଖର୍ଚ୍ଚ କରୁଛି। ଯଦି ଆପ୍ ଅଧିକ ବ୍ୟାଟେରୀ ଖର୍ଚ୍ଚ କରନ୍ତି, ତେବେ ଆପଣଙ୍କ ଫୋନ୍ ପଦକ୍ଷେପ ନେବା ପାଇଁ ଆପଣଙ୍କୁ ପରାମର୍ଶ ଦେବ। \n\n ବ୍ୟାଟେରୀ ଅଧିକ ଖର୍ଚ୍ଚ ହେଉଥିଲେ ଆପଣ ସର୍ବଦା ବ୍ୟାଟେରୀ ସେଭର୍କୁ ଚାଲୁ କରିପାରିବେ।"</string>
+ <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"ଆପଣଙ୍କର ଆପ୍ସ ସାଧାରଣ ଭାବେ ବ୍ୟାଟେରୀ ଖର୍ଚ୍ଚ କରୁଛି। ଯଦି ଆପ୍ସ ଅଧିକ ବ୍ୟାଟେରୀ ଖର୍ଚ୍ଚ କରେ, ତେବେ ଆପଣଙ୍କ ଫୋନ୍ ପଦକ୍ଷେପ ନେବା ପାଇଁ ଆପଣଙ୍କୁ ପରାମର୍ଶ ଦେବ। \n\n ବ୍ୟାଟେରୀ ଅଧିକ ଖର୍ଚ୍ଚ ହେଉଥିଲେ ଆପଣ ସର୍ବଦା ବ୍ୟାଟେରୀ ସେଭର୍କୁ ଚାଲୁ କରିପାରିବେ।"</string>
<string name="battery_tip_dialog_summary_message" product="tablet" msgid="1721081030632329647">"ଆପଣଙ୍କର ଆପ୍ ସାଧାରଣ ଭାବେ ବ୍ୟାଟେରୀ ଖର୍ଚ୍ଚ କରୁଛି। ଯଦି ଆପ୍ ଅଧିକ ବ୍ୟାଟେରୀ ଖର୍ଚ୍ଚ କରନ୍ତି, ତେବେ ଆପଣଙ୍କ ଟାବଲେଟ୍ ପଦକ୍ଷେପ ନେବା ପାଇଁ ଆପଣଙ୍କୁ ପରାମର୍ଶ ଦେବ। \n\n ବ୍ୟାଟେରୀ ଅଧିକ ଖର୍ଚ୍ଚ ହେଉଥିଲେ ଆପଣ ସର୍ବଦା ବ୍ୟାଟେରୀ ସେଭର୍କୁ ଚାଲୁ କରିପାରିବେ।"</string>
<string name="battery_tip_dialog_summary_message" product="device" msgid="146872407040848465">"ଆପଣଙ୍କର ଆପ୍ ସାଧାରଣ ଭାବେ ବ୍ୟାଟେରୀ ଖର୍ଚ୍ଚ କରୁଛି। ଯଦି ଆପ୍ ଅଧିକ ବ୍ୟାଟେରୀ ଖର୍ଚ୍ଚ କରନ୍ତି, ତେବେ ଡିଭାଇସ୍ ପଦକ୍ଷେପ ନେବା ପାଇଁ ଆପଣଙ୍କୁ ପରାମର୍ଶ ଦେବ। \n\n ବ୍ୟାଟେରୀ ଅଧିକ ଖର୍ଚ୍ଚ ହେଉଥିଲେ ଆପଣ ସର୍ବଦା ବ୍ୟାଟେରୀ ସେଭର୍କୁ ଚାଲୁ କରିପାରିବେ।"</string>
<string name="smart_battery_manager_title" msgid="5744035036663849515">"ବ୍ୟାଟେରୀ ମ୍ୟାନେଜର୍"</string>
@@ -2458,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"ଅନ୍ କରନ୍ତୁ"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"ବ୍ୟାଟେରୀ ସେଭର୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"ବ୍ୟାଟେରୀ ସେଭର୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"ଅଟୋମେଟିକାଲୀ ଚାଲୁ ହୁଏ"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"ଆଦୌ ନୁହେଁ"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"ବ୍ୟାଟେରୀ <xliff:g id="PERCENT">%1$s</xliff:g> ରେ"</string>
@@ -2530,7 +2533,7 @@
<string name="trusted_credentials_summary" msgid="7411781319056251582">"ବିଶ୍ୱସନୀୟ CA ସର୍ଟିଫିକେଟ୍ ଦେଖାନ୍ତୁ"</string>
<string name="user_credentials" msgid="8365731467650306757">"ୟୁଜର୍ କ୍ରେଡେନସିଆଲ୍"</string>
<string name="user_credentials_summary" msgid="7350223899317423252">"ସେଭ୍ ହୋଇଥିବା ତଥ୍ୟ ଦେଖନ୍ତୁ ଓ ବଦଳାନ୍ତୁ"</string>
- <string name="advanced_security_title" msgid="286883005673855845">"ବିକଶିତ"</string>
+ <string name="advanced_security_title" msgid="286883005673855845">"ଉନ୍ନତ"</string>
<string name="credential_storage_type" msgid="2585337320206095255">"ଷ୍ଟୋରେଜ୍ ପ୍ରକାର"</string>
<string name="credential_storage_type_hardware" msgid="5054143224259023600">"ହାର୍ଡୱେର୍-ସମର୍ଥିତ"</string>
<string name="credential_storage_type_software" msgid="1335905150062717150">"ସଫ୍ଟୱେୟାର କେବଳ"</string>
@@ -2541,7 +2544,7 @@
<string name="credentials_erased" msgid="7287088033523869085">"ତଥ୍ୟ ଷ୍ଟୋରେଜ୍କୁ ଲିଭାଇଦିଆଗଲା।"</string>
<string name="credentials_not_erased" msgid="9137227570738627637">"କ୍ରେଡେନଶିଆଲ୍ ଷ୍ଟୋରେଜ୍ ଲିଭାଯାଇ ପାରିବ ନାହିଁ।"</string>
<string name="usage_access_title" msgid="7981321142726540574">"ବ୍ୟବହାର ଆକ୍ସେସ୍ ସହ ଆପ୍ଗୁଡ଼ିକ"</string>
- <string name="emergency_tone_title" msgid="130211364025984428">"ଆପାତକାଳୀନ ଡାଏଲିଙ୍ଗ ସିଗ୍ନାଲ୍"</string>
+ <string name="emergency_tone_title" msgid="130211364025984428">"ଜରୁରୀକାଳୀନ ଡାଏଲିଂ ସିଗନାଲ୍"</string>
<string name="emergency_tone_summary" msgid="8035940153401622240">"ଏକ ଜରୁରୀକାଳୀନ କଲ୍ କରୁଥିବାବେଳେ ଗତିବିଧି ସେଟ୍ କରନ୍ତୁ"</string>
<string name="privacy_settings_title" msgid="3573891462732375772">"ବ୍ୟାକଅପ୍"</string>
<string name="backup_summary_state_on" msgid="1725597360282574647">"ଅନ୍ ଅଛି"</string>
@@ -2912,7 +2915,7 @@
<string name="apps_with_restrictions_header" msgid="8656739605673756176">"ପ୍ରତିବନ୍ଧକ ସହ ଆପ୍ଲିକେଶନ୍ଗୁଡିକ"</string>
<string name="apps_with_restrictions_settings_button" msgid="5065896213467171744">"ଆପ୍ଲିକେଶନ୍ ପାଇଁ ସେଟିଙ୍ଗ ସମ୍ପ୍ରସାରଣ କରନ୍ତୁ"</string>
<string name="nfc_payment_settings_title" msgid="5070077706735415291">"ଟାପ୍ କରି ପୈଠ କରନ୍ତୁ"</string>
- <string name="nfc_payment_how_it_works" msgid="7607901964687787177">"ଏହା ଏହିପରି କାମ କରେ"</string>
+ <string name="nfc_payment_how_it_works" msgid="7607901964687787177">"ଏହା କିପରି କାମ କରେ"</string>
<string name="nfc_payment_no_apps" msgid="8844440783395420860">"ଷ୍ଟୋର୍ରେ ନିଜ ଫୋନ୍ ଦ୍ୱାରା ପୈଠ କରନ୍ତୁ"</string>
<string name="nfc_payment_default" msgid="7869273092463612271">"ଡିଫଲ୍ଟ ପେମେଣ୍ଟ"</string>
<string name="nfc_payment_default_not_set" msgid="955804193510335338">"ସେଟ୍ ହୋଇ ନାହିଁ"</string>
@@ -2933,7 +2936,7 @@
<string name="restriction_menu_change_pin" msgid="592512748243421101">"PIN ବଦଳାନ୍ତୁ"</string>
<string name="app_notifications_switch_label" msgid="670683308275498821">"ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଦେଖନ୍ତୁ"</string>
<string name="help_label" msgid="1296484776243905646">"ସହାୟତା ଓ ମତାମତ"</string>
- <string name="support_summary" msgid="3278943815956130740">"ସହାୟତା ନିବନ୍ଧ, ଫୋନ୍ ଓ ଚାଟ୍, ଆରମ୍ଭ କରିବା"</string>
+ <string name="support_summary" msgid="3278943815956130740">"ସହାୟତା ଆର୍ଟିକିଲ, ଫୋନ୍ ଓ ଚାଟ୍, ଆରମ୍ଭ କରିବା"</string>
<string name="user_account_title" msgid="2108666882630552859">"କଣ୍ଟେଣ୍ଟ ପାଇଁ ଆକାଉଣ୍ଟ"</string>
<string name="user_picture_title" msgid="6664602422948159123">"ଫଟୋ ଆଇଡି"</string>
<string name="extreme_threats_title" msgid="1405820547540456436">"ଗୁରୁତର ବିପଦ"</string>
@@ -3035,13 +3038,13 @@
<string name="connected_devices_dashboard_title" msgid="7795222675849060444">"ସଂଯୁକ୍ତ ଡିଭାଇସଗୁଡ଼ିକ"</string>
<string name="connected_devices_dashboard_summary" msgid="1072664369515033179">"ବ୍ଲୁଟୂଥ୍, ଡ୍ରାଇଭିଙ୍ଗ ମୋଡ୍, NFC"</string>
<string name="connected_devices_dashboard_no_nfc_summary" msgid="2610085597733526722">"ବ୍ଲୁଟୂଥ୍, ଡ୍ରାଇଭିଙ୍ଗ ମୋଡ୍"</string>
- <string name="connected_devices_dashboard_no_driving_mode_summary" msgid="3524409078596318803">"ବ୍ଲୁଟୂଥ୍,NFC"</string>
+ <string name="connected_devices_dashboard_no_driving_mode_summary" msgid="3524409078596318803">"ବ୍ଲୁଟୁଥ,NFC"</string>
<string name="connected_devices_dashboard_no_driving_mode_no_nfc_summary" msgid="7881286613528299400">"ବ୍ଲୁଟୂଥ୍"</string>
<string name="app_and_notification_dashboard_title" msgid="8448096608058843730">"ଆପ୍ ଓ ବିଜ୍ଞପ୍ତି"</string>
<string name="app_and_notification_dashboard_summary" msgid="4165181440955038145">"Assistant,କିଛିସମୟ ପୂର୍ବରୁ ବ୍ୟବହୃତ ଆପ୍ସ,ଡିଫଲ୍ଟ ଆପ୍ସ"</string>
<string name="notification_settings_work_profile" msgid="7190550347842400029">"ୱାର୍କ ପ୍ରୋଫାଇଲ୍ରେ ଆପ୍ସ ପାଇଁ ବିଜ୍ଞପ୍ତି ଆକ୍ସେସ ଉପଲବ୍ଧ ନାହିଁ."</string>
<string name="account_dashboard_title" msgid="4734300939532555885">"ଆକାଉଣ୍ଟ"</string>
- <string name="account_dashboard_default_summary" msgid="6822549669771936206">"କୌଣସି ଆକାଉଣ୍ଟ ଯୋଡ଼ାଯାଇନାହିଁ"</string>
+ <string name="account_dashboard_default_summary" msgid="6822549669771936206">"କୌଣସି ଆକାଉଣ୍ଟ ଯୋଗ କରାଯାଇନାହିଁ"</string>
<string name="app_default_dashboard_title" msgid="6575301028225232193">"ଡିଫଲ୍ଟ ଆପ୍"</string>
<string name="system_dashboard_summary" msgid="6582464466735779394">"ଭାଷା, ଜେଶ୍ଚର, ସମୟ, ବ୍ୟାକଅପ୍"</string>
<string name="search_results_title" msgid="4160717656435503940">"ସେଟିଙ୍ଗ"</string>
@@ -3097,7 +3100,7 @@
<string name="keywords_assist_gesture_launch" msgid="2711433664837843513">"ଇଙ୍ଗିତ"</string>
<string name="keywords_face_unlock" msgid="651615819291927262">"ମୁହଁ, ଅନଲକ୍, ପ୍ରମାଣୀକରଣ, ସାଇନ୍ ଇନ୍"</string>
<string name="keywords_imei_info" msgid="4325847870422053408">"imei, meid, min, prl ଭର୍ସନ୍, imei sv"</string>
- <string name="keywords_sim_status" msgid="3852088576719874387">"ନେଟ୍ୱର୍କ, ମୋବାଇଲ୍ ନେଟ୍ୱର୍କ ସ୍ଥିତି, ସେବା ସ୍ଥିତି, ସିଗ୍ନାଲ୍ ଶକ୍ତି, ମୋବାଇଲ୍ ନେଟ୍ୱର୍କ ପ୍ରକାର, iccid"</string>
+ <string name="keywords_sim_status" msgid="3852088576719874387">"ନେଟ୍ୱାର୍କ, ମୋବାଇଲ୍ ନେଟ୍ୱାର୍କ ସ୍ଥିତି, ସେବା ସ୍ଥିତି, ସିଗ୍ନାଲ୍ ଦକ୍ଷତା, ମୋବାଇଲ୍ ନେଟ୍ୱାର୍କ ପ୍ରକାର,ରୋମିଂ, iccid"</string>
<string name="keywords_model_and_hardware" msgid="2743197096210895251">"କ୍ରମିକ ସଂଖ୍ୟା, ହାର୍ଡୱେର୍ ଭର୍ସନ୍"</string>
<string name="keywords_android_version" msgid="4842749998088987740">"Android ସୁରକ୍ଷା ପ୍ୟାଚ୍ ସ୍ତର, ବେସ୍ବ୍ୟାଣ୍ଡ ଭର୍ସନ୍, କର୍ନେଲ୍ ଭର୍ସନ୍"</string>
<string name="keywords_dark_ui_mode" msgid="1027966176887770318">"ଥିମ୍, ଫିକା, ଗାଢ଼, ମୋଡ୍"</string>
@@ -3138,19 +3141,19 @@
<string name="ring_volume_option_title" msgid="2038924918468372264">"ରିଙ୍ଗ ଭଲ୍ୟୁମ୍"</string>
<string name="notification_volume_option_title" msgid="1358512611511348260">"ସୂଚନା ଭଲ୍ୟୁମ"</string>
<string name="ringtone_title" msgid="1409086028485922583">"ଫୋନ୍ ରିଙ୍ଗଟୋନ୍"</string>
- <string name="notification_ringtone_title" msgid="2932960620843976285">"ଡିଫଲ୍ଟ୍ ବିଜ୍ଞପ୍ତି ଶବ୍ଦ"</string>
+ <string name="notification_ringtone_title" msgid="2932960620843976285">"ଡିଫଲ୍ଟ ବିଜ୍ଞପ୍ତି ସାଉଣ୍ଡ"</string>
<string name="notification_unknown_sound_title" msgid="8043718667804838398">"ଆପ୍ ଦ୍ୱାରା ପ୍ରଦତ୍ତ ଶବ୍ଦ"</string>
<string name="notification_sound_default" msgid="2664544380802426260">"ଡିଫଲ୍ଟ ବିଜ୍ଞପ୍ତି ସାଉଣ୍ଡ"</string>
<string name="alarm_ringtone_title" msgid="6411326147408635902">"ଡିଫଲ୍ଟ ଆଲାର୍ମ ସାଉଣ୍ଡ"</string>
<string name="vibrate_when_ringing_title" msgid="2757996559847126952">"କଲ୍ ପାଇଁ ଭାଇବ୍ରେଟ୍ କରନ୍ତୁ"</string>
<string name="other_sound_settings" msgid="5250376066099818676">"ଅନ୍ୟାନ୍ୟ ଶବ୍ଦ"</string>
- <string name="dial_pad_tones_title" msgid="8877212139988655769">"ଡାୟଲ୍ ପ୍ୟାଡ୍ ଟୋନ୍"</string>
+ <string name="dial_pad_tones_title" msgid="8877212139988655769">"ଡାଏଲ୍ ପ୍ୟାଡ୍ ଟୋନ୍"</string>
<string name="screen_locking_sounds_title" msgid="4407110895465866809">"ସ୍କ୍ରୀନ୍ ଲକ୍ କରିବା ସାଉଣ୍ଡ"</string>
<string name="charging_sounds_title" msgid="5070437987230894287">"ସାଉଣ୍ଡ ଓ ଭାଇବ୍ରେସନ୍ ଚାର୍ଜ ହେଉଛି"</string>
<string name="docking_sounds_title" msgid="2573137471605541366">"ଡକ୍ କରିବା ଧ୍ୱନୀ"</string>
<string name="touch_sounds_title" msgid="165237488496165652">"ସ୍ପର୍ଶ ଶବ୍ଦ"</string>
- <string name="vibrate_on_touch_title" msgid="6360155469279157684">"ସ୍ପର୍ଶଜନିତ ଭାଇବ୍ରେଶନ୍"</string>
- <string name="vibrate_on_touch_summary" msgid="5504424764028676043">"ଟ୍ୟାପ୍, କୀ-ବୋର୍ଡ ଓ ଆହୁରି ଅଧିକ ପାଇଁ ସ୍ପର୍ଶ ମାଧ୍ୟମରେ ମତାମତ"</string>
+ <string name="vibrate_on_touch_title" msgid="6360155469279157684">"ସ୍ପର୍ଶ ଭାଇବ୍ରେସନ୍"</string>
+ <string name="vibrate_on_touch_summary" msgid="5504424764028676043">"ଟ୍ୟାପ୍, କୀ-ବୋର୍ଡ ଓ ଆହୁରି ଅଧିକ ପାଇଁ ହେପଟିକ୍ ମତାମତ"</string>
<string name="dock_audio_media_title" msgid="1859521680502040781">"ଡକ୍ ସ୍ପିକର୍ ବାଜିବ"</string>
<string name="dock_audio_media_disabled" msgid="4300752306178486302">"ସମସ୍ତ ଅଡିଓ"</string>
<string name="dock_audio_media_enabled" msgid="2873275045878628153">"କେବଳ ମିଡିଆ ଅଡିଓ"</string>
@@ -3165,7 +3168,7 @@
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g>ଥର ସକ୍ଷମ କରାଯାଇଛି</item>
<item quantity="one">1ଟି ସକ୍ଷମ କରାଯାଇଛି</item>
</plurals>
- <string name="zen_mode_settings_title" msgid="3425263414594779244">"ବିରକ୍ତ କର ନାହିଁ"</string>
+ <string name="zen_mode_settings_title" msgid="3425263414594779244">"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ"</string>
<string name="zen_mode_settings_turn_on_dialog_title" msgid="3062548369931058282">"\"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\" ଅନ୍ କରନ୍ତୁ"</string>
<string name="zen_mode_behavior_settings_title" msgid="423125904296667490">"ବ୍ୟତିକ୍ରମ"</string>
<string name="zen_mode_duration_settings_title" msgid="5522668871014735728">"ଡିଫଲ୍ଟ୍ ଅବଧି"</string>
@@ -3198,22 +3201,22 @@
<string name="zen_mode_restrict_notifications_mute_footer" msgid="3049522809520549054">"ଯେତେବେଳେ ବିଜ୍ଞପ୍ତି ଦେଖାଦେବ, ଆପଣଙ୍କର ଫୋନରେ ସାଉଣ୍ଡ କିମ୍ବା ଭାଇବ୍ରେଟ୍ ହେବନାହିଁ।"</string>
<string name="zen_mode_restrict_notifications_hide" msgid="3296933643539682552">"ବିଜ୍ଞପ୍ତି ଆସିଲେ କୌଣସି ଭିଜୁଆଲ୍ ଦେଖାଯିବ ନାହିଁ କିମ୍ବା ସାଉଣ୍ଡ୍ ବାହାରିବ ନାହିଁ"</string>
<string name="zen_mode_restrict_notifications_hide_summary" msgid="1449301153755270168">"ଆପଣ ବିଜ୍ଞପ୍ତିଗୁଡିକୁ ଦେଖିପାରିବେ ନାହିଁ କିମ୍ବା ଶୁଣିପାରିବେ ନାହିଁ"</string>
- <string name="zen_mode_restrict_notifications_hide_footer" msgid="7617688597593946765">"ଆପଣଙ୍କର ଫୋନ୍ ନୂଆ କିମ୍ବା ବିଦ୍ୟମାନ ଥିବା ବିଜ୍ଞପ୍ତିକୁ ପ୍ରଦର୍ଶନ କରିବ ନାହିଁ ତଥା ସେଥିପାଇଁ ଭାଇବ୍ରେଟ୍ ହେବ ନାହିଁ କିମ୍ବା ସାଉଣ୍ଡ କରିବ ନାହିଁ । ମନେରଖନ୍ତୁ ଯେ, ଫୋନ୍ କାର୍ଯ୍ୟକଳାପ ଏବଂ ସ୍ଥିତି ପାଇଁ ଗୁରୁତର ବିଜ୍ଞପ୍ତି ତଥାପି ଦୃଶ୍ୟମାନ ହେଉଥିବ।\n\nଆପଣ \'ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\' ବନ୍ଦ କରିବା ସମୟରେ ସ୍କ୍ରିନ୍ର ଉପରୁ ତଳକୁ ସ୍ୱାଇପ୍ କରି ଛାଡ଼ି ଯାଇଥିବା ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଦେଖିପାରିବେ।"</string>
+ <string name="zen_mode_restrict_notifications_hide_footer" msgid="7617688597593946765">"ଆପଣଙ୍କର ଫୋନ୍ ନୂଆ କିମ୍ବା ବିଦ୍ୟମାନ ଥିବା ବିଜ୍ଞପ୍ତିକୁ ପ୍ରଦର୍ଶନ କରିବ ନାହିଁ ତଥା ସେଥିପାଇଁ ଭାଇବ୍ରେଟ୍ ହେବ ନାହିଁ କିମ୍ବା ସାଉଣ୍ଡ କରିବ ନାହିଁ । ମନେରଖନ୍ତୁ ଯେ, ଫୋନ୍ କାର୍ଯ୍ୟକଳାପ ଏବଂ ସ୍ଥିତି ପାଇଁ ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ ବିଜ୍ଞପ୍ତି ତଥାପି ଦେଖାଯିବ।\n\nଆପଣ \'ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\' ବନ୍ଦ କରିବା ସମୟରେ ସ୍କ୍ରିନ୍ର ଉପରୁ ତଳକୁ ସ୍ୱାଇପ୍ କରି ଛାଡ଼ି ଯାଇଥିବା ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଦେଖିପାରିବେ।"</string>
<string name="zen_mode_restrict_notifications_custom" msgid="3167252482570424133">"କଷ୍ଟମ"</string>
<string name="zen_mode_restrict_notifications_enable_custom" msgid="6376983315529894440">"କଷ୍ଟମ ସେଟିଙ୍ଗକୁ ସକ୍ଷମ କରନ୍ତୁ"</string>
<string name="zen_mode_restrict_notifications_disable_custom" msgid="8004212081465043044">"କଷ୍ଟମ ସେଟିଙ୍ଗକୁ କାଢ଼ିଦିଅନ୍ତୁ"</string>
<string name="zen_mode_restrict_notifications_summary_muted" msgid="1075196788469381282">"ବିଜ୍ଞପ୍ତି ଆସିଲେ କୌଣସି ସାଉଣ୍ଡ ନାହିଁ"</string>
<string name="zen_mode_restrict_notifications_summary_custom" msgid="4982187708274505748">"ଆଶିଂକ ଭାବେ ଲୁଚିଯାଇଛି"</string>
<string name="zen_mode_restrict_notifications_summary_hidden" msgid="7637206880685474111">"ବିଜ୍ଞପ୍ତି ଆସିଲେ କୌଣସି ଭିଜୁଆଲ୍ ଦେଖାଯିବ ନାହିଁ କିମ୍ବା ସାଉଣ୍ଡ୍ ବାହାରିବ ନାହିଁ"</string>
- <string name="zen_mode_what_to_block_title" msgid="2142809942549840800">"କଷ୍ଟମ୍ ସୀମାବଦ୍ଧତା"</string>
- <string name="zen_mode_block_effects_screen_on" msgid="1042489123800404560">"ସ୍କ୍ରୀନ୍ ଅନ୍ ଥିବାବେଳେ"</string>
- <string name="zen_mode_block_effects_screen_off" msgid="6380935819882837552">"ସ୍କ୍ରୀନ୍ ଅଫ୍ ଥିବାବେଳେ"</string>
+ <string name="zen_mode_what_to_block_title" msgid="2142809942549840800">"କଷ୍ଟମ୍ ରେଷ୍ଟ୍ରିକସନ୍"</string>
+ <string name="zen_mode_block_effects_screen_on" msgid="1042489123800404560">"ସ୍କ୍ରିନ୍ ଚାଲୁଥିବା ବେଳେ"</string>
+ <string name="zen_mode_block_effects_screen_off" msgid="6380935819882837552">"ସ୍କ୍ରିନ୍ ବନ୍ଦ ଥିବାବେଳେ"</string>
<string name="zen_mode_block_effect_sound" msgid="1499243540186357631">"ସାଉଣ୍ଡ ଓ ଭାଇବ୍ରେଶନ୍କୁ ମ୍ୟୁଟ୍ କରନ୍ତୁ"</string>
- <string name="zen_mode_block_effect_intent" msgid="5666951244667422668">"ସ୍କ୍ରୀନ୍ ଚାଲୁ କରନ୍ତୁ ନାହିଁ"</string>
+ <string name="zen_mode_block_effect_intent" msgid="5666951244667422668">"ସ୍କ୍ରିନ୍ ଚାଲୁ କରନ୍ତୁ ନାହିଁ"</string>
<string name="zen_mode_block_effect_light" msgid="8679333758037487644">"ଆଲୋକ ଧପଧପ କରନ୍ତୁ ନାହିଁ"</string>
- <string name="zen_mode_block_effect_peek" msgid="6075662813575910221">"ସ୍କ୍ରୀନ୍ ଉପରେ ବିଜ୍ଞପ୍ତି ଦେଖାନ୍ତୁ ନାହିଁ"</string>
+ <string name="zen_mode_block_effect_peek" msgid="6075662813575910221">"ସ୍କ୍ରିନ୍ ଉପରେ ବିଜ୍ଞପ୍ତି ଦେଖାନ୍ତୁ ନାହିଁ"</string>
<string name="zen_mode_block_effect_status" msgid="6516614225115681068">"ସ୍କ୍ରିନ୍ର ଉପର ପାର୍ଶ୍ୱରେ ଦିଆଯାଇଥିବା ଷ୍ଟାଟସ୍ ବାର୍ ଆଇକନ୍ଗୁଡ଼ିକୁ ଲୁଚାନ୍ତୁ"</string>
- <string name="zen_mode_block_effect_badge" msgid="3891743027347075136">"ଆପ୍ ଆଇକନ୍ଗୁଡ଼ିକରେ ବିନ୍ଦୁଗୁଡ଼ିକ ଦ୍ୱାରା ଚିହ୍ନିତ ବିଜ୍ଞପ୍ତିକୁ ଲୁଚାନ୍ତୁ"</string>
+ <string name="zen_mode_block_effect_badge" msgid="3891743027347075136">"ଆପ୍ ଆଇକନ୍ଗୁଡ଼ିକରେ ବିଜ୍ଞପ୍ତି ବିନ୍ଦୁଗୁଡ଼ିକୁ ଲୁଚାନ୍ତୁ"</string>
<string name="zen_mode_block_effect_ambient" msgid="6382013125863616197">"ବିଜ୍ଞପ୍ତି ପାଇଁ ଜଗାନ୍ତୁ ନାହିଁ"</string>
<string name="zen_mode_block_effect_list" msgid="6081548478844912181">"ବିଜ୍ଞପ୍ତି ତାଲିକାଠାରୁ ଲୁଚାନ୍ତୁ"</string>
<string name="zen_mode_block_effect_summary_none" msgid="7166175186759564510">"ଆଦୌ ନୁହେଁ"</string>
@@ -3222,7 +3225,7 @@
<string name="zen_mode_block_effect_summary_sound" msgid="4907185880913861880">"ଶବ୍ଦ ଓ କମ୍ପନ"</string>
<string name="zen_mode_block_effect_summary_some" msgid="6035118904496072665">"ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକର ଶବ୍ଦ, କମ୍ପନ ଓ ଦୃଶ୍ୟ ସଂକେତ"</string>
<string name="zen_mode_block_effect_summary_all" msgid="2830443565687247759">"ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକର ଶବ୍ଦ, ଦୃଶ୍ୟ ସଂକେତ"</string>
- <string name="zen_mode_blocked_effects_footer" msgid="4375156159613413924">"ମୌଳିକ ଫୋନ୍ କାର୍ଯ୍ୟ ପାଇଁ ବିଜ୍ଞପ୍ତି ଆବଶ୍ୟକ ଏବଂ ଷ୍ଟାଟସ୍କୁ ଆଦୌ ଲୁଚାଇହେବ ନାହିଁ"</string>
+ <string name="zen_mode_blocked_effects_footer" msgid="4375156159613413924">"ମୌଳିକ ଫୋନ୍ କାର୍ଯ୍ୟ ଏବଂ ସ୍ଥିତି ପାଇଁ ଆବଶ୍ୟକ ବିଜ୍ଞପ୍ତି ଆଦୌ ଲୁଚାଇହେବ ନାହିଁ"</string>
<string name="zen_mode_no_exceptions" msgid="3099578343994492857">"କିଛି ନୁହେଁ"</string>
<string name="zen_mode_other_options" msgid="7216192179063769057">"ଅନ୍ୟାନ୍ୟ ବିକଲ୍ପ"</string>
<string name="zen_mode_add" msgid="2533484377786927366">"ଯୋଡନ୍ତୁ"</string>
@@ -3230,7 +3233,7 @@
<string name="zen_mode_button_turn_on" msgid="1097964136225943415">"ଏବେ ଅନ୍ କରନ୍ତୁ"</string>
<string name="zen_mode_button_turn_off" msgid="3990967728457149454">"ବର୍ତ୍ତମାନ ବନ୍ଦ କରନ୍ତୁ"</string>
<string name="zen_mode_settings_dnd_manual_end_time" msgid="4307574188962071429">"<xliff:g id="FORMATTED_TIME">%s</xliff:g> ପର୍ଯ୍ୟନ୍ତ \"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\" ଅନ୍ ରହିବ"</string>
- <string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"ଆପଣ ବନ୍ଦ ନକକରିବା ପର୍ଯ୍ୟନ୍ତ \'ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\' ଅନ୍ ରହିବ"</string>
+ <string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"ଆପଣ ବନ୍ଦ ନକରିବା ପର୍ଯ୍ୟନ୍ତ \'ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\' ଚାଲୁ ରହିବ"</string>
<string name="zen_mode_settings_dnd_automatic_rule" msgid="2843297614114625408">"ଏକ (<xliff:g id="RULE_NAME">%s</xliff:g>) ନିୟମ ଦ୍ୱାରା ବିରକ୍ତ କର ନାହିଁ ସ୍ୱଚାଳିତ ଭାବେ ଚାଲୁ ହୋଇଗଲା"</string>
<string name="zen_mode_settings_dnd_automatic_rule_app" msgid="5103454923160912313">"ଏକ ଆପ୍ (<xliff:g id="APP_NAME">%s</xliff:g>) ଦ୍ୱାରା ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ ସ୍ୱଚାଳିତ ଭାବେ ଅନ୍ ହେଲା"</string>
<string name="zen_mode_settings_dnd_custom_settings_footer" msgid="6335108298640066560">"କଷ୍ଟମ୍ ସେଟିଂସ୍ ଥିବା <xliff:g id="RULE_NAMES">%s</xliff:g> ପାଇଁଁ ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\" ଚାଲୁ ଅଛି।"</string>
@@ -3277,12 +3280,12 @@
<string name="zen_onboarding_new_setting_summary" msgid="8264430315983860075">"ଆପଣ ବିଜ୍ଞପ୍ତିକୁ ଦେଖି କିମ୍ବା ଶୁଣିପାରିବେ ନାହିଁ। ତାରାଙ୍କିତ ଯୋଗାଯୋଗରୁ ଆସିଥିବା କଲ୍ ଏବଂ ପୁଣି କଲ୍ କରୁଥିବା କଲର୍ଙ୍କୁ ଅନୁମତି ଦିଆଯାଇଛି।"</string>
<string name="zen_onboarding_current_setting_summary" msgid="3569246708507270821">"(ସାମ୍ପ୍ରତିକ ସେଟିଙ୍ଗ)"</string>
<string name="zen_onboarding_dnd_visual_disturbances_header" msgid="7584229011611927613">"’ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ’ ବିଜ୍ଞପ୍ତି ସେଟିଙ୍ଗ ବଦଳାଇବେ?"</string>
- <string name="sound_work_settings" msgid="4140215240360927923">"କାର୍ଯ୍ୟ ପ୍ରୋଫାଇଲ୍ ଶବ୍ଦ"</string>
- <string name="work_use_personal_sounds_title" msgid="531727195073003599">"ବ୍ୟକ୍ତିଗତ ପ୍ରୋଫାଇଲ୍ ଧ୍ୱନୀ ବ୍ୟବହାର କରନ୍ତୁ"</string>
- <string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"କାର୍ଯ୍ୟ ଓ ବ୍ୟକ୍ତିଗତ ପ୍ରୋଫାଇଲ୍ ପାଇଁ ଶବ୍ଦଗୁଡ଼ିକ ସମାନ ଅଟେ"</string>
+ <string name="sound_work_settings" msgid="4140215240360927923">"କାର୍ଯ୍ୟ ପ୍ରୋଫାଇଲ୍ ସାଉଣ୍ଡ"</string>
+ <string name="work_use_personal_sounds_title" msgid="531727195073003599">"ବ୍ୟକ୍ତିଗତ ପ୍ରୋଫାଇଲ୍ ସାଉଣ୍ଡ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"କାର୍ଯ୍ୟ ଓ ବ୍ୟକ୍ତିଗତ ପ୍ରୋଫାଇଲ୍ ପାଇଁ ସାଉଣ୍ଡଗୁଡ଼ିକ ସମାନ ଅଟେ"</string>
<string name="work_ringtone_title" msgid="5499360583947410224">"ଅଫିସ୍ ଫୋନ୍ର ରିଙ୍ଗଟୋନ୍"</string>
- <string name="work_notification_ringtone_title" msgid="8059159087214025757">"ପୂର୍ବ-ନିର୍ଦ୍ଧାରିତ କାର୍ଯ୍ୟ ବିଜ୍ଞପ୍ତି ଶବ୍ଦ"</string>
- <string name="work_alarm_ringtone_title" msgid="5328487181385375130">"ଡିଫଲ୍ଟ କାର୍ଯ୍ୟ ଆଲାର୍ମ ଶବ୍ଦ"</string>
+ <string name="work_notification_ringtone_title" msgid="8059159087214025757">"ଡିଫଲ୍ଟ କାର୍ଯ୍ୟ ବିଜ୍ଞପ୍ତି ସାଉଣ୍ଡ"</string>
+ <string name="work_alarm_ringtone_title" msgid="5328487181385375130">"ଡିଫଲ୍ଟ କାର୍ଯ୍ୟ ଆଲାର୍ମ ସାଉଣ୍ଡ"</string>
<string name="work_sound_same_as_personal" msgid="7728560881697159758">"ବ୍ୟକ୍ତିଗତ ପ୍ରୋଫାଇଲ୍ ପରି ସମାନ"</string>
<string name="work_sync_dialog_title" msgid="4799120971202956837">"ଶବ୍ଦ ବଦଳାଇବେ?"</string>
<string name="work_sync_dialog_yes" msgid="2110726233746476066">"ବଦଳାଇବ"</string>
@@ -3290,7 +3293,7 @@
<string name="ringtones_install_custom_sound_title" msgid="210551218424553671">"କଷ୍ଟମ୍ ସାଉଣ୍ଡ ଯୋଡ଼ିବେ?"</string>
<string name="ringtones_install_custom_sound_content" msgid="6683649115132255452">"<xliff:g id="FOLDER_NAME">%s</xliff:g> ଫୋଲ୍ଡର୍କୁ ଏହି ଫାଇଲ୍ କପୀ କରାଯିବ"</string>
<string name="ringtones_category_preference_title" msgid="4491932700769815470">"ରିଙ୍ଗଟୋନ୍"</string>
- <string name="other_sound_category_preference_title" msgid="2045757472469840859">"ଅନ୍ୟାନ୍ୟ ସାଉଣ୍ଡ ଓ ଭାଇବ୍ରେଶନ୍"</string>
+ <string name="other_sound_category_preference_title" msgid="2045757472469840859">"ଅନ୍ୟ ସାଉଣ୍ଡ ଓ ଭାଇବ୍ରେସନ୍"</string>
<string name="configure_notification_settings" msgid="291914315140851270">"ବିଜ୍ଞପ୍ତି"</string>
<string name="recent_notifications" msgid="8125865995065032049">"କିଛି ସମୟ ପୂର୍ବରୁ ବିଜ୍ଞପ୍ତି ପଠାଇଥିବା ଆପ୍"</string>
<string name="recent_notifications_see_all_title" msgid="4089007770442871469">"ବିଗତ 7 ଦିନରୁ ସବୁଗୁଡ଼ିକୁ ଦେଖନ୍ତୁ"</string>
@@ -3338,11 +3341,11 @@
<string name="notification_importance_low" msgid="7609797151662295364">"ନିରବରେ ଦେଖାନ୍ତୁ"</string>
<string name="notification_importance_default" msgid="4091563759103917166">"ଶବ୍ଦ କର"</string>
<string name="notification_importance_high" msgid="7973764540402436656">"ଶବ୍ଦ କର ଓ ସ୍କ୍ରୀନ୍ ଉପରେ ଦେଖାଅ"</string>
- <string name="notification_importance_high_silent" msgid="3177662759865661155">"ସ୍କ୍ରୀନ୍ ଉପରକୁ ଚାଲିଆସୁ"</string>
+ <string name="notification_importance_high_silent" msgid="3177662759865661155">"ସ୍କ୍ରିନ୍ ଉପରେ ଦେଖାନ୍ତୁ"</string>
<string name="notification_importance_min_title" msgid="705872537330744154">"ଛୋଟ କରନ୍ତୁ"</string>
<string name="notification_importance_low_title" msgid="2956199021781786232">"ମଧ୍ୟମ"</string>
<string name="notification_importance_default_title" msgid="7985549807203332482">"ଉଚ୍ଚ"</string>
- <string name="notification_importance_high_title" msgid="7258373094258585858">"ସ୍କ୍ରୀନ୍ରେ ଦେଖାନ୍ତୁ"</string>
+ <string name="notification_importance_high_title" msgid="7258373094258585858">"ସ୍କ୍ରିନ୍ ଉପରେ ଦେଖାନ୍ତୁ"</string>
<string name="notification_block_title" msgid="2570364198866886906">"ବ୍ଲକ୍ କରନ୍ତୁ"</string>
<string name="notification_silence_title" msgid="6959637402003838093">"ନିରବରେ ଦେଖାନ୍ତୁ"</string>
<string name="notification_alert_title" msgid="750683027055192648">"ଆଲର୍ଟ"</string>
@@ -3381,10 +3384,10 @@
<string name="display_vr_pref_title" msgid="1088464812293416981">"VRରେ ଡିଭାଇସ୍ ଥିବାବେଳେ"</string>
<string name="display_vr_pref_low_persistence" msgid="3132583929174794245">"ବ୍ଲର୍ କମ କରନ୍ତୁ (ପ୍ରସ୍ତାବିତ)"</string>
<string name="display_vr_pref_off" msgid="4681320968818852691">"ଫ୍ଲିକର୍କୁ କମ୍ କରନ୍ତୁ"</string>
- <string name="picture_in_picture_title" msgid="4960733106166035448">"ଛବି-ଭିତରେ-ଛବି"</string>
+ <string name="picture_in_picture_title" msgid="4960733106166035448">"ପିକଚର୍-ଇନ୍-ପିକଚର୍"</string>
<string name="picture_in_picture_empty_text" msgid="8664071475324685241">"ଛବି-ଭିତରେ-ଛବିକୁ ଇନ୍ଷ୍ଟଲ୍ ହୋଇଥିବା କୌଣସି ଆପ୍ ସପୋର୍ଟ କରୁନାହିଁ"</string>
<string name="picture_in_picture_keywords" msgid="7326958702002259262">"ପିପ୍ ପିକଚର୍ ଇନ୍"</string>
- <string name="picture_in_picture_app_detail_title" msgid="3916189052657425936">"ଛବି-ରେ-ଛବି"</string>
+ <string name="picture_in_picture_app_detail_title" msgid="3916189052657425936">"ପିକଚର୍-ଇନ୍-ପିକଚର୍"</string>
<string name="picture_in_picture_app_detail_switch" msgid="747422998967185418">"ପିକଚର୍-ଇନ୍-ପିକଚରର ଅନୁମତି ଦିଅନ୍ତୁ"</string>
<string name="picture_in_picture_app_detail_summary" msgid="918632751775525347">"ଏପ ଖୋଲା ଥିବାବେଳେ କିମ୍ୱା ଏହାକୁ ଆପଣ ଛାଡ଼ିବା ପରେ (ଉଦାହରଣସ୍ୱରୂପ, ଏକ ଭିଡିଓ ଦେଖିବା ଜାରି ରଖିବାକୁ) ଏକ ଛବି-ଭିତରେ-ଛବି ୱିଣ୍ଡୋ ତିଆରି କରିବା ପାଇଁ ଏହି ଏପକୁ ଅନୁମତି ଦିଅନ୍ତୁ। ଏହି ୱିଣ୍ଡୋ, ଆପଣ ବ୍ୟବହାର କରୁଥିବା ଅନ୍ୟ ଏପଗୁଡ଼ିକ ଉପରେ ଦେଖାଦେବ।"</string>
<string name="manage_zen_access_title" msgid="3058206309728524196">"\"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\" ଆକ୍ସେସ୍"</string>
@@ -3420,7 +3423,7 @@
<string name="notification_badge_title" msgid="8989086619255666442">"ବିଜ୍ଞପ୍ତି ଡଟ୍ର ଅନୁମତି ଦିଅନ୍ତୁ"</string>
<string name="notification_channel_badge_title" msgid="8228215248332054612">"ବିଜ୍ଞପ୍ତି ଡଟ୍ ଦେଖାନ୍ତୁ"</string>
<string name="app_notification_override_dnd_title" msgid="1757042206738172601">"ବିରକ୍ତ କରନାହିଁ ଓଭରରାଇଡ"</string>
- <string name="app_notification_override_dnd_summary" msgid="3152957611171210980">"’ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ’ ଅନ୍ ଥିବାବେଳେ ଏହି ବିଜ୍ଞପ୍ତିର ବାଧା ଦେବା ପ୍ରକ୍ରିୟାକୁ ଜାରି ରଖନ୍ତୁ"</string>
+ <string name="app_notification_override_dnd_summary" msgid="3152957611171210980">"\'ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\' ଚାଲୁଥିବା ବେଳେ ଏହି ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକର ବାଧା ଦେବା ପ୍ରକ୍ରିୟାକୁ ଜାରି ରଖନ୍ତୁ"</string>
<string name="app_notification_visibility_override_title" msgid="2349335170165637672">"ଲକ୍ ସ୍କ୍ରୀନ୍ ଉପରେ"</string>
<string name="app_notification_row_banned" msgid="2079325338122151677">"ଅବରୋଧିତ"</string>
<string name="app_notification_row_priority" msgid="432299064888787236">"ପ୍ରାଥମିକତା"</string>
@@ -3703,13 +3706,13 @@
<item quantity="other">ଆପ୍ଗୁଡ଼ିକ ବ୍ୟାଟେରୀ ସାରୁଛନ୍ତି</item>
<item quantity="one"><xliff:g id="APP">%1$s</xliff:g> ବ୍ୟାଟେରୀ ସାରୁଛି</item>
</plurals>
- <string name="high_power_filter_on" msgid="5294209328473386403">"ଅନୁକୂଳିତ ନୁହେଁ"</string>
- <string name="high_power_on" msgid="3573501822510580334">"ଅନୁକୁଳିତ ନୁହେଁ"</string>
+ <string name="high_power_filter_on" msgid="5294209328473386403">"ଅପ୍ଟିମାଇଜ୍ ହୋଇନାହିଁ"</string>
+ <string name="high_power_on" msgid="3573501822510580334">"ଅପ୍ଟିମାଇଜ୍ ହୋଇନାହିଁ"</string>
<string name="high_power_off" msgid="5906679734326490426">"ଅପ୍ଟିମାଇଜିଂ ବ୍ୟାଟେରୀ ବ୍ୟବହାର"</string>
<string name="high_power_system" msgid="739584574711292753">"ବ୍ୟାଟେରୀ ଅପ୍ଟିମାଇଜେସନ୍ ଉପଲବ୍ଧ ନାହିଁ"</string>
<string name="high_power_desc" msgid="333756885680362741">"ବ୍ୟାଟେରୀ ଅପ୍ଟିମାଇଜେସନ୍ ଲାଗୁ କରନ୍ତୁ ନାହିଁ। ଏହା ଆପଣଙ୍କ ବ୍ୟାଟେରୀକୁ ଖୁବ ଶୀଘ୍ର ସାରିଦେଇପାରେ।"</string>
<string name="high_power_prompt_title" msgid="2805745781720454052">"ଆପ୍ଟି ବ୍ୟାକ୍ଗ୍ରାଉଣ୍ଡରେ ସର୍ବଦା ଚାଲୁଥିବ କି?"</string>
- <string name="high_power_prompt_body" msgid="8067395096053552289">"<xliff:g id="APP_NAME">%1$s</xliff:g> କୁ ବ୍ୟାକ୍ଗ୍ରାଉଣ୍ଡରେ ଚାଲିବାକୁ ଦେବା ଦ୍ୱାରା ବ୍ୟାଟେରୀ ଜୀବନ କମ୍ ହୋଇପାରେ। \n\nଆପଣ ଏହାକୁ ପରେ ସେଟିଙ୍ଗ > ଆପ୍ଗୁଡ଼ିକ ଓ ବିଜ୍ଞପ୍ତିସମୂହରେ ବଦଳାଇପାରିବେ।"</string>
+ <string name="high_power_prompt_body" msgid="8067395096053552289">"<xliff:g id="APP_NAME">%1$s</xliff:g> କୁ ପୃଷ୍ଠପଟରେ ଚାଲିବାକୁ ଦେବା ଦ୍ୱାରା ବ୍ୟାଟେରୀ ଜୀବନ ହ୍ରାସ ହୋଇପାରେ। \n\nଆପଣ ଏହାକୁ ପରେ ସେଟିଂସ୍ > ଆପ୍ଗୁଡ଼ିକ ଓ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକରେ ବଦଳାଇପାରିବେ।"</string>
<string name="battery_summary" msgid="4345690800899981339">"ଗତଥର ସମ୍ପୂର୍ଣ୍ଣ ଚାର୍ଜ ହେବା ପରଠାରୁ <xliff:g id="PERCENTAGE">%1$s</xliff:g> ବ୍ୟବହୃତ"</string>
<string name="battery_power_management" msgid="2853925857548647969">"ପାୱର ପରିଚାଳନା"</string>
<string name="no_battery_summary" msgid="4105932628367471314">"ଶେଷ ଥରକ ପୂର୍ଣ୍ଣ ଚାର୍ଜ ହେବା ପରଠାରୁ ବ୍ୟାଟେରୀର କୌଣସି ବ୍ୟବହାର ହୋଇନାହିଁ"</string>
@@ -3725,12 +3728,12 @@
<string name="decline_remote_bugreport_action" msgid="706319275774199033">"ଅଗ୍ରାହ୍ୟ କରନ୍ତୁ"</string>
<string name="usb_use_charging_only" msgid="2344625733377110164">"ଡାଟା ସ୍ଥାନାନ୍ତର ହେବ ନାହିଁ"</string>
<string name="usb_use_charging_only_desc" msgid="3283518562582478950">"ଏହି ଡିଭାଇସ୍କୁ ଚାର୍ଜ କରିଦିଅନ୍ତୁ"</string>
- <string name="usb_use_power_only" msgid="6595783381323810697">"କନେକ୍ଟ ହୋଇଥିବା ଡିଭାଇସ୍ ଚାର୍ଜ କରନ୍ତୁ"</string>
+ <string name="usb_use_power_only" msgid="6595783381323810697">"ସଂଯୁକ୍ତ ହୋଇଥିବା ଡିଭାଇସ୍ ଚାର୍ଜ କରନ୍ତୁ"</string>
<string name="usb_use_file_transfers" msgid="6153021302176151884">"ଫାଇଲ୍ ଟ୍ରାନ୍ସଫର୍"</string>
<string name="usb_use_file_transfers_desc" msgid="6953866660041189580">"ଅନ୍ୟଏକ ଡିଭାଇସ୍କୁ ଫାଇଲ୍ ଟ୍ରାନ୍ସଫର୍ କରନ୍ତୁ"</string>
<string name="usb_use_photo_transfers" msgid="5974236250197451257">"PTP"</string>
<string name="usb_use_photo_transfers_desc" msgid="2325112887316125320">"ଯଦି MTP ସପୋର୍ଟ ହେଉନଥିବ, ତେବେ ଫୋଟୋ କିମ୍ୱା ଫାଇଲ୍ ଟ୍ରାନ୍ସଫର୍ କରନ୍ତୁ (PTP)"</string>
- <string name="usb_use_tethering" msgid="4250626730173163846">"USB ଟିଥରିଙ୍ଗ"</string>
+ <string name="usb_use_tethering" msgid="4250626730173163846">"USB ଟିଥରିଂ"</string>
<string name="usb_use_MIDI" msgid="4710632870781041401">"MIDI"</string>
<string name="usb_use_MIDI_desc" msgid="1770966187150010947">"MIDI ଭାବରେ ଏହି ଡିଭାଇସ୍କୁ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="usb_use" msgid="8940500223316278632">"ଏହା ପାଇଁ USB ବ୍ୟବହାର କରନ୍ତୁ"</string>
@@ -3746,7 +3749,7 @@
<string name="usb_summary_charging_only" msgid="4118449308708872339">"ଏହି ଡିଭାଇସ୍ ଚାର୍ଜ ହେଉଛି"</string>
<string name="usb_summary_power_only" msgid="3552240122641051107">"କନେକ୍ଟ ହୋଇଥିବା ଡିଭାଇସ୍ ଚାର୍ଜ ହେଉଛି"</string>
<string name="usb_summary_file_transfers" msgid="7805342797099821502">"ଫାଇଲ୍ ଟ୍ରାନ୍ସଫର୍"</string>
- <string name="usb_summary_tether" msgid="778845069037366883">"USB ଟିଥରିଙ୍ଗ"</string>
+ <string name="usb_summary_tether" msgid="778845069037366883">"USB ଟିଥରିଂ"</string>
<string name="usb_summary_photo_transfers" msgid="4743028167400644354">"PTP"</string>
<string name="usb_summary_MIDI" msgid="5540604166270861247">"MIDI"</string>
<string name="usb_summary_file_transfers_power" msgid="1684501026426766867">"ଫାଇଲ୍ ଟ୍ରାନ୍ସଫର୍ ଏବଂ ଯୋଗାଉଥିବା ପାୱର୍"</string>
@@ -3755,13 +3758,13 @@
<string name="usb_summary_MIDI_power" msgid="7685597621357005180">"MIDI ଓ ଯୋଗାଉଥିବା ପାୱର୍"</string>
<string name="background_check_pref" msgid="664081406854758392">"ବ୍ୟାକ୍ଗ୍ରାଉଣ୍ଡ ଯାଞ୍ଚ"</string>
<string name="background_check_title" msgid="4136736684290307970">"ସମ୍ପୂର୍ଣ୍ଣ ବ୍ୟାକ୍ଗ୍ରାଉଣ୍ଡ ଆକସେସ୍"</string>
- <string name="assist_access_context_title" msgid="2274614501747710439">"ସ୍କ୍ରୀନ୍ରୁ ଟେକ୍ସଟ୍ ବ୍ୟବହାର କର"</string>
- <string name="assist_access_context_summary" msgid="5867997494395842785">"ସ୍କ୍ରୀନ୍ କଣ୍ଟେଣ୍ଟଗୁଡ଼ିକୁ ଟେକ୍ସଟ୍ ଭଳି ଆକ୍ସେସ୍ କରିବା ପାଇଁ ସହାୟକ ଆପ୍କୁ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
- <string name="assist_access_screenshot_title" msgid="1991014038776117688">"ସ୍କ୍ରୀନଶଟ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
- <string name="assist_access_screenshot_summary" msgid="3010943864000489424">"ସହାୟକ ଆପ୍କୁ ସ୍କ୍ରୀନ୍ର ଏକ ଇମେଜ୍ ଆକସେସ୍ କରିବାକୁ ଦିଅନ୍ତୁ"</string>
- <string name="assist_flash_title" msgid="8852484250748551092">"ଫ୍ଲାଶ୍ ସ୍କ୍ରୀନ୍"</string>
- <string name="assist_flash_summary" msgid="6697095786317559129">"ସ୍କ୍ରୀନ୍ କିମ୍ୱା ସ୍କ୍ରୀନଶଟ୍ରୁ ଯେତେବେଳେ ସହାୟକ ଆପ୍ ଟେକ୍ସଟ୍ ଆକ୍ସେସ୍ କରେ, ସ୍କ୍ରୀନ୍ର ଧାର ଫ୍ଲାଶ୍ ହେଉ"</string>
- <string name="assist_footer" msgid="7030121180457472165">"ଆପଣ ଦେଖୁଥିବା ସ୍କ୍ରୀନ୍ ସୂଚନାକୁ ଆଧାର କରି ସହାୟକ ଆପ୍ ଆପଣଙ୍କୁ ସାହାଯ୍ୟ କରିପାରିବ। କେତେକ ଆପ୍,ଆପଣଙ୍କୁ ଉତ୍ତମ ସହାୟତା ଦେବାପାଇଁ, ଉଭୟ ଲଞ୍ଚର୍ ଓ ଭଏସ୍ ଇନପୁଟ୍ ସେବାକୁ ସମର୍ଥନ କରନ୍ତି।"</string>
+ <string name="assist_access_context_title" msgid="2274614501747710439">"ସ୍କ୍ରିନ୍ରୁ ଟେକ୍ସଟ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <string name="assist_access_context_summary" msgid="5867997494395842785">"ସ୍କ୍ରିନ୍ ବିଷୟବସ୍ତୁଗୁଡ଼ିକୁ ଟେକ୍ସଟ୍ ଭଳି ଆକ୍ସେସ୍ କରିବା ପାଇଁ ସହାୟକ ଆପ୍କୁ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
+ <string name="assist_access_screenshot_title" msgid="1991014038776117688">"ସ୍କ୍ରିନସଟ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <string name="assist_access_screenshot_summary" msgid="3010943864000489424">"ସହାୟକ ଆପ୍କୁ ସ୍କ୍ରିନ୍ର ଏକ ଇମେଜ୍ ଆକସେସ୍ କରିବାକୁ ଦିଅନ୍ତୁ"</string>
+ <string name="assist_flash_title" msgid="8852484250748551092">"ଫ୍ଲାସ୍ ସ୍କ୍ରିନ୍"</string>
+ <string name="assist_flash_summary" msgid="6697095786317559129">"ସ୍କ୍ରିନ୍ କିମ୍ୱା ସ୍କ୍ରିନସଟ୍ରୁ ଯେତେବେଳେ ସହାୟକ ଆପ୍ ଟେକ୍ସଟ୍ ଆକ୍ସେସ୍ କରେ, ସ୍କ୍ରିନ୍ର ଧାର ଫ୍ଲାସ୍ କରନ୍ତୁ"</string>
+ <string name="assist_footer" msgid="7030121180457472165">"ଆପଣ ଦେଖୁଥିବା ସ୍କ୍ରିନ୍ ସୂଚନାକୁ ଆଧାର କରି ସହାୟକ ଆପ୍ ଆପଣଙ୍କୁ ସାହାଯ୍ୟ କରିପାରିବ। କେତେକ ଆପ୍,ଆପଣଙ୍କୁ ଉତ୍ତମ ସହାୟତା ଦେବାପାଇଁ, ଉଭୟ ଲଞ୍ଚର୍ ଓ ଭଏସ୍ ଇନପୁଟ୍ ସେବାକୁ ସମର୍ଥନ କରନ୍ତି।"</string>
<string name="average_memory_use" msgid="5333366040118953945">"ହାରାହାରି ମେମୋରୀ ବ୍ୟବହାର"</string>
<string name="maximum_memory_use" msgid="6509872438499846077">"ସର୍ବାଧିକ ମେମୋରୀ ବ୍ୟବହାର"</string>
<string name="memory_usage" msgid="7963253555330830906">"ମେମୋରୀ ବ୍ୟବହାର"</string>
@@ -3780,7 +3783,7 @@
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> ଟି ଆପ୍ ବିଗତ <xliff:g id="DURATION_1">%2$s</xliff:g> ରେ ମେମୋରୀ ବ୍ୟବହାର କଲା</item>
<item quantity="one">1 ଆପ୍ ବିଗତ <xliff:g id="DURATION_0">%2$s</xliff:g> ରେ ମେମୋରୀ ବ୍ୟବହାର କଲା</item>
</plurals>
- <string name="running_frequency" msgid="7545170806968474449">"ବାରମ୍ଵାରତା"</string>
+ <string name="running_frequency" msgid="7545170806968474449">"ଫ୍ରିକ୍ୱେନ୍ସୀ"</string>
<string name="memory_maximum_usage" msgid="4734981118293469479">"ସର୍ବାଧିକ ବ୍ୟବହାର"</string>
<string name="no_data_usage" msgid="903383745620135746">"କୌଣସି ଡାଟା ବ୍ୟବହୃତ ହୋଇନାହିଁ"</string>
<string name="zen_access_warning_dialog_title" msgid="7704910289810337055">"<xliff:g id="APP">%1$s</xliff:g> ପାଇଁ \"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\"ର ଆକ୍ସେସ୍ ଅନୁମତି ଦେବେ?"</string>
@@ -3796,28 +3799,28 @@
<string name="app_list_preference_none" msgid="7100409177446935028">"କିଛି ନୁହେଁ"</string>
<string name="work_profile_usage_access_warning" msgid="403208064382097510">"ଏହି ଆପ୍ ପାଇଁ ବ୍ୟବହାର ଆକ୍ସେସ୍ ବନ୍ଦ କରିବା ଦ୍ୱାରା ଆପଣଙ୍କ କାର୍ଯ୍ୟ ପ୍ରୋଫାଇଲରେ ଥିବା ଡାଟା ବ୍ୟବହାର ଉପରେ ନଜର ରଖିବାରୁ ଆପଣଙ୍କ ଆଡମିନ୍କୁ ରୋକେନାହିଁ"</string>
<string name="accessibility_lock_screen_progress" msgid="8242917828598820049">"<xliff:g id="COUNT_1">%2$d</xliff:g> ର <xliff:g id="COUNT_0">%1$d</xliff:g> ଅକ୍ଷର ବ୍ୟବହୃତ ହୋଇଛି"</string>
- <string name="draw_overlay" msgid="2878665072530660668">"ଅନ୍ୟ ଆପ୍ଗୁଡ଼ିକ ଉପରେ ଦେଖାଅ"</string>
+ <string name="draw_overlay" msgid="2878665072530660668">"ଅନ୍ୟ ଆପ୍ଗୁଡ଼ିକ ଉପରେ ଦେଖାନ୍ତୁ"</string>
<string name="system_alert_window_settings" msgid="3024330223417646567">"ଅନ୍ୟ ଆପ୍ଗୁଡ଼ିକ ଉପରେ ଦେଖାଅ"</string>
<string name="system_alert_window_apps_title" msgid="9188448296493699566">"ଆପ୍"</string>
- <string name="system_alert_window_access_title" msgid="5187343732185369675">"ଅନ୍ୟ ଆପ୍ଗୁଡ଼ିକ ଉପରେ ଦେଖାଅ"</string>
- <string name="permit_draw_overlay" msgid="9039092257052422344">"ଅନ୍ୟ ଆପ୍ଗୁଡ଼ିକ ଉପରେ ପ୍ରଦର୍ଶନ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
- <string name="allow_overlay_description" msgid="6669524816705082807">"ଆପଣ ବ୍ୟବହାର କରୁଥିବା ଅନ୍ୟ ଆପ୍ଗୁଡ଼ିକ ଉପରେ ଏହି ଆପ୍କୁ ରହିବାକୁ ଦିଅନ୍ତୁ। ସେହି ଆପ୍ଗୁଡ଼ିକର ବ୍ୟବହାରରେ ଏହା ବାଧା ସୃଷ୍ଟି କରିପାରେ କିମ୍ୱା ସେଗୂଡ଼ିକର କାମ କରିବା ଶୈଳୀକୁ ବଦଳାଇଦେଇପାରେ।"</string>
+ <string name="system_alert_window_access_title" msgid="5187343732185369675">"ଅନ୍ୟ ଆପ୍ଗୁଡ଼ିକ ଉପରେ ଦେଖାନ୍ତୁ"</string>
+ <string name="permit_draw_overlay" msgid="9039092257052422344">"ଅନ୍ୟ ଆପ୍ଗୁଡ଼ିକ ଉପରେ ଦେଖାଇବାକୁ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
+ <string name="allow_overlay_description" msgid="6669524816705082807">"ଆପଣ ବ୍ୟବହାର କରୁଥିବା ଅନ୍ୟ ଆପ୍ଗୁଡ଼ିକ ଉପରେ ଏହି ଆପ୍କୁ ଡିସପ୍ଲେ ହେବାକୁ ଅନୁମତି ଦିଅନ୍ତୁ। ଆପଣଙ୍କର ଏହି ଆପ୍ଗୁଡ଼ିକର ବ୍ୟବହାରରେ ଏହା ବାଧା ସୃଷ୍ଟି କରିପାରେ କିମ୍ୱା ସେଗୁଡ଼ିକର କାମ କରିବା ବା ଦେଖାଯିବା ଶୈଳୀକୁ ବଦଳାଇଦେଇପାରେ।"</string>
<string name="keywords_vr_listener" msgid="5312633527788917750">"vr ଭର୍ଚୁଆଲ୍ ରିଅଲିଟୀ ଲିସ୍ନର୍ ଷ୍ଟେରିଓ ସାହାଯ୍ୟକାରୀ ସେବା"</string>
<string name="keywords_system_alert_window" msgid="3936658600272194599">"ଅନ୍ୟ ଆପ୍ଗୁଡ଼ିକରେ ସିଷ୍ଟମ୍ ଆଲର୍ଟ ଡାୟଲଗ୍ ଡିସ୍ପ୍ଲେ"</string>
- <string name="overlay_settings" msgid="3325154759946433666">"ଅନ୍ୟ ଆପ୍ଗୁଡ଼ିକ ଉପରେ ଦେଖାଦେଉ"</string>
+ <string name="overlay_settings" msgid="3325154759946433666">"ଅନ୍ୟ ଆପ୍ଗୁଡ଼ିକ ଉପରେ ଦେଖାନ୍ତୁ"</string>
<string name="system_alert_window_summary" msgid="7703582115861844158">"<xliff:g id="COUNT_1">%2$d</xliff:g> ଟି ଆପ୍ରୁ <xliff:g id="COUNT_0">%1$d</xliff:g> ଅନ୍ୟ ଆପ୍ଗୁଡ଼ିକରେ ଡିସପ୍ଲେ କରିବାକୁ ଅନୁମୋଦିତ"</string>
<string name="filter_overlay_apps" msgid="6336897660213304743">"ଅନୁମତି ସହ ଆପ୍ଗୁଡ଼ିକ"</string>
<string name="app_permission_summary_allowed" msgid="6458476982015518778">"ଅନୁମତିପ୍ରାପ୍ତ"</string>
<string name="app_permission_summary_not_allowed" msgid="1171642541675462584">"ଅନୁମୋଦିତ ନୁହେଁ"</string>
<string name="keywords_install_other_apps" msgid="5383559540695847668">"ଅଜଣ ଉତ୍ସରୁ ଆପ୍ଗୁଡ଼ିକୁ ଇନ୍ଷ୍ଟଲ୍ କରନ୍ତୁ"</string>
- <string name="write_settings" msgid="9009040811145552108">"ସିଷ୍ଟମ୍ ସେଟିଙ୍ଗ ବଦଳାନ୍ତୁ"</string>
+ <string name="write_settings" msgid="9009040811145552108">"ସିଷ୍ଟମ୍ ସେଟିଂସ ବଦଳାନ୍ତୁ"</string>
<string name="keywords_write_settings" msgid="3450405263390246293">"ଲେଖିବା ଓ ପରିବର୍ତ୍ତନ କରିବାର ସିଷ୍ଟମ୍ ସେଟିଙ୍ଗ"</string>
<string name="write_settings_summary" msgid="4650251358459404247">"<xliff:g id="COUNT_1">%2$d</xliff:g> ର <xliff:g id="COUNT_0">%1$d</xliff:g> ଆପ୍, ସିଷ୍ଟମ୍ ସେଟିଙ୍ଗ ବଦଳାଇପାରିବେ"</string>
<string name="financial_apps_sms_access_title" msgid="3422655018008259655">"ଆର୍ଥିକ ଆପ୍ସ Smsର ଆକ୍ସେସ୍"</string>
<string name="filter_install_sources_apps" msgid="4519839764020866701">"ଅନ୍ୟ ଏପଗୁଡ଼ିକୁ ଇନଷ୍ଟଲ କରିପାରେ"</string>
<string name="filter_write_settings_apps" msgid="6864144615530081121">"ସିଷ୍ଟମ୍ ସେଟିଂସ୍ ପରିବର୍ତ୍ତନ କରିପାରିବ"</string>
<string name="write_settings_title" msgid="5852614614193830632">"ସିଷ୍ଟମ୍ ସେଟିଂସ୍ ପରିବର୍ତ୍ତନ କରିପାରିବ"</string>
- <string name="write_system_settings" msgid="20450765210832463">"ସିଷ୍ଟମ୍ ସେଟିଙ୍ଗ ବଦଳାନ୍ତୁ"</string>
+ <string name="write_system_settings" msgid="20450765210832463">"ସିଷ୍ଟମ୍ ସେଟିଂସ ବଦଳାନ୍ତୁ"</string>
<string name="permit_write_settings" msgid="4198491281216818756">"ସିଷ୍ଟମ୍ ସେଟିଙ୍ଗ ବଦଳାଇବାକୁ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
<string name="write_settings_description" msgid="2536706293042882500">"ଏହି ଅନୁମତି ଦ୍ୱାରା ଗୋଟିଏ ଏପ, ସିଷ୍ଟମ ସେଟିଙ୍ଗରେ ସଂଶୋଧନ କରିଥାଏ।"</string>
<string name="write_settings_on" msgid="7328986337962635118">"ହଁ"</string>
@@ -3828,7 +3831,7 @@
<string name="camera_double_tap_power_gesture_title" msgid="8874747801078147525">"କ୍ୟାମେରା ପାଇଁ ପାୱର୍ ବଟନ୍କୁ ଦୁଇଥର ଦବାନ୍ତୁ"</string>
<string name="camera_double_tap_power_gesture_desc" msgid="6166349645433682873">"ନିଜ ଫୋନ୍କୁ ଅନ୍ଲକ୍ ନକରି ଶୀଘ୍ର କ୍ୟାମେରା ଖୋଲନ୍ତୁ"</string>
<string name="screen_zoom_title" msgid="164369086350486104">"ଡିସ୍ପ୍ଲେ ସାଇଜ୍"</string>
- <string name="screen_zoom_short_summary" msgid="5508079362742276703">"ସ୍କ୍ରୀନ୍ ଉପରେ ଥିବା ଆଇଟମ୍ଗୁଡ଼ିକୁ ବଡ଼ କିମ୍ୱା ଛୋଟ କରନ୍ତୁ"</string>
+ <string name="screen_zoom_short_summary" msgid="5508079362742276703">"ସ୍କ୍ରିନ୍ ଉପରେ ଥିବା ଆଇଟମ୍ଗୁଡ଼ିକୁ ବଡ଼ କିମ୍ୱା ଛୋଟ କରନ୍ତୁ"</string>
<string name="screen_zoom_keywords" msgid="8358462497896524092">"ପ୍ରଦର୍ଶନ ଘନତ୍ତ୍ୱ, ସ୍କ୍ରିନ୍ ଜୁମ, ସ୍କେଲ୍, ସ୍କେଲିଂ"</string>
<string name="screen_zoom_summary" msgid="5294003755961312560">"ଆଇଟମଟି ଆପଣଙ୍କ ସ୍କ୍ରୀନ୍ରେ ଛୋଟ କିମ୍ବା ବଡ କରନ୍ତୁ। ଆପଣଙ୍କ ସ୍କ୍ରୀନ୍ରେ କିଛି ଆପ୍ ସ୍ଥାନ ପରିବର୍ତ୍ତନ କରିପାରନ୍ତି।"</string>
<string name="screen_zoom_preview_title" msgid="2924312934036753091">"ପ୍ରିଭ୍ୟୁ"</string>
@@ -3859,7 +3862,7 @@
<string name="storage_summary_with_sdcard" msgid="8742907204848352697">"ଇଣ୍ଟର୍ନାଲ୍ ଷ୍ଟୋରେଜ୍: <xliff:g id="PERCENTAGE">%1$s</xliff:g> ବ୍ୟବହୃତ - <xliff:g id="FREE_SPACE">%2$s</xliff:g> ଖାଲି"</string>
<string name="display_summary" msgid="5725269449657325797">"ନିଷ୍କ୍ରିୟତାର <xliff:g id="TIMEOUT_DESCRIPTION">%1$s</xliff:g> ପରେ ସୁପ୍ତାବସ୍ଥା"</string>
<string name="display_dashboard_summary" msgid="7678566148167010682">"ୱାଲ୍ପେପର୍, ସୁପ୍ତ, ଫଣ୍ଟ ସାଇଜ୍"</string>
- <string name="display_dashboard_summary_with_style" msgid="8981059474501210956">"ଶୈଳୀ ଏବଂ ୱାଲ୍ପେପର୍, ସ୍ଲିପ୍, ଫଣ୍ଟ ଆକାର"</string>
+ <string name="display_dashboard_summary_with_style" msgid="8981059474501210956">"ଷ୍ଟାଇଲ୍ ଏବଂ ୱାଲପେପର୍, ସ୍ଲିପ୍, ଫଣ୍ଟ ଆକାର"</string>
<string name="display_dashboard_nowallpaper_summary" msgid="8612534364908229000">"ସ୍ଲିପ୍, ଫଣ୍ଟ ସାଇଜ୍"</string>
<string name="display_summary_example" msgid="4555020581960719296">"କାମ ନ କରିବାର ୧୦ ମିନିଟ ପରେ ଶୁଆଇଦିଅ"</string>
<string name="memory_summary" msgid="9121871336058042600">"<xliff:g id="TOTAL_MEMORY">%2$s</xliff:g> ମେମୋରୀର ହାରାହାରି <xliff:g id="USED_MEMORY">%1$s</xliff:g> ବ୍ୟବହୃତ"</string>
@@ -4007,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"ଯଦି ଡିଭାଇସ୍ ଲକ୍ ହୋଇଥାଏ, ବିଜ୍ଞପ୍ତିରେ ପ୍ରତ୍ୟୁତ୍ତର କିମ୍ବା ଅନ୍ୟାନ୍ୟ ଟେକ୍ସଟ୍ ଟାଇପ କରିବା ପ୍ରତିରୋଧ କରେ"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"ଡିଫଲ୍ଟ ବନାନ ଯାଞ୍ଚକାରୀ"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"ବନାନ ଯାଞ୍ଚକାରୀ ବାଛନ୍ତୁ"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"ବନାନ୍ ଯାଞ୍ଚ କରୁଥିବା ଟୂଲ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"ବନାନ ଯାଞ୍ଚକାରୀ ଟୁଲ୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"ଚୟନ କରାଯାଇନାହିଁ"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(କିଛି ନାହିଁ)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4100,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"ଷ୍ଟୋରେଜ୍ ସ୍ପେସ୍ ଖାଲି କରିବା ପାଇଁ, ଷ୍ଟୋରେଜ୍ ମ୍ୟାନେଜର୍ ଆପଣଙ୍କ ଡିଭାଇସ୍ରୁ ବ୍ୟାକ୍ଅପ୍ ନିଆଯାଇଥିବା ଫୋଟୋ ଏବଂ ଭିଡିଓଗୁଡ଼ିକ କାଢ଼ିଦେଇଥାଏ।"</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"ଫୋଟୋ ଓ ଭିଡିଓଗୁଡ଼ିକ କାଢ଼ିଦିଅନ୍ତୁ"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"ଷ୍ଟୋରେଜ୍ ମ୍ୟାନେଜର୍"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"ଷ୍ଟୋରେଜ୍ ମ୍ୟାନେଜର୍କୁ ବ୍ୟବହାର କରନ୍ତୁ"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"ଷ୍ଟୋରେଜ୍ ମ୍ୟାନେଜର୍ ବ୍ୟବହାର କରନ୍ତୁ"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"ଅଟୋମେଟିକ୍"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"ମାନୁଆଲ୍"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"ବର୍ତ୍ତମାନ ସ୍ପେସ୍ ଖାଲି କରନ୍ତୁ"</string>
@@ -4134,7 +4137,7 @@
<string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"ସମୟ, ବିଜ୍ଞପ୍ତି, ଏବଂ ଅନ୍ୟ ସୂଚନାର ଯାଞ୍ଚ କରିବା ପାଇଁ, ଆପଣଙ୍କ ସ୍କ୍ରିନ୍କୁ ଟାପ୍ କରନ୍ତୁ।"</string>
<string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"ବିଜ୍ଞପ୍ତି ପାଇଁ ଟିପଚିହ୍ନ ସ୍ୱାଇପ୍ କରନ୍ତୁ"</string>
<string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"ଟିପଚିହ୍ନ ସ୍ୱାଇପ୍ କରନ୍ତୁ"</string>
- <string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଦେଖିବା ପାଇଁ, ନିଜ ଫୋନ୍ ପଛପଟେ ଥିବା ଆଙ୍ଗୁଠି ଚିହ୍ନ ସେନ୍ସର୍ ଉପରେ ଆଙ୍ଗୁଠି ରଖି ତଳକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ।"</string>
+ <string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଦେଖିବା ପାଇଁ, ନିଜ ଫୋନ୍ ପଛପଟେ ଥିବା ଫିଙ୍ଗରପ୍ରିଣ୍ଟ ସେନ୍ସର୍ ଉପରେ ଆଙ୍ଗୁଠି ରଖି ତଳକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ।"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଦେଖିବା ପାଇଁ, ନିଜ ଡିଭାଇସ୍ ପଛପଟେ ଥିବା ଆଙ୍ଗୁଠି ଚିହ୍ନ ସେନ୍ସର୍ ଉପରେ ଆଙ୍ଗୁଠି ରଖି ତଳକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ।"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="7950264130913070035">"ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଦେଖିବା ପାଇଁ, ନିଜ ଫୋନ୍ ପଛପଟେ ଥିବା ଟିପଚିହ୍ନ ସେନ୍ସର୍ ଉପରେ ଆଙ୍ଗୁଠି ରଖି ତଳକୁ ସ୍ୱାଇପ୍ କରନ୍ତୁ।"</string>
<string name="fingerprint_swipe_for_notifications_suggestion_title" msgid="948946491233738823">"ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ତୁରନ୍ତ ଦେଖନ୍ତୁ"</string>
@@ -4232,11 +4235,11 @@
</plurals>
<string name="app_names_concatenation_template_2" msgid="8267577900046506189">"<xliff:g id="FIRST_APP_NAME">%1$s</xliff:g>, <xliff:g id="SECOND_APP_NAME">%2$s</xliff:g>"</string>
<string name="app_names_concatenation_template_3" msgid="5129064036161862327">"<xliff:g id="FIRST_APP_NAME">%1$s</xliff:g>, <xliff:g id="SECOND_APP_NAME">%2$s</xliff:g>, <xliff:g id="THIRD_APP_NAME">%3$s</xliff:g>"</string>
- <string name="storage_photos_videos" msgid="1890829312367477559">"ଫଟୋ ଓ ଭିଡ଼ିଓ"</string>
+ <string name="storage_photos_videos" msgid="1890829312367477559">"ଫଟୋ ଓ ଭିଡିଓ"</string>
<string name="storage_music_audio" msgid="3661289086715297149">"ମ୍ୟୁଜିକ୍ ଓ ଅଡିଓ"</string>
<string name="storage_games" msgid="7740038143749092373">"ଗେମ୍"</string>
- <string name="storage_other_apps" msgid="3202407095387420842">"ଅନ୍ୟାନ୍ୟ ଆପ୍"</string>
- <string name="storage_files" msgid="2087824267937487880">"ଫାଇଲ୍"</string>
+ <string name="storage_other_apps" msgid="3202407095387420842">"ଅନ୍ୟ ଆପ୍ସ"</string>
+ <string name="storage_files" msgid="2087824267937487880">"Files"</string>
<string name="storage_size_large_alternate" msgid="1317796542509105857">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" "<font size="20">"<xliff:g id="UNIT">^2</xliff:g>"</font></small>""</string>
<string name="storage_volume_total" msgid="5021484171514159913">"<xliff:g id="TOTAL">%1$s</xliff:g>ରୁ ବ୍ୟବହୃତ ହୋଇଛି"</string>
<string name="storage_percent_full" msgid="6924662861545958442">"ବ୍ୟବହୃତ"</string>
@@ -4307,7 +4310,7 @@
<string name="change_wifi_state_title" msgid="5140754955787584174">"ୱାଇ-ଫାଇର ନିୟନ୍ତ୍ରଣ"</string>
<string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"ୱାଇ-ଫାଇକୁ ନିୟନ୍ତ୍ରଣ କରିବା ପାଇଁ ଆପ୍କୁ ଅନୁମତି ଦିଅନ୍ତୁ"</string>
<string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"ୱାଇ-ଫାଇକୁ ଚାଲୁ କରିବା କିମ୍ବା ବନ୍ଦ କରିବା, ୱାଇ-ଫାଇ ନେଟୱର୍କକୁ ଖୋଜିବା ଓ କନେକ୍ଟ କରିବା, ନେଟୱର୍କକୁ ଯୋଡ଼ିବା କିମ୍ବା କାଢ଼ିଦେବା କିମ୍ବା କେବଳ ସୀମିତ କ୍ଷେତ୍ରରେ କାମ କରୁଥିବା ହଟସ୍ପଟ୍କୁ ଚାଲୁ କରିବା ପାଇଁ ଏହି ଆପ୍କୁ ଅନୁମତି ଦେବା"</string>
- <string name="media_output_title" msgid="8710632337456601848">"ମିଡିଆ ଚଲାନ୍ତୁ"</string>
+ <string name="media_output_title" msgid="8710632337456601848">"ଏଥିରେ ମିଡିଆ ଚଲାନ୍ତୁ"</string>
<string name="media_output_default_summary" msgid="3159237976830415584">"ଏହି ଡିଭାଇସ୍"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"ଫୋନ୍"</string>
<string name="media_output_summary" product="tablet" msgid="6672024060360538526">"ଟାବଲେଟ୍"</string>
@@ -4326,8 +4329,8 @@
<string name="prevent_ringing_option_vibrate" msgid="6456505293904544108">"କମ୍ପନ"</string>
<string name="prevent_ringing_option_mute" msgid="53662688921253613">"ମ୍ୟୁଟ୍ କରନ୍ତୁ"</string>
<string name="prevent_ringing_option_none" msgid="1450985763137666231">"କିଛି କରନ୍ତୁ ନାହିଁ"</string>
- <string name="prevent_ringing_option_vibrate_summary" msgid="7961818570574683926">"(ଭାଇବ୍ରେଟ୍) ଅନ୍ ଅଛି"</string>
- <string name="prevent_ringing_option_mute_summary" msgid="3509459199090688328">"(ମ୍ୟୁଟ୍) ଅନ୍ ଅଛି"</string>
+ <string name="prevent_ringing_option_vibrate_summary" msgid="7961818570574683926">"ଚାଲୁ (ଭାଇବ୍ରେଟ୍)"</string>
+ <string name="prevent_ringing_option_mute_summary" msgid="3509459199090688328">"ଚାଲୁ (ମ୍ୟୁଟ୍)"</string>
<string name="prevent_ringing_option_none_summary" msgid="5152618221093037451">"ଅଫ୍"</string>
<string name="pref_title_network_details" msgid="3971074015034595956">"ନେଟୱାର୍କ୍ ବିବରଣୀ"</string>
<string name="about_phone_device_name_warning" msgid="9088572775969880106">"ଆପଣଙ୍କ ଡିଭାଇସ୍ରେ ଥିବା ଆପ୍ଗୁଡ଼ିକୁ ଆପଣଙ୍କର ଡିଭାଇସ୍ ନାମ ଦେଖାଯାଉଛି। ବ୍ଲୁଟୂଥ୍ ଡିଭାଇସ୍ ସହ ଯୋଡ଼ି ହେବାବେଳେ କିମ୍ୱା ଏକ ୱାଇ-ଫାଇ ହଟସ୍ପଟ୍ ସେଟ୍ କରିବା ସମୟରେ, ଏହା ଅନ୍ୟ ଲୋକମାନଙ୍କୁ ମଧ୍ୟ ଦେଖାଦେଇପାରେ।"</string>
@@ -4470,7 +4473,7 @@
<string name="privacy_dashboard_title" msgid="8764930992456607513">"ଗୋପନୀୟତା"</string>
<string name="privacy_dashboard_summary" msgid="7916431309860824945">"ଅନୁମତିଗୁଡ଼ିକ, ଆକାଉଣ୍ଟ କାର୍ଯ୍ୟକଳାପ, ବ୍ୟକ୍ତିଗତ ଡାଟା"</string>
<string name="contextual_card_dismiss_remove" msgid="1750420285615827309">"କାଢ଼ିଦିଅନ୍ତୁ"</string>
- <string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"ରଖନ୍ତୁ"</string>
+ <string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"Keep"</string>
<string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"ଏହି ମତାମତ କାଢ଼ିଦେବେ?"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"ସୁପାରିଶକୁ କାଢ଼ି ଦିଆଯାଇଛି"</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"ପୂର୍ବବତ୍ କରନ୍ତୁ"</string>
diff --git a/tests/CarDeveloperOptions/res/values-pa/arrays.xml b/tests/CarDeveloperOptions/res/values-pa/arrays.xml
index 4dba94f..fc6f1e9 100644
--- a/tests/CarDeveloperOptions/res/values-pa/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-pa/arrays.xml
@@ -29,8 +29,25 @@
<item msgid="5194868215515664953">"ਪ੍ਰਸ਼ਾਂਤ"</item>
<item msgid="7044520255415007865">"ਸਭ"</item>
</string-array>
- <!-- no translation found for screen_timeout_entries:0 (8596143519087753804) -->
- <!-- no translation found for dream_timeout_entries:7 (8271452751594598661) -->
+ <string-array name="screen_timeout_entries">
+ <item msgid="8596143519087753804">"15 ਸਕਿੰਟ"</item>
+ <item msgid="772029947136115322">"30 ਸਕਿੰਟ"</item>
+ <item msgid="8743663928349474087">"1 ਮਿੰਟ"</item>
+ <item msgid="1506508631223164814">"2 ਮਿੰਟ"</item>
+ <item msgid="8664703938127907662">"5 ਮਿੰਟ"</item>
+ <item msgid="5827960506924849753">"10 ਮਿੰਟ"</item>
+ <item msgid="6677424950124253938">"30 ਮਿੰਟ"</item>
+ </string-array>
+ <string-array name="dream_timeout_entries">
+ <item msgid="6487043225269853023">"ਕਦੇ ਵੀ ਨਹੀਂ"</item>
+ <item msgid="2517785806387977252">"15 ਸਕਿੰਟ"</item>
+ <item msgid="6347954399441173672">"30 ਸਕਿੰਟ"</item>
+ <item msgid="4858305253279921789">"1 ਮਿੰਟ"</item>
+ <item msgid="8109273437140044073">"2 ਮਿੰਟ"</item>
+ <item msgid="2788593551142462622">"5 ਮਿੰਟ"</item>
+ <item msgid="8012672183888404961">"10 ਮਿੰਟ"</item>
+ <item msgid="8271452751594598661">"30 ਮਿੰਟ"</item>
+ </string-array>
<string-array name="lock_after_timeout_entries">
<item msgid="2232921187970351881">"ਤੁਰੰਤ"</item>
<item msgid="2038544972632026612">"5 ਸਕਿੰਟ"</item>
@@ -42,17 +59,47 @@
<item msgid="811192536981678974">"10 ਮਿੰਟ"</item>
<item msgid="7258394417241706272">"30 ਮਿੰਟ"</item>
</string-array>
- <!-- no translation found for entries_font_size:0 (2340391964816059553) -->
- <!-- no translation found for entries_font_size:0 (6490061470416867723) -->
- <!-- no translation found for entries_font_size:2 (1714184661981538355) -->
- <!-- no translation found for entries_font_size:2 (1678068858001018666) -->
- <!-- no translation found for wifi_status:3 (5848277343965362748) -->
- <!-- no translation found for wifi_status_with_ssid:1 (6816207058895999545) -->
- <!-- no translation found for wifi_status_with_ssid:3 (7547609081339573756) -->
- <!-- no translation found for wifi_status_with_ssid:4 (5145158315060185414) -->
+ <string-array name="entries_font_size">
+ <item msgid="2340391964816059553">"ਛੋਟਾ"</item>
+ <item msgid="591935967183159581">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</item>
+ <item msgid="1714184661981538355">"ਵੱਡਾ"</item>
+ <item msgid="6195563047686707484">"ਸਭ ਤੋਂ ਵੱਡੀ"</item>
+ </string-array>
+ <string-array name="wifi_status">
+ <item msgid="1304883790721412351"></item>
+ <item msgid="4157625910392775808">"ਸਕੈਨ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ..."</item>
+ <item msgid="5597394826455877834">"ਕਨੈਕਟ ਕਰ ਰਿਹਾ ਹੈ…"</item>
+ <item msgid="5848277343965362748">"ਪ੍ਰਮਾਣਿਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</item>
+ <item msgid="3391238031431440676">"IP ਪਤਾ ਪ੍ਰਾਪਤ ਕਰ ਰਿਹਾ ਹੈ..."</item>
+ <item msgid="5257597310494000224">"ਕਨੈਕਟ ਹੈ"</item>
+ <item msgid="8472497592913050396">"ਮੁਅੱਤਲ ਕੀਤਾ"</item>
+ <item msgid="1228072488815999109">"ਡਿਸਕਨੈਕਟ ਕਰ ਰਿਹਾ ਹੈ..."</item>
+ <item msgid="7253087004422991731">"ਡਿਸਕਨੈਕਟ ਕੀਤਾ"</item>
+ <item msgid="4169850917304751227">"ਅਸਫਲ"</item>
+ <item msgid="6266658166690831131">"ਬਲੌਕ ਕੀਤੀਆਂ"</item>
+ <item msgid="4517230805854909775">"ਅਸਥਾਈ ਤੌਰ ਤੇ ਖ਼ਰਾਬ ਕਨੈਕਸ਼ਨ ਤੋਂ ਬਚਣ ਲਈ"</item>
+ </string-array>
+ <string-array name="wifi_status_with_ssid">
+ <item msgid="4853670665485437464"></item>
+ <item msgid="6816207058895999545">"ਸਕੈਨ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</item>
+ <item msgid="8058143476674427024">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਕਰ ਰਿਹਾ ਹੈ…"</item>
+ <item msgid="7547609081339573756">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> ਨਾਲ ਪ੍ਰਮਾਣਿਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</item>
+ <item msgid="5145158315060185414">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> ਤੋਂ IP ਪਤਾ ਪ੍ਰਾਪਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ…"</item>
+ <item msgid="3283243151651124831">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ"</item>
+ <item msgid="6600156231416890902">"ਮੁਅੱਤਲ ਕੀਤਾ"</item>
+ <item msgid="4133290864821295785">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> ਤੋਂ ਡਿਸਕਨੈਕਟ ਕਰ ਰਿਹਾ ਹੈ…"</item>
+ <item msgid="3980154971187953257">"ਡਿਸਕਨੈਕਟ ਕੀਤਾ"</item>
+ <item msgid="2847316776634969068">"ਅਸਫਲ"</item>
+ <item msgid="4390990424746035383">"ਬਲੌਕ ਕੀਤੀਆਂ"</item>
+ <item msgid="3618248791367063949">"ਅਸਥਾਈ ਤੌਰ ਤੇ ਖ਼ਰਾਬ ਕਨੈਕਸ਼ਨ ਤੋਂ ਬਚਣ ਲਈ"</item>
+ </string-array>
<!-- no translation found for wifi_tether_security:0 (5586343370515598801) -->
<!-- no translation found for wifi_tether_security:1 (6136336549994615745) -->
- <!-- no translation found for wifi_p2p_wps_setup:0 (5390235347963255303) -->
+ <string-array name="wifi_p2p_wps_setup">
+ <item msgid="5390235347963255303">"ਪੁਸ਼ ਬਟਨ"</item>
+ <item msgid="7401896200768713930">"ਪੀਅਰ ਡੀਵਾਈਸ ਤੋਂ ਪਿੰਨ"</item>
+ <item msgid="4526848028011846710">"ਇਸ ਡੀਵਾਈਸ ਤੋਂ ਪਿੰਨ"</item>
+ </string-array>
<string-array name="wifi_p2p_status">
<item msgid="8741947238021758201">"ਕਨੈਕਟ ਹੈ"</item>
<item msgid="983792611851499732">"ਸੱਦੇ ਗਏ"</item>
@@ -60,7 +107,12 @@
<item msgid="4646663015449312554">"ਉਪਲਬਧ"</item>
<item msgid="3230556734162006146">"ਰੇਂਜ-ਤੋਂ-ਬਾਹਰ"</item>
</string-array>
- <!-- no translation found for bluetooth_visibility_timeout_entries:1 (2759776603549270587) -->
+ <string-array name="bluetooth_visibility_timeout_entries">
+ <item msgid="8247986727324120082">"2 ਮਿੰਟ"</item>
+ <item msgid="2759776603549270587">"5 ਮਿੰਟ"</item>
+ <item msgid="167772676068860015">"1 ਘੰਟਾ"</item>
+ <item msgid="5985477119043628504">"ਕਦੇ ਵੀ ਸਮਾਂ ਸਮਾਪਤ ਨਹੀਂ"</item>
+ </string-array>
<string-array name="bluetooth_max_connected_audio_devices">
<item msgid="3800257971619063588">"ਸਿਸਟਮ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਮੁੱਲ ਵਰਤੋ: <xliff:g id="DEFAULT_BLUETOOTH_MAX_CONNECTED_AUDIO_DEVICES">%1$d</xliff:g>"</item>
<item msgid="8572230405241423895">"1"</item>
@@ -69,8 +121,13 @@
<item msgid="1644506614010085798">"4"</item>
<item msgid="3132506679404897150">"5"</item>
</string-array>
- <!-- no translation found for wifi_signal:1 (7882129634982603782) -->
- <!-- no translation found for wifi_signal:4 (999948812884919584) -->
+ <string-array name="wifi_signal">
+ <item msgid="1709949377823900951">"ਕਮਜ਼ੋਰ"</item>
+ <item msgid="7882129634982603782">"ਕਮਜ਼ੋਰ"</item>
+ <item msgid="6457357501905996224">"ਠੀਕ-ਠਾਕ"</item>
+ <item msgid="405271628162918841">"ਵਧੀਆ"</item>
+ <item msgid="999948812884919584">"ਸ਼ਾਨਦਾਰ"</item>
+ </string-array>
<string-array name="data_usage_data_range">
<item msgid="8986775481492954015">"ਪਿਛਲੇ 30 ਦਿਨ"</item>
<item msgid="3211287705232736964">"ਵਰਤੋਂ ਸਾਈਕਲ ਸੈੱਟ ਕਰੋ..."</item>
@@ -106,11 +163,14 @@
<item msgid="7330627471456865502">"MSCHAPV2"</item>
<item msgid="6255179395132581882">"GTC"</item>
</string-array>
- <!-- no translation found for wifi_ip_settings:1 (4377002609760712163) -->
+ <string-array name="wifi_ip_settings">
+ <item msgid="2717196390555072244">"DHCP"</item>
+ <item msgid="4377002609760712163">"ਸਥਿਰ"</item>
+ </string-array>
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"ਕੋਈ ਨਹੀਂ"</item>
<item msgid="1464741437353223198">"ਮੈਨੁਅਲ"</item>
- <item msgid="5793600062487886090">"ਪ੍ਰੌਕਸੀ ਆਟੋ-ਕੌਂਫਿਗਰ"</item>
+ <item msgid="5793600062487886090">"ਪ੍ਰੌਕਸੀ ਸਵੈ-ਸੰਰੂਪਣ"</item>
</string-array>
<string-array name="apn_auth_entries">
<item msgid="7099647881902405997">"ਕੋਈ ਨਹੀਂ"</item>
@@ -226,11 +286,73 @@
<item msgid="1165623660533024666">"ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਚਲਾਓ"</item>
<item msgid="6423861043647911030">"ਪਹੁੰਚਯੋਗਤਾ ਅਵਾਜ਼"</item>
</string-array>
- <!-- no translation found for app_ops_labels:3 (7836406246005211990) -->
- <!-- no translation found for app_ops_labels:4 (3951439024549922598) -->
- <!-- no translation found for app_ops_labels:8 (3597797992398484655) -->
- <!-- no translation found for app_ops_labels:20 (3037159047591081136) -->
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"ਟਿਕਾਣਾ"</item>
+ <item msgid="6656077694190491067">"ਟਿਕਾਣਾ"</item>
+ <item msgid="8790228218278477369">"ਟਿਕਾਣਾ"</item>
+ <item msgid="7836406246005211990">"ਥਰਥਰਾਹਟ"</item>
+ <item msgid="3951439024549922598">"ਸੰਪਰਕ ਪੜ੍ਹੋ"</item>
+ <item msgid="8802152411647068">"ਸੰਪਰਕ ਸੰਸ਼ੋਧਿਤ ਕਰੋ"</item>
+ <item msgid="229544934599698735">"ਕਾਲ ਲੌਗ ਪੜ੍ਹੋ"</item>
+ <item msgid="7396102294405899613">"ਕਾਲ ਲੌਗ ਸੰਸ਼ੋਧਿਤ ਕਰੋ"</item>
+ <item msgid="3597797992398484655">"ਕੈਲੰਡਰ ਪੜ੍ਹੋ"</item>
+ <item msgid="2705975774250907343">"ਕੈਲੰਡਰ ਸੰਸ਼ੋਧਿਤ ਕਰੋੇ"</item>
+ <item msgid="4668747371441932697">"ਟਿਕਾਣਾ"</item>
+ <item msgid="1487578921720243646">"ਸੂਚਨਾ ਪੋਸਟ ਕਰੋ"</item>
+ <item msgid="4636080349724146638">"ਟਿਕਾਣਾ"</item>
+ <item msgid="673510900286463926">"ਫ਼ੋਨ ਤੇ ਕਾਲ ਕਰੋ"</item>
+ <item msgid="542083422784609790">"SMS/MMS ਪੜ੍ਹੋ"</item>
+ <item msgid="1033780373029588436">"SMS/MMS ਲਿਖੋ"</item>
+ <item msgid="5647111115517787488">"SMS/MMS ਪ੍ਰਾਪਤ ਕਰੋ"</item>
+ <item msgid="8591105601108455893">"SMS/MMS ਪ੍ਰਾਪਤ ਕਰੋ"</item>
+ <item msgid="7730995008517841903">"SMS/MMS ਪ੍ਰਾਪਤ ਕਰੋ"</item>
+ <item msgid="2613033109026626086">"SMS/MMS ਪ੍ਰਾਪਤ ਕਰੋ"</item>
+ <item msgid="3037159047591081136">"SMS/MMS ਭੇਜੋ"</item>
+ <item msgid="4726682243833913568">"SMS/MMS ਪੜ੍ਹੋ"</item>
+ <item msgid="6555678522277865572">"SMS/MMS ਲਿਖੋ"</item>
+ <item msgid="6981734935578130884">"ਸੈਟਿੰਗਾਂ ਬਦਲੋ"</item>
+ <item msgid="8705854389991425629">"ਟੌਪ ਤੇ ਡ੍ਰਾ ਕਰੋ"</item>
+ <item msgid="5861356020344153651">"ਪਹੁੰਚ ਸੂਚਨਾਵਾਂ"</item>
+ <item msgid="78432174621628659">"ਕੈਮਰਾ"</item>
+ <item msgid="3986116419882154794">" ਆਡੀਓ ਰਿਕਾਰਡ ਕਰੋ"</item>
+ <item msgid="4516840825756409490">" ਆਡੀਓ ਪਲੇ ਕਰੋ"</item>
+ <item msgid="6811712502798183957">"ਕਲਿਪਬੋਰਡ ਪੜ੍ਹੋ"</item>
+ <item msgid="2780369012602289114">"ਕਲਿਪਬੋਰਡ ਬਦਲੋ"</item>
+ <item msgid="2331359440170850868">"ਮੀਡੀਆ ਬਟਨ"</item>
+ <item msgid="6133599737122751231">" ਆਡੀਓ ਫੋਕਸ"</item>
+ <item msgid="6844485713404805301">"ਮਾਸਟਰ ਵੌਲਿਊਮ"</item>
+ <item msgid="1600379420669104929">"ਵੌਇਸ ਵੌਲਿਊਮ"</item>
+ <item msgid="6296768210470214866">"ਰਿੰਗ ਦੀ ਅਵਾਜ਼"</item>
+ <item msgid="510690696071629241">"ਮੀਡੀਆ ਦੀ ਅਵਾਜ਼"</item>
+ <item msgid="406861638631430109">"ਅਲਾਰਮ ਦੀ ਅਵਾਜ਼"</item>
+ <item msgid="4715864795872233884">"ਸੂਚਨਾ ਵੌਲਿਊਮ"</item>
+ <item msgid="2311478519251301183">"Bluetooth ਵੌਲਿਊਮ"</item>
+ <item msgid="5133991377896747027">"ਸਕਿਰਿਆ ਰੱਖੋ"</item>
+ <item msgid="2464189519136248621">"ਟਿਕਾਣਾ"</item>
+ <item msgid="2062677934050803037">"ਟਿਕਾਣਾ"</item>
+ <item msgid="1735171933192715957">"ਵਰਤੋਂ ਸਟੈਟਸ ਪ੍ਰਾਪਤ ਕਰੋ"</item>
+ <item msgid="1014093788778383554">"ਮਾਈਕ੍ਰੋਫੋਨ ਨੂੰ ਮਿਊਟ/ਅਨਮਿਊਟ ਕਰੋ"</item>
+ <item msgid="4199297950608622850">"ਟੋਸਟ ਦਿਖਾਓ"</item>
+ <item msgid="2527962435313398821">"ਪ੍ਰੋਜੈਕਟ ਮੀਡੀਆ"</item>
+ <item msgid="5117506254221861929">"VPN ਨੂੰ ਸਰਗਰਮ ਕਰੋ"</item>
+ <item msgid="8291198322681891160">"ਵਾਲਪੇਪਰ ਲਿਖੋ"</item>
+ <item msgid="7106921284621230961">"ਸਹਾਇਕ ਬਣਤਰ"</item>
+ <item msgid="4496533640894624799">"ਸਹਾਇਕ ਸਕਰੀਨਸ਼ਾਟ"</item>
+ <item msgid="2598847264853993611">"ਫ਼ੋਨ ਸਥਿਤੀ ਪੜ੍ਹੋ"</item>
+ <item msgid="9215610846802973353">"ਵੌਇਸਮੇਲ ਸ਼ਾਮਲ ਕਰੋ"</item>
+ <item msgid="9186411956086478261">"SIP ਵਰਤੋ"</item>
+ <item msgid="6884763100104539558">"ਆਊਟਗੋਇੰਗ ਕਾਲ \'ਤੇ ਪ੍ਰਕਿਰਿਆ ਕਰੋ"</item>
+ <item msgid="125513972170580692">"ਫਿੰਗਰਪ੍ਰਿੰਟ"</item>
+ <item msgid="2556071024281275619">"ਸਰੀਰ ਸੰਵੇਦਕ"</item>
+ <item msgid="617168514928339387">"ਸੈਲ ਪ੍ਰਸਾਰਨਾਂ ਨੂੰ ਪੜ੍ਹੋ"</item>
+ <item msgid="7134693570516523585">"ਬਣਾਉਟੀ ਟਿਕਾਣਾ"</item>
+ <item msgid="7224489175375229399">"ਸਟੋਰੇਜ ਪੜ੍ਹੋ"</item>
+ <item msgid="8472735063903258202">"ਸਟੋਰੇਜ ਲਿਖੋ"</item>
+ <item msgid="4069276819909595110">"ਸਕਰੀਨ ਚਾਲੂ ਕਰੋ"</item>
+ <item msgid="1228338896751121025">"ਖਾਤੇ ਲਓ"</item>
+ <item msgid="3181581793459233672">"ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਚਲਾਓ"</item>
+ <item msgid="2340936043025374076">"ਪਹੁੰਚਯੋਗਤਾ ਅਵਾਜ਼"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"ਘੱਟ"</item>
<item msgid="4816511817309094890">"ਔਸਤ"</item>
@@ -247,15 +369,35 @@
<item msgid="4627069151979553527">"ਪ੍ਰਵਾਹੀ ਲਿਖਤ"</item>
<item msgid="6896773537705206194">"ਛੋਟੇ ਕੈਪੀਟਲਸ"</item>
</string-array>
- <!-- no translation found for captioning_font_size_selector_titles:3 (2784236342175159295) -->
- <!-- no translation found for captioning_edge_type_selector_titles:4 (8019330250538856521) -->
+ <string-array name="captioning_font_size_selector_titles">
+ <item msgid="1680223634161592855">"ਬਹੁਤ ਛੋਟਾ"</item>
+ <item msgid="5091603983404027034">"ਛੋਟਾ"</item>
+ <item msgid="176844712416932112">"ਸਧਾਰਨ"</item>
+ <item msgid="2784236342175159295">"ਵੱਡਾ"</item>
+ <item msgid="218913203203160606">"ਬਹੁਤ ਵੱਡਾ"</item>
+ </string-array>
+ <string-array name="captioning_edge_type_selector_titles">
+ <item msgid="3865198759294188069">"ਪੂਰਵ-ਨਿਰਧਾਰਤ"</item>
+ <item msgid="6488643537808152001">"ਕੋਈ ਨਹੀਂ"</item>
+ <item msgid="552332815156010137">"ਰੂਪਰੇਖਾ"</item>
+ <item msgid="7187891159463789272">"ਡ੍ਰੌਪ ਸ਼ੈਡੋ"</item>
+ <item msgid="8019330250538856521">"ਉਭਰੇ ਹੋਏ ਕਿਨਾਰੇ"</item>
+ <item msgid="8987385315647049787">"ਨਿਰਾਸ਼"</item>
+ </string-array>
<string-array name="captioning_opacity_selector_titles">
<item msgid="313003243371588365">"25%"</item>
<item msgid="4665048002584838262">"50%"</item>
<item msgid="1874668269931014581">"75%"</item>
<item msgid="6462911487571123954">"100%"</item>
</string-array>
- <!-- no translation found for captioning_preset_selector_titles:2 (5891360837786277638) -->
+ <string-array name="captioning_preset_selector_titles">
+ <item msgid="326819345272910536">"ਐਪ ਵੱਲੋਂ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਵਰਤੋ"</item>
+ <item msgid="8611890312638868524">"ਕਾਲੇ \'ਤੇ ਸਫ਼ੈਦ"</item>
+ <item msgid="5891360837786277638">"ਸਫ਼ੈਦ ਉੱਤੇ ਕਾਲਾ"</item>
+ <item msgid="2798457065945456853">"ਕਾਲੇ \'ਤੇ ਪੀਲਾ"</item>
+ <item msgid="5799049811524553967">"ਨੀਲੇ \'ਤੇ ਪੀਲਾ"</item>
+ <item msgid="3673930830658169860">"ਵਿਉਂਤੀ"</item>
+ </string-array>
<string-array name="vpn_types_long">
<item msgid="6566768880689730097">"PPTP VPN"</item>
<item msgid="1349760781118368659">"ਪ੍ਰੀ-ਸ਼ੇਅਰ ਕੀਤੀਆਂ ਕੁੰਜੀਆਂ ਨਾਲ L2TP/IPSec VPN"</item>
@@ -264,16 +406,36 @@
<item msgid="3319427315593649917">"ਸਰਟੀਫਿਕੇਟਾਂ ਨਾਲ IPSec VPN ਅਤੇ Xauth ਪ੍ਰਮਾਣੀਕਰਨ"</item>
<item msgid="8258927774145391041">"ਸਰਟੀਫਿਕੇਟਾਂ ਅਤੇ ਹਾਈਬ੍ਰਿਡ ਪ੍ਰਮਾਣੀਕਰਨ ਨਾਲ IPSec VPN"</item>
</string-array>
- <!-- no translation found for vpn_proxy_settings:0 (2958623927055120839) -->
- <!-- no translation found for vpn_states:4 (9135049670787351881) -->
+ <string-array name="vpn_proxy_settings">
+ <item msgid="2958623927055120839">"ਕੋਈ ਨਹੀਂ"</item>
+ <item msgid="1157046369795346308">"ਮੈਨੁਅਲ"</item>
+ </string-array>
+ <string-array name="vpn_states">
+ <item msgid="5408915841694583740">"ਡਿਸਕਨੈਕਟ ਕੀਤਾ"</item>
+ <item msgid="8754480102834556765">"ਅਰੰਭ ਕਰ ਰਿਹਾ ਹੈ..."</item>
+ <item msgid="3351334355574270250">"ਕਨੈਕਟ ਕਰ ਰਿਹਾ ਹੈ…"</item>
+ <item msgid="8303882153995748352">"ਕਨੈਕਟ ਹੈ"</item>
+ <item msgid="9135049670787351881">"ਸਮਾਂ ਸਮਾਪਤ"</item>
+ <item msgid="2124868417182583926">"ਅਸਫਲ"</item>
+ </string-array>
<string-array name="security_settings_premium_sms_values">
<item msgid="1164265643455394443">"ਪੁੱਛੋ"</item>
<item msgid="7718817231348607934">"ਕਦੇ ਵੀ ਆਗਿਆ ਨਾ ਦਿਓ"</item>
<item msgid="8184570120217958741">"ਹਮੇਸ਼ਾਂ ਆਗਿਆ ਦਿਓ"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"ਸਧਾਰਨ"</item>
+ <item msgid="5101233285497327432">"ਮੱਧ"</item>
+ <item msgid="1555861583162930714">"ਘੱਟ"</item>
+ <item msgid="1719683776264798117">"ਸਮਾਲੋਚਨਾਤਮਿਕ"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"ਸਧਾਰਨ"</item>
+ <item msgid="6107138933849816768">"ਮੱਧ"</item>
+ <item msgid="182695359839047859">"ਘੱਟ"</item>
+ <item msgid="8577246509202964244">"ਸਮਾਲੋਚਨਾਤਮਿਕ"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"ਸਥਿਰ"</item>
<item msgid="167418068739176448">"ਟੌਪ ਗਤੀਵਿਧੀ"</item>
@@ -291,9 +453,9 @@
<item msgid="6248998242443333892">"ਕੈਚ ਕੀਤੀ (ਖਾਲੀ)"</item>
</string-array>
<string-array name="color_picker">
- <item msgid="3151827842194201728">"Teal"</item>
+ <item msgid="3151827842194201728">"ਟੀਲ"</item>
<item msgid="3228505970082457852">"ਨੀਲਾ"</item>
- <item msgid="6590260735734795647">"Indigo"</item>
+ <item msgid="6590260735734795647">"ਗੂੜ੍ਹਾ ਨੀਲਾ"</item>
<item msgid="3521763377357218577">"ਜਾਮਨੀ"</item>
<item msgid="5932337981182999919">"ਗੁਲਾਬੀ"</item>
<item msgid="5642914536624000094">"ਲਾਲ"</item>
diff --git a/tests/CarDeveloperOptions/res/values-pa/strings.xml b/tests/CarDeveloperOptions/res/values-pa/strings.xml
index 19e5809..e6d7f7c 100644
--- a/tests/CarDeveloperOptions/res/values-pa/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-pa/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"ਸਕ੍ਰੀਨ \'ਤੇ ਦਿਖਦੀ ਲਿਖਤ ਨੂੰ ਛੋਟਾ ਜਾਂ ਵੱਡਾ ਕਰੋ।"</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"ਛੋਟਾ ਕਰੋ"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"ਵੱਡਾ ਕਰੋ"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"ਨਮੂਨਾ ਲਿਖਤ"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"ਔਜ਼ ਦਾ ਨਿਰਾਲਾ ਵਿਜ਼ਾਰਡ"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"ਪਾਠ 11: ਔਜ਼ ਦਾ ਹੀਰਿਆਂ-ਪੰਨਿਆਂ ਵਾਲਾ ਨਿਰਾਲਾ ਸ਼ਹਿਰ"</string>
@@ -100,7 +99,7 @@
<string name="bluetooth_visibility_timeout" msgid="4804679276398564496">"ਦ੍ਰਿਸ਼ਟਤਾ ਦਾ ਸਮਾਂ ਸਮਾਪਤ"</string>
<string name="bluetooth_lock_voice_dialing" msgid="1600385868298081015">" ਲਾਕ ਵੌਇਸ ਡਾਇਲਿੰਗ"</string>
<string name="bluetooth_lock_voice_dialing_summary" msgid="5005776616112427980">"ਜਦੋਂ ਸਕ੍ਰੀਨ ਲਾਕ ਕੀਤੀ ਹੋਵੇ ਤਾਂ bluetooth ਡਾਇਲਰ ਦੀ ਵਰਤੋਂ ਰੋਕੋ"</string>
- <string name="bluetooth_devices" msgid="4143880830505625666">"ਬਲੂਟੁੱਥ ਡਿਵਾਈਸਾਂ"</string>
+ <string name="bluetooth_devices" msgid="4143880830505625666">"ਬਲੂਟੁੱਥ ਡੀਵਾਈਸਾਂ"</string>
<string name="bluetooth_device_name" msgid="3682016026866302981">"ਡੀਵਾਈਸ ਦਾ ਨਾਮ"</string>
<string name="bluetooth_device_details" msgid="2500840679106321361">"ਡੀਵਾਈਸ ਸੈਟਿੰਗਾਂ"</string>
<string name="bluetooth_profile_details" msgid="1785505059738682493">"ਪ੍ਰੋਫਾਈਲ ਸੈਟਿੰਗਾਂ"</string>
@@ -195,7 +194,7 @@
<string name="intent_sender_resource_label" msgid="8002433688075847091">"<xliff:g id="RESOURCE">Resource</xliff:g>:"</string>
<string name="intent_sender_account_label" msgid="7904284551281213567">"ਖਾਤਾ:"</string>
<string name="proxy_settings_title" msgid="6014901859338211713">"ਪ੍ਰੌਕਸੀ"</string>
- <string name="proxy_clear_text" msgid="498317431076294101">"ਹਟਾਓ"</string>
+ <string name="proxy_clear_text" msgid="498317431076294101">"ਕਲੀਅਰ ਕਰੋ"</string>
<string name="proxy_port_label" msgid="8285157632538848509">"ਪ੍ਰੌਕਸੀ ਪੋਰਟ"</string>
<string name="proxy_exclusionlist_label" msgid="8179084955547941904">"ਇਸ ਲਈ ਪ੍ਰੌਕਸੀ ਬਾਈਪਾਸ ਕਰੋ"</string>
<string name="proxy_defaultView_text" msgid="5785775257042403261">"ਡਿਫੌਲਟਸ ਰੀਸਟੋਰ ਕਰੋ"</string>
@@ -364,12 +363,12 @@
<string name="owner_info_settings_summary" msgid="4208702251226725583">"ਕੋਈ ਨਹੀਂ"</string>
<string name="owner_info_settings_status" msgid="8049975536717685126">"<xliff:g id="COUNT_0">%1$d</xliff:g> / <xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
<string name="owner_info_settings_edit_text_hint" msgid="2250029417257939706">"ਉਦਾਹਰਨ ਵਜੋਂ, ਜੋਏ ਦਾ Android."</string>
- <string name="user_info_settings_title" msgid="1125111518759995748">"ਉਪਭੋਗਤਾ ਜਾਣਕਾਰੀ"</string>
+ <string name="user_info_settings_title" msgid="1125111518759995748">"ਵਰਤੋਂਕਾਰ ਜਾਣਕਾਰੀ"</string>
<string name="show_profile_info_on_lockscreen_label" msgid="5204282771893683026">" ਲਾਕ ਸਕ੍ਰੀਨ ਤੇ ਪ੍ਰੋਫਾਈਲ ਜਾਣਕਾਰੀ ਦਿਖਾਓ"</string>
<string name="profile_info_settings_title" msgid="4855892878512562551">"ਪ੍ਰੋਫਾਈਲ ਜਾਣਕਾਰੀ"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"ਖਾਤੇ"</string>
<string name="location_settings_title" msgid="2707201457572301030">"ਟਿਕਾਣਾ"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"ਟਿਕਾਣੇ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"ਟਿਕਾਣਾ ਵਰਤੋ"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"ਬੰਦ"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">ਚਾਲੂ - <xliff:g id="COUNT_1">%1$d</xliff:g> ਐਪ ਟਿਕਾਣੇ ਤੱਕ ਪਹੁੰਚ ਕਰ ਸਕਦੀ ਹੈ</item>
@@ -448,7 +447,7 @@
<string name="security_settings_fingerprint_enroll_introduction_cancel_setup" msgid="756928427429893070">"ਛੱਡੋ"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue_setup" msgid="4125977169169671144">"ਅੱਗੇ"</string>
<string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"ਕੀ ਫਿੰਗਰਪ੍ਰਿੰਟ ਛੱਡਣਾ ਹੈ?"</string>
- <string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੈੱਟਅੱਪ ਵਿੱਚ ਸਿਰਫ਼ ਇੱਕ ਜਾਂ ਦੋ ਮਿੰਟ ਲੱਗਦੇ ਹਨ। ਜੇਕਰ ਤੁਸੀਂ ਇਸ ਨੂੰ ਛੱਡ ਦਿੰਦੇ ਹੋ, ਤਾਂ ਤੁਸੀਂ ਬਾਅਦ ਵਿੱਚ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਜਾ ਕੇ ਆਪਣੇ ਫਿੰਗਰਪ੍ਰਿੰਟ ਸ਼ਾਮਲ ਕਰ ਸਕਦੇ ਹੋ।"</string>
+ <string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੈੱਟਅੱਪ ਵਿੱਚ ਸਿਰਫ਼ ਇੱਕ ਜਾਂ ਦੋ ਮਿੰਟ ਲੱਗਦੇ ਹਨ। ਜੇਕਰ ਤੁਸੀਂ ਇਸ ਨੂੰ ਛੱਡ ਦਿੰਦੇ ਹੋ, ਤਾਂ ਤੁਸੀਂ ਬਾਅਦ ਵਿੱਚ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਜਾ ਕੇ ਆਪਣਾ ਫਿੰਗਰਪ੍ਰਿੰਟ ਸ਼ਾਮਲ ਕਰ ਸਕਦੇ ਹੋ।"</string>
<string name="lock_screen_intro_skip_title" msgid="5307431665496346914">"ਕੀ ਸਕ੍ਰੀਨ ਲਾਕ ਨੂੰ ਛੱਡਣਾ ਹੈ?"</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="tablet" msgid="7553945981266845264">"ਡੀਵਾਈਸ ਸੁਰੱਖਿਆ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਚਾਲੂ ਨਹੀਂ ਕੀਤੀਆਂ ਜਾਣਗੀਆਂ। ਜੇਕਰ ਤੁਹਾਡਾ ਟੈਬਲੈੱਟ ਗੁੰਮ ਹੋ ਜਾਂਦਾ ਹੈ, ਚੋਰੀ ਹੋ ਜਾਂਦਾ ਹੈ ਜਾਂ ਰੀਸੈੱਟ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਤਾਂ ਤੁਸੀਂ ਹੋਰਾਂ ਨੂੰ ਇਸਦੀ ਵਰਤੋਂ ਕਰਨ ਤੋਂ ਰੋਕਣ ਵਿੱਚ ਅਸਮਰੱਥ ਹੋੋਵੋਗੇ।"</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="device" msgid="1378243257238015603">"ਡੀਵਾਈਸ ਸੁਰੱਖਿਆ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਚਾਲੂ ਨਹੀਂ ਕੀਤੀਆਂ ਜਾਣਗੀਆਂ। ਜੇਕਰ ਤੁਹਾਡਾ ਡੀਵਾਈਸ ਗੁੰਮ, ਚੋਰੀ ਹੋ ਜਾਂਦਾ ਹੈ ਜਾਂ ਰੀਸੈੱਟ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਤਾਂ ਤੁਸੀਂ ਹੋਰਾਂ ਨੂੰ ਇਸਦੀ ਵਰਤੋਂ ਕਰਨ ਤੋਂ ਰੋਕਣ ਵਿੱਚ ਅਸਮਰੱਥ ਹੋੋਵੋਗੇ।"</string>
@@ -460,15 +459,15 @@
<string name="go_back_button_label" msgid="7310586887969860472">"ਵਾਪਸ ਜਾਓ"</string>
<string name="skip_lock_screen_dialog_button_label" msgid="6706047245716780006">"ਛੱਡੋ"</string>
<string name="cancel_lock_screen_dialog_button_label" msgid="2534925227627658819">"ਰੱਦ ਕਰੋ"</string>
- <string name="security_settings_fingerprint_enroll_find_sensor_title" msgid="8909829699273726469">"ਸੈਂਸਰ ਨੂੰ ਸਪੱਰਸ਼ ਕਰੋ"</string>
+ <string name="security_settings_fingerprint_enroll_find_sensor_title" msgid="8909829699273726469">"ਸੈਂਸਰ ਨੂੰ ਸਪਰਸ਼ ਕਰੋ"</string>
<string name="security_settings_fingerprint_enroll_find_sensor_message" msgid="581120963079780740">"ਇਹ ਤੁਹਾਡੇ ਫ਼ੋਨ ਦੇ ਪਿਛਲੇ ਪਾਸੇ ਹੈ। ਆਪਣੀ ਪਹਿਲੀ ਉਂਗਲ ਦੀ ਵਰਤੋਂ ਕਰੋ।"</string>
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="7835824123269738540">"ਡੀਵਾਈਸ ਵਾਲੀ ਤਸਵੀਰ ਅਤੇ ਫਿੰਗਰਪ੍ਰਿੰਟ ਸੈਂਸਰ ਟਿਕਾਣਾ"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="3519748398694308901">"ਨਾਮ"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="3428927518029038956">"ਠੀਕ"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="4312297515772004580">"ਮਿਟਾਓ"</string>
- <string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"ਸੈਂਸਰ ਨੂੰ ਸਪੱਰਸ਼ ਕਰੋ"</string>
+ <string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"ਸੈਂਸਰ ਨੂੰ ਸਪਰਸ਼ ਕਰੋ"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"ਆਪਣੀ ਉਂਗਲ ਨੂੰ ਸੈਂਸਰ ’ਤੇ ਰੱਖੋ ਅਤੇ ਇੱਕ ਥਰਥਰਾਹਟ ਮਹਿਸੂਸ ਹੋਣ ਤੋਂ ਬਾਅਦ ਚੁੱਕ ਲਵੋ"</string>
- <string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"ਚੁੱਕੋ, ਫਿਰ ਦੁਬਾਰਾ ਸਪੱਰਸ਼ ਕਰੋ"</string>
+ <string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"ਚੁੱਕੋ, ਫਿਰ ਦੁਬਾਰਾ ਸਪਰਸ਼ ਕਰੋ"</string>
<string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"ਆਪਣੇ ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੇ ਵੱਖ-ਵੱਖ ਭਾਗਾਂ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਆਪਣੀ ਉਂਗਲ ਨੂੰ ਰੱਖਣਾ-ਚੁੱਕਣਾ ਜਾਰੀ ਰੱਖੋ"</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਸ਼ਾਮਲ ਹੋ ਗਿਆ"</string>
<string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"ਜਦ ਤੁਹਾਨੂੰ ਇਹ ਪ੍ਰਤੀਕ ਦਿਖਾਈ ਦਿੰਦਾ ਹੈ, ਤਾਂ ਪਛਾਣ ਵਾਸਤੇ ਜਾਂ ਖਰੀਦਾਂ ਨੂੰ ਮਨਜ਼ੂਰ ਕਰਨ ਲਈ ਆਪਣੇ ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
@@ -488,21 +487,21 @@
<string name="security_settings_fingerprint_enroll_done" msgid="4111289529758845926">"ਹੋ ਗਿਆ"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"ਓਹੋ, ਉਹ ਸੈਂਸਰ ਨਹੀਂ ਹੈ"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"ਫ਼ੋਨ ਦੇ ਪਿਛਲੇ ਪਾਸੇ ਸੈਂਸਰ ਨੂੰ ਸਪਰਸ਼ ਕਰੋ। ਪਹਿਲੀ ਉਂਗਲ ਵਰਤੋ।"</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"ਦਾਖਲਾ ਪੂਰਾ ਨਾ ਕੀਤਾ ਗਿਆ"</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"ਦਾਖਲਾ ਪੂਰਾ ਨਹੀਂ ਹੋਇਆ"</string>
<string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਦਾਖ਼ਲੇ ਦੀ ਸਮਾਂ ਸੀਮਾ ਪੂਰੀ ਹੋ ਗਈ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"ਫਿੰਗਰਪ੍ਰਿੰਟ ਦਾਖ਼ਲੇ ਨੇ ਕੰਮ ਨਹੀਂ ਕੀਤਾ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜਾਂ ਕੋਈ ਵੱਖਰੀ ਉਂਗਲ ਉਪਯੋਗ ਕਰੋ।"</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"ਇੱਕ ਹੋਰ ਸ਼ਾਮਲ ਕਰੋ"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"ਅੱਗੇ"</string>
<string name="security_settings_fingerprint_enroll_disclaimer" msgid="5831834311961551423">"ਤੁਹਾਡੇ ਫ਼ੋਨ ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਤੋਂ ਇਲਾਵਾ, ਤੁਸੀਂ ਖਰੀਦਾਰੀਆਂ ਅਤੇ ਐਪ ਪਹੁੰਚ ਨੂੰ ਪ੍ਰਮਾਣਿਤ ਕਰਨ ਲਈ ਆਪਣੇ ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੀ ਵਰਤੋਂ ਵੀ ਕਰ ਸਕਦੇ ਹੋ। "<annotation id="url">"ਹੋਰ ਜਾਣੋ"</annotation></string>
<string name="security_settings_fingerprint_enroll_disclaimer_lockscreen_disabled" msgid="7954742554236652690">" ਸਕ੍ਰੀਨ ਲਾਕ ਵਿਕਲਪ ਨੂੰ ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ। ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੀ ਸੰਸਥਾ ਦੇ ਪ੍ਰਸ਼ਾਸਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ। "<annotation id="admin_details">"ਹੋਰ ਵੇਰਵੇ"</annotation>\n\n"ਤੁਸੀਂ ਖਰੀਦਾਂ ਨੂੰ ਅਧਿਕਾਰਿਤ ਕਰਨ ਅਤੇ ਐਪ \'ਤੇ ਪਹੁੰਚ ਕਰਨ ਲਈ ਹਾਲੇ ਵੀ ਆਪਣੇ ਫਿੰਗਰਪ੍ਰਿੰਟ ਦੀ ਵਰਤੋਂ ਕਰ ਸਕਦੇ ਹੋ। "<annotation id="url">"ਹੋਰ ਜਾਣੋ"</annotation></string>
- <string name="security_settings_fingerprint_enroll_lift_touch_again" msgid="1670703069782212223">"ਉਂਗਲ ਚੁੱਕੋ, ਫਿਰ ਦੁਬਾਰਾ ਸੈਂਸਰ ਨੂੰ ਸਪੱਰਸ਼ ਕਰੋ"</string>
+ <string name="security_settings_fingerprint_enroll_lift_touch_again" msgid="1670703069782212223">"ਉਂਗਲ ਚੁੱਕੋ, ਫਿਰ ਦੁਬਾਰਾ ਸੈਂਸਰ ਨੂੰ ਸਪਰਸ਼ ਕਰੋ"</string>
<string name="fingerprint_add_max" msgid="2939393314646115661">"ਤੁਸੀਂ <xliff:g id="COUNT">%d</xliff:g> ਤੱਕ ਫਿੰਗਰਪ੍ਰਿੰਟ ਸ਼ਾਮਲ ਕਰ ਸਕਦੇ ਹੋ"</string>
<string name="fingerprint_intro_error_max" msgid="3247720976621039437">"ਤੁਸੀਂ ਫਿੰਗਰਪ੍ਰਿੰਟਾਂ ਦੀ ਅਧਿਕਤਮ ਸੰਖਿਆ ਨੂੰ ਸ਼ਾਮਲ ਕੀਤਾ ਹੋਇਆ ਹੈ"</string>
<string name="fingerprint_intro_error_unknown" msgid="3975674268256524015">"ਹੋਰ ਫਿੰਗਰਪ੍ਰਿੰਟਾਂ ਨੂੰ ਸ਼ਾਮਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ"</string>
<string name="fingerprint_last_delete_title" msgid="3104596858161269635">"ਕੀ ਸਾਰੇ ਫਿੰਗਰਪ੍ਰਿੰਟ ਹਟਾਉਣੇ ਹਨ?"</string>
<string name="fingerprint_delete_title" msgid="3120894112324235536">"\'<xliff:g id="FINGERPRINT_ID">%1$s</xliff:g>\' ਨੂੰ ਹਟਾਓ"</string>
<string name="fingerprint_delete_message" msgid="5895802741486967970">"ਕੀ ਤੁਸੀਂ ਇਸ ਫਿੰਗਰਪ੍ਰਿੰਟ ਨੂੰ ਮਿਟਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?"</string>
- <string name="fingerprint_last_delete_message" msgid="3346252479778971442">"ਤੁਸੀਂ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਅਣਲਾਕ ਕਰਨ, ਖਰੀਦਾਂ ਨੂੰ ਅਧਿਕਾਰਿਤ ਕਰਨ ਜਾਂ ਉਹਨਾਂ ਨਾਲ ਐਪਾਂ \'ਤੇ ਸਾਈਨ-ਇਨ ਕਰਨ ਲਈ ਆਪਣੇ ਫਿੰਗਰਪ੍ਰਿੰਟਾਂ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰ ਸਕੋਗੇ"</string>
+ <string name="fingerprint_last_delete_message" msgid="3346252479778971442">"ਤੁਸੀਂ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਅਣਲਾਕ ਕਰਨ, ਖਰੀਦਾਂ ਨੂੰ ਅਧਿਕਾਰਿਤ ਕਰਨ ਜਾਂ ਐਪਾਂ \'ਤੇ ਸਾਈਨ-ਇਨ ਕਰਨ ਲਈ ਆਪਣੇ ਫਿੰਗਰਪ੍ਰਿੰਟਾਂ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰ ਸਕੋਗੇ"</string>
<string name="fingerprint_last_delete_message_profile_challenge" msgid="5385095150532247025">"ਤੁਸੀਂ ਆਪਣੇ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਨੂੰ ਅਣਲਾਕ ਕਰਨ, ਖਰੀਦਾਂ ਨੂੰ ਅਧਿਕਾਰਿਤ ਕਰਨ ਜਾਂ ਕਾਰਜ ਐਪਾਂ \'ਤੇ ਸਾਈਨ-ਇਨ ਕਰਨ ਲਈ ਆਪਣੇ ਫਿੰਗਰਪ੍ਰਿੰਟਾਂ ਦੀ ਵਰਤੋਂ ਨਹੀਂ ਕਰ ਸਕੋਂਗੇ"</string>
<string name="fingerprint_last_delete_confirm" msgid="7984595457589664004">"ਹਾਂ, ਹਟਾਓ"</string>
<string name="crypt_keeper_settings_title" msgid="839783588093862748">"ਇਨਕ੍ਰਿਪਸ਼ਨ"</string>
@@ -730,7 +729,7 @@
<string name="bluetooth_settings" msgid="5228032727293770389">"ਬਲੂਟੁੱਥ"</string>
<string name="bluetooth_settings_title" msgid="7261244857456521825">"ਬਲੂਟੁੱਥ"</string>
<string name="bluetooth_settings_summary" msgid="1221689092429277887">"ਕਨੈਕਸ਼ਨ ਵਿਵਸਥਿਤ ਕਰੋ, ਡੀਵਾਈਸ ਨਾਮ ਅਤੇ ਖੋਜਯੋਗਤਾ ਸੈੱਟ ਕਰੋ"</string>
- <string name="bluetooth_pairing_request" msgid="7221745525632573125">"ਕੀ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ਦੇ ਨਾਲ ਜੋੜੀ ਬਣਾਉਣੀ ਹੈ?"</string>
+ <string name="bluetooth_pairing_request" msgid="7221745525632573125">"ਕੀ <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ਦੇ ਨਾਲ ਜੋੜਾਬੱਧ ਕਰਨਾ ਹੈ?"</string>
<string name="bluetooth_pairing_key_msg" msgid="1139230917419961975">"ਬਲੂਟੁੱਥ ਜੋੜਾਬੱਧਕਰਨ ਕੋਡ"</string>
<string name="bluetooth_enter_passkey_msg" msgid="6205151011298670207">"ਜੋੜਾਬੱਧ ਕਰਨ ਦਾ ਕੋਡ ਟਾਈਪ ਕਰੋ ਫਿਰ ਵਾਪਸ ਜਾਓ ਜਾਂ ਦਾਖਲ ਕਰੋ ਨੂੰ ਦਬਾਓ"</string>
<string name="bluetooth_enable_alphanumeric_pin" msgid="9138308197078115672">"ਪਿੰਨ ਵਿੱਚ ਅੱਖਰ ਜਾਂ ਚਿੰਨ੍ਹ ਹਨ"</string>
@@ -799,7 +798,7 @@
<string name="bluetooth_dock_settings_remember" msgid="5512957564380371067">"ਸੈਟਿੰਗਾਂ ਯਾਦ ਰੱਖੋ"</string>
<string name="bluetooth_max_connected_audio_devices_string" msgid="6799012540303500020">"ਵੱਧ ਤੋਂ ਵੱਧ ਕਨੈਕਟ ਕੀਤੇ ਬਲੂਟੁੱਥ ਆਡੀਓ ਡੀਵਾਈਸ"</string>
<string name="bluetooth_max_connected_audio_devices_dialog_title" msgid="6049527354499590314">"ਵੱਧ ਤੋਂ ਵੱਧ ਕਨੈਕਟ ਕੀਤੇ ਬਲੂਟੁੱਥ ਆਡੀਓ ਡੀਵਾਈਸ ਚੁਣੋ"</string>
- <string name="wifi_display_settings_title" msgid="8718182672694575456">"ਕਾਸਟ"</string>
+ <string name="wifi_display_settings_title" msgid="8718182672694575456">"ਕਾਸਟ ਕਰੋ"</string>
<string name="wifi_display_enable_menu_item" msgid="4578340247147692250">"ਵਾਇਰਲੈਸ ਡਿਸਪਲੇ ਚਾਲੂ ਕਰੋ"</string>
<string name="wifi_display_no_devices_found" msgid="186501729518830451">"ਨੇੜੇ ਕੋਈ ਡੀਵਾਈਸ ਨਹੀਂ ਮਿਲਿਆ।"</string>
<string name="wifi_display_status_connecting" msgid="3799827425457383349">"ਕਨੈਕਟ ਕਰ ਰਿਹਾ ਹੈ"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"ਵਾਈ‑ਫਾਈ"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"ਵਾਈ‑ਫਾਈ ਚਾਲੂ ਕਰੋ"</string>
<string name="wifi_settings" msgid="7486492317310514109">"ਵਾਈ‑ਫਾਈ"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"ਵਾਈ-ਫਾਈ ਵਰਤੋ"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"ਵਾਈ-ਫਾਈ ਵਰਤੋ"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"ਵਾਈ-ਫਾਈ ਸੈਟਿੰਗਾਂ"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"ਵਾਈ‑ਫਾਈ"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"ਵਾਇਰਲੈਸ ਐਕਸੈੱਸ ਪੁਆਇੰਟ ਸੈੱਟ ਅੱਪ & ਵਿਵਸਥਿਤ ਕਰੋ"</string>
@@ -849,7 +848,7 @@
<string name="wifi_in_airplane_mode" msgid="4729571191578262246">"ਏਅਰਪਲੇਨ ਮੋਡ ਵਿੱਚ"</string>
<string name="wifi_notify_open_networks" msgid="4782239203624619655">"ਖੁੱਲ੍ਹੇ ਨੈੱਟਵਰਕ ਦੀ ਸੂਚਨਾ"</string>
<string name="wifi_notify_open_networks_summary" msgid="1383681260705466715">"ਉੱਚ ਗੁਣਵੱਤਾ ਵਾਲਾ ਕੋਈ ਜਨਤਕ ਨੈੱਟਵਰਕ ਉਪਲਬਧ ਹੋਣ \'ਤੇ ਸੂਚਿਤ ਕਰੋ"</string>
- <string name="wifi_wakeup" msgid="4963732992164721548">"ਆਪਣੇ ਆਪ ਵਾਈ‑ਫਾਈ ਚਾਲੂ ਕਰੋ"</string>
+ <string name="wifi_wakeup" msgid="4963732992164721548">"ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਵਾਈ‑ਫਾਈ ਚਾਲੂ ਕਰੋ"</string>
<string name="wifi_wakeup_summary" msgid="1152699417411690">"ਤੁਹਾਡੇ ਘਰੇਲੂ ਨੈੱਟਵਰਕ ਵਰਗੇ ਵਧੀਆ ਕੁਆਲਿਟੀ ਵਾਲੇ ਰੱਖਿਅਤ ਕੀਤੇ ਨੈੱਟਵਰਕਾਂ ਦੇ ਨੇੜੇ ਹੋਣ \'ਤੇ ਵਾਈ-ਫਾਈ ਦੁਬਾਰਾ ਚਾਲੂ ਹੋ ਜਾਵੇਗਾ"</string>
<string name="wifi_wakeup_summary_no_location" msgid="3007457288587966962">"ਅਣਉਪਲਬਧ ਕਿਉਂਕਿ ਟਿਕਾਣਾ ਬੰਦ ਹੈ। "<annotation id="link">"ਟਿਕਾਣਾ"</annotation>" ਚਾਲੂ ਕਰੋ।"</string>
<string name="wifi_wakeup_summary_scanning_disabled" msgid="6820040651529910914">"ਅਣਉਪਲਬਧ, ਕਿਉਂਕਿ ਵਾਈ‑ਫਾਈ ਸਕੈਨਿੰਗ ਬੰਦ ਹੈ"</string>
@@ -858,11 +857,11 @@
<string name="wifi_poor_network_detection_summary" msgid="5539951465985614590">"ਜਦ ਤੱਕ ਤੁਹਾਡੇ ਕੋਲ ਇੱਕ ਚੰਗਾ ਇੰਟਰਨੈੱਟ ਕਨੈਕਸ਼ਨ ਨਾ ਹੋਵੇ ਤਦ ਤੱਕ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਨਾ ਵਰਤੋ"</string>
<string name="wifi_avoid_poor_network_detection_summary" msgid="1976503191780928104">"ਸਿਰਫ਼ ਉਹ ਨੈੱਟਵਰਕ ਵਰਤੋ ਜਿਨ੍ਹਾਂ ਕੋਲ ਇੱਕ ਚੰਗਾ ਇੰਟਰਨੈੱਟ ਕਨੈਕਸ਼ਨ ਹੈ"</string>
<string name="use_open_wifi_automatically_title" msgid="3084513215481454350">"ਖੁੱਲ੍ਹੇ ਨੈੱਟਵਰਕਾਂ ਨਾਲ ਕਨੈਕਟ ਕਰੋ"</string>
- <string name="use_open_wifi_automatically_summary" msgid="8338020172673161754">"ਆਪਣੇ ਆਪ ਵਧੀਆ ਕੁਆਲਿਟੀ ਵਾਲੇ ਜਨਤਕ ਨੈੱਟਵਰਕਾਂ ਨਾਲ ਕਨੈਕਟ ਕਰੋ"</string>
+ <string name="use_open_wifi_automatically_summary" msgid="8338020172673161754">"ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਵਧੀਆ ਕੁਆਲਿਟੀ ਵਾਲੇ ਜਨਤਕ ਨੈੱਟਵਰਕਾਂ ਨਾਲ ਕਨੈਕਟ ਕਰੋ"</string>
<string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"ਵਰਤਣ ਲਈ, ਕੋਈ ਨੈੱਟਵਰਕ ਰੇਟਿੰਗ ਪ੍ਰਦਾਨਕ ਚੁਣੋ"</string>
<string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"ਵਰਤਣ ਲਈ, ਕੋਈ ਅਨੁਰੂਪ ਨੈੱਟਵਰਕ ਰੇਟਿੰਗ ਪ੍ਰਦਾਨਕ ਚੁਣੋ"</string>
<string name="wifi_install_credentials" msgid="5650088113710858289">"ਪ੍ਰਮਾਣ-ਪੱਤਰ ਸਥਾਪਤ ਕਰੋ"</string>
- <string name="wifi_scan_notify_text" msgid="7614101215028336927">"ਟਿਕਾਣਾ ਸਟੀਕਤਾ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਲਈ, ਕਿਸੇ ਵੇਲੇ ਵੀ ਐਪਾਂ ਅਤੇ ਸੇਵਾਵਾਂ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕਾਂ ਨੂੰ ਹਾਲੇ ਵੀ ਸਕੈਨ ਕਰ ਸਕਦੀਆਂ ਹਨ, ਭਾਵੇਂ ਵਾਈ-ਫਾਈ ਬੰਦ ਹੋਵੇ। ਇਸ ਦੀ ਵਰਤੋਂ ਟਿਕਾਣਾ-ਆਧਾਰਿਤ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਅਤੇ ਸੇਵਾਵਾਂ ਵਰਗੀਆਂ ਚੀਜ਼ਾਂ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਲਈ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ। ਤੁਸੀਂ ਇਸ ਨੂੰ <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>ਸਕੈਨਿੰਗ ਸੈਟਿੰਗਾਂ<xliff:g id="LINK_END_1">LINK_END</xliff:g> ਵਿੱਚ ਬਦਲ ਸਕਦੇ ਹੋ।"</string>
+ <string name="wifi_scan_notify_text" msgid="7614101215028336927">"ਟਿਕਾਣਾ ਸਟੀਕਤਾ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਲਈ, ਹਾਲੇ ਵੀ ਐਪਾਂ ਅਤੇ ਸੇਵਾਵਾਂ ਕਿਸੇ ਵੀ ਵੇਲੇ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕਾਂ ਨੂੰ ਸਕੈਨ ਕਰ ਸਕਦੀਆਂ ਹਨ, ਭਾਵੇਂ ਵਾਈ-ਫਾਈ ਬੰਦ ਹੀ ਕਿਉਂ ਨਾ ਹੋਵੇ। ਇਸ ਦੀ ਵਰਤੋਂ ਟਿਕਾਣਾ-ਆਧਾਰਿਤ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਅਤੇ ਸੇਵਾਵਾਂ ਵਰਗੀਆਂ ਚੀਜ਼ਾਂ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਲਈ ਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ। ਤੁਸੀਂ ਇਸ ਨੂੰ <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>ਸਕੈਨਿੰਗ ਸੈਟਿੰਗਾਂ<xliff:g id="LINK_END_1">LINK_END</xliff:g> ਵਿੱਚ ਬਦਲ ਸਕਦੇ ਹੋ।"</string>
<string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"ਟਿਕਾਣੇ ਦੀ ਸਟੀਕਤਾ ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਲਈ, <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>ਸਕੈਨਿੰਗ ਸੈਟਿੰਗਾਂ<xliff:g id="LINK_END_1">LINK_END</xliff:g> ਵਿੱਚ ਵਾਈ-ਫਾਈ ਸਕੈਨਿੰਗ ਨੂੰ ਚਾਲੂ ਕਰੋ।"</string>
<string name="wifi_scan_notify_remember_choice" msgid="1235445971400237444">"ਦੁਬਾਰਾ ਨਾ ਦਿਖਾਓ"</string>
<string name="wifi_setting_sleep_policy_title" msgid="2120785188625932076">"ਨਿਸ਼ਕਿਰਿਆ ਹੋਣ ਦੇ ਦੌਰਾਨ ਵਾਈ‑ਫਾਈ ਚਾਲੂ ਰੱਖੋ"</string>
@@ -878,7 +877,7 @@
<string name="wifi_add_network" msgid="4094957940791876640">"ਨੈੱਟਵਰਕ ਸ਼ਾਮਲ ਕਰੋ"</string>
<string name="wifi_configure_settings_preference_title" msgid="2678534679408777268">"ਵਾਈ‑ਫਾਈ ਤਰਜੀਹਾਂ"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="5714892572614655675">"ਵਾਈ‑ਫਾਈ ਆਪਣੇ ਆਪ ਦੁਬਾਰਾ ਚਾਲੂ ਹੁੰਦਾ ਹੈ"</string>
- <string name="wifi_configure_settings_preference_summary_wakeup_off" msgid="286904094152909651">"ਵਾਈ‑ਫਾਈ ਆਪਣੇ ਆਪ ਦੁਬਾਰਾ ਚਾਲੂ ਨਹੀਂ ਹੁੰਦਾ ਹੈ"</string>
+ <string name="wifi_configure_settings_preference_summary_wakeup_off" msgid="286904094152909651">"ਵਾਈ‑ਫਾਈ ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਦੁਬਾਰਾ ਚਾਲੂ ਨਹੀਂ ਹੁੰਦਾ ਹੈ"</string>
<string name="wifi_access_points" msgid="1647976498906871869">"ਵਾਈ‑ਫਾਈ ਨੈੱਟਵਰਕ"</string>
<string name="wifi_menu_more_options" msgid="8318269834264035524">"ਹੋਰ ਚੋਣਾਂ"</string>
<string name="wifi_menu_p2p" msgid="4945665601551289791">"ਵਾਈ‑ਫਾਈ ਡਾਇਰੈਕਟ"</string>
@@ -899,19 +898,19 @@
<string name="wifi_settings_scanning_required_info" msgid="5913535073390607386">"ਵਾਈ-ਫਾਈ ਸਕੈਨਿੰਗ ਐਪਾਂ ਅਤੇ ਸੇਵਾਵਾਂ ਨੂੰ ਕਿਸੇ ਵੇਲੇ ਵੀ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕਾਂ ਲਈ ਸਕੈਨ ਕਰਨ ਦਿੰਦੀ ਹੈ, ਭਾਵੇਂ ਵਾਈ-ਫਾਈ ਬੰਦ ਹੋਵੇ। ਜਿਵੇਂ ਕਿ, ਇਸਦੀ ਵਰਤੋਂ ਕਰਕੇ ਟਿਕਾਣਾ-ਆਧਾਰਿਤ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਅਤੇ ਸੇਵਾਵਾਂ ਵਰਗੀਆਂ ਚੀਜ਼ਾਂ ਨੂੰ ਬਿਹਤਰ ਬਣਾਇਆ ਜਾ ਸਕਦਾ ਹੈ।"</string>
<string name="wifi_settings_scanning_required_turn_on" msgid="4327570180594277049">"ਚਾਲੂ ਕਰੋ"</string>
<string name="wifi_settings_scanning_required_enabled" msgid="3336102100425307040">"ਵਾਈ-ਫਾਈ ਸਕੈਨਿੰਗ ਚਾਲੂ ਕੀਤੀ ਗਈ ਹੈ"</string>
- <string name="wifi_show_advanced" msgid="8199779277168030597">"ਵਿਕਸਿਤ ਵਿਕਲਪ"</string>
+ <string name="wifi_show_advanced" msgid="8199779277168030597">"ਉਨੱਤ ਵਿਕਲਪ"</string>
<string name="wifi_advanced_toggle_description_expanded" msgid="1506697245302596510">"ਡ੍ਰੌਪ-ਡਾਊਨ ਸੂਚੀ ਉੱਨਤ ਵਿਕਲਪ। ਸੰਖਿਪਤ ਲਈ ਡਬਲ ਟੈਪ ਕਰੋ।"</string>
<string name="wifi_advanced_toggle_description_collapsed" msgid="3014965593695454879">"ਡ੍ਰੌਪ-ਡਾਊਨ ਸੂਚੀ ਉੱਨਤ ਵਿਕਲਪ। ਵਿਸਤਾਰ ਕਰਨ ਲਈ ਡਬਲ ਟੈਪ ਕਰੋ।"</string>
<string name="wifi_ssid" msgid="6746270925975522641">"ਨੈੱਟਵਰਕ ਦਾ ਨਾਮ"</string>
<string name="wifi_ssid_hint" msgid="5010024648106585165">"SSID ਦਾਖਲ ਕਰੋ"</string>
<string name="wifi_security" msgid="9136702039496152831">"ਸੁਰੱਖਿਆ"</string>
<string name="wifi_hidden_network" msgid="6647772204699776833">"ਲੁਕਿਆ ਨੈੱਟਵਰਕ"</string>
- <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"ਜੇਕਰ ਤੁਹਾਡਾ ਰੂਟਰ ਕਿਸੇ ਨੈੱਟਵਰਕ ਆਈ.ਡੀ. ਦਾ ਪ੍ਰਸਾਰਣ ਨਹੀਂ ਕਰ ਰਿਹਾ ਹੈ, ਪਰ ਤੁਸੀਂ ਭਵਿੱਖ ਵਿੱਚ ਇਸ ਨਾਲ ਕਨੈਕਟ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਤੁਸੀਂ ਲੁਕੇ ਹੋਏ ਵਜੋਂ ਨੈੱਟਵਰਕ ਨੂੰ ਸੈੱਟ ਕਰ ਸਕਦੇ ਹੋ।\n\nਇਹ ਇੱਕ ਸੁਰੱਖਿਆ ਖਤਰਾ ਬਣਾ ਸਕਦਾ ਹੈ ਕਿਉਂਕਿ ਤੁਹਾਡਾ ਫ਼ੋਨ ਲਗਾਤਾਰ ਨੈੱਟਵਰਕ ਲੱਭਣ ਲਈ ਉਸਦੇ ਸਿਗਨਲ ਨੂੰ ਪ੍ਰਸਾਰਿਤ ਕਰੇਗਾ।\n\nਨੈੱਟਵਰਕ ਨੂੰ ਲੁਕੇ ਵਜੋਂ ਸੈੱਟ ਕਰਨ ਨਾਲ ਤੁਹਾਡੀਆਂ ਰੂਟਰ ਸੈਟਿੰਗਾਂ ਨਹੀਂ ਬਦਲਣਗੀਆਂ।"</string>
+ <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"ਜੇਕਰ ਤੁਹਾਡਾ ਰਾਊਟਰ ਕਿਸੇ ਨੈੱਟਵਰਕ ਆਈਡੀ ਦਾ ਪ੍ਰਸਾਰਣ ਨਹੀਂ ਕਰ ਰਿਹਾ ਹੈ, ਪਰ ਤੁਸੀਂ ਭਵਿੱਖ ਵਿੱਚ ਇਸ ਨਾਲ ਕਨੈਕਟ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ, ਤਾਂ ਤੁਸੀਂ ਉਸ ਨੈੱਟਵਰਕ ਨੂੰ ਲੁਕੇ ਹੋਏ ਵਜੋਂ ਸੈੱਟ ਕਰ ਸਕਦੇ ਹੋ।\n\nਇਹ ਇੱਕ ਸੁਰੱਖਿਆ ਖਤਰਾ ਬਣਾ ਸਕਦਾ ਹੈ ਕਿਉਂਕਿ ਤੁਹਾਡਾ ਫ਼ੋਨ ਲਗਾਤਾਰ ਨੈੱਟਵਰਕ ਲੱਭਣ ਲਈ ਸਿਗਨਲ ਨੂੰ ਪ੍ਰਸਾਰਿਤ ਕਰੇਗਾ।\n\nਨੈੱਟਵਰਕ ਨੂੰ ਲੁਕੇ ਵਜੋਂ ਸੈੱਟ ਕਰਨ ਨਾਲ ਤੁਹਾਡੀਆਂ ਰਾਊਟਰ ਸੈਟਿੰਗਾਂ ਨਹੀਂ ਬਦਲਣਗੀਆਂ।"</string>
<string name="wifi_signal" msgid="696548364467704808">"ਸਿਗਨਲ ਦੀ ਤੀਬਰਤਾ"</string>
<string name="wifi_status" msgid="3439931558930689940">"ਅਵਸਥਾ"</string>
<string name="tx_wifi_speed" msgid="2571810085003261073">"ਭੇਜਣ ਸੰਬੰਧੀ ਲਿੰਕ ਦੀ ਗਤੀ"</string>
<string name="rx_wifi_speed" msgid="7392873246110937187">"ਪ੍ਰਾਪਤ ਹੋਣ ਸੰਬੰਧੀ ਲਿੰਕ ਦੀ ਗਤੀ"</string>
- <string name="wifi_frequency" msgid="6132852924995724246">"ਬਾਰੰਬਾਰਤਾ"</string>
+ <string name="wifi_frequency" msgid="6132852924995724246">"ਵਾਰਵਾਰਤਾ"</string>
<string name="wifi_ip_address" msgid="5572539114989914831">"IP ਪਤਾ"</string>
<string name="passpoint_label" msgid="7429247462404128615">"ਇਸ ਰਾਹੀਂ ਸੁਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ"</string>
<string name="passpoint_content" msgid="340527524510304327">"<xliff:g id="NAME">%1$s</xliff:g> ਕ੍ਰੀਡੈਂਸ਼ੀਅਲ"</string>
@@ -946,7 +945,7 @@
<string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"QR ਕੋਡ ਪੜ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ। ਕੋਡ ਮੁੜ-ਕੇਂਦਰਿਤ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
<string name="wifi_dpp_failure_authentication_or_configuration" msgid="9142051662156233679">"ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ। ਜੇ ਸਮੱਸਿਆ ਜਾਰੀ ਰਹਿੰਦੀ ਹੈ, ਤਾਂ ਡੀਵਾਈਸ ਉਤਪਾਦਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ"</string>
<string name="wifi_dpp_failure_not_compatible" msgid="4320027179973678283">"ਕੋਈ ਗੜਬੜ ਹੋਈ"</string>
- <string name="wifi_dpp_failure_timeout" msgid="5060065168142109420">"ਪੱਕਾ ਕਰੋ ਕਿ ਡੀਵਾਈਸ ਦਾ ਪਲੱਗ ਲੱਗਾ ਹੋਇਆ ਹੈ, ਚਾਰਜ ਕੀਤਾ ਹੋਇਆ ਅਤੇ ਚਾਲੂ ਹੈ"</string>
+ <string name="wifi_dpp_failure_timeout" msgid="5060065168142109420">"ਪੱਕਾ ਕਰੋ ਕਿ ਡੀਵਾਈਸ ਪਲੱਗ-ਇਨ ਕੀਤਾ ਹੋਇਆ ਹੈ, ਚਾਰਜ ਹੋ ਚੁੱਕਿਆ ਹੈ ਅਤੇ ਚਾਲੂ ਹੈ"</string>
<string name="wifi_dpp_failure_generic" msgid="7840142544736640189">"ਪੱਕਾ ਕਰੋ ਕਿ ਡੀਵਾਈਸ ਦਾ ਪਲੱਗ ਲੱਗਾ ਹੋਇਆ ਹੈ, ਚਾਰਜ ਕੀਤਾ ਹੋਇਆ ਅਤੇ ਚਾਲੂ ਹੈ। ਜੇ ਸਮੱਸਿਆ ਜਾਰੀ ਰਹਿੰਦੀ ਹੈ, ਤਾਂ ਡੀਵਾਈਸ ਉਤਪਾਦਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ"</string>
<string name="wifi_dpp_failure_not_supported" msgid="111779621766171626">"ਇਸ ਡੀਵਾਈਸ ਰਾਹੀਂ “<xliff:g id="SSID">%1$s</xliff:g>” ਨੂੰ ਸ਼ਾਮਲ ਕਰਨ ਦੀ ਸਹੂਲਤ ਨਹੀਂ ਹੈ"</string>
<string name="wifi_dpp_check_connection_try_again" msgid="7144663015219170999">"ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰਕੇ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ"</string>
@@ -1046,7 +1045,7 @@
<string name="wifi_p2p_persist_network" msgid="1110453878886476660">"ਇਹ ਕਨੈਕਸ਼ਨ ਯਾਦ ਰੱਖੋ"</string>
<string name="wifi_p2p_menu_search" msgid="8207638860263805291">"ਡੀਵਾਈਸਾਂ ਖੋਜੋ"</string>
<string name="wifi_p2p_menu_searching" msgid="7443249001543208106">"ਖੋਜ ਰਿਹਾ ਹੈ..."</string>
- <string name="wifi_p2p_menu_rename" msgid="2129974878377065488">"ਡੀਵਾਈਸ ਨੂੰ ਮੁੜ-ਨਾਮ ਦਿਓ"</string>
+ <string name="wifi_p2p_menu_rename" msgid="2129974878377065488">"ਡੀਵਾਈਸ ਦਾ ਨਾਮ ਬਦਲੋ"</string>
<string name="wifi_p2p_peer_devices" msgid="8232126067045093382">"ਪੀਅਰ ਡੀਵਾਈਸ"</string>
<string name="wifi_p2p_remembered_groups" msgid="1356458238836730346">"ਯਾਦ ਰੱਖੇ ਗਏ ਸਮੂਹ"</string>
<string name="wifi_p2p_failed_connect_message" msgid="6103436959132424093">"ਕਨੈਕਟ ਨਹੀਂ ਕਰ ਸਕਿਆ।"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"ਵਾਈ-ਫਾਈ"</item>
+ <item msgid="2271962426654621656">"ਮੋਬਾਈਲ"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"ਵਾਈ-ਫਾਈ ਉਪਲਬਧ ਨਾ ਹੋਣ \'ਤੇ ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ ਵਰਤੋ"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ ਉਪਲਬਧ ਨਾ ਹੋਣ \'ਤੇ ਵਾਈ-ਫਾਈ ਵਰਤੋ"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"ਵਾਈ-ਫਾਈ \'ਤੇ ਕਾਲ ਕਰੋ। ਵਾਈ-ਫਾਈ ਕਨੈਕਸ਼ਨ ਟੁੱਟਣ \'ਤੇ ਕਾਲ ਸਮਾਪਤ ਹੋ ਜਾਵੇਗੀ।"</string>
@@ -1166,9 +1168,9 @@
<string name="accessibility_category_personal" msgid="1423427301759058762">"ਨਿੱਜੀ ਪ੍ਰੋਫਾਈਲ ਖਾਤੇ"</string>
<string name="accessibility_work_account_title" msgid="3195468574776888011">"ਕੰਮ ਖਾਤਾ - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
<string name="accessibility_personal_account_title" msgid="7251761883688839354">"ਨਿੱਜੀ ਖਾਤਾ - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
- <string name="search_settings" msgid="5809250790214921377">"ਖੋਜੋ"</string>
+ <string name="search_settings" msgid="5809250790214921377">"ਖੋਜ"</string>
<string name="display_settings" msgid="1045535829232307190">"ਡਿਸਪਲੇ"</string>
- <string name="accelerometer_title" msgid="2427487734964971453">"ਸਕ੍ਰੀਨ ਆਪਣੇ-ਆਪ ਘੁੰਮਾਓ"</string>
+ <string name="accelerometer_title" msgid="2427487734964971453">"ਸਕ੍ਰੀਨ ਸਵੈ-ਘੁਮਾਓ"</string>
<string name="color_mode_title" msgid="8164858320869449142">"ਰੰਗ"</string>
<string name="color_mode_option_natural" msgid="1292837781836645320">"ਕੁਦਰਤੀ"</string>
<string name="color_mode_option_boosted" msgid="453557938434778933">"ਵਧਾਇਆ ਗਿਆ"</string>
@@ -1252,7 +1254,7 @@
<string name="screensaver_settings_summary_off" msgid="6119947316484763131">"ਬੰਦ"</string>
<string name="screensaver_settings_disabled_prompt" msgid="1897518064782596947">"ਇਹ ਕੰਟਰੋਲ ਕਰਨ ਲਈ ਕਿ ਜਦੋਂ ਫ਼ੋਨ ਡੌਕ ਕੀਤਾ ਅਤੇ/ਜਾਂ ਸਲੀਪ ਮੋਡ ਵਿੱਚ ਹੁੰਦਾ ਹੈ ਉਦੋਂ ਕੀ ਹੁੰਦਾ ਹੈ, ਸਕ੍ਰੀਨ ਸੇਵਰ ਚਾਲੂ ਕਰੋ।"</string>
<string name="screensaver_settings_when_to_dream" msgid="3763052013516826348">"ਕਦੋਂ ਸ਼ੁਰੂ ਕਰਨਾ ਹੈ"</string>
- <string name="screensaver_settings_current" msgid="4017556173596361672">"ਵਰਤਮਾਨ ਸਕ੍ਰੀਨ ਸੇਵਰ"</string>
+ <string name="screensaver_settings_current" msgid="4017556173596361672">"ਮੌਜੂਦਾ ਸਕ੍ਰੀਨ ਸੇਵਰ"</string>
<string name="screensaver_settings_dream_start" msgid="3772227299054662550">"ਹੁਣੇ ਚਾਲੂ ਕਰੋ"</string>
<string name="screensaver_settings_button" msgid="4662384378821837589">"ਸੈਟਿੰਗਾਂ"</string>
<string name="automatic_brightness" msgid="8663792987774126192">"ਸਵੈਚਲਿਤ ਚਮਕ"</string>
@@ -1315,7 +1317,7 @@
<string name="hardware_revision" msgid="3315744162524354246">"ਹਾਰਡਵੇਅਰ ਵਰਜਨ"</string>
<string name="fcc_equipment_id" msgid="8681995718533066093">"ਉਪਕਰਨ ਆਈ.ਡੀ."</string>
<string name="baseband_version" msgid="9115560821840757786">"ਬੇਸਬੈਂਡ ਵਰਜਨ"</string>
- <string name="kernel_version" msgid="8226014277756019297">"Kernel ਵਰਜਨ"</string>
+ <string name="kernel_version" msgid="8226014277756019297">"ਕਰਨਲ ਵਰਜਨ"</string>
<string name="build_number" msgid="8648447688306248633">"ਬਿਲਡ ਨੰਬਰ"</string>
<string name="module_version" msgid="1127871672527968730">"ਮੁੱਖ ਮਾਡਿਊਲ ਵਰਜਨ"</string>
<string name="device_info_not_available" msgid="3762481874992799474">"ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string>
@@ -1358,7 +1360,7 @@
<string name="status_wifi_mac_address" msgid="3868452167971295995">"ਵਾਈ‑ਫਾਈ MAC ਪਤਾ"</string>
<string name="status_bt_address" msgid="460568179311735657">"ਬਲੂਟੁੱਥ ਪਤਾ"</string>
<string name="status_serial_number" msgid="8257722124627415159">"ਸੀਰੀਅਲ ਨੰਬਰ"</string>
- <string name="status_up_time" msgid="77128395333934087">"ਅੱਪ ਟਾਈਮ"</string>
+ <string name="status_up_time" msgid="77128395333934087">"ਚਾਲੂ ਰਹਿਣ ਦਾ ਸਮਾਂ"</string>
<string name="status_awake_time" msgid="1251959094010776954">"ਸਕਿਰਿਆ ਸਮਾਂ"</string>
<string name="internal_memory" msgid="8632841998435408869">"ਅੰਦਰੂਨੀ ਸਟੋਰੇਜ"</string>
<string name="sd_memory" product="nosdcard" msgid="1377713983817298275">"USB ਸਟੋਰੇਜ"</string>
@@ -1524,7 +1526,7 @@
<string name="storage_wizard_ready_v2_internal_moved_body" msgid="4133133596316768033">"ਤੁਹਾਡੀ ਸਮੱਗਰੀ <xliff:g id="NAME_0">^1</xliff:g> ਵਿੱਚ ਲਿਜਾਈ ਗਈ। \n\nਇਸ <xliff:g id="NAME_1">^2</xliff:g> ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਲਈ, "<b>"ਸੈਟਿੰਗਾਂ > ਸਟੋਰੇਜ"</b>" \'ਤੇ ਜਾਓ।"</string>
<string name="battery_status_title" msgid="8731200319740671905">"ਬੈਟਰੀ ਸਥਿਤੀ"</string>
<string name="battery_level_title" msgid="5207775387973771646">"ਬੈਟਰੀ ਪੱਧਰ"</string>
- <string name="apn_settings" msgid="8130776653826271664">"APNs"</string>
+ <string name="apn_settings" msgid="8130776653826271664">"APN"</string>
<string name="apn_edit" msgid="4350571070853305357">"ਪਹੁੰਚ ਬਿੰਦੂ ਦਾ ਸੰਪਾਦਨ ਕਰੋ"</string>
<string name="apn_not_set" msgid="5344235604466825691">"ਸੈੱਟ ਨਹੀਂ ਕੀਤਾ"</string>
<string name="apn_name" msgid="8431432886706852226">"ਨਾਮ"</string>
@@ -1539,20 +1541,20 @@
<string name="apn_mms_port" msgid="6606572282014819299">"MMS ਪੋਰਟ"</string>
<string name="apn_mcc" msgid="9138301167194779180">"MCC"</string>
<string name="apn_mnc" msgid="1276161191283274976">"MNC"</string>
- <string name="apn_auth_type" msgid="4286147728662523362">"ਪ੍ਰਮਾਣੀਕਰਨ ਪ੍ਰਕਾਰ"</string>
+ <string name="apn_auth_type" msgid="4286147728662523362">"ਪ੍ਰਮਾਣੀਕਰਨ ਦੀ ਕਿਸਮ"</string>
<string name="apn_auth_type_none" msgid="3679273936413404046">"ਕੋਈ ਨਹੀਂ"</string>
<string name="apn_auth_type_pap" msgid="6155876141679480864">"PAP"</string>
<string name="apn_auth_type_chap" msgid="5484031368454788686">"CHAP"</string>
<string name="apn_auth_type_pap_chap" msgid="2977833804460109203">"PAP ਜਾਂ CHAP"</string>
- <string name="apn_type" msgid="6725346490902871146">"APN ਪ੍ਰਕਾਰ"</string>
+ <string name="apn_type" msgid="6725346490902871146">"APN ਦੀ ਕਿਸਮ"</string>
<string name="apn_protocol" msgid="1240197323563960912">"APN ਪ੍ਰੋਟੋਕੋਲ"</string>
<string name="apn_roaming_protocol" msgid="6913336248771263497">"APN ਰੋਮਿੰਗ ਪ੍ਰੋਟੋਕੋਲ"</string>
<string name="carrier_enabled" msgid="1819916725305365581">"APN ਚਾਲੂ/ਬੰਦ"</string>
<string name="carrier_enabled_summaryOn" msgid="6219221535461945771">"APN ਸਮਰਥਿਤ"</string>
<string name="carrier_enabled_summaryOff" msgid="4093019532796386622">"APN ਅਸਮਰਥਿਤ"</string>
- <string name="bearer" msgid="4378444317087536401">"ਬੀਅਰਰ"</string>
- <string name="mvno_type" msgid="3150755279048149624">"MVNO ਪ੍ਰਕਾਰ"</string>
- <string name="mvno_match_data" msgid="629287305803195245">"MVNO ਵੈਲਯੂ"</string>
+ <string name="bearer" msgid="4378444317087536401">"ਧਾਰਕ"</string>
+ <string name="mvno_type" msgid="3150755279048149624">"MVNO ਦੀ ਕਿਸਮ"</string>
+ <string name="mvno_match_data" msgid="629287305803195245">"MVNO ਮੁੱਲ"</string>
<string name="menu_delete" msgid="8646081395424055735">"APN ਮਿਟਾਓ"</string>
<string name="menu_new" msgid="7529219814721969024">"ਨਵਾਂ APN"</string>
<string name="menu_save" msgid="7310230314430623215">"ਰੱਖਿਅਤ ਕਰੋ"</string>
@@ -1654,7 +1656,7 @@
</plurals>
<string name="location_category_recent_location_access" msgid="286059523360285026">"ਹਾਲੀਆ ਟਿਕਾਣਾ ਪਹੁੰਚ"</string>
<string name="location_recent_location_access_view_details" msgid="2051602261436245905">"ਵੇਰਵੇ ਦੇਖੋ"</string>
- <string name="location_no_recent_apps" msgid="77502059586413278">"ਕਿਸੇ ਐਪਸ ਨੇ ਹਾਲ ਵਿੱਚ ਹੀ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਦੀ ਬੇਨਤੀ ਨਹੀਂ ਕੀਤੀ ਹੈ"</string>
+ <string name="location_no_recent_apps" msgid="77502059586413278">"ਕਿਸੇ ਐਪ ਨੇ ਵੀ ਹਾਲ ਵਿੱਚ ਟਿਕਾਣੇ ਦੀ ਬੇਨਤੀ ਨਹੀਂ ਕੀਤੀ ਹੈ"</string>
<string name="location_no_recent_accesses" msgid="6289916310397279890">"ਟਿਕਾਣੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਵਾਲੀਆਂ ਕੋਈ ਐਪਾਂ ਨਹੀਂ"</string>
<string name="location_high_battery_use" msgid="7177199869979522663">"ਉੱਚ ਬੈਟਰੀ ਵਰਤੋਂ"</string>
<string name="location_low_battery_use" msgid="5030448574501435888">"ਘੱਟ ਬੈਟਰੀ ਵਰਤੋਂ"</string>
@@ -1693,7 +1695,7 @@
<string name="terms_title" msgid="1804549588198223771">"ਨਿਯਮ ਅਤੇ ਸ਼ਰਤਾਂ"</string>
<string name="webview_license_title" msgid="8244960025549725051">"ਸਿਸਟਮ WebView ਲਾਇਸੰਸ"</string>
<string name="wallpaper_attributions" msgid="2941987966332943253">"ਵਾਲਪੇਪਰ"</string>
- <string name="wallpaper_attributions_values" msgid="4461979853894606323">"ਸੈਟੇਲਾਈਟ ਇਮੇਜਰੀ ਪ੍ਰਦਾਤਾ:\n©2014 CNES / Astrium, DigitalGlobe, Bluesky"</string>
+ <string name="wallpaper_attributions_values" msgid="4461979853894606323">"ਉਪਗ੍ਰਹਿ ਇਮੇਜਰੀ ਪ੍ਰਦਾਤਾ:\n©2014 CNES / Astrium, DigitalGlobe, Bluesky"</string>
<string name="settings_manual_activity_title" msgid="7599911755054286789">"ਮੈਨੁਅਲ"</string>
<string name="settings_manual_activity_unavailable" msgid="4872502775018655343">"ਮੈਨੁਅਲ ਲੋਡ ਕਰਨ ਵਿੱਚ ਇੱਕ ਸਮੱਸਿਆ ਹੋਈ ਸੀ।"</string>
<string name="settings_license_activity_title" msgid="1099045216283677608">"ਤੀਜੀ-ਧਿਰ ਦੇ ਲਾਇਸੰਸ"</string>
@@ -1744,7 +1746,7 @@
<string name="lockpassword_confirm_your_password_header_frp" msgid="7326670978891793470">"Verify password"</string>
<string name="lockpassword_invalid_pin" msgid="3059022215815900137">"ਗਲਤ ਪਿੰਨ"</string>
<string name="lockpassword_invalid_password" msgid="8374331995318204099">"ਗਲਤ ਪਾਸਵਰਡ"</string>
- <string name="lockpattern_need_to_unlock_wrong" msgid="1328670466959377948">"ਗ਼ਲਤ ਪੈਟਰਨ"</string>
+ <string name="lockpattern_need_to_unlock_wrong" msgid="1328670466959377948">"ਗਲਤ ਪੈਟਰਨ"</string>
<string name="lock_settings_title" msgid="233657584969886812">"ਡੀਵਾਈਸ ਸੁਰੱਖਿਆ"</string>
<string name="lockpattern_change_lock_pattern_label" msgid="333149762562581510">"ਅਣਲਾਕ ਪੈਟਰਨ ਬਦਲੋ"</string>
<string name="lockpattern_change_lock_pin_label" msgid="3435796032210265723">"ਅਣਲਾਕ ਪਿੰਨ ਬਦਲੋ"</string>
@@ -1757,7 +1759,7 @@
<string name="lockpattern_pattern_confirmed_header" msgid="5603156929428721407">"ਤੁਹਾਡਾ ਨਵਾਂ ਅਣਲਾਕ ਪੈਟਰਨ"</string>
<string name="lockpattern_confirm_button_text" msgid="7059311304112902598">"ਪੁਸ਼ਟੀ ਕਰੋ"</string>
<string name="lockpattern_restart_button_text" msgid="4322968353922529868">"ਰੀਡ੍ਰਾ ਕਰੋ"</string>
- <string name="lockpattern_retry_button_text" msgid="5473976578241534298">"ਹਟਾਓ"</string>
+ <string name="lockpattern_retry_button_text" msgid="5473976578241534298">"ਕਲੀਅਰ ਕਰੋ"</string>
<string name="lockpattern_continue_button_text" msgid="3328913552656376892">"ਜਾਰੀ ਰੱਖੋ"</string>
<string name="lockpattern_settings_title" msgid="5152005866870766842">"ਪੈਟਰਨ ਅਣਲਾਕ ਕਰੋ"</string>
<string name="lockpattern_settings_enable_title" msgid="8508410891939268080">"ਲੁੜੀਂਦਾ ਪੈਟਰਨ"</string>
@@ -1803,7 +1805,7 @@
<string name="screen_compatibility_label" msgid="3638271673726075815">"ਸਕ੍ਰੀਨ ਅਨੁਰੂਪਤਾ"</string>
<string name="permissions_label" msgid="7341733648403464213">"ਇਜਾਜ਼ਤਾਂ"</string>
<string name="cache_header_label" msgid="3202284481380361966">"ਕੈਸ਼ੇ"</string>
- <string name="clear_cache_btn_text" msgid="107507684844780651">"ਕੈਸ਼ੇ ਹਟਾਓ"</string>
+ <string name="clear_cache_btn_text" msgid="107507684844780651">"ਕੈਸ਼ੇ ਕਲੀਅਰ ਕਰੋ"</string>
<string name="cache_size_label" msgid="6205173678102220499">"ਕੈਸ਼ੇ"</string>
<plurals name="uri_permissions_text" formatted="false" msgid="8938478333743197020">
<item quantity="one">%d ਆਈਟਮਾਂ</item>
@@ -1827,7 +1829,7 @@
<string name="app_factory_reset" msgid="8718986000278776272">"ਅੱਪਡੇਟਾਂ ਅਣਸਥਾਪਤ ਕਰੋ"</string>
<string name="auto_launch_enable_text" msgid="3372898942144027341">"ਤੁਸੀਂ ਇਸ ਐਪ ਨੂੰ ਕੁਝ ਕਾਰਵਾਈਆਂ ਲਈ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਤੌਰ \'ਤੇ ਲਾਂਚ ਕਰਨ ਦੀ ਚੋਣ ਕੀਤੀ ਹੈ।"</string>
<string name="always_allow_bind_appwidgets_text" msgid="2286211654774611037">"ਤੁਸੀਂ ਇਸ ਐਪ ਨੂੰ ਵਿਜੇਟ ਬਣਾਉਣ ਲਈ ਅਤੇ ਉਹਨਾਂ ਦੇ ਡਾਟਾ ਤੱਕ ਪਹੁੰਚ ਦੀ ਆਗਿਆ ਦੇਣ ਦੀ ਚੋਣ ਕੀਤੀ ਹੈ।"</string>
- <string name="auto_launch_disable_text" msgid="8560921288036801416">"ਕੋਈ ਡਿਫੌਲਟਸ ਸੈਟ ਨਹੀਂ ਕੀਤੇ"</string>
+ <string name="auto_launch_disable_text" msgid="8560921288036801416">"ਕੋਈ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਸੈੱਟ ਨਹੀਂ ਕੀਤੇ"</string>
<string name="clear_activities" msgid="2068014972549235347">"ਡਿਫੌਲਟਸ ਹਟਾਓ"</string>
<string name="screen_compatibility_text" msgid="1768064020294301496">"ਇਹ ਐਪ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ ਲਈ ਡਿਜਾਈਨ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ। ਤੁਸੀਂ ਇਸਤੇ ਨਿਯੰਤਰਣ ਪਾ ਸਕਦੇ ਹੋ ਕਿ ਇਹ ਇੱਥੇ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ ਕਿਵੇਂ ਵਿਵਸਥਿਤ ਕਰੇ।"</string>
<string name="ask_compatibility" msgid="6687958195768084807">"ਜਦੋਂ ਲੌਂਚ ਕੀਤਾ ਹੋਵੇ ਤਾਂ ਪੁੱਛੋ"</string>
@@ -1836,7 +1838,7 @@
<string name="sort_order_alpha" msgid="6689698854460261212">"ਨਾਮ ਮੁਤਾਬਕ ਕ੍ਰਮ-ਬੱਧ ਕਰੋ"</string>
<string name="sort_order_size" msgid="3167376197248713027">"ਆਕਾਰ ਮੁਤਾਬਕ ਕ੍ਰਮ-ਬੱਧ ਕਰੋ"</string>
<string name="sort_order_recent_notification" msgid="5592496977404445941">"ਸਭ ਤੋਂ ਹਾਲੀਆ"</string>
- <string name="sort_order_frequent_notification" msgid="5640245013098010347">"ਅਕਸਰ"</string>
+ <string name="sort_order_frequent_notification" msgid="5640245013098010347">"ਅਕਸਰ ਵਰਤੀਆਂ ਜਾਣ ਵਾਲੀਆਂ"</string>
<string name="show_running_services" msgid="1895994322704667543">"ਚੱਲ ਰਹੀਆਂ ਸੇਵਾਵਾਂ ਦਿਖਾਓ"</string>
<string name="show_background_processes" msgid="88012264528093617">"ਕੈਸ਼ ਕੀਤੀਆਂ ਪ੍ਰਕਿਰਿਆਵਾਂ ਦਿਖਾਓ"</string>
<string name="default_emergency_app" msgid="286530070173495823">"ਆਪਾਤਕਾਲ ਐਪ"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"ਸੂਚਨਾ ਦੀ ਥਰਥਰਾਹਟ"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"ਘੰਟੀ ਦੀ ਥਰਥਰਾਹਟ"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"ਸਪੱਰਸ਼ ਸੰਬੰਧੀ ਥਰਥਰਾਹਟ"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"ਸੇਵਾ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"ਰੰਗ ਸੁਧਾਈ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"ਸੁਰਖੀਆਂ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"ਸੇਵਾ ਵਰਤੋ"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"ਰੰਗ ਸੁਧਾਈ ਵਰਤੋ"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"ਸੁਰਖੀਆਂ ਵਰਤੋ"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"ਜਾਰੀ ਰੱਖੋ"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"ਸੁਣਨ ਦੇ ਸਾਧਨ"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"ਸੁਣਨ ਦਾ ਕੋਈ ਸਾਧਨ ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਹੋਇਆ"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"ਚਾਲੂ ਕਰੋ"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"ਬੈਟਰੀ ਸੇਵਰ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"ਬੈਟਰੀ ਸੇਵਰ ਵਰਤੋ"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"ਆਪਣੇ-ਆਪ ਚਾਲੂ ਕਰੋ"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"ਕਦੇ ਵੀ ਨਹੀਂ"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"<xliff:g id="PERCENT">%1$s</xliff:g> \'ਤੇ ਬੈਟਰੀ"</string>
@@ -2532,7 +2534,7 @@
<string name="user_credentials" msgid="8365731467650306757">"ਵਰਤੋਂਕਾਰ ਕ੍ਰੀਡੈਂਸ਼ੀਅਲ"</string>
<string name="user_credentials_summary" msgid="7350223899317423252">"ਸਟੋਰ ਕੀਤੇ ਕ੍ਰੀਡੈਂਸ਼ੀਅਲ ਦੇਖੋ ਅਤੇ ਸੋਧੋ"</string>
<string name="advanced_security_title" msgid="286883005673855845">"ਵਿਕਸਿਤ"</string>
- <string name="credential_storage_type" msgid="2585337320206095255">"ਸਟੋਰੇਜ ਦਾ ਪ੍ਰਕਾਰ"</string>
+ <string name="credential_storage_type" msgid="2585337320206095255">"ਸਟੋਰੇਜ ਦੀ ਕਿਸਮ"</string>
<string name="credential_storage_type_hardware" msgid="5054143224259023600">"ਹਾਰਡਵੇਅਰ-ਸਮਰਥਿਤ"</string>
<string name="credential_storage_type_software" msgid="1335905150062717150">"ਕੇਵਲ ਸਾਫਟਵੇਅਰ"</string>
<string name="credentials_settings_not_available" msgid="5490259681690183274">"ਇਸ ਵਰਤੋਂਕਾਰ ਲਈ ਕ੍ਰੀਡੈਂਸ਼ੀਅਲ ਉਪਲਬਧ ਨਹੀਂ ਹਨ"</string>
@@ -2570,14 +2572,14 @@
<string name="select_device_admin_msg" msgid="4173769638399075387">"ਡੀਵਾਈਸ ਪ੍ਰਸ਼ਾਸਕ ਐਪਾਂ"</string>
<string name="no_device_admins" msgid="4129231900385977460">"ਕੋਈ ਵੀ ਡੀਵਾਈਸ ਪ੍ਰਸ਼ਾਸਕ ਐਪਾਂ ਉਪਲਬਧ ਨਹੀਂ ਹਨ"</string>
<string name="personal_device_admin_title" msgid="759440849188565661">"ਨਿੱਜੀ"</string>
- <string name="managed_device_admin_title" msgid="8021522755492551726">"ਦਫ਼ਤਰ"</string>
+ <string name="managed_device_admin_title" msgid="8021522755492551726">"ਕਾਰਜ-ਸਥਾਨ"</string>
<string name="sms_access_restriction_enabled" msgid="3006320256764718303">"SMS ਅਤੇ ਕਾਲ ਲੌਗ ਤੱਕ ਪਹੁੰਚ \'ਤੇ ਪਾਬੰਦੀ ਲਗਾਓ"</string>
<string name="sms_access_restriction_enabled_summary" msgid="9011946580977780063">"ਸਿਰਫ਼ ਪੂਰਵ-ਨਿਰਧਾਰਤ ਫ਼ੋਨ ਅਤੇ ਸੁਨੇਹੇ ਐਪਾਂ ਨੂੰ SMS ਅਤੇ ਕਾਲ ਲੌਗ ਇਜਾਜ਼ਤਾਂ ਹਨ"</string>
<string name="no_trust_agents" msgid="5757792915019113084">"ਕੋਈ ਉਪਲਬਧ ਭਰੋਸੇਯੋਗ ਏਜੰਟ ਨਹੀਂ"</string>
- <string name="add_device_admin_msg" msgid="3573765823476931173">"ਡੀਵਾਈਸ ਪ੍ਰਸ਼ਾਸਕ ਐਪ ਨੂੰ ਸਰਗਰਮ ਕਰੀਏ?"</string>
- <string name="add_device_admin" msgid="1621152410207260584">"ਇਸ ਡੀਵਾਈਸ ਪ੍ਰਸ਼ਾਸਕ ਐਪ ਨੂੰ ਸਰਗਰਮ ਕਰੋ"</string>
+ <string name="add_device_admin_msg" msgid="3573765823476931173">"ਡੀਵਾਈਸ ਪ੍ਰਸ਼ਾਸਕ ਐਪ ਨੂੰ ਕਿਰਿਆਸ਼ੀਲ ਕਰੀਏ?"</string>
+ <string name="add_device_admin" msgid="1621152410207260584">"ਇਸ ਡੀਵਾਈਸ ਪ੍ਰਸ਼ਾਸਕ ਐਪ ਨੂੰ ਕਿਰਿਆਸ਼ੀਲ ਕਰੋ"</string>
<string name="device_admin_add_title" msgid="6097881332139146897">"ਡੀਵਾਈਸ ਪ੍ਰਸ਼ਾਸਕ"</string>
- <string name="device_admin_warning" msgid="4421817419326480449">"ਇਸ ਪ੍ਰਸ਼ਾਸਕ ਐਪ ਨੂੰ ਸਰਗਰਮ ਕਰਨ ਨਾਲ <xliff:g id="APP_NAME">%1$s</xliff:g> ਐਪ ਨੂੰ ਅੱਗੇ ਦਿੱਤੀਆਂ ਕਾਰਵਾਈਆਂ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਮਿਲਦੀ ਹੈ:"</string>
+ <string name="device_admin_warning" msgid="4421817419326480449">"ਇਸ ਪ੍ਰਸ਼ਾਸਕ ਐਪ ਨੂੰ ਕਿਰਿਆਸ਼ੀਲ ਕਰਨ ਨਾਲ <xliff:g id="APP_NAME">%1$s</xliff:g> ਐਪ ਨੂੰ ਅੱਗੇ ਦਿੱਤੀਆਂ ਕਾਰਵਾਈਆਂ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਮਿਲਦੀ ਹੈ:"</string>
<string name="device_admin_status" msgid="5424944611789040723">"ਇਹ ਪ੍ਰਸ਼ਾਸਕ ਐਪ ਕਿਰਿਆਸ਼ੀਲ ਹੈ ਅਤੇ <xliff:g id="APP_NAME">%1$s</xliff:g> ਐਪ ਨੂੰ ਅੱਗੇ ਦਿੱਤੀਆਂ ਕਾਰਵਾਈਆਂ ਨੂੰ ਕਰਨ ਲਈ ਇਜਾਜ਼ਤ ਦਿੰਦੀ ਹੈ:"</string>
<string name="profile_owner_add_title" msgid="735805919754362791">"ਕੀ ਪ੍ਰੋਫਾਈਲ ਮੈਨੇਜਰ ਨੂੰ ਕਿਰਿਆਸ਼ੀਲ ਬਣਾਉਣਾ ਹੈ?"</string>
<string name="adding_profile_owner_warning" msgid="1284541194547382194">"ਜਾਰੀ ਰੱਖਣ ਦੁਆਰਾ, ਤੁਹਾਡੇ ਵਰਤੋਂਕਾਰ ਨੂੰ ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਦੁਆਰਾ ਪ੍ਰਬੰਧਿਤ ਕੀਤਾ ਜਾਏਗਾ ਜੋ ਕਿ ਤੁਹਾਡੇ ਨਿੱਜੀ ਡਾਟੇ ਤੋਂ ਇਲਾਵਾ, ਸੰਬੰਧਿਤ ਡਾਟੇ ਨੂੰ ਸਟੋਰ ਕਰਨ ਦੇ ਵੀ ਯੋਗ ਹੋ ਸਕਦਾ ਹੈ।\n\n ਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਇਸ ਵਰਤੋਂਕਾਰ ਨਾਲ ਸੰਬੰਧਿਤ ਸੈਟਿੰਗਾਂ, ਪਹੁੰਚ, ਐਪਾਂ, ਅਤੇ ਡਾਟੇ ਦੀ ਨਿਗਰਾਨੀ ਅਤੇ ਪ੍ਰਬੰਧਨ ਕਰ ਸਕਦਾ ਹੈ, ਜਿਸ ਵਿੱਚ ਨੈੱਟਵਰਕ ਕਿਰਿਆਸ਼ੀਲਤਾ ਅਤੇ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦੀ ਟਿਕਾਣਾ ਜਾਣਕਾਰੀ ਵੀ ਸ਼ਾਮਲ ਹੈ।"</string>
@@ -2617,7 +2619,7 @@
<string name="sync_one_time_sync" msgid="6005174168405784256">"ਹੁਣੇ ਸਮਕਾਲੀਕਰਨ ਲਈ ਟੈਪ ਕਰੋ<xliff:g id="LAST_SYNC_TIME">
%1$s</xliff:g>"</string>
<string name="sync_gmail" msgid="4457967084840001296">"Gmail"</string>
- <string name="sync_calendar" msgid="6573708019827519372">"ਕੈਲੰਡਰ"</string>
+ <string name="sync_calendar" msgid="6573708019827519372">"Calendar"</string>
<string name="sync_contacts" msgid="5687434785723746534">"ਸੰਪਰਕ"</string>
<string name="sync_plug" msgid="6703804441408427257"><font fgcolor="#ffffffff">"Google ਸਿੰਕ ਤੇ ਤੁਹਾਡਾ ਸੁਆਗਤ ਹੈ!"</font>" \nਤੁਸੀਂ ਜਿੱਥੇ ਵੀ ਹੋਵੋ, ਉੱਥੋਂ ਤੁਹਾਡੇ ਸੰਪਰਕਾਂ, ਮੁਲਾਕਾਤਾਂ ਆਦਿ ਤੱਕ ਪਹੁੰਚ ਦੀ ਆਗਿਆ ਦੇਣ ਲਈ ਡਾਟਾ ਸਿੰਕ ਕਰਨ ਲਈ ਇੱਕ Google ਪਹੁੰਚ।"</string>
<string name="header_application_sync_settings" msgid="4581847153669774489">"ਐਪ ਸਿੰਕ ਸੈਟਿੰਗਾਂ"</string>
@@ -2668,8 +2670,8 @@
<string name="data_usage_menu_sim_cards" msgid="8508154611676507088">"SIM ਕਾਰਡ"</string>
<string name="data_usage_cellular_data_summary" msgid="9162777397135709280">"ਸੀਮਾ ਤੇ ਰੋਕਿਆ"</string>
<string name="account_settings_menu_auto_sync" msgid="2673669556006027506">" ਡਾਟਾ ਸਵੈ-ਸਮਕਾਲੀਕਿਰਤ ਕਰੋ"</string>
- <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"ਨਿੱਜੀ ਡਾਟਾ ਆਟੋ-ਸਿੰਕ ਕਰੋ"</string>
- <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"ਕੰਮ ਡਾਟਾ ਆਟੋ-ਸਿੰਕ ਕਰੋ"</string>
+ <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"ਨਿੱਜੀ ਡਾਟਾ ਸਵੈ-ਸਮਕਾਲੀਕਿਰਤ ਕਰੋ"</string>
+ <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"ਕੰਮ ਦਾ ਡਾਟਾ ਸਵੈ-ਸਮਕਾਲੀਕਿਰਤ ਕਰੋ"</string>
<string name="data_usage_change_cycle" msgid="447761920472170031">"ਸਾਈਕਲ ਬਦਲੋ..."</string>
<string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"ਡਾਟਾ ਵਰਤੋਂ ਸਾਈਕਲ ਰੀਸੈੱਟ ਕਰਨ ਲਈ ਮਹੀਨੇ ਦਾ ਦਿਨ:"</string>
<string name="data_usage_empty" msgid="7981405723435034032">"ਇਸ ਮਿਆਦ ਦੇ ਦੌਰਾਨ ਕਿਸੇ ਐਪਸ ਨੇ ਡਾਟਾ ਨਹੀਂ ਵਰਤਿਆ।"</string>
@@ -2713,7 +2715,7 @@
<string name="data_usage_limit_editor_title" msgid="1687908662154108293">"ਡਾਟਾ ਵਰਤੋਂ ਸੀਮਾ ਸੈੱਟ ਕਰੋ"</string>
<string name="data_usage_limit_dialog_title" msgid="8804760847110131518">"ਡਾਟਾ ਵਰਤੋਂ ਸੀਮਤ ਕਰਨਾ"</string>
<string name="data_usage_limit_dialog_mobile" product="tablet" msgid="2000713577999830647">"ਤੁਹਾਡਾ ਟੈਬਲੈੱਟ ਤੁਹਾਡੇ ਵੱਲੋਂ ਸੈੱਟ ਕੀਤੀ ਮੋਬਾਈਲ ਡਾਟੇ ਦੀ ਸੀਮਾ ਉੱਤੇ ਪਹੁੰਚਣ \'ਤੇ ਮੋਬਾਈਲ ਡਾਟਾ ਬੰਦ ਕਰ ਦੇਵੇਗਾ।\n\nਕਿਉਂਕਿ ਡਾਟਾ ਵਰਤੋਂ ਤੁਹਾਡੇ ਟੈਬਲੈੱਟ ਵੱਲੋਂ ਮਾਪੀ ਜਾਂਦੀ ਹੈ ਅਤੇ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਤੁਹਾਡਾ ਕੈਰੀਅਰ ਵਰਤੋਂ ਦਾ ਹਿਸਾਬ ਵੱਖਰੇ ਢੰਗ ਨਾਲ ਲਗਾਵੇ, ਇਸ ਕਰਕੇ ਕੋਈ ਕੰਜੂਸੀਕਾਰੀ ਸੀਮਾ ਸੈੱਟ ਕਰਨ ਬਾਰੇ ਵਿਚਾਰ ਕਰੋ।"</string>
- <string name="data_usage_limit_dialog_mobile" product="default" msgid="943546278705619205">"ਤੁਹਾਡਾ ਫ਼ੋਨ ਤੁਹਾਡੇ ਵੱਲੋਂ ਸੈੱਟ ਕੀਤੀ ਮੋਬਾਈਲ ਡਾਟੇ ਦੀ ਸੀਮਾ ਉੱਤੇ ਪਹੁੰਚਣ \'ਤੇ ਮੋਬਾਈਲ ਡਾਟਾ ਬੰਦ ਕਰ ਦੇਵੇਗਾ।\n\nਕਿਉਂਕਿ ਡਾਟਾ ਵਰਤੋਂ ਤੁਹਾਡੇ ਫ਼ੋਨ ਵੱਲੋਂ ਮਾਪਿਆ ਜਾਂਦਾ ਹੈ ਅਤੇ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਤੁਹਾਡਾ ਕੈਰੀਅਰ ਵਰਤੋਂ ਦਾ ਹਿਸਾਬ ਵੱਖਰੇ ਢੰਗ ਨਾਲ ਲਗਾਵੇ, ਇਸ ਕਰਕੇ ਕੋਈ ਕੰਜੂਸੀਕਾਰੀ ਸੀਮਾ ਸੈੱਟ ਕਰਨ ਬਾਰੇ ਵਿਚਾਰ ਕਰੋ।"</string>
+ <string name="data_usage_limit_dialog_mobile" product="default" msgid="943546278705619205">"ਤੁਹਾਡਾ ਫ਼ੋਨ ਤੁਹਾਡੇ ਵੱਲੋਂ ਸੈੱਟ ਕੀਤੀ ਮੋਬਾਈਲ ਡਾਟੇ ਦੀ ਸੀਮਾ ਉੱਤੇ ਪਹੁੰਚਣ \'ਤੇ ਮੋਬਾਈਲ ਡਾਟਾ ਬੰਦ ਕਰ ਦੇਵੇਗਾ।\n\nਕਿਉਂਕਿ ਡਾਟਾ ਵਰਤੋਂ ਨੂੰ ਤੁਹਾਡੇ ਫ਼ੋਨ ਵੱਲੋਂ ਮਾਪਿਆ ਜਾਂਦਾ ਹੈ ਅਤੇ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਤੁਹਾਡਾ ਕੈਰੀਅਰ ਵਰਤੋਂ ਦਾ ਹਿਸਾਬ ਵੱਖਰੇ ਢੰਗ ਨਾਲ ਲਗਾਵੇ, ਇਸ ਕਰਕੇ ਕੋਈ ਦਰਮਿਆਨੀ ਸੀਮਾ ਸੈੱਟ ਕਰਨ ਬਾਰੇ ਵਿਚਾਰ ਕਰੋ।"</string>
<string name="data_usage_restrict_background_title" msgid="3568746530413220844">"ਕੀ ਪਿਛੋਕੜ ਡਾਟਾ ਤੇ ਪ੍ਰਤਿਬੰਧ ਲਾਉਣਾ ਹੈ?"</string>
<string name="data_usage_restrict_background" msgid="995811034744808575">"ਜੇਕਰ ਤੁਸੀਂ ਬੈਕਗ੍ਰਾਊਂਡ ਮੋਬਾਈਲ ਡਾਟੇ \'ਤੇ ਪਾਬੰਦੀ ਲਗਾਉਂਦੇ ਹੋ, ਤਾਂ ਕੁਝ ਐਪਾਂ ਅਤੇ ਸੇਵਾਵਾਂ ਉਦੋਂ ਤੱਕ ਕੰਮ ਨਹੀਂ ਕਰਨਗੀਆਂ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਵਾਈ‑ਫਾਈ ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਹੁੰਦੇ।"</string>
<string name="data_usage_restrict_background_multiuser" product="tablet" msgid="6032810839234864814">"ਜੇਕਰ ਤੁਸੀਂ ਬੈਕਗ੍ਰਾਊਂਡ ਮੋਬਾਈਲ ਡਾਟੇ \'ਤੇ ਪ੍ਰਤੀਬੰਧ ਲਗਾਉਂਦੇ ਹੋ, ਤਾਂ ਕੁਝ ਐਪਾਂ ਅਤੇ ਸੇਵਾਵਾਂ ਉਦੋਂ ਤੱਕ ਕੰਮ ਨਹੀਂ ਕਰਨਗੀਆਂ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਵਾਈ‑ਫਾਈ ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਹੁੰਦੇ।\n\nਇਹ ਸੈਟਿੰਗ ਇਸ ਟੈਬਲੈੱਟ \'ਤੇ ਸਾਰੇ ਵਰਤੋਂਕਾਰਾਂ ਨੂੰ ਪ੍ਰਭਾਵਿਤ ਕਰਦੀ ਹੈ।"</string>
@@ -2738,7 +2740,7 @@
<string name="cryptkeeper_emergency_call" msgid="4625420047524693116">"ਸੰਕਟਕਾਲੀਨ ਕਾਲ"</string>
<string name="cryptkeeper_return_to_call" msgid="4433942821196822815">"ਕਾਲ \'ਤੇ ਵਾਪਸ ਜਾਓ"</string>
<string name="vpn_name" msgid="3538818658670774080">"ਨਾਮ"</string>
- <string name="vpn_type" msgid="6389116710008658550">"ਪ੍ਰਕਾਰ"</string>
+ <string name="vpn_type" msgid="6389116710008658550">"ਕਿਸਮ"</string>
<string name="vpn_server" msgid="5216559017318406820">"ਸਰਵਰ ਦਾ ਪਤਾ"</string>
<string name="vpn_mppe" msgid="4027660356538086985">"PPP ਇਨਕ੍ਰਿਪਸ਼ਨ (MPPE)"</string>
<string name="vpn_l2tp_secret" msgid="8500633072482638606">"L2TP ਗੁਪਤ"</string>
@@ -2750,7 +2752,7 @@
<string name="vpn_show_options" msgid="7672984921872882859">"ਵਿਕਸਿਤ ਵਿਕਲਪ ਦਿਖਾਓ"</string>
<string name="vpn_search_domains" msgid="8469394307693909080">"DNS ਖੋਜ ਡੋਮੇਨ"</string>
<string name="vpn_dns_servers" msgid="3017453300909321239">"DNS ਸਰਵਰ (ਉਦਾਹਰਨ ਵਜੋਂ 8.8.8.8)"</string>
- <string name="vpn_routes" msgid="3393989650778663742">"ਫਾਰਵਰਡਿੰਗ ਰੂਟਸ (ਉਦਾਹਰਨ ਵਜੋਂ 10.0.0.0/8)"</string>
+ <string name="vpn_routes" msgid="3393989650778663742">"ਫਾਰਵਰਡਿੰਗ ਰੂਟ (ਉਦਾਹਰਨ ਵਜੋਂ 10.0.0.0/8)"</string>
<string name="vpn_username" msgid="5357878823189445042">"ਵਰਤੋਂਕਾਰ ਨਾਮ"</string>
<string name="vpn_password" msgid="5325943601523662246">"ਪਾਸਵਰਡ"</string>
<string name="vpn_save_login" msgid="6215503139606646915">"ਖਾਤਾ ਜਾਣਕਾਰੀ ਰੱਖਿਅਤ ਕਰੋ"</string>
@@ -2773,7 +2775,7 @@
<string name="vpn_disconnect_confirm" msgid="3505111947735651082">"ਇਹ VPN ਡਿਸਕਨੈਕਟ ਕਰੀਏ?"</string>
<string name="vpn_disconnect" msgid="4625914562388652486">"ਡਿਸਕਨੈਕਟ ਕਰੋ"</string>
<string name="vpn_version" msgid="2006792987077940456">"ਵਰਜਨ <xliff:g id="VERSION">%s</xliff:g>"</string>
- <string name="vpn_forget_long" msgid="8457511440635534478">"VPN ਨੂੰ ਛੱਡੋ"</string>
+ <string name="vpn_forget_long" msgid="8457511440635534478">"VPN ਨੂੰ ਭੁੱਲ ਜਾਓ"</string>
<string name="vpn_replace_vpn_title" msgid="8517436922021598103">"ਕੀ ਮੌਜੂਦਾ VPN ਨੂੰ ਤਬਦੀਲ ਕਰਨਾ ਹੈ?"</string>
<string name="vpn_set_vpn_title" msgid="6483554732067951052">"ਕੀ ਹਮੇਸ਼ਾ-ਚਾਲੂ VPN ਨੂੰ ਸੈੱਟ ਕਰਨਾ ਹੈ?"</string>
<string name="vpn_first_always_on_vpn_message" msgid="7050017738816963855">"ਜਦੋਂ ਇਹ ਸੈਟਿੰਗ ਚਾਲੂ ਹੁੰਦੀ ਹੈ, ਤਾਂ ਤੁਹਾਡੇ ਕੋਲ ਇੱਕ ਇੰਟਰਨੈੱਟ ਕਨੈਕਸ਼ਨ ਤਦ ਤੱਕ ਨਹੀਂ ਹੋਵੇਗਾ ਜਦ ਤੱਕ VPN ਸਫ਼ਲਤਾਪੂਰਵਕ ਕਨੈਕਟ ਨਹੀਂ ਹੋ ਜਾਂਦਾ"</string>
@@ -2922,8 +2924,8 @@
<string name="nfc_payment_favor_default" msgid="7555356982142464260">"ਹਮੇਸ਼ਾਂ"</string>
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"ਸਿਵਾਏ ਇਸਦੇ ਜਦੋਂ ਦੂਜਾ ਭੁਗਤਾਨ ਐਪ ਖੁੱਲ੍ਹਾ ਹੋਵੇ"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"ਟੈਪ ਕਰੋ ਅਤੇ ਭੁਗਤਾਨ ਕਰੋ ਟਰਮੀਨਲ ਵਿਖੇ, ਇਸਦੇ ਨਾਲ ਭੁਗਤਾਨ ਕਰੋ:"</string>
- <string name="nfc_how_it_works_title" msgid="6531433737926327904">"ਟਰਮੀਨਲ ਤੇ ਭੁਗਤਾਨ ਕਰ ਰਿਹਾ ਹੈ"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"ਇੱਕ ਭੁਗਤਾਨ ਐਪ ਸੈੱਟ ਅੱਪ ਕਰੋ। ਫਿਰ ਕੰਟੈਕਟਲੈਸ ਚਿੰਨ੍ਹ ਨਾਲ ਕਿਸੇ ਵੀ ਟਰਮੀਨਲ ਤੱਕ ਆਪਣੇ ਫ਼ੋਨ ਦੇ ਪਿੱਛੇ ਕੇਵਲ ਹੋਲਡ ਕਰੋ।"</string>
+ <string name="nfc_how_it_works_title" msgid="6531433737926327904">"ਟਰਮੀਨਲ \'ਤੇ ਭੁਗਤਾਨ ਕਰਨਾ"</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"ਇੱਕ ਭੁਗਤਾਨ ਐਪ ਸੈੱਟ ਅੱਪ ਕਰੋ। ਫਿਰ ਸੰਪਰਕ-ਰਹਿਤ ਚਿੰਨ੍ਹ ਵਾਲੇ ਕਿਸੇ ਵੀ ਟਰਮੀਨਲ ਵੱਲ ਨੂੰ ਆਪਣੇ ਫ਼ੋਨ ਦਾ ਪਿਛਲਾ ਪਾਸਾ ਸਿਰਫ਼ ਫੜ੍ਹ ਕੇ ਰੱਖੋ।"</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"ਸਮਝ ਲਿਆ"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"ਹੋਰ..."</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"ਕੀ ਆਪਣੀ ਤਰਜੀਹਾਂ ਦੇ ਤੌਰ ਤੇ ਸੈਟ ਕਰਨਾ ਹੈ?"</string>
@@ -3092,7 +3094,7 @@
<string name="keywords_lockscreen" msgid="4936846554280830394">"ਅਣਲਾਕ ਕਰਨ ਲਈ ਸਲਾਈਡ ਕਰੋ, ਪਾਸਵਰਡ, ਪੈਟਰਨ, ਪਿੰਨ ਦਾਖਲ ਕਰੋ"</string>
<string name="keywords_profile_challenge" msgid="8653718001253979611">"ਕਾਰਜ ਚੁਣੌਤੀ, ਕਾਰਜ, ਪ੍ਰੋਫਾਈਲ"</string>
<string name="keywords_unification" msgid="2020759909366983593">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ, ਪ੍ਰਬੰਧਿਤ ਕੀਤੀ ਗਈ ਪ੍ਰੋਫਾਈਲ, ਇਕਰੂਪ ਕਰਨਾ, ਏਕੀਕਰਨ, ਕੰਮ, ਪ੍ਰੋਫਾਈਲ"</string>
- <string name="keywords_gesture" msgid="5031323247529869644">"ਸੰਕੇਤ"</string>
+ <string name="keywords_gesture" msgid="5031323247529869644">"ਇਸ਼ਾਰੇ"</string>
<string name="keywords_payment_settings" msgid="4745023716567666052">"ਭੁਗਤਾਨ ਕਰੋ, ਟੈਪ ਕਰੋ, ਭੁਗਤਾਨ"</string>
<string name="keywords_backup" msgid="7433356270034921627">"ਬੈਕਅੱਪ, ਬੈਕ ਅੱਪ"</string>
<string name="keywords_assist_gesture_launch" msgid="2711433664837843513">"ਸੰਕੇਤ"</string>
@@ -3628,12 +3630,12 @@
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ਵਾਧੂ ਅਨੁਮਤੀਆਂ</item>
</plurals>
<string name="runtime_permissions_summary_no_permissions_granted" msgid="3477934429220828771">"ਕੋਈ ਅਨੁਮਤੀਆਂ ਨਹੀਂ ਦਿੱਤੀਆਂ"</string>
- <string name="runtime_permissions_summary_no_permissions_requested" msgid="3901636077467389637">"ਕਿਸੇ ਅਨੁਮਤੀਆਂ ਦੀ ਬੇਨਤੀ ਨਹੀਂ ਕੀਤੀ"</string>
+ <string name="runtime_permissions_summary_no_permissions_requested" msgid="3901636077467389637">"ਕਿਸੇ ਇਜਾਜ਼ਤਾਂ ਦੀ ਬੇਨਤੀ ਨਹੀਂ ਕੀਤੀ ਗਈ"</string>
<string name="filter_all_apps" msgid="4042756539846043675">"ਸਾਰੀਆਂ ਐਪਾਂ"</string>
<string name="filter_enabled_apps" msgid="5888459261768538489">"ਸਥਾਪਤ ਐਪਾਂ"</string>
<string name="filter_instant_apps" msgid="8087483282854072366">"ਤਤਕਾਲ ਐਪਾਂ"</string>
<string name="filter_personal_apps" msgid="3473268022652904457">"ਨਿੱਜੀ"</string>
- <string name="filter_work_apps" msgid="4202483998339465542">"ਦਫ਼ਤਰ"</string>
+ <string name="filter_work_apps" msgid="4202483998339465542">"ਕਾਰਜ-ਸਥਾਨ"</string>
<string name="filter_notif_all_apps" msgid="1862666327228804896">"ਐਪਾਂ: ਸਾਰੀਆਂ"</string>
<string name="filter_notif_blocked_apps" msgid="5694956954776028202">"ਬੰਦ ਕੀਤੀਆਂ ਗਈਆਂ"</string>
<string name="filter_notif_urgent_channels" msgid="5000735867167027148">"ਸ਼੍ਰੇਣੀਆਂ: ਜ਼ਰੂਰੀ ਮਹੱਤਵ"</string>
@@ -3692,7 +3694,7 @@
<string name="memory_avg_desc" msgid="1200185697910086968">"ਔਸਤ <xliff:g id="MEMORY">%1$s</xliff:g>"</string>
<string name="memory_use_running_format" msgid="3741170402563292232">"<xliff:g id="MEMORY">%1$s</xliff:g> / <xliff:g id="RUNNING">%2$s</xliff:g>"</string>
<string name="process_format" msgid="8575347150598564509">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="COUNT">%2$d</xliff:g>)"</string>
- <string name="high_power_apps" msgid="2518319744362028920">"ਬੈਟਰੀ ਸੁਯੋਗਤਾ"</string>
+ <string name="high_power_apps" msgid="2518319744362028920">"ਬੈਟਰੀ ਸੁਯੋਗਕਰਨ"</string>
<string name="additional_battery_info" msgid="6877663897819271203">"ਵਰਤੋਂ ਬਾਰੇ ਸੁਚੇਤਨਾਵਾਂ"</string>
<string name="show_all_apps" msgid="5442552004569634846">"ਡੀਵਾਈਸ ਦੀ ਪੂਰੀ ਵਰਤੋਂ ਦਿਖਾਓ"</string>
<string name="hide_extra_apps" msgid="6798261081113299441">"ਐਪ ਵਰਤੋਂ ਦਿਖਾਓ"</string>
@@ -3709,7 +3711,7 @@
<string name="high_power_off" msgid="5906679734326490426">"ਬੈਟਰੀ ਵਰਤੋਂ ਨੂੰ ਸੁਯੋਗ ਕਰਨਾ"</string>
<string name="high_power_system" msgid="739584574711292753">"ਬੈਟਰੀ ਸੁਯੋਗਤਾ ਉਪਲਬਧ ਨਹੀਂ"</string>
<string name="high_power_desc" msgid="333756885680362741">"ਬੈਟਰੀ ਅਨੁਕੂਲਤਾ ਨੂੰ ਲਾਗੂ ਨਾ ਕਰੋ। ਤੁਹਾਡੀ ਬਟਰੀ ਨੂੰ ਹੋਰ ਵੀ ਛੇਤੀ ਖ਼ਤਮ ਕਰ ਸਕਦਾ ਹੈ।"</string>
- <string name="high_power_prompt_title" msgid="2805745781720454052">"ਐਪ ਨੂੰ ਹਮੇਸ਼ਾ ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਚੱਲਣ ਦੇਈਏ?"</string>
+ <string name="high_power_prompt_title" msgid="2805745781720454052">"ਕੀ ਐਪ ਨੂੰ ਹਮੇਸ਼ਾ ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਚੱਲਣ ਦੇਣਾ ਹੈ?"</string>
<string name="high_power_prompt_body" msgid="8067395096053552289">"<xliff:g id="APP_NAME">%1$s</xliff:g> ਨੂੰ ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਹਮੇਸ਼ਾ ਚਾਲੂ ਰੱਖਣ ਦੀ ਇਜਾਜ਼ਤ ਦੇਣ ਨਾਲ ਬੈਟਰੀ ਦਾ ਕਾਰਜ-ਕਾਲ ਘਟ ਸਕਦਾ ਹੈ। \n\nਤੁਸੀਂ ਇਸਨੂੰ ਬਾਅਦ ਵਿੱਚ ਸੈਟਿੰਗਾਂ > ਐਪਾਂ ਅਤੇ ਸੂਚਨਾਵਾਂ ਵਿੱਚੋਂ ਬਦਲ ਸਕਦੇ ਹੋ।"</string>
<string name="battery_summary" msgid="4345690800899981339">"ਪਿਛਲੀ ਵਾਰ ਪੂਰਾ ਚਾਰਜ ਕਰਨ ਤੋਂ ਬਾਅਦ ਬੈਟਰੀ ਦੀ <xliff:g id="PERCENTAGE">%1$s</xliff:g> ਵਰਤੋਂ ਹੋਈ"</string>
<string name="battery_power_management" msgid="2853925857548647969">"ਪਾਵਰ ਪ੍ਰਬੰਧਨ"</string>
@@ -3781,7 +3783,7 @@
<item quantity="one"><xliff:g id="COUNT">%1$d</xliff:g> ਐਪ ਵੱਲੋਂ ਪਿਛਲੇ <xliff:g id="DURATION_1">%2$s</xliff:g> ਵਿੱਚ ਵਰਤੀ ਗਈ ਮੈਮਰੀ</item>
<item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> ਐਪਾਂ ਵੱਲੋਂ ਪਿਛਲੇ <xliff:g id="DURATION_1">%2$s</xliff:g> ਵਿੱਚ ਵਰਤੀ ਗਈ ਮੈਮਰੀ</item>
</plurals>
- <string name="running_frequency" msgid="7545170806968474449">"ਬਾਰੰਬਾਰਤਾ"</string>
+ <string name="running_frequency" msgid="7545170806968474449">"ਵਾਰਵਾਰਤਾ"</string>
<string name="memory_maximum_usage" msgid="4734981118293469479">"ਅਧਿਕਤਮ ਵਰਤੋਂ"</string>
<string name="no_data_usage" msgid="903383745620135746">"ਕੋਈ ਡਾਟਾ ਨਹੀਂ ਵਰਤਿਆ"</string>
<string name="zen_access_warning_dialog_title" msgid="7704910289810337055">"ਕੀ <xliff:g id="APP">%1$s</xliff:g> ਨੂੰ ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ ਤੱਕ ਪਹੁੰਚ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"ਜੇਕਰ ਡੀਵਾਈਸ ਲਾਕ ਹੈ, ਤਾਂ ਸੂਚਨਾਵਾਂ ਵਿੱਚ ਜਵਾਬਾਂ ਜਾਂ ਹੋਰ ਲਿਖਤੀ ਸੁਨੇਹਿਆਂ ਨੂੰ ਟਾਈਪ ਕਰਨ ਤੋਂ ਰੋਕੋ"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਸਪੈੱਲ-ਚੈਕਰ"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"ਸਪੈੱਲ ਚੈਕਰ ਚੁਣੋ"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"ਸਪੈੱਲ-ਚੈਕਰ ਵਰਤੋ"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"ਸਪੈੱਲ-ਚੈਕਰ ਵਰਤੋ"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"ਚੁਣਿਆ ਨਹੀਂ ਗਿਆ"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(ਕੋਈ ਨਹੀਂ)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4045,10 +4047,10 @@
<string name="theme_customization_accent_color_title" msgid="3949108608589133216">"ਐਕਸੈਂਟ ਰੰਗ"</string>
<string name="theme_customization_font_title" msgid="309728559821356597">"ਸੁਰਖੀ / ਮੁੱਖ ਹਿੱਸੇ ਦਾ ਫੌਂਟ"</string>
<string name="theme_customization_icon_shape_title" msgid="4603248388639328322">"ਪ੍ਰਤੀਕ ਦਾ ਆਕਾਰ"</string>
- <string name="theme_customization_device_default" msgid="7188874258500934312">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਡੀਵਾਈਸ"</string>
+ <string name="theme_customization_device_default" msgid="7188874258500934312">"ਡੀਵਾਈਸ ਪੂਰਵ-ਨਿਰਧਾਰਤ"</string>
<string name="display_cutout_emulation" msgid="288975763151891685">"ਡਿਸਪਲੇ ਕੱਟਆਊਟ"</string>
<string name="display_cutout_emulation_keywords" msgid="6795671536772871439">"ਡਿਸਪਲੇ ਕੱਟਆਊਟ, ਨੌਚ"</string>
- <string name="overlay_option_device_default" msgid="165508753381657697">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਡੀਵਾਈਸ"</string>
+ <string name="overlay_option_device_default" msgid="165508753381657697">"ਡੀਵਾਈਸ ਪੂਰਵ-ਨਿਰਧਾਰਤ"</string>
<string name="overlay_toast_failed_to_apply" msgid="5692251825129250040">"ਓਵਰਲੇ ਨੂੰ ਲਾਗੂ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string>
<string name="special_access" msgid="1453926335914696206">"ਵਿਸ਼ੇਸ਼ ਐਪ ਪਹੁੰਚ"</string>
<plurals name="special_access_summary" formatted="false" msgid="5182092345063909346">
@@ -4101,11 +4103,11 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"ਸਟੋਰੇਜ ਦੀ ਜਗ੍ਹਾ ਖਾਲੀ ਕਰਨ ਵਿੱਚ ਮਦਦ ਲਈ, ਸਟੋਰੇਜ ਪ੍ਰਬੰਧਕ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਤੋਂ ਬੈਕਅੱਪ ਲਈਆਂ ਗਈਆਂ ਫ਼ੋਟੋਆਂ ਅਤੇ ਵੀਡੀਓ ਹਟਾਉਂਦਾ ਹੈ।"</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"ਫੋਟੋਆਂ ਅਤੇ ਵੀਡੀਓ ਹਟਾਓ"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"ਸਟੋਰੇਜ ਪ੍ਰਬੰਧਕ"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"ਸਟੋਰੇਜ ਪ੍ਰਬੰਧਕ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"ਸਟੋਰੇਜ ਪ੍ਰਬੰਧਕ ਵਰਤੋ"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"ਸਵੈਚਾਲਿਤ"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"ਦਸਤੀ"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"ਹੁਣੇ ਜਗ੍ਹਾ ਖਾਲੀ ਕਰੋ"</string>
- <string name="gesture_preference_title" msgid="583646591518373785">"ਸੰਕੇਤ"</string>
+ <string name="gesture_preference_title" msgid="583646591518373785">"ਇਸ਼ਾਰੇ"</string>
<string name="gesture_preference_summary" product="default" msgid="2990736567599191163">"ਤੁਹਾਡੇ ਫ਼ੋਨ ਨੂੰ ਕੰਟਰੋਲ ਕਰਨ ਲਈ ਤੁਰੰਤ ਸੰਕੇਤ"</string>
<string name="gesture_preference_summary" product="tablet" msgid="8303793594714075580">"ਤੁਹਾਡੇ ਟੈਬਲੈੱਟ ਨੂੰ ਕੰਟਰੋਲ ਕਰਨ ਲਈ ਤੁਰੰਤ ਸੰਕੇਤ"</string>
<string name="gesture_preference_summary" product="device" msgid="7792199669106960922">"ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਨੂੰ ਕੰਟਰੋਲ ਕਰਨ ਲਈ ਤੁਰੰਤ ਸੰਕੇਤ"</string>
@@ -4122,14 +4124,14 @@
<string name="ambient_display_title" product="tablet" msgid="1106285490888683613">"ਸੂਚਨਾਵਾਂ ਦੇਖਣ ਲਈ ਟੈਬਲੈੱਟ \'ਤੇ ਦੋ ਵਾਰ ਟੈਪ ਕਰੋ"</string>
<string name="ambient_display_title" product="device" msgid="5064644474876041478">"ਸੂਚਨਾਵਾਂ ਦੇਖਣ ਲਈ ਡੀਵਾਈਸ \'ਤੇ ਦੋ ਵਾਰ ਟੈਪ ਕਰੋ"</string>
<string name="ambient_display_summary" msgid="4882910328216411109">"ਸਮਾਂ, ਸੂਚਨਾਵਾਂ ਅਤੇ ਹੋਰ ਜਾਣਕਾਰੀ ਦੇਖਣ ਲਈ ਆਪਣੀ ਸਕ੍ਰੀਨ \'ਤੇ ਡਬਲ ਟੈਪ ਕਰੋ।"</string>
- <string name="ambient_display_pickup_title" product="default" msgid="7141652156907066938">"ਫ਼ੋਨ ਚੈੱਕ ਕਰਨ ਲਈ ਚੁੱਕੋ"</string>
+ <string name="ambient_display_pickup_title" product="default" msgid="7141652156907066938">"ਫ਼ੋਨ ਦੇਖਣ ਲਈ ਚੁੱਕੋ"</string>
<string name="ambient_display_pickup_title" product="tablet" msgid="1555456400210301959">"ਸੂਚਨਾਵਾਂ ਦੇਖਣ ਲਈ ਟੈਬਲੈੱਟ ਨੂੰ ਚੁੱਕੋ"</string>
<string name="ambient_display_pickup_title" product="device" msgid="2480126522988135037">"ਸੂਚਨਾਵਾਂ ਦੇਖਣ ਲਈ ਡੀਵਾਈਸ ਨੂੰ ਚੁੱਕੋ"</string>
<string name="ambient_display_wake_screen_title" msgid="3376988352851077102">"ਡਿਸਪਲੇ ਕਿਰਿਆਸ਼ੀਲ ਕਰੋ"</string>
<string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"ਸਮਾਂ, ਸੂਚਨਾਵਾਂ ਅਤੇ ਹੋਰ ਜਾਣਕਾਰੀ ਦੇਖਣ ਲਈ ਆਪਣੇ ਫ਼ੋਨ ਨੂੰ ਚੁੱਕੋ।"</string>
<string name="ambient_display_pickup_summary" product="tablet" msgid="1077745287100012928">"ਸਮਾਂ, ਸੂਚਨਾਵਾਂ ਅਤੇ ਹੋਰ ਜਾਣਕਾਰੀ ਦੇਖਣ ਲਈ ਆਪਣੇ ਟੈਬਲੈੱਟ ਨੂੰ ਚੁੱਕੋ।"</string>
<string name="ambient_display_pickup_summary" product="device" msgid="404199660076598026">"ਸਮਾਂ, ਸੂਚਨਾਵਾਂ ਅਤੇ ਹੋਰ ਜਾਣਕਾਰੀ ਦੇਖਣ ਲਈ ਆਪਣੇ ਡੀਵਾਈਸ ਨੂੰ ਚੁੱਕੋ।"</string>
- <string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"ਫੋਨ ਦੇਖਣ ਲਈ ਟੈਪ ਕਰੋ"</string>
+ <string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"ਫ਼ੋਨ ਦੇਖਣ ਲਈ ਟੈਪ ਕਰੋ"</string>
<string name="ambient_display_tap_screen_title" product="tablet" msgid="6434521782016864148">"ਟੈਬਲੈੱਟ ਦੇਖਣ ਲਈ ਟੈਪ ਕਰੋ"</string>
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"ਡੀਵਾਈਸ ਦੇਖਣ ਲਈ ਟੈਪ ਕਰੋ"</string>
<string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"ਸਮਾਂ, ਸੂਚਨਾਵਾਂ ਅਤੇ ਹੋਰ ਜਾਣਕਾਰੀ ਦੇਖਣ ਲਈ ਆਪਣੀ ਸਕ੍ਰੀਨ \'ਤੇ ਟੈਪ ਕਰੋ।"</string>
@@ -4237,7 +4239,7 @@
<string name="storage_music_audio" msgid="3661289086715297149">"ਸੰਗੀਤ ਅਤੇ ਆਡੀਓ"</string>
<string name="storage_games" msgid="7740038143749092373">"ਗੇਮਾਂ"</string>
<string name="storage_other_apps" msgid="3202407095387420842">"ਹੋਰ ਐਪਾਂ"</string>
- <string name="storage_files" msgid="2087824267937487880">"ਫ਼ਾਈਲਾਂ"</string>
+ <string name="storage_files" msgid="2087824267937487880">"Files"</string>
<string name="storage_size_large_alternate" msgid="1317796542509105857">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" "<font size="20">"<xliff:g id="UNIT">^2</xliff:g>"</font></small>""</string>
<string name="storage_volume_total" msgid="5021484171514159913">"<xliff:g id="TOTAL">%1$s</xliff:g> ਵਿੱਚੋਂ ਵਰਤਿਆ"</string>
<string name="storage_percent_full" msgid="6924662861545958442">"ਵਰਤੀ ਗਈ"</string>
diff --git a/tests/CarDeveloperOptions/res/values-pl/arrays.xml b/tests/CarDeveloperOptions/res/values-pl/arrays.xml
index 1e1dc78..eff7e2a 100644
--- a/tests/CarDeveloperOptions/res/values-pl/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-pl/arrays.xml
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"Nigdy nie zezwalaj"</item>
<item msgid="8184570120217958741">"Zawsze zezwalaj"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normalny"</item>
+ <item msgid="5101233285497327432">"Średni"</item>
+ <item msgid="1555861583162930714">"Niska"</item>
+ <item msgid="1719683776264798117">"Krytyczny"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normalny"</item>
+ <item msgid="6107138933849816768">"Umiarkowany"</item>
+ <item msgid="182695359839047859">"Niska"</item>
+ <item msgid="8577246509202964244">"Krytyczny"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Niezmienny"</item>
<item msgid="167418068739176448">"Najczęstsza aktywność"</item>
@@ -462,13 +472,13 @@
<item msgid="3118234477029486741">"0"</item>
</string-array>
<string-array name="wifi_metered_entries">
- <item msgid="4329206416008519163">"Wykryj automatycznie"</item>
+ <item msgid="4329206416008519163">"Wykrywaj automatycznie"</item>
<item msgid="773943026484148895">"Traktuj jako sieć z pomiarem użycia danych"</item>
<item msgid="1008268820118852416">"Traktuj jako sieć bez pomiaru użycia danych"</item>
</string-array>
<string-array name="wifi_privacy_entries">
<item msgid="6545683814310036454">"Używaj randomizowanego adresu MAC (domyślnie)"</item>
- <item msgid="214234417308375326">"Użyj adresu MAC urządzenia"</item>
+ <item msgid="214234417308375326">"Używaj adresu MAC urządzenia"</item>
</string-array>
<string-array name="wifi_hidden_entries">
<item msgid="7426878022650940844">"Nie"</item>
diff --git a/tests/CarDeveloperOptions/res/values-pl/strings.xml b/tests/CarDeveloperOptions/res/values-pl/strings.xml
index b009c48..aa3095d 100644
--- a/tests/CarDeveloperOptions/res/values-pl/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-pl/strings.xml
@@ -85,8 +85,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Powiększ lub pomniejsz tekst na ekranie."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Pomniejsz"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Powiększ"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Zażółć gęślą jaźń."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Przykładowy tekst"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Czarnoksiężnik z Krainy Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Rozdział 11: Szmaragdowe Miasto"</string>
@@ -368,12 +367,12 @@
<string name="owner_info_settings_summary" msgid="4208702251226725583">"Brak"</string>
<string name="owner_info_settings_status" msgid="8049975536717685126">"<xliff:g id="COUNT_0">%1$d</xliff:g> / <xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
<string name="owner_info_settings_edit_text_hint" msgid="2250029417257939706">"Np. Android Jurka."</string>
- <string name="user_info_settings_title" msgid="1125111518759995748">"Użytkownik – informacje"</string>
+ <string name="user_info_settings_title" msgid="1125111518759995748">"Informacje o użytkowniku"</string>
<string name="show_profile_info_on_lockscreen_label" msgid="5204282771893683026">"Pokaż informacje o profilu na ekranie blokady"</string>
<string name="profile_info_settings_title" msgid="4855892878512562551">"Informacje o profilu"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Konta"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Lokalizacja"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Użyj lokalizacji"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Włącz lokalizację"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Wyłączono"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="few">Włączono – <xliff:g id="COUNT_1">%1$d</xliff:g> aplikacje mogą używać lokalizacji</item>
@@ -871,7 +870,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Włącz Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Użyj Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Użyj Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Ustawienia Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Konfiguruj punkty dostępowe sieci bezprzewodowej i zarządzaj nimi"</string>
@@ -892,7 +891,7 @@
<string name="wifi_poor_network_detection_summary" msgid="5539951465985614590">"Nie korzystaj z sieci Wi-Fi, jeśli nie ma dobrego połączenia z internetem"</string>
<string name="wifi_avoid_poor_network_detection_summary" msgid="1976503191780928104">"Używaj tylko sieci z dobrym połączeniem z internetem"</string>
<string name="use_open_wifi_automatically_title" msgid="3084513215481454350">"Łącz się z otwartymi sieciami"</string>
- <string name="use_open_wifi_automatically_summary" msgid="8338020172673161754">"Automatycznie łącz się z publicznymi sieciami wysokiej jakości"</string>
+ <string name="use_open_wifi_automatically_summary" msgid="8338020172673161754">"Automatycznie łącz się z sieciami publicznymi wysokiej jakości"</string>
<string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"Aby użyć tej funkcji, wybierz dostawcę ocen jakości sieci"</string>
<string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"Aby użyć tej funkcji, wybierz zgodnego dostawcę ocen jakości sieci"</string>
<string name="wifi_install_credentials" msgid="5650088113710858289">"Instaluj certyfikaty"</string>
@@ -1139,7 +1138,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Komórkowe"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Jeśli sieć Wi-Fi jest niedostępna, użyj sieci komórkowej"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Jeśli sieć komórkowa jest niedostępna, użyj Wi-Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Rozmowa przez Wi-Fi. Po utracie połączenia z Wi-Fi zostanie przerwana."</string>
@@ -1293,7 +1295,7 @@
<string name="screensaver_settings_button" msgid="4662384378821837589">"Ustawienia"</string>
<string name="automatic_brightness" msgid="8663792987774126192">"Automatyczna"</string>
<string name="lift_to_wake_title" msgid="5523752279947392868">"Podnieś, by wybudzić"</string>
- <string name="ambient_display_screen_title" msgid="2632871676917956691">"Ekran zgodny z otoczeniem"</string>
+ <string name="ambient_display_screen_title" msgid="2632871676917956691">"Wygaszacz z powiadomieniami"</string>
<string name="ambient_display_category_triggers" msgid="3496111745340047504">"Kiedy wyświetlać"</string>
<string name="doze_title" msgid="235269029233857546">"Nowe powiadomienia"</string>
<string name="doze_summary" msgid="6762274282827831706">"Włącz ekran po otrzymaniu powiadomień"</string>
@@ -1606,7 +1608,7 @@
<string name="restore_default_apn_completed" msgid="5671734152740058937">"Przywrócono domyślne ustawienia APN."</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"Opcje resetowania"</string>
<string name="reset_dashboard_summary" msgid="8778383341461126642">"Można zresetować sieć, aplikacje lub urządzenie"</string>
- <string name="reset_network_title" msgid="8944059136930806211">"Reset Wi-Fi, transmisji i Bluetootha"</string>
+ <string name="reset_network_title" msgid="8944059136930806211">"Resetuj Wi-Fi, transmisję i Bluetootha"</string>
<string name="reset_network_desc" msgid="4982633363916261109">"Spowoduje to usunięcie wszystkich ustawień sieciowych, w tym:\n\n"<li>"Wi‑Fi"</li>\n<li>"mobilnej transmisji danych"</li>\n<li>"Bluetooth"</li></string>
<string name="reset_esim_title" msgid="7630781767040831893">"Usuń pobrane karty SIM"</string>
<string name="reset_esim_desc" msgid="433226911566802">"Aby pobrać zastępczą kartę SIM, skontaktuj się z operatorem. Nie anuluje to Twoich abonamentów."</string>
@@ -1744,7 +1746,7 @@
<string name="settings_safetylegal_activity_unreachable" msgid="3541894966476445833">"Brak połączenia do transmisji danych. Aby wyświetlić te informacje teraz, otwórz stronę %s na dowolnym komputerze połączonym z internetem."</string>
<string name="settings_safetylegal_activity_loading" msgid="7680998654145172">"Wczytuję..."</string>
<string name="confirm_device_credential_use_alternate_method" msgid="1279869272895739941">"Użyj innej metody"</string>
- <string name="lockpassword_choose_your_screen_lock_header" msgid="6283518876031424798">"Ustawianie blokady ekranu"</string>
+ <string name="lockpassword_choose_your_screen_lock_header" msgid="6283518876031424798">"Ustaw blokadę ekranu"</string>
<string name="lockpassword_choose_your_password_message" msgid="2838273977481046536">"Ze względów bezpieczeństwa ustaw hasło"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="4921343500484160894">"Aby korzystać z odcisku palca, ustaw hasło"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="314870151462139417">"Aby korzystać z odcisku palca, ustaw wzór"</string>
@@ -1805,7 +1807,7 @@
<string name="lockpattern_settings_enable_visible_pattern_title" msgid="4935583222709647096">"Wzór jest widoczny"</string>
<string name="lockpattern_settings_enable_visible_pattern_title_profile" msgid="5338893138982642228">"Pokazuj wzór dla profilu"</string>
<string name="lockpattern_settings_enable_tactile_feedback_title" msgid="3203621862806531947">"Wibracja przy dotknięciu"</string>
- <string name="lockpattern_settings_enable_power_button_instantly_locks" msgid="5890335732200257777">"Blokada przyciskiem zasilania"</string>
+ <string name="lockpattern_settings_enable_power_button_instantly_locks" msgid="5890335732200257777">"Blokuj przyciskiem zasilania"</string>
<string name="lockpattern_settings_power_button_instantly_locks_summary" msgid="1279989004145567840">"Z wyjątkiem sytuacji, gdy blokadę anuluje <xliff:g id="TRUST_AGENT_NAME">%1$s</xliff:g>"</string>
<string name="lockpattern_settings_choose_lock_pattern" msgid="9042142745571386381">"Ustaw wzór odblokowania"</string>
<string name="lockpattern_settings_change_lock_pattern" msgid="1456643060737114885">"Zmień wzór odblokowania"</string>
@@ -2135,9 +2137,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Wibracja przy powiadomieniu"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Wibracja przy dzwonku"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Wibracja przy dotknięciu"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Użyj usługi"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Użyj korekcji kolorów"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Użyj napisów"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Użyj usługi"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Użyj korekcji kolorów"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Użyj napisów"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Dalej"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Aparaty słuchowe"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Brak połączonych aparatów słuchowych"</string>
@@ -2524,18 +2526,18 @@
<string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"Oszczędzanie baterii włącza się, jeśli bateria jest prawie wyczerpana przed typową porą ładowania"</string>
<string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"Włączy się przy <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Ustaw harmonogram"</string>
- <string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"Wyłącz, gdy w pełni naładowana"</string>
+ <string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"Wyłącz po pełnym naładowaniu"</string>
<string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"Oszczędzanie baterii wyłączy się, gdy poziom naładowania telefonu wyniesie <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"Oszczędzanie baterii wyłączy się, gdy poziom naładowania tabletu wyniesie <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<string name="battery_saver_sticky_description_new" product="device" msgid="5056520668081504111">"Oszczędzanie baterii wyłączy się, gdy poziom naładowania urządzenia wyniesie <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Włącz"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Włącz Oszczędzanie baterii"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Włącz Oszczędzanie baterii"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Włącz automatycznie"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Nigdy"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"przy <xliff:g id="PERCENT">%1$s</xliff:g> baterii"</string>
- <string name="battery_percentage" msgid="7782252476471033843">"Poziom naładowania baterii w procentach"</string>
+ <string name="battery_percentage" msgid="7782252476471033843">"Procent naładowania baterii"</string>
<string name="battery_percentage_description" msgid="9219875229166700610">"Pokazuj procentowy poziom naładowania baterii na pasku stanu"</string>
<string name="process_stats_summary_title" msgid="9189588417488537954">"Statystyki procesów"</string>
<string name="process_stats_summary" msgid="8077998499161221885">"Rozbudowane statystyki uruchomionych procesów"</string>
@@ -2640,7 +2642,7 @@
<string name="uninstall_device_admin" msgid="9017499299961719830">"Odinstaluj aplikację"</string>
<string name="remove_and_uninstall_device_admin" msgid="5607703579731496253">"Dezaktywuj i odinstaluj"</string>
<string name="select_device_admin_msg" msgid="4173769638399075387">"Aplikacje do zarządzania urządzeniem"</string>
- <string name="no_device_admins" msgid="4129231900385977460">"Brak dostępnych aplikacji do administrowania urządzeniem"</string>
+ <string name="no_device_admins" msgid="4129231900385977460">"Brak dostępnych aplikacji do zarządzania urządzeniem"</string>
<string name="personal_device_admin_title" msgid="759440849188565661">"Osobiste"</string>
<string name="managed_device_admin_title" msgid="8021522755492551726">"Praca"</string>
<string name="sms_access_restriction_enabled" msgid="3006320256764718303">"Ogranicz dostęp do SMS-ów i rejestru połączeń"</string>
@@ -2804,7 +2806,7 @@
<string name="data_usage_metered_wifi" msgid="2955256408132426720">"Sieci Wi‑Fi z pomiarem"</string>
<string name="data_usage_metered_wifi_disabled" msgid="5771083253782103415">"Aby wybrać sieci z pomiarem, włącz Wi-Fi."</string>
<string name="data_usage_metered_auto" msgid="7924116401382629319">"Automatycznie"</string>
- <string name="data_usage_metered_yes" msgid="7333744880035386073">"Użycie danych jest mierzone"</string>
+ <string name="data_usage_metered_yes" msgid="7333744880035386073">"Pomiar użycia danych"</string>
<string name="data_usage_metered_no" msgid="1961524615778610008">"Użycie danych nie jest mierzone"</string>
<string name="data_usage_disclaimer" msgid="4683321532922590425">"Operator komórkowy może obliczać ilość przesłanych danych inaczej niż urządzenie."</string>
<string name="cryptkeeper_emergency_call" msgid="4625420047524693116">"Połączenie alarmowe"</string>
@@ -2951,7 +2953,7 @@
<string name="user_add_user_message_long" msgid="686637203224195465">"Z tego urządzenia możesz korzystać wraz z innymi osobami, dodając na nim konta użytkowników. Każdy użytkownik ma własne miejsce na swoje aplikacje, tapety i inne dane. Może też zmieniać ustawienia, które wpływają na wszystkich użytkowników urządzenia (np. Wi‑Fi).\n\nGdy dodasz nowego użytkownika, musi on skonfigurować swoje miejsce na dane.\n\nKażdy użytkownik może aktualizować aplikacje w imieniu wszystkich pozostałych użytkowników. Ułatwienia dostępu i usługi mogą nie zostać przeniesione na konto nowego użytkownika."</string>
<string name="user_add_user_message_short" msgid="1802594476285458254">"Gdy dodasz nowego użytkownika, musi on skonfigurować swoją przestrzeń.\n\nKażdy użytkownik może aktualizować aplikacje wszystkich innych użytkowników."</string>
<string name="user_setup_dialog_title" msgid="6748950002206392396">"Skonfigurować ustawienia dla użytkownika?"</string>
- <string name="user_setup_dialog_message" msgid="2988559933258353919">"Upewnij się, że ta osoba jest w pobliżu i może skonfigurować swój profil."</string>
+ <string name="user_setup_dialog_message" msgid="2988559933258353919">"Upewnij się, że ta osoba jest w pobliżu i może skonfigurować swój profil"</string>
<string name="user_setup_profile_dialog_message" msgid="7611900802824048526">"Skonfigurować teraz profil?"</string>
<string name="user_setup_button_setup_now" msgid="4941459406266856176">"Skonfiguruj"</string>
<string name="user_setup_button_setup_later" msgid="6596031428556518752">"Nie teraz"</string>
@@ -3002,8 +3004,8 @@
<string name="nfc_payment_favor_default" msgid="7555356982142464260">"Zawsze"</string>
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"Z wyjątkiem, gdy jest otwarta inna aplikacja płatnicza"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"Na terminalu „Zbliż i zapłać” płać przy użyciu:"</string>
- <string name="nfc_how_it_works_title" msgid="6531433737926327904">"Płacenie przy terminalu"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Skonfiguruj aplikację płatniczą, a później przyłóż tylną część telefonu do terminala z symbolem płatności zbliżeniowej."</string>
+ <string name="nfc_how_it_works_title" msgid="6531433737926327904">"Płacenie na terminalu"</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Skonfiguruj aplikację płatniczą, a później przyłóż tylną część telefonu do terminala z symbolem płatności zbliżeniowej."</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"OK"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"Więcej..."</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"Ustawić jako Twoją preferencję?"</string>
@@ -3187,7 +3189,7 @@
<string name="keywords_financial_apps_sms_access" msgid="3236014691838121857">"aplikacja finansowa, SMS, uprawnienia"</string>
<string name="keywords_systemui_theme" msgid="9150908170417305866">"tryb ciemny"</string>
<string name="keywords_device_feedback" msgid="6948977907405738490">"błąd"</string>
- <string name="keywords_ambient_display_screen" msgid="5873935693887583428">"Ekran dostosowany do otoczenia, ekran blokady"</string>
+ <string name="keywords_ambient_display_screen" msgid="5873935693887583428">"Wygaszacz z powiadomieniami, ekran blokady"</string>
<string name="keywords_lock_screen_notif" msgid="4914337222856805463">"powiadomienia na ekranie blokady, powiadomienia"</string>
<string name="keywords_face_settings" msgid="4117345666006836599">"twarz"</string>
<string name="keywords_fingerprint_settings" msgid="902902368701134163">"odcisk palca, dodawanie odcisków palców"</string>
@@ -3307,7 +3309,7 @@
<string name="zen_mode_block_effect_summary_sound" msgid="4907185880913861880">"Dźwięk i wibracje"</string>
<string name="zen_mode_block_effect_summary_some" msgid="6035118904496072665">"Dźwięk, wibracje i niektóre rodzaje wizualnej sygnalizacji powiadomień"</string>
<string name="zen_mode_block_effect_summary_all" msgid="2830443565687247759">"Dźwięk, wibracje i wizualna sygnalizacja powiadomień"</string>
- <string name="zen_mode_blocked_effects_footer" msgid="4375156159613413924">"Powiadomienia wymagane przez podstawowe funkcje telefonu oraz stan nigdy nie będą ukryte"</string>
+ <string name="zen_mode_blocked_effects_footer" msgid="4375156159613413924">"Powiadomienia wymagane przez podstawowe funkcje i stan telefonu nigdy nie będą ukryte"</string>
<string name="zen_mode_no_exceptions" msgid="3099578343994492857">"Brak"</string>
<string name="zen_mode_other_options" msgid="7216192179063769057">"inne opcje"</string>
<string name="zen_mode_add" msgid="2533484377786927366">"Dodaj"</string>
@@ -3368,8 +3370,8 @@
<string name="zen_onboarding_dnd_visual_disturbances_header" msgid="7584229011611927613">"Zmienić ustawienia trybu Nie przeszkadzać?"</string>
<string name="sound_work_settings" msgid="4140215240360927923">"Dźwięki w profilu do pracy"</string>
<string name="work_use_personal_sounds_title" msgid="531727195073003599">"Użyj dźwięków z profilu osobistego"</string>
- <string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"Dźwięki są takie same w profilu osobistym i do pracy"</string>
- <string name="work_ringtone_title" msgid="5499360583947410224">"Dzwonek w profilu do pracy"</string>
+ <string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"Dźwięki są takie same w profilu osobistym i służbowym"</string>
+ <string name="work_ringtone_title" msgid="5499360583947410224">"Dzwonek w profilu służbowym"</string>
<string name="work_notification_ringtone_title" msgid="8059159087214025757">"Domyślny dźwięk powiadomienia w profilu służbowym"</string>
<string name="work_alarm_ringtone_title" msgid="5328487181385375130">"Domyślny dźwięk alarmu w profilu służbowym"</string>
<string name="work_sound_same_as_personal" msgid="7728560881697159758">"Taki sam jak w profilu osobistym"</string>
@@ -3394,7 +3396,7 @@
<string name="notification_badging_title" msgid="6311699476970264712">"Zezwól na plakietki z powiadomieniami"</string>
<string name="notification_bubbles_title" msgid="9196562435741861317">"Dymki"</string>
<string name="notification_bubbles_summary" msgid="4624512775901949578">"Szybki dostęp do zawartości aplikacji z dowolnego miejsca dzięki pływającym skrótom"</string>
- <string name="bubbles_feature_education" msgid="8979109826818881018">"Niektóre powiadomienia i inne treści mogą pojawiać się jako dymki na ekranie. Aby otworzyć dymek, kliknij go. Aby zamknąć, przeciągnij go w dół ekranu."</string>
+ <string name="bubbles_feature_education" msgid="8979109826818881018">"Niektóre powiadomienia i inne treści mogą pojawiać się jako dymki na ekranie. Aby otworzyć dymek, kliknij go. Aby zamknąć, przeciągnij go na dół ekranu."</string>
<string name="bubbles_app_toggle_title" msgid="6401217027603326439">"Dymki"</string>
<string name="bubbles_app_toggle_summary" msgid="7707611139796553855">"Zezwól aplikacji <xliff:g id="APP_NAME">%1$s</xliff:g> na pokazywanie niektórych powiadomień jako dymków"</string>
<string name="bubbles_feature_disabled_dialog_title" msgid="3375452386012079293">"Włącz dymki"</string>
@@ -3788,7 +3790,7 @@
<string name="roles_title" msgid="2825063787446244357">"Role"</string>
<string name="default_app" msgid="8861276008866619872">"(Domyślna)"</string>
<string name="system_app" msgid="4111402206594443265">"(Systemowa)"</string>
- <string name="system_default_app" msgid="1454719098589351197">"(Domyślna aplikacja systemu)"</string>
+ <string name="system_default_app" msgid="1454719098589351197">"(Domyślna aplikacja systemowa)"</string>
<string name="apps_storage" msgid="5658466038269046038">"Magazyn aplikacji"</string>
<string name="usage_access" msgid="2023443456361489516">"Dostęp do danych o użyciu"</string>
<string name="permit_usage_access" msgid="3321727608629752758">"Zezwól na dostęp do danych o użyciu"</string>
@@ -3998,7 +4000,7 @@
<string name="disabled_by_policy_title_camera" msgid="3741138901926111197">"Brak uprawnień do aparatu"</string>
<string name="disabled_by_policy_title_screen_capture" msgid="1856835333536274665">"Brak uprawnień do tworzenia zrzutów ekranu"</string>
<string name="disabled_by_policy_title_suspend_packages" msgid="4254714213391802322">"Nie można otworzyć tej aplikacji"</string>
- <string name="default_admin_support_msg" msgid="5789424433689798637">"Jeśli masz pytania, skontaktuj się z administratorem"</string>
+ <string name="default_admin_support_msg" msgid="5789424433689798637">"Jeśli masz pytania, skontaktuj się z administratorem IT"</string>
<string name="admin_support_more_info" msgid="8737842638087863477">"Więcej szczegółów"</string>
<string name="admin_profile_owner_message" msgid="3199544166281052845">"Administrator może monitorować aplikacje i dane powiązane z Twoim profilem do pracy (w tym ustawienia, uprawnienia, firmowe uprawnienia dostępu, aktywność w sieci i informacje o lokalizacji urządzenia) oraz nimi zarządzać."</string>
<string name="admin_profile_owner_user_message" msgid="2991249382056855531">"Administrator może monitorować aplikacje i dane powiązane z tym użytkownikiem (w tym ustawienia, uprawnienia, firmowe uprawnienia dostępu, aktywność w sieci i informacje o lokalizacji urządzenia) oraz nimi zarządzać."</string>
@@ -4140,7 +4142,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Uniemożliwiaj wpisywanie tekstu w obszarze powiadomień, gdy urządzenie jest zablokowane"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Domyślne sprawdzanie pisowni"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Wybierz sprawdzanie pisowni"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Sprawdzaj pisownię"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Sprawdzaj pisownię"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Nie wybrano"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(brak)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4241,7 +4243,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Aby pomóc zwolnić miejsce, Menedżer miejsca usuwa z urządzenia kopie zapasowe zdjęć i filmów."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Usuń zdjęcia i filmy"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Menedżer miejsca"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Użyj Menedżera miejsca"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Użyj Menedżera miejsca"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatyczne"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Instrukcja"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Zwolnij miejsce teraz"</string>
@@ -4293,7 +4295,7 @@
<string name="instant_apps_settings" msgid="879003203555847537">"Ustawienia aplikacji błyskawicznych"</string>
<string name="domain_url_section_title" msgid="206403507921518321">"Zainstalowane aplikacje"</string>
<string name="automatic_storage_manager_activation_warning" msgid="2630083316417707308">"Pamięcią zarządza teraz menedżer miejsca"</string>
- <string name="account_for_section_header" msgid="5975241715840642563">"Konta użytkownika <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
+ <string name="account_for_section_header" msgid="5975241715840642563">"Konta użytkownika: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
<string name="configure_section_header" msgid="6988981883075615136">"Konfiguracja"</string>
<string name="auto_sync_account_title" msgid="2394463123733529506">"Automatycznie synchronizuj dane"</string>
<string name="auto_sync_personal_account_title" msgid="6844465157916100655">"Automatycznie synchronizuj dane osobiste"</string>
diff --git a/tests/CarDeveloperOptions/res/values-pt-rPT/arrays.xml b/tests/CarDeveloperOptions/res/values-pt-rPT/arrays.xml
index 28db34e..90734bb 100644
--- a/tests/CarDeveloperOptions/res/values-pt-rPT/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-pt-rPT/arrays.xml
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"Nunca permitir"</item>
<item msgid="8184570120217958741">"Permitir sempre"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normal"</item>
+ <item msgid="5101233285497327432">"Moderada"</item>
+ <item msgid="1555861583162930714">"Baixa"</item>
+ <item msgid="1719683776264798117">"Crítica"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normal"</item>
+ <item msgid="6107138933849816768">"Moderada"</item>
+ <item msgid="182695359839047859">"Baixa"</item>
+ <item msgid="8577246509202964244">"Crítica"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Persistente"</item>
<item msgid="167418068739176448">"Principal atividade"</item>
diff --git a/tests/CarDeveloperOptions/res/values-pt-rPT/strings.xml b/tests/CarDeveloperOptions/res/values-pt-rPT/strings.xml
index 4804f72..b617529 100644
--- a/tests/CarDeveloperOptions/res/values-pt-rPT/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-pt-rPT/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Aumente ou diminua o texto no ecrã."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Diminuir"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Aumentar"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Exemplo de texto"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"O Maravilhoso Feiticeiro de Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Capítulo 11: A Maravilhosa Cidade Esmeralda de Oz"</string>
@@ -270,8 +269,8 @@
<string name="locale_remove_menu" msgid="3395565699934985486">"Remover"</string>
<string name="add_a_language" msgid="4103889327406274800">"Adicionar um idioma"</string>
<plurals name="dlg_remove_locales_title" formatted="false" msgid="7362450618787242592">
- <item quantity="other">Pretende remover os idiomas selecionados?</item>
- <item quantity="one">Pretende remover o idioma selecionado?</item>
+ <item quantity="other">Remover os idiomas selecionados?</item>
+ <item quantity="one">Remover o idioma selecionado?</item>
</plurals>
<string name="dlg_remove_locales_message" msgid="5179370688876343176">"O texto será apresentado noutro idioma."</string>
<string name="dlg_remove_locales_error_title" msgid="9090578326002163975">"Não é possível remover todos os idiomas"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Informação do perfil"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Contas"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Localização"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Utilizar a localização"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Utilizar a localização"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Desativada"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Ativada – <xliff:g id="COUNT_1">%1$d</xliff:g> aplicações podem aceder à localização.</item>
@@ -390,7 +389,7 @@
<string name="security_passwords_title" msgid="6853942836045862315">"Privacidade"</string>
<string name="disabled_by_administrator_summary" msgid="6099821045360491127">"Desativada pelo gestor"</string>
<string name="security_status_title" msgid="1261960357751754428">"Estado de segurança"</string>
- <string name="security_dashboard_summary_face" msgid="2536136110153593745">"Bloqueio de ecrã, Desbloqueio Através do Rosto"</string>
+ <string name="security_dashboard_summary_face" msgid="2536136110153593745">"Bloqueio de ecrã, Desbloqueio facial"</string>
<string name="security_dashboard_summary" msgid="4048877125766167227">"Bloqueio de ecrã, impressão digital"</string>
<string name="security_dashboard_summary_no_fingerprint" msgid="8861903321053490658">"Bloqueio de ecrã"</string>
<string name="security_settings_face_preference_summary" msgid="4437701024542221434">"Rosto adicionado."</string>
@@ -419,7 +418,7 @@
<string name="security_settings_face_enroll_done" msgid="5409739233373490971">"Concluído"</string>
<string name="security_settings_face_settings_use_face_category" msgid="1586532139528115416">"Utilize o rosto para"</string>
<string name="security_settings_face_settings_use_face_unlock_phone" msgid="318274519126401671">"Desbloq. dispositivo"</string>
- <string name="security_settings_face_settings_use_face_for_apps" msgid="5479369083370664351">"Início de sessão e pagamentos na aplicação"</string>
+ <string name="security_settings_face_settings_use_face_for_apps" msgid="5479369083370664351">"Início de sessão e pagamentos na app"</string>
<string name="security_settings_face_settings_require_attention" msgid="2755140150841557225">"Olhos abertos para desbloquear"</string>
<string name="security_settings_face_settings_require_attention_details" msgid="2557060433599942587">"Para utilizar a autenticação facial, os olhos têm de estar abertos."</string>
<string name="security_settings_face_settings_require_confirmation" msgid="7312024271060416438">"Solicitar sempre confirmação"</string>
@@ -427,7 +426,7 @@
<string name="security_settings_face_settings_remove_face_data" msgid="2821359954483136239">"Remover dados rosto"</string>
<string name="security_settings_face_settings_footer" msgid="4627175759990550715">"Pode utilizar o seu rosto para desbloquear o dispositivo e aceder a aplicações. "<annotation id="url">"Saiba mais"</annotation></string>
<string name="security_settings_face_settings_remove_dialog_title" msgid="5675319895815271094">"Eliminar os dados do rosto?"</string>
- <string name="security_settings_face_settings_remove_dialog_details" msgid="3754494807169276107">"Os dados gravados pelo Desbloqueio Através do Rosto serão eliminados permanentemente e em segurança. Após a remoção, precisará do PIN, do padrão ou da palavra-passe para desbloquear o telemóvel, iniciar sessão nas aplicações e confirmar pagamentos."</string>
+ <string name="security_settings_face_settings_remove_dialog_details" msgid="3754494807169276107">"Os dados gravados pelo Desbloqueio facial serão eliminados permanentemente e em segurança. Após a remoção, precisará do PIN, do padrão ou da palavra-passe para desbloquear o telemóvel, iniciar sessão nas aplicações e confirmar pagamentos."</string>
<string name="security_settings_fingerprint_preference_title" msgid="4177132225930582928">"Impressão digital"</string>
<string name="fingerprint_manage_category_title" msgid="1463406696801542090">"Gerir impressões dig."</string>
<string name="fingerprint_usage_category_title" msgid="7298369141954599706">"Usar impr. dig. para"</string>
@@ -467,11 +466,11 @@
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="3428927518029038956">"OK"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="4312297515772004580">"Eliminar"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"Toque no sensor"</string>
- <string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Coloque o dedo sobre o sensor e levante-o depois de sentir uma vibração"</string>
+ <string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Coloque o dedo sobre o sensor e levante-o depois de sentir uma vibração."</string>
<string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"Levante e toque novamente"</string>
- <string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Vá levantando o dedo para adicionar as diferentes partes da sua impressão digital"</string>
+ <string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Vá levantando o dedo para adicionar as diferentes partes da sua impressão digital."</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"Impressão digital adicionada"</string>
- <string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"Quando vir este ícone, pode utilizar a sua impressão digital para identificação ou para autorizar compras"</string>
+ <string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"Quando vir este ícone, pode utilizar a sua impressão digital para identificação ou para autorizar compras."</string>
<string name="security_settings_fingerprint_enroll_enrolling_skip" msgid="1473280156532146933">"Fazer isto mais tarde"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_title" msgid="2816424026528101690">"Ignorar configur. de impressão digital?"</string>
<string name="setup_fingerprint_enroll_enrolling_skip_message" msgid="8139299964344809780">"Optou por utilizar a sua impressão digital como uma forma de desbloquear o telemóvel. Se ignorar agora, terá de configurar esta opção mais tarde. A configuração demora apenas alguns minutos."</string>
@@ -494,12 +493,12 @@
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"Adicionar outra"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"Seguinte"</string>
<string name="security_settings_fingerprint_enroll_disclaimer" msgid="5831834311961551423">"Para além de desbloquear o telemóvel, também pode utilizar a sua impressão digital para autorizar compras e o acesso de aplicações. "<annotation id="url">"Saiba mais"</annotation></string>
- <string name="security_settings_fingerprint_enroll_disclaimer_lockscreen_disabled" msgid="7954742554236652690">" A opção de bloqueio do ecrã está desativada. Para saber mais, contacte o gestor da sua entidade. "<annotation id="admin_details">"Mais detalhes"</annotation>\n\n"Pode continuar a utilizar a impressão digital para autorizar compras e o acesso a aplicações. "<annotation id="url">"Saiba mais"</annotation></string>
+ <string name="security_settings_fingerprint_enroll_disclaimer_lockscreen_disabled" msgid="7954742554236652690">" A opção de bloqueio do ecrã está desativada. Para saber mais, contacte o gestor da sua entidade. "<annotation id="admin_details">"Mais detalhes"</annotation>\n\n"Pode continuar a utilizar a impressão digital para autorizar compras e o acesso a apps. "<annotation id="url">"Saiba mais"</annotation></string>
<string name="security_settings_fingerprint_enroll_lift_touch_again" msgid="1670703069782212223">"Levante o dedo e toque no sensor novamente"</string>
<string name="fingerprint_add_max" msgid="2939393314646115661">"Pode adicionar até <xliff:g id="COUNT">%d</xliff:g> impressões digitais"</string>
<string name="fingerprint_intro_error_max" msgid="3247720976621039437">"Adicionou o número máximo de impressões digitais"</string>
<string name="fingerprint_intro_error_unknown" msgid="3975674268256524015">"Não é possível adicionar mais impressões digitais"</string>
- <string name="fingerprint_last_delete_title" msgid="3104596858161269635">"Pretende remover todas as impressões digitais?"</string>
+ <string name="fingerprint_last_delete_title" msgid="3104596858161269635">"Remover todas as impressões digitais?"</string>
<string name="fingerprint_delete_title" msgid="3120894112324235536">"Remover \"<xliff:g id="FINGERPRINT_ID">%1$s</xliff:g>\""</string>
<string name="fingerprint_delete_message" msgid="5895802741486967970">"Pretende eliminar esta impressão digital?"</string>
<string name="fingerprint_last_delete_message" msgid="3346252479778971442">"Não poderá utilizar as impressões digitais para desbloquear o telemóvel, autorizar compras ou iniciar sessão em aplicações."</string>
@@ -594,8 +593,8 @@
<string name="unlock_set_unlock_mode_password" msgid="397703731925549447">"Palavra-passe"</string>
<string name="unlock_setup_wizard_fingerprint_details" msgid="6515136915205473675">"Assim que configurar um bloqueio de ecrã, também pode configurar a sua impressão digital em Definições > Segurança."</string>
<string name="unlock_disable_lock_title" msgid="3508492427073600294">"Desativar bloqueio do ecrã"</string>
- <string name="unlock_disable_frp_warning_title" msgid="5858589970505254193">"Pretende remover a proteção do dispositivo?"</string>
- <string name="unlock_disable_frp_warning_title_profile" msgid="3814123014295965266">"Pretende remover a proteção do perfil?"</string>
+ <string name="unlock_disable_frp_warning_title" msgid="5858589970505254193">"Remover a proteção do dispositivo?"</string>
+ <string name="unlock_disable_frp_warning_title_profile" msgid="3814123014295965266">"Remover a proteção do perfil?"</string>
<string name="unlock_disable_frp_warning_content_pattern" msgid="1843950215687159135">"As funcionalidades de proteção do dispositivo não funcionam sem o padrão."</string>
<string name="unlock_disable_frp_warning_content_pattern_fingerprint" msgid="8846957650251741548">"As funcionalidades de proteção do dispositivo não funcionam sem o padrão.<xliff:g id="EMPTY_LINE">
@@ -712,7 +711,7 @@
<string name="lockpattern_tutorial_cancel_label" msgid="450401426127674369">"Cancelar"</string>
<string name="lockpattern_tutorial_continue_label" msgid="8474690922559443018">"Seguinte"</string>
<string name="lock_setup" msgid="8710689848703935088">"A configuração está concluída."</string>
- <string name="manage_device_admin" msgid="322047441168191695">"Aplicações de administração do dispositivo"</string>
+ <string name="manage_device_admin" msgid="322047441168191695">"Apps de administração do dispositivo"</string>
<string name="number_of_device_admins_none" msgid="8519193548630223132">"Sem aplicações ativas"</string>
<plurals name="number_of_device_admins" formatted="false" msgid="6445613288828151224">
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> aplicações ativas</item>
@@ -730,7 +729,7 @@
<string name="bluetooth_settings" msgid="5228032727293770389">"Bluetooth"</string>
<string name="bluetooth_settings_title" msgid="7261244857456521825">"Bluetooth"</string>
<string name="bluetooth_settings_summary" msgid="1221689092429277887">"Gerir ligações, definir nome e detectabilidade do dispositivo"</string>
- <string name="bluetooth_pairing_request" msgid="7221745525632573125">"Pretende sincronizar com o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
+ <string name="bluetooth_pairing_request" msgid="7221745525632573125">"Sincronizar com o dispositivo <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="bluetooth_pairing_key_msg" msgid="1139230917419961975">"Código de sincronização Bluetooth"</string>
<string name="bluetooth_enter_passkey_msg" msgid="6205151011298670207">"Introduza o código de sincronização e, em seguida, prima Return ou Enter"</string>
<string name="bluetooth_enable_alphanumeric_pin" msgid="9138308197078115672">"O PIN contém letras ou símbolos"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Ativar Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Utilizar o Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Utilizar o Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Definições de Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Configurar e gerir pontos de acesso sem fios"</string>
@@ -862,7 +861,7 @@
<string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"Para utilizar, selecionar um fornecedor de classificação de rede"</string>
<string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"Para utilizar, selecionar um fornecedor de classificação de rede compatível"</string>
<string name="wifi_install_credentials" msgid="5650088113710858289">"Instalar certificados"</string>
- <string name="wifi_scan_notify_text" msgid="7614101215028336927">"Para melhorar a precisão da localização, as aplicações e os serviços podem continuar a procurar redes Wi-Fi em qualquer altura, mesmo quando o Wi-Fi está desativado. Pode utilizar esta opção, por exemplo, para melhorar as funcionalidades e os serviços baseados na localização. Pode alterar esta opção nas <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>definições de análise<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
+ <string name="wifi_scan_notify_text" msgid="7614101215028336927">"Para melhorar a precisão da localização, as apps e os serviços podem continuar a procurar redes Wi-Fi em qualquer altura, mesmo quando o Wi-Fi está desativado. Pode utilizar esta opção, por exemplo, para melhorar as funcionalidades e os serviços baseados na localização. Pode alterar esta opção nas <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>definições de análise<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
<string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"Para melhorar a precisão da localização, ative a procura de redes Wi-Fi nas <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>definições de análise<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
<string name="wifi_scan_notify_remember_choice" msgid="1235445971400237444">"Não mostrar de novo"</string>
<string name="wifi_setting_sleep_policy_title" msgid="2120785188625932076">"Manter Wi-Fi ligada durante suspensão"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Rede móvel"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Se o Wi‑Fi não estiver disponível, utilize a rede móvel."</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Se a rede móvel não estiver disponível, utilizar Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Chamada por Wi‑Fi. Se o Wi‑Fi for perdido, a chamada é terminada."</string>
@@ -1367,7 +1369,7 @@
<string name="memory_available_read_only" msgid="9125440204248584531">"Disponível (só de leitura)"</string>
<string name="memory_size" msgid="6637939229251056764">"Espaço total"</string>
<string name="memory_calculating_size" msgid="8407591625479256510">"A calcular..."</string>
- <string name="memory_apps_usage" msgid="1886814780760368266">"Aplicações e respetivos dados"</string>
+ <string name="memory_apps_usage" msgid="1886814780760368266">"Apps e respetivos dados"</string>
<string name="memory_media_usage" msgid="2744652206722240527">"Multimédia"</string>
<string name="memory_downloads_usage" msgid="7039979723012065168">"Transferências"</string>
<string name="memory_dcim_usage" msgid="599009211606524732">"Imagens, vídeos"</string>
@@ -1447,7 +1449,7 @@
<string name="storage_internal_forget_details" msgid="5655856574682184453">"Para utilizar as aplicações, as fotos ou os dados incluídos em <xliff:g id="NAME">^1</xliff:g>, insira-o novamente. \n\nEm alternativa, pode optar por esquecer este armazenamento se o mesmo não estiver disponível. \n\nSe optar por esquecê-lo, todos os dados presentes no dispositivo são eliminados permanentemente. \n\nPode reinstalar as aplicações posteriormente, mas os dados armazenados neste dispositivo são eliminados."</string>
<string name="storage_internal_forget_confirm_title" msgid="331032276130605241">"Pretende esquecer <xliff:g id="NAME">^1</xliff:g>?"</string>
<string name="storage_internal_forget_confirm" msgid="3052483375203727176">"Todas as aplicações, as fotos e os dados armazenados neste <xliff:g id="NAME">^1</xliff:g> são eliminados definitivamente."</string>
- <string name="storage_detail_apps" msgid="8154648512504196820">"Aplicações"</string>
+ <string name="storage_detail_apps" msgid="8154648512504196820">"Apps"</string>
<string name="storage_detail_images" msgid="6996202225684468964">"Imagens"</string>
<string name="storage_detail_videos" msgid="6030983354721080849">"Vídeos"</string>
<string name="storage_detail_audio" msgid="6011098436589663944">"Áudio"</string>
@@ -1711,7 +1713,7 @@
<string name="lockpassword_choose_your_pin_message" msgid="8942598950627277885">"Por motivos de segurança, defina um PIN."</string>
<string name="lockpassword_choose_your_pin_header_for_fingerprint" msgid="1102927520952116303">"Defina PIN para usar impressão digital"</string>
<string name="lockpassword_choose_your_pattern_message" msgid="1503075455752279687">"Por motivos de segurança, defina um padrão."</string>
- <string name="lockpassword_confirm_your_password_header" msgid="9055242184126838887">"Reintroduzir a palavra-passe"</string>
+ <string name="lockpassword_confirm_your_password_header" msgid="9055242184126838887">"Reintroduza a palavra-passe"</string>
<string name="lockpassword_confirm_your_pattern_header" msgid="7137526922696316545">"Confirmar o padrão"</string>
<string name="lockpassword_confirm_your_pin_header" msgid="4335593948303036343">"Reintroduza o PIN"</string>
<string name="lockpassword_confirm_passwords_dont_match" msgid="1783767008133345784">"As palavras-passe não correspondem"</string>
@@ -1789,7 +1791,7 @@
<string name="applications_settings_header" msgid="3766501606045211098">"Definições da aplicação"</string>
<string name="install_applications" msgid="7745902974984889179">"Fontes desconhecidas"</string>
<string name="install_applications_title" msgid="8164828577588659496">"Permit. todas as fontes app"</string>
- <string name="recent_app_category_title" msgid="7688788038277126727">"Aplicações abertas recentemente"</string>
+ <string name="recent_app_category_title" msgid="7688788038277126727">"Apps abertas recentemente"</string>
<string name="see_all_apps_title" msgid="6435061912110347474">"Ver as <xliff:g id="COUNT">%1$d</xliff:g> apps"</string>
<string name="install_all_warning" product="tablet" msgid="4580699862358542727">"O seu tablet e os dados pessoais são mais vulneráveis a ataques de aplicações desconhecidas. Ao instalar aplicações desta fonte, aceita ser responsável por quaisquer danos no tablet ou perdas de dados que possam resultar da utilização do mesmo."</string>
<string name="install_all_warning" product="default" msgid="7445839116997296358">"O seu telemóvel e os dados pessoais são mais vulneráveis a ataques de aplicações desconhecidas. Ao instalar aplicações desta fonte, aceita ser responsável por quaisquer danos no telemóvel ou perdas de dados que possam resultar da utilização do mesmo."</string>
@@ -1848,7 +1850,7 @@
<string name="filter" msgid="2426943916212457962">"Filtrar"</string>
<string name="filter_dlg_title" msgid="115313222190512670">"Escolher opções de filtro"</string>
<string name="filter_apps_all" msgid="3938077534861382701">"Todas as aplicações"</string>
- <string name="filter_apps_disabled" msgid="5394488790555678117">"Aplicações desativadas"</string>
+ <string name="filter_apps_disabled" msgid="5394488790555678117">"Apps desativadas"</string>
<string name="filter_apps_third_party" msgid="3985794876813232322">"Transferidas"</string>
<string name="filter_apps_running" msgid="6852975378502426359">"Em execução"</string>
<string name="filter_apps_onsdcard" product="nosdcard" msgid="3501701148760911442">"Armazenamento USB"</string>
@@ -1890,11 +1892,11 @@
<string name="app_disable_notifications_dlg_title" msgid="699530661413553928">"Desativar notificações?"</string>
<string name="app_install_details_group_title" msgid="2909597319422976921">"Loja"</string>
<string name="app_install_details_title" msgid="6954953384372934881">"Detalhes da aplicação"</string>
- <string name="app_install_details_summary" msgid="6612222941121363940">"Aplicação instalada a partir da <xliff:g id="APP_STORE">%1$s</xliff:g>"</string>
+ <string name="app_install_details_summary" msgid="6612222941121363940">"App instalada a partir da <xliff:g id="APP_STORE">%1$s</xliff:g>"</string>
<string name="instant_app_details_summary" msgid="6384264315914966114">"Mais informações sobre <xliff:g id="APP_STORE">%1$s</xliff:g>"</string>
<string name="app_ops_running" msgid="6378418969742957805">"Em execução"</string>
<string name="app_ops_never_used" msgid="8305262378162525813">"(Nunca utilizado)"</string>
- <string name="no_default_apps" msgid="4519038578011412532">"Sem Aplicações predefin."</string>
+ <string name="no_default_apps" msgid="4519038578011412532">"Sem Apps predefin."</string>
<string name="storageuse_settings_title" msgid="3390798597982116048">"Utilização do armazenam."</string>
<string name="storageuse_settings_summary" msgid="3013328092465903687">"Ver armazenamento utilizado pelas aplicações"</string>
<string name="service_restarting" msgid="1190995225643385568">"A reiniciar"</string>
@@ -1917,7 +1919,7 @@
<string name="running_processes_header_title" msgid="6505983796524910467">"Memória do dispositivo"</string>
<string name="running_processes_header_footer" msgid="6365963816942632771">"Utilização da RAM da aplicação"</string>
<string name="running_processes_header_system_prefix" msgid="3812089317725567449">"Sistema"</string>
- <string name="running_processes_header_apps_prefix" msgid="4024980745400903746">"Aplicações"</string>
+ <string name="running_processes_header_apps_prefix" msgid="4024980745400903746">"Apps"</string>
<string name="running_processes_header_free_prefix" msgid="1092348393136753031">"Livre"</string>
<string name="running_processes_header_used_prefix" msgid="2984090414986096084">"Utilizada"</string>
<string name="running_processes_header_cached_prefix" msgid="8398315634778729026">"Em cache"</string>
@@ -2021,7 +2023,7 @@
<string name="onscreen_keyboard_settings_summary" msgid="148763210673670769">"Definições do teclado no ecrã"</string>
<string name="builtin_keyboard_settings_title" msgid="3683883402326039724">"Teclado físico"</string>
<string name="builtin_keyboard_settings_summary" msgid="6498739864479285932">"Definições do teclado físico"</string>
- <string name="gadget_picker_title" msgid="9146981887780645322">"Escolher miniaplicação"</string>
+ <string name="gadget_picker_title" msgid="9146981887780645322">"Escolher gadget"</string>
<string name="widget_picker_title" msgid="5424689728810684439">"Escolher widget"</string>
<string name="allow_bind_app_widget_activity_allow_bind_title" msgid="8168110035319637326">"Criar widget e permitir o acesso?"</string>
<string name="allow_bind_app_widget_activity_allow_bind" msgid="2782554863244412872">"Depois de criar o widget, <xliff:g id="WIDGET_HOST_NAME">%1$s</xliff:g> pode aceder a todos os dados apresentados."</string>
@@ -2070,7 +2072,7 @@
<string name="accessibility_toggle_large_pointer_icon_title" msgid="9127905775116570565">"Ponteiro do rato grande"</string>
<string name="accessibility_disable_animations" msgid="8378441317115710009">"Remover animações"</string>
<string name="accessibility_toggle_master_mono_title" msgid="899550848196702565">"Áudio mono"</string>
- <string name="accessibility_toggle_master_mono_summary" msgid="3847052868469033235">"Combinar canais ao reproduzir áudio"</string>
+ <string name="accessibility_toggle_master_mono_summary" msgid="3847052868469033235">"Combine canais ao reproduzir áudio"</string>
<string name="accessibility_toggle_master_balance_title" msgid="8723492001092647562">"Equilíbrio de áudio"</string>
<string name="accessibility_toggle_master_balance_left_label" msgid="8531986342666527970">"Esquerda"</string>
<string name="accessibility_toggle_master_balance_right_label" msgid="7757024572140589558">"Direita"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Vibração de notificações"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Vibração do toque"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Vibração de resposta tátil"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Utilizar o serviço"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Utilizar a correção da cor"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Utilizar as legendas"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Utilizar o serviço"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Utilizar a correção da cor"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Utilizar as legendas"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Continuar"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Aparelhos auditivos"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Nenhum aparelho auditivo associado"</string>
@@ -2283,9 +2285,9 @@
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"Tablet utilizado mais do que o habitual"</string>
<string name="battery_tip_high_usage_title" product="device" msgid="8304138287288309490">"Dispositivo utilizado mais do que o habitual"</string>
<string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"Pode ficar sem bateria mais cedo do que o habitual."</string>
- <string name="battery_tip_dialog_message" product="default" msgid="8453700079047810964">"O seu telemóvel tem sido utilizado com mais frequência do que o habitual. A bateria pode esgotar-se mais cedo do que o esperado.\n\nAplicações mais utilizadas desde a carga completa:"</string>
- <string name="battery_tip_dialog_message" product="tablet" msgid="6489981050645444068">"O seu tablet tem sido utilizado com mais frequência do que o habitual. A bateria pode esgotar-se mais cedo do que o esperado.\n\nAplicações mais utilizadas desde a carga completa:"</string>
- <string name="battery_tip_dialog_message" product="device" msgid="6348123094674390337">"O seu dispositivo tem sido utilizado com mais frequência do que o habitual. A bateria pode esgotar-se mais cedo do que o esperado.\n\nAplicações mais utilizadas desde a carga completa:"</string>
+ <string name="battery_tip_dialog_message" product="default" msgid="8453700079047810964">"O seu telemóvel tem sido utilizado com mais frequência do que o habitual. A bateria pode esgotar-se mais cedo do que o esperado.\n\nApps mais utilizadas desde a carga completa:"</string>
+ <string name="battery_tip_dialog_message" product="tablet" msgid="6489981050645444068">"O seu tablet tem sido utilizado com mais frequência do que o habitual. A bateria pode esgotar-se mais cedo do que o esperado.\n\nApps mais utilizadas desde a carga completa:"</string>
+ <string name="battery_tip_dialog_message" product="device" msgid="6348123094674390337">"O seu dispositivo tem sido utilizado com mais frequência do que o habitual. A bateria pode esgotar-se mais cedo do que o esperado.\n\nApps mais utilizadas desde a carga completa:"</string>
<string name="battery_tip_dialog_message_footer" msgid="1118827395267487197">"Inclui atividade em segundo plano de potência elevada"</string>
<plurals name="battery_tip_restrict_title" formatted="false" msgid="7140926804142734420">
<item quantity="other">Restringir %1$d aplicações</item>
@@ -2304,14 +2306,14 @@
<item quantity="one">Não é possível executar esta aplicação em segundo plano.</item>
</plurals>
<plurals name="battery_tip_restrict_app_dialog_title" formatted="false" msgid="3042021435866172168">
- <item quantity="other">Pretende restringir %1$d aplicações?</item>
- <item quantity="one">Pretende restringir a aplicação?</item>
+ <item quantity="other">Restringir %1$d aplicações?</item>
+ <item quantity="one">Restringir a aplicação?</item>
</plurals>
<string name="battery_tip_restrict_app_dialog_message" msgid="6905822297507947381">"Para poupar bateria, impeça que a aplicação <xliff:g id="APP">%1$s</xliff:g> consuma bateria em segundo plano. Esta aplicação poderá não funcionar corretamente e as notificações poderão sofrer atrasos."</string>
- <string name="battery_tip_restrict_apps_less_than_5_dialog_message" msgid="4225881888543582456">"Para poupar bateria, impeça estas aplicações de consumir bateria em segundo plano. As aplicações restringidas poderão não funcionar corretamente e as notificações poderão sofrer atrasos.\n\nAplicações:"</string>
- <string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"Para poupar bateria, impeça que estas aplicações consumam bateria em segundo plano. As aplicações restringidas poderão não funcionar corretamente e as notificações poderão sofrer atrasos.\n\nAplicações:\n<xliff:g id="APP_LIST">%1$s</xliff:g>."</string>
+ <string name="battery_tip_restrict_apps_less_than_5_dialog_message" msgid="4225881888543582456">"Para poupar bateria, impeça estas aplicações de consumir bateria em segundo plano. As aplicações restringidas poderão não funcionar corretamente e as notificações poderão sofrer atrasos.\n\nApps:"</string>
+ <string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"Para poupar bateria, impeça que estas aplicações consumam bateria em segundo plano. As aplicações restringidas poderão não funcionar corretamente e as notificações poderão sofrer atrasos.\n\nApps:\n<xliff:g id="APP_LIST">%1$s</xliff:g>."</string>
<string name="battery_tip_restrict_app_dialog_ok" msgid="2573410775701913487">"Restringir"</string>
- <string name="battery_tip_unrestrict_app_dialog_title" msgid="812458516399125710">"Pretende remover a restrição?"</string>
+ <string name="battery_tip_unrestrict_app_dialog_title" msgid="812458516399125710">"Remover a restrição?"</string>
<string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"Esta aplicação poderá utilizar a bateria em segundo plano e, por conseguinte, pode ficar sem bateria mais cedo do que o esperado."</string>
<string name="battery_tip_unrestrict_app_dialog_ok" msgid="9154938931448151479">"Remover"</string>
<string name="battery_tip_unrestrict_app_dialog_cancel" msgid="7331148618292397166">"Cancelar"</string>
@@ -2324,7 +2326,7 @@
<string name="smart_battery_footer" product="default" msgid="3971715848890205632">"Quando o Battery Manager deteta a existência de aplicações a consumir a bateria rapidamente, tem a opção de restringir estas aplicações. As aplicações restringidas poderão não funcionar corretamente e as notificações poderão sofrer atrasos."</string>
<string name="smart_battery_footer" product="tablet" msgid="3971715848890205632">"Quando o Battery Manager deteta a existência de aplicações a consumir a bateria rapidamente, tem a opção de restringir estas aplicações. As aplicações restringidas poderão não funcionar corretamente e as notificações poderão sofrer atrasos."</string>
<string name="smart_battery_footer" product="device" msgid="3971715848890205632">"Quando o Battery Manager deteta a existência de aplicações a consumir a bateria rapidamente, tem a opção de restringir estas aplicações. As aplicações restringidas poderão não funcionar corretamente e as notificações poderão sofrer atrasos."</string>
- <string name="restricted_app_title" msgid="4957644700640127606">"Aplicações restritas"</string>
+ <string name="restricted_app_title" msgid="4957644700640127606">"Apps restritas"</string>
<plurals name="restricted_app_summary" formatted="false" msgid="7609538735465186040">
<item quantity="other">Limiar a utilização da bateria para %1$d aplicações</item>
<item quantity="one">Limitar a utilização da bateria para %1$d aplicação</item>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Ativar"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Utilizar a Poupança de bateria"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Utilizar a Poupança de bateria"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Ligar automaticamente"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Nunca"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"ao alcançar <xliff:g id="PERCENT">%1$s</xliff:g> de bateria"</string>
@@ -2506,7 +2508,7 @@
<string name="voice_service_preference_section_title" msgid="2984112696100778038">"Serviços de entrada de texto por voz"</string>
<string name="voice_interactor_preference_summary" msgid="7321365727286121067">"Palavra de ativação e interação completas"</string>
<string name="voice_recognizer_preference_summary" msgid="3681161319745912594">"Serviço simples de voz para texto"</string>
- <string name="voice_interaction_security_warning" msgid="4986261746316889768">"Este serviço de entrada de texto por voz poderá efetuar monitorização de voz permanente e controlar aplicações ativadas por voz em seu nome. É proveniente da aplicação <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Pretende permitir a utilização deste serviço?"</string>
+ <string name="voice_interaction_security_warning" msgid="4986261746316889768">"Este serviço de entrada de texto por voz poderá efetuar monitorização de voz permanente e controlar aplicações ativadas por voz em seu nome. É proveniente da aplicação <xliff:g id="VOICE_INPUT_SERVICE_APP_NAME">%s</xliff:g>. Permitir a utilização deste serviço?"</string>
<string name="tts_engine_preference_title" msgid="1183116842356275061">"Motor preferido"</string>
<string name="tts_engine_settings_title" msgid="4079757915136562358">"Definições do motor"</string>
<string name="tts_sliders_title" msgid="1927481069989092278">"Taxa e tom de voz"</string>
@@ -2538,7 +2540,7 @@
<string name="credentials_settings_not_available" msgid="5490259681690183274">"As credenciais não estão disponíveis para este utilizador"</string>
<string name="credential_for_vpn_and_apps" msgid="2462642486949593841">"Instalada para VPN e aplicações"</string>
<string name="credential_for_wifi" msgid="2903295786961726388">"Instalada para Wi-Fi"</string>
- <string name="credentials_reset_hint" msgid="3484350477764088169">"Pretende remover todo o conteúdo?"</string>
+ <string name="credentials_reset_hint" msgid="3484350477764088169">"Remover todo o conteúdo?"</string>
<string name="credentials_erased" msgid="7287088033523869085">"Armaz. credenciais apagado."</string>
<string name="credentials_not_erased" msgid="9137227570738627637">"Não foi possível apagar o armazenamento de credenciais."</string>
<string name="usage_access_title" msgid="7981321142726540574">"Apps com acesso de utilização"</string>
@@ -2553,7 +2555,7 @@
<string name="backup_data_summary" msgid="555459891017933746">"Fazer cópia de segurança de dados da aplicação, palavras-passe Wi-Fi e outras definições para os servidores da Google"</string>
<string name="backup_configure_account_title" msgid="1534734650559070294">"Cópia de segurança da conta"</string>
<string name="backup_data_management_title" msgid="6299288795610243508">"Gerir a conta de cópia de segurança"</string>
- <string name="include_app_data_title" msgid="6117211611131913293">"Incluir dados de aplicações"</string>
+ <string name="include_app_data_title" msgid="6117211611131913293">"Incluir dados de apps"</string>
<string name="auto_restore_title" msgid="8367486774010915221">"Restauro automático"</string>
<string name="auto_restore_summary" msgid="1941047568966428377">"Ao reinstalar uma aplicação, restaurar definições e dados da cópia de segurança"</string>
<string name="backup_inactive_title" msgid="5513496915638307750">"O serviço de cópia de segurança não está ativo"</string>
@@ -2626,7 +2628,7 @@
<string name="header_account_settings" msgid="8586173964125512219">"Definições da conta"</string>
<string name="remove_account_label" msgid="5885425720323823387">"Remover conta"</string>
<string name="header_add_an_account" msgid="8482614556580804956">"Adicionar uma conta"</string>
- <string name="really_remove_account_title" msgid="4166512362915154319">"Pretende remover a conta?"</string>
+ <string name="really_remove_account_title" msgid="4166512362915154319">"Remover a conta?"</string>
<string name="really_remove_account_message" product="tablet" msgid="7403843371045856719">"A remoção desta conta elimina todas as mensagens, contactos e outros dados do tablet!"</string>
<string name="really_remove_account_message" product="default" msgid="8951224626153163914">"A remoção desta conta elimina todas as mensagens, contactos e outros dados do telemóvel!"</string>
<string name="really_remove_account_message" product="device" msgid="3751798556257519916">"A remoção desta conta elimina todas as mensagens, os contactos e outros dados do dispositivo."</string>
@@ -2720,8 +2722,8 @@
<string name="data_usage_restrict_background_multiuser" product="default" msgid="6846901756455789858">"Se restringir os dados móveis de segundo plano, algumas aplicações e serviços não funcionarão, exceto se estiver ligado a uma rede Wi-Fi.\n\nEsta definição afeta todos os utilizadores neste telemóvel."</string>
<string name="data_usage_sweep_warning" msgid="4646401408698778092"><font size="18">"<xliff:g id="NUMBER">^1</xliff:g>"</font><font size="9">"<xliff:g id="UNIT">^2</xliff:g>"</font>\n<font size="12">"aviso"</font></string>
<string name="data_usage_sweep_limit" msgid="6101105504557548269"><font size="18">"<xliff:g id="NUMBER">^1</xliff:g>"</font><font size="9">"<xliff:g id="UNIT">^2</xliff:g>"</font>\n<font size="12">"limite"</font></string>
- <string name="data_usage_uninstalled_apps" msgid="4152786786140875769">"Aplicações removidas"</string>
- <string name="data_usage_uninstalled_apps_users" msgid="61092462416505112">"Aplicações e utilizadores removidos"</string>
+ <string name="data_usage_uninstalled_apps" msgid="4152786786140875769">"Apps removidas"</string>
+ <string name="data_usage_uninstalled_apps_users" msgid="61092462416505112">"Apps e utilizadores removidos"</string>
<string name="data_usage_received_sent" msgid="5532467049487334656">"<xliff:g id="RECEIVED">%1$s</xliff:g> recebidos, <xliff:g id="SENT">%2$s</xliff:g> enviados"</string>
<string name="data_usage_total_during_range" msgid="7307562900020512747">"<xliff:g id="RANGE">%2$s</xliff:g>: cerca de <xliff:g id="TOTAL">%1$s</xliff:g> utilizado(s)"</string>
<string name="data_usage_total_during_range_mobile" product="tablet" msgid="366118962920532455">"<xliff:g id="RANGE">%2$s</xliff:g>: cerca de <xliff:g id="TOTAL">%1$s</xliff:g> utilizado(s), conforme medido pelo tablet. O registo da utilização de dados do seu operador poderá ser diferente."</string>
@@ -2897,7 +2899,7 @@
<string name="user_delete_button" msgid="6747802570634772774">"Eliminar"</string>
<string name="user_guest" msgid="6226240869459683235">"Convidado"</string>
<string name="user_exit_guest_title" msgid="7279886200373071797">"Remover convidado"</string>
- <string name="user_exit_guest_confirm_title" msgid="4767911571671099844">"Pretende remover o convidado?"</string>
+ <string name="user_exit_guest_confirm_title" msgid="4767911571671099844">"Remover o convidado?"</string>
<string name="user_exit_guest_confirm_message" msgid="6955182181145748919">"Todas as aplicações e dados desta sessão serão eliminados."</string>
<string name="user_exit_guest_dialog_remove" msgid="1878866060881115716">"Remover"</string>
<string name="user_enable_calling" msgid="864760054792249503">"Ativar chamadas telefónicas"</string>
@@ -2910,7 +2912,7 @@
<string name="emergency_info_title" msgid="1522609271881425375">"Informações de emergência"</string>
<string name="emergency_info_summary" msgid="7280464759837387342">"Informações e contactos de <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
<string name="application_restrictions" msgid="6871981013736536763">"Permitir aplicações e conteúdo"</string>
- <string name="apps_with_restrictions_header" msgid="8656739605673756176">"Aplicações com restrições"</string>
+ <string name="apps_with_restrictions_header" msgid="8656739605673756176">"Apps com restrições"</string>
<string name="apps_with_restrictions_settings_button" msgid="5065896213467171744">"Expandir defin. da aplicação"</string>
<string name="nfc_payment_settings_title" msgid="5070077706735415291">"Tocar e pagar"</string>
<string name="nfc_payment_how_it_works" msgid="7607901964687787177">"Como funciona"</string>
@@ -3039,11 +3041,11 @@
<string name="connected_devices_dashboard_no_driving_mode_summary" msgid="3524409078596318803">"Bluetooth, NFC"</string>
<string name="connected_devices_dashboard_no_driving_mode_no_nfc_summary" msgid="7881286613528299400">"Bluetooth"</string>
<string name="app_and_notification_dashboard_title" msgid="8448096608058843730">"Apps e notificações"</string>
- <string name="app_and_notification_dashboard_summary" msgid="4165181440955038145">"Assistente, aplicações recentes, aplicações predefinidas"</string>
+ <string name="app_and_notification_dashboard_summary" msgid="4165181440955038145">"Assistente, apps recentes, apps predefinidas"</string>
<string name="notification_settings_work_profile" msgid="7190550347842400029">"O acesso às notificações não está disponível para aplicações no perfil de trabalho."</string>
<string name="account_dashboard_title" msgid="4734300939532555885">"Contas"</string>
- <string name="account_dashboard_default_summary" msgid="6822549669771936206">"Nenhuma conta adicionada."</string>
- <string name="app_default_dashboard_title" msgid="6575301028225232193">"Aplicações predefinidas"</string>
+ <string name="account_dashboard_default_summary" msgid="6822549669771936206">"Nenhuma conta adicionada"</string>
+ <string name="app_default_dashboard_title" msgid="6575301028225232193">"Apps predefinidas"</string>
<string name="system_dashboard_summary" msgid="6582464466735779394">"Idiomas, gestos, hora, cópia de segurança"</string>
<string name="search_results_title" msgid="4160717656435503940">"Definições"</string>
<string name="keywords_wifi" msgid="8477688080895466846">"wifi, Wi-Fi, ligação de rede, Internet, sem fios, dados, wi fi"</string>
@@ -3053,7 +3055,7 @@
<string name="keywords_time_format" msgid="8265826377023617424">"Utilizar formato de 24 horas"</string>
<string name="keywords_storage_files" msgid="1995055540202216399">"Transferir"</string>
<string name="keywords_app_default" msgid="1265502485415708667">"Abrir com"</string>
- <string name="keywords_applications_settings" msgid="2078776051110952597">"Aplicações"</string>
+ <string name="keywords_applications_settings" msgid="2078776051110952597">"Apps"</string>
<string name="keywords_time_zone" msgid="1571973084865023954">"fuso horário"</string>
<string name="keywords_draw_overlay" msgid="3855954419750744775">"Balão de chat"</string>
<string name="keywords_flashlight" msgid="7733996050628473024">"Lanterna, luz"</string>
@@ -3086,7 +3088,7 @@
<string name="keywords_all_apps" msgid="846444448435698930">"aplicações, transferência, aplicações, sistema"</string>
<string name="keywords_app_permissions" msgid="8539841019997048500">"aplicações, autorizações, segurança"</string>
<string name="keywords_default_apps" msgid="7435952699323965532">"aplicações, predefinição"</string>
- <string name="keywords_ignore_optimizations" msgid="9127632532176249438">"ignorar otimizações, soneca, modo de espera das aplicações"</string>
+ <string name="keywords_ignore_optimizations" msgid="9127632532176249438">"ignorar otimizações, soneca, modo de espera das apps"</string>
<string name="keywords_color_mode" msgid="8893345199519181751">"vibrante, RGB, sRGB, cor, natural, padrão"</string>
<string name="keywords_color_temperature" msgid="2255253972992035046">"temperatura de cor, D65, D73, branco, amarelo, azul, quente, frio"</string>
<string name="keywords_lockscreen" msgid="4936846554280830394">"deslizar lentamente para desbloquear, palavra-passe, padrão, PIN"</string>
@@ -3214,7 +3216,7 @@
<string name="zen_mode_block_effect_light" msgid="8679333758037487644">"Não emitir luz intermitente"</string>
<string name="zen_mode_block_effect_peek" msgid="6075662813575910221">"Não apresentar notificações no ecrã"</string>
<string name="zen_mode_block_effect_status" msgid="6516614225115681068">"Ocultar ícones da barra de estado na parte superior do ecrã"</string>
- <string name="zen_mode_block_effect_badge" msgid="3891743027347075136">"Ocultar pontos de notificação nos ícones das aplicações"</string>
+ <string name="zen_mode_block_effect_badge" msgid="3891743027347075136">"Ocultar pontos de notificação nos ícones das apps"</string>
<string name="zen_mode_block_effect_ambient" msgid="6382013125863616197">"Não ativar para notificações"</string>
<string name="zen_mode_block_effect_list" msgid="6081548478844912181">"Ocultar da lista de notificações"</string>
<string name="zen_mode_block_effect_summary_none" msgid="7166175186759564510">"Nunca"</string>
@@ -3367,30 +3369,30 @@
</plurals>
<string name="notification_assistant_title" msgid="8216604031352764011">"Assistente de notificações"</string>
<string name="no_notification_assistant" msgid="9140123568386413264">"Nenhum assistente"</string>
- <string name="no_notification_listeners" msgid="1366386609506834717">"Nenhuma aplicação instalada solicitou acesso a notificações"</string>
- <string name="notification_assistant_security_warning_title" msgid="4190584438086738496">"Pretende permitir o acesso a notificações do <xliff:g id="SERVICE">%1$s</xliff:g>?"</string>
+ <string name="no_notification_listeners" msgid="1366386609506834717">"Nenhuma app instalada solicitou acesso a notificações"</string>
+ <string name="notification_assistant_security_warning_title" msgid="4190584438086738496">"Permitir o acesso a notificações do <xliff:g id="SERVICE">%1$s</xliff:g>?"</string>
<string name="notification_assistant_security_warning_summary" msgid="6924513399671031930">"O <xliff:g id="NOTIFICATION_ASSISTANT_NAME">%1$s</xliff:g> consegue ler todas as notificações, incluindo informações pessoais como nomes de contactos e o texto das mensagens recebidas. Também consegue modificar ou ignorar notificações, assim como acionar botões de ação que estas contenham. \n\nDeste modo, a aplicação também pode ativar ou desativar o modo Não incomodar e alterar as definições relacionadas."</string>
- <string name="notification_listener_security_warning_title" msgid="4902253246428777797">"Pretende permitir o acesso a notificações do <xliff:g id="SERVICE">%1$s</xliff:g>?"</string>
+ <string name="notification_listener_security_warning_title" msgid="4902253246428777797">"Permitir o acesso a notificações do <xliff:g id="SERVICE">%1$s</xliff:g>?"</string>
<string name="notification_listener_security_warning_summary" msgid="4454702907350100288">"O <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g> consegue ler todas as notificações, incluindo informações pessoais como nomes de contactos e o texto das mensagens recebidas. Também consegue ignorar notificações ou acionar botões de ação que estas contenham. \n\nDeste modo, a aplicação também pode ativar ou desativar o modo Não incomodar e alterar as definições relacionadas."</string>
<string name="notification_listener_disable_warning_summary" msgid="162165151519082978">"Se desativar o acesso às notificações para <xliff:g id="NOTIFICATION_LISTENER_NAME">%1$s</xliff:g>, é possível que o acesso ao modo Não incomodar seja igualmente desativado."</string>
<string name="notification_listener_disable_warning_confirm" msgid="7863495391671154188">"Desativar"</string>
<string name="notification_listener_disable_warning_cancel" msgid="6264631825225298458">"Cancelar"</string>
<string name="vr_listeners_title" msgid="511483902408792832">"Serviços de assistente de RV"</string>
- <string name="no_vr_listeners" msgid="7675484190394450979">"Nenhuma aplicação instalada pediu para ser executada como serviço de assistente de RV."</string>
- <string name="vr_listener_security_warning_title" msgid="7019322246707645361">"Pretende permitir que o serviço de RV tenha acesso a <xliff:g id="SERVICE">%1$s</xliff:g>?"</string>
+ <string name="no_vr_listeners" msgid="7675484190394450979">"Nenhuma app instalada pediu para ser executada como serviço de assistente de RV."</string>
+ <string name="vr_listener_security_warning_title" msgid="7019322246707645361">"Permitir que o serviço de RV tenha acesso a <xliff:g id="SERVICE">%1$s</xliff:g>?"</string>
<string name="vr_listener_security_warning_summary" msgid="5093225583584522067">"Será possível executar o <xliff:g id="VR_LISTENER_NAME">%1$s</xliff:g> quando estiver a utilizar aplicações no modo de realidade virtual."</string>
<string name="display_vr_pref_title" msgid="1088464812293416981">"Com o dispositivo no modo RV"</string>
<string name="display_vr_pref_low_persistence" msgid="3132583929174794245">"Reduzir a desfocagem (recomendado)"</string>
<string name="display_vr_pref_off" msgid="4681320968818852691">"Reduzir a cintilação"</string>
<string name="picture_in_picture_title" msgid="4960733106166035448">"Imagem na imagem"</string>
- <string name="picture_in_picture_empty_text" msgid="8664071475324685241">"Nenhuma aplicação instalada é compatível com Imagem na imagem"</string>
+ <string name="picture_in_picture_empty_text" msgid="8664071475324685241">"Nenhuma app instalada é compatível com Imagem na imagem"</string>
<string name="picture_in_picture_keywords" msgid="7326958702002259262">"pip picture in"</string>
<string name="picture_in_picture_app_detail_title" msgid="3916189052657425936">"Imagem na imagem"</string>
<string name="picture_in_picture_app_detail_switch" msgid="747422998967185418">"Permitir imagem na imagem"</string>
<string name="picture_in_picture_app_detail_summary" msgid="918632751775525347">"Permita que esta aplicação crie uma janela de ecrã no ecrã enquanto a aplicação está aberta ou depois de sair da mesma (por exemplo, para continuar a ver um vídeo). Esta janela é apresentada sobre as outras aplicações que estiver a utilizar."</string>
<string name="manage_zen_access_title" msgid="3058206309728524196">"Acesso Não incomodar"</string>
<string name="zen_access_detail_switch" msgid="8706332327904974500">"Permitir o modo Não incomodar"</string>
- <string name="zen_access_empty_text" msgid="7667538993781607731">"Nenhuma aplicação instalada solicitou acesso Não incomodar"</string>
+ <string name="zen_access_empty_text" msgid="7667538993781607731">"Nenhuma app instalada solicitou acesso Não incomodar"</string>
<string name="loading_notification_apps" msgid="1978345231934072091">"A carregar aplicações..."</string>
<string name="app_notifications_off_desc" msgid="3904090905748895146">"A seu pedido, o Android está a bloquear a apresentação das notificações desta aplicação neste dispositivo."</string>
<string name="channel_notifications_off_desc" msgid="8005444443218306611">"A seu pedido, o Android está a bloquear a apresentação desta categoria de notificações neste dispositivo."</string>
@@ -3487,7 +3489,7 @@
<string name="zen_mode_messages" msgid="2908722562188394107">"Permitir mensagens de texto"</string>
<string name="zen_mode_messages_footer" msgid="5048951937714668561">"Para se certificar de que as mensagens permitidas emitem som, verifique se o dispositivo está definido para tocar, para vibrar ou para o modo silencioso."</string>
<string name="zen_mode_custom_messages_footer" msgid="5566007423100361691">"As mensagens de texto recebidas são bloqueadas no horário \"<xliff:g id="SCHEDULE_NAME">%1$s</xliff:g>\". Pode ajustar as definições para permitir que os seus amigos, a sua família ou outras pessoas o contactem."</string>
- <string name="zen_mode_messages_title" msgid="786261471294055181">"Aplicações de SMS, de MMS e de mensagens"</string>
+ <string name="zen_mode_messages_title" msgid="786261471294055181">"Apps de SMS, de MMS e de mensagens"</string>
<string name="zen_mode_from_anyone" msgid="7778836826814131083">"De qualquer pessoa"</string>
<string name="zen_mode_from_contacts" msgid="267034158294332688">"Apenas de contactos"</string>
<string name="zen_mode_from_starred" msgid="7349984569117392260">"Apenas de contactos com estrela"</string>
@@ -3507,7 +3509,7 @@
<string name="zen_mode_reminders_list" msgid="7347061314032326677">"lembretes"</string>
<string name="zen_mode_events" msgid="5784076928339534984">"Permitir eventos"</string>
<string name="zen_mode_bypassing_apps" msgid="3080739479028713449">"Permitir que as aplicações substituam"</string>
- <string name="zen_mode_bypassing_apps_title" msgid="2115024664615538847">"Exceções de aplicações"</string>
+ <string name="zen_mode_bypassing_apps_title" msgid="2115024664615538847">"Exceções de apps"</string>
<plurals name="zen_mode_bypassing_apps_subtext" formatted="false" msgid="8723144434730871572">
<item quantity="other">As notificações de <xliff:g id="NUMBER">%1$d</xliff:g> aplicações podem substituir o modo Não incomodar</item>
<item quantity="one">As notificações de 1 aplicação podem substituir o modo Não incomodar</item>
@@ -3548,7 +3550,7 @@
<string name="zen_mode_screen_off_summary_no_led" msgid="7255874108150630145">"Permitir que as notificações silenciadas pelo modo Não incomodar liguem o ecrã"</string>
<string name="notification_app_settings_button" msgid="3651180424198580907">"Definições de notificações"</string>
<string name="suggestion_button_text" msgid="5783566542423813847">"Ok"</string>
- <string name="device_feedback" msgid="4042352891448769818">"Enviar comentários do dispositivo"</string>
+ <string name="device_feedback" msgid="4042352891448769818">"Enviar feedback do dispositivo"</string>
<string name="restr_pin_enter_admin_pin" msgid="8577847751493521230">"Introduzir o PIN do gestor"</string>
<string name="switch_on_text" msgid="7100491749799298324">"Ativado"</string>
<string name="switch_off_text" msgid="3539551289454353555">"Desativado"</string>
@@ -3630,11 +3632,11 @@
<string name="runtime_permissions_summary_no_permissions_granted" msgid="3477934429220828771">"Nenhuma permissão concedida"</string>
<string name="runtime_permissions_summary_no_permissions_requested" msgid="3901636077467389637">"Nenhuma permissão solicitada"</string>
<string name="filter_all_apps" msgid="4042756539846043675">"Todas as aplicações"</string>
- <string name="filter_enabled_apps" msgid="5888459261768538489">"Aplicações instaladas"</string>
- <string name="filter_instant_apps" msgid="8087483282854072366">"Aplicações instantâneas"</string>
+ <string name="filter_enabled_apps" msgid="5888459261768538489">"Apps instaladas"</string>
+ <string name="filter_instant_apps" msgid="8087483282854072366">"Apps instantâneas"</string>
<string name="filter_personal_apps" msgid="3473268022652904457">"Pessoais"</string>
<string name="filter_work_apps" msgid="4202483998339465542">"De trabalho"</string>
- <string name="filter_notif_all_apps" msgid="1862666327228804896">"Aplicações: todas"</string>
+ <string name="filter_notif_all_apps" msgid="1862666327228804896">"Apps: todas"</string>
<string name="filter_notif_blocked_apps" msgid="5694956954776028202">"Desativadas"</string>
<string name="filter_notif_urgent_channels" msgid="5000735867167027148">"Categorias: importância alta"</string>
<string name="filter_notif_low_channels" msgid="6859599463135775287">"Categorias: importância baixa"</string>
@@ -3644,7 +3646,7 @@
<string name="configure_apps" msgid="4066683118857400943">"Configurar aplicações"</string>
<string name="unknown_app" msgid="2312052973570376877">"Aplicação desconhecida"</string>
<string name="app_permissions" msgid="3215958256821756086">"Gestor de autorizações"</string>
- <string name="app_permissions_summary" msgid="8785798165776061594">"Aplicações que utilizam <xliff:g id="APPS">%1$s</xliff:g>"</string>
+ <string name="app_permissions_summary" msgid="8785798165776061594">"Apps que utilizam <xliff:g id="APPS">%1$s</xliff:g>"</string>
<string name="tap_to_wake" msgid="1902991239401652323">"Tocar para ativar"</string>
<string name="tap_to_wake_summary" msgid="8485222120721006793">"Tocar duas vezes em qualquer ponto do ecrã para ativar o dispositivo"</string>
<string name="domain_urls_title" msgid="7939209950373945367">"Links de abertura"</string>
@@ -3662,7 +3664,7 @@
<string name="default_apps_title" msgid="3848048391400989931">"Predefinição"</string>
<string name="default_for_work" msgid="7290411716804495366">"Predefinição para o trabalho"</string>
<string name="assist_and_voice_input_title" msgid="324148194703846130">"Assistência e entrada por voz"</string>
- <string name="default_assist_title" msgid="2060846994203235317">"Aplicação de assistência"</string>
+ <string name="default_assist_title" msgid="2060846994203235317">"App de assistência"</string>
<string name="assistant_security_warning_title" msgid="8014460924169723059">"Pretende tornar <xliff:g id="ASSISTANT_APP_NAME">%s</xliff:g> o seu assistente?"</string>
<string name="assistant_security_warning" msgid="1304057692847069938">"O assistente pode ler informações sobre aplicações utilizadas no seu sistema, incluindo informações visíveis no ecrã ou acessíveis nas aplicações."</string>
<string name="assistant_security_warning_agree" msgid="5105692801460137289">"Aceitar"</string>
@@ -3710,7 +3712,7 @@
<string name="high_power_system" msgid="739584574711292753">"Otimização da bateria não disponível"</string>
<string name="high_power_desc" msgid="333756885680362741">"Não aplique a otimização da bateria. A bateria pode descarregar mais rapidamente."</string>
<string name="high_power_prompt_title" msgid="2805745781720454052">"Permitir que a aplicação seja sempre executada em segundo plano?"</string>
- <string name="high_power_prompt_body" msgid="8067395096053552289">"Permitir que a aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> seja sempre executada em segundo plano pode reduzir a autonomia da bateria. \n\nPode alterar esta definição mais tarde em Definições > Aplicações e notificações."</string>
+ <string name="high_power_prompt_body" msgid="8067395096053552289">"Permitir que a aplicação <xliff:g id="APP_NAME">%1$s</xliff:g> seja sempre executada em segundo plano pode reduzir a autonomia da bateria. \n\nPode alterar esta definição mais tarde em Definições > Apps e notificações."</string>
<string name="battery_summary" msgid="4345690800899981339">"Utilizou <xliff:g id="PERCENTAGE">%1$s</xliff:g> desde o último carregamento completo"</string>
<string name="battery_power_management" msgid="2853925857548647969">"Gestão de energia"</string>
<string name="no_battery_summary" msgid="4105932628367471314">"Não utilizou bateria desde o último carregamento completo"</string>
@@ -3757,12 +3759,12 @@
<string name="background_check_pref" msgid="664081406854758392">"Verificação em segundo plano"</string>
<string name="background_check_title" msgid="4136736684290307970">"Acesso completo em segundo plano"</string>
<string name="assist_access_context_title" msgid="2274614501747710439">"Utilizar o texto do ecrã"</string>
- <string name="assist_access_context_summary" msgid="5867997494395842785">"Permitir que a aplicação de assistência aceda ao conteúdo do ecrã como texto"</string>
+ <string name="assist_access_context_summary" msgid="5867997494395842785">"Permitir que a app de assistência aceda ao conteúdo do ecrã como texto"</string>
<string name="assist_access_screenshot_title" msgid="1991014038776117688">"Utilizar captura de ecrã"</string>
- <string name="assist_access_screenshot_summary" msgid="3010943864000489424">"Permitir que a aplicação de assistência aceda a uma imagem do ecrã"</string>
+ <string name="assist_access_screenshot_summary" msgid="3010943864000489424">"Permitir que a app de assistência aceda a uma imagem do ecrã"</string>
<string name="assist_flash_title" msgid="8852484250748551092">"Fazer piscar o ecrã"</string>
- <string name="assist_flash_summary" msgid="6697095786317559129">"Fazer piscar os limites do ecrã quando a aplicação de assistência acede a texto do ecrã ou de capturas de ecrã"</string>
- <string name="assist_footer" msgid="7030121180457472165">"As aplicações de assistência podem ajudá-lo com base em informações do ecrã que está a ver. Algumas aplicações são compatíveis com serviços de iniciação e de entrada de texto por voz para oferecer assistência integrada."</string>
+ <string name="assist_flash_summary" msgid="6697095786317559129">"Fazer piscar os limites do ecrã quando a app de assistência acede a texto do ecrã ou de capturas de ecrã"</string>
+ <string name="assist_footer" msgid="7030121180457472165">"As apps de assistência podem ajudá-lo com base em informações do ecrã que está a ver. Algumas apps são compatíveis com serviços de iniciação e de entrada de texto por voz para oferecer assistência integrada."</string>
<string name="average_memory_use" msgid="5333366040118953945">"Utilização média da memória"</string>
<string name="maximum_memory_use" msgid="6509872438499846077">"Utilização máxima da memória"</string>
<string name="memory_usage" msgid="7963253555330830906">"Utilização da memória"</string>
@@ -3784,7 +3786,7 @@
<string name="running_frequency" msgid="7545170806968474449">"Frequência"</string>
<string name="memory_maximum_usage" msgid="4734981118293469479">"Utilização máxima"</string>
<string name="no_data_usage" msgid="903383745620135746">"Sem dados utilizados"</string>
- <string name="zen_access_warning_dialog_title" msgid="7704910289810337055">"Pretende permitir o acesso a Não incomodar para <xliff:g id="APP">%1$s</xliff:g>?"</string>
+ <string name="zen_access_warning_dialog_title" msgid="7704910289810337055">"Permitir o acesso a Não incomodar para <xliff:g id="APP">%1$s</xliff:g>?"</string>
<string name="zen_access_warning_dialog_summary" msgid="2717755746850874577">"A aplicação conseguirá ligar e desligar o modo Não incomodar e efetuar alterações nas definições relacionadas."</string>
<string name="zen_access_disabled_package_warning" msgid="7086237569177576966">"Tem de permanecer ativado porque o acesso às notificações está ativado"</string>
<string name="zen_access_revoke_warning_dialog_title" msgid="6850994585577513299">"Pretende revogar o acesso a Não incomodar do <xliff:g id="APP">%1$s</xliff:g>?"</string>
@@ -3795,11 +3797,11 @@
<string name="ignore_optimizations_off_desc" msgid="5598702251817814289">"Recomendado para aumentar a duração da bateria"</string>
<string name="ignore_optimizations_title" msgid="7924345545276166305">"Permitir que <xliff:g id="APP">%s</xliff:g> ignore as otimizações da bateria?"</string>
<string name="app_list_preference_none" msgid="7100409177446935028">"Nenhuma"</string>
- <string name="work_profile_usage_access_warning" msgid="403208064382097510">"Se desativar o acesso de utilização desta aplicação, não impede que o gestor monitorize a utilização de dados de aplicações no seu perfil de trabalho."</string>
+ <string name="work_profile_usage_access_warning" msgid="403208064382097510">"Se desativar o acesso de utilização desta aplicação, não impede que o gestor monitorize a utilização de dados de apps no seu perfil de trabalho."</string>
<string name="accessibility_lock_screen_progress" msgid="8242917828598820049">"<xliff:g id="COUNT_0">%1$d</xliff:g> de <xliff:g id="COUNT_1">%2$d</xliff:g> carateres utilizados"</string>
<string name="draw_overlay" msgid="2878665072530660668">"Sobrepor a outras aplicações"</string>
<string name="system_alert_window_settings" msgid="3024330223417646567">"Sobrepor a outras aplicações"</string>
- <string name="system_alert_window_apps_title" msgid="9188448296493699566">"Aplicações"</string>
+ <string name="system_alert_window_apps_title" msgid="9188448296493699566">"Apps"</string>
<string name="system_alert_window_access_title" msgid="5187343732185369675">"Sobrepor a outras aplicações"</string>
<string name="permit_draw_overlay" msgid="9039092257052422344">"Permitir sobreposição a outras aplicações"</string>
<string name="allow_overlay_description" msgid="6669524816705082807">"Permita que esta aplicação se sobreponha a outras aplicações que esteja a utilizar. Pode interferir com a sua utilização dessas aplicações ou alterar a forma como estas aparecem ou se comportam."</string>
@@ -3807,7 +3809,7 @@
<string name="keywords_system_alert_window" msgid="3936658600272194599">"janela de alerta do sistema caixa de diálogo sobrepor-se a outras aplicações"</string>
<string name="overlay_settings" msgid="3325154759946433666">"Sobrepor a outras aplicações"</string>
<string name="system_alert_window_summary" msgid="7703582115861844158">"<xliff:g id="COUNT_0">%1$d</xliff:g> de <xliff:g id="COUNT_1">%2$d</xliff:g> aplicações autorizadas a sobreporem-se a outras aplicações"</string>
- <string name="filter_overlay_apps" msgid="6336897660213304743">"Aplicações com autorização"</string>
+ <string name="filter_overlay_apps" msgid="6336897660213304743">"Apps com autorização"</string>
<string name="app_permission_summary_allowed" msgid="6458476982015518778">"Permitida"</string>
<string name="app_permission_summary_not_allowed" msgid="1171642541675462584">"Não permitida"</string>
<string name="keywords_install_other_apps" msgid="5383559540695847668">"instalar aplicações fontes desconhecidas"</string>
@@ -3853,7 +3855,7 @@
<item quantity="other">Desativadas para <xliff:g id="COUNT">%d</xliff:g> aplicações</item>
<item quantity="one">Desativadas para 1 aplicação</item>
</plurals>
- <string name="notification_summary_none" msgid="5003043219430054784">"Ativadas para todas as aplicações"</string>
+ <string name="notification_summary_none" msgid="5003043219430054784">"Ativadas para todas as apps"</string>
<string name="apps_summary" msgid="8355759446490212195">"<xliff:g id="COUNT">%1$d</xliff:g> aplicações instaladas"</string>
<string name="apps_summary_example" msgid="3011143598675185269">"24 aplicações instaladas"</string>
<string name="storage_summary" msgid="4835916510511133784">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> utilizado – <xliff:g id="FREE_SPACE">%2$s</xliff:g> livre(s)"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Se o dispositivo estiver bloqueado, impedir a introdução de respostas ou de outro texto nas notificações"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Corretor ortográfico predefinido"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Escolher corretor ortográfico"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Utilizar o corretor ortográfico"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Utilizar o corretor ortográfico"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Não selecionado"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(nenhum)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4065,7 +4067,7 @@
<string name="page_tab_title_summary" msgid="4824744863994538006">"Todas"</string>
<string name="page_tab_title_support" msgid="5569262185010367870">"Sugestões e apoio técnico"</string>
<string name="developer_smallest_width" msgid="2603134476228805075">"A menor largura"</string>
- <string name="premium_sms_none" msgid="940723020871007898">"Nenhuma aplicação instalada solicitou acesso a SMS premium"</string>
+ <string name="premium_sms_none" msgid="940723020871007898">"Nenhuma app instalada solicitou acesso a SMS premium"</string>
<string name="premium_sms_warning" msgid="7604011651486294515">"O serviço de SMS premium pode custar dinheiro e, nesse caso, será adicionado às faturas do seu operador. Se ativar a autorização para uma aplicação, poderá enviar SMS premium através da mesma."</string>
<string name="premium_sms_access" msgid="4550027460595822851">"Acesso a SMS premium"</string>
<string name="bluetooth_disabled" msgid="6588102116819268238">"Desativado"</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Para ajudar a libertar espaço de armazenamento, o gestor de armazenamento remove cópias de segurança de fotos e vídeos do dispositivo."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Remover fotos e vídeos"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Gestor de armazenamento"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Utilizar o Gestor de armazenamento"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Utilizar o gestor de armazenamento"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automático"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manual"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Libertar espaço agora"</string>
@@ -4147,11 +4149,11 @@
<string name="oem_unlock_enable_disabled_summary_sim_locked_device" msgid="5223278198179877704">"Indisponível em dispositivos vinculados ao operador"</string>
<string name="oem_lock_info_message" msgid="5090850412279403901">"Reinicie o dispositivo para ativar a funcionalidade de proteção do mesmo."</string>
<string name="automatic_storage_manager_freed_bytes" msgid="7360443072390107772">"Foi disponibilizado um total de <xliff:g id="SIZE">%1$s</xliff:g>\n\nÚltima execução: <xliff:g id="DATE">%2$s</xliff:g>"</string>
- <string name="web_action_enable_title" msgid="4462106633708675959">"Aplicações instantâneas"</string>
+ <string name="web_action_enable_title" msgid="4462106633708675959">"Apps instantâneas"</string>
<string name="web_action_enable_summary" msgid="1729016644691793085">"Abrir links nas aplicações, mesmo que não estejam instaladas"</string>
- <string name="web_action_section_title" msgid="5563229447734734662">"Aplicações instantâneas"</string>
- <string name="instant_apps_settings" msgid="879003203555847537">"Preferências das Aplicações instantâneas"</string>
- <string name="domain_url_section_title" msgid="206403507921518321">"Aplicações instaladas"</string>
+ <string name="web_action_section_title" msgid="5563229447734734662">"Apps instantâneas"</string>
+ <string name="instant_apps_settings" msgid="879003203555847537">"Preferências das Apps instantâneas"</string>
+ <string name="domain_url_section_title" msgid="206403507921518321">"Apps instaladas"</string>
<string name="automatic_storage_manager_activation_warning" msgid="2630083316417707308">"O seu armazenamento está agora a ser gerido pelo gestor de armazenamento"</string>
<string name="account_for_section_header" msgid="5975241715840642563">"Contas de <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
<string name="configure_section_header" msgid="6988981883075615136">"Configurar"</string>
@@ -4177,7 +4179,7 @@
<string name="enterprise_privacy_bug_reports" msgid="283443567328836380">"Relatório de erro mais recente"</string>
<string name="enterprise_privacy_security_logs" msgid="8936969480449604726">"Registo de segurança mais recente"</string>
<string name="enterprise_privacy_none" msgid="5990646476868794882">"Nenhuma"</string>
- <string name="enterprise_privacy_enterprise_installed_packages" msgid="6575025134782391212">"Aplicações instaladas"</string>
+ <string name="enterprise_privacy_enterprise_installed_packages" msgid="6575025134782391212">"Apps instaladas"</string>
<string name="enterprise_privacy_apps_count_estimation_info" msgid="5020730108878608500">"O número de aplicações é uma estimativa. Pode não incluir as aplicações instaladas fora da Play Store."</string>
<plurals name="enterprise_privacy_number_packages_lower_bound" formatted="false" msgid="5161417161943060602">
<item quantity="other">No mínimo, <xliff:g id="COUNT_1">%d</xliff:g> aplicações</item>
@@ -4186,7 +4188,7 @@
<string name="enterprise_privacy_location_access" msgid="110406267468274216">"Autoriz. de Localização"</string>
<string name="enterprise_privacy_microphone_access" msgid="4586428105675460207">"Autorizações do microfone"</string>
<string name="enterprise_privacy_camera_access" msgid="2366392786153103482">"Autorizações da câmara"</string>
- <string name="enterprise_privacy_enterprise_set_default_apps" msgid="6142937923758931242">"Aplicações predefinidas"</string>
+ <string name="enterprise_privacy_enterprise_set_default_apps" msgid="6142937923758931242">"Apps predefinidas"</string>
<plurals name="enterprise_privacy_number_packages" formatted="false" msgid="1480745164313890415">
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> aplicações</item>
<item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> aplicação</item>
@@ -4242,7 +4244,7 @@
<string name="storage_volume_total" msgid="5021484171514159913">"utilizados de <xliff:g id="TOTAL">%1$s</xliff:g>"</string>
<string name="storage_percent_full" msgid="6924662861545958442">"utilizado"</string>
<string name="clear_instant_app_data" msgid="3673669086522890405">"Limpar aplicação"</string>
- <string name="clear_instant_app_confirmation" msgid="1778553115373698061">"Pretende remover esta aplicação instantânea?"</string>
+ <string name="clear_instant_app_confirmation" msgid="1778553115373698061">"Remover esta app instantânea?"</string>
<string name="launch_instant_app" msgid="5251693061228352333">"Abrir"</string>
<string name="game_storage_settings" msgid="6856911551799175914">"Jogos"</string>
<string name="audio_files_title" msgid="3073879661731363935">"Ficheiros de áudio"</string>
@@ -4265,9 +4267,9 @@
<string name="storage_manager_indicator" msgid="4255140732848476875">"Gestor de armazenamento: <xliff:g id="STATUS">^1</xliff:g>"</string>
<string name="storage_manager_indicator_off" msgid="6404056007102580777">"Desativado"</string>
<string name="storage_manager_indicator_on" msgid="5295306384982062320">"Ativado"</string>
- <string name="install_type_instant" msgid="6248487669862821874">"Aplicação instantânea"</string>
+ <string name="install_type_instant" msgid="6248487669862821874">"App instantânea"</string>
<string name="automatic_storage_manager_deactivation_warning" msgid="7867793739491286374">"Pretende desativar o gestor de armazenamento?"</string>
- <string name="storage_movies_tv" msgid="7282484273991655296">"Aplicações de filmes e TV"</string>
+ <string name="storage_movies_tv" msgid="7282484273991655296">"Apps de filmes e TV"</string>
<string name="carrier_provisioning" msgid="3309125279191534469">"Informações de fornecimento do operador"</string>
<string name="trigger_carrier_provisioning" msgid="6284005970057901477">"Acionar fornecimento do operador"</string>
<string name="zen_suggestion_title" msgid="2134699720214231950">"Atualizar o modo Não incomodar"</string>
@@ -4308,7 +4310,7 @@
<string name="change_wifi_state_title" msgid="5140754955787584174">"Controlo do Wi-Fi"</string>
<string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"Permitir à aplicação controlar o Wi-Fi"</string>
<string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Permitir a esta aplicação ativar ou desativar o Wi-Fi, procurar e estabelecer ligação a redes Wi-Fi, adicionar ou remover redes, assim como iniciar uma zona Wi-Fi apenas local."</string>
- <string name="media_output_title" msgid="8710632337456601848">"Reproduzir multimédia em"</string>
+ <string name="media_output_title" msgid="8710632337456601848">"Reproduzir multimédia:"</string>
<string name="media_output_default_summary" msgid="3159237976830415584">"Este dispositivo"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"Telemóvel"</string>
<string name="media_output_summary" product="tablet" msgid="6672024060360538526">"Tablet"</string>
@@ -4437,7 +4439,7 @@
<string name="cdma_subscription_summary" msgid="2298861419202726628">"Alternar entre RUIM/SIM e NV"</string>
<string name="cdma_subscription_dialogtitle" msgid="232485231569225126">"subscrição"</string>
<string name="register_automatically" msgid="1858081641661493109">"Registo automático…"</string>
- <string name="roaming_alert_title" msgid="1849237823113454475">"Pretende permitir roaming de dados?"</string>
+ <string name="roaming_alert_title" msgid="1849237823113454475">"Permitir roaming de dados?"</string>
<string name="roaming_check_price_warning" msgid="5883499714594419439">"Consulte o seu fornecedor de serviços de rede para obter preços."</string>
<string name="mobile_data_usage_title" msgid="2376358672434990037">"Utilização de dados da aplicação"</string>
<string name="mobile_network_mode_error" msgid="6818434186286086554">"Modo de rede inválido: <xliff:g id="NETWORKMODEID">%1$d</xliff:g>. Ignore."</string>
@@ -4472,11 +4474,11 @@
<string name="privacy_dashboard_summary" msgid="7916431309860824945">"Autorizações, atividade da conta, dados pessoais"</string>
<string name="contextual_card_dismiss_remove" msgid="1750420285615827309">"Remover"</string>
<string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"Manter"</string>
- <string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"Pretende remover esta sugestão?"</string>
+ <string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"Remover esta sugestão?"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"Sugestão removida"</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"Anular"</string>
<string name="low_storage_summary" msgid="4562224870189133400">"Tem pouco espaço de armazenamento. <xliff:g id="PERCENTAGE">%1$s</xliff:g> utilizados – <xliff:g id="FREE_SPACE">%2$s</xliff:g> livres."</string>
- <string name="contextual_card_feedback_send" msgid="8698649023854350623">"Enviar comentários"</string>
+ <string name="contextual_card_feedback_send" msgid="8698649023854350623">"Enviar feedback"</string>
<string name="contextual_card_feedback_confirm_message" msgid="3987973028353264878">"Pretende enviar-nos comentários acerca desta sugestão?"</string>
<string name="copyable_slice_toast" msgid="1357518174923789947">"<xliff:g id="COPY_CONTENT">%1$s</xliff:g> copiado para a área de transferência."</string>
<string name="search_bar_account_avatar_content_description" msgid="947628881535053409"></string>
diff --git a/tests/CarDeveloperOptions/res/values-pt/arrays.xml b/tests/CarDeveloperOptions/res/values-pt/arrays.xml
index 2a5f2f6..2ae29a0 100644
--- a/tests/CarDeveloperOptions/res/values-pt/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-pt/arrays.xml
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"Nunca permitir"</item>
<item msgid="8184570120217958741">"Sempre permitir"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normal"</item>
+ <item msgid="5101233285497327432">"Moderada"</item>
+ <item msgid="1555861583162930714">"Baixa"</item>
+ <item msgid="1719683776264798117">"Crítico"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normal"</item>
+ <item msgid="6107138933849816768">"Moderado"</item>
+ <item msgid="182695359839047859">"Baixa"</item>
+ <item msgid="8577246509202964244">"Crítica"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Persistente"</item>
<item msgid="167418068739176448">"Principal atividade"</item>
diff --git a/tests/CarDeveloperOptions/res/values-pt/strings.xml b/tests/CarDeveloperOptions/res/values-pt/strings.xml
index 55fe26b..6ce1154 100644
--- a/tests/CarDeveloperOptions/res/values-pt/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-pt/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Tornar o texto na tela menor ou maior."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Tornar menor"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Tornar maior"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Texto de amostra"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"O Mágico de Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Capítulo 11: A maravilhosa Cidade das Esmeraldas de Oz"</string>
@@ -200,7 +199,7 @@
<string name="proxy_exclusionlist_label" msgid="8179084955547941904">"Evitar proxy para"</string>
<string name="proxy_defaultView_text" msgid="5785775257042403261">"Restaurar padrões"</string>
<string name="proxy_action_text" msgid="814511434843981413">"Concluído"</string>
- <string name="proxy_hostname_label" msgid="6798891831427287847">"Hostname do proxy"</string>
+ <string name="proxy_hostname_label" msgid="6798891831427287847">"Nome do host do proxy"</string>
<string name="proxy_error" msgid="5036164133669802299">"Atenção"</string>
<string name="proxy_error_dismiss" msgid="883805570485635650">"OK"</string>
<string name="proxy_error_invalid_host" msgid="5430640241353307223">"O nome de host digitado não é válido."</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Informações do perfil"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Contas"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Localização"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Usar local"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Usar o local"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Configuração desativada"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">Ativado: <xliff:g id="COUNT_1">%1$d</xliff:g> app com acesso ao local</item>
@@ -489,7 +488,7 @@
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"Opa, este não é o sensor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"Toque no sensor na parte traseira do smartphone. Use o dedo indicador."</string>
<string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"O registro não foi concluído"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Prazo de registro de impressões digitais atingido. Tente novamente."</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"O tempo limite para o registro de impressões digitais foi atingido. Tente novamente."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"O registro da impressão digital não funcionou. Tente novamente ou use um dedo diferente."</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"Adicionar outra"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"Próxima"</string>
@@ -544,7 +543,7 @@
<string name="suggested_fingerprint_lock_settings_summary" product="tablet" msgid="8114514312665251311"></string>
<string name="suggested_fingerprint_lock_settings_summary" product="device" msgid="8114514312665251311"></string>
<string name="suggested_fingerprint_lock_settings_summary" product="default" msgid="8114514312665251311"></string>
- <string name="lock_settings_picker_title" msgid="1034741644461982205">"Escolher bloqueio de tela"</string>
+ <string name="lock_settings_picker_title" msgid="1034741644461982205">"Bloqueio de tela"</string>
<string name="lock_settings_picker_title_profile" msgid="5086594364428782115">"Escolher bloq de trab."</string>
<string name="setup_lock_settings_picker_title" product="tablet" msgid="2429667472335773519">"Proteger o tablet"</string>
<string name="setup_lock_settings_picker_title" product="device" msgid="4739290104106645233">"Proteger o dispositivo"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Ativar o Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Usar Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Usar o Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Configurações de Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Configurar e gerenciar pontos de acesso sem fio"</string>
@@ -894,7 +893,7 @@
<string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"Você não tem permissão para alterar a rede Wi-Fi."</string>
<string name="wifi_more" msgid="3538241640407382185">"Mais"</string>
<string name="wifi_setup_wps" msgid="6730131677695521321">"Configuração automática (WPS)"</string>
- <string name="wifi_settings_scanning_required_title" msgid="3593457187659922490">"Ativar a Busca por Wi‑Fi?"</string>
+ <string name="wifi_settings_scanning_required_title" msgid="3593457187659922490">"Ativar a \"busca por Wi‑Fi\"?"</string>
<string name="wifi_settings_scanning_required_summary" msgid="7469610959462708782">"Para ativar o Wi‑Fi automaticamente, primeiro você precisa ativar a Busca por Wi‑Fi."</string>
<string name="wifi_settings_scanning_required_info" msgid="5913535073390607386">"A Busca por Wi-Fi permite que apps e serviços procurem redes Wi‑Fi a qualquer momento, mesmo quando o Wi‑Fi está desativado. Essa configuração pode ser usada, por exemplo, para melhorar recursos e serviços baseados na localização."</string>
<string name="wifi_settings_scanning_required_turn_on" msgid="4327570180594277049">"Ativar"</string>
@@ -906,7 +905,7 @@
<string name="wifi_ssid_hint" msgid="5010024648106585165">"Digite o SSID"</string>
<string name="wifi_security" msgid="9136702039496152831">"Segurança"</string>
<string name="wifi_hidden_network" msgid="6647772204699776833">"Rede oculta"</string>
- <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Se seu roteador não estiver transmitindo um código de rede, mas você quiser se conectar a ele no futuro, configure a rede como oculta.\n\nIsso pode gerar um risco à segurança, porque seu smartphone transmitirá regularmente o próprio sinal para encontrar a rede.\n\nA configuração da rede como oculta não altera as configurações do seu roteador."</string>
+ <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Se seu roteador não estiver transmitindo o ID da rede, mas você quiser se conectar a ela no futuro, configure a rede como oculta.\n\nIsso pode gerar um risco à segurança, porque seu smartphone transmitirá regularmente o próprio sinal para encontrar a rede.\n\nA configuração da rede como oculta não altera as configurações do seu roteador."</string>
<string name="wifi_signal" msgid="696548364467704808">"Potência do sinal"</string>
<string name="wifi_status" msgid="3439931558930689940">"Status"</string>
<string name="tx_wifi_speed" msgid="2571810085003261073">"Velocidade do link de transmissão"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Celular"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Se o Wi‑Fi estiver indisponível, use a rede móvel"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Se a rede móvel estiver indisponível, use Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Chamar via Wi-Fi. Sem sinal do Wi‑Fi, a chamada será encerrada."</string>
@@ -1581,7 +1583,7 @@
<string name="reset_network_complete_toast" msgid="128225929536005495">"As configurações de rede foram redefinidas"</string>
<string name="reset_esim_error_title" msgid="4728931209471875632">"Não é possível limpar chips"</string>
<string name="reset_esim_error_msg" msgid="4716366079119742235">"Os chips transferidos por download não podem ser limpos devido a um erro.\n\nReinicie o dispositivo e tente novamente."</string>
- <string name="master_clear_title" msgid="1560712943955904673">"Limpar todos os dados (redefinição para configuração original)"</string>
+ <string name="master_clear_title" msgid="1560712943955904673">"Limpar todos os dados (redefinir para a configuração original)"</string>
<string name="master_clear_short_title" msgid="919098101581335101">"Limpar todos os dados"</string>
<string name="master_clear_desc" product="tablet" msgid="3432373610755760899">"Essa ação limpará todos os dados do "<b>"armazenamento interno"</b>" do seu tablet, incluindo:\n\n"<li>"sua Conta do Google;"</li>\n<li>"configurações e dados do sistema e dos apps;"</li>\n<li>"apps transferidos."</li></string>
<string name="master_clear_desc" product="default" msgid="8765543541962866697">"Essa ação limpará todos os dados do "<b>"armazenamento interno"</b>" do seu smartphone, incluindo:\n\n"<li>"Sua Conta do Google"</li>\n<li>"Configurações e dados do sistema e dos apps"</li>\n<li>"Apps transferidos"</li></string>
@@ -2047,7 +2049,7 @@
<string name="feature_flags_dashboard_title" msgid="3153034144122754381">"Sinalizações de recursos"</string>
<string name="talkback_title" msgid="3717960404234260050">"Talkback"</string>
<string name="talkback_summary" msgid="6602857105831641574">"Leitor de tela, usado principalmente para pessoas com deficiência visual total ou parcial"</string>
- <string name="select_to_speak_summary" msgid="7514180457557735421">"Tocar nos itens exibidos na tela para ouvir a leitura deles em voz alta"</string>
+ <string name="select_to_speak_summary" msgid="7514180457557735421">"Tocar nos itens da tela para ouvir a leitura em voz alta"</string>
<string name="accessibility_captioning_title" msgid="5878371993023439642">"Legendas"</string>
<string name="accessibility_screen_magnification_title" msgid="7250949681883917360">"Ampliação"</string>
<string name="accessibility_screen_magnification_gestures_title" msgid="9199287875401817974">"Ampliar com toque triplo"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Vibração de notificação"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Vibração do toque"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Vibrar ao tocar na tela"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Usar serviço"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Usar correção de cor"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Usar legendas"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Usar o serviço"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Usar a correção de cor"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Usar as legendas"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Continuar"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Aparelhos auditivos"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Nenhum aparelho auditivo conectado"</string>
@@ -2279,7 +2281,7 @@
<string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"A bateria pode acabar antes do normal"</string>
<string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"Economia de bateria ativada"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"Alguns recursos podem ser limitados"</string>
- <string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Smartphone usado além do normal"</string>
+ <string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Smartphone usado mais que o normal"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"Tablet usado além do normal"</string>
<string name="battery_tip_high_usage_title" product="device" msgid="8304138287288309490">"Dispositivo usado além do normal"</string>
<string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"A bateria pode acabar antes do esperado"</string>
@@ -2428,7 +2430,7 @@
<string name="battery_last_full_charge" msgid="5624033030647170717">"Última carga completa"</string>
<string name="battery_full_charge_last" msgid="4614554109170251301">"A carga completa dura cerca de"</string>
<string name="battery_footer_summary" msgid="4828444679643906943">"Os dados de uso da bateria são aproximados e podem mudar conforme o uso"</string>
- <string name="battery_detail_foreground" msgid="6616408559186553085">"Ativo"</string>
+ <string name="battery_detail_foreground" msgid="6616408559186553085">"Durante o uso"</string>
<string name="battery_detail_background" msgid="7938146832943604280">"Em segundo plano"</string>
<string name="battery_detail_power_usage" msgid="3606930232257489212">"Uso da bateria"</string>
<string name="battery_detail_info_title" msgid="4617514228447481336">"Desde a carga completa"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Ativar"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Usar a Economia de bateria"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Usar a Economia de bateria"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Ativar automaticamente"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Nunca"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"com <xliff:g id="PERCENT">%1$s</xliff:g> de bateria"</string>
@@ -2669,7 +2671,7 @@
<string name="data_usage_cellular_data_summary" msgid="9162777397135709280">"Pausa no limite"</string>
<string name="account_settings_menu_auto_sync" msgid="2673669556006027506">"Sincron. dados automaticamente"</string>
<string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"Sinc. autom. dados pessoais"</string>
- <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Autossincronizar dados de trabalho"</string>
+ <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Sincronizar dados de trabalho automaticamente"</string>
<string name="data_usage_change_cycle" msgid="447761920472170031">"Alterar ciclo..."</string>
<string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"Dia do mês para redefinir o ciclo de uso dos dados:"</string>
<string name="data_usage_empty" msgid="7981405723435034032">"Nenhum app usou dados durante o período."</string>
@@ -2871,7 +2873,7 @@
<string name="user_add_user_message_long" msgid="686637203224195465">"Você pode compartilhar este dispositivo com outras pessoas, adicionando usuários. Cada usuário tem o próprio espaço, que pode ser personalizado com apps, planos de fundo, etc. Os usuários também podem ajustar as configurações do dispositivo, como o Wi‑Fi, que afetam a todos.\n\nQuando você adiciona um novo usuário, essa pessoa precisa configurar o próprio espaço.\n\nQualquer usuário pode atualizar apps para todos os outros. Serviços e configurações de acessibilidade podem não ser transferidos para novos usuários."</string>
<string name="user_add_user_message_short" msgid="1802594476285458254">"Quando você adiciona um novo usuário, essa pessoa precisa configurar o próprio espaço.\n\nQualquer usuário pode atualizar apps para os demais usuários."</string>
<string name="user_setup_dialog_title" msgid="6748950002206392396">"Configurar o usuário agora?"</string>
- <string name="user_setup_dialog_message" msgid="2988559933258353919">"Certifique-se de que a pessoa está disponível para acessar o dispositivo e fazer as próprias configurações"</string>
+ <string name="user_setup_dialog_message" msgid="2988559933258353919">"Verifique se a pessoa está disponível para acessar o dispositivo e fazer as próprias configurações"</string>
<string name="user_setup_profile_dialog_message" msgid="7611900802824048526">"Configurar perfil agora?"</string>
<string name="user_setup_button_setup_now" msgid="4941459406266856176">"Configurar agora"</string>
<string name="user_setup_button_setup_later" msgid="6596031428556518752">"Agora não"</string>
@@ -3029,7 +3031,7 @@
<item quantity="one">Mostrar %d item oculto</item>
<item quantity="other">Mostrar %d itens ocultos</item>
</plurals>
- <string name="network_dashboard_title" msgid="8288134139584687806">"Rede e internet"</string>
+ <string name="network_dashboard_title" msgid="8288134139584687806">"Rede e Internet"</string>
<string name="network_dashboard_summary_mobile" msgid="5560545061217580626">"rede móvel"</string>
<string name="network_dashboard_summary_data_usage" msgid="4695629715072542102">"uso de dados"</string>
<string name="network_dashboard_summary_hotspot" msgid="3928610802321995214">"ponto de acesso"</string>
@@ -3159,7 +3161,7 @@
<string name="emergency_tone_alert" msgid="907868135091891015">"Tons"</string>
<string name="emergency_tone_vibrate" msgid="5020068066905681181">"Vibrações"</string>
<string name="boot_sounds_title" msgid="7583926202411353620">"Ativar sons"</string>
- <string name="live_caption_title" msgid="7926591158657997051">"Transcrição Instantânea"</string>
+ <string name="live_caption_title" msgid="7926591158657997051">"Legenda Instantânea"</string>
<string name="live_caption_summary" msgid="9064771862352393125">"Transcrição automática"</string>
<string name="zen_mode_settings_summary_off" msgid="6929319200478424962">"Nunca"</string>
<plurals name="zen_mode_settings_summary_on" formatted="false" msgid="6061723291126091396">
@@ -3231,7 +3233,7 @@
<string name="zen_mode_button_turn_on" msgid="1097964136225943415">"Ativar agora"</string>
<string name="zen_mode_button_turn_off" msgid="3990967728457149454">"Desativar agora"</string>
<string name="zen_mode_settings_dnd_manual_end_time" msgid="4307574188962071429">"O modo \"Não perturbe\" fica ativado até <xliff:g id="FORMATTED_TIME">%s</xliff:g>"</string>
- <string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"O modo Não perturbe ficará ativado até que você o desative"</string>
+ <string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"O modo \"Não perturbe\" ficará ativado até que você o desative"</string>
<string name="zen_mode_settings_dnd_automatic_rule" msgid="2843297614114625408">"O \"Não perturbe\" foi ativado automaticamente por uma programação (<xliff:g id="RULE_NAME">%s</xliff:g>)"</string>
<string name="zen_mode_settings_dnd_automatic_rule_app" msgid="5103454923160912313">"O modo \"Não perturbe\" foi ativado automaticamente por um app (<xliff:g id="APP_NAME">%s</xliff:g>)"</string>
<string name="zen_mode_settings_dnd_custom_settings_footer" msgid="6335108298640066560">"O \"Não perturbe\" está ativado para <xliff:g id="RULE_NAMES">%s</xliff:g> com configurações personalizadas."</string>
@@ -3421,7 +3423,7 @@
<string name="notification_badge_title" msgid="8989086619255666442">"Permitir ponto de notificação"</string>
<string name="notification_channel_badge_title" msgid="8228215248332054612">"Mostrar ponto de notificação"</string>
<string name="app_notification_override_dnd_title" msgid="1757042206738172601">"Ignorar o Não perturbe"</string>
- <string name="app_notification_override_dnd_summary" msgid="3152957611171210980">"Permitir que essas notificações sejam mostradas mesmo quando o Não perturbe estiver ativado"</string>
+ <string name="app_notification_override_dnd_summary" msgid="3152957611171210980">"Permitir que as notificações sejam mostradas mesmo quando o Não perturbe estiver ativado"</string>
<string name="app_notification_visibility_override_title" msgid="2349335170165637672">"Na tela de bloqueio"</string>
<string name="app_notification_row_banned" msgid="2079325338122151677">"Bloqueadas"</string>
<string name="app_notification_row_priority" msgid="432299064888787236">"Prioridade"</string>
@@ -3709,7 +3711,7 @@
<string name="high_power_off" msgid="5906679734326490426">"Utilização otimizada da bateria"</string>
<string name="high_power_system" msgid="739584574711292753">"A otimização de bateria não está disponível"</string>
<string name="high_power_desc" msgid="333756885680362741">"Não aplicar a otimização de bateria. Isso pode esgotar sua bateria mais rapidamente."</string>
- <string name="high_power_prompt_title" msgid="2805745781720454052">"Permitir que o app sempre esteja em execução em segundo plano?"</string>
+ <string name="high_power_prompt_title" msgid="2805745781720454052">"Permitir execução contínua do app em segundo plano?"</string>
<string name="high_power_prompt_body" msgid="8067395096053552289">"A execução contínua do app <xliff:g id="APP_NAME">%1$s</xliff:g> em segundo plano pode reduzir a duração da bateria. \n\nVocê poderá alterar essa opção mais tarde em \"Configurar\" > \"Apps e notificações\"."</string>
<string name="battery_summary" msgid="4345690800899981339">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> de uso desde a última carga completa"</string>
<string name="battery_power_management" msgid="2853925857548647969">"Gerenciamento de energia"</string>
@@ -3751,7 +3753,7 @@
<string name="usb_summary_photo_transfers" msgid="4743028167400644354">"PTP (fotos)"</string>
<string name="usb_summary_MIDI" msgid="5540604166270861247">"MIDI"</string>
<string name="usb_summary_file_transfers_power" msgid="1684501026426766867">"Transferência de arquivo e fornecimento de energia"</string>
- <string name="usb_summary_tether_power" msgid="5684170912136320002">"Tethering USB e fornecimento de energia"</string>
+ <string name="usb_summary_tether_power" msgid="5684170912136320002">"Tethering por USB e fornecimento de energia"</string>
<string name="usb_summary_photo_transfers_power" msgid="4424106272137720464">"PTP e fornecimento de energia"</string>
<string name="usb_summary_MIDI_power" msgid="7685597621357005180">"MIDI e fornecimento de energia"</string>
<string name="background_check_pref" msgid="664081406854758392">"Verificação em segundo plano"</string>
@@ -3962,8 +3964,8 @@
<string name="configure" msgid="8232696842838580549">"Configurar"</string>
<string name="data_usage_other_apps" msgid="7002491980141402084">"Outros apps inclusos no uso"</string>
<plurals name="data_saver_unrestricted_summary" formatted="false" msgid="6046013861315713697">
- <item quantity="one"><xliff:g id="COUNT">%1$d</xliff:g> app autorizado a usar dados irrestritos quando a Economia de dados estiver ativada</item>
- <item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> apps autorizados a usar dados irrestritos quando a Economia de dados estiver ativada</item>
+ <item quantity="one"><xliff:g id="COUNT">%1$d</xliff:g> app autorizado a usar dados ilimitados quando a Economia de dados estiver ativada</item>
+ <item quantity="other"><xliff:g id="COUNT">%1$d</xliff:g> apps autorizados a usar dados ilimitados quando a Economia de dados estiver ativada</item>
</plurals>
<string name="data_usage_title" msgid="7874606430902201083">"Dados primários"</string>
<string name="data_usage_wifi_title" msgid="7161828479387766556">"Dados Wi‑Fi"</string>
@@ -3984,12 +3986,12 @@
<string name="launch_mdp_app_text" msgid="9186559496664208252">"Ver plano"</string>
<string name="launch_wifi_text" msgid="317820210431682605">"Ver detalhes"</string>
<string name="data_saver_title" msgid="7903308134514179256">"Economia de dados"</string>
- <string name="unrestricted_data_saver" msgid="9139401849550738720">"Dados irrestritos"</string>
+ <string name="unrestricted_data_saver" msgid="9139401849550738720">"Dados ilimitados"</string>
<string name="restrict_background_blacklisted" msgid="7158991683849067124">"Os dados em segundo plano estão desativados"</string>
<string name="data_saver_on" msgid="7281809065420480881">"Ativada"</string>
<string name="data_saver_off" msgid="7439439787358504018">"Desativada"</string>
<string name="data_saver_switch_title" msgid="8244008132112735207">"Usar o recurso Economia de dados"</string>
- <string name="unrestricted_app_title" msgid="4390661122069905122">"Uso irrestrito de dados"</string>
+ <string name="unrestricted_app_title" msgid="4390661122069905122">"Uso ilimitado de dados"</string>
<string name="unrestricted_app_summary" msgid="2829141815077800483">"Permitir acesso irrestrito a dados quando a Economia de dados estiver ativada"</string>
<string name="home_app" msgid="3695063566006954160">"App de início"</string>
<string name="no_default_home" msgid="1518949210961918497">"Nenhuma Página inicial padrão"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Se o dispositivo estiver bloqueado, impedir a digitação de respostas ou outros textos nas notificações"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Corretor ortográfico padrão"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Escolher corretor ortográfico"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Usar o corretor ortográfico"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Usar o corretor ortográfico"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Não selecionado"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(nenhum)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4050,10 +4052,10 @@
<string name="display_cutout_emulation_keywords" msgid="6795671536772871439">"corte de tela, entalhe"</string>
<string name="overlay_option_device_default" msgid="165508753381657697">"Padrão do dispositivo"</string>
<string name="overlay_toast_failed_to_apply" msgid="5692251825129250040">"Falha ao aplicar sobreposição"</string>
- <string name="special_access" msgid="1453926335914696206">"Acesso especial a apps"</string>
+ <string name="special_access" msgid="1453926335914696206">"Acesso especial para apps"</string>
<plurals name="special_access_summary" formatted="false" msgid="5182092345063909346">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> app pode usar dados irrestritos</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> apps podem usar dados irrestritos</item>
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> app pode usar dados ilimitados</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> apps podem usar dados ilimitados</item>
</plurals>
<string name="special_access_more" msgid="7086690625048471400">"Ver mais"</string>
<string name="confirm_convert_to_fbe_warning" msgid="4972595831034280189">"Quer mesmo limpar dados do usuário e converter em criptografia de arquivos?"</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Para ajudar a liberar espaço de armazenamento, o gerenciador de armazenamento remove fotos e vídeos do seu dispositivo salvos em backup."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Remover fotos e vídeos"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Gerenciador de armazenamento"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Usar gerenciador de armazenamento"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Usar o gerenciador de armazenamento"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Modo automático"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Modo manual"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Liberar espaço agora"</string>
@@ -4129,7 +4131,7 @@
<string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"Para verificar a hora, as notificações e outras informações, pegue o smartphone."</string>
<string name="ambient_display_pickup_summary" product="tablet" msgid="1077745287100012928">"Para verificar a hora, as notificações e outras informações, pegue o tablet."</string>
<string name="ambient_display_pickup_summary" product="device" msgid="404199660076598026">"Para verificar a hora, as notificações e outras informações, pegue o dispositivo."</string>
- <string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"Tocar para verificar o smartphone"</string>
+ <string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"Tocar na tela para verificar smartphone"</string>
<string name="ambient_display_tap_screen_title" product="tablet" msgid="6434521782016864148">"Tocar para verificar o tablet"</string>
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"Tocar para verificar o dispositivo"</string>
<string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"Para verificar a hora, as notificações e outras informações, toque na tela."</string>
@@ -4141,14 +4143,14 @@
<string name="fingerprint_swipe_for_notifications_suggestion_title" msgid="948946491233738823">"Ver notificações rapidamente"</string>
<string name="gesture_setting_on" msgid="7573680730101327866">"Ativado"</string>
<string name="gesture_setting_off" msgid="2540159841716890511">"Desativado"</string>
- <string name="oem_unlock_enable_disabled_summary_bootloader_unlocked" msgid="7233244080078311793">"O bootloader já está desbloqueado"</string>
+ <string name="oem_unlock_enable_disabled_summary_bootloader_unlocked" msgid="7233244080078311793">"O carregador de inicialização já está desbloqueado"</string>
<string name="oem_unlock_enable_disabled_summary_connectivity" msgid="262986780389836168">"Conecte-se à Internet primeiro"</string>
<string name="oem_unlock_enable_disabled_summary_connectivity_or_locked" msgid="3331374502670483142">"Conecte-se à Internet ou entre em contato com sua operadora"</string>
<string name="oem_unlock_enable_disabled_summary_sim_locked_device" msgid="5223278198179877704">"Indisponível em dispositivos bloqueados pela operadora"</string>
<string name="oem_lock_info_message" msgid="5090850412279403901">"Reinicie o dispositivo para ativar o recurso de proteção para dispositivo."</string>
<string name="automatic_storage_manager_freed_bytes" msgid="7360443072390107772">"Total de <xliff:g id="SIZE">%1$s</xliff:g> disponibilizado\n\nÚltima execução em <xliff:g id="DATE">%2$s</xliff:g>"</string>
<string name="web_action_enable_title" msgid="4462106633708675959">"Apps instantâneos"</string>
- <string name="web_action_enable_summary" msgid="1729016644691793085">"Abrir links em apps, mesmo que eles não estejam instalados"</string>
+ <string name="web_action_enable_summary" msgid="1729016644691793085">"Abre links de apps, mesmo que eles não estejam instalados"</string>
<string name="web_action_section_title" msgid="5563229447734734662">"Apps instantâneos"</string>
<string name="instant_apps_settings" msgid="879003203555847537">"Preferências do Instant Apps"</string>
<string name="domain_url_section_title" msgid="206403507921518321">"Apps instalados"</string>
@@ -4158,7 +4160,7 @@
<string name="auto_sync_account_title" msgid="2394463123733529506">"Sincronizar dados automaticamente"</string>
<string name="auto_sync_personal_account_title" msgid="6844465157916100655">"Sincronizar dados pessoais automaticamente"</string>
<string name="auto_sync_work_account_title" msgid="2403222633447522376">"Sincronizar dados de trabalho automaticamente"</string>
- <string name="auto_sync_account_summary" msgid="6316230976974033772">"Permitir que os apps atualizem dados automaticamente"</string>
+ <string name="auto_sync_account_summary" msgid="6316230976974033772">"Permite que os apps atualizem dados automaticamente"</string>
<string name="account_sync_title" msgid="1570164819114297154">"Sincronização da conta"</string>
<string name="account_sync_summary_some_on" msgid="1934556869158274053">"Sincronização ativada para <xliff:g id="ID_1">%1$d</xliff:g> de <xliff:g id="ID_2">%2$d</xliff:g> itens"</string>
<string name="account_sync_summary_all_on" msgid="3634161204232431700">"Sincronização ativada para todos os itens"</string>
diff --git a/tests/CarDeveloperOptions/res/values-ro/arrays.xml b/tests/CarDeveloperOptions/res/values-ro/arrays.xml
index 39d046b..06c74ea 100644
--- a/tests/CarDeveloperOptions/res/values-ro/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-ro/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"rulează în fundal"</item>
<item msgid="6423861043647911030">"volum accesibilitate"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Locație"</item>
+ <item msgid="6656077694190491067">"Locație"</item>
+ <item msgid="8790228218278477369">"Locație"</item>
+ <item msgid="7836406246005211990">"Vibrare"</item>
+ <item msgid="3951439024549922598">"Citește agenda"</item>
+ <item msgid="8802152411647068">"Modifică agenda"</item>
+ <item msgid="229544934599698735">"Citește jurnalul de apeluri"</item>
+ <item msgid="7396102294405899613">"Modifică jurnalul de apeluri"</item>
+ <item msgid="3597797992398484655">"Citire calendar"</item>
+ <item msgid="2705975774250907343">"Modifică calendarul"</item>
+ <item msgid="4668747371441932697">"Locație"</item>
+ <item msgid="1487578921720243646">"Postează o notificare"</item>
+ <item msgid="4636080349724146638">"Locație"</item>
+ <item msgid="673510900286463926">"Apelează un telefon"</item>
+ <item msgid="542083422784609790">"Citiți mesaje SMS/MMS"</item>
+ <item msgid="1033780373029588436">"Scrieți mesaje SMS/MMS"</item>
+ <item msgid="5647111115517787488">"Primește mesaje SMS/MMS"</item>
+ <item msgid="8591105601108455893">"Primește mesaje SMS/MMS"</item>
+ <item msgid="7730995008517841903">"Primește mesaje SMS/MMS"</item>
+ <item msgid="2613033109026626086">"Primește mesaje SMS/MMS"</item>
+ <item msgid="3037159047591081136">"Trimite mesaje SMS/MMS"</item>
+ <item msgid="4726682243833913568">"Citiți mesaje SMS/MMS"</item>
+ <item msgid="6555678522277865572">"Scrieți mesaje SMS/MMS"</item>
+ <item msgid="6981734935578130884">"Modifică setările"</item>
+ <item msgid="8705854389991425629">"Desenează deasupra"</item>
+ <item msgid="5861356020344153651">"Accesează notificări"</item>
+ <item msgid="78432174621628659">"Cameră foto"</item>
+ <item msgid="3986116419882154794">"Înregistrează conținut audio"</item>
+ <item msgid="4516840825756409490">"Redă conținut audio"</item>
+ <item msgid="6811712502798183957">"Citește clipboardul"</item>
+ <item msgid="2780369012602289114">"Modifică clipboardul"</item>
+ <item msgid="2331359440170850868">"Butoane media"</item>
+ <item msgid="6133599737122751231">"Focalizare audio"</item>
+ <item msgid="6844485713404805301">"Volum principal"</item>
+ <item msgid="1600379420669104929">"Volum voce"</item>
+ <item msgid="6296768210470214866">"Volumul soneriei"</item>
+ <item msgid="510690696071629241">"Volum media"</item>
+ <item msgid="406861638631430109">"Volumul alarmei"</item>
+ <item msgid="4715864795872233884">"Volumul notificărilor"</item>
+ <item msgid="2311478519251301183">"Volum Bluetooth"</item>
+ <item msgid="5133991377896747027">"Păstrare în activitate"</item>
+ <item msgid="2464189519136248621">"Locație"</item>
+ <item msgid="2062677934050803037">"Locație"</item>
+ <item msgid="1735171933192715957">"Obțineți statistici de utilizare"</item>
+ <item msgid="1014093788778383554">"Activați/dezactivați microfonul"</item>
+ <item msgid="4199297950608622850">"Afișează semnalarea"</item>
+ <item msgid="2527962435313398821">"Proiectează conținutul media"</item>
+ <item msgid="5117506254221861929">"Activează serviciul VPN"</item>
+ <item msgid="8291198322681891160">"Scrie imaginea de fundal"</item>
+ <item msgid="7106921284621230961">"Structură de asistență"</item>
+ <item msgid="4496533640894624799">"Captură de ecran de asistență"</item>
+ <item msgid="2598847264853993611">"Citește starea telefonului"</item>
+ <item msgid="9215610846802973353">"Adaugă mesaje vocale"</item>
+ <item msgid="9186411956086478261">"Folosește SIP"</item>
+ <item msgid="6884763100104539558">"Procesează apelul de ieșire"</item>
+ <item msgid="125513972170580692">"Amprentă"</item>
+ <item msgid="2556071024281275619">"Senzori corporali"</item>
+ <item msgid="617168514928339387">"Citește transmisiile celulare"</item>
+ <item msgid="7134693570516523585">"Locație de testare"</item>
+ <item msgid="7224489175375229399">"Citește spațiul de stocare"</item>
+ <item msgid="8472735063903258202">"Scrie spațiul de stocare"</item>
+ <item msgid="4069276819909595110">"Activează ecranul"</item>
+ <item msgid="1228338896751121025">"Preia conturile"</item>
+ <item msgid="3181581793459233672">"Rulează în fundal"</item>
+ <item msgid="2340936043025374076">"Volum accesibilitate"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Scurtă"</item>
<item msgid="4816511817309094890">"Medie"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Nu permiteți niciodată"</item>
<item msgid="8184570120217958741">"Permiteți întotdeauna"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normală"</item>
+ <item msgid="5101233285497327432">"Moderată"</item>
+ <item msgid="1555861583162930714">"Scăzută"</item>
+ <item msgid="1719683776264798117">"Critică"</item>
+ <item msgid="1567326459340152525">"Necunoscută"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normală"</item>
+ <item msgid="6107138933849816768">"Moderată"</item>
+ <item msgid="182695359839047859">"Scăzută"</item>
+ <item msgid="8577246509202964244">"Critică"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Permanent"</item>
<item msgid="167418068739176448">"Activitate principală"</item>
diff --git a/tests/CarDeveloperOptions/res/values-ro/strings.xml b/tests/CarDeveloperOptions/res/values-ro/strings.xml
index f279356..66e7d2f 100644
--- a/tests/CarDeveloperOptions/res/values-ro/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-ro/strings.xml
@@ -84,8 +84,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Măriți sau micșorați textul de pe ecran."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Micșorați"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Măriți"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Exemplu de text"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Minunatul Vrăjitor din Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Capitolul 11: Minunatul Oraș de Smarald Oz"</string>
@@ -371,7 +370,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Informații de profil"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Conturi"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Locație"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Utilizați locația"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Folosiți locația"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Dezactivat"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="few">Activat - <xliff:g id="COUNT_1">%1$d</xliff:g> aplicații pot accesa locația</item>
@@ -854,7 +853,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Activați conexiunea Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Utilizați Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Folosiți conexiunea Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Setări Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Configurați și gestionați punctele de acces wireless"</string>
@@ -1121,7 +1120,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Date mobile"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Dacă rețeaua Wi‑Fi nu este disponibilă, folosiți rețeaua mobilă"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Dacă rețeaua mobilă nu este disponibilă, folosiți Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Apelați prin Wi‑Fi. Dacă pierdeți conexiunea Wi-Fi, apelul se încheie."</string>
@@ -2114,9 +2116,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Vibrații la notificare"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Vibrațiile soneriei"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Vibrație la atingere"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Utilizați serviciul"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Utilizați corecție de culoare"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Utilizați subtitrările"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Folosiți serviciul"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Folosiți corecția culorii"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Folosiți subtitrări"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Continuați"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Aparate auditive"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Nu s-a conectat niciun aparat auditiv"</string>
@@ -2495,7 +2497,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Activați"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Utilizați Economisirea bateriei"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Folosiți Economisirea bateriei"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Se activează automat"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Niciodată"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"la baterie <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
@@ -3234,7 +3236,7 @@
<string name="zen_mode_summary_combination" msgid="6960111215170691605">"<xliff:g id="MODE">%1$s</xliff:g>: <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="zen_mode_visual_interruptions_settings_title" msgid="8378266552787406849">"Blocați întreruperile vizuale"</string>
<string name="zen_mode_visual_signals_settings_subtitle" msgid="6608239691864638854">"Permiteți semnale vizuale"</string>
- <string name="zen_mode_settings_category" msgid="5601680733422424922">"Când funcția „Nu deranja” este activată"</string>
+ <string name="zen_mode_settings_category" msgid="5601680733422424922">"Când modul Nu deranja este activat"</string>
<string name="zen_mode_restrict_notifications_title" msgid="7486753018073540477">"Restricționați notificările"</string>
<string name="zen_mode_restrict_notifications_mute" msgid="2673665450311184875">"Fără sunet de la notificări"</string>
<string name="zen_mode_restrict_notifications_mute_summary" msgid="1696217042353376674">"Veți vedea notificările pe ecran"</string>
@@ -3273,7 +3275,7 @@
<string name="zen_mode_button_turn_on" msgid="1097964136225943415">"Activați acum"</string>
<string name="zen_mode_button_turn_off" msgid="3990967728457149454">"Dezactivați acum"</string>
<string name="zen_mode_settings_dnd_manual_end_time" msgid="4307574188962071429">"Funcția Nu deranja este activată până la <xliff:g id="FORMATTED_TIME">%s</xliff:g>"</string>
- <string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"Funcția Nu deranja rămâne activă până când o dezactivați"</string>
+ <string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"Modul Nu deranja rămâne activ până îl dezactivați"</string>
<string name="zen_mode_settings_dnd_automatic_rule" msgid="2843297614114625408">"Modul Nu deranja a fost activat automat de un program (<xliff:g id="RULE_NAME">%s</xliff:g>)"</string>
<string name="zen_mode_settings_dnd_automatic_rule_app" msgid="5103454923160912313">"Funcția Nu deranja a fost activată automat de o aplicație (<xliff:g id="APP_NAME">%s</xliff:g>)"</string>
<string name="zen_mode_settings_dnd_custom_settings_footer" msgid="6335108298640066560">"Modul Nu deranja este activat pentru <xliff:g id="RULE_NAMES">%s</xliff:g> cu setări personalizate."</string>
@@ -3556,7 +3558,7 @@
<string name="zen_mode_reminders_list" msgid="7347061314032326677">"mementouri"</string>
<string name="zen_mode_events" msgid="5784076928339534984">"Permiteți evenimente"</string>
<string name="zen_mode_bypassing_apps" msgid="3080739479028713449">"Permiteți aplicațiilor să ignore"</string>
- <string name="zen_mode_bypassing_apps_title" msgid="2115024664615538847">"Excepțiile aplicației"</string>
+ <string name="zen_mode_bypassing_apps_title" msgid="2115024664615538847">"Excepții de aplicații"</string>
<plurals name="zen_mode_bypassing_apps_subtext" formatted="false" msgid="8723144434730871572">
<item quantity="few">Notificările de la <xliff:g id="NUMBER">%1$d</xliff:g> aplicații pot modifica modul Nu deranja</item>
<item quantity="other">Notificările de la <xliff:g id="NUMBER">%1$d</xliff:g> de aplicații pot modifica modul Nu deranja</item>
@@ -3684,7 +3686,7 @@
<item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> permisiune suplimentară</item>
</plurals>
<string name="runtime_permissions_summary_no_permissions_granted" msgid="3477934429220828771">"Nicio permisiune acordată"</string>
- <string name="runtime_permissions_summary_no_permissions_requested" msgid="3901636077467389637">"Nicio permisiunea solicitată"</string>
+ <string name="runtime_permissions_summary_no_permissions_requested" msgid="3901636077467389637">"Nicio permisiune solicitată"</string>
<string name="filter_all_apps" msgid="4042756539846043675">"Toate aplicațiile"</string>
<string name="filter_enabled_apps" msgid="5888459261768538489">"Aplicații instalate"</string>
<string name="filter_instant_apps" msgid="8087483282854072366">"Aplicații instantanee"</string>
@@ -3768,8 +3770,8 @@
<string name="high_power_off" msgid="5906679734326490426">"Se optimizează utilizarea bateriei"</string>
<string name="high_power_system" msgid="739584574711292753">"Optimizarea bateriei nu este disponibilă"</string>
<string name="high_power_desc" msgid="333756885680362741">"Nu aplicați optimizarea bateriei. Bateria se poate descărca mai rapid."</string>
- <string name="high_power_prompt_title" msgid="2805745781720454052">"Permiteți aplicației să ruleze continuu în fundal?"</string>
- <string name="high_power_prompt_body" msgid="8067395096053552289">"Dacă permiteți aplicației <xliff:g id="APP_NAME">%1$s</xliff:g> să ruleze continuu în fundal, autonomia bateriei poate scădea. \n\nPuteți modifica opțiunea ulterior din Setări > Aplicații și notificări."</string>
+ <string name="high_power_prompt_title" msgid="2805745781720454052">"Permiteți aplicației să ruleze încontinuu în fundal?"</string>
+ <string name="high_power_prompt_body" msgid="8067395096053552289">"Dacă permiteți aplicației <xliff:g id="APP_NAME">%1$s</xliff:g> să ruleze încontinuu în fundal, autonomia bateriei poate scădea. \n\nPuteți modifica opțiunea ulterior din Setări > Aplicații și notificări."</string>
<string name="battery_summary" msgid="4345690800899981339">"Utilizare de la ultima încărcare completă: <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="battery_power_management" msgid="2853925857548647969">"Gestionarea consumului de energie"</string>
<string name="no_battery_summary" msgid="4105932628367471314">"Bateria nu a fost folosită de la ultima încărcare completă"</string>
@@ -4074,7 +4076,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Dacă dispozitivul este blocat, nu permiteți scrierea răspunsurilor sau a altui text în notificări"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Verificator ortografic prestabilit"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Alegeți verificatorul ortografic"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Utilizați verificatorul ortografic"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Folosiți verificatorul ortografic"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Neselectat"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(niciunul)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4171,7 +4173,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Pentru a elibera spațiu de stocare, managerul spațiului de stocare elimină de pe dispozitiv fotografiile și videoclipurile cărora le-ați făcut backup."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Eliminați fotografii și videoclipuri"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Managerul spațiului de stocare"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Utilizați Managerul spațiului de stocare"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Folosiți Managerul stocării"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automat"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manuale"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Eliberați spațiu acum"</string>
diff --git a/tests/CarDeveloperOptions/res/values-ru/arrays.xml b/tests/CarDeveloperOptions/res/values-ru/arrays.xml
index 8993349..6565854 100644
--- a/tests/CarDeveloperOptions/res/values-ru/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-ru/arrays.xml
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"Не разрешать"</item>
<item msgid="8184570120217958741">"Разрешать всегда"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Нормальное"</item>
+ <item msgid="5101233285497327432">"Пока хватает"</item>
+ <item msgid="1555861583162930714">"Низкая"</item>
+ <item msgid="1719683776264798117">"Высокое"</item>
+ <item msgid="1567326459340152525">"Неизвестно"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Нормальное"</item>
+ <item msgid="6107138933849816768">"Умеренное"</item>
+ <item msgid="182695359839047859">"Низкая"</item>
+ <item msgid="8577246509202964244">"Критическое"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Стабильное"</item>
<item msgid="167418068739176448">"Наиболее частое действие"</item>
diff --git a/tests/CarDeveloperOptions/res/values-ru/strings.xml b/tests/CarDeveloperOptions/res/values-ru/strings.xml
index e8720d0..1bb5b10 100644
--- a/tests/CarDeveloperOptions/res/values-ru/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-ru/strings.xml
@@ -85,8 +85,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Сделайте текст на экране мельче или крупнее."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Уменьшить"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Увеличить"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Принесите мне, пожалуйста, чашку кофе."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Пример текста"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Удивительный волшебник из страны Оз"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Глава 11. Изумрудный город страны Оз"</string>
@@ -373,7 +372,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Информация о профиле"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Аккаунты"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Местоположение"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Определять местоположение"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Определять местоположение"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Откл."</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">Включено, доступно <xliff:g id="COUNT_1">%1$d</xliff:g> приложению</item>
@@ -497,7 +496,7 @@
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"Мимо! Это не сканер отпечатков пальцев..."</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"Найдите сканер на задней панели и коснитесь его указательным пальцем."</string>
<string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"Отпечаток не добавлен"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Превышен срок ожидания. Повторите попытку"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Превышен срок ожидания. Повторите попытку."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"Не удалось добавить отпечаток. Повторите попытку или попробуйте сохранить отпечаток другого пальца."</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"Добавить ещё"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"Далее"</string>
@@ -871,7 +870,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Включить Wi‑Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Использовать Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Использовать Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Настройки Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Настройка и управление точками доступа беспроводной сети"</string>
@@ -896,7 +895,7 @@
<string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"Чтобы использовать эту функцию, выберите источник рейтинга сетей"</string>
<string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"Чтобы использовать эту функцию, выберите поддерживаемый источник рейтинга сетей"</string>
<string name="wifi_install_credentials" msgid="5650088113710858289">"Установка сертификатов"</string>
- <string name="wifi_scan_notify_text" msgid="7614101215028336927">"Чтобы точнее определять ваше местонахождение, сервисы и приложения могут искать доступные беспроводные сети, даже когда Wi-Fi отключен. Этот режим позволяет улучшить работу функций, связанных с геолокацией. Отключить его можно в разделе <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>настроек поиска сетей Wi-Fi<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
+ <string name="wifi_scan_notify_text" msgid="7614101215028336927">"Чтобы точнее определять ваше местонахождение, сервисы и приложения могут искать доступные беспроводные сети, даже когда Wi-Fi отключен. Этот режим позволяет улучшить работу функций, связанных с геолокацией. Отключить его можно в <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>настройках поиска сетей Wi-Fi<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
<string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"Чтобы повысить точность определения местоположения, включите поиск сетей Wi-Fi в <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>настройках<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
<string name="wifi_scan_notify_remember_choice" msgid="1235445971400237444">"Больше не показывать"</string>
<string name="wifi_setting_sleep_policy_title" msgid="2120785188625932076">"Wi-Fi в спящем режиме"</string>
@@ -955,7 +954,7 @@
<string name="wifi_eap_domain" msgid="3298302320003640130">"Домен"</string>
<string name="wifi_eap_user_cert" msgid="6786839531765719173">"Сертификат пользователя"</string>
<string name="wifi_eap_identity" msgid="5280457017705738773">"Пользователь"</string>
- <string name="wifi_eap_anonymous" msgid="6352344972490839958">"Неизвестный"</string>
+ <string name="wifi_eap_anonymous" msgid="6352344972490839958">"Анонимный пользователь"</string>
<string name="wifi_password" msgid="6942983531275177771">"Пароль"</string>
<string name="wifi_show_password" msgid="7878398590772942202">"Показать пароль"</string>
<string name="wifi_ap_band_config" msgid="6565016368079288433">"Диапазон частот Wi-Fi"</string>
@@ -990,7 +989,7 @@
<string name="wifi_dpp_wifi_shared_with_device" msgid="5713765471758272471">"Устройство подключено к Wi‑Fi"</string>
<string name="wifi_dpp_add_another_device" msgid="3698441567235301565">"Подключить другое устройство"</string>
<string name="wifi_dpp_choose_different_network" msgid="128515107488187050">"Выбрать другую сеть Wi-Fi"</string>
- <string name="wifi_dpp_could_not_add_device" msgid="4966109556543584813">"Не удалось добавить устройство."</string>
+ <string name="wifi_dpp_could_not_add_device" msgid="4966109556543584813">"Не удалось добавить устройство"</string>
<string name="wifi_dpp_device_found" msgid="6488461467496850841">"Устройство найдено"</string>
<string name="wifi_dpp_sharing_wifi_with_this_device" msgid="2540529164687476827">"Предоставление доступа к сети Wi‑Fi…"</string>
<string name="wifi_dpp_connecting" msgid="4229290407210299897">"Подключение…"</string>
@@ -1115,7 +1114,7 @@
<string name="wifi_tether_configure_ap_text" msgid="4081852770996455902">"Настройка точки доступа Wi-Fi"</string>
<string name="wifi_hotspot_configure_ap_text" msgid="1000003286253019522">"Настройка точки доступа Wi‑Fi"</string>
<string name="wifi_hotspot_configure_ap_text_summary" msgid="2303120188509955656">"Точка доступа AndroidAP WPA2 PSK"</string>
- <string name="wifi_tether_configure_ssid_default" msgid="1722238925876152663">"Хот-спот Android"</string>
+ <string name="wifi_tether_configure_ssid_default" msgid="1722238925876152663">"AndroidHotspot"</string>
<string name="wifi_calling_settings_title" msgid="626821542308601806">"Звонки по Wi-Fi"</string>
<string name="wifi_calling_suggestion_title" msgid="1402265373543523970">"Звонки по Wi-Fi"</string>
<string name="wifi_calling_suggestion_summary" msgid="198402175473169630">"Звоните по Wi-Fi, когда нет сигнала сотовой связи."</string>
@@ -1139,7 +1138,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Мобильный Интернет"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Использовать мобильную сеть, если сеть Wi‑Fi недоступна."</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Использовать Wi‑Fi, если мобильная сеть недоступна."</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Звонки по Wi‑Fi. Если подключение прервется, звонок будет завершен."</string>
@@ -1244,8 +1246,8 @@
<string name="adaptive_sleep_summary_off" msgid="2891586225954973431">"Отключено"</string>
<string name="adaptive_sleep_description" msgid="812673735459170009">"Экран не будет отключаться, если вы смотрите на него."</string>
<string name="adaptive_sleep_privacy" msgid="5706802215479902623">"Когда адаптивный спящий режим включен, устройство использует фронтальную камеру, чтобы отслеживать, смотрит ли кто-то на экран. Эта функция работает только на вашем устройстве: собранные данные не сохраняются и не отправляются в Google."</string>
- <string name="night_display_title" msgid="1305002424893349814">"Ночной режим"</string>
- <string name="night_display_text" msgid="5330502493684652527">"В ночном режиме экран приобретает желтоватый оттенок. Это снижает напряжение глаз при тусклом свете и может помочь вам быстрее заснуть."</string>
+ <string name="night_display_title" msgid="1305002424893349814">"Ночная подсветка"</string>
+ <string name="night_display_text" msgid="5330502493684652527">"С ночной подсветкой экран приобретает желтоватый оттенок. Это снижает напряжение глаз при тусклом свете и может помочь вам быстрее заснуть."</string>
<string name="night_display_auto_mode_title" msgid="8493573087102481588">"Расписание"</string>
<string name="night_display_auto_mode_never" msgid="2897444637217807088">"Нет"</string>
<string name="night_display_auto_mode_custom" msgid="1400891076453963151">"В выбранное время"</string>
@@ -1268,7 +1270,7 @@
<string name="night_display_activation_off_twilight" msgid="6846727701281556110">"Отключить до заката"</string>
<string name="night_display_activation_on_custom" msgid="4761140206778957611">"Включить до <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="night_display_activation_off_custom" msgid="4207238846687792731">"Отключить до <xliff:g id="ID_1">%1$s</xliff:g>"</string>
- <string name="night_display_not_currently_on" msgid="1436588493764429281">"Ночной режим сейчас выключен"</string>
+ <string name="night_display_not_currently_on" msgid="1436588493764429281">"Ночная подсветка сейчас выключена"</string>
<string name="screen_timeout" msgid="1700950247634525588">"Спящий режим"</string>
<string name="screen_timeout_title" msgid="150117777762864112">"Отключение экрана"</string>
<string name="screen_timeout_summary" msgid="8644192861778491060">"После <xliff:g id="TIMEOUT_DESCRIPTION">%1$s</xliff:g> бездействия"</string>
@@ -1283,7 +1285,7 @@
<string name="screensaver_settings_summary_either_long" msgid="6078038506795498288">"Во время зарядки или при подключении к док-станции"</string>
<string name="screensaver_settings_summary_either_short" msgid="2453772128682850053">"Всегда"</string>
<string name="screensaver_settings_summary_sleep" msgid="6097363596749362692">"Во время зарядки"</string>
- <string name="screensaver_settings_summary_dock" msgid="6297808146601570196">"В док-станции"</string>
+ <string name="screensaver_settings_summary_dock" msgid="6297808146601570196">"На док-станции"</string>
<string name="screensaver_settings_summary_never" msgid="3995259444981620707">"Никогда"</string>
<string name="screensaver_settings_summary_off" msgid="6119947316484763131">"Отключено"</string>
<string name="screensaver_settings_disabled_prompt" msgid="1897518064782596947">"Чтобы настроить поведение телефона при подключении к док-станции и в спящем режиме, включите заставку."</string>
@@ -1349,7 +1351,7 @@
<string name="security_patch" msgid="483709031051932208">"Последнее обновление системы безопасности"</string>
<string name="model_info" msgid="1729765474260797594">"Модель"</string>
<string name="model_summary" msgid="8781425868254352168">"Модель: %1$s"</string>
- <string name="hardware_info" msgid="174270144950621815">"Модель и оборудование"</string>
+ <string name="hardware_info" msgid="174270144950621815">"Модель и аппаратное обеспечение"</string>
<string name="hardware_revision" msgid="3315744162524354246">"Версия аппаратного обеспечения"</string>
<string name="fcc_equipment_id" msgid="8681995718533066093">"Идентификатор оборудования"</string>
<string name="baseband_version" msgid="9115560821840757786">"Прошивка модуля связи"</string>
@@ -1661,7 +1663,7 @@
<string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"Открыть доступ к интернет-подключению планшета через USB"</string>
<string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"Bluetooth-модем"</string>
<string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"Открыть доступ к интернет-подключению планшета по Bluetooth"</string>
- <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Открыть доступ к интернет-подключению телефона по Bluetooth"</string>
+ <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Открыть доступ к интернет-подключению телефона через Bluetooth"</string>
<string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"Доступ к интернет-подключению устройства \"<xliff:g id="DEVICE_NAME">%1$d</xliff:g>\" по Bluetooth открыт"</string>
<string name="bluetooth_tethering_overflow_error" msgid="6946561351369376943">"Макс. число подключаемых устройств: <xliff:g id="MAXCONNECTION">%1$d</xliff:g>"</string>
<string name="bluetooth_untether_blank" msgid="5428300773782256084">"Подключение к <xliff:g id="DEVICE_NAME">%1$s</xliff:g> будет прервано."</string>
@@ -1733,7 +1735,7 @@
<string name="terms_title" msgid="1804549588198223771">"Условия использования"</string>
<string name="webview_license_title" msgid="8244960025549725051">"Системная лицензия WebView"</string>
<string name="wallpaper_attributions" msgid="2941987966332943253">"Обои"</string>
- <string name="wallpaper_attributions_values" msgid="4461979853894606323">"Спутниковые фотографии:\n© CNES 2014/Astrium, DigitalGlobe, Bluesky"</string>
+ <string name="wallpaper_attributions_values" msgid="4461979853894606323">"Спутниковые фотографии:\n© 2014 CNES/Astrium, DigitalGlobe, Bluesky"</string>
<string name="settings_manual_activity_title" msgid="7599911755054286789">"Руководство пользователя"</string>
<string name="settings_manual_activity_unavailable" msgid="4872502775018655343">"Не удалось загрузить руководство пользователя."</string>
<string name="settings_license_activity_title" msgid="1099045216283677608">"Лицензии третьих сторон"</string>
@@ -1774,7 +1776,7 @@
<string name="lockpassword_strong_auth_required_device_pin" msgid="24030584350601016">"Введите PIN-код"</string>
<string name="lockpassword_strong_auth_required_device_password" msgid="7746588206458754598">"Введите пароль устройства"</string>
<string name="lockpassword_strong_auth_required_work_pattern" msgid="6861154706098327320">"Укажите графический ключ от рабочего профиля"</string>
- <string name="lockpassword_strong_auth_required_work_pin" msgid="6306902249365524526">"Введите PIN-код рабочего профиля"</string>
+ <string name="lockpassword_strong_auth_required_work_pin" msgid="6306902249365524526">"Для дополнительной защиты введите PIN-код рабочего профиля."</string>
<string name="lockpassword_strong_auth_required_work_password" msgid="2917338218971012776">"Введите пароль от рабочего профиля"</string>
<string name="lockpassword_confirm_your_pattern_details_frp" msgid="1085862410379709928">"Настройки вашего телефона были сброшены. Чтобы использовать его, введите свой прежний графический ключ."</string>
<string name="lockpassword_confirm_your_pin_details_frp" msgid="6849889353126558761">"Настройки вашего телефона были сброшены. Чтобы использовать его, введите свой прежний PIN-код."</string>
@@ -1791,7 +1793,7 @@
<string name="lockpattern_recording_intro_header" msgid="2262005028838969839">"Начертите ключ разблокировки"</string>
<string name="lockpattern_recording_intro_footer" msgid="5426745740754065099">"Для справки нажмите \"Меню\"."</string>
<string name="lockpattern_recording_inprogress" msgid="4060818382176523671">"По завершении отпустите палец"</string>
- <string name="lockpattern_recording_incorrect_too_short" msgid="6374760294545431845">"Соедините не менее <xliff:g id="NUMBER">%d</xliff:g> точек"</string>
+ <string name="lockpattern_recording_incorrect_too_short" msgid="6374760294545431845">"Соедините не менее <xliff:g id="NUMBER">%d</xliff:g> точек."</string>
<string name="lockpattern_pattern_entered_header" msgid="2108106638322637851">"Графический ключ сохранен"</string>
<string name="lockpattern_need_to_confirm" msgid="4079482507985867389">"Начертите ключ ещё раз"</string>
<string name="lockpattern_pattern_confirmed_header" msgid="5603156929428721407">"Ваш новый ключ разблокировки"</string>
@@ -2135,9 +2137,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Вибрация при уведомлении"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Вибрация при звонке"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Вибрация при касании"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Использовать сервис"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Использовать коррекцию цвета"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Использовать субтитры"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Использовать сервис"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Использовать коррекцию цвета"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Использовать субтитры"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Далее"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Слуховые аппараты"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Нет подключенных слуховых аппаратов"</string>
@@ -2340,7 +2342,7 @@
<string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Телефон используется больше, чем обычно"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"Планшет используется больше, чем обычно"</string>
<string name="battery_tip_high_usage_title" product="device" msgid="8304138287288309490">"Устройство используется больше, чем обычно"</string>
- <string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"Заряд батареи расходуется быстрее, чем обычно."</string>
+ <string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"Заряд батареи расходуется быстрее, чем обычно"</string>
<string name="battery_tip_dialog_message" product="default" msgid="8453700079047810964">"Телефон используется больше, чем обычно. Батарея скоро разрядится.\n\nС момента последней зарядки активнее всего использовались следующие приложения с высоким потреблением энергии:"</string>
<string name="battery_tip_dialog_message" product="tablet" msgid="6489981050645444068">"Планшет используется больше, чем обычно. Батарея скоро разрядится.\n\nС момента последней зарядки активнее всего использовались следующие приложения с высоким потреблением энергии:"</string>
<string name="battery_tip_dialog_message" product="device" msgid="6348123094674390337">"Устройство используется больше, чем обычно. Батарея скоро разрядится.\n\nС момента последней зарядки активнее всего использовались следующие приложения с высоким потреблением энергии:"</string>
@@ -2523,7 +2525,7 @@
<string name="battery_saver_auto_percentage" msgid="5791982309331921556">"С учетом уровня заряда"</string>
<string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"Включать, если высока вероятность, что уровня заряда не хватит до подзарядки"</string>
<string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"Включать при уровне заряда <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
- <string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Создать расписание"</string>
+ <string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Задать расписание"</string>
<string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"Выключать при полном заряде"</string>
<string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"Режим энергосбережения отключается, когда уровень заряда достигает <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"Режим энергосбережения отключается, когда уровень заряда достигает <xliff:g id="PERCENT">%1$s</xliff:g>."</string>
@@ -2531,7 +2533,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Включить"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Использовать режим энергосбережения"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Использовать режим энергосбережения"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Включать автоматически"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Никогда"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"при <xliff:g id="PERCENT">%1$s</xliff:g> заряда"</string>
@@ -2641,8 +2643,8 @@
<string name="remove_and_uninstall_device_admin" msgid="5607703579731496253">"Отключить и удалить"</string>
<string name="select_device_admin_msg" msgid="4173769638399075387">"Приложения администратора"</string>
<string name="no_device_admins" msgid="4129231900385977460">"Нет доступных приложений администратора устройства"</string>
- <string name="personal_device_admin_title" msgid="759440849188565661">"Личный"</string>
- <string name="managed_device_admin_title" msgid="8021522755492551726">"Рабочий"</string>
+ <string name="personal_device_admin_title" msgid="759440849188565661">"Личные"</string>
+ <string name="managed_device_admin_title" msgid="8021522755492551726">"Рабочие"</string>
<string name="sms_access_restriction_enabled" msgid="3006320256764718303">"Ограничение доступа к SMS и списку вызовов"</string>
<string name="sms_access_restriction_enabled_summary" msgid="9011946580977780063">"Доступ к SMS и списку вызовов есть только у приложений для звонков и обмена сообщениями, используемых по умолчанию"</string>
<string name="no_trust_agents" msgid="5757792915019113084">"Нет агентов доверия."</string>
@@ -3661,7 +3663,7 @@
<string name="screen_pinning_unlock_pattern" msgid="1060334707088339444">"Запрашивать графический ключ"</string>
<string name="screen_pinning_unlock_pin" msgid="1441705536015645023">"Запрашивать PIN-код"</string>
<string name="screen_pinning_unlock_password" msgid="1017776884000170841">"Запрашивать пароль"</string>
- <string name="screen_pinning_unlock_none" msgid="9183040569733226911">"Блокировать устройство при откл. блокировки в приложении"</string>
+ <string name="screen_pinning_unlock_none" msgid="9183040569733226911">"Блокировать устройство при отключении функции"</string>
<string name="opening_paragraph_delete_profile_unknown_company" msgid="2350380017136403670">"Профилем управляет"</string>
<string name="managing_admin" msgid="3212584016377581608">"Управляется <xliff:g id="ADMIN_APP_LABEL">%s</xliff:g>"</string>
<string name="experimental_preference" msgid="5903223408406906322">"(экспериментальная настройка)"</string>
@@ -3831,7 +3833,7 @@
<string name="high_power_prompt_body" msgid="8067395096053552289">"Если приложение \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" сможет запускаться в фоновом режиме, это увеличит расход заряда батареи.\n\nЭту функцию можно отключить, открыв Настройки > Приложения и уведомления."</string>
<string name="battery_summary" msgid="4345690800899981339">"Использовано с момента последней полной зарядки: <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="battery_power_management" msgid="2853925857548647969">"Управление питанием"</string>
- <string name="no_battery_summary" msgid="4105932628367471314">"Батарея с момента последней полной зарядки не расходовалась"</string>
+ <string name="no_battery_summary" msgid="4105932628367471314">"С момента последней полной зарядки батарея не использовалась"</string>
<string name="app_notification_preferences" msgid="5154466638524523201">"Настройки приложения"</string>
<string name="system_ui_settings" msgid="6751165163665775447">"Показать SystemUI Tuner"</string>
<string name="additional_permissions" msgid="3142290772324571654">"Ещё разрешения"</string>
@@ -3903,7 +3905,7 @@
</plurals>
<string name="running_frequency" msgid="7545170806968474449">"Как часто используется"</string>
<string name="memory_maximum_usage" msgid="4734981118293469479">"Макс. памяти использовано"</string>
- <string name="no_data_usage" msgid="903383745620135746">"Нет использованного трафика"</string>
+ <string name="no_data_usage" msgid="903383745620135746">"Трафик не расходовался"</string>
<string name="zen_access_warning_dialog_title" msgid="7704910289810337055">"Разрешить приложению \"<xliff:g id="APP">%1$s</xliff:g>\" доступ к настройкам режима \"Не беспокоить\"?"</string>
<string name="zen_access_warning_dialog_summary" msgid="2717755746850874577">"Приложение сможет включать и отключать режим \"Не беспокоить\", а также изменять соответствующие настройки."</string>
<string name="zen_access_disabled_package_warning" msgid="7086237569177576966">"Должно быть включено, поскольку разрешен доступ к уведомлениям"</string>
@@ -3965,7 +3967,7 @@
<string name="screen_zoom_conversation_timestamp_2" msgid="816265985618121370">"Вт, 18:01"</string>
<string name="screen_zoom_conversation_timestamp_3" msgid="7346540212221792932">"Вт, 18:02"</string>
<string name="screen_zoom_conversation_timestamp_4" msgid="1452374487089625022">"Вт, 18:03"</string>
- <string name="disconnected" msgid="4088439352761747084">"Нет подключения"</string>
+ <string name="disconnected" msgid="4088439352761747084">"Не подключено"</string>
<string name="keyboard_disconnected" msgid="3068615097201531871">"Не подключено"</string>
<string name="data_usage_summary_format" msgid="7788095271598602797">"Использовано трафика: <xliff:g id="AMOUNT">%1$s</xliff:g>"</string>
<string name="data_usage_wifi_format" msgid="9028934101966264710">"<xliff:g id="AMOUNT">^1</xliff:g> передано через Wi‑Fi"</string>
@@ -4026,9 +4028,9 @@
<string name="condition_device_muted_summary" msgid="3101055117680109021">"Для звонков и уведомлений"</string>
<string name="condition_device_vibrate_title" msgid="5712659354868872338">"Только вибрация"</string>
<string name="condition_device_vibrate_summary" msgid="9073880731894828604">"Для звонков и уведомлений"</string>
- <string name="night_display_suggestion_title" msgid="4222839610992282188">"Расписание ночного режима"</string>
+ <string name="night_display_suggestion_title" msgid="4222839610992282188">"Расписание ночной подсветки"</string>
<string name="night_display_suggestion_summary" msgid="1754361016383576916">"Автоматически изменять оттенок экрана по вечерам."</string>
- <string name="condition_night_display_title" msgid="9171491784857160135">"Ночной режим включен"</string>
+ <string name="condition_night_display_title" msgid="9171491784857160135">"Ночная подсветка включена"</string>
<string name="condition_night_display_summary" msgid="7885776986937527558">"Экран имеет желтый оттенок"</string>
<string name="condition_grayscale_title" msgid="1226351649203551299">"Оттенки серого"</string>
<string name="condition_grayscale_summary" msgid="749172886527349546">"Показывать только в серых тонах"</string>
@@ -4140,7 +4142,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Запретить набор текста в уведомлениях, если устройство заблокировано"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Правописание по умолчанию"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Проверка правописания"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Включить проверку правописания"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Включить проверку правописания"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Не выбрано"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(нет)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4184,10 +4186,10 @@
<string name="overlay_toast_failed_to_apply" msgid="5692251825129250040">"Не удалось применить наложение"</string>
<string name="special_access" msgid="1453926335914696206">"Специальный доступ"</string>
<plurals name="special_access_summary" formatted="false" msgid="5182092345063909346">
- <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> приложение без ограничений мобильного Интернета</item>
- <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> приложения без ограничений мобильного Интернета</item>
- <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> приложений без ограничений мобильного Интернета</item>
- <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> приложения без ограничений мобильного Интернета</item>
+ <item quantity="one"><xliff:g id="COUNT">%d</xliff:g> приложение без ограничений на мобильный Интернет</item>
+ <item quantity="few"><xliff:g id="COUNT">%d</xliff:g> приложения без ограничений на мобильный Интернет</item>
+ <item quantity="many"><xliff:g id="COUNT">%d</xliff:g> приложений без ограничений на мобильный Интернет</item>
+ <item quantity="other"><xliff:g id="COUNT">%d</xliff:g> приложения без ограничений на мобильный Интернет</item>
</plurals>
<string name="special_access_more" msgid="7086690625048471400">"Ещё"</string>
<string name="confirm_convert_to_fbe_warning" msgid="4972595831034280189">"Удалить пользовательские данные и перейти к шифрованию?"</string>
@@ -4241,7 +4243,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Чтобы освободить место, менеджер хранилища удаляет с устройства фото и видео, для которых есть резервные копии."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Удалять фото и видео"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Менеджер хранилища"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Использовать менеджер хранилища"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Использовать менеджер хранилища"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Автоматически"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Вручную"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Очистить хранилище"</string>
@@ -4599,7 +4601,7 @@
<string name="mobile_network_mode_error" msgid="6818434186286086554">"Недопустимый режим сети (<xliff:g id="NETWORKMODEID">%1$d</xliff:g>). Не используется."</string>
<string name="mobile_network_apn_title" msgid="5628635067747404382">"Точки доступа"</string>
<string name="manual_mode_disallowed_summary" msgid="799800630000340665">"Недоступны при подключении к <xliff:g id="CARRIER">%1$s</xliff:g>"</string>
- <string name="emergency_info_contextual_card_summary" msgid="5541444321969803486">"Медицинская информация, контакты для чрезвычайных ситуаций"</string>
+ <string name="emergency_info_contextual_card_summary" msgid="5541444321969803486">"Медицинская информация, контакты для экстренных случаев"</string>
<string name="see_more" msgid="7463940160389802632">"Ещё"</string>
<string name="see_less" msgid="3718892257002813387">"Скрыть"</string>
<string name="network_connection_request_dialog_title" msgid="3150489262902506588">"Устройство для работы с приложением \"<xliff:g id="APPNAME">%1$s</xliff:g>\""</string>
@@ -4633,7 +4635,7 @@
<string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"Удалить эту подсказку?"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"Подсказка удалена."</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"Отменить"</string>
- <string name="low_storage_summary" msgid="4562224870189133400">"В хранилище заканчивается пространство. Занято: <xliff:g id="PERCENTAGE">%1$s</xliff:g>, свободно: <xliff:g id="FREE_SPACE">%2$s</xliff:g>."</string>
+ <string name="low_storage_summary" msgid="4562224870189133400">"В хранилище заканчивается место. Занято: <xliff:g id="PERCENTAGE">%1$s</xliff:g>, свободно: <xliff:g id="FREE_SPACE">%2$s</xliff:g>."</string>
<string name="contextual_card_feedback_send" msgid="8698649023854350623">"Отправить отзыв"</string>
<string name="contextual_card_feedback_confirm_message" msgid="3987973028353264878">"Поделитесь мнением об этой подсказке."</string>
<string name="copyable_slice_toast" msgid="1357518174923789947">"Контент (<xliff:g id="COPY_CONTENT">%1$s</xliff:g>) скопирован в буфер обмена"</string>
diff --git a/tests/CarDeveloperOptions/res/values-si/arrays.xml b/tests/CarDeveloperOptions/res/values-si/arrays.xml
index e348b4c..c845711 100644
--- a/tests/CarDeveloperOptions/res/values-si/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-si/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"පසුබිමෙහි ධාවනය"</item>
<item msgid="6423861043647911030">"ප්රවේශ්යතා හඬ පරිමාව"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"ස්ථානය"</item>
+ <item msgid="6656077694190491067">"ස්ථානය"</item>
+ <item msgid="8790228218278477369">"ස්ථානය"</item>
+ <item msgid="7836406246005211990">"කම්පනය වීම"</item>
+ <item msgid="3951439024549922598">"සම්බන්ධතා කියවන්න"</item>
+ <item msgid="8802152411647068">"සම්බන්ධතා වෙනස් කරන්න"</item>
+ <item msgid="229544934599698735">"ඇමතුම් ලොගය කියවන්න"</item>
+ <item msgid="7396102294405899613">"ඇමතුම් ලොගය වෙනස් කරන්න"</item>
+ <item msgid="3597797992398484655">"දින දර්ශනය කියවන්න"</item>
+ <item msgid="2705975774250907343">"දින දර්ශනය වෙනස් කරන්න"</item>
+ <item msgid="4668747371441932697">"ස්ථානය"</item>
+ <item msgid="1487578921720243646">"පසු දැනුම්දීම"</item>
+ <item msgid="4636080349724146638">"ස්ථානය"</item>
+ <item msgid="673510900286463926">"දුරකතනය අමතන්න"</item>
+ <item msgid="542083422784609790">"SMS/MMS කියවන්න"</item>
+ <item msgid="1033780373029588436">"SMS/MMS ලියන්න"</item>
+ <item msgid="5647111115517787488">"SMS/MMS ලැබීම"</item>
+ <item msgid="8591105601108455893">"SMS/MMS ලැබීම"</item>
+ <item msgid="7730995008517841903">"SMS/MMS ලැබීම"</item>
+ <item msgid="2613033109026626086">"SMS/MMS ලැබීම"</item>
+ <item msgid="3037159047591081136">"SMS/MMS යවන්න"</item>
+ <item msgid="4726682243833913568">"SMS/MMS කියවන්න"</item>
+ <item msgid="6555678522277865572">"SMS/MMS ලියන්න"</item>
+ <item msgid="6981734935578130884">"සැකසුම් වෙනස් කරන්න"</item>
+ <item msgid="8705854389991425629">"උඩ අඳින්න"</item>
+ <item msgid="5861356020344153651">"ප්රවේශ දැනුම්දීම්"</item>
+ <item msgid="78432174621628659">"කැමරාව"</item>
+ <item msgid="3986116419882154794">"ශ්රව්ය තැටිගත කරන්න"</item>
+ <item msgid="4516840825756409490">"ශ්රව්ය ධාවනය කරන්න"</item>
+ <item msgid="6811712502798183957">"පසුරු පුවරුව කියවන්න"</item>
+ <item msgid="2780369012602289114">"පසුරු පුවරුව වෙනස්කරන්න"</item>
+ <item msgid="2331359440170850868">"මාධ්ය බොත්තම"</item>
+ <item msgid="6133599737122751231">"ශ්රව්ය අවධානය"</item>
+ <item msgid="6844485713404805301">"උසස් ශබ්දය"</item>
+ <item msgid="1600379420669104929">"හඬ ශබ්දය"</item>
+ <item msgid="6296768210470214866">"නාද ශබ්දය"</item>
+ <item msgid="510690696071629241">"මාධ්ය ශබ්දය"</item>
+ <item msgid="406861638631430109">"සීනුවේ ශබ්දය"</item>
+ <item msgid="4715864795872233884">"දැනුම්දීමේ ශබ්ද ත්රීවතාව"</item>
+ <item msgid="2311478519251301183">"බ්ලූටූත් ශබ්දය"</item>
+ <item msgid="5133991377896747027">"අවදිව සිටින්න"</item>
+ <item msgid="2464189519136248621">"ස්ථානය"</item>
+ <item msgid="2062677934050803037">"ස්ථානය"</item>
+ <item msgid="1735171933192715957">"භාවිත කිරීමේ තත්ත්ව ලබාගන්න"</item>
+ <item msgid="1014093788778383554">"මයික්රෝෆෝනය නිශ්ශබ්ද/නිශ්ශබ්ද නැති කරන්න"</item>
+ <item msgid="4199297950608622850">"ටෝස්ට් පෙන්වීම"</item>
+ <item msgid="2527962435313398821">"මාධ්ය ව්යාපෘතිය"</item>
+ <item msgid="5117506254221861929">"VPN සක්රිය කරන්න"</item>
+ <item msgid="8291198322681891160">"වෝල්පේපරය ලියන්න"</item>
+ <item msgid="7106921284621230961">"ව්යුහයට සහාය"</item>
+ <item msgid="4496533640894624799">"තිර රුවට සහාය"</item>
+ <item msgid="2598847264853993611">"දුරකථන තත්ත්වය කියවීම"</item>
+ <item msgid="9215610846802973353">"හඬ තැපෑල එක් කිරීම"</item>
+ <item msgid="9186411956086478261">"SIP භාවිතය"</item>
+ <item msgid="6884763100104539558">"පිටතට යන ඇමතුම් ක්රියාවලිය"</item>
+ <item msgid="125513972170580692">"ඇඟිලි සලකුණ"</item>
+ <item msgid="2556071024281275619">"ශරීර සංවේදක"</item>
+ <item msgid="617168514928339387">"සෙල් විකාශන කියවීම"</item>
+ <item msgid="7134693570516523585">"ව්යාජ ස්ථාන"</item>
+ <item msgid="7224489175375229399">"ගබඩාව කියවීම"</item>
+ <item msgid="8472735063903258202">"ගබඩාව ලිවීම"</item>
+ <item msgid="4069276819909595110">"තිරය ක්රියාත්මක කිරීම"</item>
+ <item msgid="1228338896751121025">"ගිණුම් ලබා ගැනීම"</item>
+ <item msgid="3181581793459233672">"පසුබිමෙහි ධාවනය"</item>
+ <item msgid="2340936043025374076">"ප්රවේශ්යතා හඬ පරිමාව"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"කොට"</item>
<item msgid="4816511817309094890">"මධ්යම"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"කිසිවිටෙකත් අවසර නොදෙන්න"</item>
<item msgid="8184570120217958741">"සැමවිටම ඉඩ දෙන්න"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"සාමාන්ය"</item>
+ <item msgid="5101233285497327432">"මධ්යම"</item>
+ <item msgid="1555861583162930714">"අඩු"</item>
+ <item msgid="1719683776264798117">"අවදානම්"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"සාමාන්ය"</item>
+ <item msgid="6107138933849816768">"මධ්යම"</item>
+ <item msgid="182695359839047859">"අඩු"</item>
+ <item msgid="8577246509202964244">"අවදානම්"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"ස්ථාවර"</item>
<item msgid="167418068739176448">"උඩම ක්රියාකාරකම"</item>
diff --git a/tests/CarDeveloperOptions/res/values-si/strings.xml b/tests/CarDeveloperOptions/res/values-si/strings.xml
index 19db2d6..b0fd31f 100644
--- a/tests/CarDeveloperOptions/res/values-si/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-si/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"තිරය මත පෙළ වඩාත් කුඩා හෝ විශාල කරන්න."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"වඩා කුඩා කරන්න"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"වඩා විශාල කරන්න"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"ආදර්ශ පෙළ"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"The Wonderful Wizard of Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"11වන පරිච්ඡේදය: The Wonderful Emerald City of Oz"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"පැතිකඩ තොරතුරු"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"ගිණුම්"</string>
<string name="location_settings_title" msgid="2707201457572301030">"ස්ථානය"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"ස්ථානය භාවිත කරන්න"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"ස්ථානය භාවිත කරන්න"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"ක්රියාවිරහිතයි"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">ක්රියාත්මකයි - යෙදුම් <xliff:g id="COUNT_1">%1$d</xliff:g>කට ස්ථානයට ප්රවේශ විය හැකිය</item>
@@ -378,7 +377,7 @@
<string name="location_settings_loading_app_permission_stats" msgid="7818169326621327628">"පූරණය වේ…"</string>
<string name="account_settings_title" msgid="7870321267198486578">"ගිණුම්"</string>
<string name="security_settings_title" msgid="8228075165942416425">"ආරක්ෂාව"</string>
- <string name="encryption_and_credential_settings_title" msgid="6911729638397745353">"සංකේතනය සහ අක්තපත්ර"</string>
+ <string name="encryption_and_credential_settings_title" msgid="6911729638397745353">"සංකේතනය, අක්තපත්ර"</string>
<string name="encryption_and_credential_settings_summary" product="default" msgid="468749700109808546">"දුරකතනය සංකේතනය කර ඇත"</string>
<string name="decryption_settings_summary" product="default" msgid="7401802133199522441">"දුරකතනය සංකේතනය කර නැත"</string>
<string name="encryption_and_credential_settings_summary" product="tablet" msgid="8170667308598998791">"උපාංගය සංකේතිතයි"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Wi-Fi සක්රිය කරන්න"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Wi-Fi භාවිත කරන්න"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Wi-Fi භාවිත කරන්න"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi-Fi සැකසුම්"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"රැහැන් රහිත ප්රවේශ තැන් සකසන්න සහ කළමනාකරණය කරන්න"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"ජංගම"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Wi‑Fi නොලැබේ නම්, ජංගම ජාලය භාවිත කරන්න"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"ජංගම ජාලය නොලැබේ නම්, Wi-Fi භාවිත කරන්න"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Wi‑Fi ඔස්සේ ඇමතුම. Wi‑Fi අහිමි වූයේ නම්, ඇමතුම අවසන් වෙයි."</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"දැනුම්දීම් කම්පනය"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"නාද කම්පනය"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"ස්පර්ශ කම්පනය"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"සේවාව භාවිත කරන්න"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"වර්ණ නිවැරදි කිරීම භාවිත කරන්න"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"සිරස්තල භාවිත කරන්න"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"සේවාව භාවිත කරන්න"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"වර්ණ නිවැරදි කිරීම භාවිත කරන්න"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"සිරස්තල භාවිත කරන්න"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"ඉදිරියට යන්න"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"ශ්රවණාධාරක"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"ශ්රවණාධාරක සම්බන්ධ කර නැත"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"ක්රියාත්මක කරන්න"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"බැටරි සුරැකුම භාවිත කරන්න"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"බැටරි සුරැකුම භාවිත කරන්න"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"ස්වයන්ක්රියව ක්රියාත්මක කරන්න"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"කවදාවත් නෑ"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"බැටරිය <xliff:g id="PERCENT">%1$s</xliff:g> හි"</string>
@@ -2574,7 +2576,7 @@
<string name="sms_access_restriction_enabled" msgid="3006320256764718303">"SMS සහ ඇමතුම් ලොග ප්රවේශය සීමා කරන්න"</string>
<string name="sms_access_restriction_enabled_summary" msgid="9011946580977780063">"පෙරනිමි දුරකථන සහ පණිවිඩකරණ යෙදුම්වලට පමණක් SMS සහ ඇමතුම් ලොග අවසර ඇත"</string>
<string name="no_trust_agents" msgid="5757792915019113084">"විශ්වාසනීය ඒජන්තවරුන් නැත"</string>
- <string name="add_device_admin_msg" msgid="3573765823476931173">"උපාංගය පරිපාලක යෙදුම සක්රිය කරන්නද?"</string>
+ <string name="add_device_admin_msg" msgid="3573765823476931173">"උපාංග පරිපාලක යෙදුම සක්රිය කර.?"</string>
<string name="add_device_admin" msgid="1621152410207260584">"මෙම උපාංගය පරිපාලක යෙදුම සක්රිය කරන්න"</string>
<string name="device_admin_add_title" msgid="6097881332139146897">"උපාංග පරිපාලක"</string>
<string name="device_admin_warning" msgid="4421817419326480449">"මෙම පරිපාලකයා සක්රිය කිරීමෙන් <xliff:g id="APP_NAME">%1$s</xliff:g> යෙදුමට පහත ක්රියාවන් සිදුකිරීමට අවස්තාව ලබාදේ:"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"උපාංගය අගුලු දමා ඇති නම්, දැනුම්දීම් තුළ පිළිතුරු හෝ වෙනත් පෙළ ටයිප් කිරීම වළක්වන්න"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"පෙරනිමි අක්ෂර වින්යාස පරීක්ෂක"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"අක්ෂර වින්යාස පරීක්ෂක තෝරන්න"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"අක්ෂර වින්යාස පරීක්ෂාව භාවිත කරන්න"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"අක්ෂර වින්යාස පරීක්ෂාව භාවිත කරන්න"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"තෝරා නොමැත"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(කිසිවක් නැත)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"ගබඩා ඉඩ නිදහස් කර ගැනීමට උදවු වීමට, ගබඩා කළමනාකරු ඔබේ උපාංගය වෙතින් උපස්ථ කළ ඡායාරූප සහ වීඩියෝ ඉවත් කරයි."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"ඡායාරූප සහ වීඩියෝ ඉවත් කරන්න"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"ගබඩා කළමනාකරු"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"ගබඩා කළමනාකරු භාවිත කරන්න"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"ගබඩා කළමනාකරු භාවිත කරන්න"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"ස්වයංක්රිය"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"අත්පොත"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"දැන් ඉඩ නිදහස් කර ගන්න"</string>
diff --git a/tests/CarDeveloperOptions/res/values-sk/arrays.xml b/tests/CarDeveloperOptions/res/values-sk/arrays.xml
index fb66e63..2789ee1 100644
--- a/tests/CarDeveloperOptions/res/values-sk/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-sk/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"spustenie na pozadí"</item>
<item msgid="6423861043647911030">"objem aplikácií dostupnosti"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Poloha"</item>
+ <item msgid="6656077694190491067">"Poloha"</item>
+ <item msgid="8790228218278477369">"Poloha"</item>
+ <item msgid="7836406246005211990">"Vibrovanie"</item>
+ <item msgid="3951439024549922598">"Čítanie kontaktov"</item>
+ <item msgid="8802152411647068">"Úprava kontaktov"</item>
+ <item msgid="229544934599698735">"Čítanie denníka hovorov"</item>
+ <item msgid="7396102294405899613">"Úprava denníka hovorov"</item>
+ <item msgid="3597797992398484655">"Čítanie kalendára"</item>
+ <item msgid="2705975774250907343">"Úprava kalendára"</item>
+ <item msgid="4668747371441932697">"Poloha"</item>
+ <item msgid="1487578921720243646">"Upozornenie na príspevok"</item>
+ <item msgid="4636080349724146638">"Poloha"</item>
+ <item msgid="673510900286463926">"Volanie na telefón"</item>
+ <item msgid="542083422784609790">"Čítanie SMS/MMS"</item>
+ <item msgid="1033780373029588436">"Písanie SMS/MMS"</item>
+ <item msgid="5647111115517787488">"Príjem SMS/MMS"</item>
+ <item msgid="8591105601108455893">"Príjem SMS/MMS"</item>
+ <item msgid="7730995008517841903">"Príjem SMS/MMS"</item>
+ <item msgid="2613033109026626086">"Príjem SMS/MMS"</item>
+ <item msgid="3037159047591081136">"Odosielanie SMS/MMS"</item>
+ <item msgid="4726682243833913568">"Čítanie SMS/MMS"</item>
+ <item msgid="6555678522277865572">"Písanie SMS/MMS"</item>
+ <item msgid="6981734935578130884">"Úprava nastavení"</item>
+ <item msgid="8705854389991425629">"Vykreslenie navrch"</item>
+ <item msgid="5861356020344153651">"Prístup k upozorneniam"</item>
+ <item msgid="78432174621628659">"Fotoaparát"</item>
+ <item msgid="3986116419882154794">"Nahrávať zvuk"</item>
+ <item msgid="4516840825756409490">"Prehrať zvuk"</item>
+ <item msgid="6811712502798183957">"Načítať schránku"</item>
+ <item msgid="2780369012602289114">"Upraviť schránku"</item>
+ <item msgid="2331359440170850868">"Tlačidlá médií"</item>
+ <item msgid="6133599737122751231">"Zameranie zvuku"</item>
+ <item msgid="6844485713404805301">"Hlavná hlasitosť"</item>
+ <item msgid="1600379420669104929">"Hlasitosť hlasu"</item>
+ <item msgid="6296768210470214866">"Hlasitosť zvonenia"</item>
+ <item msgid="510690696071629241">"Hlasitosť médií"</item>
+ <item msgid="406861638631430109">"Hlasitosť budíkov"</item>
+ <item msgid="4715864795872233884">"Hlasitosť upozornení"</item>
+ <item msgid="2311478519251301183">"Hlasitosť zariadenia Bluetooth"</item>
+ <item msgid="5133991377896747027">"Zakázať režim spánku"</item>
+ <item msgid="2464189519136248621">"Umiestnenie"</item>
+ <item msgid="2062677934050803037">"Poloha"</item>
+ <item msgid="1735171933192715957">"Získanie štatistiky využívania"</item>
+ <item msgid="1014093788778383554">"Stlmenie alebo zrušenie stlmenia mikrofónu"</item>
+ <item msgid="4199297950608622850">"Zobrazenie oznamu"</item>
+ <item msgid="2527962435313398821">"Projekcia médií"</item>
+ <item msgid="5117506254221861929">"Aktivácia VPN"</item>
+ <item msgid="8291198322681891160">"Zápis tapety"</item>
+ <item msgid="7106921284621230961">"Asistujúca štruktúra"</item>
+ <item msgid="4496533640894624799">"Asistujúca snímka obrazovky"</item>
+ <item msgid="2598847264853993611">"Čítanie stavu telefónu"</item>
+ <item msgid="9215610846802973353">"Pridanie hlasovej schránky"</item>
+ <item msgid="9186411956086478261">"Používanie volania SIP"</item>
+ <item msgid="6884763100104539558">"Spracovanie odchádzajúcich hovorov"</item>
+ <item msgid="125513972170580692">"Odtlačok prsta"</item>
+ <item msgid="2556071024281275619">"Telesné senzory"</item>
+ <item msgid="617168514928339387">"Čítať správy informačných služieb"</item>
+ <item msgid="7134693570516523585">"Napodobnenie miesta"</item>
+ <item msgid="7224489175375229399">"Čítanie úložiska"</item>
+ <item msgid="8472735063903258202">"Zápis do úložiska"</item>
+ <item msgid="4069276819909595110">"Zapnutie obrazovky"</item>
+ <item msgid="1228338896751121025">"Získanie účtov"</item>
+ <item msgid="3181581793459233672">"Spustenie na pozadí"</item>
+ <item msgid="2340936043025374076">"Objem aplikácií dostupnosti"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Krátke"</item>
<item msgid="4816511817309094890">"Stredná"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Nikdy nepovoliť"</item>
<item msgid="8184570120217958741">"Vždy povoliť"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normálne"</item>
+ <item msgid="5101233285497327432">"Stredný"</item>
+ <item msgid="1555861583162930714">"Nízka"</item>
+ <item msgid="1719683776264798117">"Kritický"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normálny"</item>
+ <item msgid="6107138933849816768">"Stredný"</item>
+ <item msgid="182695359839047859">"Nízka"</item>
+ <item msgid="8577246509202964244">"Kritické"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Pretrvávajúci"</item>
<item msgid="167418068739176448">"Najčastejšia aktivita"</item>
@@ -401,8 +477,8 @@
<item msgid="1008268820118852416">"Považovať za nemeranú sieť"</item>
</string-array>
<string-array name="wifi_privacy_entries">
- <item msgid="6545683814310036454">"Používať randomizovanú adresu MAC (predvolené)"</item>
- <item msgid="214234417308375326">"Použiť adresu MAC zariadenia"</item>
+ <item msgid="6545683814310036454">"Použiť náhodnú MAC (predvolené)"</item>
+ <item msgid="214234417308375326">"Používať adresu MAC zariadenia"</item>
</string-array>
<string-array name="wifi_hidden_entries">
<item msgid="7426878022650940844">"Nie"</item>
diff --git a/tests/CarDeveloperOptions/res/values-sk/strings.xml b/tests/CarDeveloperOptions/res/values-sk/strings.xml
index e64d4f8..86e262a 100644
--- a/tests/CarDeveloperOptions/res/values-sk/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-sk/strings.xml
@@ -85,8 +85,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Zväčšite alebo zmenšite text na obrazovke."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Zmenšiť"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Zväčšiť"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Ukážkový text"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Čarodejník z krajiny Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"11. kapitola: Nádherné smaragdové mesto"</string>
@@ -373,7 +372,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Informácie o profile"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Účty"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Poloha"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Používať polohu"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Používať polohu"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Vypnuté"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="few">Zapnuté – <xliff:g id="COUNT_1">%1$d</xliff:g> aplikácie majú prístup k polohe</item>
@@ -455,8 +454,8 @@
<string name="security_settings_fingerprint_enroll_introduction_continue" msgid="271662150372486535">"Pokračovať"</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel_setup" msgid="756928427429893070">"Preskočiť"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue_setup" msgid="4125977169169671144">"Ďalej"</string>
- <string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"Preskočiť odtlačok prsta?"</string>
- <string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"Nastavenie odtlačku prsta trvá približne minútu. Ak tento krok preskočíte, môžete si odtlačok prsta pridať neskôr v Nastaveniach."</string>
+ <string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"Preskočiť nastavenie odtlačku prsta?"</string>
+ <string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"Nastavenie odtlačku prsta trvá asi minútu. Ak tento krok preskočíte, môžete si odtlačok prsta pridať neskôr v nastaveniach."</string>
<string name="lock_screen_intro_skip_title" msgid="5307431665496346914">"Preskočiť zámku obrazovky?"</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="tablet" msgid="7553945981266845264">"Funkcie ochrany zariadenia sa nezapnú. V prípade straty, krádeže alebo obnovenia nebudete môcť cudzím osobám zabrániť v používaní tohto tabletu."</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="device" msgid="1378243257238015603">"Funkcie ochrany zariadenia sa nezapnú. V prípade straty, krádeže alebo obnovenia nebudete môcť cudzím osobám zabrániť v používaní tohto zariadenia."</string>
@@ -644,7 +643,7 @@
<string name="unlock_footer_medium_complexity_requested" msgid="5004825329461874633">"<xliff:g id="APP_NAME">%1$s</xliff:g> odporúča nový kód PIN alebo heslo, bez ktorého nemusí fungovať podľa očakávaní"</string>
<string name="unlock_footer_low_complexity_requested" msgid="513212093196833566">"<xliff:g id="APP_NAME">%1$s</xliff:g> odporúča nový vzor, PIN alebo heslo, bez ktorého nemusí fungovať podľa očakávaní"</string>
<string name="unlock_footer_none_complexity_requested" msgid="1669550050597044896">"<xliff:g id="APP_NAME">%1$s</xliff:g> odporúča nová zámku obrazovky"</string>
- <string name="lock_failed_attempts_before_wipe" msgid="7565412834122130877">"Skúste to znova. Pokus <xliff:g id="CURRENT_ATTEMPTS">%1$d</xliff:g> z <xliff:g id="TOTAL_ATTEMPTS">%2$d</xliff:g>."</string>
+ <string name="lock_failed_attempts_before_wipe" msgid="7565412834122130877">"Skúste to znova. <xliff:g id="CURRENT_ATTEMPTS">%1$d</xliff:g>. z <xliff:g id="TOTAL_ATTEMPTS">%2$d</xliff:g> pokusov."</string>
<string name="lock_last_attempt_before_wipe_warning_title" msgid="7853820095898368793">"Vaše dáta budú odstránené"</string>
<string name="lock_last_pattern_attempt_before_wipe_device" msgid="1021644947949306054">"Ak pri ďalšom pokuse zadáte nesprávny vzor, dáta tohto zariadenia budú odstránené"</string>
<string name="lock_last_pin_attempt_before_wipe_device" msgid="3823600293847594141">"Ak pri ďalšom pokuse zadáte nesprávny kód PIN, dáta tohto zariadenia budú odstránené"</string>
@@ -653,7 +652,7 @@
<string name="lock_last_pin_attempt_before_wipe_user" msgid="7833852187363499906">"Ak pri ďalšom pokuse zadáte nesprávny kód PIN, tento používateľ bude odstránený"</string>
<string name="lock_last_password_attempt_before_wipe_user" msgid="8979742220140001204">"Ak pri ďalšom pokuse zadáte nesprávne heslo, tento používateľ bude odstránený"</string>
<string name="lock_last_pattern_attempt_before_wipe_profile" msgid="3877613047631174576">"Ak pri ďalšom pokuse zadáte nesprávny vzor, váš pracovný profil a jeho dáta budú odstránené"</string>
- <string name="lock_last_pin_attempt_before_wipe_profile" msgid="8132438288175428168">"Ak pri ďalšom pokuse zadáte nesprávny kód PIN, váš pracovný profil a jeho dáta budú odstránené."</string>
+ <string name="lock_last_pin_attempt_before_wipe_profile" msgid="8132438288175428168">"Ak pri ďalšom pokuse zadáte nesprávny PIN, váš pracovný profil a jeho dáta budú odstránené"</string>
<string name="lock_last_password_attempt_before_wipe_profile" msgid="1535128774464384305">"Ak pri ďalšom pokuse zadáte nesprávne heslo, váš pracovný profil a jeho dáta budú odstránené"</string>
<string name="lock_failed_attempts_now_wiping_device" msgid="8662360098784762828">"Príliš veľa chybných pokusov. Dáta tohto zariadenia budú odstránené."</string>
<string name="lock_failed_attempts_now_wiping_user" msgid="3793513796171561873">"Príliš veľa chybných pokusov. Tento používateľ bude odstránený."</string>
@@ -767,7 +766,7 @@
<string name="bluetooth_pairing_request" msgid="7221745525632573125">"Spárovať so zariadením <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="bluetooth_pairing_key_msg" msgid="1139230917419961975">"Párovací kód Bluetooth"</string>
<string name="bluetooth_enter_passkey_msg" msgid="6205151011298670207">"Zadajte párovací kód a potom stlačte tlačidlo Return alebo Enter"</string>
- <string name="bluetooth_enable_alphanumeric_pin" msgid="9138308197078115672">"Kód PIN obsahuje písmená alebo symboly"</string>
+ <string name="bluetooth_enable_alphanumeric_pin" msgid="9138308197078115672">"PIN obsahuje písmená či symboly"</string>
<string name="bluetooth_pin_values_hint" msgid="8044671726261326240">"Obvykle 0000 alebo 1234"</string>
<string name="bluetooth_pin_values_hint_16_digits" msgid="2665983525706661525">"Musí obsahovať 16 číslic"</string>
<string name="bluetooth_enter_pin_other_device" msgid="1727015949040507621">"Tento kód PIN bude možno treba zadať aj na druhom zariadení."</string>
@@ -871,7 +870,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Zapnúť Wi‑Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Používať Wi‑Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Používať Wi‑Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Nastavenia Wi‑Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Umožňuje nastaviť a spravovať prístupové body bezdrôtovej siete"</string>
@@ -943,14 +942,14 @@
<string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Ak váš smerovač nevysiela ID určitej siete, ale chcete sa k nej pripojiť v budúcnosti, môžete ju nastaviť ako skrytú.\n\nMôže tým vzniknúť bezpečnostné riziko, pretože váš telefón bude pravidelne vysielať signál, aby sieť našiel.\n\nNastavením danej siete ako skrytej nezmeníte nastavenia smerovača."</string>
<string name="wifi_signal" msgid="696548364467704808">"Sila signálu"</string>
<string name="wifi_status" msgid="3439931558930689940">"Stav"</string>
- <string name="tx_wifi_speed" msgid="2571810085003261073">"Rýchlosť prenosu dát"</string>
- <string name="rx_wifi_speed" msgid="7392873246110937187">"Rýchlosť pripojenia (prijímanie)"</string>
+ <string name="tx_wifi_speed" msgid="2571810085003261073">"Rýchlosť posielania dát"</string>
+ <string name="rx_wifi_speed" msgid="7392873246110937187">"Rýchlosť prijímania dát"</string>
<string name="wifi_frequency" msgid="6132852924995724246">"Frekvencia"</string>
<string name="wifi_ip_address" msgid="5572539114989914831">"Adresa IP"</string>
<string name="passpoint_label" msgid="7429247462404128615">"Uložené prostredníctvom siete"</string>
<string name="passpoint_content" msgid="340527524510304327">"Poverenia: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="wifi_eap_method" msgid="3752116941487485859">"Metóda EAP"</string>
- <string name="please_select_phase2" msgid="5848080896810435677">"Overenie – 2. fáza"</string>
+ <string name="please_select_phase2" msgid="5848080896810435677">"Druhá fáza overenia"</string>
<string name="wifi_eap_ca_cert" msgid="1496395241849383785">"Certifikát CA"</string>
<string name="wifi_eap_domain" msgid="3298302320003640130">"Doména"</string>
<string name="wifi_eap_user_cert" msgid="6786839531765719173">"Certifikát používateľa"</string>
@@ -974,20 +973,20 @@
<string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"Skenovanie QR kódu"</string>
<string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"Ak sa chcete pripojiť k sieti <xliff:g id="SSID">%1$s</xliff:g>, vycentrujte QR kód nižšie"</string>
<string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"Pripojte sa k sieti Wi‑Fi naskenovaním QR kódu"</string>
- <string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Zdieľanie Wi‑Fi"</string>
+ <string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Zdieľať Wi‑Fi"</string>
<string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"Ak sa chcete pripojiť k sieti <xliff:g id="SSID">%1$s</xliff:g> a zdieľať heslo, naskenujte tento QR kód"</string>
<string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"Ak sa chcete pripojiť k sieti <xliff:g id="SSID">%1$s</xliff:g>, naskenujte tento QR kód"</string>
<string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"QR kód sa nepodarilo prečítať. Opätovne ho vycentrujte a skúste to znova."</string>
<string name="wifi_dpp_failure_authentication_or_configuration" msgid="9142051662156233679">"Skúste to znova. Ak problém pretrváva, kontaktujte výrobcu zariadenia."</string>
<string name="wifi_dpp_failure_not_compatible" msgid="4320027179973678283">"Vyskytol sa problém"</string>
- <string name="wifi_dpp_failure_timeout" msgid="5060065168142109420">"Uistite, sa či je zariadenie zapojené do zásuvky, nabité a zapnuté"</string>
- <string name="wifi_dpp_failure_generic" msgid="7840142544736640189">"Uistite, sa či je zariadenie zapojené do zásuvky, nabité a zapnuté. Ak problém pretrváva, kontaktujte výrobcu zariadenia."</string>
+ <string name="wifi_dpp_failure_timeout" msgid="5060065168142109420">"Skontrolujte, či je zariadenie zapojené, nabité a zapnuté"</string>
+ <string name="wifi_dpp_failure_generic" msgid="7840142544736640189">"Skontrolujte, či je zariadenie zapojené, nabité a zapnuté. Ak problém pretrváva, kontaktujte výrobcu zariadenia."</string>
<string name="wifi_dpp_failure_not_supported" msgid="111779621766171626">"Toto zariadenie nepodporuje pridanie siete <xliff:g id="SSID">%1$s</xliff:g>"</string>
<string name="wifi_dpp_check_connection_try_again" msgid="7144663015219170999">"Skontrolujte pripojenie a skúste to znova"</string>
<string name="wifi_dpp_choose_network" msgid="6251424431594491691">"Výber siete"</string>
<string name="wifi_dpp_choose_network_to_connect_device" msgid="6385259857886784285">"Ak chcete pripojiť svoje zariadenie, vyberte sieť"</string>
<string name="wifi_dpp_add_device_to_wifi" msgid="6454198064645462446">"Pridať toto zariadenie do siete <xliff:g id="SSID">%1$s</xliff:g>?"</string>
- <string name="wifi_dpp_wifi_shared_with_device" msgid="5713765471758272471">"So zariadením bola zdieľaná sieť Wi‑Fi"</string>
+ <string name="wifi_dpp_wifi_shared_with_device" msgid="5713765471758272471">"Wi‑Fi sa zdieľa so zariadením"</string>
<string name="wifi_dpp_add_another_device" msgid="3698441567235301565">"Pridať ďalšie zariadenie"</string>
<string name="wifi_dpp_choose_different_network" msgid="128515107488187050">"Vybrať inú sieť"</string>
<string name="wifi_dpp_could_not_add_device" msgid="4966109556543584813">"Zariadenie sa nepodarilo pridať"</string>
@@ -1103,10 +1102,10 @@
<string name="wifi_hotspot_name_summary_connecting" msgid="5176787959408511889">"Zapína sa hotspot <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>…"</string>
<string name="wifi_hotspot_name_summary_connected" msgid="8387768642326756749">"Iné zariadenia sa môžu pripojiť k hotspotu <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g>"</string>
<string name="wifi_hotspot_password_title" msgid="4289338152595154889">"Heslo hotspotu"</string>
- <string name="wifi_hotspot_ap_band_title" msgid="3485744480410441949">"Pásmo pre prístupový bod"</string>
+ <string name="wifi_hotspot_ap_band_title" msgid="3485744480410441949">"Pásmo prístup. bodu"</string>
<string name="wifi_hotspot_footer_info_regular" msgid="3876006922622827363">"Použite hotspot na vytvorenie siete Wi‑Fi pre ostatné zariadenia. Hotspot poskytuje internet pomocou mobilného dátového pripojenia. Môžu vám byť účtované ďalšie poplatky za mobilné dáta."</string>
<string name="wifi_hotspot_footer_info_local_only" msgid="3339582350894639261">"Aplikácie tiež môžu vytvoriť hostpot na zdieľanie obsahu so zariadeniami v okolí."</string>
- <string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"Automatické vypínanie hotspotu"</string>
+ <string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"Hotspot automaticky vypínať"</string>
<string name="wifi_hotspot_auto_off_summary" msgid="3866769400624802105">"Ak nebudú pripojené žiadne zariadenia, hotspot Wi‑Fi sa vypne"</string>
<string name="wifi_tether_starting" msgid="7676952148471297900">"Prebieha zapínanie hotspotu..."</string>
<string name="wifi_tether_stopping" msgid="7478561853791953349">"Prebieha vypínanie hotspotu..."</string>
@@ -1139,7 +1138,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi‑Fi"</item>
+ <item msgid="2271962426654621656">"Mobilné dáta"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"V prípade nedostupnosti siete Wi‑Fi použiť mobilnú sieť"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"V prípade nedostupnosti mobilnej siete použiť Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Volanie cez Wi‑Fi. Keď sa Wi‑Fi preruší, hovor sa ukončí."</string>
@@ -1249,7 +1251,7 @@
<string name="night_display_auto_mode_title" msgid="8493573087102481588">"Časový plán"</string>
<string name="night_display_auto_mode_never" msgid="2897444637217807088">"Nikdy"</string>
<string name="night_display_auto_mode_custom" msgid="1400891076453963151">"Zapnuté vo vybranom čase"</string>
- <string name="night_display_auto_mode_twilight" msgid="4000162110017520674">"Zapnuté od západu do východu slnka"</string>
+ <string name="night_display_auto_mode_twilight" msgid="4000162110017520674">"Od západu do východu slnka"</string>
<string name="night_display_start_time_title" msgid="1069255169673371077">"Čas začatia"</string>
<string name="night_display_end_time_title" msgid="2760793157124245911">"Čas ukončenia"</string>
<string name="night_display_status_title" msgid="1727020934735770319">"Stav"</string>
@@ -1332,7 +1334,7 @@
<string name="sim_multi_sims_summary" msgid="8237021982527032257">"Vyberte preferovanú SIM kartu na mobilné dáta."</string>
<string name="sim_change_data_title" msgid="2512227368681250054">"Používať <xliff:g id="CARRIER">%1$s</xliff:g> na mobilné dáta?"</string>
<string name="sim_change_data_message" msgid="51004703157782900">"Používate mobilné dáta od operátora <xliff:g id="CARRIER2_0">%2$s</xliff:g>. Ak prepnete na <xliff:g id="CARRIER1">%1$s</xliff:g>, <xliff:g id="CARRIER2_1">%2$s</xliff:g> sa už nebude používať na mobilné dáta."</string>
- <string name="sim_change_data_ok" msgid="7491552537317573235">"Použiť <xliff:g id="CARRIER">%1$s</xliff:g>"</string>
+ <string name="sim_change_data_ok" msgid="7491552537317573235">"Používať <xliff:g id="CARRIER">%1$s</xliff:g>"</string>
<string name="sim_preferred_title" msgid="3389680276182899407">"Aktualizovať pref. SIM kartu?"</string>
<string name="sim_preferred_message" msgid="3751011329746359050">"<xliff:g id="NEW_SIM">%1$s</xliff:g> je jediná SIM karta v zariadení. Chcete ju použiť na mobilné dáta, hovory a správy SMS?"</string>
<string name="wrong_pin_code_pukked" msgid="3214670264775760428">"Nesprávny kód PIN SIM karty. Teraz musíte kontaktovať svojho operátora, aby vám odomkol zariadenie."</string>
@@ -1362,7 +1364,7 @@
<string name="device_status_summary" product="tablet" msgid="8975790197766171710">"Stav batérie, siete a ďalšie informácie"</string>
<string name="device_status_summary" product="default" msgid="8282235230720651642">"Telefónne číslo, signál atď."</string>
<string name="storage_settings" msgid="7009733301485139652">"Úložisko"</string>
- <string name="storage_settings_for_app" msgid="3028887232073069965">"Úložisko a vyrovnávacia pamäť"</string>
+ <string name="storage_settings_for_app" msgid="3028887232073069965">"Ukladací priestor a vyrovnávacia pamäť"</string>
<string name="storage_usb_settings" msgid="4470138799276333403">"Úložisko"</string>
<string name="storage_settings_title" msgid="7348362600789024415">"Nastavenia úložiska"</string>
<string name="storage_settings_summary" product="nosdcard" msgid="600267641559698394">"Odpojiť ukladací priestor USB a zobraziť dostupný ukladací priestor"</string>
@@ -1665,7 +1667,7 @@
<string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"Internetové pripojenie zariadenia <xliff:g id="DEVICE_NAME">%1$d</xliff:g> sa zdieľa cez Bluetooth"</string>
<string name="bluetooth_tethering_overflow_error" msgid="6946561351369376943">"Maximálny počet zariadení na zdieľanie dátového pripojenia: <xliff:g id="MAXCONNECTION">%1$d</xliff:g>."</string>
<string name="bluetooth_untether_blank" msgid="5428300773782256084">"Ukončí sa zdieľané dát. pripojenie zariad. <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string>
- <string name="tethering_footer_info" msgid="8019555174339154124">"Hotspot a tethering umožňujú poskytovať internet iným zariadeniam prostredníctvom mobilného dátového pripojenia. Aplikácie tiež môžu vytvoriť hostpot na zdieľanie obsahu so zariadeniami v okolí."</string>
+ <string name="tethering_footer_info" msgid="8019555174339154124">"Hotspot a tethering umožňujú poskytovať internet iným zariadeniam prostredníctvom vášho mobilného dátového pripojenia. Aplikácie tiež môžu vytvárať hotspot na zdieľanie obsahu so zariadeniami v okolí."</string>
<string name="tethering_help_button_text" msgid="7653022000284543996">"Pomocník"</string>
<string name="network_settings_title" msgid="8516526011407061679">"Mobilná sieť"</string>
<string name="manage_mobile_plan_title" msgid="3312016665522553062">"Mobilný plán"</string>
@@ -1768,7 +1770,7 @@
<string name="lockpassword_confirm_your_pin_generic" msgid="8732268389177735264">"Ak chcete pokračovať, zadajte PIN zariadenia"</string>
<string name="lockpassword_confirm_your_password_generic" msgid="6304552647060899594">"Ak chcete pokračovať, zadajte heslo zariadenia"</string>
<string name="lockpassword_confirm_your_pattern_generic_profile" msgid="3074250084050465513">"Ak chcete pokračovať, použite pracovný bezpečnostný vzor"</string>
- <string name="lockpassword_confirm_your_pin_generic_profile" msgid="6037908971086439523">"Ak chcete pokračovať, zadajte pracovný kód PIN"</string>
+ <string name="lockpassword_confirm_your_pin_generic_profile" msgid="6037908971086439523">"Pre pokračovanie zadajte svoj pracovný PIN"</string>
<string name="lockpassword_confirm_your_password_generic_profile" msgid="2646162490703489685">"Ak chcete pokračovať, zadajte pracovné heslo"</string>
<string name="lockpassword_strong_auth_required_device_pattern" msgid="1014214190135045781">"Zadajte bezpečnostný vzor zariadenia a získajte vyššiu mieru zabezpečenia"</string>
<string name="lockpassword_strong_auth_required_device_pin" msgid="24030584350601016">"Zadajte kód PIN zariadenia a získajte vyššiu mieru zabezpečenia"</string>
@@ -1810,7 +1812,7 @@
<string name="lockpattern_settings_choose_lock_pattern" msgid="9042142745571386381">"Nastaviť bezpečnostný vzor"</string>
<string name="lockpattern_settings_change_lock_pattern" msgid="1456643060737114885">"Zmena bezpečnostného vzoru"</string>
<string name="lockpattern_settings_help_how_to_record" msgid="6037403647312543908">"Bezpečnostný vzor obrazovky nakreslite takto"</string>
- <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="3043127997770535921">"Príliš veľa nesprávnych pokusov. Skúste to znova o <xliff:g id="NUMBER">%d</xliff:g> s."</string>
+ <string name="lockpattern_too_many_failed_confirmation_attempts" msgid="3043127997770535921">"Príliš veľa chybných pokusov. Skúste to znova o <xliff:g id="NUMBER">%d</xliff:g> s."</string>
<string name="activity_not_found" msgid="3492413375341165453">"Aplikácia nie je v telefóne nainštalovaná."</string>
<string name="lock_settings_profile_title" msgid="3928992050074556160">"Zabezpečenie pracovného profilu"</string>
<string name="lock_settings_profile_screen_lock_title" msgid="285267471459162203">"Zámka obrazovky pre pracovný profil"</string>
@@ -1865,7 +1867,7 @@
<string name="install_text" msgid="2798092278891807849">"Inštalovať"</string>
<string name="disable_text" msgid="5065834603951474397">"Deaktivovať"</string>
<string name="enable_text" msgid="7179141636849225884">"Povoliť"</string>
- <string name="clear_user_data_text" msgid="8894073247302821764">"Vymazať priestor"</string>
+ <string name="clear_user_data_text" msgid="8894073247302821764">"Vymazať obsah úložiska"</string>
<string name="app_factory_reset" msgid="8718986000278776272">"Odinštalovať aktualizácie"</string>
<string name="auto_launch_enable_text" msgid="3372898942144027341">"Pre niektoré akcie ste sa rozhodli spúšťať túto aplikáciu ako predvolenú."</string>
<string name="always_allow_bind_appwidgets_text" msgid="2286211654774611037">"Tejto aplikácii ste povolili vytváranie miniaplikácií a pristupovanie k ich údajom."</string>
@@ -2076,14 +2078,14 @@
<string name="usage_time_label" msgid="5615725415876461039">"Doba použitia"</string>
<string name="accessibility_settings" msgid="9140621093888234485">"Dostupnosť"</string>
<string name="accessibility_settings_title" msgid="1687226556576913576">"Nastavenia dostupnosti"</string>
- <string name="accessibility_settings_summary" msgid="5742379519336396561">"Čítačky obrazovky, obrazovka, ovládacie prvky"</string>
+ <string name="accessibility_settings_summary" msgid="5742379519336396561">"Čítačky obrazovky, obrazovka, doplnkové ovládanie"</string>
<string name="vision_settings_title" msgid="7315352351051423944">"Pre slabozrakých"</string>
<string name="vision_settings_description" msgid="3476589459009287332">"Zariadenie môžete prispôsobiť, aby zodpovedalo vašim potrebám. Tieto funkcie dostupnosti môžete neskôr zmeniť v Nastaveniach."</string>
<string name="vision_settings_suggestion_title" msgid="7268661419110951128">"Zmeniť veľkosť písma"</string>
<string name="screen_reader_category_title" msgid="6300714148519645544">"Čítačky obrazovky"</string>
<string name="audio_and_captions_category_title" msgid="6140472938769619212">"Zvuk a text na obrazovke"</string>
<string name="display_category_title" msgid="545168481672250195">"Zobrazenie"</string>
- <string name="interaction_control_category_title" msgid="8775039211811947683">"Interaktívne ovládanie"</string>
+ <string name="interaction_control_category_title" msgid="8775039211811947683">"Doplnkové ovládanie"</string>
<string name="user_installed_services_category_title" msgid="4288689493753221319">"Stiahnuté služby"</string>
<string name="experimental_category_title" msgid="3797000069740110717">"Experimentálne"</string>
<string name="feature_flags_dashboard_title" msgid="3153034144122754381">"Experimentálne funkcie"</string>
@@ -2091,7 +2093,7 @@
<string name="talkback_summary" msgid="6602857105831641574">"Čítačka obrazovky je určená hlavne pre nevidiacich a slabozrakých ľudí"</string>
<string name="select_to_speak_summary" msgid="7514180457557735421">"Položky na obrazovke si môžete vypočuť nahlas klepnutím"</string>
<string name="accessibility_captioning_title" msgid="5878371993023439642">"Titulky"</string>
- <string name="accessibility_screen_magnification_title" msgid="7250949681883917360">"Priblíženie"</string>
+ <string name="accessibility_screen_magnification_title" msgid="7250949681883917360">"Zväčšenie"</string>
<string name="accessibility_screen_magnification_gestures_title" msgid="9199287875401817974">"Priblíženie trojitým klepnutím"</string>
<string name="accessibility_screen_magnification_navbar_title" msgid="400655612610761242">"Priblíženie tlačidlom"</string>
<string name="accessibility_screen_magnification_state_navbar_gesture" msgid="1863831350878995600">"Priblíženie tlačidlom a trojitým klepnutím"</string>
@@ -2135,9 +2137,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Vibrovanie pri upozornení"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Vibrovanie pri zvonení"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Vibrácia pri klepnutí"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Zapnúť službu"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Používať úpravu farieb"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Používať titulky"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Používať službu"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Používať úpravu farieb"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Používať titulky"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Ďalej"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Načúvadlá"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Nie sú pripojené žiadne načúvadlá"</string>
@@ -2358,10 +2360,10 @@
<item quantity="one">%1$s aplikácia bola nedávno obmedzená</item>
</plurals>
<plurals name="battery_tip_restrict_summary" formatted="false" msgid="984148373944071669">
- <item quantity="few">%2$d aplikácie majú vysokú spotrebu batérie na pozadí</item>
- <item quantity="many">%2$d aplikácie má vysokú spotrebu batérie na pozadí</item>
- <item quantity="other">%2$d aplikácií má vysokú spotrebu batérie na pozadí</item>
- <item quantity="one">%1$s aplikácia má vysokú spotrebu batérie na pozadí</item>
+ <item quantity="few">%2$d aplikácie majú vysokú spotrebu batérie na pozadí</item>
+ <item quantity="many">%2$d apps have high background battery usage</item>
+ <item quantity="other">%2$d aplikácií má vysokú spotrebu batérie na pozadí</item>
+ <item quantity="one">Aplikácia %1$s má vysokú spotrebu batérie na pozadí</item>
</plurals>
<plurals name="battery_tip_restrict_handled_summary" formatted="false" msgid="469696766640020557">
<item quantity="few">Tieto aplikácie sa nedajú spustiť na pozadí</item>
@@ -2531,7 +2533,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Zapnúť"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Používať Šetrič batérie"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Používať šetrič batérie"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Zapínať automaticky"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Nikdy"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"pri <xliff:g id="PERCENT">%1$s</xliff:g> batérie"</string>
@@ -3241,7 +3243,7 @@
<string name="emergency_tone_alert" msgid="907868135091891015">"Tóny"</string>
<string name="emergency_tone_vibrate" msgid="5020068066905681181">"Vibrovanie"</string>
<string name="boot_sounds_title" msgid="7583926202411353620">"Zvuky pri spustení"</string>
- <string name="live_caption_title" msgid="7926591158657997051">"Okamžité titulky"</string>
+ <string name="live_caption_title" msgid="7926591158657997051">"Živý prepis"</string>
<string name="live_caption_summary" msgid="9064771862352393125">"Automaticky pridávať titulky k médiám"</string>
<string name="zen_mode_settings_summary_off" msgid="6929319200478424962">"Nikdy"</string>
<plurals name="zen_mode_settings_summary_on" formatted="false" msgid="6061723291126091396">
@@ -3295,11 +3297,11 @@
<string name="zen_mode_block_effects_screen_off" msgid="6380935819882837552">"Keď je obrazovka vypnutá"</string>
<string name="zen_mode_block_effect_sound" msgid="1499243540186357631">"Stlmiť zvuk a vibrácie"</string>
<string name="zen_mode_block_effect_intent" msgid="5666951244667422668">"Nezapínať obrazovku"</string>
- <string name="zen_mode_block_effect_light" msgid="8679333758037487644">"Neblikať svetlom"</string>
+ <string name="zen_mode_block_effect_light" msgid="8679333758037487644">"Neblikať"</string>
<string name="zen_mode_block_effect_peek" msgid="6075662813575910221">"Nezobrazovať upozornenia na obrazovke"</string>
- <string name="zen_mode_block_effect_status" msgid="6516614225115681068">"Skryť ikony stavového riadka v hornej časti obrazovky"</string>
+ <string name="zen_mode_block_effect_status" msgid="6516614225115681068">"Skryť ikony stavového riadka hore na obrazovke"</string>
<string name="zen_mode_block_effect_badge" msgid="3891743027347075136">"Skryť bodky upozornení na ikonách aplikácií"</string>
- <string name="zen_mode_block_effect_ambient" msgid="6382013125863616197">"V prípade upozornení nebudiť"</string>
+ <string name="zen_mode_block_effect_ambient" msgid="6382013125863616197">"Pri upozorneniach nebudiť"</string>
<string name="zen_mode_block_effect_list" msgid="6081548478844912181">"Skryť v zozname upozornení"</string>
<string name="zen_mode_block_effect_summary_none" msgid="7166175186759564510">"Nikdy"</string>
<string name="zen_mode_block_effect_summary_screen_off" msgid="2985086455557755722">"Keď je obrazovka vypnutá"</string>
@@ -3566,7 +3568,7 @@
<string name="zen_mode_schedule_alarm_summary" msgid="5556997989911412070">"Plán sa vypne, keď zazvoní budík"</string>
<string name="zen_mode_custom_behavior_title" msgid="8908861697886331001">"Správanie režimu bez vyrušení"</string>
<string name="zen_mode_custom_behavior_summary_default" msgid="3509865340195397447">"Použiť predvolené nastavenia"</string>
- <string name="zen_mode_custom_behavior_summary" msgid="7206909852887332604">"Vytvorte si vlastné nastavenia tohto plánu"</string>
+ <string name="zen_mode_custom_behavior_summary" msgid="7206909852887332604">"Vytvoriť si vlastné nastavenia tohto plánu"</string>
<string name="zen_mode_custom_behavior_category_title" msgid="7451686525113262087">"V rámci plánu <xliff:g id="SCHEDULE_NAME">%1$s</xliff:g>"</string>
<string name="summary_divider_text" msgid="4780683204694442666">", "</string>
<string name="summary_range_symbol_combination" msgid="6038631664844488406">"<xliff:g id="START">%1$s</xliff:g> – <xliff:g id="END">%2$s</xliff:g>"</string>
@@ -3605,7 +3607,7 @@
<string name="zen_mode_reminders_list" msgid="7347061314032326677">"pripomenutia"</string>
<string name="zen_mode_events" msgid="5784076928339534984">"Povoliť udalosti"</string>
<string name="zen_mode_bypassing_apps" msgid="3080739479028713449">"Povoľte aplikáciám prekonávať nastavenia"</string>
- <string name="zen_mode_bypassing_apps_title" msgid="2115024664615538847">"Výnimky aplikácie"</string>
+ <string name="zen_mode_bypassing_apps_title" msgid="2115024664615538847">"Výnimky pre aplikácie"</string>
<plurals name="zen_mode_bypassing_apps_subtext" formatted="false" msgid="8723144434730871572">
<item quantity="few">Režim bez vyrušení môžu prekonať <xliff:g id="NUMBER">%1$d</xliff:g> aplikácie</item>
<item quantity="many">Notifications from <xliff:g id="NUMBER">%1$d</xliff:g> apps can override Do Not Disturb</item>
@@ -3617,7 +3619,7 @@
<string name="zen_mode_contacts_callers" msgid="3116829245339716399">"kontaktov"</string>
<string name="zen_mode_starred_callers" msgid="1317376207713013472">"kontaktov s hviezdičkou"</string>
<string name="zen_mode_repeat_callers" msgid="1435309867554692340">"Opakované volania"</string>
- <string name="zen_mode_repeat_callers_list" msgid="2750270907597457279">"opakujúcich sa volajúcich"</string>
+ <string name="zen_mode_repeat_callers_list" msgid="2750270907597457279">"opakované volania"</string>
<string name="zen_mode_repeat_callers_title" msgid="7192952181541813487">"Povoliť opakované volania"</string>
<string name="zen_mode_calls_summary_one" msgid="8327371053236689649">"Povoliť od <xliff:g id="CALLER_TYPE">%1$s</xliff:g>"</string>
<string name="zen_mode_calls_summary_two" msgid="9017678770532673578">"Povoliť od <xliff:g id="CALLER_TYPE">%1$s</xliff:g> a <xliff:g id="CALLERT_TPYE">%2$s</xliff:g>"</string>
@@ -3959,7 +3961,7 @@
<string name="screen_zoom_conversation_icon_pete" msgid="4990733893088820204">"P"</string>
<string name="screen_zoom_conversation_message_1" msgid="7215516160541988278">"Servus, Peter!"</string>
<string name="screen_zoom_conversation_message_2" msgid="5409482621887655034">"Nezájdeme dnes na kávu?"</string>
- <string name="screen_zoom_conversation_message_3" msgid="2471777953578052296">"Dobre, poznám tu jedno skvelé miesto."</string>
+ <string name="screen_zoom_conversation_message_3" msgid="2471777953578052296">"Poďme. Poznám tu blízko jeden super podnik."</string>
<string name="screen_zoom_conversation_message_4" msgid="8258817329742550137">"Výborne!"</string>
<string name="screen_zoom_conversation_timestamp_1" msgid="8011637725391996769">"Ut 18:00"</string>
<string name="screen_zoom_conversation_timestamp_2" msgid="816265985618121370">"Ut 18:01"</string>
@@ -3978,7 +3980,7 @@
<string name="notification_summary_none" msgid="5003043219430054784">"Zapnuté pre všetky aplikácie"</string>
<string name="apps_summary" msgid="8355759446490212195">"<xliff:g id="COUNT">%1$d</xliff:g> nainštalovaných aplikácií"</string>
<string name="apps_summary_example" msgid="3011143598675185269">"24 nainštalovaných aplikácií"</string>
- <string name="storage_summary" msgid="4835916510511133784">"Využité: <xliff:g id="PERCENTAGE">%1$s</xliff:g> – voľné: <xliff:g id="FREE_SPACE">%2$s</xliff:g>"</string>
+ <string name="storage_summary" msgid="4835916510511133784">"Využité: <xliff:g id="PERCENTAGE">%1$s</xliff:g>, voľné: <xliff:g id="FREE_SPACE">%2$s</xliff:g>"</string>
<string name="storage_summary_with_sdcard" msgid="8742907204848352697">"Vnútorné úložisko: využité <xliff:g id="PERCENTAGE">%1$s</xliff:g> – voľné <xliff:g id="FREE_SPACE">%2$s</xliff:g>"</string>
<string name="display_summary" msgid="5725269449657325797">"Režim spánku sa spustí po <xliff:g id="TIMEOUT_DESCRIPTION">%1$s</xliff:g> nečinnosti"</string>
<string name="display_dashboard_summary" msgid="7678566148167010682">"Tapeta, režim spánku, veľkosť písma"</string>
@@ -3998,7 +4000,7 @@
<string name="disabled_by_policy_title_camera" msgid="3741138901926111197">"Použitie fotoaparátu je zakázané"</string>
<string name="disabled_by_policy_title_screen_capture" msgid="1856835333536274665">"Snímky obrazovky sú zakázané"</string>
<string name="disabled_by_policy_title_suspend_packages" msgid="4254714213391802322">"Táto aplikácia sa nedá otvoriť"</string>
- <string name="default_admin_support_msg" msgid="5789424433689798637">"V prípade otázok kontaktujte správcu IT."</string>
+ <string name="default_admin_support_msg" msgid="5789424433689798637">"Ak máte nejaké otázky, obráťte sa na svojho správcu IT"</string>
<string name="admin_support_more_info" msgid="8737842638087863477">"Ďalšie podrobnosti"</string>
<string name="admin_profile_owner_message" msgid="3199544166281052845">"Správca môže sledovať a spravovať aplikácie a údaje priradené k vášmu pracovnému profilu vrátane nastavení, povolení, firemného prístupu, aktivity siete a informácií o polohe zariadenia."</string>
<string name="admin_profile_owner_user_message" msgid="2991249382056855531">"Správca môže sledovať a spravovať aplikácie a údaje priradené k tomuto používateľovi vrátane nastavení, povolení, firemného prístupu, aktivity siete a informácií o polohe zariadenia."</string>
@@ -4140,7 +4142,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Pri uzamknutom zariadení zakázať v upozorneniach písať odpovede či iný text"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Predvolená kontrola pravopisu"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Výber kontroly pravopisu"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Používať kontrolu pravopisu"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Používať kontrolu pravopisu"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Nie je vybraté"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(žiadny)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4241,7 +4243,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Správca úložiska odstraňuje zálohované fotky a videá z vášho zariadenia, čím pomáha uvoľniť miesto v úložisku."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Odstrániť fotky a videá"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Správca úložiska"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Používať Správcu úložiska"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Používať správcu priestoru"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automaticky"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Ručne"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Uvoľniť miesto"</string>
@@ -4273,7 +4275,7 @@
<string name="ambient_display_tap_screen_title" product="tablet" msgid="6434521782016864148">"Klepnutím skontrolujete tablet"</string>
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"Klepnutím skontrolujete zariadenie"</string>
<string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"Ak chcete zistiť čas, skontrolovať upozornenia a získať ďalšie informácie, klepnite na obrazovku."</string>
- <string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"Upozornenia potiahnutím prsta"</string>
+ <string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"Upozornenia odtlačkom prsta"</string>
<string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"Potiahnutie prstom"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"Upozornenia zobrazíte potiahnutím nadol po senzore odtlačkov prstov na zadnej strane telefónu."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"Upozornenia zobrazíte potiahnutím nadol po senzore odtlačkov prstov na zadnej strane tabletu."</string>
@@ -4475,7 +4477,7 @@
<string name="battery_suggestion_title" product="device" msgid="765005476863631528">"Predĺženie výdrže batérie zariadenia"</string>
<string name="battery_suggestion_title" product="default" msgid="3295786171830183688">"Predĺženie výdrže batérie telefónu"</string>
<string name="battery_suggestion_summary" msgid="2669070349482656490"></string>
- <string name="gesture_prevent_ringing_screen_title" msgid="4173494225145223638">"Blokovanie zvonenia"</string>
+ <string name="gesture_prevent_ringing_screen_title" msgid="4173494225145223638">"Vypnutie zvonenia"</string>
<string name="gesture_prevent_ringing_title" msgid="8827963588425673557">"Stlačením vypínača a tlač. zvýšenia hlas. zapnete možnosť:"</string>
<string name="gesture_prevent_ringing_sound_title" msgid="8642330448721033641">"Skratka na vypnutie zvonenia"</string>
<string name="prevent_ringing_option_vibrate" msgid="6456505293904544108">"Vibrovať"</string>
@@ -4565,7 +4567,7 @@
<string name="mobile_network_inactive_esim" msgid="6525747163540293028">"Neaktívne / stiahnutá SIM karta"</string>
<string name="mobile_network_sim_name" msgid="8228870017368926761">"Názov SIM karty"</string>
<string name="mobile_network_sim_name_rename" msgid="4810736493612513152">"Premenovať"</string>
- <string name="mobile_network_use_sim_on" msgid="1944823242539751387">"Použiť SIM"</string>
+ <string name="mobile_network_use_sim_on" msgid="1944823242539751387">"Používať SIM kartu"</string>
<string name="mobile_network_use_sim_off" msgid="2077820358051946635">"Vypnuté"</string>
<string name="mobile_network_esim_swap_confirm_title" msgid="6077154427380613615">"Chcete prepnúť na operátora <xliff:g id="CARRIER">%1$s</xliff:g>?"</string>
<string name="mobile_network_esim_swap_confirm_body" msgid="1192274915146275063">"V jednej chvíli môže byť aktívna iba jedna stiahnutá SIM karta.\n\nPrepnutím na operátora <xliff:g id="CARRIER1">%1$s</xliff:g> nezrušíte službu operátora <xliff:g id="CARRIER2">%2$s</xliff:g>."</string>
diff --git a/tests/CarDeveloperOptions/res/values-sl/arrays.xml b/tests/CarDeveloperOptions/res/values-sl/arrays.xml
index 6ac10d1..914e370 100644
--- a/tests/CarDeveloperOptions/res/values-sl/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-sl/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"izvajanje v ozadju"</item>
<item msgid="6423861043647911030">"glasnost za funkcije za ljudi s posebnimi potrebami"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Lokacija"</item>
+ <item msgid="6656077694190491067">"Lokacija"</item>
+ <item msgid="8790228218278477369">"Lokacija"</item>
+ <item msgid="7836406246005211990">"Vibriranje"</item>
+ <item msgid="3951439024549922598">"Branje stikov"</item>
+ <item msgid="8802152411647068">"Spreminjanje stikov"</item>
+ <item msgid="229544934599698735">"Branje dnevnika klicev"</item>
+ <item msgid="7396102294405899613">"Spreminjanje dnevnika klicev"</item>
+ <item msgid="3597797992398484655">"Branje koledarja"</item>
+ <item msgid="2705975774250907343">"Spreminjanje koledarja"</item>
+ <item msgid="4668747371441932697">"Lokacija"</item>
+ <item msgid="1487578921720243646">"Objava obvestila"</item>
+ <item msgid="4636080349724146638">"Lokacija"</item>
+ <item msgid="673510900286463926">"Klicanje telefonske številke"</item>
+ <item msgid="542083422784609790">"Branje sporočil SMS/MMS"</item>
+ <item msgid="1033780373029588436">"Pisanje sporočil SMS/MMS"</item>
+ <item msgid="5647111115517787488">"Prejemanje sporočil SMS/MMS"</item>
+ <item msgid="8591105601108455893">"Prejemanje sporočil SMS/MMS"</item>
+ <item msgid="7730995008517841903">"Prejemanje sporočil SMS/MMS"</item>
+ <item msgid="2613033109026626086">"Prejemanje sporočil SMS/MMS"</item>
+ <item msgid="3037159047591081136">"Pošiljanje sporočil SMS/MMS"</item>
+ <item msgid="4726682243833913568">"Branje sporočil SMS/MMS"</item>
+ <item msgid="6555678522277865572">"Pisanje sporočil SMS/MMS"</item>
+ <item msgid="6981734935578130884">"Spreminjanje nastavitev"</item>
+ <item msgid="8705854389991425629">"Vlečenje na vrh"</item>
+ <item msgid="5861356020344153651">"Dostop do obvestil"</item>
+ <item msgid="78432174621628659">"Fotoaparat"</item>
+ <item msgid="3986116419882154794">"Snemanje zvoka"</item>
+ <item msgid="4516840825756409490">"Predvajanje zvoka"</item>
+ <item msgid="6811712502798183957">"Preberi odložišče"</item>
+ <item msgid="2780369012602289114">"Spremeni odložišče"</item>
+ <item msgid="2331359440170850868">"Gumbi za predstavnosti"</item>
+ <item msgid="6133599737122751231">"Osredotočenost zvoka"</item>
+ <item msgid="6844485713404805301">"Glavna glasnost"</item>
+ <item msgid="1600379420669104929">"Glasnost glasu"</item>
+ <item msgid="6296768210470214866">"Glasnost zvonjenja"</item>
+ <item msgid="510690696071629241">"Glasnost predstavnosti"</item>
+ <item msgid="406861638631430109">"Glasnost alarma"</item>
+ <item msgid="4715864795872233884">"Glasnost obvestila"</item>
+ <item msgid="2311478519251301183">"Glasnost Bluetootha"</item>
+ <item msgid="5133991377896747027">"Ohrani odklenjen zaslon"</item>
+ <item msgid="2464189519136248621">"Lokacija"</item>
+ <item msgid="2062677934050803037">"Lokacija"</item>
+ <item msgid="1735171933192715957">"Pridobivanje statističnih podatkov o uporabi"</item>
+ <item msgid="1014093788778383554">"Izklop/vklop mikrofona"</item>
+ <item msgid="4199297950608622850">"Prikaz obvestila"</item>
+ <item msgid="2527962435313398821">"Predstavnost projektov"</item>
+ <item msgid="5117506254221861929">"Aktiviranje omrežja VPN"</item>
+ <item msgid="8291198322681891160">"Ozadje pisanja"</item>
+ <item msgid="7106921284621230961">"Struktura pomoči"</item>
+ <item msgid="4496533640894624799">"Posnetek zaslona pomoči"</item>
+ <item msgid="2598847264853993611">"Branje stanja telefona"</item>
+ <item msgid="9215610846802973353">"Dodajanje odzivnika"</item>
+ <item msgid="9186411956086478261">"Uporaba protokola SIP"</item>
+ <item msgid="6884763100104539558">"Obdelava odhodnega klica"</item>
+ <item msgid="125513972170580692">"Prstni odtis"</item>
+ <item msgid="2556071024281275619">"Tipala tel. funkcij"</item>
+ <item msgid="617168514928339387">"Branje oddaj v celici"</item>
+ <item msgid="7134693570516523585">"Lažna lokacija"</item>
+ <item msgid="7224489175375229399">"Branje shrambe"</item>
+ <item msgid="8472735063903258202">"Pisanje v shrambo"</item>
+ <item msgid="4069276819909595110">"Vklop zaslona"</item>
+ <item msgid="1228338896751121025">"Pridobivanje računov"</item>
+ <item msgid="3181581793459233672">"Izvajanje v ozadju"</item>
+ <item msgid="2340936043025374076">"Glasnost za funkcije za ljudi s posebnimi potrebami"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Kratko"</item>
<item msgid="4816511817309094890">"Srednja pomembnost"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Nikoli ne dovoli"</item>
<item msgid="8184570120217958741">"Vedno dovoli"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Običajno"</item>
+ <item msgid="5101233285497327432">"Zmerno"</item>
+ <item msgid="1555861583162930714">"Nizko"</item>
+ <item msgid="1719683776264798117">"Resno"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Običajno"</item>
+ <item msgid="6107138933849816768">"Zmerno"</item>
+ <item msgid="182695359839047859">"Nizko"</item>
+ <item msgid="8577246509202964244">"Resno"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Trajno"</item>
<item msgid="167418068739176448">"Najpogostejša dejavnost"</item>
diff --git a/tests/CarDeveloperOptions/res/values-sl/strings.xml b/tests/CarDeveloperOptions/res/values-sl/strings.xml
index 004d9e2..3bb6bec 100644
--- a/tests/CarDeveloperOptions/res/values-sl/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-sl/strings.xml
@@ -85,8 +85,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Pomanjšava ali povečava besedila na zaslonu"</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Pomanjšanje"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Povečanje"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Vzorčno besedilo"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Čudoviti čarovnik iz Oza"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"11. poglavje: Čudovito Smaragdno mesto"</string>
@@ -210,7 +209,7 @@
<string name="proxy_error_empty_port" msgid="8034561724923076215">"Izpolniti morate polje vrat."</string>
<string name="proxy_error_empty_host_set_port" msgid="8471455809508588255">"Če je polje za gostitelja prazno, mora biti prazno tudi polje za vrata."</string>
<string name="proxy_error_invalid_port" msgid="4046559920586100637">"Vtipkana številka vrat je neveljavna."</string>
- <string name="proxy_warning_limited_support" msgid="9026539134219095768">"Proxy HTTP lahko uporablja brskalnik, druge aplikacije pa ne."</string>
+ <string name="proxy_warning_limited_support" msgid="9026539134219095768">"Proxy za HTTP lahko uporablja brskalnik, druge aplikacije pa ne."</string>
<string name="proxy_url_title" msgid="882042361706435904">"URL datoteke PAC: "</string>
<string name="radio_info_dl_kbps" msgid="2903778264453410272">"Pasovna širina za prenos (kbps):"</string>
<string name="radio_info_ul_kbps" msgid="3802245899811732716">"Pasovna širina za nalaganje (kbps):"</string>
@@ -373,7 +372,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Podatki za profil"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Računi"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Lokacija"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Uporaba lokacije"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Uporaba lokacije"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Izklopljeno"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">Vklopljeno – <xliff:g id="COUNT_1">%1$d</xliff:g> aplikacija ima dostop do lokacije</item>
@@ -455,7 +454,7 @@
<string name="security_settings_fingerprint_enroll_introduction_continue" msgid="271662150372486535">"Naprej"</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel_setup" msgid="756928427429893070">"Preskoči"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue_setup" msgid="4125977169169671144">"Naprej"</string>
- <string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"Preskok nast. prstnega odtisa?"</string>
+ <string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"Brez prstnega odtisa?"</string>
<string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"Nastavitev prstnega odtisa vam bo vzela le minuto ali dve. Če nastavitev preskočite, lahko prstni odtis dodate pozneje v nastavitvah."</string>
<string name="lock_screen_intro_skip_title" msgid="5307431665496346914">"Preskok zaklepanja zaslona?"</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="tablet" msgid="7553945981266845264">"Funkcije za zaščito naprave ne bodo vklopljene. Če tablični računalnik izgubite, vam ga ukradejo ali ponastavijo na tovarniške nastavitve, drugim osebam ne boste mogli preprečiti njegove uporabe."</string>
@@ -871,7 +870,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Vklopi Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Uporabi Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Uporaba Wi-Fi-ja"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Nastavitve za Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Nastavi in upravljaj brezžične dostopne točke"</string>
@@ -962,7 +961,7 @@
<string name="wifi_ap_choose_auto" msgid="7927637960569365785">"Samodejno"</string>
<string name="wifi_ap_choose_2G" msgid="43198403259714736">"2,4-GHz pas"</string>
<string name="wifi_ap_choose_5G" msgid="2624859713183683146">"5,0-GHz pas"</string>
- <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"Prednostno 5,0-GHz pas"</string>
+ <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"5,0-GHz pas (prednostno)"</string>
<string name="wifi_ap_2G" msgid="5793110086517338494">"2,4 GHz"</string>
<string name="wifi_ap_5G" msgid="4584892544393675403">"5,0 GHz"</string>
<string name="wifi_ap_band_select_one" msgid="4409754936554360355">"Izberite vsaj en pas za dostopno točko Wi‑Fi:"</string>
@@ -974,8 +973,8 @@
<string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"Branje kode QR"</string>
<string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"Kodo QR spodaj nastavite na sredino, da vzpostavite povezavo z omrežjem »<xliff:g id="SSID">%1$s</xliff:g>«."</string>
<string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"Če se želite pridružiti omrežju Wi‑Fi, preberite kodo QR"</string>
- <string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Skupna raba omrežja Wi‑Fi"</string>
- <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"Če želite vzpostaviti povezavo z omrežjem »<xliff:g id="SSID">%1$s</xliff:g>« in dati geslo v skupno rabo, preberite to kodo QR"</string>
+ <string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"Deljenje omrežja Wi‑Fi"</string>
+ <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"Če želite vzpostaviti povezavo z omrežjem »<xliff:g id="SSID">%1$s</xliff:g>« in deliti geslo z drugimi, preberite to kodo QR"</string>
<string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"Če želite vzpostaviti povezavo z omrežjem »<xliff:g id="SSID">%1$s</xliff:g>«, preberite to kodo QR"</string>
<string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"Kode QR ni bilo mogoče prebrati. Kodo nastavite na sredino in poskusite znova."</string>
<string name="wifi_dpp_failure_authentication_or_configuration" msgid="9142051662156233679">"Poskusite znova. Če se težava ponavlja, se obrnite na proizvajalca naprave."</string>
@@ -994,7 +993,7 @@
<string name="wifi_dpp_device_found" msgid="6488461467496850841">"Najdena je bila naprava"</string>
<string name="wifi_dpp_sharing_wifi_with_this_device" msgid="2540529164687476827">"Skupna raba povezave Wi‑Fi s to napravo …"</string>
<string name="wifi_dpp_connecting" msgid="4229290407210299897">"Povezovanje …"</string>
- <string name="wifi_dpp_share_hotspot" msgid="847987212473038179">"Skupna raba dostopne točke"</string>
+ <string name="wifi_dpp_share_hotspot" msgid="847987212473038179">"Deljenje dostopne točke"</string>
<string name="wifi_dpp_lockscreen_title" msgid="3910665850075275963">"Potrdite, da ste res vi"</string>
<string name="wifi_dpp_wifi_password" msgid="8007558344032612455">"Geslo za Wi-Fi: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
<string name="wifi_dpp_hotspot_password" msgid="6172326289042241924">"Geslo za dostopno točko: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
@@ -1007,7 +1006,7 @@
<string name="wifi_multiple_cert_added" msgid="7986200585749147204">"(Dodanih je bilo več potrdil)"</string>
<string name="wifi_use_system_certs" msgid="4794489370929885022">"Uporabi sistemska potrdila"</string>
<string name="wifi_do_not_provide_eap_user_cert" msgid="4044301449482425250">"Ne posreduj"</string>
- <string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"Ne potrdi"</string>
+ <string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"Ne preverjaj"</string>
<string name="wifi_do_not_validate_eap_server_warning" msgid="3895397996759837323">"Ni navedenih potrdil. Povezava ne bo zasebna."</string>
<string name="wifi_ssid_too_long" msgid="34911971389775920">"Ime omrežja je predolgo."</string>
<string name="wifi_no_domain_warning" msgid="735859919311067606">"Določiti morate domeno."</string>
@@ -1094,7 +1093,7 @@
<string name="wifi_p2p_cancel_connect_message" msgid="3752679335020392154">"Ali želite preklicati povabilo za povezavo z napravo <xliff:g id="PEER_NAME">%1$s</xliff:g>?"</string>
<string name="wifi_p2p_delete_group_message" msgid="3206660449067701089">"Želite pozabiti to skupino?"</string>
<string name="wifi_hotspot_checkbox_text" msgid="12062341344410520">"Dostopna točka Wi-Fi"</string>
- <string name="wifi_hotspot_off_subtext" msgid="6177054857136221058">"Internetna povezava ali vsebina ni v skupni rabi z drugimi napravami"</string>
+ <string name="wifi_hotspot_off_subtext" msgid="6177054857136221058">"Internetna povezava ali vsebina ni deljena z drugimi napravami"</string>
<string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="71421730039785897">"Skupna raba internetne povezave tega tabličnega računalnika prek dostopne točke"</string>
<string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="8914285514605049879">"Skupna raba internetne povezave tega telefona prek dostopne točke"</string>
<string name="wifi_hotspot_on_local_only_subtext" msgid="7415381343846704553">"Aplikacija daje vsebino v skupno rabo. Če želite omogočiti skupno rabo internetne povezave, dostopno točko izklopite in znova vklopite."</string>
@@ -1139,7 +1138,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Mobilno"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Uporaba mobilnega omrežja, če omrežje Wi-Fi ni dosegljivo"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Uporaba omrežja Wi-Fi, če mobilno omrežje ni dosegljivo"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Klic prek omrežja Wi-Fi. Če izgubite povezavo Wi-Fi, bo klic končan."</string>
@@ -1657,12 +1659,12 @@
<string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"Dokler je vklopljeno varčevanje s podatki, ni mogoče vzpostaviti povezave z internetom prek mobilnega telefona ali uporabljati prenosnih dostopnih točk."</string>
<string name="usb_title" msgid="7480927657535578688">"USB"</string>
<string name="usb_tethering_button_text" msgid="6242228383142012332">"Internetna povezava prek USB-ja"</string>
- <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Skupna raba internetne povezave telefona prek USB-ja"</string>
- <string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"Skupna raba internetne povezave tabličnega računalnika prek USB-ja"</string>
+ <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Deljenje internetne povezave telefona prek USB-ja"</string>
+ <string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"Deljenje internetne povezave tabličnega računalnika prek USB-ja"</string>
<string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"Internet prek Bluetootha"</string>
- <string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"Skupna raba internetne povezave tabličnega računalnika prek Bluetootha"</string>
- <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Skupna raba internetne povezave telefona prek Bluetootha"</string>
- <string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"Skupna raba internetne povezave naprave <xliff:g id="DEVICE_NAME">%1$d</xliff:g> prek Bluetootha"</string>
+ <string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"Deljenje internetne povezave tabličnega računalnika prek Bluetootha"</string>
+ <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Deljenje internetne povezave telefona prek Bluetootha"</string>
+ <string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"Deljenje internetne povezave naprave <xliff:g id="DEVICE_NAME">%1$d</xliff:g> prek Bluetootha"</string>
<string name="bluetooth_tethering_overflow_error" msgid="6946561351369376943">"Internetna povezava ni mogoča z več kot <xliff:g id="MAXCONNECTION">%1$d</xliff:g> naprav."</string>
<string name="bluetooth_untether_blank" msgid="5428300773782256084">"Internetna povezava z napravo <xliff:g id="DEVICE_NAME">%1$s</xliff:g> bo prekinjena."</string>
<string name="tethering_footer_info" msgid="8019555174339154124">"Uporabite dostopno točko in povezavo z internetom prek mobilnega telefona, da zagotovite internet drugim napravam prek svoje mobilne podatkovne povezave. Tudi aplikacije lahko ustvarijo dostopno točko za skupno rabo vsebin z napravami v bližini."</string>
@@ -1683,7 +1685,7 @@
<string name="mobile_insert_sim_card" msgid="7594550403454243732">"Vstavite SIM in znova zaženite"</string>
<string name="mobile_connect_to_internet" msgid="6031886097365170913">"Vzpostavite internetno povezavo"</string>
<string name="location_title" msgid="8664674161765477168">"Moja lokacija"</string>
- <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"Mesto za delovni profil"</string>
+ <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"Lokacija za delovni profil"</string>
<string name="location_app_level_permissions" msgid="1298041503927632960">"Dovoljenje za aplikacije"</string>
<string name="location_app_permission_summary_location_off" msgid="541372845344796336">"Zaznavanje lokacije je izklopljeno"</string>
<plurals name="location_app_permission_summary_location_on" formatted="false" msgid="7904821382328758218">
@@ -1700,7 +1702,7 @@
<string name="location_low_battery_use" msgid="5030448574501435888">"Nizka poraba akumulatorja"</string>
<string name="location_scanning_screen_title" msgid="7663329319689413454">"Iskanje omrežij Wi‑Fi in naprav Bluetooth"</string>
<string name="location_scanning_wifi_always_scanning_title" msgid="6750542206763112172">"Iskanje omrežij Wi‑Fi"</string>
- <string name="location_scanning_wifi_always_scanning_description" msgid="4956048135941851712">"Aplikacijam in storitvam omogoči, da kadar koli iščejo omrežja Wi-Fi v bližini, tudi ko je Wi-Fi izklopljen. To funkcijo lahko na primer uporabite, če želite izboljšati funkcije in storitve, ki pri delovanju uporabljajo lokacijo."</string>
+ <string name="location_scanning_wifi_always_scanning_description" msgid="4956048135941851712">"Aplikacijam in storitvam omogoči, da kadar koli iščejo omrežja Wi-Fi, tudi ko je Wi-Fi izklopljen. To funkcijo lahko na primer uporabite, če želite izboljšati funkcije in storitve, ki pri delovanju uporabljajo lokacijo."</string>
<string name="location_scanning_bluetooth_always_scanning_title" msgid="196241746742607453">"Iskanje naprav Bluetooth"</string>
<string name="location_scanning_bluetooth_always_scanning_description" msgid="3796673798637848690">"Aplikacijam in storitvam omogoči, da kadar koli iščejo naprave v bližini, tudi ko je Bluetooth izklopljen. To funkcijo lahko na primer uporabite, če želite izboljšati funkcije in storitve, ki pri delovanju uporabljajo lokacijo."</string>
<string name="managed_profile_location_services" msgid="224925483299159541">"Lokacijske storitve za službo"</string>
@@ -1727,7 +1729,7 @@
<string name="contributors_title" msgid="6800028420806884340">"Sodelavci"</string>
<string name="manual" msgid="5431859421432581357">"Ročno"</string>
<string name="regulatory_labels" msgid="380968489247381025">"Zakonsko predpisane oznake"</string>
- <string name="safety_and_regulatory_info" msgid="7113766428000920132">"Priročnik z varn. in zak. predpis. inf."</string>
+ <string name="safety_and_regulatory_info" msgid="7113766428000920132">"Varnostne in zakonsko predpisane inform."</string>
<string name="copyright_title" msgid="3847703367689932190">"Avtorska pravica"</string>
<string name="license_title" msgid="7582145947873528540">"Licenca"</string>
<string name="terms_title" msgid="1804549588198223771">"Določila in pogoji"</string>
@@ -1866,7 +1868,7 @@
<string name="disable_text" msgid="5065834603951474397">"Onemogoči"</string>
<string name="enable_text" msgid="7179141636849225884">"Omogoči"</string>
<string name="clear_user_data_text" msgid="8894073247302821764">"Počisti shrambo"</string>
- <string name="app_factory_reset" msgid="8718986000278776272">"Odstrani posodobitve"</string>
+ <string name="app_factory_reset" msgid="8718986000278776272">"Odmesti posodobitve"</string>
<string name="auto_launch_enable_text" msgid="3372898942144027341">"Izbrali ste, da se bo pri nekaterih dejanjih ta aplikacija samodejno zagnala."</string>
<string name="always_allow_bind_appwidgets_text" msgid="2286211654774611037">"Aplikaciji dovolite, da ustvari pripomočke in dostopa do njihovih podatkov."</string>
<string name="auto_launch_disable_text" msgid="8560921288036801416">"Ni privzetih nastavitev."</string>
@@ -2135,9 +2137,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Vibriranje pri obvestilih"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Vibriranje pri zvonjenju"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Vibriranje ob dotiku"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Uporaba storitve"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Uporaba popravljanja barv"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Uporaba podnapisov"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Uporaba storitve"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Uporaba popravljanja barv"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Uporaba podnapisov"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Naprej"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Slušni pripomočki"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Noben slušni pripomoček ni povezan"</string>
@@ -2334,8 +2336,8 @@
<string name="battery_tip_smart_battery_title" product="device" msgid="7419448992583346364">"Izboljšajte čas delovanja akumulatorja naprave"</string>
<string name="battery_tip_smart_battery_summary" msgid="5344821856478265778">"Vklopite varčevanje z energijo akumulatorja"</string>
<string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"Vklop varčevanja z energijo akumulatorja"</string>
- <string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Akumulator se bo morda izpraznil prej kot običajno"</string>
- <string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"Varčevanje z energijo akumulatorja je vklopljeno"</string>
+ <string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Baterija se lahko izprazni prej kot običajno"</string>
+ <string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"Varčevanje z energijo baterije je vklopljeno"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"Nekatere funkcije bodo morda omejene"</string>
<string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Telefon uporabljate več kot običajno"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"Tablični računalnik uporabljate več kot običajno"</string>
@@ -2531,7 +2533,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Vklop"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Uporaba varčevanja z energijo akumulatorja"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Uporaba varčevanja z energijo baterije"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Samodejni vklop"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Nikoli"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"pri <xliff:g id="PERCENT">%1$s</xliff:g> napolnjenosti akumulatorja"</string>
@@ -3220,7 +3222,7 @@
<string name="alarm_volume_option_title" msgid="3184076022438477047">"Glasnost alarma"</string>
<string name="ring_volume_option_title" msgid="2038924918468372264">"Glasnost zvonjenja"</string>
<string name="notification_volume_option_title" msgid="1358512611511348260">"Glasnost obvestila"</string>
- <string name="ringtone_title" msgid="1409086028485922583">"Melodija zvonjenja telefona"</string>
+ <string name="ringtone_title" msgid="1409086028485922583">"Ton zvonjenja telefona"</string>
<string name="notification_ringtone_title" msgid="2932960620843976285">"Privzeti zvok obvestila"</string>
<string name="notification_unknown_sound_title" msgid="8043718667804838398">"Zvok iz aplikacije"</string>
<string name="notification_sound_default" msgid="2664544380802426260">"Privzeti zvok obvestila"</string>
@@ -3229,7 +3231,7 @@
<string name="other_sound_settings" msgid="5250376066099818676">"Drugi zvoki"</string>
<string name="dial_pad_tones_title" msgid="8877212139988655769">"Toni tipkovnice"</string>
<string name="screen_locking_sounds_title" msgid="4407110895465866809">"Zvoki ob zaklepanju zaslona"</string>
- <string name="charging_sounds_title" msgid="5070437987230894287">"Zvoki in vibrir. ob polnjenju"</string>
+ <string name="charging_sounds_title" msgid="5070437987230894287">"Zvoki in vibriranje ob polnjenju"</string>
<string name="docking_sounds_title" msgid="2573137471605541366">"Zvok ob odlaganju v nosilec"</string>
<string name="touch_sounds_title" msgid="165237488496165652">"Zvoki dotikov"</string>
<string name="vibrate_on_touch_title" msgid="6360155469279157684">"Vibriranje ob dotiku"</string>
@@ -3517,7 +3519,7 @@
<string name="notification_badge_title" msgid="8989086619255666442">"Dovoli obvestilno piko"</string>
<string name="notification_channel_badge_title" msgid="8228215248332054612">"Pokaži obvestilno piko"</string>
<string name="app_notification_override_dnd_title" msgid="1757042206738172601">"Preglasitev načina »Ne moti«"</string>
- <string name="app_notification_override_dnd_summary" msgid="3152957611171210980">"Dovoli prikazovanje teh obvestil tudi, ko je vklopljen način »ne moti«"</string>
+ <string name="app_notification_override_dnd_summary" msgid="3152957611171210980">"Dovoli prikazovanje teh obvestil tudi, ko je vklopljen način »Ne moti«"</string>
<string name="app_notification_visibility_override_title" msgid="2349335170165637672">"Na zaklenjenem zaslonu"</string>
<string name="app_notification_row_banned" msgid="2079325338122151677">"Blokirano"</string>
<string name="app_notification_row_priority" msgid="432299064888787236">"Prednost"</string>
@@ -3922,13 +3924,13 @@
<string name="system_alert_window_apps_title" msgid="9188448296493699566">"Aplikacije"</string>
<string name="system_alert_window_access_title" msgid="5187343732185369675">"Prekrivanje drugih aplikacij"</string>
<string name="permit_draw_overlay" msgid="9039092257052422344">"Dovoli prekrivanje drugih aplikacij"</string>
- <string name="allow_overlay_description" msgid="6669524816705082807">"Omogočite tej aplikaciji, da prekrije druge aplikacije, ki jih uporabljate. To lahko vpliva na uporabo teh aplikacij ali spremeni njihov običajen videz ali delovanje."</string>
+ <string name="allow_overlay_description" msgid="6669524816705082807">"Omogočite tej aplikaciji, da na zaslonu prekrije druge aplikacije, ki jih uporabljate. To lahko vpliva na uporabo teh aplikacij ali spremeni njihov običajen videz ali delovanje."</string>
<string name="keywords_vr_listener" msgid="5312633527788917750">"vr navidezna resničnost poslušalec stereo storitev za pomoč"</string>
<string name="keywords_system_alert_window" msgid="3936658600272194599">"sistemsko opozorilo pogovorno okno prikaz s prekrivanjem drugih aplikacij"</string>
<string name="overlay_settings" msgid="3325154759946433666">"Prekrivanje drugih aplikacij"</string>
<string name="system_alert_window_summary" msgid="7703582115861844158">"<xliff:g id="COUNT_0">%1$d</xliff:g> od <xliff:g id="COUNT_1">%2$d</xliff:g> aplikacij, ki lahko prekrivajo druge aplikacije"</string>
<string name="filter_overlay_apps" msgid="6336897660213304743">"Aplikacije z dovoljenjem"</string>
- <string name="app_permission_summary_allowed" msgid="6458476982015518778">"Dovoljene"</string>
+ <string name="app_permission_summary_allowed" msgid="6458476982015518778">"Dovoljeno"</string>
<string name="app_permission_summary_not_allowed" msgid="1171642541675462584">"Ni dovoljeno"</string>
<string name="keywords_install_other_apps" msgid="5383559540695847668">"nameščanje aplikacij neznani viri"</string>
<string name="write_settings" msgid="9009040811145552108">"Spreminjanje sist. nastavitev"</string>
@@ -4013,7 +4015,7 @@
<string name="condition_zen_title" msgid="2128184708916052585">"Način »ne moti« je vklopljen"</string>
<string name="condition_zen_summary_phone_muted" msgid="4396050395522974654">"Zvok telefona je izklopljen"</string>
<string name="condition_zen_summary_with_exceptions" msgid="3435216391993785818">"Z izjemami"</string>
- <string name="condition_battery_title" msgid="6704870010912986274">"Varč. z energijo akum. je vkl."</string>
+ <string name="condition_battery_title" msgid="6704870010912986274">"Varč. z energijo bat. je vkl."</string>
<string name="condition_battery_summary" msgid="1236078243905690620">"Funkcije so omejene"</string>
<string name="condition_cellular_title" msgid="6605277435894307935">"Mobilni podatki so izklopljeni"</string>
<string name="condition_cellular_summary" msgid="3607459310548343777">"Dostop do interneta je na voljo le prek omrežja Wi‑Fi"</string>
@@ -4070,7 +4072,7 @@
<string name="app_usage_cycle" msgid="213483325132959663">"Cikel porabe podatkov aplikacije"</string>
<string name="cell_data_warning" msgid="8902740337286652689">"Opozorilo ob preneseni količini podatkov <xliff:g id="ID_1">^1</xliff:g>"</string>
<string name="cell_data_limit" msgid="3175933829235314233">"Omejitev prenosa podatkov pri <xliff:g id="ID_1">^1</xliff:g>"</string>
- <string name="cell_data_warning_and_limit" msgid="3846150001253927594">"Opozorilo ob preneseni količini podatkov <xliff:g id="ID_1">^1</xliff:g>/omejitev prenosa podatkov pri <xliff:g id="ID_2">^2</xliff:g>"</string>
+ <string name="cell_data_warning_and_limit" msgid="3846150001253927594">"Opozorilo pri <xliff:g id="ID_1">^1</xliff:g> prenesenih podatkov/omejitev prenosa podatkov pri <xliff:g id="ID_2">^2</xliff:g>"</string>
<string name="billing_cycle_fragment_summary" msgid="4926047002107855543">"Mesečno na dan <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="network_restrictions" msgid="196294262243618198">"Omejitve omrežja"</string>
<plurals name="network_restrictions_summary" formatted="false" msgid="1664494781594839837">
@@ -4140,7 +4142,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Če je naprava zaklenjena, prepreči vnašanje odgovorov ali drugega besedila v obvestilih"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Privzeti črkovalnik"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Izbira črkovalnika"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Uporaba črkovalnika"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Uporaba črkovalnika"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Ni izbrano"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(brez)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4241,7 +4243,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Upravitelj shrambe vam pomaga sprostiti prostor za shranjevanje, tako da iz naprave odstrani varnostno kopirane fotografije in videoposnetke."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Odstranjevanje fotografij in videoposnetkov"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Upravitelj shrambe"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Uporaba upravitelja shrambe"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Uporaba upravitelja shrambe"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Samodejno"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Ročno"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Sprostitev prostora"</string>
@@ -4463,7 +4465,7 @@
<string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"Tej aplikaciji omogočite, da upravlja povezavo Wi-Fi"</string>
<string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Tej aplikacij omogočite, da vklopi ali izklopi povezavo Wi-Fi, išče omrežja Wi-Fi in se z njimi poveže, doda ali odstrani omrežja ali pa zažene lokalno dostopno točko"</string>
<string name="media_output_title" msgid="8710632337456601848">"Predvajaj predstavnost v"</string>
- <string name="media_output_default_summary" msgid="3159237976830415584">"ta naprava"</string>
+ <string name="media_output_default_summary" msgid="3159237976830415584">"Ta naprava"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"Telefon"</string>
<string name="media_output_summary" product="tablet" msgid="6672024060360538526">"Tablični računalnik"</string>
<string name="media_output_summary" product="device" msgid="5132223072593052660">"Naprava"</string>
diff --git a/tests/CarDeveloperOptions/res/values-sq/arrays.xml b/tests/CarDeveloperOptions/res/values-sq/arrays.xml
index 11c7d80..96b8e7e 100644
--- a/tests/CarDeveloperOptions/res/values-sq/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-sq/arrays.xml
@@ -29,8 +29,25 @@
<item msgid="5194868215515664953">"Oqeani Paqësor"</item>
<item msgid="7044520255415007865">"Të gjitha"</item>
</string-array>
- <!-- no translation found for screen_timeout_entries:0 (8596143519087753804) -->
- <!-- no translation found for dream_timeout_entries:7 (8271452751594598661) -->
+ <string-array name="screen_timeout_entries">
+ <item msgid="8596143519087753804">"15 sekonda"</item>
+ <item msgid="772029947136115322">"30 sekonda"</item>
+ <item msgid="8743663928349474087">"1 minutë"</item>
+ <item msgid="1506508631223164814">"2 minuta"</item>
+ <item msgid="8664703938127907662">"5 min."</item>
+ <item msgid="5827960506924849753">"10 min."</item>
+ <item msgid="6677424950124253938">"30 min."</item>
+ </string-array>
+ <string-array name="dream_timeout_entries">
+ <item msgid="6487043225269853023">"Asnjëherë"</item>
+ <item msgid="2517785806387977252">"15 sek."</item>
+ <item msgid="6347954399441173672">"30 sekonda"</item>
+ <item msgid="4858305253279921789">"1 minutë"</item>
+ <item msgid="8109273437140044073">"2 minuta"</item>
+ <item msgid="2788593551142462622">"5 min."</item>
+ <item msgid="8012672183888404961">"10 min."</item>
+ <item msgid="8271452751594598661">"30 minuta"</item>
+ </string-array>
<string-array name="lock_after_timeout_entries">
<item msgid="2232921187970351881">"Menjëherë"</item>
<item msgid="2038544972632026612">"5 sek."</item>
@@ -42,17 +59,47 @@
<item msgid="811192536981678974">"10 min."</item>
<item msgid="7258394417241706272">"30 min."</item>
</string-array>
- <!-- no translation found for entries_font_size:0 (2340391964816059553) -->
- <!-- no translation found for entries_font_size:0 (6490061470416867723) -->
- <!-- no translation found for entries_font_size:2 (1714184661981538355) -->
- <!-- no translation found for entries_font_size:2 (1678068858001018666) -->
- <!-- no translation found for wifi_status:3 (5848277343965362748) -->
- <!-- no translation found for wifi_status_with_ssid:1 (6816207058895999545) -->
- <!-- no translation found for wifi_status_with_ssid:3 (7547609081339573756) -->
- <!-- no translation found for wifi_status_with_ssid:4 (5145158315060185414) -->
+ <string-array name="entries_font_size">
+ <item msgid="2340391964816059553">"I vogël"</item>
+ <item msgid="591935967183159581">"E parazgjedhur"</item>
+ <item msgid="1714184661981538355">"I madh"</item>
+ <item msgid="6195563047686707484">"Më i madhi"</item>
+ </string-array>
+ <string-array name="wifi_status">
+ <item msgid="1304883790721412351"></item>
+ <item msgid="4157625910392775808">"Po skanon..."</item>
+ <item msgid="5597394826455877834">"Po lidhet..."</item>
+ <item msgid="5848277343965362748">"Po vërtetohet…"</item>
+ <item msgid="3391238031431440676">"Po merr adresën IP…"</item>
+ <item msgid="5257597310494000224">"Lidhur"</item>
+ <item msgid="8472497592913050396">"I pezulluar"</item>
+ <item msgid="1228072488815999109">"Po shkëputet..."</item>
+ <item msgid="7253087004422991731">"I shkëputur"</item>
+ <item msgid="4169850917304751227">"Pa sukses"</item>
+ <item msgid="6266658166690831131">"I bllokuar"</item>
+ <item msgid="4517230805854909775">"Po shmang përkohësisht lidhje të dobët"</item>
+ </string-array>
+ <string-array name="wifi_status_with_ssid">
+ <item msgid="4853670665485437464"></item>
+ <item msgid="6816207058895999545">"Po skanon…"</item>
+ <item msgid="8058143476674427024">"Po lidhet me <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
+ <item msgid="7547609081339573756">"Po kryen vërtetimin me <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
+ <item msgid="5145158315060185414">"Po merr adresën IP nga <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
+ <item msgid="3283243151651124831">"I lidhur me <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</item>
+ <item msgid="6600156231416890902">"I pezulluar"</item>
+ <item msgid="4133290864821295785">"I shkëputur nga <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</item>
+ <item msgid="3980154971187953257">"I shkëputur"</item>
+ <item msgid="2847316776634969068">"Pa sukses"</item>
+ <item msgid="4390990424746035383">"I bllokuar"</item>
+ <item msgid="3618248791367063949">"Përkohësisht duke shmangur një lidhje të dobët"</item>
+ </string-array>
<!-- no translation found for wifi_tether_security:0 (5586343370515598801) -->
<!-- no translation found for wifi_tether_security:1 (6136336549994615745) -->
- <!-- no translation found for wifi_p2p_wps_setup:0 (5390235347963255303) -->
+ <string-array name="wifi_p2p_wps_setup">
+ <item msgid="5390235347963255303">"Butoni me shtypje"</item>
+ <item msgid="7401896200768713930">"Kodi PIN nga pajisja homologe"</item>
+ <item msgid="4526848028011846710">"PIN-i nga pajisja"</item>
+ </string-array>
<string-array name="wifi_p2p_status">
<item msgid="8741947238021758201">"Lidhur"</item>
<item msgid="983792611851499732">"I ftuar"</item>
@@ -60,7 +107,12 @@
<item msgid="4646663015449312554">"Në shitje"</item>
<item msgid="3230556734162006146">"Jashtë rrezes"</item>
</string-array>
- <!-- no translation found for bluetooth_visibility_timeout_entries:1 (2759776603549270587) -->
+ <string-array name="bluetooth_visibility_timeout_entries">
+ <item msgid="8247986727324120082">"2 minuta"</item>
+ <item msgid="2759776603549270587">"5 minuta"</item>
+ <item msgid="167772676068860015">"1 orë"</item>
+ <item msgid="5985477119043628504">"Skadim të kohës së veprimit, asnjëherë!"</item>
+ </string-array>
<string-array name="bluetooth_max_connected_audio_devices">
<item msgid="3800257971619063588">"Përdor parazgjedhjen e sistemit: <xliff:g id="DEFAULT_BLUETOOTH_MAX_CONNECTED_AUDIO_DEVICES">%1$d</xliff:g>"</item>
<item msgid="8572230405241423895">"1"</item>
@@ -69,8 +121,13 @@
<item msgid="1644506614010085798">"4"</item>
<item msgid="3132506679404897150">"5"</item>
</string-array>
- <!-- no translation found for wifi_signal:1 (7882129634982603782) -->
- <!-- no translation found for wifi_signal:4 (999948812884919584) -->
+ <string-array name="wifi_signal">
+ <item msgid="1709949377823900951">"I dobët"</item>
+ <item msgid="7882129634982603782">"I dobët"</item>
+ <item msgid="6457357501905996224">"Pak i dobët"</item>
+ <item msgid="405271628162918841">"I mirë"</item>
+ <item msgid="999948812884919584">"I shkëlqyer"</item>
+ </string-array>
<string-array name="data_usage_data_range">
<item msgid="8986775481492954015">"30 ditët e fundit"</item>
<item msgid="3211287705232736964">"Cakto ciklin e përdorimit..."</item>
@@ -106,7 +163,10 @@
<item msgid="7330627471456865502">"MSCHAPV2"</item>
<item msgid="6255179395132581882">"GTC"</item>
</string-array>
- <!-- no translation found for wifi_ip_settings:1 (4377002609760712163) -->
+ <string-array name="wifi_ip_settings">
+ <item msgid="2717196390555072244">"DHCP"</item>
+ <item msgid="4377002609760712163">"Statike"</item>
+ </string-array>
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"Asnjë"</item>
<item msgid="1464741437353223198">"Manuale"</item>
@@ -226,11 +286,73 @@
<item msgid="1165623660533024666">"ekzekuto në sfond"</item>
<item msgid="6423861043647911030">"volumi i qasshmërisë"</item>
</string-array>
- <!-- no translation found for app_ops_labels:3 (7836406246005211990) -->
- <!-- no translation found for app_ops_labels:4 (3951439024549922598) -->
- <!-- no translation found for app_ops_labels:8 (3597797992398484655) -->
- <!-- no translation found for app_ops_labels:20 (3037159047591081136) -->
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Vendndodhja"</item>
+ <item msgid="6656077694190491067">"Vendndodhja"</item>
+ <item msgid="8790228218278477369">"Vendndodhja"</item>
+ <item msgid="7836406246005211990">"Dridhje"</item>
+ <item msgid="3951439024549922598">"Lexo kontaktet"</item>
+ <item msgid="8802152411647068">"Modifiko kontaktet"</item>
+ <item msgid="229544934599698735">"Lexo ditarin e telefonatave"</item>
+ <item msgid="7396102294405899613">"Modifiko ditarin e telefonatave"</item>
+ <item msgid="3597797992398484655">"Lexo kalendarin"</item>
+ <item msgid="2705975774250907343">"Modifiko kalendarin"</item>
+ <item msgid="4668747371441932697">"Vendndodhja"</item>
+ <item msgid="1487578921720243646">"Posto njoftimin"</item>
+ <item msgid="4636080349724146638">"Vendndodhja"</item>
+ <item msgid="673510900286463926">"Telefono telefonin"</item>
+ <item msgid="542083422784609790">"Lexo SMS/MMS"</item>
+ <item msgid="1033780373029588436">"Shkruaj SMS/MMS"</item>
+ <item msgid="5647111115517787488">"Prano SMS/MMS"</item>
+ <item msgid="8591105601108455893">"Merr SMS/MMS"</item>
+ <item msgid="7730995008517841903">"Merr SMS/MMS"</item>
+ <item msgid="2613033109026626086">"Merr SMS/MMS"</item>
+ <item msgid="3037159047591081136">"Dërgo SMS/MMS"</item>
+ <item msgid="4726682243833913568">"Lexo SMS/MMS"</item>
+ <item msgid="6555678522277865572">"Shkruaj SMS/MMS"</item>
+ <item msgid="6981734935578130884">"Modifiko cilësimet"</item>
+ <item msgid="8705854389991425629">"Vizato sipër"</item>
+ <item msgid="5861356020344153651">"Qasu te njoftimet"</item>
+ <item msgid="78432174621628659">"Kamera"</item>
+ <item msgid="3986116419882154794">"Regjistro audio"</item>
+ <item msgid="4516840825756409490">"Luaj audio"</item>
+ <item msgid="6811712502798183957">"Lexo memorien e fragmenteve"</item>
+ <item msgid="2780369012602289114">"Modifiko memorien e fragmenteve"</item>
+ <item msgid="2331359440170850868">"Butonat e \"medias\""</item>
+ <item msgid="6133599737122751231">"Përqendrimi i audios"</item>
+ <item msgid="6844485713404805301">"Kontrollo volumin"</item>
+ <item msgid="1600379420669104929">"Volumi i zërit"</item>
+ <item msgid="6296768210470214866">"Volumi i ziles"</item>
+ <item msgid="510690696071629241">"Volumi i medias"</item>
+ <item msgid="406861638631430109">"Volumi i alarmit"</item>
+ <item msgid="4715864795872233884">"Volumi i njoftimit"</item>
+ <item msgid="2311478519251301183">"Volumi i \"Bluetooth-it\""</item>
+ <item msgid="5133991377896747027">"Mbaje të zgjuar"</item>
+ <item msgid="2464189519136248621">"Vendndodhja"</item>
+ <item msgid="2062677934050803037">"Vendndodhja"</item>
+ <item msgid="1735171933192715957">"Gjej statistika të përdorimit"</item>
+ <item msgid="1014093788778383554">"Çaktivizo/aktivizo mikrofonin"</item>
+ <item msgid="4199297950608622850">"Shfaq kodin toast"</item>
+ <item msgid="2527962435313398821">"Projekto median"</item>
+ <item msgid="5117506254221861929">"Aktivizo rrjetin VPN"</item>
+ <item msgid="8291198322681891160">"Shkruaj në imazhin e sfondit"</item>
+ <item msgid="7106921284621230961">"Ndihmo strukturën"</item>
+ <item msgid="4496533640894624799">"Ndihmo pamjen e ekranit"</item>
+ <item msgid="2598847264853993611">"Lexo gjendjen e telefonit"</item>
+ <item msgid="9215610846802973353">"Shto postë zanore"</item>
+ <item msgid="9186411956086478261">"Përdor kodin sip"</item>
+ <item msgid="6884763100104539558">"Përpuno thirrjen dalëse"</item>
+ <item msgid="125513972170580692">"Gjurma e gishtit"</item>
+ <item msgid="2556071024281275619">"Sensorët e trupit"</item>
+ <item msgid="617168514928339387">"Lexo transmetimet celulare"</item>
+ <item msgid="7134693570516523585">"Vendndodhja e simuluar"</item>
+ <item msgid="7224489175375229399">"Lexo hapësirën ruajtëse"</item>
+ <item msgid="8472735063903258202">"Shkruaj hapësirën ruajtëse"</item>
+ <item msgid="4069276819909595110">"Ndiz ekranin"</item>
+ <item msgid="1228338896751121025">"Merr llogaritë"</item>
+ <item msgid="3181581793459233672">"Ekzekuto në sfond"</item>
+ <item msgid="2340936043025374076">"Volumi i qasshmërisë"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"E shkurtër"</item>
<item msgid="4816511817309094890">"Mesatare"</item>
@@ -247,15 +369,35 @@
<item msgid="4627069151979553527">"I pjerrët"</item>
<item msgid="6896773537705206194">"Shkronja të mëdha të minimizuara"</item>
</string-array>
- <!-- no translation found for captioning_font_size_selector_titles:3 (2784236342175159295) -->
- <!-- no translation found for captioning_edge_type_selector_titles:4 (8019330250538856521) -->
+ <string-array name="captioning_font_size_selector_titles">
+ <item msgid="1680223634161592855">"Shumë e vogël"</item>
+ <item msgid="5091603983404027034">"E vogël"</item>
+ <item msgid="176844712416932112">"Normale"</item>
+ <item msgid="2784236342175159295">"I madh"</item>
+ <item msgid="218913203203160606">"Shumë e madhe"</item>
+ </string-array>
+ <string-array name="captioning_edge_type_selector_titles">
+ <item msgid="3865198759294188069">"E parazgjedhur"</item>
+ <item msgid="6488643537808152001">"Asnjë"</item>
+ <item msgid="552332815156010137">"Kontur"</item>
+ <item msgid="7187891159463789272">"Me hijezim"</item>
+ <item msgid="8019330250538856521">"I ngritur"</item>
+ <item msgid="8987385315647049787">"I ulur"</item>
+ </string-array>
<string-array name="captioning_opacity_selector_titles">
<item msgid="313003243371588365">"25%"</item>
<item msgid="4665048002584838262">"50%"</item>
<item msgid="1874668269931014581">"75%"</item>
<item msgid="6462911487571123954">"100%"</item>
</string-array>
- <!-- no translation found for captioning_preset_selector_titles:2 (5891360837786277638) -->
+ <string-array name="captioning_preset_selector_titles">
+ <item msgid="326819345272910536">"E parazgjedhur"</item>
+ <item msgid="8611890312638868524">"E bardhë mbi të zezë"</item>
+ <item msgid="5891360837786277638">"E zezë mbi të bardhë"</item>
+ <item msgid="2798457065945456853">"E verdhë mbi të zezë"</item>
+ <item msgid="5799049811524553967">"E verdhë mbi të kaltër"</item>
+ <item msgid="3673930830658169860">"Personalizo"</item>
+ </string-array>
<string-array name="vpn_types_long">
<item msgid="6566768880689730097">"VPN PPTP"</item>
<item msgid="1349760781118368659">"Rrjeti VPN L2TP/IPSec me çelësat e ndarë paraprakisht"</item>
@@ -264,16 +406,36 @@
<item msgid="3319427315593649917">"Rrjeti VPN IPSec me certifikata dhe me verifikimin Xauth"</item>
<item msgid="8258927774145391041">"Rrjeti VPN IPSec me certifikata dhe me vërtetim hibrid"</item>
</string-array>
- <!-- no translation found for vpn_proxy_settings:0 (2958623927055120839) -->
- <!-- no translation found for vpn_states:4 (9135049670787351881) -->
+ <string-array name="vpn_proxy_settings">
+ <item msgid="2958623927055120839">"Asnjë"</item>
+ <item msgid="1157046369795346308">"Manuale"</item>
+ </string-array>
+ <string-array name="vpn_states">
+ <item msgid="5408915841694583740">"I shkëputur"</item>
+ <item msgid="8754480102834556765">"Po fillon..."</item>
+ <item msgid="3351334355574270250">"Po lidhet..."</item>
+ <item msgid="8303882153995748352">"Lidhur"</item>
+ <item msgid="9135049670787351881">"Koha e pritjes"</item>
+ <item msgid="2124868417182583926">"Pa sukses"</item>
+ </string-array>
<string-array name="security_settings_premium_sms_values">
<item msgid="1164265643455394443">"Pyet"</item>
<item msgid="7718817231348607934">"Mos lejo asnjëherë"</item>
<item msgid="8184570120217958741">"Lejo gjithmonë"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normale"</item>
+ <item msgid="5101233285497327432">"E moderuar"</item>
+ <item msgid="1555861583162930714">"I ulët"</item>
+ <item msgid="1719683776264798117">"Kritik"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normale"</item>
+ <item msgid="6107138933849816768">"E moderuar"</item>
+ <item msgid="182695359839047859">"I ulët"</item>
+ <item msgid="8577246509202964244">"Kritike"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Pa ndalim"</item>
<item msgid="167418068739176448">"Aktiviteti kryesor"</item>
diff --git a/tests/CarDeveloperOptions/res/values-sq/strings.xml b/tests/CarDeveloperOptions/res/values-sq/strings.xml
index 8583d20..5fa9a91 100644
--- a/tests/CarDeveloperOptions/res/values-sq/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-sq/strings.xml
@@ -23,8 +23,8 @@
<string name="deny" msgid="3998166389989144025">"Refuzo"</string>
<string name="device_info_default" msgid="1548919563979154348">"I panjohur"</string>
<plurals name="show_dev_countdown" formatted="false" msgid="3953785659137161981">
- <item quantity="other">Tani je <xliff:g id="STEP_COUNT_1">%1$d</xliff:g> hapa larg të qenët programues.</item>
- <item quantity="one">Tani je <xliff:g id="STEP_COUNT_0">%1$d</xliff:g> hap larg të qenët programues.</item>
+ <item quantity="other">Tani të duhen edhe <xliff:g id="STEP_COUNT_1">%1$d</xliff:g> hapa për t\'u bërë zhvillues.</item>
+ <item quantity="one">Tani të duhet edhe <xliff:g id="STEP_COUNT_0">%1$d</xliff:g> hap për t\'u bërë zhvillues.</item>
</plurals>
<string name="show_dev_on" msgid="9075712234786224065">"Tani je zhvillues!"</string>
<string name="show_dev_already" msgid="7665948832405148689">"Nuk ka nevojë, ti je programues tashmë!"</string>
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Bëje tekstin në ekran më të vogël ose më të madh."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Zvogëlo"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Zmadho"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Teksti shembull"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Magjistari i mrekullueshëm i Ozit"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Kapitulli 11: Qyteti i mrekullueshëm i smeraldtë i Ozit"</string>
@@ -294,7 +293,7 @@
<string name="okay" msgid="5838476766924989056">"Në rregull"</string>
<string name="forget" msgid="7735525146062672874">"Harro"</string>
<string name="save" msgid="3418211178410498517">"Ruaj"</string>
- <string name="done" msgid="5143229467535372339">"U krye!"</string>
+ <string name="done" msgid="5143229467535372339">"U krye"</string>
<string name="apply" msgid="951230399613164126">"Zbato"</string>
<string name="share" msgid="3567029787293158575">"Ndaj"</string>
<string name="add" msgid="903114118076816060">"Shto"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Inform. i profilit"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Llogaritë"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Vendndodhja"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Përdor vendndodhjen"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Përdor vendndodhjen"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Joaktiv"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Aktive - <xliff:g id="COUNT_1">%1$d</xliff:g> aplikacione mund të kenë qasje te vendndodhja</item>
@@ -419,7 +418,7 @@
<string name="security_settings_face_enroll_done" msgid="5409739233373490971">"U krye"</string>
<string name="security_settings_face_settings_use_face_category" msgid="1586532139528115416">"Përdor fytyrën për"</string>
<string name="security_settings_face_settings_use_face_unlock_phone" msgid="318274519126401671">"Shkyçja e pajisjes"</string>
- <string name="security_settings_face_settings_use_face_for_apps" msgid="5479369083370664351">"Identifikimi dhe pagesat e aplikacionit"</string>
+ <string name="security_settings_face_settings_use_face_for_apps" msgid="5479369083370664351">"Identifikim në aplikacion dhe pagesa"</string>
<string name="security_settings_face_settings_require_attention" msgid="2755140150841557225">"Hap sytë për të shkyçur"</string>
<string name="security_settings_face_settings_require_attention_details" msgid="2557060433599942587">"Kur përdor vërtetimin me fytyrë, sytë duhet të jenë të hapur"</string>
<string name="security_settings_face_settings_require_confirmation" msgid="7312024271060416438">"Kërko gjithmonë konfirmimin"</string>
@@ -596,7 +595,7 @@
<string name="unlock_disable_lock_title" msgid="3508492427073600294">"Çakt. kyçjen e ekranit"</string>
<string name="unlock_disable_frp_warning_title" msgid="5858589970505254193">"Të hiqet mbrojtja e pajisjes?"</string>
<string name="unlock_disable_frp_warning_title_profile" msgid="3814123014295965266">"Të hiqet mbrojtja e profilit?"</string>
- <string name="unlock_disable_frp_warning_content_pattern" msgid="1843950215687159135">"Funksionet e mbrojtjes së pajisjes nuk do të funksionojnë pa motivin tënd."</string>
+ <string name="unlock_disable_frp_warning_content_pattern" msgid="1843950215687159135">"Veçoritë e mbrojtjes së pajisjes nuk do të funksionojnë pa motivin tënd."</string>
<string name="unlock_disable_frp_warning_content_pattern_fingerprint" msgid="8846957650251741548">"Funksionet e mbrojtjes së pajisjes nuk do të funksionojnë pa motivin tënd.<xliff:g id="EMPTY_LINE">
</xliff:g>Gjurmët e gishtave të ruajtura do të hiqen nga kjo pajisje dhe nuk do të jesh në gjendje të shkyçësh telefonin, të autorizosh blerjet apo të identifikohesh në aplikacione me to."</string>
@@ -809,7 +808,7 @@
<string name="wifi_display_details" msgid="6379855523460749126">"Shfaq cilësimet"</string>
<string name="wifi_display_options_title" msgid="4587264519668872213">"Opsionet e shfaqjes së Wi-Fi"</string>
<string name="wifi_display_options_forget" msgid="7882982544626742073">"Harro"</string>
- <string name="wifi_display_options_done" msgid="5922060890309265817">"U krye!"</string>
+ <string name="wifi_display_options_done" msgid="5922060890309265817">"U krye"</string>
<string name="wifi_display_options_name" msgid="8477627781133827607">"Emri"</string>
<string name="wifi_band_24ghz" msgid="2973143764653628618">"2,4 GHz"</string>
<string name="wifi_band_5ghz" msgid="6469832209748522207">"5 GHz"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Aktivizo Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Përdor Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Përdor Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Cilësimet e Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Cakto dhe menaxho zonat e qasjes të rrjetit me valë"</string>
@@ -850,7 +849,7 @@
<string name="wifi_notify_open_networks" msgid="4782239203624619655">"Hap njoftimin e rrjetit"</string>
<string name="wifi_notify_open_networks_summary" msgid="1383681260705466715">"Njofto kur ofrohet një rrjet publik me cilësi të lartë"</string>
<string name="wifi_wakeup" msgid="4963732992164721548">"Aktivizo automatikisht Wi‑Fi"</string>
- <string name="wifi_wakeup_summary" msgid="1152699417411690">"Wi-Fi do të aktivizohet përsëri në afërsi të rrjeteve të ruajtura me cilësi të lartë, si p.sh. rrjetin e shtëpisë"</string>
+ <string name="wifi_wakeup_summary" msgid="1152699417411690">"Wi-Fi do të aktivizohet përsëri në afërsi të rrjeteve të ruajtura me cilësi të lartë, si p.sh. rrjeti i shtëpisë"</string>
<string name="wifi_wakeup_summary_no_location" msgid="3007457288587966962">"Nuk ofrohet sepse vendndodhja është e çaktivizuar. Aktivizo "<annotation id="link">"vendndodhjen"</annotation>"."</string>
<string name="wifi_wakeup_summary_scanning_disabled" msgid="6820040651529910914">"Nuk ofrohet sepse skanimi i Wi-Fi është çaktivizuar"</string>
<string name="wifi_wakeup_summary_scoring_disabled" msgid="7067018832237903151">"Për ta përdorur, zgjidh një ofrues të vlerësimit të rrjetit"</string>
@@ -906,7 +905,7 @@
<string name="wifi_ssid_hint" msgid="5010024648106585165">"Fut SSID-në"</string>
<string name="wifi_security" msgid="9136702039496152831">"Siguria"</string>
<string name="wifi_hidden_network" msgid="6647772204699776833">"Rrjet i fshehur"</string>
- <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Nëse rrugëzuesi nuk po transmeton një ID rrjeti, por dëshiron të lidhesh me të në të ardhmen, mund ta caktosh rrjetin si të fshehur.\n\nKjo mund të krijojë një rrezik për sigurinë pasi telefoni yt do të transmetojë rregullisht sinjalin e tij për të gjetur rrjetin.\n\nCaktimi i rrjetit si të fshehur nuk do të ndryshojë cilësimet e router-it."</string>
+ <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Nëse router-i nuk po transmeton një ID rrjeti, por dëshiron të lidhesh me të në të ardhmen, mund ta caktosh rrjetin si të fshehur.\n\nKjo mund të krijojë një rrezik për sigurinë pasi telefoni yt do të transmetojë rregullisht sinjalin e tij për të gjetur rrjetin.\n\nCaktimi i rrjetit si të fshehur nuk do të ndryshojë cilësimet e router-it."</string>
<string name="wifi_signal" msgid="696548364467704808">"Fuqia e sinjalit"</string>
<string name="wifi_status" msgid="3439931558930689940">"Statusi"</string>
<string name="tx_wifi_speed" msgid="2571810085003261073">"Shpejtësia e lidhjes së transmetimit"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Celular"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Nëse Wi‑Fi nuk ofrohet, përdor rrjetin celular"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Nëse rrjeti celular nuk ofrohet, përdor Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Telefono nëpërmjet Wi-Fi. Nëse humb Wi‑Fi, telefonata do të mbyllet."</string>
@@ -1123,7 +1125,7 @@
<string name="musicfx_title" msgid="6456079041566773649">"Efektet e muzikës"</string>
<string name="ring_volume_title" msgid="5874791723449821646">"Volumi i ziles"</string>
<string name="vibrate_in_silent_title" msgid="2314667015729841220">"Dridhje kur është \"në heshtje\""</string>
- <string name="notification_sound_title" msgid="6812164482799723931">"Zëri i parazgjedhur i njoftimit"</string>
+ <string name="notification_sound_title" msgid="6812164482799723931">"Tingulli i parazgjedhur i njoftimit"</string>
<string name="incoming_call_volume_title" msgid="4736570528754310450">"Toni i ziles"</string>
<string name="notification_volume_title" msgid="6022562909288085275">"Njoftimi"</string>
<string name="checkbox_notification_same_as_incoming_call" msgid="7312942422655861175">"Përdor volumin e telefonatës hyrëse për njoftime"</string>
@@ -1307,7 +1309,7 @@
<string name="pin_failed" msgid="4877356137480446727">"Operac. kodit PIN të kartës SIM dështoi!"</string>
<string name="system_update_settings_list_item_title" msgid="1907497454722790033">"Përditësimet e sistemit"</string>
<string name="system_update_settings_list_item_summary" msgid="3497456690691907873"></string>
- <string name="firmware_version" msgid="547095584029938749">"Versioni i Android-it"</string>
+ <string name="firmware_version" msgid="547095584029938749">"Versioni i Android"</string>
<string name="security_patch" msgid="483709031051932208">"Niveli i korrigjimit të sigurisë së Android"</string>
<string name="model_info" msgid="1729765474260797594">"Modeli"</string>
<string name="model_summary" msgid="8781425868254352168">"Modeli: %1$s"</string>
@@ -1942,9 +1944,9 @@
<string name="language_input_gesture_summary_on_with_assist" msgid="315262339899294132"></string>
<string name="language_input_gesture_summary_on_non_assist" msgid="6054599939153669225"></string>
<string name="language_input_gesture_summary_off" msgid="4108509077072348546"></string>
- <string name="language_settings" msgid="3551012802762495835">"Gjuhët dhe të dhënat"</string>
+ <string name="language_settings" msgid="3551012802762495835">"Gjuhët dhe metodat e hyrjes"</string>
<string name="language_empty_list_user_restricted" msgid="3837176532474949716">"Nuk ke leje të ndryshosh gjuhën e pajisjes."</string>
- <string name="language_keyboard_settings_title" msgid="2672573191605298938">"Gjuhët dhe të dhënat"</string>
+ <string name="language_keyboard_settings_title" msgid="2672573191605298938">"Gjuhët dhe metodat e hyrjes"</string>
<string name="input_assistance" msgid="6442646949054057707">"Veglat"</string>
<string name="keyboard_settings_category" msgid="5857591390023852850">"Tastiera dhe metodat e hyrjes"</string>
<string name="phone_language" msgid="8471728119195198790">"Gjuhët"</string>
@@ -2036,7 +2038,7 @@
<string name="accessibility_settings_title" msgid="1687226556576913576">"Cilësimet e qasjes"</string>
<string name="accessibility_settings_summary" msgid="5742379519336396561">"Lexues ekrani, ekran, kontrolle ndërveprimi"</string>
<string name="vision_settings_title" msgid="7315352351051423944">"Cilësimet e shikimit"</string>
- <string name="vision_settings_description" msgid="3476589459009287332">"Mund ta personalizosh këtë pajisje për t\'iu përshtatur nevojave të tua. Këto funksione të qasjes mund të ndryshohen më vonë te \"Cilësimet\"."</string>
+ <string name="vision_settings_description" msgid="3476589459009287332">"Mund ta personalizosh këtë pajisje për t\'iu përshtatur nevojave të tua. Këto veçori të qasshmërisë mund të ndryshohen më vonë te \"Cilësimet\"."</string>
<string name="vision_settings_suggestion_title" msgid="7268661419110951128">"Ndrysho madhësinë e shkrimit"</string>
<string name="screen_reader_category_title" msgid="6300714148519645544">"Lexuesit e ekranit"</string>
<string name="audio_and_captions_category_title" msgid="6140472938769619212">"Audioja dhe teksti në ekran"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Dridhjet e njoftimeve"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Dridhjet e ziles"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Dridhje për prekjen"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Përdor shërbimin"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Përdor korrigjimin e ngjyrave"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Përdor titrat"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Përdor shërbimin"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Përdor korrigjimin e ngjyrave"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Përdor titrat"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Vazhdo"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Aparatet e dëgjimit"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Nuk ka asnjë aparat dëgjimi të lidhur"</string>
@@ -2278,7 +2280,7 @@
<string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"Aktivizo \"Kursyesin e baterisë\""</string>
<string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Bateria mund të mbarojë më herët se zakonisht"</string>
<string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"\"Kursyesi i baterisë\" është i aktivizuar"</string>
- <string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"Disa funksione mund të jenë të kufizuara"</string>
+ <string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"Disa veçori mund të jenë të kufizuara"</string>
<string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Telefoni është përdorur më shumë se zakonisht"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"Tableti është përdorur më shumë se zakonisht"</string>
<string name="battery_tip_high_usage_title" product="device" msgid="8304138287288309490">"Pajisja është përdorur më shumë se zakonisht"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Aktivizo"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Përdor \"Kursyesin e baterisë\""</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Përdor \"Kursyesin e baterisë\""</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Aktivizim automatikisht"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Asnjëherë"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"me <xliff:g id="PERCENT">%1$s</xliff:g> bateri"</string>
@@ -2827,7 +2829,7 @@
<string name="backup_pw_cancel_button_text" msgid="6170984655621611957">"Anulo"</string>
<string name="additional_system_update_settings_list_item_title" msgid="8674710454802166341">"Përditësime të sistemit"</string>
<string name="ssl_ca_cert_warning" msgid="7794291734272626026">"Rrjeti mund të jetë i monitoruar"</string>
- <string name="done_button" msgid="7652373284597307008">"U krye!"</string>
+ <string name="done_button" msgid="7652373284597307008">"U krye"</string>
<plurals name="ssl_ca_cert_dialog_title" formatted="false" msgid="7323708984446517980">
<item quantity="other">Besoji ose hiqi certifikatat</item>
<item quantity="one">Besoje ose hiqe certifikatën</item>
@@ -2919,11 +2921,11 @@
<string name="nfc_payment_default_not_set" msgid="955804193510335338">"Nuk është caktuar"</string>
<string name="nfc_payment_app_and_desc" msgid="102312684211458190">"<xliff:g id="APP">%1$s</xliff:g> - <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
<string name="nfc_payment_use_default" msgid="3098724195746409476">"Përdor opsionin e parazgjedhur"</string>
- <string name="nfc_payment_favor_default" msgid="7555356982142464260">"Gjithmonë!"</string>
+ <string name="nfc_payment_favor_default" msgid="7555356982142464260">"Gjithmonë"</string>
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"Përveçse kur është i hapur një aplikacion tjetër pagese"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"Në terminalin \"Prek dhe paguaj\", paguaj me:"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"Pagesa në terminal"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Konfiguro një aplikacion pagese. Më pas thjesht mbaj shtypur pjesën e pasme të telefonit me një terminal me simbolin e pagesave pa kontakt."</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Konfiguro një aplikacion pagese. Më pas thjesht mbaje pjesën e pasme të telefonit te një terminal me simbolin e pagesave pa kontakt."</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"E kuptova!"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"Më shumë..."</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"Të caktohet si preferencë?"</string>
@@ -3005,7 +3007,7 @@
<string name="sim_editor_number" msgid="1757338150165234970">"Numri"</string>
<string name="sim_editor_color" msgid="373059962306191123">"Ngjyra e kartës SIM"</string>
<string name="sim_card_select_title" msgid="4925862525985187946">"Zgjidh kartën SIM"</string>
- <string name="color_orange" msgid="3159707916066563431">"portokalli"</string>
+ <string name="color_orange" msgid="3159707916066563431">"Portokalli"</string>
<string name="color_purple" msgid="4391440966734810713">"Vjollcë"</string>
<string name="sim_no_inserted_msg" msgid="1197884607569714609">"Nuk janë futur karta SIM"</string>
<string name="sim_status_title" msgid="4483653750844520871">"Statusi i kartës SIM"</string>
@@ -3042,7 +3044,7 @@
<string name="app_and_notification_dashboard_summary" msgid="4165181440955038145">"Asistenti, aplikacionet së fundi, aplikacionet e parazgjedhura"</string>
<string name="notification_settings_work_profile" msgid="7190550347842400029">"Qasja te njoftimet nuk ofrohet për aplikacionet në profilin e punës."</string>
<string name="account_dashboard_title" msgid="4734300939532555885">"Llogaritë"</string>
- <string name="account_dashboard_default_summary" msgid="6822549669771936206">"Nuk u shtua asnjë llogari"</string>
+ <string name="account_dashboard_default_summary" msgid="6822549669771936206">"Nuk është shtuar asnjë llogari"</string>
<string name="app_default_dashboard_title" msgid="6575301028225232193">"Apl. e parazgjedhura"</string>
<string name="system_dashboard_summary" msgid="6582464466735779394">"Gjuhët, gjestet, koha, rezervimi"</string>
<string name="search_results_title" msgid="4160717656435503940">"Cilësimet"</string>
@@ -3126,7 +3128,7 @@
<string name="keywords_ring_vibration" msgid="4210509151866460210">"prekje, dridhje, telefon, telefonatë, ndjeshmëri, zile"</string>
<string name="keywords_notification_vibration" msgid="1077515502086745166">"prekje, dridhje, ndjeshmëri"</string>
<string name="keywords_battery_saver_sticky" msgid="8733804259716284872">"kursyesi i baterisë, i ngjitur, vazhdoj, kursyesi i energjisë, bateria"</string>
- <string name="default_sound" msgid="6675629744816442953">"Zëri i parazgjedhur"</string>
+ <string name="default_sound" msgid="6675629744816442953">"Tingulli i parazgjedhur"</string>
<string name="sound_settings_summary" msgid="8467549670633195109">"Volumi i ziles në <xliff:g id="PERCENTAGE">%1$s</xliff:g>"</string>
<string name="sound_dashboard_summary" msgid="5187301919242823508">"Volum, dridhje, \"Mos shqetëso\""</string>
<string name="sound_settings_summary_vibrate" msgid="2194491116884798590">"Zilja u caktua me dridhje"</string>
@@ -3139,7 +3141,7 @@
<string name="ring_volume_option_title" msgid="2038924918468372264">"Volumi i ziles"</string>
<string name="notification_volume_option_title" msgid="1358512611511348260">"Volumi i njoftimit"</string>
<string name="ringtone_title" msgid="1409086028485922583">"Zilja e telefonit"</string>
- <string name="notification_ringtone_title" msgid="2932960620843976285">"Zëri i parazgjedhur i njoftimit"</string>
+ <string name="notification_ringtone_title" msgid="2932960620843976285">"Tingulli i parazgjedhur i njoftimit"</string>
<string name="notification_unknown_sound_title" msgid="8043718667804838398">"Tingulli i dhënë nga aplikacioni"</string>
<string name="notification_sound_default" msgid="2664544380802426260">"Tingulli i parazgjedhur i njoftimit"</string>
<string name="alarm_ringtone_title" msgid="6411326147408635902">"Tingulli i parazgjedhur i alarmit"</string>
@@ -3147,7 +3149,7 @@
<string name="other_sound_settings" msgid="5250376066099818676">"Tinguj të tjerë"</string>
<string name="dial_pad_tones_title" msgid="8877212139988655769">"Tonet e bllokut të tasteve"</string>
<string name="screen_locking_sounds_title" msgid="4407110895465866809">"Tingujt e kyçjes së ekranit"</string>
- <string name="charging_sounds_title" msgid="5070437987230894287">"Tingujt dhe dridhja e ngarkimit"</string>
+ <string name="charging_sounds_title" msgid="5070437987230894287">"Tingujt dhe dridhja e karikimit"</string>
<string name="docking_sounds_title" msgid="2573137471605541366">"Tingujt e stacionimit"</string>
<string name="touch_sounds_title" msgid="165237488496165652">"Tingujt e prekjes"</string>
<string name="vibrate_on_touch_title" msgid="6360155469279157684">"Dridhje për prekjen"</string>
@@ -3426,7 +3428,7 @@
<string name="app_notification_row_banned" msgid="2079325338122151677">"I bllokuar"</string>
<string name="app_notification_row_priority" msgid="432299064888787236">"Me prioritet"</string>
<string name="app_notification_row_sensitive" msgid="4919671519227722958">"Delikate"</string>
- <string name="app_notifications_dialog_done" msgid="5395611029779655968">"U krye!"</string>
+ <string name="app_notifications_dialog_done" msgid="5395611029779655968">"U krye"</string>
<string name="app_notification_importance_title" msgid="1902794400671001142">"Rëndësia"</string>
<string name="notification_show_lights_title" msgid="5381920725933228542">"Drita me pulsim"</string>
<string name="notification_vibrate_title" msgid="8221718258793835282">"Dridhje"</string>
@@ -3553,7 +3555,7 @@
<string name="switch_on_text" msgid="7100491749799298324">"Aktivizuar"</string>
<string name="switch_off_text" msgid="3539551289454353555">"Joaktiv"</string>
<string name="screen_pinning_title" msgid="578020318289781102">"Gozhdimi i ekranit"</string>
- <string name="screen_pinning_description" msgid="3814537379086412278">"Kur ky funksion është i aktivizuar, mund të përdorësh gozhdimin e ekranit për të mbajtur pamjen aktuale të ekranit deri sa ta anulosh gozhdimin.\n\nPër të përdorur gozhdimin e ekranit:\n\n1. Sigurohu që gozhdimi i ekranit është i aktivizuar\n\n2. Hap \"Përmbledhja\"\n\n3. Trokit tek ikona e aplikacionit në krye të ekranit dhe më pas trokit te \"Gozhdo\""</string>
+ <string name="screen_pinning_description" msgid="3814537379086412278">"Kur ky cilësim është i aktivizuar, mund të përdorësh gozhdimin e ekranit për të mbajtur pamjen aktuale të ekranit deri sa ta anulosh gozhdimin.\n\nPër të përdorur gozhdimin e ekranit:\n\n1. Sigurohu që gozhdimi i ekranit është i aktivizuar\n\n2. Hap \"Përmbledhja\"\n\n3. Trokit tek ikona e aplikacionit në krye të ekranit dhe më pas trokit te \"Gozhdo\""</string>
<string name="screen_pinning_unlock_pattern" msgid="1060334707088339444">"Kërko motivin e shkyçjes para anulimit të mbërthimit"</string>
<string name="screen_pinning_unlock_pin" msgid="1441705536015645023">"Zhgozhdimi kërkon PIN-in"</string>
<string name="screen_pinning_unlock_password" msgid="1017776884000170841">"Kërko fjalëkalim para heqjes nga gozhdimi"</string>
@@ -3726,7 +3728,7 @@
<string name="decline_remote_bugreport_action" msgid="706319275774199033">"Refuzo"</string>
<string name="usb_use_charging_only" msgid="2344625733377110164">"Nuk ka transferim të të dhënave"</string>
<string name="usb_use_charging_only_desc" msgid="3283518562582478950">"Vetëm karikoje këtë pajisje"</string>
- <string name="usb_use_power_only" msgid="6595783381323810697">"Ngarko pajisjen e lidhur"</string>
+ <string name="usb_use_power_only" msgid="6595783381323810697">"Kariko pajisjen e lidhur"</string>
<string name="usb_use_file_transfers" msgid="6153021302176151884">"Transferimi i skedarëve"</string>
<string name="usb_use_file_transfers_desc" msgid="6953866660041189580">"Transfero skedarët te një pajisje tjetër"</string>
<string name="usb_use_photo_transfers" msgid="5974236250197451257">"PTP"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Nëse pajisja është e kyçur, parandalo shkrimin e përgjigjeve ose teksteve të tjera te njoftimet"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Kontrolluesi drejtshkrimor i parazgjedhur"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Zgjidh kontrolluesin drejtshkrimor"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Përdor kontrolluesin drejtshkrimor"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Përdor kontrolluesin drejtshkrimor"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"I pazgjedhur"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(asnjë)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Për të ndihmuar në lirimin e hapësirës ruajtëse, menaxheri i hapësirës ruajtëse i heq fotografitë dhe videot e rezervuara nga pajisja jote."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Hiq fotografitë dhe videot"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Menaxheri i hapësirës ruajtëse"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Përdor \"Menaxherin e hapësirës ruajtëse\""</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Përdor \"Menaxherin e hapësirës ruajtëse\""</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatike"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manual"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Liro hapësirën tani"</string>
diff --git a/tests/CarDeveloperOptions/res/values-sr/arrays.xml b/tests/CarDeveloperOptions/res/values-sr/arrays.xml
index e6f117a..e63a632 100644
--- a/tests/CarDeveloperOptions/res/values-sr/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-sr/arrays.xml
@@ -214,7 +214,7 @@
</string-array>
<string-array name="app_ops_categories">
<item msgid="1102693344156734891">"Локација"</item>
- <item msgid="6842381562497597649">"Лични"</item>
+ <item msgid="6842381562497597649">"Лично"</item>
<item msgid="3966700236695683444">"Размена порука"</item>
<item msgid="8563996233342430477">"Медији"</item>
<item msgid="5323851085993963783">"Уређај"</item>
@@ -230,7 +230,7 @@
<item msgid="2260380357119423209">"мењање евиденције позива"</item>
<item msgid="6550710385014530934">"читање календара"</item>
<item msgid="3575906174264853951">"мењање календара"</item>
- <item msgid="4319843242568057174">"Wi-Fi скенирање"</item>
+ <item msgid="4319843242568057174">"WiFi скенирање"</item>
<item msgid="2981791890467303819">"обавештење"</item>
<item msgid="6617825156152476692">"скенирање телефона"</item>
<item msgid="8865260890611559753">"позивање телефона"</item>
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"рад у позадини"</item>
<item msgid="6423861043647911030">"јачина звука за приступачност"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Локација"</item>
+ <item msgid="6656077694190491067">"Локација"</item>
+ <item msgid="8790228218278477369">"Локација"</item>
+ <item msgid="7836406246005211990">"Вибрација"</item>
+ <item msgid="3951439024549922598">"Читање контаката"</item>
+ <item msgid="8802152411647068">"Мењање контаката"</item>
+ <item msgid="229544934599698735">"Читање евиденције позива"</item>
+ <item msgid="7396102294405899613">"Мењање евиденције позива"</item>
+ <item msgid="3597797992398484655">"Читање календара"</item>
+ <item msgid="2705975774250907343">"Мењање календара"</item>
+ <item msgid="4668747371441932697">"Локација"</item>
+ <item msgid="1487578921720243646">"Постављање обавештења"</item>
+ <item msgid="4636080349724146638">"Локација"</item>
+ <item msgid="673510900286463926">"Позивање телефона"</item>
+ <item msgid="542083422784609790">"Читање SMS/MMS порука"</item>
+ <item msgid="1033780373029588436">"Писање SMS/MMS порука"</item>
+ <item msgid="5647111115517787488">"Пријем SMS/MMS порука"</item>
+ <item msgid="8591105601108455893">"Пријем SMS/MMS порука"</item>
+ <item msgid="7730995008517841903">"Пријем SMS/MMS порука"</item>
+ <item msgid="2613033109026626086">"Пријем SMS/MMS порука"</item>
+ <item msgid="3037159047591081136">"Слање SMS/MMS порука"</item>
+ <item msgid="4726682243833913568">"Читање SMS/MMS порука"</item>
+ <item msgid="6555678522277865572">"Писање SMS/MMS порука"</item>
+ <item msgid="6981734935578130884">"Мењање подешавања"</item>
+ <item msgid="8705854389991425629">"Повлачење на врх"</item>
+ <item msgid="5861356020344153651">"Приступ обавештењима"</item>
+ <item msgid="78432174621628659">"Камера"</item>
+ <item msgid="3986116419882154794">"Снимање аудио записа"</item>
+ <item msgid="4516840825756409490">"Пуштање аудио записа"</item>
+ <item msgid="6811712502798183957">"Читање меморије"</item>
+ <item msgid="2780369012602289114">"Мењање меморије"</item>
+ <item msgid="2331359440170850868">"Дугмад за медије"</item>
+ <item msgid="6133599737122751231">"Аудио фокус"</item>
+ <item msgid="6844485713404805301">"Главна јачина звука"</item>
+ <item msgid="1600379420669104929">"Јачина звука гласа"</item>
+ <item msgid="6296768210470214866">"Јачина звука звона"</item>
+ <item msgid="510690696071629241">"Јачина звука медија"</item>
+ <item msgid="406861638631430109">"Јачина звука аларма"</item>
+ <item msgid="4715864795872233884">"Јачина звука за обавештења"</item>
+ <item msgid="2311478519251301183">"Јачина звука Bluetooth-а"</item>
+ <item msgid="5133991377896747027">"Задржи ван стања спавања"</item>
+ <item msgid="2464189519136248621">"Локација"</item>
+ <item msgid="2062677934050803037">"Локација"</item>
+ <item msgid="1735171933192715957">"Преузми статистику о коришћењу"</item>
+ <item msgid="1014093788778383554">"Искључи/укључи звук микрофона"</item>
+ <item msgid="4199297950608622850">"Приказивање искачућих пoрука"</item>
+ <item msgid="2527962435313398821">"Медији за пројекат"</item>
+ <item msgid="5117506254221861929">"Активирање VPN-а"</item>
+ <item msgid="8291198322681891160">"Упис на позадину"</item>
+ <item msgid="7106921284621230961">"Структура помоћи"</item>
+ <item msgid="4496533640894624799">"Снимак екрана помоћи"</item>
+ <item msgid="2598847264853993611">"Читање стања телефона"</item>
+ <item msgid="9215610846802973353">"Додавање говорне поште"</item>
+ <item msgid="9186411956086478261">"Коришћење SIP-а"</item>
+ <item msgid="6884763100104539558">"Обрада одлазног позива"</item>
+ <item msgid="125513972170580692">"Отисак прста"</item>
+ <item msgid="2556071024281275619">"Сензори за тело"</item>
+ <item msgid="617168514928339387">"Читање порука за мобилне уређаје на локалитету"</item>
+ <item msgid="7134693570516523585">"Лажна локација"</item>
+ <item msgid="7224489175375229399">"Читање меморијског простора"</item>
+ <item msgid="8472735063903258202">"Упис података у меморијски простор"</item>
+ <item msgid="4069276819909595110">"Укључивање екрана"</item>
+ <item msgid="1228338896751121025">"Приступ налозима"</item>
+ <item msgid="3181581793459233672">"Рад у позадини"</item>
+ <item msgid="2340936043025374076">"Јачина звука за приступачност"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Кратко"</item>
<item msgid="4816511817309094890">"Средњи"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Никада не дозволи"</item>
<item msgid="8184570120217958741">"Увек дозволи"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Нормално"</item>
+ <item msgid="5101233285497327432">"Умерено"</item>
+ <item msgid="1555861583162930714">"Ниска"</item>
+ <item msgid="1719683776264798117">"Критична"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Нормална"</item>
+ <item msgid="6107138933849816768">"Умерена"</item>
+ <item msgid="182695359839047859">"Ниска"</item>
+ <item msgid="8577246509202964244">"Критично"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Непрекидна"</item>
<item msgid="167418068739176448">"Највећа активност"</item>
diff --git a/tests/CarDeveloperOptions/res/values-sr/strings.xml b/tests/CarDeveloperOptions/res/values-sr/strings.xml
index be9bc3e..de8ffb1 100644
--- a/tests/CarDeveloperOptions/res/values-sr/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-sr/strings.xml
@@ -36,7 +36,7 @@
<string name="radio_info_data_connection_disable" msgid="2430609627397999371">"Онемогући везу за пренос података"</string>
<string name="volte_provisioned_switch_string" msgid="6326756678226686704">"Додељено за VoLTE"</string>
<string name="vt_provisioned_switch_string" msgid="7458479879009293613">"Видео позивање је додељено"</string>
- <string name="wfc_provisioned_switch_string" msgid="5446697646596639516">"Позивање преко Wifi везе је додељено"</string>
+ <string name="wfc_provisioned_switch_string" msgid="5446697646596639516">"Позивање преко WiFi везе је додељено"</string>
<string name="eab_provisioned_switch_string" msgid="3921103790584572430">"EAB/Додељено присуство"</string>
<string name="cbrs_data_switch_string" msgid="9120919504831536183">"Cbrs подаци"</string>
<string name="dsds_switch_string" msgid="2606482598327613264">"Омогући DSDS"</string>
@@ -84,8 +84,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Омогућава да текст на екрану буде мањи или већи."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Умањи"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Увећај"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Пример текста"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Чаробњак из Оза"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Поглавље 11: Чудесни Смарагдни град Оза"</string>
@@ -305,7 +304,7 @@
<string name="settings_shortcut" msgid="4503714880251502167">"Пречица подешавања"</string>
<string name="airplane_mode" msgid="4508870277398231073">"Режим рада у авиону"</string>
<string name="wireless_networks_settings_title" msgid="4298430520189173949">"Бежична веза и мреже"</string>
- <string name="radio_controls_summary" msgid="4596981962167684814">"Управљање Wi-Fi мрежом, Bluetooth-ом, режимом рада у авиону, мобилним мрежама и VPN-ом"</string>
+ <string name="radio_controls_summary" msgid="4596981962167684814">"Управљање WiFi мрежом, Bluetooth-ом, режимом рада у авиону, мобилним мрежама и VPN-ом"</string>
<string name="cellular_data_title" msgid="7909624119432695022">"Мобилни подаци"</string>
<string name="calls_title" msgid="875693497825736550">"Дозволи позиве"</string>
<string name="sms_messages_title" msgid="934188835214592753">"SMS поруке"</string>
@@ -371,7 +370,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Подаци о профилу"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Налози"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Локација"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Користи локацију"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Користи локацију"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Искључена"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">Укључена – <xliff:g id="COUNT_1">%1$d</xliff:g> апликација може да приступа локацији</item>
@@ -507,7 +506,7 @@
<string name="fingerprint_delete_title" msgid="3120894112324235536">"Уклоните „<xliff:g id="FINGERPRINT_ID">%1$s</xliff:g>“"</string>
<string name="fingerprint_delete_message" msgid="5895802741486967970">"Желите ли да избришете овај отисак прста?"</string>
<string name="fingerprint_last_delete_message" msgid="3346252479778971442">"Нећете моћи да откључавате телефон, одобравате куповине нити да се пријављујете у апликације помоћу отисака прстију"</string>
- <string name="fingerprint_last_delete_message_profile_challenge" msgid="5385095150532247025">"Нећете моћи да откључавате профил за Work, одобравате куповине нити да се пријављујете у апликације за Work помоћу отисака прстију"</string>
+ <string name="fingerprint_last_delete_message_profile_challenge" msgid="5385095150532247025">"Нећете моћи да откључавате пословни профил, одобравате куповине нити да се пријављујете у пословне апликације помоћу отисака прстију"</string>
<string name="fingerprint_last_delete_confirm" msgid="7984595457589664004">"Да, уклони"</string>
<string name="crypt_keeper_settings_title" msgid="839783588093862748">"Шифровање"</string>
<string name="crypt_keeper_encrypt_title" product="tablet" msgid="2292129135369853167">"Шифруј таблет"</string>
@@ -549,7 +548,7 @@
<string name="suggested_fingerprint_lock_settings_summary" product="device" msgid="8114514312665251311"></string>
<string name="suggested_fingerprint_lock_settings_summary" product="default" msgid="8114514312665251311"></string>
<string name="lock_settings_picker_title" msgid="1034741644461982205">"Закључавање екрана"</string>
- <string name="lock_settings_picker_title_profile" msgid="5086594364428782115">"Изаберите закључавање за Work"</string>
+ <string name="lock_settings_picker_title_profile" msgid="5086594364428782115">"Изаберите закључавање за посао"</string>
<string name="setup_lock_settings_picker_title" product="tablet" msgid="2429667472335773519">"Заштитите таблет"</string>
<string name="setup_lock_settings_picker_title" product="device" msgid="4739290104106645233">"Заштитите уређај"</string>
<string name="setup_lock_settings_picker_title" product="default" msgid="3911582328576859628">"Заштитите телефон"</string>
@@ -564,7 +563,7 @@
<string name="unlock_set_unlock_launch_picker_title" msgid="2731152716948003853">"Закључавање екрана"</string>
<string name="unlock_set_unlock_launch_picker_summary_lock_immediately" msgid="5596186270725220642">"<xliff:g id="UNLOCK_METHOD">%1$s</xliff:g>/одмах после спавања"</string>
<string name="unlock_set_unlock_launch_picker_summary_lock_after_timeout" msgid="3861167251234952373">"<xliff:g id="UNLOCK_METHOD">%1$s</xliff:g>/<xliff:g id="TIMEOUT_STRING">%2$s</xliff:g> после спавања"</string>
- <string name="unlock_set_unlock_launch_picker_title_profile" msgid="7976345264630422921">"Закључавање профила за Work"</string>
+ <string name="unlock_set_unlock_launch_picker_title_profile" msgid="7976345264630422921">"Закључавање пословног профила"</string>
<string name="unlock_set_unlock_launch_picker_change_title" msgid="32310692507029407">"Промена закључ. екрана"</string>
<string name="unlock_set_unlock_launch_picker_change_summary" msgid="2072792784866320522">"Мењање или онемогућавање шаблона, PIN кода или безбедности лозинке"</string>
<string name="unlock_set_unlock_launch_picker_enable_summary" msgid="9070847611379078795">"Изаберите метод закључавања екрана"</string>
@@ -648,12 +647,12 @@
<string name="lock_last_pattern_attempt_before_wipe_user" msgid="5194192938934564218">"Ако у следећем покушају унесете нетачан шаблон, избрисаћемо овог корисника"</string>
<string name="lock_last_pin_attempt_before_wipe_user" msgid="7833852187363499906">"Ако у следећем покушају унесете нетачан PIN, избрисаћемо овог корисника"</string>
<string name="lock_last_password_attempt_before_wipe_user" msgid="8979742220140001204">"Ако у следећем покушају унесете нетачну лозинку, избрисаћемо овог корисника"</string>
- <string name="lock_last_pattern_attempt_before_wipe_profile" msgid="3877613047631174576">"Ако у следећем покушају унесете нетачан шаблон, избрисаћемо профил за Work и његове податке"</string>
- <string name="lock_last_pin_attempt_before_wipe_profile" msgid="8132438288175428168">"Ако у следећем покушају унесете нетачан PIN, избрисаћемо профил за Work и његове податке"</string>
- <string name="lock_last_password_attempt_before_wipe_profile" msgid="1535128774464384305">"Ако у следећем покушају унесете нетачну лозинку, избрисаћемо профил за Work и његове податке"</string>
+ <string name="lock_last_pattern_attempt_before_wipe_profile" msgid="3877613047631174576">"Ако у следећем покушају унесете нетачан шаблон, избрисаћемо пословни профил и његове податке"</string>
+ <string name="lock_last_pin_attempt_before_wipe_profile" msgid="8132438288175428168">"Ако у следећем покушају унесете нетачан PIN, избрисаћемо пословни профил и његове податке"</string>
+ <string name="lock_last_password_attempt_before_wipe_profile" msgid="1535128774464384305">"Ако у следећем покушају унесете нетачну лозинку, избрисаћемо пословни профил и његове податке"</string>
<string name="lock_failed_attempts_now_wiping_device" msgid="8662360098784762828">"Превише нетачних покушаја. Избрисаћемо податке са овог уређаја."</string>
<string name="lock_failed_attempts_now_wiping_user" msgid="3793513796171561873">"Превише нетачних покушаја. Избрисаћемо овог корисника."</string>
- <string name="lock_failed_attempts_now_wiping_profile" msgid="5347108525299038285">"Превише нетачних покушаја. Избрисаћемо овај профил за Work и његове податке."</string>
+ <string name="lock_failed_attempts_now_wiping_profile" msgid="5347108525299038285">"Превише нетачних покушаја. Избрисаћемо овај пословни профил и његове податке."</string>
<string name="lock_failed_attempts_now_wiping_dialog_dismiss" msgid="3950582268749037318">"Одбаци"</string>
<plurals name="lockpassword_password_too_short" formatted="false" msgid="694091983183310827">
<item quantity="one">Мора да садржи најмање <xliff:g id="COUNT_1">%d</xliff:g> знак</item>
@@ -747,7 +746,7 @@
<string name="bluetooth_settings" msgid="5228032727293770389">"Bluetooth"</string>
<string name="bluetooth_settings_title" msgid="7261244857456521825">"Bluetooth"</string>
<string name="bluetooth_settings_summary" msgid="1221689092429277887">"Управљање везама, подешавање назива и видљивости уређаја"</string>
- <string name="bluetooth_pairing_request" msgid="7221745525632573125">"Упарити са уређајем <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
+ <string name="bluetooth_pairing_request" msgid="7221745525632573125">"Желите да упарите са <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
<string name="bluetooth_pairing_key_msg" msgid="1139230917419961975">"Кôд за упаривање са Bluetooth уређајем"</string>
<string name="bluetooth_enter_passkey_msg" msgid="6205151011298670207">"Унесите кôд за упаривање, па притисните Return или Enter"</string>
<string name="bluetooth_enable_alphanumeric_pin" msgid="9138308197078115672">"PIN садржи слова или симболе"</string>
@@ -834,8 +833,8 @@
<string name="wifi_tap_to_sign_in" msgid="1075925570550560453">"Додирните овде да бисте се пријавили на мрежу"</string>
<string name="tx_link_speed" msgid="4557508597788146162">"<xliff:g id="TRANSMIT_LINK_SPEED">%1$d</xliff:g> Mb/s"</string>
<string name="rx_link_speed" msgid="3735337600274627581">"<xliff:g id="RECEIVE_LINK_SPEED">%1$d</xliff:g> Mb/s"</string>
- <string name="wifi_ask_enable" msgid="925862998663619616">"<xliff:g id="REQUESTER">%s</xliff:g> жели да укључи Wi-Fi"</string>
- <string name="wifi_ask_disable" msgid="2146839060110412974">"<xliff:g id="REQUESTER">%s</xliff:g> жели да искључи Wi-Fi"</string>
+ <string name="wifi_ask_enable" msgid="925862998663619616">"<xliff:g id="REQUESTER">%s</xliff:g> жели да укључи WiFi"</string>
+ <string name="wifi_ask_disable" msgid="2146839060110412974">"<xliff:g id="REQUESTER">%s</xliff:g> жели да искључи WiFi"</string>
<string name="art_verifier_for_debuggable_title" msgid="5223835619409464642">"Потврди бинарни кôд апликација из којих могу да се отклоне грешке"</string>
<string name="art_verifier_for_debuggable_summary" msgid="2204242476996701111">"Дозволи да ART потврди бинарни кôд апликација из којих могу да се отклоне грешке"</string>
<string name="nfc_quick_toggle_title" msgid="4990697912813795002">"NFC"</string>
@@ -852,15 +851,15 @@
<string name="android_beam_label" msgid="5340299879556025708">"Android Beam"</string>
<string name="android_beam_explained" msgid="4501176353247859329">"Када је ова функција укључена, можете да пребацујете садржај апликација на други уређај на коме је омогућен NFC тако што ћете приближити уређаје један другоме. На пример, можете да пребацујете веб-странице, YouTube видео снимке, контакте и још тога.\n\nСамо прислоните уређаје један на други (обично са задње стране), а затим додирните екран. Апликација одређује шта ће бити пребачено."</string>
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
- <string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Укључивање Wi-Fi-ја"</string>
+ <string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Укључивање WiFi-ја"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Користи Wi-Fi"</string>
- <string name="wifi_settings_category" msgid="9094716747565527901">"Wi-Fi подешавања"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Користи WiFi"</string>
+ <string name="wifi_settings_category" msgid="9094716747565527901">"WiFi подешавања"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Подешавање и управљање бежичним приступним тачкама"</string>
- <string name="wifi_select_network" msgid="2541598480767312831">"Изабери Wi-Fi"</string>
- <string name="wifi_starting" msgid="1299466156783469023">"Укључивање Wi-Fi-ја..."</string>
- <string name="wifi_stopping" msgid="413711069039939520">"Искључивање Wi-Fi-ja..."</string>
+ <string name="wifi_select_network" msgid="2541598480767312831">"Изабери WiFi"</string>
+ <string name="wifi_starting" msgid="1299466156783469023">"Укључивање WiFi-ја..."</string>
+ <string name="wifi_stopping" msgid="413711069039939520">"Искључивање WiFi-ja..."</string>
<string name="wifi_error" msgid="5605801874484465557">"Грешка"</string>
<string name="wifi_sap_no_channel_error" msgid="6881796988574851628">"Опсег од 5 GHz није доступан у овој земљи"</string>
<string name="wifi_in_airplane_mode" msgid="4729571191578262246">"У Режиму рада у авиону"</string>
@@ -872,7 +871,7 @@
<string name="wifi_wakeup_summary_scanning_disabled" msgid="6820040651529910914">"Недоступно је јер је искључено Wi‑Fi скенирање"</string>
<string name="wifi_wakeup_summary_scoring_disabled" msgid="7067018832237903151">"Да бисте користили функцију, изаберите добављача оцене мреже"</string>
<string name="wifi_poor_network_detection" msgid="7193423327400703073">"Избегавај лоше везе"</string>
- <string name="wifi_poor_network_detection_summary" msgid="5539951465985614590">"Не користи Wi-Fi мрежу ако нема добру интернет везу"</string>
+ <string name="wifi_poor_network_detection_summary" msgid="5539951465985614590">"Не користи WiFi мрежу ако нема добру интернет везу"</string>
<string name="wifi_avoid_poor_network_detection_summary" msgid="1976503191780928104">"Користи само оне мреже које имају добру интернет везу"</string>
<string name="use_open_wifi_automatically_title" msgid="3084513215481454350">"Повезуј се са отвореним мрежама"</string>
<string name="use_open_wifi_automatically_summary" msgid="8338020172673161754">"Аутоматски се повезуј са јавним мрежама високог квалитета"</string>
@@ -880,15 +879,15 @@
<string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"Да бисте користили функцију, изаберите компатибилног добављача оцене мреже"</string>
<string name="wifi_install_credentials" msgid="5650088113710858289">"Инсталирај сертификате"</string>
<string name="wifi_scan_notify_text" msgid="7614101215028336927">"Да би побољшале прецизност локације, апликације и услуге могу и даље да траже Wi‑Fi мреже у било ком тренутку, чак и када је Wi‑Fi искључен. Ово може да се користи, на пример, за побољшање функција и услуга заснованих на локацији. Ово можете да промените у <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>подешавањима претраживања<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
- <string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"Да бисте побољшали прецизност локације, укључите Wi-Fi скенирање у <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>подешавањима скенирања<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
+ <string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"Да бисте побољшали прецизност локације, укључите WiFi скенирање у <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>подешавањима скенирања<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
<string name="wifi_scan_notify_remember_choice" msgid="1235445971400237444">"Не приказуј поново"</string>
- <string name="wifi_setting_sleep_policy_title" msgid="2120785188625932076">"Не искључуј Wi-Fi током спавања"</string>
+ <string name="wifi_setting_sleep_policy_title" msgid="2120785188625932076">"Не искључуј WiFi током спавања"</string>
<string name="wifi_setting_on_during_sleep_title" msgid="856670183023402715">"Wi‑Fi је укључен током спавања"</string>
<string name="wifi_setting_sleep_policy_error" msgid="9029652631829560733">"Дошло је до проблема приликом промене подешавања"</string>
<string name="wifi_suspend_efficiency_title" msgid="5292408676086580527">"Побољшај ефикасност"</string>
- <string name="wifi_suspend_optimizations" msgid="8826033336622472222">"Wi-Fi оптимизација"</string>
- <string name="wifi_suspend_optimizations_summary" msgid="2375789014394339008">"Смањи коришћење батерије када је Wi-Fi укључен"</string>
- <string name="wifi_limit_optimizations_summary" msgid="1192849485764156570">"Огран. бат. коју користи Wi-Fi"</string>
+ <string name="wifi_suspend_optimizations" msgid="8826033336622472222">"WiFi оптимизација"</string>
+ <string name="wifi_suspend_optimizations_summary" msgid="2375789014394339008">"Смањи коришћење батерије када је WiFi укључен"</string>
+ <string name="wifi_limit_optimizations_summary" msgid="1192849485764156570">"Огран. бат. коју користи WiFi"</string>
<string name="wifi_switch_away_when_unvalidated" msgid="2418577764071293971">"Пређи на мобилне податке ако Wi‑Fi изгуби приступ интернету."</string>
<string name="wifi_cellular_data_fallback_title" msgid="5067241930716252665">"Аутоматски пређи на мобилне податке"</string>
<string name="wifi_cellular_data_fallback_summary" msgid="2721467405851519769">"Користите мобилне податке када Wi‑Fi нема приступ интернету. Може да вам буде наплаћена потрошња података."</string>
@@ -896,7 +895,7 @@
<string name="wifi_configure_settings_preference_title" msgid="2678534679408777268">"Подешавања Wi‑Fi-ја"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="5714892572614655675">"Wi‑Fi се аутоматски укључује поново"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_off" msgid="286904094152909651">"Wi‑Fi се не укључује поново аутоматски"</string>
- <string name="wifi_access_points" msgid="1647976498906871869">"Wi-Fi мреже"</string>
+ <string name="wifi_access_points" msgid="1647976498906871869">"WiFi мреже"</string>
<string name="wifi_menu_more_options" msgid="8318269834264035524">"Још опција"</string>
<string name="wifi_menu_p2p" msgid="4945665601551289791">"Wi‑Fi Direct"</string>
<string name="wifi_menu_scan" msgid="9082691677803181629">"Скенирај"</string>
@@ -906,14 +905,14 @@
<string name="wifi_menu_remember" msgid="717257200269700641">"Запамти мрежу"</string>
<string name="wifi_menu_forget" msgid="7561140554450163075">"Заборави мрежу"</string>
<string name="wifi_menu_modify" msgid="4080178040721021101">"Измени мрежу"</string>
- <string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"Да бисте видели доступне мреже, укључите Wi-Fi."</string>
- <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"Тражење Wi-Fi мрежа..."</string>
+ <string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"Да бисте видели доступне мреже, укључите WiFi."</string>
+ <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"Тражење WiFi мрежа..."</string>
<string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"Немате дозволу да мењате Wi‑Fi мрежу."</string>
<string name="wifi_more" msgid="3538241640407382185">"Још"</string>
<string name="wifi_setup_wps" msgid="6730131677695521321">"Аутоматско подешавање (WPS)"</string>
- <string name="wifi_settings_scanning_required_title" msgid="3593457187659922490">"Желите ли да укључите Wi-Fi скенирање?"</string>
+ <string name="wifi_settings_scanning_required_title" msgid="3593457187659922490">"Желите ли да укључите WiFi скенирање?"</string>
<string name="wifi_settings_scanning_required_summary" msgid="7469610959462708782">"Да би се аутоматски укључивао Wi‑Fi, прво треба да укључите Wi‑Fi скенирање."</string>
- <string name="wifi_settings_scanning_required_info" msgid="5913535073390607386">"Wi-Fi скенирање омогућава апликацијама и услугама да траже Wi‑Fi мреже у било ком тренутку, чак и када је Wi‑Fi искључен. Ово, на пример, може да се користи за побољшање функција и услуга заснованих на локацији."</string>
+ <string name="wifi_settings_scanning_required_info" msgid="5913535073390607386">"WiFi скенирање омогућава апликацијама и услугама да траже Wi‑Fi мреже у било ком тренутку, чак и када је Wi‑Fi искључен. Ово, на пример, може да се користи за побољшање функција и услуга заснованих на локацији."</string>
<string name="wifi_settings_scanning_required_turn_on" msgid="4327570180594277049">"Укључи"</string>
<string name="wifi_settings_scanning_required_enabled" msgid="3336102100425307040">"Wi‑Fi скенирање је укључено"</string>
<string name="wifi_show_advanced" msgid="8199779277168030597">"Напредне опције"</string>
@@ -945,7 +944,7 @@
<string name="wifi_ap_choose_auto" msgid="7927637960569365785">"Аутоматски"</string>
<string name="wifi_ap_choose_2G" msgid="43198403259714736">"Опсег од 2,4 GHz"</string>
<string name="wifi_ap_choose_5G" msgid="2624859713183683146">"Опсег од 5,0 GHz"</string>
- <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"Предност се даје опсегу од 5.0 GHz"</string>
+ <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"Предност има опсег од 5,0 GHz"</string>
<string name="wifi_ap_2G" msgid="5793110086517338494">"2,4 GHz"</string>
<string name="wifi_ap_5G" msgid="4584892544393675403">"5,0 GHz"</string>
<string name="wifi_ap_band_select_one" msgid="4409754936554360355">"Изаберите барем један опсег за Wi‑Fi хотспот:"</string>
@@ -963,8 +962,8 @@
<string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"Читање QR кода није успело. Поново центрирајте кôд, па пробајте поново"</string>
<string name="wifi_dpp_failure_authentication_or_configuration" msgid="9142051662156233679">"Пробајте поново. Ако се проблем настави, контактирајте произвођача уређаја"</string>
<string name="wifi_dpp_failure_not_compatible" msgid="4320027179973678283">"Дошло је до грешке"</string>
- <string name="wifi_dpp_failure_timeout" msgid="5060065168142109420">"Уверите се да је уређај прикључен на извор напајања, напуњен и укључен"</string>
- <string name="wifi_dpp_failure_generic" msgid="7840142544736640189">"Уверите се да је уређај прикључен на извор напајања, напуњен и укључен. Ако се проблем настави, контактирајте произвођача уређаја"</string>
+ <string name="wifi_dpp_failure_timeout" msgid="5060065168142109420">"Уверите се да је уређај прикључен на струју, напуњен и укључен"</string>
+ <string name="wifi_dpp_failure_generic" msgid="7840142544736640189">"Уверите се да је уређај прикључен на струју, напуњен и укључен. Ако се проблем настави, контактирајте произвођача уређаја"</string>
<string name="wifi_dpp_failure_not_supported" msgid="111779621766171626">"Овај уређај не подржава додавање мреже „<xliff:g id="SSID">%1$s</xliff:g>“"</string>
<string name="wifi_dpp_check_connection_try_again" msgid="7144663015219170999">"Проверите везу и пробајте поново"</string>
<string name="wifi_dpp_choose_network" msgid="6251424431594491691">"Одаберите мрежу"</string>
@@ -979,9 +978,9 @@
<string name="wifi_dpp_connecting" msgid="4229290407210299897">"Повезује се…"</string>
<string name="wifi_dpp_share_hotspot" msgid="847987212473038179">"Делите хотспот"</string>
<string name="wifi_dpp_lockscreen_title" msgid="3910665850075275963">"Потврдите да сте то ви"</string>
- <string name="wifi_dpp_wifi_password" msgid="8007558344032612455">"Лозинка за Wi-Fi: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
+ <string name="wifi_dpp_wifi_password" msgid="8007558344032612455">"Лозинка за WiFi: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
<string name="wifi_dpp_hotspot_password" msgid="6172326289042241924">"Лозинка хотспота: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
- <string name="wifi_dpp_add_device" msgid="1347056725253936358">"Додајте уређај"</string>
+ <string name="wifi_dpp_add_device" msgid="1347056725253936358">"Додај уређај"</string>
<string name="wifi_dpp_connect_network_using_qr_code" msgid="115993715600532357">"Повежите се на ову мрежу помоћу QR кода"</string>
<string name="retry" msgid="8500839563577344702">"Пробај поново"</string>
<string name="wifi_shared" msgid="5054256778276524960">"Дели са другим корисницима уређаја"</string>
@@ -998,7 +997,7 @@
<string name="wifi_wps_available_second_item" msgid="5703265526619705185">" (WPS је доступан)"</string>
<string name="wifi_carrier_connect" msgid="7202618367339982884">"Wi‑Fi мрежа мобилног оператера"</string>
<string name="wifi_carrier_content" msgid="3467402515071949783">"Повежите се преко <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="wifi_scan_always_turnon_message" msgid="7811846312032594248">"Због побољшања прецизности локације и у друге сврхе, <xliff:g id="APP_NAME">%1$s</xliff:g> жели да укључи скенирање мреже чак и када је Wi-Fi искључен.\n\nЖелите ли да дозволите ово за све апликације које желе да скенирају?"</string>
+ <string name="wifi_scan_always_turnon_message" msgid="7811846312032594248">"Због побољшања прецизности локације и у друге сврхе, <xliff:g id="APP_NAME">%1$s</xliff:g> жели да укључи скенирање мреже чак и када је WiFi искључен.\n\nЖелите ли да дозволите ово за све апликације које желе да скенирају?"</string>
<string name="wifi_scan_always_turnoff_message" msgid="556993843641750002">"Да бисте ово искључили, идите на Напредно у преклопном менију."</string>
<string name="wifi_scan_always_confirm_allow" msgid="8857664849515496237">"Дозволи"</string>
<string name="wifi_scan_always_confirm_deny" msgid="6190909841125369403">"Одбиј"</string>
@@ -1014,7 +1013,7 @@
<string name="lost_internet_access_cancel" msgid="6577871064062518744">"Остани на Wi‑Fi-ју"</string>
<string name="lost_internet_access_persist" msgid="6368659013482055611">"Не приказуј поново"</string>
<string name="wifi_connect" msgid="5653612760223533650">"Повежи"</string>
- <string name="wifi_turned_on_message" msgid="3377779146238242894">"Wi-Fi је укључен"</string>
+ <string name="wifi_turned_on_message" msgid="3377779146238242894">"WiFi је укључен"</string>
<!-- no translation found for wifi_connected_to_message (2875589636437599620) -->
<skip />
<string name="wifi_connecting" msgid="384192498836395892">"Повезује се…"</string>
@@ -1035,7 +1034,7 @@
<item quantity="few">%d мреже</item>
<item quantity="other">%d мрежа</item>
</plurals>
- <string name="wifi_advanced_titlebar" msgid="4899310977865228904">"Напредна Wi-Fi подешавања"</string>
+ <string name="wifi_advanced_titlebar" msgid="4899310977865228904">"Напредна WiFi подешавања"</string>
<string name="wifi_advanced_ssid_title" msgid="4229741334913894856">"SSID"</string>
<string name="wifi_advanced_mac_address_title" msgid="1162782083754021737">"MAC адреса"</string>
<string name="wifi_advanced_ip_address_title" msgid="2708185994512829071">"IP адреса"</string>
@@ -1075,7 +1074,7 @@
<string name="wifi_p2p_cancel_connect_title" msgid="2465200999145769427">"Желите ли да откажете позивницу?"</string>
<string name="wifi_p2p_cancel_connect_message" msgid="3752679335020392154">"Желите ли да откажете позивницу за повезивање са уређајем <xliff:g id="PEER_NAME">%1$s</xliff:g>?"</string>
<string name="wifi_p2p_delete_group_message" msgid="3206660449067701089">"Желите ли да заборавите ову групу?"</string>
- <string name="wifi_hotspot_checkbox_text" msgid="12062341344410520">"Wi-Fi хотспот"</string>
+ <string name="wifi_hotspot_checkbox_text" msgid="12062341344410520">"WiFi хотспот"</string>
<string name="wifi_hotspot_off_subtext" msgid="6177054857136221058">"Ни интернет ни садржај се не деле са другим уређајима"</string>
<string name="wifi_hotspot_tethering_on_subtext" product="tablet" msgid="71421730039785897">"Интернет веза овог таблета се дели преко хотспота"</string>
<string name="wifi_hotspot_tethering_on_subtext" product="default" msgid="8914285514605049879">"Интернет веза овог телефона се дели преко хотспота"</string>
@@ -1094,11 +1093,11 @@
<string name="wifi_tether_stopping" msgid="7478561853791953349">"Искључивање хотспота..."</string>
<string name="wifi_tether_enabled_subtext" msgid="7534760116478734006">"<xliff:g id="NETWORK_SSID">%1$s</xliff:g> је активан"</string>
<string name="wifi_tether_failed_subtext" msgid="3501001612207106">"Грешка преносног Wi‑Fi хотспота"</string>
- <string name="wifi_tether_configure_ap_text" msgid="4081852770996455902">"Подеси Wi-Fi хотспот"</string>
+ <string name="wifi_tether_configure_ap_text" msgid="4081852770996455902">"Подеси WiFi хотспот"</string>
<string name="wifi_hotspot_configure_ap_text" msgid="1000003286253019522">"Подешавање Wi‑Fi хотспота"</string>
<string name="wifi_hotspot_configure_ap_text_summary" msgid="2303120188509955656">"AndroidAP WPA2 PSK хотспот"</string>
<string name="wifi_tether_configure_ssid_default" msgid="1722238925876152663">"AndroidHotspot"</string>
- <string name="wifi_calling_settings_title" msgid="626821542308601806">"Позивање преко Wi-Fi-ја"</string>
+ <string name="wifi_calling_settings_title" msgid="626821542308601806">"Позивање преко WiFi-ја"</string>
<string name="wifi_calling_suggestion_title" msgid="1402265373543523970">"Продужите позиве помоћу Wi‑Fi-ја"</string>
<string name="wifi_calling_suggestion_summary" msgid="198402175473169630">"Укљ. позивање преко Wi‑Fi-ја да проширите покривеност"</string>
<string name="wifi_calling_mode_title" msgid="3350624859819920176">"Подешавање позивања"</string>
@@ -1113,27 +1112,30 @@
<item msgid="742811521969300868">"@*android:string/wfc_mode_wifi_only_summary"</item>
</string-array>
<string-array name="wifi_calling_mode_choices_v2">
- <item msgid="9149346657812979257">"Wi-Fi"</item>
+ <item msgid="9149346657812979257">"WiFi"</item>
<item msgid="4421333712484542489">"Мобилни подаци"</item>
- <item msgid="6007360612667098926">"Само Wi-Fi"</item>
+ <item msgid="6007360612667098926">"Само WiFi"</item>
</string-array>
<string-array name="wifi_calling_mode_choices_without_wifi_only">
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"WiFi"</item>
+ <item msgid="2271962426654621656">"Мобилни подаци"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Ако је Wi‑Fi недоступан, користите мобилну мрежу"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Ако мобилна мрежа није доступна, користи Wi‑Fi"</string>
- <string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Позивање преко Wi-Fi-ја. Ако се Wi‑Fi веза изгуби, позив ће се завршити."</string>
- <string name="wifi_calling_off_explanation" msgid="1653424723742898015">"Када је позивање преко Wi-Fi-ја укључено, телефон може да преусмерава позиве преко Wi-Fi мрежа или мреже мобилног оператера у зависности од тога које сте подешавање изабрали и који сигнал је јачи. Пре него што укључите ову функцију, информишите се код мобилног оператера о накнадама и другим детаљима.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
+ <string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Позивање преко WiFi-ја. Ако се Wi‑Fi веза изгуби, позив ће се завршити."</string>
+ <string name="wifi_calling_off_explanation" msgid="1653424723742898015">"Када је позивање преко WiFi-ја укључено, телефон може да преусмерава позиве преко WiFi мрежа или мреже мобилног оператера у зависности од тога које сте подешавање изабрали и који сигнал је јачи. Пре него што укључите ову функцију, информишите се код мобилног оператера о накнадама и другим детаљима.<xliff:g id="ADDITIONAL_TEXT">%1$s</xliff:g>"</string>
<string name="wifi_calling_off_explanation_2" msgid="8648609693875720408"></string>
<string name="emergency_address_title" msgid="5779915349686787024">"Адреса за хитне случајеве"</string>
- <string name="emergency_address_summary" msgid="478668478569851714">"Користи се као ваша локација када упутите хитни позив помоћу Wi-Fi-ја"</string>
+ <string name="emergency_address_summary" msgid="478668478569851714">"Користи се као ваша локација када упутите хитни позив помоћу WiFi-ја"</string>
<string name="private_dns_help_message" msgid="7633526525131196650"><annotation id="url">"Сазнајте више"</annotation>" о функцијама Приватног DNS-а"</string>
<string name="wifi_calling_pref_managed_by_carrier" msgid="5458050015417972072">"Мобилни оператер управља подешавањем"</string>
- <string name="wifi_calling_settings_activation_instructions" msgid="2863642668648110908">"Активирајте Позивање преко Wi-Fi-ја"</string>
- <string name="wifi_calling_turn_on" msgid="1212277809455062043">"Укључите позивање преко Wi-Fi-ја"</string>
- <string name="wifi_calling_not_supported" msgid="216781767605669775">"Позивање преко Wi-Fi-ја није подржано за %1$s"</string>
+ <string name="wifi_calling_settings_activation_instructions" msgid="2863642668648110908">"Активирајте Позивање преко WiFi-ја"</string>
+ <string name="wifi_calling_turn_on" msgid="1212277809455062043">"Укључите позивање преко WiFi-ја"</string>
+ <string name="wifi_calling_not_supported" msgid="216781767605669775">"Позивање преко WiFi-ја није подржано за %1$s"</string>
<string name="carrier" msgid="3413463182542176886">"Мобилни оператер"</string>
<string name="display_settings_title" msgid="1243571562133261601">"Приказ"</string>
<string name="sound_settings" msgid="3306063041029638807">"Звук"</string>
@@ -1374,7 +1376,7 @@
<string name="status_signal_strength" msgid="4302597886933728789">"Јачина сигнала"</string>
<string name="status_roaming" msgid="5191044997355099561">"Роминг"</string>
<string name="status_operator" msgid="6017986100643755390">"Мрежа"</string>
- <string name="status_wifi_mac_address" msgid="3868452167971295995">"Wi-Fi MAC адреса"</string>
+ <string name="status_wifi_mac_address" msgid="3868452167971295995">"WiFi MAC адреса"</string>
<string name="status_bt_address" msgid="460568179311735657">"Bluetooth адреса"</string>
<string name="status_serial_number" msgid="8257722124627415159">"Серијски број"</string>
<string name="status_up_time" msgid="77128395333934087">"Време рада"</string>
@@ -1390,7 +1392,7 @@
<string name="memory_media_usage" msgid="2744652206722240527">"Медији"</string>
<string name="memory_downloads_usage" msgid="7039979723012065168">"Преузимања"</string>
<string name="memory_dcim_usage" msgid="599009211606524732">"Слике, видео снимци"</string>
- <string name="memory_music_usage" msgid="809605300042546279">"Аудио (музика, звукови звона, поткасти итд.)"</string>
+ <string name="memory_music_usage" msgid="809605300042546279">"Аудио (музика, звукови звона, подкасти итд.)"</string>
<string name="memory_media_misc_usage" msgid="6258827529046910705">"Друге датотеке"</string>
<string name="memory_media_cache_usage" msgid="1307620682751377717">"Кеширани подаци"</string>
<string name="sd_eject" product="nosdcard" msgid="3016608823130472449">"Искљ. дељене меморије"</string>
@@ -1435,7 +1437,7 @@
<string name="storage_menu_set_up" msgid="2849170579745958513">"Подеси"</string>
<string name="storage_menu_explore" msgid="3733439525636202662">"Истражи"</string>
<string name="storage_menu_free" msgid="6586253660759145508">"Ослободите простор"</string>
- <string name="storage_menu_manage" msgid="461380717863926516">"Управљај складиштењем"</string>
+ <string name="storage_menu_manage" msgid="461380717863926516">"Управљај меморијским простором"</string>
<string name="storage_title_usb" msgid="2015671467177303099">"USB уређај је повезан са рачунаром"</string>
<string name="usb_connection_category" msgid="2888975803638116041">"Повежи као"</string>
<string name="usb_mtp_title" msgid="6893938968831995500">"Медијски уређај (MTP)"</string>
@@ -1584,10 +1586,10 @@
<string name="error_adding_apn_type" msgid="671634520340569678">"Мобилни оператер не дозвољава називе приступних тачака типа %s."</string>
<string name="restore_default_apn" msgid="7195266404077471007">"Враћање подразумеваних подешавања назива приступне тачке."</string>
<string name="menu_restore" msgid="3799288817317293115">"Ресетуј на подразумевано"</string>
- <string name="restore_default_apn_completed" msgid="5671734152740058937">"Поновно постављање подразумеваних подешавања назива приступне тачке је завршено"</string>
+ <string name="restore_default_apn_completed" msgid="5671734152740058937">"Поновно постављање подразумеваних подешавања назива приступне тачке је завршено."</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"Опције за ресетовање"</string>
<string name="reset_dashboard_summary" msgid="8778383341461126642">"Мрежа, апликацијe или уређај могу да се ресетују"</string>
- <string name="reset_network_title" msgid="8944059136930806211">"Ресетуј Wi-Fi, мобилну мрежу и Bluetooth"</string>
+ <string name="reset_network_title" msgid="8944059136930806211">"Ресетуј WiFi, мобилну мрежу и Bluetooth"</string>
<string name="reset_network_desc" msgid="4982633363916261109">"Овим ресетујете сва подешавања мреже, укључујући:\n\n"<li>"Wi‑Fi"</li>\n<li>"Мобилне податке"</li>\n<li>"Bluetooth"</li></string>
<string name="reset_esim_title" msgid="7630781767040831893">"Обриши преузете SIM картице"</string>
<string name="reset_esim_desc" msgid="433226911566802">"Да бисте преузели заменске SIM картице, контактирајте мобилног оператера. Тиме се неће отказати ниједан тарифни пакет."</string>
@@ -1627,22 +1629,22 @@
<string name="master_clear_progress_text" msgid="5418958116008976218">"Сачекајте..."</string>
<string name="call_settings_title" msgid="5033906789261282752">"Подешавања позива"</string>
<string name="call_settings_summary" msgid="2119161087671450035">"Подешавање гласовне поште, преусмеравања позива, стављања позива на чекање, ИД-а позиваоца"</string>
- <string name="tether_settings_title_usb" msgid="4265582654602420357">"USB Интернет повезивање"</string>
+ <string name="tether_settings_title_usb" msgid="4265582654602420357">"USB привезивање"</string>
<string name="tether_settings_title_wifi" msgid="2060965130234484613">"Преносни хотспот"</string>
<string name="tether_settings_title_bluetooth" msgid="1999590158102569959">"Bluetooth привезивање"</string>
- <string name="tether_settings_title_usb_bluetooth" msgid="1159128764162788159">"Повезивање са интернетом"</string>
+ <string name="tether_settings_title_usb_bluetooth" msgid="1159128764162788159">"Привезивање"</string>
<string name="tether_settings_title_all" msgid="6935843543433954181">"Хотспот и привезивање"</string>
<string name="tether_settings_summary_hotspot_on_tether_on" msgid="1289593649526514499">"Хотспот је укључен, привезивање"</string>
<string name="tether_settings_summary_hotspot_on_tether_off" msgid="8010689354668285422">"Хотспот је укључен"</string>
<string name="tether_settings_summary_hotspot_off_tether_on" msgid="1349909238672649877">"Привезивање"</string>
<string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"Није могуће привезивање нити коришћење преносивих хотспотова док је Уштеда података укључена"</string>
<string name="usb_title" msgid="7480927657535578688">"USB"</string>
- <string name="usb_tethering_button_text" msgid="6242228383142012332">"USB повезивање"</string>
+ <string name="usb_tethering_button_text" msgid="6242228383142012332">"USB привезивање"</string>
<string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Дељење интернет везе телефона преко USB-а"</string>
<string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"Дељење интернет везе таблета преко USB-а"</string>
<string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"Bluetooth привезивање"</string>
<string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"Делите интернет везу таблета преко Bluetooth-а"</string>
- <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Делите интернет везу телефона преко Bluetooth-а"</string>
+ <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Дељење интернет везе телефона преко Bluetooth-а"</string>
<string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"Интернет веза уређаја <xliff:g id="DEVICE_NAME">%1$d</xliff:g> се дели преко Bluetooth-а"</string>
<string name="bluetooth_tethering_overflow_error" msgid="6946561351369376943">"Привезивање на више од <xliff:g id="MAXCONNECTION">%1$d</xliff:g> уређаја није могуће."</string>
<string name="bluetooth_untether_blank" msgid="5428300773782256084">"Интернет веза са уређајем <xliff:g id="DEVICE_NAME">%1$s</xliff:g> ће бити прекинута."</string>
@@ -1656,7 +1658,7 @@
<string name="sms_change_default_no_previous_dialog_text" msgid="4680224695080527907">"Желите ли да користите <xliff:g id="NEW_APP">%s</xliff:g> као апликацију за SMS?"</string>
<string name="network_scorer_picker_title" msgid="1691073966560952916">"Добављач оцене мреже"</string>
<string name="network_scorer_picker_none_preference" msgid="6448280557733231737">"Ништа"</string>
- <string name="network_scorer_change_active_dialog_title" msgid="4274159562371475090">"Желите да промените Wi‑Fi assistant-а?"</string>
+ <string name="network_scorer_change_active_dialog_title" msgid="4274159562371475090">"Желите да промените Wi‑Fi помоћник?"</string>
<string name="network_scorer_change_active_dialog_text" msgid="4264089809189760730">"Желите ли да користите апликацију <xliff:g id="NEW_APP">%1$s</xliff:g> уместо апликације <xliff:g id="CURRENT_APP">%2$s</xliff:g> за управљање мрежним везама?"</string>
<string name="network_scorer_change_active_no_previous_dialog_text" msgid="6394483538843474495">"Желите ли да користите апликацију <xliff:g id="NEW_APP">%s</xliff:g> за управљање мрежним везама?"</string>
<string name="mobile_unknown_sim_operator" msgid="872589370085135817">"Непознати SIM оператер"</string>
@@ -1674,7 +1676,7 @@
</plurals>
<string name="location_category_recent_location_access" msgid="286059523360285026">"Недавни приступ локацији"</string>
<string name="location_recent_location_access_view_details" msgid="2051602261436245905">"Прикажи детаље"</string>
- <string name="location_no_recent_apps" msgid="77502059586413278">"Ниједна апликација није скоро тражила локацију"</string>
+ <string name="location_no_recent_apps" msgid="77502059586413278">"Ниједна апликација није недавно тражила локацију"</string>
<string name="location_no_recent_accesses" msgid="6289916310397279890">"Ниједна апликација није недавно приступила локацији"</string>
<string name="location_high_battery_use" msgid="7177199869979522663">"Велика потрошња батерије"</string>
<string name="location_low_battery_use" msgid="5030448574501435888">"Мала потрошња батерије"</string>
@@ -1684,9 +1686,9 @@
<string name="location_scanning_bluetooth_always_scanning_title" msgid="196241746742607453">"Bluetooth скенирање"</string>
<string name="location_scanning_bluetooth_always_scanning_description" msgid="3796673798637848690">"Дозволите апликацијама и услугама да траже уређаје у близини у сваком тренутку, чак и када је Bluetooth искључен. Ово може да се користи, на пример, за побољшање функција и услуга заснованих на локацији."</string>
<string name="managed_profile_location_services" msgid="224925483299159541">"Услуге локације за посао"</string>
- <string name="location_network_based" msgid="1535812159327454835">"Локац. на основу Wi-Fi и моб. мреже"</string>
+ <string name="location_network_based" msgid="1535812159327454835">"Локац. на основу WiFi и моб. мреже"</string>
<string name="location_neighborhood_level" msgid="8459352741296587916">"Нека апл. користе Google-ову услугу лоцирања за брже одређивање локације. Анонимни подаци о локацији прикупљаће се и слати Google-у."</string>
- <string name="location_neighborhood_level_wifi" msgid="6120133551482003840">"Локација се одређује помоћу Wi-Fi-ја"</string>
+ <string name="location_neighborhood_level_wifi" msgid="6120133551482003840">"Локација се одређује помоћу WiFi-ја"</string>
<string name="location_gps" msgid="688049341158297763">"GPS сателити"</string>
<string name="location_street_level" product="tablet" msgid="4459804798444296650">"Нека апликације користе GPS на таблету како би тачно одредиле вашу локацију"</string>
<string name="location_street_level" product="default" msgid="7407688345675450051">"Нека апликације користе GPS на телефону како би тачно одредиле вашу локацију"</string>
@@ -1744,18 +1746,18 @@
<string name="lockpassword_choose_your_password_header_for_face" msgid="8823110536502072216">"Потврда идентитета лицем захтева лозинку"</string>
<string name="lockpassword_choose_your_pattern_header_for_face" msgid="5563793748503883666">"Потврда идентитета лицем захтева шаблон"</string>
<string name="lockpassword_choose_your_pin_header_for_face" msgid="7238352632535405068">"Потврда идентитета лицем захтева PIN"</string>
- <string name="lockpassword_confirm_your_pattern_generic" msgid="6146545393074070916">"Употребите шаблон за уређај да бисте наставили"</string>
+ <string name="lockpassword_confirm_your_pattern_generic" msgid="6146545393074070916">"Користите шаблон за уређај да бисте наставили"</string>
<string name="lockpassword_confirm_your_pin_generic" msgid="8732268389177735264">"Унесите PIN уређаја да бисте наставили"</string>
<string name="lockpassword_confirm_your_password_generic" msgid="6304552647060899594">"Унесите лозинку уређаја да бисте наставили"</string>
- <string name="lockpassword_confirm_your_pattern_generic_profile" msgid="3074250084050465513">"Употребите шаблон за профил за Work да бисте наставили"</string>
- <string name="lockpassword_confirm_your_pin_generic_profile" msgid="6037908971086439523">"Унесите PIN за профил за Work да бисте наставили"</string>
- <string name="lockpassword_confirm_your_password_generic_profile" msgid="2646162490703489685">"Унесите лозинку за профил за Work да бисте наставили"</string>
+ <string name="lockpassword_confirm_your_pattern_generic_profile" msgid="3074250084050465513">"Користите шаблон за пословни профил да бисте наставили"</string>
+ <string name="lockpassword_confirm_your_pin_generic_profile" msgid="6037908971086439523">"Унесите PIN за пословни профил да бисте наставили"</string>
+ <string name="lockpassword_confirm_your_password_generic_profile" msgid="2646162490703489685">"Унесите лозинку за пословни профил да бисте наставили"</string>
<string name="lockpassword_strong_auth_required_device_pattern" msgid="1014214190135045781">"Ради веће безбедности користите шаблон за уређај"</string>
<string name="lockpassword_strong_auth_required_device_pin" msgid="24030584350601016">"Ради веће безбедности унесите PIN за уређај"</string>
<string name="lockpassword_strong_auth_required_device_password" msgid="7746588206458754598">"Ради веће безбедности унесите лозинку за уређај"</string>
- <string name="lockpassword_strong_auth_required_work_pattern" msgid="6861154706098327320">"Ради веће безбедности користите шаблон за Work"</string>
- <string name="lockpassword_strong_auth_required_work_pin" msgid="6306902249365524526">"Ради веће безбедности унесите PIN за Work"</string>
- <string name="lockpassword_strong_auth_required_work_password" msgid="2917338218971012776">"Ради веће безбедности унесите лозинку за Work"</string>
+ <string name="lockpassword_strong_auth_required_work_pattern" msgid="6861154706098327320">"Ради веће безбедности користите шаблон за посао"</string>
+ <string name="lockpassword_strong_auth_required_work_pin" msgid="6306902249365524526">"Ради веће безбедности унесите пословни PIN"</string>
+ <string name="lockpassword_strong_auth_required_work_password" msgid="2917338218971012776">"Ради веће безбедности унесите пословну лозинку"</string>
<string name="lockpassword_confirm_your_pattern_details_frp" msgid="1085862410379709928">"Телефон је ресетован на фабричка подешавања. Да бисте га користили, унесите претходни шаблон."</string>
<string name="lockpassword_confirm_your_pin_details_frp" msgid="6849889353126558761">"Телефон је ресетован на фабричка подешавања. Да бисте га користили, унесите претходни PIN."</string>
<string name="lockpassword_confirm_your_password_details_frp" msgid="3239944795659418737">"Телефон је ресетован на фабричка подешавања. Да бисте га користили, унесите претходну лозинку."</string>
@@ -1792,13 +1794,13 @@
<string name="lockpattern_settings_help_how_to_record" msgid="6037403647312543908">"Како нацртати шаблон за откључавање"</string>
<string name="lockpattern_too_many_failed_confirmation_attempts" msgid="3043127997770535921">"Превише нетачних покушаја. Пробајте поново за <xliff:g id="NUMBER">%d</xliff:g> сек."</string>
<string name="activity_not_found" msgid="3492413375341165453">"Апликација није инсталирана на телефону."</string>
- <string name="lock_settings_profile_title" msgid="3928992050074556160">"Безбедност профила за Work"</string>
- <string name="lock_settings_profile_screen_lock_title" msgid="285267471459162203">"Закључавање екрана за профил за Work"</string>
+ <string name="lock_settings_profile_title" msgid="3928992050074556160">"Безбедност пословног профила"</string>
+ <string name="lock_settings_profile_screen_lock_title" msgid="285267471459162203">"Закључавање екрана за пословни профил"</string>
<string name="lock_settings_profile_unification_title" msgid="2629698644191935287">"Користи једно закључавање"</string>
- <string name="lock_settings_profile_unification_summary" msgid="4797188229308317207">"Користите једно закључавање екрана за профил за Work и уређај"</string>
+ <string name="lock_settings_profile_unification_summary" msgid="4797188229308317207">"Користите једно закључавање екрана за пословни профил и уређај"</string>
<string name="lock_settings_profile_unification_dialog_title" msgid="1690211342491067179">"Желите ли да користите једно закључавање?"</string>
- <string name="lock_settings_profile_unification_dialog_body" msgid="8629158560032603101">"Уређај ће користити закључавање екрана за Work профил. Смернице за Work ће се примењивати на оба закључавања."</string>
- <string name="lock_settings_profile_unification_dialog_uncompliant_body" msgid="1217609779267643474">"Закључавање екрана за профил за Work није у складу са безбедносним захтевима ваше организације. Можете да користите исто закључавање екрана за уређај и профил за Work, али ће се примењивати све смернице за закључавање екрана за Work."</string>
+ <string name="lock_settings_profile_unification_dialog_body" msgid="8629158560032603101">"Уређај ће користити закључавање екрана за пословни профил. Смернице за посао ће се примењивати на оба закључавања."</string>
+ <string name="lock_settings_profile_unification_dialog_uncompliant_body" msgid="1217609779267643474">"Закључавање екрана за пословни профил није у складу са безбедносним захтевима ваше организације. Можете да користите исто закључавање екрана за уређај и пословни профил, али ће се примењивати све смернице за закључавање екрана за посао."</string>
<string name="lock_settings_profile_unification_dialog_confirm" msgid="888942752619181804">"Користи једно закључавање"</string>
<string name="lock_settings_profile_unification_dialog_uncompliant_confirm" msgid="8046452284593057185">"Користи једно закључавање"</string>
<string name="lock_settings_profile_unified_summary" msgid="5347244550751740962">"Исто као закључавање екрана уређаја"</string>
@@ -1992,7 +1994,7 @@
<string name="show_ime_summary" msgid="3246628154011464373">"Задржи је на екрану док је физичка тастатура активна"</string>
<string name="keyboard_shortcuts_helper" msgid="6574386807271399788">"Помоћ за тастерске пречице"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="8024313306403779742">"Приказ доступних пречица"</string>
- <string name="language_and_input_for_work_category_title" msgid="2053255944038892588">"Тастатуре и алатке за профил за Work"</string>
+ <string name="language_and_input_for_work_category_title" msgid="2053255944038892588">"Тастатуре и алатке за пословни профил"</string>
<string name="virtual_keyboards_for_work_title" msgid="3968291646938204523">"Виртуелна тастатура за посао"</string>
<string name="default_keyboard_layout" msgid="9171704064451242230">"Подразумевано"</string>
<string name="pointer_speed" msgid="800691982011350432">"Брзина показивача"</string>
@@ -2114,9 +2116,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Вибрирање обавештења"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Вибрирање звона"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Вибрација при додиру"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Користи услугу"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Користи корекцију боја"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Користи натписе"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Користи услугу"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Користи корекцију боја"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Користи титл"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Настави"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Слушни апарати"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Није повезан ниједан слушни апарат"</string>
@@ -2286,8 +2288,8 @@
<!-- no translation found for battery_stats_last_duration (8190573267292309839) -->
<skip />
<string name="awake" msgid="8956720170442161285">"Време буђења уређаја"</string>
- <string name="wifi_on_time" msgid="2487820618265936068">"Време од укључивања Wi-Fi мреже"</string>
- <string name="bluetooth_on_time" msgid="6400569492287292639">"Време од укључивања Wi-Fi мреже"</string>
+ <string name="wifi_on_time" msgid="2487820618265936068">"Време од укључивања WiFi мреже"</string>
+ <string name="bluetooth_on_time" msgid="6400569492287292639">"Време од укључивања WiFi мреже"</string>
<string name="advanced_battery_title" msgid="5026866913848464170">"Потрошња батерије"</string>
<string name="history_details_title" msgid="8608193822257799936">"Детаљи историје"</string>
<string name="battery_details_title" msgid="5358230551490703067">"Потрошња батерије"</string>
@@ -2304,7 +2306,7 @@
<string name="battery_tip_smart_battery_title" product="tablet" msgid="203494973250969040">"Продужите трајање батерије таблета"</string>
<string name="battery_tip_smart_battery_title" product="device" msgid="7419448992583346364">"Продужите трајање батерије уређаја"</string>
<string name="battery_tip_smart_battery_summary" msgid="5344821856478265778">"Укључите менаџер батерије"</string>
- <string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"Укључи уштеду батерије"</string>
+ <string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"Укључите уштеду батерије"</string>
<string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Батерија може да се испразни раније него обично"</string>
<string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"Уштеда батерије је укључена"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"Неке функције могу да буду ограничене"</string>
@@ -2409,7 +2411,7 @@
<string name="usage_type_cpu_foreground" msgid="5496661858574622156">"Процесор у предњем плану"</string>
<string name="usage_type_wake_lock" msgid="6729977238748413476">"Задржи ван стања спавања"</string>
<string name="usage_type_gps" msgid="5914062195732419196">"GPS"</string>
- <string name="usage_type_wifi_running" msgid="4192567991891907030">"Wi-Fi је активан"</string>
+ <string name="usage_type_wifi_running" msgid="4192567991891907030">"WiFi је активан"</string>
<string name="usage_type_phone" product="tablet" msgid="4279605085824633501">"Таблет"</string>
<string name="usage_type_phone" product="default" msgid="3901842461077646153">"Телефон"</string>
<string name="usage_type_data_send" msgid="6339880867171142725">"Послати мобилни пакети"</string>
@@ -2430,7 +2432,7 @@
<string name="battery_action_app_details" msgid="1077011181969550402">"Информације о апликацији"</string>
<string name="battery_action_app_settings" msgid="587998773852488539">"Подешавања апликација"</string>
<string name="battery_action_display" msgid="4887913003634317465">"Подешавања екрана"</string>
- <string name="battery_action_wifi" msgid="7123520587925323824">"Wi-Fi подешавања"</string>
+ <string name="battery_action_wifi" msgid="7123520587925323824">"WiFi подешавања"</string>
<string name="battery_action_bluetooth" msgid="718594420017519807">"Подешавања за Bluetooth"</string>
<string name="battery_desc_voice" msgid="4731966028374974986">"Батерија коју користе гласовни позиви"</string>
<string name="battery_desc_standby" product="tablet" msgid="2941777996429933419">"Искоришћена батерија када је таблет неактиван"</string>
@@ -2441,8 +2443,8 @@
<string name="battery_desc_camera" msgid="517966830222999462">"Проценат батерије који троши камера"</string>
<string name="battery_desc_display" msgid="6701005808894183097">"Батерија коју користи екран и позадинско светло"</string>
<string name="battery_sugg_display" msgid="6366790848514389990">"Смањите осветљеност екрана и/или време до гашења"</string>
- <string name="battery_desc_wifi" msgid="3497535902126253386">"Батерија коју користи Wi-Fi"</string>
- <string name="battery_sugg_wifi" msgid="3796329601134263039">"Искључите Wi-Fi када га не користите или када није доступан"</string>
+ <string name="battery_desc_wifi" msgid="3497535902126253386">"Батерија коју користи WiFi"</string>
+ <string name="battery_sugg_wifi" msgid="3796329601134263039">"Искључите WiFi када га не користите или када није доступан"</string>
<string name="battery_desc_bluetooth" msgid="3468061900485447679">"Батерија коју користи Bluetooth"</string>
<string name="battery_sugg_bluetooth_basic" msgid="6353294067057749310">"Искључите Bluetooth када га не користите"</string>
<string name="battery_sugg_bluetooth_headset" msgid="2421931037149315202">"Покушајте да се повежете са другим Bluetooth уређајем"</string>
@@ -2495,7 +2497,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Укључи"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Користи Уштеду батерије"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Користи уштеду батерије"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Аутоматски укључи"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Никада"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"на <xliff:g id="PERCENT">%1$s</xliff:g> батерије"</string>
@@ -2573,7 +2575,7 @@
<string name="credential_storage_type_software" msgid="1335905150062717150">"Само софтверски"</string>
<string name="credentials_settings_not_available" msgid="5490259681690183274">"Акредитиви нису доступни за овог корисника"</string>
<string name="credential_for_vpn_and_apps" msgid="2462642486949593841">"Инсталирано за VPN и апликације"</string>
- <string name="credential_for_wifi" msgid="2903295786961726388">"Инсталирано за Wi-Fi"</string>
+ <string name="credential_for_wifi" msgid="2903295786961726388">"Инсталирано за WiFi"</string>
<string name="credentials_reset_hint" msgid="3484350477764088169">"Желите ли да уклоните сав садржај?"</string>
<string name="credentials_erased" msgid="7287088033523869085">"Складиште акредитива је избрисано."</string>
<string name="credentials_not_erased" msgid="9137227570738627637">"Није могуће oбрисати складиште акредитива."</string>
@@ -2586,7 +2588,7 @@
<string name="backup_section_title" msgid="8177209731777904656">"Резервна копија и ресетовање"</string>
<string name="personal_data_section_title" msgid="9161854418510071558">"Лични подаци"</string>
<string name="backup_data_title" msgid="4461508563849583624">"Прављење резервних копија података"</string>
- <string name="backup_data_summary" msgid="555459891017933746">"Прави резервне копије података о апликацијама, Wi-Fi лозинки и других подешавања на Google серверима"</string>
+ <string name="backup_data_summary" msgid="555459891017933746">"Прави резервне копије података о апликацијама, WiFi лозинки и других подешавања на Google серверима"</string>
<string name="backup_configure_account_title" msgid="1534734650559070294">"Резервна копија налога"</string>
<string name="backup_data_management_title" msgid="6299288795610243508">"Управљајте налогом за резервне копије"</string>
<string name="include_app_data_title" msgid="6117211611131913293">"Уврштавање података апликација"</string>
@@ -2595,11 +2597,11 @@
<string name="backup_inactive_title" msgid="5513496915638307750">"Услуга прављења резервних копија није активна"</string>
<string name="backup_configure_account_default_summary" msgid="5718298066335006412">"Тренутно ниједан налог не чува резервне копије података"</string>
<string name="backup_erase_dialog_title" msgid="8178424339104463014"></string>
- <string name="backup_erase_dialog_message" msgid="8767843355330070902">"Желите ли да зауставите прављење резервних копија Wi-Fi лозинки, обележивача, осталих подешавања и података о апликацијама, као и да избришете све копије на Google серверима?"</string>
- <string name="fullbackup_erase_dialog_message" msgid="2588536036471144070">"Желите ли да зауставите прављење резервних копија података уређаја (попут Wi-Fi лозинки и историје позива) и података апликација (попут подешавања и датотека сачуваних у апликацијама) и избришете све копије на удаљеним серверима?"</string>
- <string name="fullbackup_data_summary" msgid="406274198094268556">"Аутоматски правите резервне копије података уређаја (попут Wi-Fi лозинки и историје позива) и података апликација (попут подешавања и датотека сачуваних у апликацијама) даљински.\n\nКада укључите аутоматско прављење резервних копија, подаци уређаја и апликација се повремено чувају даљински. Подаци апликација могу да буду било који подаци које је апликација сачувала (на основу подешавања програмера), укључујући потенцијално осетљиве податке као што су контакти, поруке и слике."</string>
+ <string name="backup_erase_dialog_message" msgid="8767843355330070902">"Желите ли да зауставите прављење резервних копија WiFi лозинки, обележивача, осталих подешавања и података о апликацијама, као и да избришете све копије на Google серверима?"</string>
+ <string name="fullbackup_erase_dialog_message" msgid="2588536036471144070">"Желите ли да зауставите прављење резервних копија података уређаја (попут WiFi лозинки и историје позива) и података апликација (попут подешавања и датотека сачуваних у апликацијама) и избришете све копије на удаљеним серверима?"</string>
+ <string name="fullbackup_data_summary" msgid="406274198094268556">"Аутоматски правите резервне копије података уређаја (попут WiFi лозинки и историје позива) и података апликација (попут подешавања и датотека сачуваних у апликацијама) даљински.\n\nКада укључите аутоматско прављење резервних копија, подаци уређаја и апликација се повремено чувају даљински. Подаци апликација могу да буду било који подаци које је апликација сачувала (на основу подешавања програмера), укључујући потенцијално осетљиве податке као што су контакти, поруке и слике."</string>
<string name="device_admin_settings_title" msgid="2074319456047334589">"Подешавања администратора уређаја"</string>
- <string name="active_device_admin_msg" msgid="6929247869516924549">"Апликација за администраторе уређаја"</string>
+ <string name="active_device_admin_msg" msgid="6929247869516924549">"Апликација за администратора уређаја"</string>
<string name="remove_device_admin" msgid="4413438593788336400">"Деактивирај ову апликацију за администратора уређаја"</string>
<string name="uninstall_device_admin" msgid="9017499299961719830">"Деинсталирај апликацију"</string>
<string name="remove_and_uninstall_device_admin" msgid="5607703579731496253">"Деактивирај и деинсталирај"</string>
@@ -2614,7 +2616,7 @@
<string name="add_device_admin" msgid="1621152410207260584">"Активирај ову апликацију за администраторе уређаја"</string>
<string name="device_admin_add_title" msgid="6097881332139146897">"Администратор уређаја"</string>
<string name="device_admin_warning" msgid="4421817419326480449">"Активирање ове апликације за администраторе омогућиће апликацији <xliff:g id="APP_NAME">%1$s</xliff:g> да обави следеће операције:"</string>
- <string name="device_admin_status" msgid="5424944611789040723">"Ова апликација за администраторе је активна и омогућава апликацији <xliff:g id="APP_NAME">%1$s</xliff:g> да обави следеће операције:"</string>
+ <string name="device_admin_status" msgid="5424944611789040723">"Ова апликација за администратора је активна и омогућава апликацији <xliff:g id="APP_NAME">%1$s</xliff:g> да обави следеће операције:"</string>
<string name="profile_owner_add_title" msgid="735805919754362791">"Активирати Менаџера профила?"</string>
<string name="adding_profile_owner_warning" msgid="1284541194547382194">"Ако наставите, корисником ће управљати администратор, који ће можда моћи да чува и повезане податке, поред личних података.\n\nАдминистратор може да прати подешавања, приступ, апликације и податке повезане са овим корисником, укључујући активности на мрежи и информације о локацији уређаја, као и да управља њима."</string>
<string name="admin_disabled_other_options" msgid="8097063307730025707">"Администратор је онемогућио друге опције"</string>
@@ -2632,10 +2634,10 @@
<string name="sync_is_failing" msgid="8284618104132302644">"Синхронизација тренутно има проблема. Ускоро ће се вратити."</string>
<string name="add_account_label" msgid="4461298847239641874">"Додај налог"</string>
<string name="managed_profile_not_available_label" msgid="8784246681719821917">"Пословни профил још увек није доступан"</string>
- <string name="work_mode_label" msgid="6845849194740195757">"Профил за Work"</string>
+ <string name="work_mode_label" msgid="6845849194740195757">"Пословни профил"</string>
<string name="work_mode_on_summary" msgid="1682781113156323592">"Овим управља организација"</string>
<string name="work_mode_off_summary" msgid="1688885392211178315">"Апликације и обавештења су искључени"</string>
- <string name="remove_managed_profile_label" msgid="4625542553784793536">"Уклони профил за посао"</string>
+ <string name="remove_managed_profile_label" msgid="4625542553784793536">"Уклони пословни профил"</string>
<string name="background_data" msgid="8275750862371471171">"Подаци о позадини"</string>
<string name="background_data_summary" msgid="799640633948841990">"Апликације увек могу да синхронизују, шаљу и примају податке"</string>
<string name="background_data_dialog_title" msgid="8306650658158895976">"Желите да онемогућите позадинске податке?"</string>
@@ -2716,7 +2718,7 @@
<string name="data_usage_disable_mobile_limit" msgid="1937796699758613667">"Подеси ограничење за мобил. под."</string>
<string name="data_usage_disable_4g_limit" msgid="7131367986548147266">"Подеси ограничење за 4G податке"</string>
<string name="data_usage_disable_3g_limit" msgid="6746819313032692220">"Подеси ограничење за 2G-3G податке"</string>
- <string name="data_usage_disable_wifi_limit" msgid="8214267551888018353">"Ограничи Wi-Fi податке"</string>
+ <string name="data_usage_disable_wifi_limit" msgid="8214267551888018353">"Ограничи WiFi податке"</string>
<string name="data_usage_tab_wifi" msgid="7224124683039634055">"Wi‑Fi"</string>
<string name="data_usage_tab_ethernet" msgid="5053077378022543867">"Етернет"</string>
<string name="data_usage_tab_mobile" msgid="540101181815160147">"Мобилни"</string>
@@ -2751,9 +2753,9 @@
<string name="data_usage_limit_dialog_mobile" product="tablet" msgid="2000713577999830647">"Таблет ће искључити мобилне податке чим достигне ограничење које сте подесили.\n\nПошто потрошњу података мери таблет, а мобилни оператер може другачије да рачуна потрошњу, размислите о томе да подесите ниже ограничење."</string>
<string name="data_usage_limit_dialog_mobile" product="default" msgid="943546278705619205">"Телефон ће искључити мобилне податке чим достигне ограничење које сте подесили.\n\nПошто потрошњу података мери телефон, а мобилни оператер може другачије да рачуна потрошњу, размислите о томе да подесите ниже ограничење."</string>
<string name="data_usage_restrict_background_title" msgid="3568746530413220844">"Желите ли да ограничите позадинске податке?"</string>
- <string name="data_usage_restrict_background" msgid="995811034744808575">"Ако ограничите мобилне позадинске податке, неке апликације и услуге неће функционисати ако нисте повезани са Wi-Fi-јем."</string>
- <string name="data_usage_restrict_background_multiuser" product="tablet" msgid="6032810839234864814">"Ако ограничите мобилне позадинске податке, неке апликације и услуге неће функционисати ако нисте повезани са Wi-Fi-јем.\n\nОво подешавање утиче на све кориснике на овом таблету."</string>
- <string name="data_usage_restrict_background_multiuser" product="default" msgid="6846901756455789858">"Ако ограничите мобилне позадинске податке, неке апликације и услуге неће функционисати ако нисте повезани са Wi-Fi-јем.\n\nОво подешавање утиче на све кориснике на овом телефону."</string>
+ <string name="data_usage_restrict_background" msgid="995811034744808575">"Ако ограничите мобилне позадинске податке, неке апликације и услуге неће функционисати ако нисте повезани са WiFi-јем."</string>
+ <string name="data_usage_restrict_background_multiuser" product="tablet" msgid="6032810839234864814">"Ако ограничите мобилне позадинске податке, неке апликације и услуге неће функционисати ако нисте повезани са WiFi-јем.\n\nОво подешавање утиче на све кориснике на овом таблету."</string>
+ <string name="data_usage_restrict_background_multiuser" product="default" msgid="6846901756455789858">"Ако ограничите мобилне позадинске податке, неке апликације и услуге неће функционисати ако нисте повезани са WiFi-јем.\n\nОво подешавање утиче на све кориснике на овом телефону."</string>
<string name="data_usage_sweep_warning" msgid="4646401408698778092"><font size="12">"упоз."</font>\n<font size="18">"<xliff:g id="NUMBER">^1</xliff:g>"</font>" "<font size="9">"<xliff:g id="UNIT">^2</xliff:g>"</font></string>
<string name="data_usage_sweep_limit" msgid="6101105504557548269"><font size="12">"огран."</font>\n<font size="18">"<xliff:g id="NUMBER">^1</xliff:g>"</font>" "<font size="9">"<xliff:g id="UNIT">^2</xliff:g>"</font></string>
<string name="data_usage_uninstalled_apps" msgid="4152786786140875769">"Уклоњене апликације"</string>
@@ -2766,7 +2768,7 @@
<string name="data_usage_metered_body" msgid="1342905101297753439">"Мреже са ограничењем се третирају као мобилне мреже када постоји ограничење за позадинске податке. Апликације могу да вас упозоре када намеравате да користите те мреже за велика преузимања."</string>
<string name="data_usage_metered_mobile" msgid="3675591449158207593">"Мобилне мреже"</string>
<string name="data_usage_metered_wifi" msgid="2955256408132426720">"Wi‑Fi мреже са ограничењем"</string>
- <string name="data_usage_metered_wifi_disabled" msgid="5771083253782103415">"Да бисте изабрали мреже са ограничењем, укључите Wi-Fi."</string>
+ <string name="data_usage_metered_wifi_disabled" msgid="5771083253782103415">"Да бисте изабрали мреже са ограничењем, укључите WiFi."</string>
<string name="data_usage_metered_auto" msgid="7924116401382629319">"Аутоматски"</string>
<string name="data_usage_metered_yes" msgid="7333744880035386073">"Са ограничењем"</string>
<string name="data_usage_metered_no" msgid="1961524615778610008">"Без ограничења"</string>
@@ -2875,7 +2877,7 @@
<item quantity="other"><xliff:g id="MANAGING_DOMAIN_1">%s</xliff:g> су инсталирала ауторитете за издавање сертификата на уређају, што може да им омогући да прате активности уређаја на мрежи, укључујући имејлове, апликације и безбедне веб-сајтове.\n\nКонтактирајте администратора да бисте добили више информација о овим сертификатима.</item>
</plurals>
<plurals name="ssl_ca_cert_info_message" formatted="false" msgid="8271858091418779584">
- <item quantity="one"><xliff:g id="MANAGING_DOMAIN_1">%s</xliff:g> је инсталирао ауторитете за издавање сертификата за профил за Work, што може да му омогући да прати активности на пословној мрежи, укључујући имејлове, апликације и безбедне веб-сајтове.\n\nКонтактирајте администратора да бисте добили више информација о овим сертификатима.</item>
+ <item quantity="one"><xliff:g id="MANAGING_DOMAIN_1">%s</xliff:g> је инсталирао ауторитете за издавање сертификата за пословни профил, што може да му омогући да прати активности на пословној мрежи, укључујући имејлове, апликације и безбедне веб-сајтове.\n\nКонтактирајте администратора да бисте добили више информација о овим сертификатима.</item>
<item quantity="few"><xliff:g id="MANAGING_DOMAIN_1">%s</xliff:g> су инсталирала ауторитете за издавање сертификата на уређају, што може да им омогући да прате активности уређаја на мрежи, укључујући имејлове, апликације и безбедне веб-сајтове.\n\nКонтактирајте администратора да бисте добили више информација о овим сертификатима.</item>
<item quantity="other"><xliff:g id="MANAGING_DOMAIN_1">%s</xliff:g> су инсталирала ауторитете за издавање сертификата на уређају, што може да им омогући да прате активности уређаја на мрежи, укључујући имејлове, апликације и безбедне веб-сајтове.\n\nКонтактирајте администратора да бисте добили више информација о овим сертификатима.</item>
</plurals>
@@ -3100,7 +3102,7 @@
<string name="keywords_flashlight" msgid="7733996050628473024">"Батеријска лампа, светло, лампа"</string>
<string name="keywords_change_wifi_state" msgid="7697524907886303535">"wifi, wi-fi, укључи/искључи, контрола"</string>
<string name="keywords_more_mobile_networks" msgid="5605342743169059942">"мобилна мрежа, мобилни подаци, мобилни оператер, бежично, подаци, 4g, 3g, 2g, lte"</string>
- <string name="keywords_wifi_calling" msgid="3554052148729818521">"WiFi, Wi-Fi, позив, позивање"</string>
+ <string name="keywords_wifi_calling" msgid="3554052148729818521">"WiFi, WiFi, позив, позивање"</string>
<string name="keywords_display" msgid="355147521915213375">"екран, додирни екран"</string>
<string name="keywords_display_brightness_level" msgid="7649410848561920512">"затамни екран, додирни екран, батерија, светло"</string>
<string name="keywords_display_night_display" msgid="3647370193110044967">"затамни екран, ноћ, сенка, трећа смена, осветљеност, боја екрана, боја"</string>
@@ -3132,7 +3134,7 @@
<string name="keywords_color_temperature" msgid="2255253972992035046">"боја, температура, D65, D73, бела, жута, плава, топла, хладна"</string>
<string name="keywords_lockscreen" msgid="4936846554280830394">"превлачење за откључавање, лозинка, шаблон, PIN"</string>
<string name="keywords_profile_challenge" msgid="8653718001253979611">"work изазов, work, профил"</string>
- <string name="keywords_unification" msgid="2020759909366983593">"профил за Work, профил којим се управља, обједини, обједињавање, Work, профил"</string>
+ <string name="keywords_unification" msgid="2020759909366983593">"пословни профил, профил којим се управља, обједини, обједињавање, посао, профил"</string>
<string name="keywords_gesture" msgid="5031323247529869644">"покрети"</string>
<string name="keywords_payment_settings" msgid="4745023716567666052">"платите, додирните, плаћања"</string>
<string name="keywords_backup" msgid="7433356270034921627">"резервна копија, правити резервну копију"</string>
@@ -3188,7 +3190,7 @@
<string name="other_sound_settings" msgid="5250376066099818676">"Други звукови"</string>
<string name="dial_pad_tones_title" msgid="8877212139988655769">"Тонови нумеричке тастатуре"</string>
<string name="screen_locking_sounds_title" msgid="4407110895465866809">"Звукови закључавања екрана"</string>
- <string name="charging_sounds_title" msgid="5070437987230894287">"Мењајући звуци и вибрација"</string>
+ <string name="charging_sounds_title" msgid="5070437987230894287">"Звукови и вибрација пуњења"</string>
<string name="docking_sounds_title" msgid="2573137471605541366">"Звукови монтирања"</string>
<string name="touch_sounds_title" msgid="165237488496165652">"Звукови при додиру"</string>
<string name="vibrate_on_touch_title" msgid="6360155469279157684">"Вибрација при додиру"</string>
@@ -3253,10 +3255,10 @@
<string name="zen_mode_block_effects_screen_off" msgid="6380935819882837552">"Када је екран искључен"</string>
<string name="zen_mode_block_effect_sound" msgid="1499243540186357631">"Искључи звук и вибрацију"</string>
<string name="zen_mode_block_effect_intent" msgid="5666951244667422668">"Не укључуј екран"</string>
- <string name="zen_mode_block_effect_light" msgid="8679333758037487644">"Не користи треперење лампице"</string>
+ <string name="zen_mode_block_effect_light" msgid="8679333758037487644">"Не трепери лампицом"</string>
<string name="zen_mode_block_effect_peek" msgid="6075662813575910221">"Не приказуј искачућа обавештења на екрану"</string>
<string name="zen_mode_block_effect_status" msgid="6516614225115681068">"Сакриј иконе статусне траке у врху"</string>
- <string name="zen_mode_block_effect_badge" msgid="3891743027347075136">"Сакриј тачке за обав. на иконама апл."</string>
+ <string name="zen_mode_block_effect_badge" msgid="3891743027347075136">"Сакриј тачке за обавештења на иконама апликација"</string>
<string name="zen_mode_block_effect_ambient" msgid="6382013125863616197">"Не буди због обавештења"</string>
<string name="zen_mode_block_effect_list" msgid="6081548478844912181">"Не приказуј на листи обавештења"</string>
<string name="zen_mode_block_effect_summary_none" msgid="7166175186759564510">"Никад"</string>
@@ -3314,7 +3316,7 @@
<string name="zen_custom_settings_notifications_header" msgid="7469592764589354302">"Обавештења"</string>
<string name="zen_custom_settings_duration_header" msgid="1806465684026300942">"Трајање"</string>
<string name="zen_msg_event_reminder_title" msgid="8685224436389816905">"Поруке, догађаји и подсетници"</string>
- <string name="zen_msg_event_reminder_footer" msgid="164400918479831580">"Када је укључен режим Не узнемиравај, звукови обавештења за поруке, подсетнике и догађаје ће бити искључени, осим за ставке које сте дозволили изнад. Можете да прилагодите подешавања да бисте дозволили пријатељима, члановима породице или другим контактима да вас контактирају."</string>
+ <string name="zen_msg_event_reminder_footer" msgid="164400918479831580">"Када је укључен режим Не узнемиравај, звукови обавештења за поруке, подсетнике и догађаје ће бити искључени, осим за ставке које сте дозволили изнад. Можете да прилагодите подешавања и дозволите пријатељима, члановима породице или другим контактима да допру до вас."</string>
<string name="zen_onboarding_ok" msgid="6403635918125323678">"Готово"</string>
<string name="zen_onboarding_settings" msgid="1416466597876383322">"Подешавања"</string>
<string name="zen_onboarding_new_setting_title" msgid="3622673375041304362">"Без звучног сигнала или визуелног обавештења"</string>
@@ -3322,16 +3324,16 @@
<string name="zen_onboarding_new_setting_summary" msgid="8264430315983860075">"Нећете видети нити чути обавештења. Позиви од контаката са звездицом и поновних позивалаца су дозвољени."</string>
<string name="zen_onboarding_current_setting_summary" msgid="3569246708507270821">"(тренутно подешавање)"</string>
<string name="zen_onboarding_dnd_visual_disturbances_header" msgid="7584229011611927613">"Желите ли да промените подешавања обавештења за режим Не узнемиравај?"</string>
- <string name="sound_work_settings" msgid="4140215240360927923">"Звуци за профил за Work"</string>
+ <string name="sound_work_settings" msgid="4140215240360927923">"Звуци за пословни профил"</string>
<string name="work_use_personal_sounds_title" msgid="531727195073003599">"Користи звуке личног профила"</string>
- <string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"Звукови профила за Work су исти као и звукови за личне профиле"</string>
- <string name="work_ringtone_title" msgid="5499360583947410224">"Мелодија звона за телефон за Work"</string>
+ <string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"Звукови пословног профила су исти као и звукови за личне профиле"</string>
+ <string name="work_ringtone_title" msgid="5499360583947410224">"Мелодија звона пословног телефона"</string>
<string name="work_notification_ringtone_title" msgid="8059159087214025757">"Подразумевани звук обавештења за посао"</string>
<string name="work_alarm_ringtone_title" msgid="5328487181385375130">"Подразумевани звук аларма за посао"</string>
<string name="work_sound_same_as_personal" msgid="7728560881697159758">"Исто као и за лични профил"</string>
<string name="work_sync_dialog_title" msgid="4799120971202956837">"Желите ли да замените звукове?"</string>
<string name="work_sync_dialog_yes" msgid="2110726233746476066">"Замени"</string>
- <string name="work_sync_dialog_message" msgid="944233463059129156">"Звуци са личног профила ће се користити за профил за Work"</string>
+ <string name="work_sync_dialog_message" msgid="944233463059129156">"Звуци са личног профила ће се користити за пословни профил"</string>
<string name="ringtones_install_custom_sound_title" msgid="210551218424553671">"Додати прилагођени звук?"</string>
<string name="ringtones_install_custom_sound_content" msgid="6683649115132255452">"Ова датотека ће бити копирана у директоријум <xliff:g id="FOLDER_NAME">%s</xliff:g>"</string>
<string name="ringtones_category_preference_title" msgid="4491932700769815470">"Мелодије звона"</string>
@@ -3340,7 +3342,7 @@
<string name="recent_notifications" msgid="8125865995065032049">"Недавно послато"</string>
<string name="recent_notifications_see_all_title" msgid="4089007770442871469">"Погледајте све из последњих 7 дана"</string>
<string name="advanced_section_header" msgid="984680389373090015">"Напредна"</string>
- <string name="profile_section_header" msgid="5471479005472037417">"Обавештења за Work"</string>
+ <string name="profile_section_header" msgid="5471479005472037417">"Пословна обавештења"</string>
<string name="asst_capability_prioritizer_title" msgid="3488284760645922160">"Аутоматско давање приоритета за обавештења"</string>
<string name="asst_capability_prioritizer_summary" msgid="3525640645743790796">"Аутоматски искључује звук и поставља на дно мање важна обавештења"</string>
<string name="asst_capabilities_actions_replies_title" msgid="3929395108744251338">"Паметне радње и одговори"</string>
@@ -3362,14 +3364,14 @@
<string name="swipe_direction_rtl" msgid="4521416787262888813">"Превуците улево да бисте одбацили, удесно да би се приказао мени"</string>
<string name="notification_pulse_title" msgid="4861418327614907116">"Укључи треперење лампице"</string>
<string name="lock_screen_notifications_title" msgid="6889072265118747835">"На закључаном екрану"</string>
- <string name="locked_work_profile_notification_title" msgid="8307025804986190658">"Када је профил за Work закључан"</string>
+ <string name="locked_work_profile_notification_title" msgid="8307025804986190658">"Када је пословни профил закључан"</string>
<string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"Прикажи сав садржај обавештења"</string>
<string name="lock_screen_notifications_summary_hide" msgid="3668806866535260143">"Сакриј осетљив садржај"</string>
<string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"Не приказуј никаква обавештења"</string>
<string name="lock_screen_notifications_interstitial_message" msgid="4230189215124387818">"Када је уређај закључан, како желите да се обавештења приказују?"</string>
<string name="lock_screen_notifications_interstitial_title" msgid="2832587379332443505">"Обавештења"</string>
- <string name="lock_screen_notifications_summary_show_profile" msgid="8908775469657073273">"Приказуј сав садржај обавештења о профилу за Work"</string>
- <string name="lock_screen_notifications_summary_hide_profile" msgid="7898086300511010591">"Сакриј осетљив садржај профила за Work"</string>
+ <string name="lock_screen_notifications_summary_show_profile" msgid="8908775469657073273">"Приказуј сав садржај обавештења о пословном профилу"</string>
+ <string name="lock_screen_notifications_summary_hide_profile" msgid="7898086300511010591">"Сакриј осетљив садржај пословног профила"</string>
<string name="lock_screen_notifications_interstitial_message_profile" msgid="3324187664458600354">"Када је уређај закључан, како желите да се приказују обавештења о профилу?"</string>
<string name="lock_screen_notifications_interstitial_title_profile" msgid="4043621508889929254">"Обавештења о профилу"</string>
<string name="notifications_title" msgid="8334011924253810654">"Обавештења"</string>
@@ -3403,7 +3405,7 @@
<string name="notifications_sent_weekly" msgid="5859675428990259432">"~<xliff:g id="NUMBER">%1$s</xliff:g> недељно"</string>
<string name="notifications_sent_never" msgid="237997329598144638">"Никад"</string>
<string name="manage_notification_access_title" msgid="5348743662189787547">"Приступ обавештењима"</string>
- <string name="work_profile_notification_access_blocked_summary" msgid="8148871282484870576">"Приступ обавештењима профила за Work је блокиран"</string>
+ <string name="work_profile_notification_access_blocked_summary" msgid="8148871282484870576">"Приступ обавештењима пословног профила је блокиран"</string>
<string name="manage_notification_access_summary_zero" msgid="236809421271593016">"Апликације не могу да читају обавештења"</string>
<plurals name="manage_notification_access_summary_nonzero" formatted="false" msgid="8496218948429646792">
<item quantity="one">%d апликација може да чита обавештења</item>
@@ -3489,7 +3491,7 @@
<string name="zen_mode_add_time_rule" msgid="5999467757140524729">"Додајте временски распоред"</string>
<string name="zen_mode_delete_rule" msgid="2292933835997203801">"Избриши распоред"</string>
<string name="zen_mode_choose_rule_type" msgid="8877138307319450306">"Одаберите тип распореда"</string>
- <string name="zen_mode_delete_rule_confirmation" msgid="2646596466259025978">"Желите ли да избришете правило „<xliff:g id="RULE">%1$s</xliff:g>“?"</string>
+ <string name="zen_mode_delete_rule_confirmation" msgid="2646596466259025978">"Желите да избришете правило „<xliff:g id="RULE">%1$s</xliff:g>“?"</string>
<string name="zen_mode_delete_rule_button" msgid="611058106279881991">"Избриши"</string>
<string name="zen_mode_rule_type_unknown" msgid="2819480113355191421">"Непознато"</string>
<string name="zen_mode_app_set_behavior" msgid="8597398780262575571">"Ова подешавања тренутно не могу да се мењају. Апликација (<xliff:g id="APP_NAME">%1$s</xliff:g>) је аутоматски укључила режим Не узнемиравај са прилагођеним понашањем."</string>
@@ -3526,7 +3528,7 @@
<string name="zen_mode_calls" msgid="1844534357711539325">"Дозволи позиве"</string>
<string name="zen_mode_calls_title" msgid="2024387562355793661">"Позиви"</string>
<string name="zen_mode_calls_footer" msgid="6319824006810688433">"Да бисте били сигурни да ће се дозвољени позиви чути, проверите да ли је уређај подешен да звони, вибрира или је у нечујном режиму."</string>
- <string name="zen_mode_custom_calls_footer" msgid="7329231648477682337">"Долазни позиви су блокирани за „<xliff:g id="SCHEDULE_NAME">%1$s</xliff:g>“. Можете да прилагодите подешавања да бисте дозволили пријатељима, члановима породице или другим контактима да вас контактирају."</string>
+ <string name="zen_mode_custom_calls_footer" msgid="7329231648477682337">"Долазни позиви су блокирани за „<xliff:g id="SCHEDULE_NAME">%1$s</xliff:g>“. Можете да прилагодите подешавања и дозволите пријатељима, члановима породице или другим контактима да допру до вас."</string>
<string name="zen_mode_starred_contacts_title" msgid="7099621384597127058">"Контакти са звездицом"</string>
<plurals name="zen_mode_starred_contacts_summary_additional_contacts" formatted="false" msgid="1904181007981570805">
<item quantity="one">Још <xliff:g id="NUM_PEOPLE">%d</xliff:g> особа</item>
@@ -3535,7 +3537,7 @@
</plurals>
<string name="zen_mode_messages" msgid="2908722562188394107">"Дозволи поруке"</string>
<string name="zen_mode_messages_footer" msgid="5048951937714668561">"Да бисте били сигурни да ће се дозвољене поруке чути, проверите да ли је уређај подешен да звони, вибрира или је у нечујном режиму."</string>
- <string name="zen_mode_custom_messages_footer" msgid="5566007423100361691">"Долазне поруке су блокиране за „<xliff:g id="SCHEDULE_NAME">%1$s</xliff:g>“. Можете да прилагодите подешавања да бисте дозволили пријатељима, члановима породице или другим контактима да вас контактирају."</string>
+ <string name="zen_mode_custom_messages_footer" msgid="5566007423100361691">"Долазне поруке су блокиране за „<xliff:g id="SCHEDULE_NAME">%1$s</xliff:g>“. Можете да прилагодите подешавања и дозволите пријатељима, члановима породице или другим контактима да допру до вас."</string>
<string name="zen_mode_messages_title" msgid="786261471294055181">"SMS, MMS и апликације за размену порука"</string>
<string name="zen_mode_from_anyone" msgid="7778836826814131083">"Од било кога"</string>
<string name="zen_mode_from_contacts" msgid="267034158294332688">"Само од контаката"</string>
@@ -3543,7 +3545,7 @@
<string name="zen_calls_summary_starred_repeat" msgid="9191394641577678207">"Од контаката са звездицом и поновних позивалаца"</string>
<string name="zen_calls_summary_contacts_repeat" msgid="7747592096431111510">"Од контаката и поновних позивалаца"</string>
<string name="zen_calls_summary_repeat_only" msgid="8839703337232747964">"Само од поновних позивалаца"</string>
- <string name="zen_mode_from_none" msgid="7683889985618637010">"Ни од кога"</string>
+ <string name="zen_mode_from_none" msgid="7683889985618637010">"Нико"</string>
<string name="zen_mode_from_none_calls" msgid="2967739140346917546">"Не дозволи позиве"</string>
<string name="zen_mode_from_none_messages" msgid="9069143820057833634">"Не дозвољавај никакве поруке"</string>
<string name="zen_mode_alarms" msgid="5528707742250954290">"Дозволи аларме"</string>
@@ -3610,7 +3612,7 @@
<string name="screen_pinning_unlock_pin" msgid="1441705536015645023">"Тражи PIN пре откачињања"</string>
<string name="screen_pinning_unlock_password" msgid="1017776884000170841">"Тражи лозинку пре откачињања"</string>
<string name="screen_pinning_unlock_none" msgid="9183040569733226911">"Закључај уређај пре откачињања"</string>
- <string name="opening_paragraph_delete_profile_unknown_company" msgid="2350380017136403670">"Овим профилом за Work управља:"</string>
+ <string name="opening_paragraph_delete_profile_unknown_company" msgid="2350380017136403670">"Овим пословним профилом управља:"</string>
<string name="managing_admin" msgid="3212584016377581608">"Управља <xliff:g id="ADMIN_APP_LABEL">%s</xliff:g>"</string>
<string name="experimental_preference" msgid="5903223408406906322">"(Експериментално)"</string>
<string name="encryption_interstitial_header" msgid="3298397268731647519">"Безбедно покретање"</string>
@@ -3768,8 +3770,8 @@
<string name="high_power_off" msgid="5906679734326490426">"Оптимизација коришћења батерије"</string>
<string name="high_power_system" msgid="739584574711292753">"Оптимизација батерије није доступна"</string>
<string name="high_power_desc" msgid="333756885680362741">"Не примењујте оптимизацију батерије. Може брже да испразни батерију."</string>
- <string name="high_power_prompt_title" msgid="2805745781720454052">"Желите ли да дозволите да апликација увек буде активна у позадини?"</string>
- <string name="high_power_prompt_body" msgid="8067395096053552289">"Ако дозволите да апликација <xliff:g id="APP_NAME">%1$s</xliff:g> увек буде активна у позадини, то може да смањи трајање батерије. \n\nКасније можете то да промените у одељку Подешавања > Апликације и обавештења."</string>
+ <string name="high_power_prompt_title" msgid="2805745781720454052">"Дозвољавате да апликација увек буде активна у позадини?"</string>
+ <string name="high_power_prompt_body" msgid="8067395096053552289">"Ако дозволите да апликација <xliff:g id="APP_NAME">%1$s</xliff:g> увек буде активна у позадини, то може да скрати трајање батерије. \n\nКасније можете то да промените у одељку Подешавања > Апликације и обавештења."</string>
<string name="battery_summary" msgid="4345690800899981339">"Потрошено је <xliff:g id="PERCENTAGE">%1$s</xliff:g> од последњег потпуног пуњења"</string>
<string name="battery_power_management" msgid="2853925857548647969">"Управљање напајањем"</string>
<string name="no_battery_summary" msgid="4105932628367471314">"Батерија није коришћена од последњег потпуног пуњења"</string>
@@ -3855,7 +3857,7 @@
<string name="ignore_optimizations_off_desc" msgid="5598702251817814289">"Препоручено за дуже трајање батерије"</string>
<string name="ignore_optimizations_title" msgid="7924345545276166305">"Желите ли да дозволите апликацији <xliff:g id="APP">%s</xliff:g> да игнорише оптимизације батерије?"</string>
<string name="app_list_preference_none" msgid="7100409177446935028">"Ништа"</string>
- <string name="work_profile_usage_access_warning" msgid="403208064382097510">"Искључивање приступа коришћењу за ову апликацију не спречава администратора да прати потрошњу података за апликације на профилу за Work"</string>
+ <string name="work_profile_usage_access_warning" msgid="403208064382097510">"Искључивање приступа коришћењу за ову апликацију не спречава администратора да прати потрошњу података за апликације на пословном профилу"</string>
<string name="accessibility_lock_screen_progress" msgid="8242917828598820049">"Употребљени знакови: <xliff:g id="COUNT_0">%1$d</xliff:g> од <xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
<string name="draw_overlay" msgid="2878665072530660668">"Приказ преко других апликација"</string>
<string name="system_alert_window_settings" msgid="3024330223417646567">"Приказ преко других апликација"</string>
@@ -3939,7 +3941,7 @@
<string name="disabled_by_policy_title_suspend_packages" msgid="4254714213391802322">"Не можете да отворите ову апликацију"</string>
<string name="default_admin_support_msg" msgid="5789424433689798637">"Ако имате питања, обратите се ИТ администратору"</string>
<string name="admin_support_more_info" msgid="8737842638087863477">"Још детаља"</string>
- <string name="admin_profile_owner_message" msgid="3199544166281052845">"Администратор може да надгледа апликације и податке повезане са профилом за Work, укључујући подешавања, дозволе, корпоративни приступ, активности на мрежи и информације о локацији уређаја, као и да управља њима."</string>
+ <string name="admin_profile_owner_message" msgid="3199544166281052845">"Администратор може да надгледа апликације и податке повезане са пословним профилом, укључујући подешавања, дозволе, корпоративни приступ, активности на мрежи и информације о локацији уређаја, као и да управља њима."</string>
<string name="admin_profile_owner_user_message" msgid="2991249382056855531">"Администратор може да надгледа апликације и податке повезане са овим корисником, укључујући подешавања, дозволе, корпоративни приступ, активности на мрежи и информације о локацији уређаја, као и да управља њима."</string>
<string name="admin_device_owner_message" msgid="1823477572459610869">"Администратор може да прати апликације и податке повезане са овим уређајем, укључујући подешавања, дозволе, корпоративни приступ, активности на мрежи и информације о локацији уређаја, као и да управља њима."</string>
<string name="condition_turn_off" msgid="4395150881365143558">"Искључи"</string>
@@ -3958,7 +3960,7 @@
<string name="condition_cellular_summary" msgid="3607459310548343777">"Интернет је доступан само преко Wi‑Fi мреже"</string>
<string name="condition_bg_data_title" msgid="184684435298857712">"Уштеда података"</string>
<string name="condition_bg_data_summary" msgid="5194942860807136682">"Функције су ограничене"</string>
- <string name="condition_work_title" msgid="9046811302347490371">"Профил за Work је искључен"</string>
+ <string name="condition_work_title" msgid="9046811302347490371">"Пословни профил је искључен"</string>
<string name="condition_work_summary" msgid="5586134491975748565">"За апликације и обавештења"</string>
<string name="condition_device_muted_action_turn_on_sound" msgid="5849285946804815263">"Укључи звук"</string>
<string name="condition_device_muted_title" msgid="3930542786434609976">"Звук звона је искључен"</string>
@@ -3996,12 +3998,12 @@
<string name="usage" msgid="9172908720164431622">"Потрошња"</string>
<string name="cellular_data_usage" msgid="1236562234207782386">"Потрошња мобил. података"</string>
<string name="app_cellular_data_usage" msgid="8499761516172121957">"Коришћење података апликације"</string>
- <string name="wifi_data_usage" msgid="275569900562265895">"Потрошња Wi-Fi података"</string>
+ <string name="wifi_data_usage" msgid="275569900562265895">"Потрошња WiFi података"</string>
<string name="ethernet_data_usage" msgid="747614925362556718">"Потрошња података на етернету"</string>
- <string name="wifi" msgid="1586738489862966138">"Wi-Fi"</string>
+ <string name="wifi" msgid="1586738489862966138">"WiFi"</string>
<string name="ethernet" msgid="2365753635113154667">"Етернет"</string>
<string name="cell_data_template" msgid="5473177306229738078">"<xliff:g id="AMOUNT">^1</xliff:g> мобилних података"</string>
- <string name="wifi_data_template" msgid="3146090439147042068">"<xliff:g id="AMOUNT">^1</xliff:g> Wi-Fi података"</string>
+ <string name="wifi_data_template" msgid="3146090439147042068">"<xliff:g id="AMOUNT">^1</xliff:g> WiFi података"</string>
<string name="ethernet_data_template" msgid="6414118030827090119">"<xliff:g id="AMOUNT">^1</xliff:g> података на етернету"</string>
<string name="billing_cycle" msgid="5740717948341713190">"Упозорење за податке и ограничење"</string>
<string name="app_usage_cycle" msgid="213483325132959663">"Циклус потрошње података апл."</string>
@@ -4017,7 +4019,7 @@
</plurals>
<string name="operator_warning" msgid="4676042739221117031">"Обрачун података код мобилног оператера се можда разликује од обрачуна уређаја."</string>
<string name="data_used_template" msgid="761605393453849477">"Потрошили сте <xliff:g id="ID_1">%1$s</xliff:g>"</string>
- <string name="set_data_warning" msgid="8115980184415563941">"Подешавање упозорења о подацима"</string>
+ <string name="set_data_warning" msgid="8115980184415563941">"Подеси упозорење о подацима"</string>
<string name="data_warning" msgid="2699207195535036240">"Упозорење за потрошњу података"</string>
<string name="data_warning_footnote" msgid="965724845580257305">"Упозорење за потрошњу података и ограничење потрошње података активира мерење уређаја. То може да се разликује од мерења мобилног оператера."</string>
<string name="set_data_limit" msgid="5043770023229990674">"Подеси ограничење за податке"</string>
@@ -4074,7 +4076,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Ако је уређај закључан, спречи унос одговора или другог текста у обавештења"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Подразумевана провера правописа"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Изаберите проверу правописа"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Користи проверу правописа"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Користи проверу правописа"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Није изабрано"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(ниједно)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4171,7 +4173,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Да би ослободио меморијски простор, менаџер меморијског простора уклања резервне копије слика и видео снимака са уређаја."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Уклоните слике и видео"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Менаџер меморијског простора"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Користи Менаџер меморијског простора"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Користи менаџер меморијског простора"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Аутоматска"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Ручна"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Ослободи простор"</string>
@@ -4267,11 +4269,11 @@
<string name="enterprise_privacy_input_method_name" msgid="439610095825218563">"Подешено је на <xliff:g id="APP_LABEL">%s</xliff:g>"</string>
<string name="enterprise_privacy_always_on_vpn_device" msgid="2022700916516458213">"Стално укључен VPN је укључен"</string>
<string name="enterprise_privacy_always_on_vpn_personal" msgid="5644065780843002044">"Стално укључен VPN је укључен на личном профилу"</string>
- <string name="enterprise_privacy_always_on_vpn_work" msgid="6443089897985373564">"Стално укључен VPN је укључен на профилу за Work"</string>
+ <string name="enterprise_privacy_always_on_vpn_work" msgid="6443089897985373564">"Стално укључен VPN је укључен на пословном профилу"</string>
<string name="enterprise_privacy_global_http_proxy" msgid="3862135895716080830">"Глобални HTTP прокси је подешен"</string>
<string name="enterprise_privacy_ca_certs_device" msgid="7715658848470643878">"Поуздани акредитиви"</string>
<string name="enterprise_privacy_ca_certs_personal" msgid="1356447417193483802">"Поуздани акредитиви на личном профилу"</string>
- <string name="enterprise_privacy_ca_certs_work" msgid="836419648894546893">"Поуздани акредитиви на профилу за Work"</string>
+ <string name="enterprise_privacy_ca_certs_work" msgid="836419648894546893">"Поуздани акредитиви на пословном профилу"</string>
<plurals name="enterprise_privacy_number_ca_certs" formatted="false" msgid="7953528945502561752">
<item quantity="one">Најмање <xliff:g id="COUNT_1">%d</xliff:g> CA сертификат</item>
<item quantity="few">Најмање <xliff:g id="COUNT_1">%d</xliff:g> CA сертификата</item>
@@ -4280,7 +4282,7 @@
<string name="enterprise_privacy_lock_device" msgid="1533125067038409945">"Администратор може да закључава уређај и ресетује лозинку"</string>
<string name="enterprise_privacy_wipe_device" msgid="7555287990273929922">"Администратор може да брише све податке са уређаја"</string>
<string name="enterprise_privacy_failed_password_wipe_device" msgid="4101502079202483156">"Неуспели покушаји уноса лозинке пре брисања свих података са уређаја"</string>
- <string name="enterprise_privacy_failed_password_wipe_work" msgid="2881646286634693392">"Неуспели покушаји уноса лозинке пре брисања података са профила за Work"</string>
+ <string name="enterprise_privacy_failed_password_wipe_work" msgid="2881646286634693392">"Неуспели покушаји уноса лозинке пре брисања података са пословног профила"</string>
<plurals name="enterprise_privacy_number_failed_password_wipe" formatted="false" msgid="562550414712223382">
<item quantity="one"><xliff:g id="COUNT_1">%d</xliff:g> покушај</item>
<item quantity="few"><xliff:g id="COUNT_1">%d</xliff:g> покушаја</item>
@@ -4382,9 +4384,9 @@
<string name="unknown_unavailability_setting_summary" msgid="5785931810977403534">"Подешавање је недоступно"</string>
<string name="my_device_info_account_preference_title" msgid="7965847995028952373">"Налог"</string>
<string name="my_device_info_device_name_preference_title" msgid="7384446683248009296">"Назив уређаја"</string>
- <string name="change_wifi_state_title" msgid="5140754955787584174">"Контрола Wi-Fi везе"</string>
- <string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"Омогућите да апликација контролише Wi-Fi"</string>
- <string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Омогућите да ова апликација укључи или искључи Wi-Fi, тражи и повезује се на Wi-Fi мреже, додаје и уклања мреже или покреће само локални хотспот"</string>
+ <string name="change_wifi_state_title" msgid="5140754955787584174">"Контрола WiFi везе"</string>
+ <string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"Омогућите да апликација контролише WiFi"</string>
+ <string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Омогућите да ова апликација укључи или искључи WiFi, тражи и повезује се на WiFi мреже, додаје и уклања мреже или покреће само локални хотспот"</string>
<string name="media_output_title" msgid="8710632337456601848">"Пуштај медијски садржај на"</string>
<string name="media_output_default_summary" msgid="3159237976830415584">"Овај уређај"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"Телефон"</string>
@@ -4408,7 +4410,7 @@
<string name="prevent_ringing_option_mute_summary" msgid="3509459199090688328">"Укључено (звук је искључен)"</string>
<string name="prevent_ringing_option_none_summary" msgid="5152618221093037451">"Искључено"</string>
<string name="pref_title_network_details" msgid="3971074015034595956">"Детаљи о мрежи"</string>
- <string name="about_phone_device_name_warning" msgid="9088572775969880106">"Име уређаја виде апликације на телефону. Могу да га виде и други људи кад се повежете са Bluetooth уређајима или подесите Wi-Fi хотспот."</string>
+ <string name="about_phone_device_name_warning" msgid="9088572775969880106">"Име уређаја виде апликације на телефону. Могу да га виде и други људи кад се повежете са Bluetooth уређајима или подесите WiFi хотспот."</string>
<string name="devices_title" msgid="4768432575951993648">"Уређаји"</string>
<string name="homepage_all_settings" msgid="3201220879559136116">"Сва подешавања"</string>
<string name="homepage_personal_settings" msgid="7472638597249114564">"Предлози"</string>
@@ -4554,7 +4556,7 @@
<string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"Желите ли да уклоните овај предлог?"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"Предлог је уклоњен"</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"Опозови"</string>
- <string name="low_storage_summary" msgid="4562224870189133400">"Преостало је мало слободног меморијског простора. <xliff:g id="PERCENTAGE">%1$s</xliff:g> је искоришћено – <xliff:g id="FREE_SPACE">%2$s</xliff:g> је слободно"</string>
+ <string name="low_storage_summary" msgid="4562224870189133400">"Нема много простора. <xliff:g id="PERCENTAGE">%1$s</xliff:g> је искоришћено – <xliff:g id="FREE_SPACE">%2$s</xliff:g> је слободно"</string>
<string name="contextual_card_feedback_send" msgid="8698649023854350623">"Пошаљите повратне информације"</string>
<string name="contextual_card_feedback_confirm_message" msgid="3987973028353264878">"Желите ли да нам пошаљете повратне информације за овај предлог?"</string>
<string name="copyable_slice_toast" msgid="1357518174923789947">"Копирано је у привремену меморију: <xliff:g id="COPY_CONTENT">%1$s</xliff:g>"</string>
@@ -4600,5 +4602,5 @@
<string name="automatic_system_heap_dump_summary" msgid="4962129546638974661">"Аутоматски снима динамички део меморије за Android систем када користи превише меморије"</string>
<string name="wifi_disconnect_button_text" msgid="787688024070426706">"Прекини везу"</string>
<string name="wfc_disclaimer_emergency_limitation_title_text" msgid="26884532087670844">"Хитни позиви"</string>
- <string name="wfc_disclaimer_emergency_limitation_desc_text" msgid="8726152486964822599">"Мобилни оператер не подржава хитне позиве помоћу функције Позивање преко Wi-Fi-ја.\nУређај аутоматски прелази на мобилну мрежу да би упутио хитан позив.\nХитни позиви су могући само у областима покривеним мобилном мрежом."</string>
+ <string name="wfc_disclaimer_emergency_limitation_desc_text" msgid="8726152486964822599">"Мобилни оператер не подржава хитне позиве помоћу функције Позивање преко WiFi-ја.\nУређај аутоматски прелази на мобилну мрежу да би упутио хитан позив.\nХитни позиви су могући само у областима покривеним мобилном мрежом."</string>
</resources>
diff --git a/tests/CarDeveloperOptions/res/values-sv/arrays.xml b/tests/CarDeveloperOptions/res/values-sv/arrays.xml
index 8b5cdd4..d416ac4 100644
--- a/tests/CarDeveloperOptions/res/values-sv/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-sv/arrays.xml
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"Tillåt aldrig"</item>
<item msgid="8184570120217958741">"Tillåt alltid"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normal"</item>
+ <item msgid="5101233285497327432">"Medel"</item>
+ <item msgid="1555861583162930714">"Låg"</item>
+ <item msgid="1719683776264798117">"Kritisk"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normal"</item>
+ <item msgid="6107138933849816768">"Måttlig"</item>
+ <item msgid="182695359839047859">"Låg"</item>
+ <item msgid="8577246509202964244">"Kritisk"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Ihållande"</item>
<item msgid="167418068739176448">"Toppaktivitet"</item>
diff --git a/tests/CarDeveloperOptions/res/values-sv/strings.xml b/tests/CarDeveloperOptions/res/values-sv/strings.xml
index b22c73f..d9ccd20 100644
--- a/tests/CarDeveloperOptions/res/values-sv/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-sv/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Gör texten på skärmen större eller mindre."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Förminska"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Förstora"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Exempeltext"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Den fantastiska trollkarlen från Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Kapitel 11: Den underbara Smaragdstaden i Oz"</string>
@@ -116,7 +115,7 @@
<string name="bluetooth_empty_list_user_restricted" msgid="3616298363281495777">"Du saknar behörighet att ändra Bluetooth-inställningarna."</string>
<string name="bluetooth_pairing_pref_title" msgid="2904954138013884029">"Parkoppla en ny enhet"</string>
<string name="bluetooth_is_visible_message" msgid="6341088682252805612">"Enheter i närheten kan se <xliff:g id="DEVICE_NAME">%1$s</xliff:g> när Bluetooth är på."</string>
- <string name="bluetooth_footer_mac_message" product="default" msgid="335341476746836260">"Mobilens Bluetooth-adress: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
+ <string name="bluetooth_footer_mac_message" product="default" msgid="335341476746836260">"Telefonens Bluetooth-adress: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_footer_mac_message" product="tablet" msgid="6033609611245782463">"Surfplattans Bluetooth-adress: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_footer_mac_message" product="device" msgid="7639919867088358038">"Enhetens Bluetooth-adress: <xliff:g id="BLUETOOTH_MAC_ADDRESS">%1$s</xliff:g>"</string>
<string name="bluetooth_is_disconnect_question" msgid="6180709281434591654">"Vill du koppla från <xliff:g id="DEVICE_NAME">%1$s</xliff:g>?"</string>
@@ -364,12 +363,12 @@
<string name="owner_info_settings_summary" msgid="4208702251226725583">"Inget"</string>
<string name="owner_info_settings_status" msgid="8049975536717685126">"<xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g>"</string>
<string name="owner_info_settings_edit_text_hint" msgid="2250029417257939706">"T.ex. Jockes Android."</string>
- <string name="user_info_settings_title" msgid="1125111518759995748">"Användarinfo"</string>
+ <string name="user_info_settings_title" msgid="1125111518759995748">"Användarinformation"</string>
<string name="show_profile_info_on_lockscreen_label" msgid="5204282771893683026">"Visa profilinfo på den låsta skärmen"</string>
- <string name="profile_info_settings_title" msgid="4855892878512562551">"Profilinfo"</string>
+ <string name="profile_info_settings_title" msgid="4855892878512562551">"Profilinformation"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Konton"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Plats"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Använd plats"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Använd plats"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Av"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">På – <xliff:g id="COUNT_1">%1$d</xliff:g> appar har åtkomst till plats</item>
@@ -441,13 +440,13 @@
<string name="security_settings_fingerprint_enroll_introduction_title" msgid="889558002683900544">"Lås upp med fingeravtryck"</string>
<string name="security_settings_fingerprint_enroll_introduction_title_unlock_disabled" msgid="7915504118657864429">"Använda ditt fingeravtryck"</string>
<string name="security_settings_fingerprint_enroll_introduction_message" msgid="5586198131986682472">"Tryck bara på fingeravtryckssensorn när du vill låsa upp mobilen, auktorisera köp eller logga in i appar. Tänk efter innan du lägger till någons fingeravtryck, eftersom alla som du lägger till kan utföra alla dessa åtgärder.\n\nObs! Fingeravtryck kan vara mindre säkra än ett säkert grafiskt lösenord eller en pinkod."</string>
- <string name="security_settings_fingerprint_enroll_introduction_message_unlock_disabled" msgid="1640839304679275468">"Använd fingeravtrycket för att låsa upp mobilen eller godkänna köp.\n\nObs! Du kan inte använda fingeravtrycket för att låsa upp den här enheten. Kontakta organisationens administratör om du vill veta mer."</string>
+ <string name="security_settings_fingerprint_enroll_introduction_message_unlock_disabled" msgid="1640839304679275468">"Använd ditt fingeravtryck för att låsa upp telefonen eller godkänna köp.\n\nObs! Du kan inte använda fingeravtrycket för att låsa upp den här enheten. Kontakta organisationens administratör om du vill veta mer."</string>
<string name="security_settings_fingerprint_enroll_introduction_message_setup" msgid="6734490666593320711">"Använd fingeravtrycket för att låsa upp mobilen eller godkänna köp.\n\nObs! Fingeravtrycket kan vara mindre säkert än ett starkt grafiskt lösenord eller en bra pinkod."</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel" msgid="9168637333731599827">"Avbryt"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue" msgid="271662150372486535">"Fortsätt"</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel_setup" msgid="756928427429893070">"Hoppa över"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue_setup" msgid="4125977169169671144">"Nästa"</string>
- <string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"Ska fingeravtryck hoppas över?"</string>
+ <string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"Vill du hoppa över fingeravtryck?"</string>
<string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"Det tar bara ett par minuter att konfigurera fingeravtrycket. Hoppar du över det kan du lägga till fingeravtryck i inställningarna senare."</string>
<string name="lock_screen_intro_skip_title" msgid="5307431665496346914">"Vill du hoppa över skärmlås?"</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="tablet" msgid="7553945981266845264">"Enhetens skyddsfunktioner aktiveras inte. Du kan inte hindra andra från att använda surfplattan om den blir stulen, tappas bort eller återställs."</string>
@@ -461,13 +460,13 @@
<string name="skip_lock_screen_dialog_button_label" msgid="6706047245716780006">"Hoppa över"</string>
<string name="cancel_lock_screen_dialog_button_label" msgid="2534925227627658819">"Avbryt"</string>
<string name="security_settings_fingerprint_enroll_find_sensor_title" msgid="8909829699273726469">"Tryck på sensorn"</string>
- <string name="security_settings_fingerprint_enroll_find_sensor_message" msgid="581120963079780740">"Den sitter på mobilens baksida. Använd pekfingret."</string>
+ <string name="security_settings_fingerprint_enroll_find_sensor_message" msgid="581120963079780740">"Den sitter på telefonens baksida. Använd pekfingret."</string>
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="7835824123269738540">"Illustration med enheten och fingeravtryckssensorns plats"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="3519748398694308901">"Namn"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="3428927518029038956">"OK"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="4312297515772004580">"Radera"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"Tryck på sensorn"</string>
- <string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Lägg fingret på sensorn och ta bort det när den vibrerar till"</string>
+ <string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Lägg fingret på sensorn och ta bort det när du känner en vibration"</string>
<string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"Lyft och tryck sedan igen"</string>
<string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Lyft fingret flera gånger för att lägga till hela fingeravtrycket"</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"Fingeravtrycket är tillagt"</string>
@@ -827,7 +826,7 @@
<string name="nfc_disclaimer_title" msgid="4860231267351602970">"Aktivera NFC"</string>
<string name="nfc_disclaimer_content" msgid="3066113577854565782">"NFC skickar och tar emot data till och från denna enhet samt andra enheter eller mål i närheten, t.ex. betalningsterminaler, tillgänglighetsläsare och interaktiva annonser eller taggar."</string>
<string name="nfc_secure_settings_title" msgid="5153751163174916581">"Säker NFC"</string>
- <string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"Tillåt endast betalningar och överföringar via NFC när skärmen är upplåst"</string>
+ <string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"Tillåt endast användning i kollektivtrafiken och överföringar via NFC när skärmen är upplåst"</string>
<string name="android_beam_settings_title" msgid="3083436415873738389">"Android Beam"</string>
<string name="android_beam_on_summary" msgid="8068287225180474199">"Redo att överföra appinnehåll via NFC"</string>
<string name="android_beam_off_summary" msgid="7365818039159364600">"Av"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Aktivera Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Använd Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Använd Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi-Fi-inställningar"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Ställ in och hantera trådlösa åtkomstpunkter"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Mobil enhet"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Använd mobilnätverk om Wi‑Fi inte är tillgängligt"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Använd Wi‑Fi om mobilnätverket inte är tillgängligt"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Ring via Wi‑Fi. Samtalet avslutas om Wi-Fi-anslutningen Wi-Fi bryts."</string>
@@ -1619,11 +1621,11 @@
<string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"Det går inte att använda internetdelning eller trådlösa surfzoner när Databesparing är aktiverat."</string>
<string name="usb_title" msgid="7480927657535578688">"USB"</string>
<string name="usb_tethering_button_text" msgid="6242228383142012332">"Delning via USB"</string>
- <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Dela mobilens internetanslutning via USB"</string>
+ <string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Dela telefonens internetanslutning via USB"</string>
<string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"Dela surfplattans internetanslutning via USB"</string>
<string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"Delning via Bluetooth"</string>
<string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"Dela surfplattans internetanslutning via Bluetooth"</string>
- <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Dela mobilens internetanslutning via Bluetooth"</string>
+ <string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Dela telefonens internetanslutning via Bluetooth"</string>
<string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"<xliff:g id="DEVICE_NAME">%1$d</xliff:g>s internetanslutning delas via Bluetooth"</string>
<string name="bluetooth_tethering_overflow_error" msgid="6946561351369376943">"Det går inte att dela med mer än <xliff:g id="MAXCONNECTION">%1$d</xliff:g> enheter."</string>
<string name="bluetooth_untether_blank" msgid="5428300773782256084">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> kopplas från."</string>
@@ -1679,7 +1681,7 @@
<string name="location_access_summary" msgid="6919495149026354355">"Ge appar som har bett om tillstånd möjlighet att använda din platsinformation"</string>
<string name="location_sources_heading" msgid="8526658357120282741">"Platskällor"</string>
<string name="about_settings" product="tablet" msgid="4869626690708456341">"Om surfplattan"</string>
- <string name="about_settings" product="default" msgid="6019547763377294261">"Om mobilen"</string>
+ <string name="about_settings" product="default" msgid="6019547763377294261">"Om telefonen"</string>
<string name="about_settings" product="device" msgid="1770438316234693655">"Om enheten"</string>
<string name="about_settings" product="emulator" msgid="4497482494770487014">"Om emulerad enhet"</string>
<string name="about_settings_summary" msgid="4506081667462281647">"Visa juridisk information, status, programversion"</string>
@@ -1840,7 +1842,7 @@
<string name="show_running_services" msgid="1895994322704667543">"Visa tjänster som körs"</string>
<string name="show_background_processes" msgid="88012264528093617">"Visa cachade processer"</string>
<string name="default_emergency_app" msgid="286530070173495823">"App för nödsituationer"</string>
- <string name="reset_app_preferences" msgid="1426500030595212077">"Återställ inställningarna"</string>
+ <string name="reset_app_preferences" msgid="1426500030595212077">"Återställ appinställningarna"</string>
<string name="reset_app_preferences_title" msgid="792909865493673598">"Vill du återställa?"</string>
<string name="reset_app_preferences_desc" msgid="7935273005301096031">"Detta återställer alla inställningar för:\n\n "<li>"inaktiverade appar"</li>\n" "<li>"inaktiverade appaviseringar"</li>\n" "<li>"standardappar för åtgärder"</li>\n" "<li>"begränsningar i bakgrundsdata för appar"</li>\n" "<li>"begränsningar för alla behörigheter."</li>\n\n" Ingen appdata kommer att försvinna."</string>
<string name="reset_app_preferences_button" msgid="2041894727477934656">"Återställ appar"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Vibration för aviseringar"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Vibration för ringsignal"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Vibration vid tryck"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Använd tjänsten"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Använd färgkorrigering"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Använd textning"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Använd tjänsten"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Använd färgkorrigering"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Använd textning"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Fortsätt"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Hörapparater"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Inga hörapparater har anslutits"</string>
@@ -2266,7 +2268,7 @@
<string name="controls_subtitle" msgid="6920199888882834620">"Justera strömförbrukningen"</string>
<string name="packages_subtitle" msgid="6506269487892204413">"Inkluderade paket"</string>
<string name="battery_tip_summary_title" msgid="2750922152518825526">"Appar körs som vanligt"</string>
- <string name="battery_tip_summary_summary" product="default" msgid="6294900413896440006">"Batteriförbrukningen i bakgrunden är normal på mobilen"</string>
+ <string name="battery_tip_summary_summary" product="default" msgid="6294900413896440006">"Batteriförbrukningen i bakgrunden är normal på telefonen"</string>
<string name="battery_tip_summary_summary" product="tablet" msgid="5280099016800644130">"Batteriförbrukningen i bakgrunden är normal på surfplattan"</string>
<string name="battery_tip_summary_summary" product="device" msgid="4459840492610842705">"Batteriförbrukningen i bakgrunden är normal på enheten"</string>
<string name="battery_tip_low_battery_title" msgid="6784043681672161175">"Låg batterikapacitet"</string>
@@ -2279,7 +2281,7 @@
<string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Batteriet kan ta slut snabbare än vanligt"</string>
<string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"Batterisparläget är aktiverat"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"Vissa funktioner kan begränsas"</string>
- <string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Mobilen används mer än vanligt"</string>
+ <string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Telefonen används mer än vanligt"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"Surfplattan används mer än vanligt"</string>
<string name="battery_tip_high_usage_title" product="device" msgid="8304138287288309490">"Enheten används mer än vanligt"</string>
<string name="battery_tip_high_usage_summary" msgid="5514749872957528189">"Batteriet kan ta slut snabbare än vanligt"</string>
@@ -2315,7 +2317,7 @@
<string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"Den här appen kan dra batteri i bakgrunden. Batteriet kan ta slut snabbare än beräknat."</string>
<string name="battery_tip_unrestrict_app_dialog_ok" msgid="9154938931448151479">"Ta bort"</string>
<string name="battery_tip_unrestrict_app_dialog_cancel" msgid="7331148618292397166">"Avbryt"</string>
- <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"Batteriförbrukningen för apparna är normal. Om apparnas batteriförbrukning är för hög visas förslag på mobilen om åtgärder du kan vidta.\n\nOm batteriet börjar ta slut kan du aktivera batterisparläget."</string>
+ <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"Batteriförbrukningen för apparna är normal. Om apparnas batteriförbrukning är för hög visas förslag på telefonen om åtgärder du kan vidta.\n\nOm batteriet börjar ta slut kan du aktivera batterisparläget."</string>
<string name="battery_tip_dialog_summary_message" product="tablet" msgid="1721081030632329647">"Batteriförbrukningen för apparna är normal. Om apparnas batteriförbrukning är för hög visas förslag på surfplattan om åtgärder du kan vidta.\n\nOm batteriet börjar ta slut kan du aktivera batterisparläget."</string>
<string name="battery_tip_dialog_summary_message" product="device" msgid="146872407040848465">"Batteriförbrukningen för apparna är normal. Om apparnas batteriförbrukning är för hög visas förslag på enheten om åtgärder du kan vidta.\n\nOm batteriet börjar ta slut kan du aktivera batterisparläget."</string>
<string name="smart_battery_manager_title" msgid="5744035036663849515">"Battery Manager"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Aktivera"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Använd batterisparläge"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Använd batterisparläge"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Aktivera automatiskt"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Aldrig"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"vid <xliff:g id="PERCENT">%1$s</xliff:g> batteri"</string>
@@ -2676,7 +2678,7 @@
<string name="data_usage_label_foreground" msgid="2471091128648754601">"Förgrund"</string>
<string name="data_usage_label_background" msgid="1618794447370396845">"Bakgrund"</string>
<string name="data_usage_app_restricted" msgid="7569077654579299326">"begränsad"</string>
- <string name="data_usage_disable_mobile" msgid="4125335076749119451">"Vill du inaktivera mobildatan?"</string>
+ <string name="data_usage_disable_mobile" msgid="4125335076749119451">"Vill du inaktivera mobildata?"</string>
<string name="data_usage_disable_mobile_limit" msgid="1937796699758613667">"Ange gräns för mobildata"</string>
<string name="data_usage_disable_4g_limit" msgid="7131367986548147266">"Ange gräns för data via 4G"</string>
<string name="data_usage_disable_3g_limit" msgid="6746819313032692220">"Ange gräns för data via 2G-3G"</string>
@@ -2713,7 +2715,7 @@
<string name="data_usage_limit_editor_title" msgid="1687908662154108293">"Ange gräns för dataanvändning"</string>
<string name="data_usage_limit_dialog_title" msgid="8804760847110131518">"Begränsa dataanvändningen"</string>
<string name="data_usage_limit_dialog_mobile" product="tablet" msgid="2000713577999830647">"När mobildatan når den gräns du har angett inaktiveras den av surfplattan.\n\nVi föreslår att du anger en något lägre gräns eftersom dataanvändningen mäts med din surfplatta och din leverantör kan mäta användningen på ett annat sätt."</string>
- <string name="data_usage_limit_dialog_mobile" product="default" msgid="943546278705619205">"När mobildatan når den gräns du har angett inaktiveras den av mobilen.\n\nVi föreslår att du anger en något lägre gräns eftersom dataanvändningen mäts med din mobil och din leverantör kan mäta användningen på ett annat sätt."</string>
+ <string name="data_usage_limit_dialog_mobile" product="default" msgid="943546278705619205">"När mobildatan når den gräns du har angett inaktiveras den av telefonen.\n\nVi föreslår att du anger en något lägre gräns eftersom dataanvändningen mäts med din telefon och din leverantör kan mäta användningen på ett annat sätt."</string>
<string name="data_usage_restrict_background_title" msgid="3568746530413220844">"Vill du begränsa bakgrundsdata?"</string>
<string name="data_usage_restrict_background" msgid="995811034744808575">"Om du begränsar mobildatan i bakgrunden fungerar vissa appar och tjänster endast när du är ansluten till ett Wi-Fi-nätverk."</string>
<string name="data_usage_restrict_background_multiuser" product="tablet" msgid="6032810839234864814">"Om du begränsar mobildatan i bakgrunden fungerar vissa appar och tjänster endast när du är ansluten till ett Wi-Fi-nätverk.\n\nAlla användare på den här surfplattan påverkas av inställningen."</string>
@@ -2848,7 +2850,7 @@
<string name="user_settings_title" msgid="7917598650933179545">"Flera användare"</string>
<string name="user_settings_footer_text" product="device" msgid="4573858247439190545">"Dela enheten genom att lägga till nya användare. Varje användare får ett personligt utrymme på enheten med egna startskärmar, konton, appar, inställningar med mera."</string>
<string name="user_settings_footer_text" product="tablet" msgid="780018221428132918">"Dela surfplattan genom att lägga till nya användare. Varje användare får ett personligt utrymme på surfplattan med egna startskärmar, konton, appar, inställningar med mera."</string>
- <string name="user_settings_footer_text" product="default" msgid="1470859614968237491">"Dela mobilen genom att lägga till nya användare. Varje användare får ett personligt utrymme på mobilen med egna startskärmar, konton, appar, inställningar med mera."</string>
+ <string name="user_settings_footer_text" product="default" msgid="1470859614968237491">"Dela telefonen genom att lägga till nya användare. Varje användare får ett personligt utrymme på telefonen med egna startskärmar, konton, appar, inställningar med mera."</string>
<string name="user_list_title" msgid="6670258645246192324">"Användare och profiler"</string>
<string name="user_add_user_or_profile_menu" msgid="4220679989900149336">"Lägg till användare eller profil"</string>
<string name="user_add_user_menu" msgid="9006572936456324794">"Lägg till användare"</string>
@@ -2914,7 +2916,7 @@
<string name="apps_with_restrictions_settings_button" msgid="5065896213467171744">"Utöka appens inställningar"</string>
<string name="nfc_payment_settings_title" msgid="5070077706735415291">"Tryck och betala"</string>
<string name="nfc_payment_how_it_works" msgid="7607901964687787177">"Så fungerar det"</string>
- <string name="nfc_payment_no_apps" msgid="8844440783395420860">"Betala med mobilen i butiker"</string>
+ <string name="nfc_payment_no_apps" msgid="8844440783395420860">"Betala med telefonen i butiker"</string>
<string name="nfc_payment_default" msgid="7869273092463612271">"Standardapp för betalning"</string>
<string name="nfc_payment_default_not_set" msgid="955804193510335338">"Har inte angetts"</string>
<string name="nfc_payment_app_and_desc" msgid="102312684211458190">"<xliff:g id="APP">%1$s</xliff:g> – <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
@@ -2923,7 +2925,7 @@
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"Förutom när en annan betalningsapp är öppen"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"Vid en Tryck och betala-terminal betalar du med:"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"Betala vid en kassaterminal"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Konfigurera en betalningsapp. Sedan behöver du bara hålla mobilens baksida mot terminaler med symbolen för kontaktlös överföring."</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Konfigurera en betalningsapp. Sedan behöver du bara hålla telefonens baksida mot terminaler med symbolen för kontaktlös överföring."</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"OK"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"Mer ..."</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"Vill du ange den här som standard?"</string>
@@ -3147,7 +3149,7 @@
<string name="other_sound_settings" msgid="5250376066099818676">"Andra ljud"</string>
<string name="dial_pad_tones_title" msgid="8877212139988655769">"Knappsatsljud"</string>
<string name="screen_locking_sounds_title" msgid="4407110895465866809">"Ljud vid skärmlåsning"</string>
- <string name="charging_sounds_title" msgid="5070437987230894287">"Laddningsljud- och vibration"</string>
+ <string name="charging_sounds_title" msgid="5070437987230894287">"Laddningsljud och -vibration"</string>
<string name="docking_sounds_title" msgid="2573137471605541366">"Ljud via dockningsstationen"</string>
<string name="touch_sounds_title" msgid="165237488496165652">"Ljud vid tryck"</string>
<string name="vibrate_on_touch_title" msgid="6360155469279157684">"Vibration vid tryck"</string>
@@ -3159,7 +3161,7 @@
<string name="emergency_tone_alert" msgid="907868135091891015">"Signaler"</string>
<string name="emergency_tone_vibrate" msgid="5020068066905681181">"Vibrationer"</string>
<string name="boot_sounds_title" msgid="7583926202411353620">"Ljud vid uppstart"</string>
- <string name="live_caption_title" msgid="7926591158657997051">"Realtidstextning"</string>
+ <string name="live_caption_title" msgid="7926591158657997051">"Live Caption"</string>
<string name="live_caption_summary" msgid="9064771862352393125">"Texta media automatiskt"</string>
<string name="zen_mode_settings_summary_off" msgid="6929319200478424962">"Aldrig"</string>
<plurals name="zen_mode_settings_summary_on" formatted="false" msgid="6061723291126091396">
@@ -3181,10 +3183,10 @@
<string name="zen_mode_rule_name_edit" msgid="5479435215341745578">"Redigera"</string>
<string name="zen_mode_automation_settings_page_title" msgid="3001783354881078983">"Scheman"</string>
<string name="zen_mode_automatic_rule_settings_page_title" msgid="5272888746413504692">"Schema"</string>
- <string name="zen_mode_schedule_category_title" msgid="1936785755444711221">"Schemaläggning"</string>
+ <string name="zen_mode_schedule_category_title" msgid="1936785755444711221">"Schemalägg"</string>
<string name="zen_mode_automation_suggestion_title" msgid="4921779962633710347">"Stäng av mobilljud vid vissa tider"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="2709837472884371037">"Ange regler för Stör ej"</string>
- <string name="zen_mode_schedule_title" msgid="5275268813192802631">"Schemaläggning"</string>
+ <string name="zen_mode_schedule_title" msgid="5275268813192802631">"Schemalägg"</string>
<string name="zen_mode_use_automatic_rule" msgid="446326253915861824">"Använd schema"</string>
<string name="zen_mode_option_important_interruptions" msgid="5173944276846940149">"Bara prioriterade"</string>
<string name="zen_mode_option_alarms" msgid="4843278125235203076">"Endast alarm"</string>
@@ -3199,7 +3201,7 @@
<string name="zen_mode_restrict_notifications_mute_footer" msgid="3049522809520549054">"Inga ljud eller vibrationer används när du tar emot aviseringar på mobilen."</string>
<string name="zen_mode_restrict_notifications_hide" msgid="3296933643539682552">"Inga synliga eller hörbara aviseringar"</string>
<string name="zen_mode_restrict_notifications_hide_summary" msgid="1449301153755270168">"Aviseringar varken syns eller hörs"</string>
- <string name="zen_mode_restrict_notifications_hide_footer" msgid="7617688597593946765">"Mobilen visar inte nya eller befintliga aviseringar och varken vibrerar eller låter. Viktiga aviseringar för aktivitet och status för mobilen visas fortfarande.\n\nNär du inaktiverar Stör ej kan du visa dina aviseringar genom att svepa nedåt från skärmens överkant."</string>
+ <string name="zen_mode_restrict_notifications_hide_footer" msgid="7617688597593946765">"Telefonen visar inte nya eller befintliga aviseringar och varken vibrerar eller låter. Viktiga aviseringar för aktivitet och status för telefonen visas fortfarande.\n\nNär du inaktiverar Stör ej kan du visa dina aviseringar genom att svepa nedåt från skärmens överkant."</string>
<string name="zen_mode_restrict_notifications_custom" msgid="3167252482570424133">"Anpassa"</string>
<string name="zen_mode_restrict_notifications_enable_custom" msgid="6376983315529894440">"Aktivera anpassad inställning"</string>
<string name="zen_mode_restrict_notifications_disable_custom" msgid="8004212081465043044">"Ta bort anpassad inställning"</string>
@@ -3518,7 +3520,7 @@
<string name="zen_mode_starred_callers" msgid="1317376207713013472">"stjärnmärkta kontakter"</string>
<string name="zen_mode_repeat_callers" msgid="1435309867554692340">"Återuppringning"</string>
<string name="zen_mode_repeat_callers_list" msgid="2750270907597457279">"när någon ringer flera gånger"</string>
- <string name="zen_mode_repeat_callers_title" msgid="7192952181541813487">"Tillåt återuppringning"</string>
+ <string name="zen_mode_repeat_callers_title" msgid="7192952181541813487">"Tillåt upprepade samtal"</string>
<string name="zen_mode_calls_summary_one" msgid="8327371053236689649">"Tillåt från <xliff:g id="CALLER_TYPE">%1$s</xliff:g>"</string>
<string name="zen_mode_calls_summary_two" msgid="9017678770532673578">"Tillåt från <xliff:g id="CALLER_TYPE">%1$s</xliff:g> och <xliff:g id="CALLERT_TPYE">%2$s</xliff:g>"</string>
<string name="zen_mode_repeat_callers_summary" msgid="1752513516040525545">"Om samma person ringer en gång till inom en tidsperiod på <xliff:g id="MINUTES">%d</xliff:g> minuter"</string>
@@ -3555,7 +3557,7 @@
<string name="screen_pinning_title" msgid="578020318289781102">"Fästa skärmen"</string>
<string name="screen_pinning_description" msgid="3814537379086412278">"När den här inställningen är aktiverad kan du fästa skärmen om du vill att den aktuella skärmen ska visas tills du lossar den.\n\nSå här fäster du skärmen:\n\n1. Kontrollera att funktionen för att fästa skärmen är på.\n\n2. Öppna översikten\n\n3. Tryck på appikonen högst upp på skärmen och sedan på Fäst."</string>
<string name="screen_pinning_unlock_pattern" msgid="1060334707088339444">"Kräv grafiskt lösenordet innan skärmen lossas"</string>
- <string name="screen_pinning_unlock_pin" msgid="1441705536015645023">"Be om pinkod innan skärmen lossas"</string>
+ <string name="screen_pinning_unlock_pin" msgid="1441705536015645023">"Be om pinkod innan appen lossas"</string>
<string name="screen_pinning_unlock_password" msgid="1017776884000170841">"Be om lösenord innan skärmen lossas"</string>
<string name="screen_pinning_unlock_none" msgid="9183040569733226911">"Lås enheten när skärmen lossas"</string>
<string name="opening_paragraph_delete_profile_unknown_company" msgid="2350380017136403670">"Den här jobbprofilen hanteras av:"</string>
@@ -3633,7 +3635,7 @@
<string name="filter_enabled_apps" msgid="5888459261768538489">"Installerade appar"</string>
<string name="filter_instant_apps" msgid="8087483282854072366">"Snabbappar"</string>
<string name="filter_personal_apps" msgid="3473268022652904457">"Personligt"</string>
- <string name="filter_work_apps" msgid="4202483998339465542">"Arbetet"</string>
+ <string name="filter_work_apps" msgid="4202483998339465542">"Arbete"</string>
<string name="filter_notif_all_apps" msgid="1862666327228804896">"Appar: alla"</string>
<string name="filter_notif_blocked_apps" msgid="5694956954776028202">"Inaktiverade"</string>
<string name="filter_notif_urgent_channels" msgid="5000735867167027148">"Kategorier: brådskande avisering"</string>
@@ -3757,7 +3759,7 @@
<string name="background_check_pref" msgid="664081406854758392">"Bakgrundskontroll"</string>
<string name="background_check_title" msgid="4136736684290307970">"Fullständig bakgrundsåtkomst"</string>
<string name="assist_access_context_title" msgid="2274614501747710439">"Använda text från skärmen"</string>
- <string name="assist_access_context_summary" msgid="5867997494395842785">"Tillåt att assistentappen får åtkomst till innehåll på skärmen, till exempel text"</string>
+ <string name="assist_access_context_summary" msgid="5867997494395842785">"Tillåt att assistentappen får åtkomst till innehåll på skärmen som text"</string>
<string name="assist_access_screenshot_title" msgid="1991014038776117688">"Använda skärmdump"</string>
<string name="assist_access_screenshot_summary" msgid="3010943864000489424">"Tillåt att assistentappen får åtkomst till en bild på skärmen"</string>
<string name="assist_flash_title" msgid="8852484250748551092">"Lys upp skärmen"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Gör aviseringar skrivskyddade när enheten är låst så att det inte går att skriva svar eller liknande"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Standardstavningskontroll"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Välj stavningskontroll"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Använd stavningskontroll"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Använd stavningskontroll"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Ingen har valts"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(ingen)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4050,7 +4052,7 @@
<string name="display_cutout_emulation_keywords" msgid="6795671536772871439">"urklipp av skärm, flärp"</string>
<string name="overlay_option_device_default" msgid="165508753381657697">"Enhetens standardinställning"</string>
<string name="overlay_toast_failed_to_apply" msgid="5692251825129250040">"Det gick inte att använda överlagring"</string>
- <string name="special_access" msgid="1453926335914696206">"Särskild åtkomst för app"</string>
+ <string name="special_access" msgid="1453926335914696206">"Särskild appåtkomst"</string>
<plurals name="special_access_summary" formatted="false" msgid="5182092345063909346">
<item quantity="other"><xliff:g id="COUNT">%d</xliff:g> appar får använda obegränsad data</item>
<item quantity="one">1 app får använda obegränsad data</item>
@@ -4081,7 +4083,7 @@
<string name="sensors_off_quick_settings_title" msgid="3655699045300438902">"Sensorer är inaktiverade"</string>
<string name="managed_profile_settings_title" msgid="4340409321523532402">"Inställningar för jobbprofilen"</string>
<string name="managed_profile_contact_search_title" msgid="7337225196804457095">"Kontaktsökning"</string>
- <string name="managed_profile_contact_search_summary" msgid="7278267480246726951">"Tillåt att organisationen söker bland kontakter för att identifiera ringande och kontakter"</string>
+ <string name="managed_profile_contact_search_summary" msgid="7278267480246726951">"Tillåt att organisationen söker bland kontakter för att identifiera uppringare och kontakter"</string>
<string name="cross_profile_calendar_title" msgid="2351605904015067145">"Kalender för flera profiler"</string>
<string name="cross_profile_calendar_summary" msgid="3196258680438896098">"Visa jobbhändelser i den personliga kalendern"</string>
<string name="cross_profile_calendar_restricted_summary" msgid="6892589892357409107">"Organisationen tillåter inte åtkomst till jobbkalendern via personliga appar"</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Lagringshanteraren tar bort säkerhetskopior av foton och videor från enheten för att frigöra lagringsutrymme."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Ta bort foton och videor"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Lagringshanteraren"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Använd lagringshanteraren"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Använd lagringshanteraren"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Automatiskt"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manuellt"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Frigör utrymme nu"</string>
@@ -4118,24 +4120,24 @@
<string name="swipe_up_to_switch_apps_summary" msgid="4644068184114154787">"Svep uppåt från hemknappen om du vill byta app. Svep uppåt igen om du vill se alla appar. Du kan göra detta oavsett vilken skärm som är öppen. Det finns inte längre någon knapp för översikt nere till höger på skärmen."</string>
<string name="swipe_up_to_switch_apps_suggestion_title" msgid="7641846365137536128">"Testa den nya hemknappen"</string>
<string name="swipe_up_to_switch_apps_suggestion_summary" msgid="7338653224520387852">"Aktivera den nya rörelsen för att byta mellan appar"</string>
- <string name="ambient_display_title" product="default" msgid="6785677099744344088">"Tryck snabbt två gånger för att kolla mobilen"</string>
+ <string name="ambient_display_title" product="default" msgid="6785677099744344088">"Tryck snabbt två gånger för att kolla telefonen"</string>
<string name="ambient_display_title" product="tablet" msgid="1106285490888683613">"Tryck snabbt två gånger för att kolla surfplattan"</string>
<string name="ambient_display_title" product="device" msgid="5064644474876041478">"Tryck snabbt två gånger för att kolla enheten"</string>
<string name="ambient_display_summary" msgid="4882910328216411109">"Visa tid, aviseringar och annan information genom att trycka snabbt två gånger på skärmen."</string>
- <string name="ambient_display_pickup_title" product="default" msgid="7141652156907066938">"Lyft för att kolla mobilen"</string>
+ <string name="ambient_display_pickup_title" product="default" msgid="7141652156907066938">"Lyft för att kolla telefonen"</string>
<string name="ambient_display_pickup_title" product="tablet" msgid="1555456400210301959">"Plocka upp för att kolla surfplattan"</string>
<string name="ambient_display_pickup_title" product="device" msgid="2480126522988135037">"Plocka upp för att kolla enheten"</string>
<string name="ambient_display_wake_screen_title" msgid="3376988352851077102">"Skrämväckning"</string>
- <string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"Visa tid, aviseringar och annan information genom att plocka upp mobilen."</string>
+ <string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"Visa tid, aviseringar och annan information genom att plocka upp telefonen."</string>
<string name="ambient_display_pickup_summary" product="tablet" msgid="1077745287100012928">"Visa tid, aviseringar och annan information genom att plocka upp surfplattan."</string>
<string name="ambient_display_pickup_summary" product="device" msgid="404199660076598026">"Visa tid, aviseringar och annan information genom att plocka upp enheten."</string>
- <string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"Tryck för att kolla mobilen"</string>
+ <string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"Tryck för att kolla telefonen"</string>
<string name="ambient_display_tap_screen_title" product="tablet" msgid="6434521782016864148">"Tryck för att kolla surfplattan"</string>
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"Tryck för att kolla enheten"</string>
<string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"Visa tid, aviseringar och annan information genom att trycka på skärmen."</string>
<string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"Svep över fingeravtryckssensorn för aviseringar"</string>
<string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"Svep över fingeravtryckssensorn"</string>
- <string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"Visa aviseringar genom att svepa nedåt på fingeravtryckssensorn på baksidan av mobilen."</string>
+ <string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"Visa aviseringar genom att svepa nedåt på fingeravtryckssensorn på baksidan av telefonen."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"Visa aviseringar genom att svepa nedåt på fingeravtryckssensorn på baksidan av surfplattan."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="7950264130913070035">"Visa aviseringar genom att svepa nedåt på fingeravtryckssensorn på baksidan av enheten."</string>
<string name="fingerprint_swipe_for_notifications_suggestion_title" msgid="948946491233738823">"Visa aviseringar snabbt"</string>
diff --git a/tests/CarDeveloperOptions/res/values-sw/arrays.xml b/tests/CarDeveloperOptions/res/values-sw/arrays.xml
index 1d26443..0bfc1db 100644
--- a/tests/CarDeveloperOptions/res/values-sw/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-sw/arrays.xml
@@ -85,7 +85,7 @@
<item msgid="8058143476674427024">"Inaunganisha kwa <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
<item msgid="7547609081339573756">"Uhalalishaji kwa <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
<item msgid="5145158315060185414">"Kupata anwani ya IP kutoka <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
- <item msgid="3283243151651124831">" Umeunganishwa kwa<xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</item>
+ <item msgid="3283243151651124831">"Umeunganishwa kwenye <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</item>
<item msgid="6600156231416890902">"Imetanguliwa"</item>
<item msgid="4133290864821295785">"inakatisha muunganisho kutoka <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item>
<item msgid="3980154971187953257">"Haijaunganishwa"</item>
@@ -276,7 +276,7 @@
<item msgid="7692440726415391408">"tumia sip"</item>
<item msgid="8572453398128326267">"chakata simu uliyopiga"</item>
<item msgid="7775674394089376306">"alama ya kidole"</item>
- <item msgid="3182815133441738779">"vihisi vya mwili"</item>
+ <item msgid="3182815133441738779">"vitambua shughuli za mwili"</item>
<item msgid="2793100005496829513">"soma matangazo ya simu"</item>
<item msgid="2633626056029384366">"eneo la jaribio"</item>
<item msgid="8356842191824684631">"soma hifadhi"</item>
@@ -343,7 +343,7 @@
<item msgid="9186411956086478261">"Tumia sip"</item>
<item msgid="6884763100104539558">"Chakata simu uliyopiga"</item>
<item msgid="125513972170580692">"Alama ya kidole"</item>
- <item msgid="2556071024281275619">"Vihisi vya mwili"</item>
+ <item msgid="2556071024281275619">"Vitambua shughuli za mwili"</item>
<item msgid="617168514928339387">"Soma matangazo ya simu"</item>
<item msgid="7134693570516523585">"Eneo la jaribio"</item>
<item msgid="7224489175375229399">"Soma hifadhi"</item>
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"Usiruhusu kamwe"</item>
<item msgid="8184570120217958741">"Ruhusu kila wakati"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Kawaida"</item>
+ <item msgid="5101233285497327432">"Ya wastani"</item>
+ <item msgid="1555861583162930714">"Chini"</item>
+ <item msgid="1719683776264798117">"Imepungua sana"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Kawaida"</item>
+ <item msgid="6107138933849816768">"Wastani"</item>
+ <item msgid="182695359839047859">"Chini"</item>
+ <item msgid="8577246509202964244">"Imepungua sana"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Endelevu"</item>
<item msgid="167418068739176448">"Shughuli maarufu"</item>
@@ -445,7 +455,7 @@
<string-array name="color_picker">
<item msgid="3151827842194201728">"Kijani"</item>
<item msgid="3228505970082457852">"Samawati"</item>
- <item msgid="6590260735734795647">"Bluu"</item>
+ <item msgid="6590260735734795647">"Nili"</item>
<item msgid="3521763377357218577">"Zambarau"</item>
<item msgid="5932337981182999919">"Waridi"</item>
<item msgid="5642914536624000094">"Nyekundu"</item>
@@ -467,7 +477,7 @@
<item msgid="1008268820118852416">"Tumia kama mtandao usiopima data"</item>
</string-array>
<string-array name="wifi_privacy_entries">
- <item msgid="6545683814310036454">"Anwani ya MAC bila utaratibu wowote (chaguomsingi)"</item>
+ <item msgid="6545683814310036454">"Anwani ya MAC ya nasibu (chaguomsingi)"</item>
<item msgid="214234417308375326">"Tumia anwani ya MAC ya kifaa"</item>
</string-array>
<string-array name="wifi_hidden_entries">
diff --git a/tests/CarDeveloperOptions/res/values-sw/strings.xml b/tests/CarDeveloperOptions/res/values-sw/strings.xml
index c33fe8d..ab3304c 100644
--- a/tests/CarDeveloperOptions/res/values-sw/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-sw/strings.xml
@@ -80,11 +80,10 @@
<string name="sdcard_format" product="default" msgid="4831611387627849108">"Futa kadi ya SD"</string>
<string name="preview_pager_content_description" msgid="5731599395893090038">"Kagua kwanza"</string>
<string name="preview_page_indicator_content_description" msgid="3192955679074998362">"Onyesho la kuchungulia, ukurasa wa <xliff:g id="CURRENT_PAGE">%1$d</xliff:g> kati ya <xliff:g id="NUM_PAGES">%2$d</xliff:g>"</string>
- <string name="font_size_summary" msgid="9120023206321191067">"Kuongeza au kupunguza ukubwa wa maandishi kwenye skrini."</string>
+ <string name="font_size_summary" msgid="9120023206321191067">"Ongeza au upunguze ukubwa wa maandishi kwenye skrini."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Punguza"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Kuza"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Sampuli ya maandishi"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Wachawi wa Ajabu kutoka Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Sura ya 11: Mji wa Ajabu wa Johari wa Oz"</string>
@@ -197,7 +196,7 @@
<string name="proxy_settings_title" msgid="6014901859338211713">"Seva mbadala"</string>
<string name="proxy_clear_text" msgid="498317431076294101">"Futa"</string>
<string name="proxy_port_label" msgid="8285157632538848509">"Mlango wa seva mbadala"</string>
- <string name="proxy_exclusionlist_label" msgid="8179084955547941904">"Proksi ya Bypass ya"</string>
+ <string name="proxy_exclusionlist_label" msgid="8179084955547941904">"Seva mbadala ya kando ya"</string>
<string name="proxy_defaultView_text" msgid="5785775257042403261">"Rejesha kwa chaguo misingi"</string>
<string name="proxy_action_text" msgid="814511434843981413">"Nimemaliza"</string>
<string name="proxy_hostname_label" msgid="6798891831427287847">"Jina la mpangishaji wa seva mbadala"</string>
@@ -325,7 +324,7 @@
<string name="date_and_time_settings_summary" msgid="4617979434474713417">"Weka tarehe, saa, saa za eneo na fomati"</string>
<string name="date_time_auto" msgid="2679132152303750218">"Tumia saa ya mtandao"</string>
<string name="zone_auto_title" msgid="5500880975376882488">"Tumia saa za eneo kutoka kwenye mtandao"</string>
- <string name="date_time_24hour_auto" msgid="7499659679134962547">"Tumia lugha chaguomsingi"</string>
+ <string name="date_time_24hour_auto" msgid="7499659679134962547">"Tumia chaguomsingi la eneo"</string>
<string name="date_time_24hour_title" msgid="6209923858891621283">"Mfumo wa saa 24"</string>
<string name="date_time_24hour" msgid="1265706705061608742">"Tumia mpangilio wa saa 24"</string>
<string name="date_time_set_time_title" msgid="7116850506333406367">"Saa"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Maelezo ya wasifu"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Akaunti"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Kutambua Mahali"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Tumia mahali"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Tumia mahali"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Umezima"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Imewashwa - programu <xliff:g id="COUNT_1">%1$d</xliff:g> zina idhini ya kufikia mahali</item>
@@ -411,10 +410,10 @@
<string name="face_add_max" msgid="8870899421165189413">"Unaweza kuongeza hadi nyuso <xliff:g id="COUNT">%d</xliff:g>"</string>
<string name="face_intro_error_max" msgid="4024147799079828937">"Umeongeza idadi ya juu inayoruhusiwa ya nyuso"</string>
<string name="face_intro_error_unknown" msgid="3241592604198351134">"Imeshindwa kuongeza nyuso zaidi"</string>
- <string name="security_settings_face_enroll_error_dialog_title" msgid="3933492758701563051">"Hukukamilisha kujiandikishaji"</string>
+ <string name="security_settings_face_enroll_error_dialog_title" msgid="3933492758701563051">"Hukukamilisha kujiandikisha"</string>
<string name="security_settings_face_enroll_dialog_ok" msgid="1078348922734845090">"Sawa"</string>
<string name="security_settings_face_enroll_error_timeout_dialog_message" msgid="4917894418448325405">"Muda wa kuandikisha uso umefikia kikomo. Jaribu tena."</string>
- <string name="security_settings_face_enroll_error_generic_dialog_message" msgid="5160473187142616862">"Imeshindwa kuandikisha uso."</string>
+ <string name="security_settings_face_enroll_error_generic_dialog_message" msgid="5160473187142616862">"Imeshindwa kusajili uso."</string>
<string name="security_settings_face_enroll_finish_title" msgid="6800717857394410769">"Tayari kabisa. Safi."</string>
<string name="security_settings_face_enroll_done" msgid="5409739233373490971">"Nimemaliza"</string>
<string name="security_settings_face_settings_use_face_category" msgid="1586532139528115416">"Tumia uso wako kwa"</string>
@@ -426,7 +425,7 @@
<string name="security_settings_face_settings_require_confirmation_details" msgid="8740564864091803429">"Iombe uthibitishaji kila wakati unapothibitisha katika programu"</string>
<string name="security_settings_face_settings_remove_face_data" msgid="2821359954483136239">"Ondoa data ya uso"</string>
<string name="security_settings_face_settings_footer" msgid="4627175759990550715">"Unaweza kutumia uso wako kufungua kifaa chako na kufikia programu. "<annotation id="url">"Pata maelezo zaidi"</annotation></string>
- <string name="security_settings_face_settings_remove_dialog_title" msgid="5675319895815271094">"Je, ungependa kufuta data ya uso?"</string>
+ <string name="security_settings_face_settings_remove_dialog_title" msgid="5675319895815271094">"Ungependa kufuta data ya uso?"</string>
<string name="security_settings_face_settings_remove_dialog_details" msgid="3754494807169276107">"Data iliyorekodiwa na kipengele cha kufungua kwa uso itafutwa kabisa kwa njia salama. Ikishafutwa, utahitaji PIN, mchoro au nenosiri lako ili kufungua simu yako, kuingia kwenye akaunti za programu na kuthibitisha malipo."</string>
<string name="security_settings_fingerprint_preference_title" msgid="4177132225930582928">"Kitambulisho"</string>
<string name="fingerprint_manage_category_title" msgid="1463406696801542090">"Dhibiti vitambulisho"</string>
@@ -467,7 +466,7 @@
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="3428927518029038956">"SAWA"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="4312297515772004580">"Futa"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"Gusa kitambua alama ya kidole"</string>
- <string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Weka kidole chako juu ya kitambuzi kisha ukiinue baada ya kuhisi mtetemo"</string>
+ <string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Weka kidole chako juu ya kitambua alama kisha ukiinue baada ya kuhisi mtetemo"</string>
<string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"Inua, kisha uguse tena"</string>
<string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Endelea kuinua kidole chako ili uongeze sehemu tofauti za alama ya kidole chako"</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"Alama ya kidole imeongezwa"</string>
@@ -488,7 +487,7 @@
<string name="security_settings_fingerprint_enroll_done" msgid="4111289529758845926">"Nimemaliza"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"Lo, hicho si kitambuzi"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"Gusa kitambua alama ya kidole kilicho nyuma ya simu yako. Tumia kidole chako cha shahada."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"Hukukamilisha kujiandikishaji"</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"Hukukamilisha kujiandikisha"</string>
<string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Muda wa uandikishaji wa kitambulisho umefikia kikomo. Jaribu tena."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"Uandikishaji wa kitambulisho haukufanya kazi. Jaribu tena au utumie kitambulisho tofauti."</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"Ongeza kingine"</string>
@@ -574,7 +573,7 @@
<string name="unlock_set_unlock_pin_summary" msgid="8076921768675948228">"Wastani hadi usalama wa juu"</string>
<string name="unlock_set_unlock_password_title" msgid="2092949379238466560">"Nenosiri"</string>
<string name="unlock_set_unlock_password_summary" msgid="7042787631866059147">"Usalama wa juu"</string>
- <string name="unlock_set_do_later_title" msgid="2939110070503695956">"Siyo sasa"</string>
+ <string name="unlock_set_do_later_title" msgid="2939110070503695956">"Si sasa"</string>
<string name="current_screen_lock" msgid="398328543694154510">"Mbinu inayotumika kufunga skrini"</string>
<string name="fingerprint_unlock_set_unlock_pattern" msgid="132337696546315927">"Alama ya kidole + Mchoro"</string>
<string name="fingerprint_unlock_set_unlock_pin" msgid="886426673328906002">"Alama ya kidole + PIN"</string>
@@ -827,7 +826,7 @@
<string name="nfc_disclaimer_title" msgid="4860231267351602970">"Washa NFC"</string>
<string name="nfc_disclaimer_content" msgid="3066113577854565782">"NFC hubadilisha data kati ya kifaa hiki na malengo au vifaa vingine vya karibu nawe, kama vile vituo vya malipo, visomaji vya data ya kadi na lebo au matangazo yanayoshirikisha mtumiaji."</string>
<string name="nfc_secure_settings_title" msgid="5153751163174916581">"Imarisha usalama wa NFC"</string>
- <string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"Ruhusu tu matumizi katika Usafiri wa Umma na Malipo ya NFC wakati skrini imefunguliwa"</string>
+ <string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"Ruhusu matumizi katika Usafiri wa Umma na Malipo ya NFC wakati tu skrini imefunguliwa"</string>
<string name="android_beam_settings_title" msgid="3083436415873738389">"Android Beam"</string>
<string name="android_beam_on_summary" msgid="8068287225180474199">"Programu iko tayari kusambaza maudhui kupitia NFC"</string>
<string name="android_beam_off_summary" msgid="7365818039159364600">"Imezimwa"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Washa Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Tumia Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Tumia Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Mipangilio ya Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Weka na udhibiti vituo vya kufikia mitandao-hewa"</string>
@@ -847,7 +846,7 @@
<string name="wifi_error" msgid="5605801874484465557">"Hitilafu"</string>
<string name="wifi_sap_no_channel_error" msgid="6881796988574851628">"Mitabendi ya GHz 5 haipatikani katika nchi hii"</string>
<string name="wifi_in_airplane_mode" msgid="4729571191578262246">"Hali ya ndegeni imewashwa"</string>
- <string name="wifi_notify_open_networks" msgid="4782239203624619655">"Fungua arifa za mtandao"</string>
+ <string name="wifi_notify_open_networks" msgid="4782239203624619655">"Arifu kuhusu mitandao wazi"</string>
<string name="wifi_notify_open_networks_summary" msgid="1383681260705466715">"Tuma arifa wakati mtandao wenye ubora wa juu unapatikana"</string>
<string name="wifi_wakeup" msgid="4963732992164721548">"Washa Wi‑Fi kiotomatiki"</string>
<string name="wifi_wakeup_summary" msgid="1152699417411690">"Wi-Fi itaanza kutumika tena mitandao iliyohifadhiwa ya ubora wa juu itakapopatikana, kama vile mtandao wa nyumbani"</string>
@@ -916,7 +915,7 @@
<string name="passpoint_label" msgid="7429247462404128615">"Imehifadhiwa kupitia"</string>
<string name="passpoint_content" msgid="340527524510304327">"Kitambulisho cha <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="wifi_eap_method" msgid="3752116941487485859">"Mtindo wa EAP"</string>
- <string name="please_select_phase2" msgid="5848080896810435677">"Uhalalishaji wa awamu ya 2"</string>
+ <string name="please_select_phase2" msgid="5848080896810435677">"Uthibitisho wa awamu ya pili"</string>
<string name="wifi_eap_ca_cert" msgid="1496395241849383785">"Cheti cha CA"</string>
<string name="wifi_eap_domain" msgid="3298302320003640130">"Kikoa"</string>
<string name="wifi_eap_user_cert" msgid="6786839531765719173">"Cheti cha mtumiaji"</string>
@@ -928,7 +927,7 @@
<string name="wifi_ap_choose_auto" msgid="7927637960569365785">"Otomatiki"</string>
<string name="wifi_ap_choose_2G" msgid="43198403259714736">"Bendi ya GHz 2.4"</string>
<string name="wifi_ap_choose_5G" msgid="2624859713183683146">"Bendi ya GHz 5.0"</string>
- <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"Imechagua Bendi ya GHz 5.0"</string>
+ <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"Bendi ya GHz 5.0 (inapendelewa)"</string>
<string name="wifi_ap_2G" msgid="5793110086517338494">"GHz 2.4"</string>
<string name="wifi_ap_5G" msgid="4584892544393675403">"GHz 5.0"</string>
<string name="wifi_ap_band_select_one" msgid="4409754936554360355">"Chagua angalau bendi moja ya mtandaopepe wa Wi‑Fi:"</string>
@@ -946,8 +945,8 @@
<string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"Imeshindwa kusoma msimbo wa QR. Weka msimbo upya kisha ujaribu tena"</string>
<string name="wifi_dpp_failure_authentication_or_configuration" msgid="9142051662156233679">"Jaribu tena. Tatizo hili likiendelea, wasiliana na kampuni iliyotengeneza kifaa"</string>
<string name="wifi_dpp_failure_not_compatible" msgid="4320027179973678283">"Hitilafu fulani imetokea"</string>
- <string name="wifi_dpp_failure_timeout" msgid="5060065168142109420">"Hakikisha kuwa umechomeka kifaa, umechaji na umekiwasha"</string>
- <string name="wifi_dpp_failure_generic" msgid="7840142544736640189">"Hakikisha kuwa umechomeka kifaa, umechaji na umekiwasha. Tatizo hili likiendelea, wasiliana na kampuni iliyotengeneza kifaa"</string>
+ <string name="wifi_dpp_failure_timeout" msgid="5060065168142109420">"Hakikisha kuwa umechomeka kifaa, umekichaji na umekiwasha"</string>
+ <string name="wifi_dpp_failure_generic" msgid="7840142544736640189">"Hakikisha kuwa umechomeka kifaa, umekichaji na umekiwasha. Tatizo hili likiendelea, wasiliana na kampuni iliyotengeneza kifaa"</string>
<string name="wifi_dpp_failure_not_supported" msgid="111779621766171626">"Huwezi kuongeza “<xliff:g id="SSID">%1$s</xliff:g>” kwenye kifaa hiki"</string>
<string name="wifi_dpp_check_connection_try_again" msgid="7144663015219170999">"Angalia muunganisho na ujaribu tena"</string>
<string name="wifi_dpp_choose_network" msgid="6251424431594491691">"Chagua mtandao"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Mtandao wa simu"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Ikiwa Wi-Fi haipatikani, tumia mtandao wa simu"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Ikiwa mtandao wa simu haupatikani, tumia Wi-Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Piga simu kupitia WI-FI. Ikiwa Wi-Fi haipatikani, simu itakatika."</string>
@@ -1207,15 +1209,15 @@
<string name="adaptive_sleep_summary_on" msgid="6670369739228487082">"Imewashwa / Skrini haitazima ikiwa unaiangalia"</string>
<string name="adaptive_sleep_summary_off" msgid="2891586225954973431">"Imezimwa"</string>
<string name="adaptive_sleep_description" msgid="812673735459170009">"Huzuia skrini yako kuzima ikiwa unaiangalia."</string>
- <string name="adaptive_sleep_privacy" msgid="5706802215479902623">"Kipengele cha utashi wa skrini kinatumia kamera ya mbele ili kuona ikiwa kuna mtu anayeangalia skrini. Hufanya kazi kwenye kifaa na picha hazihifadhiwi wala kutumwa kwa Google."</string>
+ <string name="adaptive_sleep_privacy" msgid="5706802215479902623">"Kipengele cha utashi wa skrini kinatumia kamera ya mbele ili kuona ikiwa kuna mtu anayeangalia skrini. Kipengele hiki hufanya kazi kwenye kifaa na picha hazihifadhiwi wala kutumwa kwa Google."</string>
<string name="night_display_title" msgid="1305002424893349814">"Mwanga wa Usiku"</string>
<string name="night_display_text" msgid="5330502493684652527">"Mwanga wa Usiku hugeuza rangi ya skrini yako kuwa manjano. Hali hii hufanya iwe rahisi kuangalia skrini yako au kusoma katika mwangaza hafifu na inaweza kukusaidia ulale kwa urahisi zaidi."</string>
<string name="night_display_auto_mode_title" msgid="8493573087102481588">"Ratiba"</string>
<string name="night_display_auto_mode_never" msgid="2897444637217807088">"Hamna"</string>
<string name="night_display_auto_mode_custom" msgid="1400891076453963151">"Iwake wakati maalum"</string>
<string name="night_display_auto_mode_twilight" msgid="4000162110017520674">"Iwake usiku kucha"</string>
- <string name="night_display_start_time_title" msgid="1069255169673371077">"Itawashwa"</string>
- <string name="night_display_end_time_title" msgid="2760793157124245911">"Itazimwa"</string>
+ <string name="night_display_start_time_title" msgid="1069255169673371077">"Kuwaka"</string>
+ <string name="night_display_end_time_title" msgid="2760793157124245911">"Kuzima"</string>
<string name="night_display_status_title" msgid="1727020934735770319">"Hali"</string>
<string name="night_display_temperature_title" msgid="8375126629902616296">"Ukolezaji"</string>
<string name="night_display_summary_off" msgid="8850539785332228069">"Imezimwa. <xliff:g id="ID_1">%1$s</xliff:g>"</string>
@@ -1244,7 +1246,7 @@
<string name="wallpaper_suggestion_summary" msgid="4247262938988875842">"Weka mapendeleo ya skrini yako"</string>
<string name="wallpaper_settings_fragment_title" msgid="1503701065297188901">"Chagua mandhari kutoka"</string>
<string name="screensaver_settings_title" msgid="7720091234133721021">"Taswira ya skrini"</string>
- <string name="screensaver_settings_summary_either_long" msgid="6078038506795498288">"Inapochaji au imeunganishwa na kifaa kingine"</string>
+ <string name="screensaver_settings_summary_either_long" msgid="6078038506795498288">"Wakati imeunganishwa na kifaa kingine au inapochaji"</string>
<string name="screensaver_settings_summary_either_short" msgid="2453772128682850053">"Yoyote kati ya hizi mbili"</string>
<string name="screensaver_settings_summary_sleep" msgid="6097363596749362692">"Inapochaji"</string>
<string name="screensaver_settings_summary_dock" msgid="6297808146601570196">"Wakati imeunganishwa na kifaa kingine"</string>
@@ -1264,7 +1266,7 @@
<string name="doze_always_on_title" msgid="8555184965031789941">"Ikae ikiwa imewashwa"</string>
<string name="doze_always_on_summary" msgid="7654436900436328950">"Onyesha saa, aikoni za arifa na maelezo mengine. Inatumia chaji nyingi."</string>
<string name="title_font_size" msgid="5021464556860010851">"Ukubwa wa fonti"</string>
- <string name="short_summary_font_size" msgid="4141077908728522946">"Kuongeza au kupunguza ukubwa wa maandishi"</string>
+ <string name="short_summary_font_size" msgid="4141077908728522946">"Ongeza au upunguze ukubwa wa maandishi"</string>
<string name="sim_lock_settings" msgid="1986924650622642189">"Mipangilio ya kufunga SIM"</string>
<string name="sim_lock_settings_category" msgid="1126759898277681516">"Kufunga SIM kadi"</string>
<string name="sim_lock_settings_summary_off" msgid="348656447968142307">"Imezimwa"</string>
@@ -1529,7 +1531,7 @@
<string name="apn_not_set" msgid="5344235604466825691">"Haijawekwa"</string>
<string name="apn_name" msgid="8431432886706852226">"Jina"</string>
<string name="apn_apn" msgid="190519449579357696">"APN"</string>
- <string name="apn_http_proxy" msgid="8816906767987944465">"Ndogo"</string>
+ <string name="apn_http_proxy" msgid="8816906767987944465">"Seva mbadala"</string>
<string name="apn_http_port" msgid="5789193688960075486">"Mlango"</string>
<string name="apn_user" msgid="6979724587671704006">"Jina la mtumiaji"</string>
<string name="apn_password" msgid="7140724726108226386">"Nenosiri"</string>
@@ -1539,17 +1541,17 @@
<string name="apn_mms_port" msgid="6606572282014819299">"Mlango wa MMS"</string>
<string name="apn_mcc" msgid="9138301167194779180">"MCC"</string>
<string name="apn_mnc" msgid="1276161191283274976">"MNC"</string>
- <string name="apn_auth_type" msgid="4286147728662523362">"Aina ya uhalalishaji"</string>
+ <string name="apn_auth_type" msgid="4286147728662523362">"Aina ya uthibitishaji"</string>
<string name="apn_auth_type_none" msgid="3679273936413404046">"Hamna"</string>
<string name="apn_auth_type_pap" msgid="6155876141679480864">"PAP"</string>
<string name="apn_auth_type_chap" msgid="5484031368454788686">"CHAP"</string>
<string name="apn_auth_type_pap_chap" msgid="2977833804460109203">"PAP au CHAP"</string>
<string name="apn_type" msgid="6725346490902871146">"Aina ya APN"</string>
<string name="apn_protocol" msgid="1240197323563960912">"Itifaki ya APN"</string>
- <string name="apn_roaming_protocol" msgid="6913336248771263497">"Itifaki ya urandaji ya APN"</string>
- <string name="carrier_enabled" msgid="1819916725305365581">"APN Wezesha/Lemaza"</string>
- <string name="carrier_enabled_summaryOn" msgid="6219221535461945771">"APN imewezeshwa"</string>
- <string name="carrier_enabled_summaryOff" msgid="4093019532796386622">"APN imelemazwa"</string>
+ <string name="apn_roaming_protocol" msgid="6913336248771263497">"Itifaki ya APN: mitandao ya nga\'ambo"</string>
+ <string name="carrier_enabled" msgid="1819916725305365581">"APN washa/zima"</string>
+ <string name="carrier_enabled_summaryOn" msgid="6219221535461945771">"APN imewashwa"</string>
+ <string name="carrier_enabled_summaryOff" msgid="4093019532796386622">"APN imezimwa"</string>
<string name="bearer" msgid="4378444317087536401">"Mwenye"</string>
<string name="mvno_type" msgid="3150755279048149624">"Aina ya MVNO"</string>
<string name="mvno_match_data" msgid="629287305803195245">"Thamani ya MVNO"</string>
@@ -1569,8 +1571,8 @@
<string name="reset_dashboard_title" msgid="7084966342252178530">"Chaguo za kubadilisha mipangilio"</string>
<string name="reset_dashboard_summary" msgid="8778383341461126642">"Unaweza kubadilisha mipangilio ya mtandao, programu au kifaa"</string>
<string name="reset_network_title" msgid="8944059136930806211">"Badilisha mipangilio ya Wi-Fi, data ya simu na Bluetooth"</string>
- <string name="reset_network_desc" msgid="4982633363916261109">"Hatua hii itabadilisha mipangilio yote ya mtandao ikiwa ni pamoja:\n\n"<li>"Wi‑Fi"</li>\n<li>"Data ya simu"</li>\n<li>"Bluetooth"</li></string>
- <string name="reset_esim_title" msgid="7630781767040831893">"Futa data iliyopakuliwa kwenye SIMs"</string>
+ <string name="reset_network_desc" msgid="4982633363916261109">"Hatua hii itabadilisha mipangilio yote ya mtandao ikiwa ni pamoja na:\n\n"<li>"Wi‑Fi"</li>\n<li>"Data ya simu"</li>\n<li>"Bluetooth"</li></string>
+ <string name="reset_esim_title" msgid="7630781767040831893">"Futa SIM zilizopakuliwa"</string>
<string name="reset_esim_desc" msgid="433226911566802">"Ili upakue SIM za kubadilisha, wasiliana na mtoa huduma wako. Hatua hii haitaghairi mipango yoyote ya huduma za simu."</string>
<string name="reset_network_button_text" msgid="4293271046867912819">"Badilisha mipangilio"</string>
<string name="reset_network_final_desc" msgid="2463817067048751373">"Je, ungependa kubadilisha mipangilio yote ya mtandao? Huwezi kutendua kitendo hiki."</string>
@@ -1645,7 +1647,7 @@
<string name="mobile_insert_sim_card" msgid="7594550403454243732">"Tafadhali weka SIM kadi kisha uzime na uwashe"</string>
<string name="mobile_connect_to_internet" msgid="6031886097365170913">"Tafadhali unganisha kwenye Intaneti"</string>
<string name="location_title" msgid="8664674161765477168">"Mahali pangu"</string>
- <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"Eneo la wasifu wa kazini"</string>
+ <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"Wasifu wa kazi kutambua mahali"</string>
<string name="location_app_level_permissions" msgid="1298041503927632960">"Ruhusa ya programu"</string>
<string name="location_app_permission_summary_location_off" msgid="541372845344796336">"Utambuzi wa mahali umezimwa"</string>
<plurals name="location_app_permission_summary_location_on" formatted="false" msgid="7904821382328758218">
@@ -1662,7 +1664,7 @@
<string name="location_scanning_wifi_always_scanning_title" msgid="6750542206763112172">"Kutafuta Wi-Fi"</string>
<string name="location_scanning_wifi_always_scanning_description" msgid="4956048135941851712">"Ruhusu programu na huduma zitafute mitandao ya Wi-Fi wakati wowote, hata wakati umezima Wi-Fi. Hali hii inaweza kutumika, kwa mfano, kuboresha huduma na vipengele vinavyohusiana na mahali."</string>
<string name="location_scanning_bluetooth_always_scanning_title" msgid="196241746742607453">"Kutafuta Bluetooth"</string>
- <string name="location_scanning_bluetooth_always_scanning_description" msgid="3796673798637848690">"Ruhusu programu na huduma itafute vifaa vilivyo karibu wakati wowote, hata wakati umezima Bluetooth. Hali hii inaweza kutumika, kwa mfano, kuboresha huduma na vipengele vinavyohusiana na mahali."</string>
+ <string name="location_scanning_bluetooth_always_scanning_description" msgid="3796673798637848690">"Ruhusu programu na huduma zitafute vifaa vilivyo karibu wakati wowote, hata wakati umezima Bluetooth. Hali hii inaweza kutumika, kwa mfano, kuboresha huduma na vipengele vinavyohusiana na mahali."</string>
<string name="managed_profile_location_services" msgid="224925483299159541">"Huduma za Mahali za kazini"</string>
<string name="location_network_based" msgid="1535812159327454835">"Eneo la mtandao wa Wi-Fi na wa simu"</string>
<string name="location_neighborhood_level" msgid="8459352741296587916">"Ruhusu programu zitumie huduma ya Google ya mahali ili kukadiria ulipo kwa haraka. Data ya mahali isiyokutambulisha itakusanywa na kutumwa kwa Google."</string>
@@ -1803,7 +1805,7 @@
<string name="screen_compatibility_label" msgid="3638271673726075815">"Utangamanifu wa skrini"</string>
<string name="permissions_label" msgid="7341733648403464213">"Ruhusa"</string>
<string name="cache_header_label" msgid="3202284481380361966">"Akiba"</string>
- <string name="clear_cache_btn_text" msgid="107507684844780651">"Futa akiba"</string>
+ <string name="clear_cache_btn_text" msgid="107507684844780651">"Futa data iliyoakibishwa"</string>
<string name="cache_size_label" msgid="6205173678102220499">"Akiba"</string>
<plurals name="uri_permissions_text" formatted="false" msgid="8938478333743197020">
<item quantity="other">Vipengee %d</item>
@@ -1823,7 +1825,7 @@
<string name="install_text" msgid="2798092278891807849">"Weka"</string>
<string name="disable_text" msgid="5065834603951474397">"Zima"</string>
<string name="enable_text" msgid="7179141636849225884">"Washa"</string>
- <string name="clear_user_data_text" msgid="8894073247302821764">"Futa hifadhi"</string>
+ <string name="clear_user_data_text" msgid="8894073247302821764">"Futa data ya hifadhi"</string>
<string name="app_factory_reset" msgid="8718986000278776272">"Ondoa masasisho"</string>
<string name="auto_launch_enable_text" msgid="3372898942144027341">"Umechagua kuzindua programu hii kwa mbadala kwa baadhi ya vitendo."</string>
<string name="always_allow_bind_appwidgets_text" msgid="2286211654774611037">"Umechagua kuruhusu programu hii kuunda wijeti na kufikia data yao."</string>
@@ -1958,7 +1960,7 @@
<string name="auto_punctuate_summary" msgid="245694025030386370">"Bonyeza kibonye cha \'Space\' mara mbili ili uweke \".\""</string>
<string name="show_password" msgid="620964020348073739">"Onyesha manenosiri"</string>
<string name="show_password_summary" msgid="1403805089582258620">"Onyesha herufi kwa muda mfupi unapoandika"</string>
- <string name="spellchecker_security_warning" msgid="792070474432612097">"Kisasishaji hiki kinaweza kukusanya maandishi yote wakati unaangika, pamoja na data za kibinafsi kama nenosiri na namari za kadi ya mkopo. Inatoka kwa programu <xliff:g id="SPELLCHECKER_APPLICATION_NAME">%1$s</xliff:g>. Tumia kisasishaji hiki?"</string>
+ <string name="spellchecker_security_warning" msgid="792070474432612097">"Kikagua tahajia hiki kinaweza kukusanya maandishi yote wakati unaandika, ikiwemo data ya binafsi kama nenosiri na nambari za kadi za mikopo. Kinatoka kwa programu ya <xliff:g id="SPELLCHECKER_APPLICATION_NAME">%1$s</xliff:g>. Ungependa kutumia kikagua tahajia hiki?"</string>
<string name="spellchecker_quick_settings" msgid="5193036510190696655">"Mipangilio"</string>
<string name="spellchecker_language" msgid="5168501692418112444">"Lugha"</string>
<string name="keyboard_and_input_methods_category" msgid="5870292843201629800">"Kibodi"</string>
@@ -2082,7 +2084,7 @@
<string name="accessibility_content_timeout_preference_title" msgid="5160746882250939464">"Wakati wa kusoma"</string>
<string name="accessibility_control_timeout_preference_title" msgid="2771808346038759474">"Wakati wa kuchukua hatua"</string>
<string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"Chagua muda ambao ungependa kuonyesha ujumbe unaohitaji kusoma, lakini unaonekana kwa muda mfupi. \n\nBaadhi ya programu hazitumii mipangilio hii."</string>
- <string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"Chagua muda ambao ungependa kuonyesha ujumbe unaokuomba uchukue hatua, lakini utaonekana kwa muda mfupi.\n\nBaadhi ya programu hazitumii mipangilio hii."</string>
+ <string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"Chagua muda ambao ungependa kuonyesha ujumbe unaokuomba uchukue hatua, unaoonekana kwa muda mfupi.\n\nBaadhi ya programu hazitumii mipangilio hii."</string>
<string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"Muda wa kugusa na kushikilia"</string>
<string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"Ugeuzaji rangi"</string>
<string name="accessibility_display_inversion_preference_subtitle" msgid="69291255322175323">"Huenda ikaathiri utendaji"</string>
@@ -2092,10 +2094,10 @@
<string name="accessibility_vibration_settings_title" msgid="1902649657883159406">"Mtetemo"</string>
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Mtetemo wa arifa"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Mtetemo wa mlio"</string>
- <string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Mtetemo wa mguso"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Tumia huduma"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Tumia usahihishaji wa rangi"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Tumia manukuu"</string>
+ <string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Mtetemo inapoguswa"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Tumia huduma"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Tumia usahihishaji wa rangi"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Tumia manukuu"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Endelea"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Vifaa vya kusaidia kusikia"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Hujaunganisha vifaa vyovyote vya kusaidia kusikia"</string>
@@ -2278,7 +2280,7 @@
<string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"Washa Kiokoa Betri"</string>
<string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"Huenda chaji ikaisha haraka zaidi"</string>
<string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"Kiokoa Betri kimewashwa"</string>
- <string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"Huenda ikadhibiti baadhi ya vipengele"</string>
+ <string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"Huenda baadhi ya vipengele vimedhibitiwa"</string>
<string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"Simu imetumika sana kuliko kawaida"</string>
<string name="battery_tip_high_usage_title" product="tablet" msgid="1019583260005768965">"Kompyuta kibao imetumika sana kuliko kawaida"</string>
<string name="battery_tip_high_usage_title" product="device" msgid="8304138287288309490">"Kifaa kimetumika sana kuliko kawaida"</string>
@@ -2312,7 +2314,7 @@
<string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"Ili uokoe betri, zuia programu hizi zisitumie chaji chinichini. Huenda programu zilizozuiliwa zisifanye kazi vizuri na huenda arifa zikachelewa.\n\nProgramu:\n<xliff:g id="APP_LIST">%1$s</xliff:g>."</string>
<string name="battery_tip_restrict_app_dialog_ok" msgid="2573410775701913487">"Zuia"</string>
<string name="battery_tip_unrestrict_app_dialog_title" msgid="812458516399125710">"Ungependa kuondoa kizuizi?"</string>
- <string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"Programu hii itatumia chaji chinichini. Hali hii inaweza kusababisha chaji ya betri iishe haraka."</string>
+ <string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"Programu hii itatumia chaji chinichini. Hali hii inaweza kufanya chaji ya betri iishe haraka."</string>
<string name="battery_tip_unrestrict_app_dialog_ok" msgid="9154938931448151479">"Ondoa"</string>
<string name="battery_tip_unrestrict_app_dialog_cancel" msgid="7331148618292397166">"Ghairi"</string>
<string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"Programu zako zinatumia kiwango cha kawaida cha betri. Programu zikitumia kiwango cha juu zaidi cha betri, simu yako itapendekeza hatua unazoweza kuchukua.\n\nUnaweza kuwasha Kiokoa Betri wakati wowote, kama chaji ya betri yako inakaribia kuisha."</string>
@@ -2450,16 +2452,16 @@
<string name="battery_saver_auto_routine" msgid="886514412067906980">"Kulingana na ratiba yako"</string>
<string name="battery_saver_auto_percentage" msgid="5791982309331921556">"Kulingana na asilimia"</string>
<string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"Kiokoa betri huwashwa kama betri yako inakaribia kuisha kabla ya muda wako wa kawaida wa kuchaji"</string>
- <string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"Itawashwa ikiwa <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
+ <string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"Kitawaka ikifika <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Weka ratiba"</string>
<string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"Zima kiokoa betri inapojazwa chaji"</string>
- <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"Kiokoa betri hujizima simu yako inapokuwa na <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
+ <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"Kiokoa betri hujizima simu yako inapofika <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"Kiokoa betri hujizima kompyuta yako kibao inapokuwa na <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<string name="battery_saver_sticky_description_new" product="device" msgid="5056520668081504111">"Kiokoa betri hujizima kifaa chako kinapokuwa na <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Washa"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Tumia Kiokoa Betri"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Tumia Kiokoa Betri"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Kujiwasha kiotomatiki"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Kisiwahi kujiwasha"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"chaji ya betri ikiwa <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
@@ -2712,8 +2714,8 @@
<string name="data_usage_warning_editor_title" msgid="1431385383278389290">"Weka onyo kwa matumizi ya data"</string>
<string name="data_usage_limit_editor_title" msgid="1687908662154108293">"Weka kikomo cha matumizi ya data"</string>
<string name="data_usage_limit_dialog_title" msgid="8804760847110131518">"Kupunguza matumizi ya data"</string>
- <string name="data_usage_limit_dialog_mobile" product="tablet" msgid="2000713577999830647">"Kompyuta kibao yako itazima data ya mtandao wa simu pindi itakapofikia kikomo cha matumizi ulichoweka.\n\nKwa kuwa kompyuta kibao yako ndiyo huwa inapima matumizi ya data, na kampuni inayokupa huduma za mtandao huenda ikahesabu matumizi kwa njia tofauti, unashauriwa kuweka kikomo kisicho kamili sana."</string>
- <string name="data_usage_limit_dialog_mobile" product="default" msgid="943546278705619205">"Simu yako itazima data ya mtandao wa simu pindi itakapofikia kikomo cha matumizi ya data ulichoweka. \n\nKwa kuwa simu yako ndiyo huwa inapima matumizi ya data, na kampuni inayokupa huduma za mtandao huenda ikahesabu matumizi kwa njia tofauti, unashauriwa kuweka kikomo kisicho kamili sana."</string>
+ <string name="data_usage_limit_dialog_mobile" product="tablet" msgid="2000713577999830647">"Kompyuta kibao yako itazima data ya mtandao wa simu pindi itakapofikia kikomo cha matumizi ulichoweka.\n\nKwa kuwa kompyuta kibao yako ndiyo huwa inapima matumizi ya data, na kampuni inayokupa huduma za mtandao huenda ikahesabu matumizi kwa njia tofauti, unashauriwa kuweka kikomo cha wastani."</string>
+ <string name="data_usage_limit_dialog_mobile" product="default" msgid="943546278705619205">"Simu yako itazima data ya mtandao wa simu pindi itakapofikia kikomo cha matumizi ya data ulichoweka. \n\nKwa kuwa simu yako ndiyo huwa inapima matumizi ya data, na kampuni inayokupa huduma za mtandao huenda ikahesabu matumizi kwa njia tofauti, unashauriwa kuweka kikomo cha wastani."</string>
<string name="data_usage_restrict_background_title" msgid="3568746530413220844">"Zuia data ya mandhari nyuma?"</string>
<string name="data_usage_restrict_background" msgid="995811034744808575">"Ukidhibiti matumizi ya chini chini ya data ya mitandao ya simu, baadhi ya programu na huduma hazitafanya kazi mpaka uunganishe kwenye Wi-Fi tena."</string>
<string name="data_usage_restrict_background_multiuser" product="tablet" msgid="6032810839234864814">"Ukidhibiti matumizi ya chini chini ya data ya mtandao wa simu, baadhi ya programu na huduma hazitafanya kazi mpaka uunganishe kwenye Wi-Fi.\n\nMipangilio hii itaathiri watumiaji wote wa kompyuta kibao hii."</string>
@@ -2819,7 +2821,7 @@
<string name="user_credential_removed" msgid="6243576567538844852">"Imeondoa kitambulisho: <xliff:g id="CREDENTIAL_NAME">%s</xliff:g>"</string>
<string name="user_credential_none_installed" msgid="4129252817676332368">"Hakuna kitambulisho cha mtumiaji kilichowekwa"</string>
<string name="spellcheckers_settings_title" msgid="1687210427248364327">"Kikagua maendelezo"</string>
- <string name="spellcheckers_settings_for_work_title" msgid="7461318390801573022">"Kikagua maendelezo cha kazini"</string>
+ <string name="spellcheckers_settings_for_work_title" msgid="7461318390801573022">"Kikagua tahajia cha kazini"</string>
<string name="current_backup_pw_prompt" msgid="8914812770233159610">"Andika nenosiri unalotumia kuhifadhi nakala kamili"</string>
<string name="new_backup_pw_prompt" msgid="4949729756223335850">"Andika nenosiri jipya la kuhifadhi nakala kamili"</string>
<string name="confirm_new_backup_pw_prompt" msgid="3357847425183550770">"Andika tena nenosiri lako la kuhifadhi nakala kamili"</string>
@@ -2868,13 +2870,13 @@
<string name="user_add_user_item_title" msgid="6835385073795492410">"Mtumiaji"</string>
<string name="user_add_profile_item_title" msgid="4932743891449790664">"Wasifu uliozuiwa"</string>
<string name="user_add_user_title" msgid="2320897397066676472">"Ungependa kuongeza mtumiaji?"</string>
- <string name="user_add_user_message_long" msgid="686637203224195465">"Unaweza kutumia kifaa hiki pamoja na watu wengine kwa kuongeza watumiaji wa ziada. Kila mtumiaji ana nafasi yake mwenyewe, ambayo anaweza kuweka programu, mandhari na vipengee vingine anavyopenda. Watumiaji pia wanaweza kurekebisha mipangilio ya kifaa inayoathiri kila mtu kama vile Wi-Fi.\n\nUnapomwongeza mtumiaji mpya, mtu huyo anahitaji kujitayarishia nafasi yake.\n\nMtumiaji yeyote anaweza kuwasasishia watumiaji wengine wote programu. Huenda mipangilio na huduma za walio na matatizo ya kuona na kusikia zisihamishiwe mtumiaji mgeni."</string>
+ <string name="user_add_user_message_long" msgid="686637203224195465">"Unaweza kutumia kifaa hiki pamoja na watu wengine kwa kuongeza watumiaji wa ziada. Kila mtumiaji ana nafasi yake mwenyewe, ambayo anaweza kuweka programu, mandhari na vipengee vingine anavyopenda. Watumiaji pia wanaweza kurekebisha mipangilio ya kifaa inayoathiri kila mtu kama vile Wi-Fi.\n\nUnapomwongeza mtumiaji mpya, mtu huyo anahitaji kujitayarishia nafasi yake.\n\nMtumiaji yeyote anaweza kuwasasishia watumiaji wengine wote programu. Huenda mipangilio na huduma za ufikivu zisihamishiwe mtumiaji mgeni."</string>
<string name="user_add_user_message_short" msgid="1802594476285458254">"Mtumiaji mpya utakayemwongeza atahitaji kuongeza akaunti yake.\n\nMtumiaji yoyote anaweza kusasisha programu kwa niaba ya wengine wote."</string>
<string name="user_setup_dialog_title" msgid="6748950002206392396">"Mtumiaji aongezwe sasa?"</string>
<string name="user_setup_dialog_message" msgid="2988559933258353919">"Hakikisha kuwa mtu huyu anaweza kuchukua kifaa na kuweka mapendeleo yake"</string>
<string name="user_setup_profile_dialog_message" msgid="7611900802824048526">"Ungependa kuweka wasifu sasa?"</string>
<string name="user_setup_button_setup_now" msgid="4941459406266856176">"Mwongeze sasa"</string>
- <string name="user_setup_button_setup_later" msgid="6596031428556518752">"Siyo sasa"</string>
+ <string name="user_setup_button_setup_later" msgid="6596031428556518752">"Si sasa"</string>
<string name="user_cannot_manage_message" product="tablet" msgid="7108992906553210763">"Mmiliki wa kompyuta kibao pekee ndiye anayeweza kudhibiti watumiaji."</string>
<string name="user_cannot_manage_message" product="default" msgid="915260531390608092">"Mmiliki wa simu pekee ndiye anayeweza kudhibiti watumiaji."</string>
<string name="user_cannot_add_accounts_message" msgid="5993561303748749097">"Wasifu zilizodhibitiwa haziwezi kuongeza akaunti"</string>
@@ -2923,7 +2925,7 @@
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"Isipokuwa wakati programu nyingine ya malipo imefunguliwa"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"Unapolipa ukitumia chaguo la Gusisha ili ulipe, tumia:"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"Kulipa katika kituo"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Sanidi programu ya malipo. Shikilia tu upande wa nyuma wa simu yako kwenye kituo chochote cha malipo chenye alama ya kulipa bila kugusa."</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Sanidi programu ya malipo. Kisha elekeza upande wa nyuma wa simu yako kwenye kituo chochote cha malipo chenye alama ya kulipa kwa njia za kielektroniki."</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"Nimeelewa"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"Zaidi..."</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"Ungependa kuweka kama mapendeleo yako?"</string>
@@ -3150,7 +3152,7 @@
<string name="charging_sounds_title" msgid="5070437987230894287">"Sauti za kuchaji na mtetemo"</string>
<string name="docking_sounds_title" msgid="2573137471605541366">"Kuambatisha sauti"</string>
<string name="touch_sounds_title" msgid="165237488496165652">"Sauti inapoguswa"</string>
- <string name="vibrate_on_touch_title" msgid="6360155469279157684">"Mtetemo wa mguso"</string>
+ <string name="vibrate_on_touch_title" msgid="6360155469279157684">"Mtetemo inapoguswa"</string>
<string name="vibrate_on_touch_summary" msgid="5504424764028676043">"Majibu unayoweza kuhisi kwa kugusa, kibodi na mengineyo"</string>
<string name="dock_audio_media_title" msgid="1859521680502040781">"Cheza kutumia spika ya kituo"</string>
<string name="dock_audio_media_disabled" msgid="4300752306178486302">"Sauti zote"</string>
@@ -3159,7 +3161,7 @@
<string name="emergency_tone_alert" msgid="907868135091891015">"Milio"</string>
<string name="emergency_tone_vibrate" msgid="5020068066905681181">"Mitetemo"</string>
<string name="boot_sounds_title" msgid="7583926202411353620">"Washa sauti"</string>
- <string name="live_caption_title" msgid="7926591158657997051">"Nukuu Papo Hapo"</string>
+ <string name="live_caption_title" msgid="7926591158657997051">"Manukuu Papo Hapo"</string>
<string name="live_caption_summary" msgid="9064771862352393125">"Wekea maudhui manukuu kiotomatiki"</string>
<string name="zen_mode_settings_summary_off" msgid="6929319200478424962">"Kamwe usiwashe"</string>
<plurals name="zen_mode_settings_summary_on" formatted="false" msgid="6061723291126091396">
@@ -3282,8 +3284,8 @@
<string name="work_use_personal_sounds_title" msgid="531727195073003599">"Tumia sauti za wasifu wako binafsi"</string>
<string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"Sauti za wasifu wa binafsi na wa kazini ni sawa"</string>
<string name="work_ringtone_title" msgid="5499360583947410224">"Mlio wa simu ya kazini"</string>
- <string name="work_notification_ringtone_title" msgid="8059159087214025757">"Sauti chaguomsingi ya arifa ya kazini"</string>
- <string name="work_alarm_ringtone_title" msgid="5328487181385375130">"Sauti chaguomsingi ya kengele ya kazini"</string>
+ <string name="work_notification_ringtone_title" msgid="8059159087214025757">"Sauti chaguomsingi ya arifa za kazini"</string>
+ <string name="work_alarm_ringtone_title" msgid="5328487181385375130">"Sauti chaguomsingi ya kengele za kazini"</string>
<string name="work_sound_same_as_personal" msgid="7728560881697159758">"Sawa na wasifu binafsi"</string>
<string name="work_sync_dialog_title" msgid="4799120971202956837">"Ungependa kubadilisha sauti?"</string>
<string name="work_sync_dialog_yes" msgid="2110726233746476066">"Badilisha"</string>
@@ -3319,7 +3321,7 @@
<string name="notification_pulse_title" msgid="4861418327614907116">"Mwangaza umemeteke"</string>
<string name="lock_screen_notifications_title" msgid="6889072265118747835">"Wakati skrini imefungwa"</string>
<string name="locked_work_profile_notification_title" msgid="8307025804986190658">"Wakati umefunga wasifu wa kazini"</string>
- <string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"Onyesha arifa za maudhui yote"</string>
+ <string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"Onyesha maudhui yote ya arifa"</string>
<string name="lock_screen_notifications_summary_hide" msgid="3668806866535260143">"Ficha maudhui nyeti"</string>
<string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"Usionyeshe arifa zozote"</string>
<string name="lock_screen_notifications_interstitial_message" msgid="4230189215124387818">"Je, ungependa arifa zipi zionyeshwe wakati kifaa kimefungwa?"</string>
@@ -3339,11 +3341,11 @@
<string name="notification_importance_low" msgid="7609797151662295364">"Onyesha chinichini"</string>
<string name="notification_importance_default" msgid="4091563759103917166">"Toa sauti"</string>
<string name="notification_importance_high" msgid="7973764540402436656">"Toa sauti na ibukizi kwenye skrini"</string>
- <string name="notification_importance_high_silent" msgid="3177662759865661155">"Ichomoze kwenye skrini"</string>
+ <string name="notification_importance_high_silent" msgid="3177662759865661155">"Zionekane kwenye skrini"</string>
<string name="notification_importance_min_title" msgid="705872537330744154">"Punguza"</string>
<string name="notification_importance_low_title" msgid="2956199021781786232">"Wastani"</string>
<string name="notification_importance_default_title" msgid="7985549807203332482">"Juu"</string>
- <string name="notification_importance_high_title" msgid="7258373094258585858">"Ichomoze kwenye skrini"</string>
+ <string name="notification_importance_high_title" msgid="7258373094258585858">"Zionekane kwenye skrini"</string>
<string name="notification_block_title" msgid="2570364198866886906">"Zuia"</string>
<string name="notification_silence_title" msgid="6959637402003838093">"Ionyeshe bila kutoa sauti"</string>
<string name="notification_alert_title" msgid="750683027055192648">"Arifa"</string>
@@ -3517,7 +3519,7 @@
<string name="zen_mode_contacts_callers" msgid="3116829245339716399">"anwani"</string>
<string name="zen_mode_starred_callers" msgid="1317376207713013472">"anwani zenye nyota"</string>
<string name="zen_mode_repeat_callers" msgid="1435309867554692340">"Wanaorudia kupiga simu"</string>
- <string name="zen_mode_repeat_callers_list" msgid="2750270907597457279">"waliopiga simu mara kadhaa"</string>
+ <string name="zen_mode_repeat_callers_list" msgid="2750270907597457279">"wanaorudia kupiga simu"</string>
<string name="zen_mode_repeat_callers_title" msgid="7192952181541813487">"Ruhusu wanaorudia kupiga simu"</string>
<string name="zen_mode_calls_summary_one" msgid="8327371053236689649">"Ruhusu kutoka kwa <xliff:g id="CALLER_TYPE">%1$s</xliff:g>"</string>
<string name="zen_mode_calls_summary_two" msgid="9017678770532673578">"Ruhusu kutoka kwa <xliff:g id="CALLER_TYPE">%1$s</xliff:g> na <xliff:g id="CALLERT_TPYE">%2$s</xliff:g>"</string>
@@ -3694,7 +3696,7 @@
<string name="process_format" msgid="8575347150598564509">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="COUNT">%2$d</xliff:g>)"</string>
<string name="high_power_apps" msgid="2518319744362028920">"Kuboresha matumizi ya betri"</string>
<string name="additional_battery_info" msgid="6877663897819271203">"Arifa za matumizi"</string>
- <string name="show_all_apps" msgid="5442552004569634846">"Onyesha matumizi ya kifaa kilichojaa"</string>
+ <string name="show_all_apps" msgid="5442552004569634846">"Onyesha matumizi kamili ya kifaa"</string>
<string name="hide_extra_apps" msgid="6798261081113299441">"Onyesha matumizi ya programu"</string>
<plurals name="power_high_usage_summary" formatted="false" msgid="4658343710126205199">
<item quantity="other">Programu <xliff:g id="NUMBER">%2$d</xliff:g> hazifanyi kazi vizuri</item>
@@ -3713,7 +3715,7 @@
<string name="high_power_prompt_body" msgid="8067395096053552289">"Ukiruhusu <xliff:g id="APP_NAME">%1$s</xliff:g> kutumika chini chini, unaweza kupunguza muda wa matumizi ya betri. \n\nUnaweza kubadilisha hali hii baadaye katika Mipangilio > Programu na arifa."</string>
<string name="battery_summary" msgid="4345690800899981339">"Imetumia <xliff:g id="PERCENTAGE">%1$s</xliff:g> tangu mwisho ilipojazwa chaji"</string>
<string name="battery_power_management" msgid="2853925857548647969">"Udhibiti wa betri"</string>
- <string name="no_battery_summary" msgid="4105932628367471314">"Hakuna matumizi ya betri tangu ijazwe chaji mara ya mwisho"</string>
+ <string name="no_battery_summary" msgid="4105932628367471314">"Betri haijatumika tangu mwisho ilipojazwa chaji"</string>
<string name="app_notification_preferences" msgid="5154466638524523201">"Mipangilio ya programu"</string>
<string name="system_ui_settings" msgid="6751165163665775447">"Onyesha Kipokea Ishara cha SystemUI"</string>
<string name="additional_permissions" msgid="3142290772324571654">"Ruhusa za ziada"</string>
@@ -3734,7 +3736,7 @@
<string name="usb_use_tethering" msgid="4250626730173163846">"Kusambaza mtandao kupitia USB"</string>
<string name="usb_use_MIDI" msgid="4710632870781041401">"MIDI"</string>
<string name="usb_use_MIDI_desc" msgid="1770966187150010947">"Tumia kifaa hiki kama MIDI"</string>
- <string name="usb_use" msgid="8940500223316278632">"Tumia USB kwa ajili ya"</string>
+ <string name="usb_use" msgid="8940500223316278632">"Tumia USB"</string>
<string name="usb_default_label" msgid="7471316635263936101">"Mipangilio chaguomsingi ya USB"</string>
<string name="usb_default_info" msgid="953775292571786528">"Wakati kifaa kingine kimeunganishwa na simu yako imefunguliwa, mipangilio hii itatumika. Unganisha kwenye vifaa unavyoamini pekee."</string>
<string name="usb_pref" msgid="6194821550693495068">"USB"</string>
@@ -3829,9 +3831,9 @@
<string name="camera_double_tap_power_gesture_title" msgid="8874747801078147525">"Bonyeza kitufe cha kuwasha/kuzima mara mbili ili utumie kamera"</string>
<string name="camera_double_tap_power_gesture_desc" msgid="6166349645433682873">"Fungua kamera kwa haraka bila kufungua skrini yako"</string>
<string name="screen_zoom_title" msgid="164369086350486104">"Ukubwa wa vipengee"</string>
- <string name="screen_zoom_short_summary" msgid="5508079362742276703">"Kuongeza au kupunguza ukubwa wa vipengee kwenye skrini"</string>
+ <string name="screen_zoom_short_summary" msgid="5508079362742276703">"Ongeza au upunguze ukubwa wa vipengee kwenye skrini"</string>
<string name="screen_zoom_keywords" msgid="8358462497896524092">"onyesha uzito, kukuza skrini, kipimo, kupima"</string>
- <string name="screen_zoom_summary" msgid="5294003755961312560">"Ongeza au upunguze ukubwa wa vipengee kwenye skrini yako. Baadhi ya programu kwenye skrini yako huenda zikabadilisha mahali zilipo."</string>
+ <string name="screen_zoom_summary" msgid="5294003755961312560">"Ongeza au upunguze ukubwa wa vipengee kwenye skrini yako. Huenda baadhi ya programu kwenye skrini yako zikabadilisha mahali zilipo."</string>
<string name="screen_zoom_preview_title" msgid="2924312934036753091">"Kagua kwanza"</string>
<string name="screen_zoom_make_smaller_desc" msgid="1374501139722916729">"Punguza"</string>
<string name="screen_zoom_make_larger_desc" msgid="5306684807895846141">"Kuza"</string>
@@ -3864,7 +3866,7 @@
<string name="display_dashboard_nowallpaper_summary" msgid="8612534364908229000">"Hali tuli, ukubwa wa fonti"</string>
<string name="display_summary_example" msgid="4555020581960719296">"Iweke katika hali tuli baada ya dakika 10 za kutokuwa na shughuli"</string>
<string name="memory_summary" msgid="9121871336058042600">"Takriban <xliff:g id="USED_MEMORY">%1$s</xliff:g> kati ya <xliff:g id="TOTAL_MEMORY">%2$s</xliff:g> za hifadhi zimetumika"</string>
- <string name="users_summary" msgid="6693338169439092387">"Umeingia katika akaunti ukitumia <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
+ <string name="users_summary" msgid="6693338169439092387">"Umeingia katika akaunti kama <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
<string name="payment_summary" msgid="1381646849276543242">"<xliff:g id="APP_NAME">%1$s</xliff:g> ni chaguomsingi"</string>
<string name="backup_disabled" msgid="6941165814784765643">"Kipengee cha kuhifadhi nakala kimezimwa"</string>
<string name="android_version_summary" msgid="2192751442789395445">"Imesasishwa na inatumia Android <xliff:g id="VERSION">%1$s</xliff:g>"</string>
@@ -3940,7 +3942,7 @@
<string name="cell_data_template" msgid="5473177306229738078">"Data ya mtandao wa simu <xliff:g id="AMOUNT">^1</xliff:g>"</string>
<string name="wifi_data_template" msgid="3146090439147042068">"Data ya Wi-Fi <xliff:g id="AMOUNT">^1</xliff:g>"</string>
<string name="ethernet_data_template" msgid="6414118030827090119">"Data ya ethaneti <xliff:g id="AMOUNT">^1</xliff:g>"</string>
- <string name="billing_cycle" msgid="5740717948341713190">"Onyo la upeo na matumizi ya data"</string>
+ <string name="billing_cycle" msgid="5740717948341713190">"Onyo la kikomo na matumizi ya data"</string>
<string name="app_usage_cycle" msgid="213483325132959663">"Awamu ya matumizi ya data ya programu"</string>
<string name="cell_data_warning" msgid="8902740337286652689">"Onyo la matumizi ya data: <xliff:g id="ID_1">^1</xliff:g>"</string>
<string name="cell_data_limit" msgid="3175933829235314233">"Kikomo cha data: <xliff:g id="ID_1">^1</xliff:g>"</string>
@@ -3951,7 +3953,7 @@
<item quantity="other">Vizuizi <xliff:g id="COUNT">%1$d</xliff:g></item>
<item quantity="one">Kizuizi 1</item>
</plurals>
- <string name="operator_warning" msgid="4676042739221117031">"Huenda hesabu ya data ya mtoa huduma ikawa tofauti na ya kifaa chako."</string>
+ <string name="operator_warning" msgid="4676042739221117031">"Huenda hesabu ya data ya mtoa huduma ikawa tofauti na ya kifaa chako"</string>
<string name="data_used_template" msgid="761605393453849477">"<xliff:g id="ID_1">%1$s</xliff:g> zimetumika"</string>
<string name="set_data_warning" msgid="8115980184415563941">"Weka onyo la matumizi ya data"</string>
<string name="data_warning" msgid="2699207195535036240">"Onyo kuhusu data"</string>
@@ -3986,7 +3988,7 @@
<string name="data_saver_title" msgid="7903308134514179256">"Kiokoa Data"</string>
<string name="unrestricted_data_saver" msgid="9139401849550738720">"Data bila kipimo"</string>
<string name="restrict_background_blacklisted" msgid="7158991683849067124">"Data ya chini chini imezimwa"</string>
- <string name="data_saver_on" msgid="7281809065420480881">"Kimewashwa"</string>
+ <string name="data_saver_on" msgid="7281809065420480881">"Imewashwa"</string>
<string name="data_saver_off" msgid="7439439787358504018">"Kimezimwa"</string>
<string name="data_saver_switch_title" msgid="8244008132112735207">"Tumia Kiokoa Data"</string>
<string name="unrestricted_app_title" msgid="4390661122069905122">"Matumizi ya data bila vikwazo"</string>
@@ -4007,8 +4009,8 @@
<string name="not_battery_optimizing" msgid="2616044774307734160">"Haitumii kipengele cha kuboresha matumizi ya betri"</string>
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Ikiwa kifaa kimefungwa, usiruhusu uchapaji wa majibu au maandishi mengine kwenye arifa"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Kikagua tahajia chaguomsingi"</string>
- <string name="choose_spell_checker" msgid="7619860861923582868">"Chagua kikagua maendelezo"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Tumia kikagua maendelezo"</string>
+ <string name="choose_spell_checker" msgid="7619860861923582868">"Chagua kikagua tahajia"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Tumia kikagua maendelezo"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Hakijachaguliwa"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(hamna)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Ili kuongeza nafasi ya hifadhi, kidhibiti cha hifadhi huondoa picha na video zilizohifadhiwa nakala kwenye kifaa chako."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Ondoa picha na video"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Kidhibiti cha hifadhi"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Tumia Kidhibiti cha hifadhi"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Tumia Kidhibiti cha hifadhi"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Otomatiki"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Mwongozo"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Futa ili uongeze nafasi sasa"</string>
@@ -4438,7 +4440,7 @@
<string name="cdma_subscription_summary" msgid="2298861419202726628">"Badilisha kati ya RUIM/SIM na NV"</string>
<string name="cdma_subscription_dialogtitle" msgid="232485231569225126">"usajili"</string>
<string name="register_automatically" msgid="1858081641661493109">"Usajili wa kiotomatiki…"</string>
- <string name="roaming_alert_title" msgid="1849237823113454475">"Ungependa kuruhusu matumizi ya mitandao ya ng\'ambo?"</string>
+ <string name="roaming_alert_title" msgid="1849237823113454475">"Data itumike kwenye mitandao ya ng\'ambo?"</string>
<string name="roaming_check_price_warning" msgid="5883499714594419439">"Wasiliana na mtoa huduma za mtandao kwa maelezo kuhusu bei."</string>
<string name="mobile_data_usage_title" msgid="2376358672434990037">"Matumizi ya data ya programu"</string>
<string name="mobile_network_mode_error" msgid="6818434186286086554">"Hali ya Mtandao Isiyo sahihi <xliff:g id="NETWORKMODEID">%1$d</xliff:g>. Puuza"</string>
@@ -4505,7 +4507,7 @@
<string name="media_output_panel_summary_of_playing_device" msgid="7425231720911606911">"Inacheza sasa kwenye <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string>
<string name="wfc_disclaimer_title_text" msgid="3245793509743182243">"Maelezo muhimu"</string>
<string name="wfc_disclaimer_agree_button_text" msgid="4706101805260434404">"ENDELEA"</string>
- <string name="wfc_disclaimer_disagree_text" msgid="908289420390194127">"HAPANA, ASANTE"</string>
+ <string name="wfc_disclaimer_disagree_text" msgid="908289420390194127">"HAPANA"</string>
<string name="wfc_disclaimer_location_title_text" msgid="5696194250838686019">"Eneo"</string>
<string name="wfc_disclaimer_location_desc_text" msgid="3879710366995108723">"Mtoa huduma wako huenda atachukua eneo lako ili atoe huduma hii.\n\n Tafadhali kagua sera ya faragha ya mtoa huduma wako."</string>
<string name="forget_passpoint_dialog_message" msgid="3337626966248310367">"Huenda ukapoteza idhini ya kutumia muda au data inayosalia. Wasiliana na mtoa huduma wako kabla hujaondoa."</string>
diff --git a/tests/CarDeveloperOptions/res/values-ta/arrays.xml b/tests/CarDeveloperOptions/res/values-ta/arrays.xml
index 291f762..94d834c 100644
--- a/tests/CarDeveloperOptions/res/values-ta/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-ta/arrays.xml
@@ -38,7 +38,16 @@
<item msgid="5827960506924849753">"10 நிமிடங்கள்"</item>
<item msgid="6677424950124253938">"30 நிமிடங்கள்"</item>
</string-array>
- <!-- no translation found for dream_timeout_entries:7 (8271452751594598661) -->
+ <string-array name="dream_timeout_entries">
+ <item msgid="6487043225269853023">"ஒருபோதும் வேண்டாம்"</item>
+ <item msgid="2517785806387977252">"15 வினாடிகள்"</item>
+ <item msgid="6347954399441173672">"30 விநாடிகள்"</item>
+ <item msgid="4858305253279921789">"1 நிமிடம்"</item>
+ <item msgid="8109273437140044073">"2 நிமிடங்கள்"</item>
+ <item msgid="2788593551142462622">"5 நிமிடங்கள்"</item>
+ <item msgid="8012672183888404961">"10 நிமிடங்கள்"</item>
+ <item msgid="8271452751594598661">"30 நிமிடங்கள்"</item>
+ </string-array>
<string-array name="lock_after_timeout_entries">
<item msgid="2232921187970351881">"உடனடியாக"</item>
<item msgid="2038544972632026612">"5 வினாடிகள்"</item>
@@ -50,17 +59,47 @@
<item msgid="811192536981678974">"10 நிமிடங்கள்"</item>
<item msgid="7258394417241706272">"30 நிமிடங்கள்"</item>
</string-array>
- <!-- no translation found for entries_font_size:0 (2340391964816059553) -->
- <!-- no translation found for entries_font_size:0 (6490061470416867723) -->
- <!-- no translation found for entries_font_size:2 (1714184661981538355) -->
- <!-- no translation found for entries_font_size:2 (1678068858001018666) -->
- <!-- no translation found for wifi_status:3 (5848277343965362748) -->
- <!-- no translation found for wifi_status_with_ssid:1 (6816207058895999545) -->
- <!-- no translation found for wifi_status_with_ssid:3 (7547609081339573756) -->
- <!-- no translation found for wifi_status_with_ssid:4 (5145158315060185414) -->
+ <string-array name="entries_font_size">
+ <item msgid="2340391964816059553">"சிறிது"</item>
+ <item msgid="591935967183159581">"இயல்பு"</item>
+ <item msgid="1714184661981538355">"பெரியது"</item>
+ <item msgid="6195563047686707484">"மிகப் பெரியது"</item>
+ </string-array>
+ <string-array name="wifi_status">
+ <item msgid="1304883790721412351"></item>
+ <item msgid="4157625910392775808">"தேடுகிறது..."</item>
+ <item msgid="5597394826455877834">"இணைக்கிறது..."</item>
+ <item msgid="5848277343965362748">"அங்கீகரிக்கிறது…"</item>
+ <item msgid="3391238031431440676">"IP முகவரியைப் பெறுகிறது…"</item>
+ <item msgid="5257597310494000224">"இணைக்கப்பட்டது"</item>
+ <item msgid="8472497592913050396">"இடைநீக்கப்பட்டது"</item>
+ <item msgid="1228072488815999109">"துண்டிக்கிறது..."</item>
+ <item msgid="7253087004422991731">"தொடர்பு துண்டிக்கப்பட்டது"</item>
+ <item msgid="4169850917304751227">"தோல்வி"</item>
+ <item msgid="6266658166690831131">"தடுக்கப்பட்டது"</item>
+ <item msgid="4517230805854909775">"வேகம் குறைந்த இணைப்பைத் தற்காலிகமாகத் தவிர்க்கிறது"</item>
+ </string-array>
+ <string-array name="wifi_status_with_ssid">
+ <item msgid="4853670665485437464"></item>
+ <item msgid="6816207058895999545">"தேடுகிறது…"</item>
+ <item msgid="8058143476674427024">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> இல் இணைக்கிறது…"</item>
+ <item msgid="7547609081339573756">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> மூலம் அங்கீகரிக்கிறது…"</item>
+ <item msgid="5145158315060185414">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> இலிருந்து IP முகவரியைப் பெறுகிறது…"</item>
+ <item msgid="3283243151651124831">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> உடன் இணைக்கப்பட்டது"</item>
+ <item msgid="6600156231416890902">"இடைநீக்கப்பட்டது"</item>
+ <item msgid="4133290864821295785">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> இலிருந்து தொடர்பு துண்டிக்கப்படுகிறது…"</item>
+ <item msgid="3980154971187953257">"தொடர்பு துண்டிக்கப்பட்டது"</item>
+ <item msgid="2847316776634969068">"தோல்வி"</item>
+ <item msgid="4390990424746035383">"தடுக்கப்பட்டது"</item>
+ <item msgid="3618248791367063949">"வேகம் குறைந்த இணைப்பைத் தற்காலிகமாகத் தவிர்க்கிறது"</item>
+ </string-array>
<!-- no translation found for wifi_tether_security:0 (5586343370515598801) -->
<!-- no translation found for wifi_tether_security:1 (6136336549994615745) -->
- <!-- no translation found for wifi_p2p_wps_setup:0 (5390235347963255303) -->
+ <string-array name="wifi_p2p_wps_setup">
+ <item msgid="5390235347963255303">"புஷ் பட்டன்"</item>
+ <item msgid="7401896200768713930">"பியர் சாதனத்திலிருந்து பின்"</item>
+ <item msgid="4526848028011846710">"இந்தச் சாதனத்தில் உள்ள பின்"</item>
+ </string-array>
<string-array name="wifi_p2p_status">
<item msgid="8741947238021758201">"இணைக்கப்பட்டது"</item>
<item msgid="983792611851499732">"அழைக்கப்பட்டது"</item>
@@ -82,8 +121,13 @@
<item msgid="1644506614010085798">"4"</item>
<item msgid="3132506679404897150">"5"</item>
</string-array>
- <!-- no translation found for wifi_signal:1 (7882129634982603782) -->
- <!-- no translation found for wifi_signal:4 (999948812884919584) -->
+ <string-array name="wifi_signal">
+ <item msgid="1709949377823900951">"மோசம்"</item>
+ <item msgid="7882129634982603782">"மோசம்"</item>
+ <item msgid="6457357501905996224">"சுமார்"</item>
+ <item msgid="405271628162918841">"நன்று"</item>
+ <item msgid="999948812884919584">"பிரமாதம்"</item>
+ </string-array>
<string-array name="data_usage_data_range">
<item msgid="8986775481492954015">"கடந்த 30 நாட்கள்"</item>
<item msgid="3211287705232736964">"பயன்பாட்டு சுழற்சியை அமை..."</item>
@@ -119,7 +163,10 @@
<item msgid="7330627471456865502">"MSCHAPV2"</item>
<item msgid="6255179395132581882">"GTC"</item>
</string-array>
- <!-- no translation found for wifi_ip_settings:1 (4377002609760712163) -->
+ <string-array name="wifi_ip_settings">
+ <item msgid="2717196390555072244">"DHCP"</item>
+ <item msgid="4377002609760712163">"நிலையானது"</item>
+ </string-array>
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"ஏதுமில்லை"</item>
<item msgid="1464741437353223198">"கைமுறை"</item>
@@ -239,11 +286,73 @@
<item msgid="1165623660533024666">"பின்புலத்தில் இயங்கு"</item>
<item msgid="6423861043647911030">"அணுகல்தன்மைக்கான ஒலியளவு"</item>
</string-array>
- <!-- no translation found for app_ops_labels:3 (7836406246005211990) -->
- <!-- no translation found for app_ops_labels:4 (3951439024549922598) -->
- <!-- no translation found for app_ops_labels:8 (3597797992398484655) -->
- <!-- no translation found for app_ops_labels:20 (3037159047591081136) -->
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"இருப்பிடம்"</item>
+ <item msgid="6656077694190491067">"இருப்பிடம்"</item>
+ <item msgid="8790228218278477369">"இருப்பிடம்"</item>
+ <item msgid="7836406246005211990">"அதிர்வு"</item>
+ <item msgid="3951439024549922598">"தொடர்புகளைப் படி"</item>
+ <item msgid="8802152411647068">"தொடர்புகளை மாற்று"</item>
+ <item msgid="229544934599698735">"அழைப்புப் பதிவைப் படி"</item>
+ <item msgid="7396102294405899613">"அழைப்புப் பதிவை மாற்று"</item>
+ <item msgid="3597797992398484655">"கேலெண்டரைப் படி"</item>
+ <item msgid="2705975774250907343">"கேலெண்டரை மாற்று"</item>
+ <item msgid="4668747371441932697">"இருப்பிடம்"</item>
+ <item msgid="1487578921720243646">"அறிவிப்பை இடுகையிடு"</item>
+ <item msgid="4636080349724146638">"இருப்பிடம்"</item>
+ <item msgid="673510900286463926">"தொலைபேசியில் அழை"</item>
+ <item msgid="542083422784609790">"SMS/MMS ஐப் படி"</item>
+ <item msgid="1033780373029588436">"SMS/MMS எழுது"</item>
+ <item msgid="5647111115517787488">"SMS/MMS பெறு"</item>
+ <item msgid="8591105601108455893">"SMS/MMS பெறு"</item>
+ <item msgid="7730995008517841903">"SMS/MMS பெறு"</item>
+ <item msgid="2613033109026626086">"SMS/MMS பெறு"</item>
+ <item msgid="3037159047591081136">"SMS/MMS அனுப்பு"</item>
+ <item msgid="4726682243833913568">"SMS/MMS ஐப் படி"</item>
+ <item msgid="6555678522277865572">"SMS/MMS எழுது"</item>
+ <item msgid="6981734935578130884">"அமைப்புகளை மாற்று"</item>
+ <item msgid="8705854389991425629">"மேலே வரை"</item>
+ <item msgid="5861356020344153651">"அறிவிப்புகளை அணுகு"</item>
+ <item msgid="78432174621628659">"கேமரா"</item>
+ <item msgid="3986116419882154794">"ஆடியோவைப் பதிவுசெய்"</item>
+ <item msgid="4516840825756409490">"ஆடியோவை இயக்கு"</item>
+ <item msgid="6811712502798183957">"கிளிப்போர்டைப் படி"</item>
+ <item msgid="2780369012602289114">"கிளிப்போர்ட்டை மாற்று"</item>
+ <item msgid="2331359440170850868">"மீடியா பொத்தான்கள்"</item>
+ <item msgid="6133599737122751231">"ஆடியோவை மையப்படுத்து"</item>
+ <item msgid="6844485713404805301">"முதன்மை ஒலியளவு"</item>
+ <item msgid="1600379420669104929">"குரல் ஒலியளவு"</item>
+ <item msgid="6296768210470214866">"அழைப்பு - ஒலியளவு"</item>
+ <item msgid="510690696071629241">"மீடியா ஒலியளவு"</item>
+ <item msgid="406861638631430109">"அலார ஒலியளவு"</item>
+ <item msgid="4715864795872233884">"அறிவிப்பின் ஒலியளவு"</item>
+ <item msgid="2311478519251301183">"புளூடூத் ஒலியளவு"</item>
+ <item msgid="5133991377896747027">"எப்போதும் விழிப்பில்"</item>
+ <item msgid="2464189519136248621">"இருப்பிடம்"</item>
+ <item msgid="2062677934050803037">"இருப்பிடம்"</item>
+ <item msgid="1735171933192715957">"பயன்பாட்டு புள்ளிவிவரத்தைப் பெறுக"</item>
+ <item msgid="1014093788778383554">"மைக்ரோஃபோனை முடக்கு/இயக்கு"</item>
+ <item msgid="4199297950608622850">"டோஸ்ட்டைக் காட்டு"</item>
+ <item msgid="2527962435313398821">"மீடியாவை புராஜக்ட் செய்"</item>
+ <item msgid="5117506254221861929">"VPNஐ இயக்கு"</item>
+ <item msgid="8291198322681891160">"வால்பேப்பரை எழுது"</item>
+ <item msgid="7106921284621230961">"கட்டமைப்புக்கு உதவு"</item>
+ <item msgid="4496533640894624799">"ஸ்கிரீன்ஷாட்டுக்கு உதவு"</item>
+ <item msgid="2598847264853993611">"ஃபோன் நிலையைப் படி"</item>
+ <item msgid="9215610846802973353">"குரலஞ்சலைச் சேர்"</item>
+ <item msgid="9186411956086478261">"sipஐப் பயன்படுத்து"</item>
+ <item msgid="6884763100104539558">"வெளிச்செல்லும் அழைப்பைச் செயலாக்கு"</item>
+ <item msgid="125513972170580692">"கைரேகை"</item>
+ <item msgid="2556071024281275619">"உடல் சென்சார்கள்"</item>
+ <item msgid="617168514928339387">"செல் பிராட்காஸ்ட்களைப் படி"</item>
+ <item msgid="7134693570516523585">"போலியான இருப்பிடம்"</item>
+ <item msgid="7224489175375229399">"சேமிப்பகத்தைப் படி"</item>
+ <item msgid="8472735063903258202">"சேமிப்பகத்தை எழுது"</item>
+ <item msgid="4069276819909595110">"திரையை இயக்கு"</item>
+ <item msgid="1228338896751121025">"கணக்குகளைப் பெறு"</item>
+ <item msgid="3181581793459233672">"பின்புலத்தில் இயங்கு"</item>
+ <item msgid="2340936043025374076">"அணுகல்தன்மைக்கான ஒலியளவு"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"குறுகியது"</item>
<item msgid="4816511817309094890">"நடுத்தர முக்கியத்துவம்"</item>
@@ -260,7 +369,13 @@
<item msgid="4627069151979553527">"இணைவெழுத்து முறை"</item>
<item msgid="6896773537705206194">"சிறிய எழுத்துகள்"</item>
</string-array>
- <!-- no translation found for captioning_font_size_selector_titles:3 (2784236342175159295) -->
+ <string-array name="captioning_font_size_selector_titles">
+ <item msgid="1680223634161592855">"மிகச் சிறியது"</item>
+ <item msgid="5091603983404027034">"சிறியது"</item>
+ <item msgid="176844712416932112">"சராசரி"</item>
+ <item msgid="2784236342175159295">"பெரியது"</item>
+ <item msgid="218913203203160606">"மிகப் பெரியது"</item>
+ </string-array>
<string-array name="captioning_edge_type_selector_titles">
<item msgid="3865198759294188069">"இயல்பு"</item>
<item msgid="6488643537808152001">"ஏதுமில்லை"</item>
@@ -275,7 +390,14 @@
<item msgid="1874668269931014581">"75%"</item>
<item msgid="6462911487571123954">"100%"</item>
</string-array>
- <!-- no translation found for captioning_preset_selector_titles:2 (5891360837786277638) -->
+ <string-array name="captioning_preset_selector_titles">
+ <item msgid="326819345272910536">"ஆப்ஸ் இயல்புகளை பயன்படுத்து"</item>
+ <item msgid="8611890312638868524">"கருப்பில் வெண்மை"</item>
+ <item msgid="5891360837786277638">"வெண்மையில் கருப்பு"</item>
+ <item msgid="2798457065945456853">"கருப்பில் மஞ்சள்"</item>
+ <item msgid="5799049811524553967">"நீலத்தில் மஞ்சள்"</item>
+ <item msgid="3673930830658169860">"பிரத்தியேகமானது"</item>
+ </string-array>
<string-array name="vpn_types_long">
<item msgid="6566768880689730097">"PPTP VPN"</item>
<item msgid="1349760781118368659">"பாதுகாப்பு விசைகளுடன் கூடிய L2TP/IPSec VPN"</item>
@@ -288,15 +410,32 @@
<item msgid="2958623927055120839">"ஏதுமில்லை"</item>
<item msgid="1157046369795346308">"கைமுறை"</item>
</string-array>
- <!-- no translation found for vpn_states:4 (9135049670787351881) -->
+ <string-array name="vpn_states">
+ <item msgid="5408915841694583740">"தொடர்பு துண்டிக்கப்பட்டது"</item>
+ <item msgid="8754480102834556765">"தொடங்குகிறது..."</item>
+ <item msgid="3351334355574270250">"இணைக்கிறது..."</item>
+ <item msgid="8303882153995748352">"இணைக்கப்பட்டது"</item>
+ <item msgid="9135049670787351881">"நேரம் முடிந்தது"</item>
+ <item msgid="2124868417182583926">"தோல்வி"</item>
+ </string-array>
<string-array name="security_settings_premium_sms_values">
<item msgid="1164265643455394443">"கேள்"</item>
<item msgid="7718817231348607934">"ஒருபோதும் அனுமதிக்காதே"</item>
<item msgid="8184570120217958741">"எப்போதும் அனுமதி"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"இயல்பானது"</item>
+ <item msgid="5101233285497327432">"நடுத்தரம்"</item>
+ <item msgid="1555861583162930714">"குறைவு"</item>
+ <item msgid="1719683776264798117">"நெருக்கடி"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"இயல்பு"</item>
+ <item msgid="6107138933849816768">"நடுத்தரம்"</item>
+ <item msgid="182695359839047859">"குறைவு"</item>
+ <item msgid="8577246509202964244">"மிகவும் குறைவு"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"தொடர்நிலை"</item>
<item msgid="167418068739176448">"அதிக செயல்பாடு"</item>
diff --git a/tests/CarDeveloperOptions/res/values-ta/strings.xml b/tests/CarDeveloperOptions/res/values-ta/strings.xml
index e24bd36..692d763 100644
--- a/tests/CarDeveloperOptions/res/values-ta/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-ta/strings.xml
@@ -31,8 +31,8 @@
<string name="dev_settings_disabled_warning" msgid="3198732189395396721">"முதலில் டெவெலப்பர் விருப்பங்களை இயக்கவும்."</string>
<string name="header_category_wireless_networks" msgid="8968405993937795898">"வயர்லெஸ் & நெட்வொர்க்குகள்"</string>
<string name="header_category_system" msgid="4045988717359334410">"சிஸ்டம்"</string>
- <string name="radio_info_data_connection_enable" msgid="2554249462719717119">"தரவு இணைப்பை இயக்கு"</string>
- <string name="radio_info_data_connection_disable" msgid="2430609627397999371">"தரவு இணைப்பை முடக்கு"</string>
+ <string name="radio_info_data_connection_enable" msgid="2554249462719717119">"டேட்டா இணைப்பை இயக்கு"</string>
+ <string name="radio_info_data_connection_disable" msgid="2430609627397999371">"டேட்டா இணைப்பை முடக்கு"</string>
<string name="volte_provisioned_switch_string" msgid="6326756678226686704">"VoLTE ஒதுக்கீட்டுக் கொடி இயக்கத்தில்"</string>
<string name="vt_provisioned_switch_string" msgid="7458479879009293613">"வீடியோ அழைப்பு அமைக்கப்பட்டது"</string>
<string name="wfc_provisioned_switch_string" msgid="5446697646596639516">"வைஃபை அழைப்பு அமைக்கப்பட்டது"</string>
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"திரையில் காட்டப்படும் உரையைச் சிறிதாக்கும் அல்லது பெரிதாக்கும்."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"சிறிதாக்கு"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"பெரிதாக்கு"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"மாதிரி உரை"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"தி விசார்ட் ஆஃப் ஓஸ்"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"அத்தியாயம் 11: ஓஸின் அற்புதமான மரகத நகரம்"</string>
@@ -162,7 +161,7 @@
<string name="bluetooth_map_request" msgid="34345631620551756">"செய்திக்கான அணுகல் கோரிக்கை"</string>
<string name="bluetooth_map_acceptance_dialog_text" msgid="736507842082640410">"உங்கள் செய்திகளை %1$s அணுக விரும்புகிறது. %2$s க்கு அணுகலை வழங்கவா?"</string>
<string name="bluetooth_sap_request" msgid="6318039677671263261">"SIM அணுகல் கோரிக்கை"</string>
- <string name="bluetooth_sap_acceptance_dialog_text" msgid="1909352413109340355">"<xliff:g id="DEVICE_NAME_0">%1$s</xliff:g> உங்கள் சிம் கார்டை அணுக விரும்புகிறது. சிம் கார்டிற்கு அணுகல் வழங்குவது இணைப்பின் போது, உங்கள் சாதனத்தின் தரவு இணைப்பை முடக்கும். <xliff:g id="DEVICE_NAME_1">%2$s?</xliff:g>க்கு அணுகல் வழங்கவும்"</string>
+ <string name="bluetooth_sap_acceptance_dialog_text" msgid="1909352413109340355">"<xliff:g id="DEVICE_NAME_0">%1$s</xliff:g> உங்கள் சிம் கார்டை அணுக விரும்புகிறது. சிம் கார்டிற்கு அணுகல் வழங்குவது இணைப்பின் போது, உங்கள் சாதனத்தின் டேட்டா இணைப்பை முடக்கும். <xliff:g id="DEVICE_NAME_1">%2$s?</xliff:g>க்கு அணுகல் வழங்கவும்"</string>
<string name="bluetooth_device_name_summary" msgid="8661066392056595005">"பிற சாதனங்களில் “<xliff:g id="DEVICE_NAME">^1</xliff:g>” எனத் தெரியும்"</string>
<string name="bluetooth_off_footer" msgid="7658444560543730571">"பிற சாதனங்களுடன் இணைக்க, புளூடூத்தை ஆன் செய்யவும்."</string>
<string name="bluetooth_paired_device_title" msgid="8361860197780425286">"உங்கள் சாதனங்கள்"</string>
@@ -312,7 +311,7 @@
<string name="roaming" msgid="8860308342135146004">"ரோமிங்"</string>
<string name="roaming_enable" msgid="2108142024297441116">"ரோமிங்கின் போது டேட்டா சேவைகளுடன் இணை"</string>
<string name="roaming_disable" msgid="1915440242079953809">"ரோமிங்கின் போது டேட்டா சேவைகளுடன் இணை"</string>
- <string name="roaming_reenable_message" msgid="8388505868655113258">"உங்களுடைய உள்ளூர் நெட்வொர்க்கில் தரவு ரோமிங்கை முடக்கியுள்ளதால் உங்கள் தரவு இணைப்பை இழந்துவிட்டீர்கள்."</string>
+ <string name="roaming_reenable_message" msgid="8388505868655113258">"உங்களுடைய உள்ளூர் நெட்வொர்க்கில் தரவு ரோமிங்கை முடக்கியுள்ளதால் உங்கள் டேட்டா இணைப்பை இழந்துவிட்டீர்கள்."</string>
<string name="roaming_turn_it_on_button" msgid="4370846458830537578">"இதை இயக்கவும்"</string>
<string name="roaming_warning" msgid="5488050911277592868">"கட்டணம் விதிக்கப்படலாம்."</string>
<string name="roaming_warning_multiuser" product="tablet" msgid="7090388691615686893">"நீங்கள் தரவு ரோமிங்கை அனுமதிக்கும்போது, குறிப்பிட்ட ரோமிங் பேமெண்ட்கள் உங்களுக்கு விதிக்கப்படலாம்!\n\nஅமைப்பானது, டேப்லெட்டில் உள்ள அனைவரையும் பாதிக்கும்."</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"சுயவிவரத் தகவல்"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"கணக்குகள்"</string>
<string name="location_settings_title" msgid="2707201457572301030">"இருப்பிடம்"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"இருப்பிடத்தைப் பயன்படுத்து"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"இருப்பிடத்தைப் பயன்படுத்து"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"ஆஃப்"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">ஆன் - <xliff:g id="COUNT_1">%1$d</xliff:g> ஆப்ஸால் இருப்பிடத்தை அணுக இயலும்</item>
@@ -440,9 +439,9 @@
<string name="security_settings_fingerprint_preference_summary_none" msgid="3613424536269750172"></string>
<string name="security_settings_fingerprint_enroll_introduction_title" msgid="889558002683900544">"கைரேகை மூலம் திறக்கலாம்"</string>
<string name="security_settings_fingerprint_enroll_introduction_title_unlock_disabled" msgid="7915504118657864429">"கைரேகையைப் பயன்படுத்தவும்"</string>
- <string name="security_settings_fingerprint_enroll_introduction_message" msgid="5586198131986682472">"மொபைலைத் திறக்க, வாங்குவதை அங்கீகரிக்க அல்லது பயன்பாடுகளில் உள்நுழைய, கைரேகை சென்சாரைத் தொட்டால் போதும். கைரேகையைப் பயன்படுத்தி மேலே குறிப்பிட்டுள்ளவற்றைச் செய்ய முடியும் என்பதால், அனைவரின் கைரேகைகளையும் இதில் சேர்க்க வேண்டாம்.\n\nகுறிப்பு: எளிதில் ஊகிக்க முடியாத வடிவம் அல்லது பின்னைப் பயன்படுத்தும் போது கிடைக்கும் பாதுகாப்பை விட, கைரேகையைப் பயன்படுத்தும் போது குறைவான பாதுகாப்பே கிடைக்கும்."</string>
+ <string name="security_settings_fingerprint_enroll_introduction_message" msgid="5586198131986682472">"மொபைலைத் திறக்க, வாங்குவதை அங்கீகரிக்க அல்லது பயன்பாடுகளில் உள்நுழைய, கைரேகை சென்சாரைத் தொட்டால் போதும். கைரேகையைப் பயன்படுத்தி மேலே குறிப்பிட்டுள்ளவற்றைச் செய்ய முடியும் என்பதால், அனைவரின் கைரேகைகளையும் இதில் சேர்க்க வேண்டாம்.\n\nகுறிப்பு: எளிதில் ஊகிக்க முடியாத பேட்டர்ன் அல்லது பின்னைப் பயன்படுத்தும் போது கிடைக்கும் பாதுகாப்பை விட, கைரேகையைப் பயன்படுத்தும் போது குறைவான பாதுகாப்பே கிடைக்கும்."</string>
<string name="security_settings_fingerprint_enroll_introduction_message_unlock_disabled" msgid="1640839304679275468">"மொபைலைத் திறக்க அல்லது வாங்குவதை அங்கீகரிக்க, உங்கள் கைரேகையைப் பயன்படுத்தவும்.\n\n குறிப்பு: இந்தச் சாதனத்தைத் திறக்க, கைரேகையைப் பயன்படுத்த முடியாது. மேலும் தகவலுக்கு, உங்கள் நிறுவனத்தின் நிர்வாகியைத் தொடர்புகொள்ளவும்."</string>
- <string name="security_settings_fingerprint_enroll_introduction_message_setup" msgid="6734490666593320711">"மொபைலைத் திறக்க அல்லது வாங்குவதை அங்கீகரிக்க, உங்கள் கைரேகையைப் பயன்படுத்தவும்.\nகுறிப்பு: எளிதில் ஊகிக்க முடியாத வடிவம் அல்லது பின்னைப் பயன்படுத்தும் போது கிடைக்கும் பாதுகாப்பை விட, கைரேகையைப் பயன்படுத்தும் போது குறைவான பாதுகாப்பே கிடைக்கும்.\n"</string>
+ <string name="security_settings_fingerprint_enroll_introduction_message_setup" msgid="6734490666593320711">"மொபைலைத் திறக்க அல்லது வாங்குவதை அங்கீகரிக்க, உங்கள் கைரேகையைப் பயன்படுத்தவும்.\nகுறிப்பு: எளிதில் ஊகிக்க முடியாத பேட்டர்ன் அல்லது பின்னைப் பயன்படுத்தும் போது கிடைக்கும் பாதுகாப்பை விட, கைரேகையைப் பயன்படுத்தும் போது குறைவான பாதுகாப்பே கிடைக்கும்.\n"</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel" msgid="9168637333731599827">"ரத்துசெய்"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue" msgid="271662150372486535">"தொடரவும்"</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel_setup" msgid="756928427429893070">"தவிர்"</string>
@@ -509,8 +508,8 @@
<string name="crypt_keeper_encrypt_title" product="tablet" msgid="2292129135369853167">"டேப்லெட்டை என்க்ரிப்ட் செய்"</string>
<string name="crypt_keeper_encrypt_title" product="default" msgid="3110852053238357832">"மொபைலை என்க்ரிப்ட் செய்"</string>
<string name="crypt_keeper_encrypted_summary" msgid="2438498691741626642">"என்க்ரிப்ட் செய்யப்பட்டது"</string>
- <string name="crypt_keeper_desc" product="tablet" msgid="9142792050252407734">"உங்கள் கணக்குகள், அமைப்புகள், பதிவிறக்கிய ஆப்ஸ் மற்றும் அவற்றின் தரவு, மீடியா மற்றும் பிற கோப்புகள் என அனைத்தையும் என்க்ரிப்ட் செய்யலாம். உங்கள் டேப்லெட்டை என்க்ரிப்ட் செய்த பிறகு, திரைப்பூட்டை (அதாவது வடிவம் அல்லது பின் அல்லது கடவுச்சொல்) அமைத்திருந்தால், ஒவ்வொரு முறையும் டேப்லெட்டை இயக்கும்போது குறிநீக்குவதற்கு திரையைத் திறக்க வேண்டும். உங்களின் எல்லா தரவையும் அழித்து, ஆரம்ப நிலைக்கு மீட்டமைப்பதே குறிநீக்குவதற்கான மற்றொரு வழியாகும்.\n\nஎன்க்ரிப்ட் செய்வதற்கு ஒரு மணிநேரம் அல்லது அதற்கு மேல் ஆகலாம். சார்ஜ் செய்த பேட்டரியுடன் தொடங்கி, செயல் முடியும் வரை சார்ஜ் ஆகும் நிலையிலேயே வைக்கவும். செயலில் குறுக்கிட்டால், உங்கள் தரவில் சிலவற்றை அல்லது மொத்தத்தையும் இழப்பீர்கள்."</string>
- <string name="crypt_keeper_desc" product="default" msgid="1996334685607444282">"உங்கள் கணக்குகள், அமைப்புகள், பதிவிறக்கிய ஆப்ஸ் மற்றும் அவற்றின் தரவு, மீடியா மற்றும் பிற கோப்புகள் என அனைத்தையும் என்க்ரிப்ட் செய்யலாம். உங்கள் மொபைலை என்க்ரிப்ட் செய்த பிறகு, திரைப்பூட்டை (அதாவது வடிவம் அல்லது பின் அல்லது கடவுச்சொல்) அமைத்திருந்தால், ஒவ்வொரு முறையும் மொபைலை இயக்கும்போது குறிநீக்குவதற்கு திரையைத் திறக்க வேண்டும். உங்களின் எல்லா தரவையும் அழித்து, ஆரம்ப நிலைக்கு மீட்டமைப்பதே குறிநீக்குவதற்கான மற்றொரு வழியாகும்.\n\nஎன்க்ரிப்ட் செய்வதற்கு ஒரு மணிநேரம் அல்லது அதற்கு மேல் ஆகலாம். சார்ஜ் செய்த பேட்டரியுடன் தொடங்கி, செயல் முடியும் வரை சார்ஜ் ஆகும் நிலையிலேயே வைக்கவும். செயலில் குறுக்கிட்டால், உங்கள் தரவில் சிலவற்றை அல்லது மொத்தத்தையும் இழப்பீர்கள்."</string>
+ <string name="crypt_keeper_desc" product="tablet" msgid="9142792050252407734">"உங்கள் கணக்குகள், அமைப்புகள், பதிவிறக்கிய ஆப்ஸ் மற்றும் அவற்றின் தரவு, மீடியா மற்றும் பிற கோப்புகள் என அனைத்தையும் என்க்ரிப்ட் செய்யலாம். உங்கள் டேப்லெட்டை என்க்ரிப்ட் செய்த பிறகு, திரைப்பூட்டை (அதாவது பேட்டர்ன் அல்லது பின் அல்லது கடவுச்சொல்) அமைத்திருந்தால், ஒவ்வொரு முறையும் டேப்லெட்டை இயக்கும்போது குறிநீக்குவதற்கு திரையைத் திறக்க வேண்டும். உங்களின் எல்லா தரவையும் அழித்து, ஆரம்ப நிலைக்கு மீட்டமைப்பதே குறிநீக்குவதற்கான மற்றொரு வழியாகும்.\n\nஎன்க்ரிப்ட் செய்வதற்கு ஒரு மணிநேரம் அல்லது அதற்கு மேல் ஆகலாம். சார்ஜ் செய்த பேட்டரியுடன் தொடங்கி, செயல் முடியும் வரை சார்ஜ் ஆகும் நிலையிலேயே வைக்கவும். செயலில் குறுக்கிட்டால், உங்கள் தரவில் சிலவற்றை அல்லது மொத்தத்தையும் இழப்பீர்கள்."</string>
+ <string name="crypt_keeper_desc" product="default" msgid="1996334685607444282">"உங்கள் கணக்குகள், அமைப்புகள், பதிவிறக்கிய ஆப்ஸ் மற்றும் அவற்றின் தரவு, மீடியா மற்றும் பிற கோப்புகள் என அனைத்தையும் என்க்ரிப்ட் செய்யலாம். உங்கள் மொபைலை என்க்ரிப்ட் செய்த பிறகு, திரைப்பூட்டை (அதாவது பேட்டர்ன் அல்லது பின் அல்லது கடவுச்சொல்) அமைத்திருந்தால், ஒவ்வொரு முறையும் மொபைலை இயக்கும்போது குறிநீக்குவதற்கு திரையைத் திறக்க வேண்டும். உங்களின் எல்லா தரவையும் அழித்து, ஆரம்ப நிலைக்கு மீட்டமைப்பதே குறிநீக்குவதற்கான மற்றொரு வழியாகும்.\n\nஎன்க்ரிப்ட் செய்வதற்கு ஒரு மணிநேரம் அல்லது அதற்கு மேல் ஆகலாம். சார்ஜ் செய்த பேட்டரியுடன் தொடங்கி, செயல் முடியும் வரை சார்ஜ் ஆகும் நிலையிலேயே வைக்கவும். செயலில் குறுக்கிட்டால், உங்கள் தரவில் சிலவற்றை அல்லது மொத்தத்தையும் இழப்பீர்கள்."</string>
<string name="crypt_keeper_button_text" product="tablet" msgid="7918671468758813824">"டேப்லெட்டை என்க்ரிப்ட் செய்"</string>
<string name="crypt_keeper_button_text" product="default" msgid="8737394386627318489">"மொபைலை என்க்ரிப்ட் செய்"</string>
<string name="crypt_keeper_low_charge_text" msgid="1422879728632636311">"உங்கள் பேட்டரியை சார்ஜ் செய்து மீண்டும் முயற்சிக்கவும்."</string>
@@ -562,13 +561,13 @@
<string name="unlock_set_unlock_launch_picker_summary_lock_after_timeout" msgid="3861167251234952373">"<xliff:g id="UNLOCK_METHOD">%1$s</xliff:g> / உறக்கத்திற்குப் பின் <xliff:g id="TIMEOUT_STRING">%2$s</xliff:g>"</string>
<string name="unlock_set_unlock_launch_picker_title_profile" msgid="7976345264630422921">"பணிச் சுயவிவரப் பூட்டு"</string>
<string name="unlock_set_unlock_launch_picker_change_title" msgid="32310692507029407">"லாக் ஸ்கிரீனை மாற்றவும்"</string>
- <string name="unlock_set_unlock_launch_picker_change_summary" msgid="2072792784866320522">"வடிவம், பின் அல்லது கடவுச்சொல் பாதுகாப்பை மாற்றவும் அல்லது முடக்கவும்."</string>
+ <string name="unlock_set_unlock_launch_picker_change_summary" msgid="2072792784866320522">"பேட்டர்ன், பின் அல்லது கடவுச்சொல் பாதுகாப்பை மாற்றவும் அல்லது முடக்கவும்."</string>
<string name="unlock_set_unlock_launch_picker_enable_summary" msgid="9070847611379078795">"திரையைப் பூட்டுவதற்கான முறையைத் தேர்வுசெய்யவும்"</string>
<string name="unlock_set_unlock_off_title" msgid="5049876793411416079">"ஏதுமில்லை"</string>
<string name="unlock_set_unlock_off_summary" msgid="3997346045783359119"></string>
<string name="unlock_set_unlock_none_title" msgid="1922027966983146392">"ஸ்வைப்"</string>
<string name="unlock_set_unlock_none_summary" msgid="4044529413627659031">"பாதுகாப்பு இல்லை"</string>
- <string name="unlock_set_unlock_pattern_title" msgid="7533759994999423587">"வடிவம்"</string>
+ <string name="unlock_set_unlock_pattern_title" msgid="7533759994999423587">"பேட்டர்ன்"</string>
<string name="unlock_set_unlock_pattern_summary" msgid="8858697834522201333">"மிதமான பாதுகாப்பு"</string>
<string name="unlock_set_unlock_pin_title" msgid="361479901761948207">"பின்"</string>
<string name="unlock_set_unlock_pin_summary" msgid="8076921768675948228">"மிதமானது முதல் அதிக பாதுகாப்பு"</string>
@@ -576,7 +575,7 @@
<string name="unlock_set_unlock_password_summary" msgid="7042787631866059147">"அதிகப் பாதுகாப்பு"</string>
<string name="unlock_set_do_later_title" msgid="2939110070503695956">"இப்போது வேண்டாம்"</string>
<string name="current_screen_lock" msgid="398328543694154510">"தற்போதைய திரைப் பூட்டு"</string>
- <string name="fingerprint_unlock_set_unlock_pattern" msgid="132337696546315927">"கைரேகை + வடிவம்"</string>
+ <string name="fingerprint_unlock_set_unlock_pattern" msgid="132337696546315927">"கைரேகை + பேட்டர்ன்"</string>
<string name="fingerprint_unlock_set_unlock_pin" msgid="886426673328906002">"கைரேகை + பின்"</string>
<string name="fingerprint_unlock_set_unlock_password" msgid="3325527833422156515">"கைரேகை + கடவுச்சொல்"</string>
<string name="fingerprint_unlock_skip_fingerprint" msgid="2063700014903801639">"கைரேகையின்றி தொடர்க"</string>
@@ -589,14 +588,14 @@
<string name="unlock_set_unlock_disabled_summary" msgid="1713159782896140817">"நிர்வாகி, என்கிரிப்ஷன் பாலிசி/நற்சான்று சேமிப்பகம் காரணமாக முடக்கப்பட்டது"</string>
<string name="unlock_set_unlock_mode_off" msgid="2950701212659081973">"ஏதுமில்லை"</string>
<string name="unlock_set_unlock_mode_none" msgid="3441605629077912292">"ஸ்வைப்"</string>
- <string name="unlock_set_unlock_mode_pattern" msgid="8564909572968419459">"வடிவம்"</string>
+ <string name="unlock_set_unlock_mode_pattern" msgid="8564909572968419459">"பேட்டர்ன்"</string>
<string name="unlock_set_unlock_mode_pin" msgid="7828354651668392875">"பின்"</string>
<string name="unlock_set_unlock_mode_password" msgid="397703731925549447">"கடவுச்சொல்"</string>
<string name="unlock_setup_wizard_fingerprint_details" msgid="6515136915205473675">"திரைப் பூட்டு அமைத்ததும், அமைப்புகள் > பாதுகாப்பு என்பதற்குச் சென்று கைரேகையை அமைக்கலாம்."</string>
<string name="unlock_disable_lock_title" msgid="3508492427073600294">"திரைப் பூட்டை முடக்கு"</string>
<string name="unlock_disable_frp_warning_title" msgid="5858589970505254193">"சாதனப் பாதுகாப்பை அகற்றவா?"</string>
<string name="unlock_disable_frp_warning_title_profile" msgid="3814123014295965266">"சுயவிவரப் பாதுகாப்பை அகற்றவா?"</string>
- <string name="unlock_disable_frp_warning_content_pattern" msgid="1843950215687159135">"வடிவம் இல்லாமல் சாதனப் பாதுகாப்பு அம்சங்கள் செயல்படாது."</string>
+ <string name="unlock_disable_frp_warning_content_pattern" msgid="1843950215687159135">"பேட்டர்ன் இல்லாமல் சாதனப் பாதுகாப்பு அம்சங்கள் செயல்படாது."</string>
<string name="unlock_disable_frp_warning_content_pattern_fingerprint" msgid="8846957650251741548">"பேட்டர்ன் இல்லாமல் சாதனப் பாதுகாப்பு அம்சங்கள் செயல்படாது.<xliff:g id="EMPTY_LINE">
</xliff:g>சேமிக்கப்பட்டிருக்கும் கைரேகைகளும் இந்தச் சாதனத்திலிருந்து அகற்றப்படும். எனவே அவற்றின் மூலம் உங்களால் மொபைலைத் திறக்கவோ, வாங்குவதை அங்கீகரிக்கவோ அல்லது பயன்பாடுகளில் உள்நுழையவோ முடியாது."</string>
@@ -612,7 +611,7 @@
<string name="unlock_disable_frp_warning_content_unknown_fingerprint" msgid="5775815077478538855">"திரைப் பூட்டு இல்லாமல் சாதனப் பாதுகாப்பு அம்சங்கள் செயல்படாது.<xliff:g id="EMPTY_LINE">
</xliff:g>சேமிக்கப்பட்டிருக்கும் கைரேகைகளும் இந்தச் சாதனத்திலிருந்து அகற்றப்படும். எனவே அவற்றின் மூலம் உங்களால் மொபைலைத் திறக்கவோ, வாங்குவதை அங்கீகரிக்கவோ அல்லது பயன்பாடுகளில் உள்நுழையவோ முடியாது."</string>
- <string name="unlock_disable_frp_warning_content_pattern_profile" msgid="2369992898062808499">"வடிவம் இல்லாமல் சுயவிவரப் பாதுகாப்பு அம்சங்கள் செயல்படாது."</string>
+ <string name="unlock_disable_frp_warning_content_pattern_profile" msgid="2369992898062808499">"பேட்டர்ன் இல்லாமல் சுயவிவரப் பாதுகாப்பு அம்சங்கள் செயல்படாது."</string>
<string name="unlock_disable_frp_warning_content_pattern_fingerprint_profile" msgid="8511105093090018735">"பேட்டர்ன் இல்லாமல் சுயவிவரப் பாதுகாப்பு அம்சங்கள் செயல்படாது.<xliff:g id="EMPTY_LINE">
</xliff:g>சேமிக்கப்பட்டிருக்கும் கைரேகைகளும் இந்தச் சுயவிவரத்திலிருந்து அகற்றப்படும். எனவே அவற்றின் மூலம் உங்களால் சுயவிவரத்தைத் திறக்கவோ, வாங்குவதை அங்கீகரிக்கவோ அல்லது பயன்பாடுகளில் உள்நுழையவோ முடியாது."</string>
@@ -649,7 +648,7 @@
<string name="lock_last_password_attempt_before_wipe_profile" msgid="1535128774464384305">"அடுத்த முறை தவறான கடவுச்சொல்லை உள்ளிட்டால், உங்கள் பணி விவரமும் அதன் தரவும் நீக்கப்படும்"</string>
<string name="lock_failed_attempts_now_wiping_device" msgid="8662360098784762828">"பலமுறை தவறாக முயன்றதால், சாதனத்தின் தரவு நீக்கப்படும்."</string>
<string name="lock_failed_attempts_now_wiping_user" msgid="3793513796171561873">"பலமுறை தவறாக முயன்றதால், இந்தப் பயனர் நீக்கப்படுவார்."</string>
- <string name="lock_failed_attempts_now_wiping_profile" msgid="5347108525299038285">"பலமுறை தவறாக முயன்றதால், இந்தப் பணி விவரமும் அதன் தரவும் நீக்கப்படும்."</string>
+ <string name="lock_failed_attempts_now_wiping_profile" msgid="5347108525299038285">"பலமுறை தவறாக முயன்றதால், இந்தப் பணிக் கணக்கும் அதன் தரவும் நீக்கப்படும்"</string>
<string name="lock_failed_attempts_now_wiping_dialog_dismiss" msgid="3950582268749037318">"நிராகரி"</string>
<plurals name="lockpassword_password_too_short" formatted="false" msgid="694091983183310827">
<item quantity="other">குறைந்தது <xliff:g id="COUNT_1">%d</xliff:g> எழுத்துகள் இருக்க வேண்டும்</item>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"வைஃபை"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"வைஃபையை இயக்கு"</string>
<string name="wifi_settings" msgid="7486492317310514109">"வைஃபை"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"வைஃபையைப் பயன்படுத்து"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"வைஃபையைப் பயன்படுத்து"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"வைஃபை அமைப்பு"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"வைஃபை"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"வயர்லெஸ் ஆக்சஸ் பாயிண்ட்களை அமைத்து & நிர்வகிக்கவும்"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"வைஃபை"</item>
+ <item msgid="2271962426654621656">"மொபைல்"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"வைஃபை இணைப்பு இல்லை எனில் மொபைல் நெட்வொர்க்கைப் பயன்படுத்தும்"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"மொபைல் நெட்வொர்க் இல்லை எனில் வைஃபை இணைப்பைப் பயன்படுத்தும்"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"வைஃபை மூலம் அழை. வைஃபை இணைப்பை இழந்தால் அழைப்பும் துண்டிக்கப்படும்."</string>
@@ -1166,7 +1168,7 @@
<string name="accessibility_category_personal" msgid="1423427301759058762">"தனிப்பட்ட சுயவிவரக் கணக்குகள்"</string>
<string name="accessibility_work_account_title" msgid="3195468574776888011">"பணி கணக்கு - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
<string name="accessibility_personal_account_title" msgid="7251761883688839354">"தனிப்பட்ட கணக்கு - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
- <string name="search_settings" msgid="5809250790214921377">"தேடு"</string>
+ <string name="search_settings" msgid="5809250790214921377">"Search"</string>
<string name="display_settings" msgid="1045535829232307190">"திரை அமைப்பு"</string>
<string name="accelerometer_title" msgid="2427487734964971453">"திரையைத் தானாகச் சுழற்று"</string>
<string name="color_mode_title" msgid="8164858320869449142">"வண்ணங்கள்"</string>
@@ -1239,7 +1241,7 @@
<string name="wallpaper_settings_title" msgid="347390905813529607">"வால்பேப்பர்"</string>
<string name="style_and_wallpaper_settings_title" msgid="8898539141152705754">"ஸ்டைல்கள் & வால்பேப்பர்கள்"</string>
<string name="wallpaper_settings_summary_default" msgid="2626880032742784599">"இயல்பு"</string>
- <string name="wallpaper_settings_summary_custom" msgid="8950504698015331202">"தனிப்பயன்"</string>
+ <string name="wallpaper_settings_summary_custom" msgid="8950504698015331202">"பிரத்தியேகம்"</string>
<string name="wallpaper_suggestion_title" msgid="3012130414886743201">"வால்பேப்பரை மாற்று"</string>
<string name="wallpaper_suggestion_summary" msgid="4247262938988875842">"திரையைப் பிரத்தியேகமாக்கு"</string>
<string name="wallpaper_settings_fragment_title" msgid="1503701065297188901">"வால்பேப்பர் தேர்வு"</string>
@@ -1654,7 +1656,7 @@
</plurals>
<string name="location_category_recent_location_access" msgid="286059523360285026">"சமீபத்திய இருப்பிட அணுகல்"</string>
<string name="location_recent_location_access_view_details" msgid="2051602261436245905">"விவரங்களைக் காட்டு"</string>
- <string name="location_no_recent_apps" msgid="77502059586413278">"எந்தப் பயன்பாடுகளும் சமீபத்தில் இருப்பிடத்தைக் கோரவில்லை"</string>
+ <string name="location_no_recent_apps" msgid="77502059586413278">"எந்த ஆப்ஸும் சமீபத்தில் இருப்பிடத்தைக் கோரவில்லை"</string>
<string name="location_no_recent_accesses" msgid="6289916310397279890">"சமீபத்தில் எந்த ஆப்ஸும் இருப்பிடத்தை அணுகவில்லை"</string>
<string name="location_high_battery_use" msgid="7177199869979522663">"அதிகப் பேட்டரி பயன்பாடு"</string>
<string name="location_low_battery_use" msgid="5030448574501435888">"குறைவான பேட்டரி பயன்பாடு"</string>
@@ -1720,7 +1722,7 @@
<string name="lockpassword_choose_lock_generic_header" msgid="4418423132980560119">"எப்படித் திறக்க வேண்டும்?"</string>
<string name="lockpassword_password_set_toast" msgid="601928982984489868">"கடவுச்சொல் அமைக்கப்பட்டது"</string>
<string name="lockpassword_pin_set_toast" msgid="172594825722240059">"பின் அமைக்கப்பட்டது"</string>
- <string name="lockpassword_pattern_set_toast" msgid="6923260369475481406">"வடிவம் அமைக்கப்பட்டது"</string>
+ <string name="lockpassword_pattern_set_toast" msgid="6923260369475481406">"பேட்டர்ன் அமைக்கப்பட்டது"</string>
<string name="lockpassword_choose_your_password_header_for_face" msgid="8823110536502072216">"முக அங்கீகாரத்துக்கு, கடவுச்சொல்லை அமை"</string>
<string name="lockpassword_choose_your_pattern_header_for_face" msgid="5563793748503883666">"முக அங்கீகாரத்துக்கு, பேட்டர்னை அமை"</string>
<string name="lockpassword_choose_your_pin_header_for_face" msgid="7238352632535405068">"முக அங்கீகாரத்துக்கு, பின்னை அமை"</string>
@@ -1734,7 +1736,7 @@
<string name="lockpassword_strong_auth_required_device_pin" msgid="24030584350601016">"கூடுதல் பாதுகாப்பிற்கு, சாதனப் பின்னை உள்ளிடவும்"</string>
<string name="lockpassword_strong_auth_required_device_password" msgid="7746588206458754598">"கூடுதல் பாதுகாப்பிற்கு, சாதனக் கடவுச்சொல்லை உள்ளிடவும்"</string>
<string name="lockpassword_strong_auth_required_work_pattern" msgid="6861154706098327320">"கூடுதல் பாதுகாப்பிற்கு, பணிப் பேட்டர்னை வரையவும்"</string>
- <string name="lockpassword_strong_auth_required_work_pin" msgid="6306902249365524526">"கூடுதல் பாதுகாப்பிற்கு, பணிப் பின்னை உள்ளிடவும்"</string>
+ <string name="lockpassword_strong_auth_required_work_pin" msgid="6306902249365524526">"கூடுதல் பாதுகாப்பிற்கு, பணிக்கான பின்னை உள்ளிடவும்"</string>
<string name="lockpassword_strong_auth_required_work_password" msgid="2917338218971012776">"கூடுதல் பாதுகாப்பிற்கு, பணிக் கடவுச்சொல்லை உள்ளிடவும்"</string>
<string name="lockpassword_confirm_your_pattern_details_frp" msgid="1085862410379709928">"ஆரம்பநிலை அமைப்புகளுக்கு மீட்டமைக்கப்பட்டது. மொபைலைப் பயன்படுத்த, முந்தைய பேட்டர்னை உள்ளிடவும்."</string>
<string name="lockpassword_confirm_your_pin_details_frp" msgid="6849889353126558761">"ஆரம்பநிலை அமைப்புகளுக்கு மீட்டமைக்கப்பட்டது. மொபைலைப் பயன்படுத்த, முந்தைய பின்னை உள்ளிடவும்."</string>
@@ -1744,23 +1746,23 @@
<string name="lockpassword_confirm_your_password_header_frp" msgid="7326670978891793470">"கடவுச்சொல்லைச் சரிபார்க்கவும்"</string>
<string name="lockpassword_invalid_pin" msgid="3059022215815900137">"தவறான பின்"</string>
<string name="lockpassword_invalid_password" msgid="8374331995318204099">"தவறான கடவுச்சொல்"</string>
- <string name="lockpattern_need_to_unlock_wrong" msgid="1328670466959377948">"தவறான வடிவம்"</string>
+ <string name="lockpattern_need_to_unlock_wrong" msgid="1328670466959377948">"தவறான பேட்டர்ன்"</string>
<string name="lock_settings_title" msgid="233657584969886812">"சாதனப் பாதுகாப்பு"</string>
<string name="lockpattern_change_lock_pattern_label" msgid="333149762562581510">"திறக்கும் வடிவத்தை மாற்று"</string>
<string name="lockpattern_change_lock_pin_label" msgid="3435796032210265723">"திறப்பதற்கான பின்னை மாற்று"</string>
- <string name="lockpattern_recording_intro_header" msgid="2262005028838969839">"திறப்பதற்கான வடிவத்தை வரைக"</string>
+ <string name="lockpattern_recording_intro_header" msgid="2262005028838969839">"திறப்பதற்கான பேட்டர்னை வரைக"</string>
<string name="lockpattern_recording_intro_footer" msgid="5426745740754065099">"உதவிக்கு மெனுவை அழுத்தவும்."</string>
<string name="lockpattern_recording_inprogress" msgid="4060818382176523671">"முடிந்ததும் விரலை எடுக்கவும்"</string>
<string name="lockpattern_recording_incorrect_too_short" msgid="6374760294545431845">"குறைந்தது <xliff:g id="NUMBER">%d</xliff:g> புள்ளிகளை இணைக்கவும். மீண்டும் முயற்சிக்கவும்."</string>
- <string name="lockpattern_pattern_entered_header" msgid="2108106638322637851">"வடிவம் பதிவுசெய்யப்பட்டது"</string>
+ <string name="lockpattern_pattern_entered_header" msgid="2108106638322637851">"பேட்டர்ன் பதிவுசெய்யப்பட்டது"</string>
<string name="lockpattern_need_to_confirm" msgid="4079482507985867389">"உறுதிப்படுத்துவதற்கு வடிவத்தை மீண்டும் வரையவும்"</string>
- <string name="lockpattern_pattern_confirmed_header" msgid="5603156929428721407">"திறப்பதற்கான புதிய வடிவம்"</string>
+ <string name="lockpattern_pattern_confirmed_header" msgid="5603156929428721407">"திறப்பதற்கான புதிய பேட்டர்ன்"</string>
<string name="lockpattern_confirm_button_text" msgid="7059311304112902598">"உறுதிசெய்க"</string>
<string name="lockpattern_restart_button_text" msgid="4322968353922529868">"மீண்டும் வரைக"</string>
<string name="lockpattern_retry_button_text" msgid="5473976578241534298">"அழி"</string>
<string name="lockpattern_continue_button_text" msgid="3328913552656376892">"தொடர்க"</string>
- <string name="lockpattern_settings_title" msgid="5152005866870766842">"திறப்பதற்கான வடிவம்"</string>
- <string name="lockpattern_settings_enable_title" msgid="8508410891939268080">"வடிவம் தேவை"</string>
+ <string name="lockpattern_settings_title" msgid="5152005866870766842">"திறப்பதற்கான பேட்டர்ன்"</string>
+ <string name="lockpattern_settings_enable_title" msgid="8508410891939268080">"பேட்டர்ன் தேவை"</string>
<string name="lockpattern_settings_enable_summary" msgid="8027605503917737512">"திரையைத் திறப்பதற்கான வடிவத்தை வரைய வேண்டும்"</string>
<string name="lockpattern_settings_enable_visible_pattern_title" msgid="4935583222709647096">"வடிவத்தைக் காணும்படி செய்"</string>
<string name="lockpattern_settings_enable_visible_pattern_title_profile" msgid="5338893138982642228">"சுயவிவரப் பேட்டர்னை வரையும் போது காட்டு"</string>
@@ -1888,7 +1890,7 @@
<string name="app_disable_dlg_positive" msgid="5508828271100168073">"ஆப்ஸை முடக்கு"</string>
<string name="app_disable_dlg_text" msgid="9221864774943530281">"இந்த ஆப்ஸை முடக்கினால் Androidம் பிற ஆப்ஸும் எதிர்பார்த்தவாறு செயல்படாமல் போகக்கூடும். கவனத்திற்கு: சாதனத்தை வாங்கும்போதே ஆப்ஸ் நிறுவப்பட்டுள்ளதால் இதை நீக்க இயலாது. இதை முடக்குவதன் மூலம் ஆஃப் செய்யப்பட்ட நிலையில் ஆப்ஸ் சாதனத்திலேயே இருக்கும்"</string>
<string name="app_disable_notifications_dlg_title" msgid="699530661413553928">"அறிவிப்புகளை முடக்கவா?"</string>
- <string name="app_install_details_group_title" msgid="2909597319422976921">"ஸ்டோர்"</string>
+ <string name="app_install_details_group_title" msgid="2909597319422976921">"Store"</string>
<string name="app_install_details_title" msgid="6954953384372934881">"ஆப்ஸின் விவரங்கள்"</string>
<string name="app_install_details_summary" msgid="6612222941121363940">"ஆப்ஸ் <xliff:g id="APP_STORE">%1$s</xliff:g> இலிருந்து நிறுவப்பட்டது"</string>
<string name="instant_app_details_summary" msgid="6384264315914966114">"<xliff:g id="APP_STORE">%1$s</xliff:g> பற்றிய கூடுதல் தகவல்"</string>
@@ -2043,7 +2045,7 @@
<string name="display_category_title" msgid="545168481672250195">"திரை அமைப்பு"</string>
<string name="interaction_control_category_title" msgid="8775039211811947683">"ஊடாடல் கட்டுப்பாடுகள்"</string>
<string name="user_installed_services_category_title" msgid="4288689493753221319">"பதிவிறக்கிய சேவைகள்"</string>
- <string name="experimental_category_title" msgid="3797000069740110717">"சோதனை முயற்சி"</string>
+ <string name="experimental_category_title" msgid="3797000069740110717">"பரிசோதனை முயற்சி"</string>
<string name="feature_flags_dashboard_title" msgid="3153034144122754381">"அம்சங்களை மாற்றுதல்"</string>
<string name="talkback_title" msgid="3717960404234260050">"Talkback"</string>
<string name="talkback_summary" msgid="6602857105831641574">"திரைப் படிப்பான் முக்கியமாக பார்வையற்றோர் மற்றும் பார்வைக் குறைபாடு உள்ளவர்களுக்காக வடிவமைக்கப்பட்டது"</string>
@@ -2084,7 +2086,7 @@
<string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"நீங்கள் வாசிக்க விரும்பும், தற்காலிகமாகத் தெரியும் மெசேஜ்கள் எவ்வளவு நேரம் காட்டப்பட வேண்டும் என்பதைத் தேர்வுசெய்யலாம்.\n\nஇந்த அமைப்பு அனைத்து ஆப்ஸிலும் ஆதரிக்கப்படாது."</string>
<string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"உங்களைச் செயல்படும்படி கூறும் மெசேஜ்களை எவ்வளவு நேரம் காட்டலாம் என்பதைத் தேர்வுசெய்யவும். இவை சற்று நேரத்திற்கு மட்டுமே காட்டப்படும்.\n\nஇந்த அமைப்பு அனைத்து ஆப்ஸாலும் ஆதரிக்கப்படாது."</string>
<string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"தொட்டுப் பிடித்தல் தாமதம்"</string>
- <string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"வண்ணத்தின் நேர்மாறான முறை"</string>
+ <string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"கலர் இன்வெர்ஷன்"</string>
<string name="accessibility_display_inversion_preference_subtitle" msgid="69291255322175323">"செயல்திறனைப் பாதிக்கலாம்"</string>
<string name="accessibility_autoclick_preference_title" msgid="9164599088410340405">"இருப்பு நேரம்"</string>
<string name="accessibility_autoclick_description" msgid="5492414927846407499">"நீங்கள் மவுஸைப் பயன்படுத்துகிறீர்கள் எனில், ஒரு குறிப்பிட்ட நேரத்திற்குக் கர்சர் நகராமல் இருக்கும்போது, அது தானாகவே என்ன செய்யவேண்டுமென அமைத்துக்கொள்ளலாம்."</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"அறிவிப்பு அதிர்வுகள்"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"ரிங் அதிர்வுகள்"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"தொடுதல் அதிர்வு"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"சேவையைப் பயன்படுத்து"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"வண்ணத் திருத்தத்தைப் பயன்படுத்து"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"தலைப்புகளைப் பயன்படுத்து"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"சேவையைப் பயன்படுத்து"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"கலர் கரெக்ஷனைப் பயன்படுத்து"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"தலைப்புகளைப் பயன்படுத்து"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"தொடர்க"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"செவித்துணைக் கருவிகள்"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"இணைக்கப்பட்ட செவித்துணைக் கருவிகள் இல்லை"</string>
@@ -2150,7 +2152,7 @@
<string name="captioning_locale" msgid="4734464353806207943">"மொழி"</string>
<string name="captioning_text_size" msgid="1707122517246408084">"உரையின் அளவு"</string>
<string name="captioning_preset" msgid="7429888317480872337">"தலைப்பின் நடை"</string>
- <string name="captioning_custom_options_title" msgid="4530479671071326732">"தனிப்பயன் விருப்பங்கள்"</string>
+ <string name="captioning_custom_options_title" msgid="4530479671071326732">"பிரத்தியேக விருப்பங்கள்"</string>
<string name="captioning_background_color" msgid="2434458880326292180">"பின்புல வண்ணம்"</string>
<string name="captioning_background_opacity" msgid="8178926599201811936">"பின்னணி ஒளிபுகாத்தன்மை"</string>
<string name="captioning_window_color" msgid="8696903405657599896">"தலைப்பு சாளரத்தின் வண்ணம்"</string>
@@ -2209,7 +2211,7 @@
<string name="print_feature_state_off" msgid="208580346723223688">"ஆஃப்"</string>
<string name="print_menu_item_add_service" msgid="6803000110578493782">"சேவையைச் சேர்"</string>
<string name="print_menu_item_add_printer" msgid="8529196211179574921">"பிரிண்டரைச் சேர்"</string>
- <string name="print_menu_item_search" msgid="1165316329772287360">"தேடு"</string>
+ <string name="print_menu_item_search" msgid="1165316329772287360">"Search"</string>
<string name="print_searching_for_printers" msgid="6538687129687642542">"பிரிண்டர்களைத் தேடுகிறது"</string>
<string name="print_service_disabled" msgid="6376344992705893436">"சேவை முடக்கப்பட்டுள்ளது"</string>
<string name="print_print_jobs" msgid="7357841034181762157">"அச்சுப் பணிகள்"</string>
@@ -2307,7 +2309,7 @@
<item quantity="other">%1$d ஆப்ஸைக் கட்டுப்படுத்தவா?</item>
<item quantity="one">பயன்பாட்டைக் கட்டுப்படுத்தவா?</item>
</plurals>
- <string name="battery_tip_restrict_app_dialog_message" msgid="6905822297507947381">"பேட்டரியைச் சேமிக்க, பின்னணியில் பேட்டரியை உபயோகிப்பதிலிருந்து <xliff:g id="APP">%1$s</xliff:g> பயன்பாட்டைத் தடுக்கவும். இந்த ஆப்ஸ் சரியாகச் செயல்படாமல் இருக்கலாம், அத்துடன் இதற்கான அறிவிப்புகளும் தாமதமாக வரலாம்."</string>
+ <string name="battery_tip_restrict_app_dialog_message" msgid="6905822297507947381">"பேட்டரியைச் சேமிக்க, பின்னணியில் பேட்டரியை உபயோகிப்பதிலிருந்து <xliff:g id="APP">%1$s</xliff:g> ஆப்ஸைத் தடுக்கவும். இந்த ஆப்ஸ் சரியாகச் செயல்படாமல் இருக்கலாம், அத்துடன் இதற்கான அறிவிப்புகளும் தாமதமாக வரலாம்."</string>
<string name="battery_tip_restrict_apps_less_than_5_dialog_message" msgid="4225881888543582456">"பேட்டரியைச் சேமிக்க, பின்னணியில் பேட்டரியைப் பயன்படுத்துவதிலிருந்து இந்த ஆப்ஸைத் தடுக்கவும். தடுக்கப்பட்ட ஆப்ஸ் சரியாகச் செயல்படாமல் இருக்கலாம், அத்துடன் இவற்றுக்கான அறிவிப்புகளும் தாமதமாக வரலாம்.\n\nஆப்ஸ்:"</string>
<string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"பேட்டரியைச் சேமிக்க, பின்னணியில் பேட்டரியைப் பயன்படுத்துவதிலிருந்து இந்த ஆப்ஸைத் தடுக்கவும். தடுக்கப்பட்ட ஆப்ஸ் சரியாகச் செயல்படாமல் இருக்கலாம். அத்துடன் இவற்றுக்கான அறிவிப்புகளும் தாமதமாக வரலாம்.\n\nஆப்ஸ்:\n<xliff:g id="APP_LIST">%1$s</xliff:g>."</string>
<string name="battery_tip_restrict_app_dialog_ok" msgid="2573410775701913487">"கட்டுப்படுத்து"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"ஆன் செய்"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"பேட்டரி சேமிப்பானைப் பயன்படுத்து"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"பேட்டரி சேமிப்பானைப் பயன்படுத்து"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"தானாகவே இயக்கு"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"ஒருபோதும் வேண்டாம்"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"<xliff:g id="PERCENT">%1$s</xliff:g> பேட்டரி இருக்கும் போது"</string>
@@ -2617,9 +2619,9 @@
<string name="sync_one_time_sync" msgid="6005174168405784256">"இப்போது ஒத்திசைக்க, தட்டவும்<xliff:g id="LAST_SYNC_TIME">
%1$s</xliff:g>"</string>
<string name="sync_gmail" msgid="4457967084840001296">"Gmail"</string>
- <string name="sync_calendar" msgid="6573708019827519372">"கேலெண்டர்"</string>
+ <string name="sync_calendar" msgid="6573708019827519372">"Calendar"</string>
<string name="sync_contacts" msgid="5687434785723746534">"தொடர்புகள்"</string>
- <string name="sync_plug" msgid="6703804441408427257"><font fgcolor="#ffffffff">"Google ஒத்திசைவுக்கு வரவேற்கிறோம்!"</font>" \nநீங்கள் எங்கிருந்தாலும் உங்கள் தொடர்புகள், சந்திப்புகள் மற்றும் பலவற்றுக்கான அணுகலை அனுமதிப்பதற்காக Google தரவை ஒத்திசைக்கிறது."</string>
+ <string name="sync_plug" msgid="6703804441408427257"><font fgcolor="#ffffffff">"Google ஒத்திசைவுக்கு வரவேற்கிறோம்!"</font>" \nநீங்கள் எங்கிருந்தாலும் உங்கள் தொடர்புகள், அப்பாயிண்ட்மெண்ட்டுகள் மற்றும் பலவற்றுக்கான அணுகலை அனுமதிப்பதற்காக Google தரவை ஒத்திசைக்கிறது."</string>
<string name="header_application_sync_settings" msgid="4581847153669774489">"ஆப்ஸ் ஒத்திசைவு அமைப்பு"</string>
<string name="header_data_and_synchronization" msgid="400831816068697286">"தரவு & ஒத்திசைத்தல்"</string>
<string name="preference_change_password_title" msgid="7243527448378789274">"கடவுச்சொல்லை மாற்று"</string>
@@ -2636,7 +2638,7 @@
<string name="enter_password" msgid="2963496904625715235">"Androidஐத் தொடங்க, கடவுச்சொல்லை உள்ளிடவும்"</string>
<string name="enter_pin" msgid="7140938268709546890">"Androidஐத் தொடங்க, PINஐ உள்ளிடவும்"</string>
<string name="enter_pattern" msgid="1653841963422825336">"Androidஐத் தொடங்க, வடிவத்தை வரையவும்"</string>
- <string name="cryptkeeper_wrong_pattern" msgid="4580105105385125467">"தவறான வடிவம்"</string>
+ <string name="cryptkeeper_wrong_pattern" msgid="4580105105385125467">"தவறான பேட்டர்ன்"</string>
<string name="cryptkeeper_wrong_password" msgid="1709534330303983166">"தவறான கடவுச்சொல்"</string>
<string name="cryptkeeper_wrong_pin" msgid="857757190077859245">"தவறான பின்"</string>
<string name="checking_decryption" msgid="5927759912073053101">"சரிபார்க்கிறது..."</string>
@@ -2880,7 +2882,7 @@
<string name="user_cannot_add_accounts_message" msgid="5993561303748749097">"வரையறுக்கப்பட்ட சுயவிவரங்களால் கணக்குகளைச் சேர்க்க முடியாது"</string>
<string name="user_remove_user_menu" msgid="3505139157217459864">"சாதனத்திலிருந்து <xliff:g id="USER_NAME">%1$s</xliff:g> ஐ நீக்கு"</string>
<string name="user_lockscreen_settings" msgid="3820813814848394568">"லாக் ஸ்கிரீன் அமைப்புகள்"</string>
- <string name="user_add_on_lockscreen_menu" msgid="5211604808199585774">"லாக் ஸ்கிரீனிலிருந்து பயனர்களைச் சேர்"</string>
+ <string name="user_add_on_lockscreen_menu" msgid="5211604808199585774">"பூட்டுத் திரையிலிருந்து பயனர்களைச் சேர்"</string>
<string name="user_new_user_name" msgid="3880395219777884838">"புதியவர்"</string>
<string name="user_new_profile_name" msgid="3074939718101489937">"புதிய சுயவிவரம்"</string>
<string name="user_confirm_remove_self_title" msgid="6739480453680217543">"உங்களை நீக்கவா?"</string>
@@ -3039,7 +3041,7 @@
<string name="connected_devices_dashboard_no_driving_mode_summary" msgid="3524409078596318803">"புளூடூத், NFC"</string>
<string name="connected_devices_dashboard_no_driving_mode_no_nfc_summary" msgid="7881286613528299400">"புளூடூத்"</string>
<string name="app_and_notification_dashboard_title" msgid="8448096608058843730">"ஆப்ஸ் & அறிவிப்புகள்"</string>
- <string name="app_and_notification_dashboard_summary" msgid="4165181440955038145">"அசிஸ்டண்ட், சமீபத்திய ஆப்ஸ், இயல்பான ஆப்ஸ்"</string>
+ <string name="app_and_notification_dashboard_summary" msgid="4165181440955038145">"Assistant, சமீபத்திய ஆப்ஸ், இயல்பான ஆப்ஸ்"</string>
<string name="notification_settings_work_profile" msgid="7190550347842400029">"பணிக் கணக்கில், ஆப்ஸுற்கான அறிவிப்பு அணுகல் இல்லை."</string>
<string name="account_dashboard_title" msgid="4734300939532555885">"கணக்குகள்"</string>
<string name="account_dashboard_default_summary" msgid="6822549669771936206">"கணக்குகள் எதுவும் சேர்க்கப்படவில்லை"</string>
@@ -3089,7 +3091,7 @@
<string name="keywords_ignore_optimizations" msgid="9127632532176249438">"மேம்படுத்தல்களைத் தவிர்த்தல், பேட்டரியைக் குறைவாகப் பயன்படுத்துதல், ஆப்ஸ் காத்திருப்பு நிலை"</string>
<string name="keywords_color_mode" msgid="8893345199519181751">"அதிர்வு, RGB, sRGB, வண்ணம், இயற்கை, நிலையானது"</string>
<string name="keywords_color_temperature" msgid="2255253972992035046">"வண்ணம், வண்ண வெப்பநிலை, D65, D73, வெள்ளை, மஞ்சள், நீலம், அடர், வெளிர்"</string>
- <string name="keywords_lockscreen" msgid="4936846554280830394">"திறப்பதற்கு ஸ்லைடு செய்தல், கடவுச்சொல், வடிவம், பின்"</string>
+ <string name="keywords_lockscreen" msgid="4936846554280830394">"திறப்பதற்கு ஸ்லைடு செய்தல், கடவுச்சொல், பேட்டர்ன், பின்"</string>
<string name="keywords_profile_challenge" msgid="8653718001253979611">"பணிச்சுமை, பணி, சுயவிவரம்"</string>
<string name="keywords_unification" msgid="2020759909366983593">"பணிக் கணக்கு, நிர்வகிக்கப்படும் சுயவிவரம், ஒருங்கிணை, ஒருங்கிணைத்தல், பணி, சுயவிவரம்"</string>
<string name="keywords_gesture" msgid="5031323247529869644">"சைகைகள்"</string>
@@ -3201,8 +3203,8 @@
<string name="zen_mode_restrict_notifications_hide_summary" msgid="1449301153755270168">"அறிவிப்புகளைப் பார்க்கவோ கேட்கவோ மாட்டீர்கள்"</string>
<string name="zen_mode_restrict_notifications_hide_footer" msgid="7617688597593946765">"புதிய அல்லது ஏற்கனவே இருக்கும் அறிவிப்புகளை உங்கள் மொபைல் காட்டாது, அதிர்வுறாது அல்லது ஒலி எழுப்பாது. உங்கள் மொபைலின் செயல்பாடு மற்றும் நிலை தொடர்பான முக்கிய அறிவிப்புகள் தொடர்ந்து தோன்றும் என்பதை நினைவில்கொள்ளவும்.\n\nதொந்தரவு செய்ய வேண்டாம் என்பதை நீங்கள் முடக்கும் போது, உங்கள் திரையின் மேலிருந்து கீழாக ஸ்வைப் செய்வதன் மூலம் தவறிய அழைப்புகள் எவை என்பதைப் பார்க்கலாம்."</string>
<string name="zen_mode_restrict_notifications_custom" msgid="3167252482570424133">"பிரத்தியேகமானது"</string>
- <string name="zen_mode_restrict_notifications_enable_custom" msgid="6376983315529894440">"தனிப்பயன் அமைப்பை இயக்கு"</string>
- <string name="zen_mode_restrict_notifications_disable_custom" msgid="8004212081465043044">"தனிப்பயன் அமைப்பை அகற்று"</string>
+ <string name="zen_mode_restrict_notifications_enable_custom" msgid="6376983315529894440">"பிரத்தியேக அமைப்பை இயக்கு"</string>
+ <string name="zen_mode_restrict_notifications_disable_custom" msgid="8004212081465043044">"பிரத்தியேக அமைப்பை அகற்று"</string>
<string name="zen_mode_restrict_notifications_summary_muted" msgid="1075196788469381282">"அறிவிப்புகள் வரும்போது ஒலியெழுப்ப வேண்டாம்"</string>
<string name="zen_mode_restrict_notifications_summary_custom" msgid="4982187708274505748">"பகுதியளவு மறைக்கப்பட்டவை"</string>
<string name="zen_mode_restrict_notifications_summary_hidden" msgid="7637206880685474111">"அறிவிப்புகள் வரும்போது காட்டவோ ஒலியெழுப்பவோ வேண்டாம்"</string>
@@ -3212,7 +3214,7 @@
<string name="zen_mode_block_effect_sound" msgid="1499243540186357631">"ஒலியையும் அதிர்வையும் முடக்கு"</string>
<string name="zen_mode_block_effect_intent" msgid="5666951244667422668">"திரையை ஆன் செய்யாதே"</string>
<string name="zen_mode_block_effect_light" msgid="8679333758037487644">"ஒளியை மிளிரச் செய்யாதே"</string>
- <string name="zen_mode_block_effect_peek" msgid="6075662813575910221">"திரையில் அறிவிப்புகளைப் பாப் அப் செய்யாதே"</string>
+ <string name="zen_mode_block_effect_peek" msgid="6075662813575910221">"திரையில் அறிவிப்புகளைப் பாப்-அப் செய்யாதே"</string>
<string name="zen_mode_block_effect_status" msgid="6516614225115681068">"திரையின் மேற்பகுதியில் \'நிலைப் பட்டி\' ஐகான்களை மறை"</string>
<string name="zen_mode_block_effect_badge" msgid="3891743027347075136">"ஆப்ஸ் ஐகான்களில் அறிவிப்புப் புள்ளிகளை மறை"</string>
<string name="zen_mode_block_effect_ambient" msgid="6382013125863616197">"அறிவிப்புகள் வரும்போது சாதனத்தை எழுப்ப வேண்டாம்"</string>
@@ -3235,7 +3237,7 @@
<string name="zen_mode_settings_dnd_automatic_rule" msgid="2843297614114625408">"திட்ட அட்டவணையின் (<xliff:g id="RULE_NAME">%s</xliff:g>) மூலம் ‘தொந்தரவு செய்ய வேண்டாம்’ தானாக ஆன் செய்யப்பட்டது"</string>
<string name="zen_mode_settings_dnd_automatic_rule_app" msgid="5103454923160912313">"(<xliff:g id="APP_NAME">%s</xliff:g>) ஆப்ஸின் மூலம், ‘தொந்தரவு செய்ய வேண்டாம்’ தானாக ஆன் செய்யப்பட்டது"</string>
<string name="zen_mode_settings_dnd_custom_settings_footer" msgid="6335108298640066560">"பிரத்தியேக அமைப்புகளுடன் <xliff:g id="RULE_NAMES">%s</xliff:g> என்பதற்குத் \'தொந்தரவு செய்ய வேண்டாம்’ ஆன் நிலையில் உள்ளது."</string>
- <string name="zen_mode_settings_dnd_custom_settings_footer_link" msgid="4007974052885089379"><annotation id="link">" தனிப்பயன் அமைப்புகளைக் காட்டு"</annotation></string>
+ <string name="zen_mode_settings_dnd_custom_settings_footer_link" msgid="4007974052885089379"><annotation id="link">" பிரத்தியேக அமைப்புகளைக் காட்டு"</annotation></string>
<string name="zen_interruption_level_priority" msgid="9178419297408319234">"முக்கியமானவை மட்டும்"</string>
<string name="zen_mode_and_condition" msgid="4123722186007123567">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string>
<string name="zen_mode_sound_summary_on_with_info" msgid="2539952366467518398">"ஆன் / <xliff:g id="ID_1">%1$s</xliff:g>"</string>
@@ -3264,7 +3266,7 @@
<string name="zen_sound_one_allowed" msgid="2417988417080579980">"ஒலியடக்கப்பட்டது, ஆனால் <xliff:g id="SOUND_TYPE">%1$s</xliff:g> அனுமதிக்கப்பட்டுள்ளது"</string>
<string name="zen_sound_two_allowed" msgid="299344481401823614">"ஒலியடக்கப்பட்டது, ஆனால் <xliff:g id="SOUND_TYPE_0">%1$s</xliff:g> மற்றும் <xliff:g id="SOUND_TYPE_1">%2$s</xliff:g> அனுமதிக்கப்பட்டுள்ளன"</string>
<string name="zen_sound_three_allowed" msgid="8374564453060696012">"ஒலியடக்கப்பட்டது, ஆனால் <xliff:g id="SOUND_TYPE_0">%1$s</xliff:g>, <xliff:g id="SOUND_TYPE_1">%2$s</xliff:g> மற்றும் <xliff:g id="SOUND_TYPE_2">%3$s</xliff:g> அனுமதிக்கப்பட்டுள்ளன"</string>
- <string name="zen_custom_settings_dialog_title" msgid="908049494676219236">"தனிப்பயன் அமைப்புகள்"</string>
+ <string name="zen_custom_settings_dialog_title" msgid="908049494676219236">"பிரத்தியேக அமைப்புகள்"</string>
<string name="zen_custom_settings_dialog_review_schedule" msgid="2247761749333893513">"திட்ட அட்டவணையைச் சரிபார்"</string>
<string name="zen_custom_settings_dialog_ok" msgid="3572754922025853427">"புரிந்தது"</string>
<string name="zen_custom_settings_notifications_header" msgid="7469592764589354302">"அறிவிப்புகள்"</string>
@@ -3288,7 +3290,7 @@
<string name="work_sync_dialog_title" msgid="4799120971202956837">"ஒலிகளை மாற்றியமைக்கவா?"</string>
<string name="work_sync_dialog_yes" msgid="2110726233746476066">"மாற்று"</string>
<string name="work_sync_dialog_message" msgid="944233463059129156">"உங்கள் தனிப்பட்ட சுயவிவர ஒலிகள், உங்கள் பணி விவரத்திற்குப் பயன்படுத்தப்படும்"</string>
- <string name="ringtones_install_custom_sound_title" msgid="210551218424553671">"தனிப்பயன் ஒலியைச் சேர்க்கவா?"</string>
+ <string name="ringtones_install_custom_sound_title" msgid="210551218424553671">"பிரத்தியேக ஒலியைச் சேர்க்கவா?"</string>
<string name="ringtones_install_custom_sound_content" msgid="6683649115132255452">"இந்தக் கோப்பு, <xliff:g id="FOLDER_NAME">%s</xliff:g> கோப்புறைக்கு நகலெடுக்கப்படும்"</string>
<string name="ringtones_category_preference_title" msgid="4491932700769815470">"ரிங்டோன்கள்"</string>
<string name="other_sound_category_preference_title" msgid="2045757472469840859">"பிற ஒலிகள் மற்றும் அதிர்வுகள்"</string>
@@ -3339,7 +3341,7 @@
<string name="notification_importance_low" msgid="7609797151662295364">"ஒலிக்காமல் காட்டும்"</string>
<string name="notification_importance_default" msgid="4091563759103917166">"ஒலியெழுப்பும்"</string>
<string name="notification_importance_high" msgid="7973764540402436656">"ஒலியெழுப்பி, திரையில் காட்டும்"</string>
- <string name="notification_importance_high_silent" msgid="3177662759865661155">"திரையில் பாப் அப் செய்யும்"</string>
+ <string name="notification_importance_high_silent" msgid="3177662759865661155">"திரையில் பாப்-அப் செய்யும்"</string>
<string name="notification_importance_min_title" msgid="705872537330744154">"சிறிதாக்கு"</string>
<string name="notification_importance_low_title" msgid="2956199021781786232">"நடுத்தர முக்கியத்துவம்"</string>
<string name="notification_importance_default_title" msgid="7985549807203332482">"அதிக முக்கியத்துவம்"</string>
@@ -3444,9 +3446,9 @@
<string name="zen_mode_delete_rule_confirmation" msgid="2646596466259025978">"\"<xliff:g id="RULE">%1$s</xliff:g>\" விதியை நீக்கவா?"</string>
<string name="zen_mode_delete_rule_button" msgid="611058106279881991">"நீக்கு"</string>
<string name="zen_mode_rule_type_unknown" msgid="2819480113355191421">"தெரியாதது"</string>
- <string name="zen_mode_app_set_behavior" msgid="8597398780262575571">"இந்த அமைப்புகளை இப்போது மாற்ற முடியாது. தனிப்பயன் செயல்பாட்டின் அடிப்படையில், ஆப்ஸின் (<xliff:g id="APP_NAME">%1$s</xliff:g>) மூலம் ’தொந்தரவு செய்ய வேண்டாம்’ தானாக ஆன் செய்யப்பட்டது."</string>
- <string name="zen_mode_unknown_app_set_behavior" msgid="5666462954329932302">"இந்த அமைப்புகளை இப்போது மாற்ற முடியாது. தனிப்பயன் செயல்பாட்டின் அடிப்படையில், ஆப்ஸின் மூலம் ’தொந்தரவு செய்ய வேண்டாம்’ தானாக ஆன் செய்யப்பட்டது."</string>
- <string name="zen_mode_qs_set_behavior" msgid="788646569296973998">"இந்த அமைப்புகளை இப்போது மாற்ற முடியாது. தனிப்பயன் செயல்பாட்டின் அடிப்படையில் ’தொந்தரவு செய்ய வேண்டாம்’ கைமுறையாக ஆன் செய்யப்பட்டது."</string>
+ <string name="zen_mode_app_set_behavior" msgid="8597398780262575571">"இந்த அமைப்புகளை இப்போது மாற்ற முடியாது. பிரத்தியேக செயல்பாட்டின் அடிப்படையில், ஆப்ஸின் (<xliff:g id="APP_NAME">%1$s</xliff:g>) மூலம் ’தொந்தரவு செய்ய வேண்டாம்’ தானாக ஆன் செய்யப்பட்டது."</string>
+ <string name="zen_mode_unknown_app_set_behavior" msgid="5666462954329932302">"இந்த அமைப்புகளை இப்போது மாற்ற முடியாது. பிரத்தியேக செயல்பாட்டின் அடிப்படையில், ஆப்ஸின் மூலம் ’தொந்தரவு செய்ய வேண்டாம்’ தானாக ஆன் செய்யப்பட்டது."</string>
+ <string name="zen_mode_qs_set_behavior" msgid="788646569296973998">"இந்த அமைப்புகளை இப்போது மாற்ற முடியாது. பிரத்தியேக செயல்பாட்டின் அடிப்படையில் ’தொந்தரவு செய்ய வேண்டாம்’ கைமுறையாக ஆன் செய்யப்பட்டது."</string>
<string name="zen_schedule_rule_type_name" msgid="4516851728113801329">"நேரம்"</string>
<string name="zen_schedule_rule_enabled_toast" msgid="1742354493045049048">"குறிப்பிட்ட நேரங்களில் தொந்தரவு செய்ய வேண்டாம் என்பதை இயக்கும் தானியங்கு விதி"</string>
<string name="zen_event_rule_type_name" msgid="7467729997336583342">"நிகழ்வு"</string>
@@ -3506,7 +3508,7 @@
<string name="zen_mode_reminders" msgid="7560664194610054038">"நினைவூட்டல்களை அனுமதி"</string>
<string name="zen_mode_reminders_list" msgid="7347061314032326677">"நினைவூட்டல்கள்"</string>
<string name="zen_mode_events" msgid="5784076928339534984">"நிகழ்வுகளை அனுமதி"</string>
- <string name="zen_mode_bypassing_apps" msgid="3080739479028713449">"ஆப்ஸை மேலெழுத அனுமதிக்கின்றன"</string>
+ <string name="zen_mode_bypassing_apps" msgid="3080739479028713449">"ஆப்ஸை மீறிச் செயல்பட அனுமதிக்கின்றன"</string>
<string name="zen_mode_bypassing_apps_title" msgid="2115024664615538847">"ஆப்ஸ் விதிவிலக்குகள்"</string>
<plurals name="zen_mode_bypassing_apps_subtext" formatted="false" msgid="8723144434730871572">
<item quantity="other">‘தொந்தரவு செய்ய வேண்டாம்’ அம்சம் ஆன் செய்யப்பட்டிருந்தாலும் <xliff:g id="NUMBER">%1$d</xliff:g> ஆப்ஸில் இருந்து அறிவிப்புகள் வரும்</item>
@@ -3542,7 +3544,7 @@
<string name="zen_mode_summary_alarms_only_by_time" msgid="2462898862757904560">"<xliff:g id="FORMATTEDTIME">%1$s</xliff:g> வரை அலாரங்கள் மட்டும் என மாற்று"</string>
<string name="zen_mode_summary_always" msgid="2703276042913200837">"எப்போதும் குறுக்கிடு என மாற்று"</string>
<string name="zen_mode_screen_on" msgid="7098470659072167219">"திரை ஆன் செய்யப்பட்டிருக்கும்போது"</string>
- <string name="zen_mode_screen_on_summary" msgid="8275416649295357524">"\'தொந்தரவு செய்ய வேண்டாம்\' மூலம் ஒலியடக்கப்பட்ட அறிவிப்புகள் வரும்போது, திரையில் பாப் அப் ஆவதுடன், நிலைப்பட்டி ஐகானைக் காட்டும்"</string>
+ <string name="zen_mode_screen_on_summary" msgid="8275416649295357524">"\'தொந்தரவு செய்ய வேண்டாம்\' மூலம் ஒலியடக்கப்பட்ட அறிவிப்புகள் வரும்போது, திரையில் பாப்-அப் ஆவதுடன், நிலைப்பட்டி ஐகானைக் காட்டும்"</string>
<string name="zen_mode_screen_off" msgid="84211490206459038">"திரை ஆஃப் செய்யப்பட்டிருக்கும்போது"</string>
<string name="zen_mode_screen_off_summary" msgid="8592179073243001267">"’தொந்தரவு செய்ய வேண்டாம்’ அம்சத்தின் மூலம் ஒலியடக்கப்பட்ட அறிவிப்புகள் வரும்போது, திரை ஆன் செய்யப்பட்டு, ஒளியை மிளிரச் செய்யட்டும்"</string>
<string name="zen_mode_screen_off_summary_no_led" msgid="7255874108150630145">"’தொந்தரவு செய்ய வேண்டாம்’ அம்சத்தின் மூலம் ஒலியடக்கப்பட்ட அறிவிப்புகள் வரும்போது, திரையை ஆன் செய்யட்டும்."</string>
@@ -3560,14 +3562,14 @@
<string name="screen_pinning_unlock_none" msgid="9183040569733226911">"திரையை விலக்கும்போது சாதனத்தைப் பூட்டு"</string>
<string name="opening_paragraph_delete_profile_unknown_company" msgid="2350380017136403670">"இந்தப் பணிக் கணக்கை நிர்வகிப்பது:"</string>
<string name="managing_admin" msgid="3212584016377581608">"நிர்வகிப்பது: <xliff:g id="ADMIN_APP_LABEL">%s</xliff:g>"</string>
- <string name="experimental_preference" msgid="5903223408406906322">"(சோதனை முயற்சி)"</string>
+ <string name="experimental_preference" msgid="5903223408406906322">"(பரிசோதனை முயற்சி)"</string>
<string name="encryption_interstitial_header" msgid="3298397268731647519">"பாதுகாப்பான தொடக்கம்"</string>
<string name="encryption_continue_button" msgid="2808797091460167842">"தொடர்"</string>
<string name="encryption_interstitial_message_pin" msgid="6592265582286340307">"இந்தச் சாதனத்தைத் துவக்கும் முன், பின் தேவைப்படுமாறு அமைத்து, மேலும் பாதுகாக்கலாம். சாதனம் துவங்கும் வரை, அழைப்புகள், செய்திகள் அல்லது அலாரங்கள் உள்ளிட்ட அறிவிப்புகளை இதில் பெற முடியாது. \n\nஉங்கள் சாதனம் தொலைந்து போனாலோ திருடப்பட்டாலோ, அதில் உள்ள உங்கள் டேட்டாவைப் பாதுகாக்க இதைக் கடைபிடிக்கலாம். சாதனத்தைத் தொடங்கும் போது, பின்னைக் கேட்பதை அமைக்கவா?"</string>
<string name="encryption_interstitial_message_pattern" msgid="5620724295995735120">"இந்தச் சாதனத்தைத் துவக்கும் முன், பேட்டர்ன் தேவைப்படுமாறு அமைத்து, மேலும் பாதுகாக்கலாம். சாதனம் துவங்கும் வரை, அழைப்புகள், செய்திகள் அல்லது அலாரங்கள் உள்ளிட்ட அறிவிப்புகளை இதில் பெற முடியாது. \n\nஉங்கள் சாதனம் தொலைந்து போனாலோ திருடப்பட்டாலோ, அதில் உள்ள உங்கள் டேட்டாவைப் பாதுகாக்க இதைக் கடைபிடிக்கலாம். சாதனத்தைத் தொடங்கும் போது, பேட்டர்னைக் கேட்பதை அமைக்கவா?"</string>
<string name="encryption_interstitial_message_password" msgid="7236688467386126401">"இந்தச் சாதனத்தைத் துவக்கும் முன், கடவுச்சொல் தேவைப்படுமாறு அமைத்து, மேலும் பாதுகாக்கலாம். சாதனம் துவங்கும் வரை, அழைப்புகள், செய்திகள் அல்லது அலாரங்கள் உள்ளிட்ட அறிவிப்புகளை இதில் பெற முடியாது. \n\nஉங்கள் சாதனம் தொலைந்து போனாலோ திருடப்பட்டாலோ, அதில் உள்ள உங்கள் டேட்டாவைப் பாதுகாக்க இதைக் கடைபிடிக்கலாம். சாதனத்தைத் தொடங்கும் போது, கடவுச்சொல்லைக் கேட்பதை அமைக்கவா?"</string>
<string name="encryption_interstitial_message_pin_for_fingerprint" msgid="3706009740537484517">"சாதனத்தைத் திறக்க கைரேகையைப் பயன்படுத்துவதுடன் சேர்த்து, பின் தேவைப்படுமாறு அமைத்து உங்கள் சாதனத்திற்குக் கூடுதல் பாதுகாப்பு வழங்கிடலாம். சாதனம் துவங்கும் வரை, அழைப்புகள், செய்திகள் அல்லது அலாரங்கள் உள்ளிட்ட அறிவிப்புகளை இதில் பெற முடியாது. \n\nஉங்கள் சாதனம் தொலைந்து போனாலோ திருடப்பட்டாலோ, அதில் உள்ள உங்கள் டேட்டாவைப் பாதுகாக்க இதைக் கடைபிடிக்கலாம். சாதனத்தைத் தொடங்கும் போது, பின்னைக் கேட்பதை அமைக்கவா?"</string>
- <string name="encryption_interstitial_message_pattern_for_fingerprint" msgid="5230877866699023998">"சாதனத்தைத் திறக்க கைரேகையைப் பயன்படுத்துவதுடன் சேர்த்து, வடிவம் தேவைப்படுமாறு அமைத்து உங்கள் சாதனத்திற்குக் கூடுதல் பாதுகாப்பு வழங்கிடலாம். சாதனம் துவங்கும் வரை, அழைப்புகள், செய்திகள் அல்லது அலாரங்கள் உள்ளிட்ட அறிவிப்புகளை இதில் பெற முடியாது. \n\nஉங்கள் சாதனம் தொலைந்து போனாலோ திருடப்பட்டாலோ, அதில் உள்ள உங்கள் டேட்டாவைப் பாதுகாக்க இதைக் கடைபிடிக்கலாம். சாதனத்தைத் தொடங்கும் போது, பேட்டர்னைக் கேட்பதை அமைக்கவா?"</string>
+ <string name="encryption_interstitial_message_pattern_for_fingerprint" msgid="5230877866699023998">"சாதனத்தைத் திறக்க கைரேகையைப் பயன்படுத்துவதுடன் சேர்த்து, பேட்டர்ன் தேவைப்படுமாறு அமைத்து உங்கள் சாதனத்திற்குக் கூடுதல் பாதுகாப்பு வழங்கிடலாம். சாதனம் துவங்கும் வரை, அழைப்புகள், செய்திகள் அல்லது அலாரங்கள் உள்ளிட்ட அறிவிப்புகளை இதில் பெற முடியாது. \n\nஉங்கள் சாதனம் தொலைந்து போனாலோ திருடப்பட்டாலோ, அதில் உள்ள உங்கள் டேட்டாவைப் பாதுகாக்க இதைக் கடைபிடிக்கலாம். சாதனத்தைத் தொடங்கும் போது, பேட்டர்னைக் கேட்பதை அமைக்கவா?"</string>
<string name="encryption_interstitial_message_password_for_fingerprint" msgid="8451977276748128814">"சாதனத்தைத் திறக்க கைரேகையைப் பயன்படுத்துவதுடன் சேர்த்து, கடவுச்சொல் தேவைப்படுமாறு அமைத்து உங்கள் சாதனத்திற்குக் கூடுதல் பாதுகாப்பு வழங்கிடலாம். சாதனம் தொடங்கும் வரை, அழைப்புகள், செய்திகள் அல்லது அலாரங்கள் உள்ளிட்ட அறிவிப்புகளை இதில் பெற முடியாது. \n\nஉங்கள் சாதனம் தொலைந்து போனாலோ திருடப்பட்டாலோ, அதில் உள்ள உங்கள் டேட்டாவைப் பாதுகாக்க இதைக் கடைபிடிக்கலாம். சாதனத்தைத் தொடங்கும் போது, கடவுச்சொல்லைக் கேட்பதை அமைக்கவா?"</string>
<string name="encryption_interstitial_message_pin_for_face" msgid="7469243836881325172">"சாதனத்தைத் திறப்பதற்கு உங்கள் முகத்தைப் பயன்படுத்துவது மட்டுமல்லாமல், சாதனம் தொடங்கும் முன்பாக, பின்னை உள்ளிடும்படி அமைத்து, கூடுதல் பாதுகாப்பை வழங்கலாம். சாதனம் தொடங்கும்வரை, அழைப்புகள், மெசேஜ்கள், அலாரங்கள் உள்ளிட்ட எவற்றையும் சாதனத்தால் பெற இயலாது.\n\nசாதனம் தொலைந்துவிட்டாலோ திருடப்பட்டாலோ, அதிலுள்ள தரவைப் பாதுகாக்க இது உதவும். சாதனத்தைத் தொடங்கும்போது கடவுச்சொல்லைக் கேட்குமாறு அமைக்கவா?"</string>
<string name="encryption_interstitial_message_pattern_for_face" msgid="9221235885895441797">"சாதனத்தைத் திறப்பதற்கு உங்கள் முகத்தைப் பயன்படுத்துவது மட்டுமல்லாமல், சாதனம் தொடங்கும் முன்பாக, பேட்டர்னை உள்ளிடும்படி அமைத்து, கூடுதல் பாதுகாப்பை வழங்கலாம். சாதனம் தொடங்கும்வரை, அழைப்புகள், மெசேஜ்கள், அலாரங்கள் உள்ளிட்ட எவற்றையும் சாதனத்தால் பெற இயலாது. \n\nசாதனம் தொலைந்துவிட்டாலோ திருடப்பட்டாலோ, அதிலுள்ள தரவைப் பாதுகாக்க இது உதவும். சாதனத்தைத் தொடங்கும்போது கடவுச்சொல்லைக் கேட்குமாறு அமைக்கவா?"</string>
@@ -3577,7 +3579,7 @@
<string name="restricted_true_label" msgid="1545180379083441282">"கட்டுப்படுத்தியது"</string>
<string name="restricted_false_label" msgid="4512495920090068495">"ஆப்ஸ் கட்டுப்படுத்தப்படவில்லை"</string>
<string name="encrypt_talkback_dialog_require_pin" msgid="2781758476498571031">"பின் தேவையா?"</string>
- <string name="encrypt_talkback_dialog_require_pattern" msgid="8705104812047332411">"வடிவம் தேவையா?"</string>
+ <string name="encrypt_talkback_dialog_require_pattern" msgid="8705104812047332411">"பேட்டர்ன் தேவையா?"</string>
<string name="encrypt_talkback_dialog_require_password" msgid="5070710417271353306">"கடவுச்சொல் தேவையா?"</string>
<string name="encrypt_talkback_dialog_message_pin" msgid="1912533826818077891">"இந்தச் சாதனத்தைத் துவக்க பின்னை நீங்கள் பயன்படுத்தினால், <xliff:g id="SERVICE">%1$s</xliff:g> போன்ற அணுகல்தன்மை சேவைகள் கிடைக்காது."</string>
<string name="encrypt_talkback_dialog_message_pattern" msgid="4415837749933863432">"இந்தச் சாதனத்தைத் துவக்க வடிவத்தை நீங்கள் பயன்படுத்தினால், <xliff:g id="SERVICE">%1$s</xliff:g> போன்ற அணுகல்தன்மை சேவைகள் கிடைக்காது."</string>
@@ -3761,7 +3763,7 @@
<string name="assist_access_screenshot_title" msgid="1991014038776117688">"ஸ்கிரீன் ஷாட்டைப் பயன்படுத்து"</string>
<string name="assist_access_screenshot_summary" msgid="3010943864000489424">"திரையின் படத்தை அணுக, அசிஸ்ட் ஆப்ஸை அனுமதிக்கும்"</string>
<string name="assist_flash_title" msgid="8852484250748551092">"திரையில் ஃபிளாஷ்"</string>
- <string name="assist_flash_summary" msgid="6697095786317559129">"அசிஸ்ட் பயன்பாடானது திரை அல்லது ஸ்கிரீன் ஷாட்டிலிருந்து உரையை அணுகும் போது, திரையில் ஃபிளாஷ் மின்னும்"</string>
+ <string name="assist_flash_summary" msgid="6697095786317559129">"அசிஸ்ட் ஆப்ஸானது திரை அல்லது ஸ்கிரீன் ஷாட்டிலிருந்து உரையை அணுகும் போது, திரையில் ஃபிளாஷ் மின்னும்"</string>
<string name="assist_footer" msgid="7030121180457472165">"நீங்கள் பார்க்கும் திரையில் உள்ள தகவலின் அடிப்படையில் அசிஸ்ட் ஆப்ஸ் உங்களுக்கு உதவும். ஒருங்கிணைந்த உதவியைப் பெறுவதற்காக சில ஆப்ஸ்களில், துவக்கி மற்றும் குரல் உள்ளீட்டுச் சேவைகள் ஆகிய இரண்டையும் பயன்படுத்தலாம்."</string>
<string name="average_memory_use" msgid="5333366040118953945">"சராசரி நினைவக உபயோகம்"</string>
<string name="maximum_memory_use" msgid="6509872438499846077">"அதிகபட்ச நினைவக உபயோகம்"</string>
@@ -3994,7 +3996,7 @@
<string name="home_app" msgid="3695063566006954160">"முகப்பு"</string>
<string name="no_default_home" msgid="1518949210961918497">"இயல்பு முகப்பு இல்லை"</string>
<string name="lockpattern_settings_require_cred_before_startup" msgid="63693894094570367">"பாதுகாப்பான தொடக்கம்"</string>
- <string name="lockpattern_settings_require_pattern_before_startup_summary" msgid="2330543541999937953">"சாதனத்தைத் தொடங்க, வடிவம் தேவை. முடக்கப்பட்டிருக்கும் போது, இந்தச் சாதனம் அழைப்புகள், செய்திகள், அறிவிப்புகள் அல்லது அலாரங்கள் ஆகியவற்றைப் பெற முடியாது."</string>
+ <string name="lockpattern_settings_require_pattern_before_startup_summary" msgid="2330543541999937953">"சாதனத்தைத் தொடங்க, பேட்டர்ன் தேவை. முடக்கப்பட்டிருக்கும் போது, இந்தச் சாதனம் அழைப்புகள், செய்திகள், அறிவிப்புகள் அல்லது அலாரங்கள் ஆகியவற்றைப் பெற முடியாது."</string>
<string name="lockpattern_settings_require_pin_before_startup_summary" msgid="1058173991832208485">"சாதனத்தைத் தொடங்க, பின் தேவை. முடக்கப்பட்டிருக்கும் போது, இந்தச் சாதனம் அழைப்புகள், செய்திகள், அறிவிப்புகள் அல்லது அலாரங்கள் ஆகியவற்றைப் பெற முடியாது."</string>
<string name="lockpattern_settings_require_password_before_startup_summary" msgid="1266300087760553585">"சாதனத்தைத் தொடங்க, கடவுச்சொல் தேவை. முடக்கப்பட்டிருக்கும் போது, இந்தச் சாதனம் அழைப்புகள், செய்திகள், அறிவிப்புகள் அல்லது அலாரங்கள் ஆகியவற்றைப் பெற முடியாது."</string>
<string name="suggestion_additional_fingerprints" msgid="3434467207282466411">"மற்றொரு கைரேகையைச் சேர்க்கவும்"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"சாதனம் பூட்டப்பட்டிருந்தால், அறிவிப்புகளில் பதில்கள் அல்லது பிற உரையை உள்ளிடுவதைத் தடு"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"இயல்பு பிழைத்திருத்தி"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"பிழைத்திருத்தியைத் தேர்வுசெய்க"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"பிழைதிருத்தியைப் பயன்படுத்துதல்"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"பிழைதிருத்தியைப் பயன்படுத்துதல்"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"தேர்ந்தெடுக்கவில்லை"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(எதுவுமில்லை)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"சேமிப்பக இடத்தைக் காலியாக்க உதவ, காப்புப் பிரதி எடுக்கப்பட்ட படங்களையும் வீடியோக்களையும் உங்கள் சாதனத்திலிருந்து சேமிப்பக நிர்வாகி அகற்றும்."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"படங்கள் & வீடியோக்களை அகற்று"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"சேமிப்பக நிர்வாகி"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"சேமிப்பக நிர்வாகியைப் பயன்படுத்து"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"சேமிப்பக நிர்வாகியைப் பயன்படுத்து"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"தானியங்கு"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"கைமுறை"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"இப்போதே இடத்தைக் காலியாக்கு"</string>
@@ -4466,7 +4468,7 @@
<string name="mobile_data_ap_mode_disabled" msgid="2452716524753472885">"விமானப் பயன்முறையின்போது கிடைக்காது"</string>
<string name="force_desktop_mode" msgid="6973100177551040740">"கட்டாய டெஸ்க்டாப் பயன்முறை"</string>
<string name="force_desktop_mode_summary" msgid="8865007610266954719">"இரண்டாம்நிலை திரைகளில் \'கட்டாயப் பரிசோதனை டெஸ்க்டாப்\' பயன்முறை"</string>
- <string name="hwui_force_dark_title" msgid="3744825212652331461">"force-dark அம்சத்தை மேலெழுதுதல்"</string>
+ <string name="hwui_force_dark_title" msgid="3744825212652331461">"force-dark அம்சத்தை மீறிச் செயல்படுதல்"</string>
<string name="hwui_force_dark_summary" msgid="2051891908674765817">"எப்போதும் இயக்கத்தில் இருக்குமாறு force-dark அம்சத்தை மேலெழுதுகிறது"</string>
<string name="privacy_dashboard_title" msgid="8764930992456607513">"தனியுரிமை"</string>
<string name="privacy_dashboard_summary" msgid="7916431309860824945">"அனுமதிகள், கணக்குச் செயல்பாடு, தனிப்பட்ட தரவு"</string>
diff --git a/tests/CarDeveloperOptions/res/values-te/arrays.xml b/tests/CarDeveloperOptions/res/values-te/arrays.xml
index c616699..1ae209a 100644
--- a/tests/CarDeveloperOptions/res/values-te/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-te/arrays.xml
@@ -38,7 +38,16 @@
<item msgid="5827960506924849753">"10 నిమిషాలు"</item>
<item msgid="6677424950124253938">"30 నిమిషాలు"</item>
</string-array>
- <!-- no translation found for dream_timeout_entries:7 (8271452751594598661) -->
+ <string-array name="dream_timeout_entries">
+ <item msgid="6487043225269853023">"ఎప్పటికీ వద్దు"</item>
+ <item msgid="2517785806387977252">"15 సెకన్లు"</item>
+ <item msgid="6347954399441173672">"30 సెకన్లు"</item>
+ <item msgid="4858305253279921789">"1 నిమిషం"</item>
+ <item msgid="8109273437140044073">"2 నిమిషాలు"</item>
+ <item msgid="2788593551142462622">"5 నిమిషాలు"</item>
+ <item msgid="8012672183888404961">"10 నిమిషాలు"</item>
+ <item msgid="8271452751594598661">"30 నిమిషాలు"</item>
+ </string-array>
<string-array name="lock_after_timeout_entries">
<item msgid="2232921187970351881">"తక్షణమే"</item>
<item msgid="2038544972632026612">"5 సెకన్లు"</item>
@@ -50,17 +59,47 @@
<item msgid="811192536981678974">"10 నిమిషాలు"</item>
<item msgid="7258394417241706272">"30 నిమిషాలు"</item>
</string-array>
- <!-- no translation found for entries_font_size:0 (2340391964816059553) -->
- <!-- no translation found for entries_font_size:0 (6490061470416867723) -->
- <!-- no translation found for entries_font_size:2 (1714184661981538355) -->
- <!-- no translation found for entries_font_size:2 (1678068858001018666) -->
- <!-- no translation found for wifi_status:3 (5848277343965362748) -->
- <!-- no translation found for wifi_status_with_ssid:1 (6816207058895999545) -->
- <!-- no translation found for wifi_status_with_ssid:3 (7547609081339573756) -->
- <!-- no translation found for wifi_status_with_ssid:4 (5145158315060185414) -->
+ <string-array name="entries_font_size">
+ <item msgid="2340391964816059553">"చిన్నది"</item>
+ <item msgid="591935967183159581">"డిఫాల్ట్"</item>
+ <item msgid="1714184661981538355">"పెద్దది"</item>
+ <item msgid="6195563047686707484">"అతి పెద్దగా"</item>
+ </string-array>
+ <string-array name="wifi_status">
+ <item msgid="1304883790721412351"></item>
+ <item msgid="4157625910392775808">"స్కాన్ చేస్తోంది…"</item>
+ <item msgid="5597394826455877834">"కనెక్ట్ చేస్తోంది..."</item>
+ <item msgid="5848277343965362748">"ప్రామాణీకరిస్తోంది…"</item>
+ <item msgid="3391238031431440676">"IP చిరునామాను పొందుతోంది…"</item>
+ <item msgid="5257597310494000224">"కనెక్ట్ అయింది"</item>
+ <item msgid="8472497592913050396">"తాత్కాలికంగా రద్దు చేయబడింది"</item>
+ <item msgid="1228072488815999109">"డిస్కనెక్ట్ చేస్తోంది..."</item>
+ <item msgid="7253087004422991731">"డిస్కనెక్ట్ చేయబడింది"</item>
+ <item msgid="4169850917304751227">"విఫలమైంది"</item>
+ <item msgid="6266658166690831131">"బ్లాక్ చేయబడింది"</item>
+ <item msgid="4517230805854909775">"బలహీన కనెక్షన్ను తాత్కాలికంగా నివారిస్తోంది"</item>
+ </string-array>
+ <string-array name="wifi_status_with_ssid">
+ <item msgid="4853670665485437464"></item>
+ <item msgid="6816207058895999545">"స్కాన్ చేస్తోంది…"</item>
+ <item msgid="8058143476674427024">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>కి కనెక్ట్ చేస్తోంది…"</item>
+ <item msgid="7547609081339573756">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>తో ప్రామాణీకరిస్తోంది…"</item>
+ <item msgid="5145158315060185414">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> నుండి IP చిరునామాను పొందుతోంది…"</item>
+ <item msgid="3283243151651124831">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g>కి కనెక్ట్ చేయబడింది"</item>
+ <item msgid="6600156231416890902">"తాత్కాలికంగా రద్దు చేయబడింది"</item>
+ <item msgid="4133290864821295785">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> నుండి డిస్కనెక్ట్ చేస్తోంది…"</item>
+ <item msgid="3980154971187953257">"డిస్కనెక్ట్ చేయబడింది"</item>
+ <item msgid="2847316776634969068">"విఫలమైంది"</item>
+ <item msgid="4390990424746035383">"బ్లాక్ చేయబడింది"</item>
+ <item msgid="3618248791367063949">"బలహీన కనెక్షన్ను తాత్కాలికంగా నివారిస్తోంది"</item>
+ </string-array>
<!-- no translation found for wifi_tether_security:0 (5586343370515598801) -->
<!-- no translation found for wifi_tether_security:1 (6136336549994615745) -->
- <!-- no translation found for wifi_p2p_wps_setup:0 (5390235347963255303) -->
+ <string-array name="wifi_p2p_wps_setup">
+ <item msgid="5390235347963255303">"పుష్ బటన్"</item>
+ <item msgid="7401896200768713930">"పీర్ డివైజ్ నుండి పిన్"</item>
+ <item msgid="4526848028011846710">"ఈ డివైజ్ నుండి పిన్"</item>
+ </string-array>
<string-array name="wifi_p2p_status">
<item msgid="8741947238021758201">"కనెక్ట్ అయింది"</item>
<item msgid="983792611851499732">"ఆహ్వానించబడింది"</item>
@@ -82,8 +121,13 @@
<item msgid="1644506614010085798">"4"</item>
<item msgid="3132506679404897150">"5"</item>
</string-array>
- <!-- no translation found for wifi_signal:1 (7882129634982603782) -->
- <!-- no translation found for wifi_signal:4 (999948812884919584) -->
+ <string-array name="wifi_signal">
+ <item msgid="1709949377823900951">"బాగాలేదు"</item>
+ <item msgid="7882129634982603782">"బాగాలేదు"</item>
+ <item msgid="6457357501905996224">"ఫర్వాలేదు"</item>
+ <item msgid="405271628162918841">"బాగుంది"</item>
+ <item msgid="999948812884919584">"అద్భుతం"</item>
+ </string-array>
<string-array name="data_usage_data_range">
<item msgid="8986775481492954015">"గత 30 రోజులు"</item>
<item msgid="3211287705232736964">"విని. పునరా. సెట్ చేయి..."</item>
@@ -119,7 +163,10 @@
<item msgid="7330627471456865502">"MSCHAPV2"</item>
<item msgid="6255179395132581882">"GTC"</item>
</string-array>
- <!-- no translation found for wifi_ip_settings:1 (4377002609760712163) -->
+ <string-array name="wifi_ip_settings">
+ <item msgid="2717196390555072244">"DHCP"</item>
+ <item msgid="4377002609760712163">"స్థిరం"</item>
+ </string-array>
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"ఏదీ వద్దు"</item>
<item msgid="1464741437353223198">"మాన్యువల్"</item>
@@ -239,11 +286,73 @@
<item msgid="1165623660533024666">"నేపథ్యంలో అమలు చేయడం"</item>
<item msgid="6423861043647911030">"యాక్సెస్ సామర్థ్య వాల్యూమ్"</item>
</string-array>
- <!-- no translation found for app_ops_labels:3 (7836406246005211990) -->
- <!-- no translation found for app_ops_labels:4 (3951439024549922598) -->
- <!-- no translation found for app_ops_labels:8 (3597797992398484655) -->
- <!-- no translation found for app_ops_labels:20 (3037159047591081136) -->
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"స్థానం"</item>
+ <item msgid="6656077694190491067">"స్థానం"</item>
+ <item msgid="8790228218278477369">"స్థానం"</item>
+ <item msgid="7836406246005211990">"వైబ్రేట్"</item>
+ <item msgid="3951439024549922598">"కాంటాక్ట్లను చదవండి"</item>
+ <item msgid="8802152411647068">"పరిచయాలను సవరించండి"</item>
+ <item msgid="229544934599698735">"కాల్ లాగ్ను చదవండి"</item>
+ <item msgid="7396102294405899613">"కాల్ లాగ్ను సవరించండి"</item>
+ <item msgid="3597797992398484655">"క్యాలెండర్ను చదవండి"</item>
+ <item msgid="2705975774250907343">"క్యాలెండర్ను సవరించండి"</item>
+ <item msgid="4668747371441932697">"స్థానం"</item>
+ <item msgid="1487578921720243646">"నోటిఫికేషన్ను పోస్ట్ చేయండి"</item>
+ <item msgid="4636080349724146638">"స్థానం"</item>
+ <item msgid="673510900286463926">"ఫోన్కు కాల్ చేయండి"</item>
+ <item msgid="542083422784609790">"SMS/MMSను చదవండి"</item>
+ <item msgid="1033780373029588436">"SMS/MMSను వ్రాయండి"</item>
+ <item msgid="5647111115517787488">"SMS/MMSను స్వీకరించండి"</item>
+ <item msgid="8591105601108455893">"SMS/MMSను స్వీకరించండి"</item>
+ <item msgid="7730995008517841903">"SMS/MMSను స్వీకరించండి"</item>
+ <item msgid="2613033109026626086">"SMS/MMSను స్వీకరించండి"</item>
+ <item msgid="3037159047591081136">"SMS/MMSను పంపండి"</item>
+ <item msgid="4726682243833913568">"SMS/MMSను చదవండి"</item>
+ <item msgid="6555678522277865572">"SMS/MMSను వ్రాయండి"</item>
+ <item msgid="6981734935578130884">"సెట్టింగ్లను సవరించండి"</item>
+ <item msgid="8705854389991425629">"పైభాగంలో గీయండి"</item>
+ <item msgid="5861356020344153651">"నోటిఫికేషన్లను యాక్సెస్ చేయండి"</item>
+ <item msgid="78432174621628659">"కెమెరా"</item>
+ <item msgid="3986116419882154794">"ఆడియోను రికార్డ్ చేయండి"</item>
+ <item msgid="4516840825756409490">"ఆడియో ప్లే చేయండి"</item>
+ <item msgid="6811712502798183957">"క్లిప్బోర్డ్ను చదవండి"</item>
+ <item msgid="2780369012602289114">"క్లిప్బోర్డ్ను సవరించండి"</item>
+ <item msgid="2331359440170850868">"మీడియా బటన్లు"</item>
+ <item msgid="6133599737122751231">"ఆడియో కేంద్రీకరణ"</item>
+ <item msgid="6844485713404805301">"మాస్టర్ వాల్యూమ్"</item>
+ <item msgid="1600379420669104929">"వాయిస్ వాల్యూమ్"</item>
+ <item msgid="6296768210470214866">"రింగ్ వాల్యూమ్"</item>
+ <item msgid="510690696071629241">"మీడియా వాల్యూమ్"</item>
+ <item msgid="406861638631430109">"అలారం వాల్యూమ్"</item>
+ <item msgid="4715864795872233884">"నోటిఫికేషన్ వాల్యూమ్"</item>
+ <item msgid="2311478519251301183">"బ్లూటూత్ వాల్యూమ్"</item>
+ <item msgid="5133991377896747027">"సక్రియంగా ఉంచండి"</item>
+ <item msgid="2464189519136248621">"లొకేషన్"</item>
+ <item msgid="2062677934050803037">"స్థానం"</item>
+ <item msgid="1735171933192715957">"వినియోగ గణాంకాలను పొందండి"</item>
+ <item msgid="1014093788778383554">"మైక్రోఫోన్ను మ్యూట్ చేయండి/అన్మ్యూట్ చేయండి"</item>
+ <item msgid="4199297950608622850">"టోస్ట్ను చూపడం"</item>
+ <item msgid="2527962435313398821">"మీడియాని ప్రొజెక్ట్ చేయడం"</item>
+ <item msgid="5117506254221861929">"VPNని సక్రియం చేయడం"</item>
+ <item msgid="8291198322681891160">"వాల్పేపర్ వ్రాయండి"</item>
+ <item msgid="7106921284621230961">"నిర్మాణంలో సహాయం"</item>
+ <item msgid="4496533640894624799">"స్క్రీన్షాట్కు సహాయం"</item>
+ <item msgid="2598847264853993611">"ఫోన్ స్థితిని చదవడం"</item>
+ <item msgid="9215610846802973353">"వాయిస్ మెయిల్ను జోడించడం"</item>
+ <item msgid="9186411956086478261">"sipని ఉపయోగించడం"</item>
+ <item msgid="6884763100104539558">"వెళ్లే కాల్ను ప్రాసెస్ చేయడం"</item>
+ <item msgid="125513972170580692">"వేలిముద్ర"</item>
+ <item msgid="2556071024281275619">"శరీర సెన్సార్లు"</item>
+ <item msgid="617168514928339387">"సెల్ ప్రసారాలను చదవడం"</item>
+ <item msgid="7134693570516523585">"స్థానాన్ని నకిలీ చేయడం"</item>
+ <item msgid="7224489175375229399">"నిల్వను చదవడం"</item>
+ <item msgid="8472735063903258202">"నిల్వలో వ్రాయడం"</item>
+ <item msgid="4069276819909595110">"స్క్రీన్ను ఆన్ చేయడం"</item>
+ <item msgid="1228338896751121025">"ఖాతాలను పొందడం"</item>
+ <item msgid="3181581793459233672">"నేపథ్యంలో అమలు చేయడం"</item>
+ <item msgid="2340936043025374076">"యాక్సెస్ సామర్థ్య వాల్యూమ్"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"తక్కువ సేపు"</item>
<item msgid="4816511817309094890">"మధ్యస్థం"</item>
@@ -260,7 +369,13 @@
<item msgid="4627069151979553527">"కర్సివ్"</item>
<item msgid="6896773537705206194">"చిన్న క్యాపిటల్లు"</item>
</string-array>
- <!-- no translation found for captioning_font_size_selector_titles:3 (2784236342175159295) -->
+ <string-array name="captioning_font_size_selector_titles">
+ <item msgid="1680223634161592855">"చాలా చిన్నది"</item>
+ <item msgid="5091603983404027034">"చిన్నది"</item>
+ <item msgid="176844712416932112">"సాధారణం"</item>
+ <item msgid="2784236342175159295">"పెద్దది"</item>
+ <item msgid="218913203203160606">"చాలా పెద్దది"</item>
+ </string-array>
<string-array name="captioning_edge_type_selector_titles">
<item msgid="3865198759294188069">"డిఫాల్ట్"</item>
<item msgid="6488643537808152001">"ఏదీ వద్దు"</item>
@@ -275,7 +390,14 @@
<item msgid="1874668269931014581">"75%"</item>
<item msgid="6462911487571123954">"100%"</item>
</string-array>
- <!-- no translation found for captioning_preset_selector_titles:2 (5891360837786277638) -->
+ <string-array name="captioning_preset_selector_titles">
+ <item msgid="326819345272910536">"యాప్ ఢిఫాల్ట్లను ఉపయోగించు"</item>
+ <item msgid="8611890312638868524">"నలుపు నేపథ్యంలో తెలుపు రంగు"</item>
+ <item msgid="5891360837786277638">"తెలుపు మీద నలుపు"</item>
+ <item msgid="2798457065945456853">"నలుపు నేపథ్యంలో పసుపు రంగు"</item>
+ <item msgid="5799049811524553967">"నీలి నేపథ్యంలో పసుపు రంగు"</item>
+ <item msgid="3673930830658169860">"అనుకూలం"</item>
+ </string-array>
<string-array name="vpn_types_long">
<item msgid="6566768880689730097">"PPTP VPN"</item>
<item msgid="1349760781118368659">"పూర్వ-భాగస్వామ్య కీలతో L2TP/IPSec VPN"</item>
@@ -288,15 +410,32 @@
<item msgid="2958623927055120839">"ఏదీ వద్దు"</item>
<item msgid="1157046369795346308">"మాన్యువల్"</item>
</string-array>
- <!-- no translation found for vpn_states:4 (9135049670787351881) -->
+ <string-array name="vpn_states">
+ <item msgid="5408915841694583740">"డిస్కనెక్ట్ చేయబడింది"</item>
+ <item msgid="8754480102834556765">"ప్రారంభిస్తోంది..."</item>
+ <item msgid="3351334355574270250">"కనెక్ట్ చేస్తోంది..."</item>
+ <item msgid="8303882153995748352">"కనెక్ట్ అయింది"</item>
+ <item msgid="9135049670787351881">"గడువు ముగింపు"</item>
+ <item msgid="2124868417182583926">"విఫలమైంది"</item>
+ </string-array>
<string-array name="security_settings_premium_sms_values">
<item msgid="1164265643455394443">"అడగండి"</item>
<item msgid="7718817231348607934">"ఎప్పటికీ అనుమతించవద్దు"</item>
<item msgid="8184570120217958741">"ఎల్లప్పుడూ అనుమతించు"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"సాధారణం"</item>
+ <item msgid="5101233285497327432">"మధ్యస్థం"</item>
+ <item msgid="1555861583162930714">"తక్కువ"</item>
+ <item msgid="1719683776264798117">"క్లిష్టం"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"సాధారణం"</item>
+ <item msgid="6107138933849816768">"మధ్యస్థం"</item>
+ <item msgid="182695359839047859">"తక్కువ"</item>
+ <item msgid="8577246509202964244">"క్లిష్టం"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"స్థిరం"</item>
<item msgid="167418068739176448">"ప్రముఖ కార్యకలాపం"</item>
@@ -338,7 +477,7 @@
<item msgid="1008268820118852416">"గణించబడనిదిగా పరిగణించండి"</item>
</string-array>
<string-array name="wifi_privacy_entries">
- <item msgid="6545683814310036454">"యాదృచ్ఛిక MAC అడ్రస్ని ఉపయోగించండి (డిఫాల్ట్)"</item>
+ <item msgid="6545683814310036454">"ర్యాండమ్గా రూపొందించిన MAC అడ్రస్ను ఉపయోగించండి (ఆటోమేటిక్)"</item>
<item msgid="214234417308375326">"MAC పరికరాన్ని ఉపయోగించండి"</item>
</string-array>
<string-array name="wifi_hidden_entries">
diff --git a/tests/CarDeveloperOptions/res/values-te/strings.xml b/tests/CarDeveloperOptions/res/values-te/strings.xml
index 3414c85..5b32838 100644
--- a/tests/CarDeveloperOptions/res/values-te/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-te/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"స్క్రీన్పై ఉండే వచనాన్ని చిన్నదిగా లేదా పెద్దదిగా చేస్తుంది."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"చిన్నదిగా చేస్తుంది"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"పెద్దదిగా చేస్తుంది"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"నమూనా వచనం"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"ది వండర్ఫుల్ విజర్డ్ ఆఫ్ ఆజ్"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"అధ్యాయం 11: ది వండర్ఫుల్ ఎమరాల్డ్ సిటీ ఆఫ్ ఆజ్"</string>
@@ -128,7 +127,7 @@
<string name="bluetooth_notif_title" msgid="5090288898529286011">"జత చేయడానికి అభ్యర్థన"</string>
<string name="bluetooth_notif_message" msgid="6612367890895077938">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g>తో జత చేయడానికి నొక్కండి."</string>
<string name="bluetooth_show_received_files" msgid="5060846395852236652">"స్వీకరించిన ఫైల్లు"</string>
- <string name="bluetooth_show_files_received_via_bluetooth" msgid="1699095577431389560">"బ్లూటూత్ ద్వారా ఫైల్లు స్వీకరించబడ్డాయి"</string>
+ <string name="bluetooth_show_files_received_via_bluetooth" msgid="1699095577431389560">"బ్లూటూత్ ద్వారా అందుకున్న ఫైల్లు"</string>
<string name="device_picker" msgid="8345264486071697705">"బ్లూటూత్ పరికరాన్ని ఎంచుకోండి"</string>
<string name="bluetooth_ask_enablement" msgid="8716802066127746062">"<xliff:g id="APP_NAME">%1$s</xliff:g> బ్లూటూత్ను ఆన్ చేయాలనుకుంటోంది"</string>
<string name="bluetooth_ask_disablement" msgid="7125319551097350783">"<xliff:g id="APP_NAME">%1$s</xliff:g> బ్లూటూత్ను ఆఫ్ చేయాలనుకుంటోంది"</string>
@@ -208,7 +207,7 @@
<string name="proxy_error_empty_port" msgid="8034561724923076215">"మీరు పోర్ట్ ఫీల్డ్ను పూర్తి చేయాల్సి ఉంటుంది."</string>
<string name="proxy_error_empty_host_set_port" msgid="8471455809508588255">"హోస్ట్ ఫీల్డ్ ఖాళీగా ఉంటే పోర్ట్ ఫీల్డ్ తప్పనిసరిగా ఖాళీగా ఉండాలి."</string>
<string name="proxy_error_invalid_port" msgid="4046559920586100637">"మీరు టైప్ చేసిన పోర్ట్ చెల్లదు."</string>
- <string name="proxy_warning_limited_support" msgid="9026539134219095768">"HTTP ప్రాక్సీని బ్రౌజరే ఉపయోగిస్తుంది, ఇతర అనువర్తనాల ఉపయోగించకపోవచ్చు."</string>
+ <string name="proxy_warning_limited_support" msgid="9026539134219095768">"బ్రౌజర్, HTTP ప్రాక్సీని ఉపయోగిస్తుంది కానీ ఇతర యాప్లు ఉపయోగించకపోవచ్చు."</string>
<string name="proxy_url_title" msgid="882042361706435904">"PAC URL: "</string>
<string name="radio_info_dl_kbps" msgid="2903778264453410272">"DL బ్యాండ్విడ్త్ (kbps):"</string>
<string name="radio_info_ul_kbps" msgid="3802245899811732716">"UL బ్యాండ్విడ్త్ (kbps):"</string>
@@ -354,7 +353,7 @@
<string name="show_owner_info_on_lockscreen_label" msgid="4510756693837171575">"లాక్ స్క్రీన్లో యజమాని సమాచారాన్ని చూపు"</string>
<string name="owner_info_settings_title" msgid="2537966178998339896">"లాక్ స్క్రీన్ సందేశం"</string>
<string name="security_enable_widgets_title" msgid="1701510007926738088">"విడ్జెట్లను ప్రారంభించు"</string>
- <string name="security_enable_widgets_disabled_summary" msgid="4408176087132339331">"నిర్వాహకులు నిలిపివేసారు"</string>
+ <string name="security_enable_widgets_disabled_summary" msgid="4408176087132339331">"అడ్మిన్ డిజేబుల్ చేశారు"</string>
<string name="lockdown_settings_title" msgid="4534779922580115990">"అన్నీ లాక్ చేయి ఎంపికను చూపు"</string>
<string name="lockdown_settings_summary" msgid="7270756909878256174">"Smart Lock, వేలిముద్ర అన్లాకింగ్ మరియు లాక్ స్క్రీన్లో నోటిఫికేషన్లను ఆఫ్ చేసే పవర్ బటన్ ఎంపికను ప్రదర్శించు"</string>
<string name="trust_agents_extend_unlock_title" msgid="3582017561316089951">"విశ్వసనీయ ఏజెంట్లు మాత్రమే అన్లాక్ను పొడిగిస్తాయి"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"ప్రొఫైల్ సమాచారం"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"ఖాతాలు"</string>
<string name="location_settings_title" msgid="2707201457572301030">"స్థానం"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"స్థానం ఉపయోగించండి"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"లొకేషన్ను ఉపయోగించండి"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"ఆఫ్"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">ఆన్ - స్థానాన్ని <xliff:g id="COUNT_1">%1$d</xliff:g> యాప్లు యాక్సెస్ చేయగలవు</item>
@@ -388,7 +387,7 @@
<string name="security_settings_summary" msgid="5210109100643223686">"నా స్థానాన్ని, స్క్రీన్ అన్లాక్ను, సిమ్ కార్డు లాక్ను, ఆధారాల నిల్వ లాక్ను సెట్ చేయి"</string>
<string name="cdma_security_settings_summary" msgid="1783066617800041869">"నా స్థానాన్ని, స్క్రీన్ అన్లాక్ను, ఆధారాల నిల్వ లాక్ను సెట్ చేయండి"</string>
<string name="security_passwords_title" msgid="6853942836045862315">"గోప్యత"</string>
- <string name="disabled_by_administrator_summary" msgid="6099821045360491127">"నిర్వాహకులు నిలిపివేసారు"</string>
+ <string name="disabled_by_administrator_summary" msgid="6099821045360491127">"అడ్మిన్ డిజేబుల్ చేశారు"</string>
<string name="security_status_title" msgid="1261960357751754428">"భద్రత స్థితి"</string>
<string name="security_dashboard_summary_face" msgid="2536136110153593745">"స్క్రీన్ లాక్, ముఖం అన్లాక్"</string>
<string name="security_dashboard_summary" msgid="4048877125766167227">"స్క్రీన్ లాక్, వేలిముద్ర"</string>
@@ -414,7 +413,7 @@
<string name="security_settings_face_enroll_error_dialog_title" msgid="3933492758701563051">"నమోదు పూర్తి కాలేదు"</string>
<string name="security_settings_face_enroll_dialog_ok" msgid="1078348922734845090">"సరే"</string>
<string name="security_settings_face_enroll_error_timeout_dialog_message" msgid="4917894418448325405">"ముఖ నమోదు సమయ పరిమితి చేరుకుంది. మళ్లీ ప్రయత్నించండి."</string>
- <string name="security_settings_face_enroll_error_generic_dialog_message" msgid="5160473187142616862">"ముఖ నమోదు పని చేయలేదు."</string>
+ <string name="security_settings_face_enroll_error_generic_dialog_message" msgid="5160473187142616862">"ఫేస్ నమోదు పని చేయలేదు."</string>
<string name="security_settings_face_enroll_finish_title" msgid="6800717857394410769">"మొత్తం పూర్తయింది. చూడడానికి భాగుంది."</string>
<string name="security_settings_face_enroll_done" msgid="5409739233373490971">"పూర్తయింది"</string>
<string name="security_settings_face_settings_use_face_category" msgid="1586532139528115416">"ముఖాన్ని వాడండి"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Wi‑Fiని ప్రారంభించండి"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Wi-Fiని ఉపయోగించండి"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Wi-Fiని ఉపయోగించండి"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi‑Fi సెట్టింగ్లు"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"వైర్లెస్ యాక్సెస్ స్థానాలను సెటప్ చేయండి & నిర్వహించండి"</string>
@@ -919,7 +918,7 @@
<string name="please_select_phase2" msgid="5848080896810435677">"2వ దశ ప్రామాణీకరణ"</string>
<string name="wifi_eap_ca_cert" msgid="1496395241849383785">"CA సర్టిఫికెట్"</string>
<string name="wifi_eap_domain" msgid="3298302320003640130">"డొమైన్"</string>
- <string name="wifi_eap_user_cert" msgid="6786839531765719173">"వినియోగదారు సర్టిఫికెట్"</string>
+ <string name="wifi_eap_user_cert" msgid="6786839531765719173">"యూజర్ సర్టిఫికెట్"</string>
<string name="wifi_eap_identity" msgid="5280457017705738773">"గుర్తింపు"</string>
<string name="wifi_eap_anonymous" msgid="6352344972490839958">"అనామక గుర్తింపు"</string>
<string name="wifi_password" msgid="6942983531275177771">"పాస్వర్డ్"</string>
@@ -1040,7 +1039,7 @@
<string name="wifi_dns1" msgid="5250809981658822505">"DNS 1"</string>
<string name="wifi_dns2" msgid="1905876166783761641">"DNS 2"</string>
<string name="wifi_gateway" msgid="7455334454444443397">"గేట్వే"</string>
- <string name="wifi_network_prefix_length" msgid="1941206966133010633">"నెట్వర్క్ ఆదిప్రత్యయం పొడవు"</string>
+ <string name="wifi_network_prefix_length" msgid="1941206966133010633">"నెట్వర్క్ ప్రిఫిక్స్ పొడవు"</string>
<string name="wifi_p2p_settings_title" msgid="3213180637906683308">"Wi‑Fi Direct"</string>
<string name="wifi_p2p_device_info" msgid="4717490498956029237">"పరికర సమాచారం"</string>
<string name="wifi_p2p_persist_network" msgid="1110453878886476660">"ఈ కనెక్షన్ను గుర్తుంచుకో"</string>
@@ -1070,7 +1069,7 @@
<string name="wifi_hotspot_ap_band_title" msgid="3485744480410441949">"AP బ్యాండ్"</string>
<string name="wifi_hotspot_footer_info_regular" msgid="3876006922622827363">"మీ ఇతర పరికరాల కోసం Wi-Fi నెట్వర్క్ని సృష్టించడానికి హాట్స్పాట్ని ఉపయోగించండి. హాట్స్పాట్ అనేది మీ మొబైల్ డేటా కనెక్షన్ని ఉపయోగించి ఇంటర్నెట్ని అందిస్తుంది. అదనపు మొబైల్ డేటా ఛార్జీలు చెల్లించాల్సి రావచ్చు."</string>
<string name="wifi_hotspot_footer_info_local_only" msgid="3339582350894639261">"యాప్లు సమీప పరికరాలతో కంటెంట్ని షేర్ చేయడం కోసం హాట్స్పాట్ని సృష్టించవచ్చు."</string>
- <string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"హాట్స్పాట్ని ఆటోమేటిక్గా ఆఫ్ చేయి"</string>
+ <string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"హాట్స్పాట్ను ఆటోమేటిక్గా ఆఫ్ చేయి"</string>
<string name="wifi_hotspot_auto_off_summary" msgid="3866769400624802105">"పరికరాలు ఏవీ కనెక్ట్ కాకపోతే Wi‑Fi హాట్స్పాట్ ఆఫ్ అవుతుంది"</string>
<string name="wifi_tether_starting" msgid="7676952148471297900">"హాట్స్పాట్ను ప్రారంభిస్తోంది…"</string>
<string name="wifi_tether_stopping" msgid="7478561853791953349">"హాట్స్పాట్ను ఆపివేస్తోంది…"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"మొబైల్"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Wi‑Fi అందుబాటులో లేకుంటే, మొబైల్ నెట్వర్క్ను ఉపయోగిస్తుంది"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"మొబైల్ నెట్వర్క్ అందుబాటులో లేకపోతే, Wi‑Fiని ఉపయోగించు"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Wi‑Fi ద్వారా కాల్ చేయగలరు. Wi‑Fiని కోల్పోతే, కాల్ ముగిసిపోతుంది."</string>
@@ -1166,7 +1168,7 @@
<string name="accessibility_category_personal" msgid="1423427301759058762">"వ్యక్తిగత ప్రొఫైల్ ఖాతాలు"</string>
<string name="accessibility_work_account_title" msgid="3195468574776888011">"కార్యాలయ ఖాతా - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
<string name="accessibility_personal_account_title" msgid="7251761883688839354">"వ్యక్తిగత ఖాతా - <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
- <string name="search_settings" msgid="5809250790214921377">"వెతుకు"</string>
+ <string name="search_settings" msgid="5809250790214921377">"Search"</string>
<string name="display_settings" msgid="1045535829232307190">"డిస్ప్లే"</string>
<string name="accelerometer_title" msgid="2427487734964971453">"స్క్రీన్ ఆటో-రొటేట్"</string>
<string name="color_mode_title" msgid="8164858320869449142">"రంగులు"</string>
@@ -1567,7 +1569,7 @@
<string name="menu_restore" msgid="3799288817317293115">"డిఫాల్ట్కు రీసెట్ చేయి"</string>
<string name="restore_default_apn_completed" msgid="5671734152740058937">"డిఫాల్ట్ APN సెట్టింగ్లను రీసెట్ చేయడం పూర్తయింది."</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"రీసెట్ ఎంపికలు"</string>
- <string name="reset_dashboard_summary" msgid="8778383341461126642">"నెట్వర్క్, యాప్లు లేదా పరికరాన్ని రీసెట్ చేయవచ్చు"</string>
+ <string name="reset_dashboard_summary" msgid="8778383341461126642">"నెట్వర్క్, యాప్లు లేదా డివైజ్ను రీసెట్ చేయవచ్చు"</string>
<string name="reset_network_title" msgid="8944059136930806211">"Wi-Fi, మొబైల్ & బ్లూటూత్ని రీసెట్ చేయండి"</string>
<string name="reset_network_desc" msgid="4982633363916261109">"ఇది అన్ని నెట్వర్క్ సెట్టింగ్లను రీసెట్ చేస్తుంది, వీటితో సహా:\n\n"<li>"Wi‑Fi"</li>\n<li>"మొబైల్ డేటా"</li>\n<li>"బ్లూటూత్"</li></string>
<string name="reset_esim_title" msgid="7630781767040831893">"డౌన్లోడ్ చేసిన SIMలు తొలగించు"</string>
@@ -1645,7 +1647,7 @@
<string name="mobile_insert_sim_card" msgid="7594550403454243732">"దయచేసి సిమ్ కార్డును చొప్పించి, పునఃప్రారంభించండి"</string>
<string name="mobile_connect_to_internet" msgid="6031886097365170913">"దయచేసి ఇంటర్నెట్కు కనెక్ట్ చేయండి"</string>
<string name="location_title" msgid="8664674161765477168">"నా స్థానం"</string>
- <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"కార్యాలయ ప్రొఫైల్ యొక్క స్థానం"</string>
+ <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"ఆఫీస్ ప్రొఫైల్ కోసం లొకేషన్"</string>
<string name="location_app_level_permissions" msgid="1298041503927632960">"యాప్ అనుమతి"</string>
<string name="location_app_permission_summary_location_off" msgid="541372845344796336">"స్థానం ఆఫ్లో ఉంది"</string>
<plurals name="location_app_permission_summary_location_on" formatted="false" msgid="7904821382328758218">
@@ -1654,7 +1656,7 @@
</plurals>
<string name="location_category_recent_location_access" msgid="286059523360285026">"ఇటీవలి స్థాన యాక్సెస్"</string>
<string name="location_recent_location_access_view_details" msgid="2051602261436245905">"వివరాలను చూడండి"</string>
- <string name="location_no_recent_apps" msgid="77502059586413278">"స్థానాన్ని ఇటీవల అనువర్తనాలు ఏవీ అభ్యర్థించలేదు"</string>
+ <string name="location_no_recent_apps" msgid="77502059586413278">"యాప్లు ఏవీ లొకేషన్ను ఇటీవల అభ్యర్థించలేదు"</string>
<string name="location_no_recent_accesses" msgid="6289916310397279890">"యాప్లు ఏవీ స్థానాన్ని ఇటీవల యాక్సెస్ చేయలేదు"</string>
<string name="location_high_battery_use" msgid="7177199869979522663">"అధిక బ్యాటరీ వినియోగం"</string>
<string name="location_low_battery_use" msgid="5030448574501435888">"తక్కువ బ్యాటరీ వినియోగం"</string>
@@ -1693,7 +1695,7 @@
<string name="terms_title" msgid="1804549588198223771">"నిబంధనలు మరియు షరతులు"</string>
<string name="webview_license_title" msgid="8244960025549725051">"సిస్టమ్ వెబ్వ్యూ లైసెన్స్"</string>
<string name="wallpaper_attributions" msgid="2941987966332943253">"వాల్పేపర్లు"</string>
- <string name="wallpaper_attributions_values" msgid="4461979853894606323">"ఉపగ్రహ చిత్రాల ప్రదాతలు:\n©2014 CNES / Astrium, DigitalGlobe, Bluesky"</string>
+ <string name="wallpaper_attributions_values" msgid="4461979853894606323">"ఉపగ్రహ ఫోటోలను అందించినవారు:\n©2014 CNES / Astrium, DigitalGlobe, Bluesky"</string>
<string name="settings_manual_activity_title" msgid="7599911755054286789">"మాన్యువల్"</string>
<string name="settings_manual_activity_unavailable" msgid="4872502775018655343">"మాన్యువల్ను లోడ్ చేయడంలో సమస్య ఏర్పడింది."</string>
<string name="settings_license_activity_title" msgid="1099045216283677608">"మూడవ పక్షం లైసెన్స్లు"</string>
@@ -1798,7 +1800,7 @@
<string name="advanced_settings_summary" msgid="5912237062506771716">"మరిన్ని సెట్టింగ్ల ఎంపికలను ప్రారంభించు"</string>
<string name="application_info_label" msgid="3886253474964599105">"యాప్ సమాచారం"</string>
<string name="storage_label" msgid="1109537840103290384">"నిల్వ"</string>
- <string name="auto_launch_label" msgid="47089737922907379">"డిఫాల్ట్గా తెరువు"</string>
+ <string name="auto_launch_label" msgid="47089737922907379">"ఆటోమేటిక్గా తెరువు"</string>
<string name="auto_launch_label_generic" msgid="7865828543459493308">"డిఫాల్ట్లు"</string>
<string name="screen_compatibility_label" msgid="3638271673726075815">"స్క్రీన్ అనుకూలత"</string>
<string name="permissions_label" msgid="7341733648403464213">"అనుమతులు"</string>
@@ -2084,7 +2086,7 @@
<string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"మీరు చదవాల్సిన సందేశాలను స్క్రీన్పై తాత్కాలికంగా ఎంతసేపు చూపాలనేది ఎంచుకోవచ్చు.\n\nఈ సెట్టింగ్కు అన్ని యాప్లలో మద్దతు ఉండదు."</string>
<string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"మిమ్మల్ని ఏదో ఒక చర్యని తీసుకోమంటూ, తాత్కాలికంగా స్క్రీన్పై కనిపించే సందేశాలు ఎంతసేపు అలాగే ఉండాలనేది ఎంచుకోవచ్చు.\n\nఈ సెట్టింగ్కు అన్ని యాప్లలో మద్దతు ఉండదు."</string>
<string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"తాకి ఉంచాల్సిన సమయం"</string>
- <string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"వర్ణ విలోమం"</string>
+ <string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"కలర్ మార్పిడి"</string>
<string name="accessibility_display_inversion_preference_subtitle" msgid="69291255322175323">"పనితీరుపై ప్రభావం చూపవచ్చు"</string>
<string name="accessibility_autoclick_preference_title" msgid="9164599088410340405">"డ్వెల్ టైమింగ్"</string>
<string name="accessibility_autoclick_description" msgid="5492414927846407499">"మీరు మౌస్ని ఉపయోగిస్తున్నట్లయితే, కర్సర్ నిర్దిష్ట సమయం పాటు కదలడం ఆగిపోయినప్పుడు అది ఆటోమేటిక్గా చర్య తీసుకునే విధంగా దానిని సెట్ చేయండి."</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"నోటిఫికేషన్ వైబ్రేషన్"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"రింగ్ వైబ్రేషన్"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"స్పర్శ వైబ్రేషన్"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"ఈ సేవను ఉపయోగించు"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"రంగు సవరణను ఉపయోగించండి"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"శీర్షికలను ఉపయోగించండి"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"సర్వీస్ను ఉపయోగించండి"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"\'కలర్-సరిచేయడం\' ఫీచర్ను ఉపయోగించండి"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"క్యాప్షన్లు ఉపయోగించండి"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"కొనసాగించు"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"వినికిడి పరికరాలు"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"వినికిడి పరికరాలను కనెక్ట్ చేయలేదు"</string>
@@ -2209,7 +2211,7 @@
<string name="print_feature_state_off" msgid="208580346723223688">"ఆఫ్"</string>
<string name="print_menu_item_add_service" msgid="6803000110578493782">"సేవను జోడించు"</string>
<string name="print_menu_item_add_printer" msgid="8529196211179574921">"ప్రింటర్ను జోడించు"</string>
- <string name="print_menu_item_search" msgid="1165316329772287360">"వెతుకు"</string>
+ <string name="print_menu_item_search" msgid="1165316329772287360">"Search"</string>
<string name="print_searching_for_printers" msgid="6538687129687642542">"ప్రింటర్ల కోసం వెతుకుతోంది"</string>
<string name="print_service_disabled" msgid="6376344992705893436">"సేవ నిలిపివేయబడింది"</string>
<string name="print_print_jobs" msgid="7357841034181762157">"ముద్రణ జాబ్లు"</string>
@@ -2321,9 +2323,9 @@
<string name="smart_battery_manager_title" msgid="5744035036663849515">"బ్యాటరీ మేనేజర్"</string>
<string name="smart_battery_title" msgid="4919670408532804351">"యాప్లను ఆటోమేటిక్గా నిర్వహించండి"</string>
<string name="smart_battery_summary" msgid="640027046471198174">"మీరు తరచుగా ఉపయోగించని యాప్ల కోసం బ్యాటరీని పరిమితం చేయండి"</string>
- <string name="smart_battery_footer" product="default" msgid="3971715848890205632">"యాప్లు బ్యాటరీ శక్తిని హరిస్తున్నయని బ్యాటరీ మేనేజర్ గుర్తించినప్పుడు, ఈ యాప్లను పరిమితం చేసే ఎంపిక మీకు ఉంటుంది. పరిమితం చేయబడిన యాప్లు సరిగ్గా పనిచేయకపోవచ్చు మరియు నోటిఫికేషన్లు రావడానికి ఆలస్యం కావచ్చు."</string>
- <string name="smart_battery_footer" product="tablet" msgid="3971715848890205632">"యాప్లు బ్యాటరీ శక్తిని హరిస్తున్నయని బ్యాటరీ మేనేజర్ గుర్తించినప్పుడు, ఈ యాప్లను పరిమితం చేసే ఎంపిక మీకు ఉంటుంది. పరిమితం చేయబడిన యాప్లు సరిగ్గా పనిచేయకపోవచ్చు మరియు నోటిఫికేషన్లు రావడానికి ఆలస్యం కావచ్చు."</string>
- <string name="smart_battery_footer" product="device" msgid="3971715848890205632">"యాప్లు బ్యాటరీ శక్తిని హరిస్తున్నయని బ్యాటరీ మేనేజర్ గుర్తించినప్పుడు, ఈ యాప్లను పరిమితం చేసే ఎంపిక మీకు ఉంటుంది. పరిమితం చేయబడిన యాప్లు సరిగ్గా పనిచేయకపోవచ్చు మరియు నోటిఫికేషన్లు రావడానికి ఆలస్యం కావచ్చు."</string>
+ <string name="smart_battery_footer" product="default" msgid="3971715848890205632">"ఏవైనా యాప్లు బ్యాటరీని అధికంగా వాడుతున్నాయని బ్యాటరీ మేనేజర్ గుర్తించినప్పుడు, ఆ యాప్లను పరిమితం చేసే ఎంపిక మీకు ఉంటుంది. పరిమితం చేయబడిన యాప్లు సరిగ్గా పనిచేయకపోవచ్చు, వాటి నోటిఫికేషన్లు రావడానికి ఆలస్యం కావచ్చు."</string>
+ <string name="smart_battery_footer" product="tablet" msgid="3971715848890205632">"ఏవైనా యాప్లు బ్యాటరీని అధికంగా వాడుతున్నాయని బ్యాటరీ మేనేజర్ గుర్తించినప్పుడు, ఆ యాప్లను పరిమితం చేసే ఎంపిక మీకు ఉంటుంది. పరిమితం చేయబడిన యాప్లు సరిగ్గా పనిచేయకపోవచ్చు, వాటి నోటిఫికేషన్లు రావడానికి ఆలస్యం కావచ్చు."</string>
+ <string name="smart_battery_footer" product="device" msgid="3971715848890205632">"ఏవైనా యాప్లు బ్యాటరీని అధికంగా వాడుతున్నాయని బ్యాటరీ మేనేజర్ గుర్తించినప్పుడు, ఆ యాప్లను పరిమితం చేసే ఎంపిక మీకు ఉంటుంది. పరిమితం చేయబడిన యాప్లు సరిగ్గా పనిచేయకపోవచ్చు, వాటి నోటిఫికేషన్లు రావడానికి ఆలస్యం కావచ్చు."</string>
<string name="restricted_app_title" msgid="4957644700640127606">"నియంత్రించబడిన యాప్లు"</string>
<plurals name="restricted_app_summary" formatted="false" msgid="7609538735465186040">
<item quantity="other">%1$d యాప్ల కోసం బ్యాటరీ వినియోగాన్ని పరిమితం చేయడం</item>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"ఆన్ చేయి"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"బ్యాటరీ సేవర్ని ఉపయోగించండి"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"బ్యాటరీ సేవర్ను ఉపయోగించండి"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"స్వయంచాలకంగా ఆన్ చేయి"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"ఎప్పటికీ వద్దు"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"<xliff:g id="PERCENT">%1$s</xliff:g> బ్యాటరీ ఉన్నప్పుడు"</string>
@@ -2574,7 +2576,7 @@
<string name="sms_access_restriction_enabled" msgid="3006320256764718303">"SMS & కాల్ లాగ్ యాక్సెస్ను పరిమితం చేయండి"</string>
<string name="sms_access_restriction_enabled_summary" msgid="9011946580977780063">"కేవలం డిఫాల్ట్ ఫోన్ మరియు సందేశ యాప్లు మాత్రమే SMS & లాగ్ అనుమతులను కలిగి ఉన్నాయి"</string>
<string name="no_trust_agents" msgid="5757792915019113084">"విశ్వసనీయ ఏజెంట్లు అందుబాటులో లేరు"</string>
- <string name="add_device_admin_msg" msgid="3573765823476931173">"పరికర నిర్వాహకుల యాప్ను యాక్టివేట్ చేయాలా?"</string>
+ <string name="add_device_admin_msg" msgid="3573765823476931173">"డివైజ్ నిర్వాహకుల యాప్ను యాక్టివేట్ చేయాలా?"</string>
<string name="add_device_admin" msgid="1621152410207260584">"ఈ పరికరం నిర్వాహకుల యాప్ను యాక్టివేట్ చేయి"</string>
<string name="device_admin_add_title" msgid="6097881332139146897">"పరికర నిర్వాహకులు"</string>
<string name="device_admin_warning" msgid="4421817419326480449">"ఈ \'నిర్వాహకుల యాప్\'ను యాక్టివేట్ చేస్తే, కింది చర్యలను చేయడానికి <xliff:g id="APP_NAME">%1$s</xliff:g> యాప్ అనుమతించబడుతుంది:"</string>
@@ -2617,7 +2619,7 @@
<string name="sync_one_time_sync" msgid="6005174168405784256">"ఇప్పుడే సమకాలీకరించడానికి నొక్కండి<xliff:g id="LAST_SYNC_TIME">
%1$s</xliff:g>"</string>
<string name="sync_gmail" msgid="4457967084840001296">"Gmail"</string>
- <string name="sync_calendar" msgid="6573708019827519372">"క్యాలెండర్"</string>
+ <string name="sync_calendar" msgid="6573708019827519372">"Calendar"</string>
<string name="sync_contacts" msgid="5687434785723746534">"పరిచయాలు"</string>
<string name="sync_plug" msgid="6703804441408427257"><font fgcolor="#ffffffff">"Google సమకాలీకరణకు స్వాగతం!"</font>" \nమీరు ఎక్కడ ఉన్నా సరే మీ పరిచయాలు, నియామకాలు మరియు మరిన్నింటికి ప్రాప్యతను అనుమతించడం కోసం డేటాను సమకాలీకరించడానికి Google అవలంబించే విధానం."</string>
<string name="header_application_sync_settings" msgid="4581847153669774489">"అనువర్తన సమకాలీకరణ సెట్టింగ్లు"</string>
@@ -2668,8 +2670,8 @@
<string name="data_usage_menu_sim_cards" msgid="8508154611676507088">"సిమ్ కార్డులు"</string>
<string name="data_usage_cellular_data_summary" msgid="9162777397135709280">"పరిమితి చేరు. పాజ్ చేయబ."</string>
<string name="account_settings_menu_auto_sync" msgid="2673669556006027506">"డేటా స్వీయ-సమకాలీకరణ"</string>
- <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"వ్యక్తిగత డేటాను స్వయంచాలకంగా సమకాలీకరించు"</string>
- <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"కార్యాలయ డేటాను స్వయంచాలకంగా సమకాలీకరించు"</string>
+ <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"వ్యక్తిగత డేటా ఆటో-సింక్"</string>
+ <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"ఆఫీస్ డేటాను ఆటో-సింక్ చేయి"</string>
<string name="data_usage_change_cycle" msgid="447761920472170031">"సైకిల్ను మార్చు…"</string>
<string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"డేటా వినియోగ సైకిల్ను రీసెట్ చేయాల్సిన నెలలోని రోజు:"</string>
<string name="data_usage_empty" msgid="7981405723435034032">"ఈ వ్యవధిలో డేటాను ఏ అనువర్తనాలు ఉపయోగించలేదు."</string>
@@ -2868,7 +2870,7 @@
<string name="user_add_user_item_title" msgid="6835385073795492410">"వినియోగదారు"</string>
<string name="user_add_profile_item_title" msgid="4932743891449790664">"పరిమితం చేయబడిన ప్రొఫైల్"</string>
<string name="user_add_user_title" msgid="2320897397066676472">"కొత్త వినియోగదారుని జోడించాలా?"</string>
- <string name="user_add_user_message_long" msgid="686637203224195465">"అదనపు వినియోగదారులను సృష్టించడం ద్వారా మీరు ఈ పరికరాన్ని ఇతరులతో షేర్ చేయవచ్చు. ప్రతి వినియోగదారుకు వారికంటూ ప్రత్యేక స్థలం ఉంటుంది, వారు ఆ స్థలాన్ని యాప్లు, వాల్పేపర్ మొదలైనవాటితో అనుకూలీకరించవచ్చు. వినియోగదారులు ప్రతి ఒక్కరిపై ప్రభావం చూపే Wi‑Fi వంటి పరికర సెట్టింగ్లను కూడా సర్దుబాటు చేయవచ్చు.\n\nమీరు కొత్త వినియోగదారును జోడించినప్పుడు, ఆ వ్యక్తి వారికంటూ స్వంత స్థలం సెట్ చేసుకోవాలి.\n\nఏ వినియోగదారు అయినా మిగిలిన అందరు వినియోగదారుల కోసం యాప్లను అప్డేట్ చేయవచ్చు. యాక్సెస్ సామర్ధ్యం సెట్టింగ్లు మరియు సేవలు కొత్త వినియోగదారుకి బదిలీ కాకపోవచ్చు."</string>
+ <string name="user_add_user_message_long" msgid="686637203224195465">"అదనపు యూజర్లను సృష్టించడం ద్వారా మీరు ఈ దేవైజ్ను ఇతరులతో షేర్ చేయవచ్చు. ప్రతి యూజర్కు వారికంటూ ప్రత్యేక స్థలం ఉంటుంది, వారు ఆ స్థలాన్ని యాప్లు, వాల్పేపర్ మొదలైనవాటితో అనుకూలీకరించవచ్చు. యూజర్లు ప్రతి ఒక్కరిపై ప్రభావం చూపే Wi‑Fi వంటి పరికర సెట్టింగ్లను కూడా సర్దుబాటు చేయవచ్చు.\n\nమీరు కొత్త యూజర్ను జోడించినప్పుడు, ఆ వ్యక్తి వారికంటూ స్వంత స్థలం సెట్ చేసుకోవాలి.\n\nఏ యూజర్ అయినా మిగిలిన అందరు వినియోగదారుల కోసం యాప్లను అప్డేట్ చేయవచ్చు. యాక్సెస్ సామర్ధ్యం సెట్టింగ్లు మరియు సేవలు కొత్త యూజర్కి బదిలీ కాకపోవచ్చు."</string>
<string name="user_add_user_message_short" msgid="1802594476285458254">"మీరు కొత్త వినియోగదారుని జోడించినప్పుడు, ఆ వ్యక్తి తన స్థలాన్ని సెటప్ చేసుకోవాలి.\n\nఏ వినియోగదారు అయినా మిగతా అందరు వినియోగదారుల కోసం యాప్లను అప్డేట్ చేయగలరు."</string>
<string name="user_setup_dialog_title" msgid="6748950002206392396">"ఇప్పుడు వినియోగదారుని సెటప్ చేయాలా?"</string>
<string name="user_setup_dialog_message" msgid="2988559933258353919">"పరికరాన్ని తీసుకోవడానికి వ్యక్తి అందుబాటులో ఉన్నారని నిర్ధారించుకొని, ఆపై వారికి నిల్వ స్థలాన్ని సెటప్ చేయండి"</string>
@@ -2880,7 +2882,7 @@
<string name="user_cannot_add_accounts_message" msgid="5993561303748749097">"పరిమిత ప్రొఫైల్లు ఖాతాలను జోడించడం సాధ్యపడదు"</string>
<string name="user_remove_user_menu" msgid="3505139157217459864">"ఈ పరికరం నుండి <xliff:g id="USER_NAME">%1$s</xliff:g>ని తొలగించు"</string>
<string name="user_lockscreen_settings" msgid="3820813814848394568">"లాక్ స్క్రీన్ సెట్టింగ్లు"</string>
- <string name="user_add_on_lockscreen_menu" msgid="5211604808199585774">"లాక్ స్క్రీన్ నుండి వినియోగదారులను జోడించండి"</string>
+ <string name="user_add_on_lockscreen_menu" msgid="5211604808199585774">"లాక్ స్క్రీన్ నుండి యూజర్లను జోడించండి"</string>
<string name="user_new_user_name" msgid="3880395219777884838">"కొత్త వినియోగదారు"</string>
<string name="user_new_profile_name" msgid="3074939718101489937">"కొత్త ప్రొఫైల్"</string>
<string name="user_confirm_remove_self_title" msgid="6739480453680217543">"మిమ్మల్ని తొలగించాలా?"</string>
@@ -2908,7 +2910,7 @@
<string name="user_enable_calling_and_sms_confirm_title" msgid="4153856398523366976">"ఫోన్ కాల్లు & SMSను ఆన్ చేయాలా?"</string>
<string name="user_enable_calling_and_sms_confirm_message" msgid="3278802798876095734">"కాల్, SMS చరిత్ర ఈ వినియోగదారుతో షేర్ చేయబడుతుంది."</string>
<string name="emergency_info_title" msgid="1522609271881425375">"అత్యవసర సమాచారం"</string>
- <string name="emergency_info_summary" msgid="7280464759837387342">"<xliff:g id="USER_NAME">%1$s</xliff:g> కోసం సమాచారం & పరిచయాలు"</string>
+ <string name="emergency_info_summary" msgid="7280464759837387342">"<xliff:g id="USER_NAME">%1$s</xliff:g> సంబంధిత సమాచారం & కాంటాక్ట్లు"</string>
<string name="application_restrictions" msgid="6871981013736536763">"అనువర్తనాలు మరియు కంటెంట్ను అనుమతించండి"</string>
<string name="apps_with_restrictions_header" msgid="8656739605673756176">"పరిమితులు గల అనువర్తనాలు"</string>
<string name="apps_with_restrictions_settings_button" msgid="5065896213467171744">"అనువర్తన సెట్టిం. విస్తరింపజేయి"</string>
@@ -2933,7 +2935,7 @@
<string name="restriction_menu_reset" msgid="3642252461410370554">"పరిమితులను తీసివేయి"</string>
<string name="restriction_menu_change_pin" msgid="592512748243421101">"పిన్ను మార్చు"</string>
<string name="app_notifications_switch_label" msgid="670683308275498821">"నోటిఫికేషన్లను చూపు"</string>
- <string name="help_label" msgid="1296484776243905646">"సహాయం & అభిప్రాయం"</string>
+ <string name="help_label" msgid="1296484776243905646">"సహాయం & ఫీడ్బ్యాక్"</string>
<string name="support_summary" msgid="3278943815956130740">"సహాయక కథనాలు, ఫోన్ & చాట్, ప్రారంభించండి"</string>
<string name="user_account_title" msgid="2108666882630552859">"కంటెంట్ కోసం ఖాతా"</string>
<string name="user_picture_title" msgid="6664602422948159123">"ఫోటో ID"</string>
@@ -3039,11 +3041,11 @@
<string name="connected_devices_dashboard_no_driving_mode_summary" msgid="3524409078596318803">"బ్లూటూత్, NFC"</string>
<string name="connected_devices_dashboard_no_driving_mode_no_nfc_summary" msgid="7881286613528299400">"బ్లూటూత్"</string>
<string name="app_and_notification_dashboard_title" msgid="8448096608058843730">"యాప్లు & నోటిఫికేషన్లు"</string>
- <string name="app_and_notification_dashboard_summary" msgid="4165181440955038145">"అసిస్టెంట్, ఇటీవలి యాప్లు, డిఫాల్ట్ యాప్లు"</string>
+ <string name="app_and_notification_dashboard_summary" msgid="4165181440955038145">"Assistant, ఇటీవలి యాప్లు, డిఫాల్ట్ యాప్లు"</string>
<string name="notification_settings_work_profile" msgid="7190550347842400029">"కార్యాలయ ప్రొఫైల్లో ఉన్న యాప్లకు సంబంధించి నోటిఫికేషన్ యాక్సెస్ అందుబాటులో లేదు."</string>
<string name="account_dashboard_title" msgid="4734300939532555885">"ఖాతాలు"</string>
<string name="account_dashboard_default_summary" msgid="6822549669771936206">"ఖాతాలు జోడించబడలేదు"</string>
- <string name="app_default_dashboard_title" msgid="6575301028225232193">"డిఫాల్ట్ యాప్లు"</string>
+ <string name="app_default_dashboard_title" msgid="6575301028225232193">"ఆటోమేటిక్ యాప్లు"</string>
<string name="system_dashboard_summary" msgid="6582464466735779394">"భాషలు, సంజ్ఞలు, సమయం, బ్యాకప్"</string>
<string name="search_results_title" msgid="4160717656435503940">"సెట్టింగ్లు"</string>
<string name="keywords_wifi" msgid="8477688080895466846">"wifi, wi-fi, నెట్వర్క్ కనెక్షన్, ఇంటర్నెట్, వైర్లెస్, డేటా, wi fi"</string>
@@ -3278,12 +3280,12 @@
<string name="zen_onboarding_new_setting_summary" msgid="8264430315983860075">"మీరు నోటిఫికేషన్లను చూడలేరు లేదా వినలేరు. నక్షత్రం గుర్తు ఉన్న పరిచయాల మరియు రిపీట్ కాలర్ల నుండి కాల్లు అనుమతించబడతాయి."</string>
<string name="zen_onboarding_current_setting_summary" msgid="3569246708507270821">"(ప్రస్తుత సెట్టింగ్)"</string>
<string name="zen_onboarding_dnd_visual_disturbances_header" msgid="7584229011611927613">"అంతరాయం కలిగించవద్దు నోటిఫికేషన్ సెట్టింగ్లను మార్చాలా?"</string>
- <string name="sound_work_settings" msgid="4140215240360927923">"కార్యాలయ ప్రొఫైల్ శబ్దాలు"</string>
+ <string name="sound_work_settings" msgid="4140215240360927923">"ఆఫీస్ ప్రొఫైల్ శబ్దాలు"</string>
<string name="work_use_personal_sounds_title" msgid="531727195073003599">"వ్యక్తిగత ప్రొఫైల్ శబ్దాలు ఉంచు"</string>
- <string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"కార్యాలయ మరియు వ్యక్తిగత ప్రొఫైల్లకు ఒకే ధ్వనులు ఉపయోగించబడతాయి"</string>
- <string name="work_ringtone_title" msgid="5499360583947410224">"కార్యాలయ ఫోన్ రింగ్టోన్"</string>
- <string name="work_notification_ringtone_title" msgid="8059159087214025757">"డిఫాల్ట్ కార్యాలయ నోటిఫికేషన్ ధ్వని"</string>
- <string name="work_alarm_ringtone_title" msgid="5328487181385375130">"డిఫాల్ట్ కార్యాలయ అలారం ధ్వని"</string>
+ <string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"ఆఫీస్తో పాటు వ్యక్తిగత ప్రొఫైల్లకు ఒకే రకమైన ధ్వనులు ఉపయోగించబడతాయి"</string>
+ <string name="work_ringtone_title" msgid="5499360583947410224">"ఆఫీస్ ఫోన్ రింగ్టోన్"</string>
+ <string name="work_notification_ringtone_title" msgid="8059159087214025757">"ఆటోమేటిక్ ఆఫీస్ నోటిఫికేషన్ ధ్వని"</string>
+ <string name="work_alarm_ringtone_title" msgid="5328487181385375130">"ఆటోమేటిక్ ఆఫీస్ అలారం ధ్వని"</string>
<string name="work_sound_same_as_personal" msgid="7728560881697159758">"వ్యక్తిగత ప్రొఫైల్లో వలె ఉంచబడతాయి"</string>
<string name="work_sync_dialog_title" msgid="4799120971202956837">"ధ్వనులను భర్తీ చేయాలా?"</string>
<string name="work_sync_dialog_yes" msgid="2110726233746476066">"భర్తీ చేయి"</string>
@@ -3380,7 +3382,7 @@
<string name="vr_listener_security_warning_title" msgid="7019322246707645361">"<xliff:g id="SERVICE">%1$s</xliff:g> కోసం VR సేవ ప్రాప్యతను అనుమతించాలా?"</string>
<string name="vr_listener_security_warning_summary" msgid="5093225583584522067">"మీరు వర్చువల్ రియాలిటీ మోడ్లో అనువర్తనాలను ఉపయోగిస్తున్నప్పుడు <xliff:g id="VR_LISTENER_NAME">%1$s</xliff:g> అమలు కాగలదు."</string>
<string name="display_vr_pref_title" msgid="1088464812293416981">"పరికరం VRలో ఉన్నప్పుడు"</string>
- <string name="display_vr_pref_low_persistence" msgid="3132583929174794245">"అస్పష్టతను తగ్గించు (సిఫార్సు చేయబడింది)"</string>
+ <string name="display_vr_pref_low_persistence" msgid="3132583929174794245">"బ్లర్ తగ్గించు (సిఫార్సు చేయబడింది)"</string>
<string name="display_vr_pref_off" msgid="4681320968818852691">"ప్రకాశంలో అస్థిరతను తగ్గించు"</string>
<string name="picture_in_picture_title" msgid="4960733106166035448">"చిత్రంలో చిత్రం"</string>
<string name="picture_in_picture_empty_text" msgid="8664071475324685241">"చిత్రంలో చిత్రానికి మద్దతిచ్చే అనువర్తనాలు ఏవీ ఇన్స్టాల్ చేయబడలేదు"</string>
@@ -3588,7 +3590,7 @@
<string name="imei_information_title" msgid="7666097743700170757">"IMEI సమాచారం"</string>
<string name="imei_information_summary" msgid="716516316022275083">"IMEI సంబంధిత సమాచారం"</string>
<string name="slot_number" msgid="785422579177068698">"(స్లాట్<xliff:g id="SLOT_NUM">%1$d</xliff:g>)"</string>
- <string name="launch_by_default" msgid="6106985160202769725">"డిఫాల్ట్గా తెరువు"</string>
+ <string name="launch_by_default" msgid="6106985160202769725">"ఆటోమేటిక్గా తెరువు"</string>
<string name="app_launch_domain_links_title" msgid="2987289657348349133">"లింక్లను తెరవడం"</string>
<string name="app_launch_open_domain_urls_title" msgid="8595126859922391331">"మద్దతిచ్చే లింక్లను తెరవండి"</string>
<string name="app_launch_open_domain_urls_summary" msgid="6803029846855502366">"అడగకుండానే తెరవాలి"</string>
@@ -3758,7 +3760,7 @@
<string name="usb_summary_MIDI_power" msgid="7685597621357005180">"MIDI మరియు విద్యుత్తు శక్తి సరఫరా"</string>
<string name="background_check_pref" msgid="664081406854758392">"బ్యాక్గ్రౌండ్ తనిఖీ"</string>
<string name="background_check_title" msgid="4136736684290307970">"పూర్తి నేపథ్య యాక్సెస్"</string>
- <string name="assist_access_context_title" msgid="2274614501747710439">"స్క్రీన్లోని వచనాన్ని ఉపయోగించండి"</string>
+ <string name="assist_access_context_title" msgid="2274614501747710439">"స్క్రీన్లోని టెక్స్ట్ను ఉపయోగించండి"</string>
<string name="assist_access_context_summary" msgid="5867997494395842785">"స్క్రీన్ కంటెంట్లను వచన రూపంలో యాక్సెస్ చేయడానికి సహాయక యాప్ను అనుమతిస్తుంది"</string>
<string name="assist_access_screenshot_title" msgid="1991014038776117688">"స్క్రీన్షాట్ను ఉపయోగించండి"</string>
<string name="assist_access_screenshot_summary" msgid="3010943864000489424">"స్క్రీన్ చిత్రాన్ని యాక్సెస్ చేయడానికి సహాయక యాప్ను అనుమతిస్తుంది"</string>
@@ -4010,7 +4012,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"పరికరం లాక్ చేయబడితే, నోటిఫికేషన్ల్లో ప్రత్యుత్తరాలు లేదా ఇతర వచనాన్ని టైప్ చేయకుండా నిరోధించు"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"డిఫాల్ట్ స్పెల్ చెకర్"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"స్పెల్ చెకర్ను ఎంచుకోండి"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"స్పెల్ చెకర్ను ఉపయోగించు"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"స్పెల్-చెకర్ను ఉపయోగించండి"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"ఎంచుకోబడలేదు"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(ఏదీ లేదు)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4103,7 +4105,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"నిల్వ స్థలాన్ని ఖాళీ చేయడంలో సహాయపడటానికి, నిల్వ నిర్వాహికి మీ పరికరం నుండి బ్యాకప్ చేసిన ఫోటోలు మరియు వీడియోలను తీసివేస్తుంది."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"ఫోటోలు & వీడియోలను తీసివేయి"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"నిల్వ నిర్వాహికి"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"నిల్వ మేనేజర్ని ఉపయోగించండి"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"స్టోరేజ్ మేనేజర్ను ఉపయోగించండి"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"ఆటోమేటిక్"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"మాన్యువల్"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"ఇప్పుడు స్థలాన్ని ఖాళీ చేయి"</string>
@@ -4188,7 +4190,7 @@
<string name="enterprise_privacy_location_access" msgid="110406267468274216">"స్థాన అనుమతులు"</string>
<string name="enterprise_privacy_microphone_access" msgid="4586428105675460207">"మైక్రోఫోన్ అనుమతులు"</string>
<string name="enterprise_privacy_camera_access" msgid="2366392786153103482">"కెమెరా అనుమతులు"</string>
- <string name="enterprise_privacy_enterprise_set_default_apps" msgid="6142937923758931242">"డిఫాల్ట్ యాప్లు"</string>
+ <string name="enterprise_privacy_enterprise_set_default_apps" msgid="6142937923758931242">"ఆటోమేటిక్ యాప్లు"</string>
<plurals name="enterprise_privacy_number_packages" formatted="false" msgid="1480745164313890415">
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> యాప్లు</item>
<item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> యాప్</item>
@@ -4239,7 +4241,7 @@
<string name="storage_music_audio" msgid="3661289086715297149">"సంగీతం & ఆడియో"</string>
<string name="storage_games" msgid="7740038143749092373">"గేమ్లు"</string>
<string name="storage_other_apps" msgid="3202407095387420842">"ఇతర యాప్లు"</string>
- <string name="storage_files" msgid="2087824267937487880">"ఫైల్లు"</string>
+ <string name="storage_files" msgid="2087824267937487880">"ఫైల్స్"</string>
<string name="storage_size_large_alternate" msgid="1317796542509105857">"<xliff:g id="NUMBER">^1</xliff:g>"<small>" "<font size="20">"<xliff:g id="UNIT">^2</xliff:g>"</font></small>""</string>
<string name="storage_volume_total" msgid="5021484171514159913">"<xliff:g id="TOTAL">%1$s</xliff:g>లో ఉపయోగించబడింది"</string>
<string name="storage_percent_full" msgid="6924662861545958442">"ఉపయోగించబడింది"</string>
@@ -4471,10 +4473,10 @@
<string name="hwui_force_dark_title" msgid="3744825212652331461">"ఫోర్స్-డార్క్ను అధిగమించడం"</string>
<string name="hwui_force_dark_summary" msgid="2051891908674765817">"ఫోర్స్-డార్క్ ఫీచర్ను అధిగమించడం ఎల్లప్పుడూ ఆన్లో ఉండాలి"</string>
<string name="privacy_dashboard_title" msgid="8764930992456607513">"గోప్యత"</string>
- <string name="privacy_dashboard_summary" msgid="7916431309860824945">"అనుమతులు, ఖాతా కార్యకలాపం, వ్యక్తిగత డేటా"</string>
+ <string name="privacy_dashboard_summary" msgid="7916431309860824945">"అనుమతులు, ఖాతా యాక్టివిటీ, వ్యక్తిగత డేటా"</string>
<string name="contextual_card_dismiss_remove" msgid="1750420285615827309">"తీసివేయి"</string>
- <string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"ఉంచండి"</string>
- <string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"ఈ సూచనని తీసివేయలా?"</string>
+ <string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"Keep"</string>
+ <string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"ఈ సూచనని తీసేయాలా?"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"సూచన తీసివేయబడింది"</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"చర్యరద్దు"</string>
<string name="low_storage_summary" msgid="4562224870189133400">"నిల్వ తక్కువగా ఉంది: <xliff:g id="PERCENTAGE">%1$s</xliff:g> వినియోగించబడింది - <xliff:g id="FREE_SPACE">%2$s</xliff:g> ఖాళీగా ఉంది"</string>
diff --git a/tests/CarDeveloperOptions/res/values-th/arrays.xml b/tests/CarDeveloperOptions/res/values-th/arrays.xml
index 4668660..5803dc8 100644
--- a/tests/CarDeveloperOptions/res/values-th/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-th/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"ทำงานในพื้นหลัง"</item>
<item msgid="6423861043647911030">"ระดับเสียงการเข้าถึง"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"ตำแหน่ง"</item>
+ <item msgid="6656077694190491067">"ตำแหน่ง"</item>
+ <item msgid="8790228218278477369">"ตำแหน่ง"</item>
+ <item msgid="7836406246005211990">"สั่น"</item>
+ <item msgid="3951439024549922598">"อ่านรายชื่อติดต่อ"</item>
+ <item msgid="8802152411647068">"แก้ไขรายชื่อติดต่อ"</item>
+ <item msgid="229544934599698735">"อ่านประวัติการโทร"</item>
+ <item msgid="7396102294405899613">"แก้ไขประวัติการโทร"</item>
+ <item msgid="3597797992398484655">"อ่านปฏิทิน"</item>
+ <item msgid="2705975774250907343">"แก้ไขปฏิทิน"</item>
+ <item msgid="4668747371441932697">"ตำแหน่ง"</item>
+ <item msgid="1487578921720243646">"การแจ้งเตือนโพสต์"</item>
+ <item msgid="4636080349724146638">"ตำแหน่ง"</item>
+ <item msgid="673510900286463926">"โทรเข้าโทรศัพท์"</item>
+ <item msgid="542083422784609790">"อ่าน SMS/MMS"</item>
+ <item msgid="1033780373029588436">"เขียน SMS/MMS"</item>
+ <item msgid="5647111115517787488">"รับ SMS/MMS"</item>
+ <item msgid="8591105601108455893">"รับ SMS/MMS"</item>
+ <item msgid="7730995008517841903">"รับ SMS/MMS"</item>
+ <item msgid="2613033109026626086">"รับ SMS/MMS"</item>
+ <item msgid="3037159047591081136">"ส่ง SMS/MMS"</item>
+ <item msgid="4726682243833913568">"อ่าน SMS/MMS"</item>
+ <item msgid="6555678522277865572">"เขียน SMS/MMS"</item>
+ <item msgid="6981734935578130884">"แก้ไขการตั้งค่า"</item>
+ <item msgid="8705854389991425629">"วาดด้านบน"</item>
+ <item msgid="5861356020344153651">"เข้าถึงการแจ้งเตือน"</item>
+ <item msgid="78432174621628659">"กล้องถ่ายรูป"</item>
+ <item msgid="3986116419882154794">"บันทึกเสียง"</item>
+ <item msgid="4516840825756409490">"เล่นเสียง"</item>
+ <item msgid="6811712502798183957">"อ่านคลิปบอร์ด"</item>
+ <item msgid="2780369012602289114">"แก้ไขคลิปบอร์ด"</item>
+ <item msgid="2331359440170850868">"ปุ่มสื่อ"</item>
+ <item msgid="6133599737122751231">"โฟกัสอัตโนมัติ"</item>
+ <item msgid="6844485713404805301">"ระดับเสียงหลัก"</item>
+ <item msgid="1600379420669104929">"ระดับเสียงสนทนา"</item>
+ <item msgid="6296768210470214866">"ระดับเสียงเรียกเข้า"</item>
+ <item msgid="510690696071629241">"ระดับเสียงของสื่อ"</item>
+ <item msgid="406861638631430109">"ระดับเสียงปลุก"</item>
+ <item msgid="4715864795872233884">"ระดับเสียงของการแจ้งเตือน"</item>
+ <item msgid="2311478519251301183">"ระดับบลูทูธ"</item>
+ <item msgid="5133991377896747027">"ทำงานตลอดเวลา"</item>
+ <item msgid="2464189519136248621">"ตำแหน่ง"</item>
+ <item msgid="2062677934050803037">"ตำแหน่ง"</item>
+ <item msgid="1735171933192715957">"ดูสถิติการใช้งาน"</item>
+ <item msgid="1014093788778383554">"ปิด/เปิดเสียงไมโครโฟน"</item>
+ <item msgid="4199297950608622850">"แสดงข้อความโทสต์"</item>
+ <item msgid="2527962435313398821">"สื่อของโครงการ"</item>
+ <item msgid="5117506254221861929">"เปิดใช้งาน VPN"</item>
+ <item msgid="8291198322681891160">"เขียนวอลเปเปอร์"</item>
+ <item msgid="7106921284621230961">"สนับสนุนโครงสร้าง"</item>
+ <item msgid="4496533640894624799">"สนับสนุนภาพหน้าจอ"</item>
+ <item msgid="2598847264853993611">"อ่านสถานะโทรศัพท์"</item>
+ <item msgid="9215610846802973353">"เพิ่มข้อความเสียง"</item>
+ <item msgid="9186411956086478261">"ใช้ SIP"</item>
+ <item msgid="6884763100104539558">"โทรออก"</item>
+ <item msgid="125513972170580692">"ลายนิ้วมือ"</item>
+ <item msgid="2556071024281275619">"เซ็นเซอร์ร่างกาย"</item>
+ <item msgid="617168514928339387">"อ่านการส่งข้อมูลเตือนภัยทางมือถือ (CB)"</item>
+ <item msgid="7134693570516523585">"จำลองสถานที่"</item>
+ <item msgid="7224489175375229399">"อ่านพื้นที่เก็บข้อมูล"</item>
+ <item msgid="8472735063903258202">"เขียนพื้นที่เก็บข้อมูล"</item>
+ <item msgid="4069276819909595110">"เปิดหน้าจอ"</item>
+ <item msgid="1228338896751121025">"สร้างบัญชี"</item>
+ <item msgid="3181581793459233672">"ทำงานในพื้นหลัง"</item>
+ <item msgid="2340936043025374076">"ระดับเสียงการเข้าถึง"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"สั้น"</item>
<item msgid="4816511817309094890">"ปานกลาง"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"ไม่อนุญาตเลย"</item>
<item msgid="8184570120217958741">"อนุญาตเสมอ"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"ปกติ"</item>
+ <item msgid="5101233285497327432">"ปานกลาง"</item>
+ <item msgid="1555861583162930714">"ต่ำ"</item>
+ <item msgid="1719683776264798117">"วิกฤต"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"ปกติ"</item>
+ <item msgid="6107138933849816768">"ปานกลาง"</item>
+ <item msgid="182695359839047859">"ต่ำ"</item>
+ <item msgid="8577246509202964244">"วิกฤต"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"ต่อเนื่อง"</item>
<item msgid="167418068739176448">"กิจกรรมแรก"</item>
@@ -401,7 +477,7 @@
<item msgid="1008268820118852416">"ถือว่าไม่มีการวัดปริมาณอินเทอร์เน็ต"</item>
</string-array>
<string-array name="wifi_privacy_entries">
- <item msgid="6545683814310036454">"ใช้ที่อยู่ MAC แบบสุ่ม (ค่าเริ่มต้น)"</item>
+ <item msgid="6545683814310036454">"ใช้ MAC แบบสุ่ม (ค่าเริ่มต้น)"</item>
<item msgid="214234417308375326">"ใช้ที่อยู่ MAC ของอุปกรณ์"</item>
</string-array>
<string-array name="wifi_hidden_entries">
diff --git a/tests/CarDeveloperOptions/res/values-th/strings.xml b/tests/CarDeveloperOptions/res/values-th/strings.xml
index fdf64aa..cf49800 100644
--- a/tests/CarDeveloperOptions/res/values-th/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-th/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"ปรับขนาดข้อความบนหน้าจอให้เล็กลงหรือใหญ่ขึ้น"</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"ทำให้เล็กลง"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"ทำให้ใหญ่ขึ้น"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"ข้อความตัวอย่าง"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"พ่อมดมหัศจรรย์แห่งออซ"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"บทที่ 11: เมืองมรกตมหัศจรรย์แห่งออซ"</string>
@@ -356,7 +355,7 @@
<string name="security_enable_widgets_title" msgid="1701510007926738088">"เปิดใช้งานวิดเจ็ต"</string>
<string name="security_enable_widgets_disabled_summary" msgid="4408176087132339331">"ปิดใช้โดยผู้ดูแลระบบ"</string>
<string name="lockdown_settings_title" msgid="4534779922580115990">"แสดงตัวเลือกการปิดล็อก"</string>
- <string name="lockdown_settings_summary" msgid="7270756909878256174">"แสดงตัวเลือกปุ่มเปิด/ปิดที่จะปิด Smart Lock การปลดล็อกด้วยลายนิ้วมือ และการแจ้งเตือนในหน้าจอล็อก"</string>
+ <string name="lockdown_settings_summary" msgid="7270756909878256174">"แสดงตัวเลือกปุ่มเปิด/ปิดที่จะปิด Smart Lock, การปลดล็อกด้วยลายนิ้วมือ และการแจ้งเตือนในหน้าจอล็อก"</string>
<string name="trust_agents_extend_unlock_title" msgid="3582017561316089951">"เอเจนต์ความน่าเชื่อถือขยายเฉพาะการปลดล็อก"</string>
<string name="trust_agents_extend_unlock_summary" msgid="3543997596586078084">"หากเปิดใช้ เอเจนต์ความน่าเชื่อถือจะปลดล็อกอุปกรณ์ค้างไว้นานขึ้น แต่จะปลดล็อกอุปกรณ์ที่ล็อกอยู่ไม่ได้อีกต่อไป"</string>
<string name="trust_lost_locks_screen_title" msgid="3094736590690459372">"หน้าจอล็อกเมื่อสภาพแวดล้อมไม่น่าเชื่อถือ"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"ข้อมูลโปรไฟล์"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"บัญชี"</string>
<string name="location_settings_title" msgid="2707201457572301030">"ตำแหน่ง"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"ใช้ตำแหน่ง"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"ใช้ตำแหน่ง"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"ปิด"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">เปิดอยู่ - แอป <xliff:g id="COUNT_1">%1$d</xliff:g> แอปเข้าถึงตำแหน่งได้</item>
@@ -378,7 +377,7 @@
<string name="location_settings_loading_app_permission_stats" msgid="7818169326621327628">"กำลังโหลด…"</string>
<string name="account_settings_title" msgid="7870321267198486578">"บัญชี"</string>
<string name="security_settings_title" msgid="8228075165942416425">"ความปลอดภัย"</string>
- <string name="encryption_and_credential_settings_title" msgid="6911729638397745353">"การเข้ารหัสลับและข้อมูลรับรอง"</string>
+ <string name="encryption_and_credential_settings_title" msgid="6911729638397745353">"การเข้ารหัสและข้อมูลเข้าสู่ระบบ"</string>
<string name="encryption_and_credential_settings_summary" product="default" msgid="468749700109808546">"โทรศัพท์ที่เข้ารหัส"</string>
<string name="decryption_settings_summary" product="default" msgid="7401802133199522441">"โทรศัพท์ไม่ได้เข้ารหัส"</string>
<string name="encryption_and_credential_settings_summary" product="tablet" msgid="8170667308598998791">"อุปกรณ์ที่เข้ารหัส"</string>
@@ -390,7 +389,7 @@
<string name="security_passwords_title" msgid="6853942836045862315">"ความเป็นส่วนตัว"</string>
<string name="disabled_by_administrator_summary" msgid="6099821045360491127">"ปิดใช้โดยผู้ดูแลระบบ"</string>
<string name="security_status_title" msgid="1261960357751754428">"สถานะความปลอดภัย"</string>
- <string name="security_dashboard_summary_face" msgid="2536136110153593745">"ล็อกหน้าจอ, Face Unlock"</string>
+ <string name="security_dashboard_summary_face" msgid="2536136110153593745">"ล็อกหน้าจอ, ปลดล็อกด้วยใบหน้า"</string>
<string name="security_dashboard_summary" msgid="4048877125766167227">"ล็อกหน้าจอ ลายนิ้วมือ"</string>
<string name="security_dashboard_summary_no_fingerprint" msgid="8861903321053490658">"ล็อกหน้าจอ"</string>
<string name="security_settings_face_preference_summary" msgid="4437701024542221434">"เพิ่มใบหน้าแล้ว"</string>
@@ -427,7 +426,7 @@
<string name="security_settings_face_settings_remove_face_data" msgid="2821359954483136239">"นำข้อมูลใบหน้าออก"</string>
<string name="security_settings_face_settings_footer" msgid="4627175759990550715">"ใช้ใบหน้าของคุณเพื่อปลดล็อกอุปกรณ์และเข้าถึงแอปได้ "<annotation id="url">"ดูข้อมูลเพิ่มเติม"</annotation></string>
<string name="security_settings_face_settings_remove_dialog_title" msgid="5675319895815271094">"ลบข้อมูลใบหน้าไหม"</string>
- <string name="security_settings_face_settings_remove_dialog_details" msgid="3754494807169276107">"ระบบจะลบข้อมูลที่ Face Unlock บันทึกไว้อย่างถาวรและปลอดภัย หลักจากที่นำออกแล้ว คุณจะต้องใช้ PIN รูปแบบ หรือรหัสผ่านเพื่อปลดล็อกโทรศัพท์ ลงชื่อเข้าใช้แอป และยืนยันการชำระเงิน"</string>
+ <string name="security_settings_face_settings_remove_dialog_details" msgid="3754494807169276107">"ระบบจะลบข้อมูลที่การปลดล็อกด้วยใบหน้าบันทึกไว้อย่างถาวรและปลอดภัย หลักจากที่นำออกแล้ว คุณจะต้องใช้ PIN รูปแบบ หรือรหัสผ่านเพื่อปลดล็อกโทรศัพท์ ลงชื่อเข้าใช้แอป และยืนยันการชำระเงิน"</string>
<string name="security_settings_fingerprint_preference_title" msgid="4177132225930582928">"ลายนิ้วมือ"</string>
<string name="fingerprint_manage_category_title" msgid="1463406696801542090">"จัดการลายนิ้วมือ"</string>
<string name="fingerprint_usage_category_title" msgid="7298369141954599706">"ใช้ลายนิ้วมือเพื่อ"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"เปิด WiFi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"ใช้ Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"ใช้ Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"การตั้งค่า WiFi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"ตั้งค่าและจัดการจุดเข้าใช้งานระบบไร้สาย"</string>
@@ -881,7 +880,7 @@
<string name="wifi_configure_settings_preference_summary_wakeup_off" msgid="286904094152909651">"ไม่เปิด Wi‑Fi อีกครั้งโดยอัตโนมัติ"</string>
<string name="wifi_access_points" msgid="1647976498906871869">"เครือข่าย Wi-Fi"</string>
<string name="wifi_menu_more_options" msgid="8318269834264035524">"ตัวเลือกอื่น"</string>
- <string name="wifi_menu_p2p" msgid="4945665601551289791">"WiFi Direct"</string>
+ <string name="wifi_menu_p2p" msgid="4945665601551289791">"Wi-Fi Direct"</string>
<string name="wifi_menu_scan" msgid="9082691677803181629">"สแกน"</string>
<string name="wifi_menu_advanced" msgid="5984484498045511072">"ขั้นสูง"</string>
<string name="wifi_menu_configure" msgid="52192491120701266">"กำหนดค่า"</string>
@@ -915,7 +914,7 @@
<string name="wifi_ip_address" msgid="5572539114989914831">"ที่อยู่ IP"</string>
<string name="passpoint_label" msgid="7429247462404128615">"บันทึกผ่านทาง"</string>
<string name="passpoint_content" msgid="340527524510304327">"ข้อมูลรับรองของ <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="wifi_eap_method" msgid="3752116941487485859">"วิธีการ EAP"</string>
+ <string name="wifi_eap_method" msgid="3752116941487485859">"เมธอด EAP"</string>
<string name="please_select_phase2" msgid="5848080896810435677">"การตรวจสอบสิทธิ์เฟส 2"</string>
<string name="wifi_eap_ca_cert" msgid="1496395241849383785">"ใบรับรอง CA"</string>
<string name="wifi_eap_domain" msgid="3298302320003640130">"โดเมน"</string>
@@ -936,13 +935,13 @@
<string name="wifi_privacy_settings" msgid="4462092795794247809">"ความเป็นส่วนตัว"</string>
<string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"MAC แบบสุ่ม"</string>
<string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"เพิ่มอุปกรณ์"</string>
- <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"ถือให้โค้ด QR อยู่กลางช่องด้านล่างเพื่อเพิ่มอุปกรณ์ไปยัง “<xliff:g id="SSID">%1$s</xliff:g>”"</string>
+ <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"ให้คิวอาร์โค้ดอยู่กลางช่องด้านล่างเพื่อเพิ่มอุปกรณ์ไปยัง “<xliff:g id="SSID">%1$s</xliff:g>”"</string>
<string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"สแกนคิวอาร์โค้ด"</string>
- <string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"ถือให้โค้ด QR อยู่กลางช่องด้านล่างเพื่อเชื่อมต่อไปยัง “<xliff:g id="SSID">%1$s</xliff:g>”"</string>
- <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"เข้าร่วม Wi‑Fi โดยการสแกนคิวอาร์โค้ด"</string>
+ <string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"ให้คิวอาร์โค้ดอยู่กลางช่องด้านล่างเพื่อเชื่อมต่อไปยัง “<xliff:g id="SSID">%1$s</xliff:g>”"</string>
+ <string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"ร่วมใช้ Wi‑Fi โดยการสแกนคิวอาร์โค้ด"</string>
<string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"แชร์ Wi‑Fi"</string>
- <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"สแกนโค้ด QR นี้เพื่อเชื่อมต่อกับ “<xliff:g id="SSID">%1$s</xliff:g>” และแชร์รหัสผ่าน"</string>
- <string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"สแกนโค้ด QR นี้เพื่อเชื่อมต่อกับ “<xliff:g id="SSID">%1$s</xliff:g>”"</string>
+ <string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"สแกนคิวอาร์โค้ดนี้เพื่อเชื่อมต่อกับ “<xliff:g id="SSID">%1$s</xliff:g>” และแชร์รหัสผ่าน"</string>
+ <string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"สแกนคิวอาร์โค้ดนี้เพื่อเชื่อมต่อกับ “<xliff:g id="SSID">%1$s</xliff:g>”"</string>
<string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"อ่านโค้ด QR ไม่ได้ เล็งให้โค้ดอยู่กึ่งกลางอีกครั้งแล้วลองใหม่"</string>
<string name="wifi_dpp_failure_authentication_or_configuration" msgid="9142051662156233679">"ลองอีกครั้ง หากยังแก้ปัญหาไม่ได้ ให้ติดต่อผู้ผลิตอุปกรณ์"</string>
<string name="wifi_dpp_failure_not_compatible" msgid="4320027179973678283">"มีข้อผิดพลาดเกิดขึ้น"</string>
@@ -1041,7 +1040,7 @@
<string name="wifi_dns2" msgid="1905876166783761641">"DNS 2"</string>
<string name="wifi_gateway" msgid="7455334454444443397">"เกตเวย์"</string>
<string name="wifi_network_prefix_length" msgid="1941206966133010633">"ความยาวรหัสนำเครือข่าย"</string>
- <string name="wifi_p2p_settings_title" msgid="3213180637906683308">"WiFi Direct"</string>
+ <string name="wifi_p2p_settings_title" msgid="3213180637906683308">"Wi-Fi Direct"</string>
<string name="wifi_p2p_device_info" msgid="4717490498956029237">"ข้อมูลอุปกรณ์"</string>
<string name="wifi_p2p_persist_network" msgid="1110453878886476660">"จำการเชื่อมต่อนี้"</string>
<string name="wifi_p2p_menu_search" msgid="8207638860263805291">"ค้นหาอุปกรณ์"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"อินเทอร์เน็ตมือถือ"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"ใช้เครือข่ายมือถือหาก Wi-Fi ไม่พร้อมใช้งาน"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"ใช้ Wi‑Fi หากเครือข่ายมือถือไม่พร้อมใช้งาน"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"โทรผ่าน Wi-Fi สายจะตัดหากสัญญาณ Wi‑Fi ขาดหาย"</string>
@@ -1213,7 +1215,7 @@
<string name="night_display_auto_mode_title" msgid="8493573087102481588">"กำหนดเวลา"</string>
<string name="night_display_auto_mode_never" msgid="2897444637217807088">"ไม่มี"</string>
<string name="night_display_auto_mode_custom" msgid="1400891076453963151">"เปิดในเวลาที่กำหนด"</string>
- <string name="night_display_auto_mode_twilight" msgid="4000162110017520674">"เปิดตั้งแต่อาทิตย์ตกจนขึ้น"</string>
+ <string name="night_display_auto_mode_twilight" msgid="4000162110017520674">"เปิดตั้งแต่พระอาทิตย์ตกจนขึ้น"</string>
<string name="night_display_start_time_title" msgid="1069255169673371077">"เวลาเริ่มต้น"</string>
<string name="night_display_end_time_title" msgid="2760793157124245911">"เวลาสิ้นสุด"</string>
<string name="night_display_status_title" msgid="1727020934735770319">"สถานะ"</string>
@@ -1244,7 +1246,7 @@
<string name="wallpaper_suggestion_summary" msgid="4247262938988875842">"ปรับเปลี่ยนหน้าจอในแบบของคุณ"</string>
<string name="wallpaper_settings_fragment_title" msgid="1503701065297188901">"เลือกวอลเปเปอร์จาก"</string>
<string name="screensaver_settings_title" msgid="7720091234133721021">"โปรแกรมรักษาหน้าจอ"</string>
- <string name="screensaver_settings_summary_either_long" msgid="6078038506795498288">"ขณะชาร์จหรือเสียบกับแท่นชาร์จ"</string>
+ <string name="screensaver_settings_summary_either_long" msgid="6078038506795498288">"ขณะชาร์จหรือวางอยู่บนแท่นชาร์จ"</string>
<string name="screensaver_settings_summary_either_short" msgid="2453772128682850053">"แบบใดก็ได้"</string>
<string name="screensaver_settings_summary_sleep" msgid="6097363596749362692">"ขณะที่ชาร์จ"</string>
<string name="screensaver_settings_summary_dock" msgid="6297808146601570196">"ขณะวางอยู่บนแท่นชาร์จ"</string>
@@ -1335,7 +1337,7 @@
<string name="status_number_sim_slot" product="tablet" msgid="4518232285651165459">"MDN (ช่องซิม %1$d)"</string>
<string name="status_number_sim_slot" product="default" msgid="3660851494421332328">"หมายเลขโทรศัพท์ (ช่องซิม %1$d)"</string>
<string name="status_number_sim_status" product="tablet" msgid="8069693515860290952">"MDN ในซิม"</string>
- <string name="status_number_sim_status" product="default" msgid="6602562692270457610">"หมายเลขโทรศัพท์ในซิม"</string>
+ <string name="status_number_sim_status" product="default" msgid="6602562692270457610">"หมายเลขโทรศัพท์ของซิม"</string>
<string name="status_min_number" msgid="8346889546673707777">"นาที"</string>
<string name="status_msid_number" msgid="7808175928664357661">"MSID"</string>
<string name="status_prl_version" msgid="5634561205739199042">"รุ่น PRL"</string>
@@ -1550,7 +1552,7 @@
<string name="carrier_enabled" msgid="1819916725305365581">"เปิด/ปิดใช้งาน APN"</string>
<string name="carrier_enabled_summaryOn" msgid="6219221535461945771">"เปิดใช้งาน APN แล้ว"</string>
<string name="carrier_enabled_summaryOff" msgid="4093019532796386622">"ปิดใช้งาน APN แล้ว"</string>
- <string name="bearer" msgid="4378444317087536401">"ผู้ถือ"</string>
+ <string name="bearer" msgid="4378444317087536401">"Bearer"</string>
<string name="mvno_type" msgid="3150755279048149624">"ประเภท MVNO"</string>
<string name="mvno_match_data" msgid="629287305803195245">"ค่า MVNO"</string>
<string name="menu_delete" msgid="8646081395424055735">"ลบ APN"</string>
@@ -1568,8 +1570,8 @@
<string name="restore_default_apn_completed" msgid="5671734152740058937">"รีเซ็ตการตั้งค่า APN กลับเป็นค่าเริ่มต้นเรียบร้อยแล้ว"</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"ตัวเลือกการรีเซ็ต"</string>
<string name="reset_dashboard_summary" msgid="8778383341461126642">"สามารถรีเซ็ตเครือข่าย แอป หรืออุปกรณ์ได้"</string>
- <string name="reset_network_title" msgid="8944059136930806211">"รีเซ็ต Wi-Fi, เน็ตมือถือ และบลูทูธ"</string>
- <string name="reset_network_desc" msgid="4982633363916261109">"การดำเนินการนี้จะรีเซ็ตการตั้งค่าเครือข่ายทั้งหมด รวมถึง:\n\n"<li>"Wi‑Fi"</li>\n<li>"อินเทอร์เน็ตมือถือ"</li>\n<li>"บลูทูธ"</li></string>
+ <string name="reset_network_title" msgid="8944059136930806211">"รีเซ็ต Wi-Fi เน็ตมือถือ และบลูทูธ"</string>
+ <string name="reset_network_desc" msgid="4982633363916261109">"การดำเนินการนี้จะรีเซ็ตการตั้งค่าเครือข่ายทั้งหมด ได้แก่\n\n"<li>"Wi‑Fi"</li>\n<li>"อินเทอร์เน็ตมือถือ"</li>\n<li>"บลูทูธ"</li></string>
<string name="reset_esim_title" msgid="7630781767040831893">"ลบซิมที่ดาวน์โหลด"</string>
<string name="reset_esim_desc" msgid="433226911566802">"โปรดติดต่อผู้ให้บริการเพื่อดาวน์โหลดซิมทดแทน การดำเนินการนี้จะไม่ยกเลิกแพ็กเกจอินเทอร์เน็ตมือถือของคุณ"</string>
<string name="reset_network_button_text" msgid="4293271046867912819">"รีเซ็ตการตั้งค่า"</string>
@@ -1645,7 +1647,7 @@
<string name="mobile_insert_sim_card" msgid="7594550403454243732">"โปรดใส่ซิมการ์ดและรีสตาร์ท"</string>
<string name="mobile_connect_to_internet" msgid="6031886097365170913">"โปรดเชื่อมต่ออินเทอร์เน็ต"</string>
<string name="location_title" msgid="8664674161765477168">"ตำแหน่งของฉัน"</string>
- <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"สถานที่สำหรับโปรไฟล์งาน"</string>
+ <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"ตำแหน่งสำหรับโปรไฟล์งาน"</string>
<string name="location_app_level_permissions" msgid="1298041503927632960">"สิทธิ์ของแอป"</string>
<string name="location_app_permission_summary_location_off" msgid="541372845344796336">"ตำแหน่งปิดอยู่"</string>
<plurals name="location_app_permission_summary_location_on" formatted="false" msgid="7904821382328758218">
@@ -1654,7 +1656,7 @@
</plurals>
<string name="location_category_recent_location_access" msgid="286059523360285026">"การเข้าถึงตำแหน่งล่าสุด"</string>
<string name="location_recent_location_access_view_details" msgid="2051602261436245905">"ดูรายละเอียด"</string>
- <string name="location_no_recent_apps" msgid="77502059586413278">"ไม่มีแอปใดทำการขอตำแหน่งเมื่อเร็วๆ นี้"</string>
+ <string name="location_no_recent_apps" msgid="77502059586413278">"ไม่มีแอปใดขอตำแหน่งเมื่อเร็วๆ นี้"</string>
<string name="location_no_recent_accesses" msgid="6289916310397279890">"ไม่มีแอปที่เข้าถึงตำแหน่งเมื่อเร็วๆ นี้"</string>
<string name="location_high_battery_use" msgid="7177199869979522663">"ใช้แบตเตอรี่มาก"</string>
<string name="location_low_battery_use" msgid="5030448574501435888">"ใช้แบตเตอรี่น้อย"</string>
@@ -2036,7 +2038,7 @@
<string name="accessibility_settings_title" msgid="1687226556576913576">"การตั้งค่าการเข้าถึง"</string>
<string name="accessibility_settings_summary" msgid="5742379519336396561">"โปรแกรมอ่านหน้าจอ การแสดงผล ส่วนควบคุมการโต้ตอบ"</string>
<string name="vision_settings_title" msgid="7315352351051423944">"การตั้งค่าการมองเห็น"</string>
- <string name="vision_settings_description" msgid="3476589459009287332">"คุณสามารถปรับแต่งอุปกรณ์นี้ให้ตรงกับความต้องการของคุณ และเปลี่ยนฟีเจอร์การเข้าถึงเหล่านี้ได้ภายหลังในการตั้งค่า"</string>
+ <string name="vision_settings_description" msgid="3476589459009287332">"คุณปรับแต่งอุปกรณ์นี้ให้ตรงกับความต้องการได้ และเปลี่ยนฟีเจอร์การช่วยเหลือพิเศษเหล่านี้ได้ภายหลังในการตั้งค่า"</string>
<string name="vision_settings_suggestion_title" msgid="7268661419110951128">"เปลี่ยนขนาดแบบอักษร"</string>
<string name="screen_reader_category_title" msgid="6300714148519645544">"โปรแกรมอ่านหน้าจอ"</string>
<string name="audio_and_captions_category_title" msgid="6140472938769619212">"เสียงและข้อความบนหน้าจอ"</string>
@@ -2046,7 +2048,7 @@
<string name="experimental_category_title" msgid="3797000069740110717">"ทดสอบ"</string>
<string name="feature_flags_dashboard_title" msgid="3153034144122754381">"แฟล็กฟีเจอร์"</string>
<string name="talkback_title" msgid="3717960404234260050">"TalkBack"</string>
- <string name="talkback_summary" msgid="6602857105831641574">"โปรแกรมอ่านหน้าจอที่ใช้สำหรับคนตาบอดหรือผู้มีสายตาบกพร่อง"</string>
+ <string name="talkback_summary" msgid="6602857105831641574">"โปรแกรมอ่านหน้าจอที่ใช้สำหรับคนตาบอดหรือผู้มีสายตาบกพร่องเป็นหลัก"</string>
<string name="select_to_speak_summary" msgid="7514180457557735421">"แตะรายการบนหน้าจอเพื่อฟังการอ่านออกเสียง"</string>
<string name="accessibility_captioning_title" msgid="5878371993023439642">"คำบรรยาย"</string>
<string name="accessibility_screen_magnification_title" msgid="7250949681883917360">"การขยาย"</string>
@@ -2086,26 +2088,26 @@
<string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"การหน่วงเวลาด้วยการแตะค้างไว้"</string>
<string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"การกลับสี"</string>
<string name="accessibility_display_inversion_preference_subtitle" msgid="69291255322175323">"อาจส่งผลกระทบต่อประสิทธิภาพ"</string>
- <string name="accessibility_autoclick_preference_title" msgid="9164599088410340405">"ระยะเวลาที่ไม่ขยับเมาส์"</string>
+ <string name="accessibility_autoclick_preference_title" msgid="9164599088410340405">"เวลาที่ไม่มีการขยับเมาส์"</string>
<string name="accessibility_autoclick_description" msgid="5492414927846407499">"หากใช้เมาส์อยู่ คุณตั้งค่าเคอร์เซอร์ให้ดำเนินการโดยอัตโนมัติเมื่อเมาส์หยุดเคลื่อนที่ครู่หนึ่งได้"</string>
<string name="accessibility_autoclick_delay_preference_title" msgid="8303022510942147049">"หน่วงเวลาก่อนคลิก"</string>
<string name="accessibility_vibration_settings_title" msgid="1902649657883159406">"การสั่น"</string>
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"การสั่นเมื่อมีการแจ้งเตือน"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"การสั่นเมื่อมีเสียงเรียกเข้า"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"การสั่นเมื่อแตะ"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"ใช้บริการ"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"ใช้การแก้สี"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"ใช้คำบรรยาย"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"ใช้บริการ"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"ใช้การแก้สี"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"ใช้คำบรรยาย"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"ต่อไป"</string>
- <string name="accessibility_hearingaid_title" msgid="3700978781235124891">"เครื่องช่วยการได้ยิน"</string>
- <string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"ไม่ได้เชื่อมต่อเครื่องช่วยการได้ยิน"</string>
- <string name="accessibility_hearingaid_adding_summary" msgid="4139031880828714300">"เพิ่มเครื่องช่วยการได้ยิน"</string>
- <string name="accessibility_hearingaid_pair_instructions_first_message" msgid="2671518890909750740">"หากต้องการจับคู่กับเครื่องช่วยการได้ยิน ให้ค้นหาและแตะอุปกรณ์ในหน้าจอถัดไป"</string>
- <string name="accessibility_hearingaid_pair_instructions_second_message" msgid="1584538735488464991">"ตรวจสอบว่าเครื่องช่วยการได้ยินอยู่ในโหมดการจับคู่"</string>
+ <string name="accessibility_hearingaid_title" msgid="3700978781235124891">"เครื่องช่วยฟัง"</string>
+ <string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"ไม่ได้เชื่อมต่อเครื่องช่วยฟัง"</string>
+ <string name="accessibility_hearingaid_adding_summary" msgid="4139031880828714300">"เพิ่มเครื่องช่วยฟัง"</string>
+ <string name="accessibility_hearingaid_pair_instructions_first_message" msgid="2671518890909750740">"หากต้องการจับคู่กับเครื่องช่วยฟัง ให้ค้นหาและแตะอุปกรณ์ในหน้าจอถัดไป"</string>
+ <string name="accessibility_hearingaid_pair_instructions_second_message" msgid="1584538735488464991">"ตรวจสอบว่าเครื่องช่วยฟังอยู่ในโหมดการจับคู่"</string>
<string name="accessibility_hearingaid_active_device_summary" msgid="6081382497207168885">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> ใช้งานอยู่"</string>
<plurals name="show_number_hearingaid_count" formatted="false" msgid="7906547154695855096">
- <item quantity="other">บันทึกเครื่องช่วยการได้ยิน <xliff:g id="NUMBER_DEVICE_COUNT_1">%1$d</xliff:g> เครื่องแล้ว</item>
- <item quantity="one">บันทึกเครื่องช่วยการได้ยิน <xliff:g id="NUMBER_DEVICE_COUNT_0">%1$d</xliff:g> เครื่องแล้ว</item>
+ <item quantity="other">บันทึกเครื่องช่วยฟัง <xliff:g id="NUMBER_DEVICE_COUNT_1">%1$d</xliff:g> เครื่องแล้ว</item>
+ <item quantity="one">บันทึกเครื่องช่วยฟัง <xliff:g id="NUMBER_DEVICE_COUNT_0">%1$d</xliff:g> เครื่องแล้ว</item>
</plurals>
<string name="accessibility_summary_state_enabled" msgid="7357731696603247963">"เปิด"</string>
<string name="accessibility_summary_state_disabled" msgid="9197369047683087620">"ปิด"</string>
@@ -2149,7 +2151,7 @@
<string name="captioning_standard_options_title" msgid="4124898413348084226">"ตัวเลือกมาตรฐาน"</string>
<string name="captioning_locale" msgid="4734464353806207943">"ภาษา"</string>
<string name="captioning_text_size" msgid="1707122517246408084">"ขนาดข้อความ"</string>
- <string name="captioning_preset" msgid="7429888317480872337">"รูปแบบคำบรรยายภาพ"</string>
+ <string name="captioning_preset" msgid="7429888317480872337">"รูปแบบคำบรรยาย"</string>
<string name="captioning_custom_options_title" msgid="4530479671071326732">"ตัวเลือกที่กำหนดเอง"</string>
<string name="captioning_background_color" msgid="2434458880326292180">"สีพื้นหลัง"</string>
<string name="captioning_background_opacity" msgid="8178926599201811936">"ความทึบแสงของพื้นหลัง"</string>
@@ -2160,7 +2162,7 @@
<string name="captioning_edge_color" msgid="4330622137047993780">"สีขอบ"</string>
<string name="captioning_edge_type" msgid="4414946407430588162">"ชนิดขอบ"</string>
<string name="captioning_typeface" msgid="7893208796949341767">"ชุดแบบอักษร"</string>
- <string name="captioning_preview_text" msgid="4877753964772618049">"คำอธิบายภาพจะมีหน้าตาแบบนี้"</string>
+ <string name="captioning_preview_text" msgid="4877753964772618049">"คำบรรยายจะมีหน้าตาแบบนี้"</string>
<string name="captioning_preview_characters" msgid="6469599599352973561">"Aa"</string>
<string name="locale_default" msgid="910074908458214054">"ค่าเริ่มต้น"</string>
<string name="color_title" msgid="132875486061816584">"สี"</string>
@@ -2193,8 +2195,8 @@
<string name="print_settings" msgid="7886184656544483072">"การพิมพ์"</string>
<string name="print_settings_summary_no_service" msgid="634173687975841526">"ปิด"</string>
<plurals name="print_settings_summary" formatted="false" msgid="7580293760281445137">
- <item quantity="other">บริการการพิมพ์เปิดอยู่ <xliff:g id="COUNT">%1$d</xliff:g> รายการ</item>
- <item quantity="one">บริการการพิมพ์เปิดอยู่ 1 รายการ</item>
+ <item quantity="other">บริการพิมพ์เปิดอยู่ <xliff:g id="COUNT">%1$d</xliff:g> รายการ</item>
+ <item quantity="one">บริการพิมพ์เปิดอยู่ 1 รายการ</item>
</plurals>
<plurals name="print_jobs_summary" formatted="false" msgid="6180308415569432845">
<item quantity="other">งานพิมพ์ <xliff:g id="COUNT">%1$d</xliff:g> รายการ</item>
@@ -2231,7 +2233,7 @@
<string name="power_usage_level_and_status" msgid="8873534076894160727">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g>"</string>
<string name="power_discharge_remaining" msgid="3461915627093471868">"เหลืออีก <xliff:g id="REMAIN">%1$s</xliff:g>"</string>
<string name="power_charge_remaining" msgid="2730510256218879651">"อีก <xliff:g id="UNTIL_CHARGED">%1$s</xliff:g> จะชาร์จเต็ม"</string>
- <string name="background_activity_title" msgid="7207836362312111483">"การจำกัดการใช้งานในพื้นหลัง"</string>
+ <string name="background_activity_title" msgid="7207836362312111483">"การจำกัดการทำงานในเบื้องหลัง"</string>
<string name="background_activity_summary" msgid="582372194738538145">"อนุญาตให้แอปทำงานในเบื้องหลัง"</string>
<string name="background_activity_summary_disabled" msgid="457944930942085876">"ไม่อนุญาตให้แอปทำงานในพื้นหลัง"</string>
<string name="background_activity_summary_whitelisted" msgid="4713321059375873828">"จำกัดการใช้งานในพื้นหลังไม่ได้"</string>
@@ -2239,7 +2241,7 @@
<string name="background_activity_warning_dialog_text" msgid="8242749826732375096">"แอปอาจทำงานผิดพลาดหากคุณจำกัดกิจกรรมในพื้นหลัง"</string>
<string name="background_activity_disabled_dialog_text" msgid="4234598000779459640">"เนื่องจากแอปนี้ไม่ได้ตั้งค่าให้เพิ่มประสิทธิภาพแบตเตอรี่ คุณจึงจำกัดการใช้งานไม่ได้\n\nหากต้องการจำกัด ให้เปิดการเพิ่มประสิทธิภาพแบตเตอรี่ก่อน"</string>
<string name="device_screen_usage" msgid="4470485475363132750">"การใช้งานหน้าจอตั้งแต่ชาร์จจนเต็ม"</string>
- <string name="power_usage_list_summary" msgid="4314438658308211057">"การใช้งานแบตเตอรี่ตั้งแต่ชาร์จจนเต็ม"</string>
+ <string name="power_usage_list_summary" msgid="4314438658308211057">"การใช้งานแบตเตอรี่ตั้งแต่ชาร์จเต็ม"</string>
<string name="screen_usage_summary" msgid="263396144684078341">"ระยะเวลาที่หน้าจอเปิดตั้งแต่ชาร์จจนเต็ม"</string>
<string name="device_usage_list_summary" msgid="8299017481332816368">"การใช้งานอุปกรณ์ตั้งแต่ชาร์จจนเต็ม"</string>
<string name="battery_since_unplugged" msgid="6486555910264026856">"การใช้แบตเตอรี่ตั้งแต่ถอดปลั๊ก"</string>
@@ -2297,7 +2299,7 @@
</plurals>
<plurals name="battery_tip_restrict_summary" formatted="false" msgid="984148373944071669">
<item quantity="other">แอป %2$d แอปใช้แบตเตอรี่ในเบื้องหลังเปลือง</item>
- <item quantity="one">แอป %1$s แอปใช้แบตเตอรี่ในเบื้องหลังเปลือง</item>
+ <item quantity="one">%1$s ใช้แบตเตอรี่ในเบื้องหลังเปลือง</item>
</plurals>
<plurals name="battery_tip_restrict_handled_summary" formatted="false" msgid="469696766640020557">
<item quantity="other">แอปเหล่านี้ทำงานในเบื้องหลังไม่ได้</item>
@@ -2307,9 +2309,9 @@
<item quantity="other">จำกัดแอป %1$d แอปใช่ไหม</item>
<item quantity="one">จำกัดแอปใช่ไหม</item>
</plurals>
- <string name="battery_tip_restrict_app_dialog_message" msgid="6905822297507947381">"หากต้องการประหยัดแบตเตอรี่ ต้องไม่ให้แอป <xliff:g id="APP">%1$s</xliff:g> ใช้งานแบตเตอรี่ในพื้นหลัง แอปนี้อาจไม่ทำงานตามปกติและการแจ้งเตือนอาจล่าช้า"</string>
- <string name="battery_tip_restrict_apps_less_than_5_dialog_message" msgid="4225881888543582456">"หากต้องการประหยัดแบตเตอรี่ ต้องไม่ให้แอปเหล่านี้ใช้งานแบตเตอรี่ในพื้นหลัง แอปที่ถูกจำกัดอาจไม่ทำงานตามปกติและการแจ้งเตือนอาจล่าช้า\n\nแอปดังกล่าวได้แก่"</string>
- <string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"หากต้องการประหยัดแบตเตอรี่ ต้องไม่ให้แอปเหล่านี้ใช้งานแบตเตอรี่ในพื้นหลัง แอปที่ถูกจำกัดอาจไม่ทำงานตามปกติและการแจ้งเตือนอาจล่าช้า\n\nแอปดังกล่าวได้แก่\n<xliff:g id="APP_LIST">%1$s</xliff:g>"</string>
+ <string name="battery_tip_restrict_app_dialog_message" msgid="6905822297507947381">"หากต้องการประหยัดแบตเตอรี่ ต้องไม่ให้แอป <xliff:g id="APP">%1$s</xliff:g> ใช้งานแบตเตอรี่ในเบื้องหลัง แอปนี้อาจไม่ทำงานตามปกติและการแจ้งเตือนอาจล่าช้า"</string>
+ <string name="battery_tip_restrict_apps_less_than_5_dialog_message" msgid="4225881888543582456">"หากต้องการประหยัดแบตเตอรี่ ต้องไม่ให้แอปเหล่านี้ใช้งานแบตเตอรี่ในเบื้องหลัง แอปที่ถูกจำกัดอาจไม่ทำงานตามปกติและการแจ้งเตือนอาจล่าช้า\n\nแอปดังกล่าวได้แก่"</string>
+ <string name="battery_tip_restrict_apps_more_than_5_dialog_message" msgid="1748375562539446634">"หากต้องการประหยัดแบตเตอรี่ ต้องไม่ให้แอปเหล่านี้ใช้งานแบตเตอรี่ในเบื้องหลัง แอปที่ถูกจำกัดอาจไม่ทำงานตามปกติและการแจ้งเตือนอาจล่าช้า\n\nแอปดังกล่าวได้แก่\n<xliff:g id="APP_LIST">%1$s</xliff:g>"</string>
<string name="battery_tip_restrict_app_dialog_ok" msgid="2573410775701913487">"จำกัด"</string>
<string name="battery_tip_unrestrict_app_dialog_title" msgid="812458516399125710">"นำการจำกัดออกใช่ไหม"</string>
<string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"แอปนี้จะใช้แบตเตอรี่ในเบื้องหลังได้ แบตเตอรี่จึงอาจจะหมดเร็วกว่าที่คาดไว้"</string>
@@ -2326,11 +2328,11 @@
<string name="smart_battery_footer" product="device" msgid="3971715848890205632">"เมื่อตัวจัดการแบตเตอรี่ตรวจพบว่าแอปทำให้แบตเตอรี่หมดเร็ว คุณจะมีตัวเลือกในการจำกัดแอปเหล่านี้ แอปที่ถูกจำกัดอาจไม่ทำงานตามปกติและการแจ้งเตือนอาจล่าช้า"</string>
<string name="restricted_app_title" msgid="4957644700640127606">"แอปที่ถูกจำกัด"</string>
<plurals name="restricted_app_summary" formatted="false" msgid="7609538735465186040">
- <item quantity="other">การจำกัดการใช้งานแบตเตอรี่ของแอป %1$d</item>
- <item quantity="one">การจำกัดการใช้งานแบตเตอรี่ของแอป %1$d</item>
+ <item quantity="other">การจำกัดการใช้งานแบตเตอรี่ของแอป %1$d แอป</item>
+ <item quantity="one">การจำกัดการใช้งานแบตเตอรี่ของแอป %1$d แอป</item>
</plurals>
<string name="restricted_app_time_summary" msgid="5205881852523135226">"จำกัดเมื่อ <xliff:g id="TIME">%1$s</xliff:g>"</string>
- <string name="restricted_app_detail_footer" msgid="482460517275754465">"แอปเหล่านี้ใช้งานแบตเตอรี่ในพื้นหลัง แอปที่ถูกจำกัดอาจไม่ทำงานตามปกติและการแจ้งเตือนอาจล่าช้า"</string>
+ <string name="restricted_app_detail_footer" msgid="482460517275754465">"แอปเหล่านี้ใช้งานแบตเตอรี่ในเบื้องหลัง แอปที่ถูกจำกัดอาจไม่ทำงานตามปกติและการแจ้งเตือนอาจล่าช้า"</string>
<string name="battery_auto_restriction_title" msgid="488905332794794076">"ใช้ตัวจัดการแบตเตอรี่"</string>
<string name="battery_auto_restriction_summary" msgid="1638072655581821837">"ตรวจจับเมื่อแอปทำให้แบตเตอรี่หมดเร็ว"</string>
<string name="battery_manager_on" msgid="5626982529932239656">"เปิด/ตรวจจับเมื่อแอปทำให้แบตเตอรี่หมดเร็ว"</string>
@@ -2446,20 +2448,20 @@
<string name="process_dex2oat_label" msgid="8249082119748556085">"การเพิ่มประสิทธิภาพแอป"</string>
<string name="battery_saver" msgid="3989710213758938398">"โหมดประหยัดแบตเตอรี่"</string>
<string name="battery_saver_auto_title" msgid="4158659069641849952">"เปิดอัตโนมัติ"</string>
- <string name="battery_saver_auto_no_schedule" msgid="739814529432092706">"ไม่มีกำหนดเวลา"</string>
+ <string name="battery_saver_auto_no_schedule" msgid="739814529432092706">"ไม่มีกำหนดการ"</string>
<string name="battery_saver_auto_routine" msgid="886514412067906980">"อิงตามกิจวัตรของคุณ"</string>
<string name="battery_saver_auto_percentage" msgid="5791982309331921556">"อิงตามเปอร์เซ็นต์แบตเตอรี่"</string>
<string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"โหมดประหยัดแบตเตอรี่จะเปิดเมื่อมีแนวโน้มว่าแบตเตอรี่จะหมดก่อนถึงเวลาที่คุณจะชาร์จอุปกรณ์เป็นประจำ"</string>
<string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"จะเปิดเมื่อเหลือแบตเตอรี่ <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
- <string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"ตั้งกำหนดเวลา"</string>
- <string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"ปิดเมื่อชาร์จเต็ม"</string>
- <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"โหมดประหยัดแบตเตอรี่จะปิดเมื่อแบตเตอรี่โทรศัพท์อยู่ที่ <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
+ <string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"ตั้งกำหนดการ"</string>
+ <string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"ปิดเมื่อชาร์จเต็มแล้ว"</string>
+ <string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"โหมดประหยัดแบตเตอรี่จะปิดเมื่อมีแบตเตอรี่โทรศัพท์อยู่ที่ <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"โหมดประหยัดแบตเตอรี่จะปิดเมื่อแบตเตอรี่แท็บเล็ตอยู่ที่ <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<string name="battery_saver_sticky_description_new" product="device" msgid="5056520668081504111">"โหมดประหยัดแบตเตอรี่จะปิดเมื่อแบตเตอรี่อุปกรณ์อยู่ที่ <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"เปิด"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"ใช้โหมดประหยัดแบตเตอรี่"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"ใช้โหมดประหยัดแบตเตอรี่"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"เปิดอัตโนมัติ"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"ไม่ใช้เลย"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"ที่แบตเตอรี่ <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
@@ -2922,8 +2924,8 @@
<string name="nfc_payment_favor_default" msgid="7555356982142464260">"ทุกครั้ง"</string>
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"ยกเว้นเมื่อแอปการชำระเงินอื่นเปิดอยู่"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"ที่เครื่องแตะและจ่าย ให้ชำระเงินด้วย:"</string>
- <string name="nfc_how_it_works_title" msgid="6531433737926327904">"การชำระเงินที่เครื่องเทอร์มินัล"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"ตั้งค่าแอปการชำระเงิน แล้วแตะด้านหลังของโทรศัพท์กับเทอร์มินัลเครื่องใดก็ได้ที่มีสัญลักษณ์ \"ไร้สัมผัส\""</string>
+ <string name="nfc_how_it_works_title" msgid="6531433737926327904">"การชำระเงินที่เครื่องชำระเงิน"</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"ตั้งค่าแอปการชำระเงิน แล้วแตะด้านหลังของโทรศัพท์กับเครื่องชำระเงินเครื่องใดก็ได้ที่มีสัญลักษณ์ \"ไม่ต้องสัมผัส\""</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"รับทราบ"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"เพิ่มเติม..."</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"ตั้งเป็นค่ากำหนดของคุณไหม"</string>
@@ -2941,7 +2943,7 @@
<string name="extreme_threats_summary" msgid="4967919167246852181">"รับการแจ้งเตือนภัยคุกคามต่อชีวิตและทรัพย์สินระดับสูงสุด"</string>
<string name="severe_threats_title" msgid="1987698359027211862">"ภัยคุกคามที่ร้ายแรง"</string>
<string name="severe_threats_summary" msgid="1148147804181873835">"รับการแจ้งเตือนภัยคุกคามที่ร้ายแรงต่อชีวิตและทรัพย์สิน"</string>
- <string name="amber_alerts_title" msgid="8274651933750533271">"การแจ้งเตือน AMBER Alert"</string>
+ <string name="amber_alerts_title" msgid="8274651933750533271">"การแจ้งเตือน AMBER"</string>
<string name="amber_alerts_summary" msgid="7570943549000256418">"รับกระดานข่าวสารเกี่ยวกับการลักพาตัวเด็ก"</string>
<string name="repeat_title" msgid="507090203366188931">"เล่นซ้ำ"</string>
<string name="call_manager_enable_title" msgid="6345443572463650308">"เปิดใช้ Call Manager"</string>
@@ -3034,7 +3036,7 @@
<string name="network_dashboard_summary_data_usage" msgid="4695629715072542102">"ปริมาณการใช้อินเทอร์เน็ต"</string>
<string name="network_dashboard_summary_hotspot" msgid="3928610802321995214">"ฮอตสปอต"</string>
<string name="connected_devices_dashboard_title" msgid="7795222675849060444">"อุปกรณ์ที่เชื่อมต่อ"</string>
- <string name="connected_devices_dashboard_summary" msgid="1072664369515033179">"บลูทูธ, โหมดขับรถ, NFC"</string>
+ <string name="connected_devices_dashboard_summary" msgid="1072664369515033179">"บลูทูธ โหมดขับรถ NFC"</string>
<string name="connected_devices_dashboard_no_nfc_summary" msgid="2610085597733526722">"บลูทูธ, โหมดขับรถ"</string>
<string name="connected_devices_dashboard_no_driving_mode_summary" msgid="3524409078596318803">"บลูทูธ, NFC"</string>
<string name="connected_devices_dashboard_no_driving_mode_no_nfc_summary" msgid="7881286613528299400">"บลูทูธ"</string>
@@ -3159,7 +3161,7 @@
<string name="emergency_tone_alert" msgid="907868135091891015">"มีเสียง"</string>
<string name="emergency_tone_vibrate" msgid="5020068066905681181">"การสั่น"</string>
<string name="boot_sounds_title" msgid="7583926202411353620">"เสียงเปิดเครื่อง"</string>
- <string name="live_caption_title" msgid="7926591158657997051">"คำบรรยายภาพสด"</string>
+ <string name="live_caption_title" msgid="7926591158657997051">"คำบรรยายสด"</string>
<string name="live_caption_summary" msgid="9064771862352393125">"แสดงคำบรรยายสื่อโดยอัตโนมัติ"</string>
<string name="zen_mode_settings_summary_off" msgid="6929319200478424962">"ไม่เลย"</string>
<plurals name="zen_mode_settings_summary_on" formatted="false" msgid="6061723291126091396">
@@ -3185,7 +3187,7 @@
<string name="zen_mode_automation_suggestion_title" msgid="4921779962633710347">"ปิดเสียงโทรศัพท์ในบางช่วงเวลา"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="2709837472884371037">"ตั้งกฎห้ามรบกวน"</string>
<string name="zen_mode_schedule_title" msgid="5275268813192802631">"กำหนดเวลา"</string>
- <string name="zen_mode_use_automatic_rule" msgid="446326253915861824">"ใช้กำหนดเวลา"</string>
+ <string name="zen_mode_use_automatic_rule" msgid="446326253915861824">"ใช้กำหนดการ"</string>
<string name="zen_mode_option_important_interruptions" msgid="5173944276846940149">"เฉพาะเรื่องสำคัญ"</string>
<string name="zen_mode_option_alarms" msgid="4843278125235203076">"เฉพาะปลุกเท่านั้น"</string>
<string name="zen_mode_option_no_interruptions" msgid="4723700274519260852">"ปิดเสียงทั้งหมด"</string>
@@ -3304,10 +3306,10 @@
<string name="hide_silent_icons_title" msgid="1070905516921542662">"ซ่อนไอคอนสถานะการแจ้งเตือนแบบไม่มีเสียง"</string>
<string name="hide_silent_icons_summary" msgid="2624346914488256888">"ซ่อนไอคอนสำหรับการแจ้งเตือนแบบไม่มีเสียงในแถบสถานะ"</string>
<string name="notification_badging_title" msgid="6311699476970264712">"อนุญาตให้ใช้จุดแจ้งเตือน"</string>
- <string name="notification_bubbles_title" msgid="9196562435741861317">"ลูกโป่ง"</string>
+ <string name="notification_bubbles_title" msgid="9196562435741861317">"บับเบิล"</string>
<string name="notification_bubbles_summary" msgid="4624512775901949578">"เข้าถึงเนื้อหาแอปอย่างรวดเร็วได้จากทุกที่โดยใช้ทางลัดแบบลอย"</string>
<string name="bubbles_feature_education" msgid="8979109826818881018">"การแจ้งเตือนบางรายการและเนื้อหาอื่นอาจแสดงเป็นลูกโป่งในหน้าจอได้ แตะลูกโป่งเพื่อเปิด ลากลูกโป่งลงไปที่ด้านล่างของหน้าจอเพื่อปิด"</string>
- <string name="bubbles_app_toggle_title" msgid="6401217027603326439">"ลูกโป่ง"</string>
+ <string name="bubbles_app_toggle_title" msgid="6401217027603326439">"บับเบิล"</string>
<string name="bubbles_app_toggle_summary" msgid="7707611139796553855">"อนุญาตให้ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" แสดงการแจ้งเตือนบางรายการเป็นลูกโป่ง"</string>
<string name="bubbles_feature_disabled_dialog_title" msgid="3375452386012079293">"เปิดลูกโป่ง"</string>
<string name="bubbles_feature_disabled_dialog_text" msgid="326945485806386477">"หากต้องการเปิดลูกโป่งของแอปนี้ คุณต้องเปิดลูกโป่งของอุปกรณ์ก่อน การดำเนินการนี้จะส่งผลต่อแอปอื่นๆ ที่คุณเปิดลูกโป่งไว้ก่อนหน้านี้"</string>
@@ -3433,14 +3435,14 @@
<string name="notification_channel_sound_title" msgid="7635366839003304745">"เสียง"</string>
<string name="zen_mode_rule_delete_button" msgid="6763486487220471193">"ลบ"</string>
<string name="zen_mode_rule_rename_button" msgid="1428130397306726792">"เปลี่ยนชื่อ"</string>
- <string name="zen_mode_rule_name" msgid="8583652780885724670">"ชื่อกำหนดเวลา"</string>
- <string name="zen_mode_rule_name_hint" msgid="6569877315858105901">"ระบุชื่อกำหนดเวลา"</string>
- <string name="zen_mode_rule_name_warning" msgid="4773465816059587512">"มีการใช้ชื่อกำหนดเวลานี้แล้ว"</string>
+ <string name="zen_mode_rule_name" msgid="8583652780885724670">"ชื่อกำหนดการ"</string>
+ <string name="zen_mode_rule_name_hint" msgid="6569877315858105901">"ระบุชื่อกำหนดการ"</string>
+ <string name="zen_mode_rule_name_warning" msgid="4773465816059587512">"มีการใช้ชื่อกำหนดการนี้แล้ว"</string>
<string name="zen_mode_add_rule" msgid="7200004557856029928">"เพิ่มอีก"</string>
<string name="zen_mode_add_event_rule" msgid="1398181272397489506">"เพิ่มกำหนดการตามกิจกรรม"</string>
<string name="zen_mode_add_time_rule" msgid="5999467757140524729">"เพิ่มกำหนดการตามเวลา"</string>
<string name="zen_mode_delete_rule" msgid="2292933835997203801">"ลบกำหนดเวลา"</string>
- <string name="zen_mode_choose_rule_type" msgid="8877138307319450306">"เลือกประเภทกำหนดเวลา"</string>
+ <string name="zen_mode_choose_rule_type" msgid="8877138307319450306">"เลือกประเภทกำหนดการ"</string>
<string name="zen_mode_delete_rule_confirmation" msgid="2646596466259025978">"ลบกฎ \"<xliff:g id="RULE">%1$s</xliff:g>\" ใช่ไหม"</string>
<string name="zen_mode_delete_rule_button" msgid="611058106279881991">"ลบ"</string>
<string name="zen_mode_rule_type_unknown" msgid="2819480113355191421">"ไม่ทราบ"</string>
@@ -3466,11 +3468,11 @@
<string name="zen_mode_schedule_rule_days" msgid="220627703673691816">"วัน"</string>
<string name="zen_mode_schedule_rule_days_none" msgid="6011716195119389956">"ไม่มี"</string>
<string name="zen_mode_schedule_rule_days_all" msgid="8814173364016139675">"ทุกวัน"</string>
- <string name="zen_mode_schedule_alarm_title" msgid="2078194049274875023">"เวลาปลุกจะแทนที่เวลาสิ้นสุดได้"</string>
- <string name="zen_mode_schedule_alarm_summary" msgid="5556997989911412070">"กำหนดเวลาจะปิดเมื่อนาฬิกาปลุกดังขึ้น"</string>
+ <string name="zen_mode_schedule_alarm_title" msgid="2078194049274875023">"การปลุกจะแทนที่เวลาสิ้นสุดได้"</string>
+ <string name="zen_mode_schedule_alarm_summary" msgid="5556997989911412070">"กำหนดการจะปิดเมื่อนาฬิกาปลุกดังขึ้น"</string>
<string name="zen_mode_custom_behavior_title" msgid="8908861697886331001">"ลักษณะการทำงานของโหมดห้ามรบกวน"</string>
<string name="zen_mode_custom_behavior_summary_default" msgid="3509865340195397447">"ใช้การตั้งค่าเริ่มต้น"</string>
- <string name="zen_mode_custom_behavior_summary" msgid="7206909852887332604">"สร้างการตั้งค่าที่กำหนดเองสำหรับกำหนดเวลานี้"</string>
+ <string name="zen_mode_custom_behavior_summary" msgid="7206909852887332604">"สร้างการตั้งค่าที่กำหนดเองสำหรับกำหนดการนี้"</string>
<string name="zen_mode_custom_behavior_category_title" msgid="7451686525113262087">"สำหรับ \"<xliff:g id="SCHEDULE_NAME">%1$s</xliff:g>\""</string>
<string name="summary_divider_text" msgid="4780683204694442666">", "</string>
<string name="summary_range_symbol_combination" msgid="6038631664844488406">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
@@ -3648,7 +3650,7 @@
<string name="tap_to_wake" msgid="1902991239401652323">"แตะเพื่อปลุก"</string>
<string name="tap_to_wake_summary" msgid="8485222120721006793">"แตะที่ใดก็ได้บนหน้าจอ 2 ครั้งเพื่อปลุกอุปกรณ์"</string>
<string name="domain_urls_title" msgid="7939209950373945367">"การเปิดลิงก์"</string>
- <string name="domain_urls_summary_none" msgid="5401203416941265109">"อย่าเปิดลิงก์ที่สนับสนุน"</string>
+ <string name="domain_urls_summary_none" msgid="5401203416941265109">"อย่าเปิดลิงก์ที่รองรับ"</string>
<string name="domain_urls_summary_one" msgid="3893975485064803435">"เปิด <xliff:g id="DOMAIN">%s</xliff:g>"</string>
<string name="domain_urls_summary_some" msgid="2130534984153210797">"เปิด <xliff:g id="DOMAIN">%s</xliff:g> และ URL อื่นๆ"</string>
<string name="domain_urls_apps_summary_off" msgid="1110203970617922543">"ไม่มีแอปใดเปิดลิงก์ที่รองรับได้เลย"</string>
@@ -3710,7 +3712,7 @@
<string name="high_power_system" msgid="739584574711292753">"การเพิ่มประสิทธิภาพแบตเตอรี่ไม่พร้อมใช้งาน"</string>
<string name="high_power_desc" msgid="333756885680362741">"ไม่ใช้การเพิ่มประสิทธิภาพแบตเตอรี่ อาจทำให้แบตเตอรี่หมดเร็วยิ่งขึ้น"</string>
<string name="high_power_prompt_title" msgid="2805745781720454052">"ให้แอปทำงานในพื้นหลังทุกครั้งไหม"</string>
- <string name="high_power_prompt_body" msgid="8067395096053552289">"การอนุญาตให้ <xliff:g id="APP_NAME">%1$s</xliff:g> ทำงานในพื้นหลังทุกครั้งอาจลดอายุการใช้งานแบตเตอรี่ \n\nคุณสามารถเปลี่ยนการตั้งค่านี้ได้ในภายหลังจากการตั้งค่า > แอปและการแจ้งเตือน"</string>
+ <string name="high_power_prompt_body" msgid="8067395096053552289">"การอนุญาตให้ \"<xliff:g id="APP_NAME">%1$s</xliff:g>\" ทำงานอยู่เบื้องหลังทุกครั้งอาจลดอายุการใช้งานแบตเตอรี่ \n\nคุณเปลี่ยนการตั้งค่านี้ได้ในภายหลังจากการตั้งค่า > แอปและการแจ้งเตือน"</string>
<string name="battery_summary" msgid="4345690800899981339">"ใช้ <xliff:g id="PERCENTAGE">%1$s</xliff:g> ตั้งแต่ชาร์จจนเต็มครั้งล่าสุด"</string>
<string name="battery_power_management" msgid="2853925857548647969">"การจัดการพลังงาน"</string>
<string name="no_battery_summary" msgid="4105932628367471314">"ไม่มีการใช้แบตเตอรี่ตั้งแต่การชาร์จเต็มครั้งล่าสุด"</string>
@@ -3828,7 +3830,7 @@
<string name="camera_gesture_desc" msgid="7751841175916789527">"เปิดแอปกล้องถ่ายรูปโดยบิดข้อมือ 2 ครั้ง"</string>
<string name="camera_double_tap_power_gesture_title" msgid="8874747801078147525">"กดปุ่มเปิด/ปิด 2 ครั้งสำหรับกล้อง"</string>
<string name="camera_double_tap_power_gesture_desc" msgid="6166349645433682873">"เปิดกล้องอย่างรวดเร็วโดยไม่ต้องปลดล็อกหน้าจอ"</string>
- <string name="screen_zoom_title" msgid="164369086350486104">"ขนาดที่แสดง"</string>
+ <string name="screen_zoom_title" msgid="164369086350486104">"ขนาดการแสดงผล"</string>
<string name="screen_zoom_short_summary" msgid="5508079362742276703">"ทำให้รายการบนหน้าจอมีขนาดใหญ่ขึ้นหรือเล็กลง"</string>
<string name="screen_zoom_keywords" msgid="8358462497896524092">"ความหนาแน่นในการแสดงผล, ซูมหน้าจอ, ระดับ, การปรับระดับ"</string>
<string name="screen_zoom_summary" msgid="5294003755961312560">"ปรับขนาดข้อความบนหน้าจอให้เล็กลงหรือใหญ่ขึ้น แอปบางส่วนบนหน้าจออาจเปลี่ยนตำแหน่ง"</string>
@@ -3951,7 +3953,7 @@
<item quantity="other">ข้อจำกัด <xliff:g id="COUNT">%1$d</xliff:g> ข้อ</item>
<item quantity="one">ข้อจำกัด 1 ข้อ</item>
</plurals>
- <string name="operator_warning" msgid="4676042739221117031">"การบันทึกบัญชีข้อมูลของผู้ให้บริการอาจแตกต่างจากการบันทึกบัญชีของอุปกรณ์"</string>
+ <string name="operator_warning" msgid="4676042739221117031">"การบันทึกการใช้อินเทอร์เน็ตของผู้ให้บริการอาจแตกต่างไปจากการบันทึกในอุปกรณ์"</string>
<string name="data_used_template" msgid="761605393453849477">"ใช้ไป <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="set_data_warning" msgid="8115980184415563941">"ตั้งค่าเตือนการใช้อินเทอร์เน็ต"</string>
<string name="data_warning" msgid="2699207195535036240">"เตือนปริมาณอินเทอร์เน็ต"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"หากอุปกรณ์ล็อกอยู่ จะป้องกันไม่ให้มีการพิมพ์คำตอบหรือข้อความอื่นๆ ในการแจ้งเตือน"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"โปรแกรมตรวจตัวสะกดเริ่มต้น"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"เลือกโปรแกรมตรวจตัวสะกด"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"ใช้โปรแกรมตรวจตัวสะกด"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"ใช้โปรแกรมตรวจตัวสะกด"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"ไม่ได้เลือก"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(ไม่มี)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"ตัวจัดการพื้นที่เก็บข้อมูลจะนำรูปภาพและวิดีโอที่สำรองไว้ออกจากอุปกรณ์ของคุณ เพื่อช่วยเพิ่มพื้นที่เก็บข้อมูล"</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"นำรูปภาพและวิดีโอออก"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"ตัวจัดการพื้นที่เก็บข้อมูล"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"ใช้ตัวจัดการพื้นที่เก็บข้อมูล"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"ใช้ตัวจัดการพื้นที่เก็บข้อมูล"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"อัตโนมัติ"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"คู่มือ"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"เพิ่มพื้นที่ว่างเลย"</string>
@@ -4249,7 +4251,7 @@
<string name="app_info_storage_title" msgid="6643391804949509308">"พื้นที่ที่ใช้ไป"</string>
<string name="webview_uninstalled_for_user" msgid="3407952144444040557">"(ถอนการติดตั้งแล้วสำหรับ <xliff:g id="USER">%s</xliff:g>)"</string>
<string name="webview_disabled_for_user" msgid="8057805373224993504">"(ปิดใช้อยู่สำหรับ <xliff:g id="USER">%s</xliff:g>)"</string>
- <string name="autofill_app" msgid="3990765434980280073">"บริการป้อนอัตโนมัติ"</string>
+ <string name="autofill_app" msgid="3990765434980280073">"บริการป้อนข้อความอัตโนมัติ"</string>
<string name="autofill_keywords" msgid="7717726766232862218">"ป้อน, อัตโนมัติ, ป้อนอัตโนมัติ"</string>
<string name="autofill_confirmation_message" msgid="1385894598730361304">"<b>ตรวจดูว่าคุณเชื่อถือแอปนี้ได้</b> <br/> <br/> <xliff:g id=app_name example=Google ป้อนอัตโนมัติ>%1$s</xliff:g> ใช้สิ่งที่อยู่บนหน้าจอเพื่อดูว่าจะป้อนข้อมูลใดโดยอัตโนมัติได้บ้าง"</string>
<string name="debug_autofill_category" msgid="6262526615416295645">"ป้อนอัตโนมัติ"</string>
diff --git a/tests/CarDeveloperOptions/res/values-tl/arrays.xml b/tests/CarDeveloperOptions/res/values-tl/arrays.xml
index 87099a2..de090b6 100644
--- a/tests/CarDeveloperOptions/res/values-tl/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-tl/arrays.xml
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"patakbuhin sa background"</item>
<item msgid="6423861043647911030">"dami ng pagiging naa-access"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Lokasyon"</item>
+ <item msgid="6656077694190491067">"Lokasyon"</item>
+ <item msgid="8790228218278477369">"Lokasyon"</item>
+ <item msgid="7836406246005211990">"Pag-vibrate"</item>
+ <item msgid="3951439024549922598">"Magbasa ng mga contact"</item>
+ <item msgid="8802152411647068">"Baguhin ang mga contact"</item>
+ <item msgid="229544934599698735">"Basahin ang log ng tawag"</item>
+ <item msgid="7396102294405899613">"Baguhin ang log ng tawag"</item>
+ <item msgid="3597797992398484655">"Magbasa ng kalendaryo"</item>
+ <item msgid="2705975774250907343">"Baguhin ang kalendaryo"</item>
+ <item msgid="4668747371441932697">"Lokasyon"</item>
+ <item msgid="1487578921720243646">"Mag-post ng notification"</item>
+ <item msgid="4636080349724146638">"Lokasyon"</item>
+ <item msgid="673510900286463926">"Tumawag sa telepono"</item>
+ <item msgid="542083422784609790">"Magbasa ng SMS/MMS"</item>
+ <item msgid="1033780373029588436">"Magsulat ng SMS/MMS"</item>
+ <item msgid="5647111115517787488">"Tumanggap ng SMS/MMS"</item>
+ <item msgid="8591105601108455893">"Tumanggap ng SMS/MMS"</item>
+ <item msgid="7730995008517841903">"Tumanggap ng SMS/MMS"</item>
+ <item msgid="2613033109026626086">"Tumanggap ng SMS/MMS"</item>
+ <item msgid="3037159047591081136">"Magpadala ng SMS/MMS"</item>
+ <item msgid="4726682243833913568">"Magbasa ng SMS/MMS"</item>
+ <item msgid="6555678522277865572">"Magsulat ng SMS/MMS"</item>
+ <item msgid="6981734935578130884">"Baguhin ang mga setting"</item>
+ <item msgid="8705854389991425629">"Gumuhit sa tuktok"</item>
+ <item msgid="5861356020344153651">"I-access ang mga notification"</item>
+ <item msgid="78432174621628659">"Camera"</item>
+ <item msgid="3986116419882154794">"I-record ang audio"</item>
+ <item msgid="4516840825756409490">"I-play ang audio"</item>
+ <item msgid="6811712502798183957">"Basahin ang clipboard"</item>
+ <item msgid="2780369012602289114">"Baguhin ang clipboard"</item>
+ <item msgid="2331359440170850868">"Mga media button"</item>
+ <item msgid="6133599737122751231">"Focus ng audio"</item>
+ <item msgid="6844485713404805301">"Master volume"</item>
+ <item msgid="1600379420669104929">"Volume ng boses"</item>
+ <item msgid="6296768210470214866">"Volume ng pag-ring"</item>
+ <item msgid="510690696071629241">"Volume ng media"</item>
+ <item msgid="406861638631430109">"Volume ng alarm"</item>
+ <item msgid="4715864795872233884">"Volume ng notification"</item>
+ <item msgid="2311478519251301183">"Volume ng Bluetooth"</item>
+ <item msgid="5133991377896747027">"Panatilihing bukas"</item>
+ <item msgid="2464189519136248621">"Lokasyon"</item>
+ <item msgid="2062677934050803037">"Lokasyon"</item>
+ <item msgid="1735171933192715957">"Kumuha ng stats sa paggamit"</item>
+ <item msgid="1014093788778383554">"I-mute/i-unmute ang mikropono"</item>
+ <item msgid="4199297950608622850">"Ipakita ang toast"</item>
+ <item msgid="2527962435313398821">"I-project ang media"</item>
+ <item msgid="5117506254221861929">"I-activate ang VPN"</item>
+ <item msgid="8291198322681891160">"Write wallpaper"</item>
+ <item msgid="7106921284621230961">"Assist structure"</item>
+ <item msgid="4496533640894624799">"Assist screenshot"</item>
+ <item msgid="2598847264853993611">"Basahin ang katayuan ng telepono"</item>
+ <item msgid="9215610846802973353">"Magdagdag ng voicemail"</item>
+ <item msgid="9186411956086478261">"Gamitin ang sip"</item>
+ <item msgid="6884763100104539558">"Iproseso ang papalabas na tawag"</item>
+ <item msgid="125513972170580692">"Fingerprint"</item>
+ <item msgid="2556071024281275619">"Mga sensor ng katawan"</item>
+ <item msgid="617168514928339387">"Basahin ang mga cell broadcast"</item>
+ <item msgid="7134693570516523585">"Kunwaring lokasyon"</item>
+ <item msgid="7224489175375229399">"Basahin ang storage"</item>
+ <item msgid="8472735063903258202">"I-write ang storage"</item>
+ <item msgid="4069276819909595110">"I-on ang screen"</item>
+ <item msgid="1228338896751121025">"Kunin ang mga account"</item>
+ <item msgid="3181581793459233672">"Patakbuhin sa background"</item>
+ <item msgid="2340936043025374076">"Dami ng pagiging naa-access"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Maikli"</item>
<item msgid="4816511817309094890">"Katamtaman"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Huwag kailanman payagan"</item>
<item msgid="8184570120217958741">"Palaging payagan"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normal"</item>
+ <item msgid="5101233285497327432">"Katamtaman"</item>
+ <item msgid="1555861583162930714">"Mababa"</item>
+ <item msgid="1719683776264798117">"Kritikal"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normal"</item>
+ <item msgid="6107138933849816768">"Katamtaman"</item>
+ <item msgid="182695359839047859">"Mababa"</item>
+ <item msgid="8577246509202964244">"Kritikal"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Tuluy-tuloy"</item>
<item msgid="167418068739176448">"Nangungunang gawain"</item>
diff --git a/tests/CarDeveloperOptions/res/values-tl/strings.xml b/tests/CarDeveloperOptions/res/values-tl/strings.xml
index 440bf79..05ecc75 100644
--- a/tests/CarDeveloperOptions/res/values-tl/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-tl/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Gawing mas maliit o mas malaki ang text sa screen."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Paliitin"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Palakihin"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Sample na text"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"The Wonderful Wizard of Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Kabanata 11: The Wonderful Emerald City of Oz"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Info sa profile"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Mga Account"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Lokasyon"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Gumamit ng lokasyon"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Gumamit ng lokasyon"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Naka-off"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">Naka-on - <xliff:g id="COUNT_1">%1$d</xliff:g> (na) app ang makaka-access sa lokasyon</item>
@@ -489,7 +488,7 @@
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"Naku, hindi iyan ang sensor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"Pindutin ang sensor sa likod ng iyong telepono. Gamitin ang hintuturo mo."</string>
<string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"Hindi nakumpleto ang pagpapatala"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Naabot na ang limitasyon sa oras ng pagpapatala ng fingerprint. Subukang muli."</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Naabot na ang limitasyon sa oras ng pag-enroll ng fingerprint. Subukan ulit."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"Hindi gumana ang pagpapatala ng fingerprint. Subukang muli o gumamit ng ibang daliri."</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"Magdagdag ng isa pa"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"Susunod"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"I-on ang Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Gumamit ng Wi‑Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Gumamit ng Wi‑Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Mga setting ng Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Mag-set up & mamahala ng mga wireless na access point"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Mobile"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Kung hindi available ang Wi‑Fi, gamitin ang mobile network"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Kung hindi available ang mobile network, gamitin ang Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Tumawag gamit ang Wi‑Fi. Kung mawawala ang Wi‑Fi, matatapos ang tawag."</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Pag-vibrate kapag may notification"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Pag-vibrate kapag nag-ring"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Pag-vibrate sa pagpindot"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Gamitin ang serbisyo"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Gumamit ng pagwawasto ng kulay"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Gumamit ng mga caption"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Gamitin ang serbisyo"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Gumamit ng pagtatama ng kulay"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Gumamit ng mga caption"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Magpatuloy"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Mga hearing aid"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Walang nakakonektang hearing aid"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"I-on"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Gumamit ng Pangtipid sa Baterya"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Gumamit ng Pantipid ng Baterya"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Awtomatikong i-on"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Hindi Kailanman"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"sa <xliff:g id="PERCENT">%1$s</xliff:g> baterya"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Kung naka-lock ang device, iwasang mag-type ng mga tugon o iba pang text sa mga notification"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Default na spell checker"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Pumili ng spell checker"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Gamitin ang spell checker"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Gamitin ang spell checker"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Hindi napili"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(wala)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Upang tumulong na magbakante ng space sa storage, inaalis ng storage manager ang mga naka-back up na larawan at video mula sa iyong device."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Alisin ang mga larawan at video"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Storage manager"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Gumamit ng Storage manager"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Gumamit ng Storage manager"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Awtomatiko"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manual"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Magbakante ng espasyo ngayon"</string>
diff --git a/tests/CarDeveloperOptions/res/values-tr/arrays.xml b/tests/CarDeveloperOptions/res/values-tr/arrays.xml
index af817b5..6b1d63c 100644
--- a/tests/CarDeveloperOptions/res/values-tr/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-tr/arrays.xml
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"Asla izin verme"</item>
<item msgid="8184570120217958741">"Her zaman izin ver"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normal"</item>
+ <item msgid="5101233285497327432">"Orta"</item>
+ <item msgid="1555861583162930714">"Düşük"</item>
+ <item msgid="1719683776264798117">"Kritik düzeyde"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normal"</item>
+ <item msgid="6107138933849816768">"Orta"</item>
+ <item msgid="182695359839047859">"Düşük"</item>
+ <item msgid="8577246509202964244">"Kritik düzeyde"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Kalıcı"</item>
<item msgid="167418068739176448">"En üstteki etkinlik"</item>
@@ -463,8 +473,8 @@
</string-array>
<string-array name="wifi_metered_entries">
<item msgid="4329206416008519163">"Otomatik olarak algıla"</item>
- <item msgid="773943026484148895">"Sınırlı olarak ele al"</item>
- <item msgid="1008268820118852416">"Sınırsız olarak ele al"</item>
+ <item msgid="773943026484148895">"Sınırlı gibi kullan"</item>
+ <item msgid="1008268820118852416">"Sınırsız gibi kullan"</item>
</string-array>
<string-array name="wifi_privacy_entries">
<item msgid="6545683814310036454">"Rastgele MAC kullan (varsayılan)"</item>
diff --git a/tests/CarDeveloperOptions/res/values-tr/strings.xml b/tests/CarDeveloperOptions/res/values-tr/strings.xml
index 89e58f7..9471677 100644
--- a/tests/CarDeveloperOptions/res/values-tr/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-tr/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Ekrandaki metni daha küçük veya daha büyük yapın."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Küçült"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Büyüt"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Örnek metin"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Muhteşem Oz Büyücüsü"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"11. Bölüm: Oz\'un Muhteşem Zümrüt Kenti"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Profil bilgisi"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Hesaplar"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Konum"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Konumu kullan"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Konumu kullan"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Kapalı"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Açık - <xliff:g id="COUNT_1">%1$d</xliff:g> uygulama, konuma erişebilir</item>
@@ -422,7 +421,7 @@
<string name="security_settings_face_settings_use_face_for_apps" msgid="5479369083370664351">"Uygulamada oturum açma ve ödemeler"</string>
<string name="security_settings_face_settings_require_attention" msgid="2755140150841557225">"Kilidi açmak için gözler açık"</string>
<string name="security_settings_face_settings_require_attention_details" msgid="2557060433599942587">"Yüzle kimlik doğrulamayı kullanırken gözleriniz açık olmalıdır"</string>
- <string name="security_settings_face_settings_require_confirmation" msgid="7312024271060416438">"Her zaman onay gerektir"</string>
+ <string name="security_settings_face_settings_require_confirmation" msgid="7312024271060416438">"Her zaman onay gerekli"</string>
<string name="security_settings_face_settings_require_confirmation_details" msgid="8740564864091803429">"Uygulamalarda kimlik doğrulaması yapılırken her zaman onay gerektir"</string>
<string name="security_settings_face_settings_remove_face_data" msgid="2821359954483136239">"Yüz verisini kaldır"</string>
<string name="security_settings_face_settings_footer" msgid="4627175759990550715">"Yüzünüzü kullanarak cihazınızın kilidini açabilir ve uygulamalara erişebilirsiniz. "<annotation id="url">"Daha fazla bilgi"</annotation></string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Kablosuz"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Kablosuz\'u aç"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Kablosuz"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Kablosuz bağlantıyı kullan"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Kablosuz bağlantıyı kullan"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Kablosuz ayarları"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Kablosuz"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Kablosuz erişim noktalarını kur ve yönet"</string>
@@ -849,7 +848,7 @@
<string name="wifi_in_airplane_mode" msgid="4729571191578262246">"Uçak modunda"</string>
<string name="wifi_notify_open_networks" msgid="4782239203624619655">"Açık ağ bildirimi"</string>
<string name="wifi_notify_open_networks_summary" msgid="1383681260705466715">"Herkese açık yüksek kaliteli bir ağ kullanılabilir olduğunda bildir"</string>
- <string name="wifi_wakeup" msgid="4963732992164721548">"Kablosuz özelliğini otomatik olarak aç"</string>
+ <string name="wifi_wakeup" msgid="4963732992164721548">"Kablosuz ağı otomatik olarak aç"</string>
<string name="wifi_wakeup_summary" msgid="1152699417411690">"Ev ağınız gibi yüksek kaliteli kayıtlı ağların yakınında olduğunuzda kablosuz özelliği tekrar açılır"</string>
<string name="wifi_wakeup_summary_no_location" msgid="3007457288587966962">"Konum kapalı olduğundan kullanılamıyor. "<annotation id="link">"Konum"</annotation>"\'u açın."</string>
<string name="wifi_wakeup_summary_scanning_disabled" msgid="6820040651529910914">"Kablosuz ağ taraması kapalı olduğu için kullanılamıyor"</string>
@@ -878,7 +877,7 @@
<string name="wifi_add_network" msgid="4094957940791876640">"Ağ ekle"</string>
<string name="wifi_configure_settings_preference_title" msgid="2678534679408777268">"Kablosuz tercihleri"</string>
<string name="wifi_configure_settings_preference_summary_wakeup_on" msgid="5714892572614655675">"Kablosuz özelliği otomatik olarak tekrar açılır"</string>
- <string name="wifi_configure_settings_preference_summary_wakeup_off" msgid="286904094152909651">"Kablosuz özelliği otomatik olarak tekrar açılmaz"</string>
+ <string name="wifi_configure_settings_preference_summary_wakeup_off" msgid="286904094152909651">"Kablosuz ağ otomatik olarak tekrar açılmaz"</string>
<string name="wifi_access_points" msgid="1647976498906871869">"Kablosuz ağlar"</string>
<string name="wifi_menu_more_options" msgid="8318269834264035524">"Diğer seçenekler"</string>
<string name="wifi_menu_p2p" msgid="4945665601551289791">"Kablosuz Doğrudan Bağlantı"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Kablosuz"</item>
+ <item msgid="2271962426654621656">"Mobil"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Kablosuz ağ bağlantısı kullanılamıyorsa mobil ağı kullanın"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Mobil ağ kullanılamıyorsa kablosuz ağı kullan"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Kablosuz ağ üzerinden çağrı. Kablosuz ağ bağlantısı kesilirse çağrı sonlandırılır."</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Bildirim titreşimi"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Zili çaldırma titreşimi"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Dokunma titreşimi"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Hizmeti kulan"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Renk düzeltme işlevini kullan"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Altyazıları kullan"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Hizmeti kulan"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Renk düzeltme özelliğini kullan"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Altyazıları kullan"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Devam"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"İşitme cihazları"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Bağlı işitme cihazı yok"</string>
@@ -2296,8 +2298,8 @@
<item quantity="one">%1$s yakın zamanda kısıtlandı</item>
</plurals>
<plurals name="battery_tip_restrict_summary" formatted="false" msgid="984148373944071669">
- <item quantity="other">%2$d uygulama yüksek düzeyde arka plan pil kullanımına yol açıyor</item>
- <item quantity="one">%1$s yüksek düzeyde arka plan pil kullanımına yol açıyor</item>
+ <item quantity="other">%2$d uygulama arka planda yüksek düzeyde pil kullanıyor</item>
+ <item quantity="one">%1$s arka planda yüksek düzeyde pil kullanıyor</item>
</plurals>
<plurals name="battery_tip_restrict_handled_summary" formatted="false" msgid="469696766640020557">
<item quantity="other">Bu uygulamalar arka planda çalışamaz</item>
@@ -2450,7 +2452,7 @@
<string name="battery_saver_auto_routine" msgid="886514412067906980">"Rutininize göre"</string>
<string name="battery_saver_auto_percentage" msgid="5791982309331921556">"Yüzdeye göre"</string>
<string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"Piliniz, genellikle şarj ettiğiniz saatten önce bitecek gibiyse Pil Tasarrufu etkinleştirilir"</string>
- <string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"<xliff:g id="PERCENT">%1$s</xliff:g> düzeyinde açılacak"</string>
+ <string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"Pil <xliff:g id="PERCENT">%1$s</xliff:g> olduğunda açılacak"</string>
<string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Bir plan belirleyin"</string>
<string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"Tam olarak şarj edildiğinde kapat"</string>
<string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"Pil Tasarrufu, telefonunuzun gücü <xliff:g id="PERCENT">%1$s</xliff:g> olduğunda kapanır"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Aç"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Pil Tasarrufu\'nu kullan"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Pil Tasarrufu\'nu kullan"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Otomatik olarak aç"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Hiçbir zaman"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"<xliff:g id="PERCENT">%1$s</xliff:g> pil gücü"</string>
@@ -2735,7 +2737,7 @@
<string name="data_usage_metered_yes" msgid="7333744880035386073">"Sınırlı"</string>
<string name="data_usage_metered_no" msgid="1961524615778610008">"Sınırsız"</string>
<string name="data_usage_disclaimer" msgid="4683321532922590425">"Operatörünüzün veri hesaplaması, cihazınızınkinden farklı olabilir."</string>
- <string name="cryptkeeper_emergency_call" msgid="4625420047524693116">"Acil durum çağrısı"</string>
+ <string name="cryptkeeper_emergency_call" msgid="4625420047524693116">"Acil durum araması"</string>
<string name="cryptkeeper_return_to_call" msgid="4433942821196822815">"Çağrıya dön"</string>
<string name="vpn_name" msgid="3538818658670774080">"Ad"</string>
<string name="vpn_type" msgid="6389116710008658550">"Tür"</string>
@@ -2868,7 +2870,7 @@
<string name="user_add_user_item_title" msgid="6835385073795492410">"Kullanıcı"</string>
<string name="user_add_profile_item_title" msgid="4932743891449790664">"Kısıtlı profil"</string>
<string name="user_add_user_title" msgid="2320897397066676472">"Yeni kullanıcı eklensin mi?"</string>
- <string name="user_add_user_message_long" msgid="686637203224195465">"Ek kullanıcılar oluşturarak bu cihazı başkalarıyla paylaşabilirsiniz. Her kullanıcının uygulamalarla, duvar kağıdıyla ve başka ayarlarla özelleştirebileceği kendi alanı olur. Kullanıcılar ayrıca kablosuz ağ gibi herkesi etkileyen cihaz ayarlarını değiştirebilirler.\n\nYeni bir kullanıcı eklediğinizde, ilgili kişinin kendi alanını ayarlaması gerekir.\n\nHer kullanıcı diğer tüm kullanıcılar için uygulamaları güncelleyebilir."</string>
+ <string name="user_add_user_message_long" msgid="686637203224195465">"Ek kullanıcılar oluşturarak bu cihazı başkalarıyla paylaşabilirsiniz. Her kullanıcının uygulamalarla, duvar kağıdıyla ve başka ayarlarla özelleştirebileceği kendi alanı olur. Kullanıcılar ayrıca kablosuz ağ gibi herkesi etkileyen cihaz ayarlarını değiştirebilirler.\n\nYeni bir kullanıcı eklediğinizde, ilgili kişinin kendi alanını ayarlaması gerekir.\n\nHer kullanıcı diğer tüm kullanıcılar için uygulamaları güncelleyebilir. Erişilebilirlik ayarları ve hizmetleri yeni kullanıcıya aktarılamayabilir."</string>
<string name="user_add_user_message_short" msgid="1802594476285458254">"Yeni bir kullanıcı eklediğinizde, bu kişinin kendi alanını ayarlaması gerekir.\n\nHerhangi bir kullanıcı, diğer tüm kullanıcılar için uygulamaları güncelleyebilir."</string>
<string name="user_setup_dialog_title" msgid="6748950002206392396">"Kullanıcı şimdi ayarlansın mı?"</string>
<string name="user_setup_dialog_message" msgid="2988559933258353919">"İlgili kişinin cihazı almak ve kendi alanını ayarlamak için müsait olduğundan emin olun"</string>
@@ -3709,7 +3711,7 @@
<string name="high_power_off" msgid="5906679734326490426">"Pil kullanımı optimize ediliyor"</string>
<string name="high_power_system" msgid="739584574711292753">"Pil optimizasyonu kullanılamıyor"</string>
<string name="high_power_desc" msgid="333756885680362741">"Pil optimizasyonu uygulanmasın. Bu seçenek, pilinizi daha hızlı tüketebilir."</string>
- <string name="high_power_prompt_title" msgid="2805745781720454052">"Uygulamanın her zaman arka planda çalıştırılmasına izin verilsin mi?"</string>
+ <string name="high_power_prompt_title" msgid="2805745781720454052">"Uygulama arka planda çalışmaya devam etsin mi?"</string>
<string name="high_power_prompt_body" msgid="8067395096053552289">"<xliff:g id="APP_NAME">%1$s</xliff:g> uygulamasının her zaman arka planda çalıştırılmasına izin vermeniz pil ömrünü kısaltabilir. \n\nBunu daha sonra Ayarlar > Uygulamalar ve bildirimler seçeneğinden değiştirebilirsiniz."</string>
<string name="battery_summary" msgid="4345690800899981339">"Son kez tamamen şarj olduktan sonra <xliff:g id="PERCENTAGE">%1$s</xliff:g> kullanıldı"</string>
<string name="battery_power_management" msgid="2853925857548647969">"Güç yönetimi"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Cihaz kilitliyse, bildirimlerde yanıt yazmayı veya diğer metin girişlerini önle"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Varsayılan yazım denetleyici"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Yazım denetleyiciyi seçin"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Yazım denetleyici kullan"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Yazım denetleyiciyi kullan"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Seçili değil"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(yok)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Depolama alanında yer açmaya yardımcı olmak için depolama yöneticisi, yedeklenen fotoğrafları ve videoları cihazınızdan kaldırır."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Fotoğrafları ve videoları kaldır"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Depolama yöneticisi"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Depolama yöneticisini kullan"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Depolama yöneticisini kullan"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Otomatik"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Manuel"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Şimdi yer boşalt"</string>
@@ -4321,7 +4323,7 @@
<string name="battery_suggestion_title" product="device" msgid="765005476863631528">"Cihazın pil ömrünü uzatın"</string>
<string name="battery_suggestion_title" product="default" msgid="3295786171830183688">"Telefonun pil ömrünü uzatın"</string>
<string name="battery_suggestion_summary" msgid="2669070349482656490"></string>
- <string name="gesture_prevent_ringing_screen_title" msgid="4173494225145223638">"Zilin çalmasını önle"</string>
+ <string name="gesture_prevent_ringing_screen_title" msgid="4173494225145223638">"Zilin çalmasını engelle"</string>
<string name="gesture_prevent_ringing_title" msgid="8827963588425673557">"Güç ve Sesi Artırma düğmelerine birlikte basın:"</string>
<string name="gesture_prevent_ringing_sound_title" msgid="8642330448721033641">"Zilin çalmasını engelleme kısayolu"</string>
<string name="prevent_ringing_option_vibrate" msgid="6456505293904544108">"Titret"</string>
diff --git a/tests/CarDeveloperOptions/res/values-uk/arrays.xml b/tests/CarDeveloperOptions/res/values-uk/arrays.xml
index 2409764..912df33 100644
--- a/tests/CarDeveloperOptions/res/values-uk/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-uk/arrays.xml
@@ -125,7 +125,7 @@
<item msgid="1709949377823900951">"Слабкий"</item>
<item msgid="7882129634982603782">"Слабкий"</item>
<item msgid="6457357501905996224">"Задовільний"</item>
- <item msgid="405271628162918841">"Добрий"</item>
+ <item msgid="405271628162918841">"Хороший"</item>
<item msgid="999948812884919584">"Відмінний"</item>
</string-array>
<string-array name="data_usage_data_range">
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"працювати у фоновому режимі"</item>
<item msgid="6423861043647911030">"спеціальні можливості: гучність"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Місцезнаходження"</item>
+ <item msgid="6656077694190491067">"Місцезнаходження"</item>
+ <item msgid="8790228218278477369">"Місцезнаходження"</item>
+ <item msgid="7836406246005211990">"Вібросигнал"</item>
+ <item msgid="3951439024549922598">"Читати контакти"</item>
+ <item msgid="8802152411647068">"Змінювати контакти"</item>
+ <item msgid="229544934599698735">"Читати журнал викликів"</item>
+ <item msgid="7396102294405899613">"Змінювати журнал викликів"</item>
+ <item msgid="3597797992398484655">"Перегляд календаря"</item>
+ <item msgid="2705975774250907343">"Змінювати календар"</item>
+ <item msgid="4668747371441932697">"Місцезнаходження"</item>
+ <item msgid="1487578921720243646">"Публікувати сповіщення"</item>
+ <item msgid="4636080349724146638">"Місцезнаходження"</item>
+ <item msgid="673510900286463926">"Телефонувати"</item>
+ <item msgid="542083422784609790">"Читати SMS/MMS"</item>
+ <item msgid="1033780373029588436">"Писати SMS/MMS"</item>
+ <item msgid="5647111115517787488">"Отримувати SMS/MMS"</item>
+ <item msgid="8591105601108455893">"Отримувати SMS/MMS"</item>
+ <item msgid="7730995008517841903">"Отримувати SMS/MMS"</item>
+ <item msgid="2613033109026626086">"Отримувати SMS/MMS"</item>
+ <item msgid="3037159047591081136">"Надсилати SMS/MMS"</item>
+ <item msgid="4726682243833913568">"Читати SMS/MMS"</item>
+ <item msgid="6555678522277865572">"Писати SMS/MMS"</item>
+ <item msgid="6981734935578130884">"Змінювати налаштування"</item>
+ <item msgid="8705854389991425629">"Відображати зверху"</item>
+ <item msgid="5861356020344153651">"Отримувати доступ до сповіщень"</item>
+ <item msgid="78432174621628659">"Камера"</item>
+ <item msgid="3986116419882154794">"Записувати аудіо"</item>
+ <item msgid="4516840825756409490">"Відтворювати аудіо"</item>
+ <item msgid="6811712502798183957">"Читати буфер обміну"</item>
+ <item msgid="2780369012602289114">"Змінювати буфер обміну"</item>
+ <item msgid="2331359440170850868">"Кнопки медіа"</item>
+ <item msgid="6133599737122751231">"Активізація звуку"</item>
+ <item msgid="6844485713404805301">"Загальна гучність"</item>
+ <item msgid="1600379420669104929">"Гучність голосу"</item>
+ <item msgid="6296768210470214866">"Гучність дзвінка"</item>
+ <item msgid="510690696071629241">"Гучність медіа"</item>
+ <item msgid="406861638631430109">"Гучність будильника"</item>
+ <item msgid="4715864795872233884">"Гучність сповіщень"</item>
+ <item msgid="2311478519251301183">"Гучність Bluetooth"</item>
+ <item msgid="5133991377896747027">"Залишати активним"</item>
+ <item msgid="2464189519136248621">"Місцезнаходження"</item>
+ <item msgid="2062677934050803037">"Місцезнаходження"</item>
+ <item msgid="1735171933192715957">"Отримати статистику використання"</item>
+ <item msgid="1014093788778383554">"Вимкнути або ввімкнути мікрофон"</item>
+ <item msgid="4199297950608622850">"Показувати підказки"</item>
+ <item msgid="2527962435313398821">"Транслювати вміст"</item>
+ <item msgid="5117506254221861929">"Активувати VPN"</item>
+ <item msgid="8291198322681891160">"Написаний фоновий малюнок"</item>
+ <item msgid="7106921284621230961">"Допоміжна структура"</item>
+ <item msgid="4496533640894624799">"Допоміжний знімок екрана"</item>
+ <item msgid="2598847264853993611">"Переглядати статус телефона"</item>
+ <item msgid="9215610846802973353">"Додавати голосову пошту"</item>
+ <item msgid="9186411956086478261">"Використовувати протокол SIP"</item>
+ <item msgid="6884763100104539558">"Обробляти вихідні виклики"</item>
+ <item msgid="125513972170580692">"Відбиток пальця"</item>
+ <item msgid="2556071024281275619">"Датчики на тілі"</item>
+ <item msgid="617168514928339387">"Переглядати повідомлення Cell Broadcast"</item>
+ <item msgid="7134693570516523585">"Фіктивне місцезнаходження"</item>
+ <item msgid="7224489175375229399">"Переглядати дані про пам’ять"</item>
+ <item msgid="8472735063903258202">"Додавати дані в пам’ять і змінювати їх"</item>
+ <item msgid="4069276819909595110">"Вмикати екран"</item>
+ <item msgid="1228338896751121025">"Отримувати дані облікових записів"</item>
+ <item msgid="3181581793459233672">"Працювати у фоновому режимі"</item>
+ <item msgid="2340936043025374076">"Спеціальні можливості: гучність"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Коротка"</item>
<item msgid="4816511817309094890">"Звичайне сповіщення"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Ніколи не дозволяти"</item>
<item msgid="8184570120217958741">"Завжди дозволяти"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Звичайний"</item>
+ <item msgid="5101233285497327432">"Прийнятно"</item>
+ <item msgid="1555861583162930714">"Низька"</item>
+ <item msgid="1719683776264798117">"Критичний"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Нормальний"</item>
+ <item msgid="6107138933849816768">"Середній"</item>
+ <item msgid="182695359839047859">"Низька"</item>
+ <item msgid="8577246509202964244">"Критичний"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Постійний"</item>
<item msgid="167418068739176448">"Перші дії"</item>
diff --git a/tests/CarDeveloperOptions/res/values-uk/strings.xml b/tests/CarDeveloperOptions/res/values-uk/strings.xml
index 38b465d..f1b1dea 100644
--- a/tests/CarDeveloperOptions/res/values-uk/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-uk/strings.xml
@@ -85,8 +85,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Збільшуйте або зменшуйте текст на екрані."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Зменшити"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Збільшити"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Зразок тексту"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Чарівник країни Оз"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Глава 11. Дивовижне Смарагдове місто країни Оз"</string>
@@ -373,7 +372,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Інформація профілю"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Облікові записи"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Місцезнаходження"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Використовувати геодані"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Використовувати геодані"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Вимкнено"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">Увімкнено. Доступ до геоданих має <xliff:g id="COUNT_1">%1$d</xliff:g> додаток</item>
@@ -425,7 +424,7 @@
<string name="security_settings_face_enroll_done" msgid="5409739233373490971">"Готово"</string>
<string name="security_settings_face_settings_use_face_category" msgid="1586532139528115416">"Налаштування за обличчям"</string>
<string name="security_settings_face_settings_use_face_unlock_phone" msgid="318274519126401671">"Пристрій розблоковується"</string>
- <string name="security_settings_face_settings_use_face_for_apps" msgid="5479369083370664351">"Вхід у додатки та платежі"</string>
+ <string name="security_settings_face_settings_use_face_for_apps" msgid="5479369083370664351">"Вхід у додатки й оплата"</string>
<string name="security_settings_face_settings_require_attention" msgid="2755140150841557225">"Розблоковувати, коли очі відкриті"</string>
<string name="security_settings_face_settings_require_attention_details" msgid="2557060433599942587">"Використовуючи автентифікацію облич, відкрийте очі"</string>
<string name="security_settings_face_settings_require_confirmation" msgid="7312024271060416438">"Завжди просити підтвердження"</string>
@@ -836,7 +835,7 @@
<string name="wifi_display_settings_title" msgid="8718182672694575456">"Трансляція"</string>
<string name="wifi_display_enable_menu_item" msgid="4578340247147692250">"Увімкнути бездротовий екран"</string>
<string name="wifi_display_no_devices_found" msgid="186501729518830451">"Не знайдено пристроїв поблизу."</string>
- <string name="wifi_display_status_connecting" msgid="3799827425457383349">"Під’єднуються"</string>
+ <string name="wifi_display_status_connecting" msgid="3799827425457383349">"Підключення"</string>
<string name="wifi_display_status_connected" msgid="85692409327461403">"Під’єднані"</string>
<string name="wifi_display_status_in_use" msgid="7646114501132773174">"Використовується"</string>
<string name="wifi_display_status_not_available" msgid="5600448733204688205">"Недоступно"</string>
@@ -871,7 +870,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Увімкнути Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Використовувати Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Використовувати Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Налаштування Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Налашт. і керуйте бездрот. точками доступу"</string>
@@ -953,16 +952,16 @@
<string name="please_select_phase2" msgid="5848080896810435677">"Друга фаза автентифікації"</string>
<string name="wifi_eap_ca_cert" msgid="1496395241849383785">"Сертифікат ЦС"</string>
<string name="wifi_eap_domain" msgid="3298302320003640130">"Домен"</string>
- <string name="wifi_eap_user_cert" msgid="6786839531765719173">"Сертиф. корист-ча"</string>
- <string name="wifi_eap_identity" msgid="5280457017705738773">"Ідентифік."</string>
- <string name="wifi_eap_anonymous" msgid="6352344972490839958">"Анонімна ідентиф-ція"</string>
+ <string name="wifi_eap_user_cert" msgid="6786839531765719173">"Сертифікат користувача"</string>
+ <string name="wifi_eap_identity" msgid="5280457017705738773">"Ідентифікація"</string>
+ <string name="wifi_eap_anonymous" msgid="6352344972490839958">"Анонімна ідентифікація"</string>
<string name="wifi_password" msgid="6942983531275177771">"Пароль"</string>
<string name="wifi_show_password" msgid="7878398590772942202">"Показати пароль"</string>
<string name="wifi_ap_band_config" msgid="6565016368079288433">"Виберіть діапазон частот точки доступу"</string>
<string name="wifi_ap_choose_auto" msgid="7927637960569365785">"Автоматично"</string>
<string name="wifi_ap_choose_2G" msgid="43198403259714736">"Діапазон 2,4 ГГц"</string>
<string name="wifi_ap_choose_5G" msgid="2624859713183683146">"Діапазон 5 ГГц"</string>
- <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"Бажано використовувати діапазон 5,0 ГГц"</string>
+ <string name="wifi_ap_prefer_5G" msgid="8339172330471170142">"Діапазон 5,0 ГГц (рекомендовано)"</string>
<string name="wifi_ap_2G" msgid="5793110086517338494">"2,4 ГГц"</string>
<string name="wifi_ap_5G" msgid="4584892544393675403">"5 ГГц"</string>
<string name="wifi_ap_band_select_one" msgid="4409754936554360355">"Виберіть принаймні один діапазон для точки доступу Wi-Fi:"</string>
@@ -1139,7 +1138,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Мобільні"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Використовувати мобільну мережу, коли немає Wi-Fi"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Використовувати Wi-Fi, якщо немає мобільної мережі"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Телефонувати через Wi-Fi. У разі втрати з’єднання з Wi-Fi виклик буде завершено."</string>
@@ -1147,7 +1149,7 @@
<string name="wifi_calling_off_explanation_2" msgid="8648609693875720408"></string>
<string name="emergency_address_title" msgid="5779915349686787024">"Екстрена адреса"</string>
<string name="emergency_address_summary" msgid="478668478569851714">"Використовується як адреса, коли ви телефонуєте в екстрені служби через Wi-Fi"</string>
- <string name="private_dns_help_message" msgid="7633526525131196650"><annotation id="url">"Докладніше"</annotation>" про функції приватної DNS"</string>
+ <string name="private_dns_help_message" msgid="7633526525131196650"><annotation id="url">"Докладніше"</annotation>" про приватний DNS-сервер"</string>
<string name="wifi_calling_pref_managed_by_carrier" msgid="5458050015417972072">"Налаштуванням керує оператор"</string>
<string name="wifi_calling_settings_activation_instructions" msgid="2863642668648110908">"Активувати дзвінки через Wi-Fi"</string>
<string name="wifi_calling_turn_on" msgid="1212277809455062043">"Увімкнути дзвінки через Wi-Fi"</string>
@@ -1244,7 +1246,7 @@
<string name="adaptive_sleep_summary_off" msgid="2891586225954973431">"Вимкнено"</string>
<string name="adaptive_sleep_description" msgid="812673735459170009">"Не дає екрану вимикатись, якщо ви на нього дивитесь."</string>
<string name="adaptive_sleep_privacy" msgid="5706802215479902623">"Розпізнавання уваги за допомогою передньої камери визначає, чи дивиться користувач на екран. Ця функція працює лише на пристрої, не зберігає зображень і не надсилає їх у Google."</string>
- <string name="night_display_title" msgid="1305002424893349814">"Нічний режим"</string>
+ <string name="night_display_title" msgid="1305002424893349814">"Нічний екран"</string>
<string name="night_display_text" msgid="5330502493684652527">"У нічному режимі екран набуває бурштинового відтінку. Це знімає напруження очей при тьмяному освітленні та допомагає легше заснути."</string>
<string name="night_display_auto_mode_title" msgid="8493573087102481588">"Розклад"</string>
<string name="night_display_auto_mode_never" msgid="2897444637217807088">"Ніколи"</string>
@@ -1268,7 +1270,7 @@
<string name="night_display_activation_off_twilight" msgid="6846727701281556110">"Вимкнути до заходу сонця"</string>
<string name="night_display_activation_on_custom" msgid="4761140206778957611">"Увімкнути до <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="night_display_activation_off_custom" msgid="4207238846687792731">"Вимкнути до <xliff:g id="ID_1">%1$s</xliff:g>"</string>
- <string name="night_display_not_currently_on" msgid="1436588493764429281">"Нічний режим не ввімкнено"</string>
+ <string name="night_display_not_currently_on" msgid="1436588493764429281">"Нічний екран не ввімкнено"</string>
<string name="screen_timeout" msgid="1700950247634525588">"Режим сну"</string>
<string name="screen_timeout_title" msgid="150117777762864112">"Вимикати екран"</string>
<string name="screen_timeout_summary" msgid="8644192861778491060">"Коли минає <xliff:g id="TIMEOUT_DESCRIPTION">%1$s</xliff:g> бездіяльності"</string>
@@ -1683,8 +1685,8 @@
<string name="mobile_insert_sim_card" msgid="7594550403454243732">"Вставте SIM-карту та перезапустіть"</string>
<string name="mobile_connect_to_internet" msgid="6031886097365170913">"Під’єднайтеся до Інтернету"</string>
<string name="location_title" msgid="8664674161765477168">"Моє місцезнах."</string>
- <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"Місцезнах.для робочого профілю"</string>
- <string name="location_app_level_permissions" msgid="1298041503927632960">"Дозвіл додаткам"</string>
+ <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"Геодані для робочого профілю"</string>
+ <string name="location_app_level_permissions" msgid="1298041503927632960">"Дозвіл для додатків"</string>
<string name="location_app_permission_summary_location_off" msgid="541372845344796336">"Передавання геоданих вимкнено"</string>
<plurals name="location_app_permission_summary_location_on" formatted="false" msgid="7904821382328758218">
<item quantity="one">Додатків із необмеженим доступом: <xliff:g id="BACKGROUND_LOCATION_APP_COUNT_2">%1$d</xliff:g> з <xliff:g id="TOTAL_LOCATION_APP_COUNT_3">%2$d</xliff:g></item>
@@ -1694,7 +1696,7 @@
</plurals>
<string name="location_category_recent_location_access" msgid="286059523360285026">"Доступ до останніх геоданих"</string>
<string name="location_recent_location_access_view_details" msgid="2051602261436245905">"Переглянути деталі"</string>
- <string name="location_no_recent_apps" msgid="77502059586413278">"Жодна програма не запитувала місцезнаходження останнім часом"</string>
+ <string name="location_no_recent_apps" msgid="77502059586413278">"Останнім часом додатки не запитували доступ до геоданих"</string>
<string name="location_no_recent_accesses" msgid="6289916310397279890">"Немає додатків, які нещодавно отримували доступ до геоданих"</string>
<string name="location_high_battery_use" msgid="7177199869979522663">"Значне використання заряду"</string>
<string name="location_low_battery_use" msgid="5030448574501435888">"Низьке використання заряду"</string>
@@ -1805,7 +1807,7 @@
<string name="lockpattern_settings_enable_visible_pattern_title" msgid="4935583222709647096">"Зробити ключ видимим"</string>
<string name="lockpattern_settings_enable_visible_pattern_title_profile" msgid="5338893138982642228">"Зробити ключ профілю видимим"</string>
<string name="lockpattern_settings_enable_tactile_feedback_title" msgid="3203621862806531947">"Вібрація під час дотику"</string>
- <string name="lockpattern_settings_enable_power_button_instantly_locks" msgid="5890335732200257777">"Блокування кнопкою живлення"</string>
+ <string name="lockpattern_settings_enable_power_button_instantly_locks" msgid="5890335732200257777">"Блокувати кнопкою живлення"</string>
<string name="lockpattern_settings_power_button_instantly_locks_summary" msgid="1279989004145567840">"Якщо <xliff:g id="TRUST_AGENT_NAME">%1$s</xliff:g> не запобігає блокуванню"</string>
<string name="lockpattern_settings_choose_lock_pattern" msgid="9042142745571386381">"Налашт. ключ розблок."</string>
<string name="lockpattern_settings_change_lock_pattern" msgid="1456643060737114885">"Змінити ключ розблокув."</string>
@@ -2082,7 +2084,7 @@
<string name="vision_settings_suggestion_title" msgid="7268661419110951128">"Змінити розмір шрифту"</string>
<string name="screen_reader_category_title" msgid="6300714148519645544">"Програми зчитування з екрана"</string>
<string name="audio_and_captions_category_title" msgid="6140472938769619212">"Аудіо й текст на екрані"</string>
- <string name="display_category_title" msgid="545168481672250195">"Дисплей"</string>
+ <string name="display_category_title" msgid="545168481672250195">"Екран"</string>
<string name="interaction_control_category_title" msgid="8775039211811947683">"Елементи керування взаємодією"</string>
<string name="user_installed_services_category_title" msgid="4288689493753221319">"Завантажені служби"</string>
<string name="experimental_category_title" msgid="3797000069740110717">"Експериментальні налаштування"</string>
@@ -2135,9 +2137,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Вібрація під час сповіщень"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Вібрація під час дзвінків"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Вібрація під час дотику"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Використовувати сервіс"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Використовувати корекцію кольорів"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Використовувати субтитри"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Використовувати сервіс"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Використовувати корекцію кольорів"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Використовувати субтитри"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Продовжити"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Слухові апарати"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Слухові апарати не під’єднано"</string>
@@ -2531,7 +2533,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Увімкнути"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Використовувати режим економії заряду акумулятора"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Використовувати режим енергозбереження"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Вмикати автоматично"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Ніколи"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"коли рівень заряду акумулятора – <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
@@ -2671,7 +2673,7 @@
<string name="work_mode_label" msgid="6845849194740195757">"Робочий профіль"</string>
<string name="work_mode_on_summary" msgid="1682781113156323592">"Профілем керує ваша організація"</string>
<string name="work_mode_off_summary" msgid="1688885392211178315">"Додатки й сповіщення вимкнено"</string>
- <string name="remove_managed_profile_label" msgid="4625542553784793536">"Видалити службовий профіль"</string>
+ <string name="remove_managed_profile_label" msgid="4625542553784793536">"Видалити робочий профіль"</string>
<string name="background_data" msgid="8275750862371471171">"Фонові дані"</string>
<string name="background_data_summary" msgid="799640633948841990">"Програми можуть будь-коли синхроніз., надсил. й отрим. дані"</string>
<string name="background_data_dialog_title" msgid="8306650658158895976">"Вимкн. фонові дані?"</string>
@@ -2992,7 +2994,7 @@
<string name="application_restrictions" msgid="6871981013736536763">"Дозволи для програм і вмісту"</string>
<string name="apps_with_restrictions_header" msgid="8656739605673756176">"Програми з обмеженнями"</string>
<string name="apps_with_restrictions_settings_button" msgid="5065896213467171744">"Розгорнути налаштув. програм"</string>
- <string name="nfc_payment_settings_title" msgid="5070077706735415291">"Натиснути й оплатити"</string>
+ <string name="nfc_payment_settings_title" msgid="5070077706735415291">"Експрес-платежі"</string>
<string name="nfc_payment_how_it_works" msgid="7607901964687787177">"Як це працює"</string>
<string name="nfc_payment_no_apps" msgid="8844440783395420860">"Оплачуйте покупки за допомогою телефона"</string>
<string name="nfc_payment_default" msgid="7869273092463612271">"Додаток для платежів за умовчанням"</string>
@@ -3700,7 +3702,7 @@
<string name="storage_type_internal" msgid="4434212376539293892">"Внутрішня пам’ять"</string>
<string name="storage_type_external" msgid="8827468573685648108">"Зовнішня пам’ять"</string>
<string name="data_summary_format" msgid="5022135392347814271">"З <xliff:g id="DATE">%2$s</xliff:g> використано <xliff:g id="SIZE">%1$s</xliff:g>"</string>
- <string name="storage_used" msgid="2457948583478332647">"Використано пам’яті"</string>
+ <string name="storage_used" msgid="2457948583478332647">"Використане сховище"</string>
<string name="change" msgid="41563753961948554">"Змінити"</string>
<string name="change_storage" msgid="2064045078609862770">"Змінити пам’ять"</string>
<string name="notifications_label" msgid="2792398288062643318">"Сповіщення"</string>
@@ -3858,8 +3860,8 @@
<string name="usb_pref" msgid="6194821550693495068">"USB"</string>
<string name="usb_preference" msgid="7092987095048592826">"Параметри USB"</string>
<string name="usb_control_title" msgid="2379698856760894768">"USB керує"</string>
- <string name="usb_control_host" msgid="193292043691034178">"Підключений пристрій"</string>
- <string name="usb_control_device" msgid="9154790265254725254">"Цей пристрій"</string>
+ <string name="usb_control_host" msgid="193292043691034178">"Підключеним пристроєм"</string>
+ <string name="usb_control_device" msgid="9154790265254725254">"Цим пристроєм"</string>
<string name="usb_switching" msgid="1230386065163529904">"Змінюється…"</string>
<string name="usb_switching_failed" msgid="6857722544186145439">"Не вдалося змінити"</string>
<string name="usb_summary_charging_only" msgid="4118449308708872339">"Заряджання пристрою"</string>
@@ -4026,9 +4028,9 @@
<string name="condition_device_muted_summary" msgid="3101055117680109021">"Для викликів і сповіщень"</string>
<string name="condition_device_vibrate_title" msgid="5712659354868872338">"Лише вібрація"</string>
<string name="condition_device_vibrate_summary" msgid="9073880731894828604">"Для викликів і сповіщень"</string>
- <string name="night_display_suggestion_title" msgid="4222839610992282188">"Налаштувати графік нічного режиму"</string>
+ <string name="night_display_suggestion_title" msgid="4222839610992282188">"Налаштувати графік функції \"Нічний екран\""</string>
<string name="night_display_suggestion_summary" msgid="1754361016383576916">"Автоматично відтіняти екран щовечора"</string>
- <string name="condition_night_display_title" msgid="9171491784857160135">"Нічне освітлення ввімкнено"</string>
+ <string name="condition_night_display_title" msgid="9171491784857160135">"Нічний екран увімкнено"</string>
<string name="condition_night_display_summary" msgid="7885776986937527558">"Відтінок екрана змінено на бурштиновий"</string>
<string name="condition_grayscale_title" msgid="1226351649203551299">"Відтінки сірого"</string>
<string name="condition_grayscale_summary" msgid="749172886527349546">"Відображати все в сірому кольорі"</string>
@@ -4140,7 +4142,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Заборонити введення відповідей чи іншого тексту в сповіщеннях, якщо пристрій заблоковано"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Стандартна перевірка правопису"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Вибрати перевірку правопису"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Використовувати перевірку правопису"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Використовувати перевірку правопису"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Не вибрано"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(немає)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4238,10 +4240,10 @@
<item quantity="other"><xliff:g id="NUMBER">%s</xliff:g> секунди</item>
</plurals>
<string name="automatic_storage_manager_settings" msgid="2403621409625820182">"Керувати сховищем"</string>
- <string name="automatic_storage_manager_text" msgid="4270379105066667493">"Щоб звільнити місце, диспетчер пам’яті видаляє з пристрою резервні копії фото й відео."</string>
+ <string name="automatic_storage_manager_text" msgid="4270379105066667493">"Щоб звільнити місце, менеджер сховища видаляє з пристрою фото й відео, для яких є резервні копії."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Видалити фото й відео"</string>
- <string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Диспетчер пам’яті"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Використовувати диспетчер пам’яті"</string>
+ <string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Менеджер сховища"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Використовувати менеджер сховища"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Автоматично"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Вручну"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Звільнити місце"</string>
@@ -4274,7 +4276,7 @@
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"Торкніться, щоб перевірити пристрій"</string>
<string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"Щоб перевірити час, сповіщення та іншу інформацію, торкніться екрана."</string>
<string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"Використовувати відбиток для перегляду сповіщень"</string>
- <string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"Гортання сканером"</string>
+ <string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"Сканер відбитків"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"Щоб переглянути сповіщення, проведіть пальцем униз по сканеру відбитків на задній панелі телефона."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"Щоб переглянути сповіщення, проведіть пальцем униз по сканеру відбитків на задній панелі планшета."</string>
<string name="fingerprint_swipe_for_notifications_summary" product="device" msgid="7950264130913070035">"Щоб переглянути сповіщення, проведіть пальцем униз по сканеру відбитків на задній панелі пристрою."</string>
@@ -4292,7 +4294,7 @@
<string name="web_action_section_title" msgid="5563229447734734662">"Додатки з миттєвим запуском"</string>
<string name="instant_apps_settings" msgid="879003203555847537">"Параметри додатків із миттєвим запуском"</string>
<string name="domain_url_section_title" msgid="206403507921518321">"Установлені додатки"</string>
- <string name="automatic_storage_manager_activation_warning" msgid="2630083316417707308">"Зараз пам’яттю керує диспетчер пам’яті"</string>
+ <string name="automatic_storage_manager_activation_warning" msgid="2630083316417707308">"Пам’ять пристрою тепер керується менеджером сховища"</string>
<string name="account_for_section_header" msgid="5975241715840642563">"Облікові записи (<xliff:g id="USER_NAME">%1$s</xliff:g>)"</string>
<string name="configure_section_header" msgid="6988981883075615136">"Налаштування"</string>
<string name="auto_sync_account_title" msgid="2394463123733529506">"Автоматично синхронізувати дані"</string>
@@ -4416,11 +4418,11 @@
<string name="default_theme" msgid="5986996377385956138">"За умовчанням"</string>
<string name="show_operator_name_title" msgid="5056163028128447308">"Назва мережі"</string>
<string name="show_operator_name_summary" msgid="6352180285743777497">"Показувати назву мережі в рядку стану"</string>
- <string name="storage_manager_indicator" msgid="4255140732848476875">"Диспетчер пам’яті: <xliff:g id="STATUS">^1</xliff:g>"</string>
+ <string name="storage_manager_indicator" msgid="4255140732848476875">"Менеджер сховища: <xliff:g id="STATUS">^1</xliff:g>"</string>
<string name="storage_manager_indicator_off" msgid="6404056007102580777">"Вимкнено"</string>
<string name="storage_manager_indicator_on" msgid="5295306384982062320">"Увімкнено"</string>
<string name="install_type_instant" msgid="6248487669862821874">"Додаток із миттєвим запуском"</string>
- <string name="automatic_storage_manager_deactivation_warning" msgid="7867793739491286374">"Вимкнути диспетчер пам’яті?"</string>
+ <string name="automatic_storage_manager_deactivation_warning" msgid="7867793739491286374">"Вимкнути менеджер сховища?"</string>
<string name="storage_movies_tv" msgid="7282484273991655296">"Фільми й серіали"</string>
<string name="carrier_provisioning" msgid="3309125279191534469">"Інформація про ініціалізацію оператора"</string>
<string name="trigger_carrier_provisioning" msgid="6284005970057901477">"Активатор ініціалізації оператора"</string>
@@ -4462,7 +4464,7 @@
<string name="change_wifi_state_title" msgid="5140754955787584174">"Керування Wi-Fi"</string>
<string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"Дозволити додатку керувати Wi-Fi"</string>
<string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Дозволити цьому додатку вмикати чи вимикати Wi-Fi, шукати мережі Wi-Fi та підключатися до них, додавати або видаляти мережі чи запускати лише локальну точку доступу"</string>
- <string name="media_output_title" msgid="8710632337456601848">"Відтворювати медіа-вміст у додатку"</string>
+ <string name="media_output_title" msgid="8710632337456601848">"Відтворення медіаконтенту"</string>
<string name="media_output_default_summary" msgid="3159237976830415584">"Цей пристрій"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"Телефон"</string>
<string name="media_output_summary" product="tablet" msgid="6672024060360538526">"Планшет"</string>
diff --git a/tests/CarDeveloperOptions/res/values-ur/arrays.xml b/tests/CarDeveloperOptions/res/values-ur/arrays.xml
index e35712a..6c63b7b 100644
--- a/tests/CarDeveloperOptions/res/values-ur/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-ur/arrays.xml
@@ -38,7 +38,16 @@
<item msgid="5827960506924849753">"10 منٹ"</item>
<item msgid="6677424950124253938">"30 منٹ"</item>
</string-array>
- <!-- no translation found for dream_timeout_entries:7 (8271452751594598661) -->
+ <string-array name="dream_timeout_entries">
+ <item msgid="6487043225269853023">"کبھی نہیں"</item>
+ <item msgid="2517785806387977252">"15 سیکنڈ"</item>
+ <item msgid="6347954399441173672">"30 سیکنڈ"</item>
+ <item msgid="4858305253279921789">"1 منٹ"</item>
+ <item msgid="8109273437140044073">"2 منٹ"</item>
+ <item msgid="2788593551142462622">"5 منٹ"</item>
+ <item msgid="8012672183888404961">"10 منٹ"</item>
+ <item msgid="8271452751594598661">"30 منٹ"</item>
+ </string-array>
<string-array name="lock_after_timeout_entries">
<item msgid="2232921187970351881">"فوری طور پر"</item>
<item msgid="2038544972632026612">"5 سیکنڈ"</item>
@@ -50,17 +59,47 @@
<item msgid="811192536981678974">"10 منٹ"</item>
<item msgid="7258394417241706272">"30 منٹ"</item>
</string-array>
- <!-- no translation found for entries_font_size:0 (2340391964816059553) -->
- <!-- no translation found for entries_font_size:0 (6490061470416867723) -->
- <!-- no translation found for entries_font_size:2 (1714184661981538355) -->
- <!-- no translation found for entries_font_size:2 (1678068858001018666) -->
- <!-- no translation found for wifi_status:3 (5848277343965362748) -->
- <!-- no translation found for wifi_status_with_ssid:1 (6816207058895999545) -->
- <!-- no translation found for wifi_status_with_ssid:3 (7547609081339573756) -->
- <!-- no translation found for wifi_status_with_ssid:4 (5145158315060185414) -->
+ <string-array name="entries_font_size">
+ <item msgid="2340391964816059553">"چھوٹا"</item>
+ <item msgid="591935967183159581">"ڈیفالٹ"</item>
+ <item msgid="1714184661981538355">"بڑا"</item>
+ <item msgid="6195563047686707484">"سب سے بڑا"</item>
+ </string-array>
+ <string-array name="wifi_status">
+ <item msgid="1304883790721412351"></item>
+ <item msgid="4157625910392775808">"اسکین کر رہا ہے…"</item>
+ <item msgid="5597394826455877834">"مربوط ہو رہا ہے…"</item>
+ <item msgid="5848277343965362748">"توثیق ہو رہی ہے…"</item>
+ <item msgid="3391238031431440676">"IP پتہ حاصل کر رہا ہے…"</item>
+ <item msgid="5257597310494000224">"منسلک"</item>
+ <item msgid="8472497592913050396">"معطل شدہ"</item>
+ <item msgid="1228072488815999109">"منقطع کیا جارہا ہے…"</item>
+ <item msgid="7253087004422991731">"منقطع"</item>
+ <item msgid="4169850917304751227">"ناکام"</item>
+ <item msgid="6266658166690831131">"مسدود ہے"</item>
+ <item msgid="4517230805854909775">"عارضی طور پر خراب کنکشن سے اجتناب کر رہا ہے"</item>
+ </string-array>
+ <string-array name="wifi_status_with_ssid">
+ <item msgid="4853670665485437464"></item>
+ <item msgid="6816207058895999545">"اسکین ہو رہا ہے…"</item>
+ <item msgid="8058143476674427024">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> سے مربوط ہو رہا ہے…"</item>
+ <item msgid="7547609081339573756">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> کے ساتھ توثیق ہو رہی ہے…"</item>
+ <item msgid="5145158315060185414">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> سے IP پتہ حاصل کر رہا ہے…"</item>
+ <item msgid="3283243151651124831">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> سے مربوط ہو گیا"</item>
+ <item msgid="6600156231416890902">"معطل شدہ"</item>
+ <item msgid="4133290864821295785">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> سے منقطع ہو رہا ہے…"</item>
+ <item msgid="3980154971187953257">"منقطع"</item>
+ <item msgid="2847316776634969068">"ناکام"</item>
+ <item msgid="4390990424746035383">"مسدود ہے"</item>
+ <item msgid="3618248791367063949">"عارضی طور پر خراب کنکشن سے اجتناب کر رہا ہے"</item>
+ </string-array>
<!-- no translation found for wifi_tether_security:0 (5586343370515598801) -->
<!-- no translation found for wifi_tether_security:1 (6136336549994615745) -->
- <!-- no translation found for wifi_p2p_wps_setup:0 (5390235347963255303) -->
+ <string-array name="wifi_p2p_wps_setup">
+ <item msgid="5390235347963255303">"پش بٹن"</item>
+ <item msgid="7401896200768713930">"ہمسر آلہ سے PIN"</item>
+ <item msgid="4526848028011846710">"اس آلہ سے PIN"</item>
+ </string-array>
<string-array name="wifi_p2p_status">
<item msgid="8741947238021758201">"منسلک"</item>
<item msgid="983792611851499732">"مدعو"</item>
@@ -82,8 +121,13 @@
<item msgid="1644506614010085798">"4"</item>
<item msgid="3132506679404897150">"5"</item>
</string-array>
- <!-- no translation found for wifi_signal:1 (7882129634982603782) -->
- <!-- no translation found for wifi_signal:4 (999948812884919584) -->
+ <string-array name="wifi_signal">
+ <item msgid="1709949377823900951">"ناقص"</item>
+ <item msgid="7882129634982603782">"کمزور"</item>
+ <item msgid="6457357501905996224">"مناسب"</item>
+ <item msgid="405271628162918841">"اچھا"</item>
+ <item msgid="999948812884919584">"عمدہ"</item>
+ </string-array>
<string-array name="data_usage_data_range">
<item msgid="8986775481492954015">"آخری 30 دن"</item>
<item msgid="3211287705232736964">"استعمال کا دور سیٹ کریں…"</item>
@@ -119,7 +163,10 @@
<item msgid="7330627471456865502">"MSCHAPV2"</item>
<item msgid="6255179395132581882">"GTC"</item>
</string-array>
- <!-- no translation found for wifi_ip_settings:1 (4377002609760712163) -->
+ <string-array name="wifi_ip_settings">
+ <item msgid="2717196390555072244">"DHCP"</item>
+ <item msgid="4377002609760712163">"جامد"</item>
+ </string-array>
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"کوئی نہیں"</item>
<item msgid="1464741437353223198">"مینوئل"</item>
@@ -239,11 +286,73 @@
<item msgid="1165623660533024666">"پس منظر میں چلائیں"</item>
<item msgid="6423861043647911030">"ایکسیسبیلٹی والیوم"</item>
</string-array>
- <!-- no translation found for app_ops_labels:3 (7836406246005211990) -->
- <!-- no translation found for app_ops_labels:4 (3951439024549922598) -->
- <!-- no translation found for app_ops_labels:8 (3597797992398484655) -->
- <!-- no translation found for app_ops_labels:20 (3037159047591081136) -->
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"مقام"</item>
+ <item msgid="6656077694190491067">"مقام"</item>
+ <item msgid="8790228218278477369">"مقام"</item>
+ <item msgid="7836406246005211990">"وائبریٹ"</item>
+ <item msgid="3951439024549922598">"رابطوں کو پڑھیں"</item>
+ <item msgid="8802152411647068">"رابطوں میں ترمیم کریں"</item>
+ <item msgid="229544934599698735">"کال لاگ پڑھیں"</item>
+ <item msgid="7396102294405899613">"کال لاگ میں ترمیم کریں"</item>
+ <item msgid="3597797992398484655">"کیلنڈر پڑھیں"</item>
+ <item msgid="2705975774250907343">"کیلنڈر میں ترمیم کریں"</item>
+ <item msgid="4668747371441932697">"مقام"</item>
+ <item msgid="1487578921720243646">"اطلاع شائع کریں"</item>
+ <item msgid="4636080349724146638">"مقام"</item>
+ <item msgid="673510900286463926">"فون پر کال کریں"</item>
+ <item msgid="542083422784609790">"SMS/MMS پڑھیں"</item>
+ <item msgid="1033780373029588436">"SMS/MMS لکھیں"</item>
+ <item msgid="5647111115517787488">"SMS/MMS وصول کریں"</item>
+ <item msgid="8591105601108455893">"SMS/MMS وصول کریں"</item>
+ <item msgid="7730995008517841903">"SMS/MMS وصول کریں"</item>
+ <item msgid="2613033109026626086">"SMS/MMS وصول کریں"</item>
+ <item msgid="3037159047591081136">"SMS/MMS بھیجیں"</item>
+ <item msgid="4726682243833913568">"SMS/MMS پڑھیں"</item>
+ <item msgid="6555678522277865572">"SMS/MMS لکھیں"</item>
+ <item msgid="6981734935578130884">"ترتیبات میں ترمیم کریں"</item>
+ <item msgid="8705854389991425629">"سب سے اوپر ڈرا کریں"</item>
+ <item msgid="5861356020344153651">"اطلاعات تک رسائی حاصل کریں"</item>
+ <item msgid="78432174621628659">"کیمرا"</item>
+ <item msgid="3986116419882154794">"آڈیو ریکارڈ کریں"</item>
+ <item msgid="4516840825756409490">"آڈیو چلائیں"</item>
+ <item msgid="6811712502798183957">"کلپ بورڈ پڑھیں"</item>
+ <item msgid="2780369012602289114">"کلپ بورڈ میں ترمیم کریں"</item>
+ <item msgid="2331359440170850868">"میڈیا بٹنز"</item>
+ <item msgid="6133599737122751231">"آڈیو فوکس"</item>
+ <item msgid="6844485713404805301">"ماسٹر والیوم"</item>
+ <item msgid="1600379420669104929">"صوتی والیوم"</item>
+ <item msgid="6296768210470214866">"رنگ والیوم"</item>
+ <item msgid="510690696071629241">"میڈیا والیوم"</item>
+ <item msgid="406861638631430109">"الارم والیوم"</item>
+ <item msgid="4715864795872233884">"اطلاع کا والیوم"</item>
+ <item msgid="2311478519251301183">"بلوٹوتھ کا والیوم"</item>
+ <item msgid="5133991377896747027">"بیدار رکھیں"</item>
+ <item msgid="2464189519136248621">"مقام"</item>
+ <item msgid="2062677934050803037">"مقام"</item>
+ <item msgid="1735171933192715957">"استعمال کے اعداد و شمار حاصل کریں"</item>
+ <item msgid="1014093788778383554">"مائیکروفون کو خاموش کریں/اس کی آواز چلائیں"</item>
+ <item msgid="4199297950608622850">"ٹوسٹ دکھائیں"</item>
+ <item msgid="2527962435313398821">"میڈیا پروجیکٹ کریں"</item>
+ <item msgid="5117506254221861929">"VPN کو فعال کریں"</item>
+ <item msgid="8291198322681891160">"لکھنے کا وال پیپر"</item>
+ <item msgid="7106921284621230961">"اسٹرکچر اسسٹ کریں"</item>
+ <item msgid="4496533640894624799">"اسکرین شاٹ اسسٹ کریں"</item>
+ <item msgid="2598847264853993611">"فون اسٹیٹ پڑھیں"</item>
+ <item msgid="9215610846802973353">"صوتی میل شامل کریں"</item>
+ <item msgid="9186411956086478261">"سِپ استعمال کریں"</item>
+ <item msgid="6884763100104539558">"باہر جانے والی کال پر کاروائی کریں"</item>
+ <item msgid="125513972170580692">"فنگر پرنٹ"</item>
+ <item msgid="2556071024281275619">"باڈی سینسرز"</item>
+ <item msgid="617168514928339387">"سیل نشریات پڑھیں"</item>
+ <item msgid="7134693570516523585">"مقام فرضی بنائیں"</item>
+ <item msgid="7224489175375229399">"اسٹوریج پڑھیں"</item>
+ <item msgid="8472735063903258202">"اسٹوریج لکھیں"</item>
+ <item msgid="4069276819909595110">"اسکرین آن کریں"</item>
+ <item msgid="1228338896751121025">"اکاؤنٹس حاصل کریں"</item>
+ <item msgid="3181581793459233672">"پس منظر میں چلائیں"</item>
+ <item msgid="2340936043025374076">"ایکسیسبیلٹی والیوم"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"مختصر"</item>
<item msgid="4816511817309094890">"متوسط"</item>
@@ -260,7 +369,13 @@
<item msgid="4627069151979553527">"Cursive"</item>
<item msgid="6896773537705206194">"بڑے حروف چھوٹے سائز میں"</item>
</string-array>
- <!-- no translation found for captioning_font_size_selector_titles:3 (2784236342175159295) -->
+ <string-array name="captioning_font_size_selector_titles">
+ <item msgid="1680223634161592855">"بہت چھوٹا"</item>
+ <item msgid="5091603983404027034">"چھوٹا"</item>
+ <item msgid="176844712416932112">"عام"</item>
+ <item msgid="2784236342175159295">"بڑا"</item>
+ <item msgid="218913203203160606">"بہت بڑا"</item>
+ </string-array>
<string-array name="captioning_edge_type_selector_titles">
<item msgid="3865198759294188069">"ڈیفالٹ"</item>
<item msgid="6488643537808152001">"کوئی نہیں"</item>
@@ -275,7 +390,14 @@
<item msgid="1874668269931014581">"75%"</item>
<item msgid="6462911487571123954">"100%"</item>
</string-array>
- <!-- no translation found for captioning_preset_selector_titles:2 (5891360837786277638) -->
+ <string-array name="captioning_preset_selector_titles">
+ <item msgid="326819345272910536">"ایپ کے ڈیفالٹس استعمال کریں"</item>
+ <item msgid="8611890312638868524">"سیاہ پر سفید"</item>
+ <item msgid="5891360837786277638">"سفید پر سیاہ"</item>
+ <item msgid="2798457065945456853">"سیاہ پر پیلا"</item>
+ <item msgid="5799049811524553967">"نیلے پر پیلا"</item>
+ <item msgid="3673930830658169860">"حسب ضرورت"</item>
+ </string-array>
<string-array name="vpn_types_long">
<item msgid="6566768880689730097">"PPTP VPN"</item>
<item msgid="1349760781118368659">"پہلے سے اشتراک کردہ کلیدوں کے ساتھ L2TP/IPSec VPN"</item>
@@ -288,15 +410,32 @@
<item msgid="2958623927055120839">"کوئی نہیں"</item>
<item msgid="1157046369795346308">"مینوئل"</item>
</string-array>
- <!-- no translation found for vpn_states:4 (9135049670787351881) -->
+ <string-array name="vpn_states">
+ <item msgid="5408915841694583740">"منقطع"</item>
+ <item msgid="8754480102834556765">"آغاز کیا جا رہا ہے…"</item>
+ <item msgid="3351334355574270250">"مربوط ہو رہا ہے…"</item>
+ <item msgid="8303882153995748352">"منسلک"</item>
+ <item msgid="9135049670787351881">"ٹائم آؤٹ"</item>
+ <item msgid="2124868417182583926">"ناکام"</item>
+ </string-array>
<string-array name="security_settings_premium_sms_values">
<item msgid="1164265643455394443">"پوچھیں"</item>
<item msgid="7718817231348607934">"کبھی اجازت نہ دیں"</item>
<item msgid="8184570120217958741">"ہمیشہ اجازت دیں"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"عام"</item>
+ <item msgid="5101233285497327432">"معتدل"</item>
+ <item msgid="1555861583162930714">"کم"</item>
+ <item msgid="1719683776264798117">"انتہائی کم"</item>
+ <item msgid="1567326459340152525">"؟"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"عام"</item>
+ <item msgid="6107138933849816768">"متوسط"</item>
+ <item msgid="182695359839047859">"کم"</item>
+ <item msgid="8577246509202964244">"انتہائی کم"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"استقلال پذیر"</item>
<item msgid="167418068739176448">"سرفہرست سرگرمی"</item>
diff --git a/tests/CarDeveloperOptions/res/values-ur/strings.xml b/tests/CarDeveloperOptions/res/values-ur/strings.xml
index 89383c8..f743212 100644
--- a/tests/CarDeveloperOptions/res/values-ur/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-ur/strings.xml
@@ -26,9 +26,9 @@
<item quantity="other">اب آپ ایک ڈویلپر بننے سے <xliff:g id="STEP_COUNT_1">%1$d</xliff:g> قدم دور ہیں۔</item>
<item quantity="one">اب آپ ایک ڈویلپر بننے سے <xliff:g id="STEP_COUNT_0">%1$d</xliff:g> قدم دور ہیں۔</item>
</plurals>
- <string name="show_dev_on" msgid="9075712234786224065">"اب آپ ایک ڈیولپر ہیں!"</string>
- <string name="show_dev_already" msgid="7665948832405148689">"کوئی ضرورت نہیں ہے، آپ پہلے سے ہی ایک ڈیولپر ہیں۔"</string>
- <string name="dev_settings_disabled_warning" msgid="3198732189395396721">"براہ کرم پہلے ڈیولپر کے اختیارات فعال کریں"</string>
+ <string name="show_dev_on" msgid="9075712234786224065">"اب آپ ایک ڈویلپر ہیں!"</string>
+ <string name="show_dev_already" msgid="7665948832405148689">"کوئی ضرورت نہیں ہے، آپ پہلے سے ہی ایک ڈویلپر ہیں۔"</string>
+ <string name="dev_settings_disabled_warning" msgid="3198732189395396721">"براہ کرم پہلے ڈویلپر کے اختیارات فعال کریں"</string>
<string name="header_category_wireless_networks" msgid="8968405993937795898">"وائرلیس اور نیٹ ورکس"</string>
<string name="header_category_system" msgid="4045988717359334410">"سسٹم"</string>
<string name="radio_info_data_connection_enable" msgid="2554249462719717119">"ڈیٹا کنکشن فعال کریں"</string>
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"اسکرین پر موجود متن کو چھوٹا یا بڑا کریں۔"</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"چھوٹا کریں"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"بڑا کریں"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"نمونہ متن"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"اوز کا شاندار جادوگر"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"گیارھواں باب: اوز کا شاندار زمردی شہر"</string>
@@ -208,7 +207,7 @@
<string name="proxy_error_empty_port" msgid="8034561724923076215">"آپ کو پورٹ فیلڈ مکمل کرنے کی ضرورت ہے۔"</string>
<string name="proxy_error_empty_host_set_port" msgid="8471455809508588255">"اگر میزبان فیلڈ خالی ہے تو پورٹ فیلڈ لازمی طور پر خالی ہونی چاہیے۔"</string>
<string name="proxy_error_invalid_port" msgid="4046559920586100637">"آپ کے ذریعے ٹائپ کردہ پورٹ درست نہیں ہے۔"</string>
- <string name="proxy_warning_limited_support" msgid="9026539134219095768">"HTTP پراکسی کا استعمال براؤزر کے ذریعے ہوتا ہے لیکن ممکن ہے دوسری ایپس اسے استعمال نہ کریں۔"</string>
+ <string name="proxy_warning_limited_support" msgid="9026539134219095768">"براؤزر HTTP پراکسی کا استعمال کرتا ہے لیکن ممکن ہے دوسری ایپس اسے استعمال نہ کریں۔"</string>
<string name="proxy_url_title" msgid="882042361706435904">"PAC URL: "</string>
<string name="radio_info_dl_kbps" msgid="2903778264453410272">"DL بینڈ وڈتھ (kbps):"</string>
<string name="radio_info_ul_kbps" msgid="3802245899811732716">"UL بینڈ وڈتھ (kbps):"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"پروفائل کی معلومات"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"اکاؤنٹس"</string>
<string name="location_settings_title" msgid="2707201457572301030">"مقام"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"مقام استعمال کریں"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"مقام استعمال کریں"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"آف ہے"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">آن ۔ <xliff:g id="COUNT_1">%1$d</xliff:g> ایپس مقام تک رسائی حاصل کر سکتی ہیں</item>
@@ -411,7 +410,7 @@
<string name="face_add_max" msgid="8870899421165189413">"آپ <xliff:g id="COUNT">%d</xliff:g> چہروں تک شامل کر سکتے ہیں"</string>
<string name="face_intro_error_max" msgid="4024147799079828937">"آپ چہروں کی زیادہ سے زیادہ تعداد شامل کر چکے ہیں"</string>
<string name="face_intro_error_unknown" msgid="3241592604198351134">"مزید چہرے شامل نہیں کر سکتے"</string>
- <string name="security_settings_face_enroll_error_dialog_title" msgid="3933492758701563051">"اندراج مکمل نہیں ہوا تھا"</string>
+ <string name="security_settings_face_enroll_error_dialog_title" msgid="3933492758701563051">"اندراج مکمل نہیں ہوا"</string>
<string name="security_settings_face_enroll_dialog_ok" msgid="1078348922734845090">"ٹھیک ہے"</string>
<string name="security_settings_face_enroll_error_timeout_dialog_message" msgid="4917894418448325405">"چہرے کے اندراج کی حدِ وقت پوری ہو گئی۔ دوبارہ کوشش کریں۔"</string>
<string name="security_settings_face_enroll_error_generic_dialog_message" msgid="5160473187142616862">"چہرے کا اندراج نہیں ہوا۔"</string>
@@ -440,7 +439,7 @@
<string name="security_settings_fingerprint_preference_summary_none" msgid="3613424536269750172"></string>
<string name="security_settings_fingerprint_enroll_introduction_title" msgid="889558002683900544">"فنگر پرنٹ کے ساتھ غیر مقفل کریں"</string>
<string name="security_settings_fingerprint_enroll_introduction_title_unlock_disabled" msgid="7915504118657864429">"اپنا فنگر پرنٹ استعمال کریں"</string>
- <string name="security_settings_fingerprint_enroll_introduction_message" msgid="5586198131986682472">"اپنا فون غیر مقفل کرنے، خریداریوں کی اجازت دینے یا ایپس میں سائن ان کرنے کیلئے بس فنگر پرنٹ سنسر کو ٹچ کریں۔ کسی کے فنگر پرنٹس شامل کرتے وقت احتیاط برتیں۔ بس ایک شامل کردہ فنگر پرنٹ سے یہ سارے کام کئے جا سکتے ہیں۔\n\nنوٹ: ایک طاقتور پیٹرن یا PIN کی نسبت آپ کا فنگر پرنٹ شاید کم محفوظ ہو۔"</string>
+ <string name="security_settings_fingerprint_enroll_introduction_message" msgid="5586198131986682472">"اپنا فون غیر مقفل کرنے، خریداریوں کی اجازت دینے یا ایپس میں سائن ان کرنے کیلئے بس فنگر پرنٹ سینسر کو ٹچ کریں۔ کسی کے فنگر پرنٹس شامل کرتے وقت احتیاط برتیں۔ بس ایک شامل کردہ فنگر پرنٹ سے یہ سارے کام کئے جا سکتے ہیں۔\n\nنوٹ: ایک طاقتور پیٹرن یا PIN کی نسبت آپ کا فنگر پرنٹ شاید کم محفوظ ہو۔"</string>
<string name="security_settings_fingerprint_enroll_introduction_message_unlock_disabled" msgid="1640839304679275468">"اپنا فون غیرمقفل کرنے یا خریداریاں منظور کرنے کے لیے اپنے فنگرپرنٹ کا استعمال کریں۔\n\nنوٹ: آپ اس آلہ کو غیرمقفل کرنے کے لیے اپنا فنگرپرنٹ استعمال نہیں کر سکتے۔ مزید معلومات کے لیے، اپنی تنظیم کے منتظم سے رابطہ کریں۔"</string>
<string name="security_settings_fingerprint_enroll_introduction_message_setup" msgid="6734490666593320711">"اپنا فون غیرمقفل کرنے یا خریداریاں منظور کرنے کے لیے اپنے فنگرپرنٹ کا استعمال کریں۔\n\nنوٹ: ایک طاقتور پیٹرن یا PIN کی بنسبت آپ کا فنگر پرنٹ شاید کم محفوظ ہو۔"</string>
<string name="security_settings_fingerprint_enroll_introduction_cancel" msgid="9168637333731599827">"منسوخ کریں"</string>
@@ -460,14 +459,14 @@
<string name="go_back_button_label" msgid="7310586887969860472">"پیچھے جائیں"</string>
<string name="skip_lock_screen_dialog_button_label" msgid="6706047245716780006">"نظر انداز کریں"</string>
<string name="cancel_lock_screen_dialog_button_label" msgid="2534925227627658819">"منسوخ کریں"</string>
- <string name="security_settings_fingerprint_enroll_find_sensor_title" msgid="8909829699273726469">"سنسر کو ٹچ کریں"</string>
+ <string name="security_settings_fingerprint_enroll_find_sensor_title" msgid="8909829699273726469">"سینسر کو ٹچ کریں"</string>
<string name="security_settings_fingerprint_enroll_find_sensor_message" msgid="581120963079780740">"یہ آپ کے فون کے پشت پر ہے۔ اپنی انڈیکس فنگر کا استعمال کریں۔"</string>
<string name="security_settings_fingerprint_enroll_find_sensor_content_description" msgid="7835824123269738540">"آلہ اور فنگر پرنٹ سینسر کے مقام کا خاکہ"</string>
<string name="security_settings_fingerprint_enroll_dialog_name_label" msgid="3519748398694308901">"نام"</string>
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="3428927518029038956">"ٹھیک ہے"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="4312297515772004580">"حذف کریں"</string>
- <string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"سنسر کو ٹچ کریں"</string>
- <string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"اپنی انگلی سنسر پر رکھیں اور ارتعاش محسوس ہونے کے بعد اٹھا لیں"</string>
+ <string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"سینسر کو ٹچ کریں"</string>
+ <string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"اپنی انگلی سینسر پر رکھیں اور ارتعاش محسوس ہونے کے بعد اٹھا لیں"</string>
<string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"اٹھائیں، پھر دوبارہ ٹچ کریں"</string>
<string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"اپنے فنگرپرنٹ کے مختلف حصوں کو شامل کرنے کے لیے اپنی انگلی کو اٹھاتے رہیں"</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"فنگر پرنٹ شامل ہو گیا"</string>
@@ -488,8 +487,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="4111289529758845926">"ہوگیا"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"افوہ، یہ سینسر نہیں ہے"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"اپنے فون کے پشت پر سینسر کو ٹچ کریں۔ اپنی انڈیکس فنگر کا استعمال کریں۔"</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"اندراج مکمل نہیں ہوا تھا"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"فنگر پرنٹ اندراج کی حدِ وقت پوری ہو گئی۔ دوبارہ کوشش کریں۔"</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"اندراج مکمل نہیں ہوا"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"فنگر پرنٹ اندراج کی وقت کی حد پوری ہو گئی۔ دوبارہ کوشش کریں۔"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"فنگر پرنٹ اندراج نہیں ہوا۔ دوبارہ کوشش کریں یا مختلف انگلی استعمال کریں۔"</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"کوئی دوسرا شامل کریں"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"آگے جائیں"</string>
@@ -509,8 +508,8 @@
<string name="crypt_keeper_encrypt_title" product="tablet" msgid="2292129135369853167">"ٹیبلٹ کی مرموز کاری کریں"</string>
<string name="crypt_keeper_encrypt_title" product="default" msgid="3110852053238357832">"فون کی مرموز کاری کریں"</string>
<string name="crypt_keeper_encrypted_summary" msgid="2438498691741626642">"مرموز کاری کردہ"</string>
- <string name="crypt_keeper_desc" product="tablet" msgid="9142792050252407734">"آپ اپنے اکاؤنٹس، ترتیبات، ڈاؤن لوڈ کردہ ایپس اور ان کا ڈیٹا، میڈیا اور دوسری فائلیں مرموز کر سکتے ہیں۔ اپنا ٹیبلیٹ مرموز کر لینے کے بعد، یہ فرض کرتے ہوئے کہ آپ نے ایک اسکرین لاک (یعنی پیٹرن یا عددی PIN یا پاس ورڈ) سیٹ کرلیا ہے، آپ کو ہر دفعہ ٹیبلیٹ کا پاور آن کرنے پر اسے غیر موموز کرنے کیلئے اسکرین کو غیر مقفل کرنا ہوگا۔ غیر مرموز کرنے کا دوسرا واحد طریقہ یہ ہے کہ اپنے سبھی ڈیٹا کو حذف کرتے ہوئے فیکٹری ڈیٹا کی دوبارہ ترتیب کو انجام دیا جائے۔\n\nمرموز کرنے میں ایک گھنٹہ یا زیادہ وقت لگتا ہے۔ آپ کو ایک چارج شدہ بیٹری سے شروعات کرنی ہوگی اور اس پوری کارروائی کے دوران اپنے ٹیبلیٹ کو پلگ ان رکھیں۔ اگر آپ اس میں خلل ڈالتے ہیں تو آپ اپنے کچھ یا سبھی ڈیٹا سے محروم ہو جائیں گے۔"</string>
- <string name="crypt_keeper_desc" product="default" msgid="1996334685607444282">"آپ اپنے اکاؤنٹس، ترتیبات، ڈاؤن لوڈ کردہ ایپس اور ان کا ڈیٹا، میڈیا اور دوسری فائلیں مرموز کر سکتے ہیں۔ اپنا فون مرموز کر لینے کے بعد، یہ فرض کرتے ہوئے کہ آپ نے ایک اسکرین لاک (یعنی پیٹرن یا عددی PIN یا پاس ورڈ) سیٹ کرلیا ہے، آپ کو ہر دفعہ فون کا پاور آن کرنے پر اسے غیر موموز کرنے کیلئے اسکرین کو غیر مقفل کرنا ہوگا۔ غیر مرموز کرنے کا دوسرا واحد طریقہ یہ ہے کہ اپنے سبھی ڈیٹا کو حذف کرتے ہوئے فیکٹری ڈیٹا کی دوبارہ ترتیب کو انجام دیا جائے۔\n\nمرموز کرنے میں ایک گھنٹہ یا زیادہ وقت لگتا ہے۔ آپ کو ایک چارج شدہ بیٹری سے شروعات کرنی ہوگی اور اس پوری کارروائی کے دوران اپنے فون کو پلگ ان رکھیں۔ اگر آپ اس میں خلل ڈالتے ہیں تو آپ اپنے کچھ یا سبھی ڈیٹا سے محروم ہو جائیں گے۔"</string>
+ <string name="crypt_keeper_desc" product="tablet" msgid="9142792050252407734">"آپ اپنے اکاؤنٹس، ترتیبات، ڈاؤن لوڈ کردہ ایپس اور ان کا ڈیٹا، میڈیا اور دوسری فائلیں مرموز کر سکتے ہیں۔ اپنا ٹیبلیٹ مرموز کر لینے کے بعد، یہ فرض کرتے ہوئے کہ آپ نے ایک اسکرین لاک (یعنی پیٹرن یا عددی PIN یا پاس ورڈ) سیٹ کرلیا ہے، آپ کو ہر دفعہ ٹیبلیٹ کا پاور آن کرنے پر اسے غیر موموز کرنے کیلئے اسکرین کو غیر مقفل کرنا ہوگا۔ غیر مرموز کرنے کا دوسرا واحد طریقہ یہ ہے کہ اپنے سبھی ڈیٹا کو حذف کرتے ہوئے فیکٹری ڈیٹا ری سیٹ کو انجام دیا جائے۔\n\nمرموز کرنے میں ایک گھنٹہ یا زیادہ وقت لگتا ہے۔ آپ کو ایک چارج شدہ بیٹری سے شروعات کرنی ہوگی اور اس پوری کارروائی کے دوران اپنے ٹیبلیٹ کو پلگ ان رکھیں۔ اگر آپ اس میں خلل ڈالتے ہیں تو آپ اپنے کچھ یا سبھی ڈیٹا سے محروم ہو جائیں گے۔"</string>
+ <string name="crypt_keeper_desc" product="default" msgid="1996334685607444282">"آپ اپنے اکاؤنٹس، ترتیبات، ڈاؤن لوڈ کردہ ایپس اور ان کا ڈیٹا، میڈیا اور دوسری فائلیں مرموز کر سکتے ہیں۔ اپنا فون مرموز کر لینے کے بعد، یہ فرض کرتے ہوئے کہ آپ نے ایک اسکرین لاک (یعنی پیٹرن یا عددی PIN یا پاس ورڈ) سیٹ کرلیا ہے، آپ کو ہر دفعہ فون کا پاور آن کرنے پر اسے غیر موموز کرنے کیلئے اسکرین کو غیر مقفل کرنا ہوگا۔ غیر مرموز کرنے کا دوسرا واحد طریقہ یہ ہے کہ اپنے سبھی ڈیٹا کو حذف کرتے ہوئے فیکٹری ڈیٹا ری سیٹ کو انجام دیا جائے۔\n\nمرموز کرنے میں ایک گھنٹہ یا زیادہ وقت لگتا ہے۔ آپ کو ایک چارج شدہ بیٹری سے شروعات کرنی ہوگی اور اس پوری کارروائی کے دوران اپنے فون کو پلگ ان رکھیں۔ اگر آپ اس میں خلل ڈالتے ہیں تو آپ اپنے کچھ یا سبھی ڈیٹا سے محروم ہو جائیں گے۔"</string>
<string name="crypt_keeper_button_text" product="tablet" msgid="7918671468758813824">"ٹیبلٹ کی مرموز کاری کریں"</string>
<string name="crypt_keeper_button_text" product="default" msgid="8737394386627318489">"فون کی مرموز کاری کریں"</string>
<string name="crypt_keeper_low_charge_text" msgid="1422879728632636311">"اپنی بیٹری چارج کریں اور دوبارہ کوشش کریں۔"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Wi‑Fi آن کریں"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Wi-Fi استعمال کریں"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Wi-Fi استعمال کریں"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi‑Fi ترتیبات"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"وائرلیس رسائی پوائنٹس کو ترتیب دیں اور ان کا نظم کریں"</string>
@@ -910,8 +909,8 @@
<string name="wifi_signal" msgid="696548364467704808">"سگنل کی قوت"</string>
<string name="wifi_status" msgid="3439931558930689940">"اسٹیٹس"</string>
<string name="tx_wifi_speed" msgid="2571810085003261073">"ترسیل کے لنک کی رفتار"</string>
- <string name="rx_wifi_speed" msgid="7392873246110937187">"لنک کی رفتار وصول کریں"</string>
- <string name="wifi_frequency" msgid="6132852924995724246">"تعدد"</string>
+ <string name="rx_wifi_speed" msgid="7392873246110937187">"وصولی کے لنک کی رفتار"</string>
+ <string name="wifi_frequency" msgid="6132852924995724246">"فریکوئنسی"</string>
<string name="wifi_ip_address" msgid="5572539114989914831">"IP پتہ"</string>
<string name="passpoint_label" msgid="7429247462404128615">"محفوظ کردہ بذریعہ"</string>
<string name="passpoint_content" msgid="340527524510304327">"<xliff:g id="NAME">%1$s</xliff:g> اسنادات"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"موبائل"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"اگر Wi‑Fi دستیاب نہیں ہے تو موبائل نیٹ ورک استعمال کریں"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"اگر موبائل نیٹ ورک دستیاب نہ ہو تو Wi‑Fi استعمال کریں"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Wi‑Fi پر کال کریں۔ اگر Wi‑Fi منقطع ہو جاتا ہے تو کال ختم ہو جائے گی۔"</string>
@@ -1126,7 +1128,7 @@
<string name="notification_sound_title" msgid="6812164482799723931">"ڈیفالٹ اطلاع کی آواز"</string>
<string name="incoming_call_volume_title" msgid="4736570528754310450">"رنگ ٹون"</string>
<string name="notification_volume_title" msgid="6022562909288085275">"اطلاع"</string>
- <string name="checkbox_notification_same_as_incoming_call" msgid="7312942422655861175">"اطلاعات کیلئے آنے والی کال کا والیوم استعمال کریں"</string>
+ <string name="checkbox_notification_same_as_incoming_call" msgid="7312942422655861175">"اطلاعات کیلئے اِن کمنگ کال کا والیوم استعمال کریں"</string>
<string name="home_work_profile_not_supported" msgid="6137073723297076818">"کام کے پروفائلز کا تعاون نہیں کرتا ہے"</string>
<string name="notification_sound_dialog_title" msgid="6653341809710423276">"ڈیفالٹ اطلاع کی آواز"</string>
<string name="media_volume_title" msgid="1030438549497800914">"میڈیا"</string>
@@ -1219,7 +1221,7 @@
<string name="night_display_status_title" msgid="1727020934735770319">"اسٹیٹس"</string>
<string name="night_display_temperature_title" msgid="8375126629902616296">"شدت"</string>
<string name="night_display_summary_off" msgid="8850539785332228069">"آف / <xliff:g id="ID_1">%1$s</xliff:g>"</string>
- <string name="night_display_summary_off_auto_mode_never" msgid="8618824386434992487">"کبھی بھی خودکار طور پر آن نہیں ہوگا"</string>
+ <string name="night_display_summary_off_auto_mode_never" msgid="8618824386434992487">"کبھی بھی خودکار طور پر آن نہیں ہو گی"</string>
<string name="night_display_summary_off_auto_mode_custom" msgid="596847003171394411">"<xliff:g id="ID_1">%1$s</xliff:g> پر خودکار طور پر آن ہو جائے گا"</string>
<string name="night_display_summary_off_auto_mode_twilight" msgid="4071750976585359952">"غروب آفتاب پر خودکار طور پر آن ہو جائے گا"</string>
<string name="night_display_summary_on" msgid="6580571388791426596">"آن / <xliff:g id="ID_1">%1$s</xliff:g>"</string>
@@ -1687,7 +1689,7 @@
<string name="contributors_title" msgid="6800028420806884340">"معاونین"</string>
<string name="manual" msgid="5431859421432581357">"مینوئل"</string>
<string name="regulatory_labels" msgid="380968489247381025">"ریگولیٹری لیبلز"</string>
- <string name="safety_and_regulatory_info" msgid="7113766428000920132">"حفاظتی اور انضباطی مینوئل"</string>
+ <string name="safety_and_regulatory_info" msgid="7113766428000920132">"حفاظتی اور ریگولیٹری مینوئل"</string>
<string name="copyright_title" msgid="3847703367689932190">"کاپی رائٹ"</string>
<string name="license_title" msgid="7582145947873528540">"لائسنس"</string>
<string name="terms_title" msgid="1804549588198223771">"شرائط و ضوابط"</string>
@@ -1843,7 +1845,7 @@
<string name="reset_app_preferences" msgid="1426500030595212077">"ایپ کی ترجیحات کو ری سیٹ کریں"</string>
<string name="reset_app_preferences_title" msgid="792909865493673598">"ایپ کی ترجیحات کو ری سیٹ کریں؟"</string>
<string name="reset_app_preferences_desc" msgid="7935273005301096031">"اس سے مندرجہ ذیل کیلئے تمام ترجیحات ری سیٹ ہو جائیں گی:\n\n "<li>"غیر فعال ایپس"</li>\n" "<li>"غیر فعال ایپس کی اطلاعات"</li>\n" "<li>"کارروائیوں کیلئے ڈیفالٹ ایپلیکیشنز"</li>\n" "<li>"ایپس کیلئے پس منظر کے ڈیٹا کی پابندیاں"</li>\n" "<li>"کوئی اجازتی پابندیاں"</li>\n\n" آپ کسی ایپ کے ڈیٹا سے محروم نہیں ہوں گے۔"</string>
- <string name="reset_app_preferences_button" msgid="2041894727477934656">"ایپس کو دوبارہ ترتیب دیں"</string>
+ <string name="reset_app_preferences_button" msgid="2041894727477934656">"ایپس کو ری سیٹ کریں"</string>
<string name="manage_space_text" msgid="6166469422303124302">"خالی جگہ کا نظم کریں"</string>
<string name="filter" msgid="2426943916212457962">"فلٹر"</string>
<string name="filter_dlg_title" msgid="115313222190512670">"فلٹر کے اختیارات منتخب کریں"</string>
@@ -2035,7 +2037,7 @@
<string name="accessibility_settings" msgid="9140621093888234485">"ایکسیسبیلٹی"</string>
<string name="accessibility_settings_title" msgid="1687226556576913576">"ایکسیسبیلٹی ترتیبات"</string>
<string name="accessibility_settings_summary" msgid="5742379519336396561">"اسکرین قارئین، ڈسپلے، تعامل کے کنٹرولز"</string>
- <string name="vision_settings_title" msgid="7315352351051423944">"بصارتی ترتیبات"</string>
+ <string name="vision_settings_title" msgid="7315352351051423944">"بصری ترتیبات"</string>
<string name="vision_settings_description" msgid="3476589459009287332">"آپ اس آلہ کو اپنی ضروریات کے مطابق حسب ضرورت بنا سکتے ہیں۔ یہ ایکسیسبیلٹی خصوصیات بعد میں ترتیبات میں تبدیل ہو سکتی ہیں۔"</string>
<string name="vision_settings_suggestion_title" msgid="7268661419110951128">"فونٹ سائز تبدیل کریں"</string>
<string name="screen_reader_category_title" msgid="6300714148519645544">"اسکرین ریڈرز"</string>
@@ -2070,7 +2072,7 @@
<string name="accessibility_toggle_large_pointer_icon_title" msgid="9127905775116570565">"بڑا ماؤس پوائنٹر"</string>
<string name="accessibility_disable_animations" msgid="8378441317115710009">"اینیمیشنز ہٹائیں"</string>
<string name="accessibility_toggle_master_mono_title" msgid="899550848196702565">"مونو آڈیو"</string>
- <string name="accessibility_toggle_master_mono_summary" msgid="3847052868469033235">"آڈیو چلاتے وقت چینلز آپس میں ملائیں"</string>
+ <string name="accessibility_toggle_master_mono_summary" msgid="3847052868469033235">"آڈیو چلاتے وقت چینلز یکجا کریں"</string>
<string name="accessibility_toggle_master_balance_title" msgid="8723492001092647562">"آڈیو بیلنس"</string>
<string name="accessibility_toggle_master_balance_left_label" msgid="8531986342666527970">"بائیں"</string>
<string name="accessibility_toggle_master_balance_right_label" msgid="7757024572140589558">"دائیں"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"اطلاع وائبریشن"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"رنگ وائبریشن"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"ٹچ کرنے پر وائبریشن"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"سروس استعمال کریں"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"رنگ کی اصلاح استعمال کریں"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"کیپشنز استعمال کریں"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"سروس استعمال کریں"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"رنگ کی اصلاح استعمال کریں"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"کیپشنز استعمال کریں"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"جاری رکھیں"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"سماعتی آلات"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"کوئی سماعتی آلہ منسلک نہیں ہے"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"آن کریں"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"بیٹری سیور استعمال کریں"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"بیٹری سیور استعمال کریں"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"خود کار طور پر آن کریں"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"کبھی نہیں"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"<xliff:g id="PERCENT">%1$s</xliff:g> بیٹری پر"</string>
@@ -2561,7 +2563,7 @@
<string name="backup_erase_dialog_title" msgid="8178424339104463014"></string>
<string name="backup_erase_dialog_message" msgid="8767843355330070902">"اپنے Wi‑Fi پاس ورڈز، بُک مارکس، دوسری ترتیبات اور ایپ کے ڈیٹا کا بیک اپ لینا بند کریں، ساتھ ہی Google سرورز پر موجود سبھی کاپیاں حذف کریں۔"</string>
<string name="fullbackup_erase_dialog_message" msgid="2588536036471144070">"آلہ کے ڈیٹا (جیسے کہ Wi-Fi پاس ورڈز اور کال کی سرگزشت) اور ایپ ڈیٹا (جیسے کہ ایپس کی جانب سے اسٹور کردہ ترتیبات اور فائلز) کا بیک اپ لینا بند کریں، نیز ریموٹ سرورز پر موجود سبھی کاپیاں مٹائیں؟"</string>
- <string name="fullbackup_data_summary" msgid="406274198094268556">"خودکار طریقے سے دور سے آلہ کے ڈیٹا (جیسے کہ Wi-Fi پاس ورڈز اور کال کی سرگزشت) اور ایپ ڈیٹا (جیسے کہ ایپس کی جانب سے اسٹور کردہ ترتیبات اور فائلز) کا بیک اپ لیں۔\n\nجب آپ خودکار بیک اپ آن کرتے ہیں تو آلہ اور ایپ کا ڈیٹا وقفہ وقفہ پر دور سے محفوظ کیا جاتا ہے۔ ممکنہ طور پر حساس ڈیٹا مثلاً رابطے، پیغامات اور تصاویر سمیت ایپ ڈیٹا کوئی بھی ایسا ڈیٹا ہو سکتا ہے جسے کسی ایپ نے (ڈیولپر ترتیبات کی بنیاد پر) محفوظ کیا ہو۔"</string>
+ <string name="fullbackup_data_summary" msgid="406274198094268556">"خودکار طریقے سے دور سے آلہ کے ڈیٹا (جیسے کہ Wi-Fi پاس ورڈز اور کال کی سرگزشت) اور ایپ ڈیٹا (جیسے کہ ایپس کی جانب سے اسٹور کردہ ترتیبات اور فائلز) کا بیک اپ لیں۔\n\nجب آپ خودکار بیک اپ آن کرتے ہیں تو آلہ اور ایپ کا ڈیٹا وقفہ وقفہ پر دور سے محفوظ کیا جاتا ہے۔ ممکنہ طور پر حساس ڈیٹا مثلاً رابطے، پیغامات اور تصاویر سمیت ایپ ڈیٹا کوئی بھی ایسا ڈیٹا ہو سکتا ہے جسے کسی ایپ نے (ڈویلپر ترتیبات کی بنیاد پر) محفوظ کیا ہو۔"</string>
<string name="device_admin_settings_title" msgid="2074319456047334589">"آلہ کے منتظم کی ترتیبات"</string>
<string name="active_device_admin_msg" msgid="6929247869516924549">"آلہ کے منتظم کی ایپ"</string>
<string name="remove_device_admin" msgid="4413438593788336400">"آلہ کے منتظم کی یہ ایپ غیر فعال کریں"</string>
@@ -2873,7 +2875,7 @@
<string name="user_setup_dialog_title" msgid="6748950002206392396">"صارف کو ابھی سیٹ اپ کریں؟"</string>
<string name="user_setup_dialog_message" msgid="2988559933258353919">"یقینی بنائیں کہ وہ شخص آلہ لینے اور اپنی جگہ کو سیٹ اپ کرنے کیلئے دستیاب ہے"</string>
<string name="user_setup_profile_dialog_message" msgid="7611900802824048526">"پروفائل کو ابھی ترتیب دیں؟"</string>
- <string name="user_setup_button_setup_now" msgid="4941459406266856176">"ابھی ترتیب دیں"</string>
+ <string name="user_setup_button_setup_now" msgid="4941459406266856176">"ابھی سیٹ اپ کریں"</string>
<string name="user_setup_button_setup_later" msgid="6596031428556518752">"ابھی نہیں"</string>
<string name="user_cannot_manage_message" product="tablet" msgid="7108992906553210763">"صرف ٹیبلٹ کا مالک صارفین کا نظم کر سکتا ہے۔"</string>
<string name="user_cannot_manage_message" product="default" msgid="915260531390608092">"صرف فون کا مالک صارفین کا نظم کر سکتا ہے۔"</string>
@@ -2923,7 +2925,7 @@
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"علاوہ اس کے کہ کوئی دوسری ادائیگی ایپ کھلی ہو"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"تھپتھپائیں اور ادائیگی کریں ٹرمینل پر، اس کے ساتھ ادائیگی کریں:"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"ٹرمینل پر ادا کرنا"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"ادائیگی ایپ سیٹ اپ کریں۔ پھر بس اپنے فون کے پچھلے حصے کو کسی بھی بغیر رابطے والی علامت کے ٹرمینل سے لگائیں۔"</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"ادائیگی کی ایپ سیٹ اپ کریں۔ پھر بس اپنے فون کے پچھلے حصے کو کسی بھی بغیر رابطے والی علامت کے ٹرمینل کے پاس پکڑ کر رکھیں۔"</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"سمجھ آ گئی"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"مزید…"</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"اپنی ترجیح کے بطور سیٹ کریں؟"</string>
@@ -3158,7 +3160,7 @@
<string name="emergency_tone_vibrate" msgid="5020068066905681181">"وائبریشنز"</string>
<string name="boot_sounds_title" msgid="7583926202411353620">"آوازیں آن کریں"</string>
<string name="live_caption_title" msgid="7926591158657997051">"لائیو کیپشن"</string>
- <string name="live_caption_summary" msgid="9064771862352393125">"خودکار طور پر کیپشن میڈیا"</string>
+ <string name="live_caption_summary" msgid="9064771862352393125">"خودکار طور پر میڈیا پر کیپشن لگائیں"</string>
<string name="zen_mode_settings_summary_off" msgid="6929319200478424962">"کبھی نہیں"</string>
<plurals name="zen_mode_settings_summary_on" formatted="false" msgid="6061723291126091396">
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> فعال ہے</item>
@@ -3399,7 +3401,7 @@
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> زمرے</item>
<item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> زمرہ</item>
</plurals>
- <string name="no_channels" msgid="8884254729302501652">"اس ایپ نے کوئی اطلاعات شائع نہیں کیا ہے"</string>
+ <string name="no_channels" msgid="8884254729302501652">"اس ایپ نے کوئی اطلاعات شائع نہیں کی ہیں"</string>
<string name="app_settings_link" msgid="8465287765715790984">"ایپ میں اضافی ترتیبات"</string>
<string name="app_notification_listing_summary_zero" msgid="4047782719487686699">"سبھی ایپس کے لیے آن ہے"</string>
<plurals name="app_notification_listing_summary_others" formatted="false" msgid="1161774065480666519">
@@ -3704,7 +3706,7 @@
</plurals>
<string name="high_power_filter_on" msgid="5294209328473386403">"بہترین بنائی گئی نہیں ہیں"</string>
<string name="high_power_on" msgid="3573501822510580334">"بہترین بنائی گئی نہیں ہیں"</string>
- <string name="high_power_off" msgid="5906679734326490426">"بیٹری استعمال کو بہترین بنا رہی ہے"</string>
+ <string name="high_power_off" msgid="5906679734326490426">"بیٹری استعمال کو بہتر بنایا جا رہا ہے"</string>
<string name="high_power_system" msgid="739584574711292753">"بیٹری بہترین بنانا دستیاب نہیں ہے"</string>
<string name="high_power_desc" msgid="333756885680362741">"بیٹری بہترین بنانا لاگو مت کریں۔ ممکن ہے یہ آپ کی بیٹری مزید تیزی سے ختم کر دے۔"</string>
<string name="high_power_prompt_title" msgid="2805745781720454052">"ایپ کو ہمیشہ پس منظر میں چلنے دیں؟"</string>
@@ -4006,7 +4008,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"اگر آلہ مقفل ہو تو اطلاعات میں جوابات یا دیگر متن ٹائپ کرنا ممنوع کریں"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"ڈیفالٹ سپیل چیکر"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"سپیل چیکر چنیں"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"سپیل چیکر استعمال کریں"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"سپیل چیکر استعمال کریں"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"غیر منتخب کردہ"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(کوئی نہیں)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4067,14 +4069,14 @@
<string name="premium_sms_warning" msgid="7604011651486294515">"ہو سکتا ہے آپ کو پریمیم SMS کے پیسے ادا کرنا پڑیں اور یہ آپ کے کیرئیر بلز میں شامل ہو جائیں گے۔ اگر آپ ایک ایپ کیلئے اجازت فعال کرتے ہیں تو آپ اس ایپ کو استعمال کرکے آپ پریمیم SMS بھیج پائیں گے۔"</string>
<string name="premium_sms_access" msgid="4550027460595822851">"پریمیم SMS رسائی"</string>
<string name="bluetooth_disabled" msgid="6588102116819268238">"آف"</string>
- <string name="bluetooth_connected_summary" msgid="439920840053965217">"<xliff:g id="ID_1">%1$s</xliff:g> سے منسلک کردہ"</string>
+ <string name="bluetooth_connected_summary" msgid="439920840053965217">"<xliff:g id="ID_1">%1$s</xliff:g> سے منسلک کردہ"</string>
<string name="bluetooth_connected_multiple_devices_summary" msgid="596205630653123250">"متعدد آلات سے منسلک کردہ"</string>
<string name="demo_mode" msgid="3831081808592541104">"سسٹم UI ڈیمو موڈ"</string>
<string name="dark_ui_mode" msgid="703844190192599217">"تھیم"</string>
<string name="dark_ui_mode_title" msgid="8774932716427742413">"تھیم منتخب کریں"</string>
<string name="dark_ui_settings_light_summary" msgid="5219102347744462812">"اس ترتیب کا اطلاق ایپس پر بھی ہوتا ہے"</string>
<string name="dark_ui_settings_dark_summary" msgid="7042737828943784289">"تعاون یافتہ ایپس بھی گہری تھیم پر سوئچ ہو جائیں گی"</string>
- <string name="quick_settings_developer_tiles" msgid="7423485925757678719">"فوری ترتیبات کے ڈیولپر ٹائلز"</string>
+ <string name="quick_settings_developer_tiles" msgid="7423485925757678719">"فوری ترتیبات کے ڈویلپر ٹائلز"</string>
<string name="winscope_trace_quick_settings_title" msgid="940971040388411374">"Winscope ٹریس"</string>
<string name="sensors_off_quick_settings_title" msgid="3655699045300438902">"سینسرز آف ہیں"</string>
<string name="managed_profile_settings_title" msgid="4340409321523532402">"دفتری پروفائل کی ترتیبات"</string>
@@ -4099,7 +4101,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"اسٹوریج کی جگہ خالی کرنے میں مدد کیلئے، اسٹوریج مینیجر آپ کے آلہ سے بیک اپ شدہ تصاویر اور ویڈیوز ہٹا دیتا ہے۔"</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"تصاویر اور ویڈیوز ہٹائیں"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"اسٹوریج مینیجر"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"اسٹوریج مینیجر استعمال کریں"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"اسٹوریج مینیجر استعمال کریں"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"خودکار"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"مینوئل"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"اب جگہ خالی کریں"</string>
diff --git a/tests/CarDeveloperOptions/res/values-uz/arrays.xml b/tests/CarDeveloperOptions/res/values-uz/arrays.xml
index 2dfcf75..8c3e21c 100644
--- a/tests/CarDeveloperOptions/res/values-uz/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-uz/arrays.xml
@@ -29,8 +29,25 @@
<item msgid="5194868215515664953">"Tinch okeani"</item>
<item msgid="7044520255415007865">"Hammasi"</item>
</string-array>
- <!-- no translation found for screen_timeout_entries:0 (8596143519087753804) -->
- <!-- no translation found for dream_timeout_entries:7 (8271452751594598661) -->
+ <string-array name="screen_timeout_entries">
+ <item msgid="8596143519087753804">"15 soniya"</item>
+ <item msgid="772029947136115322">"30 soniya"</item>
+ <item msgid="8743663928349474087">"1 daqiqa"</item>
+ <item msgid="1506508631223164814">"2 daqiqa"</item>
+ <item msgid="8664703938127907662">"5 daqiqa"</item>
+ <item msgid="5827960506924849753">"10 daqiqa"</item>
+ <item msgid="6677424950124253938">"30 daqiqa"</item>
+ </string-array>
+ <string-array name="dream_timeout_entries">
+ <item msgid="6487043225269853023">"Hech qachon"</item>
+ <item msgid="2517785806387977252">"15 soniya"</item>
+ <item msgid="6347954399441173672">"30 soniya"</item>
+ <item msgid="4858305253279921789">"1 daqiqa"</item>
+ <item msgid="8109273437140044073">"2 daqiqa"</item>
+ <item msgid="2788593551142462622">"5 daqiqa"</item>
+ <item msgid="8012672183888404961">"10 daqiqa"</item>
+ <item msgid="8271452751594598661">"30 daqiqa"</item>
+ </string-array>
<string-array name="lock_after_timeout_entries">
<item msgid="2232921187970351881">"Darhol"</item>
<item msgid="2038544972632026612">"5 soniya"</item>
@@ -42,17 +59,47 @@
<item msgid="811192536981678974">"10 daqiqa"</item>
<item msgid="7258394417241706272">"30 daqiqa"</item>
</string-array>
- <!-- no translation found for entries_font_size:0 (2340391964816059553) -->
- <!-- no translation found for entries_font_size:0 (6490061470416867723) -->
- <!-- no translation found for entries_font_size:2 (1714184661981538355) -->
- <!-- no translation found for entries_font_size:2 (1678068858001018666) -->
- <!-- no translation found for wifi_status:3 (5848277343965362748) -->
- <!-- no translation found for wifi_status_with_ssid:1 (6816207058895999545) -->
- <!-- no translation found for wifi_status_with_ssid:3 (7547609081339573756) -->
- <!-- no translation found for wifi_status_with_ssid:4 (5145158315060185414) -->
+ <string-array name="entries_font_size">
+ <item msgid="2340391964816059553">"Kichik"</item>
+ <item msgid="591935967183159581">"Asosiy"</item>
+ <item msgid="1714184661981538355">"Katta"</item>
+ <item msgid="6195563047686707484">"Maksimal"</item>
+ </string-array>
+ <string-array name="wifi_status">
+ <item msgid="1304883790721412351"></item>
+ <item msgid="4157625910392775808">"Qidiruv…"</item>
+ <item msgid="5597394826455877834">"Ulanmoqda…"</item>
+ <item msgid="5848277343965362748">"Autentifikatsiya qilinmoqda…"</item>
+ <item msgid="3391238031431440676">"IP manzil o‘zlashtirilmoqda…"</item>
+ <item msgid="5257597310494000224">"Ulandi"</item>
+ <item msgid="8472497592913050396">"Muzlatildi"</item>
+ <item msgid="1228072488815999109">"Uzilyapti…"</item>
+ <item msgid="7253087004422991731">"Uzildi"</item>
+ <item msgid="4169850917304751227">"Muvaffaqiyatsiz"</item>
+ <item msgid="6266658166690831131">"Bloklangan"</item>
+ <item msgid="4517230805854909775">"Sifatsiz ulanishdan vaqtinchalik chetlashish"</item>
+ </string-array>
+ <string-array name="wifi_status_with_ssid">
+ <item msgid="4853670665485437464"></item>
+ <item msgid="6816207058895999545">"Qidirilmoqda…"</item>
+ <item msgid="8058143476674427024">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> tarmog‘iga ulanilmoqda…"</item>
+ <item msgid="7547609081339573756">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> nomli tarmoqqa ulanmoqda…"</item>
+ <item msgid="5145158315060185414">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> nomli tarmoqdan IP manzil olinmoqda…"</item>
+ <item msgid="3283243151651124831">"Bunga ulangan: <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</item>
+ <item msgid="6600156231416890902">"Muzlatildi"</item>
+ <item msgid="4133290864821295785">"<xliff:g id="NETWORK_NAME">%1$s</xliff:g> tarmog‘idan uzilmoqda…"</item>
+ <item msgid="3980154971187953257">"Uzildi"</item>
+ <item msgid="2847316776634969068">"Muvaffaqiyatsiz"</item>
+ <item msgid="4390990424746035383">"Bloklangan"</item>
+ <item msgid="3618248791367063949">"Sifatsiz ulanishdan vaqtinchalik chetlashish"</item>
+ </string-array>
<!-- no translation found for wifi_tether_security:0 (5586343370515598801) -->
<!-- no translation found for wifi_tether_security:1 (6136336549994615745) -->
- <!-- no translation found for wifi_p2p_wps_setup:0 (5390235347963255303) -->
+ <string-array name="wifi_p2p_wps_setup">
+ <item msgid="5390235347963255303">"Push tugmasi"</item>
+ <item msgid="7401896200768713930">"ulashma qurilmadagi PIN-kod"</item>
+ <item msgid="4526848028011846710">"Ushbu qurilmaning PIN kodi"</item>
+ </string-array>
<string-array name="wifi_p2p_status">
<item msgid="8741947238021758201">"Ulandi"</item>
<item msgid="983792611851499732">"Taklif qilingan"</item>
@@ -60,7 +107,12 @@
<item msgid="4646663015449312554">"Mavjud"</item>
<item msgid="3230556734162006146">"Chegaradan tashqari"</item>
</string-array>
- <!-- no translation found for bluetooth_visibility_timeout_entries:1 (2759776603549270587) -->
+ <string-array name="bluetooth_visibility_timeout_entries">
+ <item msgid="8247986727324120082">"2 daqiqa"</item>
+ <item msgid="2759776603549270587">"5 daqiqa"</item>
+ <item msgid="167772676068860015">"1 soat"</item>
+ <item msgid="5985477119043628504">"Doim yoniq tursin"</item>
+ </string-array>
<string-array name="bluetooth_max_connected_audio_devices">
<item msgid="3800257971619063588">"Standart tizim parametrlaridan foydalanish: <xliff:g id="DEFAULT_BLUETOOTH_MAX_CONNECTED_AUDIO_DEVICES">%1$d</xliff:g>"</item>
<item msgid="8572230405241423895">"1"</item>
@@ -69,8 +121,13 @@
<item msgid="1644506614010085798">"4"</item>
<item msgid="3132506679404897150">"5"</item>
</string-array>
- <!-- no translation found for wifi_signal:1 (7882129634982603782) -->
- <!-- no translation found for wifi_signal:4 (999948812884919584) -->
+ <string-array name="wifi_signal">
+ <item msgid="1709949377823900951">"Juda past"</item>
+ <item msgid="7882129634982603782">"Juda past"</item>
+ <item msgid="6457357501905996224">"Past"</item>
+ <item msgid="405271628162918841">"Yaxshi"</item>
+ <item msgid="999948812884919584">"Aʼlo"</item>
+ </string-array>
<string-array name="data_usage_data_range">
<item msgid="8986775481492954015">"So‘nggi 30 kun"</item>
<item msgid="3211287705232736964">"Internetdan foyd-sh davri…"</item>
@@ -106,7 +163,10 @@
<item msgid="7330627471456865502">"MSCHAPV2"</item>
<item msgid="6255179395132581882">"GTC"</item>
</string-array>
- <!-- no translation found for wifi_ip_settings:1 (4377002609760712163) -->
+ <string-array name="wifi_ip_settings">
+ <item msgid="2717196390555072244">"DHCP"</item>
+ <item msgid="4377002609760712163">"Statik"</item>
+ </string-array>
<string-array name="wifi_proxy_settings">
<item msgid="9032900195127165132">"Tarmoq yo‘q"</item>
<item msgid="1464741437353223198">"Qo‘llanma"</item>
@@ -226,11 +286,73 @@
<item msgid="1165623660533024666">"fonda ishga tushirish"</item>
<item msgid="6423861043647911030">"maxsus imkoniyatlar ovozi balandligi"</item>
</string-array>
- <!-- no translation found for app_ops_labels:3 (7836406246005211990) -->
- <!-- no translation found for app_ops_labels:4 (3951439024549922598) -->
- <!-- no translation found for app_ops_labels:8 (3597797992398484655) -->
- <!-- no translation found for app_ops_labels:20 (3037159047591081136) -->
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Joylashuv"</item>
+ <item msgid="6656077694190491067">"Joylashuv"</item>
+ <item msgid="8790228218278477369">"Joylashuv"</item>
+ <item msgid="7836406246005211990">"Tebranish"</item>
+ <item msgid="3951439024549922598">"Kontaktlarga oid axborotni oʻqish"</item>
+ <item msgid="8802152411647068">"Kontaktlarni o‘zgartirish"</item>
+ <item msgid="229544934599698735">"Qo‘ng‘iroqlar jurnalini ko‘rib chiqish"</item>
+ <item msgid="7396102294405899613">"Qo‘ng‘iroqlar jurnalini o‘zgartirish"</item>
+ <item msgid="3597797992398484655">"Taqvimga oid axborotni oʻqish"</item>
+ <item msgid="2705975774250907343">"Taqvimni o‘zgartirish"</item>
+ <item msgid="4668747371441932697">"Joylashuv"</item>
+ <item msgid="1487578921720243646">"Post qoldirish"</item>
+ <item msgid="4636080349724146638">"Joylashuv"</item>
+ <item msgid="673510900286463926">"Telefonga qo‘ng‘iroq qilish"</item>
+ <item msgid="542083422784609790">"SMS/MMS xabarlarini o‘qish"</item>
+ <item msgid="1033780373029588436">"SMS/MMS xabarlarini yozish"</item>
+ <item msgid="5647111115517787488">"SMS/MMS xabarlarini qabul qilish"</item>
+ <item msgid="8591105601108455893">"SMS/MMS xabarlarini qabul qilish"</item>
+ <item msgid="7730995008517841903">"SMS/MMS xabarlarini qabul qilish"</item>
+ <item msgid="2613033109026626086">"SMS/MMS xabarlarini qabul qilish"</item>
+ <item msgid="3037159047591081136">"SMS/MMS yuborish"</item>
+ <item msgid="4726682243833913568">"SMS/MMS xabarlarini o‘qish"</item>
+ <item msgid="6555678522277865572">"SMS/MMS yozish"</item>
+ <item msgid="6981734935578130884">"Sozlamalarni o‘zgartirish"</item>
+ <item msgid="8705854389991425629">"Ustiga chizish"</item>
+ <item msgid="5861356020344153651">"Xabarnomalarga kirish"</item>
+ <item msgid="78432174621628659">"Kamera"</item>
+ <item msgid="3986116419882154794">"Ovoz yozib olish"</item>
+ <item msgid="4516840825756409490">"Audioqaydni ijro etish"</item>
+ <item msgid="6811712502798183957">"Vaqtinchalik xotira ma‘lumotini o‘qish"</item>
+ <item msgid="2780369012602289114">"Vaqtinchalik xotirani o‘zgartirish"</item>
+ <item msgid="2331359440170850868">"Multimedia tugmalari"</item>
+ <item msgid="6133599737122751231">"Audio fokus"</item>
+ <item msgid="6844485713404805301">"Umumiy tovush balandligi"</item>
+ <item msgid="1600379420669104929">"Ovoz balandligi"</item>
+ <item msgid="6296768210470214866">"Jiringlash tovushi"</item>
+ <item msgid="510690696071629241">"Multimedia tovushi"</item>
+ <item msgid="406861638631430109">"Signal tovushi"</item>
+ <item msgid="4715864795872233884">"Bildirishnomalar ovozi"</item>
+ <item msgid="2311478519251301183">"Bluetooth tovush balandligi"</item>
+ <item msgid="5133991377896747027">"Uyg‘oq turish"</item>
+ <item msgid="2464189519136248621">"Joylashuv"</item>
+ <item msgid="2062677934050803037">"Joylashuv"</item>
+ <item msgid="1735171933192715957">"Foydalanish statistikasini ko‘rish"</item>
+ <item msgid="1014093788778383554">"Mikrofonni o‘chirish/yoqish"</item>
+ <item msgid="4199297950608622850">"Toast dasturini ko‘rsatish"</item>
+ <item msgid="2527962435313398821">"Kontentni translatsiya qilish"</item>
+ <item msgid="5117506254221861929">"VPN tarmog‘ini faollashtirish"</item>
+ <item msgid="8291198322681891160">"Orqa fon rasmiga yozish"</item>
+ <item msgid="7106921284621230961">"Yordam tuzilishi"</item>
+ <item msgid="4496533640894624799">"Yordam ekran rasmi"</item>
+ <item msgid="2598847264853993611">"Telefon holatini o‘qish"</item>
+ <item msgid="9215610846802973353">"Ovozli xabar qo‘shish"</item>
+ <item msgid="9186411956086478261">"SIPdan foydalanish"</item>
+ <item msgid="6884763100104539558">"Chiquvchi qo‘ng‘iroq jarayoni"</item>
+ <item msgid="125513972170580692">"Barmoq izi"</item>
+ <item msgid="2556071024281275619">"Tana sezgichlari"</item>
+ <item msgid="617168514928339387">"Tarqatma xabarlarni o‘qish"</item>
+ <item msgid="7134693570516523585">"Soxta joylashuv"</item>
+ <item msgid="7224489175375229399">"Xotirani o‘qish"</item>
+ <item msgid="8472735063903258202">"Xotiraga yozish"</item>
+ <item msgid="4069276819909595110">"Ekranni yoqish"</item>
+ <item msgid="1228338896751121025">"Hisoblarni olish"</item>
+ <item msgid="3181581793459233672">"Fonda ishga tushirish"</item>
+ <item msgid="2340936043025374076">"Maxsus imkoniyatlar ovozi balandligi"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Qisqa"</item>
<item msgid="4816511817309094890">"O‘rtacha"</item>
@@ -247,7 +369,13 @@
<item msgid="4627069151979553527">"Qiya"</item>
<item msgid="6896773537705206194">"Kichik bosh harflar"</item>
</string-array>
- <!-- no translation found for captioning_font_size_selector_titles:3 (2784236342175159295) -->
+ <string-array name="captioning_font_size_selector_titles">
+ <item msgid="1680223634161592855">"Juda kichik"</item>
+ <item msgid="5091603983404027034">"Kichik"</item>
+ <item msgid="176844712416932112">"Normal"</item>
+ <item msgid="2784236342175159295">"Katta"</item>
+ <item msgid="218913203203160606">"Juda katta"</item>
+ </string-array>
<string-array name="captioning_edge_type_selector_titles">
<item msgid="3865198759294188069">"Asosiy"</item>
<item msgid="6488643537808152001">"Tarmoq yo‘q"</item>
@@ -262,7 +390,14 @@
<item msgid="1874668269931014581">"75%"</item>
<item msgid="6462911487571123954">"100%"</item>
</string-array>
- <!-- no translation found for captioning_preset_selector_titles:2 (5891360837786277638) -->
+ <string-array name="captioning_preset_selector_titles">
+ <item msgid="326819345272910536">"Standart"</item>
+ <item msgid="8611890312638868524">"Qora ustida oq"</item>
+ <item msgid="5891360837786277638">"Oq ustida qora"</item>
+ <item msgid="2798457065945456853">"Qora ustida sariq"</item>
+ <item msgid="5799049811524553967">"Ko‘k ustida sariq"</item>
+ <item msgid="3673930830658169860">"Maxsus"</item>
+ </string-array>
<string-array name="vpn_types_long">
<item msgid="6566768880689730097">"PPTP VPN"</item>
<item msgid="1349760781118368659">"L2TP/IPSec VPN avval ulashilgan kalitlar bilan"</item>
@@ -275,15 +410,32 @@
<item msgid="2958623927055120839">"Hech biri"</item>
<item msgid="1157046369795346308">"Qo‘llanma"</item>
</string-array>
- <!-- no translation found for vpn_states:4 (9135049670787351881) -->
+ <string-array name="vpn_states">
+ <item msgid="5408915841694583740">"Uzildi"</item>
+ <item msgid="8754480102834556765">"Ishga tushirilmoqda…"</item>
+ <item msgid="3351334355574270250">"Ulanmoqda…"</item>
+ <item msgid="8303882153995748352">"Ulandi"</item>
+ <item msgid="9135049670787351881">"Vaqt tugadi"</item>
+ <item msgid="2124868417182583926">"Muvaffaqiyatsiz"</item>
+ </string-array>
<string-array name="security_settings_premium_sms_values">
<item msgid="1164265643455394443">"So‘rash"</item>
<item msgid="7718817231348607934">"Hech qachon ruxsat berilmasin"</item>
<item msgid="8184570120217958741">"Har doim ruxsat berilsin"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Normal"</item>
+ <item msgid="5101233285497327432">"Hozircha yetarli"</item>
+ <item msgid="1555861583162930714">"Past"</item>
+ <item msgid="1719683776264798117">"Jiddiy"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Normal"</item>
+ <item msgid="6107138933849816768">"Qoniqarli"</item>
+ <item msgid="182695359839047859">"Past"</item>
+ <item msgid="8577246509202964244">"Jiddiy"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Barqaror"</item>
<item msgid="167418068739176448">"Eng mashhur harakat"</item>
@@ -303,8 +455,8 @@
<string-array name="color_picker">
<item msgid="3151827842194201728">"Moviy"</item>
<item msgid="3228505970082457852">"Ko‘k"</item>
- <item msgid="6590260735734795647">"To‘q ko‘k"</item>
- <item msgid="3521763377357218577">"Binafsharang"</item>
+ <item msgid="6590260735734795647">"Indigo"</item>
+ <item msgid="3521763377357218577">"Siyohrang"</item>
<item msgid="5932337981182999919">"Pushti"</item>
<item msgid="5642914536624000094">"Qizil"</item>
</string-array>
diff --git a/tests/CarDeveloperOptions/res/values-uz/strings.xml b/tests/CarDeveloperOptions/res/values-uz/strings.xml
index b71c9e4..3574ac0 100644
--- a/tests/CarDeveloperOptions/res/values-uz/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-uz/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Ekrandagi matnni kattalashtirish yoki kichiklashtirish."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Kichiklashtirish"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Kattalashtirish"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Namunaviy matn"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Oz mamlakati sehrgari"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"11-bob: Oz mamlakatining zumrad shahri"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Profil haqida axborot"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Hisoblar"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Joylashuv"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Joylashuv axborotidan foydalanish"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Joylashuv axborotidan foydalanish"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Yoqilmagan"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Yoniq – <xliff:g id="COUNT_1">%1$d</xliff:g> ta ilovada joylashuv axborotiga ruxsat bor</item>
@@ -484,7 +483,7 @@
<string name="lock_screen_pin_skip_title" msgid="8217519439213393785">"PIN kod kerak emasmi?"</string>
<string name="lock_screen_password_skip_title" msgid="3725788215672959827">"Parol kerak emasmi?"</string>
<string name="lock_screen_pattern_skip_title" msgid="4237030500353932005">"Grafik kalit kerak emasmi?"</string>
- <string name="security_settings_fingerprint_enroll_setup_screen_lock" msgid="9036983528330627756">"Ekranni qulfini sozlash"</string>
+ <string name="security_settings_fingerprint_enroll_setup_screen_lock" msgid="9036983528330627756">"Ekran qulfini sozlash"</string>
<string name="security_settings_fingerprint_enroll_done" msgid="4111289529758845926">"Tayyor"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"Obbo, bu sensor emas."</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"Telefonning orqasida joylashgan sensorga tegining. Ko‘rsatkich barmog‘ingizdan foydalaning."</string>
@@ -545,7 +544,7 @@
<string name="suggested_fingerprint_lock_settings_summary" product="device" msgid="8114514312665251311"></string>
<string name="suggested_fingerprint_lock_settings_summary" product="default" msgid="8114514312665251311"></string>
<string name="lock_settings_picker_title" msgid="1034741644461982205">"Ekran qulfini tanlang"</string>
- <string name="lock_settings_picker_title_profile" msgid="5086594364428782115">"Ishchi profil qulfini tanlang"</string>
+ <string name="lock_settings_picker_title_profile" msgid="5086594364428782115">"Ish profili qulfini tanlang"</string>
<string name="setup_lock_settings_picker_title" product="tablet" msgid="2429667472335773519">"Planshetingizni himoyalang"</string>
<string name="setup_lock_settings_picker_title" product="device" msgid="4739290104106645233">"Qurilmangizni himoyalang"</string>
<string name="setup_lock_settings_picker_title" product="default" msgid="3911582328576859628">"Telefoningizni himoyalang"</string>
@@ -560,7 +559,7 @@
<string name="unlock_set_unlock_launch_picker_title" msgid="2731152716948003853">"Ekran qulfi"</string>
<string name="unlock_set_unlock_launch_picker_summary_lock_immediately" msgid="5596186270725220642">"<xliff:g id="UNLOCK_METHOD">%1$s</xliff:g> / uyqu rejimidan keyinoq"</string>
<string name="unlock_set_unlock_launch_picker_summary_lock_after_timeout" msgid="3861167251234952373">"<xliff:g id="UNLOCK_METHOD">%1$s</xliff:g> / uyqu rejimidan <xliff:g id="TIMEOUT_STRING">%2$s</xliff:g>dan keyin"</string>
- <string name="unlock_set_unlock_launch_picker_title_profile" msgid="7976345264630422921">"Ishchi profil qulfi"</string>
+ <string name="unlock_set_unlock_launch_picker_title_profile" msgid="7976345264630422921">"Ish profili qulfi"</string>
<string name="unlock_set_unlock_launch_picker_change_title" msgid="32310692507029407">"Ekran qulfini o‘zgartirish"</string>
<string name="unlock_set_unlock_launch_picker_change_summary" msgid="2072792784866320522">"Grafik kalit, PIN kod va himoya parolini o‘zgartirish yoki o‘chirib qo‘yish"</string>
<string name="unlock_set_unlock_launch_picker_enable_summary" msgid="9070847611379078795">"Ekranni qulflash usulini tanlang"</string>
@@ -644,12 +643,12 @@
<string name="lock_last_pattern_attempt_before_wipe_user" msgid="5194192938934564218">"Agar grafik kalitni xato kiritsangiz, bu foydalanuvchi o‘chirib tashlanadi"</string>
<string name="lock_last_pin_attempt_before_wipe_user" msgid="7833852187363499906">"Agar PIN kodni xato kiritsangiz, bu foydalanuvchi o‘chirib tashlanadi"</string>
<string name="lock_last_password_attempt_before_wipe_user" msgid="8979742220140001204">"Agar parolni xato kiritsangiz, bu foydalanuvchi o‘chirib tashlanadi"</string>
- <string name="lock_last_pattern_attempt_before_wipe_profile" msgid="3877613047631174576">"Agar grafik kalitni xato kiritsangiz, ishchi profil va undagi ma’lumotlar o‘chirib tashlanadi"</string>
- <string name="lock_last_pin_attempt_before_wipe_profile" msgid="8132438288175428168">"Agar PIN kodni xato kiritsangiz, ishchi profil va undagi ma’lumotlar o‘chirib tashlanadi"</string>
- <string name="lock_last_password_attempt_before_wipe_profile" msgid="1535128774464384305">"Agar parolni xato kiritsangiz, ishchi profil va undagi ma’lumotlar o‘chirib tashlanadi"</string>
+ <string name="lock_last_pattern_attempt_before_wipe_profile" msgid="3877613047631174576">"Agar grafik kalitni xato kiritsangiz, ish profili va undagi ma’lumotlar o‘chirib tashlanadi"</string>
+ <string name="lock_last_pin_attempt_before_wipe_profile" msgid="8132438288175428168">"Agar PIN kodni xato kiritsangiz, ish profili va undagi ma’lumotlar o‘chirib tashlanadi"</string>
+ <string name="lock_last_password_attempt_before_wipe_profile" msgid="1535128774464384305">"Agar parolni xato kiritsangiz, ish profili va undagi ma’lumotlar o‘chirib tashlanadi"</string>
<string name="lock_failed_attempts_now_wiping_device" msgid="8662360098784762828">"Juda ko‘p marta muvaffaqiyatsiz urinishlar amalga oshirildi. Bu qurilmadagi ma’lumotlar o‘chirib tashlanadi."</string>
<string name="lock_failed_attempts_now_wiping_user" msgid="3793513796171561873">"Juda ko‘p marta muvaffaqiyatsiz urinishlar amalga oshirildi. Bu foydalanuvchi o‘chirib tashlanadi."</string>
- <string name="lock_failed_attempts_now_wiping_profile" msgid="5347108525299038285">"Juda ko‘p marta muvaffaqiyatsiz urinishlar amalga oshirildi. Bu ishchi profil va undagi ma’lumotlar o‘chirib tashlanadi."</string>
+ <string name="lock_failed_attempts_now_wiping_profile" msgid="5347108525299038285">"Juda ko‘p marta muvaffaqiyatsiz urinishlar amalga oshirildi. Bu ish profili va undagi ma’lumotlar o‘chirib tashlanadi."</string>
<string name="lock_failed_attempts_now_wiping_dialog_dismiss" msgid="3950582268749037318">"Yopish"</string>
<plurals name="lockpassword_password_too_short" formatted="false" msgid="694091983183310827">
<item quantity="other">Kamida <xliff:g id="COUNT_1">%d</xliff:g> ta belgi</item>
@@ -733,7 +732,7 @@
<string name="bluetooth_pairing_request" msgid="7221745525632573125">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> qurilmasiga ulansinmi?"</string>
<string name="bluetooth_pairing_key_msg" msgid="1139230917419961975">"Bluetooth orqali ulanish kodi"</string>
<string name="bluetooth_enter_passkey_msg" msgid="6205151011298670207">"Ulanish kodini kiriting va keyin “Return” yoki “Enter” tugmasini bosing"</string>
- <string name="bluetooth_enable_alphanumeric_pin" msgid="9138308197078115672">"PIN-kod harflar va belgilardan iborat bo‘ladi"</string>
+ <string name="bluetooth_enable_alphanumeric_pin" msgid="9138308197078115672">"Harflar yoki maxsus belgilardan iborat PIN kod"</string>
<string name="bluetooth_pin_values_hint" msgid="8044671726261326240">"Odatda 0000 yoki 1234"</string>
<string name="bluetooth_pin_values_hint_16_digits" msgid="2665983525706661525">"16 ta raqam bo‘lishi lozim"</string>
<string name="bluetooth_enter_pin_other_device" msgid="1727015949040507621">"Ushbu PIN kodni boshqa qurilmada ham terish lozim bo‘lishi mumkin."</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Wi‑Fi‘ni yoqish"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Wi-Fi ishlatish"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Wi-Fi orqali"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi‑Fi sozlamalari"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Ulanish nuqtalarini sozlash & boshqarish"</string>
@@ -890,7 +889,7 @@
<string name="wifi_menu_forget" msgid="7561140554450163075">"Tarmoqni o‘chirish"</string>
<string name="wifi_menu_modify" msgid="4080178040721021101">"Tarmoqni o‘zgartirish"</string>
<string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"Mavjud tarmoqlarni ko‘rish uchun Wi‑Fi aloqasini yoqing."</string>
- <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"Wi‑Fi tarmoqlarini qidirmoqda…"</string>
+ <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"Wi‑Fi tarmoqlar qidirilmoqda…"</string>
<string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"Sizda Wi‑Fi tarmog‘ini o‘zgartirishga ruxsatingiz yo‘q."</string>
<string name="wifi_more" msgid="3538241640407382185">"Yana"</string>
<string name="wifi_setup_wps" msgid="6730131677695521321">"Avtomatik ravishda sozlash (WPS)"</string>
@@ -976,7 +975,7 @@
<string name="wifi_do_not_validate_eap_server" msgid="1892537559682474878">"Tasdiqlanmasin"</string>
<string name="wifi_do_not_validate_eap_server_warning" msgid="3895397996759837323">"Birorta ham sertifikat ko‘rsatilmagan. Aloqangiz ochiq bo‘ladi."</string>
<string name="wifi_ssid_too_long" msgid="34911971389775920">"Tarmoq nomi juda uzun."</string>
- <string name="wifi_no_domain_warning" msgid="735859919311067606">"Domenni ko‘rsating."</string>
+ <string name="wifi_no_domain_warning" msgid="735859919311067606">"Domenni kiriting."</string>
<string name="wifi_wps_available_first_item" msgid="3221671453930485243">"WPS mavjud"</string>
<string name="wifi_wps_available_second_item" msgid="5703265526619705185">" (WPS mavjud)"</string>
<string name="wifi_carrier_connect" msgid="7202618367339982884">"Aloqa operatorining Wi‑Fi tarmog‘i"</string>
@@ -1067,7 +1066,7 @@
<string name="wifi_hotspot_name_summary_connecting" msgid="5176787959408511889">"<xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g> yoqilmoqda…"</string>
<string name="wifi_hotspot_name_summary_connected" msgid="8387768642326756749">"Boshqa qurilmalar <xliff:g id="WIFI_HOTSPOT_NAME">%1$s</xliff:g> tarmog‘iga ulanishi mumkin"</string>
<string name="wifi_hotspot_password_title" msgid="4289338152595154889">"Hotspot paroli"</string>
- <string name="wifi_hotspot_ap_band_title" msgid="3485744480410441949">"Wi-Fi chastotalari diapazoni"</string>
+ <string name="wifi_hotspot_ap_band_title" msgid="3485744480410441949">"Wi-Fi diapazoni"</string>
<string name="wifi_hotspot_footer_info_regular" msgid="3876006922622827363">"Boshqa qurilmalaringiz uchun Wi-Fi tarmoq yaratish uchun hotspotdan foydalaning. Hotspot mobil internetingizni tarqatadi. Mobil internet uchun qo‘shimcha to‘lovlar olinishi mumkin."</string>
<string name="wifi_hotspot_footer_info_local_only" msgid="3339582350894639261">"Ilovalar yaqin-atrofdagi qurilmalarga kontent ulashish uchun hotspot yarata oladi."</string>
<string name="wifi_hotspot_auto_off_title" msgid="7416022590415189590">"Hotspotni avtomatik faolsizlantirish"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Mobil"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Agar Wi‑Fi ishlamasa, mobil tarmoqdan foydalaning"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Agar mobil tarmoq ishlamasa, Wi-Fi ishlating"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Wi‑Fi orqali chaqiruv. Agar Wi‑Fi oʻchsa, chaqiruv tugatiladi."</string>
@@ -1162,7 +1164,7 @@
<string name="dock_sounds_enable_summary_off" product="tablet" msgid="2125391395745266946">"Planshetni dokga ulash yoki dokdan chiqarish paytida ovoz yangramasin"</string>
<string name="dock_sounds_enable_summary_off" product="default" msgid="9075438702849896866">"Telefonni dokka ulash yoki dokdan uzish paytida ovoz chiqarilmasin"</string>
<string name="account_settings" msgid="1937600532993930396">"Hisoblar"</string>
- <string name="accessibility_category_work" msgid="2808942060489460727">"Ishchi profil hisoblari – <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
+ <string name="accessibility_category_work" msgid="2808942060489460727">"Ish profili hisoblari – <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
<string name="accessibility_category_personal" msgid="1423427301759058762">"Shaxsiy profil hisoblari"</string>
<string name="accessibility_work_account_title" msgid="3195468574776888011">"Ishchi hisob – <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
<string name="accessibility_personal_account_title" msgid="7251761883688839354">"Shaxsiy hisob – <xliff:g id="MANAGED_BY">%s</xliff:g>"</string>
@@ -1240,7 +1242,7 @@
<string name="style_and_wallpaper_settings_title" msgid="8898539141152705754">"Mavzu va fon rasmlari"</string>
<string name="wallpaper_settings_summary_default" msgid="2626880032742784599">"Standart"</string>
<string name="wallpaper_settings_summary_custom" msgid="8950504698015331202">"Maxsus"</string>
- <string name="wallpaper_suggestion_title" msgid="3012130414886743201">"Fon rasmini o‘zgartirish"</string>
+ <string name="wallpaper_suggestion_title" msgid="3012130414886743201">"Fon rasmini almashtiring"</string>
<string name="wallpaper_suggestion_summary" msgid="4247262938988875842">"Ekran uchun fon rasmini tanlang"</string>
<string name="wallpaper_settings_fragment_title" msgid="1503701065297188901">"Fon rasmi qayerdan tanlansin"</string>
<string name="screensaver_settings_title" msgid="7720091234133721021">"Ekran lavhasi"</string>
@@ -1308,7 +1310,7 @@
<string name="system_update_settings_list_item_title" msgid="1907497454722790033">"Tizimni yangilash"</string>
<string name="system_update_settings_list_item_summary" msgid="3497456690691907873"></string>
<string name="firmware_version" msgid="547095584029938749">"Android versiyasi"</string>
- <string name="security_patch" msgid="483709031051932208">"Tizim xavfsizligi uchun yangilanish"</string>
+ <string name="security_patch" msgid="483709031051932208">"Android tizim xavfsizligi yangilanishi"</string>
<string name="model_info" msgid="1729765474260797594">"Model"</string>
<string name="model_summary" msgid="8781425868254352168">"Model: %1$s"</string>
<string name="hardware_info" msgid="174270144950621815">"Model va qurilma"</string>
@@ -1600,7 +1602,7 @@
<string name="master_clear_button_text" product="default" msgid="8000547818499182920">"Hamma narsani tozalash"</string>
<string name="master_clear_final_desc" msgid="5189365498015339294">"Barcha shaxsiy maʼlumotlaringiz va yuklab olingan ilovalar tozalab tashlanadi. Bu amalni ortga qaytara olmaysiz."</string>
<string name="master_clear_final_desc_esim" msgid="3058919823436953662">"Barcha shaxsiy maʼlumotlaringiz, jumladan, yuklab olingan ilovalar va SIM kartalar axboroti tozalab tashlanadi. Bu amalni ortga qaytara olmaysiz."</string>
- <string name="master_clear_final_button_text" msgid="866772743886027768">"Barchasini o‘chirish"</string>
+ <string name="master_clear_final_button_text" msgid="866772743886027768">"Hammasini tozalash"</string>
<string name="master_clear_failed" msgid="7588397453984229892">"Dastlabki sozlamalarni qaytarib bo\'lmadi, chunki Tizimni tozalash xizmati javob bermayapti."</string>
<string name="master_clear_confirm_title" msgid="698328669893512402">"Hamma narsa tozalansinmi?"</string>
<string name="master_clear_not_available" msgid="4676613348163652454">"Ushbu foydalanuvchiga sozlamalarni zavod holatiga qaytarishga ruxsat berilmagan"</string>
@@ -1645,7 +1647,7 @@
<string name="mobile_insert_sim_card" msgid="7594550403454243732">"SIM karta solib, qurilmani qayta ishga tushiring"</string>
<string name="mobile_connect_to_internet" msgid="6031886097365170913">"Iltimos, Internetga ulaning"</string>
<string name="location_title" msgid="8664674161765477168">"Mening joylashuvim"</string>
- <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"Ishchi profil joyi"</string>
+ <string name="managed_profile_location_switch_title" msgid="8157384427925389680">"Ish profili uchun joy"</string>
<string name="location_app_level_permissions" msgid="1298041503927632960">"Ilovalar uchun ruxsatlar"</string>
<string name="location_app_permission_summary_location_off" msgid="541372845344796336">"Joylashuv xizmati yoqilmagan"</string>
<plurals name="location_app_permission_summary_location_on" formatted="false" msgid="7904821382328758218">
@@ -1654,7 +1656,7 @@
</plurals>
<string name="location_category_recent_location_access" msgid="286059523360285026">"Oxirgi joylashuv axboroti"</string>
<string name="location_recent_location_access_view_details" msgid="2051602261436245905">"Tafsilotlar"</string>
- <string name="location_no_recent_apps" msgid="77502059586413278">"Hech qanday ilova yaqin vaqtda joylashuv ma‘lumotini so‘ramadi"</string>
+ <string name="location_no_recent_apps" msgid="77502059586413278">"Yaqin-orada hech qanday ilova joylashuv axborotini talab qilmadi"</string>
<string name="location_no_recent_accesses" msgid="6289916310397279890">"Hech qanday ilova yaqinda joylashuv axborotidan foydalanmagan"</string>
<string name="location_high_battery_use" msgid="7177199869979522663">"Yuqori batareya sarfi"</string>
<string name="location_low_battery_use" msgid="5030448574501435888">"Batareya sarfi kam"</string>
@@ -1687,7 +1689,7 @@
<string name="contributors_title" msgid="6800028420806884340">"Hissa qo‘shganlar"</string>
<string name="manual" msgid="5431859421432581357">"Qo‘llanma"</string>
<string name="regulatory_labels" msgid="380968489247381025">"Sertifikat yorliqlari"</string>
- <string name="safety_and_regulatory_info" msgid="7113766428000920132">"Xavfsizlik va sertifikat qo‘llanmasi"</string>
+ <string name="safety_and_regulatory_info" msgid="7113766428000920132">"Xavfsizlik va standartlarga muvofiqlik"</string>
<string name="copyright_title" msgid="3847703367689932190">"Mualliflik huquqi"</string>
<string name="license_title" msgid="7582145947873528540">"Litsenziya"</string>
<string name="terms_title" msgid="1804549588198223771">"Foydalanish shartlari"</string>
@@ -1704,7 +1706,7 @@
<string name="settings_safetylegal_activity_unreachable" msgid="3541894966476445833">"Qurilma internetga ulanmagan. Bu ma’lumotni ko‘rish uchun internetga ulangan istalgan kompyuterda %s sahifasini oching."</string>
<string name="settings_safetylegal_activity_loading" msgid="7680998654145172">"Yuklanmoqda…"</string>
<string name="confirm_device_credential_use_alternate_method" msgid="1279869272895739941">"Muqobil usuldan foydalanish"</string>
- <string name="lockpassword_choose_your_screen_lock_header" msgid="6283518876031424798">"Ekranni qulfini sozlash"</string>
+ <string name="lockpassword_choose_your_screen_lock_header" msgid="6283518876031424798">"Ekran qulfini sozlash"</string>
<string name="lockpassword_choose_your_password_message" msgid="2838273977481046536">"Xavfsizlik uchun parol o‘rnating"</string>
<string name="lockpassword_choose_your_password_header_for_fingerprint" msgid="4921343500484160894">"Barmoq izidan foydalanish uchun parol o‘rnating"</string>
<string name="lockpassword_choose_your_pattern_header_for_fingerprint" msgid="314870151462139417">"Avval grafik kalit yarating"</string>
@@ -1733,9 +1735,9 @@
<string name="lockpassword_strong_auth_required_device_pattern" msgid="1014214190135045781">"Grafik kalitni kiriting"</string>
<string name="lockpassword_strong_auth_required_device_pin" msgid="24030584350601016">"Qurilma PIN kodini kiriting"</string>
<string name="lockpassword_strong_auth_required_device_password" msgid="7746588206458754598">"Qurilma parolini kiriting"</string>
- <string name="lockpassword_strong_auth_required_work_pattern" msgid="6861154706098327320">"Ishchi profil grafik kalitini kiriting"</string>
- <string name="lockpassword_strong_auth_required_work_pin" msgid="6306902249365524526">"Ishchi profil PIN kodini kiriting"</string>
- <string name="lockpassword_strong_auth_required_work_password" msgid="2917338218971012776">"Ishchi profil parolini kiriting"</string>
+ <string name="lockpassword_strong_auth_required_work_pattern" msgid="6861154706098327320">"Ish profili grafik kalitini kiriting"</string>
+ <string name="lockpassword_strong_auth_required_work_pin" msgid="6306902249365524526">"Ish profili PIN kodini kiriting"</string>
+ <string name="lockpassword_strong_auth_required_work_password" msgid="2917338218971012776">"Ish profili parolini kiriting"</string>
<string name="lockpassword_confirm_your_pattern_details_frp" msgid="1085862410379709928">"Telefoningiz zavod sozlamalariga qaytarildi. Bu telefondan foydalanish uchun avvalgi grafik kalitni kiriting."</string>
<string name="lockpassword_confirm_your_pin_details_frp" msgid="6849889353126558761">"Telefoningiz zavod sozlamalariga qaytarildi. Bu telefondan foydalanish uchun avvalgi PIN kodni kiriting."</string>
<string name="lockpassword_confirm_your_password_details_frp" msgid="3239944795659418737">"Telefoningiz zavod sozlamalariga qaytarildi. Bu telefondan foydalanish uchun avvalgi parolni kiriting."</string>
@@ -1772,13 +1774,13 @@
<string name="lockpattern_settings_help_how_to_record" msgid="6037403647312543908">"Grafik kalit qanday chiziladi"</string>
<string name="lockpattern_too_many_failed_confirmation_attempts" msgid="3043127997770535921">"Juda ko‘p noto‘g‘ri urinishlar bo‘ldi! <xliff:g id="NUMBER">%d</xliff:g> soniyadan so‘ng qayta urinib ko‘ring."</string>
<string name="activity_not_found" msgid="3492413375341165453">"Ilova telefoningizga o‘rnatilmagan."</string>
- <string name="lock_settings_profile_title" msgid="3928992050074556160">"Ishchi profil xavfsizligi"</string>
- <string name="lock_settings_profile_screen_lock_title" msgid="285267471459162203">"Ishchi profil ekran qulfi"</string>
+ <string name="lock_settings_profile_title" msgid="3928992050074556160">"Ish profili xavfsizligi"</string>
+ <string name="lock_settings_profile_screen_lock_title" msgid="285267471459162203">"Ish profili ekran qulfi"</string>
<string name="lock_settings_profile_unification_title" msgid="2629698644191935287">"Bitta qulfdan foydalanish"</string>
- <string name="lock_settings_profile_unification_summary" msgid="4797188229308317207">"Ishchi profil va qurilma ekrani uchun bitta qulfdan foydalanish"</string>
+ <string name="lock_settings_profile_unification_summary" msgid="4797188229308317207">"Ish profili va qurilma ekrani uchun bitta qulfdan foydalanish"</string>
<string name="lock_settings_profile_unification_dialog_title" msgid="1690211342491067179">"Bitta qulfdan foydalanilsinmi?"</string>
- <string name="lock_settings_profile_unification_dialog_body" msgid="8629158560032603101">"Qurilmangiz ishchi profilingiz ekran qulfidan foydalanadi. Ishchi profil qulfi qoidalari ikkala qulfga ham qo‘llaniladi."</string>
- <string name="lock_settings_profile_unification_dialog_uncompliant_body" msgid="1217609779267643474">"Ishchi profilning ekran qulfi sozlamalari tashkilotingiz xavfsizlik qoidalariga mos kelmaydi. Qurilma ekrani va ishchi profil uchun bitta qulfdan foydalanishingiz mumkin. Lekin har qanday ishchi profil qulfi qoidalari qo‘llaniladi."</string>
+ <string name="lock_settings_profile_unification_dialog_body" msgid="8629158560032603101">"Qurilmangiz ishchi profilingiz ekran qulfidan foydalanadi. Ish profili qulfi qoidalari ikkala qulfga ham qo‘llaniladi."</string>
+ <string name="lock_settings_profile_unification_dialog_uncompliant_body" msgid="1217609779267643474">"Ish profilining ekran qulfi sozlamalari tashkilotingiz xavfsizlik qoidalariga mos kelmaydi. Qurilma ekrani va ish profili uchun bitta qulfdan foydalanishingiz mumkin. Lekin har qanday ish profili qulfi qoidalari qo‘llaniladi."</string>
<string name="lock_settings_profile_unification_dialog_confirm" msgid="888942752619181804">"Bitta qulfdan foydalanish"</string>
<string name="lock_settings_profile_unification_dialog_uncompliant_confirm" msgid="8046452284593057185">"Bitta qulfdan foydalanish"</string>
<string name="lock_settings_profile_unified_summary" msgid="5347244550751740962">"Qurilmaning qulflash usulidan foydalanish"</string>
@@ -1798,7 +1800,7 @@
<string name="advanced_settings_summary" msgid="5912237062506771716">"Qo‘shimcha sozlamalar tanlamalarini yoqib qo‘yish"</string>
<string name="application_info_label" msgid="3886253474964599105">"Ilova haqida"</string>
<string name="storage_label" msgid="1109537840103290384">"Xotira"</string>
- <string name="auto_launch_label" msgid="47089737922907379">"Odatiy tarzda ochish"</string>
+ <string name="auto_launch_label" msgid="47089737922907379">"Birlamchi sifatida ochish"</string>
<string name="auto_launch_label_generic" msgid="7865828543459493308">"Birlamchi"</string>
<string name="screen_compatibility_label" msgid="3638271673726075815">"Ekrandagi moslashuv"</string>
<string name="permissions_label" msgid="7341733648403464213">"Ruxsatlar"</string>
@@ -1827,7 +1829,7 @@
<string name="app_factory_reset" msgid="8718986000278776272">"Yangilanishlarni o‘chirish"</string>
<string name="auto_launch_enable_text" msgid="3372898942144027341">"Ushbu ilovaning ba’zi andoza harakatlarini tanladingiz."</string>
<string name="always_allow_bind_appwidgets_text" msgid="2286211654774611037">"Ushbu ilova vidjetlar yaratish va ularning ma‘lumotlariga kirishiga ruxsat berishni tanladingiz."</string>
- <string name="auto_launch_disable_text" msgid="8560921288036801416">"Birlamchi sozlamalar o‘rnatilmagan."</string>
+ <string name="auto_launch_disable_text" msgid="8560921288036801416">"Birlamchi sozlamalar belgilanmagan."</string>
<string name="clear_activities" msgid="2068014972549235347">"Birlamchilarni tozalash"</string>
<string name="screen_compatibility_text" msgid="1768064020294301496">"Ushbu ilova siznikidaqa ekranlar uchun mos qilib chiqarilmagan. Ekraningiz moslamalarini mana bu yerda o‘zgartirishingiz mumkin."</string>
<string name="ask_compatibility" msgid="6687958195768084807">"Ishga tushirilganda so‘rash"</string>
@@ -1870,7 +1872,7 @@
<string name="computing_size" msgid="2234106107535318136">"Hisoblanmoqda…"</string>
<string name="invalid_size_value" msgid="1202239724000802296">"Paket o‘lchamini hisoblamadi"</string>
<string name="version_text" msgid="5421619604445758652">"<xliff:g id="VERSION_NUM">%1$s</xliff:g> versiya"</string>
- <string name="move_app" msgid="5400135231255614785">"Ko‘chirish"</string>
+ <string name="move_app" msgid="5400135231255614785">"Boshqa joyga olish"</string>
<string name="move_app_to_internal" product="tablet" msgid="8658767231643024635">"Planshetga o‘tkazish"</string>
<string name="move_app_to_internal" product="default" msgid="1031111519418252055">"Telefonga ko‘chirish"</string>
<string name="move_app_to_sdcard" product="nosdcard" msgid="5555917755995563518">"USB xotiraga o‘tkazish"</string>
@@ -1971,7 +1973,7 @@
<string name="show_ime_summary" msgid="3246628154011464373">"Jismoniy klaviatura ulanganida ekranda chiqib turadi"</string>
<string name="keyboard_shortcuts_helper" msgid="6574386807271399788">"Tezkor tugmalar"</string>
<string name="keyboard_shortcuts_helper_summary" msgid="8024313306403779742">"Tezkor tugmalarni ekranga chiqarish"</string>
- <string name="language_and_input_for_work_category_title" msgid="2053255944038892588">"Ishchi profil klaviaturalari va vositalari"</string>
+ <string name="language_and_input_for_work_category_title" msgid="2053255944038892588">"Ish profili klaviaturalari va vositalari"</string>
<string name="virtual_keyboards_for_work_title" msgid="3968291646938204523">"Ish uchun virtual klaviatura"</string>
<string name="default_keyboard_layout" msgid="9171704064451242230">"Standart"</string>
<string name="pointer_speed" msgid="800691982011350432">"Kursor tezligi"</string>
@@ -2037,7 +2039,7 @@
<string name="accessibility_settings_summary" msgid="5742379519336396561">"Ekran suxandoni, displey, boshqaruv elementlari"</string>
<string name="vision_settings_title" msgid="7315352351051423944">"Maxsus imkoniyatlar"</string>
<string name="vision_settings_description" msgid="3476589459009287332">"Qurilmangizdan qulay foydalanish uchun maxsus imkoniyatlardan foydalaning. Bu parametrlarni keyinroq sozlamalar orqali o‘zgartirish mumkin."</string>
- <string name="vision_settings_suggestion_title" msgid="7268661419110951128">"Shrift o‘lchamini o‘zgartirish"</string>
+ <string name="vision_settings_suggestion_title" msgid="7268661419110951128">"Shrift o‘lchamini o‘zgartiring"</string>
<string name="screen_reader_category_title" msgid="6300714148519645544">"Ekrandan o‘qish vositalari"</string>
<string name="audio_and_captions_category_title" msgid="6140472938769619212">"Audio va ekrandagi matn"</string>
<string name="display_category_title" msgid="545168481672250195">"Ekran"</string>
@@ -2086,16 +2088,16 @@
<string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"Bosganda va bosib turganda kechikish"</string>
<string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"Ranglarni akslantirish"</string>
<string name="accessibility_display_inversion_preference_subtitle" msgid="69291255322175323">"Unumdorligiga ta’sir qilishi mumkin"</string>
- <string name="accessibility_autoclick_preference_title" msgid="9164599088410340405">"Kutish vaqti"</string>
+ <string name="accessibility_autoclick_preference_title" msgid="9164599088410340405">"Kechikish vaqti"</string>
<string name="accessibility_autoclick_description" msgid="5492414927846407499">"Agar sichqoncha ishlatsangiz, muayyan vaqtdan keyin kursor harakatlanishdan to‘xtaganda u avtomatik ishlashini sozlashingiz mumkin."</string>
<string name="accessibility_autoclick_delay_preference_title" msgid="8303022510942147049">"Bosishdan oldin biroz kuting"</string>
<string name="accessibility_vibration_settings_title" msgid="1902649657883159406">"Tebranish"</string>
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Bildirishnomada tebranish"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Jiringlaganda tebranish"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Sensor tebranishi"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Xizmatdan foydalanish"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Rangni tuzatish funksiyasidan foydalanish"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Taglavhalardan foydalanish"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Xizmatdan foydalanish"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Rangni tuzatish funksiyasidan foydalanish"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Taglavhalardan foydalanish"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Davom etish"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Eshitish apparatlari"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Hech qanday eshitish apparatlari ulanmagan"</string>
@@ -2149,7 +2151,7 @@
<string name="captioning_standard_options_title" msgid="4124898413348084226">"Standart sozlamalar"</string>
<string name="captioning_locale" msgid="4734464353806207943">"Til"</string>
<string name="captioning_text_size" msgid="1707122517246408084">"Matn o‘lchami"</string>
- <string name="captioning_preset" msgid="7429888317480872337">"Taglavhalar ko‘rinishi"</string>
+ <string name="captioning_preset" msgid="7429888317480872337">"Taglavhalar uslubi"</string>
<string name="captioning_custom_options_title" msgid="4530479671071326732">"Buyurtmali tanlamalar"</string>
<string name="captioning_background_color" msgid="2434458880326292180">"Fon rangi"</string>
<string name="captioning_background_opacity" msgid="8178926599201811936">"Fon yarim tiniqligi"</string>
@@ -2160,7 +2162,7 @@
<string name="captioning_edge_color" msgid="4330622137047993780">"Qirra rangi"</string>
<string name="captioning_edge_type" msgid="4414946407430588162">"Qirra turi"</string>
<string name="captioning_typeface" msgid="7893208796949341767">"Shriftlar oilasi"</string>
- <string name="captioning_preview_text" msgid="4877753964772618049">"Taglavlahar shunday ko‘rinadi"</string>
+ <string name="captioning_preview_text" msgid="4877753964772618049">"Taglavhalar shunday chiqadi"</string>
<string name="captioning_preview_characters" msgid="6469599599352973561">"Aa"</string>
<string name="locale_default" msgid="910074908458214054">"Birlamchi"</string>
<string name="color_title" msgid="132875486061816584">"Rang"</string>
@@ -2172,7 +2174,7 @@
<string name="color_red" msgid="7426040122729897596">"Qizil"</string>
<string name="color_green" msgid="3432648781089648971">"Yashil"</string>
<string name="color_blue" msgid="4055855996393833996">"Ko‘k"</string>
- <string name="color_cyan" msgid="7669317410901991453">"Moviy"</string>
+ <string name="color_cyan" msgid="7669317410901991453">"Zangori"</string>
<string name="color_yellow" msgid="8847327436896180799">"Sariq"</string>
<string name="color_magenta" msgid="721976999611563071">"Pushtirang"</string>
<string name="enable_service_title" msgid="2746143093464928251">"<xliff:g id="SERVICE">%1$s</xliff:g> yoqilsinmi?"</string>
@@ -2475,7 +2477,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Yoqish"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Quvvat tejash funksiyasidan foydalanish"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Quvvat tejash funksiyasidan foydalanish"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Avtomatik yoqish"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Hech qachon"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"batareya quvvati: <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
@@ -2610,12 +2612,12 @@
<string name="sync_active" msgid="1112604707180806364">"Sinxronlash faol"</string>
<string name="account_sync_settings_title" msgid="3344538161552327748">"Sinxronlash"</string>
<string name="sync_is_failing" msgid="8284618104132302644">"Sinxronizatsiyada muammo bor. Tez orada qayta tiklanadi."</string>
- <string name="add_account_label" msgid="4461298847239641874">"Hisob qo‘shish"</string>
- <string name="managed_profile_not_available_label" msgid="8784246681719821917">"Ishchi profil hali mavjud emas"</string>
- <string name="work_mode_label" msgid="6845849194740195757">"Ishchi profil"</string>
+ <string name="add_account_label" msgid="4461298847239641874">"Hisob kiritish"</string>
+ <string name="managed_profile_not_available_label" msgid="8784246681719821917">"Ish profili hali mavjud emas"</string>
+ <string name="work_mode_label" msgid="6845849194740195757">"Ish profili"</string>
<string name="work_mode_on_summary" msgid="1682781113156323592">"Tashkilotingiz tomonidan boshqariladi"</string>
<string name="work_mode_off_summary" msgid="1688885392211178315">"Ilovalar va bildirishnomalar o‘chiq"</string>
- <string name="remove_managed_profile_label" msgid="4625542553784793536">"Ishchi profilni o‘chirish"</string>
+ <string name="remove_managed_profile_label" msgid="4625542553784793536">"Ish profilini olib tashlash"</string>
<string name="background_data" msgid="8275750862371471171">"Ma’lumotlarni fonda yuklash"</string>
<string name="background_data_summary" msgid="799640633948841990">"Ilovalar sinxronlanishi, ma’lumotlarni istalgan paytda jo‘natishi va qabul qilishi mumkin"</string>
<string name="background_data_dialog_title" msgid="8306650658158895976">"Ma’lumotlarni fonda yuklash to‘xtatilsinmi?"</string>
@@ -2642,7 +2644,7 @@
<string name="header_account_settings" msgid="8586173964125512219">"Hisob sozlamalari"</string>
<string name="remove_account_label" msgid="5885425720323823387">"Hisobni olib tashlash"</string>
<string name="header_add_an_account" msgid="8482614556580804956">"Hisob kiriting"</string>
- <string name="really_remove_account_title" msgid="4166512362915154319">"Hisobni olib tashlansinmi?"</string>
+ <string name="really_remove_account_title" msgid="4166512362915154319">"Hisob olib tashlansinmi?"</string>
<string name="really_remove_account_message" product="tablet" msgid="7403843371045856719">"Ushbu hisob bilan bog‘liq barcha xabarlar, kontaktlar va boshqa ma’lumotlar telefondan o‘chib ketadi."</string>
<string name="really_remove_account_message" product="default" msgid="8951224626153163914">"Ushbu hisob bilan bog‘liq barcha xabarlar, kontaktlar va boshqa ma’lumotlar telefondan o‘chib ketadi."</string>
<string name="really_remove_account_message" product="device" msgid="3751798556257519916">"Ushbu hisob o‘chirilganda unga bog‘liq barcha xabar, kontakt va boshqa ma’lumotlar qurilmadan o‘chib ketadi."</string>
@@ -2684,8 +2686,8 @@
<string name="data_usage_menu_sim_cards" msgid="8508154611676507088">"SIM kartalar"</string>
<string name="data_usage_cellular_data_summary" msgid="9162777397135709280">"To‘xtatildi (limit)"</string>
<string name="account_settings_menu_auto_sync" msgid="2673669556006027506">"Avto-sinxronizatsiya"</string>
- <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"Avto-sinxronizatsiya (shaxsiy)"</string>
- <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Avto-sinxronizatsiya (ishchi)"</string>
+ <string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"Avtomatik sinxronlash (shaxsiy)"</string>
+ <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Avtomatik sinxronlash (ish)"</string>
<string name="data_usage_change_cycle" msgid="447761920472170031">"O‘zgartirish…"</string>
<string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"Oyning qaysi kunida trafik sarfi davri yangilansin:"</string>
<string name="data_usage_empty" msgid="7981405723435034032">"Ushbu vaqt oralig‘ida hech qanday ilova trafik sarflamadi."</string>
@@ -2752,7 +2754,7 @@
<string name="data_usage_metered_no" msgid="1961524615778610008">"Bepul"</string>
<string name="data_usage_disclaimer" msgid="4683321532922590425">"Aloqa operatorining hisob-kitobi qurilmanikidan farq qilishi mumkin."</string>
<string name="cryptkeeper_emergency_call" msgid="4625420047524693116">"Favqulodda chaqiruv"</string>
- <string name="cryptkeeper_return_to_call" msgid="4433942821196822815">"Chaqiruvga qaytish"</string>
+ <string name="cryptkeeper_return_to_call" msgid="4433942821196822815">"Suhbatga qaytish"</string>
<string name="vpn_name" msgid="3538818658670774080">"Tarmoq nomi"</string>
<string name="vpn_type" msgid="6389116710008658550">"Turi"</string>
<string name="vpn_server" msgid="5216559017318406820">"Server manzili"</string>
@@ -2873,7 +2875,7 @@
<string name="user_set_lock_button" msgid="4660971133148866612">"Qulf o‘rnatish"</string>
<string name="user_summary_not_set_up" msgid="6436691939044332679">"Sozlanmagan"</string>
<string name="user_summary_restricted_not_set_up" msgid="896552290436689508">"Sozlanmagan - Cheklangan profil"</string>
- <string name="user_summary_managed_profile_not_set_up" msgid="3032986082684011281">"Ishchi profil – sozlanmagan"</string>
+ <string name="user_summary_managed_profile_not_set_up" msgid="3032986082684011281">"Ish profili – sozlanmagan"</string>
<string name="user_admin" msgid="805802526361071709">"Administrator"</string>
<string name="user_you" msgid="8212549708652717106">"Siz (<xliff:g id="NAME">%s</xliff:g>)"</string>
<string name="user_nickname" msgid="1088216221559125529">"Nik nomi"</string>
@@ -2902,7 +2904,7 @@
<string name="user_confirm_remove_self_title" msgid="6739480453680217543">"Profilingiz o‘chirilsinmi?"</string>
<string name="user_confirm_remove_title" msgid="1034498514019462084">"Olib tashlansinmi?"</string>
<string name="user_profile_confirm_remove_title" msgid="6138684743385947063">"Profil o‘chirilsinmi?"</string>
- <string name="work_profile_confirm_remove_title" msgid="3168910958076735800">"Profil o‘chirilsinmi?"</string>
+ <string name="work_profile_confirm_remove_title" msgid="3168910958076735800">"Ish profili olib tashlansinmi?"</string>
<string name="user_confirm_remove_self_message" product="tablet" msgid="2889456786320157545">"Ushbu planshetda saqlangan ma’lumotlaringiz o‘chib ketadi. Bu amalni ortga qaytarib bo‘lmaydi."</string>
<string name="user_confirm_remove_self_message" product="default" msgid="8441729423565705183">"Ushbu telefonda saqlangan ma’lumotlaringiz o‘chib ketadi. Bu amalni ortga qaytarib bo‘lmaydi."</string>
<string name="user_confirm_remove_message" msgid="5202150470271756013">"Barcha ilovalar va ma’lumotlar o‘chirib tashlanadi."</string>
@@ -2934,11 +2936,11 @@
<string name="nfc_payment_default" msgid="7869273092463612271">"Birlamchi to‘lov vositasi"</string>
<string name="nfc_payment_default_not_set" msgid="955804193510335338">"Tanlanmagan"</string>
<string name="nfc_payment_app_and_desc" msgid="102312684211458190">"<xliff:g id="APP">%1$s</xliff:g> – <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
- <string name="nfc_payment_use_default" msgid="3098724195746409476">"Birlamchi ilovadan foydalanilsin"</string>
+ <string name="nfc_payment_use_default" msgid="3098724195746409476">"Birlamchi ilovadan foydalanish"</string>
<string name="nfc_payment_favor_default" msgid="7555356982142464260">"Har doim"</string>
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"Boshqa to‘lov ilovasi ochiq holat bundan mustasno"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"Kontaktsiz to‘lovda bundan foydalanilsin:"</string>
- <string name="nfc_how_it_works_title" msgid="6531433737926327904">"Terminal orqali to‘lash"</string>
+ <string name="nfc_how_it_works_title" msgid="6531433737926327904">"Qanday toʻlanadi"</string>
<string name="nfc_how_it_works_content" msgid="9174575836302449343">"Avval to‘lov ilovasini sozlang. Keyin telefoningiz orqa tomonini kontaktsiz to‘lov belgisi tushirilgan terminalga yaqinlashtiring."</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"OK"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"Yana…"</string>
@@ -3021,8 +3023,8 @@
<string name="sim_editor_number" msgid="1757338150165234970">"Raqam"</string>
<string name="sim_editor_color" msgid="373059962306191123">"SIM karta rangi"</string>
<string name="sim_card_select_title" msgid="4925862525985187946">"SIM kartani tanlang"</string>
- <string name="color_orange" msgid="3159707916066563431">"To‘q sariq"</string>
- <string name="color_purple" msgid="4391440966734810713">"Binafsharang"</string>
+ <string name="color_orange" msgid="3159707916066563431">"Apelsinrang"</string>
+ <string name="color_purple" msgid="4391440966734810713">"Siyohrang"</string>
<string name="sim_no_inserted_msg" msgid="1197884607569714609">"SIM karta solinmagan"</string>
<string name="sim_status_title" msgid="4483653750844520871">"SIM karta holati"</string>
<string name="sim_status_title_sim_slot" msgid="416005570947546124">"SIM karta holati (%1$d-SIM uyasi)"</string>
@@ -3107,7 +3109,7 @@
<string name="keywords_color_temperature" msgid="2255253972992035046">"rang, harorat, D65, D73, oq, sariq, ko‘k, iliq, salqin"</string>
<string name="keywords_lockscreen" msgid="4936846554280830394">"qulfni ochish uchun surish, parol, grafik kalit, PIN kod"</string>
<string name="keywords_profile_challenge" msgid="8653718001253979611">"ish vazifasi, ish, profil"</string>
- <string name="keywords_unification" msgid="2020759909366983593">"ishchi profil, boshqariluvchi profil, birlashtirish, birlashuv, ish, profil"</string>
+ <string name="keywords_unification" msgid="2020759909366983593">"ish profili, boshqariluvchi profil, birlashtirish, birlashuv, ish, profil"</string>
<string name="keywords_gesture" msgid="5031323247529869644">"imo-ishoralar"</string>
<string name="keywords_payment_settings" msgid="4745023716567666052">"to‘lash, bosish, to‘lovlar"</string>
<string name="keywords_backup" msgid="7433356270034921627">"zaxira, zaxira nusxa olish"</string>
@@ -3176,7 +3178,7 @@
<string name="emergency_tone_vibrate" msgid="5020068066905681181">"Tebranishlar"</string>
<string name="boot_sounds_title" msgid="7583926202411353620">"Ovozni yoqish"</string>
<string name="live_caption_title" msgid="7926591158657997051">"Jonli izoh"</string>
- <string name="live_caption_summary" msgid="9064771862352393125">"Avtomatik taglavha mediasi"</string>
+ <string name="live_caption_summary" msgid="9064771862352393125">"Avtomatik taglavha yaratish"</string>
<string name="zen_mode_settings_summary_off" msgid="6929319200478424962">"Hech qachon"</string>
<plurals name="zen_mode_settings_summary_on" formatted="false" msgid="6061723291126091396">
<item quantity="other"><xliff:g id="ON_COUNT">%d</xliff:g> ta yoqilgan</item>
@@ -3294,7 +3296,7 @@
<string name="zen_onboarding_new_setting_summary" msgid="8264430315983860075">"Bildirishnomalar chiqmaydi yoki eshittirilmaydi. Yulduzchali kontaktlardan chaqiruvlar va qayta chaqiruvlarga ruxsat berilgan."</string>
<string name="zen_onboarding_current_setting_summary" msgid="3569246708507270821">"(Joriy parametr)"</string>
<string name="zen_onboarding_dnd_visual_disturbances_header" msgid="7584229011611927613">"Bezovta qilinmasin rejimining bildirishnomalar sozlamalari o‘zgartirilsinmi?"</string>
- <string name="sound_work_settings" msgid="4140215240360927923">"Ishchi profil ovozlari"</string>
+ <string name="sound_work_settings" msgid="4140215240360927923">"Ish profili ovozlari"</string>
<string name="work_use_personal_sounds_title" msgid="531727195073003599">"Shaxsiy profil ovozlaridan foydalanish"</string>
<string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"Tovushlar ishchi va shaxsiy profillar uchun bir xil"</string>
<string name="work_ringtone_title" msgid="5499360583947410224">"Ishchi telefon ringtoni"</string>
@@ -3303,7 +3305,7 @@
<string name="work_sound_same_as_personal" msgid="7728560881697159758">"Shaxsiy profilniki bilan bir xil"</string>
<string name="work_sync_dialog_title" msgid="4799120971202956837">"Tovushlar almashtirilsinmi?"</string>
<string name="work_sync_dialog_yes" msgid="2110726233746476066">"Almashtirish"</string>
- <string name="work_sync_dialog_message" msgid="944233463059129156">"Joriy ishchi profil tovushlaridan ishchi profilingizda foydalaniladi"</string>
+ <string name="work_sync_dialog_message" msgid="944233463059129156">"Joriy ish profili tovushlaridan ish profiliingizda foydalaniladi"</string>
<string name="ringtones_install_custom_sound_title" msgid="210551218424553671">"Maxsus ovoz qo‘shilsinmi?"</string>
<string name="ringtones_install_custom_sound_content" msgid="6683649115132255452">"Bu fayldan <xliff:g id="FOLDER_NAME">%s</xliff:g> jildiga nusxalanadi"</string>
<string name="ringtones_category_preference_title" msgid="4491932700769815470">"Ringtonlar"</string>
@@ -3334,14 +3336,14 @@
<string name="swipe_direction_rtl" msgid="4521416787262888813">"Yopish uchun chapga, menyuni ochish uchun oʻngga suring"</string>
<string name="notification_pulse_title" msgid="4861418327614907116">"Indikator"</string>
<string name="lock_screen_notifications_title" msgid="6889072265118747835">"Qulflangan ekranda"</string>
- <string name="locked_work_profile_notification_title" msgid="8307025804986190658">"Ishchi profil qulflanganda"</string>
+ <string name="locked_work_profile_notification_title" msgid="8307025804986190658">"Ish profili qulflanganda"</string>
<string name="lock_screen_notifications_summary_show" msgid="5788874994455257378">"Bildirishnomalar butun chiqsin"</string>
<string name="lock_screen_notifications_summary_hide" msgid="3668806866535260143">"Maxfiy axborotlar berkitilsin"</string>
<string name="lock_screen_notifications_summary_disable" msgid="3259929507369817672">"Bildirishnomalar chiqmasin"</string>
<string name="lock_screen_notifications_interstitial_message" msgid="4230189215124387818">"Qurilmangiz qulflanganda, bildirishnomalar qanday chiqsin?"</string>
<string name="lock_screen_notifications_interstitial_title" msgid="2832587379332443505">"Bildirishnomalar"</string>
<string name="lock_screen_notifications_summary_show_profile" msgid="8908775469657073273">"Ishchi bildirishnomalar butun chiqsin"</string>
- <string name="lock_screen_notifications_summary_hide_profile" msgid="7898086300511010591">"Ishchi profil ma’lumotlari berkitilsin"</string>
+ <string name="lock_screen_notifications_summary_hide_profile" msgid="7898086300511010591">"Ish profili ma’lumotlari berkitilsin"</string>
<string name="lock_screen_notifications_interstitial_message_profile" msgid="3324187664458600354">"Qurilmangiz qulflanganda, profil bildirishnomalari qanday chiqsin?"</string>
<string name="lock_screen_notifications_interstitial_title_profile" msgid="4043621508889929254">"Profil bildirishnomalari"</string>
<string name="notifications_title" msgid="8334011924253810654">"Bildirishnomalar"</string>
@@ -3375,7 +3377,7 @@
<string name="notifications_sent_weekly" msgid="5859675428990259432">"Haftasiga ~<xliff:g id="NUMBER">%1$s</xliff:g>"</string>
<string name="notifications_sent_never" msgid="237997329598144638">"Hech qachon"</string>
<string name="manage_notification_access_title" msgid="5348743662189787547">"Bildirishnomalarga kirish"</string>
- <string name="work_profile_notification_access_blocked_summary" msgid="8148871282484870576">"Ishchi profil bildirishnomalariga kirish taqiqlangan"</string>
+ <string name="work_profile_notification_access_blocked_summary" msgid="8148871282484870576">"Ish profili bildirishnomalariga kirish taqiqlangan"</string>
<string name="manage_notification_access_summary_zero" msgid="236809421271593016">"Ilovalar bildirishnomalarni ko‘ra olmaydi"</string>
<plurals name="manage_notification_access_summary_nonzero" formatted="false" msgid="8496218948429646792">
<item quantity="other">%d ilova bildirishnomalarni o‘qishi mumkin</item>
@@ -3408,9 +3410,9 @@
<string name="zen_access_detail_switch" msgid="8706332327904974500">"Bezovta qilinmasin ruxsatini berish"</string>
<string name="zen_access_empty_text" msgid="7667538993781607731">"Hech qanday ilova “Bezovta qilinmasin” funksiyasiga ruxsat so‘ramagan"</string>
<string name="loading_notification_apps" msgid="1978345231934072091">"Ilovalar yuklanmoqda…"</string>
- <string name="app_notifications_off_desc" msgid="3904090905748895146">"Talabingizga binoa, Android bu ilova bildirishnomalarini ekranga chiqarmaydi"</string>
- <string name="channel_notifications_off_desc" msgid="8005444443218306611">"Talabingizga binoan, Android bu turkumdagi bildirishnomalarni bloklamoqda"</string>
- <string name="channel_group_notifications_off_desc" msgid="7154205544298672850">"Talabingizga binoan, Android bunday bildirishnomalar guruhini bloklaydi"</string>
+ <string name="app_notifications_off_desc" msgid="3904090905748895146">"Android ushbu ilova bildirishnomalarini ekranga chiqarmaydi"</string>
+ <string name="channel_notifications_off_desc" msgid="8005444443218306611">"Android bu turkumdagi bildirishnomalarni bloklamoqda"</string>
+ <string name="channel_group_notifications_off_desc" msgid="7154205544298672850">"Android bunday bildirishnomalar guruhini bloklaydi"</string>
<string name="notification_channels" msgid="956764228116145956">"Turkumlar"</string>
<string name="notification_channels_other" msgid="1615988645667411530">"Boshqa"</string>
<plurals name="notification_group_summary" formatted="false" msgid="3744856747513344999">
@@ -3574,7 +3576,7 @@
<string name="screen_pinning_unlock_pin" msgid="1441705536015645023">"Yechishda PIN kod talab qilinsin"</string>
<string name="screen_pinning_unlock_password" msgid="1017776884000170841">"Yechishdan oldin parol so‘ralsin"</string>
<string name="screen_pinning_unlock_none" msgid="9183040569733226911">"Yechish vaqtida qurilma qulflansin"</string>
- <string name="opening_paragraph_delete_profile_unknown_company" msgid="2350380017136403670">"Bu ishchi profil quyidagi tomonidan boshqariladi:"</string>
+ <string name="opening_paragraph_delete_profile_unknown_company" msgid="2350380017136403670">"Bu ish profili quyidagi tomonidan boshqariladi:"</string>
<string name="managing_admin" msgid="3212584016377581608">"<xliff:g id="ADMIN_APP_LABEL">%s</xliff:g> tomonidan boshqariladi"</string>
<string name="experimental_preference" msgid="5903223408406906322">"(Tajribaviy)"</string>
<string name="encryption_interstitial_header" msgid="3298397268731647519">"Xavfsiz ishga tushirish"</string>
@@ -3602,7 +3604,7 @@
<string name="imei_information_title" msgid="7666097743700170757">"IMEI kod ma’lumotlari"</string>
<string name="imei_information_summary" msgid="716516316022275083">"IMEI raqamiga aloqador ma’lumotlar"</string>
<string name="slot_number" msgid="785422579177068698">"(<xliff:g id="SLOT_NUM">%1$d</xliff:g>-uya)"</string>
- <string name="launch_by_default" msgid="6106985160202769725">"Odatiy tarzda ochish"</string>
+ <string name="launch_by_default" msgid="6106985160202769725">"Birlamchi sifatida ochish"</string>
<string name="app_launch_domain_links_title" msgid="2987289657348349133">"Havolalarni ochish"</string>
<string name="app_launch_open_domain_urls_title" msgid="8595126859922391331">"Mos havolalarni ochish"</string>
<string name="app_launch_open_domain_urls_summary" msgid="6803029846855502366">"Avtomatik ochilsin"</string>
@@ -3649,7 +3651,7 @@
<string name="filter_enabled_apps" msgid="5888459261768538489">"Oʻrnatilgan ilovalar"</string>
<string name="filter_instant_apps" msgid="8087483282854072366">"Darhol ochiladigan ilovalar"</string>
<string name="filter_personal_apps" msgid="3473268022652904457">"Shaxsiy"</string>
- <string name="filter_work_apps" msgid="4202483998339465542">"Ishga oid"</string>
+ <string name="filter_work_apps" msgid="4202483998339465542">"Ish"</string>
<string name="filter_notif_all_apps" msgid="1862666327228804896">"Ilovalar: hammasi"</string>
<string name="filter_notif_blocked_apps" msgid="5694956954776028202">"Bildirishnoma kelmaydigan"</string>
<string name="filter_notif_urgent_channels" msgid="5000735867167027148">"Turkumlar: favqulodda muhim"</string>
@@ -3659,7 +3661,7 @@
<string name="advanced_apps" msgid="6643869089344883537">"Kengaytirilgan sozlamalar"</string>
<string name="configure_apps" msgid="4066683118857400943">"Ilovalarni sozlash"</string>
<string name="unknown_app" msgid="2312052973570376877">"Noma’lum ilova"</string>
- <string name="app_permissions" msgid="3215958256821756086">"Ruxsatlar menejeri"</string>
+ <string name="app_permissions" msgid="3215958256821756086">"Ruxsatlar boshqaruvi"</string>
<string name="app_permissions_summary" msgid="8785798165776061594">"Ruxsatga ega ilovalar (<xliff:g id="APPS">%1$s</xliff:g>)"</string>
<string name="tap_to_wake" msgid="1902991239401652323">"Teginib yoqish"</string>
<string name="tap_to_wake_summary" msgid="8485222120721006793">"Qurilmani yoqish uchun ekranning istalgan joyiga ikki marta bosing"</string>
@@ -3731,9 +3733,7 @@
<!-- no translation found for battery_summary (4345690800899981339) -->
<skip />
<string name="battery_power_management" msgid="2853925857548647969">"Quvvat boshqaruvi"</string>
- <!-- String.format failed for translation -->
- <!-- no translation found for no_battery_summary (4105932628367471314) -->
- <skip />
+ <string name="no_battery_summary" msgid="4105932628367471314">"Toʻliq quvvatlanganidan beri quvvat sarflanmadi"</string>
<string name="app_notification_preferences" msgid="5154466638524523201">"Ilova sozlamalari"</string>
<string name="system_ui_settings" msgid="6751165163665775447">"SystemUI Tuner ko‘rsatilsin"</string>
<string name="additional_permissions" msgid="3142290772324571654">"Qo‘shimcha ruxsatlar"</string>
@@ -3746,7 +3746,7 @@
<string name="decline_remote_bugreport_action" msgid="706319275774199033">"Rad etish"</string>
<string name="usb_use_charging_only" msgid="2344625733377110164">"Axborot uzatilmasin"</string>
<string name="usb_use_charging_only_desc" msgid="3283518562582478950">"Faqat shu qurilmani quvvatlash"</string>
- <string name="usb_use_power_only" msgid="6595783381323810697">"Ulangan qurilmani quvvatlang"</string>
+ <string name="usb_use_power_only" msgid="6595783381323810697">"Ulangan qurilmani quvvatlash"</string>
<string name="usb_use_file_transfers" msgid="6153021302176151884">"Fayl uzatish"</string>
<string name="usb_use_file_transfers_desc" msgid="6953866660041189580">"Boshqa qurilmaga fayl o‘tkazish"</string>
<string name="usb_use_photo_transfers" msgid="5974236250197451257">"PTP"</string>
@@ -3917,7 +3917,7 @@
<string name="condition_cellular_summary" msgid="3607459310548343777">"Internet faqat Wi‑Fi orqali ishlaydi"</string>
<string name="condition_bg_data_title" msgid="184684435298857712">"Trafik tejash"</string>
<string name="condition_bg_data_summary" msgid="5194942860807136682">"Ayrim funksiyalar cheklangan"</string>
- <string name="condition_work_title" msgid="9046811302347490371">"Ishchi profil o‘chirilgan"</string>
+ <string name="condition_work_title" msgid="9046811302347490371">"Ish profili o‘chirilgan"</string>
<string name="condition_work_summary" msgid="5586134491975748565">"Ilova va bildirishnomalarga"</string>
<string name="condition_device_muted_action_turn_on_sound" msgid="5849285946804815263">"Ovozni yoqish"</string>
<string name="condition_device_muted_title" msgid="3930542786434609976">"Ovozsiz qilindi"</string>
@@ -4028,7 +4028,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Qurilma qulflangan bo‘lsa, bildirishnomalarda matn kiritish taqiqlansin"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Birlamchi imlo tekshiruvi vositasi"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Imlo tekshiruvi"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Imlo tekshiruvini yoqish"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Imlo tekshiruvini yoqish"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Tanlanmagan"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(hech qanday)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4099,7 +4099,7 @@
<string name="quick_settings_developer_tiles" msgid="7423485925757678719">"Tezkor sozlamalarning dasturchi tugmalari"</string>
<string name="winscope_trace_quick_settings_title" msgid="940971040388411374">"Winscope trassirovkasi"</string>
<string name="sensors_off_quick_settings_title" msgid="3655699045300438902">"Sensorlar nofaol"</string>
- <string name="managed_profile_settings_title" msgid="4340409321523532402">"Ishchi profil sozlamalari"</string>
+ <string name="managed_profile_settings_title" msgid="4340409321523532402">"Ish profili sozlamalari"</string>
<string name="managed_profile_contact_search_title" msgid="7337225196804457095">"Kontaktlarni qidirish"</string>
<string name="managed_profile_contact_search_summary" msgid="7278267480246726951">"Tashkilot nomi bo‘yicha qidiruvda qo‘ng‘iroq qiluvchi abonent va uning kontaktini aniqlashga ruxsat berish"</string>
<string name="cross_profile_calendar_title" msgid="2351605904015067145">"Taqvimlarni sinxronlash"</string>
@@ -4121,7 +4121,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Xotiradan joy bo‘shatishga yordamlashish uchun xotira boshqaruvi qurilmangizdan zaxiralangan rasm va videolarni o‘chirib tashlaydi."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Rasm va videolarni o‘chirib tashlash"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Xotira boshqaruvi"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Xotira boshqaruvidan foydalanish"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Xotira boshqaruvidan foydalanish"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Avtomatik"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Qo‘llanma"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Joy ochish"</string>
@@ -4140,7 +4140,7 @@
<string name="swipe_up_to_switch_apps_suggestion_summary" msgid="7338653224520387852">"Ilovalarni almashtirish uchun yangi ishorani yoqing"</string>
<string name="ambient_display_title" product="default" msgid="6785677099744344088">"Ekranga ikki marta bosib tekshirish"</string>
<string name="ambient_display_title" product="tablet" msgid="1106285490888683613">"Ekranga ikki marta bosib tekshirish"</string>
- <string name="ambient_display_title" product="device" msgid="5064644474876041478">"Ekranga ikki marta bosib tekshirish"</string>
+ <string name="ambient_display_title" product="device" msgid="5064644474876041478">"Ekranga ikki marta teginish"</string>
<string name="ambient_display_summary" msgid="4882910328216411109">"Vaqt, bildirishnoma va boshqa axborotlarni tekshirish uchun ekranga ikki marta bosing."</string>
<string name="ambient_display_pickup_title" product="default" msgid="7141652156907066938">"Telefonni olib tekshirish"</string>
<string name="ambient_display_pickup_title" product="tablet" msgid="1555456400210301959">"Planshetni olib tekshirish"</string>
@@ -4153,7 +4153,7 @@
<string name="ambient_display_tap_screen_title" product="tablet" msgid="6434521782016864148">"Planshetni tekshirish uchun bosing"</string>
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"Qurilmani tekshirish uchun bosing"</string>
<string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"Vaqt, bildirishnoma va boshqa axborotni tekshirish uchun ekranni bosing."</string>
- <string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"Bildirishnomalarni ochish uchun barmoq izi skaneridan foydalanish"</string>
+ <string name="fingerprint_swipe_for_notifications_title" msgid="3676002930672489760">"Bildirishnomalarni barmoq izi bilan ochish"</string>
<string name="fingerprint_gesture_screen_title" msgid="8638932855807473479">"Barmoq izi skaneri"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="default" msgid="4347999905190477310">"Bildirishnomalarni tekshirish uchun telefon orqasidagi barmoq izi skaneri ustida pastga suring"</string>
<string name="fingerprint_swipe_for_notifications_summary" product="tablet" msgid="3480057984564476283">"Bildirishnomalarni tekshirish uchun planshet orqasidagi barmoq izi skaneri ustida pastga suring"</string>
@@ -4227,7 +4227,7 @@
<string name="enterprise_privacy_lock_device" msgid="1533125067038409945">"Administrator qurilmani qulflashi va parolni o‘zgartirishi mumkin"</string>
<string name="enterprise_privacy_wipe_device" msgid="7555287990273929922">"Administrator barcha qurilma ma’lumotlarini o‘chirib tashlashi mumkin"</string>
<string name="enterprise_privacy_failed_password_wipe_device" msgid="4101502079202483156">"Qurilmadagi barcha ma’lumotlar o‘chirib tashlanishi uchun necha marta parol xato kiritilishi kerak"</string>
- <string name="enterprise_privacy_failed_password_wipe_work" msgid="2881646286634693392">"Ishchi profil ma’lumotlari o‘chirib tashlanishi uchun necha marta parol xato kiritilishi kerak"</string>
+ <string name="enterprise_privacy_failed_password_wipe_work" msgid="2881646286634693392">"Ish profili ma’lumotlari o‘chirib tashlanishi uchun necha marta parol xato kiritilishi kerak"</string>
<plurals name="enterprise_privacy_number_failed_password_wipe" formatted="false" msgid="562550414712223382">
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> ta urinish</item>
<item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> ta urinish</item>
@@ -4491,7 +4491,7 @@
<string name="privacy_dashboard_title" msgid="8764930992456607513">"Maxfiylik"</string>
<string name="privacy_dashboard_summary" msgid="7916431309860824945">"Ruxsatlar, hisobdagi harakatlar, shaxsiy axborotlar"</string>
<string name="contextual_card_dismiss_remove" msgid="1750420285615827309">"Olib tashlansin"</string>
- <string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"Saqlansin"</string>
+ <string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"Saqlab qolinsin"</string>
<string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"Bu tavsiya olib tashlansinmi?"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"Taklif olib tashlandi"</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"Qaytarish"</string>
diff --git a/tests/CarDeveloperOptions/res/values-vi/arrays.xml b/tests/CarDeveloperOptions/res/values-vi/arrays.xml
index a34ad55..e04d389 100644
--- a/tests/CarDeveloperOptions/res/values-vi/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-vi/arrays.xml
@@ -256,8 +256,8 @@
<item msgid="7565226799008076833">"âm lượng chính"</item>
<item msgid="5420704980305018295">"âm lượng thoại"</item>
<item msgid="5797363115508970204">"âm lượng chuông"</item>
- <item msgid="8233154098550715999">"âm lượng phương tiện"</item>
- <item msgid="5196715605078153950">"âm lượng báo thức"</item>
+ <item msgid="8233154098550715999">"âm lượng nội dung nghe nhìn"</item>
+ <item msgid="5196715605078153950">"âm lượng chuông báo"</item>
<item msgid="394030698764284577">"âm lượng thông báo"</item>
<item msgid="8952898972491680178">"âm lượng bluetooth"</item>
<item msgid="8506227454543690851">"không khóa màn hình"</item>
@@ -286,7 +286,73 @@
<item msgid="1165623660533024666">"chạy trong nền"</item>
<item msgid="6423861043647911030">"âm lượng hỗ trợ tiếp cận"</item>
</string-array>
- <!-- no translation found for app_ops_labels:41 (2464189519136248621) -->
+ <string-array name="app_ops_labels">
+ <item msgid="7892361636570580123">"Vị trí"</item>
+ <item msgid="6656077694190491067">"Vị trí"</item>
+ <item msgid="8790228218278477369">"Vị trí"</item>
+ <item msgid="7836406246005211990">"Rung"</item>
+ <item msgid="3951439024549922598">"Đọc danh sách liên hệ"</item>
+ <item msgid="8802152411647068">"Sửa đổi danh sách liên hệ"</item>
+ <item msgid="229544934599698735">"Đọc nhật ký cuộc gọi"</item>
+ <item msgid="7396102294405899613">"Sửa đổi nhật ký cuộc gọi"</item>
+ <item msgid="3597797992398484655">"Đọc lịch"</item>
+ <item msgid="2705975774250907343">"Sửa đổi lịch"</item>
+ <item msgid="4668747371441932697">"Vị trí"</item>
+ <item msgid="1487578921720243646">"Đăng thông báo"</item>
+ <item msgid="4636080349724146638">"Vị trí"</item>
+ <item msgid="673510900286463926">"Gọi điện thoại"</item>
+ <item msgid="542083422784609790">"Đọc SMS/MMS"</item>
+ <item msgid="1033780373029588436">"Viết SMS/MMS"</item>
+ <item msgid="5647111115517787488">"Nhận SMS/MMS"</item>
+ <item msgid="8591105601108455893">"Nhận SMS/MMS"</item>
+ <item msgid="7730995008517841903">"Nhận SMS/MMS"</item>
+ <item msgid="2613033109026626086">"Nhận SMS/MMS"</item>
+ <item msgid="3037159047591081136">"Gửi SMS/MMS"</item>
+ <item msgid="4726682243833913568">"Đọc SMS/MMS"</item>
+ <item msgid="6555678522277865572">"Viết SMS/MMS"</item>
+ <item msgid="6981734935578130884">"Sửa đổi cài đặt"</item>
+ <item msgid="8705854389991425629">"Vẽ lên trên"</item>
+ <item msgid="5861356020344153651">"Truy cập thông báo"</item>
+ <item msgid="78432174621628659">"Máy ảnh"</item>
+ <item msgid="3986116419882154794">"Ghi âm"</item>
+ <item msgid="4516840825756409490">"Phát âm thanh"</item>
+ <item msgid="6811712502798183957">"Đọc khay nhớ tạm"</item>
+ <item msgid="2780369012602289114">"Sửa đổi khay nhớ tạm"</item>
+ <item msgid="2331359440170850868">"Các nút phương tiện"</item>
+ <item msgid="6133599737122751231">"Tập trung âm thanh"</item>
+ <item msgid="6844485713404805301">"Âm lượng chính"</item>
+ <item msgid="1600379420669104929">"Âm lượng thoại"</item>
+ <item msgid="6296768210470214866">"Âm lượng chuông"</item>
+ <item msgid="510690696071629241">"Âm lượng nội dung nghe nhìn"</item>
+ <item msgid="406861638631430109">"Âm lượng chuông báo"</item>
+ <item msgid="4715864795872233884">"Âm lượng thông báo"</item>
+ <item msgid="2311478519251301183">"Âm lượng bluetooth"</item>
+ <item msgid="5133991377896747027">"Không khóa màn hình"</item>
+ <item msgid="2464189519136248621">"Vị trí"</item>
+ <item msgid="2062677934050803037">"Vị trí"</item>
+ <item msgid="1735171933192715957">"Tải thống kê sử dụng"</item>
+ <item msgid="1014093788778383554">"Tắt/bật micrô"</item>
+ <item msgid="4199297950608622850">"Hiển thị thông báo nhanh"</item>
+ <item msgid="2527962435313398821">"Chiếu phương tiện"</item>
+ <item msgid="5117506254221861929">"Kích hoạt VPN"</item>
+ <item msgid="8291198322681891160">"Hình nền ghi"</item>
+ <item msgid="7106921284621230961">"Cấu trúc hỗ trợ"</item>
+ <item msgid="4496533640894624799">"Ảnh chụp màn hình hỗ trợ"</item>
+ <item msgid="2598847264853993611">"Đọc trạng thái điện thoại"</item>
+ <item msgid="9215610846802973353">"Thêm thư thoại"</item>
+ <item msgid="9186411956086478261">"Sử dụng SIP"</item>
+ <item msgid="6884763100104539558">"Xử lý cuộc gọi đi"</item>
+ <item msgid="125513972170580692">"Vân tay"</item>
+ <item msgid="2556071024281275619">"Cảm biến cơ thể"</item>
+ <item msgid="617168514928339387">"Đọc truyền phát trên di động"</item>
+ <item msgid="7134693570516523585">"Vị trí mô phỏng"</item>
+ <item msgid="7224489175375229399">"Bộ nhớ đọc"</item>
+ <item msgid="8472735063903258202">"Bộ nhớ ghi"</item>
+ <item msgid="4069276819909595110">"Bật màn hình"</item>
+ <item msgid="1228338896751121025">"Nhận tài khoản"</item>
+ <item msgid="3181581793459233672">"Chạy trong nền"</item>
+ <item msgid="2340936043025374076">"Âm lượng hỗ trợ tiếp cận"</item>
+ </string-array>
<string-array name="long_press_timeout_selector_titles">
<item msgid="8950313530602254787">"Ngắn"</item>
<item msgid="4816511817309094890">"Trung bình"</item>
@@ -357,9 +423,19 @@
<item msgid="7718817231348607934">"Không bao giờ cho phép"</item>
<item msgid="8184570120217958741">"Luôn cho phép"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Bình thường"</item>
+ <item msgid="5101233285497327432">"Trung bình"</item>
+ <item msgid="1555861583162930714">"Thấp"</item>
+ <item msgid="1719683776264798117">"Quan trọng"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Bình thường"</item>
+ <item msgid="6107138933849816768">"Trung bình"</item>
+ <item msgid="182695359839047859">"Thấp"</item>
+ <item msgid="8577246509202964244">"Cực thấp"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Liên tục"</item>
<item msgid="167418068739176448">"Hoạt động hàng đầu"</item>
diff --git a/tests/CarDeveloperOptions/res/values-vi/strings.xml b/tests/CarDeveloperOptions/res/values-vi/strings.xml
index 569bed6..8ec068b 100644
--- a/tests/CarDeveloperOptions/res/values-vi/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-vi/strings.xml
@@ -29,12 +29,12 @@
<string name="show_dev_on" msgid="9075712234786224065">"Bạn đã là nhà phát triển!"</string>
<string name="show_dev_already" msgid="7665948832405148689">"Không cần, bạn đã là nhà phát triển."</string>
<string name="dev_settings_disabled_warning" msgid="3198732189395396721">"Vui lòng bật tùy chọn của nhà phát triển trước."</string>
- <string name="header_category_wireless_networks" msgid="8968405993937795898">"Mạng không dây và mạng"</string>
+ <string name="header_category_wireless_networks" msgid="8968405993937795898">"Không dây và mạng"</string>
<string name="header_category_system" msgid="4045988717359334410">"Hệ thống"</string>
<string name="radio_info_data_connection_enable" msgid="2554249462719717119">"Bật kết nối dữ liệu"</string>
<string name="radio_info_data_connection_disable" msgid="2430609627397999371">"Tắt kết nối dữ liệu"</string>
<string name="volte_provisioned_switch_string" msgid="6326756678226686704">"Đã cấp phép VoLTE"</string>
- <string name="vt_provisioned_switch_string" msgid="7458479879009293613">"Đã cấp phép gọi điện video"</string>
+ <string name="vt_provisioned_switch_string" msgid="7458479879009293613">"Đã cấp phép gọi video"</string>
<string name="wfc_provisioned_switch_string" msgid="5446697646596639516">"Đã cấp phép gọi điện qua Wi-Fi"</string>
<string name="eab_provisioned_switch_string" msgid="3921103790584572430">"Đã cấp phép hiện diện/EAB"</string>
<string name="cbrs_data_switch_string" msgid="9120919504831536183">"Dữ liệu Cbrs"</string>
@@ -53,7 +53,7 @@
<string name="radio_info_ims_reg_status_not_registered" msgid="1286050699734226077">"Chưa được đăng ký"</string>
<string name="radio_info_ims_feature_status_available" msgid="2040629393134756058">"Khả dụng"</string>
<string name="radio_info_ims_feature_status_unavailable" msgid="3348223769202693596">"Không khả dụng"</string>
- <string name="radio_info_ims_reg_status" msgid="4771711884059371514">"Đăng ký IMS: <xliff:g id="STATUS">%1$s</xliff:g>\nThoại trên nền LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nThoại qua Wi-Fi: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nGọi điện video: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nGiao diện UT: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
+ <string name="radio_info_ims_reg_status" msgid="4771711884059371514">"Đăng ký IMS: <xliff:g id="STATUS">%1$s</xliff:g>\nThoại trên nền LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nThoại qua Wi-Fi: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nGọi video: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nGiao diện UT: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
<string name="radioInfo_service_in" msgid="1297020186765943857">"Đang sử dụng"</string>
<string name="radioInfo_service_out" msgid="8460363463722476510">"Không có dịch vụ"</string>
<string name="radioInfo_service_emergency" msgid="7674989004735662599">"Chỉ cuộc gọi khẩn cấp"</string>
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Thu nhỏ hoặc phóng to văn bản trên màn hình."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Thu nhỏ"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Phóng to"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Văn bản mẫu"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"Phù thủy xứ Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Chương 11: Thành phố ngọc lục bảo của xứ Oz"</string>
@@ -163,7 +162,7 @@
<string name="bluetooth_map_acceptance_dialog_text" msgid="736507842082640410">"%1$s muốn truy cập tin nhắn của bạn. Bạn có muốn cấp quyền truy cập cho %2$s không?"</string>
<string name="bluetooth_sap_request" msgid="6318039677671263261">"Yêu cầu truy cập SIM"</string>
<string name="bluetooth_sap_acceptance_dialog_text" msgid="1909352413109340355">"<xliff:g id="DEVICE_NAME_0">%1$s</xliff:g> muốn truy cập vào thẻ SIM của bạn. Cấp quyền truy cập vào thẻ SIM sẽ vô hiệu hóa khả năng kết nối dữ liệu trên thiết bị của bạn trong suốt thời gian kết nối. Cấp quyền truy cập vào <xliff:g id="DEVICE_NAME_1">%2$s?</xliff:g>"</string>
- <string name="bluetooth_device_name_summary" msgid="8661066392056595005">"Hiển thị là \"<xliff:g id="DEVICE_NAME">^1</xliff:g>\" với các thiết bị khác"</string>
+ <string name="bluetooth_device_name_summary" msgid="8661066392056595005">"Tên xuất hiện trên các thiết bị khác: <xliff:g id="DEVICE_NAME">^1</xliff:g>"</string>
<string name="bluetooth_off_footer" msgid="7658444560543730571">"Bật Bluetooth để kết nối với các thiết bị khác."</string>
<string name="bluetooth_paired_device_title" msgid="8361860197780425286">"Thiết bị của bạn"</string>
<string name="bluetooth_pairing_page_title" msgid="9053463656712597709">"Ghép nối thiết bị mới"</string>
@@ -208,7 +207,7 @@
<string name="proxy_error_empty_port" msgid="8034561724923076215">"Bạn cần hoàn tất trường cổng."</string>
<string name="proxy_error_empty_host_set_port" msgid="8471455809508588255">"Trường cổng phải trống nếu trường máy chủ lưu trữ trống."</string>
<string name="proxy_error_invalid_port" msgid="4046559920586100637">"Cổng bạn đã nhập không hợp lệ."</string>
- <string name="proxy_warning_limited_support" msgid="9026539134219095768">"Proxy HTTP được sử dụng bởi trình duyệt nhưng có thể không được sử dụng bởi các ứng dụng khác."</string>
+ <string name="proxy_warning_limited_support" msgid="9026539134219095768">"Trình duyệt sẽ sử dụng proxy HTTP, nhưng các ứng dụng khác có thể không."</string>
<string name="proxy_url_title" msgid="882042361706435904">"URL PAC: "</string>
<string name="radio_info_dl_kbps" msgid="2903778264453410272">"Băng thông DL (kb/giây):"</string>
<string name="radio_info_ul_kbps" msgid="3802245899811732716">"Băng thông UL (kb/giây):"</string>
@@ -302,7 +301,7 @@
<string name="settings_label_launcher" msgid="500627679902923496">"Cài đặt"</string>
<string name="settings_shortcut" msgid="4503714880251502167">"Lối tắt cài đặt"</string>
<string name="airplane_mode" msgid="4508870277398231073">"Chế độ trên máy bay"</string>
- <string name="wireless_networks_settings_title" msgid="4298430520189173949">"Không dây & mạng"</string>
+ <string name="wireless_networks_settings_title" msgid="4298430520189173949">"Không dây và mạng"</string>
<string name="radio_controls_summary" msgid="4596981962167684814">"Quản lý Wi-Fi, Bluetooth, chế độ trên máy bay, mạng di động và VPN"</string>
<string name="cellular_data_title" msgid="7909624119432695022">"Dữ liệu di động"</string>
<string name="calls_title" msgid="875693497825736550">"Cho phép cuộc gọi"</string>
@@ -323,7 +322,7 @@
<string name="date_and_time_settings_title" msgid="7827088656940910631">"Ngày & giờ"</string>
<string name="date_and_time_settings_title_setup_wizard" msgid="1573030770187844365">"Đặt ngày giờ"</string>
<string name="date_and_time_settings_summary" msgid="4617979434474713417">"Đặt ngày, giờ, múi giờ & định dạng"</string>
- <string name="date_time_auto" msgid="2679132152303750218">"Sử dụng thời gian do mạng cung cấp"</string>
+ <string name="date_time_auto" msgid="2679132152303750218">"Sử dụng ngày và giờ do mạng cung cấp"</string>
<string name="zone_auto_title" msgid="5500880975376882488">"Sử dụng múi giờ do mạng cung cấp"</string>
<string name="date_time_24hour_auto" msgid="7499659679134962547">"Sử dụng định dạng của địa phương"</string>
<string name="date_time_24hour_title" msgid="6209923858891621283">"Định dạng 24 giờ"</string>
@@ -354,7 +353,7 @@
<string name="show_owner_info_on_lockscreen_label" msgid="4510756693837171575">"Hiển thị thông tin chủ sở hữu trên màn hình khóa"</string>
<string name="owner_info_settings_title" msgid="2537966178998339896">"Thông điệp trên màn hình khóa"</string>
<string name="security_enable_widgets_title" msgid="1701510007926738088">"Bật tiện ích"</string>
- <string name="security_enable_widgets_disabled_summary" msgid="4408176087132339331">"Bị quản trị viên vô hiệu hóa"</string>
+ <string name="security_enable_widgets_disabled_summary" msgid="4408176087132339331">"Đã bị quản trị viên vô hiệu hóa"</string>
<string name="lockdown_settings_title" msgid="4534779922580115990">"Hiện tùy chọn khóa"</string>
<string name="lockdown_settings_summary" msgid="7270756909878256174">"Hiển thị tùy chọn nút nguồn để tắt tính năng Smart Lock, mở khóa bằng vân tay, và thông báo trên màn hình khóa"</string>
<string name="trust_agents_extend_unlock_title" msgid="3582017561316089951">"Tác nhân tin cậy chỉ kéo dài thời gian mở khóa"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Thông tin hồ sơ"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Tài khoản"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Vị trí"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Sử dụng vị trí"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Sử dụng vị trí"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Đang tắt"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">Đang bật - <xliff:g id="COUNT_1">%1$d</xliff:g> ứng dụng có thể truy cập vào vị trí</item>
@@ -388,7 +387,7 @@
<string name="security_settings_summary" msgid="5210109100643223686">"Đặt Vị trí của tôi, mở khóa màn hình, khóa thẻ SIM, khóa bộ nhớ thông tin xác thực"</string>
<string name="cdma_security_settings_summary" msgid="1783066617800041869">"Đặt Vị trí của tôi, mở khóa màn hình, khóa bộ nhớ thông tin xác thực"</string>
<string name="security_passwords_title" msgid="6853942836045862315">"Bảo mật"</string>
- <string name="disabled_by_administrator_summary" msgid="6099821045360491127">"Bị quản trị viên vô hiệu hóa"</string>
+ <string name="disabled_by_administrator_summary" msgid="6099821045360491127">"Đã bị quản trị viên vô hiệu hóa"</string>
<string name="security_status_title" msgid="1261960357751754428">"Trạng thái bảo mật"</string>
<string name="security_dashboard_summary_face" msgid="2536136110153593745">"Phương thức khóa màn hình, mở khóa bằng khuôn mặt"</string>
<string name="security_dashboard_summary" msgid="4048877125766167227">"Phương thức khóa màn hình, vân tay"</string>
@@ -411,10 +410,10 @@
<string name="face_add_max" msgid="8870899421165189413">"Bạn có thể thêm tới <xliff:g id="COUNT">%d</xliff:g> khuôn mặt"</string>
<string name="face_intro_error_max" msgid="4024147799079828937">"Bạn đã thêm số khuôn mặt tối đa"</string>
<string name="face_intro_error_unknown" msgid="3241592604198351134">"Không thể thêm khuôn mặt khác nữa"</string>
- <string name="security_settings_face_enroll_error_dialog_title" msgid="3933492758701563051">"Đăng ký chưa hoàn tất"</string>
+ <string name="security_settings_face_enroll_error_dialog_title" msgid="3933492758701563051">"Chưa đăng ký được"</string>
<string name="security_settings_face_enroll_dialog_ok" msgid="1078348922734845090">"OK"</string>
<string name="security_settings_face_enroll_error_timeout_dialog_message" msgid="4917894418448325405">"Đã đến giới hạn thời gian đăng ký khuôn mặt. Hãy thử lại."</string>
- <string name="security_settings_face_enroll_error_generic_dialog_message" msgid="5160473187142616862">"Đăng ký khuôn mặt không hoạt động."</string>
+ <string name="security_settings_face_enroll_error_generic_dialog_message" msgid="5160473187142616862">"Quy trình đăng ký khuôn mặt không hoạt động."</string>
<string name="security_settings_face_enroll_finish_title" msgid="6800717857394410769">"Đã hoàn tất. Trông rất ổn."</string>
<string name="security_settings_face_enroll_done" msgid="5409739233373490971">"Xong"</string>
<string name="security_settings_face_settings_use_face_category" msgid="1586532139528115416">"Sử dụng khuôn mặt để"</string>
@@ -448,7 +447,7 @@
<string name="security_settings_fingerprint_enroll_introduction_cancel_setup" msgid="756928427429893070">"Bỏ qua"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue_setup" msgid="4125977169169671144">"Tiếp theo"</string>
<string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"Bạn muốn bỏ qua vân tay?"</string>
- <string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"Bạn chỉ mất một hoặc hai phút để thiết lập vân tay. Nếu bỏ qua bước này, bạn có thể thêm vân tay vào lúc khác trong cài đặt."</string>
+ <string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"Bạn chỉ mất một hoặc hai phút để thiết lập vân tay. Nếu bỏ qua bước này, bạn có thể thêm vân tay vào lúc khác trong phần cài đặt."</string>
<string name="lock_screen_intro_skip_title" msgid="5307431665496346914">"Bạn muốn bỏ qua phương thức khóa màn hình?"</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="tablet" msgid="7553945981266845264">"Các tính năng bảo vệ thiết bị sẽ không được bật. Bạn sẽ không thể ngăn người khác sử dụng máy tính bảng này nếu máy tính bảng bị mất, bị đánh cắp hoặc bị đặt lại."</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="device" msgid="1378243257238015603">"Các tính năng bảo vệ thiết bị sẽ không được bật. Bạn sẽ không thể ngăn người khác sử dụng thiết bị này nếu thiết bị bị mất, bị đánh cắp hoặc bị đặt lại."</string>
@@ -469,7 +468,7 @@
<string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"Chạm vào cảm biến"</string>
<string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"Đặt ngón tay lên cảm biến và nhấc lên sau khi cảm thấy rung"</string>
<string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"Nhấc ngón tay lên rồi chạm lại"</string>
- <string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Tiếp tục nhấc ngón tay để thêm các phần khác nhau của vân tay"</string>
+ <string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"Chạm liên tục trên cảm biến để thêm các phần khác của ngón tay"</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"Đã thêm vân tay"</string>
<string name="security_settings_fingerprint_enroll_finish_message" msgid="5862643337893923347">"Khi bạn nhìn thấy biểu tượng này, hãy sử dụng vân tay của mình để nhận dạng hoặc phê duyệt hoạt động mua hàng"</string>
<string name="security_settings_fingerprint_enroll_enrolling_skip" msgid="1473280156532146933">"Thực hiện sau"</string>
@@ -488,8 +487,8 @@
<string name="security_settings_fingerprint_enroll_done" msgid="4111289529758845926">"Xong"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"Rất tiếc, đó không phải là cảm biến"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"Chạm vào cảm biến ở mặt sau điện thoại. Dùng ngón tay trỏ."</string>
- <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"Đăng ký chưa hoàn tất"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Đã đến giới hạn thời gian đăng ký dấu vân tay. Hãy thử lại."</string>
+ <string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"Chưa đăng ký được"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"Thời gian đăng ký vân tay đã hết hạn. Hãy thử lại."</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"Đăng ký dấu vân tay không hoạt động. Hãy thử lại hoặc sử dụng ngón tay khác."</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"Thêm vân tay khác"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"Tiếp theo"</string>
@@ -568,7 +567,7 @@
<string name="unlock_set_unlock_off_summary" msgid="3997346045783359119"></string>
<string name="unlock_set_unlock_none_title" msgid="1922027966983146392">"Vuốt"</string>
<string name="unlock_set_unlock_none_summary" msgid="4044529413627659031">"Không có bảo mật"</string>
- <string name="unlock_set_unlock_pattern_title" msgid="7533759994999423587">"Hình"</string>
+ <string name="unlock_set_unlock_pattern_title" msgid="7533759994999423587">"Hình mở khóa"</string>
<string name="unlock_set_unlock_pattern_summary" msgid="8858697834522201333">"Mức độ bảo mật trung bình"</string>
<string name="unlock_set_unlock_pin_title" msgid="361479901761948207">"Mã PIN"</string>
<string name="unlock_set_unlock_pin_summary" msgid="8076921768675948228">"Mức độ bảo mật từ trung bình đến cao"</string>
@@ -589,7 +588,7 @@
<string name="unlock_set_unlock_disabled_summary" msgid="1713159782896140817">"Do quản trị viên tắt, c.sách mã hóa hay vùng l.trữ t.tin xác thực"</string>
<string name="unlock_set_unlock_mode_off" msgid="2950701212659081973">"Không"</string>
<string name="unlock_set_unlock_mode_none" msgid="3441605629077912292">"Vuốt"</string>
- <string name="unlock_set_unlock_mode_pattern" msgid="8564909572968419459">"Hình"</string>
+ <string name="unlock_set_unlock_mode_pattern" msgid="8564909572968419459">"Hình mở khóa"</string>
<string name="unlock_set_unlock_mode_pin" msgid="7828354651668392875">"Mã PIN"</string>
<string name="unlock_set_unlock_mode_password" msgid="397703731925549447">"Mật khẩu"</string>
<string name="unlock_setup_wizard_fingerprint_details" msgid="6515136915205473675">"Sau khi thiết lập khóa màn hình, bạn cũng có thể thiết lập vân tay của mình trong Cài đặt và bảo mật."</string>
@@ -801,7 +800,7 @@
<string name="bluetooth_max_connected_audio_devices_dialog_title" msgid="6049527354499590314">"Chọn số thiết bị âm thanh được kết nối qua Bluetooth tối đa"</string>
<string name="wifi_display_settings_title" msgid="8718182672694575456">"Truyền"</string>
<string name="wifi_display_enable_menu_item" msgid="4578340247147692250">"Bật hiển thị không dây"</string>
- <string name="wifi_display_no_devices_found" msgid="186501729518830451">"Không tìm thấy thiết bị lân cận nào."</string>
+ <string name="wifi_display_no_devices_found" msgid="186501729518830451">"Không tìm thấy thiết bị nào ở gần."</string>
<string name="wifi_display_status_connecting" msgid="3799827425457383349">"Đang kết nối"</string>
<string name="wifi_display_status_connected" msgid="85692409327461403">"Đã kết nối"</string>
<string name="wifi_display_status_in_use" msgid="7646114501132773174">"Đang được sử dụng"</string>
@@ -827,7 +826,7 @@
<string name="nfc_disclaimer_title" msgid="4860231267351602970">"Bật NFC"</string>
<string name="nfc_disclaimer_content" msgid="3066113577854565782">"NFC trao đổi dữ liệu giữa thiết bị này với các thiết bị hoặc thiết bị đích lân cận khác, chẳng hạn như trạm thanh toán, trình đọc truy cập và các quảng cáo hoặc thẻ tương tác."</string>
<string name="nfc_secure_settings_title" msgid="5153751163174916581">"Bảo mật NFC"</string>
- <string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"Chỉ cho phép sử dụng Thanh toán bằng NFC và Phương tiện công cộng khi màn hình đang mở khóa"</string>
+ <string name="nfc_secure_toggle_summary" product="default" msgid="7631183023440112192">"Chỉ cho phép sử dụng tính năng Thanh toán bằng NFC và Phương tiện công cộng khi màn hình đang mở khóa"</string>
<string name="android_beam_settings_title" msgid="3083436415873738389">"Android Beam"</string>
<string name="android_beam_on_summary" msgid="8068287225180474199">"Sẵn sàng truyền tải nội dung ứng dụng qua NFC"</string>
<string name="android_beam_off_summary" msgid="7365818039159364600">"Đang tắt"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Bật Wi‑Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Sử dụng Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Sử dụng Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Cài đặt Wi‑Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Thiết lập & quản lý điểm truy cập mạng"</string>
@@ -862,8 +861,8 @@
<string name="use_open_wifi_automatically_summary_scoring_disabled" msgid="1559329344492373028">"Để sử dụng, hãy chọn một nhà cung cấp dịch vụ xếp hạng mạng"</string>
<string name="use_open_wifi_automatically_summary_scorer_unsupported_disabled" msgid="1123080670578756834">"Để sử dụng, hãy chọn một nhà cung cấp dịch vụ xếp hạng mạng tương thích"</string>
<string name="wifi_install_credentials" msgid="5650088113710858289">"Cài đặt chứng chỉ"</string>
- <string name="wifi_scan_notify_text" msgid="7614101215028336927">"Để nâng cao độ chính xác của vị trí, các ứng dụng và dịch vụ có thể vẫn quét tìm mạng Wi‑Fi bất kỳ lúc nào, ngay cả khi Wi-Fi bị tắt. Chẳng hạn, bạn có thể sử dụng cài đặt này để cải thiện các tính năng và dịch vụ dựa trên vị trí. Bạn có thể thay đổi cài đặt này trong phần <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>cài đặt quét<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
- <string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"Để nâng cao độ chính xác về vị trí, hãy bật quét tìm Wi-Fi trong <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>cài đặt quét<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
+ <string name="wifi_scan_notify_text" msgid="7614101215028336927">"Để nâng cao độ chính xác của vị trí, các ứng dụng và dịch vụ có thể vẫn quét tìm mạng Wi‑Fi bất kỳ lúc nào, ngay cả khi Wi-Fi bị tắt. Chẳng hạn, bạn có thể sử dụng tùy chọn cài đặt này để cải thiện các tính năng và dịch vụ dựa trên vị trí. Bạn có thể thay đổi tùy chọn này trong phần <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>cài đặt quét<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
+ <string name="wifi_scan_notify_text_scanning_off" msgid="723796963816095410">"Để nâng cao độ chính xác về vị trí, hãy bật tính năng quét tìm Wi-Fi trong phần <xliff:g id="LINK_BEGIN_0">LINK_BEGIN</xliff:g>cài đặt quét<xliff:g id="LINK_END_1">LINK_END</xliff:g>."</string>
<string name="wifi_scan_notify_remember_choice" msgid="1235445971400237444">"Không hiển thị nữa"</string>
<string name="wifi_setting_sleep_policy_title" msgid="2120785188625932076">"Bật Wi-Fi khi ở chế độ ngủ"</string>
<string name="wifi_setting_on_during_sleep_title" msgid="856670183023402715">"Bật Wi-Fi khi ở chế độ ngủ"</string>
@@ -906,11 +905,11 @@
<string name="wifi_ssid_hint" msgid="5010024648106585165">"Nhập SSID"</string>
<string name="wifi_security" msgid="9136702039496152831">"Bảo mật"</string>
<string name="wifi_hidden_network" msgid="6647772204699776833">"Mạng ẩn"</string>
- <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Nếu bộ định tuyến của bạn không phát ID mạng nhưng bạn muốn kết nối với mạng này trong tương lai, thì bạn có thể đặt mạng ẩn.\n\nĐiều này có thể gây rủi ro bảo mật vì điện thoại của bạn sẽ thường xuyên phát tín hiệu để tìm mạng.\n\nViệc đặt mạng ẩn sẽ không thay đổi các cài đặt của bộ định tuyến."</string>
+ <string name="wifi_hidden_network_warning" msgid="8182333050353796473">"Nếu bộ định tuyến của bạn không phát ra một tên mạng nhưng bạn muốn kết nối với mạng này trong tương lai, thì bạn có thể đặt mạng này là mạng ẩn.\n\nĐiều này có thể gây rủi ro bảo mật vì điện thoại của bạn sẽ thường xuyên phát tín hiệu để tìm mạng.\n\nViệc đặt mạng này là mạng ẩn sẽ không thay đổi các tùy chọn cài đặt của bộ định tuyến."</string>
<string name="wifi_signal" msgid="696548364467704808">"Cường độ tín hiệu"</string>
<string name="wifi_status" msgid="3439931558930689940">"Trạng thái"</string>
- <string name="tx_wifi_speed" msgid="2571810085003261073">"Tốc độ của liên kết truyền"</string>
- <string name="rx_wifi_speed" msgid="7392873246110937187">"Tốc độ nhận đường dẫn liên kết"</string>
+ <string name="tx_wifi_speed" msgid="2571810085003261073">"Tốc độ truyền"</string>
+ <string name="rx_wifi_speed" msgid="7392873246110937187">"Tốc độ nhận"</string>
<string name="wifi_frequency" msgid="6132852924995724246">"Tần số"</string>
<string name="wifi_ip_address" msgid="5572539114989914831">"Địa chỉa IP"</string>
<string name="passpoint_label" msgid="7429247462404128615">"Đã lưu thông qua"</string>
@@ -920,7 +919,7 @@
<string name="wifi_eap_ca_cert" msgid="1496395241849383785">"Chứng chỉ CA"</string>
<string name="wifi_eap_domain" msgid="3298302320003640130">"Miền"</string>
<string name="wifi_eap_user_cert" msgid="6786839531765719173">"Chứng chỉ người dùng"</string>
- <string name="wifi_eap_identity" msgid="5280457017705738773">"Nhận dạng"</string>
+ <string name="wifi_eap_identity" msgid="5280457017705738773">"Danh tính"</string>
<string name="wifi_eap_anonymous" msgid="6352344972490839958">"Danh tính ẩn danh"</string>
<string name="wifi_password" msgid="6942983531275177771">"Mật khẩu"</string>
<string name="wifi_show_password" msgid="7878398590772942202">"Hiển thị mật khẩu"</string>
@@ -935,8 +934,8 @@
<string name="wifi_ip_settings" msgid="4636102290236116946">"Cài đặt IP"</string>
<string name="wifi_privacy_settings" msgid="4462092795794247809">"Quyền riêng tư"</string>
<string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"Địa chỉ MAC gán ngẫu nhiên"</string>
- <string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"Thêm một thiết bị"</string>
- <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"Căn giữa mã QR dưới đây để thêm thiết bị vào “<xliff:g id="SSID">%1$s</xliff:g>”"</string>
+ <string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"Thêm thiết bị"</string>
+ <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"Đưa mã QR vào giữa khung bên dưới để thêm thiết bị vào “<xliff:g id="SSID">%1$s</xliff:g>”"</string>
<string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"Quét mã QR"</string>
<string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"Căn giữa mã QR dưới đây để kết nối với “<xliff:g id="SSID">%1$s</xliff:g>”"</string>
<string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"Kết nối với Wi‑Fi bằng cách quét mã QR"</string>
@@ -961,7 +960,7 @@
<string name="wifi_dpp_sharing_wifi_with_this_device" msgid="2540529164687476827">"Chia sẻ Wi‑Fi với thiết bị này…"</string>
<string name="wifi_dpp_connecting" msgid="4229290407210299897">"Đang kết nối…"</string>
<string name="wifi_dpp_share_hotspot" msgid="847987212473038179">"Chia sẻ điểm phát sóng"</string>
- <string name="wifi_dpp_lockscreen_title" msgid="3910665850075275963">"Xác minh đó là bạn"</string>
+ <string name="wifi_dpp_lockscreen_title" msgid="3910665850075275963">"Xác minh danh tính của bạn"</string>
<string name="wifi_dpp_wifi_password" msgid="8007558344032612455">"Mật khẩu Wi-Fi: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
<string name="wifi_dpp_hotspot_password" msgid="6172326289042241924">"Mật khẩu điểm phát sóng: <xliff:g id="PASSWORD">%1$s</xliff:g>"</string>
<string name="wifi_dpp_add_device" msgid="1347056725253936358">"Thêm thiết bị"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Di động"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Nếu không có Wi‑Fi, hãy dùng mạng di động"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Nếu không có mạng di động, hãy dùng Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Gọi qua Wi‑Fi. Nếu mất Wi‑Fi, cuộc gọi sẽ kết thúc."</string>
@@ -1213,7 +1215,7 @@
<string name="night_display_auto_mode_title" msgid="8493573087102481588">"Lịch biểu"</string>
<string name="night_display_auto_mode_never" msgid="2897444637217807088">"Không có"</string>
<string name="night_display_auto_mode_custom" msgid="1400891076453963151">"Bật vào thời gian tùy chỉnh"</string>
- <string name="night_display_auto_mode_twilight" msgid="4000162110017520674">"Bật từ hoàng hôn đến bình minh"</string>
+ <string name="night_display_auto_mode_twilight" msgid="4000162110017520674">"Bật từ lúc mặt trời lặn đến lúc mặt trời mọc"</string>
<string name="night_display_start_time_title" msgid="1069255169673371077">"Thời gian bắt đầu"</string>
<string name="night_display_end_time_title" msgid="2760793157124245911">"Thời gian kết thúc"</string>
<string name="night_display_status_title" msgid="1727020934735770319">"Trạng thái"</string>
@@ -1228,7 +1230,7 @@
<string name="night_display_summary_on_auto_mode_twilight" msgid="8386769601369289561">"Sẽ tự động tắt lúc bình minh"</string>
<string name="night_display_activation_on_manual" msgid="8379477527072027346">"Bật ngay"</string>
<string name="night_display_activation_off_manual" msgid="7776082151269794201">"Tắt ngay"</string>
- <string name="night_display_activation_on_twilight" msgid="5610294051700287249">"Bật cho đến bình minh"</string>
+ <string name="night_display_activation_on_twilight" msgid="5610294051700287249">"Bật cho đến lúc mặt trời mọc"</string>
<string name="night_display_activation_off_twilight" msgid="6846727701281556110">"Tắt cho đến hoàng hôn"</string>
<string name="night_display_activation_on_custom" msgid="4761140206778957611">"Bật cho đến <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="night_display_activation_off_custom" msgid="4207238846687792731">"Tắt cho đến <xliff:g id="ID_1">%1$s</xliff:g>"</string>
@@ -1550,7 +1552,7 @@
<string name="carrier_enabled" msgid="1819916725305365581">"Bật/tắt APN"</string>
<string name="carrier_enabled_summaryOn" msgid="6219221535461945771">"Đã bật APN"</string>
<string name="carrier_enabled_summaryOff" msgid="4093019532796386622">"Đã tắt APN"</string>
- <string name="bearer" msgid="4378444317087536401">"Trình chuyển"</string>
+ <string name="bearer" msgid="4378444317087536401">"Sóng mang"</string>
<string name="mvno_type" msgid="3150755279048149624">"Kiểu MVNO"</string>
<string name="mvno_match_data" msgid="629287305803195245">"Giá trị MVNO"</string>
<string name="menu_delete" msgid="8646081395424055735">"Xóa APN"</string>
@@ -1565,7 +1567,7 @@
<string name="error_adding_apn_type" msgid="671634520340569678">"Nhà cung cấp dịch vụ không cho phép thêm APN thuộc loại %s."</string>
<string name="restore_default_apn" msgid="7195266404077471007">"Đang khôi phục cài đặt APN mặc định."</string>
<string name="menu_restore" msgid="3799288817317293115">"Đặt lại về mặc định"</string>
- <string name="restore_default_apn_completed" msgid="5671734152740058937">"Đặt lại cài đặt APN mặc định đã hoàn tất."</string>
+ <string name="restore_default_apn_completed" msgid="5671734152740058937">"Đã đặt lại xong các tùy chọn cài đặt APN mặc định về trạng thái ban đầu."</string>
<string name="reset_dashboard_title" msgid="7084966342252178530">"Tùy chọn đặt lại"</string>
<string name="reset_dashboard_summary" msgid="8778383341461126642">"Có thể đặt lại mạng, ứng dụng hoặc thiết bị"</string>
<string name="reset_network_title" msgid="8944059136930806211">"Đặt lại Wi-Fi, di động và Bluetooth"</string>
@@ -1583,8 +1585,8 @@
<string name="reset_esim_error_msg" msgid="4716366079119742235">"Không thể xóa SIM đã tải xuống do lỗi.\n\nHãy khởi động lại thiết bị của bạn rồi thử lại."</string>
<string name="master_clear_title" msgid="1560712943955904673">"Xóa mọi dữ liệu (đặt lại thiết bị)"</string>
<string name="master_clear_short_title" msgid="919098101581335101">"Xóa mọi dữ liệu (đặt lại thiết bị)"</string>
- <string name="master_clear_desc" product="tablet" msgid="3432373610755760899">"Hành động này sẽ xóa tất cả dữ liệu khỏi "<b>"bộ nhớ trong"</b>" của máy tính bảng, bao gồm cả:\n\n"<li>"Tài khoản Google của bạn"</li>\n<li>"Dữ liệu cũng như các tùy chọn cài đặt của hệ thống và ứng dụng"</li>\n<li>"Ứng dụng đã tải xuống"</li></string>
- <string name="master_clear_desc" product="default" msgid="8765543541962866697">"Hành động này sẽ xóa tất cả dữ liệu khỏi "<b>"bộ nhớ trong"</b>" của điện thoại, bao gồm cả:\n\n"<li>"Tài khoản Google của bạn"</li>\n<li>"Dữ liệu cũng như các tùy chọn cài đặt hệ thống và ứng dụng"</li>\n<li>"Ứng dụng đã tải xuống"</li></string>
+ <string name="master_clear_desc" product="tablet" msgid="3432373610755760899">"Thao tác này sẽ xóa tất cả dữ liệu trong "<b>"bộ nhớ trong"</b>" của máy tính bảng, bao gồm:\n\n"<li>"Tài khoản Google của bạn"</li>\n<li>"Dữ liệu và các tùy chọn cài đặt của hệ thống và ứng dụng"</li>\n<li>"Ứng dụng đã tải xuống"</li></string>
+ <string name="master_clear_desc" product="default" msgid="8765543541962866697">"Thao tác này sẽ xóa tất cả dữ liệu trong "<b>"bộ nhớ trong"</b>" của điện thoại, bao gồm:\n\n"<li>"Tài khoản Google của bạn"</li>\n<li>"Dữ liệu và các tùy chọn cài đặt của hệ thống và ứng dụng"</li>\n<li>"Ứng dụng đã tải xuống"</li></string>
<string name="master_clear_accounts" product="default" msgid="3432884235445405376">\n\n"Bạn hiện đã đăng nhập vào các tài khoản sau đây:\n"</string>
<string name="master_clear_other_users_present" product="default" msgid="5993259656117566767">\n\n"Có người dùng khác trên thiết bị này.\n"</string>
<string name="master_clear_desc_also_erases_external" msgid="3947303501615091903"><li>"Nhạc"</li>\n<li>"Ảnh"</li>\n<li>"Dữ liệu người dùng khác"</li></string>
@@ -1608,26 +1610,26 @@
<string name="master_clear_progress_text" msgid="5418958116008976218">"Vui lòng chờ..."</string>
<string name="call_settings_title" msgid="5033906789261282752">"Cài đặt cuộc gọi"</string>
<string name="call_settings_summary" msgid="2119161087671450035">"Thiết lập thư thoại, chuyển tiếp cuộc gọi, chờ cuộc gọi, Số gọi đến"</string>
- <string name="tether_settings_title_usb" msgid="4265582654602420357">"Chia sẻ kết nối Internet qua USB"</string>
+ <string name="tether_settings_title_usb" msgid="4265582654602420357">"Chia sẻ Internet qua USB"</string>
<string name="tether_settings_title_wifi" msgid="2060965130234484613">"Điểm phát sóng di động"</string>
- <string name="tether_settings_title_bluetooth" msgid="1999590158102569959">"Chia sẻ kết nối Internet qua Bluetooth"</string>
- <string name="tether_settings_title_usb_bluetooth" msgid="1159128764162788159">"Đang dùng làm điểm truy cập Internet"</string>
- <string name="tether_settings_title_all" msgid="6935843543433954181">"Điểm phát sóng và chia sẻ kết nối"</string>
- <string name="tether_settings_summary_hotspot_on_tether_on" msgid="1289593649526514499">"Điểm phát sóng bật, chia sẻ kết nối"</string>
+ <string name="tether_settings_title_bluetooth" msgid="1999590158102569959">"Chia sẻ Internet qua Bluetooth"</string>
+ <string name="tether_settings_title_usb_bluetooth" msgid="1159128764162788159">"Chia sẻ Internet"</string>
+ <string name="tether_settings_title_all" msgid="6935843543433954181">"Điểm phát sóng và chia sẻ Internet"</string>
+ <string name="tether_settings_summary_hotspot_on_tether_on" msgid="1289593649526514499">"Điểm phát sóng đang bật, đang chia sẻ Internet"</string>
<string name="tether_settings_summary_hotspot_on_tether_off" msgid="8010689354668285422">"Điểm phát sóng bật"</string>
- <string name="tether_settings_summary_hotspot_off_tether_on" msgid="1349909238672649877">"Chia sẻ kết nối"</string>
+ <string name="tether_settings_summary_hotspot_off_tether_on" msgid="1349909238672649877">"Chia sẻ Internet"</string>
<string name="tether_settings_disabled_on_data_saver" msgid="3682544845899910726">"Không thể chia sẻ kết nối hoặc sử dụng điểm phát sóng di động khi Trình tiết kiệm dữ liệu đang bật"</string>
<string name="usb_title" msgid="7480927657535578688">"USB"</string>
- <string name="usb_tethering_button_text" msgid="6242228383142012332">"Chia sẻ kết nối Internet qua USB"</string>
+ <string name="usb_tethering_button_text" msgid="6242228383142012332">"Chia sẻ Internet qua USB"</string>
<string name="usb_tethering_subtext" product="default" msgid="1573513260339548671">"Chia sẻ kết nối Internet của điện thoại qua USB"</string>
<string name="usb_tethering_subtext" product="tablet" msgid="154536000235361034">"Chia sẻ kết nối Internet của máy tính bảng qua USB"</string>
- <string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"Chia sẻ kết nối Internet qua Bluetooth"</string>
+ <string name="bluetooth_tether_checkbox_text" msgid="7257293066139372774">"Chia sẻ Internet qua Bluetooth"</string>
<string name="bluetooth_tethering_subtext" product="tablet" msgid="6868756914621131635">"Chia sẻ kết nối Internet của máy tính bảng qua Bluetooth"</string>
<string name="bluetooth_tethering_subtext" product="default" msgid="9167912297565425178">"Chia sẻ kết nối Internet của điện thoại qua Bluetooth"</string>
<string name="bluetooth_tethering_off_subtext_config" msgid="3981528184780083266">"Chia sẻ kết nối Internet của <xliff:g id="DEVICE_NAME">%1$d</xliff:g> này qua Bluetooth"</string>
<string name="bluetooth_tethering_overflow_error" msgid="6946561351369376943">"Không thể dùng làm điểm truy cập Internet cho hơn <xliff:g id="MAXCONNECTION">%1$d</xliff:g> thiết bị."</string>
<string name="bluetooth_untether_blank" msgid="5428300773782256084">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> sẽ được tháo."</string>
- <string name="tethering_footer_info" msgid="8019555174339154124">"Sử dụng điểm phát sóng và chia sẻ kết nối để cung cấp kết nối Internet cho thiết bị khác thông qua kết nối dữ liệu di động. Các ứng dụng cũng có thể tạo điểm phát sóng để chia sẻ nội dung với thiết bị lân cận."</string>
+ <string name="tethering_footer_info" msgid="8019555174339154124">"Sử dụng tính năng điểm phát sóng và chia sẻ Internet để cho phép các thiết bị khác kết nối với Internet thông qua dữ liệu di động của bạn. Các ứng dụng cũng có thể tạo điểm phát sóng để chia sẻ nội dung với thiết bị ở gần."</string>
<string name="tethering_help_button_text" msgid="7653022000284543996">"Trợ giúp"</string>
<string name="network_settings_title" msgid="8516526011407061679">"Mạng di động"</string>
<string name="manage_mobile_plan_title" msgid="3312016665522553062">"Gói dịch vụ di động"</string>
@@ -1646,7 +1648,7 @@
<string name="mobile_connect_to_internet" msgid="6031886097365170913">"Vui lòng kết nối internet"</string>
<string name="location_title" msgid="8664674161765477168">"Vị trí của tôi"</string>
<string name="managed_profile_location_switch_title" msgid="8157384427925389680">"Vị trí của hồ sơ công việc"</string>
- <string name="location_app_level_permissions" msgid="1298041503927632960">"Quyền truy cập ứng dụng"</string>
+ <string name="location_app_level_permissions" msgid="1298041503927632960">"Quyền truy cập của ứng dụng"</string>
<string name="location_app_permission_summary_location_off" msgid="541372845344796336">"Vị trí đang tắt"</string>
<plurals name="location_app_permission_summary_location_on" formatted="false" msgid="7904821382328758218">
<item quantity="other"> <xliff:g id="BACKGROUND_LOCATION_APP_COUNT_2">%1$d</xliff:g>/<xliff:g id="TOTAL_LOCATION_APP_COUNT_3">%2$d</xliff:g> ứng dụng có quyền truy cập không giới hạn</item>
@@ -1654,7 +1656,7 @@
</plurals>
<string name="location_category_recent_location_access" msgid="286059523360285026">"Quyền truy cập vị trí gần đây"</string>
<string name="location_recent_location_access_view_details" msgid="2051602261436245905">"Xem chi tiết"</string>
- <string name="location_no_recent_apps" msgid="77502059586413278">"Không có ứng dụng nào yêu cầu vị trí gần đây"</string>
+ <string name="location_no_recent_apps" msgid="77502059586413278">"Không có ứng dụng nào gần đây yêu cầu vị trí"</string>
<string name="location_no_recent_accesses" msgid="6289916310397279890">"Gần đây, không có ứng dụng nào truy cập vào vị trí"</string>
<string name="location_high_battery_use" msgid="7177199869979522663">"Mức sử dụng pin cao"</string>
<string name="location_low_battery_use" msgid="5030448574501435888">"Mức sử dụng pin thấp"</string>
@@ -1744,7 +1746,7 @@
<string name="lockpassword_confirm_your_password_header_frp" msgid="7326670978891793470">"Xác minh mật khẩu"</string>
<string name="lockpassword_invalid_pin" msgid="3059022215815900137">"Mã PIN sai"</string>
<string name="lockpassword_invalid_password" msgid="8374331995318204099">"Mật khẩu sai"</string>
- <string name="lockpattern_need_to_unlock_wrong" msgid="1328670466959377948">"Hình không chính xác"</string>
+ <string name="lockpattern_need_to_unlock_wrong" msgid="1328670466959377948">"Hình mở khóa không chính xác"</string>
<string name="lock_settings_title" msgid="233657584969886812">"Bảo mật thiết bị"</string>
<string name="lockpattern_change_lock_pattern_label" msgid="333149762562581510">"Thay đổi hình mở khóa"</string>
<string name="lockpattern_change_lock_pin_label" msgid="3435796032210265723">"Thay đổi mã PIN mở khóa"</string>
@@ -1824,7 +1826,7 @@
<string name="disable_text" msgid="5065834603951474397">"Tắt"</string>
<string name="enable_text" msgid="7179141636849225884">"Bật"</string>
<string name="clear_user_data_text" msgid="8894073247302821764">"Xóa bộ nhớ"</string>
- <string name="app_factory_reset" msgid="8718986000278776272">"Gỡ cài đặt cập nhật"</string>
+ <string name="app_factory_reset" msgid="8718986000278776272">"Gỡ cài đặt bản cập nhật"</string>
<string name="auto_launch_enable_text" msgid="3372898942144027341">"Bạn đã chọn chạy ứng dụng này theo mặc định cho một số tác vụ."</string>
<string name="always_allow_bind_appwidgets_text" msgid="2286211654774611037">"Bạn đã chọn cho phép ứng dụng này tạo các tiện ích và truy cập dữ liệu của chúng."</string>
<string name="auto_launch_disable_text" msgid="8560921288036801416">"Chưa đặt mặc định."</string>
@@ -2035,8 +2037,8 @@
<string name="accessibility_settings" msgid="9140621093888234485">"Hỗ trợ tiếp cận"</string>
<string name="accessibility_settings_title" msgid="1687226556576913576">"Cài đặt hỗ trợ tiếp cận"</string>
<string name="accessibility_settings_summary" msgid="5742379519336396561">"Trình đọc màn hình, hiển thị, điều khiển tương tác"</string>
- <string name="vision_settings_title" msgid="7315352351051423944">"Cài đặt hiển thị"</string>
- <string name="vision_settings_description" msgid="3476589459009287332">"Bạn có thể tùy chỉnh thiết bị này cho phù hợp với nhu cầu của mình. Bạn có thể thay đổi các tính năng hỗ trợ tiếp cận trong Cài đặt."</string>
+ <string name="vision_settings_title" msgid="7315352351051423944">"Cài đặt thị giác"</string>
+ <string name="vision_settings_description" msgid="3476589459009287332">"Bạn có thể tùy chỉnh thiết bị này cho phù hợp với nhu cầu của mình. Bạn có thể thay đổi các tính năng hỗ trợ tiếp cận này trong phần Cài đặt."</string>
<string name="vision_settings_suggestion_title" msgid="7268661419110951128">"Thay đổi cỡ chữ"</string>
<string name="screen_reader_category_title" msgid="6300714148519645544">"Trình đọc màn hình"</string>
<string name="audio_and_captions_category_title" msgid="6140472938769619212">"Âm thanh và văn bản trên màn hình"</string>
@@ -2047,7 +2049,7 @@
<string name="feature_flags_dashboard_title" msgid="3153034144122754381">"Cờ tính năng"</string>
<string name="talkback_title" msgid="3717960404234260050">"Talkback"</string>
<string name="talkback_summary" msgid="6602857105831641574">"Trình đọc màn hình chủ yếu dành cho những người khiếm thị và thị lực kém"</string>
- <string name="select_to_speak_summary" msgid="7514180457557735421">"Nhấn vào mục trên màn hình của bạn để nghe mục được đọc to"</string>
+ <string name="select_to_speak_summary" msgid="7514180457557735421">"Nhấn vào các mục trên màn hình để nghe hệ thống đọc to những mục đó"</string>
<string name="accessibility_captioning_title" msgid="5878371993023439642">"Phụ đề"</string>
<string name="accessibility_screen_magnification_title" msgid="7250949681883917360">"Phóng to"</string>
<string name="accessibility_screen_magnification_gestures_title" msgid="9199287875401817974">"Phóng to bằng cách nhấn 3 lần"</string>
@@ -2083,7 +2085,7 @@
<string name="accessibility_control_timeout_preference_title" msgid="2771808346038759474">"Thời gian thực hiện hành động"</string>
<string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"Chọn thời lượng hiển thị thông báo mà bạn cần đọc nhưng chỉ hiển thị tạm thời.\n\nKhông phải tất cả ứng dụng đều hỗ trợ tùy chọn cài đặt này."</string>
<string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"Chọn thời lượng hiển thị thông báo yêu cầu bạn thực hiện hành động nhưng chỉ hiển thị tạm thời.\n\nKhông phải tất cả ứng dụng đều hỗ trợ tùy chọn cài đặt này."</string>
- <string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"Thời gian chờ cho chạm và giữ"</string>
+ <string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"Thời gian chờ cho cử chỉ chạm và giữ"</string>
<string name="accessibility_display_inversion_preference_title" msgid="3852635518618938998">"Đảo màu"</string>
<string name="accessibility_display_inversion_preference_subtitle" msgid="69291255322175323">"Có thể ảnh hưởng đến hiệu suất"</string>
<string name="accessibility_autoclick_preference_title" msgid="9164599088410340405">"Thời gian dừng"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Rung khi có thông báo"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Rung khi đổ chuông"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Rung khi chạm"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Sử dụng dịch vụ"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Sử dụng tính năng sửa màu"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Sử dụng phụ đề"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Sử dụng dịch vụ"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Sử dụng tính năng chỉnh màu"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Sử dụng phụ đề"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Tiếp tục"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Thiết bị trợ thính"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Chưa kết nối thiết bị trợ thính nào"</string>
@@ -2112,7 +2114,7 @@
<string name="accessibility_summary_state_stopped" msgid="3170264683616172746">"Dịch vụ không hoạt động. Hãy nhấn để xem thông tin."</string>
<string name="accessibility_description_state_stopped" msgid="7666178628053039493">"Dịch vụ này đang hoạt động không bình thường."</string>
<string name="enable_quick_setting" msgid="1580451877998661255">"Hiển thị trong Cài đặt nhanh"</string>
- <string name="daltonizer_type" msgid="6890356081036026791">"Chế độ sửa"</string>
+ <string name="daltonizer_type" msgid="6890356081036026791">"Chế độ chỉnh"</string>
<plurals name="accessibilty_autoclick_preference_subtitle_extremely_short_delay" formatted="false" msgid="3810676455925024813">
<item quantity="other">Độ trễ cực kỳ ngắn (<xliff:g id="CLICK_DELAY_LABEL_1">%1$d</xliff:g> mili giây)</item>
<item quantity="one">Độ trễ cực kỳ ngắn (<xliff:g id="CLICK_DELAY_LABEL_0">%1$d</xliff:g> mili giây)</item>
@@ -2231,7 +2233,7 @@
<string name="power_usage_level_and_status" msgid="8873534076894160727">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATUS">%2$s</xliff:g>"</string>
<string name="power_discharge_remaining" msgid="3461915627093471868">"<xliff:g id="REMAIN">%1$s</xliff:g> còn lại"</string>
<string name="power_charge_remaining" msgid="2730510256218879651">"<xliff:g id="UNTIL_CHARGED">%1$s</xliff:g> để tính phí"</string>
- <string name="background_activity_title" msgid="7207836362312111483">"Hạn chế trong nền"</string>
+ <string name="background_activity_title" msgid="7207836362312111483">"Hạn chế chạy trong nền"</string>
<string name="background_activity_summary" msgid="582372194738538145">"Cho phép ứng dụng chạy trong nền"</string>
<string name="background_activity_summary_disabled" msgid="457944930942085876">"Ứng dụng không được phép chạy trong nền"</string>
<string name="background_activity_summary_whitelisted" msgid="4713321059375873828">"Không thể hạn chế sử dụng trong nền"</string>
@@ -2297,7 +2299,7 @@
</plurals>
<plurals name="battery_tip_restrict_summary" formatted="false" msgid="984148373944071669">
<item quantity="other">%2$d ứng dụng có mức sử dụng pin nền cao</item>
- <item quantity="one">%1$s có mức sử dụng pin nền cao</item>
+ <item quantity="one">%1$s ứng dụng có mức sử dụng pin nền cao</item>
</plurals>
<plurals name="battery_tip_restrict_handled_summary" formatted="false" msgid="469696766640020557">
<item quantity="other">Những ứng dụng này không thể chạy trong nền</item>
@@ -2446,9 +2448,9 @@
<string name="process_dex2oat_label" msgid="8249082119748556085">"Tối ưu hóa ứng dụng"</string>
<string name="battery_saver" msgid="3989710213758938398">"Trình tiết kiệm pin"</string>
<string name="battery_saver_auto_title" msgid="4158659069641849952">"Tự động bật"</string>
- <string name="battery_saver_auto_no_schedule" msgid="739814529432092706">"Chưa có lịch biểu nào"</string>
+ <string name="battery_saver_auto_no_schedule" msgid="739814529432092706">"Không có lịch biểu"</string>
<string name="battery_saver_auto_routine" msgid="886514412067906980">"Dựa trên thói quen của bạn"</string>
- <string name="battery_saver_auto_percentage" msgid="5791982309331921556">"Dựa trên số phần trăm pin"</string>
+ <string name="battery_saver_auto_percentage" msgid="5791982309331921556">"Dựa trên mức phần trăm pin"</string>
<string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"Nếu pin có khả năng hết trước lần sạc thông thường tiếp theo, hệ thống sẽ bật Trình tiết kiệm pin."</string>
<string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"Sẽ bật khi pin ở mức <xliff:g id="PERCENT">%1$s</xliff:g>"</string>
<string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"Đặt lịch biểu"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Bật"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Sử dụng Trình tiết kiệm pin"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Sử dụng Trình tiết kiệm pin"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Tự động bật"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Không bao giờ"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"ở mức <xliff:g id="PERCENT">%1$s</xliff:g> pin"</string>
@@ -2636,7 +2638,7 @@
<string name="enter_password" msgid="2963496904625715235">"Để bắt đầu sử dụng thiết bị Android, hãy nhập mật khẩu của bạn"</string>
<string name="enter_pin" msgid="7140938268709546890">"Để bắt đầu sử dụng thiết bị Android, hãy nhập mã PIN của bạn"</string>
<string name="enter_pattern" msgid="1653841963422825336">"Để bắt đầu sử dụng thiết bị Android, hãy vẽ hình mẫu của bạn"</string>
- <string name="cryptkeeper_wrong_pattern" msgid="4580105105385125467">"Hình không chính xác"</string>
+ <string name="cryptkeeper_wrong_pattern" msgid="4580105105385125467">"Hình mở khóa không chính xác"</string>
<string name="cryptkeeper_wrong_password" msgid="1709534330303983166">"Mật khẩu sai"</string>
<string name="cryptkeeper_wrong_pin" msgid="857757190077859245">"Mã PIN sai"</string>
<string name="checking_decryption" msgid="5927759912073053101">"Đang kiểm tra…"</string>
@@ -2669,7 +2671,7 @@
<string name="data_usage_cellular_data_summary" msgid="9162777397135709280">"Tạm dừng khi đạt giới hạn"</string>
<string name="account_settings_menu_auto_sync" msgid="2673669556006027506">"Tự động đồng bộ hóa dữ liệu"</string>
<string name="account_settings_menu_auto_sync_personal" msgid="3235831897309033754">"T.động ĐB hóa dữ liệu cá nhân"</string>
- <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"T.động ĐB hóa d.liệu công việc"</string>
+ <string name="account_settings_menu_auto_sync_work" msgid="5721442464286552815">"Tự động đồng bộ hóa dữ liệu công việc"</string>
<string name="data_usage_change_cycle" msgid="447761920472170031">"Thay đổi chu kỳ..."</string>
<string name="data_usage_pick_cycle_day" msgid="6319750879145917066">"Ngày trong tháng để đặt lại chu kỳ sử dụng dữ liệu:"</string>
<string name="data_usage_empty" msgid="7981405723435034032">"Không ứng dụng nào sử dụng dữ liệu lúc này."</string>
@@ -2792,7 +2794,7 @@
<string name="vpn_always_on_summary" msgid="3639994551631437397">"Luôn kết nối với VPN mọi lúc"</string>
<string name="vpn_always_on_summary_not_supported" msgid="9077720997795965133">"Không được ứng dụng này hỗ trợ"</string>
<string name="vpn_always_on_summary_active" msgid="8962619701962239088">"Luôn bật đang hoạt động"</string>
- <string name="vpn_require_connection" msgid="5413746839457797350">"Chặn kết nối khối mà không cần VPN"</string>
+ <string name="vpn_require_connection" msgid="5413746839457797350">"Chặn các đường kết nối không qua VPN"</string>
<string name="vpn_require_connection_title" msgid="8361434328767853717">"Yêu cầu kết nối VPN?"</string>
<string name="vpn_lockdown_summary" msgid="6770030025737770861">"Chọn một cấu hình VPN để luôn giữ kết nối. Lưu lượng truy cập mạng sẽ chỉ được cho phép khi kết nối với VPN này."</string>
<string name="vpn_lockdown_none" msgid="3789288793603394679">"Không có"</string>
@@ -2914,16 +2916,16 @@
<string name="apps_with_restrictions_settings_button" msgid="5065896213467171744">"Mở rộng cài đặt cho ứng dụng"</string>
<string name="nfc_payment_settings_title" msgid="5070077706735415291">"Nhấn và thanh toán"</string>
<string name="nfc_payment_how_it_works" msgid="7607901964687787177">"Cách thức hoạt động"</string>
- <string name="nfc_payment_no_apps" msgid="8844440783395420860">"Thanh toán bằng điện thoại của bạn trong cửa hàng"</string>
- <string name="nfc_payment_default" msgid="7869273092463612271">"Mặc định thanh toán"</string>
+ <string name="nfc_payment_no_apps" msgid="8844440783395420860">"Dùng điện thoại của bạn để thanh toán tại các cửa hàng"</string>
+ <string name="nfc_payment_default" msgid="7869273092463612271">"Ứng dụng thanh toán mặc định"</string>
<string name="nfc_payment_default_not_set" msgid="955804193510335338">"Chưa đặt"</string>
<string name="nfc_payment_app_and_desc" msgid="102312684211458190">"<xliff:g id="APP">%1$s</xliff:g> - <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
- <string name="nfc_payment_use_default" msgid="3098724195746409476">"Sử dụng mặc định"</string>
+ <string name="nfc_payment_use_default" msgid="3098724195746409476">"Sử dụng ứng dụng mặc định"</string>
<string name="nfc_payment_favor_default" msgid="7555356982142464260">"Luôn luôn"</string>
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"Trừ khi một ứng dụng thanh toán khác đang mở"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"Ở một cổng Nhấn và thanh toán, thanh toán bằng:"</string>
- <string name="nfc_how_it_works_title" msgid="6531433737926327904">"Thanh toán tại thiết bị đầu cuối"</string>
- <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Thiết lập ứng dụng thanh toán. Sau đó chỉ cần giữ mặt sau điện thoại của bạn gần với thiết bị đầu cuối bất kỳ có biểu tượng không tiếp xúc."</string>
+ <string name="nfc_how_it_works_title" msgid="6531433737926327904">"Thanh toán trên thiết bị thanh toán"</string>
+ <string name="nfc_how_it_works_content" msgid="9174575836302449343">"Thiết lập ứng dụng thanh toán. Sau đó chỉ cần hướng mặt sau của điện thoại vào thiết bị thanh toán có biểu tượng không tiếp xúc."</string>
<string name="nfc_how_it_works_got_it" msgid="2432535672153247411">"OK"</string>
<string name="nfc_more_title" msgid="2825856411836382264">"Thêm..."</string>
<string name="nfc_payment_set_default_label" msgid="3997927342761454042">"Đặt làm tùy chọn của bạn?"</string>
@@ -3044,7 +3046,7 @@
<string name="account_dashboard_title" msgid="4734300939532555885">"Tài khoản"</string>
<string name="account_dashboard_default_summary" msgid="6822549669771936206">"Chưa thêm tài khoản nào"</string>
<string name="app_default_dashboard_title" msgid="6575301028225232193">"Ứng dụng mặc định"</string>
- <string name="system_dashboard_summary" msgid="6582464466735779394">"Ngôn ngữ, cử chỉ, thời gian, bản sao lưu"</string>
+ <string name="system_dashboard_summary" msgid="6582464466735779394">"Ngôn ngữ, cử chỉ, ngày giờ, bản sao lưu"</string>
<string name="search_results_title" msgid="4160717656435503940">"Cài đặt"</string>
<string name="keywords_wifi" msgid="8477688080895466846">"wifi, wi-fi, kết nối mạng, internet, không dây, dữ liệu, wi fi"</string>
<string name="keywords_wifi_notify_open_networks" msgid="1031260564121854773">"thông báo về Wi‑Fi, thông báo wifi"</string>
@@ -3132,10 +3134,10 @@
<string name="sound_settings_summary_vibrate" msgid="2194491116884798590">"Đã đặt chuông thành rung"</string>
<string name="sound_settings_summary_silent" msgid="899823817462768876">"Đã đặt chuông thành im lặng"</string>
<string name="sound_settings_example_summary" msgid="2091822107298841827">"Âm lượng chuông ở mức 80%"</string>
- <string name="media_volume_option_title" msgid="3553411883305505682">"Âm lượng phương tiện"</string>
+ <string name="media_volume_option_title" msgid="3553411883305505682">"Âm lượng nội dung nghe nhìn"</string>
<string name="remote_media_volume_option_title" msgid="6355710054191873836">"Âm lượng truyền"</string>
<string name="call_volume_option_title" msgid="5028003296631037334">"Âm lượng cuộc gọi"</string>
- <string name="alarm_volume_option_title" msgid="3184076022438477047">"Âm lượng báo thức"</string>
+ <string name="alarm_volume_option_title" msgid="3184076022438477047">"Âm lượng chuông báo"</string>
<string name="ring_volume_option_title" msgid="2038924918468372264">"Âm lượng chuông"</string>
<string name="notification_volume_option_title" msgid="1358512611511348260">"Âm lượng thông báo"</string>
<string name="ringtone_title" msgid="1409086028485922583">"Nhạc chuông điện thoại"</string>
@@ -3231,7 +3233,7 @@
<string name="zen_mode_button_turn_on" msgid="1097964136225943415">"Bật ngay"</string>
<string name="zen_mode_button_turn_off" msgid="3990967728457149454">"Tắt ngay bây giờ"</string>
<string name="zen_mode_settings_dnd_manual_end_time" msgid="4307574188962071429">"Chế độ Không làm phiền được bật đến <xliff:g id="FORMATTED_TIME">%s</xliff:g>"</string>
- <string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"Không làm phiền vẫn được bật cho đến khi bạn tắt chế độ này"</string>
+ <string name="zen_mode_settings_dnd_manual_indefinite" msgid="3701005376825238752">"Chế độ Không làm phiền vẫn được bật cho đến khi bạn tắt chế độ này"</string>
<string name="zen_mode_settings_dnd_automatic_rule" msgid="2843297614114625408">"Chế độ Không làm phiền được tự động bật theo lịch biểu (<xliff:g id="RULE_NAME">%s</xliff:g>)"</string>
<string name="zen_mode_settings_dnd_automatic_rule_app" msgid="5103454923160912313">"Chế độ Không làm phiền đã được một ứng dụng (<xliff:g id="APP_NAME">%s</xliff:g>) bật tự động"</string>
<string name="zen_mode_settings_dnd_custom_settings_footer" msgid="6335108298640066560">"Chế độ Không làm phiền đang bật đối với <xliff:g id="RULE_NAMES">%s</xliff:g> với các mục cài đặt tùy chỉnh."</string>
@@ -3401,8 +3403,8 @@
<item quantity="other"><xliff:g id="COUNT_1">%d</xliff:g> loại</item>
<item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> loại</item>
</plurals>
- <string name="no_channels" msgid="8884254729302501652">"Ứng dụng chưa đăng bất kỳ thông báo nào"</string>
- <string name="app_settings_link" msgid="8465287765715790984">"Cài đặt bổ sung trong ứng dụng"</string>
+ <string name="no_channels" msgid="8884254729302501652">"Ứng dụng này chưa đăng bất kỳ thông báo nào"</string>
+ <string name="app_settings_link" msgid="8465287765715790984">"Tùy chọn cài đặt bổ sung trong ứng dụng"</string>
<string name="app_notification_listing_summary_zero" msgid="4047782719487686699">"Đang bật cho tất cả ứng dụng"</string>
<plurals name="app_notification_listing_summary_others" formatted="false" msgid="1161774065480666519">
<item quantity="other">Tắt cho <xliff:g id="COUNT_1">%d</xliff:g> ứng dụng</item>
@@ -3420,11 +3422,11 @@
<string name="notification_content_block_summary" msgid="2743896875255591743">"Không bao giờ hiển thị thông báo trong ngăn thông báo hoặc trên thiết bị ngoại vi"</string>
<string name="notification_badge_title" msgid="8989086619255666442">"Cho phép dấu chấm thông báo"</string>
<string name="notification_channel_badge_title" msgid="8228215248332054612">"Hiển thị dấu chấm thông báo"</string>
- <string name="app_notification_override_dnd_title" msgid="1757042206738172601">"Ghi đè Không làm phiền"</string>
+ <string name="app_notification_override_dnd_title" msgid="1757042206738172601">"Vô hiệu hóa chế độ Không làm phiền"</string>
<string name="app_notification_override_dnd_summary" msgid="3152957611171210980">"Cho phép những thông báo này tiếp tục làm gián đoạn khi chế độ Không làm phiền đang bật"</string>
<string name="app_notification_visibility_override_title" msgid="2349335170165637672">"Trên màn hình khóa"</string>
<string name="app_notification_row_banned" msgid="2079325338122151677">"Bị chặn"</string>
- <string name="app_notification_row_priority" msgid="432299064888787236">"Mức độ ưu tiên"</string>
+ <string name="app_notification_row_priority" msgid="432299064888787236">"Ưu tiên"</string>
<string name="app_notification_row_sensitive" msgid="4919671519227722958">"Nhạy cảm"</string>
<string name="app_notifications_dialog_done" msgid="5395611029779655968">"Xong"</string>
<string name="app_notification_importance_title" msgid="1902794400671001142">"Mức độ quan trọng"</string>
@@ -3466,9 +3468,9 @@
<string name="zen_mode_schedule_rule_days" msgid="220627703673691816">"Ngày"</string>
<string name="zen_mode_schedule_rule_days_none" msgid="6011716195119389956">"Không có"</string>
<string name="zen_mode_schedule_rule_days_all" msgid="8814173364016139675">"Hàng ngày"</string>
- <string name="zen_mode_schedule_alarm_title" msgid="2078194049274875023">"Báo thức có thể ghi đè thời gian kết thúc"</string>
- <string name="zen_mode_schedule_alarm_summary" msgid="5556997989911412070">"Lịch biểu tắt khi lịch báo thức đổ chuông"</string>
- <string name="zen_mode_custom_behavior_title" msgid="8908861697886331001">"Hành vi Không làm phiền"</string>
+ <string name="zen_mode_schedule_alarm_title" msgid="2078194049274875023">"Đồng hồ báo thức có thể vô hiệu hóa thời gian kết thúc"</string>
+ <string name="zen_mode_schedule_alarm_summary" msgid="5556997989911412070">"Lịch biểu tắt khi một đồng hồ báo thức đổ chuông"</string>
+ <string name="zen_mode_custom_behavior_title" msgid="8908861697886331001">"Hoạt động ở chế độ Không làm phiền"</string>
<string name="zen_mode_custom_behavior_summary_default" msgid="3509865340195397447">"Sử dụng các tùy chọn cài đặt mặc định"</string>
<string name="zen_mode_custom_behavior_summary" msgid="7206909852887332604">"Tạo các mục cài đặt tùy chỉnh cho lịch biểu này"</string>
<string name="zen_mode_custom_behavior_category_title" msgid="7451686525113262087">"Dành cho ‘<xliff:g id="SCHEDULE_NAME">%1$s</xliff:g>’"</string>
@@ -3500,17 +3502,17 @@
<string name="zen_mode_alarms" msgid="5528707742250954290">"Cho phép chuông báo thức"</string>
<string name="zen_mode_alarms_list" msgid="9162210238533665593">"báo thức"</string>
<string name="zen_mode_media" msgid="3701280649874724055">"Phát âm thanh nội dung nghe nhìn"</string>
- <string name="zen_mode_media_list" msgid="509327580522287125">"nội dung phương tiện"</string>
+ <string name="zen_mode_media_list" msgid="509327580522287125">"nội dung nghe nhìn"</string>
<string name="zen_mode_system" msgid="597437265986355038">"Cho phép âm chạm"</string>
<string name="zen_mode_system_list" msgid="480192458506838077">"âm chạm"</string>
<string name="zen_mode_reminders" msgid="7560664194610054038">"Cho phép lời nhắc"</string>
<string name="zen_mode_reminders_list" msgid="7347061314032326677">"lời nhắc"</string>
<string name="zen_mode_events" msgid="5784076928339534984">"Cho phép sự kiện"</string>
<string name="zen_mode_bypassing_apps" msgid="3080739479028713449">"Cho phép ứng dụng ghi đè"</string>
- <string name="zen_mode_bypassing_apps_title" msgid="2115024664615538847">"Ngoại lệ ứng dụng"</string>
+ <string name="zen_mode_bypassing_apps_title" msgid="2115024664615538847">"Ứng dụng ngoại lệ"</string>
<plurals name="zen_mode_bypassing_apps_subtext" formatted="false" msgid="8723144434730871572">
- <item quantity="other">Thông báo từ <xliff:g id="NUMBER">%1$d</xliff:g> ứng dụng có thể ghi đè chế độ Không làm phiền</item>
- <item quantity="one">Thông báo từ 1 ứng dụng có thể ghi đè chế độ Không làm phiền</item>
+ <item quantity="other">Thông báo từ <xliff:g id="NUMBER">%1$d</xliff:g> ứng dụng có thể vô hiệu hóa chế độ Không làm phiền</item>
+ <item quantity="one">Thông báo từ 1 ứng dụng có thể vô hiệu hóa chế độ Không làm phiền</item>
</plurals>
<string name="zen_mode_events_list" msgid="8578102701815684873">"sự kiện"</string>
<string name="zen_mode_all_callers" msgid="4455039040077343838">"bất kỳ ai"</string>
@@ -3587,7 +3589,7 @@
<string name="imei_information_summary" msgid="716516316022275083">"Thông tin liên quan đến IMEI"</string>
<string name="slot_number" msgid="785422579177068698">"(Khe cắm<xliff:g id="SLOT_NUM">%1$d</xliff:g>)"</string>
<string name="launch_by_default" msgid="6106985160202769725">"Mở theo mặc định"</string>
- <string name="app_launch_domain_links_title" msgid="2987289657348349133">"Mở liên kết"</string>
+ <string name="app_launch_domain_links_title" msgid="2987289657348349133">"Mở đường liên kết"</string>
<string name="app_launch_open_domain_urls_title" msgid="8595126859922391331">"Mở các liên kết được hỗ trợ"</string>
<string name="app_launch_open_domain_urls_summary" msgid="6803029846855502366">"Mở không cần hỏi"</string>
<string name="app_launch_supported_domain_urls_title" msgid="503976327533974142">"Các liên kết được hỗ trợ"</string>
@@ -3647,7 +3649,7 @@
<string name="app_permissions_summary" msgid="8785798165776061594">"Ứng dụng sử dụng <xliff:g id="APPS">%1$s</xliff:g>"</string>
<string name="tap_to_wake" msgid="1902991239401652323">"Nhấn để đánh thức"</string>
<string name="tap_to_wake_summary" msgid="8485222120721006793">"Nhấn đúp vào vị trí bất kỳ trên màn hình để đánh thức thiết bị"</string>
- <string name="domain_urls_title" msgid="7939209950373945367">"Mở liên kết"</string>
+ <string name="domain_urls_title" msgid="7939209950373945367">"Mở đường liên kết"</string>
<string name="domain_urls_summary_none" msgid="5401203416941265109">"Không mở các liên kết được hỗ trợ"</string>
<string name="domain_urls_summary_one" msgid="3893975485064803435">"Mở <xliff:g id="DOMAIN">%s</xliff:g>"</string>
<string name="domain_urls_summary_some" msgid="2130534984153210797">"Mở <xliff:g id="DOMAIN">%s</xliff:g> và các URL khác"</string>
@@ -3710,10 +3712,10 @@
<string name="high_power_system" msgid="739584574711292753">"Không tối ưu hóa pin"</string>
<string name="high_power_desc" msgid="333756885680362741">"Không áp dụng tối ưu hóa pin. Pin của bạn có thể hết nhanh hơn."</string>
<string name="high_power_prompt_title" msgid="2805745781720454052">"Cho phép ứng dụng luôn chạy trong nền?"</string>
- <string name="high_power_prompt_body" msgid="8067395096053552289">"Cho phép <xliff:g id="APP_NAME">%1$s</xliff:g> luôn chạy trong nền có thể làm giảm thời lượng pin. \n\nBạn có thể thay đổi cài đặt này từ Cài đặt > Ứng dụng và thông báo."</string>
+ <string name="high_power_prompt_body" msgid="8067395096053552289">"Cho phép <xliff:g id="APP_NAME">%1$s</xliff:g> luôn chạy trong nền có thể làm giảm thời lượng pin. \n\nBạn có thể thay đổi tùy chọn này trong phần Cài đặt > Ứng dụng và thông báo."</string>
<string name="battery_summary" msgid="4345690800899981339">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> sử dụng kể từ lần sạc đầy gần đây nhất"</string>
<string name="battery_power_management" msgid="2853925857548647969">"Quản lý nguồn"</string>
- <string name="no_battery_summary" msgid="4105932628367471314">"Không sử dụng pin kể từ lần sạc đầy cuối cùng"</string>
+ <string name="no_battery_summary" msgid="4105932628367471314">"Không sử dụng pin kể từ lần sạc đầy gần đây nhất"</string>
<string name="app_notification_preferences" msgid="5154466638524523201">"Cài đặt ứng dụng"</string>
<string name="system_ui_settings" msgid="6751165163665775447">"Hiện Bộ điều chỉnh SystemUI"</string>
<string name="additional_permissions" msgid="3142290772324571654">"Quyền khác"</string>
@@ -3731,7 +3733,7 @@
<string name="usb_use_file_transfers_desc" msgid="6953866660041189580">"Truyền tệp sang thiết bị khác"</string>
<string name="usb_use_photo_transfers" msgid="5974236250197451257">"PTP"</string>
<string name="usb_use_photo_transfers_desc" msgid="2325112887316125320">"Chuyển ảnh hoặc tệp nếu MTP không được hỗ trợ (PTP)"</string>
- <string name="usb_use_tethering" msgid="4250626730173163846">"Chia sẻ kết nối qua USB"</string>
+ <string name="usb_use_tethering" msgid="4250626730173163846">"Chia sẻ Interent qua USB"</string>
<string name="usb_use_MIDI" msgid="4710632870781041401">"MIDI"</string>
<string name="usb_use_MIDI_desc" msgid="1770966187150010947">"Sử dụng thiết bị này làm MIDI"</string>
<string name="usb_use" msgid="8940500223316278632">"Sử dụng USB cho"</string>
@@ -3747,22 +3749,22 @@
<string name="usb_summary_charging_only" msgid="4118449308708872339">"Đang sạc thiết bị này"</string>
<string name="usb_summary_power_only" msgid="3552240122641051107">"Sạc thiết bị được kết nối"</string>
<string name="usb_summary_file_transfers" msgid="7805342797099821502">"Truyền tệp"</string>
- <string name="usb_summary_tether" msgid="778845069037366883">"Chia sẻ kết nối qua USB"</string>
+ <string name="usb_summary_tether" msgid="778845069037366883">"Chia sẻ Interent qua USB"</string>
<string name="usb_summary_photo_transfers" msgid="4743028167400644354">"PTP"</string>
<string name="usb_summary_MIDI" msgid="5540604166270861247">"MIDI"</string>
<string name="usb_summary_file_transfers_power" msgid="1684501026426766867">"Truyền tệp và cấp điện"</string>
- <string name="usb_summary_tether_power" msgid="5684170912136320002">"Chia sẻ kết nối qua USB và cấp điện"</string>
+ <string name="usb_summary_tether_power" msgid="5684170912136320002">"Chia sẻ Internet và cấp điện qua USB"</string>
<string name="usb_summary_photo_transfers_power" msgid="4424106272137720464">"PTP và cấp điện"</string>
<string name="usb_summary_MIDI_power" msgid="7685597621357005180">"MIDI và cấp điện"</string>
<string name="background_check_pref" msgid="664081406854758392">"Kiểm tra nền"</string>
<string name="background_check_title" msgid="4136736684290307970">"Toàn quyền truy cập nền"</string>
- <string name="assist_access_context_title" msgid="2274614501747710439">"Sử dụng văn bản từ màn hình"</string>
+ <string name="assist_access_context_title" msgid="2274614501747710439">"Sử dụng văn bản trên màn hình"</string>
<string name="assist_access_context_summary" msgid="5867997494395842785">"Cho phép ứng dụng trợ lý truy cập nội dung trên màn hình dưới dạng văn bản"</string>
<string name="assist_access_screenshot_title" msgid="1991014038776117688">"Sử dụng ảnh chụp màn hình"</string>
<string name="assist_access_screenshot_summary" msgid="3010943864000489424">"Cho phép ứng dụng trợ lý truy cập hình ảnh màn hình"</string>
<string name="assist_flash_title" msgid="8852484250748551092">"Màn hình nháy"</string>
<string name="assist_flash_summary" msgid="6697095786317559129">"Nhấp nháy các cạnh màn hình khi ứng dụng trợ lý truy cập văn bản từ màn hình hoặc ảnh chụp màn hình"</string>
- <string name="assist_footer" msgid="7030121180457472165">"Ứng dụng trợ lý có thể giúp bạn dựa trên thông tin từ màn hình bạn đang xem. Một số ứng dụng hỗ trợ cả dịch vụ nhập bằng giọng nói và trình khởi chạy để cung cấp cho bạn khả năng hỗ trợ được tích hợp."</string>
+ <string name="assist_footer" msgid="7030121180457472165">"Các ứng dụng trợ lý có thể dựa vào thông tin trên màn hình bạn đang xem để giúp bạn làm nhiều việc. Một số ứng dụng hỗ trợ cả dịch vụ nhập bằng giọng nói và trình chạy để hỗ trợ bạn toàn diện hơn."</string>
<string name="average_memory_use" msgid="5333366040118953945">"Sử dụng bộ nhớ trung bình"</string>
<string name="maximum_memory_use" msgid="6509872438499846077">"Sử dụng bộ nhớ tối đa"</string>
<string name="memory_usage" msgid="7963253555330830906">"Sử dụng bộ nhớ"</string>
@@ -3811,9 +3813,9 @@
<string name="app_permission_summary_allowed" msgid="6458476982015518778">"Được phép"</string>
<string name="app_permission_summary_not_allowed" msgid="1171642541675462584">"Không được phép"</string>
<string name="keywords_install_other_apps" msgid="5383559540695847668">"cài đặt ứng dụng từ nguồn không xác định"</string>
- <string name="write_settings" msgid="9009040811145552108">"Sửa đổi cài đặt hệ thống"</string>
- <string name="keywords_write_settings" msgid="3450405263390246293">"ghi/sửa đổi cài đặt hệ thống"</string>
- <string name="write_settings_summary" msgid="4650251358459404247">"<xliff:g id="COUNT_0">%1$d</xliff:g> / <xliff:g id="COUNT_1">%2$d</xliff:g> được phép sửa đổi cài đặt hệ thống"</string>
+ <string name="write_settings" msgid="9009040811145552108">"Sửa đổi các tùy chọn cài đặt hệ thống"</string>
+ <string name="keywords_write_settings" msgid="3450405263390246293">"ghi/sửa đổi các tùy chọn cài đặt hệ thống"</string>
+ <string name="write_settings_summary" msgid="4650251358459404247">"<xliff:g id="COUNT_0">%1$d</xliff:g> / <xliff:g id="COUNT_1">%2$d</xliff:g> được phép sửa đổi các tùy chọn cài đặt hệ thống"</string>
<string name="financial_apps_sms_access_title" msgid="3422655018008259655">"Truy cập SMS của ứng dụng tài chính"</string>
<string name="filter_install_sources_apps" msgid="4519839764020866701">"Có thể cài đặt ứng dụng khác"</string>
<string name="filter_write_settings_apps" msgid="6864144615530081121">"Có thể sửa đổi các tùy chọn cài đặt hệ thống"</string>
@@ -3824,7 +3826,7 @@
<string name="write_settings_on" msgid="7328986337962635118">"Có"</string>
<string name="write_settings_off" msgid="5708257434958406202">"Không"</string>
<string name="external_source_switch_title" msgid="5947220058496373178">"Cho phép từ nguồn này"</string>
- <string name="camera_gesture_title" msgid="899403310746415135">"Xoắn đúp cho camera"</string>
+ <string name="camera_gesture_title" msgid="899403310746415135">"Xoay cổ tay hai lần để mở máy ảnh"</string>
<string name="camera_gesture_desc" msgid="7751841175916789527">"Mở ứng dụng camera bằng cách vặn cổ tay hai lần"</string>
<string name="camera_double_tap_power_gesture_title" msgid="8874747801078147525">"Nhấn nút nguồn hai lần để mở máy ảnh"</string>
<string name="camera_double_tap_power_gesture_desc" msgid="6166349645433682873">"Mở nhanh máy ảnh mà không cần mở khóa màn hình của bạn"</string>
@@ -3869,14 +3871,14 @@
<string name="backup_disabled" msgid="6941165814784765643">"Đã tắt sao lưu"</string>
<string name="android_version_summary" msgid="2192751442789395445">"Đã cập nhật lên Android <xliff:g id="VERSION">%1$s</xliff:g>"</string>
<string name="android_version_pending_update_summary" msgid="3554543810520655076">"Đã có bản cập nhật"</string>
- <string name="disabled_by_policy_title" msgid="1238318274952958846">"Tác vụ này không được cho phép"</string>
+ <string name="disabled_by_policy_title" msgid="1238318274952958846">"Thao tác này không được phép"</string>
<string name="disabled_by_policy_title_adjust_volume" msgid="7094547090629203316">"Không thể thay đổi âm lượng"</string>
<string name="disabled_by_policy_title_outgoing_calls" msgid="3805836913095496278">"Không cho phép gọi"</string>
<string name="disabled_by_policy_title_sms" msgid="1453236584236681105">"Không cho phép SMS"</string>
<string name="disabled_by_policy_title_camera" msgid="3741138901926111197">"Không cho phép máy ảnh"</string>
<string name="disabled_by_policy_title_screen_capture" msgid="1856835333536274665">"Không cho phép ảnh chụp màn hình"</string>
<string name="disabled_by_policy_title_suspend_packages" msgid="4254714213391802322">"Không thể mở ứng dụng này"</string>
- <string name="default_admin_support_msg" msgid="5789424433689798637">"Nếu bạn có câu hỏi, hãy liên hệ với quản trị viên CNTT"</string>
+ <string name="default_admin_support_msg" msgid="5789424433689798637">"Nếu bạn có câu hỏi, hãy liên hệ với quản trị viên CNTT của bạn"</string>
<string name="admin_support_more_info" msgid="8737842638087863477">"Thông tin chi tiết khác"</string>
<string name="admin_profile_owner_message" msgid="3199544166281052845">"Quản trị viên của bạn có thể giám sát và quản lý các ứng dụng cũng như dữ liệu được liên kết với hồ sơ công việc của bạn, bao gồm cài đặt, quyền, quyền truy cập vào dữ liệu công ty, hoạt động mạng và thông tin vị trí của thiết bị."</string>
<string name="admin_profile_owner_user_message" msgid="2991249382056855531">"Quản trị viên của bạn có thể giám sát và quản lý các ứng dụng cũng như dữ liệu được liên kết với người dùng này, bao gồm cài đặt, quyền, quyền truy cập vào dữ liệu công ty, hoạt động mạng và thông tin vị trí của thiết bị."</string>
@@ -3931,7 +3933,7 @@
<string name="ota_disable_automatic_update" msgid="7630249692207340986">"Cập nhật hệ thống tự động"</string>
<string name="ota_disable_automatic_update_summary" msgid="5650682441097227162">"Áp dụng bản cập nhật khi thiết bị khởi động lại"</string>
<string name="usage" msgid="9172908720164431622">"Sử dụng"</string>
- <string name="cellular_data_usage" msgid="1236562234207782386">"Sử dụng dữ liệu di động"</string>
+ <string name="cellular_data_usage" msgid="1236562234207782386">"Mức sử dụng dữ liệu di động"</string>
<string name="app_cellular_data_usage" msgid="8499761516172121957">"Mức sử dụng dữ liệu của ứng dụng"</string>
<string name="wifi_data_usage" msgid="275569900562265895">"Mức sử dụng dữ liệu Wi-Fi"</string>
<string name="ethernet_data_usage" msgid="747614925362556718">"Sử dụng dữ liệu ethernet"</string>
@@ -3942,9 +3944,9 @@
<string name="ethernet_data_template" msgid="6414118030827090119">"<xliff:g id="AMOUNT">^1</xliff:g> dữ liệu ethernet"</string>
<string name="billing_cycle" msgid="5740717948341713190">"Hạn mức và cảnh báo dữ liệu"</string>
<string name="app_usage_cycle" msgid="213483325132959663">"Chu kỳ sử dụng dữ liệu của ứng dụng"</string>
- <string name="cell_data_warning" msgid="8902740337286652689">"Cảnh báo dữ liệu: <xliff:g id="ID_1">^1</xliff:g>"</string>
+ <string name="cell_data_warning" msgid="8902740337286652689">"Cảnh báo dữ liệu khi dùng đến <xliff:g id="ID_1">^1</xliff:g>"</string>
<string name="cell_data_limit" msgid="3175933829235314233">"Hạn mức dữ liệu <xliff:g id="ID_1">^1</xliff:g>"</string>
- <string name="cell_data_warning_and_limit" msgid="3846150001253927594">"Cảnh báo dữ liệu <xliff:g id="ID_1">^1</xliff:g>/Hạn mức dữ liệu <xliff:g id="ID_2">^2</xliff:g>"</string>
+ <string name="cell_data_warning_and_limit" msgid="3846150001253927594">"Cảnh báo dữ liệu khi dùng đến <xliff:g id="ID_1">^1</xliff:g>/Hạn mức dữ liệu là <xliff:g id="ID_2">^2</xliff:g>"</string>
<string name="billing_cycle_fragment_summary" msgid="4926047002107855543">"Hàng tháng vào ngày <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="network_restrictions" msgid="196294262243618198">"Hạn chế của mạng"</string>
<plurals name="network_restrictions_summary" formatted="false" msgid="1664494781594839837">
@@ -4000,7 +4002,7 @@
<string name="suggestion_additional_fingerprints" msgid="3434467207282466411">"Thêm một vân tay khác"</string>
<string name="suggestion_additional_fingerprints_summary" msgid="1916547587832484196">"Mở khóa bằng vân tay khác"</string>
<string name="battery_saver_on_summary" msgid="6841062406467435672">"Bật"</string>
- <string name="battery_saver_off_scheduled_summary" msgid="3740414764069188669">"Sẽ bật lúc pin ở mức <xliff:g id="BATTERY_PERCENTAGE">%1$s</xliff:g>"</string>
+ <string name="battery_saver_off_scheduled_summary" msgid="3740414764069188669">"Sẽ bật khi pin ở mức <xliff:g id="BATTERY_PERCENTAGE">%1$s</xliff:g>"</string>
<string name="battery_saver_off_summary" msgid="8736555723004299721">"Đang tắt"</string>
<string name="battery_saver_button_turn_on" msgid="3748696527267573793">"Bật ngay"</string>
<string name="battery_saver_button_turn_off" msgid="2912950982503267828">"Tắt ngay bây giờ"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Nếu thiết bị bị khóa, ngăn nhập câu trả lời hoặc văn bản khác trong thông báo"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Trình kiểm tra chính tả mặc định"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Chọn trình kiểm tra chính tả"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Sử dụng trình kiểm tra chính tả"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Sử dụng trình kiểm tra chính tả"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Chưa được chọn"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(không có)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4045,10 +4047,10 @@
<string name="theme_customization_accent_color_title" msgid="3949108608589133216">"Màu nhấn"</string>
<string name="theme_customization_font_title" msgid="309728559821356597">"Phông chữ tiêu đề / nội dung"</string>
<string name="theme_customization_icon_shape_title" msgid="4603248388639328322">"Hình dạng biểu tượng"</string>
- <string name="theme_customization_device_default" msgid="7188874258500934312">"Theo mặc định của thiết bị"</string>
+ <string name="theme_customization_device_default" msgid="7188874258500934312">"Theo giá trị mặc định của thiết bị"</string>
<string name="display_cutout_emulation" msgid="288975763151891685">"Vết cắt trên màn hình"</string>
<string name="display_cutout_emulation_keywords" msgid="6795671536772871439">"cắt hiển thị, vết cắt"</string>
- <string name="overlay_option_device_default" msgid="165508753381657697">"Theo mặc định của thiết bị"</string>
+ <string name="overlay_option_device_default" msgid="165508753381657697">"Theo giá trị mặc định của thiết bị"</string>
<string name="overlay_toast_failed_to_apply" msgid="5692251825129250040">"Không áp dụng được lớp phủ"</string>
<string name="special_access" msgid="1453926335914696206">"Quyền truy cập đặc biệt"</string>
<plurals name="special_access_summary" formatted="false" msgid="5182092345063909346">
@@ -4069,14 +4071,14 @@
<string name="premium_sms_warning" msgid="7604011651486294515">"Tin nhắn dịch vụ có thể làm bạn mất tiền và sẽ tính thêm vào hóa đơn nhà mạng của bạn. Nếu bạn bật quyền cho một ứng dụng, bạn sẽ có thể gửi Tin nhắn dịch vụ bằng ứng dụng đó."</string>
<string name="premium_sms_access" msgid="4550027460595822851">"Truy cập Tin nhắn dịch vụ"</string>
<string name="bluetooth_disabled" msgid="6588102116819268238">"Tắt"</string>
- <string name="bluetooth_connected_summary" msgid="439920840053965217">"Được kết nối với <xliff:g id="ID_1">%1$s</xliff:g>"</string>
- <string name="bluetooth_connected_multiple_devices_summary" msgid="596205630653123250">"Được kết nối với nhiều thiết bị"</string>
+ <string name="bluetooth_connected_summary" msgid="439920840053965217">"Đã kết nối với <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="bluetooth_connected_multiple_devices_summary" msgid="596205630653123250">"Đã kết nối với nhiều thiết bị"</string>
<string name="demo_mode" msgid="3831081808592541104">"Chế độ thử nghiệm giao diện người dùng hệ thống"</string>
<string name="dark_ui_mode" msgid="703844190192599217">"Giao diện"</string>
<string name="dark_ui_mode_title" msgid="8774932716427742413">"Chọn giao diện"</string>
<string name="dark_ui_settings_light_summary" msgid="5219102347744462812">"Tùy chọn cài đặt này cũng áp dụng cho các ứng dụng"</string>
<string name="dark_ui_settings_dark_summary" msgid="7042737828943784289">"Các ứng dụng được hỗ trợ cũng sẽ chuyển sang giao diện tối"</string>
- <string name="quick_settings_developer_tiles" msgid="7423485925757678719">"Ô nhà phát triển cài đặt nhanh"</string>
+ <string name="quick_settings_developer_tiles" msgid="7423485925757678719">"Ô cài đặt nhanh dành cho nhà phát triển"</string>
<string name="winscope_trace_quick_settings_title" msgid="940971040388411374">"Dấu vết Winscope"</string>
<string name="sensors_off_quick_settings_title" msgid="3655699045300438902">"Tắt cảm biến"</string>
<string name="managed_profile_settings_title" msgid="4340409321523532402">"Cài đặt hồ sơ công việc"</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Để giúp giải phóng dung lượng lưu trữ, trình quản lý bộ nhớ sẽ xóa ảnh và video đã sao lưu khỏi thiết bị của bạn."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Xóa ảnh và video"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Trình quản lý bộ nhớ"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Sử dụng Trình quản lý bộ nhớ"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Sử dụng Trình quản lý bộ nhớ"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Tự động"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Hướng dẫn sử dụng"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Giải phóng dung lượng ngay"</string>
@@ -4308,7 +4310,7 @@
<string name="change_wifi_state_title" msgid="5140754955787584174">"Kiểm soát Wi-Fi"</string>
<string name="change_wifi_state_app_detail_switch" msgid="6489090744937816260">"Cho phép ứng dụng kiểm soát Wi-Fi"</string>
<string name="change_wifi_state_app_detail_summary" msgid="614854822469259860">"Cho phép ứng dụng này bật/tắt Wi-Fi, quét và kết nối với mạng Wi-Fi, thêm/xóa mạng hoặc bắt đầu một điểm phát sóng chỉ cục bộ"</string>
- <string name="media_output_title" msgid="8710632337456601848">"Phát phương tiện tới"</string>
+ <string name="media_output_title" msgid="8710632337456601848">"Phát nội dung nghe nhìn tới"</string>
<string name="media_output_default_summary" msgid="3159237976830415584">"Thiết bị này"</string>
<string name="media_output_summary" product="default" msgid="6294261435613551178">"Điện thoại"</string>
<string name="media_output_summary" product="tablet" msgid="6672024060360538526">"Máy tính bảng"</string>
@@ -4386,7 +4388,7 @@
<string name="mobile_data_settings_summary" msgid="6492798151325636912">"Sử dụng dữ liệu qua mạng di động"</string>
<string name="mobile_data_settings_summary_auto_switch" msgid="3665863214578471494">"Điện thoại sẽ tự động chuyển sang nhà mạng này khi nằm trong vùng phủ sóng"</string>
<string name="calls_preference" msgid="2076353032705811243">"Tùy chọn cuộc gọi"</string>
- <string name="sms_preference" msgid="8449270011976880">"Tùy chọn SMS"</string>
+ <string name="sms_preference" msgid="8449270011976880">"Tùy chọn cho SMS"</string>
<string name="calls_and_sms_ask_every_time" msgid="2776167541223210738">"Luôn hỏi"</string>
<string name="mobile_network_summary_add_a_network" msgid="5408745221357144009">"Thêm mạng"</string>
<plurals name="mobile_network_summary_count" formatted="false" msgid="6222822873390636020">
diff --git a/tests/CarDeveloperOptions/res/values-zh-rCN/arrays.xml b/tests/CarDeveloperOptions/res/values-zh-rCN/arrays.xml
index c6c525e..d2cb99c 100644
--- a/tests/CarDeveloperOptions/res/values-zh-rCN/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-zh-rCN/arrays.xml
@@ -272,7 +272,7 @@
<item msgid="6266277260961066535">"辅助结构"</item>
<item msgid="7715498149883482300">"辅助屏幕截图"</item>
<item msgid="4046679376726313293">"读取手机状态"</item>
- <item msgid="6329507266039719587">"添加语音邮件"</item>
+ <item msgid="6329507266039719587">"添加语音信息"</item>
<item msgid="7692440726415391408">"使用 SIP"</item>
<item msgid="8572453398128326267">"处理拨出电话"</item>
<item msgid="7775674394089376306">"指纹"</item>
@@ -339,7 +339,7 @@
<item msgid="7106921284621230961">"辅助结构"</item>
<item msgid="4496533640894624799">"辅助屏幕截图"</item>
<item msgid="2598847264853993611">"读取手机状态"</item>
- <item msgid="9215610846802973353">"添加语音邮件"</item>
+ <item msgid="9215610846802973353">"添加语音信息"</item>
<item msgid="9186411956086478261">"使用 SIP"</item>
<item msgid="6884763100104539558">"处理拨出电话"</item>
<item msgid="125513972170580692">"指纹"</item>
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"永不允许"</item>
<item msgid="8184570120217958741">"始终允许"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"正常"</item>
+ <item msgid="5101233285497327432">"中等"</item>
+ <item msgid="1555861583162930714">"低"</item>
+ <item msgid="1719683776264798117">"严重不足"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"正常"</item>
+ <item msgid="6107138933849816768">"中等"</item>
+ <item msgid="182695359839047859">"低"</item>
+ <item msgid="8577246509202964244">"严重"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"常驻"</item>
<item msgid="167418068739176448">"顶层 Activity"</item>
diff --git a/tests/CarDeveloperOptions/res/values-zh-rCN/strings.xml b/tests/CarDeveloperOptions/res/values-zh-rCN/strings.xml
index c2532c4..b8b96a2 100644
--- a/tests/CarDeveloperOptions/res/values-zh-rCN/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-zh-rCN/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"缩小或放大屏幕上的文字。"</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"缩小"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"放大"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"示例文本"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"绿野仙踪"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"第 11 章:奥兹国神奇的翡翠城"</string>
@@ -209,7 +208,7 @@
<string name="proxy_error_empty_host_set_port" msgid="8471455809508588255">"如果主机字段为空,则端口字段必须为空。"</string>
<string name="proxy_error_invalid_port" msgid="4046559920586100637">"您键入的端口无效。"</string>
<string name="proxy_warning_limited_support" msgid="9026539134219095768">"浏览器会使用 HTTP 代理,但其他应用可能不会使用。"</string>
- <string name="proxy_url_title" msgid="882042361706435904">"PAC网址: "</string>
+ <string name="proxy_url_title" msgid="882042361706435904">"PAC 网址: "</string>
<string name="radio_info_dl_kbps" msgid="2903778264453410272">"DL 带宽 (kbps):"</string>
<string name="radio_info_ul_kbps" msgid="3802245899811732716">"UL 带宽 (kbps):"</string>
<string name="radio_info_signal_location_label" msgid="6788144906873498013">"移动网络位置信息(已弃用):"</string>
@@ -312,12 +311,12 @@
<string name="roaming" msgid="8860308342135146004">"漫游"</string>
<string name="roaming_enable" msgid="2108142024297441116">"漫游时连接到移动数据网络服务"</string>
<string name="roaming_disable" msgid="1915440242079953809">"漫游时连接到移动数据网络服务"</string>
- <string name="roaming_reenable_message" msgid="8388505868655113258">"移动数据网络连接已断开,因为您已离开本地网络并关闭了移动数据网络漫游功能。"</string>
+ <string name="roaming_reenable_message" msgid="8388505868655113258">"移动数据网络连接已断开,因为您已离开本地网络并关闭了数据漫游功能。"</string>
<string name="roaming_turn_it_on_button" msgid="4370846458830537578">"将其启用"</string>
<string name="roaming_warning" msgid="5488050911277592868">"这可能会产生高额费用。"</string>
<string name="roaming_warning_multiuser" product="tablet" msgid="7090388691615686893">"如果允许数据漫游,您可能需要支付高昂的漫游费用!\n\n此设置会影响这部平板电脑上的所有用户。"</string>
<string name="roaming_warning_multiuser" product="default" msgid="6999819541078827556">"如果允许数据漫游,您可能需要支付高昂的漫游费用!\n\n此设置会影响这部手机上的所有用户。"</string>
- <string name="roaming_reenable_title" msgid="6985082191178297921">"允许移动数据网络漫游吗?"</string>
+ <string name="roaming_reenable_title" msgid="6985082191178297921">"允许数据漫游?"</string>
<string name="networks" msgid="3073876464102136771">"运营商选择"</string>
<string name="sum_carrier_select" msgid="8964744180598499121">"选择网络运营商"</string>
<string name="date_and_time_settings_title" msgid="7827088656940910631">"日期和时间"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"个人资料信息"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"帐号"</string>
<string name="location_settings_title" msgid="2707201457572301030">"位置信息"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"使用位置信息"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"使用位置信息"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"已关闭"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">已开启 - <xliff:g id="COUNT_1">%1$d</xliff:g> 款应用可访问位置信息</item>
@@ -719,7 +718,7 @@
<item quantity="one"><xliff:g id="COUNT_0">%d</xliff:g> 个应用正在运行</item>
</plurals>
<string name="manage_trust_agents" msgid="8129970926213142261">"可信代理"</string>
- <string name="disabled_because_no_backup_security" msgid="8127039979909203528">"要开始使用,请先设置屏幕锁定方式"</string>
+ <string name="disabled_because_no_backup_security" msgid="8127039979909203528">"需先设置屏幕锁定方式才能使用"</string>
<string name="manage_trust_agents_summary" msgid="2023116850759962248">"无"</string>
<plurals name="manage_trust_agents_summary_on" formatted="false" msgid="5550538038916606097">
<item quantity="other"><xliff:g id="COUNT">%d</xliff:g> 个可信代理正在运行</item>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"WLAN"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"打开WLAN"</string>
<string name="wifi_settings" msgid="7486492317310514109">"WLAN"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"使用 WLAN"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"使用 WLAN"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"WLAN设置"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"WLAN"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"设置和管理无线接入点"</string>
@@ -890,7 +889,7 @@
<string name="wifi_menu_forget" msgid="7561140554450163075">"取消保存网络"</string>
<string name="wifi_menu_modify" msgid="4080178040721021101">"修改网络"</string>
<string name="wifi_empty_list_wifi_off" msgid="272877164691346240">"要查看可用网络,请打开 WLAN。"</string>
- <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"正在搜索WLAN网络…"</string>
+ <string name="wifi_empty_list_wifi_on" msgid="881478805041020600">"正在搜索 WLAN 网络…"</string>
<string name="wifi_empty_list_user_restricted" msgid="2341613007817352431">"您无权更改WLAN网络。"</string>
<string name="wifi_more" msgid="3538241640407382185">"更多"</string>
<string name="wifi_setup_wps" msgid="6730131677695521321">"自动设置 (WPS)"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"WLAN"</item>
+ <item msgid="2271962426654621656">"移动数据"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"如果无法连接到 WLAN,请使用移动网络"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"如果移动网络不可用,请使用 WLAN"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"通过 WLAN 进行通话。如果 WLAN 连接中断,通话将会结束。"</string>
@@ -1208,8 +1210,8 @@
<string name="adaptive_sleep_summary_off" msgid="2891586225954973431">"关闭"</string>
<string name="adaptive_sleep_description" msgid="812673735459170009">"避免屏幕在您查看它时关闭。"</string>
<string name="adaptive_sleep_privacy" msgid="5706802215479902623">"屏幕感知功能会通过前置摄像头来确定是否有人正在看屏幕。这个功能只会在设备上运行,系统决不会存储图片或将图片发送给 Google。"</string>
- <string name="night_display_title" msgid="1305002424893349814">"夜间模式"</string>
- <string name="night_display_text" msgid="5330502493684652527">"夜间模式会将您的屏幕色调调为琥珀色,可让您在光线昏暗的环境下更舒适地查看屏幕或阅读文字,并有助您入睡。"</string>
+ <string name="night_display_title" msgid="1305002424893349814">"护眼模式"</string>
+ <string name="night_display_text" msgid="5330502493684652527">"护眼模式会将您的屏幕色调调为琥珀色,可让您在光线昏暗的环境下更舒适地查看屏幕或阅读文字,并有助您入睡。"</string>
<string name="night_display_auto_mode_title" msgid="8493573087102481588">"设定时间"</string>
<string name="night_display_auto_mode_never" msgid="2897444637217807088">"无"</string>
<string name="night_display_auto_mode_custom" msgid="1400891076453963151">"在设定的时间开启"</string>
@@ -1230,8 +1232,8 @@
<string name="night_display_activation_off_manual" msgid="7776082151269794201">"立即关闭"</string>
<string name="night_display_activation_on_twilight" msgid="5610294051700287249">"开启,直到日出"</string>
<string name="night_display_activation_off_twilight" msgid="6846727701281556110">"关闭,直到日落"</string>
- <string name="night_display_activation_on_custom" msgid="4761140206778957611">"保持开启状态,直到<xliff:g id="ID_1">%1$s</xliff:g>"</string>
- <string name="night_display_activation_off_custom" msgid="4207238846687792731">"保持关闭状态,直到<xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="night_display_activation_on_custom" msgid="4761140206778957611">"开启,直到<xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="night_display_activation_off_custom" msgid="4207238846687792731">"关闭,直到<xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="night_display_not_currently_on" msgid="1436588493764429281">"目前未开启护眼模式"</string>
<string name="screen_timeout" msgid="1700950247634525588">"休眠"</string>
<string name="screen_timeout_title" msgid="150117777762864112">"屏幕关闭"</string>
@@ -1728,7 +1730,7 @@
<string name="lockpassword_confirm_your_pin_generic" msgid="8732268389177735264">"请输入您的设备 PIN 码以继续"</string>
<string name="lockpassword_confirm_your_password_generic" msgid="6304552647060899594">"请输入您的设备密码以继续"</string>
<string name="lockpassword_confirm_your_pattern_generic_profile" msgid="3074250084050465513">"请绘制您的工作解锁图案以继续"</string>
- <string name="lockpassword_confirm_your_pin_generic_profile" msgid="6037908971086439523">"请输入您的工作 PIN 码以继续"</string>
+ <string name="lockpassword_confirm_your_pin_generic_profile" msgid="6037908971086439523">"需输入您的工作资料 PIN 码才能继续"</string>
<string name="lockpassword_confirm_your_password_generic_profile" msgid="2646162490703489685">"请输入您的工作密码以继续"</string>
<string name="lockpassword_strong_auth_required_device_pattern" msgid="1014214190135045781">"为了提升安全性,请绘制您的设备解锁图案"</string>
<string name="lockpassword_strong_auth_required_device_pin" msgid="24030584350601016">"为了提升安全性,请输入您的设备 PIN 码"</string>
@@ -1827,7 +1829,7 @@
<string name="app_factory_reset" msgid="8718986000278776272">"卸载更新"</string>
<string name="auto_launch_enable_text" msgid="3372898942144027341">"您已选择默认使用此应用处理某些操作。"</string>
<string name="always_allow_bind_appwidgets_text" msgid="2286211654774611037">"您已选择允许该应用创建微件并查看其数据。"</string>
- <string name="auto_launch_disable_text" msgid="8560921288036801416">"没有默认操作。"</string>
+ <string name="auto_launch_disable_text" msgid="8560921288036801416">"无默认设置。"</string>
<string name="clear_activities" msgid="2068014972549235347">"清除默认操作"</string>
<string name="screen_compatibility_text" msgid="1768064020294301496">"此应用可能不是针对您的屏幕设计的。您可以在此处调整其显示尺寸/比例,让它适合您的屏幕。"</string>
<string name="ask_compatibility" msgid="6687958195768084807">"启动时确认"</string>
@@ -2080,7 +2082,7 @@
<string name="accessibility_timeout_1min" msgid="5019003178551730551">"1 分钟"</string>
<string name="accessibility_timeout_2mins" msgid="4124259290444829477">"2 分钟"</string>
<string name="accessibility_content_timeout_preference_title" msgid="5160746882250939464">"阅读时间"</string>
- <string name="accessibility_control_timeout_preference_title" msgid="2771808346038759474">"操作执行时长"</string>
+ <string name="accessibility_control_timeout_preference_title" msgid="2771808346038759474">"等待操作的时长"</string>
<string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"请选择您需要阅读的消息的显示时间(只会暂时显示)。\n\n只有部分应用支持这项设置。"</string>
<string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"请选择提示您执行操作的消息的显示时间(只会暂时显示)。\n\n部分应用可能不支持这项设置。"</string>
<string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"轻触并按住的延迟时间"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"通知振动"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"响铃振动"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"轻触振动"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"使用服务"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"使用色彩校正"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"使用字幕"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"使用服务"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"使用色彩校正"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"使用字幕"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"继续"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"助听器"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"未连接任何助听器"</string>
@@ -2276,7 +2278,7 @@
<string name="battery_tip_smart_battery_title" product="device" msgid="7419448992583346364">"延长设备的电池续航时间"</string>
<string name="battery_tip_smart_battery_summary" msgid="5344821856478265778">"开启电池管理器"</string>
<string name="battery_tip_early_heads_up_title" msgid="707163785378746813">"开启省电模式"</string>
- <string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"电池电量可能会比平时更早耗尽"</string>
+ <string name="battery_tip_early_heads_up_summary" msgid="4231489566422395156">"电池电量可能会比平时更快耗尽"</string>
<string name="battery_tip_early_heads_up_done_title" msgid="112550885882648429">"省电模式已开启"</string>
<string name="battery_tip_early_heads_up_done_summary" msgid="8692257022962771181">"部分功能可能会受到限制"</string>
<string name="battery_tip_high_usage_title" product="default" msgid="4103005178310487352">"手机的使用强度比平时高"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"开启"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"使用省电模式"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"使用省电模式"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"自动开启"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"一律不"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"电量剩余 <xliff:g id="PERCENT">%1$s</xliff:g> 时"</string>
@@ -2655,7 +2657,7 @@
<string name="data_usage_data_limit" msgid="4070740691087063670">"设置流量上限"</string>
<string name="data_usage_cycle" msgid="1877235461828192940">"流量消耗重置周期"</string>
<string name="data_usage_app_items_header_text" msgid="5396134508509913851">"应用数据流量"</string>
- <string name="data_usage_menu_roaming" msgid="6933555994416977198">"移动数据网络漫游"</string>
+ <string name="data_usage_menu_roaming" msgid="6933555994416977198">"数据漫游"</string>
<string name="data_usage_menu_restrict_background" msgid="3539289148113800518">"限制后台流量"</string>
<string name="data_usage_menu_allow_background" msgid="2874898501715368528">"允许使用后台流量"</string>
<string name="data_usage_menu_split_4g" msgid="2264683155484246409">"单独显示4G流量"</string>
@@ -2757,7 +2759,7 @@
<string name="vpn_not_used" msgid="2889520789132261454">"(未使用)"</string>
<string name="vpn_no_ca_cert" msgid="486605757354800838">"(不验证服务器)"</string>
<string name="vpn_no_server_cert" msgid="679622228649855629">"(来自服务器)"</string>
- <string name="vpn_always_on_invalid_reason_type" msgid="165810330614905489">"此 VPN 类型无法随时保持连接"</string>
+ <string name="vpn_always_on_invalid_reason_type" msgid="165810330614905489">"此类型的 VPN 无法随时保持连接"</string>
<string name="vpn_always_on_invalid_reason_server" msgid="3864424127328210700">"始终开启的 VPN 仅支持数字格式的服务器地址"</string>
<string name="vpn_always_on_invalid_reason_no_dns" msgid="3814114757059738225">"必须为始终开启的 VPN 指定 DNS 服务器"</string>
<string name="vpn_always_on_invalid_reason_dns" msgid="501388894176868973">"DNS 服务器地址必须为数字才能使用始终开启的 VPN"</string>
@@ -2790,7 +2792,7 @@
<string name="vpn_menu_lockdown" msgid="6951452279924808089">"始终开启的 VPN"</string>
<string name="vpn_no_vpns_added" msgid="6616183541896197147">"尚未添加任何 VPN"</string>
<string name="vpn_always_on_summary" msgid="3639994551631437397">"随时和 VPN 保持连接"</string>
- <string name="vpn_always_on_summary_not_supported" msgid="9077720997795965133">"不受此应用支持"</string>
+ <string name="vpn_always_on_summary_not_supported" msgid="9077720997795965133">"此应用不支持"</string>
<string name="vpn_always_on_summary_active" msgid="8962619701962239088">"已启用“始终开启”模式"</string>
<string name="vpn_require_connection" msgid="5413746839457797350">"屏蔽未使用 VPN 的所有连接"</string>
<string name="vpn_require_connection_title" msgid="8361434328767853717">"需要连接 VPN?"</string>
@@ -2848,7 +2850,7 @@
<string name="user_settings_title" msgid="7917598650933179545">"多用户"</string>
<string name="user_settings_footer_text" product="device" msgid="4573858247439190545">"通过添加新用户来共享您的设备。每个用户都将在您的设备上拥有个人空间,以便使用自定义的主屏幕、帐号、应用和设置等。"</string>
<string name="user_settings_footer_text" product="tablet" msgid="780018221428132918">"通过添加新用户来共享您的平板电脑。每个用户都将在您的平板电脑上拥有个人空间,以便使用自定义的主屏幕、帐号、应用和设置等。"</string>
- <string name="user_settings_footer_text" product="default" msgid="1470859614968237491">"通过添加新用户来共享您的手机。每个用户都将在您的手机上拥有个人空间,以便使用自定义的主屏幕、帐号、应用和设置等。"</string>
+ <string name="user_settings_footer_text" product="default" msgid="1470859614968237491">"通过添加新用户,您可以与他人共用一部手机。每个用户都将在您的手机上拥有个人空间,并可自行设定主屏幕、帐号、应用和设置等。"</string>
<string name="user_list_title" msgid="6670258645246192324">"用户和个人资料"</string>
<string name="user_add_user_or_profile_menu" msgid="4220679989900149336">"添加用户或个人资料"</string>
<string name="user_add_user_menu" msgid="9006572936456324794">"添加用户"</string>
@@ -2913,7 +2915,7 @@
<string name="apps_with_restrictions_header" msgid="8656739605673756176">"受限应用"</string>
<string name="apps_with_restrictions_settings_button" msgid="5065896213467171744">"展开应用设置"</string>
<string name="nfc_payment_settings_title" msgid="5070077706735415291">"触碰付款"</string>
- <string name="nfc_payment_how_it_works" msgid="7607901964687787177">"工作原理"</string>
+ <string name="nfc_payment_how_it_works" msgid="7607901964687787177">"工作方式"</string>
<string name="nfc_payment_no_apps" msgid="8844440783395420860">"使用手机在商店内付款"</string>
<string name="nfc_payment_default" msgid="7869273092463612271">"默认付款应用"</string>
<string name="nfc_payment_default_not_set" msgid="955804193510335338">"未设置"</string>
@@ -3143,7 +3145,7 @@
<string name="notification_unknown_sound_title" msgid="8043718667804838398">"应用提供的提示音"</string>
<string name="notification_sound_default" msgid="2664544380802426260">"默认通知提示音"</string>
<string name="alarm_ringtone_title" msgid="6411326147408635902">"默认闹钟提示音"</string>
- <string name="vibrate_when_ringing_title" msgid="2757996559847126952">"有来电时振动"</string>
+ <string name="vibrate_when_ringing_title" msgid="2757996559847126952">"来电振动"</string>
<string name="other_sound_settings" msgid="5250376066099818676">"其他提示音"</string>
<string name="dial_pad_tones_title" msgid="8877212139988655769">"拨号键盘提示音"</string>
<string name="screen_locking_sounds_title" msgid="4407110895465866809">"屏幕锁定提示音"</string>
@@ -3160,14 +3162,14 @@
<string name="emergency_tone_vibrate" msgid="5020068066905681181">"振动"</string>
<string name="boot_sounds_title" msgid="7583926202411353620">"开机音效"</string>
<string name="live_caption_title" msgid="7926591158657997051">"实时字幕"</string>
- <string name="live_caption_summary" msgid="9064771862352393125">"自动字幕媒体"</string>
+ <string name="live_caption_summary" msgid="9064771862352393125">"自动生成媒体字幕"</string>
<string name="zen_mode_settings_summary_off" msgid="6929319200478424962">"永不"</string>
<plurals name="zen_mode_settings_summary_on" formatted="false" msgid="6061723291126091396">
<item quantity="other">已启用 <xliff:g id="ON_COUNT">%d</xliff:g> 个</item>
<item quantity="one">已启用 1 个</item>
</plurals>
<string name="zen_mode_settings_title" msgid="3425263414594779244">"勿扰模式"</string>
- <string name="zen_mode_settings_turn_on_dialog_title" msgid="3062548369931058282">"开启“勿扰”模式"</string>
+ <string name="zen_mode_settings_turn_on_dialog_title" msgid="3062548369931058282">"开启勿扰模式"</string>
<string name="zen_mode_behavior_settings_title" msgid="423125904296667490">"例外情况"</string>
<string name="zen_mode_duration_settings_title" msgid="5522668871014735728">"默认时长"</string>
<string name="zen_mode_behavior_allow_title" msgid="2440627647424280842">"允许以下类型的提示音和振动:"</string>
@@ -3199,7 +3201,7 @@
<string name="zen_mode_restrict_notifications_mute_footer" msgid="3049522809520549054">"手机在收到通知时既不会发出提示音也不会振动。"</string>
<string name="zen_mode_restrict_notifications_hide" msgid="3296933643539682552">"不显示通知,也不发出通知提示音"</string>
<string name="zen_mode_restrict_notifications_hide_summary" msgid="1449301153755270168">"您将不会看到通知或听到通知提示音"</string>
- <string name="zen_mode_restrict_notifications_hide_footer" msgid="7617688597593946765">"您的手机将不会显示任何新通知或现有通知,也不会因此发出振动或提示音。请注意,系统仍会显示与手机活动和状态相关的重要通知。\n\n关闭“勿扰”模式后,您可以通过从屏幕顶部向下滑动来查找错过的通知。"</string>
+ <string name="zen_mode_restrict_notifications_hide_footer" msgid="7617688597593946765">"您的手机将不会显示任何新通知或现有通知,也不会因此发出振动或提示音。请注意,系统仍会显示与手机活动和状态相关的重要通知。\n\n关闭勿扰模式后,只要从屏幕顶部向下滑动即可查看错过的通知。"</string>
<string name="zen_mode_restrict_notifications_custom" msgid="3167252482570424133">"自定义"</string>
<string name="zen_mode_restrict_notifications_enable_custom" msgid="6376983315529894440">"启用自定义设置"</string>
<string name="zen_mode_restrict_notifications_disable_custom" msgid="8004212081465043044">"移除自定义设置"</string>
@@ -3507,7 +3509,7 @@
<string name="zen_mode_reminders_list" msgid="7347061314032326677">"提醒"</string>
<string name="zen_mode_events" msgid="5784076928339534984">"允许活动"</string>
<string name="zen_mode_bypassing_apps" msgid="3080739479028713449">"允许应用覆盖"</string>
- <string name="zen_mode_bypassing_apps_title" msgid="2115024664615538847">"应用例外情况"</string>
+ <string name="zen_mode_bypassing_apps_title" msgid="2115024664615538847">"例外应用"</string>
<plurals name="zen_mode_bypassing_apps_subtext" formatted="false" msgid="8723144434730871572">
<item quantity="other">有 <xliff:g id="NUMBER">%1$d</xliff:g> 个应用的通知可以覆盖“勿扰”设置</item>
<item quantity="one">有 1 个应用的通知可以覆盖“勿扰”设置</item>
@@ -3518,7 +3520,7 @@
<string name="zen_mode_starred_callers" msgid="1317376207713013472">"已加星标的联系人"</string>
<string name="zen_mode_repeat_callers" msgid="1435309867554692340">"重复来电者"</string>
<string name="zen_mode_repeat_callers_list" msgid="2750270907597457279">"重复来电者"</string>
- <string name="zen_mode_repeat_callers_title" msgid="7192952181541813487">"允许显示重复来电者"</string>
+ <string name="zen_mode_repeat_callers_title" msgid="7192952181541813487">"不屏蔽重复来电者"</string>
<string name="zen_mode_calls_summary_one" msgid="8327371053236689649">"允许<xliff:g id="CALLER_TYPE">%1$s</xliff:g>的来电"</string>
<string name="zen_mode_calls_summary_two" msgid="9017678770532673578">"允许下列对象来电:<xliff:g id="CALLER_TYPE">%1$s</xliff:g>和<xliff:g id="CALLERT_TPYE">%2$s</xliff:g>"</string>
<string name="zen_mode_repeat_callers_summary" msgid="1752513516040525545">"如果同一个人在 <xliff:g id="MINUTES">%d</xliff:g> 分钟内第二次来电"</string>
@@ -3592,7 +3594,7 @@
<string name="app_launch_open_domain_urls_summary" msgid="6803029846855502366">"无需询问即可打开"</string>
<string name="app_launch_supported_domain_urls_title" msgid="503976327533974142">"支持的链接"</string>
<string name="app_launch_other_defaults_title" msgid="2986685757258232543">"其他默认设置"</string>
- <string name="storage_summary_format" msgid="2166430500147022935">"<xliff:g id="STORAGE_TYPE">%2$s</xliff:g>已使用 <xliff:g id="SIZE">%1$s</xliff:g>"</string>
+ <string name="storage_summary_format" msgid="2166430500147022935">"已使用 <xliff:g id="SIZE">%1$s</xliff:g> <xliff:g id="STORAGE_TYPE">%2$s</xliff:g>"</string>
<string name="storage_type_internal" msgid="4434212376539293892">"内部存储空间"</string>
<string name="storage_type_external" msgid="8827468573685648108">"外部存储空间"</string>
<string name="data_summary_format" msgid="5022135392347814271">"自 <xliff:g id="DATE">%2$s</xliff:g>以来已使用 <xliff:g id="SIZE">%1$s</xliff:g>"</string>
@@ -3904,9 +3906,9 @@
<string name="condition_device_muted_summary" msgid="3101055117680109021">"通话和通知"</string>
<string name="condition_device_vibrate_title" msgid="5712659354868872338">"仅振动"</string>
<string name="condition_device_vibrate_summary" msgid="9073880731894828604">"通话和通知"</string>
- <string name="night_display_suggestion_title" msgid="4222839610992282188">"设置“夜间模式”时间安排"</string>
+ <string name="night_display_suggestion_title" msgid="4222839610992282188">"设置“护眼模式”时间表"</string>
<string name="night_display_suggestion_summary" msgid="1754361016383576916">"每晚自动调节屏幕色调"</string>
- <string name="condition_night_display_title" msgid="9171491784857160135">"“夜间模式”已开启"</string>
+ <string name="condition_night_display_title" msgid="9171491784857160135">"“护眼模式”已开启"</string>
<string name="condition_night_display_summary" msgid="7885776986937527558">"已将屏幕调为琥珀色"</string>
<string name="condition_grayscale_title" msgid="1226351649203551299">"灰度模式"</string>
<string name="condition_grayscale_summary" msgid="749172886527349546">"仅以灰色显示"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"设备处于锁定状态时,禁止在通知中输入回复内容或其他文字"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"默认拼写检查工具"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"选择拼写检查工具"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"使用拼写检查工具"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"使用拼写检查工具"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"未选择"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(无)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4101,7 +4103,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"存储空间管理器会从您的设备中移除已备份的照片和视频,从而释放存储空间。"</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"移除照片和视频"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"存储空间管理器"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"使用存储空间管理器"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"使用存储空间管理器"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"自动"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"手动"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"立即释放空间"</string>
@@ -4437,7 +4439,7 @@
<string name="cdma_subscription_summary" msgid="2298861419202726628">"在 RUIM/SIM 和 NV 之间切换"</string>
<string name="cdma_subscription_dialogtitle" msgid="232485231569225126">"订阅"</string>
<string name="register_automatically" msgid="1858081641661493109">"自动注册…"</string>
- <string name="roaming_alert_title" msgid="1849237823113454475">"要允许数据网络漫游吗?"</string>
+ <string name="roaming_alert_title" msgid="1849237823113454475">"允许数据漫游?"</string>
<string name="roaming_check_price_warning" msgid="5883499714594419439">"请与您的网络服务提供商联系以了解定价。"</string>
<string name="mobile_data_usage_title" msgid="2376358672434990037">"应用的流量使用情况"</string>
<string name="mobile_network_mode_error" msgid="6818434186286086554">"无效的网络模式<xliff:g id="NETWORKMODEID">%1$d</xliff:g>。忽略。"</string>
@@ -4472,7 +4474,7 @@
<string name="privacy_dashboard_summary" msgid="7916431309860824945">"权限、帐号活动、个人数据"</string>
<string name="contextual_card_dismiss_remove" msgid="1750420285615827309">"移除"</string>
<string name="contextual_card_dismiss_keep" msgid="3204450672928193661">"保留"</string>
- <string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"要移除这项推荐内容吗?"</string>
+ <string name="contextual_card_dismiss_confirm_message" msgid="2352465079667730312">"要移除这项建议吗?"</string>
<string name="contextual_card_removed_message" msgid="4047307820743366876">"已移除建议"</string>
<string name="contextual_card_undo_dismissal_text" msgid="5009245286931852012">"撤消"</string>
<string name="low_storage_summary" msgid="4562224870189133400">"存储空间不足。已使用 <xliff:g id="PERCENTAGE">%1$s</xliff:g>,还剩 <xliff:g id="FREE_SPACE">%2$s</xliff:g>"</string>
diff --git a/tests/CarDeveloperOptions/res/values-zh-rHK/arrays.xml b/tests/CarDeveloperOptions/res/values-zh-rHK/arrays.xml
index b91281c..bf81e93 100644
--- a/tests/CarDeveloperOptions/res/values-zh-rHK/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-zh-rHK/arrays.xml
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"永不允許"</item>
<item msgid="8184570120217958741">"永遠允許"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"正常"</item>
+ <item msgid="5101233285497327432">"中等"</item>
+ <item msgid="1555861583162930714">"低"</item>
+ <item msgid="1719683776264798117">"嚴重不足"</item>
+ <item msgid="1567326459340152525">"不明"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"正常"</item>
+ <item msgid="6107138933849816768">"中"</item>
+ <item msgid="182695359839047859">"低"</item>
+ <item msgid="8577246509202964244">"嚴重不足"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"持續"</item>
<item msgid="167418068739176448">"重大活動"</item>
@@ -463,8 +473,8 @@
</string-array>
<string-array name="wifi_metered_entries">
<item msgid="4329206416008519163">"自動偵測"</item>
- <item msgid="773943026484148895">"設定為按用量收費"</item>
- <item msgid="1008268820118852416">"設定為非按用量收費"</item>
+ <item msgid="773943026484148895">"視為按用量收費"</item>
+ <item msgid="1008268820118852416">"視為非按用量收費"</item>
</string-array>
<string-array name="wifi_privacy_entries">
<item msgid="6545683814310036454">"使用隨機 MAC (預設)"</item>
diff --git a/tests/CarDeveloperOptions/res/values-zh-rHK/strings.xml b/tests/CarDeveloperOptions/res/values-zh-rHK/strings.xml
index e090f07..cb41754 100644
--- a/tests/CarDeveloperOptions/res/values-zh-rHK/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-zh-rHK/strings.xml
@@ -23,8 +23,8 @@
<string name="deny" msgid="3998166389989144025">"拒絕"</string>
<string name="device_info_default" msgid="1548919563979154348">"未知"</string>
<plurals name="show_dev_countdown" formatted="false" msgid="3953785659137161981">
- <item quantity="other">您只需完成 <xliff:g id="STEP_COUNT_1">%1$d</xliff:g> 個步驟,即可成為開發人員。</item>
- <item quantity="one">您只需完成 <xliff:g id="STEP_COUNT_0">%1$d</xliff:g> 個步驟,即可成為開發人員。</item>
+ <item quantity="other">尚餘 <xliff:g id="STEP_COUNT_1">%1$d</xliff:g> 個步驟,您就可以成為開發人員。</item>
+ <item quantity="one">尚餘 <xliff:g id="STEP_COUNT_0">%1$d</xliff:g> 個步驟,您就可以成為開發人員。</item>
</plurals>
<string name="show_dev_on" msgid="9075712234786224065">"您現已成為開發人員!"</string>
<string name="show_dev_already" msgid="7665948832405148689">"不需要了,您已經是開發人員。"</string>
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"縮小或放大畫面上的文字。"</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"縮小"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"放大"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"範例文字"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"《綠野仙蹤》"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"第 11 章:奧茲國的奇妙翡翠城"</string>
@@ -276,7 +275,7 @@
<string name="dlg_remove_locales_message" msgid="5179370688876343176">"文字將以其他語言顯示。"</string>
<string name="dlg_remove_locales_error_title" msgid="9090578326002163975">"無法移除所有語言"</string>
<string name="dlg_remove_locales_error_message" msgid="6799897638891903618">"請至少保留一種偏好語言"</string>
- <string name="locale_not_translated" msgid="7943669576006420058">"部分應用程式可能不提供支援"</string>
+ <string name="locale_not_translated" msgid="7943669576006420058">"部分應用程式可能不支援"</string>
<string name="action_drag_label_move_up" msgid="2074064283966078352">"向上移"</string>
<string name="action_drag_label_move_down" msgid="1367989732445492291">"向下移"</string>
<string name="action_drag_label_move_top" msgid="2033098833739345957">"移至頂端"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"個人檔案資料"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"帳戶"</string>
<string name="location_settings_title" msgid="2707201457572301030">"位置"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"使用位置資訊"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"使用位置"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"關閉"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">開啟 - <xliff:g id="COUNT_1">%1$d</xliff:g> 個應用程式可以存取位置</item>
@@ -426,7 +425,7 @@
<string name="security_settings_face_settings_require_confirmation_details" msgid="8740564864091803429">"在應用程式內驗證時,每次都要確認"</string>
<string name="security_settings_face_settings_remove_face_data" msgid="2821359954483136239">"移除臉容資料"</string>
<string name="security_settings_face_settings_footer" msgid="4627175759990550715">"您的臉容可以用來解鎖裝置和存取應用程式。"<annotation id="url">"瞭解詳情"</annotation></string>
- <string name="security_settings_face_settings_remove_dialog_title" msgid="5675319895815271094">"是否刪除臉容資料?"</string>
+ <string name="security_settings_face_settings_remove_dialog_title" msgid="5675319895815271094">"是否刪除臉孔資料?"</string>
<string name="security_settings_face_settings_remove_dialog_details" msgid="3754494807169276107">"臉孔解鎖功能記錄的資料將以安全方式永久刪除。移除後,您將需使用 PIN、圖案或密碼解鎖手機、登入應用程式及確認付款。"</string>
<string name="security_settings_fingerprint_preference_title" msgid="4177132225930582928">"指紋"</string>
<string name="fingerprint_manage_category_title" msgid="1463406696801542090">"管理指紋"</string>
@@ -448,7 +447,7 @@
<string name="security_settings_fingerprint_enroll_introduction_cancel_setup" msgid="756928427429893070">"略過"</string>
<string name="security_settings_fingerprint_enroll_introduction_continue_setup" msgid="4125977169169671144">"繼續"</string>
<string name="setup_fingerprint_enroll_skip_title" msgid="763018850721691594">"要略過指紋設定程序嗎?"</string>
- <string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"指紋設定程序只需一至兩分鐘。如果您略過此程序,稍後可以在設定中自行新增您的指紋。"</string>
+ <string name="setup_fingerprint_enroll_skip_after_adding_lock_text" msgid="8849928362049018680">"指紋設定程序只需一至兩分鐘。如略過此步驟,您可於稍後在設定中加入指紋。"</string>
<string name="lock_screen_intro_skip_title" msgid="5307431665496346914">"要略過螢幕鎖定設定程序嗎?"</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="tablet" msgid="7553945981266845264">"系統將不會開啟裝置保護功能。如果您的平板電腦遺失、被盜或被重設,您將無法防止他人使用此平板電腦。"</string>
<string name="lock_screen_intro_skip_dialog_text_frp" product="device" msgid="1378243257238015603">"系統將不會開啟裝置保護功能。如果您的裝置遺失、被盜或被重設,您將無法防止他人使用此裝置。"</string>
@@ -467,7 +466,7 @@
<string name="security_settings_fingerprint_enroll_dialog_ok" msgid="3428927518029038956">"確定"</string>
<string name="security_settings_fingerprint_enroll_dialog_delete" msgid="4312297515772004580">"刪除"</string>
<string name="security_settings_fingerprint_enroll_start_title" msgid="1346287821809975177">"輕觸感應器"</string>
- <string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"手指放在感應器上,感到震動時移開"</string>
+ <string name="security_settings_fingerprint_enroll_start_message" msgid="750040530347336376">"請將手指放在感應器上,並在感到震動時移開"</string>
<string name="security_settings_fingerprint_enroll_repeat_title" msgid="1764145704166303842">"移開手指,然後再次輕觸"</string>
<string name="security_settings_fingerprint_enroll_repeat_message" msgid="4434560313661204448">"手指重覆按壓,記錄指紋各個部分"</string>
<string name="security_settings_fingerprint_enroll_finish_title" msgid="2987918958909117821">"已加入指紋"</string>
@@ -489,7 +488,7 @@
<string name="security_settings_fingerprint_enroll_touch_dialog_title" msgid="7410398793283818609">"糟糕,這不是感應器"</string>
<string name="security_settings_fingerprint_enroll_touch_dialog_message" msgid="7192100314788868883">"請使用食指輕觸位於手機背面的感應器。"</string>
<string name="security_settings_fingerprint_enroll_error_dialog_title" msgid="1415709674142168770">"尚未完成註冊"</string>
- <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"已達到指紋註冊次數上限,請重試。"</string>
+ <string name="security_settings_fingerprint_enroll_error_timeout_dialog_message" msgid="498951203761192366">"註冊指紋過程逾時,請重新嘗試。"</string>
<string name="security_settings_fingerprint_enroll_error_generic_dialog_message" msgid="7896295829530444810">"無法註冊指紋,請重試或使用另一隻手指。"</string>
<string name="fingerprint_enroll_button_add" msgid="6335782936874996629">"新增其他"</string>
<string name="fingerprint_enroll_button_next" msgid="6419214079104413695">"下一步"</string>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"開啟 Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"使用 Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"使用 Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi-Fi 設定"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"設定和管理無線網絡接入點"</string>
@@ -896,7 +895,7 @@
<string name="wifi_setup_wps" msgid="6730131677695521321">"自動設定 (WPS)"</string>
<string name="wifi_settings_scanning_required_title" msgid="3593457187659922490">"要開啟 Wi-Fi 掃瞄功能嗎?"</string>
<string name="wifi_settings_scanning_required_summary" msgid="7469610959462708782">"您必須先開啟 Wi-Fi 掃瞄功能,才能自動開啟 Wi-Fi。"</string>
- <string name="wifi_settings_scanning_required_info" msgid="5913535073390607386">"Wi-Fi 掃瞄功能允許應用程式和服務隨時掃瞄 Wi-Fi 網絡 (即使 Wi-Fi 已關閉)。此功能可用作改善行動定位功能和服務"</string>
+ <string name="wifi_settings_scanning_required_info" msgid="5913535073390607386">"Wi-Fi 掃瞄功能允許應用程式和服務隨時掃瞄 Wi-Fi 網絡 (即使 Wi-Fi 已關閉)。此功能可用於改善根據位置運作的功能和服務等等。"</string>
<string name="wifi_settings_scanning_required_turn_on" msgid="4327570180594277049">"開啟"</string>
<string name="wifi_settings_scanning_required_enabled" msgid="3336102100425307040">"已開啟 Wi‑Fi 掃瞄功能"</string>
<string name="wifi_show_advanced" msgid="8199779277168030597">"進階選項"</string>
@@ -936,13 +935,13 @@
<string name="wifi_privacy_settings" msgid="4462092795794247809">"私隱"</string>
<string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"隨機化處理 MAC"</string>
<string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"新增裝置"</string>
- <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"相機對準以下二維條碼,即可將裝置新增至「<xliff:g id="SSID">%1$s</xliff:g>」"</string>
+ <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"將下方方框對準二維條碼,即可將裝置加到「<xliff:g id="SSID">%1$s</xliff:g>」"</string>
<string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"掃瞄二維條碼"</string>
<string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"將二維條碼置於下方中間,即可連接至「<xliff:g id="SSID">%1$s</xliff:g>」"</string>
<string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"掃瞄二維條碼以加入 Wi-Fi"</string>
<string name="wifi_dpp_share_wifi" msgid="1724161216219646284">"分享 Wi‑Fi"</string>
<string name="wifi_dpp_scan_qr_code_with_another_device" msgid="4357387474444884759">"掃瞄此二維條碼即可連線至「<xliff:g id="SSID">%1$s</xliff:g>」並分享密碼"</string>
- <string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"掃描此二維條碼即可連線至「<xliff:g id="SSID">%1$s</xliff:g>」"</string>
+ <string name="wifi_dpp_scan_open_network_qr_code_with_another_device" msgid="572011882416511818">"掃描此二維條碼,即可連接「<xliff:g id="SSID">%1$s</xliff:g>」"</string>
<string name="wifi_dpp_could_not_detect_valid_qr_code" msgid="27667719861826438">"無法讀取二維條碼。重新將二維條碼放在正中,然後再試一次"</string>
<string name="wifi_dpp_failure_authentication_or_configuration" msgid="9142051662156233679">"請再試一次。如果仍有問題,請聯絡裝置製造商"</string>
<string name="wifi_dpp_failure_not_compatible" msgid="4320027179973678283">"發生問題"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"流動網絡"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"如果無法使用 Wi‑Fi,請使用流動網絡"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"如果無法使用流動網絡,請使用 Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"使用 Wi-Fi 通話。如果 Wi‑Fi 斷線,通話便會結束。"</string>
@@ -2094,9 +2096,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"通知震動"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"鈴聲震動"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"觸控震動"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"使用服務"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"使用色彩校正"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"使用字幕"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"使用服務"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"使用色彩校正"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"使用字幕"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"繼續"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"助聽器"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"無連接任何助聽器"</string>
@@ -2316,7 +2318,7 @@
<string name="battery_tip_unrestrict_app_dialog_message" msgid="8120081438825031335">"此應用程式會在背景使用電量。您的電池電量可能會比預期更快耗盡。"</string>
<string name="battery_tip_unrestrict_app_dialog_ok" msgid="9154938931448151479">"移除"</string>
<string name="battery_tip_unrestrict_app_dialog_cancel" msgid="7331148618292397166">"取消"</string>
- <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"您的應用程式目前的耗電量正常。如果應用程式耗電過多,手機會建議您進行一些操作。\n\n如果電量不足,您隨時都可以開啟「省電模式」。"</string>
+ <string name="battery_tip_dialog_summary_message" product="default" msgid="7244950433272770280">"您的應用程式目前的耗電量正常。如果應用程式耗電過多,手機會建議您執行一些操作。\n\n如果電量不足,您隨時都可以開啟「省電模式」。"</string>
<string name="battery_tip_dialog_summary_message" product="tablet" msgid="1721081030632329647">"您的應用程式目前的耗電量正常。如果應用程式耗電過多,平板電腦將會為您提供操作建議。\n\n如果電量較低,您可以隨時開啟省電模式。"</string>
<string name="battery_tip_dialog_summary_message" product="device" msgid="146872407040848465">"您的應用程式目前的耗電量正常。如果應用程式耗電過多,裝置將會為您提供操作建議。\n\n如果電量較低,您可以隨時開啟省電模式。"</string>
<string name="smart_battery_manager_title" msgid="5744035036663849515">"電池管理工具"</string>
@@ -2452,7 +2454,7 @@
<string name="battery_saver_auto_percentage" msgid="5791982309331921556">"根據百分比"</string>
<string name="battery_saver_auto_routine_summary" msgid="9182044424547482889">"如果電量很可能在下次慣常充電時間之前耗盡,「省電模式」就會自動開啟"</string>
<string name="battery_saver_auto_percentage_summary" msgid="2036128588460338677">"將會在電量剩餘 <xliff:g id="PERCENT">%1$s</xliff:g> 時開啟"</string>
- <string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"設定時間"</string>
+ <string name="battery_saver_schedule_settings_title" msgid="574233428557678128">"設定時間表"</string>
<string name="battery_saver_sticky_title_new" msgid="5328707297110866082">"充滿電後關閉"</string>
<string name="battery_saver_sticky_description_new" product="default" msgid="3406582427270935879">"當您的手機電量達到 <xliff:g id="PERCENT">%1$s</xliff:g> 時,省電模式會關閉"</string>
<string name="battery_saver_sticky_description_new" product="tablet" msgid="3284967694001857194">"當您的平板電腦電量達到 <xliff:g id="PERCENT">%1$s</xliff:g> 時,省電模式會關閉"</string>
@@ -2460,7 +2462,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"開啟"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"使用省電模式"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"使用省電模式"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"自動開啟"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"永不"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"<xliff:g id="PERCENT">%1$s</xliff:g> 電量"</string>
@@ -2846,7 +2848,7 @@
<item quantity="other">檢查憑證</item>
<item quantity="one">檢查憑證</item>
</plurals>
- <string name="user_settings_title" msgid="7917598650933179545">"多個使用者"</string>
+ <string name="user_settings_title" msgid="7917598650933179545">"複數使用者"</string>
<string name="user_settings_footer_text" product="device" msgid="4573858247439190545">"新增使用者即可分享您的裝置。每位使用者在您的裝置上都有個人空間,以自訂主畫面、帳戶、應用程式、設定等。"</string>
<string name="user_settings_footer_text" product="tablet" msgid="780018221428132918">"新增使用者即可分享您的平板電腦。每位使用者在您的平板電腦上都有個人空間,以自訂主畫面、帳戶、應用程式、設定等。"</string>
<string name="user_settings_footer_text" product="default" msgid="1470859614968237491">"您可以新增使用者來分享這部手機。每位使用者在您的手機上都有個人空間,可以自訂主畫面、帳戶、應用程式、設定等等。"</string>
@@ -2881,7 +2883,7 @@
<string name="user_cannot_add_accounts_message" msgid="5993561303748749097">"限制存取的個人檔案無法新增帳戶"</string>
<string name="user_remove_user_menu" msgid="3505139157217459864">"將 <xliff:g id="USER_NAME">%1$s</xliff:g> 從這部裝置中刪除"</string>
<string name="user_lockscreen_settings" msgid="3820813814848394568">"上鎖畫面設定"</string>
- <string name="user_add_on_lockscreen_menu" msgid="5211604808199585774">"在上鎖畫面上新增使用者"</string>
+ <string name="user_add_on_lockscreen_menu" msgid="5211604808199585774">"在上鎖畫面加入使用者"</string>
<string name="user_new_user_name" msgid="3880395219777884838">"新使用者"</string>
<string name="user_new_profile_name" msgid="3074939718101489937">"新個人檔案"</string>
<string name="user_confirm_remove_self_title" msgid="6739480453680217543">"您要刪除自己嗎?"</string>
@@ -2920,7 +2922,7 @@
<string name="nfc_payment_default_not_set" msgid="955804193510335338">"未設定"</string>
<string name="nfc_payment_app_and_desc" msgid="102312684211458190">"<xliff:g id="APP">%1$s</xliff:g> - <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string>
<string name="nfc_payment_use_default" msgid="3098724195746409476">"使用預設應用程式"</string>
- <string name="nfc_payment_favor_default" msgid="7555356982142464260">"永遠"</string>
+ <string name="nfc_payment_favor_default" msgid="7555356982142464260">"一律使用"</string>
<string name="nfc_payment_favor_open" msgid="3739055715000436749">"其他付款應用程式已開啟除外"</string>
<string name="nfc_payment_pay_with" msgid="8412558374792061266">"於 Tap & Pay 終端機使用的付款方式:"</string>
<string name="nfc_how_it_works_title" msgid="6531433737926327904">"在收款機付款"</string>
@@ -3176,17 +3178,17 @@
<string name="zen_mode_behavior_total_silence" msgid="371498357539257671">"完全靜音"</string>
<string name="zen_mode_behavior_no_sound_except" msgid="8894465423364103198">"不發出音效 (<xliff:g id="CATEGORIES">%1$s</xliff:g>除外)"</string>
<string name="zen_mode_behavior_alarms_only" msgid="8406622989983047562">"不發出音效 (鬧鐘和媒體除外)"</string>
- <string name="zen_mode_automation_settings_title" msgid="3916960043054489008">"預定時間"</string>
+ <string name="zen_mode_automation_settings_title" msgid="3916960043054489008">"時間表"</string>
<string name="zen_mode_delete_automatic_rules" msgid="2455264581527305755">"刪除日程表"</string>
<string name="zen_mode_schedule_delete" msgid="7786092652527516740">"刪除"</string>
<string name="zen_mode_rule_name_edit" msgid="5479435215341745578">"編輯"</string>
- <string name="zen_mode_automation_settings_page_title" msgid="3001783354881078983">"預定時間"</string>
+ <string name="zen_mode_automation_settings_page_title" msgid="3001783354881078983">"時間表"</string>
<string name="zen_mode_automatic_rule_settings_page_title" msgid="5272888746413504692">"預定時間"</string>
<string name="zen_mode_schedule_category_title" msgid="1936785755444711221">"預定時間"</string>
<string name="zen_mode_automation_suggestion_title" msgid="4921779962633710347">"在特定時間將手機設為靜音"</string>
<string name="zen_mode_automation_suggestion_summary" msgid="2709837472884371037">"設定「請勿騷擾」規則"</string>
<string name="zen_mode_schedule_title" msgid="5275268813192802631">"預定時間"</string>
- <string name="zen_mode_use_automatic_rule" msgid="446326253915861824">"使用日程表"</string>
+ <string name="zen_mode_use_automatic_rule" msgid="446326253915861824">"使用時間表"</string>
<string name="zen_mode_option_important_interruptions" msgid="5173944276846940149">"只限優先"</string>
<string name="zen_mode_option_alarms" msgid="4843278125235203076">"只限鬧鐘"</string>
<string name="zen_mode_option_no_interruptions" msgid="4723700274519260852">"完全靜音"</string>
@@ -3421,7 +3423,7 @@
<string name="notification_content_block_summary" msgid="2743896875255591743">"永不在通知欄或周邊裝置上顯示通知"</string>
<string name="notification_badge_title" msgid="8989086619255666442">"允許通知圓點"</string>
<string name="notification_channel_badge_title" msgid="8228215248332054612">"顯示通知圓點"</string>
- <string name="app_notification_override_dnd_title" msgid="1757042206738172601">"蓋過「請勿騷擾」設定"</string>
+ <string name="app_notification_override_dnd_title" msgid="1757042206738172601">"忽略「請勿騷擾」設定"</string>
<string name="app_notification_override_dnd_summary" msgid="3152957611171210980">"「請勿騷擾」模式開啟時繼續接收這些通知"</string>
<string name="app_notification_visibility_override_title" msgid="2349335170165637672">"在上鎖畫面上"</string>
<string name="app_notification_row_banned" msgid="2079325338122151677">"已封鎖"</string>
@@ -3434,14 +3436,14 @@
<string name="notification_channel_sound_title" msgid="7635366839003304745">"音效"</string>
<string name="zen_mode_rule_delete_button" msgid="6763486487220471193">"刪除"</string>
<string name="zen_mode_rule_rename_button" msgid="1428130397306726792">"重新命名"</string>
- <string name="zen_mode_rule_name" msgid="8583652780885724670">"日程表名稱"</string>
+ <string name="zen_mode_rule_name" msgid="8583652780885724670">"時間表名稱"</string>
<string name="zen_mode_rule_name_hint" msgid="6569877315858105901">"輸入日程表名稱"</string>
<string name="zen_mode_rule_name_warning" msgid="4773465816059587512">"日程表名稱已使用"</string>
<string name="zen_mode_add_rule" msgid="7200004557856029928">"加入更多"</string>
<string name="zen_mode_add_event_rule" msgid="1398181272397489506">"加入日程表 (活動)"</string>
<string name="zen_mode_add_time_rule" msgid="5999467757140524729">"加入日程表 (時間)"</string>
<string name="zen_mode_delete_rule" msgid="2292933835997203801">"刪除日程表"</string>
- <string name="zen_mode_choose_rule_type" msgid="8877138307319450306">"選擇日程表類型"</string>
+ <string name="zen_mode_choose_rule_type" msgid="8877138307319450306">"選擇時間表類型"</string>
<string name="zen_mode_delete_rule_confirmation" msgid="2646596466259025978">"要刪除規則「<xliff:g id="RULE">%1$s</xliff:g>」嗎?"</string>
<string name="zen_mode_delete_rule_button" msgid="611058106279881991">"刪除"</string>
<string name="zen_mode_rule_type_unknown" msgid="2819480113355191421">"未知"</string>
@@ -3471,7 +3473,7 @@
<string name="zen_mode_schedule_alarm_summary" msgid="5556997989911412070">"鬧鐘響起時,系統會關閉日程表"</string>
<string name="zen_mode_custom_behavior_title" msgid="8908861697886331001">"「請勿騷擾」行為"</string>
<string name="zen_mode_custom_behavior_summary_default" msgid="3509865340195397447">"使用預設設定"</string>
- <string name="zen_mode_custom_behavior_summary" msgid="7206909852887332604">"為此日程表建立自訂設定"</string>
+ <string name="zen_mode_custom_behavior_summary" msgid="7206909852887332604">"為此時間表建立自訂設定"</string>
<string name="zen_mode_custom_behavior_category_title" msgid="7451686525113262087">"時段:「<xliff:g id="SCHEDULE_NAME">%1$s</xliff:g>」"</string>
<string name="summary_divider_text" msgid="4780683204694442666">"、 "</string>
<string name="summary_range_symbol_combination" msgid="6038631664844488406">"<xliff:g id="START">%1$s</xliff:g> - <xliff:g id="END">%2$s</xliff:g>"</string>
@@ -3510,8 +3512,8 @@
<string name="zen_mode_bypassing_apps" msgid="3080739479028713449">"允許應用程式取代「請勿騷擾」"</string>
<string name="zen_mode_bypassing_apps_title" msgid="2115024664615538847">"應用程式例外情況"</string>
<plurals name="zen_mode_bypassing_apps_subtext" formatted="false" msgid="8723144434730871572">
- <item quantity="other"><xliff:g id="NUMBER">%1$d</xliff:g> 個應用程式的通知可蓋過「請勿騷擾」設定</item>
- <item quantity="one">1 個應用程式的通知可蓋過「請勿騷擾」設定</item>
+ <item quantity="other"><xliff:g id="NUMBER">%1$d</xliff:g> 個應用程式的通知可忽略「請勿騷擾」設定</item>
+ <item quantity="one">1 個應用程式的通知可忽略「請勿騷擾」設定</item>
</plurals>
<string name="zen_mode_events_list" msgid="8578102701815684873">"活動"</string>
<string name="zen_mode_all_callers" msgid="4455039040077343838">"任何人"</string>
@@ -3832,7 +3834,7 @@
<string name="screen_zoom_title" msgid="164369086350486104">"顯示大小"</string>
<string name="screen_zoom_short_summary" msgid="5508079362742276703">"放大或縮小畫面上的項目"</string>
<string name="screen_zoom_keywords" msgid="8358462497896524092">"顯示密度, 螢幕縮放, 比例, 按比例"</string>
- <string name="screen_zoom_summary" msgid="5294003755961312560">"縮小或放大畫面上的項目。畫面上部分應用程式可能會移位。"</string>
+ <string name="screen_zoom_summary" msgid="5294003755961312560">"縮小或放大畫面上的項目。畫面上有部分應用程式可能會移位。"</string>
<string name="screen_zoom_preview_title" msgid="2924312934036753091">"預覽"</string>
<string name="screen_zoom_make_smaller_desc" msgid="1374501139722916729">"縮小"</string>
<string name="screen_zoom_make_larger_desc" msgid="5306684807895846141">"放大"</string>
@@ -3953,7 +3955,7 @@
<item quantity="one">1 個限制</item>
</plurals>
<string name="operator_warning" msgid="4676042739221117031">"流動網絡供應商的數據計算方式可能與裝置有所不同"</string>
- <string name="data_used_template" msgid="761605393453849477">"已用 <xliff:g id="ID_1">%1$s</xliff:g>"</string>
+ <string name="data_used_template" msgid="761605393453849477">"已使用 <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="set_data_warning" msgid="8115980184415563941">"設定數據用量警告"</string>
<string name="data_warning" msgid="2699207195535036240">"數據用量警告"</string>
<string name="data_warning_footnote" msgid="965724845580257305">"您的裝置會自行計算數據用量警告和數據用量上限。這可能會與流動網絡供應商的計算結果不同。"</string>
@@ -3985,7 +3987,7 @@
<string name="launch_mdp_app_text" msgid="9186559496664208252">"查看數據計劃"</string>
<string name="launch_wifi_text" msgid="317820210431682605">"查看詳情"</string>
<string name="data_saver_title" msgid="7903308134514179256">"數據節省模式"</string>
- <string name="unrestricted_data_saver" msgid="9139401849550738720">"無限制數據用量"</string>
+ <string name="unrestricted_data_saver" msgid="9139401849550738720">"不限制數據用量"</string>
<string name="restrict_background_blacklisted" msgid="7158991683849067124">"背景數據已關閉"</string>
<string name="data_saver_on" msgid="7281809065420480881">"開啟"</string>
<string name="data_saver_off" msgid="7439439787358504018">"關閉"</string>
@@ -4009,7 +4011,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"裝置處於上鎖狀態時,禁止在通知中輸入回覆內容或其他文字"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"預設拼字檢查工具"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"選擇「拼字檢查工具」"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"使用拼字檢查工具"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"使用拼字檢查工具"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"未選取"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(無)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4102,7 +4104,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"儲存空間管理員會從您的裝置移除備份相片和影片,以釋放儲存空間。"</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"移除相片和影片"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"存儲空間管理員"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"使用儲存空間管理員"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"使用儲存空間管理工具"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"自動"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"手動"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"立即釋放空間"</string>
@@ -4119,18 +4121,18 @@
<string name="swipe_up_to_switch_apps_summary" msgid="4644068184114154787">"如要切換應用程式,請在主按鈕上向上滑動。再次向上滑動即可查看所有應用程式。此操作適用於任何畫面。您的畫面右下方將不再有 [概覽] 按鈕。"</string>
<string name="swipe_up_to_switch_apps_suggestion_title" msgid="7641846365137536128">"試按新版主按鈕"</string>
<string name="swipe_up_to_switch_apps_suggestion_summary" msgid="7338653224520387852">"啟用新手勢即可切換應用程式"</string>
- <string name="ambient_display_title" product="default" msgid="6785677099744344088">"輕按兩下以查看手機"</string>
+ <string name="ambient_display_title" product="default" msgid="6785677099744344088">"輕按兩下顯示畫面"</string>
<string name="ambient_display_title" product="tablet" msgid="1106285490888683613">"輕按兩下即可查看平板電腦"</string>
<string name="ambient_display_title" product="device" msgid="5064644474876041478">"輕按兩下即可查看裝置"</string>
<string name="ambient_display_summary" msgid="4882910328216411109">"輕按螢幕兩下即可查看時間、通知和其他資訊。"</string>
- <string name="ambient_display_pickup_title" product="default" msgid="7141652156907066938">"拿起即可查看手機"</string>
+ <string name="ambient_display_pickup_title" product="default" msgid="7141652156907066938">"拿起手機顯示畫面"</string>
<string name="ambient_display_pickup_title" product="tablet" msgid="1555456400210301959">"拿起即可查看平板電腦"</string>
<string name="ambient_display_pickup_title" product="device" msgid="2480126522988135037">"拿起即可查看裝置"</string>
<string name="ambient_display_wake_screen_title" msgid="3376988352851077102">"喚醒顯示屏"</string>
<string name="ambient_display_pickup_summary" product="default" msgid="8798915340594367449">"拿起您的手機即可查看時間、通知和其他資訊。"</string>
<string name="ambient_display_pickup_summary" product="tablet" msgid="1077745287100012928">"拿起您的平板電腦即可查看時間、通知和其他資訊。"</string>
<string name="ambient_display_pickup_summary" product="device" msgid="404199660076598026">"拿起您的裝置即可查看時間、通知和其他資訊。"</string>
- <string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"輕按即可查看手機"</string>
+ <string name="ambient_display_tap_screen_title" product="default" msgid="2784322628239960695">"輕按一下顯示畫面"</string>
<string name="ambient_display_tap_screen_title" product="tablet" msgid="6434521782016864148">"輕按即可查看平板電腦"</string>
<string name="ambient_display_tap_screen_title" product="device" msgid="4396793721852647356">"輕按即可查看裝置"</string>
<string name="ambient_display_tap_screen_summary" msgid="7869039870571925213">"輕按螢幕即可查看時間、通知和其他資訊。"</string>
diff --git a/tests/CarDeveloperOptions/res/values-zh-rTW/arrays.xml b/tests/CarDeveloperOptions/res/values-zh-rTW/arrays.xml
index 7901b7d..65c98c5 100644
--- a/tests/CarDeveloperOptions/res/values-zh-rTW/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-zh-rTW/arrays.xml
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"一律不允許"</item>
<item msgid="8184570120217958741">"一律允許"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"一般"</item>
+ <item msgid="5101233285497327432">"略為偏低"</item>
+ <item msgid="1555861583162930714">"低"</item>
+ <item msgid="1719683776264798117">"嚴重不足"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"正常"</item>
+ <item msgid="6107138933849816768">"中"</item>
+ <item msgid="182695359839047859">"低"</item>
+ <item msgid="8577246509202964244">"最高"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"持續"</item>
<item msgid="167418068739176448">"重大活動"</item>
diff --git a/tests/CarDeveloperOptions/res/values-zh-rTW/strings.xml b/tests/CarDeveloperOptions/res/values-zh-rTW/strings.xml
index e5e9792..ebcd54b 100644
--- a/tests/CarDeveloperOptions/res/values-zh-rTW/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-zh-rTW/strings.xml
@@ -23,10 +23,10 @@
<string name="deny" msgid="3998166389989144025">"拒絕"</string>
<string name="device_info_default" msgid="1548919563979154348">"不明"</string>
<plurals name="show_dev_countdown" formatted="false" msgid="3953785659137161981">
- <item quantity="other">你只需完成剩餘的 <xliff:g id="STEP_COUNT_1">%1$d</xliff:g> 個步驟,即可成為開發人員。</item>
- <item quantity="one">你只需完成剩餘的 <xliff:g id="STEP_COUNT_0">%1$d</xliff:g> 個步驟,即可成為開發人員。</item>
+ <item quantity="other">只要再 <xliff:g id="STEP_COUNT_1">%1$d</xliff:g> 個步驟即可啟用開發人員設定。</item>
+ <item quantity="one">只要再 <xliff:g id="STEP_COUNT_0">%1$d</xliff:g> 個步驟即可啟用開發人員設定。</item>
</plurals>
- <string name="show_dev_on" msgid="9075712234786224065">"你現在已成為開發人員!"</string>
+ <string name="show_dev_on" msgid="9075712234786224065">"開發人員設定已啟用!"</string>
<string name="show_dev_already" msgid="7665948832405148689">"不需要了,你已經是開發人員。"</string>
<string name="dev_settings_disabled_warning" msgid="3198732189395396721">"請先啟用開發人員選項。"</string>
<string name="header_category_wireless_networks" msgid="8968405993937795898">"無線與網路"</string>
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"縮小或放大畫面上的文字。"</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"縮小"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"放大"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"範例文字"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"綠野仙蹤"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"第 11 章:奧茲國的翡翠城"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"設定檔資訊"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"帳戶"</string>
<string name="location_settings_title" msgid="2707201457572301030">"定位"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"使用位置資訊"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"使用位置資訊設定"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"關閉"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="other">開啟 - <xliff:g id="COUNT_1">%1$d</xliff:g> 個應用程式可存取位置資訊</item>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"Wi‑Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"開啟 Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"Wi‑Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"使用 Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"使用 Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Wi-Fi 設定"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"Wi‑Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"設定、管理無線網路存取點"</string>
@@ -896,7 +895,7 @@
<string name="wifi_setup_wps" msgid="6730131677695521321">"自動設定 (WPS)"</string>
<string name="wifi_settings_scanning_required_title" msgid="3593457187659922490">"要開啟掃描 Wi-Fi 功能嗎?"</string>
<string name="wifi_settings_scanning_required_summary" msgid="7469610959462708782">"必須先開啟掃描 Wi-Fi 功能,才能自動開啟 Wi‑Fi。"</string>
- <string name="wifi_settings_scanning_required_info" msgid="5913535073390607386">"掃描 Wi-Fi 功能可讓應用程式和服務隨時掃描 Wi‑Fi 網路 (即使 Wi‑Fi 功能處於關閉狀態)。這可以用來改善適地性功能和服務。"</string>
+ <string name="wifi_settings_scanning_required_info" msgid="5913535073390607386">"掃描 Wi-Fi 功能可在 Wi‑Fi 關閉時,讓應用程式和服務隨時掃描 Wi‑Fi 網路。此功能可用來改善適地性等功能和服務。"</string>
<string name="wifi_settings_scanning_required_turn_on" msgid="4327570180594277049">"開啟"</string>
<string name="wifi_settings_scanning_required_enabled" msgid="3336102100425307040">"已開啟掃描 Wi-Fi 功能"</string>
<string name="wifi_show_advanced" msgid="8199779277168030597">"進階選項"</string>
@@ -936,7 +935,7 @@
<string name="wifi_privacy_settings" msgid="4462092795794247809">"隱私權"</string>
<string name="wifi_privacy_settings_ephemeral_summary" msgid="2411375348287064283">"已隨機化的 MAC"</string>
<string name="wifi_dpp_add_device_to_network" msgid="8871041525483253430">"新增裝置"</string>
- <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"將 QR 圖碼置於相機正下方,即可將這個裝置新增至「<xliff:g id="SSID">%1$s</xliff:g>」"</string>
+ <string name="wifi_dpp_center_qr_code" msgid="3826108361797476758">"將下面的視窗對準 QR 圖碼,即可將這個裝置新增至「<xliff:g id="SSID">%1$s</xliff:g>」"</string>
<string name="wifi_dpp_scan_qr_code" msgid="6021600592661235546">"掃描 QR 圖碼"</string>
<string name="wifi_dpp_scan_qr_code_join_network" msgid="3085162928804379545">"將 QR 圖碼置於相機正下方即可連線到「<xliff:g id="SSID">%1$s</xliff:g>」"</string>
<string name="wifi_dpp_scan_qr_code_join_unknown_network" msgid="5682308317067290738">"掃描 QR 圖碼即可加入 Wi‑Fi"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"Wi-Fi"</item>
+ <item msgid="2271962426654621656">"行動網路"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"如果無法連上 Wi‑Fi,請使用行動網路"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"如果無法連上行動網路,請使用 Wi‑Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"透過 Wi-Fi 進行通話。如果 Wi‑Fi 連線中斷,通話即會結束。"</string>
@@ -2080,7 +2082,7 @@
<string name="accessibility_timeout_1min" msgid="5019003178551730551">"1 分鐘"</string>
<string name="accessibility_timeout_2mins" msgid="4124259290444829477">"2 分鐘"</string>
<string name="accessibility_content_timeout_preference_title" msgid="5160746882250939464">"可閱讀的時間"</string>
- <string name="accessibility_control_timeout_preference_title" msgid="2771808346038759474">"操作等待時間"</string>
+ <string name="accessibility_control_timeout_preference_title" msgid="2771808346038759474">"提示顯示時間"</string>
<string name="accessibility_content_timeout_preference_summary" msgid="853829064617918179">"選擇你需要閱讀的訊息會暫時顯示多久。\n\n只有部分應用程式支援這項設定。"</string>
<string name="accessibility_control_timeout_preference_summary" msgid="8582212299606932160">"選擇提示你進行操作的訊息會暫時顯示多久。\n\n只有部分應用程式支援這項設定。"</string>
<string name="accessibility_long_press_timeout_preference_title" msgid="5029685114164868477">"輕觸並按住的延遲時間"</string>
@@ -2093,9 +2095,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"通知震動"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"響鈴震動"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"觸控震動"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"使用服務"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"使用色彩校正"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"使用字幕"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"使用服務"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"使用色彩校正"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"使用字幕"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"繼續"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"助聽器"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"未連接任何助聽器"</string>
@@ -2459,7 +2461,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"開啟"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"使用節約耗電量模式"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"使用節約耗電量功能"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"自動開啟"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"永遠不要"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"電量為 <xliff:g id="PERCENT">%1$s</xliff:g> 時"</string>
@@ -3281,7 +3283,7 @@
<string name="sound_work_settings" msgid="4140215240360927923">"工作資料夾音效"</string>
<string name="work_use_personal_sounds_title" msgid="531727195073003599">"使用個人設定檔音效"</string>
<string name="work_use_personal_sounds_summary" msgid="2886871383995187441">"工作資料夾和個人設定檔使用相同的音效"</string>
- <string name="work_ringtone_title" msgid="5499360583947410224">"Work 手機鈴聲"</string>
+ <string name="work_ringtone_title" msgid="5499360583947410224">"工作手機鈴聲"</string>
<string name="work_notification_ringtone_title" msgid="8059159087214025757">"預設 Work 通知音效"</string>
<string name="work_alarm_ringtone_title" msgid="5328487181385375130">"預設 Work 鬧鐘音效"</string>
<string name="work_sound_same_as_personal" msgid="7728560881697159758">"與個人設定檔相同"</string>
@@ -3731,7 +3733,7 @@
<string name="usb_use_file_transfers_desc" msgid="6953866660041189580">"將檔案轉移到另一個裝置"</string>
<string name="usb_use_photo_transfers" msgid="5974236250197451257">"PTP"</string>
<string name="usb_use_photo_transfers_desc" msgid="2325112887316125320">"如果 MTP 不受支援,則轉移相片或檔案 (PTP)"</string>
- <string name="usb_use_tethering" msgid="4250626730173163846">"USB 數據連線"</string>
+ <string name="usb_use_tethering" msgid="4250626730173163846">"USB 網路共用"</string>
<string name="usb_use_MIDI" msgid="4710632870781041401">"MIDI"</string>
<string name="usb_use_MIDI_desc" msgid="1770966187150010947">"將這個裝置用做 MIDI"</string>
<string name="usb_use" msgid="8940500223316278632">"USB 用途"</string>
@@ -3751,7 +3753,7 @@
<string name="usb_summary_photo_transfers" msgid="4743028167400644354">"PTP"</string>
<string name="usb_summary_MIDI" msgid="5540604166270861247">"MIDI"</string>
<string name="usb_summary_file_transfers_power" msgid="1684501026426766867">"檔案傳輸和供電"</string>
- <string name="usb_summary_tether_power" msgid="5684170912136320002">"USB 數據連線和供電"</string>
+ <string name="usb_summary_tether_power" msgid="5684170912136320002">"USB 網路共用和供電"</string>
<string name="usb_summary_photo_transfers_power" msgid="4424106272137720464">"PTP 和供電"</string>
<string name="usb_summary_MIDI_power" msgid="7685597621357005180">"MIDI 模式和供電"</string>
<string name="background_check_pref" msgid="664081406854758392">"背景檢查"</string>
@@ -4008,7 +4010,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"裝置處於鎖定狀態時,禁止在通知中輸入回覆內容或其他文字"</string>
<string name="default_spell_checker" msgid="8636661093243189533">"預設拼字檢查工具"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"選擇拼字檢查工具"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"使用拼字檢查工具"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"使用拼字檢查工具"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"未選取"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(無)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4098,10 +4100,10 @@
<item quantity="one">1 秒</item>
</plurals>
<string name="automatic_storage_manager_settings" msgid="2403621409625820182">"管理儲存空間"</string>
- <string name="automatic_storage_manager_text" msgid="4270379105066667493">"儲存空間管理員會將已備份的相片和影片從裝置中移除,藉此釋出儲存空間。"</string>
+ <string name="automatic_storage_manager_text" msgid="4270379105066667493">"儲存空間管理工具會將已備份的相片和影片從裝置中移除,藉此釋出儲存空間。"</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"移除相片和影片"</string>
- <string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"儲存空間管理員"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"使用儲存空間管理員"</string>
+ <string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"儲存空間管理工具"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"使用儲存空間管理工具"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"自動"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"手動"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"立即釋出空間"</string>
@@ -4152,7 +4154,7 @@
<string name="web_action_section_title" msgid="5563229447734734662">"免安裝應用程式"</string>
<string name="instant_apps_settings" msgid="879003203555847537">"免安裝應用程式偏好設定"</string>
<string name="domain_url_section_title" msgid="206403507921518321">"已安裝的應用程式"</string>
- <string name="automatic_storage_manager_activation_warning" msgid="2630083316417707308">"你的儲存空間目前是由儲存空間管理員管理"</string>
+ <string name="automatic_storage_manager_activation_warning" msgid="2630083316417707308">"你的儲存空間目前是由儲存空間管理工具管理"</string>
<string name="account_for_section_header" msgid="5975241715840642563">"<xliff:g id="USER_NAME">%1$s</xliff:g>的帳戶"</string>
<string name="configure_section_header" msgid="6988981883075615136">"設定"</string>
<string name="auto_sync_account_title" msgid="2394463123733529506">"自動同步處理資料"</string>
@@ -4262,11 +4264,11 @@
<string name="default_theme" msgid="5986996377385956138">"預設"</string>
<string name="show_operator_name_title" msgid="5056163028128447308">"網路名稱"</string>
<string name="show_operator_name_summary" msgid="6352180285743777497">"在狀態列顯示網路名稱"</string>
- <string name="storage_manager_indicator" msgid="4255140732848476875">"儲存空間管理員:<xliff:g id="STATUS">^1</xliff:g>"</string>
+ <string name="storage_manager_indicator" msgid="4255140732848476875">"儲存空間管理工具:<xliff:g id="STATUS">^1</xliff:g>"</string>
<string name="storage_manager_indicator_off" msgid="6404056007102580777">"關閉"</string>
<string name="storage_manager_indicator_on" msgid="5295306384982062320">"開啟"</string>
<string name="install_type_instant" msgid="6248487669862821874">"免安裝應用程式"</string>
- <string name="automatic_storage_manager_deactivation_warning" msgid="7867793739491286374">"要停用儲存空間管理員嗎?"</string>
+ <string name="automatic_storage_manager_deactivation_warning" msgid="7867793739491286374">"要停用儲存空間管理工具嗎?"</string>
<string name="storage_movies_tv" msgid="7282484273991655296">"影視應用程式"</string>
<string name="carrier_provisioning" msgid="3309125279191534469">"電信業者佈建資訊"</string>
<string name="trigger_carrier_provisioning" msgid="6284005970057901477">"觸發電信業者佈建程序"</string>
diff --git a/tests/CarDeveloperOptions/res/values-zu/arrays.xml b/tests/CarDeveloperOptions/res/values-zu/arrays.xml
index 60b6f45..a6000db 100644
--- a/tests/CarDeveloperOptions/res/values-zu/arrays.xml
+++ b/tests/CarDeveloperOptions/res/values-zu/arrays.xml
@@ -34,7 +34,7 @@
<item msgid="772029947136115322">"30 amasekhondi"</item>
<item msgid="8743663928349474087">"1 iminithi"</item>
<item msgid="1506508631223164814">"2 amaminithi"</item>
- <item msgid="8664703938127907662">"5 amaminithi"</item>
+ <item msgid="8664703938127907662">"amaminithi ama-5"</item>
<item msgid="5827960506924849753">"10 amaminithi"</item>
<item msgid="6677424950124253938">"30 amaminithi"</item>
</string-array>
@@ -56,7 +56,7 @@
<item msgid="227647485917789272">"1 iminithi"</item>
<item msgid="3367011891231217504">"2 amaminithi"</item>
<item msgid="4376575879222393045">"5 amaminithi"</item>
- <item msgid="811192536981678974">"10 amaminithi"</item>
+ <item msgid="811192536981678974">"amaminithi ayi-10"</item>
<item msgid="7258394417241706272">"30 amaminithi"</item>
</string-array>
<string-array name="entries_font_size">
@@ -423,9 +423,19 @@
<item msgid="7718817231348607934">"Ungavumeli"</item>
<item msgid="8184570120217958741">"Vumela njalo?"</item>
</string-array>
- <!-- no translation found for ram_states:0 (708247372474061274) -->
- <!-- no translation found for ram_states:4 (1567326459340152525) -->
- <!-- no translation found for proc_stats_memory_states:3 (8577246509202964244) -->
+ <string-array name="ram_states">
+ <item msgid="708247372474061274">"Ivamile"</item>
+ <item msgid="5101233285497327432">"Maphakathi"</item>
+ <item msgid="1555861583162930714">"Phansi"</item>
+ <item msgid="1719683776264798117">"Bucayi"</item>
+ <item msgid="1567326459340152525">"?"</item>
+ </string-array>
+ <string-array name="proc_stats_memory_states">
+ <item msgid="3474232046138139454">"Okujwayelekile"</item>
+ <item msgid="6107138933849816768">"Maphakathi"</item>
+ <item msgid="182695359839047859">"Phansi"</item>
+ <item msgid="8577246509202964244">"Bucayi"</item>
+ </string-array>
<string-array name="proc_stats_process_states">
<item msgid="7560955722349181440">"Qhubekayo"</item>
<item msgid="167418068739176448">"Umsebenzi ophezulu"</item>
diff --git a/tests/CarDeveloperOptions/res/values-zu/strings.xml b/tests/CarDeveloperOptions/res/values-zu/strings.xml
index d9b9221..3dd2d12 100644
--- a/tests/CarDeveloperOptions/res/values-zu/strings.xml
+++ b/tests/CarDeveloperOptions/res/values-zu/strings.xml
@@ -83,8 +83,7 @@
<string name="font_size_summary" msgid="9120023206321191067">"Yenza umbhalo okusikrini ube mncane noma mkhulu."</string>
<string name="font_size_make_smaller_desc" msgid="5780829318985556969">"Yenza kube kuncane"</string>
<string name="font_size_make_larger_desc" msgid="2907824418252785875">"Yenza kube kukhulu"</string>
- <!-- no translation found for font_size_preview_text (360019784926073822) -->
- <skip />
+ <string name="font_size_preview_text" msgid="360019784926073822">"Servez à ce monsieur une bière et des kiwis."</string>
<string name="font_size_preview_text_headline" msgid="8038650525913995091">"Isampuli yombhalo"</string>
<string name="font_size_preview_text_title" msgid="2593520249400910305">"I-The Wonderful Wizard of Oz"</string>
<string name="font_size_preview_text_subtitle" msgid="6106782964143379331">"Isahluko 11: The Wonderful Emerald City of Oz"</string>
@@ -369,7 +368,7 @@
<string name="profile_info_settings_title" msgid="4855892878512562551">"Ulwazi lwephrofayela"</string>
<string name="Accounts_settings_title" msgid="7901374987121953746">"Ama-akhawunti"</string>
<string name="location_settings_title" msgid="2707201457572301030">"Indawo"</string>
- <string name="location_settings_master_switch_title" msgid="3108016866082816733">"Sebenzisa indawo"</string>
+ <string name="location_settings_primary_switch_title" msgid="6994690329349987476">"Sebenzisa indawo"</string>
<string name="location_settings_summary_location_off" msgid="5563530256978372978">"Valiwe"</string>
<plurals name="location_settings_summary_location_on" formatted="false" msgid="7893342914540884818">
<item quantity="one">Vuliwe - <xliff:g id="COUNT_1">%1$d</xliff:g> izinhlelo zokusebenza zingafinyelela indawo</item>
@@ -837,7 +836,7 @@
<string name="wifi_quick_toggle_title" msgid="7935778388625246184">"I-Wi-Fi"</string>
<string name="wifi_quick_toggle_summary" msgid="2879870570547594266">"Vula i-Wi-Fi"</string>
<string name="wifi_settings" msgid="7486492317310514109">"I-Wi-Fi"</string>
- <string name="wifi_settings_master_switch_title" msgid="3917916944694253946">"Sebenzisa i-Wi-Fi"</string>
+ <string name="wifi_settings_primary_switch_title" msgid="8845478864364255818">"Sebenzisa i-Wi-Fi"</string>
<string name="wifi_settings_category" msgid="9094716747565527901">"Izilungiselelo ze-Wi-Fi"</string>
<string name="wifi_settings_title" msgid="5265554991622344805">"I-Wi-Fi"</string>
<string name="wifi_settings_summary" msgid="7117267255799892820">"Hlela, uphathe izindawo zokungena ezingenantambo"</string>
@@ -1103,7 +1102,10 @@
<item msgid="3658897985297386665">"@*android:string/wfc_mode_wifi_preferred_summary"</item>
<item msgid="4191802193352447215">"@*android:string/wfc_mode_cellular_preferred_summary"</item>
</string-array>
- <!-- no translation found for wifi_calling_mode_choices_v2_without_wifi_only:0 (6452246499629557266) -->
+ <string-array name="wifi_calling_mode_choices_v2_without_wifi_only">
+ <item msgid="6452246499629557266">"I-Wi-Fi"</item>
+ <item msgid="2271962426654621656">"Iselula"</item>
+ </string-array>
<string name="wifi_calling_mode_wifi_preferred_summary" msgid="8298294808362169798">"Uma i-Wi-Fi ingatholakali, sebenzisa inethiwekhi yeselula"</string>
<string name="wifi_calling_mode_cellular_preferred_summary" msgid="4906499810156794061">"Uma inethiwekhi yeselula ingatholakali, sebenzisa i-Wi-Fi"</string>
<string name="wifi_calling_mode_wifi_only_summary" msgid="6928556021002500522">"Shaya nge-Wi-Fi. Uma i-Wi-Fi ilahleka, ikholi izophela."</string>
@@ -2094,9 +2096,9 @@
<string name="accessibility_notification_vibration_title" msgid="1005799039440510298">"Ukudlidliza kwesaziso"</string>
<string name="accessibility_ring_vibration_title" msgid="7943341443551359985">"Ukudlidliza kokukhala"</string>
<string name="accessibility_touch_vibration_title" msgid="285890135612038092">"Ukudlidlizela kokuthinta"</string>
- <string name="accessibility_service_master_switch_title" msgid="2734791644475782924">"Sebenzisa isevisi"</string>
- <string name="accessibility_daltonizer_master_switch_title" msgid="4855011639012300777">"Sebenzisa ukulungisa kombala"</string>
- <string name="accessibility_caption_master_switch_title" msgid="6373335123229234053">"Sebenzisa amagama-ncazo"</string>
+ <string name="accessibility_service_primary_switch_title" msgid="1405420360499478509">"Sebenzisa isevisi"</string>
+ <string name="accessibility_daltonizer_primary_switch_title" msgid="7428407895268627434">"Sebenzisa ukulungisa kombala"</string>
+ <string name="accessibility_caption_primary_switch_title" msgid="1875671505480045655">"Sebenzisa amagama-ncazo"</string>
<string name="accessibility_hearingaid_instruction_continue_button" msgid="4650111296711466691">"Qhubeka"</string>
<string name="accessibility_hearingaid_title" msgid="3700978781235124891">"Izinsiza zokuzwa"</string>
<string name="accessibility_hearingaid_not_connected_summary" msgid="634573930469952213">"Azikho izinsiza zokuzwa ezixhunyiwe"</string>
@@ -2460,7 +2462,7 @@
<!-- no translation found for battery_saver_seekbar_title (7607123201469333645) -->
<skip />
<string name="battery_saver_seekbar_title_placeholder" msgid="2321082163892561703">"Vula"</string>
- <string name="battery_saver_master_switch_title" msgid="8241862826825517212">"Sebenzisa isilondolozi sebhethri"</string>
+ <string name="battery_saver_primary_switch_title" msgid="1284229065484706156">"Sebenzisa isilondolozi sebhethri"</string>
<string name="battery_saver_turn_on_automatically_title" msgid="7316920304024245838">"Vula ngokuzenzakalela"</string>
<string name="battery_saver_turn_on_automatically_never" msgid="2623381258359775227">"Akusoze"</string>
<string name="battery_saver_turn_on_automatically_pct" msgid="434270432432390307">"kokungu-<xliff:g id="PERCENT">%1$s</xliff:g> kubhethri"</string>
@@ -3305,7 +3307,7 @@
<string name="hide_silent_icons_title" msgid="1070905516921542662">"Fihla izithonjana ezithulile zesimo sokwazisa"</string>
<string name="hide_silent_icons_summary" msgid="2624346914488256888">"Fihla izithonjana zezaziso ezithulile kubha yesimo"</string>
<string name="notification_badging_title" msgid="6311699476970264712">"Vumela amachashazi esaziso"</string>
- <string name="notification_bubbles_title" msgid="9196562435741861317">"Amabhamu"</string>
+ <string name="notification_bubbles_title" msgid="9196562435741861317">"Amabhamuza"</string>
<string name="notification_bubbles_summary" msgid="4624512775901949578">"Finyelela ngokushesha okuqukethwe kohlelo lokusebenza kusuka noma yikuphi usebenzisa izinqamuleli ezintantayo"</string>
<string name="bubbles_feature_education" msgid="8979109826818881018">"Ezinye izaziso nokunye okuqukethwe kungavela njengamabhamuza kusikrini. Ukuze uvule ibhamuza, lithephe. Ukuze ulicashise, lidonsele phansi kusikrini."</string>
<string name="bubbles_app_toggle_title" msgid="6401217027603326439">"Amabhamuza"</string>
@@ -4009,7 +4011,7 @@
<string name="lockscreen_remote_input" msgid="3363310613165354434">"Uma idivayisi ikhiyiwe, vimbela ukuthayipha izimpendulo noma omunye umbhalo kuzaziso."</string>
<string name="default_spell_checker" msgid="8636661093243189533">"Isihloli sokupela esizenzakalelayo"</string>
<string name="choose_spell_checker" msgid="7619860861923582868">"Khetha isihloli sokupela"</string>
- <string name="spell_checker_master_switch_title" msgid="5712693172227400668">"Sebenzisa isihloli sokupela"</string>
+ <string name="spell_checker_primary_switch_title" msgid="2432752198899857435">"Sebenzisa isihloli sokupela"</string>
<string name="spell_checker_not_selected" msgid="331034541988255137">"Abangakhethiwe"</string>
<string name="notification_log_no_title" msgid="3668232437235348628">"(lutho)"</string>
<string name="notification_log_details_delimiter" msgid="5485526744689532908">": "</string>
@@ -4102,7 +4104,7 @@
<string name="automatic_storage_manager_text" msgid="4270379105066667493">"Ukuze kusizwe kukhululwe isikhala sesitoreji, isiphathi sesitoreji sisusa izithombe ezenziwe isipele namavidiyo kusukela kudivayisi yakho."</string>
<string name="automatic_storage_manager_days_title" msgid="1783767804707813799">"Susa izithombe namavidiyo"</string>
<string name="automatic_storage_manager_preference_title" msgid="4668642150512639466">"Isiphathi sesitoreji"</string>
- <string name="automatic_storage_manager_master_switch_title" msgid="1456978117739582562">"Sebenzisa isiphathi sesitoreji"</string>
+ <string name="automatic_storage_manager_primary_switch_title" msgid="3690187927696783754">"Sebenzisa isiphathi sesitoreji"</string>
<string name="deletion_helper_automatic_title" msgid="4370975149425263205">"Okuzenzakalelayo"</string>
<string name="deletion_helper_manual_title" msgid="1011785013431162078">"Okwenziwa ngesandla"</string>
<string name="deletion_helper_preference_title" msgid="797270307034242206">"Khulula isikhala manje"</string>
diff --git a/tests/CarDeveloperOptions/res/values/config.xml b/tests/CarDeveloperOptions/res/values/config.xml
index d6f2bd3..31a01d8 100755
--- a/tests/CarDeveloperOptions/res/values/config.xml
+++ b/tests/CarDeveloperOptions/res/values/config.xml
@@ -105,7 +105,7 @@
</string-array>
<!-- List of packages that should be allowlisted for slice uri access. Do not translate -->
- <string-array name="slice_whitelist_package_names" translatable="false"/>
+ <string-array name="slice_allowlist_package_names" translatable="false"/>
<!-- Whether or not App & Notification screen should display recently used apps -->
<bool name="config_display_recent_apps">true</bool>
diff --git a/tests/CarDeveloperOptions/res/values/strings.xml b/tests/CarDeveloperOptions/res/values/strings.xml
index e8d5b7a..53dafa1 100644
--- a/tests/CarDeveloperOptions/res/values/strings.xml
+++ b/tests/CarDeveloperOptions/res/values/strings.xml
@@ -831,7 +831,7 @@
<!-- Main Settings screen setting option title for the item to take you to the location screen -->
<string name="location_settings_title">Location</string>
<!-- Used in the location settings to control turning on/off the feature entirely -->
- <string name="location_settings_master_switch_title">Use location</string>
+ <string name="location_settings_primary_switch_title">Use location</string>
<!-- Summary for Location settings when location is off [CHAR LIMIT=NONE] -->
<string name="location_settings_summary_location_off">Off</string>
<!-- Summary for Location settings when location is on, explaining how many apps have location permission [CHAR LIMIT=NONE]-->
@@ -1938,7 +1938,7 @@
<string name="wifi_settings">Wi\u2011Fi</string>
<!-- Used in the Wi-Fi settings screen to control turning on/off Wi-Fi entirely [CHAR LIMIT=30]-->
- <string name="wifi_settings_master_switch_title">Use Wi\u2011Fi</string>
+ <string name="wifi_settings_primary_switch_title">Use Wi\u2011Fi</string>
<!-- Title of the Wi-fi settings screen -->
<string name="wifi_settings_category">Wi\u2011Fi settings</string>
<!-- Title of the Wi-fi settings entry in the left top level menu -->
@@ -4873,11 +4873,11 @@
<!-- Title for accessibility preference for configuring touch feedback vibrations. -->
<string name="accessibility_touch_vibration_title">Touch vibration</string>
<!-- Used in the acessibilty service settings to control turning on/off the service entirely -->
- <string name="accessibility_service_master_switch_title">Use service</string>
+ <string name="accessibility_service_primary_switch_title">Use service</string>
<!-- Used in the Color correction settings screen to control turning on/off the feature entirely -->
- <string name="accessibility_daltonizer_master_switch_title">Use color correction</string>
+ <string name="accessibility_daltonizer_primary_switch_title">Use color correction</string>
<!-- Used in the Captions settings screen to control turning on/off the feature entirely -->
- <string name="accessibility_caption_master_switch_title">Use captions</string>
+ <string name="accessibility_caption_primary_switch_title">Use captions</string>
<!-- Button text for the accessibility dialog continue to the next screen for hearing aid. [CHAR LIMIT=32] -->
<string name="accessibility_hearingaid_instruction_continue_button">Continue</string>
@@ -5705,7 +5705,7 @@
<string name="battery_saver_seekbar_title_placeholder">Turn on</string>
<!-- Used in the Battery Saver settings screen to control turning on/off the feature entirely -->
- <string name="battery_saver_master_switch_title">Use Battery Saver</string>
+ <string name="battery_saver_primary_switch_title">Use Battery Saver</string>
<!-- [CHAR_LIMIT=40] Battery saver: Title for automatic entry option -->
<string name="battery_saver_turn_on_automatically_title">Turn on automatically</string>
@@ -9738,7 +9738,7 @@
<string name="choose_spell_checker">Choose spell checker</string>
<!-- [CHAR LIMIT=45] Title for the global switch for spell checker, turning off will disable entire spell check feature. -->
- <string name="spell_checker_master_switch_title">Use spell checker</string>
+ <string name="spell_checker_primary_switch_title">Use spell checker</string>
<!-- [CHAR LIMIT=30] Label for the placeholder of the current spell checker name. Used when no spell checker is currently selected. -->
<string name="spell_checker_not_selected">Not selected</string>
@@ -9956,7 +9956,7 @@
<string name="automatic_storage_manager_preference_title">Storage manager</string>
<!-- Used in the storage manager settings screen to control turning on/off the feature entirely -->
- <string name="automatic_storage_manager_master_switch_title">Use Storage manager</string>
+ <string name="automatic_storage_manager_primary_switch_title">Use Storage manager</string>
<!-- Category title for the automatic settings in the storage manager settings. [CHAR LIMIT=40] -->
<string name="deletion_helper_automatic_title">Automatic</string>
diff --git a/tests/CarDeveloperOptions/res/xml/network_and_internet.xml b/tests/CarDeveloperOptions/res/xml/network_and_internet.xml
index 5d0e11f..adad74b 100644
--- a/tests/CarDeveloperOptions/res/xml/network_and_internet.xml
+++ b/tests/CarDeveloperOptions/res/xml/network_and_internet.xml
@@ -21,7 +21,7 @@
android:title="@string/network_dashboard_title"
settings:initialExpandedChildrenCount="5">
- <com.android.car.developeroptions.widget.MasterSwitchPreference
+ <com.android.car.developeroptions.widget.PrimarySwitchPreference
android:fragment="com.android.car.developeroptions.wifi.WifiSettings"
android:key="toggle_wifi"
android:title="@string/wifi_settings"
@@ -31,7 +31,7 @@
<intent
android:action="android.settings.WIFI_SETTINGS"
android:targetClass="Settings$WifiSettingsActivity" />
- </com.android.car.developeroptions.widget.MasterSwitchPreference>
+ </com.android.car.developeroptions.widget.PrimarySwitchPreference>
<com.android.settingslib.RestrictedPreference
android:key="mobile_network_settings"
diff --git a/tests/CarDeveloperOptions/res/xml/network_and_internet_v2.xml b/tests/CarDeveloperOptions/res/xml/network_and_internet_v2.xml
index 2030d6d..bc1e795 100644
--- a/tests/CarDeveloperOptions/res/xml/network_and_internet_v2.xml
+++ b/tests/CarDeveloperOptions/res/xml/network_and_internet_v2.xml
@@ -29,7 +29,7 @@
android:order="-40"
settings:controller="com.android.car.developeroptions.network.MultiNetworkHeaderController"/>
- <com.android.car.developeroptions.widget.MasterSwitchPreference
+ <com.android.car.developeroptions.widget.PrimarySwitchPreference
android:fragment="com.android.car.developeroptions.wifi.WifiSettings"
android:key="toggle_wifi"
android:title="@string/wifi_settings"
@@ -40,7 +40,7 @@
<intent
android:action="android.settings.WIFI_SETTINGS"
android:targetClass="Settings$WifiSettingsActivity" />
- </com.android.car.developeroptions.widget.MasterSwitchPreference>
+ </com.android.car.developeroptions.widget.PrimarySwitchPreference>
<com.android.car.developeroptions.widget.AddPreference
android:key="mobile_network_list"
diff --git a/tests/CarDeveloperOptions/res/xml/privacy_dashboard_settings.xml b/tests/CarDeveloperOptions/res/xml/privacy_dashboard_settings.xml
index 5dbae76..691f77d 100644
--- a/tests/CarDeveloperOptions/res/xml/privacy_dashboard_settings.xml
+++ b/tests/CarDeveloperOptions/res/xml/privacy_dashboard_settings.xml
@@ -98,11 +98,11 @@
android:summary="@string/content_capture_summary"
settings:controller="com.android.car.developeroptions.privacy.EnableContentCapturePreferenceController"/>
- <com.android.car.developeroptions.widget.MasterSwitchPreference
+ <com.android.car.developeroptions.widget.PrimarySwitchPreference
android:key="content_capture_custom_settings"
android:title="@string/content_capture"
android:summary="@string/content_capture_summary"
settings:controller="com.android.car.developeroptions.privacy.EnableContentCaptureWithServiceSettingsPreferenceController">
- </com.android.car.developeroptions.widget.MasterSwitchPreference>
+ </com.android.car.developeroptions.widget.PrimarySwitchPreference>
</PreferenceScreen>
\ No newline at end of file
diff --git a/tests/CarDeveloperOptions/res/xml/privacy_settings.xml b/tests/CarDeveloperOptions/res/xml/privacy_settings.xml
index 3066cf0..1bbcec3 100644
--- a/tests/CarDeveloperOptions/res/xml/privacy_settings.xml
+++ b/tests/CarDeveloperOptions/res/xml/privacy_settings.xml
@@ -34,7 +34,7 @@
android:persistent="false"
settings:controller="com.android.car.developeroptions.backup.ConfigureAccountPreferenceController">
<!-- the Intent declared here is always overwritten by a real one -->
- <intent android:action="dummy" />
+ <intent android:action="placeholder" />
</Preference>
<Preference
diff --git a/tests/CarDeveloperOptions/res/xml/storage_dashboard_fragment.xml b/tests/CarDeveloperOptions/res/xml/storage_dashboard_fragment.xml
index 156ddb5..5cb9a9b 100644
--- a/tests/CarDeveloperOptions/res/xml/storage_dashboard_fragment.xml
+++ b/tests/CarDeveloperOptions/res/xml/storage_dashboard_fragment.xml
@@ -23,7 +23,7 @@
<com.android.car.developeroptions.deviceinfo.storage.StorageSummaryDonutPreference
android:key="pref_summary"
android:order="0" />
- <com.android.car.developeroptions.widget.MasterSwitchPreference
+ <com.android.car.developeroptions.widget.PrimarySwitchPreference
android:fragment="com.android.car.developeroptions.deletionhelper.AutomaticStorageManagerSettings"
android:key="toggle_asm"
android:title="@string/automatic_storage_manager_preference_title"
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/Utils.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/Utils.java
index 9346c11..3bf79df 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/Utils.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/Utils.java
@@ -98,12 +98,12 @@
import androidx.preference.Preference;
import androidx.preference.PreferenceGroup;
-import com.android.internal.app.UnlaunchableAppActivity;
-import com.android.internal.util.ArrayUtils;
-import com.android.internal.widget.LockPatternUtils;
import com.android.car.developeroptions.core.FeatureFlags;
import com.android.car.developeroptions.development.featureflags.FeatureFlagPersistent;
import com.android.car.developeroptions.password.ChooseLockSettingsHelper;
+import com.android.internal.app.UnlaunchableAppActivity;
+import com.android.internal.util.ArrayUtils;
+import com.android.internal.widget.LockPatternUtils;
import com.android.settingslib.widget.ActionBarShadowController;
import java.net.InetAddress;
@@ -546,7 +546,7 @@
* @return UserInfo of the user or null for non-existent user.
*/
public static UserInfo getExistingUser(UserManager userManager, UserHandle checkUser) {
- final List<UserInfo> users = userManager.getUsers(true /* excludeDying */);
+ final List<UserInfo> users = userManager.getAliveUsers();
final int checkUserId = checkUser.getIdentifier();
for (UserInfo user : users) {
if (user.id == checkUserId) {
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/accessibility/CaptionPropertiesFragment.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/accessibility/CaptionPropertiesFragment.java
index cdef474..7938794 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/accessibility/CaptionPropertiesFragment.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/accessibility/CaptionPropertiesFragment.java
@@ -37,7 +37,6 @@
import androidx.preference.Preference.OnPreferenceChangeListener;
import androidx.preference.PreferenceCategory;
-import com.android.internal.widget.SubtitleView;
import com.android.car.developeroptions.R;
import com.android.car.developeroptions.SettingsActivity;
import com.android.car.developeroptions.SettingsPreferenceFragment;
@@ -45,6 +44,7 @@
import com.android.car.developeroptions.widget.SwitchBar;
import com.android.car.developeroptions.widget.ToggleSwitch;
import com.android.car.developeroptions.widget.ToggleSwitch.OnBeforeCheckedChangeListener;
+import com.android.internal.widget.SubtitleView;
import com.android.settingslib.accessibility.AccessibilityUtils;
import java.util.Locale;
@@ -159,8 +159,8 @@
final boolean enabled = mCaptioningManager.isEnabled();
SettingsActivity activity = (SettingsActivity) getActivity();
mSwitchBar = activity.getSwitchBar();
- mSwitchBar.setSwitchBarText(R.string.accessibility_caption_master_switch_title,
- R.string.accessibility_caption_master_switch_title);
+ mSwitchBar.setSwitchBarText(R.string.accessibility_caption_primary_switch_title,
+ R.string.accessibility_caption_primary_switch_title);
mSwitchBar.setCheckedInternal(enabled);
mToggleSwitch = mSwitchBar.getSwitch();
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/accessibility/ToggleDaltonizerPreferenceFragment.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/accessibility/ToggleDaltonizerPreferenceFragment.java
index 71fb3c9..036ef23 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/accessibility/ToggleDaltonizerPreferenceFragment.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/accessibility/ToggleDaltonizerPreferenceFragment.java
@@ -105,8 +105,8 @@
@Override
protected void updateSwitchBarText(SwitchBar switchBar) {
- switchBar.setSwitchBarText(R.string.accessibility_daltonizer_master_switch_title,
- R.string.accessibility_daltonizer_master_switch_title);
+ switchBar.setSwitchBarText(R.string.accessibility_daltonizer_primary_switch_title,
+ R.string.accessibility_daltonizer_primary_switch_title);
}
private void initPreferences() {
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/accessibility/ToggleFeaturePreferenceFragment.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/accessibility/ToggleFeaturePreferenceFragment.java
index 5bc26d7..668c300 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/accessibility/ToggleFeaturePreferenceFragment.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/accessibility/ToggleFeaturePreferenceFragment.java
@@ -89,8 +89,8 @@
protected void updateSwitchBarText(SwitchBar switchBar) {
// Implement this to provide meaningful text in switch bar
- switchBar.setSwitchBarText(R.string.accessibility_service_master_switch_title,
- R.string.accessibility_service_master_switch_title);
+ switchBar.setSwitchBarText(R.string.accessibility_service_primary_switch_title,
+ R.string.accessibility_service_primary_switch_title);
}
protected abstract void onPreferenceToggled(String preferenceKey, boolean enabled);
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/AppStatePowerBridge.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/AppStatePowerBridge.java
index d168be6..3a6b627 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/AppStatePowerBridge.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/AppStatePowerBridge.java
@@ -21,20 +21,20 @@
import com.android.settingslib.applications.ApplicationsState.AppEntry;
import com.android.settingslib.applications.ApplicationsState.AppFilter;
import com.android.settingslib.applications.ApplicationsState.CompoundFilter;
-import com.android.settingslib.fuelgauge.PowerWhitelistBackend;
+import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
import java.util.ArrayList;
/**
- * Connects data from the PowerWhitelistBackend to ApplicationsState.
+ * Connects data from the PowerAllowlistBackend to ApplicationsState.
*/
public class AppStatePowerBridge extends AppStateBaseBridge {
- private final PowerWhitelistBackend mBackend;
+ private final PowerAllowlistBackend mBackend;
public AppStatePowerBridge(Context context, ApplicationsState appState, Callback callback) {
super(appState, callback);
- mBackend = PowerWhitelistBackend.getInstance(context);
+ mBackend = PowerAllowlistBackend.getInstance(context);
}
@Override
@@ -43,17 +43,17 @@
final int N = apps.size();
for (int i = 0; i < N; i++) {
AppEntry app = apps.get(i);
- app.extraInfo = mBackend.isWhitelisted(app.info.packageName)
+ app.extraInfo = mBackend.isAllowlisted(app.info.packageName)
? Boolean.TRUE : Boolean.FALSE;
}
}
@Override
protected void updateExtraInfo(AppEntry app, String pkg, int uid) {
- app.extraInfo = mBackend.isWhitelisted(pkg) ? Boolean.TRUE : Boolean.FALSE;
+ app.extraInfo = mBackend.isAllowlisted(pkg) ? Boolean.TRUE : Boolean.FALSE;
}
- public static final AppFilter FILTER_POWER_WHITELISTED = new CompoundFilter(
+ public static final AppFilter FILTER_POWER_ALLOWLISTED = new CompoundFilter(
ApplicationsState.FILTER_WITHOUT_DISABLED_UNTIL_USED, new AppFilter() {
@Override
public void init() {
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/appinfo/AppInfoDashboardFragment.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/appinfo/AppInfoDashboardFragment.java
index 49e2914..c06f706 100755
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/appinfo/AppInfoDashboardFragment.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/appinfo/AppInfoDashboardFragment.java
@@ -507,7 +507,7 @@
@VisibleForTesting
int getNumberOfUserWithPackageInstalled(String packageName) {
- final List<UserInfo> userInfos = mUserManager.getUsers(true);
+ final List<UserInfo> userInfos = mUserManager.getAliveUsers();
int count = 0;
for (final UserInfo userInfo : userInfos) {
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/appops/AppOpsState.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/appops/AppOpsState.java
index 0573320..6a91c99 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/appops/AppOpsState.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/appops/AppOpsState.java
@@ -28,7 +28,6 @@
import android.os.Parcelable;
import android.text.format.DateUtils;
import android.util.Log;
-import android.util.Pair;
import android.util.SparseArray;
import com.android.car.developeroptions.R;
@@ -589,39 +588,48 @@
if (appEntry == null) {
continue;
}
- List<AppOpsManager.OpEntry> dummyOps = null;
+ List<AppOpsManager.OpEntry> placeholderOps = null;
AppOpsManager.PackageOps pkgOps = null;
if (appInfo.requestedPermissions != null) {
- for (int j=0; j<appInfo.requestedPermissions.length; j++) {
+ for (int j = 0; j < appInfo.requestedPermissions.length; j++) {
if (appInfo.requestedPermissionsFlags != null) {
if ((appInfo.requestedPermissionsFlags[j]
& PackageInfo.REQUESTED_PERMISSION_GRANTED) == 0) {
- if (DEBUG) Log.d(TAG, "Pkg " + appInfo.packageName + " perm "
- + appInfo.requestedPermissions[j] + " not granted; skipping");
+ if (DEBUG) {
+ Log.d(TAG, "Pkg " + appInfo.packageName + " perm "
+ + appInfo.requestedPermissions[j]
+ + " not granted; skipping");
+ }
continue;
}
}
- if (DEBUG) Log.d(TAG, "Pkg " + appInfo.packageName + ": requested perm "
- + appInfo.requestedPermissions[j]);
- for (int k=0; k<perms.size(); k++) {
+ if (DEBUG) {
+ Log.d(TAG, "Pkg " + appInfo.packageName + ": requested perm "
+ + appInfo.requestedPermissions[j]);
+ }
+ for (int k = 0; k < perms.size(); k++) {
if (!perms.get(k).equals(appInfo.requestedPermissions[j])) {
continue;
}
- if (DEBUG) Log.d(TAG, "Pkg " + appInfo.packageName + " perm " + perms.get(k)
- + " has op " + permOps.get(k) + ": " + appEntry.hasOp(permOps.get(k)));
+ if (DEBUG) {
+ Log.d(TAG, "Pkg " + appInfo.packageName + " perm " + perms.get(k)
+ + " has op " + permOps.get(k) + ": " + appEntry.hasOp(
+ permOps.get(k)));
+ }
if (appEntry.hasOp(permOps.get(k))) {
continue;
}
- if (dummyOps == null) {
- dummyOps = new ArrayList<AppOpsManager.OpEntry>();
+ if (placeholderOps == null) {
+ placeholderOps = new ArrayList<AppOpsManager.OpEntry>();
pkgOps = new AppOpsManager.PackageOps(
- appInfo.packageName, appInfo.applicationInfo.uid, dummyOps);
+ appInfo.packageName, appInfo.applicationInfo.uid,
+ placeholderOps);
}
AppOpsManager.OpEntry opEntry = new AppOpsManager.OpEntry(
permOps.get(k), AppOpsManager.MODE_ALLOWED,
Collections.emptyMap());
- dummyOps.add(opEntry);
+ placeholderOps.add(opEntry);
addOp(entries, pkgOps, appEntry, opEntry, packageName == null,
packageName == null ? 0 : opToOrder[opEntry.getOp()]);
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/manageapplications/AppFilterRegistry.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/manageapplications/AppFilterRegistry.java
index db612d0..2de3844 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/manageapplications/AppFilterRegistry.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/manageapplications/AppFilterRegistry.java
@@ -34,8 +34,8 @@
public class AppFilterRegistry {
@IntDef(value = {
- FILTER_APPS_POWER_WHITELIST,
- FILTER_APPS_POWER_WHITELIST_ALL,
+ FILTER_APPS_POWER_ALLOWLIST,
+ FILTER_APPS_POWER_ALLOWLIST_ALL,
FILTER_APPS_ALL,
FILTER_APPS_ENABLED,
FILTER_APPS_INSTANT,
@@ -55,8 +55,8 @@
// Filter options used for displayed list of applications
// Filters will appear sorted based on their value defined here.
- public static final int FILTER_APPS_POWER_WHITELIST = 0;
- public static final int FILTER_APPS_POWER_WHITELIST_ALL = 1;
+ public static final int FILTER_APPS_POWER_ALLOWLIST = 0;
+ public static final int FILTER_APPS_POWER_ALLOWLIST_ALL = 1;
public static final int FILTER_APPS_ALL = 2;
public static final int FILTER_APPS_ENABLED = 3;
public static final int FILTER_APPS_INSTANT = 4;
@@ -81,19 +81,19 @@
mFilters = new AppFilterItem[17];
// High power allowlist, on
- mFilters[FILTER_APPS_POWER_WHITELIST] = new AppFilterItem(
+ mFilters[FILTER_APPS_POWER_ALLOWLIST] = new AppFilterItem(
new ApplicationsState.CompoundFilter(
- AppStatePowerBridge.FILTER_POWER_WHITELISTED,
+ AppStatePowerBridge.FILTER_POWER_ALLOWLISTED,
ApplicationsState.FILTER_ALL_ENABLED),
- FILTER_APPS_POWER_WHITELIST,
+ FILTER_APPS_POWER_ALLOWLIST,
R.string.high_power_filter_on);
// Without disabled until used
- mFilters[FILTER_APPS_POWER_WHITELIST_ALL] = new AppFilterItem(
+ mFilters[FILTER_APPS_POWER_ALLOWLIST_ALL] = new AppFilterItem(
new ApplicationsState.CompoundFilter(
ApplicationsState.FILTER_WITHOUT_DISABLED_UNTIL_USED,
ApplicationsState.FILTER_ALL_ENABLED),
- FILTER_APPS_POWER_WHITELIST_ALL,
+ FILTER_APPS_POWER_ALLOWLIST_ALL,
R.string.filter_all_apps);
// All apps
@@ -193,7 +193,7 @@
case ManageApplications.LIST_TYPE_USAGE_ACCESS:
return FILTER_APPS_USAGE_ACCESS;
case ManageApplications.LIST_TYPE_HIGH_POWER:
- return FILTER_APPS_POWER_WHITELIST;
+ return FILTER_APPS_POWER_ALLOWLIST;
case ManageApplications.LIST_TYPE_OVERLAY:
return FILTER_APPS_WITH_OVERLAY;
case ManageApplications.LIST_TYPE_WRITE_SETTINGS:
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/manageapplications/ApplicationViewHolder.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/manageapplications/ApplicationViewHolder.java
index b9d09b2..7039dd2 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/manageapplications/ApplicationViewHolder.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/manageapplications/ApplicationViewHolder.java
@@ -70,7 +70,7 @@
if (twoTarget) {
if (widgetFrame != null) {
LayoutInflater.from(parent.getContext())
- .inflate(R.layout.preference_widget_master_switch, widgetFrame, true);
+ .inflate(R.layout.preference_widget_primary_switch, widgetFrame, true);
View divider = LayoutInflater.from(parent.getContext()).inflate(
R.layout.preference_two_target_divider, view, false);
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/manageapplications/ManageApplications.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/manageapplications/ManageApplications.java
index 1e03541..eb86b6b 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/manageapplications/ManageApplications.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/applications/manageapplications/ManageApplications.java
@@ -25,8 +25,8 @@
import static com.android.car.developeroptions.applications.manageapplications.AppFilterRegistry.FILTER_APPS_FREQUENT;
import static com.android.car.developeroptions.applications.manageapplications.AppFilterRegistry.FILTER_APPS_INSTANT;
import static com.android.car.developeroptions.applications.manageapplications.AppFilterRegistry.FILTER_APPS_PERSONAL;
-import static com.android.car.developeroptions.applications.manageapplications.AppFilterRegistry.FILTER_APPS_POWER_WHITELIST;
-import static com.android.car.developeroptions.applications.manageapplications.AppFilterRegistry.FILTER_APPS_POWER_WHITELIST_ALL;
+import static com.android.car.developeroptions.applications.manageapplications.AppFilterRegistry.FILTER_APPS_POWER_ALLOWLIST;
+import static com.android.car.developeroptions.applications.manageapplications.AppFilterRegistry.FILTER_APPS_POWER_ALLOWLIST_ALL;
import static com.android.car.developeroptions.applications.manageapplications.AppFilterRegistry.FILTER_APPS_RECENT;
import static com.android.car.developeroptions.applications.manageapplications.AppFilterRegistry.FILTER_APPS_WORK;
@@ -113,7 +113,7 @@
import com.android.settingslib.applications.ApplicationsState.CompoundFilter;
import com.android.settingslib.applications.ApplicationsState.VolumeFilter;
import com.android.settingslib.applications.StorageStatsSource;
-import com.android.settingslib.fuelgauge.PowerWhitelistBackend;
+import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
import com.android.settingslib.utils.ThreadUtils;
import com.android.settingslib.widget.settingsspinner.SettingsSpinnerAdapter;
@@ -410,7 +410,7 @@
mFilterAdapter.disableFilter(FILTER_APPS_ALL);
}
if (mListType == LIST_TYPE_HIGH_POWER) {
- mFilterAdapter.enableFilter(FILTER_APPS_POWER_WHITELIST_ALL);
+ mFilterAdapter.enableFilter(FILTER_APPS_POWER_ALLOWLIST_ALL);
}
AppFilter compositeFilter = getCompositeFilter(mListType, mStorageType, mVolumeUuid);
@@ -916,7 +916,7 @@
private boolean mHasReceivedBridgeCallback;
private FileViewHolderController mExtraViewController;
private SearchFilter mSearchFilter;
- private PowerWhitelistBackend mBackend;
+ private PowerAllowlistBackend mBackend;
// This is to remember and restore the last scroll position when this
// fragment is paused. We need this special handling because app entries are added gradually
@@ -941,7 +941,7 @@
mContext = manageApplications.getActivity();
mIconDrawableFactory = IconDrawableFactory.newInstance(mContext);
mAppFilter = appFilter;
- mBackend = PowerWhitelistBackend.getInstance(mContext);
+ mBackend = PowerAllowlistBackend.getInstance(mContext);
if (mManageApplications.mListType == LIST_TYPE_NOTIFICATION) {
mExtraInfoBridge = new AppStateNotificationBridge(mContext, mState, this,
manageApplications.mUsageStatsManager,
@@ -1194,8 +1194,8 @@
Log.d(TAG, "onRebuildComplete");
}
final int filterType = mAppFilter.getFilterType();
- if (filterType == FILTER_APPS_POWER_WHITELIST ||
- filterType == FILTER_APPS_POWER_WHITELIST_ALL) {
+ if (filterType == FILTER_APPS_POWER_ALLOWLIST
+ || filterType == FILTER_APPS_POWER_ALLOWLIST_ALL) {
entries = removeDuplicateIgnoringUser(entries);
}
mEntries = entries;
@@ -1353,7 +1353,7 @@
}
ApplicationsState.AppEntry entry = mEntries.get(position);
- return !mBackend.isSysWhitelisted(entry.info.packageName)
+ return !mBackend.isSysAllowlisted(entry.info.packageName)
&& !mBackend.isDefaultActiveApp(entry.info.packageName);
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/face/FaceEnrollIntroduction.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/face/FaceEnrollIntroduction.java
index 9942488..3d1352c 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/face/FaceEnrollIntroduction.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/face/FaceEnrollIntroduction.java
@@ -192,7 +192,7 @@
if (mFaceManager == null) {
return 0;
}
- return mFaceManager.generateChallenge();
+ return 0L; // This path needs to be updated for auto. See packages/apps/Settings
}
@Override
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/face/FaceEnrollSidecar.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/face/FaceEnrollSidecar.java
index a082029..5f7a1b2 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/face/FaceEnrollSidecar.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/face/FaceEnrollSidecar.java
@@ -19,7 +19,6 @@
import android.app.Activity;
import android.app.settings.SettingsEnums;
import android.hardware.face.FaceManager;
-import android.os.UserHandle;
import com.android.car.developeroptions.Utils;
import com.android.car.developeroptions.biometrics.BiometricEnrollSidecar;
@@ -48,10 +47,6 @@
@Override
public void startEnrollment() {
super.startEnrollment();
- if (mUserId != UserHandle.USER_NULL) {
- mFaceManager.setActiveUser(mUserId);
- }
-
mFaceManager.enroll(mUserId, mToken, mEnrollmentCancel,
mEnrollmentCallback, mDisabledFeatures);
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/face/FaceSettings.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/face/FaceSettings.java
index a318dd7..377e505 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/face/FaceSettings.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/face/FaceSettings.java
@@ -121,11 +121,10 @@
}
if (mToken == null) {
- final long challenge = mFaceManager.generateChallenge();
ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(getActivity(), this);
if (!helper.launchConfirmationActivity(CONFIRM_REQUEST,
getString(R.string.security_settings_face_preference_title),
- null, null, challenge, mUserId)) {
+ null, null, 0L /* challenge */, mUserId)) {
Log.e(TAG, "Password not set");
finish();
}
@@ -145,7 +144,6 @@
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CONFIRM_REQUEST) {
if (resultCode == RESULT_FINISHED || resultCode == RESULT_OK) {
- mFaceManager.setActiveUser(mUserId);
// The pin/pattern/password was set.
if (data != null) {
mToken = data.getByteArrayExtra(
@@ -167,10 +165,7 @@
public void onDestroy() {
super.onDestroy();
if (getActivity().isFinishing()) {
- final int result = mFaceManager.revokeChallenge();
- if (result < 0) {
- Log.w(TAG, "revokeChallenge failed, result: " + result);
- }
+ mFaceManager.revokeChallenge();
}
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/fingerprint/FingerprintAuthenticateSidecar.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/fingerprint/FingerprintAuthenticateSidecar.java
index eebe5b6..8200928 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/fingerprint/FingerprintAuthenticateSidecar.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/fingerprint/FingerprintAuthenticateSidecar.java
@@ -103,8 +103,8 @@
public void startAuthentication(int userId) {
mCancellationSignal = new CancellationSignal();
- mFingerprintManager.authenticate(null, mCancellationSignal, 0 /* flags */,
- mAuthenticationCallback, null, userId);
+ mFingerprintManager.authenticate(null, mCancellationSignal, mAuthenticationCallback, null,
+ userId);
}
public void stopAuthentication() {
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/fingerprint/FingerprintEnrollIntroduction.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/fingerprint/FingerprintEnrollIntroduction.java
index b410512..e0ed1a3 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/fingerprint/FingerprintEnrollIntroduction.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/fingerprint/FingerprintEnrollIntroduction.java
@@ -136,7 +136,7 @@
if (mFingerprintManager == null) {
return 0;
}
- return mFingerprintManager.preEnroll();
+ return 0L; // This path needs to be updated for auto. See packages/apps/Settings
}
@Override
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/fingerprint/FingerprintEnrollSidecar.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/fingerprint/FingerprintEnrollSidecar.java
index c490f31..92bc7af 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/fingerprint/FingerprintEnrollSidecar.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/fingerprint/FingerprintEnrollSidecar.java
@@ -19,7 +19,6 @@
import android.app.Activity;
import android.app.settings.SettingsEnums;
import android.hardware.fingerprint.FingerprintManager;
-import android.os.UserHandle;
import com.android.car.developeroptions.Utils;
import com.android.car.developeroptions.biometrics.BiometricEnrollSidecar;
@@ -40,11 +39,7 @@
@Override
protected void startEnrollment() {
super.startEnrollment();
- if (mUserId != UserHandle.USER_NULL) {
- mFingerprintManager.setActiveUser(mUserId);
- }
- mFingerprintManager.enroll(mToken, mEnrollmentCancel,
- 0 /* flags */, mUserId, mEnrollmentCallback);
+ mFingerprintManager.enroll(mToken, mEnrollmentCancel, mUserId, mEnrollmentCallback);
}
private FingerprintManager.EnrollmentCallback mEnrollmentCallback
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/fingerprint/FingerprintRemoveSidecar.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/fingerprint/FingerprintRemoveSidecar.java
index eb6ba46..5888c9e 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/fingerprint/FingerprintRemoveSidecar.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/fingerprint/FingerprintRemoveSidecar.java
@@ -21,7 +21,6 @@
import android.hardware.fingerprint.Fingerprint;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Bundle;
-import android.os.UserHandle;
import android.util.Log;
import com.android.car.developeroptions.core.InstrumentedFragment;
@@ -79,9 +78,6 @@
Log.e(TAG, "Remove already in progress");
return;
}
- if (userId != UserHandle.USER_NULL) {
- mFingerprintManager.setActiveUser(userId);
- }
mFingerprintRemoving = fingerprint;
mFingerprintManager.remove(fingerprint, userId, mRemoveCallback);;
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/fingerprint/FingerprintSettings.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/fingerprint/FingerprintSettings.java
index 4149228..36718e9 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/fingerprint/FingerprintSettings.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/biometrics/fingerprint/FingerprintSettings.java
@@ -576,10 +576,7 @@
public void onDestroy() {
super.onDestroy();
if (getActivity().isFinishing()) {
- int result = mFingerprintManager.postEnroll();
- if (result < 0) {
- Log.w(TAG, "postEnroll failed: result = " + result);
- }
+ mFingerprintManager.revokeChallenge(mUserId);
}
}
@@ -620,19 +617,15 @@
private void launchChooseOrConfirmLock() {
Intent intent = new Intent();
- long challenge = mFingerprintManager.preEnroll();
ChooseLockSettingsHelper helper = new ChooseLockSettingsHelper(getActivity(), this);
if (!helper.launchConfirmationActivity(CONFIRM_REQUEST,
getString(R.string.security_settings_fingerprint_preference_title),
- null, null, challenge, mUserId)) {
+ null, null, 0L /* challenge */, mUserId)) {
intent.setClassName(SETTINGS_PACKAGE_NAME, ChooseLockGeneric.class.getName());
intent.putExtra(ChooseLockGeneric.ChooseLockGenericFragment.MINIMUM_QUALITY_KEY,
DevicePolicyManager.PASSWORD_QUALITY_SOMETHING);
intent.putExtra(ChooseLockGeneric.ChooseLockGenericFragment.HIDE_DISABLED_PREFS,
true);
- intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, true);
- intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
- intent.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, challenge);
intent.putExtra(Intent.EXTRA_USER_ID, mUserId);
startActivityForResult(intent, CHOOSE_LOCK_GENERIC_REQUEST);
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/core/SettingsBaseActivity.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/core/SettingsBaseActivity.java
index 424360f..2c43d8e 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/core/SettingsBaseActivity.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/core/SettingsBaseActivity.java
@@ -50,7 +50,7 @@
// Serves as a temporary list of tiles to ignore until we heard back from the PM that they
// are disabled.
- private static ArraySet<ComponentName> sTileBlacklist = new ArraySet<>();
+ private static ArraySet<ComponentName> sTileDenylist = new ArraySet<>();
private final PackageReceiver mPackageReceiver = new PackageReceiver();
private final List<CategoryListener> mCategoryListeners = new ArrayList<>();
@@ -150,9 +150,9 @@
boolean isEnabled = state == PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
if (isEnabled != enabled || state == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) {
if (enabled) {
- sTileBlacklist.remove(component);
+ sTileDenylist.remove(component);
} else {
- sTileBlacklist.add(component);
+ sTileDenylist.add(component);
}
pm.setComponentEnabledSetting(component, enabled
? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
@@ -190,7 +190,7 @@
@Override
protected void onPostExecute(Void result) {
- mCategoryManager.updateCategoryFromBlacklist(sTileBlacklist);
+ mCategoryManager.updateCategoryFromDenylist(sTileDenylist);
onCategoriesChanged();
}
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/core/TogglePreferenceController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/core/TogglePreferenceController.java
index 92b0664..e3f9037 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/core/TogglePreferenceController.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/core/TogglePreferenceController.java
@@ -19,7 +19,7 @@
import androidx.preference.TwoStatePreference;
import com.android.car.developeroptions.slices.SliceData;
-import com.android.car.developeroptions.widget.MasterSwitchPreference;
+import com.android.car.developeroptions.widget.PrimarySwitchPreference;
/**
* Abstract class that consolidates logic for updating toggle controllers.
@@ -52,8 +52,8 @@
public void updateState(Preference preference) {
if (preference instanceof TwoStatePreference) {
((TwoStatePreference) preference).setChecked(isChecked());
- } else if (preference instanceof MasterSwitchPreference) {
- ((MasterSwitchPreference) preference).setChecked(isChecked());
+ } else if (preference instanceof PrimarySwitchPreference) {
+ ((PrimarySwitchPreference) preference).setChecked(isChecked());
} else {
refreshSummary(preference);
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/dashboard/CategoryManager.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/dashboard/CategoryManager.java
index 8c09659..01bef53 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/dashboard/CategoryManager.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/dashboard/CategoryManager.java
@@ -84,15 +84,15 @@
tryInitCategories(context, forceClearCache);
}
- public synchronized void updateCategoryFromBlacklist(Set<ComponentName> tileBlacklist) {
+ public synchronized void updateCategoryFromDenylist(Set<ComponentName> tileDenylist) {
if (mCategories == null) {
- Log.w(TAG, "Category is null, skipping blacklist update");
+ Log.w(TAG, "Category is null, skipping denylist update");
}
for (int i = 0; i < mCategories.size(); i++) {
DashboardCategory category = mCategories.get(i);
for (int j = 0; j < category.getTilesCount(); j++) {
Tile tile = category.getTile(j);
- if (tileBlacklist.contains(tile.getIntent().getComponent())) {
+ if (tileDenylist.contains(tile.getIntent().getComponent())) {
category.removeTile(j--);
}
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/datausage/DataUsageSummaryPreferenceController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/datausage/DataUsageSummaryPreferenceController.java
index bccb280..909b586 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/datausage/DataUsageSummaryPreferenceController.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/datausage/DataUsageSummaryPreferenceController.java
@@ -353,11 +353,11 @@
// First plan in the list is the primary plan
SubscriptionPlan plan = plans.get(0);
return plan.getDataLimitBytes() > 0
- && saneSize(plan.getDataUsageBytes())
+ && validSize(plan.getDataUsageBytes())
&& plan.getCycleRule() != null ? plan : null;
}
- private static boolean saneSize(long value) {
+ private static boolean validSize(long value) {
return value >= 0L && value < PETA;
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/datetime/TimeFormatPreferenceController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/datetime/TimeFormatPreferenceController.java
index daabe17..f8db49d 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/datetime/TimeFormatPreferenceController.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/datetime/TimeFormatPreferenceController.java
@@ -42,7 +42,7 @@
// Used for showing the current date format, which looks like "12/31/2010", "2010/12/13", etc.
// The date value is placeholder (independent of actual date).
- private final Calendar mDummyDate;
+ private final Calendar mPlaceholderDate;
private final boolean mIsFromSUW;
private final UpdateTimeAndDateCallback mUpdateTimeAndDateCallback;
@@ -50,7 +50,7 @@
boolean isFromSUW) {
super(context);
mIsFromSUW = isFromSUW;
- mDummyDate = Calendar.getInstance();
+ mPlaceholderDate = Calendar.getInstance();
mUpdateTimeAndDateCallback = callback;
}
@@ -68,12 +68,12 @@
!AutoTimeFormatPreferenceController.isAutoTimeFormatSelection(mContext));
((TwoStatePreference) preference).setChecked(is24Hour());
final Calendar now = Calendar.getInstance();
- mDummyDate.setTimeZone(now.getTimeZone());
+ mPlaceholderDate.setTimeZone(now.getTimeZone());
// We use December 31st because it's unambiguous when demonstrating the date format.
// We use 13:00 so we can demonstrate the 12/24 hour options.
- mDummyDate.set(now.get(Calendar.YEAR), 11, 31, 13, 0, 0);
- final Date dummyDate = mDummyDate.getTime();
- preference.setSummary(DateFormat.getTimeFormat(mContext).format(dummyDate));
+ mPlaceholderDate.set(now.get(Calendar.YEAR), 11, 31, 13, 0, 0);
+ final Date placeholderDate = mPlaceholderDate.getTime();
+ preference.setSummary(DateFormat.getTimeFormat(mContext).format(placeholderDate));
}
@Override
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/deletionhelper/AutomaticStorageManagerSettings.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/deletionhelper/AutomaticStorageManagerSettings.java
index 93edf9f..65dc4e8 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/deletionhelper/AutomaticStorageManagerSettings.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/deletionhelper/AutomaticStorageManagerSettings.java
@@ -84,8 +84,8 @@
private void initializeSwitchBar() {
final SettingsActivity activity = (SettingsActivity) getActivity();
mSwitchBar = activity.getSwitchBar();
- mSwitchBar.setSwitchBarText(R.string.automatic_storage_manager_master_switch_title,
- R.string.automatic_storage_manager_master_switch_title);
+ mSwitchBar.setSwitchBarText(R.string.automatic_storage_manager_primary_switch_title,
+ R.string.automatic_storage_manager_primary_switch_title);
mSwitchBar.show();
mSwitchController =
new AutomaticStorageManagerSwitchBarController(
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/development/AppsNotRespondingPreferenceController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/development/AppsNotRespondingPreferenceController.java
index 86d89f4..f504d1b 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/development/AppsNotRespondingPreferenceController.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/development/AppsNotRespondingPreferenceController.java
@@ -16,7 +16,6 @@
package com.android.car.developeroptions.development;
import android.content.Context;
-import android.os.UserHandle;
import android.provider.Settings;
import androidx.annotation.VisibleForTesting;
@@ -48,31 +47,24 @@
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
final boolean isEnabled = (Boolean) newValue;
- // Set for system user since Android framework will read it as that user.
- // Note that this will enable/disable this option for all users.
- Settings.Secure.putIntForUser(mContext.getContentResolver(),
+ Settings.Secure.putInt(mContext.getContentResolver(),
Settings.Secure.ANR_SHOW_BACKGROUND,
- isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF,
- UserHandle.SYSTEM.getIdentifier());
+ isEnabled ? SETTING_VALUE_ON : SETTING_VALUE_OFF);
return true;
}
@Override
public void updateState(Preference preference) {
- final int mode = Settings.Secure.getIntForUser(mContext.getContentResolver(),
- Settings.Secure.ANR_SHOW_BACKGROUND,
- SETTING_VALUE_OFF, UserHandle.SYSTEM.getIdentifier());
+ final int mode = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ANR_SHOW_BACKGROUND, SETTING_VALUE_OFF);
((SwitchPreference) mPreference).setChecked(mode != SETTING_VALUE_OFF);
}
@Override
protected void onDeveloperOptionsSwitchDisabled() {
super.onDeveloperOptionsSwitchDisabled();
- // Set for system user since Android framework will read it as that user.
- // Note that this will enable/disable this option for all users.
- Settings.Secure.putIntForUser(mContext.getContentResolver(),
- Settings.Secure.ANR_SHOW_BACKGROUND,
- SETTING_VALUE_OFF, UserHandle.SYSTEM.getIdentifier());
+ Settings.Secure.putInt(mContext.getContentResolver(),
+ Settings.Secure.ANR_SHOW_BACKGROUND, SETTING_VALUE_OFF);
((SwitchPreference) mPreference).setChecked(false);
}
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/deviceinfo/aboutphone/TopLevelAboutDevicePreferenceController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/deviceinfo/aboutphone/TopLevelAboutDevicePreferenceController.java
index 78a1126..0a19341 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/deviceinfo/aboutphone/TopLevelAboutDevicePreferenceController.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/deviceinfo/aboutphone/TopLevelAboutDevicePreferenceController.java
@@ -35,7 +35,7 @@
@Override
public CharSequence getSummary() {
final DeviceNamePreferenceController deviceNamePreferenceController =
- new DeviceNamePreferenceController(mContext, "dummy_key");
+ new DeviceNamePreferenceController(mContext, "placeholder_key");
return deviceNamePreferenceController.getSummary();
}
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/deviceinfo/storage/AutomaticStorageManagementSwitchPreferenceController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/deviceinfo/storage/AutomaticStorageManagementSwitchPreferenceController.java
index 9d97561..020778c 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/deviceinfo/storage/AutomaticStorageManagementSwitchPreferenceController.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/deviceinfo/storage/AutomaticStorageManagementSwitchPreferenceController.java
@@ -29,8 +29,8 @@
import com.android.car.developeroptions.core.BasePreferenceController;
import com.android.car.developeroptions.deletionhelper.ActivationWarningFragment;
import com.android.car.developeroptions.overlay.FeatureFactory;
-import com.android.car.developeroptions.widget.MasterSwitchController;
-import com.android.car.developeroptions.widget.MasterSwitchPreference;
+import com.android.car.developeroptions.widget.PrimarySwitchController;
+import com.android.car.developeroptions.widget.PrimarySwitchPreference;
import com.android.car.developeroptions.widget.SwitchWidgetController;
import com.android.settingslib.Utils;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -43,8 +43,8 @@
@VisibleForTesting
static final String STORAGE_MANAGER_ENABLED_BY_DEFAULT_PROPERTY = "ro.storage_manager.enabled";
private final MetricsFeatureProvider mMetricsFeatureProvider;
- private MasterSwitchPreference mSwitch;
- private MasterSwitchController mSwitchController;
+ private PrimarySwitchPreference mSwitch;
+ private PrimarySwitchController mSwitchController;
private FragmentManager mFragmentManager;
public AutomaticStorageManagementSwitchPreferenceController(Context context, String key) {
@@ -77,7 +77,7 @@
mSwitch.setChecked(Utils.isStorageManagerEnabled(mContext));
if (mSwitch != null) {
- mSwitchController = new MasterSwitchController(mSwitch);
+ mSwitchController = new PrimarySwitchController(mSwitch);
mSwitchController.setListener(this);
mSwitchController.startListening();
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/display/TopLevelDisplayPreferenceController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/display/TopLevelDisplayPreferenceController.java
index 554122b..7298eac 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/display/TopLevelDisplayPreferenceController.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/display/TopLevelDisplayPreferenceController.java
@@ -37,7 +37,7 @@
@Override
public CharSequence getSummary() {
final WallpaperPreferenceController controller =
- new WallpaperPreferenceController(mContext, "dummy_key");
+ new WallpaperPreferenceController(mContext, "placeholder_key");
if (controller.isAvailable()) {
return mContext.getText(
controller.areStylesAvailable()
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/BackgroundActivityPreferenceController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/BackgroundActivityPreferenceController.java
index 16bcf9f..3d0aadc 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/BackgroundActivityPreferenceController.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/BackgroundActivityPreferenceController.java
@@ -33,7 +33,7 @@
import com.android.car.developeroptions.fuelgauge.batterytip.tips.UnrestrictAppTip;
import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.fuelgauge.PowerWhitelistBackend;
+import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
/**
* Controller to control whether an app can run in the background
@@ -54,18 +54,18 @@
BatteryUtils mBatteryUtils;
private InstrumentedPreferenceFragment mFragment;
private String mTargetPackage;
- private PowerWhitelistBackend mPowerWhitelistBackend;
+ private PowerAllowlistBackend mPowerAllowlistBackend;
public BackgroundActivityPreferenceController(Context context,
InstrumentedPreferenceFragment fragment, int uid, String packageName) {
- this(context, fragment, uid, packageName, PowerWhitelistBackend.getInstance(context));
+ this(context, fragment, uid, packageName, PowerAllowlistBackend.getInstance(context));
}
@VisibleForTesting
BackgroundActivityPreferenceController(Context context, InstrumentedPreferenceFragment fragment,
- int uid, String packageName, PowerWhitelistBackend backend) {
+ int uid, String packageName, PowerAllowlistBackend backend) {
super(context);
- mPowerWhitelistBackend = backend;
+ mPowerAllowlistBackend = backend;
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
mDpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
mAppOpsManager = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
@@ -84,8 +84,8 @@
}
final int mode = mAppOpsManager
.checkOpNoThrow(AppOpsManager.OP_RUN_ANY_IN_BACKGROUND, mUid, mTargetPackage);
- final boolean whitelisted = mPowerWhitelistBackend.isWhitelisted(mTargetPackage);
- if (whitelisted || mode == AppOpsManager.MODE_ERRORED
+ final boolean allowlisted = mPowerAllowlistBackend.isAllowlisted(mTargetPackage);
+ if (allowlisted || mode == AppOpsManager.MODE_ERRORED
|| Utils.isProfileOrDeviceOwner(mUserManager, mDpm, mTargetPackage)) {
preference.setEnabled(false);
} else {
@@ -117,7 +117,7 @@
}
public void updateSummary(Preference preference) {
- if (mPowerWhitelistBackend.isWhitelisted(mTargetPackage)) {
+ if (mPowerAllowlistBackend.isAllowlisted(mTargetPackage)) {
preference.setSummary(R.string.background_activity_summary_whitelisted);
return;
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/BatteryOptimizationPreferenceController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/BatteryOptimizationPreferenceController.java
index 6db0ac3..a19202e 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/BatteryOptimizationPreferenceController.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/BatteryOptimizationPreferenceController.java
@@ -27,7 +27,7 @@
import com.android.car.developeroptions.core.SubSettingLauncher;
import com.android.car.developeroptions.dashboard.DashboardFragment;
import com.android.settingslib.core.AbstractPreferenceController;
-import com.android.settingslib.fuelgauge.PowerWhitelistBackend;
+import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
/**
* Controller that jumps to high power optimization fragment
@@ -38,7 +38,7 @@
private static final String KEY_BACKGROUND_ACTIVITY = "battery_optimization";
- private PowerWhitelistBackend mBackend;
+ private PowerAllowlistBackend mBackend;
private DashboardFragment mFragment;
private SettingsActivity mSettingsActivity;
private String mPackageName;
@@ -49,12 +49,12 @@
mFragment = fragment;
mSettingsActivity = settingsActivity;
mPackageName = packageName;
- mBackend = PowerWhitelistBackend.getInstance(mSettingsActivity);
+ mBackend = PowerAllowlistBackend.getInstance(mSettingsActivity);
}
@VisibleForTesting
BatteryOptimizationPreferenceController(SettingsActivity settingsActivity,
- DashboardFragment fragment, String packageName, PowerWhitelistBackend backend) {
+ DashboardFragment fragment, String packageName, PowerAllowlistBackend backend) {
super(settingsActivity);
mFragment = fragment;
mSettingsActivity = settingsActivity;
@@ -69,8 +69,8 @@
@Override
public void updateState(Preference preference) {
- final boolean isWhitelisted = mBackend.isWhitelisted(mPackageName);
- preference.setSummary(isWhitelisted ? R.string.high_power_on : R.string.high_power_off);
+ final boolean isAllowlisted = mBackend.isAllowlisted(mPackageName);
+ preference.setSummary(isAllowlisted ? R.string.high_power_on : R.string.high_power_off);
}
@Override
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/BatteryUtils.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/BatteryUtils.java
index beee2b0..e6968be 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/BatteryUtils.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/BatteryUtils.java
@@ -39,15 +39,15 @@
import androidx.annotation.VisibleForTesting;
import androidx.annotation.WorkerThread;
-import com.android.internal.os.BatterySipper;
-import com.android.internal.os.BatteryStatsHelper;
-import com.android.internal.util.ArrayUtils;
import com.android.car.developeroptions.fuelgauge.batterytip.AnomalyDatabaseHelper;
import com.android.car.developeroptions.fuelgauge.batterytip.AnomalyInfo;
import com.android.car.developeroptions.fuelgauge.batterytip.BatteryDatabaseManager;
import com.android.car.developeroptions.fuelgauge.batterytip.StatsManagerConfig;
import com.android.car.developeroptions.overlay.FeatureFactory;
-import com.android.settingslib.fuelgauge.PowerWhitelistBackend;
+import com.android.internal.os.BatterySipper;
+import com.android.internal.os.BatteryStatsHelper;
+import com.android.internal.util.ArrayUtils;
+import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
import com.android.settingslib.utils.PowerUtil;
import com.android.settingslib.utils.ThreadUtils;
@@ -539,7 +539,7 @@
/**
* Return {@code true} if we should hide anomaly app represented by {@code uid}
*/
- public boolean shouldHideAnomaly(PowerWhitelistBackend powerWhitelistBackend, int uid,
+ public boolean shouldHideAnomaly(PowerAllowlistBackend powerAllowlistBackend, int uid,
AnomalyInfo anomalyInfo) {
final String[] packageNames = mPackageManager.getPackagesForUid(uid);
if (ArrayUtils.isEmpty(packageNames)) {
@@ -547,7 +547,7 @@
return true;
}
- return isSystemUid(uid) || powerWhitelistBackend.isWhitelisted(packageNames)
+ return isSystemUid(uid) || powerAllowlistBackend.isAllowlisted(packageNames)
|| (isSystemApp(mPackageManager, packageNames) && !hasLauncherEntry(packageNames))
|| (isExcessiveBackgroundAnomaly(anomalyInfo) && !isPreOApp(packageNames));
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/FakeUid.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/FakeUid.java
index aa7cde2..f3b9acf 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/FakeUid.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/FakeUid.java
@@ -389,4 +389,9 @@
public long[] getScreenOffCpuFreqTimes(int procState, int which) {
return null;
}
+
+ @Override
+ public double getProportionalSystemServiceUsage() {
+ return 0;
+ }
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/HighPowerDetail.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/HighPowerDetail.java
index fe64d2a..28a1ffe 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/HighPowerDetail.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/HighPowerDetail.java
@@ -38,7 +38,7 @@
import com.android.car.developeroptions.core.instrumentation.InstrumentedDialogFragment;
import com.android.car.developeroptions.overlay.FeatureFactory;
import com.android.settingslib.applications.ApplicationsState.AppEntry;
-import com.android.settingslib.fuelgauge.PowerWhitelistBackend;
+import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
public class HighPowerDetail extends InstrumentedDialogFragment implements OnClickListener,
View.OnClickListener {
@@ -46,7 +46,7 @@
private static final String ARG_DEFAULT_ON = "default_on";
@VisibleForTesting
- PowerWhitelistBackend mBackend;
+ PowerAllowlistBackend mBackend;
@VisibleForTesting
BatteryUtils mBatteryUtils;
@VisibleForTesting
@@ -70,7 +70,7 @@
super.onCreate(savedInstanceState);
final Context context = getContext();
mBatteryUtils = BatteryUtils.getInstance(context);
- mBackend = PowerWhitelistBackend.getInstance(context);
+ mBackend = PowerAllowlistBackend.getInstance(context);
mPackageName = getArguments().getString(AppInfoBase.ARG_PACKAGE_NAME);
mPackageUid = getArguments().getInt(AppInfoBase.ARG_PACKAGE_UID);
@@ -81,7 +81,7 @@
mLabel = mPackageName;
}
mDefaultOn = getArguments().getBoolean(ARG_DEFAULT_ON);
- mIsEnabled = mDefaultOn || mBackend.isWhitelisted(mPackageName);
+ mIsEnabled = mDefaultOn || mBackend.isAllowlisted(mPackageName);
}
public Checkable setup(View view, boolean on) {
@@ -91,7 +91,7 @@
? R.string.ignore_optimizations_on_desc : R.string.ignore_optimizations_off_desc);
view.setClickable(true);
view.setOnClickListener(this);
- if (!on && mBackend.isSysWhitelisted(mPackageName)) {
+ if (!on && mBackend.isSysAllowlisted(mPackageName)) {
view.setEnabled(false);
}
return (Checkable) view;
@@ -103,7 +103,7 @@
.setTitle(mLabel)
.setNegativeButton(R.string.cancel, null)
.setView(R.layout.ignore_optimizations_content);
- if (!mBackend.isSysWhitelisted(mPackageName)) {
+ if (!mBackend.isSysAllowlisted(mPackageName)) {
b.setPositiveButton(R.string.done, this);
}
return b.create();
@@ -137,7 +137,7 @@
public void onClick(DialogInterface dialog, int which) {
if (which == DialogInterface.BUTTON_POSITIVE) {
boolean newValue = mIsEnabled;
- boolean oldValue = mBackend.isWhitelisted(mPackageName);
+ boolean oldValue = mBackend.isAllowlisted(mPackageName);
if (newValue != oldValue) {
logSpecialPermissionChange(newValue, mPackageName, getContext());
if (newValue) {
@@ -152,8 +152,8 @@
}
@VisibleForTesting
- static void logSpecialPermissionChange(boolean whitelist, String packageName, Context context) {
- int logCategory = whitelist ? SettingsEnums.APP_SPECIAL_PERMISSION_BATTERY_DENY
+ static void logSpecialPermissionChange(boolean allowlist, String packageName, Context context) {
+ int logCategory = allowlist ? SettingsEnums.APP_SPECIAL_PERMISSION_BATTERY_DENY
: SettingsEnums.APP_SPECIAL_PERMISSION_BATTERY_ALLOW;
FeatureFactory.getFactory(context).getMetricsFeatureProvider().action(context, logCategory,
packageName);
@@ -173,16 +173,16 @@
}
public static CharSequence getSummary(Context context, String pkg) {
- return getSummary(context, PowerWhitelistBackend.getInstance(context), pkg);
+ return getSummary(context, PowerAllowlistBackend.getInstance(context), pkg);
}
@VisibleForTesting
- static CharSequence getSummary(Context context, PowerWhitelistBackend powerWhitelist,
+ static CharSequence getSummary(Context context, PowerAllowlistBackend powerAllowlist,
String pkg) {
return context.getString(
- powerWhitelist.isSysWhitelisted(pkg) || powerWhitelist.isDefaultActiveApp(pkg)
+ powerAllowlist.isSysAllowlisted(pkg) || powerAllowlist.isDefaultActiveApp(pkg)
? R.string.high_power_system
- : powerWhitelist.isWhitelisted(pkg)
+ : powerAllowlist.isAllowlisted(pkg)
? R.string.high_power_on
: R.string.high_power_off);
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/InactiveApps.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/InactiveApps.java
index d6a52ba..0facb4f 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/InactiveApps.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/InactiveApps.java
@@ -21,6 +21,7 @@
import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_FREQUENT;
import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_NEVER;
import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_RARE;
+import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_RESTRICTED;
import static android.app.usage.UsageStatsManager.STANDBY_BUCKET_WORKING_SET;
import android.app.settings.SettingsEnums;
@@ -31,6 +32,7 @@
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.os.Bundle;
+import android.provider.Settings;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
@@ -39,21 +41,29 @@
import com.android.car.developeroptions.R;
import com.android.car.developeroptions.SettingsPreferenceFragment;
+import java.util.Arrays;
import java.util.List;
public class InactiveApps extends SettingsPreferenceFragment
implements Preference.OnPreferenceChangeListener {
- private static final CharSequence[] SETTABLE_BUCKETS_NAMES =
- {"ACTIVE", "WORKING_SET", "FREQUENT", "RARE"};
+ private static final CharSequence[] FULL_SETTABLE_BUCKETS_NAMES =
+ {"ACTIVE", "WORKING_SET", "FREQUENT", "RARE", "RESTRICTED"};
- private static final CharSequence[] SETTABLE_BUCKETS_VALUES = {
+ private static final CharSequence[] REDUCED_SETTABLE_BUCKETS_NAMES =
+ Arrays.copyOfRange(FULL_SETTABLE_BUCKETS_NAMES, 0, 4);
+
+ private static final CharSequence[] FULL_SETTABLE_BUCKETS_VALUES = {
Integer.toString(STANDBY_BUCKET_ACTIVE),
Integer.toString(STANDBY_BUCKET_WORKING_SET),
Integer.toString(STANDBY_BUCKET_FREQUENT),
- Integer.toString(STANDBY_BUCKET_RARE)
+ Integer.toString(STANDBY_BUCKET_RARE),
+ Integer.toString(STANDBY_BUCKET_RESTRICTED)
};
+ private static final CharSequence[] REDUCED_SETTABLE_BUCKETS_VALUES =
+ Arrays.copyOfRange(FULL_SETTABLE_BUCKETS_VALUES, 0, 4);
+
private UsageStatsManager mUsageStats;
@Override
@@ -81,7 +91,13 @@
screen.setOrderingAsAdded(false);
final Context context = getActivity();
final PackageManager pm = context.getPackageManager();
- final UsageStatsManager usm = context.getSystemService(UsageStatsManager.class);
+ final boolean allowRestrictedBucket = Settings.Global.getInt(getContentResolver(),
+ Settings.Global.ENABLE_RESTRICTED_BUCKET,
+ Settings.Global.DEFAULT_ENABLE_RESTRICTED_BUCKET) == 1;
+ final CharSequence[] bucketNames = allowRestrictedBucket
+ ? FULL_SETTABLE_BUCKETS_NAMES : REDUCED_SETTABLE_BUCKETS_NAMES;
+ final CharSequence[] bucketValues = allowRestrictedBucket
+ ? FULL_SETTABLE_BUCKETS_VALUES : REDUCED_SETTABLE_BUCKETS_VALUES;
Intent launcherIntent = new Intent(Intent.ACTION_MAIN);
launcherIntent.addCategory(Intent.CATEGORY_LAUNCHER);
@@ -92,8 +108,8 @@
p.setTitle(app.loadLabel(pm));
p.setIcon(app.loadIcon(pm));
p.setKey(packageName);
- p.setEntries(SETTABLE_BUCKETS_NAMES);
- p.setEntryValues(SETTABLE_BUCKETS_VALUES);
+ p.setEntries(bucketNames);
+ p.setEntryValues(bucketValues);
updateSummary(p);
p.setOnPreferenceChangeListener(this);
@@ -108,6 +124,7 @@
case STANDBY_BUCKET_WORKING_SET: return "WORKING_SET";
case STANDBY_BUCKET_FREQUENT: return "FREQUENT";
case STANDBY_BUCKET_RARE: return "RARE";
+ case STANDBY_BUCKET_RESTRICTED: return "RESTRICTED";
case STANDBY_BUCKET_NEVER: return "NEVER";
}
return "";
@@ -122,7 +139,7 @@
// purposes and can either not be changed out of, or might have undesirable
// side-effects in combination with other assumptions.
final boolean changeable = appBucket >= STANDBY_BUCKET_ACTIVE
- && appBucket <= STANDBY_BUCKET_RARE;
+ && appBucket <= STANDBY_BUCKET_RESTRICTED;
if (changeable) {
p.setValue(Integer.toString(appBucket));
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/RequestIgnoreBatteryOptimizations.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/RequestIgnoreBatteryOptimizations.java
index a6d397a..5f8b25f 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/RequestIgnoreBatteryOptimizations.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/RequestIgnoreBatteryOptimizations.java
@@ -22,31 +22,26 @@
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
-import android.os.IDeviceIdleController;
import android.os.PowerManager;
-import android.os.RemoteException;
-import android.os.ServiceManager;
+import android.os.PowerWhitelistManager;
import android.util.Log;
+import com.android.car.developeroptions.R;
import com.android.internal.app.AlertActivity;
import com.android.internal.app.AlertController;
-import com.android.car.developeroptions.R;
public class RequestIgnoreBatteryOptimizations extends AlertActivity implements
DialogInterface.OnClickListener {
static final String TAG = "RequestIgnoreBatteryOptimizations";
- private static final String DEVICE_IDLE_SERVICE = "deviceidle";
-
- IDeviceIdleController mDeviceIdleService;
+ private PowerWhitelistManager mPowerWhitelistManager;
String mPackageName;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- mDeviceIdleService = IDeviceIdleController.Stub.asInterface(
- ServiceManager.getService(DEVICE_IDLE_SERVICE));
+ mPowerWhitelistManager = getSystemService(PowerWhitelistManager.class);
Uri data = getIntent().getData();
if (data == null) {
@@ -102,11 +97,7 @@
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case BUTTON_POSITIVE:
- try {
- mDeviceIdleService.addPowerSaveWhitelistApp(mPackageName);
- } catch (RemoteException e) {
- Log.w(TAG, "Unable to reach IDeviceIdleController", e);
- }
+ mPowerWhitelistManager.addToWhitelist(mPackageName);
setResult(RESULT_OK);
break;
case BUTTON_NEGATIVE:
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/batterytip/AnomalyDetectionJobService.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/batterytip/AnomalyDetectionJobService.java
index 581ebad..b125218 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/batterytip/AnomalyDetectionJobService.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/batterytip/AnomalyDetectionJobService.java
@@ -40,13 +40,13 @@
import androidx.annotation.GuardedBy;
import androidx.annotation.VisibleForTesting;
-import com.android.internal.util.ArrayUtils;
import com.android.car.developeroptions.R;
import com.android.car.developeroptions.fuelgauge.BatteryUtils;
import com.android.car.developeroptions.fuelgauge.PowerUsageFeatureProvider;
import com.android.car.developeroptions.overlay.FeatureFactory;
+import com.android.internal.util.ArrayUtils;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
-import com.android.settingslib.fuelgauge.PowerWhitelistBackend;
+import com.android.settingslib.fuelgauge.PowerAllowlistBackend;
import com.android.settingslib.utils.ThreadUtils;
import java.util.ArrayList;
@@ -96,8 +96,8 @@
final BatteryUtils batteryUtils = BatteryUtils.getInstance(this);
final ContentResolver contentResolver = getContentResolver();
final UserManager userManager = getSystemService(UserManager.class);
- final PowerWhitelistBackend powerWhitelistBackend =
- PowerWhitelistBackend.getInstance(context);
+ final PowerAllowlistBackend powerAllowlistBackend =
+ PowerAllowlistBackend.getInstance(context);
final PowerUsageFeatureProvider powerUsageFeatureProvider = FeatureFactory
.getFactory(this).getPowerUsageFeatureProvider(this);
final MetricsFeatureProvider metricsFeatureProvider = FeatureFactory
@@ -105,7 +105,7 @@
for (JobWorkItem item = dequeueWork(params); item != null; item = dequeueWork(params)) {
saveAnomalyToDatabase(context, userManager,
- batteryDatabaseManager, batteryUtils, policy, powerWhitelistBackend,
+ batteryDatabaseManager, batteryUtils, policy, powerAllowlistBackend,
contentResolver, powerUsageFeatureProvider, metricsFeatureProvider,
item.getIntent().getExtras());
@@ -127,7 +127,7 @@
@VisibleForTesting
void saveAnomalyToDatabase(Context context, UserManager userManager,
BatteryDatabaseManager databaseManager, BatteryUtils batteryUtils,
- BatteryTipPolicy policy, PowerWhitelistBackend powerWhitelistBackend,
+ BatteryTipPolicy policy, PowerAllowlistBackend powerAllowlistBackend,
ContentResolver contentResolver, PowerUsageFeatureProvider powerUsageFeatureProvider,
MetricsFeatureProvider metricsFeatureProvider, Bundle bundle) {
// The Example of intentDimsValue is: 35:{1:{1:{1:10013|}|}|}
@@ -151,7 +151,7 @@
final String packageName = batteryUtils.getPackageName(uid);
final long versionCode = batteryUtils.getAppLongVersionCode(packageName);
final String versionedPackage = packageName + "/" + versionCode;
- if (batteryUtils.shouldHideAnomaly(powerWhitelistBackend, uid, anomalyInfo)) {
+ if (batteryUtils.shouldHideAnomaly(powerAllowlistBackend, uid, anomalyInfo)) {
metricsFeatureProvider.action(SettingsEnums.PAGE_UNKNOWN,
SettingsEnums.ACTION_ANOMALY_IGNORED,
SettingsEnums.PAGE_UNKNOWN,
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/batterytip/BatteryTipPreferenceController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/batterytip/BatteryTipPreferenceController.java
index afad540..fa6fd36 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/batterytip/BatteryTipPreferenceController.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/batterytip/BatteryTipPreferenceController.java
@@ -112,7 +112,7 @@
for (int i = 0, size = batteryTips.size(); i < size; i++) {
final BatteryTip batteryTip = mBatteryTips.get(i);
- batteryTip.sanityCheck(mContext);
+ batteryTip.validityCheck(mContext);
if (batteryTip.getState() != BatteryTip.StateType.INVISIBLE) {
batteryTip.updatePreference(mCardPreference);
mBatteryTipMap.put(mCardPreference.getKey(), batteryTip);
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/batterytip/tips/BatteryTip.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/batterytip/tips/BatteryTip.java
index e2203ce..79e86f0 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/batterytip/tips/BatteryTip.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/batterytip/tips/BatteryTip.java
@@ -17,7 +17,6 @@
package com.android.car.developeroptions.fuelgauge.batterytip.tips;
import android.content.Context;
-import android.content.res.ColorStateList;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.SparseIntArray;
@@ -139,7 +138,7 @@
* Check whether data is still make sense. If not, try recover.
* @param context used to do validity check
*/
- public void sanityCheck(Context context) {
+ public void validityCheck(Context context) {
// do nothing
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/batterytip/tips/RestrictAppTip.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/batterytip/tips/RestrictAppTip.java
index 1c4b78b..aec3743 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/batterytip/tips/RestrictAppTip.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/fuelgauge/batterytip/tips/RestrictAppTip.java
@@ -107,8 +107,8 @@
}
@Override
- public void sanityCheck(Context context) {
- super.sanityCheck(context);
+ public void validityCheck(Context context) {
+ super.validityCheck(context);
// Set it invisible if there is no valid app
mRestrictAppList.removeIf(AppLabelPredicate.getInstance(context));
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/inputmethod/SpellCheckersSettings.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/inputmethod/SpellCheckersSettings.java
index dba3dd1..31b1f15 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/inputmethod/SpellCheckersSettings.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/inputmethod/SpellCheckersSettings.java
@@ -95,8 +95,8 @@
super.onResume();
mSwitchBar = ((SettingsActivity) getActivity()).getSwitchBar();
mSwitchBar.setSwitchBarText(
- R.string.spell_checker_master_switch_title,
- R.string.spell_checker_master_switch_title);
+ R.string.spell_checker_primary_switch_title,
+ R.string.spell_checker_primary_switch_title);
mSwitchBar.show();
mSwitchBar.addOnSwitchChangeListener(this);
updatePreferenceScreen();
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/location/LocationSettings.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/location/LocationSettings.java
index 361a256..92d00d7 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/location/LocationSettings.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/location/LocationSettings.java
@@ -77,8 +77,8 @@
super.onActivityCreated(savedInstanceState);
final SettingsActivity activity = (SettingsActivity) getActivity();
final SwitchBar switchBar = activity.getSwitchBar();
- switchBar.setSwitchBarText(R.string.location_settings_master_switch_title,
- R.string.location_settings_master_switch_title);
+ switchBar.setSwitchBarText(R.string.location_settings_primary_switch_title,
+ R.string.location_settings_primary_switch_title);
mSwitchBarController = new LocationSwitchBarController(activity, switchBar,
getSettingsLifecycle());
switchBar.show();
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/network/NetworkDashboardFragment.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/network/NetworkDashboardFragment.java
index 1c83d45..185d579 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/network/NetworkDashboardFragment.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/network/NetworkDashboardFragment.java
@@ -32,7 +32,7 @@
import com.android.car.developeroptions.development.featureflags.FeatureFlagPersistent;
import com.android.car.developeroptions.network.MobilePlanPreferenceController.MobilePlanPreferenceHost;
import com.android.car.developeroptions.search.BaseSearchIndexProvider;
-import com.android.car.developeroptions.wifi.WifiMasterSwitchPreferenceController;
+import com.android.car.developeroptions.wifi.WifiPrimarySwitchPreferenceController;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -93,8 +93,8 @@
MobilePlanPreferenceHost mobilePlanHost) {
final MobilePlanPreferenceController mobilePlanPreferenceController =
new MobilePlanPreferenceController(context, mobilePlanHost);
- final WifiMasterSwitchPreferenceController wifiPreferenceController =
- new WifiMasterSwitchPreferenceController(context, metricsFeatureProvider);
+ final WifiPrimarySwitchPreferenceController wifiPreferenceController =
+ new WifiPrimarySwitchPreferenceController(context, metricsFeatureProvider);
MobileNetworkPreferenceController mobileNetworkPreferenceController = null;
if (!FeatureFlagPersistent.isEnabled(context, FeatureFlags.NETWORK_INTERNET_V2)) {
mobileNetworkPreferenceController = new MobileNetworkPreferenceController(context);
@@ -189,7 +189,7 @@
public List<String> getNonIndexableKeys(Context context) {
List<String> keys = super.getNonIndexableKeys(context);
// Remove global switch as a result
- keys.add(WifiMasterSwitchPreferenceController.KEY_TOGGLE_WIFI);
+ keys.add(WifiPrimarySwitchPreferenceController.KEY_TOGGLE_WIFI);
return keys;
}
};
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/network/TopLevelNetworkEntryPreferenceController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/network/TopLevelNetworkEntryPreferenceController.java
index c90796b..3fc1e12 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/network/TopLevelNetworkEntryPreferenceController.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/network/TopLevelNetworkEntryPreferenceController.java
@@ -24,14 +24,14 @@
import com.android.car.developeroptions.R;
import com.android.car.developeroptions.Utils;
import com.android.car.developeroptions.core.BasePreferenceController;
-import com.android.car.developeroptions.wifi.WifiMasterSwitchPreferenceController;
+import com.android.car.developeroptions.wifi.WifiPrimarySwitchPreferenceController;
import java.util.ArrayList;
import java.util.List;
public class TopLevelNetworkEntryPreferenceController extends BasePreferenceController {
- private final WifiMasterSwitchPreferenceController mWifiPreferenceController;
+ private final WifiPrimarySwitchPreferenceController mWifiPreferenceController;
private final MobileNetworkPreferenceController mMobileNetworkPreferenceController;
private final TetherPreferenceController mTetherPreferenceController;
@@ -40,7 +40,7 @@
mMobileNetworkPreferenceController = new MobileNetworkPreferenceController(mContext);
mTetherPreferenceController = new TetherPreferenceController(
mContext, null /* lifecycle */);
- mWifiPreferenceController = new WifiMasterSwitchPreferenceController(
+ mWifiPreferenceController = new WifiPrimarySwitchPreferenceController(
mContext, null /* metrics */);
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/NotificationAppPreference.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/NotificationAppPreference.java
index d35ba7c..a08056d 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/NotificationAppPreference.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/NotificationAppPreference.java
@@ -23,13 +23,13 @@
import androidx.preference.PreferenceViewHolder;
import com.android.car.developeroptions.R;
-import com.android.car.developeroptions.widget.MasterSwitchPreference;
+import com.android.car.developeroptions.widget.PrimarySwitchPreference;
import com.android.settingslib.RestrictedLockUtils;
/**
* Shows an app icon, title and summary. Has a second switch touch target.
*/
-public class NotificationAppPreference extends MasterSwitchPreference {
+public class NotificationAppPreference extends PrimarySwitchPreference {
private Switch mSwitch;
private boolean mChecked;
@@ -54,7 +54,7 @@
@Override
protected int getSecondTargetResId() {
- return R.layout.preference_widget_master_switch;
+ return R.layout.preference_widget_primary_switch;
}
@Override
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/NotificationStation.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/NotificationStation.java
index e9a8081..20c34bf 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/NotificationStation.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/NotificationStation.java
@@ -543,9 +543,10 @@
if (userId == UserHandle.USER_ALL) {
userId = UserHandle.USER_SYSTEM;
}
- r = mPm.getResourcesForApplicationAsUser(pkg, userId);
+ r = mContext.createContextAsUser(UserHandle.of(userId), /* flags */ 0)
+ .getPackageManager().getResourcesForApplication(pkg);
} catch (PackageManager.NameNotFoundException ex) {
- Log.e(TAG, "Icon package not found: " + pkg, ex);
+ Log.e(TAG, "Icon package not found: " + pkg + " for user " + userId, ex);
return null;
}
} else {
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/SilentStatusBarPreferenceController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/SilentStatusBarPreferenceController.java
index d9b45c4..10bd88e 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/SilentStatusBarPreferenceController.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/SilentStatusBarPreferenceController.java
@@ -16,11 +16,8 @@
package com.android.car.developeroptions.notification;
-import static android.provider.Settings.Secure.NOTIFICATION_NEW_INTERRUPTION_MODEL;
-
import android.content.Context;
import android.os.UserHandle;
-import android.provider.Settings;
import com.android.car.developeroptions.core.TogglePreferenceController;
@@ -55,11 +52,7 @@
@Override
public int getAvailabilityStatus() {
- return Settings.Secure.getInt(
- mContext.getContentResolver(), NOTIFICATION_NEW_INTERRUPTION_MODEL, 1) != 0
- ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
+ return AVAILABLE;
}
}
-
-
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/SoundSettings.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/SoundSettings.java
index f3b587e..43ec878 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/SoundSettings.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/SoundSettings.java
@@ -200,10 +200,6 @@
@Override
public void onSampleStarting(SeekBarVolumizer sbv) {
- if (mCurrent != null && mCurrent != sbv) {
- mCurrent.stopSample();
- }
- mCurrent = sbv;
if (mCurrent != null) {
mHandler.removeMessages(STOP_SAMPLE);
mHandler.sendEmptyMessageDelayed(STOP_SAMPLE, SAMPLE_CUTOFF);
@@ -218,6 +214,15 @@
}
}
+ @Override
+ public void onStartTrackingTouch(SeekBarVolumizer sbv) {
+ // stop the ringtone when other seek bar is adjust
+ if (mCurrent != null && mCurrent != sbv) {
+ mCurrent.stopSample();
+ }
+ mCurrent = sbv;
+ }
+
public void stopSample() {
if (mCurrent != null) {
mCurrent.stopSample();
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/VolumeSeekBarPreference.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/VolumeSeekBarPreference.java
index c4cd529..8f18bb6 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/VolumeSeekBarPreference.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/notification/VolumeSeekBarPreference.java
@@ -143,6 +143,12 @@
mZenMuted = zenMuted;
updateIconView();
}
+ @Override
+ public void onStartTrackingTouch(SeekBarVolumizer sbv) {
+ if (mCallback != null) {
+ mCallback.onStartTrackingTouch(sbv);
+ }
+ }
};
final Uri sampleUri = mStream == AudioManager.STREAM_MUSIC ? getMediaVolumeUri() : null;
if (mVolumizer == null) {
@@ -206,5 +212,9 @@
public interface Callback {
void onSampleStarting(SeekBarVolumizer sbv);
void onStreamValueChanged(int stream, int progress);
+ /**
+ * Callback reporting that the seek bar is start tracking.
+ */
+ void onStartTrackingTouch(SeekBarVolumizer sbv);
}
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/BiometricFragment.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/BiometricFragment.java
index 9720013..840adb6 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/BiometricFragment.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/BiometricFragment.java
@@ -17,11 +17,10 @@
package com.android.car.developeroptions.password;
import android.app.settings.SettingsEnums;
-import android.content.DialogInterface;
-import android.hardware.biometrics.BiometricConstants;
import android.hardware.biometrics.BiometricPrompt;
import android.hardware.biometrics.BiometricPrompt.AuthenticationCallback;
import android.hardware.biometrics.BiometricPrompt.AuthenticationResult;
+import android.hardware.biometrics.PromptInfo;
import android.os.Bundle;
import android.os.CancellationSignal;
@@ -38,6 +37,8 @@
private static final String TAG = "ConfirmDeviceCredential/BiometricFragment";
+ private static final String KEY_PROMPT_INFO = "prompt_info";
+
// Re-set by the application. Should be done upon orientation changes, etc
private Executor mClientExecutor;
private AuthenticationCallback mClientCallback;
@@ -46,7 +47,7 @@
private int mUserId;
// Created/Initialized once and retained
- private Bundle mBundle;
+ private PromptInfo mPromptInfo;
private BiometricPrompt mBiometricPrompt;
private CancellationSignal mCancellationSignal;
@@ -69,22 +70,14 @@
}
};
- private final DialogInterface.OnClickListener mNegativeButtonListener =
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- mAuthenticationCallback.onAuthenticationError(
- BiometricConstants.BIOMETRIC_ERROR_NEGATIVE_BUTTON,
- mBundle.getString(BiometricPrompt.KEY_NEGATIVE_TEXT));
- }
- };
-
/**
- * @param bundle Bundle passed from {@link BiometricPrompt.Builder#buildIntent()}
+ * @param promptInfo
* @return
*/
- public static BiometricFragment newInstance(Bundle bundle) {
+ public static BiometricFragment newInstance(PromptInfo promptInfo) {
BiometricFragment biometricFragment = new BiometricFragment();
+ final Bundle bundle = new Bundle();
+ bundle.putParcelable(KEY_PROMPT_INFO, promptInfo);
biometricFragment.setArguments(bundle);
return biometricFragment;
}
@@ -116,16 +109,25 @@
super.onCreate(savedInstanceState);
setRetainInstance(true);
- mBundle = getArguments();
- mBiometricPrompt = new BiometricPrompt.Builder(getContext())
- .setTitle(mBundle.getString(BiometricPrompt.KEY_TITLE))
- .setUseDefaultTitle() // use default title if title is null/empty
- .setDeviceCredentialAllowed(true)
- .setSubtitle(mBundle.getString(BiometricPrompt.KEY_SUBTITLE))
- .setDescription(mBundle.getString(BiometricPrompt.KEY_DESCRIPTION))
- .setConfirmationRequired(
- mBundle.getBoolean(BiometricPrompt.KEY_REQUIRE_CONFIRMATION, true))
- .build();
+ final Bundle bundle = getArguments();
+ final PromptInfo promptInfo = bundle.getParcelable(KEY_PROMPT_INFO);
+
+ final BiometricPrompt.Builder builder = new BiometricPrompt.Builder(getContext())
+ .setTitle(promptInfo.getTitle())
+ .setUseDefaultTitle() // use default title if title is null/empty
+ .setDeviceCredentialAllowed(true)
+ .setSubtitle(promptInfo.getSubtitle())
+ .setDescription(promptInfo.getDescription())
+ .setTextForDeviceCredential(
+ promptInfo.getDeviceCredentialTitle(),
+ promptInfo.getDeviceCredentialSubtitle(),
+ promptInfo.getDeviceCredentialDescription())
+ .setConfirmationRequired(promptInfo.isConfirmationRequested())
+ .setDisallowBiometricsIfPolicyExists(
+ promptInfo.isDisallowBiometricsIfPolicyExists())
+ .setReceiveSystemEvents(true);
+
+ mBiometricPrompt = builder.build();
mCancellationSignal = new CancellationSignal();
// TODO: CC doesn't use crypto for now
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ChooseLockGeneric.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ChooseLockGeneric.java
index 5e03ce8..024f4ec 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ChooseLockGeneric.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ChooseLockGeneric.java
@@ -801,7 +801,6 @@
RemovalTracker tracker) {
if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected()) {
if (mFingerprintManager.hasEnrolledFingerprints(userId)) {
- mFingerprintManager.setActiveUser(userId);
// For the purposes of M and N, groupId is the same as userId.
final int groupId = userId;
Fingerprint finger = new Fingerprint(null, groupId, 0, 0);
@@ -841,9 +840,6 @@
private void removeManagedProfileFingerprintsAndFinishIfNecessary(final int parentUserId,
RemovalTracker tracker) {
- if (mFingerprintManager != null && mFingerprintManager.isHardwareDetected()) {
- mFingerprintManager.setActiveUser(UserHandle.myUserId());
- }
boolean hasChildProfile = false;
if (!mUserManager.getUserInfo(parentUserId).isManagedProfile()) {
// Current user is primary profile, remove work profile fingerprints if necessary
@@ -868,7 +864,6 @@
private void removeAllFaceForUserAndFinish(final int userId, RemovalTracker tracker) {
if (mFaceManager != null && mFaceManager.isHardwareDetected()) {
if (mFaceManager.hasEnrolledTemplates(userId)) {
- mFaceManager.setActiveUser(userId);
Face face = new Face(null, 0, 0);
mFaceManager.remove(face, userId,
new FaceManager.RemovalCallback() {
@@ -896,9 +891,6 @@
// TODO: figure out how to eliminate duplicated code. It's a bit hard due to the async-ness
private void removeManagedProfileFacesAndFinishIfNecessary(final int parentUserId,
RemovalTracker tracker) {
- if (mFaceManager != null && mFaceManager.isHardwareDetected()) {
- mFaceManager.setActiveUser(UserHandle.myUserId());
- }
boolean hasChildProfile = false;
if (!mUserManager.getUserInfo(parentUserId).isManagedProfile()) {
// Current user is primary profile, remove work profile faces if necessary
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ChooseLockPassword.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ChooseLockPassword.java
index 6bc66fb..1285aec 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ChooseLockPassword.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ChooseLockPassword.java
@@ -81,6 +81,7 @@
import com.android.internal.widget.LockscreenCredential;
import com.android.internal.widget.PasswordValidationError;
import com.android.internal.widget.TextViewInputDisabler;
+import com.android.internal.widget.VerifyCredentialResponse;
import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton;
@@ -908,20 +909,17 @@
final boolean success = mUtils.setLockCredential(
mChosenPassword, mCurrentCredential, mUserId);
Intent result = null;
+ // This path needs to be updated to support biometrics. See packages/apps/Settings
if (success && mHasChallenge) {
- byte[] token;
- try {
- token = mUtils.verifyCredential(mChosenPassword, mChallenge, mUserId);
- } catch (RequestThrottledException e) {
- token = null;
- }
-
- if (token == null) {
- Log.e(TAG, "critical: no token returned for known good password.");
+ VerifyCredentialResponse response = mUtils.verifyCredential(mChosenPassword,
+ mUserId, 0 /* flags */);
+ if (!response.isMatched()) {
+ Log.e(TAG, "critical: bad response for known good password");
}
result = new Intent();
- result.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
+ result.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN,
+ response.getGatekeeperHAT());
}
return Pair.create(success, result);
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ChooseLockPattern.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ChooseLockPattern.java
index 7bc4bcc..1e257e8 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ChooseLockPattern.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ChooseLockPattern.java
@@ -51,6 +51,7 @@
import com.android.internal.widget.LockPatternView.Cell;
import com.android.internal.widget.LockPatternView.DisplayMode;
import com.android.internal.widget.LockscreenCredential;
+import com.android.internal.widget.VerifyCredentialResponse;
import com.google.android.collect.Lists;
import com.google.android.setupcompat.template.FooterBarMixin;
@@ -861,20 +862,17 @@
final boolean success = mUtils.setLockCredential(mChosenPattern, mCurrentCredential,
userId);
Intent result = null;
+ // This path needs to be updated to support biometrics. See packages/apps/Settings
if (success && mHasChallenge) {
- byte[] token;
- try {
- token = mUtils.verifyCredential(mChosenPattern, mChallenge, userId);
- } catch (RequestThrottledException e) {
- token = null;
- }
-
- if (token == null) {
- Log.e(TAG, "critical: no token returned for known good pattern");
+ final VerifyCredentialResponse response = mUtils.verifyCredential(mChosenPattern,
+ userId, 0 /* flags */);
+ if (!response.isMatched()) {
+ Log.e(TAG, "critical: bad response for known good pattern");
}
result = new Intent();
- result.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN, token);
+ result.putExtra(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN,
+ response.getGatekeeperHAT());
}
return Pair.create(success, result);
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ConfirmDeviceCredentialActivity.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ConfirmDeviceCredentialActivity.java
index e70de45..f41ec23 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ConfirmDeviceCredentialActivity.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ConfirmDeviceCredentialActivity.java
@@ -29,6 +29,7 @@
import android.hardware.biometrics.BiometricManager;
import android.hardware.biometrics.BiometricPrompt;
import android.hardware.biometrics.BiometricPrompt.AuthenticationCallback;
+import android.hardware.biometrics.PromptInfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
@@ -175,11 +176,9 @@
mChooseLockSettingsHelper = new ChooseLockSettingsHelper(this);
final LockPatternUtils lockPatternUtils = new LockPatternUtils(this);
- final Bundle bpBundle = new Bundle();
- mTitle = bpBundle.getString(BiometricPrompt.KEY_TITLE);
- mDetails = bpBundle.getString(BiometricPrompt.KEY_SUBTITLE);
- bpBundle.putString(BiometricPrompt.KEY_TITLE, mTitle);
- bpBundle.putString(BiometricPrompt.KEY_DESCRIPTION, mDetails);
+ final PromptInfo promptInfo = new PromptInfo();
+ promptInfo.setTitle(mTitle);
+ promptInfo.setDescription(mDetails);
boolean launchedBiometric = false;
boolean launchedCDC = false;
@@ -193,7 +192,7 @@
&& !lockPatternUtils.isSeparateProfileChallengeEnabled(mUserId)) {
mCredentialMode = CREDENTIAL_MANAGED;
if (isBiometricAllowed(effectiveUserId, mUserId)) {
- showBiometricPrompt(bpBundle);
+ showBiometricPrompt(promptInfo);
launchedBiometric = true;
} else {
showConfirmCredentials();
@@ -204,7 +203,7 @@
if (isBiometricAllowed(effectiveUserId, mUserId)) {
// Don't need to check if biometrics / pin/pattern/pass are enrolled. It will go to
// onAuthenticationError and do the right thing automatically.
- showBiometricPrompt(bpBundle);
+ showBiometricPrompt(promptInfo);
launchedBiometric = true;
} else {
showConfirmCredentials();
@@ -267,15 +266,13 @@
&& !mLockPatternUtils.hasPendingEscrowToken(realUserId);
}
- private void showBiometricPrompt(Bundle bundle) {
- mBiometricManager.setActiveUser(mUserId);
-
+ private void showBiometricPrompt(PromptInfo promptInfo) {
mBiometricFragment = (BiometricFragment) getSupportFragmentManager()
.findFragmentByTag(TAG_BIOMETRIC_FRAGMENT);
boolean newFragment = false;
if (mBiometricFragment == null) {
- mBiometricFragment = BiometricFragment.newInstance(bundle);
+ mBiometricFragment = BiometricFragment.newInstance(promptInfo);
newFragment = true;
}
mBiometricFragment.setCallbacks(mExecutor, mAuthenticationCallback);
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ConfirmLockPassword.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ConfirmLockPassword.java
index 068094b..28dfb54 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ConfirmLockPassword.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ConfirmLockPassword.java
@@ -49,6 +49,7 @@
import com.android.internal.widget.LockPatternUtils;
import com.android.internal.widget.LockscreenCredential;
import com.android.internal.widget.TextViewInputDisabler;
+import com.android.internal.widget.VerifyCredentialResponse;
import com.android.settingslib.animation.AppearAnimationUtils;
import com.android.settingslib.animation.DisappearAnimationUtils;
@@ -362,28 +363,27 @@
final int localEffectiveUserId = mEffectiveUserId;
final int localUserId = mUserId;
final LockPatternChecker.OnVerifyCallback onVerifyCallback =
- new LockPatternChecker.OnVerifyCallback() {
- @Override
- public void onVerified(byte[] token, int timeoutMs) {
- mPendingLockCheck = null;
- boolean matched = false;
- if (token != null) {
- matched = true;
- if (mReturnCredentials) {
- intent.putExtra(
- ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN,
- token);
- }
- }
- mCredentialCheckResultTracker.setResult(matched, intent, timeoutMs,
- localEffectiveUserId);
+ (response, timeoutMs) -> {
+ mPendingLockCheck = null;
+ final boolean matched = response.isMatched();
+ if (matched) {
+ // This path needs to be updated to support biometrics. See
+ // packages/apps/Settings
+ if (mReturnCredentials) {
+ intent.putExtra(
+ ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN,
+ response.getGatekeeperHAT());
}
- };
+ }
+ mCredentialCheckResultTracker.setResult(matched, intent, timeoutMs,
+ localEffectiveUserId);
+ };
mPendingLockCheck = (localEffectiveUserId == localUserId)
? LockPatternChecker.verifyCredential(
- mLockPatternUtils, credential, challenge, localUserId, onVerifyCallback)
+ mLockPatternUtils, credential, localUserId, 0 /* flags */,
+ onVerifyCallback)
: LockPatternChecker.verifyTiedProfileChallenge(
- mLockPatternUtils, credential, challenge, localUserId,
+ mLockPatternUtils, credential, localUserId, 0 /* flags */,
onVerifyCallback);
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ConfirmLockPattern.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ConfirmLockPattern.java
index 96458eb..135fd42 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ConfirmLockPattern.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/ConfirmLockPattern.java
@@ -39,6 +39,7 @@
import com.android.internal.widget.LockPatternView;
import com.android.internal.widget.LockPatternView.Cell;
import com.android.internal.widget.LockscreenCredential;
+import com.android.internal.widget.VerifyCredentialResponse;
import com.android.settingslib.animation.AppearAnimationCreator;
import com.android.settingslib.animation.AppearAnimationUtils;
import com.android.settingslib.animation.DisappearAnimationUtils;
@@ -428,30 +429,28 @@
long challenge = getActivity().getIntent().getLongExtra(
ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, 0);
final LockPatternChecker.OnVerifyCallback onVerifyCallback =
- new LockPatternChecker.OnVerifyCallback() {
- @Override
- public void onVerified(byte[] token, int timeoutMs) {
- mPendingLockCheck = null;
- boolean matched = false;
- if (token != null) {
- matched = true;
- if (mReturnCredentials) {
- intent.putExtra(
- ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN,
- token);
- }
+ (response, timeoutMs) -> {
+ mPendingLockCheck = null;
+ final boolean matched = response.isMatched();
+ if (matched) {
+ // This path needs to be updated to support biometrics. See
+ // packages/apps/Settings
+ if (mReturnCredentials) {
+ intent.putExtra(
+ ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE_TOKEN,
+ response.getGatekeeperHAT());
}
- mCredentialCheckResultTracker.setResult(matched, intent, timeoutMs,
- localEffectiveUserId);
}
+ mCredentialCheckResultTracker.setResult(matched, intent, timeoutMs,
+ localEffectiveUserId);
};
mPendingLockCheck = (localEffectiveUserId == localUserId)
? LockPatternChecker.verifyCredential(
- mLockPatternUtils, pattern, challenge, localUserId,
+ mLockPatternUtils, pattern, localUserId, 0 /* flags */,
onVerifyCallback)
: LockPatternChecker.verifyTiedProfileChallenge(
- mLockPatternUtils, pattern,
- challenge, localUserId, onVerifyCallback);
+ mLockPatternUtils, pattern, localUserId, 0 /* flags */,
+ onVerifyCallback);
}
private void startCheckPattern(final LockscreenCredential pattern,
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/SetNewPasswordController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/SetNewPasswordController.java
index b213152..aba3b59 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/SetNewPasswordController.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/password/SetNewPasswordController.java
@@ -135,26 +135,20 @@
private Bundle getFingerprintChooseLockExtras() {
Bundle chooseLockExtras = new Bundle();
- long challenge = mFingerprintManager.preEnroll();
chooseLockExtras.putInt(ChooseLockGeneric.ChooseLockGenericFragment.MINIMUM_QUALITY_KEY,
PASSWORD_QUALITY_SOMETHING);
chooseLockExtras.putBoolean(
ChooseLockGeneric.ChooseLockGenericFragment.HIDE_DISABLED_PREFS, true);
- chooseLockExtras.putBoolean(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, true);
- chooseLockExtras.putLong(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, challenge);
chooseLockExtras.putBoolean(ChooseLockSettingsHelper.EXTRA_KEY_FOR_FINGERPRINT, true);
return chooseLockExtras;
}
private Bundle getFaceChooseLockExtras() {
Bundle chooseLockExtras = new Bundle();
- long challenge = mFaceManager.generateChallenge();
chooseLockExtras.putInt(ChooseLockGeneric.ChooseLockGenericFragment.MINIMUM_QUALITY_KEY,
PASSWORD_QUALITY_SOMETHING);
chooseLockExtras.putBoolean(
ChooseLockGeneric.ChooseLockGenericFragment.HIDE_DISABLED_PREFS, true);
- chooseLockExtras.putBoolean(ChooseLockSettingsHelper.EXTRA_KEY_HAS_CHALLENGE, true);
- chooseLockExtras.putLong(ChooseLockSettingsHelper.EXTRA_KEY_CHALLENGE, challenge);
chooseLockExtras.putBoolean(ChooseLockSettingsHelper.EXTRA_KEY_FOR_FACE, true);
return chooseLockExtras;
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/privacy/EnableContentCaptureWithServiceSettingsPreferenceController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/privacy/EnableContentCaptureWithServiceSettingsPreferenceController.java
index 1d0ce94..0612e85 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/privacy/EnableContentCaptureWithServiceSettingsPreferenceController.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/privacy/EnableContentCaptureWithServiceSettingsPreferenceController.java
@@ -26,7 +26,6 @@
import com.android.car.developeroptions.core.TogglePreferenceController;
import com.android.car.developeroptions.utils.ContentCaptureUtils;
-import com.android.car.developeroptions.widget.MasterSwitchPreference;
public final class EnableContentCaptureWithServiceSettingsPreferenceController
extends TogglePreferenceController {
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/search/SearchFeatureProviderImpl.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/search/SearchFeatureProviderImpl.java
index 346e379..10e19a0 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/search/SearchFeatureProviderImpl.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/search/SearchFeatureProviderImpl.java
@@ -45,13 +45,13 @@
final String packageName = caller.getPackageName();
final boolean isSettingsPackage = TextUtils.equals(packageName, context.getPackageName())
|| TextUtils.equals(getSettingsIntelligencePkgName(context), packageName);
- final boolean isWhitelistedPackage =
- isSignatureWhitelisted(context, caller.getPackageName());
- if (isSettingsPackage || isWhitelistedPackage) {
+ final boolean isAllowlistedPackage =
+ isSignatureAllowlisted(context, caller.getPackageName());
+ if (isSettingsPackage || isAllowlistedPackage) {
return;
}
throw new SecurityException("Search result intents must be called with from a "
- + "whitelisted package.");
+ + "allowlisted package.");
}
@Override
@@ -69,7 +69,7 @@
.putExtra(Intent.EXTRA_REFERRER, buildReferrer(context, pageId));
}
- protected boolean isSignatureWhitelisted(Context context, String callerPackage) {
+ protected boolean isSignatureAllowlisted(Context context, String callerPackage) {
return false;
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/slices/SettingsSliceProvider.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/slices/SettingsSliceProvider.java
index 13492c1..d56fab0 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/slices/SettingsSliceProvider.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/slices/SettingsSliceProvider.java
@@ -291,28 +291,28 @@
final List<String> keys = mSlicesDatabaseAccessor.getSliceKeys(isPlatformUri);
descendants.addAll(buildUrisFromKeys(keys, authority));
descendants.addAll(getSpecialCaseUris(isPlatformUri));
- grantWhitelistedPackagePermissions(getContext(), descendants);
+ grantAllowlistedPackagePermissions(getContext(), descendants);
return descendants;
}
@VisibleForTesting
- static void grantWhitelistedPackagePermissions(Context context, List<Uri> descendants) {
+ static void grantAllowlistedPackagePermissions(Context context, List<Uri> descendants) {
if (descendants == null) {
Log.d(TAG, "No descendants to grant permission with, skipping.");
}
- final String[] whitelistPackages =
- context.getResources().getStringArray(R.array.slice_whitelist_package_names);
- if (whitelistPackages == null || whitelistPackages.length == 0) {
- Log.d(TAG, "No packages to whitelist, skipping.");
+ final String[] allowlistPackages =
+ context.getResources().getStringArray(R.array.slice_allowlist_package_names);
+ if (allowlistPackages == null || allowlistPackages.length == 0) {
+ Log.d(TAG, "No packages to allowlist, skipping.");
return;
} else {
Log.d(TAG, String.format(
- "Whitelisting %d uris to %d pkgs.",
- descendants.size(), whitelistPackages.length));
+ "Allowlisting %d uris to %d pkgs.",
+ descendants.size(), allowlistPackages.length));
}
final SliceManager sliceManager = context.getSystemService(SliceManager.class);
for (Uri descendant : descendants) {
- for (String toPackage : whitelistPackages) {
+ for (String toPackage : allowlistPackages) {
sliceManager.grantSlicePermission(toPackage, descendant);
}
}
@@ -453,7 +453,7 @@
try {
KEY_VALUE_LIST_PARSER.setString(value);
} catch (IllegalArgumentException e) {
- Log.e(TAG, "Bad Settings Slices Whitelist flags", e);
+ Log.e(TAG, "Bad Settings Slices Allowlist flags", e);
return set;
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/users/AppRestrictionsFragment.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/users/AppRestrictionsFragment.java
index 512df21..e55a54c 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/users/AppRestrictionsFragment.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/users/AppRestrictionsFragment.java
@@ -387,7 +387,7 @@
p.setChecked(false);
p.setTitle(app.activityName);
p.setKey(getKeyForPackage(packageName));
- p.setSettingsEnabled(hasSettings && app.masterEntry == null);
+ p.setSettingsEnabled(hasSettings && app.primaryEntry == null);
p.setPersistent(false);
p.setOnPreferenceChangeListener(this);
p.setOnPreferenceClickListener(this);
@@ -401,13 +401,13 @@
// able to toggle this app ON (it's ON by default and immutable).
// Only do this for restricted profiles, not single-user restrictions
// Also don't do this for child icons
- if (app.masterEntry == null) {
+ if (app.primaryEntry == null) {
requestRestrictionsForApp(packageName, p, false);
}
} else if (!mNewUser && isAppEnabledForUser(pi)) {
p.setChecked(true);
}
- if (app.masterEntry != null) {
+ if (app.primaryEntry != null) {
p.setImmutable(true);
p.setChecked(mHelper.isPackageSelected(packageName));
}
@@ -430,13 +430,13 @@
// - Child entry that cannot see primary user accounts
// - Parent entry that can see primary user accounts
// Otherwise no summary is returned
- if (app.masterEntry != null) {
+ if (app.primaryEntry != null) {
if (mRestrictedProfile && pi.restrictedAccountType != null) {
return getString(R.string.app_sees_restricted_accounts_and_controlled_by,
- app.masterEntry.activityName);
+ app.primaryEntry.activityName);
}
return getString(R.string.user_restrictions_controlled_by,
- app.masterEntry.activityName);
+ app.primaryEntry.activityName);
} else if (pi.restrictedAccountType != null) {
return getString(R.string.app_sees_restricted_accounts);
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/users/UserDetailsSettings.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/users/UserDetailsSettings.java
index 12ca3e0..5bf8f71 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/users/UserDetailsSettings.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/users/UserDetailsSettings.java
@@ -145,7 +145,7 @@
// Update the guest's restrictions, if there is a guest
// TODO: Maybe setDefaultGuestRestrictions() can internally just set the restrictions
// on any existing guest rather than do it here with multiple Binder calls.
- List<UserInfo> users = mUserManager.getUsers(true);
+ List<UserInfo> users = mUserManager.getAliveUsers();
for (UserInfo user: users) {
if (user.isGuest()) {
UserHandle userHandle = UserHandle.of(user.id);
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/users/UserSettings.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/users/UserSettings.java
index 1913222..85d2c06 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/users/UserSettings.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/users/UserSettings.java
@@ -734,7 +734,8 @@
}
try {
ActivityManager.getService().switchUser(UserHandle.USER_SYSTEM);
- getContext().getSystemService(UserManager.class).removeUser(UserHandle.myUserId());
+ getContext().getSystemService(UserManager.class)
+ .removeUser(UserHandle.of(UserHandle.myUserId()));
} catch (RemoteException re) {
Log.e(TAG, "Unable to remove self user");
}
@@ -803,7 +804,7 @@
if (context == null) {
return;
}
- final List<UserInfo> users = mUserManager.getUsers(true);
+ final List<UserInfo> users = mUserManager.getAliveUsers();
final boolean voiceCapable = Utils.isVoiceCapable(context);
final ArrayList<Integer> missingIcons = new ArrayList<>();
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/vpn2/AppDialogFragment.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/vpn2/AppDialogFragment.java
index 472ea18..ac2bd9e 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/vpn2/AppDialogFragment.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/vpn2/AppDialogFragment.java
@@ -33,9 +33,9 @@
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.Fragment;
-import com.android.internal.net.VpnConfig;
import com.android.car.developeroptions.R;
import com.android.car.developeroptions.core.instrumentation.InstrumentedDialogFragment;
+import com.android.internal.net.VpnConfig;
/**
* Fragment wrapper around an {@link AppDialog}.
@@ -167,7 +167,7 @@
try {
if (mPackageInfo.packageName.equals(VpnUtils.getConnectedPackage(mService, userId))) {
mService.setAlwaysOnVpnPackage(userId, null, /* lockdownEnabled */ false,
- /* lockdownWhitelist */ null);
+ /* lockdownAllowlist */ null);
mService.prepareVpn(mPackageInfo.packageName, VpnConfig.LEGACY_VPN, userId);
}
} catch (RemoteException e) {
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/vpn2/AppManagementFragment.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/vpn2/AppManagementFragment.java
index 26d1524..b003f51 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/vpn2/AppManagementFragment.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/vpn2/AppManagementFragment.java
@@ -41,12 +41,12 @@
import androidx.fragment.app.DialogFragment;
import androidx.preference.Preference;
-import com.android.internal.net.VpnConfig;
-import com.android.internal.util.ArrayUtils;
import com.android.car.developeroptions.R;
import com.android.car.developeroptions.SettingsPreferenceFragment;
import com.android.car.developeroptions.core.SubSettingLauncher;
import com.android.car.developeroptions.core.instrumentation.InstrumentedDialogFragment;
+import com.android.internal.net.VpnConfig;
+import com.android.internal.util.ArrayUtils;
import com.android.settingslib.RestrictedPreference;
import com.android.settingslib.RestrictedSwitchPreference;
@@ -225,7 +225,7 @@
private boolean setAlwaysOnVpn(boolean isEnabled, boolean isLockdown) {
return mConnectivityManager.setAlwaysOnVpnPackageForUser(mUserId,
- isEnabled ? mPackageName : null, isLockdown, /* lockdownWhitelist */ null);
+ isEnabled ? mPackageName : null, isLockdown, /* lockdownAllowlist */ null);
}
private void updateUI() {
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/vpn2/ConfigDialogFragment.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/vpn2/ConfigDialogFragment.java
index 4504508..3e9519c 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/vpn2/ConfigDialogFragment.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/vpn2/ConfigDialogFragment.java
@@ -34,10 +34,10 @@
import androidx.appcompat.app.AlertDialog;
-import com.android.internal.net.LegacyVpnInfo;
-import com.android.internal.net.VpnProfile;
import com.android.car.developeroptions.R;
import com.android.car.developeroptions.core.instrumentation.InstrumentedDialogFragment;
+import com.android.internal.net.LegacyVpnInfo;
+import com.android.internal.net.VpnProfile;
/**
* Fragment wrapper around a {@link ConfigDialog}.
@@ -176,7 +176,7 @@
final ConnectivityManager conn = ConnectivityManager.from(mContext);
conn.setAlwaysOnVpnPackageForUser(UserHandle.myUserId(), null,
- /* lockdownEnabled */ false, /* lockdownWhitelist */ null);
+ /* lockdownEnabled */ false, /* lockdownAllowlist */ null);
VpnUtils.setLockdownVpn(mContext, profile.key);
} else {
// update only if lockdown vpn has been changed
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/widget/MasterCheckBoxPreference.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/widget/PrimaryCheckBoxPreference.java
similarity index 88%
rename from tests/CarDeveloperOptions/src/com/android/car/developeroptions/widget/MasterCheckBoxPreference.java
rename to tests/CarDeveloperOptions/src/com/android/car/developeroptions/widget/PrimaryCheckBoxPreference.java
index 18b39e8..2a79ca1 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/widget/MasterCheckBoxPreference.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/widget/PrimaryCheckBoxPreference.java
@@ -31,32 +31,32 @@
* A custom preference that provides inline checkbox. It has a mandatory field for title, and
* optional fields for icon and sub-text.
*/
-public class MasterCheckBoxPreference extends TwoTargetPreference {
+public class PrimaryCheckBoxPreference extends TwoTargetPreference {
private CheckBox mCheckBox;
private boolean mChecked;
private boolean mEnableCheckBox = true;
- public MasterCheckBoxPreference(Context context, AttributeSet attrs,
+ public PrimaryCheckBoxPreference(Context context, AttributeSet attrs,
int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
- public MasterCheckBoxPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+ public PrimaryCheckBoxPreference(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
- public MasterCheckBoxPreference(Context context, AttributeSet attrs) {
+ public PrimaryCheckBoxPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
- public MasterCheckBoxPreference(Context context) {
+ public PrimaryCheckBoxPreference(Context context) {
super(context);
}
@Override
protected int getSecondTargetResId() {
- return R.layout.preference_widget_master_checkbox;
+ return R.layout.preference_widget_primary_checkbox;
}
@Override
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/widget/MasterSwitchController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/widget/PrimarySwitchController.java
similarity index 86%
rename from tests/CarDeveloperOptions/src/com/android/car/developeroptions/widget/MasterSwitchController.java
rename to tests/CarDeveloperOptions/src/com/android/car/developeroptions/widget/PrimarySwitchController.java
index 15ca8fe..cae59c9 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/widget/MasterSwitchController.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/widget/PrimarySwitchController.java
@@ -21,15 +21,15 @@
import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
/*
- * The switch controller that is used to update the switch widget in the MasterSwitchPreference
+ * The switch controller that is used to update the switch widget in the PrimarySwitchPreference
* layout.
*/
-public class MasterSwitchController extends SwitchWidgetController implements
- Preference.OnPreferenceChangeListener {
+public class PrimarySwitchController extends SwitchWidgetController implements
+ Preference.OnPreferenceChangeListener {
- private final MasterSwitchPreference mPreference;
+ private final PrimarySwitchPreference mPreference;
- public MasterSwitchController(MasterSwitchPreference preference) {
+ public PrimarySwitchController(PrimarySwitchPreference preference) {
mPreference = preference;
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/widget/MasterSwitchPreference.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/widget/PrimarySwitchPreference.java
similarity index 88%
rename from tests/CarDeveloperOptions/src/com/android/car/developeroptions/widget/MasterSwitchPreference.java
rename to tests/CarDeveloperOptions/src/com/android/car/developeroptions/widget/PrimarySwitchPreference.java
index 70344cd..602711f 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/widget/MasterSwitchPreference.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/widget/PrimarySwitchPreference.java
@@ -32,32 +32,32 @@
* A custom preference that provides inline switch toggle. It has a mandatory field for title, and
* optional fields for icon and sub-text.
*/
-public class MasterSwitchPreference extends TwoTargetPreference {
+public class PrimarySwitchPreference extends TwoTargetPreference {
private Switch mSwitch;
private boolean mChecked;
private boolean mEnableSwitch = true;
- public MasterSwitchPreference(Context context, AttributeSet attrs,
+ public PrimarySwitchPreference(Context context, AttributeSet attrs,
int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
- public MasterSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+ public PrimarySwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
- public MasterSwitchPreference(Context context, AttributeSet attrs) {
+ public PrimarySwitchPreference(Context context, AttributeSet attrs) {
super(context, attrs);
}
- public MasterSwitchPreference(Context context) {
+ public PrimarySwitchPreference(Context context) {
super(context);
}
@Override
protected int getSecondTargetResId() {
- return R.layout.preference_widget_master_switch;
+ return R.layout.preference_widget_primary_switch;
}
@Override
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/wifi/WifiMasterSwitchPreferenceController.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/wifi/WifiPrimarySwitchPreferenceController.java
similarity index 87%
rename from tests/CarDeveloperOptions/src/com/android/car/developeroptions/wifi/WifiMasterSwitchPreferenceController.java
rename to tests/CarDeveloperOptions/src/com/android/car/developeroptions/wifi/WifiPrimarySwitchPreferenceController.java
index 32a3c9a..463365c 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/wifi/WifiMasterSwitchPreferenceController.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/wifi/WifiPrimarySwitchPreferenceController.java
@@ -21,8 +21,8 @@
import com.android.car.developeroptions.R;
import com.android.car.developeroptions.core.PreferenceControllerMixin;
-import com.android.car.developeroptions.widget.MasterSwitchController;
-import com.android.car.developeroptions.widget.MasterSwitchPreference;
+import com.android.car.developeroptions.widget.PrimarySwitchController;
+import com.android.car.developeroptions.widget.PrimarySwitchPreference;
import com.android.car.developeroptions.widget.SummaryUpdater;
import com.android.settingslib.core.AbstractPreferenceController;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
@@ -32,18 +32,18 @@
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
-public class WifiMasterSwitchPreferenceController extends AbstractPreferenceController
+public class WifiPrimarySwitchPreferenceController extends AbstractPreferenceController
implements PreferenceControllerMixin, SummaryUpdater.OnSummaryChangeListener,
LifecycleObserver, OnResume, OnPause, OnStart, OnStop {
public static final String KEY_TOGGLE_WIFI = "toggle_wifi";
- private MasterSwitchPreference mWifiPreference;
+ private PrimarySwitchPreference mWifiPreference;
private WifiEnabler mWifiEnabler;
private final WifiSummaryUpdater mSummaryHelper;
private final MetricsFeatureProvider mMetricsFeatureProvider;
- public WifiMasterSwitchPreferenceController(Context context,
+ public WifiPrimarySwitchPreferenceController(Context context,
MetricsFeatureProvider metricsFeatureProvider) {
super(context);
mMetricsFeatureProvider = metricsFeatureProvider;
@@ -84,7 +84,7 @@
@Override
public void onStart() {
- mWifiEnabler = new WifiEnabler(mContext, new MasterSwitchController(mWifiPreference),
+ mWifiEnabler = new WifiEnabler(mContext, new PrimarySwitchController(mWifiPreference),
mMetricsFeatureProvider);
}
diff --git a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/wifi/WifiSettings.java b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/wifi/WifiSettings.java
index 963806b..2fc350c 100644
--- a/tests/CarDeveloperOptions/src/com/android/car/developeroptions/wifi/WifiSettings.java
+++ b/tests/CarDeveloperOptions/src/com/android/car/developeroptions/wifi/WifiSettings.java
@@ -215,8 +215,8 @@
setProgressBarVisible(false);
}
((SettingsActivity) activity).getSwitchBar().setSwitchBarText(
- R.string.wifi_settings_master_switch_title,
- R.string.wifi_settings_master_switch_title);
+ R.string.wifi_settings_primary_switch_title,
+ R.string.wifi_settings_primary_switch_title);
}
@Override
@@ -470,7 +470,7 @@
if (mSelectedAccessPoint.isSaved() || mSelectedAccessPoint.isEphemeral()) {
// Allow forgetting a network if either the network is saved or ephemerally
- // connected. (In the latter case, "forget" blacklists the network so it won't
+ // connected. (In the latter case, "forget" denylists the network so it won't
// be used again, ephemerally).
menu.add(Menu.NONE, MENU_ID_FORGET, 0, R.string.wifi_menu_forget);
}
diff --git a/tests/CarDeveloperOptions2/Android.bp b/tests/CarDeveloperOptions2/Android.bp
new file mode 100644
index 0000000..6613ced
--- /dev/null
+++ b/tests/CarDeveloperOptions2/Android.bp
@@ -0,0 +1,33 @@
+//
+// Copyright (C) 2020 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.
+//
+android_app {
+ name: "CarDeveloperOptions2",
+ platform_apis: true,
+ certificate: "platform",
+ system_ext_specific: true,
+ privileged: true,
+ required: [
+ "privapp_whitelist_com.android.settings",
+ "settings-platform-compat-config",
+ ],
+ libs: ["android.car-stubs"],
+ static_libs: ["Settings-core", "car-ui-lib"],
+ srcs: ["src/**/*.java"],
+ resource_dirs: ["res"],
+ optimize: {
+ proguard_flags_files: ["proguard.flags"],
+ },
+}
diff --git a/tests/CarDeveloperOptions2/AndroidManifest.xml b/tests/CarDeveloperOptions2/AndroidManifest.xml
new file mode 100644
index 0000000..d822b1d
--- /dev/null
+++ b/tests/CarDeveloperOptions2/AndroidManifest.xml
@@ -0,0 +1,2659 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2020 Google Inc.
+
+ 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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ coreApp="true"
+ package="com.android.settings"
+ android:sharedUserId="android.uid.system">
+
+ <application android:label="@string/settings_label"
+ tools:node="merge">
+
+ <activity
+ android:name="com.android.car.developeroptions.CarDevelopmentSettingsDashboardActivity"
+ android:enabled="false"
+ android:exported="true"
+ android:icon="@drawable/ic_settings_development"
+ android:label="@string/development_settings_title"
+ android:taskAffinity=""
+ android:theme="@style/Theme.CarDeveloperOptions">
+ <intent-filter android:priority="1">
+ <action android:name="android.settings.APPLICATION_DEVELOPMENT_SETTINGS"/>
+ <action android:name="com.android.settings.APPLICATION_DEVELOPMENT_SETTINGS"/>
+ <category android:name="android.intent.category.DEFAULT"/>
+ </intent-filter>
+ <meta-data android:name="com.android.settings.summary"
+ android:resource="@string/summary_empty"/>
+ <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+ android:value="com.android.car.developeroptions.CarDevelopmentSettingsDashboardFragment"/>
+ <meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
+ android:value="true"/>
+ </activity>
+
+ <!-- Removing all other phone settings intents. -->
+
+ <activity
+ android:name="Settings"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".homepage.SettingsHomepageActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".network.telephony.MobileNetworkActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".Settings$CreateShortcutActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".Settings$NetworkDashboardActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".Settings$MobileNetworkListActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".Settings$ConnectedDeviceDashboardActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="AirplaneModeVoiceActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".search.SearchResultTrampoline"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$WifiSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".wifi.WifiPickerActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$ConfigureWifiSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$SavedAccessPointsSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".Settings$WifiInfoActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".wifi.WifiConfigInfo"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".Settings$WifiAPITestActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".wifi.WifiStatusTest"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".wifi.WifiNoInternetDialog"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$ApnSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$AssistGestureSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$FaceSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$FingerprintSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".bluetooth.DevicePickerActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".network.TetherProvisioningActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$TetherSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$WifiTetherSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$WifiP2pSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$VpnSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$DataSaverSummaryActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$DateTimeSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$LocalePickerActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".localepicker.LocalePickerWithRegionActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".Settings$LanguageAndInputSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$AvailableVirtualKeyboardActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$ManageAssistActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$KeyboardLayoutPickerActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$PhysicalKeyboardActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$SpellCheckersSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".inputmethod.InputMethodAndSubtypeEnablerActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$UserDictionarySettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".inputmethod.UserDictionaryAddWordActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$ZenModeSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".notification.zen.ZenSuggestionActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".notification.zen.ZenOnboardingActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$ZenModeAutomationSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$WallpaperSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".wallpaper.WallpaperSuggestionActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".wallpaper.StyleSuggestionActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$ZenModeScheduleRuleSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$ZenModeEventRuleSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$DisplaySettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$NightDisplaySettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+
+ tools:replace="android:exported, android:enabled">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$DarkThemeSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported, android:enabled">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$NightDisplaySuggestionActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported, android:enabled">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".Settings$MyDeviceInfoActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="SettingsLicenseActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".Settings$ModuleLicensesActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$ManageApplicationsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$ManageDomainUrlsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$AppMemoryUsageActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$HighPowerApplicationsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".datausage.AppDataUsageActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".fuelgauge.RequestIgnoreBatteryOptimizations"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".slices.SliceDeepLinkSpringBoard"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".applications.InstalledAppDetailsTop"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".applications.InstalledAppOpenByDefaultActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$RunningServicesActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$StorageUseActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$NotificationStationActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".notification.history.NotificationHistoryActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".notification.zen.ZenModeVoiceActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$LocationSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$ScanningSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".Settings$SecurityDashboardActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="MonitoringCertInfoActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$TrustedCredentialsSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$PrivacySettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$PrivacyDashboardActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".security.CredentialStorage"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".security.InstallCaCertificateWarning"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$DeviceAdminSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".applications.specialaccess.deviceadmin.DeviceAdminAdd"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".applications.specialaccess.deviceadmin.ProfileOwnerAdd"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$UsageAccessSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$AppUsageAccessSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$IccLockSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$AccessibilitySettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$AccessibilityDetailsSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".accessibility.AccessibilitySettingsForSetupWizardActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$AccessibilityDaltonizerSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$CaptioningSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".SettingsTutorialDialogWrapperActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$TextToSpeechSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$EnterprisePrivacySettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".password.ConfirmDeviceCredentialActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".password.ConfirmDeviceCredentialActivity$InternalActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".SetupRedactionInterstitial"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".notification.RedactionInterstitial"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".notification.RedactionSettingsStandalone"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".password.ConfirmLockPattern"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".password.ConfirmLockPassword"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".password.ForgotPasswordActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".biometrics.face.FaceEnrollIntroduction"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".biometrics.face.FaceEnrollEducation"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".biometrics.face.FaceEnrollEnrolling"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".biometrics.face.FaceEnrollFinish"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".biometrics.BiometricEnrollActivity$InternalActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".biometrics.BiometricEnrollActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".biometrics.fingerprint.FingerprintSettings"
+ android:exported="false"
+ tools:replace="android:exported"/>
+
+ <activity
+ android:name=".biometrics.fingerprint.FingerprintEnrollFindSensor"
+ android:exported="false"
+ tools:replace="android:exported"/>
+
+ <activity
+ android:name=".biometrics.fingerprint.FingerprintEnrollEnrolling"
+ android:exported="false"
+ tools:replace="android:exported"/>
+
+ <activity
+ android:name=".biometrics.fingerprint.FingerprintEnrollFinish"
+ android:exported="false"
+ tools:replace="android:exported"/>
+
+ <activity
+ android:name=".biometrics.fingerprint.FingerprintEnrollIntroduction"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".biometrics.fingerprint.SetupFingerprintEnrollFindSensor"
+ android:exported="false"
+ tools:replace="android:exported"/>
+
+ <activity
+ android:name=".biometrics.fingerprint.SetupFingerprintEnrollEnrolling"
+ android:exported="false"
+ tools:replace="android:exported"/>
+
+ <activity
+ android:name=".biometrics.fingerprint.SetupFingerprintEnrollFinish"
+ android:exported="false"
+ tools:replace="android:exported"/>
+
+ <activity
+ android:name=".biometrics.fingerprint.SetupFingerprintEnrollIntroduction"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".biometrics.fingerprint.FingerprintSuggestionActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".password.ConfirmLockPattern$InternalActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".password.ConfirmLockPassword$InternalActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".password.SetupChooseLockGeneric"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".password.SetupChooseLockGeneric$InternalActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".password.ChooseLockGeneric"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".password.SetNewPasswordActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".password.ScreenLockSuggestionActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".biometrics.fingerprint.FingerprintEnrollSuggestionActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".password.ChooseLockGeneric$InternalActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".password.SetupChooseLockPattern"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".password.ChooseLockPattern"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".password.SetupChooseLockPassword"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".password.ChooseLockPassword"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".SetupEncryptionInterstitial"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".EncryptionInterstitial"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+
+ android:name=".Settings$StorageDashboardActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$PrivateVolumeSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$PublicVolumeSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$PrivateVolumeForgetActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".deviceinfo.StorageWizardInit"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".deviceinfo.StorageWizardFormatProgress"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".deviceinfo.StorageWizardFormatSlow"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".deviceinfo.StorageWizardMigrateConfirm"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".deviceinfo.StorageWizardMigrateProgress"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".deviceinfo.StorageWizardReady"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".deviceinfo.StorageWizardMoveConfirm"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".deviceinfo.StorageWizardMoveProgress"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$ApnEditorActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$DevelopmentSettingsDashboardActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$PrintSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$PrintJobSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$WebViewAppPickerActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$BugReportHandlerPickerActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".bluetooth.BluetoothPairingDialog"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".bluetooth.RequestPermissionActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".wifi.WifiScanModeActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".Settings$UsbDetailsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".RemoteBugreportActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".bluetooth.RequestPermissionHelperActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".bluetooth.BluetoothPermissionActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="ActivityPicker"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$AndroidBeamSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$WifiDisplaySettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$TestingSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ android:label="@string/testing"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="AppWidgetPickActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="AllowBindAppWidgetActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="UsageStatsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$PowerUsageSummaryActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$BatterySaverSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".fuelgauge.BatterySaverModeVoiceActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$AccountSyncSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$ManagedProfileSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="com.android.settings.accounts.AddAccountSettings"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$ChooseAccountActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".CryptKeeper"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".FallbackHome"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".CryptKeeper$FadeToBlack"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".CryptKeeperConfirm$Blank"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$CryptKeeperSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$DataUsageSummaryActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$MobileDataUsageListActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$DreamSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$UserSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$PaymentSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".nfc.PaymentDefaultDialog"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".nfc.HowItWorks"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$NotificationAccessSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$NotificationAccessDetailsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$NotificationAssistantSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$VrListenersSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$PictureInPictureSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$AppPictureInPictureSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$InteractAcrossProfilesSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$AppInteractAcrossProfilesSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$ZenAccessDetailSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$ZenAccessSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$ConfigureNotificationSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$ConversationListSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$AppBubbleNotificationSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$SoundSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$NotificationAppListActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$AppNotificationSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$ChannelNotificationSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="ManualDisplayActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported, android:enabled">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="RegulatoryInfoDisplayActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported, android:enabled">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".notification.NotificationAccessConfirmationActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".wifi.RequestToggleWiFiActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".wifi.WifiDialogActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".wifi.NetworkRequestDialogActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".sim.SimDialogActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".flashlight.FlashlightHandleActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$WifiCallingSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".wifi.calling.WifiCallingSuggestionActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$OverlaySettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$AppDrawOverlaySettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$WriteSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$AppWriteSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$ManageExternalSourcesActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$ManageAppExternalSourcesActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".enterprise.ActionDisabledByAdminDialog"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$ManageExternalStorageActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$AppManageExternalStorageActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".backup.UserBackupSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$AutomaticStorageManagerSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".fuelgauge.AdvancedPowerUsageDetailActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".Settings$AppAndNotificationDashboardActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".Settings$AccountDashboardActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".Settings$SystemDashboardActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".support.SupportDashboardActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+
+ tools:replace="android:exported, android:enabled">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".HelpTrampoline"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported, android:enabled">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".applications.autofill.AutofillPickerActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".applications.autofill.AutofillPickerTrampolineActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$AdvancedConnectedDeviceActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$BluetoothDeviceDetailActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".panel.SettingsPanelActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".wifi.addappnetworks.AddAppNetworksActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".wifi.dpp.WifiDppConfiguratorActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".wifi.dpp.WifiDppEnrolleeActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".homepage.contextualcards.ContextualCardFeedbackDialog"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name=".homepage.contextualcards.FaceReEnrollDialog"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$WifiCallingDisclaimerActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$BatterySaverScheduleSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$GlobalActionsPanelSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$PowerMenuSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$DeviceControlsSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$GestureNavigationSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported, android:enabled">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity
+ android:name="Settings$MediaControlsSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity>
+
+ <activity-alias
+ android:name="Settings"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity-alias>
+
+ <activity-alias
+ android:name="Settings$BluetoothSettingsActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity-alias>
+
+ <activity-alias
+ android:name=".bluetooth.BluetoothSettings"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity-alias>
+
+ <activity-alias
+ android:name=".TetherSettings"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity-alias>
+
+ <activity-alias
+ android:name="LanguageSettings"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity-alias>
+
+ <activity-alias
+ android:name=".applications.ManageApplications"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity-alias>
+
+ <activity-alias
+ android:name=".RunningServices"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity-alias>
+
+ <activity-alias
+ android:name=".applications.StorageUse"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity-alias>
+
+ <activity-alias
+ android:name=".applications.InstalledAppDetails"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity-alias>
+
+ <activity-alias
+ android:name="DeviceAdminSettings"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity-alias>
+
+ <activity-alias
+ android:name=".FontSizeSettingsForSetupWizardActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity-alias>
+
+ <activity-alias
+ android:name=".ConfirmDeviceCredentialActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity-alias>
+
+ <activity-alias
+ android:name=".SetupFingerprintSuggestionActivity"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity-alias>
+
+ <activity-alias
+ android:name=".WebViewImplementation"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity-alias>
+
+ <activity-alias
+ android:name="MediaOutputSlice"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </activity-alias>
+
+ <provider
+ android:name="androidx.core.content.FileProvider"
+ android:authorities="com.android.car.developeroptions"
+ android:exported="false"
+ android:grantUriPermissions="true"
+ tools:node="merge"
+ tools:replace="android:authorities">
+ <meta-data
+ android:name="android.support.FILE_PROVIDER_PATHS"
+ android:resource="@xml/file_paths"/>
+ </provider>
+
+ <provider
+ android:name=".deviceinfo.legal.ModuleLicenseProvider"
+ tools:node="remove"/>
+
+ <provider
+ android:name=".search.SettingsSearchIndexablesProvider"
+ tools:node="remove"/>
+
+ <provider
+ android:name=".dashboard.suggestions.SuggestionStateProvider"
+ tools:node="remove"/>
+
+ <provider
+ android:name=".dashboard.SummaryProvider"
+ tools:node="remove"/>
+
+ <provider
+ android:name=".slices.SettingsSliceProvider"
+ tools:node="remove"/>
+
+ <provider
+ android:name=".homepage.contextualcards.CardContentProvider"
+ tools:node="remove"/>
+
+ <provider
+ android:name=".homepage.contextualcards.SettingsContextualCardProvider"
+ tools:node="remove"/>
+
+ <receiver
+ android:name=".SettingsInitialize"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </receiver>
+
+ <receiver
+ android:name=".deviceinfo.StorageUnmountReceiver"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </receiver>
+
+ <receiver
+ android:name=".bluetooth.BluetoothPairingRequest"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </receiver>
+
+ <receiver
+ android:name=".bluetooth.BluetoothPermissionRequest"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </receiver>
+
+ <receiver
+ android:name=".TestingSettingsBroadcastReceiver"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </receiver>
+
+ <receiver
+ android:name="com.android.settingslib.bluetooth.BluetoothDiscoverableTimeoutReceiver"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </receiver>
+
+ <receiver
+ android:name=".users.ProfileUpdateReceiver"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </receiver>
+
+ <receiver
+ android:name=".sim.SimSelectNotification"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </receiver>
+
+ <receiver
+ android:name=".wifi.slice.ConnectToWifiHandler"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </receiver>
+
+ <receiver
+ android:name=".slices.SliceBroadcastReceiver"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </receiver>
+
+ <receiver
+ android:name=".slices.SliceRelayReceiver"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </receiver>
+
+ <receiver
+ android:name=".fuelgauge.batterytip.AnomalyDetectionReceiver"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </receiver>
+
+ <receiver
+ android:name=".fuelgauge.batterytip.AnomalyConfigReceiver"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </receiver>
+
+ <receiver
+ android:name=".media.BluetoothPairingReceiver"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </receiver>
+
+ <service
+ android:name=".wifi.tether.TetherService"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </service>
+
+ <service
+ android:name=".bluetooth.BluetoothPairingService"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </service>
+
+ <service
+ android:name=".SettingsDumpService"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </service>
+
+ <service
+ android:name=".development.qstile.DevelopmentTiles$ShowLayout"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </service>
+
+ <service
+ android:name=".development.qstile.DevelopmentTiles$GPUProfiling"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </service>
+
+ <service
+ android:name=".development.qstile.DevelopmentTiles$ForceRTL"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </service>
+
+ <service
+ android:name=".development.qstile.DevelopmentTiles$AnimationSpeed"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </service>
+
+ <service
+ android:name=".development.qstile.DevelopmentTiles$WinscopeTrace"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </service>
+
+ <service
+ android:name=".development.qstile.DevelopmentTiles$SensorsOff"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </service>
+
+ <service
+ android:name=".development.qstile.DevelopmentTiles$WirelessDebugging"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </service>
+
+ <service
+ android:name=".development.qstile.DevelopmentTiles$ShowTaps"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </service>
+
+ <service
+ android:name=".fuelgauge.batterytip.AnomalyCleanupJobService"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </service>
+
+ <service
+ android:name=".fuelgauge.batterytip.AnomalyConfigJobService"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </service>
+
+ <service
+ android:name=".fuelgauge.batterytip.AnomalyDetectionJobService"
+ android:enabled="false"
+ android:exported="false"
+ tools:node="merge"
+ tools:replace="android:exported">
+ <intent-filter tools:node="removeAll"/>
+ </service>
+
+ </application>
+</manifest>
diff --git a/tests/CarDeveloperOptions2/proguard.flags b/tests/CarDeveloperOptions2/proguard.flags
new file mode 100644
index 0000000..4b81318
--- /dev/null
+++ b/tests/CarDeveloperOptions2/proguard.flags
@@ -0,0 +1,4 @@
+-keep public class com.android.car.developeroptions.CarDevelopmentSettingsDashboardFragment
+-keep public class com.android.settings.applications.RunningServices
+-keep public class com.android.settings.development.compat.PlatformCompatDashboard
+-keep public class com.android.settings.fuelgauge.InactiveApps
diff --git a/tests/CarDeveloperOptions2/res/layout/preference_list_fragment.xml b/tests/CarDeveloperOptions2/res/layout/preference_list_fragment.xml
new file mode 100644
index 0000000..6847081
--- /dev/null
+++ b/tests/CarDeveloperOptions2/res/layout/preference_list_fragment.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2020 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.
+ -->
+<!--
+ Including a copy of this file from phone settings because the way
+ androidx.preference.PreferenceFragmentCompat references this layout requires it to be overlaid
+ in this package's resources.
+
+ This file should be mostly kept consistent with the preference_list_fragment layout found in
+ packages/apps/Settings.
+-->
+<LinearLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/container_material"
+ android:orientation="vertical"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:background="@android:color/transparent">
+
+ <FrameLayout android:id="@+id/pinned_header"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="?android:attr/windowBackground"
+ android:elevation="1dp"
+ android:visibility="gone"/>
+
+ <FrameLayout
+ android:id="@android:id/list_container"
+ android:layout_height="0px"
+ android:layout_weight="1"
+ android:layout_width="match_parent">
+
+ <include layout="@layout/loading_container" />
+
+ </FrameLayout>
+
+ <TextView android:id="@android:id/empty"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:padding="@*android:dimen/preference_fragment_padding_side"
+ android:layout_gravity="center"
+ android:gravity="center_vertical"
+ android:visibility="gone" />
+
+ <LinearLayout
+ android:theme="@style/Theme.TabTheme"
+ android:id="@+id/tab_container"
+ android:clipToPadding="true"
+ android:clipChildren="true"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:visibility="gone">
+
+ <com.google.android.material.tabs.TabLayout
+ android:background="@android:color/transparent"
+ android:id="@+id/tabs"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layoutDirection="ltr"
+ app:tabMaxWidth="0dp"
+ app:tabGravity="fill"
+ app:tabMode="fixed"
+ app:tabIndicatorColor="@*android:color/accent_device_default"
+ app:tabSelectedTextColor="@*android:color/accent_device_default"
+ app:tabTextAppearance="@style/TextAppearance.Tab"
+ app:tabTextColor="?android:attr/textColorSecondary"/>
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="1dp"
+ android:background="?android:attr/listDivider"/>
+
+ <androidx.viewpager.widget.ViewPager
+ android:id="@+id/view_pager"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ </androidx.viewpager.widget.ViewPager>
+ </LinearLayout>
+
+</LinearLayout>
diff --git a/tests/CarDeveloperOptions2/res/values/themes.xml b/tests/CarDeveloperOptions2/res/values/themes.xml
new file mode 100644
index 0000000..1c873a9
--- /dev/null
+++ b/tests/CarDeveloperOptions2/res/values/themes.xml
@@ -0,0 +1,47 @@
+<!--
+ ~ Copyright (C) 2020 The Android Open Source Project
+ ~
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
+ ~ you may not use this file except in compliance with the License.
+ ~ You may obtain a copy of the License at
+ ~
+ ~ http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing, software
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ ~ See the License for the specific language governing permissions and
+ ~ limitations under the License.
+ -->
+
+<resources>
+ <style name="Theme.AlertDialog.Base" parent="@style/Theme.AppCompat.DayNight.Dialog.Alert">
+ <item name="colorAccent">@*android:color/accent_device_default_light</item>
+ <item name="android:colorBackground">@*android:color/background_floating_device_default_light</item>
+ </style>
+
+ <style name="Theme.AlertDialog" parent="Theme.AlertDialog.Base">
+ <item name="android:windowSoftInputMode">adjustResize</item>
+ <item name="android:clipToPadding">true</item>
+ <item name="android:clipChildren">true</item>
+ <item name="android:textColor">@*android:color/car_body1</item>
+ <item name="android:textColorPrimary">@*android:color/car_body1</item>
+ <item name="android:colorAccent">@*android:color/car_body1</item>
+ <item name="textColorAlertDialogListItem">@*android:color/car_body1</item>
+
+ <!-- Redefine the ActionBar style for contentInsetStart -->
+ <item name="android:actionBarStyle">@style/Widget.ActionBar</item>
+
+ <!-- copied from Theme.DeviceDefault.Dialog.Alert -->
+ <item name="dialogCornerRadius">@*android:dimen/config_dialogCornerRadius</item>
+ <item name="android:windowTitleStyle">@*android:style/DialogWindowTitle.DeviceDefault</item>
+ <item name="android:textAppearanceMedium">@style/TextAppearance.DialogMessage</item>
+ <item name="buttonBarButtonStyle">@*android:style/Widget.DeviceDefault.Button.ButtonBar.AlertDialog</item>
+ </style>
+
+ <style name="Theme.CarDeveloperOptions" parent="@style/Theme.CarUi.WithToolbar">
+ <item name="alertDialogTheme">@style/Theme.AlertDialog</item>
+ <item name="switchBarTheme">@style/ThemeOverlay.SwitchBar.Settings</item>
+ </style>
+
+</resources>
\ No newline at end of file
diff --git a/tests/CarDeveloperOptions2/src/com/android/car/developeroptions/CarDevelopmentConstants.java b/tests/CarDeveloperOptions2/src/com/android/car/developeroptions/CarDevelopmentConstants.java
new file mode 100644
index 0000000..9275d75
--- /dev/null
+++ b/tests/CarDeveloperOptions2/src/com/android/car/developeroptions/CarDevelopmentConstants.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2020 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.car.developeroptions;
+
+import java.util.Arrays;
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+public class CarDevelopmentConstants {
+ // Preferences
+ static final String BUGREPORT = "bugreport";
+ static final String BUGREPORT_IN_POWER = "bugreport_in_power";
+ static final String GRAPHICS_DRIVER_DASHBOARD = "graphics_driver_dashboard";
+ static final String QUICK_SETTINGS_TILES = "quick_settings_tiles";
+ static final String SHARED_DATA = "shared_data";
+ static final String SYSTEM_SERVER_HEAP_DUMP = "system_server_heap_dump";
+ static final String TOGGLE_ADB_WIRELESS = "toggle_adb_wireless";
+
+ static final Set<String> PREFERENCES_TO_REMOVE =
+ new LinkedHashSet<>(
+ Arrays.asList(
+ BUGREPORT,
+ BUGREPORT_IN_POWER,
+ GRAPHICS_DRIVER_DASHBOARD,
+ QUICK_SETTINGS_TILES,
+ SHARED_DATA,
+ SYSTEM_SERVER_HEAP_DUMP,
+ TOGGLE_ADB_WIRELESS
+ ));
+}
diff --git a/tests/CarDeveloperOptions2/src/com/android/car/developeroptions/CarDevelopmentSettingsDashboardActivity.java b/tests/CarDeveloperOptions2/src/com/android/car/developeroptions/CarDevelopmentSettingsDashboardActivity.java
new file mode 100644
index 0000000..f7093d0
--- /dev/null
+++ b/tests/CarDeveloperOptions2/src/com/android/car/developeroptions/CarDevelopmentSettingsDashboardActivity.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright (C) 2020 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.car.developeroptions;
+
+import com.android.settings.SettingsActivity;
+
+public class CarDevelopmentSettingsDashboardActivity extends SettingsActivity {
+ private static final String CAR_DEVELOPMENT_SETTINGS_FRAGMENT =
+ "com.android.car.developeroptions.CarDevelopmentSettingsDashboardFragment";
+
+ @Override
+ protected boolean isValidFragment(String fragmentName) {
+ return CAR_DEVELOPMENT_SETTINGS_FRAGMENT.equals(fragmentName);
+ }
+}
diff --git a/tests/CarDeveloperOptions2/src/com/android/car/developeroptions/CarDevelopmentSettingsDashboardFragment.java b/tests/CarDeveloperOptions2/src/com/android/car/developeroptions/CarDevelopmentSettingsDashboardFragment.java
new file mode 100644
index 0000000..3949872
--- /dev/null
+++ b/tests/CarDeveloperOptions2/src/com/android/car/developeroptions/CarDevelopmentSettingsDashboardFragment.java
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2020 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.car.developeroptions;
+
+import static com.android.car.developeroptions.CarDevelopmentConstants.PREFERENCES_TO_REMOVE;
+import static com.android.car.ui.core.CarUi.requireToolbar;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+
+import com.android.car.ui.toolbar.MenuItem;
+import com.android.car.ui.toolbar.Toolbar;
+import com.android.car.ui.toolbar.ToolbarController;
+import com.android.settings.SettingsActivity;
+import com.android.settings.development.DevelopmentSettingsDashboardFragment;
+import com.android.settingslib.core.AbstractPreferenceController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CarDevelopmentSettingsDashboardFragment extends DevelopmentSettingsDashboardFragment {
+
+ private ToolbarController mToolbar;
+
+ @Override
+ public void onActivityCreated(Bundle icicle) {
+ super.onActivityCreated(icicle);
+ mToolbar = getToolbar();
+ if (mToolbar != null) {
+ List<MenuItem> items = getToolbarMenuItems();
+ mToolbar.setTitle(getPreferenceScreen().getTitle());
+ mToolbar.setMenuItems(items);
+ mToolbar.setNavButtonMode(Toolbar.NavButtonMode.BACK);
+ mToolbar.setState(Toolbar.State.SUBPAGE);
+ }
+ }
+
+ @Override
+ protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
+ List<AbstractPreferenceController> controllers = super.createPreferenceControllers(context);
+ removeControllers(controllers);
+ addHiddenControllers(context, controllers);
+ return controllers;
+ }
+
+ @Override
+ public void onStop() {
+ super.onStop();
+ boolean switchBarChecked = ((SettingsActivity) getActivity()).getSwitchBar().isChecked();
+ if (!switchBarChecked && isDeveloperOptionsModuleEnabled()) {
+ PackageManager pm = getContext().getPackageManager();
+ pm.setComponentEnabledSetting(getActivity().getComponentName(),
+ PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
+ PackageManager.DONT_KILL_APP);
+ finish();
+ }
+ }
+
+ protected ToolbarController getToolbar() {
+ return requireToolbar(requireActivity());
+ }
+
+ protected List<MenuItem> getToolbarMenuItems() {
+ return null;
+ }
+
+ private void removeControllers(List<AbstractPreferenceController> controllers) {
+ List<AbstractPreferenceController> controllersToBeRemoved = new ArrayList<>();
+ for (AbstractPreferenceController controller : controllers) {
+ if (PREFERENCES_TO_REMOVE.contains(controller.getPreferenceKey())) {
+ controllersToBeRemoved.add(controller);
+ }
+ }
+ controllers.removeAll(controllersToBeRemoved);
+ }
+
+ private void addHiddenControllers(Context context,
+ List<AbstractPreferenceController> controllers) {
+ for (String key : PREFERENCES_TO_REMOVE) {
+ controllers.add(new HiddenPreferenceController(context, key));
+ }
+ }
+
+ private boolean isDeveloperOptionsModuleEnabled() {
+ PackageManager pm = getContext().getPackageManager();
+ ComponentName component = getActivity().getComponentName();
+ int state = pm.getComponentEnabledSetting(component);
+ return state == PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
+ }
+}
diff --git a/tests/CarDeveloperOptions2/src/com/android/car/developeroptions/HiddenPreferenceController.java b/tests/CarDeveloperOptions2/src/com/android/car/developeroptions/HiddenPreferenceController.java
new file mode 100644
index 0000000..f811a1b
--- /dev/null
+++ b/tests/CarDeveloperOptions2/src/com/android/car/developeroptions/HiddenPreferenceController.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2020 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.car.developeroptions;
+
+import android.content.Context;
+
+import com.android.settings.core.BasePreferenceController;
+
+public class HiddenPreferenceController extends BasePreferenceController {
+
+ public HiddenPreferenceController(Context context, String preferenceKey) {
+ super(context, preferenceKey);
+ }
+
+ @Override
+ public int getAvailabilityStatus() {
+ return UNSUPPORTED_ON_DEVICE;
+ }
+}
diff --git a/tests/CarDeveloperOptions2/tests/unit/Android.bp b/tests/CarDeveloperOptions2/tests/unit/Android.bp
new file mode 100644
index 0000000..5b90736
--- /dev/null
+++ b/tests/CarDeveloperOptions2/tests/unit/Android.bp
@@ -0,0 +1,21 @@
+android_test {
+ name: "CarDeveloperOptionsUnitTests",
+
+ certificate: "platform",
+
+ srcs: ["src/**/*.java"],
+
+ libs: [
+ "android.test.runner",
+ "android.test.base",
+ ],
+
+ static_libs: [
+ "androidx.test.core",
+ "androidx.test.rules",
+ "androidx.test.ext.junit",
+ "androidx.test.ext.truth",
+ ],
+
+ instrumentation_for: "CarDeveloperOptions2",
+}
\ No newline at end of file
diff --git a/tests/CarDeveloperOptions2/tests/unit/AndroidManifest.xml b/tests/CarDeveloperOptions2/tests/unit/AndroidManifest.xml
new file mode 100644
index 0000000..d410be3
--- /dev/null
+++ b/tests/CarDeveloperOptions2/tests/unit/AndroidManifest.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2020 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.
+ -->
+
+<manifest
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+ package="com.android.car.developeroptions.tests.unit">
+
+ <application android:debuggable="true">
+ <uses-library android:name="android.test.runner" />
+ </application>
+
+ <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
+ android:targetPackage="com.android.settings"
+ android:label="Car Developeroptions Unit Tests" />
+</manifest>
diff --git a/tests/CarDeveloperOptions2/tests/unit/src/com/android/car/developeroptions/CarDeveloperOptionsIntentTest.java b/tests/CarDeveloperOptions2/tests/unit/src/com/android/car/developeroptions/CarDeveloperOptionsIntentTest.java
new file mode 100644
index 0000000..20c19e0
--- /dev/null
+++ b/tests/CarDeveloperOptions2/tests/unit/src/com/android/car/developeroptions/CarDeveloperOptionsIntentTest.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2020 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.car.developeroptions;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+
+import androidx.test.core.app.ApplicationProvider;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.Arrays;
+import java.util.List;
+
+@RunWith(AndroidJUnit4.class)
+public class CarDeveloperOptionsIntentTest {
+ private static final List<String> ACTIVITY_ALLOWLIST = Arrays.asList(
+ "com.android.car.developeroptions.CarDevelopmentSettingsDashboardActivity",
+ "com.android.settings.development.DevelopmentSettingsDisabledActivity");
+
+ private Context mContext = ApplicationProvider.getApplicationContext();
+ private PackageManager mPm;
+
+ @Before
+ public void setup() {
+ mPm = mContext.getPackageManager();
+ }
+
+ @Test
+ public void testAvailableIntentActivities_onlyAllowlisted() {
+ List<ResolveInfo> results = mPm.queryIntentActivities(createSettingsPackageIntent(),
+ PackageManager.MATCH_ALL);
+ for (ResolveInfo resolved : results) {
+ assertThat(ACTIVITY_ALLOWLIST).contains(resolved.getComponentInfo().name);
+ }
+ }
+
+ @Test
+ public void testAvailableIntentServices_returnsZero() {
+ List<ResolveInfo> results = mPm.queryIntentServices(createSettingsPackageIntent(),
+ PackageManager.MATCH_ALL);
+ assertThat(results.size()).isEqualTo(0);
+ }
+
+ @Test
+ public void testAvailableBroadcastReceivers_returnsZero() {
+ List<ResolveInfo> results = mPm.queryBroadcastReceivers(createSettingsPackageIntent(),
+ PackageManager.MATCH_ALL);
+ assertThat(results.size()).isEqualTo(0);
+ }
+
+ @Test
+ public void testAvailableContentProviders_returnsZero() {
+ List<ResolveInfo> results = mPm.queryIntentContentProviders(createSettingsPackageIntent(),
+ PackageManager.MATCH_ALL);
+ assertThat(results.size()).isEqualTo(0);
+ }
+
+ private Intent createSettingsPackageIntent() {
+ Intent intent = new Intent();
+ intent.setPackage("com.android.settings");
+ return intent;
+ }
+}
diff --git a/tests/CarSecurityPermissionTest/Android.bp b/tests/CarSecurityPermissionTest/Android.bp
index 066ecc8..23ab014 100644
--- a/tests/CarSecurityPermissionTest/Android.bp
+++ b/tests/CarSecurityPermissionTest/Android.bp
@@ -21,6 +21,7 @@
libs: [
"android.car",
+ "android.hardware.automotive.vehicle-V2.0-java",
"android.test.runner",
"android.test.base",
"android.test.mock",
@@ -40,4 +41,4 @@
platform_apis: true,
certificate: "platform",
-}
\ No newline at end of file
+}
diff --git a/tests/CarSecurityPermissionTest/src/com/android/car/CarPropertyManagerPublicPermissionTest.java b/tests/CarSecurityPermissionTest/src/com/android/car/CarPropertyManagerPublicPermissionTest.java
index 975bc74..699301f 100644
--- a/tests/CarSecurityPermissionTest/src/com/android/car/CarPropertyManagerPublicPermissionTest.java
+++ b/tests/CarSecurityPermissionTest/src/com/android/car/CarPropertyManagerPublicPermissionTest.java
@@ -45,18 +45,18 @@
private CarPropertyManager mPropertyManager;
private HashSet<Integer> mProps = new HashSet<>();
private static final String TAG = CarPropertyManagerPublicPermissionTest.class.getSimpleName();
- private static final Integer DUMMY_AREA_ID = VehicleAreaType.VEHICLE_AREA_TYPE_GLOBAL;
- // Dummy values for setter test.
- private static final int DUMMY_PROPERTY_VALUE_INTEGER = 1;
- private static final Integer[] DUMMY_PROPERTY_VALUE_INTEGER_ARRAY = new Integer[]{1};
- private static final float DUMMY_PROPERTY_VALUE_FLOAT = 1.0f;
- private static final Float[] DUMMY_PROPERTY_VALUE_FLOAT_ARRAY = new Float[]{1.0f};
- private static final Long DUMMY_PROPERTY_VALUE_LONG = 1L;
- private static final Long[] DUMMY_PROPERTY_VALUE_LONG_ARRAY = new Long[]{1L};
- private static final boolean DUMMY_PROPERTY_VALUE_BOOLEAN = true;
- private static final String DUMMY_PROPERTY_VALUE_STRING = "test";
- private static final byte[] DUMMY_PROPERTY_VALUE_BYTE_ARRAY = "test".getBytes();
- private static final Object[] DUMMY_PROPERTY_VALUE_OBJECT_ARRAY = new Object[]{1, "test"};
+ private static final Integer PLACEHOLDER_AREA_ID = VehicleAreaType.VEHICLE_AREA_TYPE_GLOBAL;
+ // Fake values for setter test.
+ private static final int PLACEHOLDER_PROPERTY_VALUE_INTEGER = 1;
+ private static final Integer[] PLACEHOLDER_PROPERTY_VALUE_INTEGER_ARRAY = new Integer[]{1};
+ private static final float PLACEHOLDER_PROPERTY_VALUE_FLOAT = 1.0f;
+ private static final Float[] PLACEHOLDER_PROPERTY_VALUE_FLOAT_ARRAY = new Float[]{1.0f};
+ private static final Long PLACEHOLDER_PROPERTY_VALUE_LONG = 1L;
+ private static final Long[] PLACEHOLDER_PROPERTY_VALUE_LONG_ARRAY = new Long[]{1L};
+ private static final boolean PLACEHOLDER_PROPERTY_VALUE_BOOLEAN = true;
+ private static final String PLACEHOLDER_PROPERTY_VALUE_STRING = "test";
+ private static final byte[] PLACEHOLDER_PROPERTY_VALUE_BYTE_ARRAY = "test".getBytes();
+ private static final Object[] PLACEHOLDER_PROPERTY_VALUE_OBJECT_ARRAY = new Object[]{1, "test"};
@Before
public void setUp() throws Exception {
@@ -213,19 +213,19 @@
case VehiclePropertyType.BOOLEAN:
// The areaId may not match with it in propertyConfig. CarService
// check the permission before checking valid areaId.
- mPropertyManager.getBooleanProperty(propertyId, DUMMY_AREA_ID);
+ mPropertyManager.getBooleanProperty(propertyId, PLACEHOLDER_AREA_ID);
break;
case VehiclePropertyType.FLOAT:
- mPropertyManager.getFloatProperty(propertyId, DUMMY_AREA_ID);
+ mPropertyManager.getFloatProperty(propertyId, PLACEHOLDER_AREA_ID);
break;
case VehiclePropertyType.INT32_VEC:
- mPropertyManager.getIntArrayProperty(propertyId, DUMMY_AREA_ID);
+ mPropertyManager.getIntArrayProperty(propertyId, PLACEHOLDER_AREA_ID);
break;
case VehiclePropertyType.INT32:
- mPropertyManager.getIntProperty(propertyId, DUMMY_AREA_ID);
+ mPropertyManager.getIntProperty(propertyId, PLACEHOLDER_AREA_ID);
break;
default:
- mPropertyManager.getProperty(propertyId, DUMMY_AREA_ID);
+ mPropertyManager.getProperty(propertyId, PLACEHOLDER_AREA_ID);
}
} catch (Exception e) {
assertWithMessage("Get property: 0x" + Integer.toHexString(propertyId)
@@ -240,7 +240,7 @@
private void assertPropertyNotImplementedInVhal(int propertyId) {
assertWithMessage("Get property : 0x " + Integer.toHexString(propertyId)
+ " without permission.")
- .that(mPropertyManager.getProperty(propertyId, DUMMY_AREA_ID)).isNull();
+ .that(mPropertyManager.getProperty(propertyId, PLACEHOLDER_AREA_ID)).isNull();
Log.w(TAG, "Property id: 0x" + Integer.toHexString(propertyId)
+ " does not exist in the VHAL implementation.");
}
@@ -249,48 +249,48 @@
public void testCarPropertyManagerSetter() {
for (int propertyId : mProps) {
try {
- // Dummy value may not in the valid range. CarService checks permission
+ // Fake value may not in the valid range. CarService checks permission
// and sends request to VHAL. VHAL checks specific property range.
switch (propertyId & VehiclePropertyType.MASK) {
case VehiclePropertyType.BOOLEAN:
- mPropertyManager.setBooleanProperty(propertyId, DUMMY_AREA_ID,
- DUMMY_PROPERTY_VALUE_BOOLEAN);
+ mPropertyManager.setBooleanProperty(propertyId, PLACEHOLDER_AREA_ID,
+ PLACEHOLDER_PROPERTY_VALUE_BOOLEAN);
break;
case VehiclePropertyType.FLOAT:
- mPropertyManager.setFloatProperty(propertyId, DUMMY_AREA_ID,
- DUMMY_PROPERTY_VALUE_FLOAT);
+ mPropertyManager.setFloatProperty(propertyId, PLACEHOLDER_AREA_ID,
+ PLACEHOLDER_PROPERTY_VALUE_FLOAT);
break;
case VehiclePropertyType.FLOAT_VEC:
- mPropertyManager.setProperty(Float[].class, propertyId, DUMMY_AREA_ID,
- DUMMY_PROPERTY_VALUE_FLOAT_ARRAY);
+ mPropertyManager.setProperty(Float[].class, propertyId, PLACEHOLDER_AREA_ID,
+ PLACEHOLDER_PROPERTY_VALUE_FLOAT_ARRAY);
break;
case VehiclePropertyType.INT32:
- mPropertyManager.setIntProperty(propertyId, DUMMY_AREA_ID,
- DUMMY_PROPERTY_VALUE_INTEGER);
+ mPropertyManager.setIntProperty(propertyId, PLACEHOLDER_AREA_ID,
+ PLACEHOLDER_PROPERTY_VALUE_INTEGER);
break;
case VehiclePropertyType.INT32_VEC:
- mPropertyManager.setProperty(Integer[].class, propertyId, DUMMY_AREA_ID,
- DUMMY_PROPERTY_VALUE_INTEGER_ARRAY);
+ mPropertyManager.setProperty(Integer[].class, propertyId,
+ PLACEHOLDER_AREA_ID, PLACEHOLDER_PROPERTY_VALUE_INTEGER_ARRAY);
break;
case VehiclePropertyType.INT64:
- mPropertyManager.setProperty(Long.class, propertyId, DUMMY_AREA_ID,
- DUMMY_PROPERTY_VALUE_LONG);
+ mPropertyManager.setProperty(Long.class, propertyId, PLACEHOLDER_AREA_ID,
+ PLACEHOLDER_PROPERTY_VALUE_LONG);
break;
case VehiclePropertyType.INT64_VEC:
- mPropertyManager.setProperty(Long[].class, propertyId, DUMMY_AREA_ID,
- DUMMY_PROPERTY_VALUE_LONG_ARRAY);
+ mPropertyManager.setProperty(Long[].class, propertyId, PLACEHOLDER_AREA_ID,
+ PLACEHOLDER_PROPERTY_VALUE_LONG_ARRAY);
break;
case VehiclePropertyType.BYTES:
- mPropertyManager.setProperty(byte[].class, propertyId, DUMMY_AREA_ID,
- DUMMY_PROPERTY_VALUE_BYTE_ARRAY);
+ mPropertyManager.setProperty(byte[].class, propertyId, PLACEHOLDER_AREA_ID,
+ PLACEHOLDER_PROPERTY_VALUE_BYTE_ARRAY);
break;
case VehiclePropertyType.MIXED:
- mPropertyManager.setProperty(Object[].class, propertyId, DUMMY_AREA_ID,
- DUMMY_PROPERTY_VALUE_OBJECT_ARRAY);
+ mPropertyManager.setProperty(Object[].class, propertyId,
+ PLACEHOLDER_AREA_ID, PLACEHOLDER_PROPERTY_VALUE_OBJECT_ARRAY);
break;
case VehiclePropertyType.STRING:
- mPropertyManager.setProperty(String.class, propertyId, DUMMY_AREA_ID,
- DUMMY_PROPERTY_VALUE_STRING);
+ mPropertyManager.setProperty(String.class, propertyId, PLACEHOLDER_AREA_ID,
+ PLACEHOLDER_PROPERTY_VALUE_STRING);
break;
default:
throw new IllegalArgumentException("Invalid value type for property: 0x"
diff --git a/tests/CarSecurityPermissionTest/src/com/android/car/CarPublicPermissionTest.java b/tests/CarSecurityPermissionTest/src/com/android/car/CarPublicPermissionTest.java
index 16aef37..3d3d8b0 100644
--- a/tests/CarSecurityPermissionTest/src/com/android/car/CarPublicPermissionTest.java
+++ b/tests/CarSecurityPermissionTest/src/com/android/car/CarPublicPermissionTest.java
@@ -53,8 +53,6 @@
assertThrows(SecurityException.class, () -> mCar.getCarManager(
Car.CAR_INSTRUMENT_CLUSTER_SERVICE));
assertThrows(SecurityException.class, () -> mCar.getCarManager(Car.CAR_NAVIGATION_SERVICE));
- assertThrows(SecurityException.class, () -> mCar.getCarManager(
- Car.CAR_TRUST_AGENT_ENROLLMENT_SERVICE));
if (mCar.isFeatureEnabled(Car.DIAGNOSTIC_SERVICE)) {
assertThrows(SecurityException.class, () -> mCar.getCarManager(Car.DIAGNOSTIC_SERVICE));
}
diff --git a/tests/CarSecurityPermissionTest/src/com/android/car/input/CarInputManagerPermisisonTest.java b/tests/CarSecurityPermissionTest/src/com/android/car/input/CarInputManagerPermisisonTest.java
index 9730d13..fb2878b 100644
--- a/tests/CarSecurityPermissionTest/src/com/android/car/input/CarInputManagerPermisisonTest.java
+++ b/tests/CarSecurityPermissionTest/src/com/android/car/input/CarInputManagerPermisisonTest.java
@@ -20,6 +20,7 @@
import static org.testng.Assert.assertThrows;
import android.car.Car;
+import android.car.CarOccupantZoneManager;
import android.car.input.CarInputManager;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -61,7 +62,7 @@
public void testEnableFeaturePermission() throws Exception {
assertThrows(SecurityException.class, () -> mCarInputManager.requestInputEventCapture(
mMockedCallback,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION}, 0));
}
}
diff --git a/tests/CarSecurityPermissionTest/src/com/android/car/user/CarUserManagerPermissionTest.java b/tests/CarSecurityPermissionTest/src/com/android/car/user/CarUserManagerPermissionTest.java
index 3a5ea1b..8cfc298 100644
--- a/tests/CarSecurityPermissionTest/src/com/android/car/user/CarUserManagerPermissionTest.java
+++ b/tests/CarSecurityPermissionTest/src/com/android/car/user/CarUserManagerPermissionTest.java
@@ -24,6 +24,7 @@
import static android.car.Car.createCar;
import static android.hardware.automotive.vehicle.V2_0.UserIdentificationAssociationType.CUSTOM_1;
+import static com.android.compatibility.common.util.ShellIdentityUtils.invokeMethodWithShellPermissions;
import static com.android.compatibility.common.util.ShellIdentityUtils.invokeMethodWithShellPermissionsNoReturn;
import static com.google.common.truth.Truth.assertThat;
@@ -35,7 +36,9 @@
import android.car.user.CarUserManager;
import android.car.user.CarUserManager.UserLifecycleListener;
import android.content.Context;
+import android.content.pm.UserInfo;
import android.os.Handler;
+import android.os.UserHandle;
import android.os.UserManager;
import androidx.test.ext.junit.runners.AndroidJUnit4;
@@ -52,7 +55,6 @@
*/
@RunWith(AndroidJUnit4.class)
public final class CarUserManagerPermissionTest {
- private static final int USRE_TYPE = 1;
private CarUserManager mCarUserManager;
private Context mContext;
@@ -70,6 +72,7 @@
@Test
public void testSwitchUserPermission() throws Exception {
Exception e = expectThrows(SecurityException.class, () -> mCarUserManager.switchUser(100));
+ assertThat(e.getMessage()).contains(CREATE_USERS);
assertThat(e.getMessage()).contains(MANAGE_USERS);
}
@@ -77,13 +80,42 @@
public void testCreateUserPermission() throws Exception {
Exception e = expectThrows(SecurityException.class,
() -> mCarUserManager.createUser(null, UserManager.USER_TYPE_FULL_SECONDARY, 0));
- assertThat(e.getMessage()).contains(MANAGE_USERS);
assertThat(e.getMessage()).contains(CREATE_USERS);
+ assertThat(e.getMessage()).contains(MANAGE_USERS);
+ }
+
+ @Test
+ public void testCannotCreateAdminUserWithoutManageUsersPermission() throws Exception {
+ Exception e = expectThrows(SecurityException.class,
+ () -> invokeMethodWithShellPermissions(mCarUserManager,
+ (um) -> um.createUser("Thanos", UserInfo.FLAG_ADMIN)));
+ assertThat(e.getMessage()).contains(MANAGE_USERS);
+ assertThat(e.getMessage()).contains("flags " + UserInfo.FLAG_ADMIN);
+ }
+
+ @Test
+ public void testCannotCreateAdminUserWithTypeWithoutManageUsersPermission() throws Exception {
+ Exception e = expectThrows(SecurityException.class,
+ () -> invokeMethodWithShellPermissions(mCarUserManager,
+ (um) -> um.createUser("Thanos", UserManager.USER_TYPE_FULL_SECONDARY,
+ UserInfo.FLAG_ADMIN)));
+ assertThat(e.getMessage()).contains(MANAGE_USERS);
+ assertThat(e.getMessage()).contains("flags " + UserInfo.FLAG_ADMIN);
}
@Test
public void testRemoveUserPermission() throws Exception {
- Exception e = expectThrows(SecurityException.class, () -> mCarUserManager.removeUser(100));
+ Exception e = expectThrows(SecurityException.class,
+ () -> mCarUserManager.removeUser(UserHandle.of(100)));
+ assertThat(e.getMessage()).contains(CREATE_USERS);
+ assertThat(e.getMessage()).contains(MANAGE_USERS);
+ }
+
+ @Test
+ public void testRemoveUserInternalPermission() throws Exception {
+ Exception e = expectThrows(SecurityException.class,
+ () -> mCarUserManager.removeUser(100));
+ assertThat(e.getMessage()).contains(CREATE_USERS);
assertThat(e.getMessage()).contains(MANAGE_USERS);
}
@@ -115,6 +147,7 @@
public void testGetUserIdentificationAssociationPermission() {
Exception e = expectThrows(SecurityException.class,
() -> mCarUserManager.getUserIdentificationAssociation(CUSTOM_1));
+ assertThat(e.getMessage()).contains(CREATE_USERS);
assertThat(e.getMessage()).contains(MANAGE_USERS);
}
@@ -123,6 +156,7 @@
Exception e = expectThrows(SecurityException.class,
() -> mCarUserManager.setUserIdentificationAssociation(
new int[] {CUSTOM_1}, new int[] {42}));
+ assertThat(e.getMessage()).contains(CREATE_USERS);
assertThat(e.getMessage()).contains(MANAGE_USERS);
}
diff --git a/tests/DiagnosticTools/AndroidManifest.xml b/tests/DiagnosticTools/AndroidManifest.xml
index 55ee4bc..1b4c830 100644
--- a/tests/DiagnosticTools/AndroidManifest.xml
+++ b/tests/DiagnosticTools/AndroidManifest.xml
@@ -16,11 +16,13 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.google.android.car.diagnostictools">
+ package="com.google.android.car.diagnostictools">
<uses-permission android:name="android.car.permission.CAR_DIAGNOSTICS"/>
<uses-permission android:name="android.car.permission.CLEAR_CAR_DIAGNOSTICS"/>
- <application android:label="OBD-II Diagnostic Tools" android:theme="@style/AppTheme">
- <activity android:name=".ECUListActivity">
+ <application android:label="OBD-II Diagnostic Tools"
+ android:theme="@style/AppTheme">
+ <activity android:name=".ECUListActivity"
+ android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
diff --git a/tests/DiagnosticTools/src/com/google/android/car/diagnostictools/utils/MathEval.java b/tests/DiagnosticTools/src/com/google/android/car/diagnostictools/utils/MathEval.java
index 11910df..1cbc098 100644
--- a/tests/DiagnosticTools/src/com/google/android/car/diagnostictools/utils/MathEval.java
+++ b/tests/DiagnosticTools/src/com/google/android/car/diagnostictools/utils/MathEval.java
@@ -24,8 +24,8 @@
class MathEval {
/**
- * This is a sanity check for user generated strings to catch errors once instead of everytime
- * the data is translated
+ * This is a confidence check for user generated strings to catch errors once instead of every
+ * time the data is translated
*
* @param str Translation string to test
* @return True if the string doesn't or won't fail when processing simple inputs
diff --git a/tests/EmbeddedKitchenSinkApp/Android.mk b/tests/EmbeddedKitchenSinkApp/Android.mk
index f9526ce..a37db4f 100644
--- a/tests/EmbeddedKitchenSinkApp/Android.mk
+++ b/tests/EmbeddedKitchenSinkApp/Android.mk
@@ -57,7 +57,7 @@
LOCAL_JAVA_LIBRARIES += android.car
-LOCAL_REQUIRED_MODULES := privapp_whitelist_com.google.android.car.kitchensink
+LOCAL_REQUIRED_MODULES := allowed_privapp_com.google.android.car.kitchensink
include $(BUILD_PACKAGE)
diff --git a/tests/EmbeddedKitchenSinkApp/AndroidManifest.xml b/tests/EmbeddedKitchenSinkApp/AndroidManifest.xml
index 1c40b88..849cc98 100644
--- a/tests/EmbeddedKitchenSinkApp/AndroidManifest.xml
+++ b/tests/EmbeddedKitchenSinkApp/AndroidManifest.xml
@@ -15,8 +15,8 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- android:sharedUserId="com.google.android.car.uid.kitchensink"
- package="com.google.android.car.kitchensink">
+ android:sharedUserId="com.google.android.car.uid.kitchensink"
+ package="com.google.android.car.kitchensink">
<uses-permission android:name="android.car.permission.ACCESS_CAR_PROJECTION_STATUS"/>
<uses-permission android:name="android.car.permission.CAR_CAMERA"/>
<uses-permission android:name="android.car.permission.CAR_CONTROL_AUDIO_SETTINGS"/>
@@ -50,6 +50,20 @@
<uses-permission android:name="android.car.permission.READ_CAR_STEERING"/>
<uses-permission android:name="android.car.permission.STORAGE_MONITORING"/>
<uses-permission android:name="android.car.permission.CAR_DYNAMICS_STATE"/>
+ <!-- Allow querying and writing to any property -->
+ <uses-permission android:name="android.car.permission.CAR_ENERGY_PORTS" />
+ <uses-permission android:name="android.car.permission.PERMISSION_CONTROL_ENERGY_PORTS" />
+ <uses-permission android:name="android.car.permission.CAR_EXTERIOR_LIGHTS" />
+ <uses-permission android:name="android.car.permission.CAR_TIRES" />
+ <uses-permission android:name="android.car.permission.CONTROL_CAR_DOORS" />
+ <uses-permission android:name="android.car.permission.CONTROL_CAR_EXTERIOR_LIGHTS" />
+ <uses-permission android:name="android.car.permission.CONTROL_CAR_MIRRORS" />
+ <uses-permission android:name="android.car.permission.CONTROL_CAR_SEATS" />
+ <uses-permission android:name="android.car.permission.CONTROL_CAR_WINDOWS" />
+ <uses-permission android:name="android.car.permission.READ_CAR_DISPLAY_UNITS" />
+ <uses-permission android:name="android.car.permission.CAR_IDENTIFICATION" />
+ <uses-permission android:name="android.car.permission.PERMISSION_ADJUST_RANGE_REMAINING" />
+ <uses-permission android:name="android.car.permission.PERMISSION_CAR_ENGINE_DETAILED" />
<!-- use for CarServiceTest -->
<uses-permission android:name="android.car.permission.VMS_PUBLISHER"/>
<!-- use for CarServiceTest -->
@@ -84,24 +98,27 @@
<uses-permission android:name="android.permission.OVERRIDE_WIFI_CONFIG"/>
<uses-permission android:name="android.permission.PROVIDE_TRUST_AGENT"/>
<!-- Allow query of any normal app on the device in R+ -->
- <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" />
+ <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
<uses-permission android:name="android.permission.READ_LOGS"/>
<uses-permission android:name="android.permission.READ_SMS"/>
<uses-permission android:name="android.permission.REAL_GET_TASKS"/>
<uses-permission android:name="android.permission.REBOOT"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
+ <uses-permission android:name="android.permission.SEND_CATEGORY_CAR_NOTIFICATIONS"/>
<uses-permission android:name="android.permission.SEND_SMS"/>
<!-- use for CarServiceTest -->
<uses-permission android:name="android.permission.MONITOR_INPUT"/>
<uses-permission android:name="android.permission.SET_ACTIVITY_WATCHER"/>
+ <!-- needed for User fragment to lock user data -->
+ <uses-permission android:name="android.permission.STORAGE_INTERNAL"/>
<uses-permission android:name="android.permission.USE_FULL_SCREEN_INTENT"/>
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<!-- use for vendor properties -->
- <uses-permission android:name="android.car.permission.CAR_VENDOR_EXTENSION" />
- <uses-permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_SEAT" />
- <uses-permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_INFO" />
- <uses-permission android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_INFO" />
+ <uses-permission android:name="android.car.permission.CAR_VENDOR_EXTENSION"/>
+ <uses-permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_SEAT"/>
+ <uses-permission android:name="android.car.permission.GET_CAR_VENDOR_CATEGORY_INFO"/>
+ <uses-permission android:name="android.car.permission.SET_CAR_VENDOR_CATEGORY_INFO"/>
<uses-permission android:name="android.car.permission.CONTROL_CAR_FEATURES"/>
@@ -109,44 +126,47 @@
<uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
<application android:label="@string/app_title"
- android:icon="@drawable/ic_launcher">
+ android:icon="@drawable/ic_launcher">
<uses-library android:name="android.test.runner"/>
<!-- This is for embedded mode. -->
<activity android:name=".KitchenSinkActivity"
- android:theme="@style/KitchenSinkActivityTheme"
- android:label="@string/app_title"
- android:launchMode="singleTask">
+ android:theme="@style/KitchenSinkActivityTheme"
+ android:label="@string/app_title"
+ android:launchMode="singleTask"
+ android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
- <meta-data
- android:name="android.car.application"
- android:resource="@xml/automotive_app_desc"/>
+ <meta-data android:name="android.car.application"
+ android:resource="@xml/automotive_app_desc"/>
<activity android:name=".orientation.LandscapeActivity"
- android:label="@string/landscpae_activity"
- android:screenOrientation="landscape">
+ android:label="@string/landscpae_activity"
+ android:screenOrientation="landscape"
+ android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
</intent-filter>
</activity>
<activity android:name=".orientation.PortraitActivity"
- android:label="@string/portrait_activity"
- android:screenOrientation="portrait">
+ android:label="@string/portrait_activity"
+ android:screenOrientation="portrait"
+ android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
</intent-filter>
</activity>
<activity android:name=".cluster.FakeClusterNavigationActivity"
- android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
- android:launchMode="singleInstance"
- android:resizeableActivity="true"
- android:allowEmbedded="true">
+ android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
+ android:launchMode="singleInstance"
+ android:resizeableActivity="true"
+ android:allowEmbedded="true"
+ android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.car.cluster.NAVIGATION"/>
@@ -156,38 +176,42 @@
<activity android:name=".activityview.ActivityViewTestFragment"/>
<service android:name=".vendorservice.LogLifecycleService"
- android:exported="false" android:directBootAware="true">
+ android:exported="false"
+ android:directBootAware="true">
</service>
- <service android:name=".UserNoiticeDemoUiService" android:directBootAware="true"/>
+ <service android:name=".UserNoiticeDemoUiService"
+ android:directBootAware="true"/>
<!-- Content provider for images -->
<provider android:name=".cluster.ClusterContentProvider"
- android:authorities="com.google.android.car.kitchensink.cluster.clustercontentprovider"
- android:grantUriPermissions="true"
- android:exported="true"/>
+ android:authorities="com.google.android.car.kitchensink.cluster.clustercontentprovider"
+ android:grantUriPermissions="true"
+ android:exported="true"/>
<activity android:name=".AlwaysCrashingActivity"
- android:label="@string/always_crashing_activity">
+ android:label="@string/always_crashing_activity"
+ android:exported="true">
<intent-filter>
- <action android:name="android.intent.action.MAIN" />
+ <action android:name="android.intent.action.MAIN"/>
</intent-filter>
</activity>
<activity android:name=".NoCrashActivity"
- android:label="@string/no_crash_activity">
+ android:label="@string/no_crash_activity"
+ android:exported="true">
<intent-filter>
- <action android:name="android.intent.action.MAIN" />
+ <action android:name="android.intent.action.MAIN"/>
</intent-filter>
</activity>
<activity android:name=".EmptyActivity"
- android:label="@string/empty_activity">
+ android:label="@string/empty_activity"
+ android:exported="true">
<intent-filter>
- <action android:name="android.intent.action.MAIN" />
+ <action android:name="android.intent.action.MAIN"/>
</intent-filter>
</activity>
</application>
</manifest>
-
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/input_type_test.xml b/tests/EmbeddedKitchenSinkApp/res/layout/input_type_test.xml
index 58dae07..d14bad2 100644
--- a/tests/EmbeddedKitchenSinkApp/res/layout/input_type_test.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/input_type_test.xml
@@ -141,6 +141,7 @@
android:text="Plain Text:"/>
<EditText
+ android:id="@+id/plain_text_edit"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/notification_fragment.xml b/tests/EmbeddedKitchenSinkApp/res/layout/notification_fragment.xml
index 4610f4c..43be213 100644
--- a/tests/EmbeddedKitchenSinkApp/res/layout/notification_fragment.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/notification_fragment.xml
@@ -199,7 +199,6 @@
android:background="#ffa9a8"
android:foreground="?android:attr/selectableItemBackground"
android:text="Car Emergency"
- android:enabled="false"
android:textSize="30sp"/>
<Button
@@ -210,7 +209,6 @@
android:background="#ffa9a8"
android:foreground="?android:attr/selectableItemBackground"
android:text="Car Warning"
- android:enabled="false"
android:textSize="30sp"/>
<Button
@@ -219,7 +217,6 @@
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="Car Information"
- android:enabled="false"
android:textSize="30sp"/>
</LinearLayout>
</LinearLayout>
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/window_insets_fragment.xml b/tests/EmbeddedKitchenSinkApp/res/layout/system_bars_fragment.xml
similarity index 84%
rename from tests/EmbeddedKitchenSinkApp/res/layout/window_insets_fragment.xml
rename to tests/EmbeddedKitchenSinkApp/res/layout/system_bars_fragment.xml
index 5533668..7adab17 100644
--- a/tests/EmbeddedKitchenSinkApp/res/layout/window_insets_fragment.xml
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/system_bars_fragment.xml
@@ -146,5 +146,33 @@
</LinearLayout>
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Toggle System Bar Color"/>
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+
+ <Button
+ android:id="@+id/color_status_bars"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_margin="10dp"
+ android:text="Toggle Status Bar Color"
+ android:textSize="30sp"/>
+
+ <Button
+ android:id="@+id/color_navigation_bars"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_margin="10dp"
+ android:text="Toggle Nav Bar Color"
+ android:textSize="30sp"/>
+
+ </LinearLayout>
+
</LinearLayout>
</ScrollView>
\ No newline at end of file
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/user.xml b/tests/EmbeddedKitchenSinkApp/res/layout/user.xml
new file mode 100644
index 0000000..8870206
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/res/layout/user.xml
@@ -0,0 +1,161 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2020 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.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical" >
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text="Current User"/>
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal" >
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text="ID: "/>
+ <EditText
+ android:id="@+id/user_id"
+ android:enabled="false"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text=""/>
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text="Name: "/>
+ <EditText
+ android:id="@+id/user_name"
+ android:enabled="false"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text=""/>
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text="Type: "/>
+ <EditText
+ android:id="@+id/user_type"
+ android:enabled="false"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text=""/>
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text="Flags: "/>
+ <EditText
+ android:id="@+id/user_flags"
+ android:enabled="false"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text=""/>
+ </LinearLayout>
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal" >
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text="Is admin? "/>
+ <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content"
+ android:id="@+id/is_admin"/>
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text="Associate Key Fob?"/>
+ <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content"
+ android:id="@+id/is_associated_key_fob"/>
+ </LinearLayout>
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text="Existing Users"/>
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal" >
+ <com.google.android.car.kitchensink.users.UsersSpinner
+ android:id="@+id/existing_users"
+ android:layout_width="wrap_content" android:layout_height="wrap_content"/>
+ <Button
+ android:id="@+id/switch_user"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text="Switch"/>
+ <Button
+ android:id="@+id/remove_user"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text="Remove"/>
+ <Button
+ android:id="@+id/lock_user_data"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text="Lock Data"/>
+ </LinearLayout>
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal" >
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text="Type: "/>
+ <EditText
+ android:id="@+id/selected_user_type"
+ android:enabled="false"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text=""/>
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text="Flags: "/>
+ <EditText
+ android:id="@+id/selected_user_flags"
+ android:enabled="false"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text=""/>
+ </LinearLayout>
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text="New User"/>
+ <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal" >
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text="Name: "/>
+ <EditText
+ android:id="@+id/new_user_name"
+ android:layout_width="150dp"
+ android:layout_height="wrap_content"
+ android:maxLength="25"
+ android:text=""/>
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text="Is admin? "/>
+ <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content"
+ android:id="@+id/new_user_is_admin"/>
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text="Is guest? "/>
+ <CheckBox android:layout_width="wrap_content" android:layout_height="wrap_content"
+ android:id="@+id/new_user_is_guest"/>
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text="Extra flags: "/>
+ <EditText
+ android:id="@+id/new_user_flags"
+ android:layout_width="30dp"
+ android:layout_height="wrap_content"
+ android:maxLength="3"
+ android:inputType="numberDecimal"
+ android:text=""/>
+ <Button
+ android:id="@+id/create_user"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" android:text="Create"/>
+
+ </LinearLayout>
+</LinearLayout>
diff --git a/tests/EmbeddedKitchenSinkApp/res/layout/users.xml b/tests/EmbeddedKitchenSinkApp/res/layout/user_restrictions.xml
similarity index 100%
rename from tests/EmbeddedKitchenSinkApp/res/layout/users.xml
rename to tests/EmbeddedKitchenSinkApp/res/layout/user_restrictions.xml
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java
index 0732562..a7a4530 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/KitchenSinkActivity.java
@@ -56,7 +56,6 @@
import com.google.android.car.kitchensink.displayinfo.DisplayInfoFragment;
import com.google.android.car.kitchensink.experimental.ExperimentalFeatureTestFragment;
import com.google.android.car.kitchensink.hvac.HvacTestFragment;
-import com.google.android.car.kitchensink.insets.WindowInsetsFragment;
import com.google.android.car.kitchensink.notification.NotificationFragment;
import com.google.android.car.kitchensink.orientation.OrientationTestFragment;
import com.google.android.car.kitchensink.packageinfo.PackageInfoFragment;
@@ -67,10 +66,12 @@
import com.google.android.car.kitchensink.sensor.SensorsTestFragment;
import com.google.android.car.kitchensink.storagelifetime.StorageLifetimeFragment;
import com.google.android.car.kitchensink.storagevolumes.StorageVolumesFragment;
+import com.google.android.car.kitchensink.systembars.SystemBarsFragment;
import com.google.android.car.kitchensink.systemfeatures.SystemFeaturesFragment;
import com.google.android.car.kitchensink.touch.TouchTestFragment;
import com.google.android.car.kitchensink.users.ProfileUserFragment;
-import com.google.android.car.kitchensink.users.UsersFragment;
+import com.google.android.car.kitchensink.users.UserFragment;
+import com.google.android.car.kitchensink.users.UserRestrictionsFragment;
import com.google.android.car.kitchensink.vehiclectrl.VehicleCtrlFragment;
import com.google.android.car.kitchensink.vhal.VehicleHalFragment;
import com.google.android.car.kitchensink.volume.VolumeTestFragment;
@@ -195,14 +196,15 @@
new FragmentMenuEntry("sensors", SensorsTestFragment.class),
new FragmentMenuEntry("storage lifetime", StorageLifetimeFragment.class),
new FragmentMenuEntry("storage volumes", StorageVolumesFragment.class),
+ new FragmentMenuEntry("system bars", SystemBarsFragment.class),
new FragmentMenuEntry("system features", SystemFeaturesFragment.class),
new FragmentMenuEntry("touch test", TouchTestFragment.class),
- new FragmentMenuEntry("users", UsersFragment.class),
+ new FragmentMenuEntry("users", UserFragment.class),
+ new FragmentMenuEntry("user restrictions", UserRestrictionsFragment.class),
new FragmentMenuEntry("vehicle ctrl", VehicleCtrlFragment.class),
new FragmentMenuEntry("vehicle hal", VehicleHalFragment.class),
new FragmentMenuEntry("volume test", VolumeTestFragment.class),
- new FragmentMenuEntry("web links", WebLinksTestFragment.class),
- new FragmentMenuEntry("window insets", WindowInsetsFragment.class));
+ new FragmentMenuEntry("web links", WebLinksTestFragment.class));
private Car mCarApi;
private CarHvacManager mHvacManager;
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/insets/WindowInsetsFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/insets/WindowInsetsFragment.java
deleted file mode 100644
index f4d52cf..0000000
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/insets/WindowInsetsFragment.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (C) 2020 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.google.android.car.kitchensink.insets;
-
-import android.os.Bundle;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.WindowInsets;
-import android.view.WindowInsetsController;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.fragment.app.Fragment;
-
-import com.google.android.car.kitchensink.R;
-
-/** Test fragment for controlling window insets. */
-public final class WindowInsetsFragment extends Fragment {
-
- private WindowInsetsController mWindowInsetsController;
-
- @Nullable
- @Override
- public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
- @Nullable Bundle savedInstanceState) {
- return inflater.inflate(R.layout.window_insets_fragment, container,
- /* attachToRoot= */ false);
- }
-
- @Override
- public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
- mWindowInsetsController = view.getWindowInsetsController();
- initStatusBarInsetsButtons(view);
- initNavigationBarInsetsButtons(view);
- initSystemBarInsetsButtons(view);
- initSystemBarBehaviorButtons(view);
- }
-
- private void initStatusBarInsetsButtons(View view) {
- view.findViewById(R.id.show_status_bar_insets).setOnClickListener(
- v -> mWindowInsetsController.show(WindowInsets.Type.statusBars()));
- view.findViewById(R.id.hide_status_bar_insets).setOnClickListener(
- v -> mWindowInsetsController.hide(WindowInsets.Type.statusBars()));
- }
-
- private void initNavigationBarInsetsButtons(View view) {
- view.findViewById(R.id.show_nav_bar_insets).setOnClickListener(
- v -> mWindowInsetsController.show(WindowInsets.Type.navigationBars()));
- view.findViewById(R.id.hide_nav_bar_insets).setOnClickListener(
- v -> mWindowInsetsController.hide(WindowInsets.Type.navigationBars()));
- }
-
- private void initSystemBarInsetsButtons(View view) {
- view.findViewById(R.id.show_system_bar_insets).setOnClickListener(
- v -> mWindowInsetsController.show(WindowInsets.Type.systemBars()));
- view.findViewById(R.id.hide_system_bar_insets).setOnClickListener(
- v -> mWindowInsetsController.hide(WindowInsets.Type.systemBars()));
- }
-
- private void initSystemBarBehaviorButtons(View view) {
- view.findViewById(R.id.show_bars_by_touch).setOnClickListener(
- v -> mWindowInsetsController.setSystemBarsBehavior(
- WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_TOUCH));
- view.findViewById(R.id.show_bars_by_swipe).setOnClickListener(
- v -> mWindowInsetsController.setSystemBarsBehavior(
- WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_SWIPE));
- view.findViewById(R.id.show_transient_bars_by_swipe).setOnClickListener(
- v -> mWindowInsetsController.setSystemBarsBehavior(
- WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE));
- }
-}
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/packageinfo/PackageInfoFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/packageinfo/PackageInfoFragment.java
index 039cc8c..bfe1f8f 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/packageinfo/PackageInfoFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/packageinfo/PackageInfoFragment.java
@@ -113,7 +113,7 @@
for (PackageInfo packageInfo : packages) {
Log.d(TAG, "checking package: " + packageInfo);
- boolean toBlacklist = true;
+ boolean toDenyList = true;
// check share user id, show package does not have sharedUserId or not system uid
if (mFilterSharedUid) {
if (DEBUG) {
@@ -121,7 +121,7 @@
|| !packageInfo.sharedUserId.equals(SYSTEM_UID)));
}
- toBlacklist &= (packageInfo.sharedUserId == null
+ toDenyList &= (packageInfo.sharedUserId == null
|| !packageInfo.sharedUserId.equals(SYSTEM_UID));
}
@@ -133,7 +133,7 @@
}
}
- toBlacklist &= !(Arrays.asList(packageInfo.requestedPermissions).stream().anyMatch(
+ toDenyList &= !(Arrays.asList(packageInfo.requestedPermissions).stream().anyMatch(
info -> IMPORTANT_PERMISSIONS.contains(info)));
}
// check services, w/o service or service not exported and w/o single user flag
@@ -145,7 +145,7 @@
}
}
- toBlacklist &= Arrays.asList(packageInfo.services).stream().anyMatch(info ->
+ toDenyList &= Arrays.asList(packageInfo.services).stream().anyMatch(info ->
!info.exported && (info.flags & ServiceInfo.FLAG_SINGLE_USER) == 0);
}
// check activities
@@ -156,11 +156,11 @@
&& packageInfo.services == null
&& packageInfo.providers == null));
}
- toBlacklist &= (packageInfo.activities != null
+ toDenyList &= (packageInfo.activities != null
&& packageInfo.services == null && packageInfo.providers == null);
}
- if (toBlacklist) {
+ if (toDenyList) {
mPackagesToDisableForSystemUser.add(packageInfo);
}
}
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/sensor/SensorsTestFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/sensor/SensorsTestFragment.java
index 151cc53..a8f8c6f 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/sensor/SensorsTestFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/sensor/SensorsTestFragment.java
@@ -16,8 +16,6 @@
package com.google.android.car.kitchensink.sensor;
-import static java.lang.Integer.toHexString;
-
import android.Manifest;
import android.annotation.Nullable;
import android.car.Car;
@@ -26,12 +24,14 @@
import android.car.hardware.CarPropertyValue;
import android.car.hardware.property.CarPropertyManager;
import android.content.pm.PackageManager;
+import android.hardware.automotive.vehicle.V2_0.VehiclePropertyType;
import android.os.Bundle;
import android.os.Handler;
import android.text.TextUtils;
import android.text.method.ScrollingMovementMethod;
import android.util.ArraySet;
import android.util.Log;
+import android.util.SparseIntArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -42,9 +42,8 @@
import com.google.android.car.kitchensink.KitchenSinkActivity;
import com.google.android.car.kitchensink.R;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
@@ -65,6 +64,50 @@
Car.PERMISSION_SPEED,
Car.PERMISSION_CAR_DYNAMICS_STATE
};
+ private static final ArraySet<Integer> SENSORS_SET = new ArraySet<>(Arrays.asList(
+ VehiclePropertyIds.PERF_VEHICLE_SPEED,
+ VehiclePropertyIds.ENGINE_RPM,
+ VehiclePropertyIds.PERF_ODOMETER,
+ VehiclePropertyIds.FUEL_LEVEL,
+ VehiclePropertyIds.FUEL_DOOR_OPEN,
+ VehiclePropertyIds.IGNITION_STATE,
+ VehiclePropertyIds.PARKING_BRAKE_ON,
+ VehiclePropertyIds.GEAR_SELECTION,
+ VehiclePropertyIds.NIGHT_MODE,
+ VehiclePropertyIds.ENV_OUTSIDE_TEMPERATURE,
+ VehiclePropertyIds.WHEEL_TICK,
+ VehiclePropertyIds.ABS_ACTIVE,
+ VehiclePropertyIds.TRACTION_CONTROL_ACTIVE,
+ VehiclePropertyIds.EV_BATTERY_LEVEL,
+ VehiclePropertyIds.EV_CHARGE_PORT_OPEN,
+ VehiclePropertyIds.EV_CHARGE_PORT_CONNECTED,
+ VehiclePropertyIds.EV_BATTERY_INSTANTANEOUS_CHARGE_RATE,
+ VehiclePropertyIds.ENGINE_OIL_LEVEL
+ ));
+ private static final SparseIntArray PROPERTY_TO_RESOURCE =
+ new SparseIntArray() {{
+ put(VehiclePropertyIds.PERF_VEHICLE_SPEED, R.string.sensor_speed);
+ put(VehiclePropertyIds.ENGINE_RPM, R.string.sensor_rpm);
+ put(VehiclePropertyIds.PERF_ODOMETER, R.string.sensor_odometer);
+ put(VehiclePropertyIds.FUEL_LEVEL, R.string.sensor_fuel_level);
+ put(VehiclePropertyIds.FUEL_DOOR_OPEN, R.string.sensor_fuel_door_open);
+ put(VehiclePropertyIds.IGNITION_STATE, R.string.sensor_ignition_status);
+ put(VehiclePropertyIds.PARKING_BRAKE_ON, R.string.sensor_parking_brake);
+ put(VehiclePropertyIds.GEAR_SELECTION, R.string.sensor_gear);
+ put(VehiclePropertyIds.NIGHT_MODE, R.string.sensor_night);
+ put(VehiclePropertyIds.ENV_OUTSIDE_TEMPERATURE, R.string.sensor_environment);
+ put(VehiclePropertyIds.WHEEL_TICK, R.string.sensor_wheel_ticks);
+ put(VehiclePropertyIds.ABS_ACTIVE, R.string.sensor_abs_is_active);
+ put(VehiclePropertyIds.TRACTION_CONTROL_ACTIVE,
+ R.string.sensor_traction_control_is_active);
+ put(VehiclePropertyIds.EV_BATTERY_LEVEL, R.string.sensor_ev_battery_level);
+ put(VehiclePropertyIds.EV_CHARGE_PORT_OPEN, R.string.sensor_ev_charge_port_is_open);
+ put(VehiclePropertyIds.EV_CHARGE_PORT_CONNECTED,
+ R.string.sensor_ev_charge_port_is_connected);
+ put(VehiclePropertyIds.EV_BATTERY_INSTANTANEOUS_CHARGE_RATE,
+ R.string.sensor_ev_charge_rate);
+ put(VehiclePropertyIds.ENGINE_OIL_LEVEL, R.string.sensor_engine_oil_level);
+ }};
private final CarPropertyManager.CarPropertyEventCallback mCarPropertyEventCallback =
new CarPropertyManager.CarPropertyEventCallback() {
@@ -88,20 +131,11 @@
private final Handler mHandler = new Handler();
private final Map<Integer, CarPropertyValue> mValueMap = new ConcurrentHashMap<>();
-
-
- private final DateFormat mDateFormat = SimpleDateFormat.getDateTimeInstance();
-
private KitchenSinkActivity mActivity;
- private Car mCar;
-
private CarPropertyManager mCarPropertyManager;
-
private LocationListeners mLocationListener;
private String mNaString;
-
- private List<CarPropertyConfig> mPropertyList;
-
+ private List<CarPropertyConfig> mCarPropertyConfigs;
private Set<String> mActivePermissions = new HashSet<String>();
private TextView mSensorInfo;
@@ -155,55 +189,39 @@
private void initSensors() {
try {
- if (mCarPropertyManager == null) {
- mCarPropertyManager =
- (CarPropertyManager) ((KitchenSinkActivity) getActivity()).getPropertyManager();
- }
- ArraySet<Integer> set = new ArraySet<>();
- set.add(VehiclePropertyIds.PERF_VEHICLE_SPEED);
- set.add(VehiclePropertyIds.ENGINE_RPM);
- set.add(VehiclePropertyIds.PERF_ODOMETER);
- set.add(VehiclePropertyIds.FUEL_LEVEL);
- set.add(VehiclePropertyIds.FUEL_DOOR_OPEN);
- set.add(VehiclePropertyIds.IGNITION_STATE);
- set.add(VehiclePropertyIds.PARKING_BRAKE_ON);
- set.add(VehiclePropertyIds.GEAR_SELECTION);
- set.add(VehiclePropertyIds.NIGHT_MODE);
- set.add(VehiclePropertyIds.ENV_OUTSIDE_TEMPERATURE);
- set.add(VehiclePropertyIds.WHEEL_TICK);
- set.add(VehiclePropertyIds.ABS_ACTIVE);
- set.add(VehiclePropertyIds.TRACTION_CONTROL_ACTIVE);
- set.add(VehiclePropertyIds.EV_BATTERY_LEVEL);
- set.add(VehiclePropertyIds.EV_CHARGE_PORT_OPEN);
- set.add(VehiclePropertyIds.EV_CHARGE_PORT_CONNECTED);
- set.add(VehiclePropertyIds.EV_BATTERY_INSTANTANEOUS_CHARGE_RATE);
- set.add(VehiclePropertyIds.ENGINE_OIL_LEVEL);
-
- mPropertyList = mCarPropertyManager.getPropertyList(set);
-
- for (CarPropertyConfig property : mPropertyList) {
- float rate = CarPropertyManager.SENSOR_RATE_NORMAL;
- if (property.getChangeMode()
- == CarPropertyConfig.VEHICLE_PROPERTY_CHANGE_MODE_ONCHANGE) {
- rate = CarPropertyManager.SENSOR_RATE_ONCHANGE;
- }
- mCarPropertyManager.registerCallback(mCarPropertyEventCallback,
- property.getPropertyId(), rate);
- }
+ initCarSensor();
+ initLocationSensor();
} catch (Exception e) {
- Log.e(TAG, "initSensors() exception caught SensorManager: ", e);
+ Log.e(TAG, "initSensors() exception caught ", e);
}
- try {
- if (mLocationListener == null) {
- mLocationListener = new LocationListeners(getContext(),
- new LocationInfoTextUpdateListener());
+
+ }
+
+ private void initCarSensor() {
+ if (mCarPropertyManager == null) {
+ mCarPropertyManager = ((KitchenSinkActivity) getActivity()).getPropertyManager();
+ }
+ mCarPropertyConfigs = mCarPropertyManager.getPropertyList(SENSORS_SET);
+
+ for (CarPropertyConfig property : mCarPropertyConfigs) {
+ float rate = CarPropertyManager.SENSOR_RATE_NORMAL;
+ if (property.getChangeMode()
+ == CarPropertyConfig.VEHICLE_PROPERTY_CHANGE_MODE_ONCHANGE) {
+ rate = CarPropertyManager.SENSOR_RATE_ONCHANGE;
}
- mLocationListener.startListening();
- } catch (Exception e) {
- Log.e(TAG, "initSensors() exception caught from LocationListeners: ", e);
+ mCarPropertyManager.registerCallback(mCarPropertyEventCallback,
+ property.getPropertyId(), rate);
}
}
+ private void initLocationSensor() {
+ if (mLocationListener == null) {
+ mLocationListener = new LocationListeners(getContext(),
+ new LocationInfoTextUpdateListener());
+ }
+ mLocationListener.startListening();
+ }
+
private void initPermissions() {
Set<String> missingPermissions = checkExistingPermissions();
if (!missingPermissions.isEmpty()) {
@@ -229,7 +247,6 @@
private void requestPermissions(Set<String> permissions) {
Log.d(TAG, "requesting additional permissions=" + permissions);
-
requestPermissions(permissions.toArray(new String[permissions.size()]),
KS_PERMISSIONS_REQUEST);
}
@@ -250,126 +267,47 @@
private void refreshSensorInfoText() {
String summaryString;
- synchronized (this) {
- List<String> summary = new ArrayList<>();
- for (CarPropertyConfig property : mPropertyList) {
- int propertyId = property.getPropertyId();
- CarPropertyValue value = mValueMap.get(propertyId);
- switch (propertyId) {
- case VehiclePropertyIds.PERF_VEHICLE_SPEED: //0x11600207 291504647
- summary.add(getContext().getString(R.string.sensor_speed,
- getTimestamp(value),
- value == null ? mNaString : (float) value.getValue()));
- break;
- case VehiclePropertyIds.ENGINE_RPM: //0x11600305 291504901
- summary.add(getContext().getString(R.string.sensor_rpm,
- getTimestamp(value),
- value == null ? mNaString : (float) value.getValue()));
- break;
- case VehiclePropertyIds.PERF_ODOMETER: //0x11600204 291504644
- summary.add(getContext().getString(R.string.sensor_odometer,
- getTimestamp(value),
- value == null ? mNaString : (float) value.getValue()));
- break;
- case VehiclePropertyIds.FUEL_LEVEL: //0x11600307 291504903
- summary.add(getFuelLevel(value));
- break;
- case VehiclePropertyIds.FUEL_DOOR_OPEN: //0x11200308 287310600
- summary.add(getFuelDoorOpen(value));
- break;
- case VehiclePropertyIds.IGNITION_STATE: //0x11400409 289408009
- summary.add(getContext().getString(R.string.sensor_ignition_status,
- getTimestamp(value),
- value == null ? mNaString :
- (int) value.getValue()));
- break;
- case VehiclePropertyIds.PARKING_BRAKE_ON: //0x11200402 287310850
- summary.add(getContext().getString(R.string.sensor_parking_brake,
- getTimestamp(value),
- value == null ? mNaString :
- value.getValue()));
- break;
- case VehiclePropertyIds.GEAR_SELECTION: //0x11400400 289408000
- summary.add(getContext().getString(R.string.sensor_gear,
- getTimestamp(value),
- value == null ? mNaString : (int) value.getValue()));
- break;
- case VehiclePropertyIds.NIGHT_MODE: //0x11200407 287310855
- summary.add(getContext().getString(R.string.sensor_night,
- getTimestamp(value),
- value == null ? mNaString : value.getValue()));
- break;
- case VehiclePropertyIds.ENV_OUTSIDE_TEMPERATURE: //0x11600703 291505923
- String temperature = mNaString;
- if (value != null) {
- temperature = String.valueOf((float) value.getValue());
- }
- summary.add(getContext().getString(R.string.sensor_environment,
- getTimestamp(value), temperature));
- break;
- case VehiclePropertyIds.WHEEL_TICK: //0x11510306 290521862
- if (value != null) {
- Long[] wheelTickData = (Long[]) value.getValue();
- summary.add(getContext().getString(R.string.sensor_wheel_ticks,
- getTimestamp(value),
- wheelTickData[0],
- wheelTickData[1],
- wheelTickData[2],
- wheelTickData[3],
- wheelTickData[4]));
- } else {
- summary.add(getContext().getString(R.string.sensor_wheel_ticks,
- getTimestamp(value), mNaString, mNaString, mNaString, mNaString,
- mNaString));
- }
- List<Integer> wheelProperties = property.getConfigArray();
- summary.add(getContext().getString(R.string.sensor_wheel_ticks_cfg,
- wheelProperties.get(0),
- wheelProperties.get(1),
- wheelProperties.get(2),
- wheelProperties.get(3),
- wheelProperties.get(4)));
- break;
- case VehiclePropertyIds.ABS_ACTIVE: //0x1120040a 287310858
- summary.add(getContext().getString(R.string.sensor_abs_is_active,
- getTimestamp(value), value == null ? mNaString :
- value.getValue()));
- break;
+ List<String> summary = formSummary();
+ summaryString = TextUtils.join("\n", summary);
+ mHandler.post(() -> mSensorInfo.setText(summaryString));
+ }
- case VehiclePropertyIds.TRACTION_CONTROL_ACTIVE: //0x1120040b 287310859
- summary.add(
- getContext().getString(R.string.sensor_traction_control_is_active,
- getTimestamp(value), value == null ? mNaString :
- value.getValue()));
- break;
- case VehiclePropertyIds.EV_BATTERY_LEVEL: //0x11600309 291504905
- summary.add(getEvBatteryLevel(value));
- break;
- case VehiclePropertyIds.EV_CHARGE_PORT_OPEN: //0x1120030a 287310602
- summary.add(getEvChargePortOpen(value));
- break;
- case VehiclePropertyIds.EV_CHARGE_PORT_CONNECTED: //0x1120030b 287310603
- summary.add(getEvChargePortConnected(value));
- break;
- case VehiclePropertyIds.EV_BATTERY_INSTANTANEOUS_CHARGE_RATE:
- summary.add(getEvChargeRate(value));
- break;
- case VehiclePropertyIds.ENGINE_OIL_LEVEL: //0x11400303 289407747
- summary.add(getEngineOilLevel(value));
- break;
- default:
- // Should never happen.
- Log.w(TAG, "Unrecognized event type: " + toHexString(propertyId));
+ private List<String> formSummary() {
+ List<String> summary = new ArrayList<>();
+ for (CarPropertyConfig propertyConfig : mCarPropertyConfigs) {
+ int propertyId = propertyConfig.getPropertyId();
+ CarPropertyValue propertyValue = mValueMap.get(propertyId);
+ int resourceId = PROPERTY_TO_RESOURCE.get(propertyId);
+ // for wheel_tick, add the configuration.
+ if (propertyId == VehiclePropertyIds.WHEEL_TICK) {
+ if (propertyValue != null) {
+ Long[] wheelTickData = (Long[]) propertyValue.getValue();
+ summary.add(getContext().getString(R.string.sensor_wheel_ticks,
+ getTimestamp(propertyValue),
+ wheelTickData[0],
+ wheelTickData[1],
+ wheelTickData[2],
+ wheelTickData[3],
+ wheelTickData[4]));
+ } else {
+ summary.add(getContext().getString(R.string.sensor_wheel_ticks,
+ getTimestamp(propertyValue),
+ mNaString, mNaString, mNaString, mNaString, mNaString));
}
+ List<Integer> configArray = propertyConfig.getConfigArray();
+ summary.add(getContext().getString(R.string.sensor_wheel_ticks_cfg,
+ configArray.get(0),
+ configArray.get(1),
+ configArray.get(2),
+ configArray.get(3),
+ configArray.get(4)));
+ } else {
+ summary.add(getContext().getString(
+ resourceId, getTimestamp(propertyValue),
+ getStringOfPropertyValue(propertyValue)));
}
- summaryString = TextUtils.join("\n", summary);
}
- mHandler.post(new Runnable() {
- @Override
- public void run() {
- mSensorInfo.setText(summaryString);
- }
- });
+ return summary;
}
private String getTimestamp(CarPropertyValue value) {
@@ -383,66 +321,23 @@
return Double.toString(System.nanoTime() / (1000L * 1000L * 1000L)) + " seconds";
}
- private String getFuelLevel(CarPropertyValue value) {
- String fuelLevel = mNaString;
+ private String getStringOfPropertyValue(CarPropertyValue value) {
+ String defaultString = mNaString;
if (value != null) {
- fuelLevel = String.valueOf((float) value.getValue());
+ if (isArrayType(value.getPropertyId())) {
+ defaultString = Arrays.toString((Object[]) value.getValue());
+ } else {
+ defaultString = value.getValue().toString();
+ }
}
- return getContext().getString(R.string.sensor_fuel_level, getTimestamp(value), fuelLevel);
+ return defaultString;
}
- private String getFuelDoorOpen(CarPropertyValue value) {
- String fuelDoorOpen = mNaString;
- if (value != null) {
- fuelDoorOpen = String.valueOf(value.getValue());
- }
- return getContext().getString(R.string.sensor_fuel_door_open, getTimestamp(value),
- fuelDoorOpen);
- }
-
- private String getEvBatteryLevel(CarPropertyValue value) {
- String evBatteryLevel = mNaString;
- if (value != null) {
- evBatteryLevel = String.valueOf((float) value.getValue());
- }
- return getContext().getString(R.string.sensor_ev_battery_level, getTimestamp(value),
- evBatteryLevel);
- }
-
- private String getEvChargePortOpen(CarPropertyValue value) {
- String evChargePortOpen = mNaString;
- if (value != null) {
- evChargePortOpen = String.valueOf((float) value.getValue());
- }
- return getContext().getString(R.string.sensor_ev_charge_port_is_open, getTimestamp(value),
- evChargePortOpen);
- }
-
- private String getEvChargePortConnected(CarPropertyValue value) {
- String evChargePortConnected = mNaString;
- if (value != null) {
- evChargePortConnected = String.valueOf((float) value.getValue());
- }
- return getContext().getString(R.string.sensor_ev_charge_port_is_connected,
- getTimestamp(value), evChargePortConnected);
- }
-
- private String getEvChargeRate(CarPropertyValue value) {
- String evChargeRate = mNaString;
- if (value != null) {
- evChargeRate = String.valueOf((float) value.getValue());
- }
- return getContext().getString(R.string.sensor_ev_charge_rate, getTimestamp(value),
- evChargeRate);
- }
-
- private String getEngineOilLevel(CarPropertyValue value) {
- String engineOilLevel = mNaString;
- if (value != null) {
- engineOilLevel = String.valueOf((float) value.getValue());
- }
- return getContext().getString(R.string.sensor_oil_level, getTimestamp(value),
- engineOilLevel);
+ private boolean isArrayType(int propertyId) {
+ int mask = propertyId & VehiclePropertyType.MASK;
+ return mask == VehiclePropertyType.FLOAT_VEC
+ || mask == VehiclePropertyType.INT32_VEC
+ || mask == VehiclePropertyType.INT64_VEC;
}
public class LocationInfoTextUpdateListener {
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/systembars/SystemBarsFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/systembars/SystemBarsFragment.java
new file mode 100644
index 0000000..497e7e8
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/systembars/SystemBarsFragment.java
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2020 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.google.android.car.kitchensink.systembars;
+
+import android.graphics.Color;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.Window;
+import android.view.WindowInsets;
+import android.view.WindowInsetsController;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.fragment.app.Fragment;
+
+import com.google.android.car.kitchensink.R;
+
+/** Test fragment for controlling window insets. */
+public final class SystemBarsFragment extends Fragment {
+
+ private static final int COLOR_UNSET = 0;
+
+ private WindowInsetsController mWindowInsetsController;
+ private boolean mStatusBarColorApplied;
+ private boolean mNavigationBarColorApplied;
+ private int mStatusBarDefaultColor = COLOR_UNSET;
+ private int mNavigatioNBarDefaultColor = COLOR_UNSET;
+
+ @Nullable
+ @Override
+ public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.system_bars_fragment, container,
+ /* attachToRoot= */ false);
+ }
+
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ mWindowInsetsController = view.getWindowInsetsController();
+ initStatusBarInsetsButtons(view);
+ initNavigationBarInsetsButtons(view);
+ initSystemBarInsetsButtons(view);
+ initSystemBarBehaviorButtons(view);
+ initSystemBarColorButtons(view);
+ }
+
+ private void initStatusBarInsetsButtons(View view) {
+ view.findViewById(R.id.show_status_bar_insets).setOnClickListener(
+ v -> mWindowInsetsController.show(WindowInsets.Type.statusBars()));
+ view.findViewById(R.id.hide_status_bar_insets).setOnClickListener(
+ v -> mWindowInsetsController.hide(WindowInsets.Type.statusBars()));
+ }
+
+ private void initNavigationBarInsetsButtons(View view) {
+ view.findViewById(R.id.show_nav_bar_insets).setOnClickListener(
+ v -> mWindowInsetsController.show(WindowInsets.Type.navigationBars()));
+ view.findViewById(R.id.hide_nav_bar_insets).setOnClickListener(
+ v -> mWindowInsetsController.hide(WindowInsets.Type.navigationBars()));
+ }
+
+ private void initSystemBarInsetsButtons(View view) {
+ view.findViewById(R.id.show_system_bar_insets).setOnClickListener(
+ v -> mWindowInsetsController.show(WindowInsets.Type.systemBars()));
+ view.findViewById(R.id.hide_system_bar_insets).setOnClickListener(
+ v -> mWindowInsetsController.hide(WindowInsets.Type.systemBars()));
+ }
+
+ private void initSystemBarBehaviorButtons(View view) {
+ view.findViewById(R.id.show_bars_by_touch).setOnClickListener(
+ v -> mWindowInsetsController.setSystemBarsBehavior(
+ WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_TOUCH));
+ view.findViewById(R.id.show_bars_by_swipe).setOnClickListener(
+ v -> mWindowInsetsController.setSystemBarsBehavior(
+ WindowInsetsController.BEHAVIOR_SHOW_BARS_BY_SWIPE));
+ view.findViewById(R.id.show_transient_bars_by_swipe).setOnClickListener(
+ v -> mWindowInsetsController.setSystemBarsBehavior(
+ WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE));
+ }
+
+ private void initSystemBarColorButtons(View view) {
+ view.findViewById(R.id.color_status_bars).setOnClickListener(
+ v -> {
+ Window window = getActivity().getWindow();
+ if (mStatusBarColorApplied) {
+ window.setStatusBarColor(mStatusBarDefaultColor);
+ mStatusBarColorApplied = false;
+ } else {
+ // If status bar default color is unset, first get its current color as the
+ // default so we can toggle between the default and red (rgb(255, 0, 0)).
+ if (mStatusBarDefaultColor == COLOR_UNSET) {
+ mStatusBarDefaultColor = window.getStatusBarColor();
+ }
+ window.setStatusBarColor(Color.RED);
+ mStatusBarColorApplied = true;
+ }
+ });
+ view.findViewById(R.id.color_navigation_bars).setOnClickListener(
+ v -> {
+ Window window = getActivity().getWindow();
+ if (mNavigationBarColorApplied) {
+ window.setNavigationBarColor(mNavigatioNBarDefaultColor);
+ mNavigationBarColorApplied = false;
+ } else {
+ // If nav bar default color is unset, first get its current color as the
+ // default so we can toggle between the default and red (rgb(255, 0, 0)).
+ if (mNavigatioNBarDefaultColor == COLOR_UNSET) {
+ mNavigatioNBarDefaultColor = window.getNavigationBarColor();
+ }
+ window.setNavigationBarColor(Color.RED);
+ mNavigationBarColorApplied = true;
+ }
+ });
+ }
+}
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/users/UserFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/users/UserFragment.java
new file mode 100644
index 0000000..e08e881
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/users/UserFragment.java
@@ -0,0 +1,387 @@
+/*
+ * Copyright (C) 2020 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.google.android.car.kitchensink.users;
+
+import static android.hardware.automotive.vehicle.V2_0.UserIdentificationAssociationSetValue.ASSOCIATE_CURRENT_USER;
+import static android.hardware.automotive.vehicle.V2_0.UserIdentificationAssociationSetValue.DISASSOCIATE_CURRENT_USER;
+import static android.hardware.automotive.vehicle.V2_0.UserIdentificationAssociationType.KEY_FOB;
+import static android.hardware.automotive.vehicle.V2_0.UserIdentificationAssociationValue.ASSOCIATED_CURRENT_USER;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.app.AlertDialog;
+import android.car.Car;
+import android.car.user.CarUserManager;
+import android.car.user.UserCreationResult;
+import android.car.user.UserIdentificationAssociationResponse;
+import android.car.user.UserRemovalResult;
+import android.car.user.UserSwitchResult;
+import android.car.util.concurrent.AsyncFuture;
+import android.content.pm.UserInfo;
+import android.hardware.automotive.vehicle.V2_0.UserIdentificationAssociationSetValue;
+import android.hardware.automotive.vehicle.V2_0.UserIdentificationAssociationValue;
+import android.os.Bundle;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.os.storage.StorageManager;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.EditText;
+
+import androidx.fragment.app.Fragment;
+
+import com.google.android.car.kitchensink.KitchenSinkActivity;
+import com.google.android.car.kitchensink.R;
+
+import java.util.List;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Shows information (and actions) about the current user.
+ *
+ * <p>Could / should be improved to:
+ *
+ * <ul>
+ * <li>Add more actions like renaming or deleting the user.
+ * <li>Add actions for other users (switch, create, remove etc).
+ * <li>Add option on how to execute tasks above (UserManager or CarUserManager).
+ * <li>Merge with UserRestrictions and ProfileUser fragments.
+ * </ul>
+ */
+public final class UserFragment extends Fragment {
+
+ private static final String TAG = UserFragment.class.getSimpleName();
+
+ private static final long TIMEOUT_MS = 5_000;
+
+ private final int mUserId = UserHandle.myUserId();
+ private UserManager mUserManager;
+ private CarUserManager mCarUserManager;
+
+ // Current user
+ private EditText mUserIdEditText;
+ private EditText mUserNameEditText;
+ private EditText mUserTypeEditText;
+ private EditText mUserFlagsEditText;
+ private CheckBox mIsAdminCheckBox;
+ private CheckBox mIsAssociatedKeyFobCheckBox;
+
+ // Existing users
+ private UsersSpinner mUsersSpinner;
+ private Button mSwitchUserButton;
+ private Button mRemoveUserButton;
+ private Button mLockUserDataButton;
+ private EditText mNewUserNameText;
+ private CheckBox mNewUserIsAdminCheckBox;
+ private CheckBox mNewUserIsGuestCheckBox;
+ private EditText mNewUserExtraFlagsText;
+ private Button mCreateUserButton;
+ private EditText mSelectedUserTypeText;
+ private EditText mSelectedUserFlagsText;
+
+
+ @Nullable
+ @Override
+ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
+ @Nullable Bundle savedInstanceState) {
+ return inflater.inflate(R.layout.user, container, false);
+ }
+
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ mUserManager = UserManager.get(getContext());
+ Car car = ((KitchenSinkActivity) getHost()).getCar();
+ mCarUserManager = (CarUserManager) car.getCarManager(Car.CAR_USER_SERVICE);
+
+ mUserIdEditText = view.findViewById(R.id.user_id);
+ mUserNameEditText = view.findViewById(R.id.user_name);
+ mUserTypeEditText = view.findViewById(R.id.user_type);
+ mUserFlagsEditText = view.findViewById(R.id.user_flags);
+ mIsAdminCheckBox = view.findViewById(R.id.is_admin);
+ mIsAssociatedKeyFobCheckBox = view.findViewById(R.id.is_associated_key_fob);
+
+ mUsersSpinner = view.findViewById(R.id.existing_users);
+ mSwitchUserButton = view.findViewById(R.id.switch_user);
+ mRemoveUserButton = view.findViewById(R.id.remove_user);
+ mLockUserDataButton = view.findViewById(R.id.lock_user_data);
+ mNewUserNameText = view.findViewById(R.id.new_user_name);
+ mNewUserIsAdminCheckBox = view.findViewById(R.id.new_user_is_admin);
+ mNewUserIsGuestCheckBox = view.findViewById(R.id.new_user_is_guest);
+ mNewUserExtraFlagsText = view.findViewById(R.id.new_user_flags);
+ mCreateUserButton = view.findViewById(R.id.create_user);
+ mSelectedUserTypeText = view.findViewById(R.id.selected_user_type);
+ mSelectedUserFlagsText = view.findViewById(R.id.selected_user_flags);
+
+ mIsAdminCheckBox.setOnClickListener((v) -> toggleAdmin());
+ mSwitchUserButton.setOnClickListener((v) -> switchUser());
+ mRemoveUserButton.setOnClickListener((v) -> removeUser());
+ mCreateUserButton.setOnClickListener((v) -> createUser());
+ mLockUserDataButton.setOnClickListener((v) -> lockUserData());
+ mIsAssociatedKeyFobCheckBox.setOnClickListener((v) -> toggleKeyFob());
+
+ updateState();
+ }
+
+ private void toggleAdmin() {
+ if (mIsAdminCheckBox.isChecked()) {
+ new AlertDialog.Builder(getContext())
+ .setMessage("Promoting a user as admin is irreversible.\n\n Confirm?")
+ .setNegativeButton("No", (d, w) -> promoteCurrentUserAsAdmin(false))
+ .setPositiveButton("Yes", (d, w) -> promoteCurrentUserAsAdmin(true))
+ .show();
+ } else {
+ // Shouldn't be called
+ Log.w(TAG, "Cannot un-set an admin user");
+ }
+ }
+
+ private void toggleKeyFob() {
+ associateKeyFob(mIsAssociatedKeyFobCheckBox.isChecked());
+ }
+
+ private void createUser() {
+ String name = mNewUserNameText.getText().toString();
+ if (TextUtils.isEmpty(name)) {
+ name = null;
+ }
+ int flags = 0;
+ boolean isGuest = mNewUserIsGuestCheckBox.isChecked();
+ AsyncFuture<UserCreationResult> future;
+ if (isGuest) {
+ Log.i(TAG, "Create guest: " + name);
+ future = mCarUserManager.createGuest(name);
+ } else {
+ if (mNewUserIsAdminCheckBox.isChecked()) {
+ flags |= UserInfo.FLAG_ADMIN;
+ }
+ String extraFlags = mNewUserExtraFlagsText.getText().toString();
+ if (!TextUtils.isEmpty(extraFlags)) {
+ try {
+ flags |= Integer.parseInt(extraFlags);
+ } catch (RuntimeException e) {
+ Log.e(TAG, "createUser(): non-numeric flags " + extraFlags);
+ }
+ }
+ Log.v(TAG, "Create user: name=" + name + ", flags=" + UserInfo.flagsToString(flags));
+ future = mCarUserManager.createUser(name, UserManager.USER_TYPE_FULL_SECONDARY, flags);
+ }
+ UserCreationResult result = getResult(future);
+ updateState();
+ StringBuilder message = new StringBuilder();
+ if (result == null) {
+ message.append("Timed out creating user");
+ } else {
+ if (result.isSuccess()) {
+ message.append("User created: ").append(result.getUser().toFullString());
+ } else {
+ int status = result.getStatus();
+ message.append("Failed with code ").append(status).append('(')
+ .append(UserCreationResult.statusToString(status)).append(')');
+ message.append("\nFull result: ").append(result);
+ }
+ String error = result.getErrorMessage();
+ if (error != null) {
+ message.append("\nError message: ").append(error);
+ }
+ }
+ showMessage(message.toString());
+ }
+
+ private void removeUser() {
+ int userId = mUsersSpinner.getSelectedUserId();
+ Log.i(TAG, "Remove user: " + userId);
+ UserRemovalResult result = mCarUserManager.removeUser(userId);
+ updateState();
+
+ if (result.isSuccess()) {
+ showMessage("User %d removed", userId);
+ } else {
+ showMessage("Failed to remove user %d: %s", userId,
+ UserRemovalResult.statusToString(result.getStatus()));
+ }
+ }
+
+ private void switchUser() {
+ int userId = mUsersSpinner.getSelectedUserId();
+ Log.i(TAG, "Switch user: " + userId);
+ AsyncFuture<UserSwitchResult> future = mCarUserManager.switchUser(userId);
+ UserSwitchResult result = getResult(future);
+ updateState();
+
+ StringBuilder message = new StringBuilder();
+ if (result == null) {
+ message.append("Timed out switching user");
+ } else {
+ int status = result.getStatus();
+ if (result.isSuccess()) {
+ message.append("Switched to user ").append(userId).append(" (status=")
+ .append(UserSwitchResult.statusToString(status)).append(')');
+ } else {
+ message.append("Failed with code ").append(status).append('(')
+ .append(UserSwitchResult.statusToString(status)).append(')');
+ }
+ String error = result.getErrorMessage();
+ if (error != null) {
+ message.append("\nError message: ").append(error);
+ }
+ }
+ showMessage(message.toString());
+ }
+
+ private void lockUserData() {
+ int userToLock = mUsersSpinner.getSelectedUserId();
+ if (userToLock == UserHandle.USER_NULL) {
+ return;
+ }
+
+ StorageManager storageManager = getContext().getSystemService(StorageManager.class);
+
+ try {
+ storageManager.lockUserKey(userToLock);
+ } catch (Exception e) {
+ showMessage("Error: lock user data: " + e);
+ }
+ }
+
+ private void promoteCurrentUserAsAdmin(boolean promote) {
+ if (!promote) {
+ Log.d(TAG, "NOT promoting user " + mUserId + " as admin");
+ } else {
+ Log.d(TAG, "Promoting user " + mUserId + " as admin");
+ mUserManager.setUserAdmin(mUserId);
+ }
+ updateState();
+ }
+
+ private void updateState() {
+ // Current user
+ int userId = UserHandle.myUserId();
+ boolean isAdmin = mUserManager.isAdminUser();
+ boolean isAssociatedKeyFob = isAssociatedKeyFob();
+
+ UserInfo user = mUserManager.getUserInfo(mUserId);
+ String userName, userType, userFlags;
+ if (user == null) {
+ userName = userType = userFlags = "N/A";
+ } else {
+ userName = user.name;
+ userType = user.userType;
+ userFlags = UserInfo.flagsToString(user.flags);
+ }
+ Log.v(TAG, "updateState(): userId=" + mUserId + ", name=" + userName + ", type=" + userType
+ + ", flags=" + userFlags + ", isAdmin=" + isAdmin
+ + ", isAssociatedKeyFob=" + isAssociatedKeyFob);
+ mUserIdEditText.setText(String.valueOf(mUserId));
+ mUserNameEditText.setText(userName);
+ mUserTypeEditText.setText(userType);
+ mUserFlagsEditText.setText(userFlags);
+
+ mIsAdminCheckBox.setChecked(isAdmin);
+ mIsAdminCheckBox.setEnabled(!isAdmin); // there's no API to "un-admin a user"
+
+ mIsAssociatedKeyFobCheckBox.setChecked(isAssociatedKeyFob);
+
+ // Existing users
+ List<UserInfo> allUsers = mUserManager.getAliveUsers();
+ Log.v(TAG, allUsers.size() + " users: " + allUsers);
+ mUsersSpinner.setOnUserSelectedListener((u) -> onUserSelected(u));
+ mUsersSpinner.init(allUsers);
+ }
+
+ private boolean isAssociatedKeyFob() {
+ UserIdentificationAssociationResponse result = mCarUserManager
+ .getUserIdentificationAssociation(KEY_FOB);
+ if (!result.isSuccess()) {
+ Log.e(TAG, "isAssociatedKeyFob() failed: " + result);
+ return false;
+ }
+ return result.getValues()[0] == ASSOCIATED_CURRENT_USER;
+ }
+
+ private void associateKeyFob(boolean associate) {
+ int value = associate ? ASSOCIATE_CURRENT_USER : DISASSOCIATE_CURRENT_USER;
+ Log.d(TAG, "associateKey(" + associate + "): setting to "
+ + UserIdentificationAssociationSetValue.toString(value));
+
+ AsyncFuture<UserIdentificationAssociationResponse> future = mCarUserManager
+ .setUserIdentificationAssociation(new int[] { KEY_FOB } , new int[] { value });
+ UserIdentificationAssociationResponse result = getResult(future);
+ Log.d(TAG, "Result: " + result);
+
+ String error = null;
+ boolean associated = associate;
+
+ if (result == null) {
+ error = "Timed out associating key fob";
+ } else {
+ if (!result.isSuccess()) {
+ error = "HAL call failed: " + result;
+ } else {
+ int newValue = result.getValues()[0];
+ Log.d(TAG, "New status: " + UserIdentificationAssociationValue.toString(newValue));
+ associated = newValue == ASSOCIATED_CURRENT_USER;
+ if (associated != associate) {
+ error = "Result doesn't match request: "
+ + UserIdentificationAssociationValue.toString(newValue);
+ }
+ }
+ }
+ if (error != null) {
+ showMessage("associateKeyFob(" + associate + ") failed: " + error);
+ }
+ updateState();
+ }
+
+ private void onUserSelected(@NonNull UserInfo user) {
+ mSelectedUserTypeText.setText(user.userType);
+ mSelectedUserFlagsText.setText(UserInfo.flagsToString(user.flags));
+ }
+
+ private void showMessage(String pattern, Object... args) {
+ String message = String.format(pattern, args);
+ Log.v(TAG, "showMessage(): " + message);
+ new AlertDialog.Builder(getContext()).setMessage(message).show();
+ }
+
+ @Nullable
+ private static <T> T getResult(AsyncFuture<T> future) {
+ future.whenCompleteAsync((r, e) -> {
+ if (e != null) {
+ Log.e(TAG, "You have no future!", e);
+ return;
+ }
+ Log.v(TAG, "The future is here: " + r);
+ }, Runnable::run);
+
+ T result = null;
+ try {
+ result = future.get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
+ if (result == null) {
+ Log.e(TAG, "Timeout (" + TIMEOUT_MS + "ms) waiting for future " + future);
+ }
+ } catch (InterruptedException e) {
+ Log.e(TAG, "Interrupted waiting for future " + future, e);
+ Thread.currentThread().interrupt();
+ } catch (Exception e) {
+ Log.e(TAG, "Exception getting future " + future, e);
+ }
+ return result;
+ }
+}
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/users/UsersFragment.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/users/UserRestrictionsFragment.java
similarity index 96%
rename from tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/users/UsersFragment.java
rename to tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/users/UserRestrictionsFragment.java
index 3272c30..628fcd2 100644
--- a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/users/UsersFragment.java
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/users/UserRestrictionsFragment.java
@@ -37,7 +37,7 @@
/**
* Manipulate users in various ways
*/
-public class UsersFragment extends Fragment {
+public class UserRestrictionsFragment extends Fragment {
private static final List<String> CONFIGURABLE_USER_RESTRICTIONS =
Arrays.asList(
@@ -57,7 +57,7 @@
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
- return inflater.inflate(R.layout.users, container, false);
+ return inflater.inflate(R.layout.user_restrictions, container, false);
}
public void onViewCreated(View view, Bundle savedInstanceState) {
diff --git a/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/users/UsersSpinner.java b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/users/UsersSpinner.java
new file mode 100644
index 0000000..e37a53d
--- /dev/null
+++ b/tests/EmbeddedKitchenSinkApp/src/com/google/android/car/kitchensink/users/UsersSpinner.java
@@ -0,0 +1,133 @@
+/*
+ * Copyright (C) 2020 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.google.android.car.kitchensink.users;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.UserIdInt;
+import android.content.Context;
+import android.content.pm.UserInfo;
+import android.os.UserHandle;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.ArrayAdapter;
+import android.widget.Spinner;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * Custom {@link Spinner} to show a list of Android users.
+ */
+public final class UsersSpinner extends Spinner {
+
+ private static final String TAG = UsersSpinner.class.getSimpleName();
+
+ private UserInfo[] mUsers;
+ private String[] mEntries;
+ private OnUserSelectedListener mListener;
+
+ public UsersSpinner(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ /**
+ * Initializes the spinner with the given users.
+ */
+ public void init(List<UserInfo> users) {
+ int size = users.size();
+ mUsers = new UserInfo[size];
+ users.toArray(mUsers);
+ mEntries = new String[size];
+ for (int i = 0; i < size; i++) {
+ UserInfo user = mUsers[i];
+ StringBuilder entry = new StringBuilder().append(user.id).append('-');
+ if (!TextUtils.isEmpty(user.name)) {
+ entry.append(user.name);
+ } else {
+ if (user.id == UserHandle.USER_SYSTEM) {
+ entry.append("SYSTEM");
+ } else {
+ entry.append(UserInfo.flagsToString(user.flags));
+ }
+ }
+ mEntries[i] = entry.toString();
+ }
+ Log.v(TAG, "initializing spinner with " + size + " entries: " + Arrays.toString(mEntries));
+ setAdapter(new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item,
+ mEntries));
+ setOnItemSelectedListener(new OnItemSelectedListener() {
+ @Override
+ public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
+ Log.v(TAG, "onItemSelected(): " + position);
+ if (mListener == null) return;
+ UserInfo user = getSelectedUser();
+ if (user != null) {
+ mListener.onUserSelected(user);
+ }
+ }
+
+ @Override
+ public void onNothingSelected(AdapterView<?> parent) {
+ Log.v(TAG, "nothing selected");
+ }
+ });
+ }
+
+ /**
+ * Gets the selected user id, or {@link UserHandle#USER_NULL}.
+ */
+ public @UserIdInt int getSelectedUserId() {
+ UserInfo user = getSelectedUser();
+ return user == null ? UserHandle.USER_NULL : user.id;
+ }
+
+ /**
+ * Gets the selected user info.
+ */
+ public @Nullable UserInfo getSelectedUser() {
+ int selectedIndex = getSelectedItemPosition();
+ Log.v(TAG, "getSelectedUser(): index=" + selectedIndex);
+ try {
+ return mUsers[selectedIndex];
+ } catch (RuntimeException e) {
+ Log.e(TAG, "getSelectedUserId(): failed to get user at index " + selectedIndex
+ + ". Users: " + Arrays.toString(mUsers));
+ return null;
+ }
+ }
+
+ /**
+ * Sets the listener called when the spinner value change.
+ */
+ public void setOnUserSelectedListener(@Nullable OnUserSelectedListener listener) {
+ mListener = listener;
+ }
+
+ /**
+ * Listener called when the spinner value change.
+ */
+ public interface OnUserSelectedListener {
+ /**
+ * Callback for the selected user.
+ * @param user
+ */
+ void onUserSelected(@NonNull UserInfo user);
+ }
+}
diff --git a/tests/GarageModeTestApp/AndroidManifest.xml b/tests/GarageModeTestApp/AndroidManifest.xml
index b33520f..ff92cdd 100644
--- a/tests/GarageModeTestApp/AndroidManifest.xml
+++ b/tests/GarageModeTestApp/AndroidManifest.xml
@@ -13,28 +13,30 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.google.android.car.garagemode.testapp"
- android:sharedUserId="android.uid.system">
- <uses-sdk
- android:minSdkVersion="24"
- android:targetSdkVersion='25'/>
- <uses-permission android:name="android.car.permission.CAR_DRIVING_STATE" />
- <uses-permission android:name="android.permission.BIND_JOB_SERVICE" />
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.google.android.car.garagemode.testapp"
+ android:sharedUserId="android.uid.system">
+
+ <uses-sdk android:minSdkVersion="24"
+ android:targetSdkVersion="25"/>
+ <uses-permission android:name="android.car.permission.CAR_DRIVING_STATE"/>
+ <uses-permission android:name="android.permission.BIND_JOB_SERVICE"/>
<application android:label="GarageModeTestApp">
<activity android:name=".MainActivity"
- android:theme="@style/GarageModeTheme"
- android:label="@string/app_name">
+ android:theme="@style/GarageModeTheme"
+ android:label="@string/app_name"
+ android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
- <meta-data android:name="distractionOptimized" android:value="true"/>
+ <meta-data android:name="distractionOptimized"
+ android:value="true"/>
</activity>
<service android:name=".DishService"
- android:permission="android.permission.BIND_JOB_SERVICE">
+ android:permission="android.permission.BIND_JOB_SERVICE">
</service>
</application>
</manifest>
diff --git a/tests/MultiDisplaySecondaryHomeTestLauncher/AndroidManifest.xml b/tests/MultiDisplaySecondaryHomeTestLauncher/AndroidManifest.xml
index e4d48ab..2d41d04 100644
--- a/tests/MultiDisplaySecondaryHomeTestLauncher/AndroidManifest.xml
+++ b/tests/MultiDisplaySecondaryHomeTestLauncher/AndroidManifest.xml
@@ -16,23 +16,22 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.car.multidisplay">
+ package="com.android.car.multidisplay">
- <uses-sdk android:minSdkVersion="17" />
+ <uses-sdk android:minSdkVersion="17"/>
- <application
- android:label="@string/app_name">
- <activity
- android:name=".launcher.LauncherActivity"
- android:label="@string/md_launcher"
- android:theme="@style/LauncherTheme"
- android:launchMode="singleTop"
- android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|colorMode|density">
+ <application android:label="@string/app_name">
+ <activity android:name=".launcher.LauncherActivity"
+ android:label="@string/md_launcher"
+ android:theme="@style/LauncherTheme"
+ android:launchMode="singleTop"
+ android:configChanges="orientation|screenSize|smallestScreenSize|screenLayout|colorMode|density"
+ android:exported="true">
<intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.SECONDARY_HOME" />
- <category android:name="android.intent.category.LAUNCHER" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.intent.action.MAIN"/>
+ <category android:name="android.intent.category.SECONDARY_HOME"/>
+ <category android:name="android.intent.category.LAUNCHER"/>
+ <category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
</application>
diff --git a/tests/MultiDisplaySecondaryHomeTestLauncher/res/values-ne/strings.xml b/tests/MultiDisplaySecondaryHomeTestLauncher/res/values-ne/strings.xml
index 6a68809..9055065 100644
--- a/tests/MultiDisplaySecondaryHomeTestLauncher/res/values-ne/strings.xml
+++ b/tests/MultiDisplaySecondaryHomeTestLauncher/res/values-ne/strings.xml
@@ -21,7 +21,7 @@
<string name="md_launcher" msgid="327845696688732506">"MD लन्चर"</string>
<string name="couldnt_launch" msgid="7815676424138012351">"उक्त क्रियाकलाप सुरु गर्न सकिएन"</string>
<string name="select_display" msgid="1682700853391296117">"कुनै डिस्प्ले चयन गर्नुहोस्"</string>
- <string name="add_app_shortcut" msgid="8873512136913188432">"अनुप्रयोगको सर्टकट थप्नुहोस्"</string>
+ <string name="add_app_shortcut" msgid="8873512136913188432">"एपको सर्टकट थप्नुहोस्"</string>
<string name="set_wallpaper" msgid="3650915172749345197">"वालपेपर सेट गर्नुहोस्"</string>
<string name="new_instance" msgid="1924479866055190730">"नयाँ सत्रमा लोकार्पण गर्ने अनुरोध गर्नुहोस्"</string>
<string name="wallpaper_description" msgid="5885164573334720996">"मल्टिडिस्प्लेको नमूना वालपेपर"</string>
diff --git a/tests/MultiDisplayTest/Android.mk b/tests/MultiDisplayTest/Android.mk
index dcee7b4..91b1a0c 100644
--- a/tests/MultiDisplayTest/Android.mk
+++ b/tests/MultiDisplayTest/Android.mk
@@ -31,9 +31,11 @@
LOCAL_PRIVATE_PLATFORM_APIS := true
LOCAL_STATIC_ANDROID_LIBRARIES += \
+ androidx.annotation_annotation \
androidx.lifecycle_lifecycle-livedata \
androidx.lifecycle_lifecycle-viewmodel \
- androidx.car_car
+ androidx.fragment_fragment \
+ androidx.recyclerview_recyclerview
include $(BUILD_PACKAGE)
diff --git a/tests/MultiDisplayTest/AndroidManifest.xml b/tests/MultiDisplayTest/AndroidManifest.xml
index cb294b3..cd1b3f8 100644
--- a/tests/MultiDisplayTest/AndroidManifest.xml
+++ b/tests/MultiDisplayTest/AndroidManifest.xml
@@ -13,19 +13,20 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
<!-- Declare the contents of this Android application. The namespace
attribute brings in the Android platform namespace, and the package
supplies a unique name for the application. When writing your
own application, the package name must be changed from "com.example.*"
to come from a domain that you own or have control over. -->
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.google.android.car.multidisplaytest">
+ package="com.google.android.car.multidisplaytest">
<application android:label="MD Test">
<activity android:name="MDTest"
- android:label="@string/app_title_always"
- android:documentLaunchMode="always"
- android:theme="@style/MainActivityTheme">
+ android:label="@string/app_title_always"
+ android:documentLaunchMode="always"
+ android:theme="@style/MainActivityTheme"
+ android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
@@ -33,4 +34,3 @@
</activity>
</application>
</manifest>
-
diff --git a/tests/MultiDisplayTest/res/values-ar/strings.xml b/tests/MultiDisplayTest/res/values-ar/strings.xml
index 310a066..d36c86e 100644
--- a/tests/MultiDisplayTest/res/values-ar/strings.xml
+++ b/tests/MultiDisplayTest/res/values-ar/strings.xml
@@ -20,5 +20,5 @@
<string name="presentation_info_button" msgid="3138993281071284633">"معلومات"</string>
<string name="presentation_display_id_text" msgid="4094870216265474973">"الشاشة #%1$d: %2$s"</string>
<string name="presentation_alert_info_text" msgid="8826889501417145349">"معلومات عن الشاشة #%1$d"</string>
- <string name="presentation_alert_dismiss_text" msgid="9001797425513629072">"موافق"</string>
+ <string name="presentation_alert_dismiss_text" msgid="9001797425513629072">"حسنًا"</string>
</resources>
diff --git a/tests/MultiDisplayTestHelloActivity/AndroidManifest.xml b/tests/MultiDisplayTestHelloActivity/AndroidManifest.xml
index 1929124..ba46a26 100644
--- a/tests/MultiDisplayTestHelloActivity/AndroidManifest.xml
+++ b/tests/MultiDisplayTestHelloActivity/AndroidManifest.xml
@@ -13,23 +13,27 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
<!-- Declare the contents of this Android application. The namespace
attribute brings in the Android platform namespace, and the package
supplies a unique name for the application. When writing your
own application, the package name must be changed from "com.example.*"
to come from a domain that you own or have control over. -->
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.example.android.multidisplaytest.helloactivity">
+ package="com.example.android.multidisplaytest.helloactivity">
<application android:label="MDT Hello">
- <activity android:name="MDTHelloLaunchAlways" android:documentLaunchMode="always"
- android:label="@string/app_name_always">
+ <activity android:name="MDTHelloLaunchAlways"
+ android:documentLaunchMode="always"
+ android:label="@string/app_name_always"
+ android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
- <activity android:name="MDTHelloActivity" android:label="@string/app_name_default">
+ <activity android:name="MDTHelloActivity"
+ android:label="@string/app_name_default"
+ android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
diff --git a/tests/SampleCustomInputService/Android.bp b/tests/SampleCustomInputService/Android.bp
new file mode 100644
index 0000000..355860e
--- /dev/null
+++ b/tests/SampleCustomInputService/Android.bp
@@ -0,0 +1,88 @@
+// Copyright (C) 2020 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.
+
+filegroup {
+ name: "SampleCustomInputService-srcs",
+ srcs: [
+ "src/**/*.java",
+ ],
+}
+
+android_app {
+ name: "SampleCustomInputService",
+ srcs: [":SampleCustomInputService-srcs"],
+ resource_dirs: ["res"],
+
+ // Because it uses a platform API (CarInputManager).
+ platform_apis: true,
+
+ // This app should be platform signed because it requires android.permission.MONITOR_INPUT
+ // permission, which is of type "signature".
+ certificate: "platform",
+
+ optimize: {
+ enabled: false,
+ },
+
+ dex_preopt: {
+ enabled: false,
+ },
+
+ libs: [
+ "android.car",
+ ],
+
+ product_variables: {
+ pdk: {
+ enabled: false,
+ },
+ },
+}
+
+android_test {
+ name: "SampleCustomInputServiceTest",
+
+ srcs: [
+ "tests/src/**/*.java",
+ ":SampleCustomInputService-srcs",
+ ],
+
+ manifest: "tests/AndroidManifest.xml",
+
+ platform_apis: true,
+
+ static_libs: [
+ "mockito-target-extended",
+ "androidx.test.core",
+ "androidx.test.ext.junit",
+ "androidx.test.rules",
+ "truth-prebuilt",
+ ],
+
+ libs: [
+ "android.car",
+ "android.test.mock",
+ "android.test.base",
+ "android.test.runner",
+ ],
+
+ // Required by mockito-target-extended (lib used to mock final classes).
+ jni_libs: [
+ "libdexmakerjvmtiagent",
+ ],
+
+ optimize: {
+ enabled: false,
+ },
+}
diff --git a/tests/SampleCustomInputService/AndroidManifest.xml b/tests/SampleCustomInputService/AndroidManifest.xml
new file mode 100644
index 0000000..d012ff4
--- /dev/null
+++ b/tests/SampleCustomInputService/AndroidManifest.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2020 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.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.car.custominput.sample">
+
+ <!-- This permission is required to start SampleCustomInputService -->
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
+ <!-- This permission is required to re-inject KeyEvents in Car Input API -->
+ <uses-permission android:name="android.permission.INJECT_EVENTS" />
+ <!-- The following permissions are required in order to communicate against Car Input API -->
+ <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL"/>
+ <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
+ <uses-permission android:name="android.permission.MONITOR_INPUT"/>
+ <!-- This permission is required to adjust car audio volume -->
+ <uses-permission android:name="android.car.permission.CAR_CONTROL_AUDIO_VOLUME"/>
+
+ <application>
+ <service android:name=".SampleCustomInputService"
+ android:exported="true" android:enabled="true">
+ <intent-filter>
+ <action android:name="com.android.car.custominput.action.START_SILENT"/>
+ </intent-filter>
+ </service>
+ </application>
+</manifest>
+
diff --git a/tests/SampleCustomInputService/readme.md b/tests/SampleCustomInputService/readme.md
new file mode 100644
index 0000000..8789d6a
--- /dev/null
+++ b/tests/SampleCustomInputService/readme.md
@@ -0,0 +1,52 @@
+# Custom Input Event
+
+## Building
+```bash
+make SampleCustomInputService -j64
+```
+
+### Installing
+```bash
+adb install $OUT/target/product/emulator_car_x86/system/app/SampleCustomInputService/SampleCustomInputService.apk
+```
+
+## Start SampleCustomInputService
+```bash
+adb shell am start-foreground-service com.android.car.custominput.sample/.SampleCustomInputService
+```
+
+### Running tests
+
+Steps to run unit tests:
+
+1. Build and install SampleCustomInputService.apk (see above sections).
+1. Then run:
+
+```bash
+atest SampleCustomInputServiceTest
+```
+
+## Inject events (test scripts)
+
+These are the test scripts to demonstrate how CustomInputEvent can be used to implement OEM
+partners non-standard events. They all represent hypothetical features for the sake of documentation
+ only.
+
+*Note*: Make sure SampleCustomInputService is installed and started. Especially if you've just
+ ran tests. Depending on the configuration you use, running SampleCustomInputServiceTest may
+ uninstall SampleCustomInputService.
+
+### Inject Maps event from steering wheel control
+
+For this example, press home first, then inject the event to start Maps activity by running:
+
+```
+adb shell cmd car_service inject-custom-input -d 0 f1
+```
+
+Parameters are:
+* `-d 0`: sets target display type to main display;
+* `f1`: sets the OEM partner function `f1` to execute. In this implementation, `f1` argument
+ represents the action used to launch Google maps app;
+
+*Note*: For this command to run, ensure that Google Maps app is installed first.
diff --git a/tests/SampleCustomInputService/res/drawable/custom_input_ref_service.png b/tests/SampleCustomInputService/res/drawable/custom_input_ref_service.png
new file mode 100644
index 0000000..4814ff1
--- /dev/null
+++ b/tests/SampleCustomInputService/res/drawable/custom_input_ref_service.png
Binary files differ
diff --git a/tests/SampleCustomInputService/res/values/strings.xml b/tests/SampleCustomInputService/res/values/strings.xml
new file mode 100644
index 0000000..fd465e9
--- /dev/null
+++ b/tests/SampleCustomInputService/res/values/strings.xml
@@ -0,0 +1,25 @@
+<!--
+ ~ Copyright (C) 2020 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.
+ -->
+
+<!-- TODO(b/159623196): set translatable="false" -->
+<!-- TODO(b/159623196): Move this to config.xml -->
+<!-- TODO(b/159623196): Specify this activity, follow the same example as in
+ https://source.corp.google.com/android/packages/services/Car/service/res/values/config.xml;l=55
+ -->
+<resources>
+ <string name="maps_app_package">"com.google.android.apps.maps"</string>
+ <string name="maps_activity_class">com.google.android.maps.MapsActivity</string>
+</resources>
diff --git a/tests/SampleCustomInputService/src/com/android/car/custominput/sample/CustomInputEventListener.java b/tests/SampleCustomInputService/src/com/android/car/custominput/sample/CustomInputEventListener.java
new file mode 100644
index 0000000..15bff79
--- /dev/null
+++ b/tests/SampleCustomInputService/src/com/android/car/custominput/sample/CustomInputEventListener.java
@@ -0,0 +1,248 @@
+/*
+ * Copyright (C) 2020 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.car.custominput.sample;
+
+import static android.car.CarOccupantZoneManager.DisplayTypeEnum;
+import static android.car.media.CarAudioManager.PRIMARY_AUDIO_ZONE;
+import static android.media.AudioAttributes.AttributeUsage;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.app.ActivityOptions;
+import android.car.CarOccupantZoneManager;
+import android.car.input.CustomInputEvent;
+import android.car.media.CarAudioManager;
+import android.content.Context;
+import android.content.Intent;
+import android.media.AudioAttributes;
+import android.media.AudioManager;
+import android.os.UserHandle;
+import android.util.Log;
+import android.view.Display;
+import android.view.KeyEvent;
+
+import com.android.internal.util.Preconditions;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * Handles incoming {@link CustomInputEvent}. In this implementation, incoming events are expected
+ * to have the display id and the function set.
+ */
+final class CustomInputEventListener {
+
+ private static final String TAG = CustomInputEventListener.class.getSimpleName();
+
+ private final SampleCustomInputService mService;
+ private final Context mContext;
+ private final CarAudioManager mCarAudioManager;
+
+ /** List of defined actions for this reference service implementation */
+ @IntDef({EventAction.LAUNCH_MAPS_ACTION,
+ EventAction.ACCEPT_INCOMING_CALL_ACTION, EventAction.REJECT_INCOMING_CALL_ACTION,
+ EventAction.INCREASE_MEDIA_VOLUME_ACTION, EventAction.DECREASE_MEDIA_VOLUME_ACTION,
+ EventAction.INCREASE_ALARM_VOLUME_ACTION, EventAction.DECREASE_ALARM_VOLUME_ACTION,
+ EventAction.BACK_HOME_ACTION})
+ @Retention(RetentionPolicy.SOURCE)
+ public @interface EventAction {
+
+ /** Launches Map action. */
+ int LAUNCH_MAPS_ACTION = CustomInputEvent.INPUT_CODE_F1;
+
+ /** Accepts incoming call action. */
+ int ACCEPT_INCOMING_CALL_ACTION = CustomInputEvent.INPUT_CODE_F2;
+
+ /** Rejects incoming call action. */
+ int REJECT_INCOMING_CALL_ACTION = CustomInputEvent.INPUT_CODE_F3;
+
+ /** Increases media volume action. */
+ int INCREASE_MEDIA_VOLUME_ACTION = CustomInputEvent.INPUT_CODE_F4;
+
+ /** Increases media volume action. */
+ int DECREASE_MEDIA_VOLUME_ACTION = CustomInputEvent.INPUT_CODE_F5;
+
+ /** Increases alarm volume action. */
+ int INCREASE_ALARM_VOLUME_ACTION = CustomInputEvent.INPUT_CODE_F6;
+
+ /** Increases alarm volume action. */
+ int DECREASE_ALARM_VOLUME_ACTION = CustomInputEvent.INPUT_CODE_F7;
+
+ /** Simulates the HOME button (re-injects the HOME KeyEvent against Car Input API. */
+ int BACK_HOME_ACTION = CustomInputEvent.INPUT_CODE_F8;
+ }
+
+ CustomInputEventListener(
+ @NonNull Context context,
+ @NonNull CarAudioManager carAudioManager,
+ @NonNull SampleCustomInputService service) {
+ mContext = context;
+ mCarAudioManager = carAudioManager;
+ mService = service;
+ }
+
+ void handle(@DisplayTypeEnum int targetDisplayType, CustomInputEvent event) {
+ if (!isValidTargetDisplayType(targetDisplayType)) {
+ return;
+ }
+ int targetDisplayId = getDisplayIdForDisplayType(targetDisplayType);
+ @EventAction int action = event.getInputCode();
+ switch (action) {
+ case EventAction.LAUNCH_MAPS_ACTION:
+ launchMap(targetDisplayId);
+ break;
+ case EventAction.ACCEPT_INCOMING_CALL_ACTION:
+ acceptIncomingCall(targetDisplayId);
+ break;
+ case EventAction.REJECT_INCOMING_CALL_ACTION:
+ rejectIncomingCall(targetDisplayId);
+ break;
+ case EventAction.INCREASE_MEDIA_VOLUME_ACTION:
+ increaseVolume(targetDisplayId, AudioAttributes.USAGE_MEDIA);
+ break;
+ case EventAction.DECREASE_MEDIA_VOLUME_ACTION:
+ decreaseVolume(targetDisplayId, AudioAttributes.USAGE_MEDIA);
+ break;
+ case EventAction.INCREASE_ALARM_VOLUME_ACTION:
+ increaseVolume(targetDisplayId, AudioAttributes.USAGE_ALARM);
+ break;
+ case EventAction.DECREASE_ALARM_VOLUME_ACTION:
+ decreaseVolume(targetDisplayId, AudioAttributes.USAGE_ALARM);
+ break;
+ case EventAction.BACK_HOME_ACTION:
+ backHome(targetDisplayType);
+ break;
+ default:
+ Log.e(TAG, "Ignoring event [" + action + "]");
+ }
+ }
+
+ private int getDisplayIdForDisplayType(/* unused for now */
+ @DisplayTypeEnum int targetDisplayType) {
+ // TODO(b/170233532): convert the displayType to displayId using OccupantZoneManager api and
+ // add tests. For now, we're just returning the display type.
+ return 0; // Hardcoded to return main display id for now.
+ }
+
+ private int getOccupantZoneIdForDisplayId(/* unused for now */ int displayId) {
+ // TODO(b/170975186): Use CarOccupantZoneManager to retrieve the associated zoneId with
+ // the display id passed as parameter.
+ return PRIMARY_AUDIO_ZONE;
+ }
+
+ private static boolean isValidTargetDisplayType(@DisplayTypeEnum int displayType) {
+ if (displayType == CarOccupantZoneManager.DISPLAY_TYPE_MAIN) {
+ return true;
+ }
+ Log.w(TAG,
+ "This service implementation can only handle CustomInputEvent with "
+ + "targetDisplayType set to main display (main display type is {"
+ + CarOccupantZoneManager.DISPLAY_TYPE_MAIN + "}), current display type is {"
+ + displayType + "})");
+ return false;
+ }
+
+ private void launchMap(int targetDisplayId) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Launching Maps on display id {" + targetDisplayId + "}");
+ }
+ ActivityOptions options = ActivityOptions.makeBasic();
+ options.setLaunchDisplayId(targetDisplayId);
+ Intent mapsIntent = new Intent(Intent.ACTION_VIEW);
+ mapsIntent.setClassName(mContext.getString(R.string.maps_app_package),
+ mContext.getString(R.string.maps_activity_class));
+ mapsIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ mService.startActivityAsUser(mapsIntent, options.toBundle(), UserHandle.CURRENT);
+ }
+
+ private void acceptIncomingCall(int targetDisplayId) {
+ // TODO(b/159623196): When implementing this method, avoid using
+ // TelecomManager#acceptRingingCall deprecated method.
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Accepting incoming call on display id {" + targetDisplayId + "}");
+ }
+ }
+
+ private void rejectIncomingCall(int targetDisplayId) {
+ // TODO(b/159623196): When implementing this method, avoid using
+ // TelecomManager#endCall deprecated method.
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Rejecting incoming call on display id {" + targetDisplayId + "}");
+ }
+ }
+
+ private void increaseVolume(int targetDisplayId, @AttributeUsage int usage) {
+ int zoneId = getOccupantZoneIdForDisplayId(targetDisplayId);
+ int volumeGroupId = mCarAudioManager.getVolumeGroupIdForUsage(zoneId, usage);
+ int maxVolume = mCarAudioManager.getGroupMaxVolume(zoneId, volumeGroupId);
+ int volume = mCarAudioManager.getGroupVolume(zoneId, volumeGroupId);
+ Preconditions.checkArgument(maxVolume >= volume);
+ String usageName = AudioAttributes.usageToString(usage);
+ if (volume == maxVolume) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Current " + usageName + " volume is already equal to max volume ("
+ + maxVolume + ")");
+ }
+ return;
+ }
+ volume++;
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Increasing " + usageName + " volume to: " + volume + " (max volume is "
+ + maxVolume + ")");
+ }
+ mCarAudioManager.setGroupVolume(volumeGroupId, volume, AudioManager.FLAG_SHOW_UI);
+ }
+
+ private void decreaseVolume(int targetDisplayId, @AttributeUsage int usage) {
+ int zoneId = getOccupantZoneIdForDisplayId(targetDisplayId);
+ int volumeGroupId = mCarAudioManager.getVolumeGroupIdForUsage(zoneId, usage);
+ int minVolume = mCarAudioManager.getGroupMinVolume(zoneId, volumeGroupId);
+ int volume = mCarAudioManager.getGroupVolume(zoneId, volumeGroupId);
+ Preconditions.checkArgument(minVolume <= volume);
+ String usageName = AudioAttributes.usageToString(usage);
+ if (volume == minVolume) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Current " + usageName + " volume is already equal to min volume ("
+ + minVolume + ")");
+ }
+ return;
+ }
+ volume--;
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Decreasing " + usageName + " volume to: " + volume + " (min volume is "
+ + minVolume + ")");
+ }
+ mCarAudioManager.setGroupVolume(volumeGroupId, volume, AudioManager.FLAG_SHOW_UI);
+ }
+
+ private void backHome(@DisplayTypeEnum int targetDisplayType) {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Injecting HOME KeyEvent on display type {" + targetDisplayType + "}");
+ }
+
+ // Re-injecting KeyEvent.KEYCODE_HOME. Setting the event's display to INVALID_DISPLAY since
+ // CarInputService will be properly assigning the correct display id from the display type
+ // passed as argument.
+ KeyEvent homeKeyDown = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_HOME);
+ homeKeyDown.setDisplayId(Display.INVALID_DISPLAY);
+ mService.injectKeyEvent(homeKeyDown, targetDisplayType);
+
+ KeyEvent homeKeyUp = new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_HOME);
+ homeKeyUp.setDisplayId(Display.INVALID_DISPLAY);
+ mService.injectKeyEvent(homeKeyUp, targetDisplayType);
+ }
+}
diff --git a/tests/SampleCustomInputService/src/com/android/car/custominput/sample/SampleCustomInputService.java b/tests/SampleCustomInputService/src/com/android/car/custominput/sample/SampleCustomInputService.java
new file mode 100644
index 0000000..8e4ec76
--- /dev/null
+++ b/tests/SampleCustomInputService/src/com/android/car/custominput/sample/SampleCustomInputService.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2020 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.car.custominput.sample;
+
+import static android.car.CarOccupantZoneManager.DisplayTypeEnum;
+
+import android.annotation.NonNull;
+import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
+import android.app.Service;
+import android.car.Car;
+import android.car.CarOccupantZoneManager;
+import android.car.input.CarInputManager;
+import android.car.input.CustomInputEvent;
+import android.car.media.CarAudioManager;
+import android.content.Intent;
+import android.os.IBinder;
+import android.util.Log;
+import android.view.KeyEvent;
+
+import java.util.List;
+
+/**
+ * This service is a reference implementation to be used as an example on how to define and handle
+ * HW_CUSTOM_INPUT events.
+ */
+// TODO(b/171405561): Add scenarios for cluster display type.
+public class SampleCustomInputService extends Service implements
+ CarInputManager.CarInputCaptureCallback {
+
+ private static final String TAG = SampleCustomInputService.class.getSimpleName();
+
+ private static final String CHANNEL_ID = SampleCustomInputService.class.getSimpleName();
+ private static final int FOREGROUND_ID = 1;
+
+ private Car mCar;
+ private CarInputManager mCarInputManager;
+ private CustomInputEventListener mEventHandler;
+
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ startForeground();
+ }
+
+ private void startForeground() {
+ // TODO(b/12219669): Start this service from carservice, then the code in below
+ // won't be needed.
+ NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
+ CHANNEL_ID,
+ NotificationManager.IMPORTANCE_DEFAULT);
+ NotificationManager notificationManager = getSystemService(NotificationManager.class);
+ notificationManager.createNotificationChannel(channel);
+ Notification notification = new Notification.Builder(getApplicationContext(), CHANNEL_ID)
+ .setContentTitle("SampleCustomInputService")
+ .setContentText("Processing...")
+ .setSmallIcon(R.drawable.custom_input_ref_service)
+ .build();
+ startForeground(FOREGROUND_ID, notification);
+ }
+
+ @Override
+ public int onStartCommand(Intent intent, int flags, int startId) {
+ connectToCarService();
+ return START_STICKY;
+ }
+
+ private void connectToCarService() {
+ if (mCar != null && mCar.isConnected()) {
+ Log.w(TAG, "Ignoring request to connect against car service");
+ return;
+ }
+ Log.i(TAG, "Connecting against car service");
+ mCar = Car.createCar(this, /* handler= */ null, Car.CAR_WAIT_TIMEOUT_WAIT_FOREVER,
+ (car, ready) -> {
+ mCar = car;
+ if (ready) {
+ mCarInputManager =
+ (CarInputManager) mCar.getCarManager(Car.CAR_INPUT_SERVICE);
+ mCarInputManager.requestInputEventCapture(this,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
+ new int[]{CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT},
+ CarInputManager.CAPTURE_REQ_FLAGS_ALLOW_DELAYED_GRANT);
+ mEventHandler = new CustomInputEventListener(getApplicationContext(),
+ (CarAudioManager) mCar.getCarManager(Car.AUDIO_SERVICE), this);
+ }
+ });
+ }
+
+ @Override
+ public void onDestroy() {
+ if (Log.isLoggable(TAG, Log.DEBUG)) {
+ Log.d(TAG, "Service destroyed");
+ }
+ if (mCarInputManager != null) {
+ mCarInputManager.releaseInputEventCapture(CarOccupantZoneManager.DISPLAY_TYPE_MAIN);
+ }
+ if (mCar != null) {
+ mCar.disconnect();
+ mCar = null;
+ }
+ }
+
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+
+ @Override
+ public void onCustomInputEvents(@DisplayTypeEnum int targetDisplayType,
+ @NonNull List<CustomInputEvent> events) {
+ for (CustomInputEvent event : events) {
+ mEventHandler.handle(targetDisplayType, event);
+ }
+ }
+
+ public void injectKeyEvent(KeyEvent event, @DisplayTypeEnum int targetDisplayType) {
+ if (mCarInputManager == null) {
+ throw new IllegalStateException(
+ "Service was properly initialized, reference to CarInputManager is null");
+ }
+ mCarInputManager.injectKeyEvent(event, targetDisplayType);
+ }
+}
diff --git a/tests/SampleCustomInputService/tests/AndroidManifest.xml b/tests/SampleCustomInputService/tests/AndroidManifest.xml
new file mode 100644
index 0000000..b2c441a
--- /dev/null
+++ b/tests/SampleCustomInputService/tests/AndroidManifest.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2020 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.
+ -->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.car.custominput.sample">
+
+ <instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
+ android:targetPackage="com.android.car.custominput.sample"
+ android:label="Unit Tests for SampleCustomInputService"/>
+
+ <application android:debuggable="true">
+ <uses-library android:name="android.test.runner"/>
+ </application>
+</manifest>
\ No newline at end of file
diff --git a/tests/SampleCustomInputService/tests/src/com/android/car/custominput/sample/CustomInputEventListenerTest.java b/tests/SampleCustomInputService/tests/src/com/android/car/custominput/sample/CustomInputEventListenerTest.java
new file mode 100644
index 0000000..6e4728d
--- /dev/null
+++ b/tests/SampleCustomInputService/tests/src/com/android/car/custominput/sample/CustomInputEventListenerTest.java
@@ -0,0 +1,299 @@
+/*
+ * Copyright (C) 2020 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.car.custominput.sample;
+
+import static android.car.CarOccupantZoneManager.DISPLAY_TYPE_MAIN;
+import static android.car.media.CarAudioManager.PRIMARY_AUDIO_ZONE;
+import static android.media.AudioAttributes.AttributeUsage;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.car.CarOccupantZoneManager;
+import android.car.input.CustomInputEvent;
+import android.car.media.CarAudioManager;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.media.AudioAttributes;
+import android.media.AudioManager;
+import android.os.Bundle;
+import android.os.UserHandle;
+import android.view.Display;
+import android.view.KeyEvent;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import java.util.List;
+
+@RunWith(MockitoJUnitRunner.class)
+public class CustomInputEventListenerTest {
+
+ // Some arbitrary display type
+ private static final int SOME_DISPLAY_TYPE = CarOccupantZoneManager.DISPLAY_TYPE_MAIN;
+
+ // Some arbitrary display id
+ private static final int SOME_DISPLAY_ID = 0;
+
+ // Some arbitrary media group id for testing purposes only
+ private static final int SOME_MEDIA_GROUP_ID = 1;
+
+ // Maximum allowed volume for alert and media
+ private static final int MAX_VOLUME = 38;
+
+ // Minimum volume for alert and media
+ private static final int MIN_VOLUME = 0;
+
+ private CustomInputEventListener mEventHandler;
+
+ @Mock private Context mContext;
+ @Mock private CarAudioManager mCarAudioManager;
+ @Mock private SampleCustomInputService mService;
+
+ @Before
+ public void setUp() {
+ when(mContext.getString(R.string.maps_app_package)).thenReturn(
+ "com.google.android.apps.maps");
+ when(mContext.getString(R.string.maps_activity_class)).thenReturn(
+ "com.google.android.maps.MapsActivity");
+ mEventHandler = new CustomInputEventListener(mContext, mCarAudioManager, mService);
+ }
+
+ @Test
+ public void testHandleEvent_launchingMaps() {
+ // Arrange
+ CustomInputEvent event = new CustomInputEvent(
+ // In this implementation, INPUT_TYPE_CUSTOM_EVENT_F1 represents the action of
+ // launching maps.
+ /* inputCode= */ CustomInputEvent.INPUT_CODE_F1,
+ /* targetDisplayType= */ SOME_DISPLAY_TYPE,
+ /* repeatCounter= */ 1);
+
+ // Act
+ mEventHandler.handle(SOME_DISPLAY_TYPE, event);
+
+ // Assert
+ ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
+ ArgumentCaptor<Bundle> bundleCaptor = ArgumentCaptor.forClass(Bundle.class);
+ ArgumentCaptor<UserHandle> userHandleCaptor = ArgumentCaptor.forClass(UserHandle.class);
+ verify(mService).startActivityAsUser(intentCaptor.capture(),
+ bundleCaptor.capture(), userHandleCaptor.capture());
+
+ // Assert intent parameter
+ Intent actualIntent = intentCaptor.getValue();
+ assertThat(actualIntent.getAction()).isEqualTo(Intent.ACTION_VIEW);
+ assertThat(actualIntent.getFlags()).isEqualTo(
+ Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
+ assertThat(actualIntent.getComponent()).isEqualTo(
+ new ComponentName("com.google.android.apps.maps",
+ "com.google.android.maps.MapsActivity"));
+
+ // Assert bundle and user parameters
+ assertThat(bundleCaptor.getValue().getInt("android.activity.launchDisplayId")).isEqualTo(
+ /* displayId= */
+ 0); // TODO(b/159623196): displayId is currently hardcoded to 0, see missing
+ // targetDisplayTarget to targetDisplayId logic in
+ // CustomInputEventListener
+ assertThat(userHandleCaptor.getValue()).isEqualTo(UserHandle.CURRENT);
+ }
+
+ @Test
+ public void testHandleEvent_backHomeAction() {
+ // Arrange
+ CustomInputEvent event = new CustomInputEvent(
+ // In this implementation, INPUT_TYPE_CUSTOM_EVENT_F6 represents the back HOME
+ // action.
+ /* inputCode= */ CustomInputEvent.INPUT_CODE_F8,
+ /* targetDisplayType= */ SOME_DISPLAY_TYPE,
+ /* repeatCounter= */ 1);
+
+ // Act
+ mEventHandler.handle(SOME_DISPLAY_TYPE, event);
+
+ // Assert
+ ArgumentCaptor<KeyEvent> keyEventCaptor = ArgumentCaptor.forClass(KeyEvent.class);
+ ArgumentCaptor<Integer> displayTypeCaptor = ArgumentCaptor.forClass(Integer.class);
+ verify(mService, times(2)).injectKeyEvent(keyEventCaptor.capture(),
+ displayTypeCaptor.capture());
+
+ List<KeyEvent> actualEvents = keyEventCaptor.getAllValues();
+ KeyEvent actualEventDown = actualEvents.get(0);
+ assertThat(actualEventDown.getAction()).isEqualTo(KeyEvent.ACTION_DOWN);
+ assertThat(actualEventDown.getKeyCode()).isEqualTo(KeyEvent.KEYCODE_HOME);
+ assertThat(actualEventDown.getDisplayId()).isEqualTo(Display.INVALID_DISPLAY);
+
+ KeyEvent actualEventUp = actualEvents.get(1);
+ assertThat(actualEventUp.getAction()).isEqualTo(KeyEvent.ACTION_UP);
+ assertThat(actualEventUp.getKeyCode()).isEqualTo(KeyEvent.KEYCODE_HOME);
+ assertThat(actualEventUp.getDisplayId()).isEqualTo(Display.INVALID_DISPLAY);
+
+ assertThat(displayTypeCaptor.getValue()).isEqualTo(DISPLAY_TYPE_MAIN);
+ }
+
+ @Test
+ public void testHandleEvent_ignoringEventsForNonMainDisplay() {
+ int invalidDisplayType = -1;
+ CustomInputEvent event = new CustomInputEvent(CustomInputEvent.INPUT_CODE_F1,
+ invalidDisplayType,
+ /* repeatCounter= */ 1);
+
+ // Act
+ mEventHandler.handle(invalidDisplayType, event);
+
+ // Assert
+ verify(mService, never()).startActivityAsUser(any(Intent.class), any(Bundle.class),
+ any(UserHandle.class));
+ }
+
+ @Test
+ public void testHandleEvent_increaseMediaVolume() {
+ doTestIncreaseVolumeAndAssert(AudioAttributes.USAGE_MEDIA, CustomInputEvent.INPUT_CODE_F4);
+ }
+
+ @Test
+ public void testHandleEvent_increaseAlarmVolume() {
+ doTestIncreaseVolumeAndAssert(AudioAttributes.USAGE_ALARM, CustomInputEvent.INPUT_CODE_F6);
+ }
+
+ private void doTestIncreaseVolumeAndAssert(@AttributeUsage int usage, int inputCode) {
+ // Arrange
+ when(mCarAudioManager.getVolumeGroupIdForUsage(PRIMARY_AUDIO_ZONE, usage)).thenReturn(
+ SOME_MEDIA_GROUP_ID);
+ when(mCarAudioManager.getGroupMaxVolume(PRIMARY_AUDIO_ZONE,
+ SOME_MEDIA_GROUP_ID)).thenReturn(MAX_VOLUME);
+ int currentVolume = 5;
+ when(mCarAudioManager.getGroupVolume(PRIMARY_AUDIO_ZONE, SOME_MEDIA_GROUP_ID)).thenReturn(
+ currentVolume);
+
+ CustomInputEvent event = new CustomInputEvent(inputCode,
+ SOME_DISPLAY_ID,
+ /* repeatCounter= */ 1);
+
+ // Act
+ mEventHandler.handle(SOME_DISPLAY_TYPE, event);
+
+ // Assert
+ verify(mCarAudioManager).setGroupVolume(SOME_MEDIA_GROUP_ID, currentVolume + 1,
+ AudioManager.FLAG_SHOW_UI);
+ }
+
+ @Test
+ public void testHandleEvent_increaseMediaVolumeMax() {
+ doTestIncreaseMaxVolumeAndAssert(AudioAttributes.USAGE_MEDIA,
+ CustomInputEvent.INPUT_CODE_F4);
+ }
+
+ @Test
+ public void testHandleEvent_increaseAlarmVolumeMax() {
+ doTestIncreaseMaxVolumeAndAssert(AudioAttributes.USAGE_ALARM,
+ CustomInputEvent.INPUT_CODE_F6);
+ }
+
+ private void doTestIncreaseMaxVolumeAndAssert(@AttributeUsage int usage, int inputCode) {
+ // Arrange
+ when(mCarAudioManager.getVolumeGroupIdForUsage(PRIMARY_AUDIO_ZONE, usage)).thenReturn(
+ SOME_MEDIA_GROUP_ID);
+ when(mCarAudioManager.getGroupMaxVolume(PRIMARY_AUDIO_ZONE,
+ SOME_MEDIA_GROUP_ID)).thenReturn(MAX_VOLUME);
+ when(mCarAudioManager.getGroupVolume(PRIMARY_AUDIO_ZONE, SOME_MEDIA_GROUP_ID)).thenReturn(
+ MAX_VOLUME);
+
+ CustomInputEvent event = new CustomInputEvent(inputCode,
+ SOME_DISPLAY_ID,
+ /* repeatCounter= */ 1);
+
+ // Act
+ mEventHandler.handle(SOME_DISPLAY_TYPE, event);
+
+ // Assert
+ verify(mCarAudioManager, never()).setGroupVolume(anyInt(), anyInt(), anyInt());
+ }
+
+ @Test
+ public void testHandleEvent_decreaseMediaVolume() {
+ doTestDecreaseVolumeAndAssert(AudioAttributes.USAGE_MEDIA, CustomInputEvent.INPUT_CODE_F5);
+ }
+
+ @Test
+ public void testHandleEvent_decreaseAlarmVolume() {
+ doTestDecreaseVolumeAndAssert(AudioAttributes.USAGE_ALARM, CustomInputEvent.INPUT_CODE_F7);
+ }
+
+ private void doTestDecreaseVolumeAndAssert(@AttributeUsage int usage, int inputCode) {
+ // Arrange
+ when(mCarAudioManager.getVolumeGroupIdForUsage(PRIMARY_AUDIO_ZONE, usage)).thenReturn(
+ SOME_MEDIA_GROUP_ID);
+ when(mCarAudioManager.getGroupMinVolume(PRIMARY_AUDIO_ZONE,
+ SOME_MEDIA_GROUP_ID)).thenReturn(MIN_VOLUME);
+ int currentVolume = 5;
+ when(mCarAudioManager.getGroupVolume(PRIMARY_AUDIO_ZONE, SOME_MEDIA_GROUP_ID)).thenReturn(
+ currentVolume);
+
+ CustomInputEvent event = new CustomInputEvent(inputCode,
+ SOME_DISPLAY_ID,
+ /* repeatCounter= */ 1);
+
+ // Act
+ mEventHandler.handle(SOME_DISPLAY_TYPE, event);
+
+ // Assert
+ verify(mCarAudioManager).setGroupVolume(SOME_MEDIA_GROUP_ID, currentVolume - 1,
+ AudioManager.FLAG_SHOW_UI);
+ }
+
+ @Test
+ public void testHandleEvent_decreaseMediaMinVolume() {
+ doTestDecreaseMinVolumeAndAssert(AudioAttributes.USAGE_MEDIA,
+ CustomInputEvent.INPUT_CODE_F5);
+ }
+
+ @Test
+ public void testHandleEvent_decreaseAlarmMinVolume() {
+ doTestDecreaseMinVolumeAndAssert(AudioAttributes.USAGE_ALARM,
+ CustomInputEvent.INPUT_CODE_F7);
+ }
+
+ private void doTestDecreaseMinVolumeAndAssert(@AttributeUsage int usage, int inputCode) {
+ // Arrange
+ when(mCarAudioManager.getVolumeGroupIdForUsage(PRIMARY_AUDIO_ZONE, usage)).thenReturn(
+ SOME_MEDIA_GROUP_ID);
+ when(mCarAudioManager.getGroupMinVolume(PRIMARY_AUDIO_ZONE,
+ SOME_MEDIA_GROUP_ID)).thenReturn(MIN_VOLUME);
+ when(mCarAudioManager.getGroupVolume(PRIMARY_AUDIO_ZONE, SOME_MEDIA_GROUP_ID)).thenReturn(
+ MIN_VOLUME);
+
+ CustomInputEvent event = new CustomInputEvent(inputCode,
+ SOME_DISPLAY_ID,
+ /* repeatCounter= */ 1);
+
+ // Act
+ mEventHandler.handle(SOME_DISPLAY_TYPE, event);
+
+ // Assert
+ verify(mCarAudioManager, never()).setGroupVolume(anyInt(), anyInt(), anyInt());
+ }
+}
diff --git a/EncryptionRunner/Android.bp b/tests/SampleRearViewCamera/Android.bp
similarity index 63%
rename from EncryptionRunner/Android.bp
rename to tests/SampleRearViewCamera/Android.bp
index c82d769..df567f3 100644
--- a/EncryptionRunner/Android.bp
+++ b/tests/SampleRearViewCamera/Android.bp
@@ -1,4 +1,5 @@
-// Copyright (C) 2019 The Android Open Source Project
+//
+// Copyright (C) 2020 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.
@@ -11,21 +12,10 @@
// 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.
-
-android_library {
- name: "EncryptionRunner",
- min_sdk_version: "23",
- product_variables: {
- pdk: {
- enabled: false,
- },
- },
- static_libs: [
- "ukey2",
- ],
- srcs: [
- "src/**/*.java",
- ],
- installable: true,
+//
+android_app {
+ name: "SampleRearViewCamera",
+ // Only compile source java files in this apk.
+ srcs: ["src/**/*.java"],
+ sdk_version: "current",
}
-
diff --git a/tests/SampleRearViewCamera/AndroidManifest.xml b/tests/SampleRearViewCamera/AndroidManifest.xml
new file mode 100644
index 0000000..cc00ac7
--- /dev/null
+++ b/tests/SampleRearViewCamera/AndroidManifest.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2020 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.
+ -->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.google.android.car.rvc">
+ <uses-feature android:glEsVersion="0x00020000" />
+ <uses-sdk android:targetSdkVersion="28"/>
+ <application
+ android:label="@string/app_name">
+ <!-- showForAllUsers to launch this for user 0 -->
+ <activity android:name="SampleRearViewCameraActivity"
+ android:showForAllUsers="true"
+ android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
+ android:launchMode="singleTask"
+ android:configChanges="orientation|keyboardHidden">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+ <!-- No android.intent.category.LAUNCHER not to show this in Launcher -->
+ </intent-filter>
+ </activity>
+ </application>
+</manifest>
diff --git a/car_product/overlay/packages/apps/PackageInstaller/res/values/themes.xml b/tests/SampleRearViewCamera/overlay/frameworks/base/packages/CarSystemUI/res/values/config.xml
similarity index 67%
rename from car_product/overlay/packages/apps/PackageInstaller/res/values/themes.xml
rename to tests/SampleRearViewCamera/overlay/frameworks/base/packages/CarSystemUI/res/values/config.xml
index 08e67a8..9eca8c0 100644
--- a/car_product/overlay/packages/apps/PackageInstaller/res/values/themes.xml
+++ b/tests/SampleRearViewCamera/overlay/frameworks/base/packages/CarSystemUI/res/values/config.xml
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
- ~ Copyright (C) 2018 The Android Open Source Project
+ ~ Copyright (C) 2020 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.
@@ -14,9 +14,9 @@
~ See the License for the specific language governing permissions and
~ limitations under the License
-->
-
<resources>
- <style name="Settings"
- parent="@*android:style/Theme.DeviceDefault.Settings.NoActionBar">
- </style>
+ <!-- The Activity name for the Rear View Camera, if empty, the feature will be disabled. -->
+ <string name="config_rearViewCameraActivity" translatable="false">
+ com.google.android.car.rvc/.SampleRearViewCameraActivity
+ </string>
</resources>
diff --git a/tests/SampleRearViewCamera/res/raw/robot.png b/tests/SampleRearViewCamera/res/raw/robot.png
new file mode 100644
index 0000000..8a9e698
--- /dev/null
+++ b/tests/SampleRearViewCamera/res/raw/robot.png
Binary files differ
diff --git a/tests/SampleRearViewCamera/res/values/strings.xml b/tests/SampleRearViewCamera/res/values/strings.xml
new file mode 100644
index 0000000..2245adb
--- /dev/null
+++ b/tests/SampleRearViewCamera/res/values/strings.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2020 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+ -->
+
+<resources>
+ <string name="app_name">Sample RearViewCamera</string>
+</resources>
diff --git a/tests/SampleRearViewCamera/src/com/google/android/car/rvc/BasicGLSurfaceView.java b/tests/SampleRearViewCamera/src/com/google/android/car/rvc/BasicGLSurfaceView.java
new file mode 100644
index 0000000..ed33684
--- /dev/null
+++ b/tests/SampleRearViewCamera/src/com/google/android/car/rvc/BasicGLSurfaceView.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.android.car.rvc;
+
+import android.content.Context;
+import android.opengl.GLSurfaceView;
+
+import android.opengl.GLES20;
+
+class BasicGLSurfaceView extends GLSurfaceView {
+ public BasicGLSurfaceView(Context context) {
+ super(context);
+ setEGLContextClientVersion(2);
+ setRenderer(new GLES20TriangleRenderer(context));
+ }
+}
+
diff --git a/tests/SampleRearViewCamera/src/com/google/android/car/rvc/GLES20TriangleRenderer.java b/tests/SampleRearViewCamera/src/com/google/android/car/rvc/GLES20TriangleRenderer.java
new file mode 100644
index 0000000..bdbcb68
--- /dev/null
+++ b/tests/SampleRearViewCamera/src/com/google/android/car/rvc/GLES20TriangleRenderer.java
@@ -0,0 +1,253 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.google.android.car.rvc;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.FloatBuffer;
+
+import javax.microedition.khronos.egl.EGLConfig;
+import javax.microedition.khronos.opengles.GL10;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.opengl.GLES20;
+import android.opengl.GLSurfaceView;
+import android.opengl.GLUtils;
+import android.opengl.Matrix;
+import android.os.SystemClock;
+import android.util.Log;
+
+class GLES20TriangleRenderer implements GLSurfaceView.Renderer {
+
+ public GLES20TriangleRenderer(Context context) {
+ mContext = context;
+ mTriangleVertices = ByteBuffer.allocateDirect(mTriangleVerticesData.length
+ * FLOAT_SIZE_BYTES).order(ByteOrder.nativeOrder()).asFloatBuffer();
+ mTriangleVertices.put(mTriangleVerticesData).position(0);
+ }
+
+ public void onDrawFrame(GL10 glUnused) {
+ // Ignore the passed-in GL10 interface, and use the GLES20
+ // class's static methods instead.
+ GLES20.glClearColor(0.0f, 0.0f, 1.0f, 1.0f);
+ GLES20.glClear( GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
+ GLES20.glUseProgram(mProgram);
+ checkGlError("glUseProgram");
+
+ GLES20.glActiveTexture(GLES20.GL_TEXTURE0);
+ GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureID);
+
+ mTriangleVertices.position(TRIANGLE_VERTICES_DATA_POS_OFFSET);
+ GLES20.glVertexAttribPointer(maPositionHandle, 3, GLES20.GL_FLOAT, false,
+ TRIANGLE_VERTICES_DATA_STRIDE_BYTES, mTriangleVertices);
+ checkGlError("glVertexAttribPointer maPosition");
+ mTriangleVertices.position(TRIANGLE_VERTICES_DATA_UV_OFFSET);
+ GLES20.glEnableVertexAttribArray(maPositionHandle);
+ checkGlError("glEnableVertexAttribArray maPositionHandle");
+ GLES20.glVertexAttribPointer(maTextureHandle, 2, GLES20.GL_FLOAT, false,
+ TRIANGLE_VERTICES_DATA_STRIDE_BYTES, mTriangleVertices);
+ checkGlError("glVertexAttribPointer maTextureHandle");
+ GLES20.glEnableVertexAttribArray(maTextureHandle);
+ checkGlError("glEnableVertexAttribArray maTextureHandle");
+
+ long time = SystemClock.uptimeMillis() % 4000L;
+ float angle = 0.090f * ((int) time);
+ Matrix.setRotateM(mMMatrix, 0, angle, 0, 0, 1.0f);
+ Matrix.multiplyMM(mMVPMatrix, 0, mVMatrix, 0, mMMatrix, 0);
+ Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mMVPMatrix, 0);
+
+ GLES20.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, mMVPMatrix, 0);
+ GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3);
+ checkGlError("glDrawArrays");
+ }
+
+ public void onSurfaceChanged(GL10 glUnused, int width, int height) {
+ // Ignore the passed-in GL10 interface, and use the GLES20
+ // class's static methods instead.
+ GLES20.glViewport(0, 0, width, height);
+ float ratio = (float) width / height;
+ Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
+ }
+
+ public void onSurfaceCreated(GL10 glUnused, EGLConfig config) {
+ // Ignore the passed-in GL10 interface, and use the GLES20
+ // class's static methods instead.
+ mProgram = createProgram(mVertexShader, mFragmentShader);
+ if (mProgram == 0) {
+ return;
+ }
+ maPositionHandle = GLES20.glGetAttribLocation(mProgram, "aPosition");
+ checkGlError("glGetAttribLocation aPosition");
+ if (maPositionHandle == -1) {
+ throw new RuntimeException("Could not get attrib location for aPosition");
+ }
+ maTextureHandle = GLES20.glGetAttribLocation(mProgram, "aTextureCoord");
+ checkGlError("glGetAttribLocation aTextureCoord");
+ if (maTextureHandle == -1) {
+ throw new RuntimeException("Could not get attrib location for aTextureCoord");
+ }
+
+ muMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");
+ checkGlError("glGetUniformLocation uMVPMatrix");
+ if (muMVPMatrixHandle == -1) {
+ throw new RuntimeException("Could not get attrib location for uMVPMatrix");
+ }
+
+ /*
+ * Create our texture. This has to be done each time the
+ * surface is created.
+ */
+
+ int[] textures = new int[1];
+ GLES20.glGenTextures(1, textures, 0);
+
+ mTextureID = textures[0];
+ GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, mTextureID);
+
+ GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER,
+ GLES20.GL_NEAREST);
+ GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,
+ GLES20.GL_TEXTURE_MAG_FILTER,
+ GLES20.GL_LINEAR);
+
+ GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,
+ GLES20.GL_REPEAT);
+ GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,
+ GLES20.GL_REPEAT);
+
+ InputStream is = mContext.getResources()
+ .openRawResource(R.raw.robot);
+ Bitmap bitmap;
+ try {
+ bitmap = BitmapFactory.decodeStream(is);
+ } finally {
+ try {
+ is.close();
+ } catch(IOException e) {
+ // Ignore.
+ }
+ }
+
+ GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, bitmap, 0);
+ bitmap.recycle();
+
+ Matrix.setLookAtM(mVMatrix, 0, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
+ }
+
+ private int loadShader(int shaderType, String source) {
+ int shader = GLES20.glCreateShader(shaderType);
+ if (shader != 0) {
+ GLES20.glShaderSource(shader, source);
+ GLES20.glCompileShader(shader);
+ int[] compiled = new int[1];
+ GLES20.glGetShaderiv(shader, GLES20.GL_COMPILE_STATUS, compiled, 0);
+ if (compiled[0] == 0) {
+ Log.e(TAG, "Could not compile shader " + shaderType + ":");
+ Log.e(TAG, GLES20.glGetShaderInfoLog(shader));
+ GLES20.glDeleteShader(shader);
+ shader = 0;
+ }
+ }
+ return shader;
+ }
+
+ private int createProgram(String vertexSource, String fragmentSource) {
+ int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexSource);
+ if (vertexShader == 0) {
+ return 0;
+ }
+
+ int pixelShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentSource);
+ if (pixelShader == 0) {
+ return 0;
+ }
+
+ int program = GLES20.glCreateProgram();
+ if (program != 0) {
+ GLES20.glAttachShader(program, vertexShader);
+ checkGlError("glAttachShader");
+ GLES20.glAttachShader(program, pixelShader);
+ checkGlError("glAttachShader");
+ GLES20.glLinkProgram(program);
+ int[] linkStatus = new int[1];
+ GLES20.glGetProgramiv(program, GLES20.GL_LINK_STATUS, linkStatus, 0);
+ if (linkStatus[0] != GLES20.GL_TRUE) {
+ Log.e(TAG, "Could not link program: ");
+ Log.e(TAG, GLES20.glGetProgramInfoLog(program));
+ GLES20.glDeleteProgram(program);
+ program = 0;
+ }
+ }
+ return program;
+ }
+
+ private void checkGlError(String op) {
+ int error;
+ while ((error = GLES20.glGetError()) != GLES20.GL_NO_ERROR) {
+ Log.e(TAG, op + ": glError " + error);
+ throw new RuntimeException(op + ": glError " + error);
+ }
+ }
+
+ private static final int FLOAT_SIZE_BYTES = 4;
+ private static final int TRIANGLE_VERTICES_DATA_STRIDE_BYTES = 5 * FLOAT_SIZE_BYTES;
+ private static final int TRIANGLE_VERTICES_DATA_POS_OFFSET = 0;
+ private static final int TRIANGLE_VERTICES_DATA_UV_OFFSET = 3;
+ private final float[] mTriangleVerticesData = {
+ // X, Y, Z, U, V
+ -1.0f, -0.5f, 0, -0.5f, 0.0f,
+ 1.0f, -0.5f, 0, 1.5f, -0.0f,
+ 0.0f, 1.11803399f, 0, 0.5f, 1.61803399f };
+
+ private FloatBuffer mTriangleVertices;
+
+ private final String mVertexShader =
+ "uniform mat4 uMVPMatrix;\n" +
+ "attribute vec4 aPosition;\n" +
+ "attribute vec2 aTextureCoord;\n" +
+ "varying vec2 vTextureCoord;\n" +
+ "void main() {\n" +
+ " gl_Position = uMVPMatrix * aPosition;\n" +
+ " vTextureCoord = aTextureCoord;\n" +
+ "}\n";
+
+ private final String mFragmentShader =
+ "precision mediump float;\n" +
+ "varying vec2 vTextureCoord;\n" +
+ "uniform sampler2D sTexture;\n" +
+ "void main() {\n" +
+ " gl_FragColor = texture2D(sTexture, vTextureCoord);\n" +
+ "}\n";
+
+ private float[] mMVPMatrix = new float[16];
+ private float[] mProjMatrix = new float[16];
+ private float[] mMMatrix = new float[16];
+ private float[] mVMatrix = new float[16];
+
+ private int mProgram;
+ private int mTextureID;
+ private int muMVPMatrixHandle;
+ private int maPositionHandle;
+ private int maTextureHandle;
+
+ private Context mContext;
+ private static String TAG = "GLES20TriangleRenderer";
+}
diff --git a/tests/SampleRearViewCamera/src/com/google/android/car/rvc/RearViewCameraActivityBase.java b/tests/SampleRearViewCamera/src/com/google/android/car/rvc/RearViewCameraActivityBase.java
new file mode 100644
index 0000000..b0b45b8
--- /dev/null
+++ b/tests/SampleRearViewCamera/src/com/google/android/car/rvc/RearViewCameraActivityBase.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (C) 2020 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.google.android.car.rvc;
+
+import static android.hardware.display.DisplayManager.DisplayListener;
+
+import android.app.Activity;
+import android.hardware.display.DisplayManager;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.Display;
+import android.view.View;
+
+/**
+ * The base class of SampleRearViewCameraActivity.
+ * The Activity should have 'showWhenLocked' attribute to show it in KeyLocked state, but
+ * the attribute also affects the lifecycle of Activity not to move to PAUSED state even if
+ * display is off, so we install DisplayListener to monitor the display state change and it'll
+ * change the visibility of the internal View depending on the display state.
+ */
+public class RearViewCameraActivityBase extends Activity {
+ private static final String TAG = RearViewCameraActivityBase.class.getSimpleName();
+
+ private DisplayManager mDisplayManager;
+
+ // The Activity with showWhenLocked doesn't go to sleep even if the display sleeps.
+ // So we'd like to monitor the display state and react on it manually.
+ private final DisplayListener mDisplayListener = new DisplayListener() {
+ @Override
+ public void onDisplayAdded(int displayId) {}
+
+ @Override
+ public void onDisplayRemoved(int displayId) {}
+
+ @Override
+ public void onDisplayChanged(int displayId) {
+ if (displayId != Display.DEFAULT_DISPLAY) {
+ return;
+ }
+ decideViewVisibility();
+ }
+ };
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ // To show the Activity when KeyLock is shown.
+ setShowWhenLocked(true);
+ mDisplayManager = getSystemService(DisplayManager.class);
+ mDisplayManager.registerDisplayListener(mDisplayListener, null);
+ decideViewVisibility();
+ }
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ mDisplayManager.unregisterDisplayListener(mDisplayListener);
+ }
+
+ // Hides the view when the display is off to save the system resource, since this has
+ // 'showWhenLocked' attribute, this will not go to PAUSED state even if the display turns off.
+ private void decideViewVisibility() {
+ Display defaultDisplay = mDisplayManager.getDisplay(Display.DEFAULT_DISPLAY);
+ int state = defaultDisplay.getState();
+ Log.d(TAG, "decideShowWhenLocked: displayState=" + state);
+ getWindow().getDecorView().setVisibility(
+ state == Display.STATE_ON ? View.VISIBLE : View.INVISIBLE);
+ }
+}
diff --git a/tests/SampleRearViewCamera/src/com/google/android/car/rvc/SampleRearViewCameraActivity.java b/tests/SampleRearViewCamera/src/com/google/android/car/rvc/SampleRearViewCameraActivity.java
new file mode 100644
index 0000000..1c3a7ea
--- /dev/null
+++ b/tests/SampleRearViewCamera/src/com/google/android/car/rvc/SampleRearViewCameraActivity.java
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2020 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.google.android.car.rvc;
+
+import android.os.Bundle;
+
+// The class is based on BasicGLSurfaceView in development/samples.
+public class SampleRearViewCameraActivity extends RearViewCameraActivityBase {
+
+ private BasicGLSurfaceView mView;
+
+ @Override
+ protected void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+ mView = new BasicGLSurfaceView(getApplication());
+ setContentView(mView);
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ mView.onPause();
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ mView.onResume();
+ }
+}
diff --git a/tests/SecondaryHomeApp/Android.bp b/tests/SecondaryHomeApp/Android.bp
index 04da06b..29453e6 100644
--- a/tests/SecondaryHomeApp/Android.bp
+++ b/tests/SecondaryHomeApp/Android.bp
@@ -37,7 +37,7 @@
platform_apis: true,
certificate: "platform",
privileged: true,
- required: ["privapp_whitelist_com.android.car.secondaryhome"],
+ required: ["allowed_privapp_com.android.car.secondaryhome"],
resource_dirs: [
"res",
diff --git a/tests/SecondaryHomeApp/AndroidManifest.xml b/tests/SecondaryHomeApp/AndroidManifest.xml
index 5d22b70..336be59 100644
--- a/tests/SecondaryHomeApp/AndroidManifest.xml
+++ b/tests/SecondaryHomeApp/AndroidManifest.xml
@@ -16,8 +16,8 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- package="com.android.car.secondaryhome">
+ xmlns:tools="http://schemas.android.com/tools"
+ package="com.android.car.secondaryhome">
<!-- System permission to host maps activity -->
<uses-permission android:name="android.permission.ACTIVITY_EMBEDDING"/>
<!-- System permission to send events to hosted maps activity -->
@@ -30,32 +30,30 @@
<!-- System permissions to querry user -->
<uses-permission android:name="android.permission.MANAGE_USERS"/>
- <application
- android:label="@string/app_name"
- tools:replace="android:label">
+ <application android:label="@string/app_name"
+ tools:replace="android:label">
- <activity
- android:name=".launcher.LauncherActivity"
- android:label="@string/app_launcher"
- android:theme="@style/LauncherTheme"
- android:configChanges="orientation|screenSize|smallestScreenSize|
- screenLayout|colorMode|density"
- android:documentLaunchMode="always"
- android:multiprocess="true">
+ <activity android:name=".launcher.LauncherActivity"
+ android:label="@string/app_launcher"
+ android:theme="@style/LauncherTheme"
+ android:configChanges="orientation|screenSize|smallestScreenSize| screenLayout|colorMode|density"
+ android:documentLaunchMode="always"
+ android:multiprocess="true"
+ android:exported="true">
<intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.DEFAULT" />
+ <action android:name="android.intent.action.MAIN"/>
+ <category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.SECONDARY_HOME"/>
</intent-filter>
</activity>
<service android:name=".launcher.NotificationListener"
- android:label="@string/notification_service_label"
- android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"
- android:directBootAware="true">
+ android:label="@string/notification_service_label"
+ android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"
+ android:directBootAware="true"
+ android:exported="true">
<intent-filter>
<action android:name="android.service.notification.NotificationListenerService"/>
</intent-filter>
</service>
</application>
</manifest>
-
diff --git a/tests/SecondaryHomeApp/src/com/android/car/secondaryhome/launcher/AppFragment.java b/tests/SecondaryHomeApp/src/com/android/car/secondaryhome/launcher/AppFragment.java
index a05beee..a4033f0 100644
--- a/tests/SecondaryHomeApp/src/com/android/car/secondaryhome/launcher/AppFragment.java
+++ b/tests/SecondaryHomeApp/src/com/android/car/secondaryhome/launcher/AppFragment.java
@@ -18,7 +18,7 @@
import android.app.Activity;
import android.app.ActivityManager;
-import android.app.ActivityManager.StackInfo;
+import android.app.ActivityTaskManager.RootTaskInfo;
import android.app.ActivityView;
import android.app.IActivityManager;
import android.app.TaskStackBuilder;
@@ -74,7 +74,7 @@
view.startActivity(mLaunchIntent);
synchronized (mLock) {
try {
- mTaskStackId = mAm.getFocusedStackInfo().stackId;
+ mTaskStackId = mAm.getFocusedRootTaskInfo().taskId;
} catch (RemoteException e) {
Log.e(TAG, "cannot get new taskstackid in ActivityView.StateCallback");
}
@@ -216,10 +216,10 @@
private boolean isTaskStackEmpty() {
synchronized (mLock) {
try {
- return mAm.getAllStackInfos().stream().anyMatch(info
- -> (info.stackId == mTaskStackId && info.topActivity == null));
+ return mAm.getAllRootTaskInfos().stream().anyMatch(info
+ -> (info.taskId == mTaskStackId && info.topActivity == null));
} catch (RemoteException e) {
- Log.e(TAG, "cannot getFocusedStackInfos", e);
+ Log.e(TAG, "cannot getFocusedTaskInfos", e);
return true;
}
}
@@ -228,11 +228,11 @@
private final class TaskListener extends TaskStackListener {
@Override
public void onTaskStackChanged() {
- StackInfo focusedStackInfo;
+ RootTaskInfo focusedTaskInfo;
try {
- focusedStackInfo = mAm.getFocusedStackInfo();
+ focusedTaskInfo = mAm.getFocusedRootTaskInfo();
} catch (RemoteException e) {
- Log.e(TAG, "cannot getFocusedStackInfo", e);
+ Log.e(TAG, "cannot getFocusedRootTaskInfo", e);
return;
}
@@ -247,10 +247,10 @@
if (Log.isLoggable(TAG, Log.DEBUG)) {
Log.d(TAG, "OnTaskStackChanged: virtual display: "
+ mVirtualDisplayId + " homeDisplay: " + mHomeDisplayId
- + "\nFocused stack: " + focusedStackInfo);
+ + "\nFocused stack: " + focusedTaskInfo);
try {
- for (StackInfo info: mAm.getAllStackInfos()) {
- Log.d(TAG, " stackId: " + info.stackId + " displayId: "
+ for (RootTaskInfo info: mAm.getAllRootTaskInfos()) {
+ Log.d(TAG, " taskId: " + info.taskId + " displayId: "
+ info.displayId + " component: " + info.topActivity);
}
} catch (RemoteException e) {
diff --git a/tests/SecondaryHomeApp/src/com/android/car/secondaryhome/launcher/AppListAdapter.java b/tests/SecondaryHomeApp/src/com/android/car/secondaryhome/launcher/AppListAdapter.java
index a3f4ed3..56a177f 100644
--- a/tests/SecondaryHomeApp/src/com/android/car/secondaryhome/launcher/AppListAdapter.java
+++ b/tests/SecondaryHomeApp/src/com/android/car/secondaryhome/launcher/AppListAdapter.java
@@ -41,14 +41,14 @@
}
/**
- * Sets data for AppListAdaptor and exclude the app from blackList
+ * Sets data for AppListAdaptor and exclude the app from denyList
* @param data List of {@link AppEntry}
- * @param blackList A (possibly empty but not null) list of apps (package names) to hide
+ * @param denyList A (possibly empty but not null) list of apps (package names) to hide
*/
- void setData(@NonNull List<AppEntry> data, @NonNull Set<String> blackList) {
+ void setData(@NonNull List<AppEntry> data, @NonNull Set<String> denyList) {
clear();
- data.stream().filter(app -> !blackList.contains(app.getComponentName().getPackageName()))
+ data.stream().filter(app -> !denyList.contains(app.getComponentName().getPackageName()))
.forEach(app -> add(app));
sort(AppEntry.AppNameComparator);
diff --git a/tests/ThemePlayground/Android.bp b/tests/ThemePlayground/Android.bp
index 78ef6ea..5811d94 100644
--- a/tests/ThemePlayground/Android.bp
+++ b/tests/ThemePlayground/Android.bp
@@ -43,5 +43,5 @@
libs: ["android.car"],
- required: ["privapp_whitelist_com.android.car.themeplayground"],
+ required: ["allowed_privapp_com.android.car.themeplayground"],
}
diff --git a/tests/ThemePlayground/AndroidManifest.xml b/tests/ThemePlayground/AndroidManifest.xml
index d009859..a01bd22 100644
--- a/tests/ThemePlayground/AndroidManifest.xml
+++ b/tests/ThemePlayground/AndroidManifest.xml
@@ -15,60 +15,56 @@
~ limitations under the License
-->
-
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.car.themeplayground">
- <uses-sdk
- android:minSdkVersion="26"
- android:targetSdkVersion="26"/>
- <uses-permission android:name="android.permission.MODIFY_DAY_NIGHT_MODE" />
- <application
- android:allowBackup="true"
- android:icon="@drawable/ic_launcher"
- android:label="@string/app_name"
- android:supportsRtl="true"
- android:theme="@style/Theme.App">
- <activity
- android:name=".TextSamples"
- android:label="@string/app_name"
- android:windowSoftInputMode="stateUnchanged"
- android:resizeableActivity="true"
- android:allowEmbedded="true">
+ package="com.android.car.themeplayground">
+ <uses-sdk android:minSdkVersion="26"
+ android:targetSdkVersion="26"/>
+ <uses-permission android:name="android.permission.MODIFY_DAY_NIGHT_MODE"/>
+ <application android:allowBackup="true"
+ android:icon="@drawable/ic_launcher"
+ android:label="@string/app_name"
+ android:supportsRtl="true"
+ android:theme="@style/Theme.App">
+ <activity android:name=".TextSamples"
+ android:label="@string/app_name"
+ android:windowSoftInputMode="stateUnchanged"
+ android:resizeableActivity="true"
+ android:allowEmbedded="true"
+ android:exported="true">
<intent-filter>
- <action android:name="android.intent.action.MAIN" />
- <category android:name="android.intent.category.LAUNCHER" />
+ <action android:name="android.intent.action.MAIN"/>
+ <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
- <activity
- android:name=".ColorSamples"
- android:label="@string/panel_elements"
- android:windowSoftInputMode="stateUnchanged"
- android:resizeableActivity="true"
- android:allowEmbedded="true">
+ <activity android:name=".ColorSamples"
+ android:label="@string/panel_elements"
+ android:windowSoftInputMode="stateUnchanged"
+ android:resizeableActivity="true"
+ android:allowEmbedded="true">
</activity>
<activity android:name=".DialogSamples"
- android:label="@string/dialog_elements"
- android:parentActivityName="com.android.car.themeplayground.TextSamples">
+ android:label="@string/dialog_elements"
+ android:parentActivityName="com.android.car.themeplayground.TextSamples">
</activity>
<activity android:name=".WidgetsSamples"
- android:label="@string/widgets"
- android:parentActivityName="com.android.car.themeplayground.TextSamples">
+ android:label="@string/widgets"
+ android:parentActivityName="com.android.car.themeplayground.TextSamples">
</activity>
<activity android:name=".RecyclerViewSamples"
- android:label="@string/recycler_view"
- android:parentActivityName="com.android.car.themeplayground.TextSamples">
+ android:label="@string/recycler_view"
+ android:parentActivityName="com.android.car.themeplayground.TextSamples">
</activity>
<activity android:name=".CarUiRecyclerViewSamples"
- android:label="@string/car_ui_recycler_view"
- android:parentActivityName="com.android.car.themeplayground.TextSamples">
+ android:label="@string/car_ui_recycler_view"
+ android:parentActivityName="com.android.car.themeplayground.TextSamples">
</activity>
<activity android:name=".DefaultThemeSamples"
- android:label="@string/default_themes"
- android:parentActivityName="com.android.car.themeplayground.TextSamples">
+ android:label="@string/default_themes"
+ android:parentActivityName="com.android.car.themeplayground.TextSamples">
</activity>
<activity android:name=".MultipleIntentSamples"
- android:label="@string/multiple_intent"
- android:parentActivityName="com.android.car.themeplayground.TextSamples">
+ android:label="@string/multiple_intent"
+ android:parentActivityName="com.android.car.themeplayground.TextSamples">
</activity>
</application>
-</manifest>
\ No newline at end of file
+</manifest>
diff --git a/tests/ThemePlayground/src/com/android/car/themeplayground/CarUiRecyclerViewSamples.java b/tests/ThemePlayground/src/com/android/car/themeplayground/CarUiRecyclerViewSamples.java
index 09b58be..7a1dd04 100644
--- a/tests/ThemePlayground/src/com/android/car/themeplayground/CarUiRecyclerViewSamples.java
+++ b/tests/ThemePlayground/src/com/android/car/themeplayground/CarUiRecyclerViewSamples.java
@@ -23,7 +23,7 @@
import java.util.ArrayList;
/**
- * Activity that shows PagedRecyclerView example with dummy data.
+ * Activity that shows {@link CarUiRecyclerView} example with placeholder data.
*/
public class CarUiRecyclerViewSamples extends AbstractSampleActivity {
@@ -36,11 +36,11 @@
Utils.onActivityCreateSetTheme(this);
setContentView(R.layout.paged_recycler_view_samples);
CarUiRecyclerView recyclerView = findViewById(R.id.list);
- RecyclerViewAdapter adapter = new RecyclerViewAdapter(generateDummyData());
+ RecyclerViewAdapter adapter = new RecyclerViewAdapter(generatePlaceholderData());
recyclerView.setAdapter(adapter);
}
- private ArrayList<String> generateDummyData() {
+ private ArrayList<String> generatePlaceholderData() {
for (int i = 0; i <= mDataToGenerate; i++) {
mData.add("data" + i);
}
diff --git a/tests/ThemePlayground/src/com/android/car/themeplayground/RecyclerViewSamples.java b/tests/ThemePlayground/src/com/android/car/themeplayground/RecyclerViewSamples.java
index eacc5b7..906df9d 100644
--- a/tests/ThemePlayground/src/com/android/car/themeplayground/RecyclerViewSamples.java
+++ b/tests/ThemePlayground/src/com/android/car/themeplayground/RecyclerViewSamples.java
@@ -39,11 +39,11 @@
RecyclerView recyclerView = findViewById(R.id.list);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
- RecyclerViewAdapter adapter = new RecyclerViewAdapter(generateDummyData());
+ RecyclerViewAdapter adapter = new RecyclerViewAdapter(generatePlaceholderData());
recyclerView.setAdapter(adapter);
}
- private ArrayList<String> generateDummyData() {
+ private ArrayList<String> generatePlaceholderData() {
for (int i = 0; i <= mDataToGenerate; i++) {
mData.add("data" + i);
}
diff --git a/tests/UxRestrictionsSample/AndroidManifest.xml b/tests/UxRestrictionsSample/AndroidManifest.xml
index 5e1134e..8437e0c 100644
--- a/tests/UxRestrictionsSample/AndroidManifest.xml
+++ b/tests/UxRestrictionsSample/AndroidManifest.xml
@@ -13,26 +13,32 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- package="com.google.android.car.uxr.sample"
- android:sharedUserId="android.uid.system">
+ xmlns:tools="http://schemas.android.com/tools"
+ package="com.google.android.car.uxr.sample"
+ android:sharedUserId="android.uid.system">
<uses-permission android:name="android.car.permission.CAR_DRIVING_STATE"/>
<application android:label="UxRestrictions Sample"
- android:appComponentFactory="androidx.core.app.CoreComponentFactory"
- tools:replace="android:appComponentFactory">
- <activity android:name=".MainActivity" android:theme="@style/AppTheme" android:launchMode="singleTask">
+ android:appComponentFactory="androidx.core.app.CoreComponentFactory"
+ tools:replace="android:appComponentFactory">
+ <activity android:name=".MainActivity"
+ android:theme="@style/AppTheme"
+ android:launchMode="singleTask"
+ android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
- <meta-data android:name="distractionOptimized" android:value="true"/>
+ <meta-data android:name="distractionOptimized"
+ android:value="true"/>
</activity>
<activity android:name=".SampleMessageActivity"
- android:theme="@style/AppTheme">
- <meta-data android:name="distractionOptimized" android:value="true"/>
+ android:theme="@style/AppTheme">
+ <meta-data android:name="distractionOptimized"
+ android:value="true"/>
</activity>
</application>
</manifest>
diff --git a/tests/android_car_api_test/AndroidManifest.xml b/tests/android_car_api_test/AndroidManifest.xml
index bd8fb8c..2894a4b 100644
--- a/tests/android_car_api_test/AndroidManifest.xml
+++ b/tests/android_car_api_test/AndroidManifest.xml
@@ -15,29 +15,30 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
- package="android.car.apitest"
- android:sharedUserId="com.google.android.car.uid.kitchensink"
- android:debuggable="true" >
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+ package="android.car.apitest"
+ android:sharedUserId="com.google.android.car.uid.kitchensink"
+ android:debuggable="true">
<instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
- android:targetPackage="android.car.apitest"
- android:label="Tests for Car APIs"
- android:debuggable="true" />
+ android:targetPackage="android.car.apitest"
+ android:label="Tests for Car APIs"
+ android:debuggable="true"/>
<application android:label="CarApiTest"
- android:debuggable="true">
- <uses-library android:name="android.test.runner" />
- <activity android:name=".TestCarProxyActivity">
+ android:debuggable="true">
+ <uses-library android:name="android.test.runner"/>
+ <activity android:name=".TestCarProxyActivity"
+ android:exported="true">
<intent-filter>
- <action android:name="android.intent.action.MAIN" />
+ <action android:name="android.intent.action.MAIN"/>
</intent-filter>
</activity>
<service android:name=".CarProjectionManagerTest$TestService"
- android:exported="true" />
+ android:exported="true"/>
<activity android:name=".CarActivityViewDisplayIdTestBase$ActivityInActivityView"/>
<activity android:name=".CarActivityViewDisplayIdTestBase$ActivityViewTestActivity"/>
<activity android:name=".CarActivityViewDisplayIdTestBase$MultiProcessActivityViewTestActivity"
- android:exported="true" android:process=":activity_view_test"/>
+ android:exported="true" android:process=":activity_view_test"/>
</application>
</manifest>
diff --git a/tests/android_car_api_test/src/android/car/apitest/CarActivityViewDisplayIdTestBase.java b/tests/android_car_api_test/src/android/car/apitest/CarActivityViewDisplayIdTestBase.java
index e1782cb..8e271db 100644
--- a/tests/android_car_api_test/src/android/car/apitest/CarActivityViewDisplayIdTestBase.java
+++ b/tests/android_car_api_test/src/android/car/apitest/CarActivityViewDisplayIdTestBase.java
@@ -112,8 +112,7 @@
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- mActivityView = new CarActivityView(this, /*attrs=*/null , /*defStyle=*/0 ,
- /*singleTaskInstance=*/true);
+ mActivityView = new CarActivityView(this, /*attrs=*/null , /*defStyle=*/0);
mActivityView.setCallback(mCallback);
setContentView(mActivityView);
diff --git a/tests/android_car_api_test/src/android/car/apitest/CarAppBlockingPolicyTest.java b/tests/android_car_api_test/src/android/car/apitest/CarAppBlockingPolicyTest.java
index 51cb1e3..cf62263 100644
--- a/tests/android_car_api_test/src/android/car/apitest/CarAppBlockingPolicyTest.java
+++ b/tests/android_car_api_test/src/android/car/apitest/CarAppBlockingPolicyTest.java
@@ -42,10 +42,10 @@
AppBlockingPackageInfo selfInfo =
AppBlockingPackageInfoTest.createInfoSelf(mContext);
// this is only for testing parcelling. contents has nothing to do with actual app blocking.
- AppBlockingPackageInfo[] whitelists = new AppBlockingPackageInfo[] { carServiceInfo,
+ AppBlockingPackageInfo[] allowlists = new AppBlockingPackageInfo[] { carServiceInfo,
selfInfo };
- AppBlockingPackageInfo[] blacklists = new AppBlockingPackageInfo[] { selfInfo };
- CarAppBlockingPolicy policyExpected = new CarAppBlockingPolicy(whitelists, blacklists);
+ AppBlockingPackageInfo[] denylists = new AppBlockingPackageInfo[] { selfInfo };
+ CarAppBlockingPolicy policyExpected = new CarAppBlockingPolicy(allowlists, denylists);
Parcel dest = Parcel.obtain();
policyExpected.writeToParcel(dest, 0);
dest.setDataPosition(0);
diff --git a/tests/android_car_api_test/src/android/car/apitest/CarFeatureTest.java b/tests/android_car_api_test/src/android/car/apitest/CarFeatureTest.java
index 5d8fa6a..e9b18c8 100644
--- a/tests/android_car_api_test/src/android/car/apitest/CarFeatureTest.java
+++ b/tests/android_car_api_test/src/android/car/apitest/CarFeatureTest.java
@@ -35,11 +35,9 @@
Car.AUDIO_SERVICE,
Car.BLUETOOTH_SERVICE,
Car.CAR_BUGREPORT_SERVICE,
- Car.CAR_CONFIGURATION_SERVICE,
Car.CAR_DRIVING_STATE_SERVICE,
Car.CAR_MEDIA_SERVICE,
Car.CAR_OCCUPANT_ZONE_SERVICE,
- Car.CAR_TRUST_AGENT_ENROLLMENT_SERVICE,
Car.CAR_USER_SERVICE,
Car.CAR_UX_RESTRICTION_SERVICE,
Car.INFO_SERVICE,
diff --git a/tests/android_car_api_test/src/android/car/apitest/CarNavigationManagerTest.java b/tests/android_car_api_test/src/android/car/apitest/CarNavigationManagerTest.java
index 6732c3d..fbc371d 100644
--- a/tests/android_car_api_test/src/android/car/apitest/CarNavigationManagerTest.java
+++ b/tests/android_car_api_test/src/android/car/apitest/CarNavigationManagerTest.java
@@ -37,6 +37,7 @@
import android.car.cluster.navigation.NavigationState.Timestamp;
import android.car.navigation.CarNavigationStatusManager;
import android.os.Bundle;
+import android.platform.test.annotations.FlakyTest;
import android.test.suitebuilder.annotation.MediumTest;
import android.util.Log;
@@ -112,6 +113,8 @@
}
@Test
+ @FlakyTest
+ // TODO(b/155343605)
public void testSendEvent() throws Exception {
if (mCarNavigationManager == null) {
Log.w(TAG, "Unable to run the test: "
diff --git a/tests/android_car_api_test/src/android/car/apitest/CarPropertyConfigTest.java b/tests/android_car_api_test/src/android/car/apitest/CarPropertyConfigTest.java
index ed0200f..32fe142 100644
--- a/tests/android_car_api_test/src/android/car/apitest/CarPropertyConfigTest.java
+++ b/tests/android_car_api_test/src/android/car/apitest/CarPropertyConfigTest.java
@@ -167,7 +167,7 @@
Integer value = integerConfig.getMinValue(WINDOW_PASSENGER);
});
- // Type casting from raw CarPropertyConfig should be fine, just sanity check.
+ // Type casting from raw CarPropertyConfig should be fine, just confidence check.
CarPropertyConfig<?> rawTypeConfig = readFromParcel();
assertThat(rawTypeConfig.getMinValue(WINDOW_PASSENGER)).isEqualTo(10f);
diff --git a/tests/android_car_api_test/src/android/car/apitest/CarUserManagerTest.java b/tests/android_car_api_test/src/android/car/apitest/CarUserManagerTest.java
index f01a06d..be3fd22 100644
--- a/tests/android_car_api_test/src/android/car/apitest/CarUserManagerTest.java
+++ b/tests/android_car_api_test/src/android/car/apitest/CarUserManagerTest.java
@@ -39,6 +39,7 @@
import android.car.user.CarUserManager;
import android.car.user.CarUserManager.UserLifecycleEvent;
import android.car.user.UserSwitchResult;
+import android.car.util.concurrent.AsyncFuture;
import android.content.pm.UserInfo;
import android.os.RemoteException;
import android.os.UserHandle;
@@ -47,8 +48,6 @@
import androidx.test.filters.FlakyTest;
-import com.android.internal.infra.AndroidFuture;
-
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
@@ -335,7 +334,7 @@
private void switchUser(@UserIdInt int userId) throws Exception {
Log.i(TAG, "Switching to user " + userId + " using CarUserManager");
- AndroidFuture<UserSwitchResult> future = mCarUserManager.switchUser(userId);
+ AsyncFuture<UserSwitchResult> future = mCarUserManager.switchUser(userId);
UserSwitchResult result = future.get(SWITCH_TIMEOUT_MS, TimeUnit.MILLISECONDS);
Log.d(TAG, "Result: " + result);
diff --git a/tests/android_car_api_test/src/android/car/apitest/CarUxRestrictionsConfigurationTest.java b/tests/android_car_api_test/src/android/car/apitest/CarUxRestrictionsConfigurationTest.java
index 6f74074..c0d35a7 100644
--- a/tests/android_car_api_test/src/android/car/apitest/CarUxRestrictionsConfigurationTest.java
+++ b/tests/android_car_api_test/src/android/car/apitest/CarUxRestrictionsConfigurationTest.java
@@ -407,7 +407,7 @@
+ "\"passenger_moving_restrictions\":[{\"req_opt\":true,\"restrictions\":57}],"
+ "\"passenger_unknown_restrictions\":[{\"req_opt\":true,\"restrictions\":510}]}";
CarUxRestrictionsConfiguration expectedConfig = new Builder()
- .setPhysicalPort((byte) 1)
+ .setPhysicalPort(1)
.setMaxContentDepth(2)
.setMaxCumulativeContentItems(20)
.setMaxStringLength(21)
@@ -723,7 +723,7 @@
@Test
public void testParcelableConfiguration() {
CarUxRestrictionsConfiguration config = new CarUxRestrictionsConfiguration.Builder()
- .setPhysicalPort((byte) 1)
+ .setPhysicalPort(1)
.setMaxStringLength(1)
.setMaxCumulativeContentItems(1)
.setMaxContentDepth(1)
diff --git a/tests/android_car_api_test/src/android/car/apitest/PreInstalledPackagesTest.java b/tests/android_car_api_test/src/android/car/apitest/PreInstalledPackagesTest.java
index 791f5d1..51adc4b 100644
--- a/tests/android_car_api_test/src/android/car/apitest/PreInstalledPackagesTest.java
+++ b/tests/android_car_api_test/src/android/car/apitest/PreInstalledPackagesTest.java
@@ -22,8 +22,6 @@
import android.platform.test.annotations.Presubmit;
import android.text.TextUtils;
-import androidx.test.filters.FlakyTest;
-
import org.junit.Test;
@Presubmit
@@ -34,7 +32,6 @@
assertNoCriticalErrors(/* enforceMode= */ false);
}
- @FlakyTest // TODO(b/157263778): still failing on cuttlefish
@Test
public void testNoCriticalErrors_enforceMode() {
assertNoCriticalErrors(/* enforceMode= */ true);
diff --git a/tests/android_car_api_test/src/android/car/apitest/VehiclePropertyIdsTest.java b/tests/android_car_api_test/src/android/car/apitest/VehiclePropertyIdsTest.java
index 98451fb..14a38fe 100644
--- a/tests/android_car_api_test/src/android/car/apitest/VehiclePropertyIdsTest.java
+++ b/tests/android_car_api_test/src/android/car/apitest/VehiclePropertyIdsTest.java
@@ -38,12 +38,14 @@
new ArrayList<>(
Arrays.asList(
"DISABLED_OPTIONAL_FEATURES",
+ "HW_CUSTOM_INPUT",
"HW_ROTARY_INPUT",
"SUPPORT_CUSTOMIZE_VENDOR_PERMISSION"));
private static final List<Integer> MISSING_VEHICLE_PROPERTY_ID_VALUES =
new ArrayList<>(
Arrays.asList(
/*DISABLED_OPTIONAL_FEATURES=*/286265094,
+ /*HW_CUSTOM_INPUT=*/289475120,
/*HW_ROTARY_INPUT=*/289475104,
/*SUPPORT_CUSTOMIZE_VENDOR_PERMISSION=*/287313669));
diff --git a/tests/carservice_test/AndroidManifest.xml b/tests/carservice_test/AndroidManifest.xml
index 1b3acc0..198292b 100644
--- a/tests/carservice_test/AndroidManifest.xml
+++ b/tests/carservice_test/AndroidManifest.xml
@@ -15,31 +15,33 @@
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.android.car.test"
- android:sharedUserId="com.google.android.car.uid.kitchensink">
+ package="com.android.car.test"
+ android:sharedUserId="com.google.android.car.uid.kitchensink">
- <uses-permission android:name="android.Manifest.permission.MODIFY_AUDIO_ROUTING" />
- <uses-permission android:name="android.car.permission.CONTROL_CAR_CLIMATE" />
- <uses-permission android:name="android.car.permission.CONTROL_CAR_DOORS" />
- <uses-permission android:name="android.car.permission.CONTROL_CAR_WINDOWS" />
- <uses-permission android:name="android.car.permission.CONTROL_CAR_MIRRORS" />
- <uses-permission android:name="android.car.permission.CONTROL_CAR_SEATS" />
- <uses-permission android:name="android.car.permission.CAR_ENERGY" />
- <uses-permission android:name="android.car.permission.CONTROL_APP_BLOCKING" />
- <uses-permission android:name="android.car.permission.CAR_CONTROL_AUDIO_VOLUME" />
- <uses-permission android:name="android.car.permission.CAR_CONTROL_AUDIO_SETTINGS" />
- <uses-permission android:name="android.car.permission.STORAGE_MONITORING" />
- <uses-permission android:name="android.car.permission.READ_CAR_OCCUPANT_AWARENESS_STATE" />
+ <uses-permission android:name="android.Manifest.permission.MODIFY_AUDIO_ROUTING"/>
+ <uses-permission android:name="android.car.permission.CONTROL_CAR_CLIMATE"/>
+ <uses-permission android:name="android.car.permission.CONTROL_CAR_DOORS"/>
+ <uses-permission android:name="android.car.permission.CONTROL_CAR_WINDOWS"/>
+ <uses-permission android:name="android.car.permission.CONTROL_CAR_MIRRORS"/>
+ <uses-permission android:name="android.car.permission.CONTROL_CAR_SEATS"/>
+ <uses-permission android:name="android.car.permission.CAR_ENERGY"/>
+ <uses-permission android:name="android.car.permission.CONTROL_APP_BLOCKING"/>
+ <uses-permission android:name="android.car.permission.CAR_CONTROL_AUDIO_VOLUME"/>
+ <uses-permission android:name="android.car.permission.CAR_CONTROL_AUDIO_SETTINGS"/>
+ <uses-permission android:name="android.car.permission.STORAGE_MONITORING"/>
+ <uses-permission android:name="android.car.permission.READ_CAR_OCCUPANT_AWARENESS_STATE"/>
<instrumentation android:name="androidx.test.runner.AndroidJUnitRunner"
- android:targetPackage="com.android.car.test"
- android:label="Tests for Car APIs"/>
+ android:targetPackage="com.android.car.test"
+ android:label="Tests for Car APIs"/>
- <application android:label="CarServiceTest" android:name=".CarServiceTestApp"
- android:debuggable="true">
- <uses-library android:name="android.test.runner" />
+ <application android:label="CarServiceTest"
+ android:name=".CarServiceTestApp"
+ android:debuggable="true">
+ <uses-library android:name="android.test.runner"/>
<service android:name="com.android.car.TestAppBlockingPolicyService"
- android:permission="android.car.permission.CONTROL_APP_BLOCKING">
+ android:permission="android.car.permission.CONTROL_APP_BLOCKING"
+ android:exported="true">
<intent-filter>
<action android:name="android.car.content.pm.CarAppBlockingPolicyService"/>
</intent-filter>
@@ -47,16 +49,17 @@
<activity android:name="com.android.car.CarUxRestrictionsManagerServiceTest$ActivityViewTestActivity"/>
<activity android:name="com.android.car.pm.ActivityBlockingActivityTest$NonDoNoHistoryActivity"
- android:noHistory="true"/>
+ android:noHistory="true"/>
<activity android:name="com.android.car.pm.ActivityBlockingActivityTest$NonDoActivity"/>
<activity android:name="com.android.car.pm.ActivityBlockingActivityTest$DoActivity"
- android:label="DoActivity">
- <meta-data android:name="distractionOptimized" android:value="true"/>
+ android:label="DoActivity">
+ <meta-data android:name="distractionOptimized"
+ android:value="true"/>
</activity>
<receiver android:name="com.android.car.CarStorageMonitoringBroadcastReceiver"
- android:exported="true"
- android:permission="android.car.permission.STORAGE_MONITORING">
+ android:exported="true"
+ android:permission="android.car.permission.STORAGE_MONITORING">
<intent-filter>
<action android:name="android.car.storagemonitoring.EXCESSIVE_IO"/>
</intent-filter>
diff --git a/tests/carservice_test/src/com/android/car/CarCabinManagerTest.java b/tests/carservice_test/src/com/android/car/CarCabinManagerTest.java
index 378d587..7256cf0 100644
--- a/tests/carservice_test/src/com/android/car/CarCabinManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/CarCabinManagerTest.java
@@ -196,13 +196,13 @@
public synchronized void onPropertySubscribe(int property, float sampleRate) {
Log.d(TAG, "onPropertySubscribe property " + property + " sampleRate " + sampleRate);
if (mMap.get(property) == null) {
- Log.d(TAG, "onPropertySubscribe add dummy property: " + property);
- VehiclePropValue dummyValue = VehiclePropValueBuilder.newBuilder(property)
+ Log.d(TAG, "onPropertySubscribe add placeholder property: " + property);
+ VehiclePropValue placeholderValue = VehiclePropValueBuilder.newBuilder(property)
.setAreaId(VehicleAreaDoor.ROW_1_LEFT)
.setTimestamp(SystemClock.elapsedRealtimeNanos())
.addIntValue(1)
.build();
- mMap.put(property, dummyValue);
+ mMap.put(property, placeholderValue);
}
}
diff --git a/tests/carservice_test/src/com/android/car/CarHvacManagerTest.java b/tests/carservice_test/src/com/android/car/CarHvacManagerTest.java
index df2ce60..7ed9066 100644
--- a/tests/carservice_test/src/com/android/car/CarHvacManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/CarHvacManagerTest.java
@@ -282,14 +282,14 @@
public synchronized void onPropertySubscribe(int property, float sampleRate) {
Log.d(TAG, "onPropertySubscribe property " + property + " sampleRate " + sampleRate);
if (mMap.get(property) == null) {
- Log.d(TAG, "onPropertySubscribe add dummy property: " + property);
- VehiclePropValue dummyValue = VehiclePropValueBuilder.newBuilder(property)
+ Log.d(TAG, "onPropertySubscribe add placeholder property: " + property);
+ VehiclePropValue placeholderValue = VehiclePropValueBuilder.newBuilder(property)
.setAreaId(0)
.setTimestamp(SystemClock.elapsedRealtimeNanos())
.addIntValue(1)
.addFloatValue(1)
.build();
- mMap.put(property, dummyValue);
+ mMap.put(property, placeholderValue);
}
}
diff --git a/tests/carservice_test/src/com/android/car/CarPackageManagerTest.java b/tests/carservice_test/src/com/android/car/CarPackageManagerTest.java
index 93a7103..7cbd78f 100644
--- a/tests/carservice_test/src/com/android/car/CarPackageManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/CarPackageManagerTest.java
@@ -83,7 +83,7 @@
@Suppress
@Test
@FlakyTest
- public void testSettingWhitelist() throws Exception {
+ public void testSettingAllowlist() throws Exception {
init(false);
final String carServicePackageName = "com.android.car";
final String activityAllowed = "NO_SUCH_ACTIVITY_BUT_ALLOWED";
diff --git a/tests/carservice_test/src/com/android/car/CarUxRestrictionsConfigurationXmlParserTest.java b/tests/carservice_test/src/com/android/car/CarUxRestrictionsConfigurationXmlParserTest.java
index a6b3fe1..2cbde92 100644
--- a/tests/carservice_test/src/com/android/car/CarUxRestrictionsConfigurationXmlParserTest.java
+++ b/tests/carservice_test/src/com/android/car/CarUxRestrictionsConfigurationXmlParserTest.java
@@ -166,9 +166,9 @@
assertEquals(configs.size(), 2);
// 1 and 2 are specified in test xml.
- Set<Byte> expected = new ArraySet<>();
- expected.add((byte) 1);
- expected.add((byte) 2);
+ Set<Integer> expected = new ArraySet<>();
+ expected.add(1);
+ expected.add(2);
for (CarUxRestrictionsConfiguration config : configs) {
assertTrue(expected.contains(config.getPhysicalPort()));
}
diff --git a/tests/carservice_test/src/com/android/car/CarUxRestrictionsManagerServiceTest.java b/tests/carservice_test/src/com/android/car/CarUxRestrictionsManagerServiceTest.java
index 7890d5a..259c360 100644
--- a/tests/carservice_test/src/com/android/car/CarUxRestrictionsManagerServiceTest.java
+++ b/tests/carservice_test/src/com/android/car/CarUxRestrictionsManagerServiceTest.java
@@ -223,7 +223,7 @@
CarUxRestrictionsConfiguration actual = mService.loadConfig().get(0);
CarUxRestrictionsConfiguration expectedConfig = new Builder()
- .setPhysicalPort((byte) 1)
+ .setPhysicalPort(1)
.setMaxContentDepth(2)
.setMaxCumulativeContentItems(20)
.setMaxStringLength(21)
@@ -309,7 +309,7 @@
@Test
public void testValidateConfigs_SingleConfigWithPort() throws Exception {
- CarUxRestrictionsConfiguration config = createEmptyConfig((byte) 0);
+ CarUxRestrictionsConfiguration config = createEmptyConfig(0);
mService.validateConfigs(Arrays.asList(config));
}
@@ -321,7 +321,7 @@
@Test(expected = IllegalArgumentException.class)
public void testValidateConfigs_MultipleConfigsMustHaveUniquePort() throws Exception {
mService.validateConfigs(Arrays.asList(
- createEmptyConfig((byte) 0), createEmptyConfig((byte) 0)));
+ createEmptyConfig(0), createEmptyConfig(0)));
}
@Test
@@ -351,7 +351,7 @@
// Setup restrictions on the default display only
int defaultPortRestrictions = CarUxRestrictions.UX_RESTRICTIONS_NO_KEYBOARD;
- byte defaultPort = CarUxRestrictionsManagerService.getDefaultDisplayPhysicalPort(
+ int defaultPort = CarUxRestrictionsManagerService.getDefaultDisplayPhysicalPort(
displayManager);
CarUxRestrictionsConfiguration defaultPortConfig = createMovingConfig(defaultPort,
defaultPortRestrictions);
@@ -406,10 +406,10 @@
// Setup different restrictions for each physical port
int port2Restrictions = CarUxRestrictions.UX_RESTRICTIONS_NO_KEYBOARD;
CarUxRestrictionsConfiguration defaultPortConfig = createMovingConfig(
- (byte) physicalPortForFirstDisplay,
+ physicalPortForFirstDisplay,
CarUxRestrictions.UX_RESTRICTIONS_NO_DIALPAD);
CarUxRestrictionsConfiguration port2Config = createMovingConfig(
- (byte) physicalPortForSecondDisplay,
+ physicalPortForSecondDisplay,
port2Restrictions);
setupMockFile(CONFIG_FILENAME_PRODUCTION, List.of(defaultPortConfig, port2Config));
@@ -662,7 +662,7 @@
return createEmptyConfig(null);
}
- private CarUxRestrictionsConfiguration createEmptyConfig(Byte port) {
+ private CarUxRestrictionsConfiguration createEmptyConfig(Integer port) {
Builder builder = new Builder();
if (port != null) {
builder.setPhysicalPort(port);
@@ -670,7 +670,7 @@
return builder.build();
}
- private CarUxRestrictionsConfiguration createMovingConfig(Byte port, int restrictions) {
+ private CarUxRestrictionsConfiguration createMovingConfig(Integer port, int restrictions) {
Builder builder = new Builder();
if (port != null) {
builder.setPhysicalPort(port);
diff --git a/tests/carservice_test/src/com/android/car/MockedCarTestBase.java b/tests/carservice_test/src/com/android/car/MockedCarTestBase.java
index 04c9504..b444bbb 100644
--- a/tests/carservice_test/src/com/android/car/MockedCarTestBase.java
+++ b/tests/carservice_test/src/com/android/car/MockedCarTestBase.java
@@ -48,6 +48,7 @@
import androidx.test.platform.app.InstrumentationRegistry;
import com.android.car.pm.CarPackageManagerService;
+import com.android.car.power.CarPowerManagementService;
import com.android.car.systeminterface.ActivityManagerInterface;
import com.android.car.systeminterface.DisplayInterface;
import com.android.car.systeminterface.IOInterface;
@@ -85,8 +86,8 @@
* per test set up that should be done before starting.
*/
public class MockedCarTestBase {
- static final long DEFAULT_WAIT_TIMEOUT_MS = 3000;
- static final long SHORT_WAIT_TIMEOUT_MS = 500;
+ protected static final long DEFAULT_WAIT_TIMEOUT_MS = 3000;
+ protected static final long SHORT_WAIT_TIMEOUT_MS = 500;
private static final String TAG = MockedCarTestBase.class.getSimpleName();
private static final IBinder sCarServiceToken = new Binder();
private static boolean sRealCarServiceReleased;
diff --git a/tests/carservice_test/src/com/android/car/TestAppBlockingPolicyService.java b/tests/carservice_test/src/com/android/car/TestAppBlockingPolicyService.java
index 41bc612..1e72ca8 100644
--- a/tests/carservice_test/src/com/android/car/TestAppBlockingPolicyService.java
+++ b/tests/carservice_test/src/com/android/car/TestAppBlockingPolicyService.java
@@ -59,8 +59,8 @@
AppBlockingPackageInfo selfInfo = new AppBlockingPackageInfo(packageName, 0, 0, 0,
signatures, null);
- AppBlockingPackageInfo[] whitelists = new AppBlockingPackageInfo[] { selfInfo };
- CarAppBlockingPolicy policy = new CarAppBlockingPolicy(whitelists, null);
+ AppBlockingPackageInfo[] allowlists = new AppBlockingPackageInfo[] { selfInfo };
+ CarAppBlockingPolicy policy = new CarAppBlockingPolicy(allowlists, null);
Log.i(TAG, "getAppBlockingPolicy, passing policy:" + policy);
return policy;
}
diff --git a/tests/carservice_test/src/com/android/car/audio/CarAudioZonesHelperTest.java b/tests/carservice_test/src/com/android/car/audio/CarAudioZonesHelperTest.java
index 6328df8..cebde86 100644
--- a/tests/carservice_test/src/com/android/car/audio/CarAudioZonesHelperTest.java
+++ b/tests/carservice_test/src/com/android/car/audio/CarAudioZonesHelperTest.java
@@ -129,6 +129,8 @@
when(inputMock.getType()).thenReturn(type);
when(inputMock.isSource()).thenReturn(true);
when(inputMock.isSink()).thenReturn(false);
+ when(inputMock.getInternalType()).thenReturn(
+ AudioDeviceInfo.convertDeviceTypeToInternalInputDevice(type));
return inputMock;
}
diff --git a/tests/carservice_test/src/com/android/car/input/CarInputManagerTest.java b/tests/carservice_test/src/com/android/car/input/CarInputManagerTest.java
index 907bdc2..594c87c 100644
--- a/tests/carservice_test/src/com/android/car/input/CarInputManagerTest.java
+++ b/tests/carservice_test/src/com/android/car/input/CarInputManagerTest.java
@@ -16,14 +16,19 @@
package com.android.car.input;
+import static android.car.CarOccupantZoneManager.DisplayTypeEnum;
+
import static com.google.common.truth.Truth.assertThat;
import static org.testng.Assert.assertThrows;
import android.annotation.NonNull;
import android.car.Car;
+import android.car.CarOccupantZoneManager;
import android.car.input.CarInputManager;
+import android.car.input.CustomInputEvent;
import android.car.input.RotaryEvent;
+import android.hardware.automotive.vehicle.V2_0.VehicleDisplay;
import android.hardware.automotive.vehicle.V2_0.VehicleProperty;
import android.util.Log;
import android.util.Pair;
@@ -47,6 +52,7 @@
import java.util.concurrent.TimeUnit;
+// TODO(b/159623196): Enhance this class to test HW_CUSTOM_INPUT
@RunWith(AndroidJUnit4.class)
@MediumTest
public final class CarInputManagerTest extends MockedCarTestBase {
@@ -72,6 +78,11 @@
private final LinkedList<Pair<Integer, List<RotaryEvent>>> mRotaryEvents =
new LinkedList<>();
+ // Stores passed events. Last one in front
+ @GuardedBy("mLock")
+ private final LinkedList<Pair<Integer, List<CustomInputEvent>>> mCustomInputEvents =
+ new LinkedList<>();
+
// Stores passed state changes. Last one in front
@GuardedBy("mLock")
private final LinkedList<Pair<Integer, int[]>> mStateChanges = new LinkedList<>();
@@ -79,33 +90,45 @@
private final Semaphore mKeyEventWait = new Semaphore(0);
private final Semaphore mRotaryEventWait = new Semaphore(0);
private final Semaphore mStateChangeWait = new Semaphore(0);
+ private final Semaphore mCustomInputEventWait = new Semaphore(0);
@Override
- public void onKeyEvents(int targetDisplayId, List<KeyEvent> keyEvents) {
+ public void onKeyEvents(@DisplayTypeEnum int targetDisplayType,
+ @NonNull List<KeyEvent> keyEvents) {
Log.i(TAG, "onKeyEvents event:" + keyEvents.get(0) + " this:" + this);
synchronized (mLock) {
- mKeyEvents.addFirst(new Pair<Integer, List<KeyEvent>>(targetDisplayId, keyEvents));
+ mKeyEvents.addFirst(new Pair<>(targetDisplayType, keyEvents));
}
mKeyEventWait.release();
}
@Override
- public void onRotaryEvents(int targetDisplayId, List<RotaryEvent> events) {
+ public void onRotaryEvents(@DisplayTypeEnum int targetDisplayType,
+ @NonNull List<RotaryEvent> events) {
Log.i(TAG, "onRotaryEvents event:" + events.get(0) + " this:" + this);
synchronized (mLock) {
- mRotaryEvents.addFirst(new Pair<Integer, List<RotaryEvent>>(targetDisplayId,
- events));
+ mRotaryEvents.addFirst(new Pair<>(targetDisplayType, events));
}
mRotaryEventWait.release();
}
@Override
- public void onCaptureStateChanged(int targetDisplayId,
+ public void onCustomInputEvents(@DisplayTypeEnum int targetDisplayType,
+ @NonNull List<CustomInputEvent> events) {
+ Log.i(TAG, "onCustomInputEvents event:" + events.get(0) + " this:" + this);
+ synchronized (mLock) {
+ mCustomInputEvents.addFirst(new Pair<>(targetDisplayType, events));
+ }
+ mCustomInputEventWait.release();
+ }
+
+ @Override
+ public void onCaptureStateChanged(@DisplayTypeEnum int targetDisplayType,
@NonNull @CarInputManager.InputTypeEnum int[] activeInputTypes) {
Log.i(TAG, "onCaptureStateChanged types:" + Arrays.toString(activeInputTypes)
+ " this:" + this);
synchronized (mLock) {
- mStateChanges.addFirst(new Pair<Integer, int[]>(targetDisplayId, activeInputTypes));
+ mStateChanges.addFirst(new Pair<>(targetDisplayType, activeInputTypes));
}
mStateChangeWait.release();
}
@@ -120,7 +143,7 @@
mStateChangeWait.tryAcquire(EVENT_WAIT_TIME, TimeUnit.MILLISECONDS);
}
- private void waitForKeyEvent() throws Exception {
+ private void waitForKeyEvent() throws Exception {
mKeyEventWait.tryAcquire(EVENT_WAIT_TIME, TimeUnit.MILLISECONDS);
}
@@ -128,10 +151,14 @@
mRotaryEventWait.tryAcquire(EVENT_WAIT_TIME, TimeUnit.MILLISECONDS);
}
+ private void waitForCustomInputEvent() throws Exception {
+ mCustomInputEventWait.tryAcquire(EVENT_WAIT_TIME, TimeUnit.MILLISECONDS);
+ }
+
private LinkedList<Pair<Integer, List<KeyEvent>>> getkeyEvents() {
synchronized (mLock) {
LinkedList<Pair<Integer, List<KeyEvent>>> r =
- new LinkedList<Pair<Integer, List<KeyEvent>>>(mKeyEvents);
+ new LinkedList<>(mKeyEvents);
Log.i(TAG, "getKeyEvents size:" + r.size() + ",this:" + this);
return r;
}
@@ -140,7 +167,7 @@
private LinkedList<Pair<Integer, List<RotaryEvent>>> getRotaryEvents() {
synchronized (mLock) {
LinkedList<Pair<Integer, List<RotaryEvent>>> r =
- new LinkedList<Pair<Integer, List<RotaryEvent>>>(mRotaryEvents);
+ new LinkedList<>(mRotaryEvents);
Log.i(TAG, "getRotaryEvents size:" + r.size() + ",this:" + this);
return r;
}
@@ -148,13 +175,14 @@
private LinkedList<Pair<Integer, int[]>> getStateChanges() {
synchronized (mLock) {
- return new LinkedList<Pair<Integer, int[]>>(mStateChanges);
+ return new LinkedList<>(mStateChanges);
}
}
}
private final CaptureCallback mCallback0 = new CaptureCallback();
private final CaptureCallback mCallback1 = new CaptureCallback();
+ private final CaptureCallback mCallback2 = new CaptureCallback();
@Override
protected synchronized void configureMockedHal() {
@@ -166,6 +194,10 @@
VehiclePropValueBuilder.newBuilder(VehicleProperty.HW_ROTARY_INPUT)
.addIntValue(0, 1, 0)
.build());
+ addProperty(VehicleProperty.HW_CUSTOM_INPUT,
+ VehiclePropValueBuilder.newBuilder(VehicleProperty.HW_CUSTOM_INPUT)
+ .addIntValue(0)
+ .build());
}
@Override
@@ -180,7 +212,7 @@
// TODO(b/150818155) Need to migrate cluster code to use this to enable it.
assertThrows(IllegalArgumentException.class,
() -> mCarInputManager.requestInputEventCapture(mCallback0,
- CarInputManager.TARGET_DISPLAY_TYPE_CLUSTER,
+ CarOccupantZoneManager.DISPLAY_TYPE_INSTRUMENT_CLUSTER,
new int[]{CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION}, 0));
// Invalid display
@@ -191,21 +223,21 @@
// Invalid input types
assertThrows(IllegalArgumentException.class,
() -> mCarInputManager.requestInputEventCapture(mCallback0,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION, INVALID_INPUT_TYPE},
0));
assertThrows(IllegalArgumentException.class,
() -> mCarInputManager.requestInputEventCapture(mCallback0,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION},
CarInputManager.CAPTURE_REQ_FLAGS_TAKE_ALL_EVENTS_FOR_DISPLAY));
assertThrows(IllegalArgumentException.class,
() -> mCarInputManager.requestInputEventCapture(mCallback0,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN, new int[]{INVALID_INPUT_TYPE},
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN, new int[]{INVALID_INPUT_TYPE},
0));
assertThrows(IllegalArgumentException.class,
() -> mCarInputManager.requestInputEventCapture(mCallback0,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION, INVALID_INPUT_TYPE},
0));
}
@@ -218,7 +250,7 @@
public void testFailWithFullCaptureHigherPriority() throws Exception {
CarInputManager carInputManager0 = createAnotherCarInputManager();
int r = carInputManager0.requestInputEventCapture(mCallback0,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{CarInputManager.INPUT_TYPE_ALL_INPUTS},
CarInputManager.CAPTURE_REQ_FLAGS_TAKE_ALL_EVENTS_FOR_DISPLAY);
assertThat(r).isEqualTo(CarInputManager.INPUT_CAPTURE_RESPONSE_SUCCEEDED);
@@ -226,14 +258,14 @@
//TODO test event
r = mCarInputManager.requestInputEventCapture(mCallback1,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION}, 0);
assertThat(r).isEqualTo(CarInputManager.INPUT_CAPTURE_RESPONSE_FAILED);
- carInputManager0.releaseInputEventCapture(CarInputManager.TARGET_DISPLAY_TYPE_MAIN);
+ carInputManager0.releaseInputEventCapture(CarOccupantZoneManager.DISPLAY_TYPE_MAIN);
r = mCarInputManager.requestInputEventCapture(mCallback1,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION}, 0);
assertThat(r).isEqualTo(CarInputManager.INPUT_CAPTURE_RESPONSE_SUCCEEDED);
@@ -245,50 +277,50 @@
mCallback1.resetAllEventsWaiting();
CarInputManager carInputManager0 = createAnotherCarInputManager();
int r = carInputManager0.requestInputEventCapture(mCallback0,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{CarInputManager.INPUT_TYPE_ALL_INPUTS},
CarInputManager.CAPTURE_REQ_FLAGS_TAKE_ALL_EVENTS_FOR_DISPLAY);
assertThat(r).isEqualTo(CarInputManager.INPUT_CAPTURE_RESPONSE_SUCCEEDED);
injectKeyEvent(true, KeyEvent.KEYCODE_NAVIGATE_NEXT);
mCallback0.waitForKeyEvent();
- assertLastKeyEvent(CarInputManager.TARGET_DISPLAY_TYPE_MAIN, true,
+ assertLastKeyEvent(CarOccupantZoneManager.DISPLAY_TYPE_MAIN, true,
KeyEvent.KEYCODE_NAVIGATE_NEXT, mCallback0);
injectKeyEvent(true, KeyEvent.KEYCODE_DPAD_CENTER);
mCallback0.waitForKeyEvent();
- assertLastKeyEvent(CarInputManager.TARGET_DISPLAY_TYPE_MAIN, true,
+ assertLastKeyEvent(CarOccupantZoneManager.DISPLAY_TYPE_MAIN, true,
KeyEvent.KEYCODE_DPAD_CENTER, mCallback0);
int numClicks = 3;
- injectRotaryEvent(CarInputManager.TARGET_DISPLAY_TYPE_MAIN, numClicks);
+ injectRotaryEvent(VehicleDisplay.MAIN, numClicks);
mCallback0.waitForRotaryEvent();
- assertLastRotaryEvent(CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ assertLastRotaryEvent(CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION, numClicks, mCallback0);
r = mCarInputManager.requestInputEventCapture(mCallback1,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION},
CarInputManager.CAPTURE_REQ_FLAGS_ALLOW_DELAYED_GRANT);
assertThat(r).isEqualTo(CarInputManager.INPUT_CAPTURE_RESPONSE_DELAYED);
- injectRotaryEvent(CarInputManager.TARGET_DISPLAY_TYPE_MAIN, numClicks);
+ injectRotaryEvent(VehicleDisplay.MAIN, numClicks);
waitForDispatchToMain();
assertNumberOfOnRotaryEvents(0, mCallback1);
- carInputManager0.releaseInputEventCapture(CarInputManager.TARGET_DISPLAY_TYPE_MAIN);
+ carInputManager0.releaseInputEventCapture(CarOccupantZoneManager.DISPLAY_TYPE_MAIN);
// Now capture should be granted back
mCallback1.waitForStateChange();
- assertLastStateChange(CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ assertLastStateChange(CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{
CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION},
mCallback1);
assertNoStateChange(mCallback0);
- injectRotaryEvent(CarInputManager.TARGET_DISPLAY_TYPE_MAIN, numClicks);
+ injectRotaryEvent(VehicleDisplay.MAIN, numClicks);
mCallback1.waitForRotaryEvent();
- assertLastRotaryEvent(CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ assertLastRotaryEvent(CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION, numClicks, mCallback1);
}
@@ -298,13 +330,13 @@
CarInputManager carInputManager1 = createAnotherCarInputManager();
int r = carInputManager0.requestInputEventCapture(mCallback0,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{CarInputManager.INPUT_TYPE_ALL_INPUTS},
CarInputManager.CAPTURE_REQ_FLAGS_TAKE_ALL_EVENTS_FOR_DISPLAY);
assertThat(r).isEqualTo(CarInputManager.INPUT_CAPTURE_RESPONSE_SUCCEEDED);
r = mCarInputManager.requestInputEventCapture(mCallback1,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{
CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION,
CarInputManager.INPUT_TYPE_NAVIGATE_KEYS},
@@ -312,14 +344,14 @@
assertThat(r).isEqualTo(CarInputManager.INPUT_CAPTURE_RESPONSE_DELAYED);
r = carInputManager0.requestInputEventCapture(mCallback0,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{
CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION,
CarInputManager.INPUT_TYPE_DPAD_KEYS}, 0);
assertThat(r).isEqualTo(CarInputManager.INPUT_CAPTURE_RESPONSE_SUCCEEDED);
waitForDispatchToMain();
- assertLastStateChange(CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ assertLastStateChange(CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{CarInputManager.INPUT_TYPE_NAVIGATE_KEYS},
mCallback1);
assertNoStateChange(mCallback0);
@@ -328,38 +360,43 @@
@Test
public void testSwitchFromFullCaptureToPerTypeCapture() throws Exception {
int r = mCarInputManager.requestInputEventCapture(mCallback0,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{CarInputManager.INPUT_TYPE_ALL_INPUTS},
CarInputManager.CAPTURE_REQ_FLAGS_TAKE_ALL_EVENTS_FOR_DISPLAY);
assertThat(r).isEqualTo(CarInputManager.INPUT_CAPTURE_RESPONSE_SUCCEEDED);
r = mCarInputManager.requestInputEventCapture(mCallback1,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION}, 0);
assertThat(r).isEqualTo(CarInputManager.INPUT_CAPTURE_RESPONSE_SUCCEEDED);
+
+ r = mCarInputManager.requestInputEventCapture(mCallback2,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
+ new int[]{CarInputManager.INPUT_TYPE_CUSTOM_INPUT_EVENT}, 0);
+ assertThat(r).isEqualTo(CarInputManager.INPUT_CAPTURE_RESPONSE_SUCCEEDED);
}
@Test
public void testIndependentTwoCaptures() throws Exception {
int r = createAnotherCarInputManager().requestInputEventCapture(mCallback0,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION}, 0);
assertThat(r).isEqualTo(CarInputManager.INPUT_CAPTURE_RESPONSE_SUCCEEDED);
int numClicks = 3;
- injectRotaryEvent(CarInputManager.TARGET_DISPLAY_TYPE_MAIN, numClicks);
+ injectRotaryEvent(VehicleDisplay.MAIN, numClicks);
mCallback0.waitForRotaryEvent();
- assertLastRotaryEvent(CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ assertLastRotaryEvent(CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION, numClicks, mCallback0);
r = mCarInputManager.requestInputEventCapture(mCallback1,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{CarInputManager.INPUT_TYPE_NAVIGATE_KEYS}, 0);
assertThat(r).isEqualTo(CarInputManager.INPUT_CAPTURE_RESPONSE_SUCCEEDED);
injectKeyEvent(true, KeyEvent.KEYCODE_NAVIGATE_NEXT);
mCallback1.waitForKeyEvent();
- assertLastKeyEvent(CarInputManager.TARGET_DISPLAY_TYPE_MAIN, true,
+ assertLastKeyEvent(CarOccupantZoneManager.DISPLAY_TYPE_MAIN, true,
KeyEvent.KEYCODE_NAVIGATE_NEXT, mCallback1);
}
@@ -370,7 +407,7 @@
mCallback0.resetAllEventsWaiting();
int r = carInputManager0.requestInputEventCapture(mCallback0,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{
CarInputManager.INPUT_TYPE_DPAD_KEYS,
CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION}, 0);
@@ -378,61 +415,59 @@
injectKeyEvent(true, KeyEvent.KEYCODE_DPAD_CENTER);
mCallback0.waitForKeyEvent();
- assertLastKeyEvent(CarInputManager.TARGET_DISPLAY_TYPE_MAIN, true,
+ assertLastKeyEvent(CarOccupantZoneManager.DISPLAY_TYPE_MAIN, true,
KeyEvent.KEYCODE_DPAD_CENTER, mCallback0);
int numClicks = 3;
- injectRotaryEvent(CarInputManager.TARGET_DISPLAY_TYPE_MAIN, numClicks);
+ injectRotaryEvent(VehicleDisplay.MAIN, numClicks);
mCallback0.waitForRotaryEvent();
- assertLastRotaryEvent(CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ assertLastRotaryEvent(CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION, numClicks, mCallback0);
r = carInputManager1.requestInputEventCapture(mCallback1,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{
CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION,
CarInputManager.INPUT_TYPE_NAVIGATE_KEYS}, 0);
assertThat(r).isEqualTo(CarInputManager.INPUT_CAPTURE_RESPONSE_SUCCEEDED);
mCallback1.waitForStateChange();
- assertLastStateChange(CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ assertLastStateChange(CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{CarInputManager.INPUT_TYPE_DPAD_KEYS},
mCallback0);
assertNoStateChange(mCallback1);
injectKeyEvent(true, KeyEvent.KEYCODE_NAVIGATE_NEXT);
mCallback1.waitForKeyEvent();
- assertLastKeyEvent(CarInputManager.TARGET_DISPLAY_TYPE_MAIN, true,
+ assertLastKeyEvent(CarOccupantZoneManager.DISPLAY_TYPE_MAIN, true,
KeyEvent.KEYCODE_NAVIGATE_NEXT, mCallback1);
assertNumberOfOnKeyEvents(1, mCallback0);
injectKeyEvent(true, KeyEvent.KEYCODE_DPAD_CENTER);
mCallback0.waitForKeyEvent();
- assertLastKeyEvent(CarInputManager.TARGET_DISPLAY_TYPE_MAIN, true,
+ assertLastKeyEvent(CarOccupantZoneManager.DISPLAY_TYPE_MAIN, true,
KeyEvent.KEYCODE_DPAD_CENTER, mCallback0);
assertNumberOfOnKeyEvents(2, mCallback0);
- injectRotaryEvent(CarInputManager.TARGET_DISPLAY_TYPE_MAIN, numClicks);
+ injectRotaryEvent(VehicleDisplay.MAIN, numClicks);
mCallback1.waitForRotaryEvent();
- assertLastRotaryEvent(CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ assertLastRotaryEvent(CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION, numClicks, mCallback1);
assertNumberOfOnRotaryEvents(1, mCallback0);
-
-
mCallback0.resetAllEventsWaiting();
- carInputManager1.releaseInputEventCapture(CarInputManager.TARGET_DISPLAY_TYPE_MAIN);
+ carInputManager1.releaseInputEventCapture(CarOccupantZoneManager.DISPLAY_TYPE_MAIN);
mCallback0.waitForStateChange();
- assertLastStateChange(CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ assertLastStateChange(CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{CarInputManager.INPUT_TYPE_DPAD_KEYS,
CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION},
mCallback0);
assertNoStateChange(mCallback1);
- injectRotaryEvent(CarInputManager.TARGET_DISPLAY_TYPE_MAIN, numClicks);
+ injectRotaryEvent(VehicleDisplay.MAIN, numClicks);
mCallback0.waitForRotaryEvent();
- assertLastRotaryEvent(CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ assertLastRotaryEvent(CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION, numClicks, mCallback0);
}
@@ -444,7 +479,7 @@
Log.i(TAG, "requestInputEventCapture callback 0");
int r = carInputManager0.requestInputEventCapture(mCallback0,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{
CarInputManager.INPUT_TYPE_DPAD_KEYS,
CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION}, 0);
@@ -452,21 +487,21 @@
Log.i(TAG, "requestInputEventCapture callback 1");
r = carInputManager1.requestInputEventCapture(mCallback1,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{CarInputManager.INPUT_TYPE_ALL_INPUTS},
CarInputManager.CAPTURE_REQ_FLAGS_TAKE_ALL_EVENTS_FOR_DISPLAY);
assertThat(r).isEqualTo(CarInputManager.INPUT_CAPTURE_RESPONSE_SUCCEEDED);
waitForDispatchToMain();
- assertLastStateChange(CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ assertLastStateChange(CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[0], mCallback0);
assertNoStateChange(mCallback1);
Log.i(TAG, "releaseInputEventCapture callback 1");
- carInputManager1.releaseInputEventCapture(CarInputManager.TARGET_DISPLAY_TYPE_MAIN);
+ carInputManager1.releaseInputEventCapture(CarOccupantZoneManager.DISPLAY_TYPE_MAIN);
waitForDispatchToMain();
- assertLastStateChange(CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ assertLastStateChange(CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{CarInputManager.INPUT_TYPE_DPAD_KEYS,
CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION},
mCallback0);
@@ -476,14 +511,14 @@
@Test
public void testSingleClientUpdates() throws Exception {
int r = mCarInputManager.requestInputEventCapture(mCallback0,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{
CarInputManager.INPUT_TYPE_DPAD_KEYS,
CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION}, 0);
assertThat(r).isEqualTo(CarInputManager.INPUT_CAPTURE_RESPONSE_SUCCEEDED);
r = mCarInputManager.requestInputEventCapture(mCallback0,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{
CarInputManager.INPUT_TYPE_DPAD_KEYS,
CarInputManager.INPUT_TYPE_ROTARY_NAVIGATION}, 0);
@@ -493,7 +528,7 @@
assertNoStateChange(mCallback0);
r = mCarInputManager.requestInputEventCapture(mCallback0,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{
CarInputManager.INPUT_TYPE_DPAD_KEYS,
CarInputManager.INPUT_TYPE_NAVIGATE_KEYS}, 0);
@@ -503,7 +538,7 @@
assertNoStateChange(mCallback0);
r = mCarInputManager.requestInputEventCapture(mCallback0,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{CarInputManager.INPUT_TYPE_ALL_INPUTS},
CarInputManager.CAPTURE_REQ_FLAGS_TAKE_ALL_EVENTS_FOR_DISPLAY);
assertThat(r).isEqualTo(CarInputManager.INPUT_CAPTURE_RESPONSE_SUCCEEDED);
@@ -512,7 +547,7 @@
assertNoStateChange(mCallback0);
r = mCarInputManager.requestInputEventCapture(mCallback0,
- CarInputManager.TARGET_DISPLAY_TYPE_MAIN,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
new int[]{CarInputManager.INPUT_TYPE_ALL_INPUTS},
CarInputManager.CAPTURE_REQ_FLAGS_TAKE_ALL_EVENTS_FOR_DISPLAY);
assertThat(r).isEqualTo(CarInputManager.INPUT_CAPTURE_RESPONSE_SUCCEEDED);
@@ -531,12 +566,12 @@
CarServiceUtils.runOnMainSync(() -> { });
}
- private void assertLastKeyEvent(int displayId, boolean down, int keyCode,
+ private void assertLastKeyEvent(int displayTarget, boolean down, int keyCode,
CaptureCallback callback) {
LinkedList<Pair<Integer, List<KeyEvent>>> events = callback.getkeyEvents();
assertThat(events).isNotEmpty();
Pair<Integer, List<KeyEvent>> lastEvent = events.getFirst();
- assertThat(lastEvent.first).isEqualTo(displayId);
+ assertThat(lastEvent.first).isEqualTo(displayTarget);
assertThat(lastEvent.second).hasSize(1);
KeyEvent keyEvent = lastEvent.second.get(0);
assertThat(keyEvent.getAction()).isEqualTo(
@@ -549,12 +584,12 @@
assertThat(events).hasSize(expectedNumber);
}
- private void assertLastRotaryEvent(int displayId, int rotaryType, int numberOfClicks,
+ private void assertLastRotaryEvent(int displayTarget, int rotaryType, int numberOfClicks,
CaptureCallback callback) {
LinkedList<Pair<Integer, List<RotaryEvent>>> rotaryEvents = callback.getRotaryEvents();
assertThat(rotaryEvents).isNotEmpty();
Pair<Integer, List<RotaryEvent>> lastEvent = rotaryEvents.getFirst();
- assertThat(lastEvent.first).isEqualTo(displayId);
+ assertThat(lastEvent.first).isEqualTo(displayTarget);
assertThat(lastEvent.second).hasSize(1);
RotaryEvent rotaryEvent = lastEvent.second.get(0);
assertThat(rotaryEvent.getInputType()).isEqualTo(rotaryType);
@@ -567,36 +602,36 @@
assertThat(rotaryEvents).hasSize(expectedNumber);
}
- private void assertLastStateChange(int expectedTargetDisplayId, int[] expectedInputTypes,
+ private void assertLastStateChange(int expectedTargetDisplayTarget, int[] expectedInputTypes,
CaptureCallback callback) {
LinkedList<Pair<Integer, int[]>> changes = callback.getStateChanges();
assertThat(changes).isNotEmpty();
Pair<Integer, int[]> lastChange = changes.getFirst();
- assertStateChange(expectedTargetDisplayId, expectedInputTypes, lastChange);
+ assertStateChange(expectedTargetDisplayTarget, expectedInputTypes, lastChange);
}
private void assertNoStateChange(CaptureCallback callback) {
assertThat(callback.getStateChanges()).isEmpty();
}
- private void assertStateChange(int expectedTargetDisplayId, int[] expectedInputTypes,
+ private void assertStateChange(int expectedTargetDisplayTarget, int[] expectedInputTypes,
Pair<Integer, int[]> actual) {
Arrays.sort(expectedInputTypes);
- assertThat(actual.first).isEqualTo(expectedTargetDisplayId);
+ assertThat(actual.first).isEqualTo(expectedTargetDisplayTarget);
assertThat(actual.second).isEqualTo(expectedInputTypes);
}
private void injectKeyEvent(boolean down, int keyCode) {
getMockedVehicleHal().injectEvent(
VehiclePropValueBuilder.newBuilder(VehicleProperty.HW_KEY_INPUT)
- .addIntValue(down ? 0 : 1, keyCode, 0)
- .build());
+ .addIntValue(down ? 0 : 1, keyCode, 0)
+ .build());
}
- private void injectRotaryEvent(int displayId, int numClicks) {
+ private void injectRotaryEvent(int displayTarget, int numClicks) {
VehiclePropValueBuilder builder = VehiclePropValueBuilder.newBuilder(
VehicleProperty.HW_ROTARY_INPUT)
- .addIntValue(0 /* navigation oly for now */, numClicks, displayId);
+ .addIntValue(0 /* navigation oly for now */, numClicks, displayTarget);
for (int i = 0; i < numClicks - 1; i++) {
builder.addIntValue(0);
}
diff --git a/tests/carservice_test/src/com/android/car/CarPowerManagementTest.java b/tests/carservice_test/src/com/android/car/power/CarPowerManagementTest.java
similarity index 99%
rename from tests/carservice_test/src/com/android/car/CarPowerManagementTest.java
rename to tests/carservice_test/src/com/android/car/power/CarPowerManagementTest.java
index 0abf3e5..228695a 100644
--- a/tests/carservice_test/src/com/android/car/CarPowerManagementTest.java
+++ b/tests/carservice_test/src/com/android/car/power/CarPowerManagementTest.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.car;
+package com.android.car.power;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
@@ -33,6 +33,7 @@
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.MediumTest;
+import com.android.car.MockedCarTestBase;
import com.android.car.systeminterface.DisplayInterface;
import com.android.car.systeminterface.SystemInterface;
import com.android.car.vehiclehal.VehiclePropValueBuilder;
@@ -336,8 +337,7 @@
mDisplayStateWait.release();
}
- boolean waitForDisplayState(boolean expectedState)
- throws Exception {
+ boolean waitForDisplayState(boolean expectedState) throws Exception {
if (expectedState == mDisplayOn) {
return true;
}
diff --git a/tests/carservice_test/src/com/android/car/watchdog/CarWatchdogServiceTest.java b/tests/carservice_test/src/com/android/car/watchdog/CarWatchdogServiceTest.java
index 28d70e6..d644c7e 100644
--- a/tests/carservice_test/src/com/android/car/watchdog/CarWatchdogServiceTest.java
+++ b/tests/carservice_test/src/com/android/car/watchdog/CarWatchdogServiceTest.java
@@ -77,10 +77,10 @@
private final Handler mMainHandler = new Handler(Looper.getMainLooper());
private final Executor mExecutor =
InstrumentationRegistry.getInstrumentation().getTargetContext().getMainExecutor();
- private final ArrayList<UserInfo> mUserInfos = new ArrayList<>(Arrays.asList(
+ private final UserInfo[] mUserInfos = new UserInfo[] {
new UserInfoBuilder(10).setName("user 1").build(),
new UserInfoBuilder(11).setName("user 2").build()
- ));
+ };
@Mock private Context mMockContext;
@Mock private Car mCar;
diff --git a/tests/carservice_unit_test/Android.mk b/tests/carservice_unit_test/Android.mk
index 1033f41..e6e1473 100644
--- a/tests/carservice_unit_test/Android.mk
+++ b/tests/carservice_unit_test/Android.mk
@@ -19,8 +19,8 @@
include $(CLEAR_VARS)
LOCAL_SRC_FILES := \
- $(call all-java-files-under, src) \
- ../../../../../frameworks/opt/car/services/src/com/android/internal/car/ICarServiceHelper.aidl
+ $(call all-java-files-under, src)
+
LOCAL_RESOURCE_DIR += $(LOCAL_PATH)/res \
packages/services/Car/service/res
@@ -47,8 +47,7 @@
android.car.watchdoglib \
android.test.runner \
android.test.base \
- android.test.mock \
- EncryptionRunner
+ android.test.mock
LOCAL_STATIC_JAVA_LIBRARIES := \
android.car.testapi \
@@ -56,8 +55,9 @@
androidx.test.core \
androidx.test.ext.junit \
androidx.test.rules \
- car-frameworks-service \
car-service-test-static-lib \
+ com.android.car.internal.common \
+ com.android.car.internal.system \
com.android.car.test.utils \
frameworks-base-testutils \
mockito-target-extended \
diff --git a/tests/carservice_unit_test/src/android/car/CarTest.java b/tests/carservice_unit_test/src/android/car/CarTest.java
index bd44b46..88d48c8 100644
--- a/tests/carservice_unit_test/src/android/car/CarTest.java
+++ b/tests/carservice_unit_test/src/android/car/CarTest.java
@@ -33,6 +33,7 @@
import android.content.Context;
import android.os.IBinder;
import android.os.Looper;
+import android.os.RemoteException;
import android.os.ServiceManager;
import android.util.Pair;
@@ -69,25 +70,8 @@
// It is tricky to mock this. So create placeholder version instead.
private ICar.Stub mService = new ICar.Stub() {
@Override
- public void setCarServiceHelper(android.os.IBinder helper) {
- }
-
- @Override
- public void onUserLifecycleEvent(int eventType, long timestampMs, int fromUserId,
- int toUserId) {
- }
-
- @Override
- public void onFirstUserUnlocked(int userId, long timestampMs, long duration,
- int halResponseTime) {
- }
-
- @Override
- public void getInitialUserInfo(int requestType, int timeoutMs, IBinder binder) {
- }
-
- @Override
- public void setInitialUser(int userId) {
+ public void setSystemServerConnections(IBinder helper, IBinder receiver)
+ throws RemoteException {
}
@Override
diff --git a/tests/carservice_unit_test/src/android/car/encryptionrunner/EncryptionRunnerTest.java b/tests/carservice_unit_test/src/android/car/encryptionrunner/EncryptionRunnerTest.java
deleted file mode 100644
index 38802e4..0000000
--- a/tests/carservice_unit_test/src/android/car/encryptionrunner/EncryptionRunnerTest.java
+++ /dev/null
@@ -1,370 +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 android.car.encryptionrunner;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import android.util.Log;
-
-import junit.framework.Assert;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-@RunWith(JUnit4.class)
-public class EncryptionRunnerTest {
-
- private Key mClientKey;
- private Key mServerKey;
- private byte[] mData = "testData".getBytes();
-
- private interface RunnerFactory {
- EncryptionRunner newRunner();
- }
-
- private interface HandshakeVerifier {
- void verifyHandshake(EncryptionRunner clientRunner, EncryptionRunner serverRunner)
- throws Exception;
- }
-
- @Test
- public void happyFlow_dummyRunner() throws Exception {
- verifyRunners(EncryptionRunnerFactory::newDummyRunner,
- EncryptionRunnerTest::verifyHandshake);
- }
-
- @Test
- public void happyFlow_ukey2Runner() throws Exception {
- verifyRunners(EncryptionRunnerTest::newRunner, EncryptionRunnerTest::verifyHandshake);
- }
-
- @Test
- public void happyFlow_oobUkey2Runner() throws Exception {
- verifyRunners(EncryptionRunnerTest::newOobRunner, EncryptionRunnerTest::verifyOobHandshake);
- }
-
- @Test
- public void happyFlow_dummyRunner_reconnect() throws Exception {
- setUpFirstConnection(EncryptionRunnerFactory::newDummyRunner,
- EncryptionRunnerTest::verifyHandshake);
- verifyRunnersReconnect(EncryptionRunnerFactory::newDummyRunner);
- }
-
- @Test
- public void happyFlow_uKey2Runner_reconnect() throws Exception {
- setUpFirstConnection(EncryptionRunnerTest::newRunner,
- EncryptionRunnerTest::verifyHandshake);
- verifyRunnersReconnect(EncryptionRunnerTest::newRunner);
- }
-
- @Test
- public void happyFlow_oobUey2Runner_reconnect() throws Exception {
- setUpFirstConnection(EncryptionRunnerTest::newOobRunner,
- EncryptionRunnerTest::verifyOobHandshake);
- verifyRunnersReconnect(EncryptionRunnerTest::newOobRunner);
- }
-
- @Test
- public void uKey2Runner_reconnect_encrypt_and_decrypt() throws Exception {
- setUpFirstConnection(EncryptionRunnerTest::newRunner,
- EncryptionRunnerTest::verifyHandshake);
- setUpReconnection(EncryptionRunnerTest::newRunner, EncryptionRunnerTest::verifyHandshake);
- assertThat(mClientKey.decryptData(mServerKey.encryptData(mData))).isEqualTo(mData);
- }
-
- @Test
- public void dummyRunner_reconnect_encrypt_and_decrypt() throws Exception {
- setUpFirstConnection(EncryptionRunnerFactory::newDummyRunner,
- EncryptionRunnerTest::verifyHandshake);
- setUpReconnection(EncryptionRunnerFactory::newDummyRunner,
- EncryptionRunnerTest::verifyHandshake);
- assertThat(mClientKey.decryptData(mServerKey.encryptData(mData))).isEqualTo(mData);
- }
-
- @Test
- public void oobUkey2Runner_reconnect_encrypt_and_decrypt() throws Exception {
- setUpFirstConnection(EncryptionRunnerTest::newOobRunner,
- EncryptionRunnerTest::verifyOobHandshake);
- setUpReconnection(EncryptionRunnerTest::newOobRunner,
- EncryptionRunnerTest::verifyOobHandshake);
- assertThat(mClientKey.decryptData(mServerKey.encryptData(mData))).isEqualTo(mData);
- }
-
- private static EncryptionRunner newRunner() {
- return EncryptionRunnerFactory.newRunner(
- EncryptionRunnerFactory.EncryptionRunnerType.UKEY2);
- }
-
- private static EncryptionRunner newOobRunner() {
- return EncryptionRunnerFactory.newRunner(
- EncryptionRunnerFactory.EncryptionRunnerType.OOB_UKEY2);
- }
-
- private void setUpFirstConnection(RunnerFactory runnerFactory,
- HandshakeVerifier handshakeVerifier) throws Exception {
- EncryptionRunner clientRunner = runnerFactory.newRunner();
- EncryptionRunner serverRunner = runnerFactory.newRunner();
- handshakeVerifier.verifyHandshake(clientRunner, serverRunner);
- HandshakeMessage finalServerMessage = serverRunner.verifyPin();
- HandshakeMessage finalClientMessage = clientRunner.verifyPin();
- mServerKey = finalServerMessage.getKey();
- mClientKey = finalClientMessage.getKey();
- }
-
- private void setUpReconnection(RunnerFactory runnerFactory, HandshakeVerifier handshakeVerifier)
- throws Exception {
- setUpFirstConnection(runnerFactory, handshakeVerifier);
- EncryptionRunner clientRunner = runnerFactory.newRunner();
- EncryptionRunner serverRunner = runnerFactory.newRunner();
- verifyHandshakeReconnect(clientRunner, serverRunner);
- HandshakeMessage nextClientMessage =
- clientRunner.initReconnectAuthentication(mClientKey.asBytes());
- HandshakeMessage finalServerMessage = serverRunner.authenticateReconnection(
- nextClientMessage.getNextMessage(), mServerKey.asBytes());
- HandshakeMessage finalClientMessage = clientRunner.authenticateReconnection(
- finalServerMessage.getNextMessage(), mServerKey.asBytes());
- mServerKey = finalServerMessage.getKey();
- mClientKey = finalClientMessage.getKey();
- }
-
- /**
- * Runs through a happy flow of encryption runners and verifies that they behave as expected.
- * Some * of the test is implementation specific because the interface doesn't specify how many
- * round * trips may be needed but this test makes assumptions( i.e. white box testing).
- */
- private void verifyRunners(RunnerFactory runnerFactory, HandshakeVerifier handshakeVerifier)
- throws Exception {
- EncryptionRunner clientRunner = runnerFactory.newRunner();
- EncryptionRunner serverRunner = runnerFactory.newRunner();
-
- handshakeVerifier.verifyHandshake(clientRunner, serverRunner);
-
- HandshakeMessage finalServerMessage = serverRunner.verifyPin();
- assertThat(finalServerMessage.getHandshakeState())
- .isEqualTo(HandshakeMessage.HandshakeState.FINISHED);
- assertThat(finalServerMessage.getKey()).isNotNull();
- assertThat(finalServerMessage.getNextMessage()).isNull();
-
- HandshakeMessage finalClientMessage = clientRunner.verifyPin();
- assertThat(finalClientMessage.getHandshakeState())
- .isEqualTo(HandshakeMessage.HandshakeState.FINISHED);
- assertThat(finalClientMessage.getKey()).isNotNull();
- assertThat(finalClientMessage.getNextMessage()).isNull();
-
- assertThat(finalServerMessage.getKey()
- .decryptData(finalClientMessage.getKey().encryptData(mData)))
- .isEqualTo(mData);
- assertThat(finalClientMessage.getKey()
- .decryptData(finalServerMessage.getKey().encryptData(mData)))
- .isEqualTo(mData);
- }
-
- private void verifyRunnersReconnect(RunnerFactory runnerFactory) throws Exception {
- EncryptionRunner clientRunner = runnerFactory.newRunner();
- EncryptionRunner serverRunner = runnerFactory.newRunner();
- verifyHandshakeReconnect(clientRunner, serverRunner);
-
- HandshakeMessage nextClientMessage =
- clientRunner.initReconnectAuthentication(mClientKey.asBytes());
- assertThat(nextClientMessage.getHandshakeState())
- .isEqualTo(HandshakeMessage.HandshakeState.RESUMING_SESSION);
- assertThat(nextClientMessage.getKey()).isNull();
- assertThat(nextClientMessage.getNextMessage()).isNotNull();
-
- HandshakeMessage finalServerMessage = serverRunner.authenticateReconnection(
- nextClientMessage.getNextMessage(), mServerKey.asBytes());
- assertThat(finalServerMessage.getHandshakeState())
- .isEqualTo(HandshakeMessage.HandshakeState.FINISHED);
- assertThat(finalServerMessage.getKey()).isNotNull();
- assertThat(finalServerMessage.getNextMessage()).isNotNull();
-
- HandshakeMessage finalClientMessage = clientRunner.authenticateReconnection(
- finalServerMessage.getNextMessage(), mServerKey.asBytes());
- assertThat(finalClientMessage.getHandshakeState())
- .isEqualTo(HandshakeMessage.HandshakeState.FINISHED);
- assertThat(finalClientMessage.getKey()).isNotNull();
- assertThat(finalClientMessage.getNextMessage()).isNull();
- }
-
- private static void verifyHandshake(EncryptionRunner clientRunner,
- EncryptionRunner serverRunner)
- throws Exception {
- HandshakeMessage initialClientMessage = clientRunner.initHandshake();
-
- assertThat(initialClientMessage.getHandshakeState())
- .isEqualTo(HandshakeMessage.HandshakeState.IN_PROGRESS);
- assertThat(initialClientMessage.getKey()).isNull();
- assertThat(initialClientMessage.getNextMessage()).isNotNull();
-
- // This and the following similar log statements are useful when running this test to
- // find the payload sizes.
- Log.i(EncryptionRunner.TAG,
- "initial client size:" + initialClientMessage.getNextMessage().length);
-
- HandshakeMessage initialServerMessage =
- serverRunner.respondToInitRequest(initialClientMessage.getNextMessage());
-
- assertThat(initialServerMessage.getHandshakeState())
- .isEqualTo(HandshakeMessage.HandshakeState.IN_PROGRESS);
- assertThat(initialServerMessage.getKey()).isNull();
- assertThat(initialServerMessage.getNextMessage()).isNotNull();
-
- Log.i(EncryptionRunner.TAG,
- "initial server message size:" + initialServerMessage.getNextMessage().length);
-
- HandshakeMessage clientMessage =
- clientRunner.continueHandshake(initialServerMessage.getNextMessage());
-
- assertThat(clientMessage.getHandshakeState())
- .isEqualTo(HandshakeMessage.HandshakeState.VERIFICATION_NEEDED);
- assertThat(clientMessage.getKey()).isNull();
- assertThat(clientMessage.getVerificationCode()).isNotEmpty();
- assertThat(clientMessage.getNextMessage()).isNotNull();
-
- Log.i(EncryptionRunner.TAG,
- "second client message size:" + clientMessage.getNextMessage().length);
-
- HandshakeMessage serverMessage =
- serverRunner.continueHandshake(clientMessage.getNextMessage());
- assertThat(serverMessage.getHandshakeState())
- .isEqualTo(HandshakeMessage.HandshakeState.VERIFICATION_NEEDED);
- assertThat(serverMessage.getKey()).isNull();
- assertThat(serverMessage.getNextMessage()).isNull();
-
- Log.i(EncryptionRunner.TAG,
- "last server message size:" + clientMessage.getNextMessage().length);
- }
-
- private static void verifyOobHandshake(
- EncryptionRunner clientRunner, EncryptionRunner serverRunner) throws Exception {
- HandshakeMessage initialClientMessage = clientRunner.initHandshake();
-
- assertThat(initialClientMessage.getHandshakeState())
- .isEqualTo(HandshakeMessage.HandshakeState.IN_PROGRESS);
- assertThat(initialClientMessage.getKey()).isNull();
- assertThat(initialClientMessage.getNextMessage()).isNotNull();
-
- HandshakeMessage initialServerMessage =
- serverRunner.respondToInitRequest(initialClientMessage.getNextMessage());
-
- assertThat(initialServerMessage.getHandshakeState())
- .isEqualTo(HandshakeMessage.HandshakeState.IN_PROGRESS);
- assertThat(initialServerMessage.getKey()).isNull();
- assertThat(initialServerMessage.getNextMessage()).isNotNull();
-
- HandshakeMessage clientMessage =
- clientRunner.continueHandshake(initialServerMessage.getNextMessage());
-
- assertThat(clientMessage.getHandshakeState())
- .isEqualTo(HandshakeMessage.HandshakeState.OOB_VERIFICATION_NEEDED);
- assertThat(clientMessage.getKey()).isNull();
- assertThat(clientMessage.getOobVerificationCode()).isNotEmpty();
- assertThat(clientMessage.getNextMessage()).isNotNull();
-
- HandshakeMessage serverMessage = serverRunner.continueHandshake(
- clientMessage.getNextMessage());
- assertThat(serverMessage.getHandshakeState())
- .isEqualTo(HandshakeMessage.HandshakeState.OOB_VERIFICATION_NEEDED);
- assertThat(serverMessage.getKey()).isNull();
- assertThat(serverMessage.getNextMessage()).isNull();
- }
-
- private void verifyHandshakeReconnect(
- EncryptionRunner clientRunner, EncryptionRunner serverRunner)
- throws HandshakeException {
- clientRunner.setIsReconnect(true);
- serverRunner.setIsReconnect(true);
-
- HandshakeMessage initialClientMessage = clientRunner.initHandshake();
- assertThat(initialClientMessage.getHandshakeState())
- .isEqualTo(HandshakeMessage.HandshakeState.IN_PROGRESS);
- assertThat(initialClientMessage.getKey()).isNull();
- assertThat(initialClientMessage.getNextMessage()).isNotNull();
-
- // This and the following similar log statements are useful when running this test to
- // find the payload sizes.
- Log.i(EncryptionRunner.TAG,
- "initial client size:" + initialClientMessage.getNextMessage().length);
-
- HandshakeMessage initialServerMessage =
- serverRunner.respondToInitRequest(initialClientMessage.getNextMessage());
-
- assertThat(initialServerMessage.getHandshakeState())
- .isEqualTo(HandshakeMessage.HandshakeState.IN_PROGRESS);
- assertThat(initialServerMessage.getKey()).isNull();
- assertThat(initialServerMessage.getNextMessage()).isNotNull();
-
- Log.i(EncryptionRunner.TAG,
- "initial server message size:" + initialServerMessage.getNextMessage().length);
-
- HandshakeMessage clientMessage =
- clientRunner.continueHandshake(initialServerMessage.getNextMessage());
-
- assertThat(clientMessage.getHandshakeState())
- .isEqualTo(HandshakeMessage.HandshakeState.RESUMING_SESSION);
- assertThat(clientMessage.getKey()).isNull();
- assertThat(clientMessage.getNextMessage()).isNotNull();
-
- HandshakeMessage serverMessage =
- serverRunner.continueHandshake(clientMessage.getNextMessage());
- assertThat(serverMessage.getHandshakeState())
- .isEqualTo(HandshakeMessage.HandshakeState.RESUMING_SESSION);
- assertThat(serverMessage.getKey()).isNull();
- }
-
- @Test
- public void invalidPin_ukey2() throws Exception {
- invalidPinTest(EncryptionRunnerTest::newRunner, EncryptionRunnerTest::verifyHandshake);
- }
-
- @Test
- public void invalidPin_dummy() throws Exception {
- invalidPinTest(EncryptionRunnerFactory::newDummyRunner,
- EncryptionRunnerTest::verifyHandshake);
- }
-
- @Test
- public void invalidPin_oobUkey2() throws Exception {
- invalidPinTest(EncryptionRunnerTest::newOobRunner,
- EncryptionRunnerTest::verifyOobHandshake);
- }
-
- private void invalidPinTest(RunnerFactory runnerFactory, HandshakeVerifier handshakeVerifier)
- throws Exception {
- EncryptionRunner clientRunner = runnerFactory.newRunner();
- EncryptionRunner serverRunner = runnerFactory.newRunner();
-
- handshakeVerifier.verifyHandshake(clientRunner, serverRunner);
- clientRunner.invalidPin();
- serverRunner.invalidPin();
-
- try {
- clientRunner.verifyPin();
- Assert.fail();
- } catch (Exception ignored) {
- // pass
- }
-
- try {
- serverRunner.verifyPin();
- Assert.fail();
- } catch (Exception ignored) {
- // pass
- }
- }
-}
diff --git a/tests/carservice_unit_test/src/android/car/encryptionrunner/Ukey2EncryptionRunnerTest.java b/tests/carservice_unit_test/src/android/car/encryptionrunner/Ukey2EncryptionRunnerTest.java
deleted file mode 100644
index 71dbb4c..0000000
--- a/tests/carservice_unit_test/src/android/car/encryptionrunner/Ukey2EncryptionRunnerTest.java
+++ /dev/null
@@ -1,47 +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 android.car.encryptionrunner;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-@RunWith(JUnit4.class)
-public class Ukey2EncryptionRunnerTest {
-
- private Ukey2EncryptionRunner mRunner;
-
- @Before
- public void setup() {
- mRunner = new Ukey2EncryptionRunner();
- }
-
- @Test
- public void generateReadablePairingCode_modsBytesAcrossRange() throws Exception {
- // 194 is an example of a value that would fail if using signed instead of unsigned ints
- // 194 -> 11000010
- // 11000010 -> 194 (unsigned 8-bit int)
- // 11000010 -> -62 (signed 8-bit int)
- byte[] bytes = new byte[]{0, 7, (byte) 161, (byte) 194, (byte) 196, (byte) 255};
- String pairingCode = mRunner.generateReadablePairingCode(bytes);
-
- assertThat(pairingCode).isEqualTo("071465");
- }
-}
diff --git a/tests/carservice_unit_test/src/android/car/userlib/CarUserManagerHelperTest.java b/tests/carservice_unit_test/src/android/car/userlib/CarUserManagerHelperTest.java
index 87d260c..3248b1a 100644
--- a/tests/carservice_unit_test/src/android/car/userlib/CarUserManagerHelperTest.java
+++ b/tests/carservice_unit_test/src/android/car/userlib/CarUserManagerHelperTest.java
@@ -16,24 +16,15 @@
package android.car.userlib;
-import static android.car.test.mocks.AndroidMockitoHelper.mockUmGetSystemUser;
-import static android.car.test.mocks.AndroidMockitoHelper.mockUmGetUserInfo;
-import static android.car.test.mocks.AndroidMockitoHelper.mockUmGetUsers;
import static android.car.test.util.UserTestingHelper.newUser;
-import static android.os.UserHandle.USER_SYSTEM;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
-import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-import android.annotation.NonNull;
-import android.annotation.UserIdInt;
import android.app.ActivityManager;
-import android.car.settings.CarSettings;
import android.car.test.mocks.AbstractExtendedMockitoTestCase;
import android.content.ContentResolver;
import android.content.Context;
@@ -50,8 +41,6 @@
import org.junit.Test;
import org.mockito.Mock;
-import java.util.Optional;
-
/**
* This class contains unit tests for the {@link CarUserManagerHelper}.
* It tests that {@link CarUserManagerHelper} does the right thing for user management flows.
@@ -98,48 +87,6 @@
}
@Test
- public void testCreateNewNonAdminUser() {
- // Verify createUser on UserManager gets called.
- mCarUserManagerHelper.createNewNonAdminUser(TEST_USER_NAME);
- verify(mUserManager).createUser(TEST_USER_NAME, NO_FLAGS);
-
- doReturn(null).when(mUserManager).createUser(TEST_USER_NAME, NO_FLAGS);
- assertThat(mCarUserManagerHelper.createNewNonAdminUser(TEST_USER_NAME)).isNull();
-
- UserInfo newUser = new UserInfo();
- newUser.name = TEST_USER_NAME;
- doReturn(newUser).when(mUserManager).createUser(TEST_USER_NAME, NO_FLAGS);
- assertThat(mCarUserManagerHelper.createNewNonAdminUser(TEST_USER_NAME)).isEqualTo(newUser);
- }
-
- @Test
- public void testSwitchToId() {
- int userIdToSwitchTo = mForegroundUserId + 2;
- doReturn(true).when(mActivityManager).switchUser(userIdToSwitchTo);
-
- assertThat(mCarUserManagerHelper.switchToUserId(userIdToSwitchTo)).isTrue();
- verify(mActivityManager).switchUser(userIdToSwitchTo);
- }
-
- @Test
- public void testSwitchToForegroundIdExitsEarly() {
- doReturn(true).when(mActivityManager).switchUser(mForegroundUserId);
-
- assertThat(mCarUserManagerHelper.switchToUserId(mForegroundUserId)).isFalse();
- verify(mActivityManager, never()).switchUser(mForegroundUserId);
- }
-
- @Test
- public void testCannotSwitchIfSwitchingNotAllowed() {
- int userIdToSwitchTo = mForegroundUserId + 2;
- doReturn(true).when(mActivityManager).switchUser(userIdToSwitchTo);
- doReturn(UserManager.SWITCHABILITY_STATUS_USER_SWITCH_DISALLOWED)
- .when(mUserManager).getUserSwitchability();
- assertThat(mCarUserManagerHelper.switchToUserId(userIdToSwitchTo)).isFalse();
- verify(mActivityManager, never()).switchUser(userIdToSwitchTo);
- }
-
- @Test
public void testGrantAdminPermissions() {
int userId = 30;
UserInfo testInfo = newUser(userId);
@@ -156,20 +103,6 @@
}
@Test
- public void testDefaultNonAdminRestrictions() {
- String testUserName = "Test User";
- int userId = 20;
- UserInfo newNonAdmin = newUser(userId);
-
- doReturn(newNonAdmin).when(mUserManager).createUser(testUserName, NO_FLAGS);
-
- mCarUserManagerHelper.createNewNonAdminUser(testUserName);
-
- verify(mUserManager).setUserRestriction(
- UserManager.DISALLOW_FACTORY_RESET, /* enable= */ true, UserHandle.of(userId));
- }
-
- @Test
public void testGrantingAdminPermissionsRemovesNonAdminRestrictions() {
int testUserId = 30;
boolean restrictionEnabled = false;
@@ -183,209 +116,4 @@
verify(mUserManager).setUserRestriction(
UserManager.DISALLOW_FACTORY_RESET, restrictionEnabled, UserHandle.of(testUserId));
}
-
- @Test
- public void testGetInitialUser_WithValidLastActiveUser_ReturnsLastActiveUser() {
- setLastActiveUser(12);
- mockGetUsers(USER_SYSTEM, 10, 11, 12);
-
- assertThat(mCarUserManagerHelper.getInitialUser(/* usesOverrideUserIdProperty= */ true))
- .isEqualTo(12);
- }
-
- @Test
- public void testGetInitialUser_WithNonExistLastActiveUser_ReturnsLastPersistentUser() {
- setLastActiveUser(120);
- setLastPersistentActiveUser(110);
- mockGetUsers(USER_SYSTEM, 100, 110);
-
- assertThat(mCarUserManagerHelper.getInitialUser(/* usesOverrideUserIdProperty= */ true))
- .isEqualTo(110);
- // should have reset last active user
- assertThat(getSettingsInt(CarSettings.Global.LAST_ACTIVE_USER_ID))
- .isEqualTo(UserHandle.USER_NULL);
- }
-
- @Test
- public void testGetInitialUser_WithNonExistLastActiveAndPersistentUsers_ReturnsSmallestUser() {
- setLastActiveUser(120);
- setLastPersistentActiveUser(120);
- mockGetUsers(USER_SYSTEM, 100, 110);
-
- assertThat(mCarUserManagerHelper.getInitialUser(/* usesOverrideUserIdProperty= */ true))
- .isEqualTo(100);
- // should have reset both settions
- assertThat(getSettingsInt(CarSettings.Global.LAST_ACTIVE_USER_ID))
- .isEqualTo(UserHandle.USER_NULL);
- assertThat(getSettingsInt(CarSettings.Global.LAST_ACTIVE_PERSISTENT_USER_ID))
- .isEqualTo(UserHandle.USER_NULL);
- }
-
- @Test
- public void testGetInitialUser_WithOverrideId_ReturnsOverrideId() {
- setDefaultBootUserOverride(11);
- setLastActiveUser(12);
- mockGetUsers(USER_SYSTEM, 10, 11, 12);
-
- assertThat(mCarUserManagerHelper.getInitialUser(/* usesOverrideUserIdProperty= */ true))
- .isEqualTo(11);
- }
-
- @Test
- public void testGetInitialUser_WithInvalidOverrideId_ReturnsLastActiveUserId() {
- setDefaultBootUserOverride(15);
- setLastActiveUser(12);
- mockGetUsers(USER_SYSTEM, 10, 11, 12);
-
- assertThat(mCarUserManagerHelper.getInitialUser(/* usesOverrideUserIdProperty= */ true))
- .isEqualTo(12);
- }
-
- @Test
- public void testGetInitialUser_WithInvalidOverrideAndLastActiveUserIds_ReturnsSmallestUserId() {
- int minimumUserId = 10;
- int invalidLastActiveUserId = 14;
- int invalidOverrideUserId = 15;
-
- setDefaultBootUserOverride(invalidOverrideUserId);
- setLastActiveUser(invalidLastActiveUserId);
- mockGetUsers(USER_SYSTEM, minimumUserId, minimumUserId + 1, minimumUserId + 2);
-
- assertThat(mCarUserManagerHelper.getInitialUser(/* usesOverrideUserIdProperty= */ true))
- .isEqualTo(minimumUserId);
- }
-
- @Test
- public void testGetInitialUser_WhenOverrideIdIsIgnored() {
- setDefaultBootUserOverride(11);
- setLastActiveUser(12);
- mockGetUsers(USER_SYSTEM, 10, 11, 12);
-
- assertThat(mCarUserManagerHelper.getInitialUser(/* usesOverrideUserIdProperty= */ false))
- .isEqualTo(12);
- }
-
- @Test
- public void testGetInitialUser_WithEmptyReturnNull() {
- assertThat(mCarUserManagerHelper.getInitialUser(/* usesOverrideUserIdProperty= */ true))
- .isEqualTo(UserHandle.USER_NULL);
- }
-
- @Test
- public void testHasInitialUser_onlyHeadlessSystemUser() {
- mockIsHeadlessSystemUserMode(true);
- mockGetUsers(USER_SYSTEM);
-
- assertThat(mCarUserManagerHelper.hasInitialUser()).isFalse();
- }
-
- @Test
- public void testHasInitialUser_onlyNonHeadlessSystemUser() {
- mockIsHeadlessSystemUserMode(false);
- mockGetUsers(USER_SYSTEM);
-
- assertThat(mCarUserManagerHelper.hasInitialUser()).isTrue();
- }
-
- @Test
- public void testHasInitialUser_hasNormalUser() {
- mockIsHeadlessSystemUserMode(true);
- mockGetUsers(USER_SYSTEM, 10);
-
- assertThat(mCarUserManagerHelper.hasInitialUser()).isTrue();
- }
-
- @Test
- public void testHasInitialUser_hasOnlyWorkProfile() {
- mockIsHeadlessSystemUserMode(true);
-
- UserInfo systemUser = newUser(UserHandle.USER_SYSTEM);
-
- UserInfo workProfile = newUser(10);
- workProfile.userType = UserManager.USER_TYPE_PROFILE_MANAGED;
- assertThat(workProfile.isManagedProfile()).isTrue(); // Sanity check
-
- mockGetUsers(systemUser, workProfile);
-
- assertThat(mCarUserManagerHelper.hasInitialUser()).isFalse();
- }
-
- @Test
- public void testSetLastActiveUser_headlessSystem() {
- mockIsHeadlessSystemUserMode(true);
- mockUmGetSystemUser(mUserManager);
-
- mCarUserManagerHelper.setLastActiveUser(UserHandle.USER_SYSTEM);
-
- assertSettingsNotSet(CarSettings.Global.LAST_ACTIVE_USER_ID);
- assertSettingsNotSet(CarSettings.Global.LAST_ACTIVE_PERSISTENT_USER_ID);
- }
-
- @Test
- public void testSetLastActiveUser_nonHeadlessSystem() {
- mockIsHeadlessSystemUserMode(false);
- mockUmGetSystemUser(mUserManager);
-
- mCarUserManagerHelper.setLastActiveUser(UserHandle.USER_SYSTEM);
-
- assertThat(getSettingsInt(CarSettings.Global.LAST_ACTIVE_USER_ID))
- .isEqualTo(UserHandle.USER_SYSTEM);
- assertThat(getSettingsInt(CarSettings.Global.LAST_ACTIVE_PERSISTENT_USER_ID))
- .isEqualTo(UserHandle.USER_SYSTEM);
- }
-
- @Test
- public void testSetLastActiveUser_nonExistingUser() {
- // Don't need to mock um.getUser(), it will return null by default
- mCarUserManagerHelper.setLastActiveUser(42);
-
- assertThat(getSettingsInt(CarSettings.Global.LAST_ACTIVE_USER_ID)).isEqualTo(42);
- assertSettingsNotSet(CarSettings.Global.LAST_ACTIVE_PERSISTENT_USER_ID);
- }
-
- @Test
- public void testSetLastActiveUser_ephemeralUser() {
- int persistentUserId = 42;
- int ephemeralUserid = 108;
- mockUmGetUserInfo(mUserManager, persistentUserId, NO_FLAGS);
- mockUmGetUserInfo(mUserManager, ephemeralUserid, UserInfo.FLAG_EPHEMERAL);
-
- mCarUserManagerHelper.setLastActiveUser(persistentUserId);
- mCarUserManagerHelper.setLastActiveUser(ephemeralUserid);
-
- assertThat(getSettingsInt(CarSettings.Global.LAST_ACTIVE_USER_ID))
- .isEqualTo(ephemeralUserid);
- assertThat(getSettingsInt(CarSettings.Global.LAST_ACTIVE_PERSISTENT_USER_ID))
- .isEqualTo(persistentUserId);
- }
-
- @Test
- public void testSetLastActiveUser_nonEphemeralUser() {
- mockUmGetUserInfo(mUserManager, 42, NO_FLAGS);
-
- mCarUserManagerHelper.setLastActiveUser(42);
-
- assertThat(getSettingsInt(CarSettings.Global.LAST_ACTIVE_USER_ID)).isEqualTo(42);
- assertThat(getSettingsInt(CarSettings.Global.LAST_ACTIVE_PERSISTENT_USER_ID)).isEqualTo(42);
- }
-
- private void mockGetUsers(@NonNull @UserIdInt int... userIds) {
- mockUmGetUsers(mUserManager, userIds);
- }
-
- private void mockGetUsers(@NonNull UserInfo... users) {
- mockUmGetUsers(mUserManager, users);
- }
-
- private void setLastActiveUser(@UserIdInt int userId) {
- putSettingsInt(CarSettings.Global.LAST_ACTIVE_USER_ID, userId);
- }
-
- private void setLastPersistentActiveUser(@UserIdInt int userId) {
- putSettingsInt(CarSettings.Global.LAST_ACTIVE_PERSISTENT_USER_ID, userId);
- }
-
- private void setDefaultBootUserOverride(@UserIdInt int userId) {
- doReturn(Optional.of(userId)).when(() -> CarProperties.boot_user_override_id());
- }
}
diff --git a/tests/carservice_unit_test/src/android/car/userlib/UserHalHelperTest.java b/tests/carservice_unit_test/src/android/car/userlib/UserHalHelperTest.java
index 7bb7f9d..bfd2831 100644
--- a/tests/carservice_unit_test/src/android/car/userlib/UserHalHelperTest.java
+++ b/tests/carservice_unit_test/src/android/car/userlib/UserHalHelperTest.java
@@ -16,6 +16,8 @@
package android.car.userlib;
+import static android.car.test.mocks.AndroidMockitoHelper.mockAmGetCurrentUser;
+import static android.car.test.mocks.AndroidMockitoHelper.mockUmGetUsers;
import static android.car.userlib.UserHalHelper.CREATE_USER_PROPERTY;
import static android.car.userlib.UserHalHelper.REMOVE_USER_PROPERTY;
import static android.car.userlib.UserHalHelper.SWITCH_USER_PROPERTY;
@@ -44,7 +46,6 @@
import android.app.ActivityManager;
import android.car.test.mocks.AbstractExtendedMockitoTestCase;
import android.car.test.mocks.AbstractExtendedMockitoTestCase.CustomMockitoSessionBuilder;
-import android.car.test.mocks.AndroidMockitoHelper;
import android.car.test.util.UserTestingHelper.UserInfoBuilder;
import android.content.pm.UserInfo;
import android.hardware.automotive.vehicle.V2_0.CreateUserRequest;
@@ -73,8 +74,7 @@
import org.junit.Test;
import org.mockito.Mock;
-import java.util.ArrayList;
-import java.util.List;
+import java.util.Arrays;
public final class UserHalHelperTest extends AbstractExtendedMockitoTestCase {
@@ -130,16 +130,16 @@
assertConvertFlags(UserFlags.NONE, user);
user.flags = UserInfo.FLAG_ADMIN;
- assertThat(user.isAdmin()).isTrue(); // sanity check
+ assertThat(user.isAdmin()).isTrue(); // Confidence check
assertConvertFlags(UserFlags.ADMIN, user);
user.flags = UserInfo.FLAG_EPHEMERAL;
- assertThat(user.isEphemeral()).isTrue(); // sanity check
+ assertThat(user.isEphemeral()).isTrue(); // Confidence check
assertConvertFlags(UserFlags.EPHEMERAL, user);
user.userType = UserManager.USER_TYPE_FULL_GUEST;
- assertThat(user.isEphemeral()).isTrue(); // sanity check
- assertThat(user.isGuest()).isTrue(); // sanity check
+ assertThat(user.isEphemeral()).isTrue(); // Confidence check
+ assertThat(user.isGuest()).isTrue(); // Confidence check
assertConvertFlags(UserFlags.GUEST | UserFlags.EPHEMERAL, user);
}
@@ -165,16 +165,16 @@
assertGetFlags(UserFlags.NONE, user);
user.flags = UserInfo.FLAG_ADMIN;
- assertThat(user.isAdmin()).isTrue(); // sanity check
+ assertThat(user.isAdmin()).isTrue(); // Confidence check
assertGetFlags(UserFlags.ADMIN, user);
user.flags = UserInfo.FLAG_EPHEMERAL;
- assertThat(user.isEphemeral()).isTrue(); // sanity check
+ assertThat(user.isEphemeral()).isTrue(); // Confidence check
assertGetFlags(UserFlags.EPHEMERAL, user);
user.userType = UserManager.USER_TYPE_FULL_GUEST;
- assertThat(user.isEphemeral()).isTrue(); // sanity check
- assertThat(user.isGuest()).isTrue(); // sanity check
+ assertThat(user.isEphemeral()).isTrue(); // Confidence check
+ assertThat(user.isGuest()).isTrue(); // Confidence check
assertGetFlags(UserFlags.GUEST | UserFlags.EPHEMERAL, user);
}
@@ -1187,8 +1187,7 @@
@Test
public void testNewUsersInfo_noUsers() {
- List<UserInfo> users = new ArrayList<>();
- AndroidMockitoHelper.mockUmGetUsers(mUm, users);
+ mockGetAllUsersButPrecreated(new UserInfo[0]);
UsersInfo usersInfo = UserHalHelper.newUsersInfo(mUm, 100);
@@ -1200,8 +1199,8 @@
UserInfo user100 = new UserInfoBuilder(100).setFlags(UserInfo.FLAG_ADMIN).build();
UserInfo user200 = new UserInfoBuilder(200).build();
- AndroidMockitoHelper.mockUmGetUsers(mUm, user100, user200);
- AndroidMockitoHelper.mockAmGetCurrentUser(300); // just to make sure it's not used
+ mockGetAllUsersButPrecreated(user100, user200);
+ mockAmGetCurrentUser(300); // just to make sure it's not used
UsersInfo usersInfo = UserHalHelper.newUsersInfo(mUm, 100);
@@ -1223,8 +1222,8 @@
UserInfo user100 = new UserInfoBuilder(100).setFlags(UserInfo.FLAG_ADMIN).build();
UserInfo user200 = new UserInfoBuilder(200).build();
- AndroidMockitoHelper.mockUmGetUsers(mUm, user100, user200);
- AndroidMockitoHelper.mockAmGetCurrentUser(100);
+ mockGetAllUsersButPrecreated(user100, user200);
+ mockAmGetCurrentUser(100);
UsersInfo usersInfo = UserHalHelper.newUsersInfo(mUm);
@@ -1247,8 +1246,8 @@
UserInfo user100 = new UserInfoBuilder(100).setFlags(UserInfo.FLAG_ADMIN).build();
UserInfo user200 = new UserInfoBuilder(200).build();
- AndroidMockitoHelper.mockUmGetUsers(mUm, user100, user200);
- AndroidMockitoHelper.mockAmGetCurrentUser(300);
+ mockGetAllUsersButPrecreated(user100, user200);
+ mockAmGetCurrentUser(300);
UsersInfo usersInfo = UserHalHelper.newUsersInfo(mUm);
@@ -1322,6 +1321,11 @@
UserHalHelper.checkValid(usersInfo);
}
+ private void mockGetAllUsersButPrecreated(@NonNull UserInfo... users) {
+ mockUmGetUsers(mUm, /* excludePartial= */ false, /* excludeDying= */ false,
+ /* excludePreCreated= */ true, Arrays.asList(users));
+ }
+
private static void assertEmptyUsersInfo(UsersInfo usersInfo) {
assertThat(usersInfo).isNotNull();
assertThat(usersInfo.currentUser.userId).isEqualTo(UserHandle.USER_NULL);
diff --git a/tests/carservice_unit_test/src/android/car/userlib/UserHelperTest.java b/tests/carservice_unit_test/src/android/car/userlib/UserHelperTest.java
index 6a94c71..613c541 100644
--- a/tests/carservice_unit_test/src/android/car/userlib/UserHelperTest.java
+++ b/tests/carservice_unit_test/src/android/car/userlib/UserHelperTest.java
@@ -34,6 +34,8 @@
import androidx.test.InstrumentationRegistry;
+import com.android.car.internal.common.UserHelperLite;
+
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
@@ -58,11 +60,12 @@
when(mContext.getResources()).thenReturn(mResources);
}
+ // TODO(b/162240867): Move UserHelperLite tests in separate class
@Test
public void testSafeName() {
- assertThat(UserHelper.safeName(null)).isNull();
+ assertThat(UserHelperLite.safeName(null)).isNull();
- String safe = UserHelper.safeName("UnsafeIam");
+ String safe = UserHelperLite.safeName("UnsafeIam");
assertThat(safe).isNotNull();
assertThat(safe).doesNotContain("UnsafeIAm");
}
@@ -70,25 +73,25 @@
@Test
public void testIsHeadlessSystemUser_system_headlessMode() {
mockIsHeadlessSystemUserMode(true);
- assertThat(UserHelper.isHeadlessSystemUser(UserHandle.USER_SYSTEM)).isTrue();
+ assertThat(UserHelperLite.isHeadlessSystemUser(UserHandle.USER_SYSTEM)).isTrue();
}
@Test
public void testIsHeadlessSystemUser_system_nonHeadlessMode() {
mockIsHeadlessSystemUserMode(false);
- assertThat(UserHelper.isHeadlessSystemUser(UserHandle.USER_SYSTEM)).isFalse();
+ assertThat(UserHelperLite.isHeadlessSystemUser(UserHandle.USER_SYSTEM)).isFalse();
}
@Test
public void testIsHeadlessSystemUser_nonSystem_headlessMode() {
mockIsHeadlessSystemUserMode(true);
- assertThat(UserHelper.isHeadlessSystemUser(10)).isFalse();
+ assertThat(UserHelperLite.isHeadlessSystemUser(10)).isFalse();
}
@Test
public void testIsHeadlessSystemUser_nonSystem_nonHeadlessMode() {
mockIsHeadlessSystemUserMode(false);
- assertThat(UserHelper.isHeadlessSystemUser(10)).isFalse();
+ assertThat(UserHelperLite.isHeadlessSystemUser(10)).isFalse();
}
@Test
diff --git a/tests/carservice_unit_test/src/com/android/car/BluetoothDeviceConnectionPolicyTest.java b/tests/carservice_unit_test/src/com/android/car/BluetoothDeviceConnectionPolicyTest.java
index 52b6e36..94c9baa 100644
--- a/tests/carservice_unit_test/src/com/android/car/BluetoothDeviceConnectionPolicyTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/BluetoothDeviceConnectionPolicyTest.java
@@ -19,13 +19,12 @@
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.reset;
+import static org.mockito.Mockito.timeout;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.bluetooth.BluetoothAdapter;
-import android.car.hardware.power.CarPowerManager;
-import android.car.hardware.power.CarPowerManager.CarPowerStateListenerWithCompletion;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -36,8 +35,14 @@
import android.test.mock.MockContentProvider;
import android.test.mock.MockContentResolver;
+import androidx.test.filters.FlakyTest;
import androidx.test.filters.RequiresDevice;
+import com.android.car.power.CarPowerManagementService;
+import com.android.car.power.SilentModeController;
+import com.android.car.systeminterface.SystemInterface;
+import com.android.internal.app.IVoiceInteractionManagerService;
+
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
@@ -57,19 +62,24 @@
@RequiresDevice
@RunWith(MockitoJUnitRunner.class)
public class BluetoothDeviceConnectionPolicyTest {
- private BluetoothDeviceConnectionPolicy mPolicy;
+ private static final long WAIT_TIMEOUT_MS = 5000;
@Mock private Context mMockContext;
@Mock private Resources mMockResources;
private MockContentResolver mMockContentResolver;
private MockContentProvider mMockContentProvider;
@Mock private PackageManager mMockPackageManager;
- private final int mUserId = 10;
@Mock private CarBluetoothService mMockBluetoothService;
+ @Mock private IVoiceInteractionManagerService mMockVoiceService;
+ @Mock private SystemInterface mMockSystemInterface;
+ @Mock private CarPowerManagementService mMockCarPowerManagementService;
+ private final int mUserId = 10;
+
+ private BluetoothDeviceConnectionPolicy mPolicy;
private BluetoothAdapterHelper mBluetoothAdapterHelper;
private BroadcastReceiver mReceiver;
- private CarPowerStateListenerWithCompletion mPowerStateListener;
+ private SilentModeController mSilentModeController;
//--------------------------------------------------------------------------------------------//
// Setup/TearDown //
@@ -110,12 +120,22 @@
mPolicy = BluetoothDeviceConnectionPolicy.create(mMockContext, mUserId,
mMockBluetoothService);
Assert.assertTrue(mPolicy != null);
+
+ mSilentModeController = new SilentModeController(mMockContext, mMockSystemInterface,
+ mMockVoiceService, "");
+ CarLocalServices.addService(SilentModeController.class, mSilentModeController);
+ CarLocalServices.addService(CarPowerManagementService.class,
+ mMockCarPowerManagementService);
+ mSilentModeController.init();
+ mSilentModeController.setPowerOnForTest(true);
}
@After
public void tearDown() {
mPolicy.release();
mBluetoothAdapterHelper.release();
+ CarLocalServices.removeServiceForTest(SilentModeController.class);
+ CarLocalServices.removeServiceForTest(CarPowerManagementService.class);
}
//--------------------------------------------------------------------------------------------//
@@ -130,10 +150,8 @@
}
}
- private void sendPowerStateChanged(int newState) {
- if (mPowerStateListener != null) {
- mPowerStateListener.onStateChanged(newState, null);
- }
+ private void sendSilentMode(boolean isSilent) {
+ mPolicy.getSilentModeListener().onModeChange(isSilent);
}
//--------------------------------------------------------------------------------------------//
@@ -154,7 +172,7 @@
public void testInitWithAdapterOn_connectDevices() {
mBluetoothAdapterHelper.forceAdapterOn();
mPolicy.init();
- verify(mMockBluetoothService, times(1)).connectDevices();
+ verify(mMockBluetoothService, timeout(WAIT_TIMEOUT_MS).atLeastOnce()).connectDevices();
}
/**
@@ -192,10 +210,9 @@
public void testReceivePowerShutdownPrepare_disableBluetooth() {
mBluetoothAdapterHelper.forceAdapterOn();
mPolicy.init();
- mPowerStateListener = mPolicy.getCarPowerStateListener();
reset(mMockBluetoothService);
- sendPowerStateChanged(CarPowerManager.CarPowerStateListener.SHUTDOWN_PREPARE);
+ sendSilentMode(true);
mBluetoothAdapterHelper.waitForAdapterOff();
Assert.assertTrue(mBluetoothAdapterHelper.isAdapterPersistedOn());
}
@@ -215,10 +232,9 @@
public void testReceivePowerOnBluetoothPersistedOff_doNothing() {
mBluetoothAdapterHelper.forceAdapterOff();
mPolicy.init();
- mPowerStateListener = mPolicy.getCarPowerStateListener();
reset(mMockBluetoothService);
- sendPowerStateChanged(CarPowerManager.CarPowerStateListener.ON);
+ sendSilentMode(false);
mBluetoothAdapterHelper.waitForAdapterOff();
}
@@ -231,17 +247,17 @@
* - Power state ON is received
*
* Outcome:
- * - Because the Adapter is not persisted off, we should turn it back on. No attemp to connect
+ * - Because the Adapter is not persisted off, we should turn it back on. No attempt to connect
* devices is made because we're yielding to the adapter ON event.
*/
@Test
+ @FlakyTest // This occasionally fails to connect
public void testReceivePowerOnBluetoothOffNotPersisted_BluetoothOnConnectDevices() {
mBluetoothAdapterHelper.forceAdapterOffDoNotPersist();
mPolicy.init();
- mPowerStateListener = mPolicy.getCarPowerStateListener();
reset(mMockBluetoothService);
- sendPowerStateChanged(CarPowerManager.CarPowerStateListener.ON);
+ sendSilentMode(false);
verify(mMockBluetoothService, times(0)).connectDevices();
mBluetoothAdapterHelper.waitForAdapterOn();
}
@@ -261,11 +277,10 @@
public void testReceivePowerOnBluetoothOn_connectDevices() {
mBluetoothAdapterHelper.forceAdapterOn();
mPolicy.init();
- mPowerStateListener = mPolicy.getCarPowerStateListener();
reset(mMockBluetoothService);
- sendPowerStateChanged(CarPowerManager.CarPowerStateListener.ON);
- verify(mMockBluetoothService, times(1)).connectDevices();
+ sendSilentMode(false);
+ verify(mMockBluetoothService, timeout(WAIT_TIMEOUT_MS).atLeastOnce()).connectDevices();
}
//--------------------------------------------------------------------------------------------//
@@ -280,12 +295,11 @@
* - Adapter state TURNING_OFF is received
*
* Outcome:
- * - No nothing
+ * - Do nothing
*/
@Test
public void testReceiveAdapterTurningOff_doNothing() {
mPolicy.init();
- mPowerStateListener = mPolicy.getCarPowerStateListener();
reset(mMockBluetoothService);
sendAdapterStateChanged(BluetoothAdapter.STATE_TURNING_OFF);
@@ -300,12 +314,11 @@
* - Adapter state OFF is received
*
* Outcome:
- * - No nothing
+ * - Do nothing
*/
@Test
public void testReceiveAdapterOff_doNothing() {
mPolicy.init();
- mPowerStateListener = mPolicy.getCarPowerStateListener();
reset(mMockBluetoothService);
sendAdapterStateChanged(BluetoothAdapter.STATE_OFF);
@@ -320,12 +333,11 @@
* - Adapter state TURNING_ON is received
*
* Outcome:
- * - No nothing
+ * - Do nothing
*/
@Test
public void testReceiveAdapterTurningOn_doNothing() {
mPolicy.init();
- mPowerStateListener = mPolicy.getCarPowerStateListener();
reset(mMockBluetoothService);
sendAdapterStateChanged(BluetoothAdapter.STATE_TURNING_ON);
@@ -345,10 +357,9 @@
@Test
public void testReceiveAdapterOn_connectDevices() {
mPolicy.init();
- mPowerStateListener = mPolicy.getCarPowerStateListener();
reset(mMockBluetoothService);
sendAdapterStateChanged(BluetoothAdapter.STATE_ON);
- verify(mMockBluetoothService, times(1)).connectDevices();
+ verify(mMockBluetoothService, timeout(WAIT_TIMEOUT_MS).atLeastOnce()).connectDevices();
}
}
diff --git a/tests/carservice_unit_test/src/com/android/car/CarBluetoothServiceTest.java b/tests/carservice_unit_test/src/com/android/car/CarBluetoothServiceTest.java
index 3d95204..1232685 100644
--- a/tests/carservice_unit_test/src/com/android/car/CarBluetoothServiceTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/CarBluetoothServiceTest.java
@@ -30,6 +30,11 @@
import android.test.mock.MockContentProvider;
import android.test.mock.MockContentResolver;
+import com.android.car.power.CarPowerManagementService;
+import com.android.car.power.SilentModeController;
+import com.android.car.systeminterface.SystemInterface;
+import com.android.internal.app.IVoiceInteractionManagerService;
+
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
@@ -65,7 +70,11 @@
@Mock private PerUserCarServiceHelper mMockUserSwitchService;
@Mock private IPerUserCarService mMockPerUserCarService;
@Mock private CarBluetoothUserService mMockBluetoothUserService;
+ @Mock private IVoiceInteractionManagerService mMockVoiceService;
+ @Mock private SystemInterface mMockSystemInterface;
+ @Mock private CarPowerManagementService mMockCarPowerManagementService;
private PerUserCarServiceHelper.ServiceCallback mUserSwitchCallback;
+ private SilentModeController mSilentModeController;
//--------------------------------------------------------------------------------------------//
// Setup/TearDown //
@@ -108,6 +117,13 @@
} catch (RemoteException e) {
Assert.fail();
}
+ mSilentModeController = new SilentModeController(mMockContext, mMockSystemInterface,
+ mMockVoiceService, "");
+ CarLocalServices.addService(SilentModeController.class, mSilentModeController);
+ CarLocalServices.addService(CarPowerManagementService.class,
+ mMockCarPowerManagementService);
+ mSilentModeController.init();
+ mSilentModeController.setPowerOnForTest(true);
}
@After
@@ -116,6 +132,8 @@
mCarBluetoothService.release();
mCarBluetoothService = null;
}
+ CarLocalServices.removeServiceForTest(SilentModeController.class);
+ CarLocalServices.removeServiceForTest(CarPowerManagementService.class);
}
//--------------------------------------------------------------------------------------------//
diff --git a/tests/carservice_unit_test/src/com/android/car/CarConfigurationServiceTest.java b/tests/carservice_unit_test/src/com/android/car/CarConfigurationServiceTest.java
deleted file mode 100644
index e39f5c8..0000000
--- a/tests/carservice_unit_test/src/com/android/car/CarConfigurationServiceTest.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright (C) 2018 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.car;
-
-import static com.android.car.CarConfigurationService.DEFAULT_SPEED_BUMP_ACQUIRED_PERMITS_PER_SECOND;
-import static com.android.car.CarConfigurationService.DEFAULT_SPEED_BUMP_MAX_PERMIT_POOL;
-import static com.android.car.CarConfigurationService.DEFAULT_SPEED_BUMP_PERMIT_FILL_DELAY;
-import static com.android.car.CarConfigurationService.SPEED_BUMP_ACQUIRED_PERMITS_PER_SECOND_KEY;
-import static com.android.car.CarConfigurationService.SPEED_BUMP_CONFIG_KEY;
-import static com.android.car.CarConfigurationService.SPEED_BUMP_MAX_PERMIT_POOL_KEY;
-import static com.android.car.CarConfigurationService.SPEED_BUMP_PERMIT_FILL_DELAY_KEY;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import android.car.settings.SpeedBumpConfiguration;
-
-import androidx.test.InstrumentationRegistry;
-
-import org.json.JSONException;
-import org.json.JSONObject;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.junit.MockitoJUnitRunner;
-
-/**
- * Tests for {@link CarConfigurationService}.
- */
-@RunWith(MockitoJUnitRunner.class)
-public class CarConfigurationServiceTest {
- @Test
- public void testJsonResourceSuccessfullyRead() {
- // Use the default JsonReader to check that the resource JSON can be retrieved.
- CarConfigurationService service = new CarConfigurationService(
- InstrumentationRegistry.getTargetContext(),
- new JsonReaderImpl());
- service.init();
-
- assertThat(service.mConfigFile).isNotNull();
-
- // Default values should be stored in the JSON file as well.
- SpeedBumpConfiguration expectedConfiguration = new SpeedBumpConfiguration(
- DEFAULT_SPEED_BUMP_ACQUIRED_PERMITS_PER_SECOND,
- DEFAULT_SPEED_BUMP_MAX_PERMIT_POOL,
- DEFAULT_SPEED_BUMP_PERMIT_FILL_DELAY);
-
- assertThat(service.getSpeedBumpConfiguration()).isEqualTo(expectedConfiguration);
- }
-
- @Test
- public void testJsonFileSuccessfullyRead() {
- // Return an empty json file.
- CarConfigurationService service = new CarConfigurationService(
- InstrumentationRegistry.getTargetContext(),
- (context, resId) -> "{}");
- service.init();
-
- // The configuration should still be initialized.
- assertThat(service.mConfigFile).isNotNull();
- }
-
- @Test
- public void testNullJsonStringResultsInNullConfigFile() {
- // Return null as the string representation.
- CarConfigurationService service = new CarConfigurationService(
- InstrumentationRegistry.getTargetContext(),
- (context, resId) -> null);
- service.init();
-
- // No config file should be created.
- assertThat(service.mConfigFile).isNull();
- }
-
- @Test
- public void testSpeedBumpConfigurationSuccessfullyRead() throws JSONException {
- double acquiredPermitsPerSecond = 5d;
- double maxPermitPool = 10d;
- long permitFillDelay = 500L;
-
- String jsonFile = new SpeedBumpJsonBuilder()
- .setAcquiredPermitsPerSecond(acquiredPermitsPerSecond)
- .setMaxPermitPool(maxPermitPool)
- .setPermitFillDelay(permitFillDelay)
- .build();
-
- CarConfigurationService service = new CarConfigurationService(
- InstrumentationRegistry.getTargetContext(),
- (context, resId) -> jsonFile);
- service.init();
-
- SpeedBumpConfiguration expectedConfiguration = new SpeedBumpConfiguration(
- acquiredPermitsPerSecond,
- maxPermitPool,
- permitFillDelay);
-
- assertThat(service.getSpeedBumpConfiguration()).isEqualTo(expectedConfiguration);
- }
-
- @Test
- public void testDefaultSpeedBumpConfigurationReturned() {
- // Return null as the JSON representation.
- CarConfigurationService service = new CarConfigurationService(
- InstrumentationRegistry.getTargetContext(),
- (context, resId) -> null);
- service.init();
-
- // Default values should be used.
- SpeedBumpConfiguration expectedConfiguration = new SpeedBumpConfiguration(
- DEFAULT_SPEED_BUMP_ACQUIRED_PERMITS_PER_SECOND,
- DEFAULT_SPEED_BUMP_MAX_PERMIT_POOL,
- DEFAULT_SPEED_BUMP_PERMIT_FILL_DELAY);
-
- assertThat(service.getSpeedBumpConfiguration()).isEqualTo(expectedConfiguration);
- }
-
- /**
- * Builder for a string that represents the contents of a JSON file with speed bump
- * configuration.
- */
- private class SpeedBumpJsonBuilder {
- private double mAcquiredPermitsPerSecond;
- private double mMaxPermitPool;
- private long mPermitFillDelay;
-
- SpeedBumpJsonBuilder setAcquiredPermitsPerSecond(double acquiredPermitsPerSecond) {
- mAcquiredPermitsPerSecond = acquiredPermitsPerSecond;
- return this;
- }
-
- SpeedBumpJsonBuilder setMaxPermitPool(double maxPermitPool) {
- mMaxPermitPool = maxPermitPool;
- return this;
- }
-
- SpeedBumpJsonBuilder setPermitFillDelay(long permitFillDelay) {
- mPermitFillDelay = permitFillDelay;
- return this;
- }
-
- String build() throws JSONException {
- JSONObject speedBump = new JSONObject();
- speedBump.put(SPEED_BUMP_ACQUIRED_PERMITS_PER_SECOND_KEY, mAcquiredPermitsPerSecond);
- speedBump.put(SPEED_BUMP_MAX_PERMIT_POOL_KEY, mMaxPermitPool);
- speedBump.put(SPEED_BUMP_PERMIT_FILL_DELAY_KEY, mPermitFillDelay);
-
- JSONObject container = new JSONObject();
- container.put(SPEED_BUMP_CONFIG_KEY, speedBump);
-
- return container.toString();
- }
- }
-}
diff --git a/tests/carservice_unit_test/src/com/android/car/CarInputRotaryServiceTest.java b/tests/carservice_unit_test/src/com/android/car/CarInputRotaryServiceTest.java
new file mode 100644
index 0000000..121786f
--- /dev/null
+++ b/tests/carservice_unit_test/src/com/android/car/CarInputRotaryServiceTest.java
@@ -0,0 +1,249 @@
+/*
+ * 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.car;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
+import android.annotation.UserIdInt;
+import android.app.IActivityManager;
+import android.car.testapi.BlockingUserLifecycleListener;
+import android.car.user.CarUserManager;
+import android.content.ContentResolver;
+import android.content.Context;
+import android.content.pm.UserInfo;
+import android.content.res.Resources;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.provider.Settings;
+import android.telecom.TelecomManager;
+import android.test.mock.MockContentResolver;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import com.android.car.hal.InputHalService;
+import com.android.car.hal.UserHalService;
+import com.android.car.internal.common.CommonConstants.UserLifecycleEventType;
+import com.android.car.user.CarUserService;
+import com.android.internal.app.AssistUtils;
+import com.android.internal.util.test.BroadcastInterceptingContext;
+import com.android.internal.util.test.FakeSettingsProvider;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import java.util.function.IntSupplier;
+import java.util.function.Supplier;
+
+@RunWith(MockitoJUnitRunner.class)
+public class CarInputRotaryServiceTest {
+
+ // TODO(b/152069895): decrease value once refactored. In fact, it should not even use
+ // runWithScissors(), but only rely on CountdownLatches
+ private static final long DEFAULT_TIMEOUT_MS = 5_000;
+
+ @Mock private InputHalService mInputHalService;
+ @Mock private TelecomManager mTelecomManager;
+ @Mock private AssistUtils mAssistUtils;
+ @Mock private CarInputService.KeyEventListener mDefaultMainListener;
+ @Mock private Supplier<String> mLastCallSupplier;
+ @Mock private IntSupplier mLongPressDelaySupplier;
+ @Mock private InputCaptureClientController mCaptureController;
+ @Mock private CarOccupantZoneService mCarOccupantZoneService;
+ @Mock private CarUxRestrictionsManagerService mUxRestrictionService;
+
+ @Spy private final Context mContext = ApplicationProvider.getApplicationContext();
+ @Spy private final Handler mHandler = new Handler(Looper.getMainLooper());
+
+ private MockContext mMockContext;
+ private CarUserService mCarUserService;
+ private CarInputService mCarInputService;
+
+ /**
+ * A mock {@link Context}.
+ * This class uses a mock {@link ContentResolver} and
+ * {@link android.content.ContentProvider} to
+ * avoid changing real system settings. Besides, to emulate the case where the OEM changes
+ * {@link R.string.rotaryService} to empty in the resource file (e.g., the OEM doesn't
+ * want to
+ * start RotaryService), this class allows to return a given String when retrieving {@link
+ * R.string.rotaryService}.
+ */
+ private static class MockContext extends BroadcastInterceptingContext {
+ private final MockContentResolver mContentResolver;
+ private final FakeSettingsProvider mContentProvider;
+ private final Resources mResources;
+
+ MockContext(Context base, String rotaryService) {
+ super(base);
+ FakeSettingsProvider.clearSettingsProvider();
+ mContentResolver = new MockContentResolver(this);
+ mContentProvider = new FakeSettingsProvider();
+ mContentResolver.addProvider(Settings.AUTHORITY, mContentProvider);
+
+ mResources = spy(base.getResources());
+ doReturn(rotaryService).when(mResources).getString(R.string.rotaryService);
+ }
+
+ void release() {
+ FakeSettingsProvider.clearSettingsProvider();
+ }
+
+ @Override
+ public ContentResolver getContentResolver() {
+ return mContentResolver;
+ }
+
+ @Override
+ public Resources getResources() {
+ return mResources;
+ }
+ }
+
+ @Before
+ public void setUp() {
+ when(mInputHalService.isKeyInputSupported()).thenReturn(true);
+ // Delay Handler callbacks until flushHandler() is called.
+ doReturn(true).when(mHandler).sendMessageAtTime(any(), anyLong());
+ }
+
+ @Test
+ public void rotaryServiceSettingsUpdated_whenRotaryServiceIsNotEmpty() throws Exception {
+ final String rotaryService = "com.android.car.rotary/com.android.car.rotary.RotaryService";
+ init(rotaryService);
+ assertThat(mMockContext.getString(R.string.rotaryService)).isEqualTo(rotaryService);
+
+ final int userId = 11;
+
+ // By default RotaryService is not enabled.
+ String enabledServices = Settings.Secure.getStringForUser(
+ mMockContext.getContentResolver(),
+ Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
+ userId);
+ assertThat(enabledServices == null ? "" : enabledServices).doesNotContain(rotaryService);
+
+ String enabled = Settings.Secure.getStringForUser(
+ mMockContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_ENABLED,
+ userId);
+ assertThat(enabled).isNull();
+
+ // Enable RotaryService by sending user switch event.
+ sendUserLifecycleEvent(CarUserManager.USER_LIFECYCLE_EVENT_TYPE_SWITCHING, userId);
+
+ enabledServices = Settings.Secure.getStringForUser(
+ mMockContext.getContentResolver(),
+ Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
+ userId);
+ assertThat(enabledServices).contains(rotaryService);
+
+ enabled = Settings.Secure.getStringForUser(
+ mMockContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_ENABLED,
+ userId);
+ assertThat(enabled).isEqualTo("1");
+ }
+
+ @Test
+ public void rotaryServiceSettingsNotUpdated_whenRotaryServiceIsEmpty() throws Exception {
+ final String rotaryService = "";
+ init(rotaryService);
+ assertThat(mMockContext.getString(R.string.rotaryService)).isEqualTo(rotaryService);
+
+ final int userId = 11;
+
+ // By default the Accessibility is disabled.
+ String enabled = Settings.Secure.getStringForUser(
+ mMockContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_ENABLED,
+ userId);
+ assertThat(enabled).isNull();
+
+ sendUserLifecycleEvent(CarUserManager.USER_LIFECYCLE_EVENT_TYPE_SWITCHING, userId);
+
+ // Sending user switch event shouldn't enable the Accessibility because RotaryService is
+ // empty.
+ enabled = Settings.Secure.getStringForUser(
+ mMockContext.getContentResolver(),
+ Settings.Secure.ACCESSIBILITY_ENABLED,
+ userId);
+ assertThat(enabled).isNull();
+ }
+
+ @After
+ public void tearDown() {
+ if (mMockContext != null) {
+ mMockContext.release();
+ mMockContext = null;
+ }
+ }
+
+ /**
+ * Initializes {@link #mMockContext}, {@link #mCarUserService}, and {@link #mCarInputService}.
+ */
+ private void init(String rotaryService) {
+ mMockContext = new MockContext(mContext, rotaryService);
+
+ UserManager userManager = mock(UserManager.class);
+ UserInfo userInfo = mock(UserInfo.class);
+ doReturn(userInfo).when(userManager).getUserInfo(anyInt());
+ UserHalService userHal = mock(UserHalService.class);
+ IActivityManager iActivityManager = mock(IActivityManager.class);
+ mCarUserService = new CarUserService(mMockContext, userHal,
+ userManager, iActivityManager, /* maxRunningUsers= */ 2, mUxRestrictionService);
+
+ mCarInputService = new CarInputService(mMockContext, mInputHalService, mCarUserService,
+ mCarOccupantZoneService, mHandler, mTelecomManager, mAssistUtils,
+ mDefaultMainListener, mLastCallSupplier, mLongPressDelaySupplier,
+ mCaptureController);
+ mCarInputService.init();
+ }
+
+ private void sendUserLifecycleEvent(@UserLifecycleEventType int eventType,
+ @UserIdInt int userId) throws InterruptedException {
+ // Add a blocking listener to ensure CarUserService event notification is completed
+ // before proceeding with test execution.
+ BlockingUserLifecycleListener blockingListener =
+ BlockingUserLifecycleListener.forAnyEvent().build();
+ mCarUserService.addUserLifecycleListener(blockingListener);
+
+ runOnMainThreadAndWaitForIdle(() -> mCarUserService.onUserLifecycleEvent(eventType,
+ /* fromUserId= */ UserHandle.USER_NULL, userId));
+ blockingListener.waitForAnyEvent();
+ }
+
+ private static void runOnMainThreadAndWaitForIdle(Runnable r) {
+ Handler.getMain().runWithScissors(r, DEFAULT_TIMEOUT_MS);
+ // Run empty runnable to make sure that all posted handlers are done.
+ Handler.getMain().runWithScissors(() -> {
+ }, DEFAULT_TIMEOUT_MS);
+ }
+}
diff --git a/tests/carservice_unit_test/src/com/android/car/CarInputServiceTest.java b/tests/carservice_unit_test/src/com/android/car/CarInputServiceTest.java
index cabab88..f8f1c22 100644
--- a/tests/carservice_unit_test/src/com/android/car/CarInputServiceTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/CarInputServiceTest.java
@@ -16,6 +16,8 @@
package com.android.car;
+import static android.car.CarOccupantZoneManager.DisplayTypeEnum;
+
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
@@ -30,52 +32,35 @@
import static org.mockito.Mockito.ignoreStubs;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.mockito.Mockito.when;
-import android.annotation.UserIdInt;
-import android.app.IActivityManager;
+import android.car.CarOccupantZoneManager;
import android.car.CarProjectionManager;
-import android.car.input.CarInputHandlingService.InputFilter;
-import android.car.input.ICarInputListener;
-import android.car.testapi.BlockingUserLifecycleListener;
-import android.car.user.CarUserManager;
-import android.car.userlib.CarUserManagerHelper;
import android.content.ComponentName;
-import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
-import android.content.pm.UserInfo;
-import android.content.res.Resources;
+import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
-import android.os.RemoteException;
import android.os.SystemClock;
import android.os.UserHandle;
-import android.os.UserManager;
-import android.provider.Settings;
import android.service.voice.VoiceInteractionSession;
import android.telecom.TelecomManager;
-import android.test.mock.MockContentResolver;
import android.view.KeyEvent;
import androidx.test.core.app.ApplicationProvider;
import com.android.car.hal.InputHalService;
-import com.android.car.hal.UserHalService;
import com.android.car.user.CarUserService;
import com.android.internal.app.AssistUtils;
-import com.android.internal.util.test.BroadcastInterceptingContext;
-import com.android.internal.util.test.FakeSettingsProvider;
import com.google.common.collect.Range;
-import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -83,6 +68,7 @@
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner;
+import org.testng.Assert;
import java.util.BitSet;
import java.util.function.IntSupplier;
@@ -90,69 +76,32 @@
@RunWith(MockitoJUnitRunner.class)
public class CarInputServiceTest {
- // TODO(b/152069895): decrease value once refactored. In fact, it should not even use
- // runWithScissors(), but only rely on CountdownLatches
- private static final long DEFAULT_TIMEOUT_MS = 5_000;
@Mock InputHalService mInputHalService;
@Mock TelecomManager mTelecomManager;
@Mock AssistUtils mAssistUtils;
@Mock CarInputService.KeyEventListener mDefaultMainListener;
+ @Mock CarInputService.KeyEventListener mInstrumentClusterKeyListener;
@Mock Supplier<String> mLastCallSupplier;
@Mock IntSupplier mLongPressDelaySupplier;
+ @Mock InputCaptureClientController mCaptureController;
+ @Mock CarOccupantZoneService mCarOccupantZoneService;
@Spy Context mContext = ApplicationProvider.getApplicationContext();
@Spy Handler mHandler = new Handler(Looper.getMainLooper());
- private MockContext mMockContext;
- private CarUserService mCarUserService;
+ @Mock CarUserService mCarUserService;
private CarInputService mCarInputService;
- /**
- * A mock {@link Context}.
- * This class uses a mock {@link ContentResolver} and {@link android.content.ContentProvider} to
- * avoid changing real system settings. Besides, to emulate the case where the OEM changes
- * {@link R.string.rotaryService} to empty in the resource file (e.g., the OEM doesn't want to
- * start RotaryService), this class allows to return a given String when retrieving {@link
- * R.string.rotaryService}.
- */
- private static class MockContext extends BroadcastInterceptingContext {
- private final MockContentResolver mContentResolver;
- private final FakeSettingsProvider mContentProvider;
- private final Resources mResources;
-
- MockContext(Context base, String rotaryService) {
- super(base);
- FakeSettingsProvider.clearSettingsProvider();
- mContentResolver = new MockContentResolver(this);
- mContentProvider = new FakeSettingsProvider();
- mContentResolver.addProvider(Settings.AUTHORITY, mContentProvider);
-
- mResources = spy(base.getResources());
- doReturn(rotaryService).when(mResources).getString(R.string.rotaryService);
- }
-
- void release() {
- FakeSettingsProvider.clearSettingsProvider();
- }
-
- @Override
- public ContentResolver getContentResolver() {
- return mContentResolver;
- }
-
- @Override
- public Resources getResources() {
- return mResources;
- }
- }
-
@Before
public void setUp() {
mCarUserService = mock(CarUserService.class);
+
mCarInputService = new CarInputService(mContext, mInputHalService, mCarUserService,
- mHandler, mTelecomManager, mAssistUtils, mDefaultMainListener, mLastCallSupplier,
- /* customInputServiceComponent= */ null, mLongPressDelaySupplier);
+ mCarOccupantZoneService, mHandler, mTelecomManager, mAssistUtils,
+ mDefaultMainListener, mLastCallSupplier, mLongPressDelaySupplier,
+ mCaptureController);
+ mCarInputService.setInstrumentClusterKeyListener(mInstrumentClusterKeyListener);
when(mInputHalService.isKeyInputSupported()).thenReturn(true);
mCarInputService.init();
@@ -162,69 +111,6 @@
}
@Test
- public void rotaryServiceSettingsUpdated_whenRotaryServiceIsNotEmpty() throws Exception {
- final String rotaryService = "com.android.car.rotary/com.android.car.rotary.RotaryService";
- init(rotaryService);
- assertThat(mMockContext.getString(R.string.rotaryService)).isEqualTo(rotaryService);
-
- final int userId = 11;
-
- // By default RotaryService is not enabled.
- String enabledServices = Settings.Secure.getStringForUser(
- mMockContext.getContentResolver(),
- Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
- userId);
- assertThat(enabledServices == null ? "" : enabledServices).doesNotContain(rotaryService);
-
- String enabled = Settings.Secure.getStringForUser(
- mMockContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_ENABLED,
- userId);
- assertThat(enabled).isNull();
-
- // Enable RotaryService by sending user switch event.
- sendUserLifecycleEvent(CarUserManager.USER_LIFECYCLE_EVENT_TYPE_SWITCHING, userId);
-
- enabledServices = Settings.Secure.getStringForUser(
- mMockContext.getContentResolver(),
- Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES,
- userId);
- assertThat(enabledServices).contains(rotaryService);
-
- enabled = Settings.Secure.getStringForUser(
- mMockContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_ENABLED,
- userId);
- assertThat(enabled).isEqualTo("1");
- }
-
- @Test
- public void rotaryServiceSettingsNotUpdated_whenRotaryServiceIsEmpty() throws Exception {
- final String rotaryService = "";
- init(rotaryService);
- assertThat(mMockContext.getString(R.string.rotaryService)).isEqualTo(rotaryService);
-
- final int userId = 11;
-
- // By default the Accessibility is disabled.
- String enabled = Settings.Secure.getStringForUser(
- mMockContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_ENABLED,
- userId);
- assertThat(enabled).isNull();
-
- sendUserLifecycleEvent(CarUserManager.USER_LIFECYCLE_EVENT_TYPE_SWITCHING, userId);
-
- // Sending user switch event shouldn't enable the Accessibility because RotaryService is
- // empty.
- enabled = Settings.Secure.getStringForUser(
- mMockContext.getContentResolver(),
- Settings.Secure.ACCESSIBILITY_ENABLED,
- userId);
- assertThat(enabled).isNull();
- }
-
- @Test
public void ordinaryEvents_onMainDisplay_routedToInputManager() {
KeyEvent event = send(Key.DOWN, KeyEvent.KEYCODE_ENTER, Display.MAIN);
@@ -248,33 +134,52 @@
}
@Test
- public void customEventHandler_capturesRegisteredEvents_ignoresUnregisteredEvents()
- throws RemoteException {
- KeyEvent event;
- ICarInputListener listener = registerInputListener(
- new InputFilter(KeyEvent.KEYCODE_ENTER, InputHalService.DISPLAY_MAIN),
- new InputFilter(KeyEvent.KEYCODE_ENTER, InputHalService.DISPLAY_INSTRUMENT_CLUSTER),
- new InputFilter(KeyEvent.KEYCODE_MENU, InputHalService.DISPLAY_MAIN));
+ public void customEventHandler_capturesDisplayMainEvent_capturedByInputController() {
+ CarInputService.KeyEventListener instrumentClusterListener =
+ setupInstrumentClusterListener();
+ // Assume mCaptureController will consume every event.
+ when(mCaptureController.onKeyEvent(anyInt(), any(KeyEvent.class))).thenReturn(true);
+
+ KeyEvent event = send(Key.DOWN, KeyEvent.KEYCODE_ENTER, Display.MAIN);
+ verify(instrumentClusterListener, never()).onKeyEvent(any(KeyEvent.class));
+ verify(mCaptureController).onKeyEvent(CarOccupantZoneManager.DISPLAY_TYPE_MAIN, event);
+ verify(mDefaultMainListener, never()).onKeyEvent(any(KeyEvent.class));
+ }
+
+ @Test
+ public void customEventHandler_capturesDisplayMainEvent_missedByInputController() {
+ CarInputService.KeyEventListener instrumentClusterListener =
+ setupInstrumentClusterListener();
+
+ // Assume mCaptureController will consume every event.
+ when(mCaptureController.onKeyEvent(anyInt(), any(KeyEvent.class))).thenReturn(false);
+
+ KeyEvent event = send(Key.DOWN, KeyEvent.KEYCODE_ENTER, Display.MAIN);
+ verify(instrumentClusterListener, never()).onKeyEvent(any(KeyEvent.class));
+ verify(mCaptureController).onKeyEvent(anyInt(), any(KeyEvent.class));
+ verify(mDefaultMainListener).onKeyEvent(event);
+ }
+
+ @Test
+ public void customEventHandler_capturesClusterEvents_capturedByInstrumentCluster() {
+ CarInputService.KeyEventListener instrumentClusterListener =
+ setupInstrumentClusterListener();
+
+ // Assume mCaptureController will consume every event.
+ when(mCaptureController.onKeyEvent(anyInt(), any(KeyEvent.class))).thenReturn(true);
+
+ KeyEvent event = send(Key.DOWN, KeyEvent.KEYCODE_ENTER, Display.INSTRUMENT_CLUSTER);
+ verify(instrumentClusterListener).onKeyEvent(event);
+ verify(mCaptureController, never()).onKeyEvent(anyInt(), any(KeyEvent.class));
+ verify(mDefaultMainListener, never()).onKeyEvent(any(KeyEvent.class));
+ }
+
+ private CarInputService.KeyEventListener setupInstrumentClusterListener() {
CarInputService.KeyEventListener instrumentClusterListener =
mock(CarInputService.KeyEventListener.class);
mCarInputService.setInstrumentClusterKeyListener(instrumentClusterListener);
-
- event = send(Key.DOWN, KeyEvent.KEYCODE_ENTER, Display.MAIN);
- verify(listener).onKeyEvent(event, InputHalService.DISPLAY_MAIN);
- verify(mDefaultMainListener, never()).onKeyEvent(any());
-
- event = send(Key.DOWN, KeyEvent.KEYCODE_ENTER, Display.INSTRUMENT_CLUSTER);
- verify(listener).onKeyEvent(event, InputHalService.DISPLAY_INSTRUMENT_CLUSTER);
- verify(instrumentClusterListener, never()).onKeyEvent(any());
-
- event = send(Key.DOWN, KeyEvent.KEYCODE_MENU, Display.MAIN);
- verify(listener).onKeyEvent(event, InputHalService.DISPLAY_MAIN);
- verify(mDefaultMainListener, never()).onKeyEvent(any());
-
- event = send(Key.DOWN, KeyEvent.KEYCODE_MENU, Display.INSTRUMENT_CLUSTER);
- verify(listener, never()).onKeyEvent(event, InputHalService.DISPLAY_INSTRUMENT_CLUSTER);
- verify(instrumentClusterListener).onKeyEvent(event);
+ return instrumentClusterListener;
}
@Test
@@ -583,52 +488,62 @@
assertThat(timeCaptor.getValue()).isIn(Range.closed(then + systemDelay, now + systemDelay));
}
- @After
- public void tearDown() {
- if (mMockContext != null) {
- mMockContext.release();
- mMockContext = null;
- }
+ @Test
+ public void injectKeyEvent_throwsSecurityExceptionWithoutInjectEventsPermission() {
+ // Arrange
+ doReturn(PackageManager.PERMISSION_DENIED).when(mContext).checkCallingOrSelfPermission(
+ android.Manifest.permission.INJECT_EVENTS);
+
+ KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER);
+
+ // Act and assert
+ Assert.assertThrows(SecurityException.class,
+ () -> mCarInputService.injectKeyEvent(event,
+ CarOccupantZoneManager.DISPLAY_TYPE_MAIN));
}
- /**
- * Initializes {@link #mMockContext}, {@link #mCarUserService}, and {@link #mCarInputService}.
- */
- private void init(String rotaryService) {
- mMockContext = new MockContext(mContext, rotaryService);
+ @Test
+ public void injectKeyEvent_delegatesToOnKeyEvent() {
+ KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER);
+ event.setDisplayId(android.view.Display.INVALID_DISPLAY);
- UserManager userManager = mock(UserManager.class);
- UserInfo userInfo = mock(UserInfo.class);
- doReturn(userInfo).when(userManager).getUserInfo(anyInt());
- UserHalService userHal = mock(UserHalService.class);
- CarUserManagerHelper carUserManagerHelper = mock(CarUserManagerHelper.class);
- IActivityManager iActivityManager = mock(IActivityManager.class);
- mCarUserService = new CarUserService(mMockContext, userHal, carUserManagerHelper,
- userManager, iActivityManager, /* maxRunningUsers= */ 2);
+ injectKeyEventAndVerify(event, CarOccupantZoneManager.DISPLAY_TYPE_MAIN);
- mCarInputService = new CarInputService(mMockContext, mInputHalService, mCarUserService,
- mHandler, mTelecomManager, mAssistUtils, mDefaultMainListener, mLastCallSupplier,
- /* customInputServiceComponent= */ null, mLongPressDelaySupplier);
- mCarInputService.init();
+ verify(mDefaultMainListener).onKeyEvent(event);
+ verify(mInstrumentClusterKeyListener, never()).onKeyEvent(event);
}
- private void sendUserLifecycleEvent(@CarUserManager.UserLifecycleEventType int eventType,
- @UserIdInt int userId) throws InterruptedException {
- // Add a blocking listener to ensure CarUserService event notification is completed
- // before proceeding with test execution.
- BlockingUserLifecycleListener blockingListener =
- BlockingUserLifecycleListener.forAnyEvent().build();
- mCarUserService.addUserLifecycleListener(blockingListener);
+ @Test
+ public void injectKeyEvent_sendingKeyEventWithDefaultDisplayAgainstClusterDisplayType() {
+ KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER);
+ event.setDisplayId(android.view.Display.DEFAULT_DISPLAY);
- runOnMainThreadAndWaitForIdle(() -> mCarUserService.onUserLifecycleEvent(eventType,
- /* timestampMs= */ 0, /* fromUserId= */ UserHandle.USER_NULL, userId));
- blockingListener.waitForAnyEvent();
+ injectKeyEventAndVerify(event, CarOccupantZoneManager.DISPLAY_TYPE_INSTRUMENT_CLUSTER);
+
+ verify(mDefaultMainListener, never()).onKeyEvent(event);
+ verify(mInstrumentClusterKeyListener).onKeyEvent(event);
}
- private static void runOnMainThreadAndWaitForIdle(Runnable r) {
- Handler.getMain().runWithScissors(r, DEFAULT_TIMEOUT_MS);
- // Run empty runnable to make sure that all posted handlers are done.
- Handler.getMain().runWithScissors(() -> { }, DEFAULT_TIMEOUT_MS);
+ private void injectKeyEventAndVerify(KeyEvent event, @DisplayTypeEnum int displayType) {
+ // Arrange
+ doReturn(PackageManager.PERMISSION_GRANTED).when(mContext).checkCallingOrSelfPermission(
+ android.Manifest.permission.INJECT_EVENTS);
+
+ int anyDriverUserId = 1;
+ int anyZoneId = 1;
+ int someDisplayId = Integer.MAX_VALUE;
+ when(mCarOccupantZoneService.getDriverUserId()).thenReturn(anyDriverUserId);
+ when(mCarOccupantZoneService.getOccupantZoneIdForUserId(anyInt())).thenReturn(anyZoneId);
+ when(mCarOccupantZoneService.getDisplayForOccupant(anyInt(), anyInt())).thenReturn(
+ someDisplayId);
+
+ assertThat(event.getDisplayId()).isNotEqualTo(someDisplayId);
+
+ // Act
+ mCarInputService.injectKeyEvent(event, displayType);
+
+ // Assert display id was updated as expected
+ assertThat(event.getDisplayId()).isEqualTo(someDisplayId);
}
private enum Key {DOWN, UP}
@@ -649,18 +564,11 @@
mCarInputService.onKeyEvent(
event,
display == Display.MAIN
- ? InputHalService.DISPLAY_MAIN
- : InputHalService.DISPLAY_INSTRUMENT_CLUSTER);
+ ? CarOccupantZoneManager.DISPLAY_TYPE_MAIN
+ : CarOccupantZoneManager.DISPLAY_TYPE_INSTRUMENT_CLUSTER);
return event;
}
- private ICarInputListener registerInputListener(InputFilter... handledKeys) {
- ICarInputListener listener = mock(ICarInputListener.class);
- mCarInputService.mCarInputListener = listener;
- mCarInputService.setHandledKeys(handledKeys);
- return listener;
- }
-
private CarProjectionManager.ProjectionKeyEventHandler registerProjectionKeyEventHandler(
int... events) {
BitSet eventSet = new BitSet();
diff --git a/tests/carservice_unit_test/src/com/android/car/CarOccupantZoneServiceTest.java b/tests/carservice_unit_test/src/com/android/car/CarOccupantZoneServiceTest.java
index e1c36db..3b8a724 100644
--- a/tests/carservice_unit_test/src/com/android/car/CarOccupantZoneServiceTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/CarOccupantZoneServiceTest.java
@@ -45,6 +45,7 @@
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
+import android.util.SparseArray;
import android.util.SparseIntArray;
import android.view.Display;
import android.view.DisplayAddress;
@@ -52,8 +53,8 @@
import com.android.car.CarOccupantZoneService.DisplayConfig;
import com.android.car.CarOccupantZoneService.DisplayInfo;
import com.android.car.CarOccupantZoneService.OccupantConfig;
+import com.android.car.internal.ICarServiceHelper;
import com.android.car.user.CarUserService;
-import com.android.internal.car.ICarServiceHelper;
import org.junit.After;
import org.junit.Before;
@@ -248,8 +249,8 @@
mService.init();
// key : zone id
- HashMap<Integer, OccupantZoneInfo> configs = mService.getOccupantsConfig();
- assertThat(configs).hasSize(DEFAULT_OCCUPANT_ZONES.length);
+ SparseArray<OccupantZoneInfo> configs = mService.getOccupantsConfig();
+ assertThat(configs.size()).isEqualTo(DEFAULT_OCCUPANT_ZONES.length);
assertThat(mZoneDriverLHD).isEqualTo(configs.get(0));
assertThat(mZoneFrontPassengerLHD).isEqualTo(configs.get(1));
assertThat(mZoneRearLeft).isEqualTo(configs.get(2));
@@ -272,8 +273,8 @@
mService.init();
// key : zone id
- HashMap<Integer, OccupantZoneInfo> configs = mService.getOccupantsConfig();
- assertThat(configs).hasSize(DEFAULT_OCCUPANT_ZONES.length);
+ SparseArray<OccupantZoneInfo> configs = mService.getOccupantsConfig();
+ assertThat(configs.size()).isEqualTo(DEFAULT_OCCUPANT_ZONES.length);
assertThat(new OccupantZoneInfo(0, CarOccupantZoneManager.OCCUPANT_TYPE_DRIVER,
VehicleAreaSeat.SEAT_ROW_1_RIGHT)).isEqualTo(configs.get(0));
assertThat(new OccupantZoneInfo(1, CarOccupantZoneManager.OCCUPANT_TYPE_FRONT_PASSENGER,
@@ -292,8 +293,8 @@
mService.init();
// key: display port address
- HashMap<Integer, DisplayConfig> configs = mService.getDisplayConfigs();
- assertThat(configs).hasSize(DEFAULT_OCCUPANT_DISPLAY_MAPPING.length);
+ SparseArray<DisplayConfig> configs = mService.getDisplayConfigs();
+ assertThat(configs.size()).isEqualTo(DEFAULT_OCCUPANT_DISPLAY_MAPPING.length);
assertDisplayConfig(configs.get(10), CarOccupantZoneManager.DISPLAY_TYPE_MAIN, 0);
assertDisplayConfig(configs.get(11), CarOccupantZoneManager.DISPLAY_TYPE_INSTRUMENT_CLUSTER,
0);
@@ -328,11 +329,11 @@
invalidProfileUser)).isFalse();
}
- private void assertDisplayWhitelist(int userId, int[] displays) {
- assertThat(mICarServiceHelper.mWhitelists).containsKey(userId);
- assertThat(mICarServiceHelper.mWhitelists.get(userId)).hasSize(displays.length);
+ private void assertDisplayAllowlist(int userId, int[] displays) {
+ assertThat(mICarServiceHelper.mAllowlists).containsKey(userId);
+ assertThat(mICarServiceHelper.mAllowlists.get(userId)).hasSize(displays.length);
for (int display : displays) {
- assertThat(mICarServiceHelper.mWhitelists.get(userId)).contains(display);
+ assertThat(mICarServiceHelper.mAllowlists.get(userId)).contains(display);
}
}
@@ -352,12 +353,12 @@
assertPassengerDisplaysFromDefaultConfig();
- mICarServiceHelper.mWhitelists.clear();
+ mICarServiceHelper.mAllowlists.clear();
assertThat(mManager.assignProfileUserToOccupantZone(mZoneFrontPassengerLHD,
PROFILE_USER1)).isTrue();
assertPassengerDisplaysFromDefaultConfig();
- assertDisplayWhitelist(CURRENT_USER, new int[] {mDisplay4.getDisplayId()});
- assertDisplayWhitelist(PROFILE_USER1, new int[] {mDisplay2.getDisplayId()});
+ assertDisplayAllowlist(CURRENT_USER, new int[] {mDisplay4.getDisplayId()});
+ assertDisplayAllowlist(PROFILE_USER1, new int[] {mDisplay2.getDisplayId()});
}
@Test
@@ -368,7 +369,7 @@
assertPassengerDisplaysFromDefaultConfig();
- mICarServiceHelper.mWhitelists.clear();
+ mICarServiceHelper.mAllowlists.clear();
doReturn(false).when(mUserManager).isUserRunning(PROFILE_USER1);
assertThat(mManager.assignProfileUserToOccupantZone(mZoneFrontPassengerLHD,
PROFILE_USER1)).isFalse();
@@ -384,15 +385,15 @@
PROFILE_USER1)).isTrue();
assertPassengerDisplaysFromDefaultConfig();
- assertDisplayWhitelist(CURRENT_USER, new int[] {mDisplay4.getDisplayId()});
- assertDisplayWhitelist(PROFILE_USER1, new int[] {mDisplay2.getDisplayId()});
+ assertDisplayAllowlist(CURRENT_USER, new int[] {mDisplay4.getDisplayId()});
+ assertDisplayAllowlist(PROFILE_USER1, new int[] {mDisplay2.getDisplayId()});
- mICarServiceHelper.mWhitelists.clear();
+ mICarServiceHelper.mAllowlists.clear();
assertThat(mManager.assignProfileUserToOccupantZone(mZoneFrontPassengerLHD,
PROFILE_USER2)).isTrue();
assertPassengerDisplaysFromDefaultConfig();
- assertDisplayWhitelist(CURRENT_USER, new int[] {mDisplay4.getDisplayId()});
- assertDisplayWhitelist(PROFILE_USER2, new int[] {mDisplay2.getDisplayId()});
+ assertDisplayAllowlist(CURRENT_USER, new int[] {mDisplay4.getDisplayId()});
+ assertDisplayAllowlist(PROFILE_USER2, new int[] {mDisplay2.getDisplayId()});
}
@Test
@@ -405,19 +406,19 @@
PROFILE_USER1)).isTrue();
assertPassengerDisplaysFromDefaultConfig();
- assertDisplayWhitelist(CURRENT_USER, new int[] {mDisplay4.getDisplayId()});
- assertDisplayWhitelist(PROFILE_USER1, new int[] {mDisplay2.getDisplayId()});
+ assertDisplayAllowlist(CURRENT_USER, new int[] {mDisplay4.getDisplayId()});
+ assertDisplayAllowlist(PROFILE_USER1, new int[] {mDisplay2.getDisplayId()});
- mICarServiceHelper.mWhitelists.clear();
+ mICarServiceHelper.mAllowlists.clear();
int newUserId = 200;
doReturn(newUserId).when(mService).getCurrentUser();
mService.mUserLifecycleListener.onEvent(new UserLifecycleEvent(
CarUserManager.USER_LIFECYCLE_EVENT_TYPE_SWITCHING, newUserId));
assertPassengerDisplaysFromDefaultConfig();
- assertDisplayWhitelist(newUserId, new int[] {mDisplay2.getDisplayId(),
+ assertDisplayAllowlist(newUserId, new int[] {mDisplay2.getDisplayId(),
mDisplay4.getDisplayId()});
- assertThat(mICarServiceHelper.mWhitelists).hasSize(1);
+ assertThat(mICarServiceHelper.mAllowlists).hasSize(1);
}
@Test
@@ -430,16 +431,16 @@
PROFILE_USER1)).isTrue();
assertPassengerDisplaysFromDefaultConfig();
- assertDisplayWhitelist(CURRENT_USER, new int[] {mDisplay4.getDisplayId()});
- assertDisplayWhitelist(PROFILE_USER1, new int[] {mDisplay2.getDisplayId()});
+ assertDisplayAllowlist(CURRENT_USER, new int[] {mDisplay4.getDisplayId()});
+ assertDisplayAllowlist(PROFILE_USER1, new int[] {mDisplay2.getDisplayId()});
- mICarServiceHelper.mWhitelists.clear();
+ mICarServiceHelper.mAllowlists.clear();
assertThat(mManager.assignProfileUserToOccupantZone(mZoneFrontPassengerLHD,
UserHandle.USER_NULL)).isTrue();
assertPassengerDisplaysFromDefaultConfig();
- assertDisplayWhitelist(CURRENT_USER, new int[] {mDisplay2.getDisplayId(),
+ assertDisplayAllowlist(CURRENT_USER, new int[] {mDisplay2.getDisplayId(),
mDisplay4.getDisplayId()});
- assertThat(mICarServiceHelper.mWhitelists).hasSize(1);
+ assertThat(mICarServiceHelper.mAllowlists).hasSize(1);
}
@Test
@@ -449,9 +450,9 @@
mService.setCarServiceHelper(mICarServiceHelper);
assertPassengerDisplaysFromDefaultConfig();
- assertDisplayWhitelist(CURRENT_USER, new int[] {mDisplay2.getDisplayId(),
+ assertDisplayAllowlist(CURRENT_USER, new int[] {mDisplay2.getDisplayId(),
mDisplay4.getDisplayId()});
- assertThat(mICarServiceHelper.mWhitelists).hasSize(1);
+ assertThat(mICarServiceHelper.mAllowlists).hasSize(1);
}
private void assertDisplayInfoIncluded(
@@ -505,7 +506,7 @@
SparseIntArray audioZoneIdToOccupantZoneMapping =
getDefaultAudioZoneToOccupantZoneMapping();
- HashMap<Integer, CarOccupantZoneManager.OccupantZoneInfo> occupantZoneConfigs =
+ SparseArray<CarOccupantZoneManager.OccupantZoneInfo> occupantZoneConfigs =
mService.getOccupantsConfig();
mService.setAudioZoneIdsForOccupantZoneIds(audioZoneIdToOccupantZoneMapping);
@@ -557,8 +558,8 @@
mService.init();
// key : zone id
- HashMap<Integer, OccupantConfig> configs = mService.getActiveOccupantConfigs();
- assertThat(configs).hasSize(3); // driver, front passenger, one rear
+ SparseArray<OccupantConfig> configs = mService.getActiveOccupantConfigs();
+ assertThat(configs.size()).isEqualTo(3); // driver, front passenger, one rear
assertOccupantConfig(configs.get(0), CURRENT_USER, new Display[]{mDisplay0, mDisplay1},
new int[]{CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
CarOccupantZoneManager.DISPLAY_TYPE_INSTRUMENT_CLUSTER});
@@ -584,8 +585,8 @@
mService.mDisplayListener.onDisplayAdded(3);
// key : zone id
- HashMap<Integer, OccupantConfig> configs = mService.getActiveOccupantConfigs();
- assertThat(configs).hasSize(4); // driver, front passenger, two rear
+ SparseArray<OccupantConfig> configs = mService.getActiveOccupantConfigs();
+ assertThat(configs.size()).isEqualTo(4); // driver, front passenger, two rear
assertOccupantConfig(configs.get(0), CURRENT_USER, new Display[]{mDisplay0, mDisplay1},
new int[]{CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
CarOccupantZoneManager.DISPLAY_TYPE_INSTRUMENT_CLUSTER});
@@ -609,8 +610,8 @@
mService.mDisplayListener.onDisplayRemoved(4);
// key : zone id
- HashMap<Integer, OccupantConfig> configs = mService.getActiveOccupantConfigs();
- assertThat(configs).hasSize(2); // driver, front passenger
+ SparseArray<OccupantConfig> configs = mService.getActiveOccupantConfigs();
+ assertThat(configs.size()).isEqualTo(2); // driver, front passenger
assertOccupantConfig(configs.get(0), CURRENT_USER, new Display[]{mDisplay0, mDisplay1},
new int[]{CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
CarOccupantZoneManager.DISPLAY_TYPE_INSTRUMENT_CLUSTER});
@@ -628,8 +629,8 @@
CarUserManager.USER_LIFECYCLE_EVENT_TYPE_SWITCHING, newUserId));
// key : zone id
- HashMap<Integer, OccupantConfig> configs = mService.getActiveOccupantConfigs();
- assertThat(configs).hasSize(3); // driver, front passenger, one rear
+ SparseArray<OccupantConfig> configs = mService.getActiveOccupantConfigs();
+ assertThat(configs.size()).isEqualTo(3); // driver, front passenger, one rear
assertOccupantConfig(configs.get(0), newUserId, new Display[]{mDisplay0, mDisplay1},
new int[]{CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
CarOccupantZoneManager.DISPLAY_TYPE_INSTRUMENT_CLUSTER});
@@ -904,8 +905,8 @@
private static class ICarServiceHelperImpl extends ICarServiceHelper.Stub {
private List<Integer> mPassengerDisplayIds;
- /** key: user id, value: display whitelistis */
- private HashMap<Integer, List<Integer>> mWhitelists = new HashMap<>();
+ /** key: user id, value: display allowlists */
+ private HashMap<Integer, List<Integer>> mAllowlists = new HashMap<>();
@Override
public int forceSuspend(int timeoutMs) {
@@ -913,8 +914,8 @@
}
@Override
- public void setDisplayWhitelistForUser(@UserIdInt int userId, int[] displayIds) {
- mWhitelists.put(userId, Arrays.stream(displayIds).boxed().collect(Collectors.toList()));
+ public void setDisplayAllowlistForUser(@UserIdInt int userId, int[] displayIds) {
+ mAllowlists.put(userId, Arrays.stream(displayIds).boxed().collect(Collectors.toList()));
}
@Override
diff --git a/tests/carservice_unit_test/src/com/android/car/CarProjectionServiceTest.java b/tests/carservice_unit_test/src/com/android/car/CarProjectionServiceTest.java
index 3a2ad2e..c00a801 100644
--- a/tests/carservice_unit_test/src/com/android/car/CarProjectionServiceTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/CarProjectionServiceTest.java
@@ -75,7 +75,7 @@
private static final String MD_NAME2 = "Device2";
private static final int DEFAULT_TIMEOUT_MS = 1000;
private static final String MD_EXTRA_KEY = "com.some.key.md";
- private static final String MD_EXTRA_VALUE = "this is dummy value";
+ private static final String MD_EXTRA_VALUE = "this is placeholder value";
private static final String STATUS_EXTRA_KEY = "com.some.key.status";
private static final String STATUS_EXTRA_VALUE = "additional status value";
diff --git a/tests/carservice_unit_test/src/com/android/car/SystemActivityMonitoringServiceTest.java b/tests/carservice_unit_test/src/com/android/car/SystemActivityMonitoringServiceTest.java
index 66a522e..32c1ac6 100644
--- a/tests/carservice_unit_test/src/com/android/car/SystemActivityMonitoringServiceTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/SystemActivityMonitoringServiceTest.java
@@ -87,22 +87,22 @@
@Test
public void testActivityBlocking() throws Exception {
- ComponentName blackListedActivity = toComponentName(getTestContext(), ActivityC.class);
+ ComponentName denyListedActivity = toComponentName(getTestContext(), ActivityC.class);
ComponentName blockingActivity = toComponentName(getTestContext(), BlockingActivity.class);
Intent blockingIntent = new Intent();
blockingIntent.setComponent(blockingActivity);
// start a black listed activity
- FilteredLaunchListener listenerBlackListed =
- new FilteredLaunchListener(blackListedActivity);
- mService.registerActivityLaunchListener(listenerBlackListed);
- startActivity(blackListedActivity);
- listenerBlackListed.assertTopTaskActivityLaunched();
+ FilteredLaunchListener listenerDenyListed =
+ new FilteredLaunchListener(denyListedActivity);
+ mService.registerActivityLaunchListener(listenerDenyListed);
+ startActivity(denyListedActivity);
+ listenerDenyListed.assertTopTaskActivityLaunched();
// Instead of start activity, invoke blockActivity.
FilteredLaunchListener listenerBlocking = new FilteredLaunchListener(blockingActivity);
mService.registerActivityLaunchListener(listenerBlocking);
- mService.blockActivity(listenerBlackListed.mTopTask, blockingIntent);
+ mService.blockActivity(listenerDenyListed.mTopTask, blockingIntent);
listenerBlocking.assertTopTaskActivityLaunched();
}
diff --git a/tests/carservice_unit_test/src/com/android/car/SystemStateInterfaceTest.java b/tests/carservice_unit_test/src/com/android/car/SystemStateInterfaceTest.java
index 838d066..af6f382 100644
--- a/tests/carservice_unit_test/src/com/android/car/SystemStateInterfaceTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/SystemStateInterfaceTest.java
@@ -22,8 +22,8 @@
import android.content.Context;
import android.os.RemoteException;
+import com.android.car.internal.ICarServiceHelper;
import com.android.car.systeminterface.SystemStateInterface;
-import com.android.internal.car.ICarServiceHelper;
import com.android.settingslib.utils.ThreadUtils;
import org.junit.Before;
@@ -92,7 +92,7 @@
return 0; // Success
}
@Override
- public void setDisplayWhitelistForUser(int userId, int[] displayIds) {
+ public void setDisplayAllowlistForUser(int userId, int[] displayIds) {
}
@Override
public void setPassengerDisplays(int[] displayIdsForPassenger) {
@@ -108,7 +108,7 @@
return 1; // Failure
}
@Override
- public void setDisplayWhitelistForUser(int userId, int[] displayIds) {
+ public void setDisplayAllowlistForUser(int userId, int[] displayIds) {
}
@Override
public void setPassengerDisplays(int[] displayIdsForPassenger) {
diff --git a/tests/carservice_unit_test/src/com/android/car/am/FixedActivityServiceTest.java b/tests/carservice_unit_test/src/com/android/car/am/FixedActivityServiceTest.java
index c3f57ad..7f8e3c2 100644
--- a/tests/carservice_unit_test/src/com/android/car/am/FixedActivityServiceTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/am/FixedActivityServiceTest.java
@@ -31,8 +31,8 @@
import android.annotation.UserIdInt;
import android.app.ActivityManager;
-import android.app.ActivityManager.StackInfo;
import android.app.ActivityOptions;
+import android.app.ActivityTaskManager.RootTaskInfo;
import android.app.IActivityManager;
import android.app.IActivityTaskManager;
import android.app.TaskStackListener;
@@ -144,9 +144,9 @@
ActivityOptions options = new ActivityOptions(new Bundle());
Intent intent = expectComponentAvailable("test_package", "com.test.dude", userId);
mockAmGetCurrentUser(userId);
- expectActivityStackInfo(
- createEmptyStackInfo(),
- createStackInfoList(intent, userIds, mValidDisplayId, taskIds)
+ expectRootTaskInfo(
+ createEmptyTaskInfo(),
+ createRootTaskInfoList(intent, userIds, mValidDisplayId, taskIds)
);
// No running activities
@@ -174,9 +174,9 @@
Intent anotherIntent = expectComponentAvailable("test_package_II", "com.test.dude_II",
userId);
mockAmGetCurrentUser(userId);
- expectActivityStackInfo(
- createEmptyStackInfo(),
- createStackInfoList(intent, userIds, mValidDisplayId, taskIds)
+ expectRootTaskInfo(
+ createEmptyTaskInfo(),
+ createRootTaskInfoList(intent, userIds, mValidDisplayId, taskIds)
);
// No running activities
@@ -204,9 +204,9 @@
ArgumentCaptor.forClass(BroadcastReceiver.class);
Intent intent = expectComponentAvailable(packageName, className, userId);
mockAmGetCurrentUser(userId);
- expectActivityStackInfo(
- createEmptyStackInfo(),
- createStackInfoList(intent, userIds, mValidDisplayId, taskIds)
+ expectRootTaskInfo(
+ createEmptyTaskInfo(),
+ createRootTaskInfoList(intent, userIds, mValidDisplayId, taskIds)
);
// No running activities
@@ -336,7 +336,7 @@
ActivityOptions options = new ActivityOptions(new Bundle());
Intent intent = expectComponentAvailable("test_package", "com.test.dude", userId);
mockAmGetCurrentUser(userId);
- expectActivityStackInfo(createStackInfoList(intent, userIds, mValidDisplayId, taskIds));
+ expectRootTaskInfo(createRootTaskInfoList(intent, userIds, mValidDisplayId, taskIds));
// Make FixedActivityService to update the taskIds.
boolean ret = mFixedActivityService.startFixedActivityModeForDisplayAndUser(intent,
@@ -345,8 +345,8 @@
Intent homeIntent = expectComponentAvailable("home", "homeActivity", userId);
int homeTaskId = 4567;
- when(mActivityTaskManager.getAllStackInfosOnDisplay(Display.DEFAULT_DISPLAY)).thenReturn(
- createStackInfoList(
+ when(mActivityTaskManager.getAllRootTaskInfosOnDisplay(Display.DEFAULT_DISPLAY)).thenReturn(
+ createRootTaskInfoList(
homeIntent, userIds, Display.DEFAULT_DISPLAY, new int[]{homeTaskId}));
mFixedActivityService.handleTaskFocusChanged(testTaskId, true);
@@ -358,7 +358,7 @@
// RunningActivityInfo.taskId examining 2nd task and it prevents from checking FixedActivity
// in handleTaskFocusChanged(). This test makes sure if the bug doesn't exist.
@Test
- public void testHandleTaskFocusChanged_returnForcusBackInTwoStackInfos() throws Exception {
+ public void testHandleTaskFocusChanged_returnForcusBackInTwoRootTaskInfos() throws Exception {
int userId = 10;
int testTaskId = 1234;
int[] userIds = new int[]{userId};
@@ -368,9 +368,9 @@
Intent intent = expectComponentAvailable("test_package", "com.test.dude", userId);
Intent intent2 = expectComponentAvailable("test_package2", "com.test.others", userId);
mockAmGetCurrentUser(userId);
- expectActivityStackInfo(Arrays.asList(
- createStackInfo(intent, userIds, mValidDisplayId, taskIds),
- createStackInfo(intent2, userIds, mValidDisplayId, taskIds2)));
+ expectRootTaskInfo(Arrays.asList(
+ createRootTaskInfo(intent, userIds, mValidDisplayId, taskIds),
+ createRootTaskInfo(intent2, userIds, mValidDisplayId, taskIds2)));
// Make FixedActivityService to update the taskIds.
boolean ret = mFixedActivityService.startFixedActivityModeForDisplayAndUser(intent,
@@ -379,8 +379,8 @@
Intent homeIntent = expectComponentAvailable("home", "homeActivity", userId);
int homeTaskId = 4567;
- when(mActivityTaskManager.getAllStackInfosOnDisplay(Display.DEFAULT_DISPLAY)).thenReturn(
- createStackInfoList(
+ when(mActivityTaskManager.getAllRootTaskInfosOnDisplay(Display.DEFAULT_DISPLAY)).thenReturn(
+ createRootTaskInfoList(
homeIntent, userIds, Display.DEFAULT_DISPLAY, new int[]{homeTaskId}));
mFixedActivityService.handleTaskFocusChanged(testTaskId, true);
@@ -397,7 +397,7 @@
ActivityOptions options = new ActivityOptions(new Bundle());
Intent intent = expectComponentAvailable("test_package", "com.test.dude", userId);
mockAmGetCurrentUser(userId);
- expectActivityStackInfo(createStackInfoList(intent, userIds, mValidDisplayId, taskIds));
+ expectRootTaskInfo(createRootTaskInfoList(intent, userIds, mValidDisplayId, taskIds));
// Make FixedActivityService to update the taskIds.
boolean ret = mFixedActivityService.startFixedActivityModeForDisplayAndUser(intent,
@@ -443,33 +443,33 @@
}
private void expectNoActivityStack() throws Exception {
- when(mActivityManager.getAllStackInfos()).thenReturn(createEmptyStackInfo());
+ when(mActivityManager.getAllRootTaskInfos()).thenReturn(createEmptyTaskInfo());
}
- private void expectActivityStackInfo(List<StackInfo> ...stackInfos) throws Exception {
- OngoingStubbing<List<StackInfo>> stub = when(mActivityManager.getAllStackInfos());
- for (List<StackInfo> stackInfo : stackInfos) {
- stub = stub.thenReturn(stackInfo);
+ private void expectRootTaskInfo(List<RootTaskInfo> ...taskInfos) throws Exception {
+ OngoingStubbing<List<RootTaskInfo>> stub = when(mActivityManager.getAllRootTaskInfos());
+ for (List<RootTaskInfo> taskInfo : taskInfos) {
+ stub = stub.thenReturn(taskInfo);
}
}
- private List<StackInfo> createEmptyStackInfo() {
- return new ArrayList<StackInfo>();
+ private List<RootTaskInfo> createEmptyTaskInfo() {
+ return new ArrayList<RootTaskInfo>();
}
- private StackInfo createStackInfo(Intent intent, @UserIdInt int[] userIds, int displayId,
- int[] taskIds) {
- StackInfo stackInfo = new StackInfo();
- stackInfo.taskUserIds = userIds;
- stackInfo.topActivity = intent.getComponent().clone();
- stackInfo.visible = true;
- stackInfo.displayId = displayId;
- stackInfo.taskIds = taskIds;
- return stackInfo;
- }
-
- private List<StackInfo> createStackInfoList(Intent intent, @UserIdInt int[] userIds,
+ private RootTaskInfo createRootTaskInfo(Intent intent, @UserIdInt int[] userIds,
int displayId, int[] taskIds) {
- return Arrays.asList(createStackInfo(intent, userIds, displayId, taskIds));
+ RootTaskInfo taskInfo = new RootTaskInfo();
+ taskInfo.childTaskUserIds = userIds;
+ taskInfo.topActivity = intent.getComponent().clone();
+ taskInfo.visible = true;
+ taskInfo.displayId = displayId;
+ taskInfo.childTaskIds = taskIds;
+ return taskInfo;
+ }
+
+ private List<RootTaskInfo> createRootTaskInfoList(Intent intent, @UserIdInt int[] userIds,
+ int displayId, int[] taskIds) {
+ return Arrays.asList(createRootTaskInfo(intent, userIds, displayId, taskIds));
}
}
diff --git a/tests/carservice_unit_test/src/com/android/car/hal/InputHalServiceTest.java b/tests/carservice_unit_test/src/com/android/car/hal/InputHalServiceTest.java
index 09c3d4a..2aecc12 100644
--- a/tests/carservice_unit_test/src/com/android/car/hal/InputHalServiceTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/hal/InputHalServiceTest.java
@@ -15,6 +15,8 @@
*/
package com.android.car.hal;
+import static android.hardware.automotive.vehicle.V2_0.CustomInputType.CUSTOM_EVENT_F1;
+
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
@@ -27,6 +29,9 @@
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.car.CarOccupantZoneManager;
+import android.car.input.CustomInputEvent;
+import android.hardware.automotive.vehicle.V2_0.VehicleDisplay;
import android.hardware.automotive.vehicle.V2_0.VehicleHwKeyInputAction;
import android.hardware.automotive.vehicle.V2_0.VehiclePropConfig;
import android.hardware.automotive.vehicle.V2_0.VehiclePropValue;
@@ -63,7 +68,9 @@
VehiclePropConfigBuilder.newBuilder(VehicleProperty.HW_KEY_INPUT).build();
private static final VehiclePropConfig HW_ROTARY_INPUT_CONFIG =
VehiclePropConfigBuilder.newBuilder(VehicleProperty.HW_ROTARY_INPUT).build();
- private static final int DISPLAY = 42;
+ private static final VehiclePropConfig HW_CUSTOM_INPUT_CONFIG =
+ VehiclePropConfigBuilder.newBuilder(VehicleProperty.HW_CUSTOM_INPUT).build();
+ private static final int DISPLAY_MAIN = VehicleDisplay.MAIN;
private enum Key { DOWN, UP }
@@ -104,6 +111,7 @@
assertThat(mInputHalService.isKeyInputSupported()).isTrue();
assertThat(mInputHalService.isRotaryInputSupported()).isFalse();
+ assertThat(mInputHalService.isCustomInputSupported()).isFalse();
}
@Test
@@ -117,20 +125,37 @@
assertThat(mInputHalService.isRotaryInputSupported()).isTrue();
assertThat(mInputHalService.isKeyInputSupported()).isFalse();
+ assertThat(mInputHalService.isCustomInputSupported()).isFalse();
}
@Test
- public void takesKeyAndRotaryInputProperty() {
+ public void takesCustomInputProperty() {
+ Set<VehiclePropConfig> offeredProps = ImmutableSet.of(
+ VehiclePropConfigBuilder.newBuilder(VehicleProperty.ABS_ACTIVE).build(),
+ HW_CUSTOM_INPUT_CONFIG,
+ VehiclePropConfigBuilder.newBuilder(VehicleProperty.CURRENT_GEAR).build());
+
+ mInputHalService.takeProperties(offeredProps);
+
+ assertThat(mInputHalService.isRotaryInputSupported()).isFalse();
+ assertThat(mInputHalService.isKeyInputSupported()).isFalse();
+ assertThat(mInputHalService.isCustomInputSupported()).isTrue();
+ }
+
+ @Test
+ public void takesKeyAndRotaryAndCustomInputProperty() {
Set<VehiclePropConfig> offeredProps = ImmutableSet.of(
VehiclePropConfigBuilder.newBuilder(VehicleProperty.ABS_ACTIVE).build(),
HW_KEY_INPUT_CONFIG,
HW_ROTARY_INPUT_CONFIG,
+ HW_CUSTOM_INPUT_CONFIG,
VehiclePropConfigBuilder.newBuilder(VehicleProperty.CURRENT_GEAR).build());
mInputHalService.takeProperties(offeredProps);
assertThat(mInputHalService.isKeyInputSupported()).isTrue();
assertThat(mInputHalService.isRotaryInputSupported()).isTrue();
+ assertThat(mInputHalService.isCustomInputSupported()).isTrue();
}
@Test
@@ -153,7 +178,7 @@
KeyEvent event = inv.getArgument(0);
events.add(event.copy());
return null;
- }).when(mInputListener).onKeyEvent(any(), eq(DISPLAY));
+ }).when(mInputListener).onKeyEvent(any(), eq(CarOccupantZoneManager.DISPLAY_TYPE_MAIN));
mInputHalService.onHalEvents(
ImmutableList.of(
@@ -285,7 +310,8 @@
assertThat(upEvent.getAction()).isEqualTo(KeyEvent.ACTION_UP);
assertThat(upEvent.getEventTime()).isEqualTo(timestampMillis);
- events.forEach(KeyEvent::recycle);*/
+ events.forEach(KeyEvent::recycle);
+ */
}
@Test
@@ -325,6 +351,32 @@
events.forEach(KeyEvent::recycle);*/
}
+ @Test
+ public void dispatchesCustomInputEvent() {
+ // Arrange mInputListener to capture incoming CustomInputEvent
+ subscribeListener();
+
+ List<CustomInputEvent> events = new ArrayList<>();
+ doAnswer(invocation -> {
+ CustomInputEvent event = invocation.getArgument(0);
+ events.add(event);
+ return null;
+ }).when(mInputListener).onCustomInputEvent(any());
+
+ // Arrange
+ int repeatCounter = 1;
+ VehiclePropValue customInputPropValue = makeCustomInputPropValue(
+ CUSTOM_EVENT_F1, DISPLAY_MAIN, repeatCounter);
+
+ // Act
+ mInputHalService.onHalEvents(ImmutableList.of(customInputPropValue));
+
+ // Assert
+ assertThat(events).containsExactly(new CustomInputEvent(
+ CustomInputEvent.INPUT_CODE_F1, CarOccupantZoneManager.DISPLAY_TYPE_MAIN,
+ repeatCounter));
+ }
+
private void subscribeListener() {
mInputHalService.takeProperties(ImmutableSet.of(HW_KEY_INPUT_CONFIG));
assertThat(mInputHalService.isKeyInputSupported()).isTrue();
@@ -342,7 +394,7 @@
? VehicleHwKeyInputAction.ACTION_DOWN
: VehicleHwKeyInputAction.ACTION_UP));
v.value.int32Values.add(code);
- v.value.int32Values.add(DISPLAY);
+ v.value.int32Values.add(DISPLAY_MAIN);
return v;
}
@@ -350,7 +402,8 @@
ArgumentCaptor<KeyEvent> captor = ArgumentCaptor.forClass(KeyEvent.class);
reset(mInputListener);
mInputHalService.onHalEvents(ImmutableList.of(makeKeyPropValue(action, code)));
- verify(mInputListener).onKeyEvent(captor.capture(), eq(DISPLAY));
+ verify(mInputListener).onKeyEvent(captor.capture(),
+ eq(CarOccupantZoneManager.DISPLAY_TYPE_MAIN));
reset(mInputListener);
return captor.getValue();
}
@@ -361,7 +414,7 @@
// Only Key.down can have indents.
v.value.int32Values.add(VehicleHwKeyInputAction.ACTION_DOWN);
v.value.int32Values.add(code);
- v.value.int32Values.add(DISPLAY);
+ v.value.int32Values.add(DISPLAY_MAIN);
v.value.int32Values.add(indents);
return v;
}
@@ -371,7 +424,8 @@
reset(mInputListener);
mInputHalService.onHalEvents(
ImmutableList.of(makeKeyPropValueWithIndents(code, indents)));
- verify(mInputListener, times(indents)).onKeyEvent(captor.capture(), eq(DISPLAY));
+ verify(mInputListener, times(indents)).onKeyEvent(captor.capture(),
+ eq(CarOccupantZoneManager.DISPLAY_TYPE_MAIN));
reset(mInputListener);
return captor.getValue();
}
@@ -382,11 +436,21 @@
v.prop = VehicleProperty.HW_ROTARY_INPUT;
v.value.int32Values.add(rotaryInputType);
v.value.int32Values.add(detents);
- v.value.int32Values.add(DISPLAY);
+ v.value.int32Values.add(DISPLAY_MAIN);
for (int i = 0; i < Math.abs(detents) - 1; i++) {
v.value.int32Values.add(delayBetweenDetents);
}
v.timestamp = timestamp;
return v;
}
+
+ private VehiclePropValue makeCustomInputPropValue(int inputCode, int targetDisplayType,
+ int repeatCounter) {
+ VehiclePropValue v = new VehiclePropValue();
+ v.prop = VehicleProperty.HW_CUSTOM_INPUT;
+ v.value.int32Values.add(inputCode);
+ v.value.int32Values.add(targetDisplayType);
+ v.value.int32Values.add(repeatCounter);
+ return v;
+ }
}
\ No newline at end of file
diff --git a/tests/carservice_unit_test/src/com/android/car/MockedPowerHalService.java b/tests/carservice_unit_test/src/com/android/car/hal/MockedPowerHalService.java
similarity index 84%
rename from tests/carservice_unit_test/src/com/android/car/MockedPowerHalService.java
rename to tests/carservice_unit_test/src/com/android/car/hal/MockedPowerHalService.java
index 770cc85..6c2b4dc 100644
--- a/tests/carservice_unit_test/src/com/android/car/MockedPowerHalService.java
+++ b/tests/carservice_unit_test/src/com/android/car/hal/MockedPowerHalService.java
@@ -13,14 +13,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.car;
+package com.android.car.hal;
+
+import static org.mockito.Mockito.mock;
import android.hardware.automotive.vehicle.V2_0.VehicleApPowerStateReq;
import android.util.Log;
-import com.android.car.hal.PowerHalService;
-import com.android.car.hal.VehicleHal;
-
import java.util.LinkedList;
public class MockedPowerHalService extends PowerHalService {
@@ -35,13 +34,25 @@
private final LinkedList<int[]> mSentStates = new LinkedList<>();
- interface SignalListener {
+ public interface SignalListener {
void sendingSignal(int signal);
}
+ private static VehicleHal createVehicleHalWithMockedServices() {
+ VehicleHal mockedVehicleHal = new VehicleHal(
+ mock(PowerHalService.class),
+ mock(PropertyHalService.class),
+ mock(InputHalService.class),
+ mock(VmsHalService.class),
+ mock(UserHalService.class),
+ mock(DiagnosticHalService.class),
+ mock(HalClient.class));
+ return mockedVehicleHal;
+ }
+
public MockedPowerHalService(boolean isPowerStateSupported, boolean isDeepSleepAllowed,
boolean isTimedWakeupAllowed) {
- super(new VehicleHal(null, null, null, null));
+ super(createVehicleHalWithMockedServices());
mIsPowerStateSupported = isPowerStateSupported;
mIsDeepSleepAllowed = isDeepSleepAllowed;
mIsTimedWakeupAllowed = isTimedWakeupAllowed;
@@ -58,8 +69,14 @@
}
@Override
+ public void sendOn() {
+ Log.i(TAG, "sendOn");
+ doSendState(SET_ON, 0);
+ }
+
+ @Override
public void sendWaitForVhal() {
- Log.i(TAG, "sendBootComplete");
+ Log.i(TAG, "sendWaitForVhal");
doSendState(SET_WAIT_FOR_VHAL, 0);
}
diff --git a/tests/carservice_unit_test/src/com/android/car/hal/VehicleHalTest.java b/tests/carservice_unit_test/src/com/android/car/hal/VehicleHalTest.java
new file mode 100644
index 0000000..9b57e61
--- /dev/null
+++ b/tests/carservice_unit_test/src/com/android/car/hal/VehicleHalTest.java
@@ -0,0 +1,356 @@
+/*
+ * Copyright (C) 2020 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.car.hal;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyInt;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.car.hardware.property.CarPropertyManager;
+import android.hardware.automotive.vehicle.V2_0.IVehicle;
+import android.hardware.automotive.vehicle.V2_0.IVehicleCallback;
+import android.hardware.automotive.vehicle.V2_0.SubscribeOptions;
+import android.hardware.automotive.vehicle.V2_0.VehiclePropConfig;
+import android.hardware.automotive.vehicle.V2_0.VehiclePropValue;
+import android.hardware.automotive.vehicle.V2_0.VehiclePropertyAccess;
+import android.hardware.automotive.vehicle.V2_0.VehiclePropertyChangeMode;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.junit.MockitoJUnitRunner;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.List;
+
+@RunWith(MockitoJUnitRunner.class)
+public final class VehicleHalTest {
+
+ private static final int SOME_READ_ON_CHANGE_PROPERTY = 0x01;
+ private static final int SOME_READ_WRITE_STATIC_PROPERTY = 0x02;
+ private static final int UNSUPPORTED_PROPERTY = -1;
+
+ private static final float ANY_SAMPLING_RATE = 60f;
+ private static final int NO_FLAGS = 0;
+
+ @Mock private IVehicle mIVehicle;
+
+ @Mock private PowerHalService mPowerHalService;
+ @Mock private PropertyHalService mPropertyHalService;
+ @Mock private InputHalService mInputHalService;
+ @Mock private VmsHalService mVmsHalService;
+ @Mock private UserHalService mUserHalService;
+ @Mock private DiagnosticHalService mDiagnosticHalService;
+ @Mock private HalClient mHalClient;
+
+ private VehicleHal mVehicleHal;
+
+ /** Hal services configurations */
+ private final ArrayList<VehiclePropConfig> mConfigs = new ArrayList<>();
+
+ @Before
+ public void setUp() throws Exception {
+ mVehicleHal = new VehicleHal(mPowerHalService,
+ mPropertyHalService, mInputHalService, mVmsHalService, mUserHalService,
+ mDiagnosticHalService, mHalClient);
+
+ mConfigs.clear();
+
+ // Initialize PowerHAL service with a READ_WRITE and ON_CHANGE property
+ when(mPowerHalService.getAllSupportedProperties()).thenReturn(
+ new int[]{SOME_READ_ON_CHANGE_PROPERTY});
+ VehiclePropConfig powerHalConfig = new VehiclePropConfig();
+ powerHalConfig.prop = SOME_READ_ON_CHANGE_PROPERTY;
+ powerHalConfig.access = VehiclePropertyAccess.READ_WRITE;
+ powerHalConfig.changeMode = VehiclePropertyChangeMode.ON_CHANGE;
+ mConfigs.add(powerHalConfig);
+ assertThat(VehicleHal.isPropertySubscribable(powerHalConfig)).isTrue();
+
+ // Initialize PropertyHAL service with a READ_WRITE and STATIC property
+ when(mPropertyHalService.getAllSupportedProperties()).thenReturn(
+ new int[]{SOME_READ_WRITE_STATIC_PROPERTY});
+ VehiclePropConfig propertyHalConfig = new VehiclePropConfig();
+ propertyHalConfig.prop = SOME_READ_WRITE_STATIC_PROPERTY;
+ propertyHalConfig.access = VehiclePropertyAccess.READ_WRITE;
+ propertyHalConfig.changeMode = VehiclePropertyChangeMode.STATIC;
+ mConfigs.add(propertyHalConfig);
+ assertThat(VehicleHal.isPropertySubscribable(propertyHalConfig)).isFalse();
+
+ // Initialize the remaining services with empty properties
+ when(mInputHalService.getAllSupportedProperties()).thenReturn(new int[0]);
+ when(mVmsHalService.getAllSupportedProperties()).thenReturn(new int[0]);
+ when(mUserHalService.getAllSupportedProperties()).thenReturn(new int[0]);
+ when(mDiagnosticHalService.getAllSupportedProperties()).thenReturn(new int[0]);
+
+ when(mHalClient.getAllPropConfigs()).thenReturn(mConfigs);
+ mVehicleHal.init();
+ }
+
+ @Test
+ public void testSubscribeProperty_registeringReadWriteAndOnChangeProperty() throws Exception {
+ // Act
+ mVehicleHal.subscribeProperty(mPowerHalService, SOME_READ_ON_CHANGE_PROPERTY,
+ ANY_SAMPLING_RATE, NO_FLAGS);
+
+ // Assert
+ SubscribeOptions expectedOptions = new SubscribeOptions();
+ expectedOptions.propId = SOME_READ_ON_CHANGE_PROPERTY;
+ expectedOptions.sampleRate = ANY_SAMPLING_RATE;
+ expectedOptions.flags = NO_FLAGS;
+
+ verify(mHalClient).subscribe(eq(expectedOptions));
+ }
+
+ @Test
+ public void testUnsubscribeProperty_subscribedProperty() throws Exception {
+ //Act
+ mVehicleHal.unsubscribeProperty(mPowerHalService, SOME_READ_ON_CHANGE_PROPERTY);
+
+ // Assert
+ verify(mHalClient).unsubscribe(eq(SOME_READ_ON_CHANGE_PROPERTY));
+ }
+
+ @Test
+ public void testUnsubscribeProperty_unsubscribedProperty() throws Exception {
+ //Act
+ mVehicleHal.unsubscribeProperty(mPowerHalService, UNSUPPORTED_PROPERTY);
+
+ // Assert
+ verify(mHalClient, never()).unsubscribe(anyInt());
+ }
+
+ @Test
+ public void testSubscribeProperty_registeringStaticProperty() throws Exception {
+ // Act
+ mVehicleHal.subscribeProperty(mPowerHalService, SOME_READ_WRITE_STATIC_PROPERTY,
+ ANY_SAMPLING_RATE, NO_FLAGS);
+
+ // Assert
+ verify(mHalClient, never()).subscribe(any(SubscribeOptions.class));
+ }
+
+ @Test
+ public void testGetSampleRate_unsupportedProperty() {
+ assertThat(mVehicleHal.getSampleRate(UNSUPPORTED_PROPERTY)).isEqualTo(
+ VehicleHal.NO_SAMPLE_RATE);
+ }
+
+ @Test
+ public void testGetSampleRate_supportedAndRegisteredProperty() {
+ // Act
+ mVehicleHal.subscribeProperty(mPowerHalService, SOME_READ_ON_CHANGE_PROPERTY,
+ ANY_SAMPLING_RATE, NO_FLAGS);
+
+ // Assert
+ assertThat(mVehicleHal.getSampleRate(SOME_READ_ON_CHANGE_PROPERTY)).isEqualTo(
+ ANY_SAMPLING_RATE);
+ }
+
+ @Test
+ public void testOnPropertyEvent() {
+ // Arrange
+ List<VehiclePropValue> dispatchList = mock(List.class);
+ when(mPowerHalService.getDispatchList()).thenReturn(dispatchList);
+
+ VehiclePropValue propValue = new VehiclePropValue();
+ propValue.prop = SOME_READ_ON_CHANGE_PROPERTY;
+ propValue.areaId = VehicleHal.NO_AREA;
+ ArrayList<VehiclePropValue> propValues = new ArrayList<>();
+ propValues.add(propValue);
+
+ // Act
+ mVehicleHal.onPropertyEvent(propValues);
+
+ // Assert
+ verify(dispatchList).add(propValue);
+ verify(mPowerHalService).onHalEvents(dispatchList);
+ verify(dispatchList).clear();
+ }
+
+ @Test
+ public void testOnPropertySetError() {
+ // Arrange
+ int errorCode = CarPropertyManager.CAR_SET_PROPERTY_ERROR_CODE_TRY_AGAIN;
+ int propId = SOME_READ_ON_CHANGE_PROPERTY;
+ int areaId = VehicleHal.NO_AREA;
+
+ // Act
+ mVehicleHal.onPropertySetError(errorCode, propId, areaId);
+
+ // Assert
+ verify(mPowerHalService).onPropertySetError(propId, areaId, errorCode);
+ }
+
+ @Test
+ public void testInjectOnPropertySetError() {
+ // Arrange
+ int errorCode = CarPropertyManager.CAR_SET_PROPERTY_ERROR_CODE_TRY_AGAIN;
+ int propId = SOME_READ_ON_CHANGE_PROPERTY;
+ int areaId = VehicleHal.NO_AREA;
+
+ // Act
+ mVehicleHal.injectOnPropertySetError("" + propId, "" + areaId, "" + errorCode);
+
+ // Assert
+ verify(mPowerHalService).onPropertySetError(propId, areaId, errorCode);
+ }
+
+ @Test
+ public void testVehicleHalReconnected() throws Exception {
+ // Arrange
+ IVehicle mockVehicle = mock(IVehicle.class);
+
+ // Act
+ mVehicleHal.vehicleHalReconnected(mockVehicle);
+
+ // Assert
+ ArgumentCaptor<IVehicleCallback> vehicleCallbackCaptor = ArgumentCaptor.forClass(
+ IVehicleCallback.class);
+ ArgumentCaptor<ArrayList> optionsCaptor = ArgumentCaptor.forClass(ArrayList.class);
+ verify(mockVehicle, times(1)).subscribe(vehicleCallbackCaptor.capture(),
+ optionsCaptor.capture());
+ assertThat(vehicleCallbackCaptor.getValue()).isNotNull();
+ assertThat(optionsCaptor.getValue()).isEmpty();
+ }
+
+ @Test
+ public void testGetIfAvailableOrFail() {
+ // Arrange
+ VehiclePropValue propValue = new VehiclePropValue();
+ propValue.prop = SOME_READ_ON_CHANGE_PROPERTY;
+ propValue.areaId = VehicleHal.NO_AREA;
+ when(mHalClient.getValue(any(VehiclePropValue.class))).thenReturn(propValue);
+
+ // Act
+ VehiclePropValue actual = mVehicleHal.getIfAvailableOrFail(SOME_READ_ON_CHANGE_PROPERTY,
+ /* numberOfRetries= */ 1);
+
+ // Assert
+ assertThat(actual).isEqualTo(propValue);
+ }
+
+ // Testing dump methods
+
+ @Test
+ public void testDump() {
+ // Arrange
+ StringWriter writer = new StringWriter();
+ PrintWriter printWriter = new PrintWriter(writer);
+
+ // Act
+ mVehicleHal.dump(printWriter);
+
+ // Assert
+ String actual = writer.toString();
+ assertThat(actual).contains("Prop: 0x00000001, service: mPowerHalService");
+ assertThat(actual).contains("Prop: 0x00000002, service: mPropertyHalService");
+ }
+
+ @Test
+ public void testDumpListHals() {
+ // Arrange
+ StringWriter writer = new StringWriter();
+ PrintWriter printWriter = new PrintWriter(writer);
+
+ // Act
+ mVehicleHal.dumpListHals(printWriter);
+
+ // Assert
+ assertServiceNamesAreDumped(writer.toString());
+ }
+
+ @Test
+ public void testDumpSpecificHals() {
+ // Arrange
+ StringWriter writer = new StringWriter();
+ PrintWriter printWriter = new PrintWriter(writer);
+
+ // Act
+ mVehicleHal.dumpListHals(printWriter);
+
+ // Assert
+ assertServiceNamesAreDumped(writer.toString());
+ }
+
+ private void assertServiceNamesAreDumped(String actual) {
+ assertThat(actual).contains("com.android.car.hal.PowerHalService");
+ assertThat(actual).contains("com.android.car.hal.InputHalService");
+ assertThat(actual).contains("com.android.car.hal.DiagnosticHalService");
+ assertThat(actual).contains("com.android.car.hal.VmsHalService");
+ assertThat(actual).contains("com.android.car.hal.UserHalService");
+ assertThat(actual).contains("com.android.car.hal.PropertyHalService");
+ }
+
+ @Test
+ public void testDumpPropertyValueByCommend() {
+ // Arrange
+ StringWriter writer = new StringWriter();
+ PrintWriter printWriter = new PrintWriter(writer);
+
+ VehiclePropValue propValue = new VehiclePropValue();
+ propValue.value = new VehiclePropValue.RawValue();
+ propValue.value.stringValue = "some_value";
+ when(mHalClient.getValue(any(VehiclePropValue.class))).thenReturn(propValue);
+
+ // Act
+ mVehicleHal.dumpPropertyValueByCommend(printWriter, /* propId= */ "", /* areaId= */"");
+
+ // Assert
+ assertThat(writer.toString()).contains("string: some_value");
+ }
+
+ // Testing vehicle hal property getters
+
+ @Test
+ public void testGetForPropertyIdAndAreaId() {
+ // Arrange
+ int propertyId = 123; // Any property id
+ int areaId = 456; // Any area id
+
+ // Act
+ mVehicleHal.get(propertyId, areaId);
+
+ // Assert
+ VehiclePropValue expectedPropValue = new VehiclePropValue();
+ expectedPropValue.prop = propertyId;
+ expectedPropValue.areaId = areaId;
+ verify(mHalClient).getValue(eq(expectedPropValue));
+ }
+
+ @Test
+ public void testGet_VehiclePropValue() {
+ // Arrange
+ VehiclePropValue propValue = new VehiclePropValue();
+
+ // Act
+ mVehicleHal.get(propValue);
+
+ // Assert
+ verify(mHalClient).getValue(propValue);
+ }
+}
diff --git a/tests/carservice_unit_test/src/com/android/car/hardware/power/CarPowerManagerUnitTest.java b/tests/carservice_unit_test/src/com/android/car/hardware/power/CarPowerManagerUnitTest.java
index ae86874..47e707a 100644
--- a/tests/carservice_unit_test/src/com/android/car/hardware/power/CarPowerManagerUnitTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/hardware/power/CarPowerManagerUnitTest.java
@@ -33,14 +33,17 @@
import androidx.test.platform.app.InstrumentationRegistry;
-import com.android.car.CarPowerManagementService;
-import com.android.car.MockedPowerHalService;
+import com.android.car.CarLocalServices;
import com.android.car.R;
+import com.android.car.hal.MockedPowerHalService;
import com.android.car.hal.PowerHalService;
import com.android.car.hal.PowerHalService.PowerState;
+import com.android.car.power.CarPowerManagementService;
+import com.android.car.power.SilentModeController;
import com.android.car.systeminterface.DisplayInterface;
import com.android.car.systeminterface.SystemInterface;
import com.android.car.systeminterface.SystemStateInterface;
+import com.android.car.user.CarUserService;
import com.android.internal.app.IVoiceInteractionManagerService;
import org.junit.After;
@@ -69,12 +72,15 @@
private SystemInterface mSystemInterface;
private CarPowerManagementService mService;
private CarPowerManager mCarPowerManager;
+ private SilentModeController mSilentModeController;
@Mock
private Resources mResources;
@Mock
private Car mCar;
@Mock
+ private CarUserService mCarUserService;
+ @Mock
private IVoiceInteractionManagerService mVoiceInteractionManagerService;
@Before
@@ -91,6 +97,7 @@
@After
public void tearDown() throws Exception {
+ CarLocalServices.removeServiceForTest(SilentModeController.class);
if (mService != null) {
mService.release();
}
@@ -202,12 +209,13 @@
*/
private void setService() throws Exception {
Log.i(TAG, "setService(): overridden overlay properties: "
- + "config_disableUserSwitchDuringResume="
- + mResources.getBoolean(R.bool.config_disableUserSwitchDuringResume)
+ ", maxGarageModeRunningDurationInSecs="
+ mResources.getInteger(R.integer.maxGarageModeRunningDurationInSecs));
+ mSilentModeController = new SilentModeController(mContext, mSystemInterface,
+ mVoiceInteractionManagerService, "");
+ CarLocalServices.addService(SilentModeController.class, mSilentModeController);
mService = new CarPowerManagementService(mContext, mResources, mPowerHal,
- mSystemInterface, null, null, null, mVoiceInteractionManagerService);
+ mSystemInterface, null, mCarUserService);
mService.init();
mService.setShutdownTimersForTest(0, 0);
assertStateReceived(MockedPowerHalService.SET_WAIT_FOR_VHAL, 0);
@@ -223,7 +231,8 @@
*/
private void setPowerOn() throws Exception {
setPowerState(VehicleApPowerStateReq.ON, 0);
- assertThat(mDisplayInterface.waitForDisplayStateChange(WAIT_TIMEOUT_MS)).isTrue();
+ int[] state = mPowerHal.waitForSend(WAIT_TIMEOUT_MS);
+ assertThat(state[0]).isEqualTo(PowerHalService.SET_ON);
}
/**
diff --git a/tests/carservice_unit_test/src/com/android/car/media/CarMediaServiceTest.java b/tests/carservice_unit_test/src/com/android/car/media/CarMediaServiceTest.java
index fe45782..f560bca 100644
--- a/tests/carservice_unit_test/src/com/android/car/media/CarMediaServiceTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/media/CarMediaServiceTest.java
@@ -53,10 +53,16 @@
import android.os.IBinder;
import android.os.UserManager;
+import com.android.car.CarLocalServices;
import com.android.car.CarMediaService;
import com.android.car.R;
+import com.android.car.power.CarPowerManagementService;
+import com.android.car.power.SilentModeController;
+import com.android.car.systeminterface.SystemInterface;
import com.android.car.user.CarUserService;
+import com.android.internal.app.IVoiceInteractionManagerService;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
@@ -84,8 +90,13 @@
@Mock private UserManager mUserManager;
@Mock private PackageManager mPackageManager;
@Mock private MediaSessionManager mMediaSessionManager;
+ @Mock private SystemInterface mMockSystemInterface;
+ @Mock private IVoiceInteractionManagerService mMockVoiceService;
+ @Mock private CarPowerManagementService mMockCarPowerManagementService;
private CarMediaService mCarMediaService;
+ private SilentModeController mSilentModeController;
+ private SilentModeController.SilentModeListener mSilentModeListener;
@Override
protected void onSessionBuilder(CustomMockitoSessionBuilder builder) {
@@ -106,6 +117,19 @@
doReturn(mMediaSessionManager).when(mContext).getSystemService(MediaSessionManager.class);
mCarMediaService = new CarMediaService(mContext, mUserService);
+ mSilentModeController = new SilentModeController(mContext, mMockSystemInterface,
+ mMockVoiceService, "");
+ CarLocalServices.addService(SilentModeController.class, mSilentModeController);
+ CarLocalServices.addService(CarPowerManagementService.class,
+ mMockCarPowerManagementService);
+ mSilentModeController.init();
+ mSilentModeController.setPowerOnForTest(true);
+ }
+
+ @After
+ public void tearDown() {
+ CarLocalServices.removeServiceForTest(SilentModeController.class);
+ CarLocalServices.removeServiceForTest(CarPowerManagementService.class);
}
@Test
diff --git a/tests/carservice_unit_test/src/com/android/car/pm/VendorServiceControllerTest.java b/tests/carservice_unit_test/src/com/android/car/pm/VendorServiceControllerTest.java
index ddea0c0..e890148 100644
--- a/tests/carservice_unit_test/src/com/android/car/pm/VendorServiceControllerTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/pm/VendorServiceControllerTest.java
@@ -29,8 +29,6 @@
import android.car.test.mocks.AbstractExtendedMockitoTestCase;
import android.car.testapi.BlockingUserLifecycleListener;
import android.car.user.CarUserManager;
-import android.car.user.CarUserManager.UserLifecycleEventType;
-import android.car.userlib.CarUserManagerHelper;
import android.content.ComponentName;
import android.content.Context;
import android.content.ContextWrapper;
@@ -47,7 +45,9 @@
import androidx.test.core.app.ApplicationProvider;
import com.android.car.CarLocalServices;
+import com.android.car.CarUxRestrictionsManagerService;
import com.android.car.hal.UserHalService;
+import com.android.car.internal.common.CommonConstants.UserLifecycleEventType;
import com.android.car.user.CarUserService;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.util.Preconditions;
@@ -56,7 +56,6 @@
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
-import org.mockito.Mockito;
import java.util.ArrayList;
import java.util.HashMap;
@@ -93,8 +92,10 @@
@Mock
private UserHalService mUserHal;
+ @Mock
+ private CarUxRestrictionsManagerService mUxRestrictionService;
+
private ServiceLauncherContext mContext;
- private CarUserManagerHelper mUserManagerHelper;
private CarUserService mCarUserService;
private VendorServiceController mController;
@@ -107,9 +108,8 @@
@Before
public void setUp() {
mContext = new ServiceLauncherContext(ApplicationProvider.getApplicationContext());
- mUserManagerHelper = Mockito.spy(new CarUserManagerHelper(mContext));
- mCarUserService = new CarUserService(mContext, mUserHal, mUserManagerHelper, mUserManager,
- ActivityManager.getService(), 2 /* max running users */);
+ mCarUserService = new CarUserService(mContext, mUserHal, mUserManager,
+ ActivityManager.getService(), /* maxRunningUsers= */ 2, mUxRestrictionService);
CarLocalServices.addService(CarUserService.class, mCarUserService);
mController = new VendorServiceController(mContext, Looper.getMainLooper());
@@ -219,7 +219,7 @@
mCarUserService.addUserLifecycleListener(blockingListener);
runOnMainThreadAndWaitForIdle(() -> mCarUserService.onUserLifecycleEvent(eventType,
- /* timestampMs= */ 0, /* fromUserId= */ UserHandle.USER_NULL, userId));
+ /* fromUserId= */ UserHandle.USER_NULL, userId));
blockingListener.waitForAnyEvent();
}
diff --git a/tests/carservice_unit_test/src/com/android/car/CarPowerManagementServiceTest.java b/tests/carservice_unit_test/src/com/android/car/power/CarPowerManagementServiceTest.java
similarity index 69%
rename from tests/carservice_unit_test/src/com/android/car/CarPowerManagementServiceTest.java
rename to tests/carservice_unit_test/src/com/android/car/power/CarPowerManagementServiceTest.java
index df2d9bf..c7eb876 100644
--- a/tests/carservice_unit_test/src/com/android/car/CarPowerManagementServiceTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/power/CarPowerManagementServiceTest.java
@@ -14,33 +14,22 @@
* limitations under the License.
*/
-package com.android.car;
+package com.android.car.power;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
-import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.fail;
-import static org.mockito.ArgumentMatchers.argThat;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.ArgumentMatchers.notNull;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.timeout;
+import static org.mockito.Mockito.times;
import static org.mockito.Mockito.when;
import android.app.ActivityManager;
import android.car.test.mocks.AbstractExtendedMockitoTestCase;
-import android.car.test.util.Visitor;
-import android.car.userlib.HalCallback;
-import android.car.userlib.InitialUserSetter;
import android.content.Context;
import android.content.pm.UserInfo;
import android.content.res.Resources;
-import android.hardware.automotive.vehicle.V2_0.InitialUserInfoRequestType;
-import android.hardware.automotive.vehicle.V2_0.InitialUserInfoResponse;
-import android.hardware.automotive.vehicle.V2_0.InitialUserInfoResponseAction;
import android.hardware.automotive.vehicle.V2_0.VehicleApPowerStateReq;
import android.hardware.automotive.vehicle.V2_0.VehicleApPowerStateShutdownParam;
import android.os.UserManager;
@@ -50,6 +39,10 @@
import androidx.test.platform.app.InstrumentationRegistry;
+import com.android.car.CarLocalServices;
+import com.android.car.CarServiceUtils;
+import com.android.car.R;
+import com.android.car.hal.MockedPowerHalService;
import com.android.car.hal.PowerHalService;
import com.android.car.hal.PowerHalService.PowerState;
import com.android.car.systeminterface.DisplayInterface;
@@ -58,6 +51,7 @@
import com.android.car.systeminterface.SystemStateInterface;
import com.android.car.systeminterface.WakeLockInterface;
import com.android.car.test.utils.TemporaryDirectory;
+import com.android.car.test.utils.TemporaryFile;
import com.android.car.user.CarUserService;
import com.android.internal.app.IVoiceInteractionManagerService;
@@ -69,7 +63,6 @@
import java.io.File;
import java.io.IOException;
import java.time.Duration;
-import java.util.Optional;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
@@ -80,6 +73,7 @@
private static final long WAIT_TIMEOUT_MS = 2000;
private static final long WAIT_TIMEOUT_LONG_MS = 5000;
private static final int WAKE_UP_DELAY = 100;
+ private static final String NONSILENT_STRING = "0";
private static final int CURRENT_USER_ID = 42;
private static final int CURRENT_GUEST_ID = 108; // must be different than CURRENT_USER_ID;
@@ -96,6 +90,8 @@
private SystemInterface mSystemInterface;
private CarPowerManagementService mService;
private CompletableFuture<Void> mFuture;
+ private SilentModeController mSilentModeController;
+ private TemporaryFile mSilentModeFile;
@Mock
private UserManager mUserManager;
@@ -104,11 +100,8 @@
@Mock
private CarUserService mUserService;
@Mock
- private InitialUserSetter mInitialUserSetter;
- @Mock
private IVoiceInteractionManagerService mVoiceInteractionManagerService;
-
@Override
protected void onSessionBuilder(CustomMockitoSessionBuilder session) {
session
@@ -135,6 +128,8 @@
if (mService != null) {
mService.release();
}
+ CarLocalServices.removeServiceForTest(CarPowerManagementService.class);
+ CarLocalServices.removeServiceForTest(SilentModeController.class);
CarServiceUtils.finishAllHandlerTasks();
mIOInterface.tearDown();
}
@@ -146,14 +141,18 @@
when(mResources.getInteger(R.integer.maxGarageModeRunningDurationInSecs))
.thenReturn(900);
Log.i(TAG, "setService(): overridden overlay properties: "
- + "config_disableUserSwitchDuringResume="
- + mResources.getBoolean(R.bool.config_disableUserSwitchDuringResume)
+ ", maxGarageModeRunningDurationInSecs="
+ mResources.getInteger(R.integer.maxGarageModeRunningDurationInSecs));
+ mSilentModeFile = new TemporaryFile(TAG);
+ mSilentModeFile.write(NONSILENT_STRING);
+ mSilentModeController = new SilentModeController(mContext, mSystemInterface,
+ mVoiceInteractionManagerService, mSilentModeFile.getPath().toString());
+ CarLocalServices.addService(SilentModeController.class, mSilentModeController);
mService = new CarPowerManagementService(mContext, mResources, mPowerHal,
- mSystemInterface, mUserManager, mUserService, mInitialUserSetter,
- mVoiceInteractionManagerService);
+ mSystemInterface, mUserManager, mUserService);
+ CarLocalServices.addService(CarPowerManagementService.class, mService);
mService.init();
+ mSilentModeController.init();
mService.setShutdownTimersForTest(0, 0);
mPowerHal.setSignalListener(mPowerSignalListener);
mService.scheduleNextWakeupTime(WAKE_UP_DELAY);
@@ -164,19 +163,19 @@
public void testDisplayOn() throws Exception {
// start with display off
mSystemInterface.setDisplayState(false);
- mDisplayInterface.waitForDisplayStateChange(WAIT_TIMEOUT_MS);
+ mDisplayInterface.waitForDisplayOff(WAIT_TIMEOUT_MS);
// Transition to ON state
mPowerHal.setCurrentPowerState(new PowerState(VehicleApPowerStateReq.ON, 0));
// display should be turned on as it started with off state.
- assertThat(mDisplayInterface.waitForDisplayStateChange(WAIT_TIMEOUT_MS)).isTrue();
+ mDisplayInterface.waitForDisplayOn(WAIT_TIMEOUT_MS);
}
@Test
public void testShutdown() throws Exception {
// Transition to ON state
mPowerHal.setCurrentPowerState(new PowerState(VehicleApPowerStateReq.ON, 0));
- assertThat(mDisplayInterface.waitForDisplayStateChange(WAIT_TIMEOUT_MS)).isTrue();
+ mDisplayInterface.waitForDisplayOn(WAIT_TIMEOUT_MS);
mPowerHal.setCurrentPowerState(
new PowerState(
@@ -184,7 +183,7 @@
VehicleApPowerStateShutdownParam.SHUTDOWN_ONLY));
assertStateReceivedForShutdownOrSleepWithPostpone(PowerHalService.SET_SHUTDOWN_START);
assertThat(mService.garageModeShouldExitImmediately()).isFalse();
- assertThat(mDisplayInterface.waitForDisplayStateChange(WAIT_TIMEOUT_MS)).isFalse();
+ mDisplayInterface.waitForDisplayOff(WAIT_TIMEOUT_MS);
mPowerSignalListener.waitForShutdown(WAIT_TIMEOUT_MS);
// Send the finished signal
mPowerHal.setCurrentPowerState(new PowerState(VehicleApPowerStateReq.FINISHED, 0));
@@ -195,7 +194,7 @@
public void testShutdownImmediately() throws Exception {
// Transition to ON state
mPowerHal.setCurrentPowerState(new PowerState(VehicleApPowerStateReq.ON, 0));
- assertThat(mDisplayInterface.waitForDisplayStateChange(WAIT_TIMEOUT_MS)).isTrue();
+ mDisplayInterface.waitForDisplayOn(WAIT_TIMEOUT_MS);
mPowerHal.setCurrentPowerState(
new PowerState(
@@ -205,7 +204,7 @@
// To test module behavior, we need to actually implement mock listener module.
assertStateReceivedForShutdownOrSleepWithPostpone(PowerHalService.SET_SHUTDOWN_START, 0);
assertThat(mService.garageModeShouldExitImmediately()).isTrue();
- assertThat(mDisplayInterface.waitForDisplayStateChange(WAIT_TIMEOUT_MS)).isFalse();
+ mDisplayInterface.waitForDisplayOff(WAIT_TIMEOUT_MS);
mPowerSignalListener.waitForShutdown(WAIT_TIMEOUT_MS);
// Send the finished signal
mPowerHal.setCurrentPowerState(new PowerState(VehicleApPowerStateReq.FINISHED, 0));
@@ -216,7 +215,7 @@
public void testSuspend() throws Exception {
// Start in the ON state
mPowerHal.setCurrentPowerState(new PowerState(VehicleApPowerStateReq.ON, 0));
- assertThat(mDisplayInterface.waitForDisplayStateChange(WAIT_TIMEOUT_MS)).isTrue();
+ mDisplayInterface.waitForDisplayOn(WAIT_TIMEOUT_MS);
// Request suspend
mPowerHal.setCurrentPowerState(
new PowerState(
@@ -231,7 +230,7 @@
public void testShutdownOnSuspend() throws Exception {
// Start in the ON state
mPowerHal.setCurrentPowerState(new PowerState(VehicleApPowerStateReq.ON, 0));
- assertThat(mDisplayInterface.waitForDisplayStateChange(WAIT_TIMEOUT_MS)).isTrue();
+ mDisplayInterface.waitForDisplayOn(WAIT_TIMEOUT_MS);
// Tell it to shutdown
mService.requestShutdownOnNextSuspend();
// Request suspend
@@ -262,7 +261,7 @@
public void testShutdownCancel() throws Exception {
// Start in the ON state
mPowerHal.setCurrentPowerState(new PowerState(VehicleApPowerStateReq.ON, 0));
- assertThat(mDisplayInterface.waitForDisplayStateChange(WAIT_TIMEOUT_MS)).isTrue();
+ mDisplayInterface.waitForDisplayOn(WAIT_TIMEOUT_MS);
// Start shutting down
mPowerHal.setCurrentPowerState(
new PowerState(
@@ -284,7 +283,7 @@
public void testSleepImmediately() throws Exception {
// Transition to ON state
mPowerHal.setCurrentPowerState(new PowerState(VehicleApPowerStateReq.ON, 0));
- assertThat(mDisplayInterface.waitForDisplayStateChange(WAIT_TIMEOUT_MS)).isTrue();
+ mDisplayInterface.waitForDisplayOn(WAIT_TIMEOUT_MS);
mPowerHal.setCurrentPowerState(
new PowerState(
@@ -335,164 +334,17 @@
mService.setShutdownTimersForTest(10, 40);
suspendAndResume();
-
- verifyDefaultInitialUserBehaviorCalled();
- }
-
- @Test
- public void testUserSwitchingOnResume_noHal() throws Exception {
- suspendAndResumeForUserSwitchingTests();
-
- verifyDefaultInitialUserBehaviorCalled();
- }
-
- @Test
- public void testUserSwitchingOnResume_disabledByOEM_nonGuest() throws Exception {
- UserInfo currentUser = setCurrentUser(CURRENT_USER_ID, /* isGuest= */ false);
- expectCurrentGuestCanBeReplaced(false);
-
- suspendAndResumeForUserSwitchingTestsWhileDisabledByOem();
-
- verifyNoSetCall();
- }
-
- @Test
- public void testUserSwitchingOnResume_disabledByOEM_guest() throws Exception {
- setCurrentUser(CURRENT_GUEST_ID, /* isGuest= */ true);
- expectCurrentGuestCanBeReplaced(true);
-
- suspendAndResumeForUserSwitchingTestsWhileDisabledByOem();
-
- verifyUserReplaced();
- }
-
- @Test
- public void testUserSwitchingUsingHal_failure_setTimeout() throws Exception {
- userSwitchingWhenHalFailsTest(HalCallback.STATUS_HAL_SET_TIMEOUT);
- }
-
- @Test
- public void testUserSwitchingUsingHal_failure_responseTimeout() throws Exception {
- userSwitchingWhenHalFailsTest(HalCallback.STATUS_HAL_RESPONSE_TIMEOUT);
- }
-
- @Test
- public void testUserSwitchingUsingHal_failure_concurrentOperation() throws Exception {
- userSwitchingWhenHalFailsTest(HalCallback.STATUS_CONCURRENT_OPERATION);
- }
-
- @Test
- public void testUserSwitchingUsingHal_failure_wrongResponse() throws Exception {
- userSwitchingWhenHalFailsTest(HalCallback.STATUS_WRONG_HAL_RESPONSE);
- }
-
- @Test
- public void testUserSwitchingUsingHal_failure_invalidResponse() throws Exception {
- userSwitchingWhenHalFailsTest(-666);
- }
-
- /**
- * Tests all scenarios where the HAL.getInitialUserInfo() call failed - the outcome is the
- * same, it should use the default behavior.
- */
- private void userSwitchingWhenHalFailsTest(int status) throws Exception {
- enableUserHal();
-
- setGetUserInfoResponse((c) -> c.onResponse(status, /* response= */ null));
-
- suspendAndResumeForUserSwitchingTests();
-
- verifyDefaultInitialUserBehaviorCalled();
- }
-
- @Test
- public void testUserSwitchingUsingHal_invalidAction() throws Exception {
- enableUserHal();
-
- InitialUserInfoResponse response = new InitialUserInfoResponse();
- response.action = -666;
- setGetUserInfoResponse((c) -> c.onResponse(HalCallback.STATUS_OK, response));
-
- suspendAndResumeForUserSwitchingTests();
-
- verifyDefaultInitialUserBehaviorCalled();
- }
-
- @Test
- public void testUserSwitchingUsingHal_default_nullResponse() throws Exception {
- enableUserHal();
-
- setGetUserInfoResponse((c) -> c.onResponse(HalCallback.STATUS_OK, /* response= */ null));
- suspendAndResumeForUserSwitchingTests();
-
- verifyDefaultInitialUserBehaviorCalled();
- }
-
- @Test
- public void testUserSwitchingUsingHal_default_ok() throws Exception {
- enableUserHal();
-
- InitialUserInfoResponse response = new InitialUserInfoResponse();
- response.action = InitialUserInfoResponseAction.DEFAULT;
- setGetUserInfoResponse((c) -> c.onResponse(HalCallback.STATUS_OK, response));
-
- suspendAndResumeForUserSwitchingTests();
-
- verifyDefaultInitialUserBehaviorCalled();
- }
-
- @Test
- public void testUserSwitchingUsingHal_switch() throws Exception {
- enableUserHal();
-
- InitialUserInfoResponse response = new InitialUserInfoResponse();
- response.action = InitialUserInfoResponseAction.SWITCH;
- response.userToSwitchOrCreate.userId = 10;
- setGetUserInfoResponse((c) -> c.onResponse(HalCallback.STATUS_OK, response));
-
- suspendAndResumeForUserSwitchingTests();
-
- verifyUserSwitched(10);
- verifyDefaultInitilUserBehaviorNeverCalled();
- }
-
- @Test
- public void testUserSwitchingUsingHal_create() throws Exception {
- enableUserHal();
-
- InitialUserInfoResponse response = new InitialUserInfoResponse();
- response.action = InitialUserInfoResponseAction.CREATE;
- response.userToSwitchOrCreate.flags = 42;
- response.userNameToCreate = "Duffman";
- setGetUserInfoResponse((c) -> c.onResponse(HalCallback.STATUS_OK, response));
-
- suspendAndResumeForUserSwitchingTests();
-
- verifyUserCreated("Duffman", 42);
- verifyDefaultInitilUserBehaviorNeverCalled();
- }
-
- private void setGetUserInfoResponse(Visitor<HalCallback<InitialUserInfoResponse>> visitor) {
- doAnswer((invocation) -> {
- HalCallback<InitialUserInfoResponse> callback = invocation.getArgument(1);
- visitor.visit(callback);
- return null;
- }).when(mUserService).getInitialUserInfo(eq(InitialUserInfoRequestType.RESUME), notNull());
- }
-
- private void enableUserHal() {
- doReturn(Optional.of(true)).when(() -> CarProperties.user_hal_enabled());
- when(mUserService.isUserHalSupported()).thenReturn(true);
}
private void suspendAndResume() throws Exception {
Log.d(TAG, "suspend()");
mPowerHal.setCurrentPowerState(new PowerState(VehicleApPowerStateReq.SHUTDOWN_PREPARE,
VehicleApPowerStateShutdownParam.CAN_SLEEP));
- assertThat(mDisplayInterface.waitForDisplayStateChange(WAIT_TIMEOUT_MS)).isFalse();
+ mDisplayInterface.waitForDisplayOff(WAIT_TIMEOUT_MS);
assertStateReceivedForShutdownOrSleepWithPostpone(PowerHalService.SET_DEEP_SLEEP_ENTRY);
assertVoiceInteractionDisabled();
mPowerSignalListener.waitForSleepEntry(WAIT_TIMEOUT_MS);
+ verify(mUserService).onSuspend();
// Send the finished signal
Log.d(TAG, "resume()");
@@ -505,16 +357,23 @@
// second processing after wakeup
assertThat(mDisplayInterface.getDisplayState()).isFalse();
- mService.setStateForTesting(/* isBooting= */ false, /* isResuming= */ true);
+ mService.setStateForTesting(/* isBooting= */ false);
+ mSilentModeFile.write(NONSILENT_STRING); // Wake non-silently
mPowerHal.setCurrentPowerState(new PowerState(VehicleApPowerStateReq.ON, 0));
- assertThat(mDisplayInterface.waitForDisplayStateChange(WAIT_TIMEOUT_MS)).isTrue();
+ mDisplayInterface.waitForDisplayOn(WAIT_TIMEOUT_MS);
// Should wait until Handler has finished ON processing.
CarServiceUtils.runOnLooperSync(mService.getHandlerThread().getLooper(), () -> { });
+
+ verify(mUserService).onResume();
+
mPowerHal.setCurrentPowerState(new PowerState(VehicleApPowerStateReq.SHUTDOWN_PREPARE,
VehicleApPowerStateShutdownParam.CAN_SLEEP));
assertStateReceivedForShutdownOrSleepWithPostpone(PowerHalService.SET_DEEP_SLEEP_ENTRY);
mPowerSignalListener.waitForSleepEntry(WAIT_TIMEOUT_MS);
+
+ verify(mUserService, times(2)).onSuspend();
+
mPowerHal.setCurrentPowerState(new PowerState(VehicleApPowerStateReq.FINISHED, 0));
// PM will shutdown system as it was not woken-up due timer and it is not power on.
mSystemStateInterface.setWakeupCausedByTimer(false);
@@ -525,14 +384,6 @@
assertThat(mDisplayInterface.getDisplayState()).isFalse();
}
- private void suspendAndResumeForUserSwitchingTests() throws Exception {
- mService.switchUserOnResumeIfNecessary(/* allowSwitching= */ true);
- }
-
- private void suspendAndResumeForUserSwitchingTestsWhileDisabledByOem() throws Exception {
- mService.switchUserOnResumeIfNecessary(/* allowSwitching= */ false);
- }
-
private void assertStateReceived(int expectedState, int expectedParam) throws Exception {
int[] state = mPowerHal.waitForSend(WAIT_TIMEOUT_MS);
assertThat(state[0]).isEqualTo(expectedState);
@@ -566,11 +417,13 @@
}
private void assertVoiceInteractionEnabled() throws Exception {
- verify(mVoiceInteractionManagerService).setDisabled(false);
+ verify(mVoiceInteractionManagerService,
+ timeout(WAIT_TIMEOUT_LONG_MS).atLeastOnce()).setDisabled(false);
}
private void assertVoiceInteractionDisabled() throws Exception {
- verify(mVoiceInteractionManagerService).setDisabled(true);
+ verify(mVoiceInteractionManagerService,
+ timeout(WAIT_TIMEOUT_LONG_MS).atLeastOnce()).setDisabled(true);
}
private static void waitForSemaphore(Semaphore semaphore, long timeoutMs)
@@ -592,57 +445,6 @@
return userInfo;
}
- private void verifyUserNotSwitched() {
- verify(mInitialUserSetter, never()).set(argThat((info) -> {
- return info.type == InitialUserSetter.TYPE_SWITCH;
- }));
- }
-
- private void verifyUserSwitched(int userId) {
- // TODO(b/153679319): pass proper value for replaceGuest
- verify(mInitialUserSetter).set(argThat((info) -> {
- return info.type == InitialUserSetter.TYPE_SWITCH
- && info.switchUserId == userId
- && info.replaceGuest;
- }));
- }
-
- private void expectCurrentGuestCanBeReplaced(boolean result) {
- when(mInitialUserSetter.canReplaceGuestUser(notNull())).thenReturn(result);
- }
-
- private void verifyDefaultInitialUserBehaviorCalled() {
- // TODO(b/153679319): pass proper value for replaceGuest
- verify(mInitialUserSetter).set(argThat((info) -> {
- return info.type == InitialUserSetter.TYPE_DEFAULT_BEHAVIOR
- && info.replaceGuest;
- }));
- }
-
- private void verifyDefaultInitilUserBehaviorNeverCalled() {
- verify(mInitialUserSetter, never()).set(argThat((info) -> {
- return info.type == InitialUserSetter.TYPE_DEFAULT_BEHAVIOR;
- }));
- }
-
- private void verifyUserCreated(String name, int halFlags) {
- verify(mInitialUserSetter).set(argThat((info) -> {
- return info.type == InitialUserSetter.TYPE_CREATE
- && info.newUserName == name
- && info.newUserFlags == halFlags;
- }));
- }
-
- private void verifyUserReplaced() {
- verify(mInitialUserSetter).set(argThat((info) -> {
- return info.type == InitialUserSetter.TYPE_REPLACE_GUEST;
- }));
- }
-
- private void verifyNoSetCall() {
- verify(mInitialUserSetter, never()).set(notNull());
- }
-
private static final class MockDisplayInterface implements DisplayInterface {
private boolean mDisplayOn = true;
private final Semaphore mDisplayStateWait = new Semaphore(0);
@@ -660,9 +462,21 @@
return mDisplayOn;
}
- public boolean waitForDisplayStateChange(long timeoutMs) throws Exception {
- waitForSemaphore(mDisplayStateWait, timeoutMs);
- return mDisplayOn;
+ private void waitForDisplayOn(long timeoutMs) throws Exception {
+ waitForDisplayState(true, timeoutMs);
+ }
+
+ private void waitForDisplayOff(long timeoutMs) throws Exception {
+ waitForDisplayState(false, timeoutMs);
+ }
+
+ private void waitForDisplayState(boolean desiredState, long timeoutMs) throws Exception {
+ int nTries = 0;
+ while (mDisplayOn != desiredState) {
+ if (nTries > 5) throw new IllegalStateException("timeout");
+ waitForSemaphore(mDisplayStateWait, timeoutMs);
+ nTries++;
+ }
}
@Override
diff --git a/tests/carservice_unit_test/src/com/android/car/power/SilentModeControllerUnitTest.java b/tests/carservice_unit_test/src/com/android/car/power/SilentModeControllerUnitTest.java
new file mode 100644
index 0000000..8486116
--- /dev/null
+++ b/tests/carservice_unit_test/src/com/android/car/power/SilentModeControllerUnitTest.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright (C) 2020 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.car.power;
+
+import static org.testng.Assert.assertThrows;
+
+import android.car.test.mocks.AbstractExtendedMockitoTestCase;
+import android.car.test.mocks.JavaMockitoHelper;
+import android.content.Context;
+import android.content.res.Resources;
+import android.hardware.automotive.vehicle.V2_0.VehicleApPowerStateReq;
+import android.os.UserManager;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+
+import com.android.car.CarLocalServices;
+import com.android.car.hal.MockedPowerHalService;
+import com.android.car.hal.PowerHalService.PowerState;
+import com.android.car.systeminterface.SystemInterface;
+import com.android.car.test.utils.TemporaryFile;
+import com.android.internal.app.IVoiceInteractionManagerService;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+
+import java.util.concurrent.CountDownLatch;
+
+@SmallTest
+public final class SilentModeControllerUnitTest extends AbstractExtendedMockitoTestCase {
+
+ @Mock
+ private Resources mResources;
+ @Mock
+ private UserManager mUserManager;
+ @Mock
+ private SystemInterface mMockSystemInterface;
+ @Mock
+ private IVoiceInteractionManagerService mMockInteractionManager;
+
+ private static final String TAG = SilentModeControllerUnitTest.class.getSimpleName();
+ private static final long WAIT_TIMEOUT_MS = 5_000;
+ // A shorter value for use when the test is expected to time out
+ private static final long WAIT_WHEN_TIMEOUT_EXPECTED_MS = 50;
+ private static final long POLLING_DELAY_MS = 10;
+ private static final int MAX_POLLING_TRIES = 5;
+ private static final String SILENT_STRING = "1";
+ private static final String NONSILENT_STRING = "0";
+
+ private final Context mContext = InstrumentationRegistry.getInstrumentation().getContext();
+
+ private CarPowerManagementService mCarPowerManagementService;
+ private MockedPowerHalService mPowerHal;
+ private SilentModeController mSilentModeController;
+ private TemporaryFile mSilenceFile;
+
+ @Before
+ public void setUp() throws Exception {
+ mSilenceFile = new TemporaryFile(TAG);
+ mSilenceFile.write(NONSILENT_STRING);
+ mPowerHal = new MockedPowerHalService(true /*isPowerStateSupported*/,
+ true /*isDeepSleepAllowed*/, true /*isTimedWakeupAllowed*/);
+ mCarPowerManagementService = new CarPowerManagementService(mContext, mResources, mPowerHal,
+ mMockSystemInterface, mUserManager, null);
+ CarLocalServices.addService(CarPowerManagementService.class, mCarPowerManagementService);
+ mCarPowerManagementService.onApPowerStateChange(
+ new PowerState(VehicleApPowerStateReq.ON, 0));
+ mSilentModeController = new SilentModeController(mContext, mMockSystemInterface,
+ mMockInteractionManager, mSilenceFile.getPath().toString());
+ mSilentModeController.init();
+ }
+
+ @After
+ public void tearDown() {
+ CarLocalServices.removeServiceForTest(CarPowerManagementService.class);
+ }
+
+ @Test
+ public void readModeFileTest_nonsilent() throws Exception {
+ // The file is set to Non-silent in 'setUp'
+ queryForSilentState(false);
+ }
+
+ @Test
+ public void readModeFileTest_silent() throws Exception {
+ mSilenceFile.write(SILENT_STRING);
+ queryForSilentState(true);
+ }
+
+ @Test
+ public void listenerTest() throws Exception {
+ WaitableStateListener stateListenerFalse = new WaitableStateListener(false,
+ mSilentModeController);
+ stateListenerFalse.await();
+
+ WaitableStateListener stateListenerTrue = new WaitableStateListener(true,
+ mSilentModeController);
+ mSilenceFile.write(SILENT_STRING);
+
+ stateListenerTrue.await();
+ }
+
+ @Test
+ public void unregisterListenerTest() throws Exception {
+ WaitableStateListener stateListener = new WaitableStateListener(true,
+ mSilentModeController, WAIT_WHEN_TIMEOUT_EXPECTED_MS);
+
+ stateListener.unregister();
+ mSilenceFile.write(SILENT_STRING);
+
+ assertThrows(IllegalStateException.class, () -> stateListener.await());
+ }
+
+ private void queryForSilentState(boolean expectedState) throws Exception {
+ for (int loopCount = 0; loopCount < MAX_POLLING_TRIES; loopCount++) {
+ if (mSilentModeController.isSilent() == expectedState) {
+ return;
+ }
+ Thread.sleep(POLLING_DELAY_MS);
+ }
+ throw new IllegalStateException("Timed out waiting for isSilent() to return "
+ + expectedState);
+ }
+
+ /**
+ * Helper class to set a power-state listener and verify that the listener gets called with
+ * the expected final state.
+ */
+ private final class WaitableStateListener {
+ private final CountDownLatch mLatch;
+ private final SilentModeController mSilentModeController;
+ private final long mTimeoutMs;
+ private final boolean mExpectedState;
+
+ private SilentModeController.SilentModeListener mListener =
+ new SilentModeController.SilentModeListener() {
+ @Override
+ public void onModeChange(boolean state) {
+ if (state == mExpectedState) {
+ mLatch.countDown();
+ }
+ }
+ };
+
+ WaitableStateListener(boolean expectedState, SilentModeController silentModeController) {
+ this(expectedState, silentModeController, WAIT_TIMEOUT_MS);
+ }
+
+ WaitableStateListener(boolean expectedState, SilentModeController silentModeController,
+ long timeoutMs) {
+ mExpectedState = expectedState;
+ mSilentModeController = silentModeController;
+ mTimeoutMs = timeoutMs;
+ mLatch = new CountDownLatch(1);
+ mSilentModeController.registerListener(mListener);
+ }
+
+ void unregister() {
+ mSilentModeController.unregisterListener(mListener);
+ }
+
+ void await() throws Exception {
+ JavaMockitoHelper.await(mLatch, mTimeoutMs);
+ }
+ }
+}
diff --git a/tests/carservice_unit_test/src/com/android/car/testapi/BlockingUserLifecycleListenerTest.java b/tests/carservice_unit_test/src/com/android/car/testapi/BlockingUserLifecycleListenerTest.java
index aa33519..4d834a4 100644
--- a/tests/carservice_unit_test/src/com/android/car/testapi/BlockingUserLifecycleListenerTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/testapi/BlockingUserLifecycleListenerTest.java
@@ -34,10 +34,11 @@
import android.car.testapi.BlockingUserLifecycleListener;
import android.car.user.CarUserManager;
import android.car.user.CarUserManager.UserLifecycleEvent;
-import android.car.user.CarUserManager.UserLifecycleEventType;
import android.os.UserHandle;
import android.util.Log;
+import com.android.car.internal.common.CommonConstants.UserLifecycleEventType;
+
import org.junit.Test;
import java.util.Arrays;
diff --git a/tests/carservice_unit_test/src/com/android/car/trust/BLEMessagePayloadStreamTest.java b/tests/carservice_unit_test/src/com/android/car/trust/BLEMessagePayloadStreamTest.java
deleted file mode 100644
index 31e8ca2..0000000
--- a/tests/carservice_unit_test/src/com/android/car/trust/BLEMessagePayloadStreamTest.java
+++ /dev/null
@@ -1,117 +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.car.trust;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import com.android.car.BLEStreamProtos.BLEMessageProto.BLEMessage;
-import com.android.car.BLEStreamProtos.BLEOperationProto.OperationType;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.junit.runners.JUnit4;
-
-import java.io.IOException;
-import java.util.List;
-
-/**
- * Unit test for {@link BLEMessagePayloadStream}.
- *
- * <p>Run:
- * {@code atest BLEMessagePayloadStreamTest}
- */
-@RunWith(JUnit4.class)
-public class BLEMessagePayloadStreamTest {
- private static final boolean IS_MESSAGE_ENCRYPTED = false;
- private static final OperationType OPERATION_TYPE = OperationType.CLIENT_MESSAGE;
- private static final byte[] TEST_MESSAGE_PAYLOAD = "testMessage".getBytes();
- private static final int TEST_SINGLE_MESSAGE_SIZE =
- TEST_MESSAGE_PAYLOAD.length + BLEMessageV1Factory.getProtoHeaderSize(
- OPERATION_TYPE, TEST_MESSAGE_PAYLOAD.length, IS_MESSAGE_ENCRYPTED);
-
- private BLEMessagePayloadStream mBLEMessagePayloadStream;
- private List<BLEMessage> mBleMessages;
-
- @Before
- public void setUp() {
- mBLEMessagePayloadStream = new BLEMessagePayloadStream();
- }
-
- @Test
- public void testReset_getEmptyValue() throws IOException {
- mBleMessages = BLEMessageV1Factory.makeBLEMessages(TEST_MESSAGE_PAYLOAD, OPERATION_TYPE,
- TEST_SINGLE_MESSAGE_SIZE, IS_MESSAGE_ENCRYPTED);
- mBLEMessagePayloadStream.write(mBleMessages.get(0));
- assertThat(mBLEMessagePayloadStream.toByteArray()).isNotEmpty();
-
- mBLEMessagePayloadStream.reset();
-
- assertThat(mBLEMessagePayloadStream.toByteArray()).isEmpty();
- assertThat(mBLEMessagePayloadStream.isComplete()).isFalse();
- }
-
- @Test
- public void testMessageContent_withOneMessage_shouldBeConsistent() throws IOException {
- mBleMessages = BLEMessageV1Factory.makeBLEMessages(TEST_MESSAGE_PAYLOAD, OPERATION_TYPE,
- TEST_SINGLE_MESSAGE_SIZE, IS_MESSAGE_ENCRYPTED);
- assertThat(mBleMessages).hasSize(1);
- for (BLEMessage message : mBleMessages) {
- mBLEMessagePayloadStream.write(message);
- }
-
- assertThat(mBLEMessagePayloadStream.toByteArray()).isEqualTo(TEST_MESSAGE_PAYLOAD);
- }
-
- @Test
- public void testMessageContent_withMultipleMessages_shouldBeConsistent() throws IOException {
- // Ensure the message to be split into 2 packets.
- int maxSize = TEST_SINGLE_MESSAGE_SIZE - 1;
- mBleMessages = BLEMessageV1Factory.makeBLEMessages(TEST_MESSAGE_PAYLOAD,
- OPERATION_TYPE, maxSize, IS_MESSAGE_ENCRYPTED);
- assertThat(mBleMessages).hasSize(2);
- for (BLEMessage message : mBleMessages) {
- mBLEMessagePayloadStream.write(message);
- }
-
- assertThat(mBLEMessagePayloadStream.toByteArray()).isEqualTo(
- TEST_MESSAGE_PAYLOAD);
- }
-
- @Test
- public void testMessageStreamComeToEnd_withOneMessage_streamCompleted() throws IOException {
- mBleMessages = BLEMessageV1Factory.makeBLEMessages(TEST_MESSAGE_PAYLOAD, OPERATION_TYPE,
- TEST_SINGLE_MESSAGE_SIZE, IS_MESSAGE_ENCRYPTED);
-
- mBLEMessagePayloadStream.write(mBleMessages.get(mBleMessages.size() - 1));
-
- assertThat(mBLEMessagePayloadStream.isComplete()).isTrue();
- }
-
- @Test
- public void testMessageStreamComeToEnd_withMultipleMessages_streamCompleted()
- throws IOException {
- // Ensure the message to be split into 2 packets.
- int maxSize = TEST_SINGLE_MESSAGE_SIZE - 1;
- mBleMessages = BLEMessageV1Factory.makeBLEMessages(TEST_MESSAGE_PAYLOAD,
- OPERATION_TYPE, maxSize, IS_MESSAGE_ENCRYPTED);
-
- mBLEMessagePayloadStream.write(mBleMessages.get(mBleMessages.size() - 1));
-
- assertThat(mBLEMessagePayloadStream.isComplete()).isTrue();
- }
-}
diff --git a/tests/carservice_unit_test/src/com/android/car/trust/BleMessageStreamV1Test.java b/tests/carservice_unit_test/src/com/android/car/trust/BleMessageStreamV1Test.java
deleted file mode 100644
index 0483616..0000000
--- a/tests/carservice_unit_test/src/com/android/car/trust/BleMessageStreamV1Test.java
+++ /dev/null
@@ -1,339 +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.car.trust;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.Matchers.anyLong;
-import static org.mockito.Mockito.any;
-import static org.mockito.Mockito.times;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothGattCharacteristic;
-import android.os.Handler;
-
-import com.android.car.BLEStreamProtos.BLEMessageProto.BLEMessage;
-import com.android.car.BLEStreamProtos.BLEOperationProto.OperationType;
-import com.android.car.protobuf.InvalidProtocolBufferException;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-import java.util.UUID;
-
-/**
- * Unit test for the {@link BleMessageStreamV1}.
- *
- * <p>Run:
- * {@code atest CarServiceUnitTest:BleMessageStreamV1Test}
- */
-@RunWith(MockitoJUnitRunner.class)
-public class BleMessageStreamV1Test {
- private static final String ADDRESS_MOCK = "00:11:22:33:AA:BB";
-
- // The UUID values here are arbitrary.
- private static final UUID WRITE_UUID = UUID.fromString("9a138a69-7c29-400f-9e71-fc29516f9f8b");
- private static final UUID READ_UUID = UUID.fromString("3e344860-e688-4cce-8411-16161b61ad57");
-
- private BleMessageStreamV1 mBleMessageStream;
- private BluetoothDevice mBluetoothDevice;
-
- @Mock BlePeripheralManager mBlePeripheralManager;
- @Mock BleMessageStreamCallback mCallbackMock;
- @Mock Handler mHandlerMock;
- @Mock BluetoothGattCharacteristic mWriteCharacteristicMock;
- @Mock BluetoothGattCharacteristic mReadCharacteristicMock;
-
- @Before
- public void setUp() {
- // Mock so that handler will run anything that is posted to it.
- when(mHandlerMock.post(any(Runnable.class))).thenAnswer(invocation -> {
- invocation.<Runnable>getArgument(0).run();
- return null;
- });
-
- // Ensure the mock characteristics return valid UUIDs.
- when(mWriteCharacteristicMock.getUuid()).thenReturn(WRITE_UUID);
- when(mReadCharacteristicMock.getUuid()).thenReturn(READ_UUID);
-
- mBluetoothDevice = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(ADDRESS_MOCK);
- mBleMessageStream = new BleMessageStreamV1(
- mHandlerMock, mBlePeripheralManager, mBluetoothDevice, mWriteCharacteristicMock,
- mReadCharacteristicMock);
- mBleMessageStream.registerCallback(mCallbackMock);
- }
-
- @Test
- public void writeMessage_noChunkingRequired_sendsCorrectMessage() {
- // Ensure that there is enough space to fit the message.
- mBleMessageStream.setMaxWriteSize(512);
-
- byte[] message = "message".getBytes();
- boolean isPayloadEncrypted = true;
- OperationType operationType = OperationType.CLIENT_MESSAGE;
-
- mBleMessageStream.writeMessage(message, operationType, isPayloadEncrypted);
-
- BLEMessage expectedMessage = BLEMessageV1Factory.makeBLEMessage(
- message, operationType, isPayloadEncrypted);
-
- // Verify that the message was written.
- verify(mWriteCharacteristicMock).setValue(expectedMessage.toByteArray());
-
- // Verify that there is also a notification of the characteristic change.
- verify(mBlePeripheralManager).notifyCharacteristicChanged(mBluetoothDevice,
- mWriteCharacteristicMock, false);
- }
-
- @Test
- public void writeMessage_chunkingRequired_sendsCorrectMessage()
- throws InvalidProtocolBufferException, IOException {
- boolean isPayloadEncrypted = true;
- OperationType operationType = OperationType.CLIENT_MESSAGE;
-
- int maxSize = 20;
- int requiredWrites = 9;
- byte[] message = makeMessage(requiredWrites * maxSize);
- int headerSize = BLEMessageV1Factory.getProtoHeaderSize(
- operationType, message.length, isPayloadEncrypted);
-
- // Make sure the payload can't fit into one chunk.
- mBleMessageStream.setMaxWriteSize(maxSize + headerSize);
- mBleMessageStream.writeMessage(message, operationType, isPayloadEncrypted);
-
- // Each part of the message requires an ACK except the last one.
- int numOfAcks = requiredWrites - 1;
-
- for (int i = 0; i < numOfAcks; i++) {
- mBleMessageStream.onCharacteristicWrite(
- mBluetoothDevice,
- mReadCharacteristicMock,
- BLEMessageV1Factory.makeAcknowledgementMessage().toByteArray());
- }
-
- // Each ACK should trigger a canceling of the retry runnable.
- verify(mHandlerMock, times(numOfAcks)).removeCallbacks(any(Runnable.class));
-
- ArgumentCaptor<byte[]> messageCaptor = ArgumentCaptor.forClass(byte[].class);
-
- verify(mWriteCharacteristicMock, times(requiredWrites)).setValue(
- messageCaptor.capture());
- verify(mBlePeripheralManager, times(requiredWrites))
- .notifyCharacteristicChanged(mBluetoothDevice,
- mWriteCharacteristicMock, false);
-
- List<byte[]> writtenBytes = messageCaptor.getAllValues();
- ByteArrayOutputStream reassembledMessageStream = new ByteArrayOutputStream();
-
- // Verify the packet numbers.
- for (int i = 0; i < writtenBytes.size(); i++) {
- BLEMessage bleMessage = BLEMessage.parseFrom(writtenBytes.get(i));
-
- assertThat(bleMessage.getPacketNumber()).isEqualTo(i + 1);
- assertThat(bleMessage.getTotalPackets()).isEqualTo(writtenBytes.size());
- assertThat(bleMessage.getIsPayloadEncrypted()).isTrue();
-
- reassembledMessageStream.write(bleMessage.getPayload().toByteArray());
- }
-
- // Verify the reassembled message.
- assertThat(reassembledMessageStream.toByteArray()).isEqualTo(message);
- }
-
- @Test
- public void writeMessage_chunkingRequired_retriesSamePayloadIfNoAckReceived()
- throws InvalidProtocolBufferException, IOException {
- // Execute delayed runnables immediately to simulate an ACK timeout.
- mockHandlerToExecuteDelayedRunnablesImmediately();
-
- boolean isPayloadEncrypted = true;
- OperationType operationType = OperationType.CLIENT_MESSAGE;
-
- int maxSize = 20;
- int requiredWrites = 9;
- byte[] message = makeMessage(requiredWrites * maxSize);
- int headerSize = BLEMessageV1Factory.getProtoHeaderSize(
- operationType, message.length, isPayloadEncrypted);
-
- // Make sure the payload can't fit into one chunk.
- mBleMessageStream.setMaxWriteSize(maxSize + headerSize);
- mBleMessageStream.writeMessage(message, operationType, isPayloadEncrypted);
-
- ArgumentCaptor<byte[]> messageCaptor = ArgumentCaptor.forClass(byte[].class);
-
- // Because there is no ACK, the write should be retried up to the limit.
- verify(mWriteCharacteristicMock, times(BleMessageStreamV1.BLE_MESSAGE_RETRY_LIMIT))
- .setValue(messageCaptor.capture());
- verify(mBlePeripheralManager, times(BleMessageStreamV1.BLE_MESSAGE_RETRY_LIMIT))
- .notifyCharacteristicChanged(mBluetoothDevice, mWriteCharacteristicMock, false);
-
- List<byte[]> writtenBytes = messageCaptor.getAllValues();
- List<byte[]> writtenPayloads = new ArrayList<>();
-
- for (int i = 0; i < writtenBytes.size(); i++) {
- BLEMessage bleMessage = BLEMessage.parseFrom(writtenBytes.get(i));
-
- // The same packet should be written.
- assertThat(bleMessage.getPacketNumber()).isEqualTo(1);
- assertThat(bleMessage.getTotalPackets()).isEqualTo(requiredWrites);
- assertThat(bleMessage.getIsPayloadEncrypted()).isTrue();
-
- writtenPayloads.add(bleMessage.getPayload().toByteArray());
- }
-
- // Verify that the same payload is being written.
- for (byte[] payload : writtenPayloads) {
- assertThat(payload).isEqualTo(writtenPayloads.get(0));
- }
- }
-
- @Test
- public void writeMessage_chunkingRequired_notifiesCallbackIfNoAck()
- throws InvalidProtocolBufferException, IOException {
- // Execute delayed runnables immediately to simulate an ACK timeout.
- mockHandlerToExecuteDelayedRunnablesImmediately();
-
- boolean isPayloadEncrypted = true;
- OperationType operationType = OperationType.CLIENT_MESSAGE;
-
- int maxSize = 20;
- int requiredWrites = 9;
- byte[] message = makeMessage(requiredWrites * maxSize);
- int headerSize = BLEMessageV1Factory.getProtoHeaderSize(
- operationType, message.length, isPayloadEncrypted);
-
- // Make sure the payload can't fit into one chunk.
- mBleMessageStream.setMaxWriteSize(maxSize + headerSize);
- mBleMessageStream.writeMessage(message, operationType, isPayloadEncrypted);
-
- // Because there is no ACK, the write should be retried up to the limit.
- verify(mWriteCharacteristicMock, times(BleMessageStreamV1.BLE_MESSAGE_RETRY_LIMIT))
- .setValue(any(byte[].class));
- verify(mBlePeripheralManager, times(BleMessageStreamV1.BLE_MESSAGE_RETRY_LIMIT))
- .notifyCharacteristicChanged(mBluetoothDevice, mWriteCharacteristicMock, false);
-
- // But the callback should only be notified once.
- verify(mCallbackMock).onWriteMessageError();
- }
-
- @Test
- public void processClientMessage_noChunking_notifiesCallbackForCompleteMessage() {
- byte[] payload = "message".getBytes();
-
- // This client message is a complete message, meaning it is part 1 of 1.
- BLEMessage clientMessage = BLEMessageV1Factory.makeBLEMessage(
- payload, OperationType.CLIENT_MESSAGE, /* isPayloadEncrypted= */ true);
-
- mBleMessageStream.onCharacteristicWrite(
- mBluetoothDevice,
- mReadCharacteristicMock,
- clientMessage.toByteArray());
-
- // The callback should be notified with only the payload.
- verify(mCallbackMock).onMessageReceived(payload, READ_UUID);
-
- // And the callback should only be notified once.
- verify(mCallbackMock).onMessageReceived(any(byte[].class), any(UUID.class));
- }
-
- @Test
- public void processClientMessage_chunkingRequired_notifiesCallbackForCompleteMessage() {
- // The length here is arbitrary.
- int payloadLength = 1024;
- byte[] payload = makeMessage(payloadLength);
-
- // Ensure the max size is smaller than the payload length.
- int maxSize = 50;
- List<BLEMessage> clientMessages = BLEMessageV1Factory.makeBLEMessages(
- payload, OperationType.CLIENT_MESSAGE, maxSize, /* isPayloadEncrypted= */ true);
-
- for (BLEMessage message : clientMessages) {
- mBleMessageStream.onCharacteristicWrite(
- mBluetoothDevice,
- mReadCharacteristicMock,
- message.toByteArray());
- }
-
- // The callback should be notified with only the payload.
- verify(mCallbackMock).onMessageReceived(payload, READ_UUID);
-
- // And the callback should only be notified once.
- verify(mCallbackMock).onMessageReceived(any(byte[].class), any(UUID.class));
- }
-
- @Test
- public void processClientMessage_chunkingRequired_sendsACKForEachMessagePart() {
- // The length here is arbitrary.
- int payloadLength = 1024;
- byte[] payload = makeMessage(payloadLength);
-
- // Ensure the max size is smaller than the payload length.
- int maxSize = 50;
- List<BLEMessage> clientMessages = BLEMessageV1Factory.makeBLEMessages(
- payload, OperationType.CLIENT_MESSAGE, maxSize, /* isPayloadEncrypted= */ true);
-
- for (BLEMessage message : clientMessages) {
- mBleMessageStream.onCharacteristicWrite(
- mBluetoothDevice,
- mReadCharacteristicMock,
- message.toByteArray());
- }
-
- ArgumentCaptor<byte[]> messageCaptor = ArgumentCaptor.forClass(byte[].class);
-
- // An ACK should be sent for each message received, except the last one.
- verify(mWriteCharacteristicMock, times(clientMessages.size() - 1))
- .setValue(messageCaptor.capture());
- verify(mBlePeripheralManager, times(clientMessages.size() - 1))
- .notifyCharacteristicChanged(mBluetoothDevice, mWriteCharacteristicMock, false);
-
- List<byte[]> writtenValues = messageCaptor.getAllValues();
- byte[] ackMessageBytes = BLEMessageV1Factory.makeAcknowledgementMessage().toByteArray();
-
- // Now verify that each byte was an ACK message.
- for (byte[] writtenValue : writtenValues) {
- assertThat(writtenValue).isEqualTo(ackMessageBytes);
- }
- }
-
- private void mockHandlerToExecuteDelayedRunnablesImmediately() {
- when(mHandlerMock.postDelayed(any(Runnable.class), anyLong())).thenAnswer(invocation -> {
- invocation.<Runnable>getArgument(0).run();
- return null;
- });
- }
-
- /** Returns a random message of the specified length. */
- private byte[] makeMessage(int length) {
- byte[] message = new byte[length];
- new Random().nextBytes(message);
-
- return message;
- }
-}
diff --git a/tests/carservice_unit_test/src/com/android/car/trust/CarTrustAgentEnrollmentServiceTest.java b/tests/carservice_unit_test/src/com/android/car/trust/CarTrustAgentEnrollmentServiceTest.java
deleted file mode 100644
index 8a41e32..0000000
--- a/tests/carservice_unit_test/src/com/android/car/trust/CarTrustAgentEnrollmentServiceTest.java
+++ /dev/null
@@ -1,308 +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.car.trust;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.ArgumentMatchers.anyString;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.never;
-import static org.mockito.Mockito.verify;
-
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.le.AdvertiseCallback;
-import android.car.encryptionrunner.DummyEncryptionRunner;
-import android.car.encryptionrunner.EncryptionRunnerFactory;
-import android.car.encryptionrunner.HandshakeMessage;
-import android.car.trust.TrustedDeviceInfo;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.os.RemoteException;
-import android.os.UserHandle;
-
-import androidx.test.InstrumentationRegistry;
-import androidx.test.filters.FlakyTest;
-
-import com.android.car.Utils;
-import com.android.car.trust.CarTrustAgentBleManager.SendMessageCallback;
-
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.junit.MockitoJUnitRunner;
-
-import java.util.UUID;
-
-/**
- * Unit test for {@link CarTrustAgentEnrollmentService} and {@link CarTrustedDeviceService}.
- */
-@RunWith(MockitoJUnitRunner.class)
-public class CarTrustAgentEnrollmentServiceTest {
-
- private static final long TEST_HANDLE1 = 1L;
- private static final long TEST_HANDLE2 = 2L;
- private static final String DEVICE_ID = "device_id";
- private static final String KEY = "key";
- // Random uuid for test
- private static final UUID TEST_ID1 = UUID.fromString("9a138a69-7c29-400f-9e71-fc29516f9f8b");
- private static final String TEST_TOKEN = "test_escrow_token";
- private static final String ADDRESS = "00:11:22:33:AA:BB";
- private static final String DEFAULT_NAME = "My Device";
- private static final TrustedDeviceInfo DEVICE_INFO1 = new TrustedDeviceInfo(
- TEST_HANDLE1, ADDRESS, DEFAULT_NAME);
- private static final TrustedDeviceInfo DEVICE_INFO2 = new TrustedDeviceInfo(
- TEST_HANDLE2, ADDRESS, DEFAULT_NAME);
-
- private Context mContext;
- private CarTrustedDeviceService mCarTrustedDeviceService;
- private CarTrustAgentEnrollmentService mCarTrustAgentEnrollmentService;
- private CarCompanionDeviceStorage mCarCompanionDeviceStorage;
- private BluetoothDevice mBluetoothDevice;
- private int mUserId;
- @Mock
- private CarTrustAgentBleManager mMockCarTrustAgentBleManager;
-
- @Mock
- private CarTrustAgentEnrollmentService.CarTrustAgentEnrollmentRequestDelegate mEnrollDelegate =
- new CarTrustAgentEnrollmentService.CarTrustAgentEnrollmentRequestDelegate() {
- @Override
- public void addEscrowToken(byte[] token, int uid) {
- }
-
- @Override
- public void removeEscrowToken(long handle, int uid) {
- }
-
- @Override
- public void isEscrowTokenActive(long handle, int uid) {
- }
- };
-
- @Before
- public void setUp() throws RemoteException {
- mBluetoothDevice = BluetoothAdapter.getDefaultAdapter().getRemoteDevice(ADDRESS);
- mContext = InstrumentationRegistry.getTargetContext();
- mCarTrustedDeviceService = new CarTrustedDeviceService(mContext);
- mCarTrustAgentEnrollmentService = new CarTrustAgentEnrollmentService(mContext,
- mCarTrustedDeviceService, mMockCarTrustAgentBleManager);
- mCarCompanionDeviceStorage = new CarCompanionDeviceStorage(mContext);
- mCarTrustedDeviceService.init();
- mCarTrustAgentEnrollmentService.init();
- mCarTrustAgentEnrollmentService.setEnrollmentRequestDelegate(mEnrollDelegate);
- mUserId = UserHandle.myUserId();
- mCarTrustAgentEnrollmentService.onRemoteDeviceConnected(mBluetoothDevice);
- }
-
- @After
- public void tearDown() {
- // Need to clear the shared preference
- mCarTrustAgentEnrollmentService.onEscrowTokenRemoved(TEST_HANDLE1, mUserId);
- mCarTrustAgentEnrollmentService.onEscrowTokenRemoved(TEST_HANDLE2, mUserId);
- }
-
- @Test
- @FlakyTest
- public void testDisableEnrollment_startEnrollmentAdvertisingFail() {
- mCarTrustAgentEnrollmentService.setTrustedDeviceEnrollmentEnabled(false);
- mCarTrustAgentEnrollmentService.startEnrollmentAdvertising();
- verify(mMockCarTrustAgentBleManager, never()).startEnrollmentAdvertising(anyString(),
- any(AdvertiseCallback.class));
- }
-
- @Test
- public void testEncryptionHandshake() {
- mCarTrustAgentEnrollmentService.setEncryptionRunner(
- EncryptionRunnerFactory.newDummyRunner());
- assertThat(mCarTrustAgentEnrollmentService.mEnrollmentState).isEqualTo(
- mCarTrustAgentEnrollmentService.ENROLLMENT_STATE_NONE);
- // Have received device unique id.
- UUID uuid = UUID.randomUUID();
- mCarTrustAgentEnrollmentService.onDataReceived(Utils.uuidToBytes(uuid));
- assertThat(mCarTrustAgentEnrollmentService.mEnrollmentState).isEqualTo(
- mCarTrustAgentEnrollmentService.ENROLLMENT_STATE_UNIQUE_ID);
- assertThat(mCarTrustAgentEnrollmentService.mEncryptionState).isEqualTo(
- HandshakeMessage.HandshakeState.UNKNOWN);
- // send device unique id
- verify(mMockCarTrustAgentBleManager).sendMessage(
- eq(Utils.uuidToBytes(mCarCompanionDeviceStorage.getUniqueId())), any(), eq(false),
- any(SendMessageCallback.class));
-
- // Have received handshake request.
- mCarTrustAgentEnrollmentService.onDataReceived(
- DummyEncryptionRunner.INIT.getBytes());
- assertThat(mCarTrustAgentEnrollmentService.mEncryptionState).isEqualTo(
- HandshakeMessage.HandshakeState.IN_PROGRESS);
- // Send response to init handshake request
- verify(mMockCarTrustAgentBleManager).sendMessage(
- eq(DummyEncryptionRunner.INIT_RESPONSE.getBytes()), any(), eq(false),
- any(SendMessageCallback.class));
-
- mCarTrustAgentEnrollmentService.onDataReceived(
- DummyEncryptionRunner.CLIENT_RESPONSE.getBytes());
- assertThat(mCarTrustAgentEnrollmentService.mEncryptionState).isEqualTo(
- HandshakeMessage.HandshakeState.VERIFICATION_NEEDED);
- verify(mMockCarTrustAgentBleManager).sendMessage(
- eq(DummyEncryptionRunner.INIT_RESPONSE.getBytes()), any(), eq(false),
- any(SendMessageCallback.class));
-
- // Completed the handshake by confirming the verification code.
- mCarTrustAgentEnrollmentService.enrollmentHandshakeAccepted(mBluetoothDevice);
- verify(mMockCarTrustAgentBleManager).sendMessage(
- eq(mCarTrustAgentEnrollmentService.CONFIRMATION_SIGNAL), any(), eq(false),
- any(SendMessageCallback.class));
- assertThat(mCarTrustAgentEnrollmentService.mEncryptionState).isEqualTo(
- HandshakeMessage.HandshakeState.FINISHED);
- assertThat(mCarTrustAgentEnrollmentService.mEnrollmentState).isEqualTo(
- mCarTrustAgentEnrollmentService.ENROLLMENT_STATE_ENCRYPTION_COMPLETED);
- }
-
- @Test
- public void testOnEscrowTokenAdded_tokenRequiresActivation() {
- mCarTrustAgentEnrollmentService.onEscrowTokenAdded(TEST_TOKEN.getBytes(), TEST_HANDLE1,
- mUserId);
-
- // Token has not been activated, the number of enrolled trusted device will remain the same.
- assertThat(mCarTrustAgentEnrollmentService.getEnrolledDeviceInfosForUser(
- mUserId)).isEmpty();
- assertThat(mCarTrustAgentEnrollmentService.isEscrowTokenActive(TEST_HANDLE1,
- mUserId)).isFalse();
- }
-
- @Test
- public void testOnEscrowTokenActiveStateChange_true_addTrustedDevice() {
- // Set up the service to go through the handshake
- setupEncryptionHandshake(TEST_ID1);
-
- // Token has been activated and added to the shared preference
- mCarTrustAgentEnrollmentService.onEscrowTokenActiveStateChanged(
- TEST_HANDLE1, /* isTokenActive= */ true, mUserId);
-
- verify(mMockCarTrustAgentBleManager).sendMessage(any(),
- any(), eq(true), any(SendMessageCallback.class));
- assertThat(mCarTrustAgentEnrollmentService.getEnrolledDeviceInfosForUser(
- mUserId)).containsExactly(DEVICE_INFO1);
- assertThat(mCarTrustAgentEnrollmentService.isEscrowTokenActive(TEST_HANDLE1,
- mUserId)).isTrue();
- }
-
- @Test
- public void testOnEscrowTokenActiveStateChange_addDuplicateDevice() {
- // Set up the service to go through the handshake
- setupEncryptionHandshake(TEST_ID1);
-
- // Enroll device
- mCarTrustAgentEnrollmentService.onEscrowTokenActiveStateChanged(
- TEST_HANDLE1, /* isTokenActive= */ true, mUserId);
-
- // Enroll same device again
- mCarTrustAgentEnrollmentService.onEscrowTokenActiveStateChanged(
- TEST_HANDLE2, /* isTokenActive= */ true, mUserId);
- verify(mEnrollDelegate).removeEscrowToken(eq(TEST_HANDLE1), eq(mUserId));
- }
-
- @Test
- public void testOnEscrowTokenActiveStateChange_false_doNotAddTrustedDevice() {
- // Set up the service to go through the handshake
- setupEncryptionHandshake(TEST_ID1);
-
- // Token activation fail
- mCarTrustAgentEnrollmentService.onEscrowTokenActiveStateChanged(
- TEST_HANDLE1, /* isTokenActive= */ false, mUserId);
-
- assertThat(mCarTrustAgentEnrollmentService.getEnrolledDeviceInfosForUser(
- mUserId)).isEmpty();
- }
-
- @Test
- public void testOnEscrowTokenRemoved_removeOneTrustedDevice() {
- setupEncryptionHandshake(TEST_ID1);
- SharedPreferences sharedPrefs = mCarCompanionDeviceStorage.getSharedPrefs();
- mCarTrustAgentEnrollmentService.onEscrowTokenActiveStateChanged(
- TEST_HANDLE1, /* isTokenActive= */ true,
- mUserId);
-
- assertThat(mCarTrustAgentEnrollmentService.getEnrolledDeviceInfosForUser(
- mUserId)).containsExactly(DEVICE_INFO1);
- assertThat(mCarCompanionDeviceStorage.getUserHandleByTokenHandle(TEST_HANDLE1)).isEqualTo(
- mUserId);
- assertThat(sharedPrefs.getLong(TEST_ID1.toString(), -1)).isEqualTo(TEST_HANDLE1);
-
- mCarTrustAgentEnrollmentService.onEscrowTokenActiveStateChanged(
- TEST_HANDLE2, /* isTokenActive= */ true,
- mUserId);
-
- assertThat(mCarTrustAgentEnrollmentService.getEnrolledDeviceInfosForUser(
- mUserId)).containsExactly(DEVICE_INFO1, DEVICE_INFO2);
- assertThat(mCarCompanionDeviceStorage.getUserHandleByTokenHandle(TEST_HANDLE2)).isEqualTo(
- mUserId);
- assertThat(sharedPrefs.getLong(TEST_ID1.toString(), -1)).isEqualTo(TEST_HANDLE2);
-
- // Remove one handle
- mCarTrustAgentEnrollmentService.onEscrowTokenRemoved(TEST_HANDLE1, mUserId);
-
- assertThat(mCarTrustAgentEnrollmentService.getEnrolledDeviceInfosForUser(
- mUserId)).containsExactly(DEVICE_INFO2);
- assertThat(mCarCompanionDeviceStorage
- .getUserHandleByTokenHandle(TEST_HANDLE1))
- .isEqualTo(-1);
- assertThat(mCarCompanionDeviceStorage.getUserHandleByTokenHandle(TEST_HANDLE2)).isEqualTo(
- mUserId);
- assertThat(sharedPrefs.getLong(TEST_ID1.toString(), -1)).isEqualTo(TEST_HANDLE2);
- }
-
- @Test
- public void testGetUserHandleByTokenHandle_nonExistentHandle() {
- assertThat(mCarCompanionDeviceStorage
- .getUserHandleByTokenHandle(TEST_HANDLE1))
- .isEqualTo(-1);
- }
-
- @Test
- public void testEncryptionKeyStorage() {
- byte[] encryptionKey = KEY.getBytes();
- if (mCarCompanionDeviceStorage.saveEncryptionKey(DEVICE_ID, encryptionKey)) {
- assertThat(mCarCompanionDeviceStorage.getEncryptionKey(DEVICE_ID))
- .isEqualTo(encryptionKey);
- }
- mCarCompanionDeviceStorage.clearEncryptionKey(DEVICE_ID);
- assertThat(mCarCompanionDeviceStorage.getEncryptionKey(DEVICE_ID) == null).isTrue();
- }
-
- @Test
- public void testGetUserHandleByTokenHandle_existingHandle() {
- setupEncryptionHandshake(TEST_ID1);
- mCarTrustAgentEnrollmentService.onEscrowTokenActiveStateChanged(
- TEST_HANDLE1, /* isTokenActive= */ true, mUserId);
- assertThat(mCarCompanionDeviceStorage.getUserHandleByTokenHandle(TEST_HANDLE1)).isEqualTo(
- mUserId);
- }
-
- private void setupEncryptionHandshake(UUID uuid) {
- mCarTrustAgentEnrollmentService.setEncryptionRunner(
- EncryptionRunnerFactory.newDummyRunner());
- mCarTrustAgentEnrollmentService.onDataReceived(Utils.uuidToBytes(uuid));
- mCarTrustAgentEnrollmentService.onDataReceived(
- DummyEncryptionRunner.INIT.getBytes());
- mCarTrustAgentEnrollmentService.onDataReceived(
- DummyEncryptionRunner.CLIENT_RESPONSE.getBytes());
- mCarTrustAgentEnrollmentService.enrollmentHandshakeAccepted(mBluetoothDevice);
- }
-}
diff --git a/tests/carservice_unit_test/src/com/android/car/user/CarUserManagerUnitTest.java b/tests/carservice_unit_test/src/com/android/car/user/CarUserManagerUnitTest.java
index a94508c..6c4463b 100644
--- a/tests/carservice_unit_test/src/com/android/car/user/CarUserManagerUnitTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/user/CarUserManagerUnitTest.java
@@ -15,9 +15,9 @@
*/
package com.android.car.user;
-import static android.car.test.mocks.AndroidMockitoHelper.getResult;
-import static android.car.test.mocks.AndroidMockitoHelper.mockUmGetUsers;
+import static android.car.test.mocks.AndroidMockitoHelper.mockUmGetAliveUsers;
import static android.car.testapi.CarMockitoHelper.mockHandleRemoteExceptionFromCarServiceWithDefaultValue;
+import static android.car.testapi.CarTestingHelper.getResult;
import static android.os.UserHandle.USER_SYSTEM;
import static com.google.common.truth.Truth.assertThat;
@@ -47,10 +47,12 @@
import android.car.user.UserIdentificationAssociationResponse;
import android.car.user.UserRemovalResult;
import android.car.user.UserSwitchResult;
+import android.car.util.concurrent.AsyncFuture;
import android.content.Context;
import android.content.pm.UserInfo;
import android.content.pm.UserInfo.UserInfoFlag;
import android.os.RemoteException;
+import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
@@ -172,7 +174,7 @@
public void testSwitchUser_success() throws Exception {
expectServiceSwitchUserSucceeds(11, UserSwitchResult.STATUS_SUCCESSFUL, "D'OH!");
- AndroidFuture<UserSwitchResult> future = mMgr.switchUser(11);
+ AsyncFuture<UserSwitchResult> future = mMgr.switchUser(11);
assertThat(future).isNotNull();
UserSwitchResult result = getResult(future);
@@ -185,7 +187,7 @@
when(mUserManager.getUserSwitchability())
.thenReturn(UserManager.SWITCHABILITY_STATUS_SYSTEM_USER_LOCKED);
- AndroidFuture<UserSwitchResult> future = mMgr.switchUser(11);
+ AsyncFuture<UserSwitchResult> future = mMgr.switchUser(11);
assertThat(future).isNotNull();
UserSwitchResult result = getResult(future);
@@ -198,7 +200,7 @@
expectServiceSwitchUserFails(11);
mockHandleRemoteExceptionFromCarServiceWithDefaultValue(mCar);
- AndroidFuture<UserSwitchResult> future = mMgr.switchUser(11);
+ AsyncFuture<UserSwitchResult> future = mMgr.switchUser(11);
assertThat(future).isNotNull();
UserSwitchResult result = getResult(future);
@@ -208,24 +210,51 @@
@Test
public void testRemoveUser_success() throws Exception {
- int userId = 11;
int status = UserRemovalResult.STATUS_SUCCESSFUL;
- when(mService.removeUser(userId)).thenReturn(new UserRemovalResult(status));
+ when(mService.removeUser(100, /* hasCallerRestrictions= */ true))
+ .thenReturn(new UserRemovalResult(status));
- UserRemovalResult result = mMgr.removeUser(11);
+ UserRemovalResult result = mMgr.removeUser(UserHandle.of(100));
assertThat(result.getStatus()).isEqualTo(UserRemovalResult.STATUS_SUCCESSFUL);
}
@Test
public void testRemoveUser_remoteException() throws Exception {
- int userId = 11;
- doThrow(new RemoteException("D'OH!")).when(mService).removeUser(eq(userId));
+ doThrow(new RemoteException("D'OH!")).when(mService).removeUser(100,
+ /* hasCallerRestrictions= */ true);
mockHandleRemoteExceptionFromCarServiceWithDefaultValue(mCar);
- UserRemovalResult result = mMgr.removeUser(11);
+ UserRemovalResult result = mMgr.removeUser(UserHandle.of(100));
- assertThat(result.getStatus()).isEqualTo(UserRemovalResult.STATUS_HAL_INTERNAL_FAILURE);
+ assertThat(result.getStatus()).isEqualTo(UserRemovalResult.STATUS_ANDROID_FAILURE);
+ }
+
+ @Test
+ public void testRemoveUser_nullUser() {
+ assertThrows(NullPointerException.class, () -> mMgr.removeUser(null));
+ }
+
+ @Test
+ public void testRemoveUserInternal_success() throws Exception {
+ int status = UserRemovalResult.STATUS_SUCCESSFUL;
+ when(mService.removeUser(100, /* hasCallerRestrictions= */ false))
+ .thenReturn(new UserRemovalResult(status));
+
+ UserRemovalResult result = mMgr.removeUser(100);
+
+ assertThat(result.getStatus()).isEqualTo(UserRemovalResult.STATUS_SUCCESSFUL);
+ }
+
+ @Test
+ public void testRemoveUserInternal_remoteException() throws Exception {
+ doThrow(new RemoteException("D'OH!")).when(mService).removeUser(100,
+ /* hasCallerRestrictions= */ false);
+ mockHandleRemoteExceptionFromCarServiceWithDefaultValue(mCar);
+
+ UserRemovalResult result = mMgr.removeUser(100);
+
+ assertThat(result.getStatus()).isEqualTo(UserRemovalResult.STATUS_ANDROID_FAILURE);
}
@Test
@@ -247,7 +276,7 @@
expectServiceCreateUserSucceeds("dude", "sweet", 42, UserCreationResult.STATUS_SUCCESSFUL,
108);
- AndroidFuture<UserCreationResult> future = mMgr.createUser("dude", "sweet", 42);
+ AsyncFuture<UserCreationResult> future = mMgr.createUser("dude", "sweet", 42);
assertThat(future).isNotNull();
UserCreationResult result = getResult(future);
@@ -268,7 +297,7 @@
expectServiceCreateUserFails("dude", "sweet", 42);
mockHandleRemoteExceptionFromCarServiceWithDefaultValue(mCar);
- AndroidFuture<UserCreationResult> future = mMgr.createUser("dude", "sweet", 42);
+ AsyncFuture<UserCreationResult> future = mMgr.createUser("dude", "sweet", 42);
assertThat(future).isNotNull();
UserCreationResult result = getResult(future);
@@ -283,7 +312,7 @@
expectServiceCreateUserSucceeds("dude", UserManager.USER_TYPE_FULL_SECONDARY, 42,
UserCreationResult.STATUS_SUCCESSFUL, 108);
- AndroidFuture<UserCreationResult> future = mMgr.createUser("dude", 42);
+ AsyncFuture<UserCreationResult> future = mMgr.createUser("dude", 42);
assertThat(future).isNotNull();
UserCreationResult result = getResult(future);
@@ -304,7 +333,7 @@
expectServiceCreateUserFails("dude", UserManager.USER_TYPE_FULL_SECONDARY, 42);
mockHandleRemoteExceptionFromCarServiceWithDefaultValue(mCar);
- AndroidFuture<UserCreationResult> future = mMgr.createUser("dude", 42);
+ AsyncFuture<UserCreationResult> future = mMgr.createUser("dude", 42);
assertThat(future).isNotNull();
UserCreationResult result = getResult(future);
@@ -319,7 +348,7 @@
expectServiceCreateUserSucceeds("dudeGuest", UserManager.USER_TYPE_FULL_GUEST, 0,
UserCreationResult.STATUS_SUCCESSFUL, 108);
- AndroidFuture<UserCreationResult> future = mMgr.createGuest("dudeGuest");
+ AsyncFuture<UserCreationResult> future = mMgr.createGuest("dudeGuest");
assertThat(future).isNotNull();
UserCreationResult result = getResult(future);
@@ -341,7 +370,7 @@
expectServiceCreateUserFails("dudeGuest", UserManager.USER_TYPE_FULL_GUEST, 0);
mockHandleRemoteExceptionFromCarServiceWithDefaultValue(mCar);
- AndroidFuture<UserCreationResult> future = mMgr.createGuest("dudeGuest");
+ AsyncFuture<UserCreationResult> future = mMgr.createGuest("dudeGuest");
assertThat(future).isNotNull();
UserCreationResult result = getResult(future);
@@ -424,7 +453,7 @@
.setUserIdentificationAssociation(anyInt(), same(types), same(values), notNull());
mockHandleRemoteExceptionFromCarServiceWithDefaultValue(mCar);
- AndroidFuture<UserIdentificationAssociationResponse> future =
+ AsyncFuture<UserIdentificationAssociationResponse> future =
mMgr.setUserIdentificationAssociation(types, values);
assertThat(future).isNotNull();
@@ -450,7 +479,7 @@
.setUserIdentificationAssociation(anyInt(), same(types), same(values), notNull());
mockHandleRemoteExceptionFromCarServiceWithDefaultValue(mCar);
- AndroidFuture<UserIdentificationAssociationResponse> future =
+ AsyncFuture<UserIdentificationAssociationResponse> future =
mMgr.setUserIdentificationAssociation(types, values);
assertThat(future).isNotNull();
@@ -514,6 +543,6 @@
}
private void setExistingUsers(int... userIds) {
- mockUmGetUsers(mUserManager, userIds);
+ mockUmGetAliveUsers(mUserManager, userIds);
}
}
diff --git a/tests/carservice_unit_test/src/com/android/car/user/CarUserNoticeServiceTest.java b/tests/carservice_unit_test/src/com/android/car/user/CarUserNoticeServiceTest.java
index f50ad32..41dbf0e 100644
--- a/tests/carservice_unit_test/src/com/android/car/user/CarUserNoticeServiceTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/user/CarUserNoticeServiceTest.java
@@ -53,9 +53,13 @@
import androidx.test.platform.app.InstrumentationRegistry;
import com.android.car.CarLocalServices;
-import com.android.car.CarPowerManagementService;
import com.android.car.R;
+import com.android.car.power.CarPowerManagementService;
+import com.android.car.power.SilentModeController;
+import com.android.car.systeminterface.SystemInterface;
+import com.android.internal.app.IVoiceInteractionManagerService;
+import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
@@ -86,6 +90,10 @@
private PackageManager mMockPackageManager;
@Mock
private CarPowerManager mCarPowerManager;
+ @Mock
+ private SystemInterface mMockSystemInterface;
+ @Mock
+ private IVoiceInteractionManagerService mMockVoiceManager;
@Captor
private ArgumentCaptor<BroadcastReceiver> mDisplayBroadcastReceiver;
@@ -97,6 +105,7 @@
private ArgumentCaptor<CarPowerStateListener> mPowerStateListener;
private CarUserNoticeService mCarUserNoticeService;
+ private SilentModeController mSilentModeController;
private final Handler mHandler = new Handler(Looper.getMainLooper());
@@ -127,6 +136,10 @@
mockContextGetService(mMockContext, AppOpsManager.class, mMockAppOpsManager);
mockContextGetService(mMockContext, PackageManager.class, mMockPackageManager);
when(mMockPackageManager.getPackageUidAsUser(any(), anyInt())).thenReturn(1);
+ mSilentModeController = new SilentModeController(mMockContext, mMockSystemInterface,
+ mMockVoiceManager, "");
+ mSilentModeController.init();
+ CarLocalServices.addService(SilentModeController.class, mSilentModeController);
mCarUserNoticeService = new CarUserNoticeService(mMockContext, mHandler);
mCarUserNoticeService.init();
verify(mMockCarUserService).addUserLifecycleListener(
@@ -134,6 +147,12 @@
verify(mMockContext).registerReceiver(mDisplayBroadcastReceiver.capture(),
any(IntentFilter.class));
verify(mCarPowerManager).setListener(mPowerStateListener.capture());
+ sendPowerStateChange(CarPowerManager.CarPowerStateListener.ON);
+ }
+
+ @After
+ public void tearDown() {
+ CarLocalServices.removeServiceForTest(SilentModeController.class);
}
@Test
diff --git a/tests/carservice_unit_test/src/com/android/car/user/CarUserServiceTest.java b/tests/carservice_unit_test/src/com/android/car/user/CarUserServiceTest.java
index c20b56e8..4383919 100644
--- a/tests/carservice_unit_test/src/com/android/car/user/CarUserServiceTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/user/CarUserServiceTest.java
@@ -16,15 +16,18 @@
package com.android.car.user;
-import static android.car.test.mocks.AndroidMockitoHelper.getResult;
import static android.car.test.mocks.AndroidMockitoHelper.mockUmCreateUser;
import static android.car.test.mocks.AndroidMockitoHelper.mockUmGetUserInfo;
import static android.car.test.mocks.AndroidMockitoHelper.mockUmGetUsers;
+import static android.car.test.mocks.AndroidMockitoHelper.mockUmRemoveUser;
+import static android.car.test.mocks.JavaMockitoHelper.getResult;
import static android.car.test.util.UserTestingHelper.UserInfoBuilder;
import static android.content.pm.UserInfo.FLAG_ADMIN;
import static android.content.pm.UserInfo.FLAG_EPHEMERAL;
import static android.content.pm.UserInfo.FLAG_GUEST;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doNothing;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.google.common.truth.Truth.assertThat;
@@ -34,12 +37,11 @@
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 static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.ArgumentMatchers.notNull;
-import static org.mockito.ArgumentMatchers.same;
-import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
@@ -54,26 +56,26 @@
import android.app.IActivityManager;
import android.car.CarOccupantZoneManager.OccupantTypeEnum;
import android.car.CarOccupantZoneManager.OccupantZoneInfo;
+import android.car.drivingstate.CarUxRestrictions;
import android.car.settings.CarSettings;
import android.car.test.mocks.AbstractExtendedMockitoTestCase;
-import android.car.test.mocks.AndroidMockitoHelper;
import android.car.test.mocks.BlockingAnswer;
import android.car.test.util.BlockingResultReceiver;
import android.car.testapi.BlockingUserLifecycleListener;
import android.car.user.CarUserManager;
import android.car.user.CarUserManager.UserLifecycleEvent;
-import android.car.user.CarUserManager.UserLifecycleEventType;
import android.car.user.CarUserManager.UserLifecycleListener;
import android.car.user.UserCreationResult;
import android.car.user.UserIdentificationAssociationResponse;
import android.car.user.UserRemovalResult;
import android.car.user.UserSwitchResult;
-import android.car.userlib.CarUserManagerHelper;
import android.car.userlib.HalCallback;
import android.car.userlib.HalCallback.HalCallbackStatus;
import android.car.userlib.UserHalHelper;
import android.car.userlib.UserHelper;
+import android.content.BroadcastReceiver;
import android.content.Context;
+import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.content.res.Resources;
@@ -106,7 +108,10 @@
import androidx.test.InstrumentationRegistry;
+import com.android.car.CarUxRestrictionsManagerService;
import com.android.car.hal.UserHalService;
+import com.android.car.internal.common.CommonConstants.UserLifecycleEventType;
+import com.android.car.internal.common.UserHelperLite;
import com.android.internal.R;
import com.android.internal.infra.AndroidFuture;
import com.android.internal.os.IResultReceiver;
@@ -145,20 +150,19 @@
private static final int NON_EXISTING_USER = 55; // must not be on mExistingUsers
- private static final long DEFAULT_LIFECYCLE_TIMESTAMP = 1;
-
@Mock private Context mMockContext;
@Mock private Context mApplicationContext;
@Mock private LocationManager mLocationManager;
@Mock private UserHalService mUserHal;
- @Mock private CarUserManagerHelper mMockedCarUserManagerHelper;
@Mock private IActivityManager mMockedIActivityManager;
@Mock private UserManager mMockedUserManager;
@Mock private Resources mMockedResources;
@Mock private Drawable mMockedDrawable;
- @Mock private UserMetrics mUserMetrics;
- @Mock IResultReceiver mSwitchUserUiReceiver;
- @Mock PackageManager mPackageManager;
+ @Mock private InitialUserSetter mInitialUserSetter;
+ @Mock private UserPreCreator mUserPreCreator;
+ @Mock private IResultReceiver mSwitchUserUiReceiver;
+ @Mock private PackageManager mPackageManager;
+ @Mock private CarUxRestrictionsManagerService mUxRestrictionService;
private final BlockingUserLifecycleListener mUserLifecycleListener =
BlockingUserLifecycleListener.forAnyEvent().build();
@@ -169,7 +173,6 @@
private boolean mUser0TaskExecuted;
private FakeCarOccupantZoneService mFakeCarOccupantZoneService;
- private final int mGetUserInfoRequestType = InitialUserInfoRequestType.COLD_BOOT;
private final AndroidFuture<UserSwitchResult> mUserSwitchFuture = new AndroidFuture<>();
private final AndroidFuture<UserCreationResult> mUserCreationFuture = new AndroidFuture<>();
private final AndroidFuture<UserIdentificationAssociationResponse> mUserAssociationRespFuture =
@@ -183,14 +186,19 @@
private final @NonNull UserInfo mAdminUser = new UserInfoBuilder(100)
.setAdmin(true)
.build();
+ private final @NonNull UserInfo mAnotherAdminUser = new UserInfoBuilder(108)
+ .setAdmin(true)
+ .build();
private final @NonNull UserInfo mGuestUser = new UserInfoBuilder(111)
.setGuest(true)
.setEphemeral(true)
.build();
private final @NonNull UserInfo mRegularUser = new UserInfoBuilder(222)
.build();
- private final List<UserInfo> mExistingUsers =
- Arrays.asList(mAdminUser, mGuestUser, mRegularUser);
+ private final @NonNull UserInfo mAnotherRegularUser = new UserInfoBuilder(333)
+ .build();
+ private final List<UserInfo> mExistingUsers = Arrays
+ .asList(mAdminUser, mAnotherAdminUser, mGuestUser, mRegularUser, mAnotherRegularUser);
@Override
protected void onSessionBuilder(CustomMockitoSessionBuilder builder) {
@@ -200,7 +208,9 @@
// considerably (more than 5 minutes total, instead of just a couple seconds). So, it's
// mocking UserHelper.isHeadlessSystemUser() (on mockIsHeadlessSystemUser()) instead...
.spyStatic(UserHelper.class)
- .spyStatic(CarProperties.class);
+ .spyStatic(UserHelperLite.class)
+ .spyStatic(CarProperties.class)
+ .spyStatic(Binder.class);
}
/**
@@ -222,18 +232,40 @@
mockUserHalSupported(true);
mockUserHalUserAssociationSupported(true);
doReturn(Optional.of(mAsyncCallTimeoutMs)).when(() -> CarProperties.user_hal_timeout());
- mCarUserService =
- new CarUserService(
- mMockContext,
- mUserHal,
- mMockedCarUserManagerHelper,
- mMockedUserManager,
- mMockedIActivityManager,
- 3, mUserMetrics);
+
+ mCarUserService = newCarUserService(/* switchGuestUserBeforeGoingSleep= */ false);
mFakeCarOccupantZoneService = new FakeCarOccupantZoneService(mCarUserService);
}
+ private BroadcastReceiver initService() {
+ ArgumentCaptor<BroadcastReceiver> captor = ArgumentCaptor.forClass(BroadcastReceiver.class);
+ when(mMockContext.registerReceiver(captor.capture(), argThat((filter) -> {
+ // NOTE: it's assuming there's just one action; if it supports more (like USER_CREATE),
+ // it need to be changed to search through all of them
+ return filter.getAction(0).equals(Intent.ACTION_USER_REMOVED);
+ }))).thenReturn(null);
+
+ mCarUserService.init();
+
+ BroadcastReceiver receiver = captor.getValue();
+ assertWithMessage("init() didn't register receiver for %s", Intent.ACTION_USER_REMOVED)
+ .that(receiver).isNotNull();
+
+ return receiver;
+ }
+
+ @Test
+ public void testInitAndRelease() {
+ // init()
+ BroadcastReceiver receiver = initService();
+ assertThat(receiver).isNotNull();
+
+ // release()
+ mCarUserService.release();
+ verify(mMockContext).unregisterReceiver(receiver);
+ }
+
@Test
public void testAddUserLifecycleListener_checkNullParameter() {
assertThrows(NullPointerException.class,
@@ -313,12 +345,12 @@
assertThat(actualEvent.getUserId()).isEqualTo(expectedNewUserId);
}
- private void verifyLastActiveUserSet(@UserIdInt int userId) {
- verify(mMockedCarUserManagerHelper).setLastActiveUser(userId);
+ private void verifyLastActiveUserSet(UserInfo user) {
+ verify(mInitialUserSetter).setLastActiveUser(user.id);
}
private void verifyLastActiveUserNotSet() {
- verify(mMockedCarUserManagerHelper, never()).setLastActiveUser(anyInt());
+ verify(mInitialUserSetter, never()).setLastActiveUser(any());
}
/**
@@ -343,7 +375,7 @@
sendUserSwitchingEvent(mAdminUser.id, mRegularUser.id);
- verifyLastActiveUserSet(mRegularUser.id);
+ verifyLastActiveUserSet(mRegularUser);
}
/**
@@ -527,6 +559,8 @@
@Test
public void testCreatePassenger() {
+ doNothing()
+ .when(() -> UserHelper.setDefaultNonAdminRestrictions(any(), any(), anyBoolean()));
int driverId = 90;
int passengerId = 99;
String userName = "testUser";
@@ -574,6 +608,19 @@
}
@Test
+ public void testSwitchDriver_failUxRestrictions() throws Exception {
+ mockExistingUsersAndCurrentUser(mAdminUser);
+ mockUxRestrictions();
+
+ mCarUserService.switchDriver(mRegularUser.id, mUserSwitchFuture);
+
+ assertThat(getUserSwitchResult().getStatus())
+ .isEqualTo(UserSwitchResult.STATUS_UX_RESTRICTION_FAILURE);
+ verifyNoUserSwitch();
+ assertNoHalUserSwitch();
+ }
+
+ @Test
public void testSwitchDriver_IfUserSwitchIsNotAllowed() throws Exception {
when(mMockedUserManager.getUserSwitchability())
.thenReturn(UserManager.SWITCHABILITY_STATUS_USER_SWITCH_DISALLOWED);
@@ -659,7 +706,7 @@
@Test
public void testGetAllPossibleDrivers() {
Set<Integer> expected = new HashSet<Integer>(Arrays.asList(10, 11, 13, 14));
- when(mMockedUserManager.getUsers(true)).thenReturn(prepareUserList());
+ when(mMockedUserManager.getAliveUsers()).thenReturn(prepareUserList());
mockIsHeadlessSystemUser(19, true);
for (UserInfo user : mCarUserService.getAllDrivers()) {
assertThat(expected).contains(user.id);
@@ -680,7 +727,7 @@
};
mockIsHeadlessSystemUser(18, true);
for (int i = 0; i < testCases.size(); i++) {
- when(mMockedUserManager.getUsers(true)).thenReturn(prepareUserList());
+ when(mMockedUserManager.getAliveUsers()).thenReturn(prepareUserList());
List<UserInfo> passengers = mCarUserService.getPassengers(testCases.keyAt(i));
HashSet<Integer> expected = testCases.valueAt(i);
for (UserInfo user : passengers) {
@@ -695,7 +742,8 @@
public void testRemoveUser_currentUserCannotBeRemoved() throws Exception {
mockCurrentUser(mAdminUser);
- UserRemovalResult result = mCarUserService.removeUser(mAdminUser.id);
+ UserRemovalResult result = mCarUserService.removeUser(mAdminUser.id,
+ /* hasCallerRestrictions= */ false);
assertThat(result.getStatus())
.isEqualTo(UserRemovalResult.STATUS_TARGET_USER_IS_CURRENT_USER);
@@ -703,7 +751,8 @@
@Test
public void testRemoveUser_userNotExist() throws Exception {
- UserRemovalResult result = mCarUserService.removeUser(15);
+ UserRemovalResult result = mCarUserService.removeUser(15,
+ /* hasCallerRestrictions= */ false);
assertThat(result.getStatus())
.isEqualTo(UserRemovalResult.STATUS_USER_DOES_NOT_EXIST);
@@ -711,70 +760,60 @@
@Test
public void testRemoveUser_LastAdminUser_success() throws Exception {
- List<UserInfo> existingUsers =
- new ArrayList<UserInfo>(Arrays.asList(mAdminUser, mGuestUser, mRegularUser));
UserInfo currentUser = mRegularUser;
- mockExistingUsersAndCurrentUser(existingUsers, currentUser);
UserInfo removeUser = mAdminUser;
- doAnswer((invocation) -> {
- existingUsers.remove(removeUser);
- return true;
- }).when(mMockedUserManager).removeUser(eq(removeUser.id));
+ List<UserInfo> existingUsers = Arrays.asList(mAdminUser, mRegularUser);
- UserRemovalResult result = mCarUserService.removeUser(mAdminUser.id);
+ mockExistingUsersAndCurrentUser(existingUsers, currentUser);
+ mockRemoveUser(removeUser.id);
+
+ UserRemovalResult result = mCarUserService.removeUser(mAdminUser.id,
+ /* hasCallerRestrictions= */ false);
assertThat(result.getStatus())
.isEqualTo(UserRemovalResult.STATUS_SUCCESSFUL_LAST_ADMIN_REMOVED);
- assertHalRemove(currentUser, removeUser, existingUsers);
+ assertHalRemove(currentUser, removeUser);
}
@Test
public void testRemoveUser_notLastAdminUser_success() throws Exception {
- List<UserInfo> existingUsers =
- new ArrayList<UserInfo>(Arrays.asList(mAdminUser, mGuestUser, mRegularUser));
UserInfo currentUser = mRegularUser;
// Give admin rights to current user.
currentUser.flags = currentUser.flags | FLAG_ADMIN;
- mockExistingUsersAndCurrentUser(existingUsers, currentUser);
-
+ mockExistingUsersAndCurrentUser(mExistingUsers, currentUser);
UserInfo removeUser = mAdminUser;
- doAnswer((invocation) -> {
- existingUsers.remove(removeUser);
- return true;
- }).when(mMockedUserManager).removeUser(eq(removeUser.id));
+ mockRemoveUser(removeUser.id);
- UserRemovalResult result = mCarUserService.removeUser(removeUser.id);
+ UserRemovalResult result = mCarUserService.removeUser(removeUser.id,
+ /* hasCallerRestrictions= */ false);
assertThat(result.getStatus()).isEqualTo(UserRemovalResult.STATUS_SUCCESSFUL);
- assertHalRemove(currentUser, removeUser, existingUsers);
+ assertHalRemove(currentUser, removeUser);
}
@Test
public void testRemoveUser_success() throws Exception {
- List<UserInfo> existingUsers =
- new ArrayList<UserInfo>(Arrays.asList(mAdminUser, mGuestUser, mRegularUser));
UserInfo currentUser = mAdminUser;
- mockExistingUsersAndCurrentUser(existingUsers, currentUser);
+ mockExistingUsersAndCurrentUser(mExistingUsers, currentUser);
UserInfo removeUser = mRegularUser;
- doAnswer((invocation) -> {
- existingUsers.remove(removeUser);
- return true;
- }).when(mMockedUserManager).removeUser(eq(removeUser.id));
+ mockRemoveUser(removeUser.id);
- UserRemovalResult result = mCarUserService.removeUser(removeUser.id);
+ UserRemovalResult result = mCarUserService.removeUser(removeUser.id,
+ /* hasCallerRestrictions= */ false);
assertThat(result.getStatus()).isEqualTo(UserRemovalResult.STATUS_SUCCESSFUL);
- assertHalRemove(currentUser, removeUser, existingUsers);
+ assertHalRemove(currentUser, removeUser);
}
@Test
public void testRemoveUser_halNotSupported() throws Exception {
mockExistingUsersAndCurrentUser(mAdminUser);
- int removeUserId = mRegularUser.id;
+ UserInfo removeUser = mRegularUser;
mockUserHalSupported(false);
- when(mMockedUserManager.removeUser(removeUserId)).thenReturn(true);
+ mockRemoveUser(removeUser.id);
- UserRemovalResult result = mCarUserService.removeUser(removeUserId);
+ UserRemovalResult result = mCarUserService.removeUser(removeUser.id,
+ /* hasCallerRestrictions= */ false);
assertThat(result.getStatus()).isEqualTo(UserRemovalResult.STATUS_SUCCESSFUL);
verify(mUserHal, never()).removeUser(any());
@@ -784,14 +823,103 @@
public void testRemoveUser_androidFailure() throws Exception {
mockExistingUsersAndCurrentUser(mAdminUser);
int targetUserId = mRegularUser.id;
- when(mMockedUserManager.removeUser(targetUserId)).thenReturn(false);
+ // No need to mock um.removeUser as it returns false by default
- UserRemovalResult result = mCarUserService.removeUser(targetUserId);
+ UserRemovalResult result = mCarUserService.removeUser(targetUserId,
+ /* hasCallerRestrictions= */ false);
assertThat(result.getStatus()).isEqualTo(UserRemovalResult.STATUS_ANDROID_FAILURE);
}
@Test
+ public void testRemoveUserWithRestriction_nonAdminRemovingAdmin() throws Exception {
+ UserInfo currentUser = mRegularUser;
+ UserInfo removeUser = mAdminUser;
+ mockGetCallingUserHandle(currentUser.id);
+ mockExistingUsersAndCurrentUser(mExistingUsers, currentUser);
+ mockRemoveUser(removeUser.id);
+
+ assertThrows(SecurityException.class, () -> mCarUserService.removeUser(removeUser.id,
+ /* hasCallerRestrictions= */ true));
+ }
+
+ @Test
+ public void testRemoveUserWithRestriction_nonAdminRemovingNonAdmin() throws Exception {
+ UserInfo currentUser = mRegularUser;
+ UserInfo removeUser = mAnotherRegularUser;
+ mockGetCallingUserHandle(currentUser.id);
+ mockExistingUsersAndCurrentUser(mExistingUsers, currentUser);
+ mockRemoveUser(removeUser.id);
+
+ assertThrows(SecurityException.class, () -> mCarUserService.removeUser(removeUser.id,
+ /* hasCallerRestrictions= */ true));
+ }
+
+ @Test
+ public void testRemoveUserWithRestriction_nonAdminRemovingItself() throws Exception {
+ UserInfo currentUser = mRegularUser;
+ UserInfo removeUser = mRegularUser;
+ mockGetCallingUserHandle(currentUser.id);
+ mockExistingUsersAndCurrentUser(mExistingUsers, currentUser);
+ mockRemoveUser(removeUser.id);
+
+ UserRemovalResult result = mCarUserService.removeUser(removeUser.id,
+ /* hasCallerRestrictions= */ true);
+
+ // TODO(b/155913815): return STATUS_SUCCESSFUL_SET_EPHEMERAL instead
+ assertThat(result.getStatus())
+ .isEqualTo(UserRemovalResult.STATUS_TARGET_USER_IS_CURRENT_USER);
+ assertNoHalUserRemoval();
+ }
+
+ @Test
+ public void testRemoveUserWithRestriction_adminRemovingAdmin() throws Exception {
+ UserInfo currentUser = mAdminUser;
+ UserInfo removeUser = mAnotherAdminUser;
+ mockGetCallingUserHandle(currentUser.id);
+ mockExistingUsersAndCurrentUser(mExistingUsers, currentUser);
+ mockRemoveUser(removeUser.id);
+
+ UserRemovalResult result = mCarUserService.removeUser(removeUser.id,
+ /* hasCallerRestrictions= */ true);
+
+ assertThat(result.getStatus()).isEqualTo(UserRemovalResult.STATUS_SUCCESSFUL);
+ assertHalRemove(currentUser, removeUser);
+ }
+
+ @Test
+ public void testRemoveUserWithRestriction_adminRemovingNonAdmin() throws Exception {
+ UserInfo currentUser = mAdminUser;
+ UserInfo removeUser = mRegularUser;
+ mockGetCallingUserHandle(currentUser.id);
+ mockExistingUsersAndCurrentUser(mExistingUsers, currentUser);
+ mockRemoveUser(removeUser.id);
+
+ UserRemovalResult result = mCarUserService.removeUser(removeUser.id,
+ /* hasCallerRestrictions= */ true);
+
+ assertThat(result.getStatus()).isEqualTo(UserRemovalResult.STATUS_SUCCESSFUL);
+ assertHalRemove(currentUser, removeUser);
+ }
+
+ @Test
+ public void testRemoveUserWithRestriction_adminRemovingItself() throws Exception {
+ UserInfo currentUser = mAdminUser;
+ UserInfo removeUser = mAdminUser;
+ mockGetCallingUserHandle(currentUser.id);
+ mockExistingUsersAndCurrentUser(mExistingUsers, currentUser);
+ mockRemoveUser(removeUser.id);
+
+ UserRemovalResult result = mCarUserService.removeUser(removeUser.id,
+ /* hasCallerRestrictions= */ true);
+
+ // TODO(b/155913815): return STATUS_SUCCESSFUL_SET_EPHEMERAL instead
+ assertThat(result.getStatus())
+ .isEqualTo(UserRemovalResult.STATUS_TARGET_USER_IS_CURRENT_USER);
+ assertNoHalUserRemoval();
+ }
+
+ @Test
public void testSwitchUser_nullReceiver() throws Exception {
mockExistingUsersAndCurrentUser(mAdminUser);
@@ -813,6 +941,8 @@
assertThat(getUserSwitchResult().getStatus())
.isEqualTo(UserSwitchResult.STATUS_OK_USER_ALREADY_IN_FOREGROUND);
+
+ verifyNoUserSwitch();
}
@Test
@@ -830,6 +960,7 @@
// update current user due to successful user switch
mockCurrentUser(mRegularUser);
sendUserUnlockedEvent(mRegularUser.id);
+ assertNoHalUserSwitch();
assertNoPostSwitch();
}
@@ -842,7 +973,8 @@
assertThat(getUserSwitchResult().getStatus())
.isEqualTo(UserSwitchResult.STATUS_ANDROID_FAILURE);
- verify(mUserHal, never()).switchUser(any(), anyInt(), any());
+
+ assertNoHalUserSwitch();
}
@Test
@@ -892,6 +1024,7 @@
UserSwitchResult result = getUserSwitchResult();
assertThat(result.getStatus()).isEqualTo(UserSwitchResult.STATUS_HAL_FAILURE);
assertThat(result.getErrorMessage()).isEqualTo(mSwitchUserResponse.errorMessage);
+ verifyNoUserSwitch();
}
@Test
@@ -905,6 +1038,20 @@
assertThat(getUserSwitchResult().getStatus())
.isEqualTo(UserSwitchResult.STATUS_HAL_INTERNAL_FAILURE);
+ verifyNoUserSwitch();
+ }
+
+ @Test
+ public void testSwitchUser_failUxRestrictions() throws Exception {
+ mockUxRestrictions();
+ mockExistingUsersAndCurrentUser(mAdminUser);
+
+ mCarUserService.switchUser(mGuestUser.id, mAsyncCallTimeoutMs, mUserSwitchFuture);
+
+ assertThat(getUserSwitchResult().getStatus())
+ .isEqualTo(UserSwitchResult.STATUS_UX_RESTRICTION_FAILURE);
+ assertNoHalUserSwitch();
+ verifyNoUserSwitch();
}
@Test
@@ -1230,6 +1377,7 @@
assertThat(result.getErrorMessage()).isNull();
assertNoHalUserCreation();
verifyNoUserRemoved();
+ assertNoHalUserRemoval();
}
@Test
@@ -1246,12 +1394,14 @@
assertThat(result.getErrorMessage()).isNull();
assertNoHalUserCreation();
verifyNoUserRemoved();
+ assertNoHalUserRemoval();
}
@Test
public void testCreateUser_internalHalFailure() throws Exception {
mockUmCreateUser(mMockedUserManager, "dude", "TypeONegative", 108, 42);
mockHalCreateUser(HalCallback.STATUS_INVALID, /* not_used_status= */ -1);
+ mockRemoveUser(42);
mCarUserService.createUser("dude", "TypeONegative", 108, mAsyncCallTimeoutMs,
mUserCreationFuture);
@@ -1261,12 +1411,14 @@
assertThat(result.getUser()).isNull();
assertThat(result.getErrorMessage()).isNull();
verifyUserRemoved(42);
+ assertNoHalUserRemoval();
}
@Test
public void testCreateUser_halFailure() throws Exception {
mockUmCreateUser(mMockedUserManager, "dude", "TypeONegative", 108, 42);
mockHalCreateUser(HalCallback.STATUS_OK, CreateUserStatus.FAILURE);
+ mockRemoveUser(42);
mCarUserService.createUser("dude", "TypeONegative", 108, mAsyncCallTimeoutMs,
mUserCreationFuture);
@@ -1277,12 +1429,14 @@
assertThat(result.getErrorMessage()).isNull();
verifyUserRemoved(42);
+ assertNoHalUserRemoval();
}
@Test
public void testCreateUser_halServiceThrowsRuntimeException() throws Exception {
mockUmCreateUser(mMockedUserManager, "dude", "TypeONegative", 108, 42);
mockHalCreateUserThrowsRuntimeException();
+ mockRemoveUser(42);
mCarUserService.createUser("dude", "TypeONegative", 108, mAsyncCallTimeoutMs,
mUserCreationFuture);
@@ -1293,6 +1447,7 @@
assertThat(result.getErrorMessage()).isNull();
verifyUserRemoved(42);
+ assertNoHalUserRemoval();
}
@Test
@@ -1308,7 +1463,8 @@
UserCreationResult result = getUserCreationResult();
assertThat(result.getStatus()).isEqualTo(UserCreationResult.STATUS_SUCCESSFUL);
- verify(mUserHal, never()).createUser(any(), anyInt(), any());
+ assertNoHalUserCreation();
+ assertNoHalUserRemoval();
}
@Test
@@ -1342,6 +1498,7 @@
assertThat(newUser.flags).isEqualTo(UserInfo.FLAG_EPHEMERAL);
verifyNoUserRemoved();
+ assertNoHalUserRemoval();
}
@Test
@@ -1377,159 +1534,7 @@
assertThat(newUser.flags).isEqualTo(UserInfo.FLAG_EPHEMERAL);
verifyNoUserRemoved();
- }
-
- @Test
- public void testGetUserInfo_nullReceiver() throws Exception {
- assertThrows(NullPointerException.class, () -> mCarUserService
- .getInitialUserInfo(mGetUserInfoRequestType, mAsyncCallTimeoutMs, null));
- }
-
- @Test
- public void testGetInitialUserInfo_validReceiver_invalidPermission() throws Exception {
- mockManageUsersPermission(android.Manifest.permission.MANAGE_USERS, false);
- assertThrows(SecurityException.class,
- () -> mCarUserService.getInitialUserInfo(42, 108, mReceiver));
- }
-
- @Test
- public void testGetUserInfo_defaultResponse() throws Exception {
- mockExistingUsersAndCurrentUser(mAdminUser);
-
- mGetUserInfoResponse.action = InitialUserInfoResponseAction.DEFAULT;
- mockGetInitialInfo(mAdminUser.id, mGetUserInfoResponse);
-
- mCarUserService.getInitialUserInfo(mGetUserInfoRequestType, mAsyncCallTimeoutMs, mReceiver);
-
- assertThat(mReceiver.getResultCode()).isEqualTo(HalCallback.STATUS_OK);
- Bundle resultData = mReceiver.getResultData();
- assertThat(resultData).isNotNull();
- assertInitialInfoAction(resultData, mGetUserInfoResponse.action);
- assertInitialInfoUserLocales(resultData, null);
- }
-
- @Test
- public void testGetUserInfo_defaultResponse_withLocale() throws Exception {
- mockExistingUsersAndCurrentUser(mAdminUser);
-
- mGetUserInfoResponse.action = InitialUserInfoResponseAction.DEFAULT;
- mGetUserInfoResponse.userLocales = "LOL";
- mockGetInitialInfo(mAdminUser.id, mGetUserInfoResponse);
-
- mCarUserService.getInitialUserInfo(mGetUserInfoRequestType, mAsyncCallTimeoutMs, mReceiver);
-
- assertThat(mReceiver.getResultCode()).isEqualTo(HalCallback.STATUS_OK);
- Bundle resultData = mReceiver.getResultData();
- assertThat(resultData).isNotNull();
- assertInitialInfoAction(resultData, mGetUserInfoResponse.action);
- assertInitialInfoUserLocales(resultData, "LOL");
- }
-
- @Test
- public void testGetUserInfo_switchUserResponse() throws Exception {
- int switchUserId = mGuestUser.id;
- mockExistingUsersAndCurrentUser(mAdminUser);
-
- mGetUserInfoResponse.action = InitialUserInfoResponseAction.SWITCH;
- mGetUserInfoResponse.userToSwitchOrCreate.userId = switchUserId;
- mockGetInitialInfo(mAdminUser.id, mGetUserInfoResponse);
-
- mCarUserService.getInitialUserInfo(mGetUserInfoRequestType, mAsyncCallTimeoutMs, mReceiver);
-
- assertThat(mReceiver.getResultCode()).isEqualTo(HalCallback.STATUS_OK);
- Bundle resultData = mReceiver.getResultData();
- assertThat(resultData).isNotNull();
- assertInitialInfoAction(resultData, mGetUserInfoResponse.action);
- assertUserId(resultData, switchUserId);
- assertNoUserFlags(resultData);
- assertNoUserName(resultData);
- }
-
- @Test
- public void testGetUserInfo_createUserResponse() throws Exception {
- int newUserFlags = 42;
- String newUserName = "TheDude";
-
- mockExistingUsersAndCurrentUser(mAdminUser);
-
- mGetUserInfoResponse.action = InitialUserInfoResponseAction.CREATE;
- mGetUserInfoResponse.userToSwitchOrCreate.flags = newUserFlags;
- mGetUserInfoResponse.userNameToCreate = newUserName;
- mockGetInitialInfo(mAdminUser.id, mGetUserInfoResponse);
-
- mCarUserService.getInitialUserInfo(mGetUserInfoRequestType, mAsyncCallTimeoutMs, mReceiver);
-
- assertThat(mReceiver.getResultCode()).isEqualTo(HalCallback.STATUS_OK);
- Bundle resultData = mReceiver.getResultData();
- assertThat(resultData).isNotNull();
- assertInitialInfoAction(resultData, mGetUserInfoResponse.action);
- assertNoUserId(resultData);
- assertUserFlags(resultData, newUserFlags);
- assertUserName(resultData, newUserName);
- }
-
- @Test
- public void testGetUserInfo_halNotSupported() throws Exception {
- mockExistingUsersAndCurrentUser(mAdminUser);
- mockUserHalSupported(false);
-
- mCarUserService.getInitialUserInfo(mGetUserInfoRequestType, mAsyncCallTimeoutMs, mReceiver);
-
- verify(mUserHal, never()).getInitialUserInfo(anyInt(), anyInt(), any(), any());
- assertThat(mReceiver.getResultCode()).isEqualTo(HalCallback.STATUS_HAL_NOT_SUPPORTED);
- }
-
- /**
- * Tests the {@code getUserInfo()} that's used by other services.
- */
- @Test
- public void testGetInitialUserInfo() throws Exception {
- int requestType = 42;
- mockExistingUsersAndCurrentUser(mAdminUser);
- HalCallback<InitialUserInfoResponse> callback = (s, r) -> { };
- mCarUserService.getInitialUserInfo(requestType, callback);
- verify(mUserHal).getInitialUserInfo(eq(requestType), anyInt(), mUsersInfoCaptor.capture(),
- same(callback));
- assertDefaultUsersInfo(mUsersInfoCaptor.getValue(), mAdminUser);
- }
-
- @Test
- public void testGetInitialUserInfo_nullCallback() throws Exception {
- assertThrows(NullPointerException.class,
- () -> mCarUserService.getInitialUserInfo(42, null));
- }
-
- @Test
- public void testGetInitialUserInfo_halNotSupported_callback() throws Exception {
- int requestType = 42;
- mockUserHalSupported(false);
- HalCallback<InitialUserInfoResponse> callback = (s, r) -> { };
-
- mCarUserService.getInitialUserInfo(requestType, callback);
-
- verify(mUserHal, never()).getInitialUserInfo(anyInt(), anyInt(), any(), any());
- }
-
- @Test
- public void testGetInitialUserInfo_invalidPermission() throws Exception {
- mockManageUsersPermission(android.Manifest.permission.MANAGE_USERS, false);
- assertThrows(SecurityException.class,
- () -> mCarUserService.getInitialUserInfo(42, (s, r) -> { }));
- }
-
- @Test
- public void testGetInitialUser_invalidPermission() throws Exception {
- mockManageUsersPermission(android.Manifest.permission.INTERACT_ACROSS_USERS, false);
- mockManageUsersPermission(android.Manifest.permission.INTERACT_ACROSS_USERS_FULL, false);
- assertThrows(SecurityException.class, () -> mCarUserService.getInitialUser());
- }
-
- @Test
- public void testGetInitialUser_ok() throws Exception {
- assertThat(mCarUserService.getInitialUser()).isNull();
- UserInfo user = new UserInfo();
- mCarUserService.setInitialUser(user);
- assertThat(mCarUserService.getInitialUser()).isSameAs(user);
+ verify(mUserHal, never()).removeUser(any());
}
@Test
@@ -1724,23 +1729,190 @@
}
@Test
- public void testUserMetric_SendEvent() throws Exception {
- mockExistingUsersAndCurrentUser(mAdminUser);
- sendUserSwitchingEvent(mAdminUser.id, mRegularUser.id);
+ public void testInitBootUser_halNotSupported() {
+ mockUserHalSupported(false);
- verify(mUserMetrics).onEvent(CarUserManager.USER_LIFECYCLE_EVENT_TYPE_SWITCHING,
- DEFAULT_LIFECYCLE_TIMESTAMP, mAdminUser.id, mRegularUser.id);
+ mCarUserService.initBootUser();
+
+ verify(mInitialUserSetter).set(argThat((info) -> {
+ return info.type == InitialUserSetter.TYPE_DEFAULT_BEHAVIOR
+ && info.userLocales == null;
+ }));
}
@Test
- public void testUserMetric_FirstUnlock() {
- int userId = 99;
- long timestampMs = 0;
- long duration = 153;
- int halResponseTime = 5;
- mCarUserService.onFirstUserUnlocked(userId, timestampMs, duration, halResponseTime);
+ public void testInitBootUser_halNullResponse() throws Exception {
+ mockExistingUsersAndCurrentUser(mAdminUser);
+ mockHalGetInitialInfo(mAdminUser.id, null);
- verify(mUserMetrics).logFirstUnlockedUser(userId, timestampMs, duration, halResponseTime);
+ mCarUserService.initBootUser();
+
+ verify(mInitialUserSetter).set(argThat((info) -> {
+ return info.type == InitialUserSetter.TYPE_DEFAULT_BEHAVIOR;
+ }));
+ }
+
+ @Test
+ public void testInitBootUser_halDefaultResponse() throws Exception {
+ mockExistingUsersAndCurrentUser(mAdminUser);
+ mGetUserInfoResponse.action = InitialUserInfoResponseAction.DEFAULT;
+ mGetUserInfoResponse.userLocales = "LOL";
+ mockHalGetInitialInfo(mAdminUser.id, mGetUserInfoResponse);
+
+ mCarUserService.initBootUser();
+
+ verify(mInitialUserSetter).set(argThat((info) -> {
+ return info.type == InitialUserSetter.TYPE_DEFAULT_BEHAVIOR
+ && info.userLocales.equals("LOL");
+ }));
+ }
+
+ @Test
+ public void testInitBootUser_halSwitchResponse() throws Exception {
+ int switchUserId = mGuestUser.id;
+ mockExistingUsersAndCurrentUser(mAdminUser);
+ mGetUserInfoResponse.action = InitialUserInfoResponseAction.SWITCH;
+ mGetUserInfoResponse.userToSwitchOrCreate.userId = switchUserId;
+ mockHalGetInitialInfo(mAdminUser.id, mGetUserInfoResponse);
+
+ mCarUserService.initBootUser();
+
+ verify(mInitialUserSetter).set(argThat((info) -> {
+ return info.type == InitialUserSetter.TYPE_SWITCH
+ && info.switchUserId == switchUserId;
+ }));
+ }
+
+ @Test
+ public void testInitBootUser_halCreateResponse() throws Exception {
+ int newUserFlags = 42;
+ String newUserName = "TheDude";
+ mockExistingUsersAndCurrentUser(mAdminUser);
+ mGetUserInfoResponse.action = InitialUserInfoResponseAction.CREATE;
+ mGetUserInfoResponse.userToSwitchOrCreate.flags = newUserFlags;
+ mGetUserInfoResponse.userNameToCreate = newUserName;
+ mockHalGetInitialInfo(mAdminUser.id, mGetUserInfoResponse);
+
+ mCarUserService.initBootUser();
+
+ verify(mInitialUserSetter).set(argThat((info) -> {
+ return info.type == InitialUserSetter.TYPE_CREATE
+ && info.newUserFlags == newUserFlags
+ && info.newUserName == newUserName;
+ }));
+ }
+
+ @Test
+ public void testOnSuspend_replace() throws Exception {
+ mockExistingUsersAndCurrentUser(mGuestUser);
+ when(mInitialUserSetter.canReplaceGuestUser(any())).thenReturn(true);
+
+ CarUserService service = newCarUserService(/* switchGuestUserBeforeGoingSleep= */ true);
+ service.onSuspend();
+
+ verify(mInitialUserSetter).set(argThat((info) -> {
+ return info.type == InitialUserSetter.TYPE_REPLACE_GUEST;
+ }));
+ verify(mUserPreCreator).managePreCreatedUsers();
+ }
+
+ @Test
+ public void testOnSuspend_notReplace() throws Exception {
+ mockExistingUsersAndCurrentUser(mAdminUser);
+
+ CarUserService service = newCarUserService(/* switchGuestUserBeforeGoingSleep= */ true);
+ service.onSuspend();
+
+ verify(mInitialUserSetter, never()).set(any());
+ verify(mUserPreCreator).managePreCreatedUsers();
+ }
+
+ @Test
+ public void testOnResume_halNullResponse_replaceTrue() throws Exception {
+ mockExistingUsersAndCurrentUser(mAdminUser);
+ mockHalGetInitialInfo(mAdminUser.id, null);
+
+ mCarUserService.onResume();
+
+ verify(mInitialUserSetter).set(argThat((info) -> {
+ return info.type == InitialUserSetter.TYPE_DEFAULT_BEHAVIOR
+ && info.replaceGuest;
+ }));
+ }
+
+ @Test
+ public void testOnResume_halDefaultResponse_replaceGuest()
+ throws Exception {
+ mockExistingUsersAndCurrentUser(mAdminUser);
+ mGetUserInfoResponse.action = InitialUserInfoResponseAction.DEFAULT;
+ mGetUserInfoResponse.userLocales = "LOL";
+ mockHalGetInitialInfo(mAdminUser.id, mGetUserInfoResponse);
+
+ mCarUserService.onResume();
+
+ verify(mInitialUserSetter).set(argThat((info) -> {
+ return info.type == InitialUserSetter.TYPE_DEFAULT_BEHAVIOR && info.replaceGuest
+ && info.userLocales.equals("LOL");
+ }));
+ }
+
+ @Test
+ public void testOnResume_halSwitchResponse_replaceGuest()
+ throws Exception {
+ int switchUserId = mGuestUser.id;
+ mockExistingUsersAndCurrentUser(mAdminUser);
+ mGetUserInfoResponse.action = InitialUserInfoResponseAction.SWITCH;
+ mGetUserInfoResponse.userToSwitchOrCreate.userId = switchUserId;
+ mockHalGetInitialInfo(mAdminUser.id, mGetUserInfoResponse);
+
+ mCarUserService.onResume();
+
+ verify(mInitialUserSetter).set(argThat((info) -> {
+ return info.type == InitialUserSetter.TYPE_SWITCH && info.replaceGuest
+ && info.switchUserId == switchUserId;
+ }));
+ }
+
+ @Test
+ public void testOnResume_halDisabled()
+ throws Exception {
+ mockUserHalSupported(false);
+
+ mCarUserService.onResume();
+
+ verify(mInitialUserSetter).set(argThat((info) -> {
+ return info.type == InitialUserSetter.TYPE_DEFAULT_BEHAVIOR && info.replaceGuest;
+ }));
+ }
+
+ @Test
+ public void testInitialUserInfoRequestType_FirstBoot() throws Exception {
+ when(mInitialUserSetter.hasInitialUser()).thenReturn(false);
+ when(mMockContext.getPackageManager()).thenReturn(mPackageManager);
+ when(mPackageManager.isDeviceUpgrading()).thenReturn(true);
+
+ assertThat(mCarUserService.getInitialUserInfoRequestType())
+ .isEqualTo(InitialUserInfoRequestType.FIRST_BOOT);
+ }
+
+ @Test
+ public void testInitialUserInfoRequestType_FirstBootAfterOTA() throws Exception {
+ when(mInitialUserSetter.hasInitialUser()).thenReturn(true);
+ when(mMockContext.getPackageManager()).thenReturn(mPackageManager);
+ when(mPackageManager.isDeviceUpgrading()).thenReturn(true);
+
+ assertThat(mCarUserService.getInitialUserInfoRequestType())
+ .isEqualTo(InitialUserInfoRequestType.FIRST_BOOT_AFTER_OTA);
+ }
+
+ @Test
+ public void testInitialUserInfoRequestType_ColdBoot() throws Exception {
+ when(mInitialUserSetter.hasInitialUser()).thenReturn(true);
+ when(mMockContext.getPackageManager()).thenReturn(mPackageManager);
+ when(mPackageManager.isDeviceUpgrading()).thenReturn(false);
+
+ assertThat(mCarUserService.getInitialUserInfoRequestType())
+ .isEqualTo(InitialUserInfoRequestType.COLD_BOOT);
}
@NonNull
@@ -1759,6 +1931,22 @@
return getResult(mUserAssociationRespFuture);
}
+ private CarUserService newCarUserService(boolean switchGuestUserBeforeGoingSleep) {
+ when(mMockedResources
+ .getBoolean(com.android.car.R.bool.config_switchGuestUserBeforeGoingSleep))
+ .thenReturn(switchGuestUserBeforeGoingSleep);
+
+ return new CarUserService(
+ mMockContext,
+ mUserHal,
+ mMockedUserManager,
+ mMockedIActivityManager,
+ /* maxRunningUsers= */ 3,
+ mInitialUserSetter,
+ mUserPreCreator,
+ mUxRestrictionService);
+ }
+
/**
* This method must be called for cases where the service infers the user id of the caller
* using Binder - it's not worth the effort of mocking such (native) calls.
@@ -1788,9 +1976,10 @@
}
private void mockExistingUsers(@NonNull List<UserInfo> existingUsers) {
- mockUmGetUsers(mMockedUserManager, existingUsers);
+ mockUmGetUsers(mMockedUserManager, /* excludePartial= */ false, /* excludeDying= */ false,
+ /* excludePreCreated= */ true, existingUsers);
for (UserInfo user : existingUsers) {
- AndroidMockitoHelper.mockUmGetUserInfo(mMockedUserManager, user);
+ mockUmGetUserInfo(mMockedUserManager, user);
}
}
@@ -1803,7 +1992,12 @@
when(mMockedIActivityManager.switchUser(user.id)).thenReturn(result);
}
- private void mockGetInitialInfo(@UserIdInt int currentUserId,
+ private void mockRemoveUser(@UserIdInt int userId) {
+ BroadcastReceiver receiver = initService();
+ mockUmRemoveUser(mMockContext, mMockedUserManager, receiver, userId);
+ }
+
+ private void mockHalGetInitialInfo(@UserIdInt int currentUserId,
@NonNull InitialUserInfoResponse response) {
UsersInfo usersInfo = newUsersInfo(currentUserId);
doAnswer((invocation) -> {
@@ -1813,12 +2007,12 @@
(HalCallback<InitialUserInfoResponse>) invocation.getArguments()[3];
callback.onResponse(HalCallback.STATUS_OK, response);
return null;
- }).when(mUserHal).getInitialUserInfo(eq(mGetUserInfoRequestType), eq(mAsyncCallTimeoutMs),
+ }).when(mUserHal).getInitialUserInfo(anyInt(), eq(mAsyncCallTimeoutMs),
eq(usersInfo), notNull());
}
private void mockIsHeadlessSystemUser(@UserIdInt int userId, boolean mode) {
- doReturn(mode).when(() -> UserHelper.isHeadlessSystemUser(userId));
+ doReturn(mode).when(() -> UserHelperLite.isHeadlessSystemUser(userId));
}
private void mockHalSwitch(@UserIdInt int currentUserId, @NonNull UserInfo androidTargetUser,
@@ -1992,6 +2186,14 @@
when(mUserHal.isUserAssociationSupported()).thenReturn(result);
}
+ private void mockUxRestrictions() {
+ CarUxRestrictions restrictions = new CarUxRestrictions.Builder(/* reqOpt= */ false,
+ CarUxRestrictions.UX_RESTRICTIONS_NO_SETUP,
+ System.currentTimeMillis()).build();
+ Log.v(TAG, "Mocking UX restrictions: " + restrictions);
+ when(mUxRestrictionService.getCurrentUxRestrictions()).thenReturn(restrictions);
+ }
+
/**
* Asserts a {@link UsersInfo} that was created based on {@link #mockCurrentUsers(UserInfo)}.
*/
@@ -2022,6 +2224,11 @@
verify(mMockedUserManager, never()).removeUser(anyInt());
}
+ private void verifyNoUserSwitch() throws Exception {
+ verify(mMockedIActivityManager, never()).switchUser(anyInt());
+ assertNoPostSwitch();
+ }
+
@NonNull
private UsersInfo newUsersInfo(@UserIdInt int currentUserId) {
UsersInfo infos = new UsersInfo();
@@ -2119,22 +2326,25 @@
eq(mAsyncCallTimeoutMs), any());
}
- private void assertNoHalUserCreation() {
- verify(mUserHal, never()).createUser(any(), eq(mAsyncCallTimeoutMs), any());
+ private void assertNoHalUserSwitch() {
+ verify(mUserHal, never()).switchUser(any(), anyInt(), any());
}
- private void assertHalRemove(@NonNull UserInfo currentUser, @NonNull UserInfo removeUser,
- @NonNull List<UserInfo> existingUsers) {
+ private void assertNoHalUserCreation() {
+ verify(mUserHal, never()).createUser(any(), anyInt(), any());
+ }
+
+ private void assertNoHalUserRemoval() {
+ verify(mUserHal, never()).removeUser(any());
+ }
+
+ private void assertHalRemove(@NonNull UserInfo currentUser, @NonNull UserInfo removeUser) {
+ verify(mMockedUserManager).removeUser(removeUser.id);
ArgumentCaptor<RemoveUserRequest> request =
ArgumentCaptor.forClass(RemoveUserRequest.class);
verify(mUserHal).removeUser(request.capture());
assertThat(request.getValue().removedUserInfo.userId).isEqualTo(removeUser.id);
assertThat(request.getValue().usersInfo.currentUser.userId).isEqualTo(currentUser.id);
- UsersInfo receivedExistingUsers = request.getValue().usersInfo;
- assertThat(receivedExistingUsers.numberUsers).isEqualTo(existingUsers.size());
- for (int i = 0; i < receivedExistingUsers.numberUsers; i++) {
- assertSameUser(receivedExistingUsers.existingUsers.get(i), existingUsers.get(i));
- }
}
@NonNull
@@ -2187,7 +2397,7 @@
private void sendUserLifecycleEvent(@UserIdInt int fromUserId, @UserIdInt int toUserId,
@UserLifecycleEventType int eventType) {
- mCarUserService.onUserLifecycleEvent(eventType, DEFAULT_LIFECYCLE_TIMESTAMP, fromUserId,
+ mCarUserService.onUserLifecycleEvent(eventType, fromUserId,
toUserId);
}
diff --git a/tests/carservice_unit_test/src/com/android/car/user/ExperimentalCarUserManagerUnitTest.java b/tests/carservice_unit_test/src/com/android/car/user/ExperimentalCarUserManagerUnitTest.java
index 2869d5d..dfb30a6 100644
--- a/tests/carservice_unit_test/src/com/android/car/user/ExperimentalCarUserManagerUnitTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/user/ExperimentalCarUserManagerUnitTest.java
@@ -15,7 +15,7 @@
*/
package com.android.car.user;
-import static android.car.test.mocks.AndroidMockitoHelper.getResult;
+import static android.car.test.mocks.JavaMockitoHelper.getResult;
import static com.google.common.truth.Truth.assertThat;
diff --git a/tests/carservice_unit_test/src/android/car/userlib/InitialUserSetterTest.java b/tests/carservice_unit_test/src/com/android/car/user/InitialUserSetterTest.java
similarity index 80%
rename from tests/carservice_unit_test/src/android/car/userlib/InitialUserSetterTest.java
rename to tests/carservice_unit_test/src/com/android/car/user/InitialUserSetterTest.java
index 419a7f8..e42d3aa 100644
--- a/tests/carservice_unit_test/src/android/car/userlib/InitialUserSetterTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/user/InitialUserSetterTest.java
@@ -13,11 +13,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package android.car.userlib;
+package com.android.car.user;
+import static android.car.test.mocks.AndroidMockitoHelper.mockUmGetAliveUsers;
+import static android.car.test.mocks.AndroidMockitoHelper.mockUmGetSystemUser;
+import static android.car.test.mocks.AndroidMockitoHelper.mockUmGetUserInfo;
import static android.car.test.mocks.CarArgumentMatchers.isUserInfo;
import static android.car.test.util.UserTestingHelper.newGuestUser;
import static android.car.test.util.UserTestingHelper.newSecondaryUser;
+import static android.car.test.util.UserTestingHelper.newUser;
+import static android.os.UserHandle.USER_SYSTEM;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
@@ -41,9 +46,8 @@
import android.annotation.UserIdInt;
import android.app.ActivityManager;
import android.app.IActivityManager;
+import android.car.settings.CarSettings;
import android.car.test.mocks.AbstractExtendedMockitoTestCase;
-import android.car.userlib.InitialUserSetter.Builder;
-import android.car.userlib.InitialUserSetter.InitialUserInfo;
import android.content.Context;
import android.content.pm.UserInfo;
import android.content.pm.UserInfo.UserInfoFlag;
@@ -52,13 +56,17 @@
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
+import android.sysprop.CarProperties;
+import com.android.car.user.InitialUserSetter.Builder;
+import com.android.car.user.InitialUserSetter.InitialUserInfo;
import com.android.internal.widget.LockPatternUtils;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
+import java.util.Optional;
import java.util.function.Consumer;
public final class InitialUserSetterTest extends AbstractExtendedMockitoTestCase {
@@ -77,9 +85,6 @@
private Context mContext;
@Mock
- private CarUserManagerHelper mHelper;
-
- @Mock
private IActivityManager mIActivityManager;
@Mock
@@ -97,12 +102,13 @@
protected void onSessionBuilder(CustomMockitoSessionBuilder session) {
session
.spyStatic(ActivityManager.class)
+ .spyStatic(CarProperties.class)
.spyStatic(UserManager.class);
}
@Before
public void setFixtures() {
- mSetter = spy(new InitialUserSetter(mContext, mHelper, mUm, mListener,
+ mSetter = spy(new InitialUserSetter(mContext, mUm, mListener,
mLockPatternUtils, OWNER_NAME, GUEST_NAME));
doReturn(mIActivityManager).when(() -> ActivityManager.getService());
@@ -722,7 +728,6 @@
@Test
public void testDefaultBehavior_nonFirstBoot_ok_guestDoesNotNeedToBeReplaced()
throws Exception {
- boolean ephemeral = true; // ephemeral doesn't really matter in this test
UserInfo existingGuest = expectHasInitialGuest(USER_ID);
expectSwitchUser(USER_ID);
@@ -797,6 +802,211 @@
null);
}
+ @Test
+ public void testGetInitialUser_WithValidLastActiveUser_ReturnsLastActiveUser() {
+ setLastActiveUser(12);
+ mockGeAliveUsers(USER_SYSTEM, 10, 11, 12);
+
+ assertThat(mSetter.getInitialUser(/* usesOverrideUserIdProperty= */ true))
+ .isEqualTo(12);
+ }
+
+ @Test
+ public void testGetInitialUser_WithNonExistLastActiveUser_ReturnsLastPersistentUser() {
+ setLastActiveUser(120);
+ setLastPersistentActiveUser(110);
+ mockGeAliveUsers(USER_SYSTEM, 100, 110);
+
+ assertThat(mSetter.getInitialUser(/* usesOverrideUserIdProperty= */ true))
+ .isEqualTo(110);
+ // should have reset last active user
+ assertThat(getSettingsInt(CarSettings.Global.LAST_ACTIVE_USER_ID))
+ .isEqualTo(UserHandle.USER_NULL);
+ }
+
+ @Test
+ public void testGetInitialUser_WithNonExistLastActiveAndPersistentUsers_ReturnsSmallestUser() {
+ setLastActiveUser(120);
+ setLastPersistentActiveUser(120);
+ mockGeAliveUsers(USER_SYSTEM, 100, 110);
+
+ assertThat(mSetter.getInitialUser(/* usesOverrideUserIdProperty= */ true))
+ .isEqualTo(100);
+ // should have reset both settions
+ assertThat(getSettingsInt(CarSettings.Global.LAST_ACTIVE_USER_ID))
+ .isEqualTo(UserHandle.USER_NULL);
+ assertThat(getSettingsInt(CarSettings.Global.LAST_ACTIVE_PERSISTENT_USER_ID))
+ .isEqualTo(UserHandle.USER_NULL);
+ }
+
+ @Test
+ public void testGetInitialUser_WithOverrideId_ReturnsOverrideId() {
+ setDefaultBootUserOverride(11);
+ setLastActiveUser(12);
+ mockGeAliveUsers(USER_SYSTEM, 10, 11, 12);
+
+ assertThat(mSetter.getInitialUser(/* usesOverrideUserIdProperty= */ true))
+ .isEqualTo(11);
+ }
+
+ @Test
+ public void testGetInitialUser_WithInvalidOverrideId_ReturnsLastActiveUserId() {
+ setDefaultBootUserOverride(15);
+ setLastActiveUser(12);
+ mockGeAliveUsers(USER_SYSTEM, 10, 11, 12);
+
+ assertThat(mSetter.getInitialUser(/* usesOverrideUserIdProperty= */ true))
+ .isEqualTo(12);
+ }
+
+ @Test
+ public void testGetInitialUser_WithInvalidOverrideAndLastActiveUserIds_ReturnsSmallestUserId() {
+ int minimumUserId = 10;
+ int invalidLastActiveUserId = 14;
+ int invalidOverrideUserId = 15;
+
+ setDefaultBootUserOverride(invalidOverrideUserId);
+ setLastActiveUser(invalidLastActiveUserId);
+ mockGeAliveUsers(USER_SYSTEM, minimumUserId, minimumUserId + 1, minimumUserId + 2);
+
+ assertThat(mSetter.getInitialUser(/* usesOverrideUserIdProperty= */ true))
+ .isEqualTo(minimumUserId);
+ }
+
+ @Test
+ public void testGetInitialUser_WhenOverrideIdIsIgnored() {
+ setDefaultBootUserOverride(11);
+ setLastActiveUser(12);
+ mockGeAliveUsers(USER_SYSTEM, 10, 11, 12);
+
+ assertThat(mSetter.getInitialUser(/* usesOverrideUserIdProperty= */ false))
+ .isEqualTo(12);
+ }
+
+ @Test
+ public void testGetInitialUser_WithEmptyReturnNull() {
+ assertThat(mSetter.getInitialUser(/* usesOverrideUserIdProperty= */ true))
+ .isEqualTo(UserHandle.USER_NULL);
+ }
+
+ @Test
+ public void testHasInitialUser_onlyHeadlessSystemUser() {
+ mockIsHeadlessSystemUserMode(true);
+ mockGeAliveUsers(USER_SYSTEM);
+
+ assertThat(mSetter.hasInitialUser()).isFalse();
+ }
+
+ @Test
+ public void testHasInitialUser_onlyNonHeadlessSystemUser() {
+ mockIsHeadlessSystemUserMode(false);
+ mockGeAliveUsers(USER_SYSTEM);
+
+ assertThat(mSetter.hasInitialUser()).isTrue();
+ }
+
+ @Test
+ public void testHasInitialUser_hasNormalUser() {
+ mockIsHeadlessSystemUserMode(true);
+ mockGeAliveUsers(USER_SYSTEM, 10);
+
+ assertThat(mSetter.hasInitialUser()).isTrue();
+ }
+
+ @Test
+ public void testHasInitialUser_hasOnlyWorkProfile() {
+ mockIsHeadlessSystemUserMode(true);
+
+ UserInfo systemUser = newUser(UserHandle.USER_SYSTEM);
+
+ UserInfo workProfile = newUser(10);
+ workProfile.userType = UserManager.USER_TYPE_PROFILE_MANAGED;
+ assertThat(workProfile.isManagedProfile()).isTrue(); // Confidence check
+
+ mockGetAliveUsers(systemUser, workProfile);
+
+ assertThat(mSetter.hasInitialUser()).isFalse();
+ }
+
+ @Test
+ public void testSetLastActiveUser_headlessSystem() {
+ mockIsHeadlessSystemUserMode(true);
+ mockUmGetSystemUser(mUm);
+
+ mSetter.setLastActiveUser(UserHandle.USER_SYSTEM);
+
+ assertSettingsNotSet(CarSettings.Global.LAST_ACTIVE_USER_ID);
+ assertSettingsNotSet(CarSettings.Global.LAST_ACTIVE_PERSISTENT_USER_ID);
+ }
+
+ @Test
+ public void testSetLastActiveUser_nonHeadlessSystem() {
+ mockIsHeadlessSystemUserMode(false);
+ mockUmGetSystemUser(mUm);
+
+ mSetter.setLastActiveUser(UserHandle.USER_SYSTEM);
+
+ assertThat(getSettingsInt(CarSettings.Global.LAST_ACTIVE_USER_ID))
+ .isEqualTo(UserHandle.USER_SYSTEM);
+ assertThat(getSettingsInt(CarSettings.Global.LAST_ACTIVE_PERSISTENT_USER_ID))
+ .isEqualTo(UserHandle.USER_SYSTEM);
+ }
+
+ @Test
+ public void testSetLastActiveUser_nonExistingUser() {
+ // Don't need to mock um.getUser(), it will return null by default
+ mSetter.setLastActiveUser(42);
+
+ assertThat(getSettingsInt(CarSettings.Global.LAST_ACTIVE_USER_ID)).isEqualTo(42);
+ assertSettingsNotSet(CarSettings.Global.LAST_ACTIVE_PERSISTENT_USER_ID);
+ }
+
+ @Test
+ public void testSetLastActiveUser_ephemeralUser() {
+ int persistentUserId = 42;
+ int ephemeralUserid = 108;
+ mockUmGetUserInfo(mUm, persistentUserId, NO_FLAGS);
+ mockUmGetUserInfo(mUm, ephemeralUserid, UserInfo.FLAG_EPHEMERAL);
+
+ mSetter.setLastActiveUser(persistentUserId);
+ mSetter.setLastActiveUser(ephemeralUserid);
+
+ assertThat(getSettingsInt(CarSettings.Global.LAST_ACTIVE_USER_ID))
+ .isEqualTo(ephemeralUserid);
+ assertThat(getSettingsInt(CarSettings.Global.LAST_ACTIVE_PERSISTENT_USER_ID))
+ .isEqualTo(persistentUserId);
+ }
+
+ @Test
+ public void testSetLastActiveUser_nonEphemeralUser() {
+ mockUmGetUserInfo(mUm, 42, NO_FLAGS);
+
+ mSetter.setLastActiveUser(42);
+
+ assertThat(getSettingsInt(CarSettings.Global.LAST_ACTIVE_USER_ID)).isEqualTo(42);
+ assertThat(getSettingsInt(CarSettings.Global.LAST_ACTIVE_PERSISTENT_USER_ID)).isEqualTo(42);
+ }
+
+ private void mockGeAliveUsers(@NonNull @UserIdInt int... userIds) {
+ mockUmGetAliveUsers(mUm, userIds);
+ }
+
+ private void mockGetAliveUsers(@NonNull UserInfo... users) {
+ mockUmGetAliveUsers(mUm, users);
+ }
+
+ private void setLastActiveUser(@UserIdInt int userId) {
+ putSettingsInt(CarSettings.Global.LAST_ACTIVE_USER_ID, userId);
+ }
+
+ private void setLastPersistentActiveUser(@UserIdInt int userId) {
+ putSettingsInt(CarSettings.Global.LAST_ACTIVE_PERSISTENT_USER_ID, userId);
+ }
+
+ private void setDefaultBootUserOverride(@UserIdInt int userId) {
+ doReturn(Optional.of(userId)).when(() -> CarProperties.boot_user_override_id());
+ }
+
private UserInfo expectHasInitialUser(@UserIdInt int userId) {
return expectHasInitialUser(userId, /* supportsOverrideUserIdProperty= */ false);
}
@@ -812,8 +1022,8 @@
}
private UserInfo expectHasInitialUser(@UserIdInt int userId, boolean isGuest,
boolean supportsOverrideUserIdProperty) {
- when(mHelper.hasInitialUser()).thenReturn(true);
- when(mHelper.getInitialUser(supportsOverrideUserIdProperty)).thenReturn(userId);
+ doReturn(true).when(mSetter).hasInitialUser();
+ doReturn(userId).when(mSetter).getInitialUser(supportsOverrideUserIdProperty);
return isGuest ? expectGuestExists(userId, /* isEphemeral= */ true)
: expectUserExists(userId);
}
@@ -891,7 +1101,7 @@
private void verifyUserSwitched(@UserIdInt int userId) throws Exception {
verify(mSetter).startForegroundUser(userId);
- verify(mHelper).setLastActiveUser(userId);
+ verify(mSetter).setLastActiveUser(userId);
}
private void verifyUserNeverSwitched() throws Exception {
@@ -954,7 +1164,7 @@
}
private void verifyLastActiveUserNeverSet() {
- verify(mHelper, never()).setLastActiveUser(anyInt());
+ verify(mSetter, never()).setLastActiveUser(anyInt());
}
private void assertInitialUserSet(@NonNull UserInfo expectedUser) {
diff --git a/tests/carservice_unit_test/src/com/android/car/user/UserMetricsTest.java b/tests/carservice_unit_test/src/com/android/car/user/UserMetricsTest.java
deleted file mode 100644
index 5e97f3a..0000000
--- a/tests/carservice_unit_test/src/com/android/car/user/UserMetricsTest.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright (C) 2020 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.car.user;
-
-import static android.car.user.CarUserManager.USER_LIFECYCLE_EVENT_TYPE_STARTING;
-import static android.car.user.CarUserManager.USER_LIFECYCLE_EVENT_TYPE_STOPPED;
-import static android.car.user.CarUserManager.USER_LIFECYCLE_EVENT_TYPE_STOPPING;
-import static android.car.user.CarUserManager.USER_LIFECYCLE_EVENT_TYPE_SWITCHING;
-import static android.car.user.CarUserManager.USER_LIFECYCLE_EVENT_TYPE_UNLOCKED;
-import static android.car.user.CarUserManager.USER_LIFECYCLE_EVENT_TYPE_UNLOCKING;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import static org.testng.Assert.assertThrows;
-
-
-import android.annotation.UserIdInt;
-import android.os.SystemClock;
-import android.util.SparseArray;
-
-import com.android.car.user.UserMetrics.UserStartingMetric;
-import com.android.car.user.UserMetrics.UserStoppingMetric;
-
-import org.junit.Test;
-
-public final class UserMetricsTest {
-
- private final UserMetrics mUserMetrics = new UserMetrics();
- @UserIdInt private final int mFromUserId = 10;
- @UserIdInt private final int mUserId = 11;
-
- @Test
- public void testStartingEvent_success() {
- long timestamp = sendStartingEvent(mUserId);
-
- assertStartTime(timestamp, mUserId);
- }
-
- @Test
- public void testStartingEvent_multipleCallsDifferentUser() {
- long timestamp1 = sendStartingEvent(mUserId);
- int userId = 12;
- long timestamp2 = sendStartingEvent(userId);
-
- assertStartTime(timestamp1, mUserId);
- assertStartTime(timestamp2, userId);
- }
-
- @Test
- public void testStartingEvent_multipleCallsSameUser() {
- long timestamp1 = sendStartingEvent(mUserId);
- assertStartTime(timestamp1, mUserId);
- long timestamp2 = sendStartingEvent(mUserId);
-
- assertStartTime(timestamp2, mUserId);
- }
-
- @Test
- public void testSwitchingEvent_failure() {
- sendSwitchingEvent(mFromUserId, mUserId);
-
- assertNoStartingMetric(mUserId);
- }
-
- @Test
- public void testSwitchingEvent_success() {
- sendStartingEvent(mUserId);
- long timestamp = sendSwitchingEvent(mFromUserId, mUserId);
-
- assertSwitchTime(timestamp, mFromUserId, mUserId);
- }
-
- @Test
- public void testUnlockingEvent_failure() {
- sendUnlockingEvent(mUserId);
-
- assertNoStartingMetric(mUserId);
- }
-
- @Test
- public void testUnlockingEvent_success() {
- sendStartingEvent(mUserId);
- long timestamp = sendUnlockingEvent(mUserId);
-
- assertUnlockingTime(timestamp, mUserId);
- }
-
- @Test
- public void testUnlockedEvent_failure() {
- sendUnlockedEvent(mUserId);
-
- assertNoStartingMetric(mUserId);
- }
-
- @Test
- public void testUnlockedEvent_success() {
- long timestamp = sendStartingEvent(mUserId);
- assertStartTime(timestamp, mUserId);
- sendUnlockedEvent(mUserId);
-
- // a successful unlocked event would have removed the metric
- assertNoStartingMetric(mUserId);
- }
-
- @Test
- public void testStopingEvent_success() {
- long timestamp = sendStopingEvent(mUserId);
-
- assertStopingTime(timestamp, mUserId);
- }
-
- @Test
- public void testStopingEvent_multipleCallsDifferentUser() {
- long timestamp1 = sendStopingEvent(mUserId);
- int userId = 12;
- long timestamp2 = sendStopingEvent(userId);
-
- assertStopingTime(timestamp1, mUserId);
- assertStopingTime(timestamp2, userId);
- }
-
- @Test
- public void testStopingEvent_multipleCallsSameUser() {
- long timestamp1 = sendStopingEvent(mUserId);
- assertStopingTime(timestamp1, mUserId);
- long timestamp2 = sendStopingEvent(mUserId);
-
- assertStopingTime(timestamp2, mUserId);
- }
-
- @Test
- public void testStoppedEvent_failure() {
- sendStoppedEvent(mUserId);
-
- assertNoStoppingMetric(mUserId);
- }
-
- @Test
- public void testStoppedEvent_success() {
- long timestamp = sendStopingEvent(mUserId);
- assertStopingTime(timestamp, mUserId);
- sendStoppedEvent(mUserId);
-
- // a successful stopped event would have removed the metric
- assertNoStoppingMetric(mUserId);
- }
-
- private long sendStartingEvent(@UserIdInt int userId) {
- long timestampMs = SystemClock.elapsedRealtimeNanos();
- mUserMetrics.onEvent(USER_LIFECYCLE_EVENT_TYPE_STARTING, timestampMs, /* fromUserId */ -1,
- userId);
- return timestampMs;
- }
-
- private long sendSwitchingEvent(@UserIdInt int fromUserId, @UserIdInt int userId) {
- long timestampMs = SystemClock.elapsedRealtimeNanos();
- mUserMetrics.onEvent(USER_LIFECYCLE_EVENT_TYPE_SWITCHING, timestampMs, fromUserId, userId);
- return timestampMs;
- }
-
- private long sendUnlockingEvent(@UserIdInt int userId) {
- long timestampMs = SystemClock.elapsedRealtimeNanos();
- mUserMetrics.onEvent(USER_LIFECYCLE_EVENT_TYPE_UNLOCKING, timestampMs, /* fromUserId */ -1,
- userId);
- return timestampMs;
- }
-
- private long sendUnlockedEvent(@UserIdInt int userId) {
- long timestampMs = SystemClock.elapsedRealtimeNanos();
- mUserMetrics.onEvent(USER_LIFECYCLE_EVENT_TYPE_UNLOCKED, timestampMs, /* fromUserId */ -1,
- userId);
- return timestampMs;
- }
-
- private long sendStopingEvent(@UserIdInt int userId) {
- long timestampMs = SystemClock.elapsedRealtimeNanos();
- mUserMetrics.onEvent(USER_LIFECYCLE_EVENT_TYPE_STOPPING, timestampMs, /* fromUserId */ -1,
- userId);
- return timestampMs;
- }
-
- private long sendStoppedEvent(@UserIdInt int userId) {
- long timestampMs = SystemClock.elapsedRealtimeNanos();
- mUserMetrics.onEvent(USER_LIFECYCLE_EVENT_TYPE_STOPPED, timestampMs, /* fromUserId */ -1,
- userId);
- return timestampMs;
- }
-
- private void assertStartTime(long timestamp, @UserIdInt int userId) {
- SparseArray<UserStartingMetric> startArray = mUserMetrics.getUserStartMetrics();
- UserStartingMetric metric = startArray.get(userId);
- assertThat(metric.startTime).isEqualTo(timestamp);
- }
-
- private void assertSwitchTime(long timestamp, @UserIdInt int fromUserId,
- @UserIdInt int userId) {
- SparseArray<UserStartingMetric> startArray = mUserMetrics.getUserStartMetrics();
- UserStartingMetric metric = startArray.get(userId);
- assertThat(metric.switchFromUserId).isEqualTo(fromUserId);
- assertThat(metric.switchTime).isEqualTo(timestamp);
- }
-
- private void assertUnlockingTime(long timestamp, int userId) {
- SparseArray<UserStartingMetric> startArray = mUserMetrics.getUserStartMetrics();
- UserStartingMetric metric = startArray.get(userId);
- assertThat(metric.unlockingTime).isEqualTo(timestamp);
- }
-
- private void assertNoStartingMetric(@UserIdInt int userId) {
- SparseArray<UserStartingMetric> startArray = mUserMetrics.getUserStartMetrics();
- assertThrows(NullPointerException.class, () -> startArray.get(userId));
- }
-
- private void assertStopingTime(long timestamp, @UserIdInt int userId) {
- SparseArray<UserStoppingMetric> stopArray = mUserMetrics.getUserStopMetrics();
- UserStoppingMetric metric = stopArray.get(userId);
- assertThat(metric.stopTime).isEqualTo(timestamp);
- }
-
- private void assertNoStoppingMetric(@UserIdInt int userId) {
- SparseArray<UserStoppingMetric> stopArray = mUserMetrics.getUserStopMetrics();
- assertThrows(NullPointerException.class, () -> stopArray.get(userId));
- }
-}
diff --git a/tests/carservice_unit_test/src/com/android/car/user/UserPreCreatorTest.java b/tests/carservice_unit_test/src/com/android/car/user/UserPreCreatorTest.java
new file mode 100644
index 0000000..b2beebb
--- /dev/null
+++ b/tests/carservice_unit_test/src/com/android/car/user/UserPreCreatorTest.java
@@ -0,0 +1,246 @@
+/*
+ * Copyright (C) 2020 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.car.user;
+
+import static android.car.test.util.UserTestingHelper.getDefaultUserType;
+import static android.car.test.util.UserTestingHelper.newGuestUser;
+import static android.car.test.util.UserTestingHelper.newSecondaryUser;
+
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doAnswer;
+import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
+
+import static org.mockito.AdditionalAnswers.answerVoid;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.annotation.UserIdInt;
+import android.car.test.mocks.AbstractExtendedMockitoTestCase;
+import android.car.test.mocks.SyncAnswer;
+import android.car.test.util.UserTestingHelper.UserInfoBuilder;
+import android.content.pm.UserInfo;
+import android.os.UserManager;
+import android.sysprop.CarProperties;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mock;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Optional;
+
+public final class UserPreCreatorTest extends AbstractExtendedMockitoTestCase {
+
+ private static final int USER_MANAGER_TIMEOUT_MS = 100;
+ private static final int ADDITIONAL_TIME_MS = 200;
+ private static final int PRE_CREATED_USER_ID = 24;
+ private static final int PRE_CREATED_GUEST_ID = 25;
+
+ @Mock
+ private UserManager mUserManager;
+
+ private UserPreCreator mUserPreCreator;
+
+ @Override
+ protected void onSessionBuilder(CustomMockitoSessionBuilder builder) {
+ builder.spyStatic(CarProperties.class);
+ }
+
+
+ @Before
+ public void setUpMocks() {
+ mUserPreCreator = spy(new UserPreCreator(mUserManager));
+ }
+
+ @Test
+ public void testPreCreatedUsersLessThanRequested() throws Exception {
+ // Set existing user
+ expectNoPreCreatedUser();
+ // Set number of requested user
+ setNumberRequestedUsersProperty(1);
+ setNumberRequestedGuestsProperty(0);
+ mockRunAsync();
+ SyncAnswer<UserInfo> syncUserInfo = mockPreCreateUser(/* isGuest= */ false);
+
+ mUserPreCreator.managePreCreatedUsers();
+ syncUserInfo.await(USER_MANAGER_TIMEOUT_MS);
+
+ verifyUserCreated(/* isGuest= */ false);
+ }
+
+ @Test
+ public void testPreCreatedGuestsLessThanRequested() throws Exception {
+ // Set existing user
+ expectNoPreCreatedUser();
+ // Set number of requested user
+ setNumberRequestedUsersProperty(0);
+ setNumberRequestedGuestsProperty(1);
+ mockRunAsync();
+ SyncAnswer<UserInfo> syncUserInfo = mockPreCreateUser(/* isGuest= */ true);
+
+ mUserPreCreator.managePreCreatedUsers();
+ syncUserInfo.await(USER_MANAGER_TIMEOUT_MS);
+
+ verifyUserCreated(/* isGuest= */ true);
+ }
+
+ @Test
+ public void testRemovePreCreatedUser() throws Exception {
+ UserInfo user = expectPreCreatedUser(/* isGuest= */ false,
+ /* isInitialized= */ true);
+ setNumberRequestedUsersProperty(0);
+ setNumberRequestedGuestsProperty(0);
+ mockRunAsync();
+
+ SyncAnswer<Boolean> syncRemoveStatus = mockRemoveUser(PRE_CREATED_USER_ID);
+
+ mUserPreCreator.managePreCreatedUsers();
+ syncRemoveStatus.await(USER_MANAGER_TIMEOUT_MS);
+
+ verifyUserRemoved(user);
+ }
+
+ @Test
+ public void testRemovePreCreatedGuest() throws Exception {
+ UserInfo user = expectPreCreatedUser(/* isGuest= */ true,
+ /* isInitialized= */ true);
+ setNumberRequestedUsersProperty(0);
+ setNumberRequestedGuestsProperty(0);
+ mockRunAsync();
+ SyncAnswer<Boolean> syncRemoveStatus = mockRemoveUser(PRE_CREATED_GUEST_ID);
+
+ mUserPreCreator.managePreCreatedUsers();
+ syncRemoveStatus.await(USER_MANAGER_TIMEOUT_MS);
+
+ verifyUserRemoved(user);
+ }
+
+ @Test
+ public void testRemoveInvalidPreCreatedUser() throws Exception {
+ UserInfo user = expectPreCreatedUser(/* isGuest= */ false,
+ /* isInitialized= */ false);
+ setNumberRequestedUsersProperty(0);
+ setNumberRequestedGuestsProperty(0);
+ mockRunAsync();
+ SyncAnswer<Boolean> syncRemoveStatus = mockRemoveUser(PRE_CREATED_USER_ID);
+
+ mUserPreCreator.managePreCreatedUsers();
+ syncRemoveStatus.await(ADDITIONAL_TIME_MS);
+
+ verifyUserRemoved(user);
+ }
+
+ @Test
+ public void testManagePreCreatedUsersDoNothing() throws Exception {
+ expectPreCreatedUser(/* isGuest= */ false, /* isInitialized= */ true);
+ setNumberRequestedUsersProperty(1);
+ setNumberRequestedGuestsProperty(0);
+ mockPreCreateUser(/* isGuest= */ false);
+ mockRemoveUser(PRE_CREATED_USER_ID);
+
+ mUserPreCreator.managePreCreatedUsers();
+
+ verifyPostPreCreatedUserSkipped();
+ }
+
+ @Test
+ public void testPreCreateUserExceptionLogged() throws Exception {
+ mockPreCreateUserException();
+ mUserPreCreator.preCreateUsers(false);
+
+ verifyPostPreCreatedUserException();
+ }
+
+ private SyncAnswer<UserInfo> mockPreCreateUserException() {
+ SyncAnswer<UserInfo> syncException = SyncAnswer.forException(new Exception());
+ when(mUserManager.preCreateUser(anyString()))
+ .thenAnswer(syncException);
+ return syncException;
+ }
+
+ private void verifyUserCreated(boolean isGuest) throws Exception {
+ String userType =
+ isGuest ? UserManager.USER_TYPE_FULL_GUEST : UserManager.USER_TYPE_FULL_SECONDARY;
+ verify(mUserManager).preCreateUser(eq(userType));
+ }
+
+ private void verifyUserRemoved(UserInfo user) throws Exception {
+ verify(mUserManager).removeUser(user.id);
+ }
+
+ private void verifyPostPreCreatedUserSkipped() throws Exception {
+ verify(mUserPreCreator, never()).runAsync(any());
+ }
+
+ private void verifyPostPreCreatedUserException() throws Exception {
+ verify(mUserPreCreator).logPrecreationFailure(anyString(), any());
+ }
+
+ private void setNumberRequestedUsersProperty(int numberUser) {
+ doReturn(Optional.of(numberUser)).when(() -> CarProperties.number_pre_created_users());
+ }
+
+ private void setNumberRequestedGuestsProperty(int numberGuest) {
+ doReturn(Optional.of(numberGuest)).when(() -> CarProperties.number_pre_created_guests());
+ }
+
+ private void mockRunAsync() {
+ doAnswer(answerVoid(Runnable::run)).when(mUserPreCreator).runAsync(any(Runnable.class));
+ }
+
+ private SyncAnswer<UserInfo> mockPreCreateUser(boolean isGuest) {
+ UserInfo newUser = isGuest ? newGuestUser(PRE_CREATED_GUEST_ID) :
+ newSecondaryUser(PRE_CREATED_USER_ID);
+ SyncAnswer<UserInfo> syncUserInfo = SyncAnswer.forReturn(newUser);
+ when(mUserManager.preCreateUser(getDefaultUserType(isGuest)))
+ .thenAnswer(syncUserInfo);
+
+ return syncUserInfo;
+ }
+
+ private SyncAnswer<Boolean> mockRemoveUser(@UserIdInt int userId) {
+ SyncAnswer<Boolean> syncRemoveStatus = SyncAnswer.forReturn(true);
+ when(mUserManager.removeUser(userId)).thenAnswer(syncRemoveStatus);
+
+ return syncRemoveStatus;
+ }
+
+ private void expectNoPreCreatedUser() throws Exception {
+ when(mUserManager.getUsers(/* excludePartial= */ true, /* excludeDying= */ true,
+ /* excludePreCreated= */ false)).thenReturn(new ArrayList<UserInfo>());
+ }
+
+ private UserInfo expectPreCreatedUser(boolean isGuest, boolean isInitialized)
+ throws Exception {
+ int userId = isGuest ? PRE_CREATED_GUEST_ID : PRE_CREATED_USER_ID;
+ UserInfo user = new UserInfoBuilder(userId)
+ .setGuest(isGuest)
+ .setPreCreated(true)
+ .setInitialized(isInitialized)
+ .build();
+
+ when(mUserManager.getUsers(/* excludePartial= */ true,
+ /* excludeDying= */ true, /* excludePreCreated= */ false))
+ .thenReturn(Arrays.asList(user));
+ return user;
+ }
+}
diff --git a/tests/carservice_unit_test/src/com/android/car/watchdog/CarWatchdogServiceUnitTest.java b/tests/carservice_unit_test/src/com/android/car/watchdog/CarWatchdogServiceUnitTest.java
index b1b04bb..8661151 100644
--- a/tests/carservice_unit_test/src/com/android/car/watchdog/CarWatchdogServiceUnitTest.java
+++ b/tests/carservice_unit_test/src/com/android/car/watchdog/CarWatchdogServiceUnitTest.java
@@ -16,7 +16,7 @@
package com.android.car.watchdog;
-import static android.car.test.mocks.AndroidMockitoHelper.mockUmGetUsers;
+import static android.car.test.mocks.AndroidMockitoHelper.mockUmGetAllUsers;
import static android.car.watchdog.CarWatchdogManager.TIMEOUT_CRITICAL;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
@@ -48,8 +48,6 @@
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
-import java.util.ArrayList;
-
/**
* <p>This class contains unit tests for the {@link CarWatchdogService}.
*/
@@ -137,7 +135,7 @@
private void setupUsers() {
when(mMockContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager);
- mockUmGetUsers(mUserManager, new ArrayList<UserInfo>());
+ mockUmGetAllUsers(mUserManager, new UserInfo[0]);
}
private ICarWatchdogClient registerMediator() throws Exception {
diff --git a/tests/obd2_app/AndroidManifest.xml b/tests/obd2_app/AndroidManifest.xml
index be6efa4..b9adf2a 100644
--- a/tests/obd2_app/AndroidManifest.xml
+++ b/tests/obd2_app/AndroidManifest.xml
@@ -1,5 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
-
<!-- Copyright (C) 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
@@ -13,25 +12,26 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.google.android.car.obd2app">
+ package="com.google.android.car.obd2app">
<uses-permission android:name="android.permission.BLUETOOTH"/>
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
- <application
- android:allowBackup="true"
- android:debuggable="true"
- android:icon="@mipmap/ic_launcher"
- android:label="@string/app_name"
- android:supportsRtl="true"
- android:theme="@style/AppTheme">
- <uses-library android:name="android.test.runner" />
+ <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+ <application android:allowBackup="true"
+ android:debuggable="true"
+ android:icon="@mipmap/ic_launcher"
+ android:label="@string/app_name"
+ android:supportsRtl="true"
+ android:theme="@style/AppTheme">
+ <uses-library android:name="android.test.runner"/>
- <activity android:name=".MainActivity">
+ <activity android:name=".MainActivity"
+ android:exported="true">
<intent-filter>
- <action android:name="android.intent.action.MAIN" />
+ <action android:name="android.intent.action.MAIN"/>
- <category android:name="android.intent.category.LAUNCHER" />
+ <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".SettingsActivity"/>
diff --git a/tests/usb/AoapHostApp/AndroidManifest.xml b/tests/usb/AoapHostApp/AndroidManifest.xml
index 2cac450..ff38db3 100644
--- a/tests/usb/AoapHostApp/AndroidManifest.xml
+++ b/tests/usb/AoapHostApp/AndroidManifest.xml
@@ -13,22 +13,23 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
- package="com.google.android.car.usb.aoap.host" >
- <application android:label="@string/app_title" >
- <uses-library android:name="android.test.runner" />
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+ package="com.google.android.car.usb.aoap.host">
+ <application android:label="@string/app_title">
+ <uses-library android:name="android.test.runner"/>
<activity android:name=".UsbAoapHostActivity"
- android:configChanges="keyboard|keyboardHidden" >
+ android:configChanges="keyboard|keyboardHidden"
+ android:exported="true">
<intent-filter>
- <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
+ <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"/>
</intent-filter>
- <meta-data
- android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
- android:resource="@xml/usb_device_filter"/>
+ <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
+ android:resource="@xml/usb_device_filter"/>
</activity>
<service android:name=".AoapSupportCheckService"
- android:exported="true" />
+ android:exported="true"/>
</application>
</manifest>
diff --git a/tests/usb/AoapPhoneCompanionApp/AndroidManifest.xml b/tests/usb/AoapPhoneCompanionApp/AndroidManifest.xml
index 7a1575f..85364cf 100644
--- a/tests/usb/AoapPhoneCompanionApp/AndroidManifest.xml
+++ b/tests/usb/AoapPhoneCompanionApp/AndroidManifest.xml
@@ -13,19 +13,20 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
- package="com.google.android.car.usb.aoap.companion" >
+ xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
+ package="com.google.android.car.usb.aoap.companion">
<uses-sdk android:minSdkVersion="24"/>
- <application android:label="@string/app_title" >
+ <application android:label="@string/app_title">
<activity android:name=".AoapPhoneCompanionActivity"
- android:configChanges="keyboard|keyboardHidden" >
+ android:configChanges="keyboard|keyboardHidden"
+ android:exported="true">
<intent-filter>
- <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" />
+ <action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"/>
</intent-filter>
- <meta-data
- android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
- android:resource="@xml/accessory_filter"/>
+ <meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
+ android:resource="@xml/accessory_filter"/>
</activity>
</application>
</manifest>
diff --git a/tools/emulator/vhal_emulator_test.py b/tools/emulator/vhal_emulator_test.py
index db17262..bf9cce1 100755
--- a/tools/emulator/vhal_emulator_test.py
+++ b/tools/emulator/vhal_emulator_test.py
@@ -25,8 +25,8 @@
a command of the form:
protoc -I=<proto_dir> --python_out=<out_dir> <proto_dir>/VehicleHalProto.proto
For example:
- protoDir=~/android/master/hardware/interfaces/automotive/vehicle/2.0/default/impl/vhal_v2_0/proto
- outDir=~/android/master/packages/services/Car/tools/emulator
+ protoDir=$ANDROID_BUILD_TOP/hardware/interfaces/automotive/vehicle/2.0/default/impl/vhal_v2_0/proto
+ outDir=$ANDROID_BUILD_TOP/packages/services/Car/tools/emulator
protoc -I=$protoDir --python_out=$outDir $protoDir/VehicleHalProto.proto
"""
diff --git a/user/car-user-lib/Android.bp b/user/car-user-lib/Android.bp
index a3415c1..c2cf323 100644
--- a/user/car-user-lib/Android.bp
+++ b/user/car-user-lib/Android.bp
@@ -18,8 +18,9 @@
"src/**/*.java",
],
libs: [
- "android.car.settings",
"android.hardware.automotive.vehicle-V2.0-java",
+ "android.car.settings",
+ "com.android.car.internal.common",
],
product_variables: {
pdk: {
diff --git a/user/car-user-lib/src/android/car/userlib/CarUserManagerHelper.java b/user/car-user-lib/src/android/car/userlib/CarUserManagerHelper.java
index 15a7d1a..8e419c8 100644
--- a/user/car-user-lib/src/android/car/userlib/CarUserManagerHelper.java
+++ b/user/car-user-lib/src/android/car/userlib/CarUserManagerHelper.java
@@ -17,29 +17,15 @@
package android.car.userlib;
import android.Manifest;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
import android.annotation.RequiresPermission;
-import android.annotation.UserIdInt;
import android.app.ActivityManager;
-import android.car.settings.CarSettings;
import android.content.Context;
import android.content.pm.UserInfo;
-import android.graphics.Bitmap;
-import android.os.UserHandle;
import android.os.UserManager;
-import android.provider.Settings;
-import android.sysprop.CarProperties;
import android.util.Log;
-import com.android.internal.util.UserIcons;
-
import com.google.android.collect.Sets;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Iterator;
-import java.util.List;
import java.util.Set;
/**
@@ -59,7 +45,6 @@
private static final String TAG = "CarUserManagerHelper";
private static final boolean DEBUG = false;
- private static final int BOOT_USER_NOT_FOUND = -1;
/**
* Default set of restrictions for Non-Admin users.
@@ -96,167 +81,6 @@
}
/**
- * Sets the last active user.
- */
- public void setLastActiveUser(@UserIdInt int userId) {
- if (UserHelper.isHeadlessSystemUser(userId)) {
- if (DEBUG) Log.d(TAG, "setLastActiveUser(): ignoring headless system user " + userId);
- return;
- }
- setUserIdGlobalProperty(CarSettings.Global.LAST_ACTIVE_USER_ID, userId);
-
- // TODO(b/155918094): change method to receive a UserInfo instead
- UserInfo user = mUserManager.getUserInfo(userId);
- if (user == null) {
- Log.w(TAG, "setLastActiveUser(): user " + userId + " doesn't exist");
- return;
- }
- if (!user.isEphemeral()) {
- setUserIdGlobalProperty(CarSettings.Global.LAST_ACTIVE_PERSISTENT_USER_ID, userId);
- }
- }
-
- private void setUserIdGlobalProperty(@NonNull String name, @UserIdInt int userId) {
- if (DEBUG) Log.d(TAG, "setting global property " + name + " to " + userId);
-
- Settings.Global.putInt(mContext.getContentResolver(), name, userId);
- }
-
- private int getUserIdGlobalProperty(@NonNull String name) {
- int userId = Settings.Global.getInt(mContext.getContentResolver(), name,
- UserHandle.USER_NULL);
- if (DEBUG) Log.d(TAG, "getting global property " + name + ": " + userId);
-
- return userId;
- }
-
- private void resetUserIdGlobalProperty(@NonNull String name) {
- if (DEBUG) Log.d(TAG, "resetting global property " + name);
-
- Settings.Global.putInt(mContext.getContentResolver(), name, UserHandle.USER_NULL);
- }
-
- /**
- * Gets the user id for the initial user to boot into. This is only applicable for headless
- * system user model. This method checks for a system property and will only work for system
- * apps.
- *
- * This method checks for the initial user via three mechanisms in this order:
- * <ol>
- * <li>Check for a boot user override via {@link CarProperties#boot_user_override_id()}</li>
- * <li>Check for the last active user in the system</li>
- * <li>Fallback to the smallest user id that is not {@link UserHandle.USER_SYSTEM}</li>
- * </ol>
- *
- * If any step fails to retrieve the stored id or the retrieved id does not exist on device,
- * then it will move onto the next step.
- *
- * @return user id of the initial user to boot into on the device, or
- * {@link UserHandle#USER_NULL} if there is no user available.
- */
- int getInitialUser(boolean usesOverrideUserIdProperty) {
-
- List<Integer> allUsers = userInfoListToUserIdList(getAllUsers());
-
- if (allUsers.isEmpty()) {
- return UserHandle.USER_NULL;
- }
-
- if (usesOverrideUserIdProperty) {
- int bootUserOverride = CarProperties.boot_user_override_id()
- .orElse(BOOT_USER_NOT_FOUND);
-
- // If an override user is present and a real user, return it
- if (bootUserOverride != BOOT_USER_NOT_FOUND
- && allUsers.contains(bootUserOverride)) {
- Log.i(TAG, "Boot user id override found for initial user, user id: "
- + bootUserOverride);
- return bootUserOverride;
- }
- }
-
- // If the last active user is not the SYSTEM user and is a real user, return it
- int lastActiveUser = getUserIdGlobalProperty(CarSettings.Global.LAST_ACTIVE_USER_ID);
- if (allUsers.contains(lastActiveUser)) {
- Log.i(TAG, "Last active user loaded for initial user: " + lastActiveUser);
- return lastActiveUser;
- }
- resetUserIdGlobalProperty(CarSettings.Global.LAST_ACTIVE_USER_ID);
-
- int lastPersistentUser = getUserIdGlobalProperty(
- CarSettings.Global.LAST_ACTIVE_PERSISTENT_USER_ID);
- if (allUsers.contains(lastPersistentUser)) {
- Log.i(TAG, "Last active, persistent user loaded for initial user: "
- + lastPersistentUser);
- return lastPersistentUser;
- }
- resetUserIdGlobalProperty(CarSettings.Global.LAST_ACTIVE_PERSISTENT_USER_ID);
-
- // If all else fails, return the smallest user id
- int returnId = Collections.min(allUsers);
- // TODO(b/158101909): the smallest user id is not always the initial user; a better approach
- // would be looking for the first ADMIN user, or keep track of all last active users (not
- // just the very last)
- Log.w(TAG, "Last active user (" + lastActiveUser + ") not found. Returning smallest user id"
- + " instead: " + returnId);
- return returnId;
- }
-
- /**
- * Checks whether the device has an initial user that can be switched to.
- */
- public boolean hasInitialUser() {
- List<UserInfo> allUsers = getAllUsers();
- for (int i = 0; i < allUsers.size(); i++) {
- UserInfo user = allUsers.get(i);
- if (user.isManagedProfile()) continue;
-
- return true;
- }
- return false;
- }
-
- private static List<Integer> userInfoListToUserIdList(List<UserInfo> allUsers) {
- ArrayList<Integer> list = new ArrayList<>(allUsers.size());
- for (UserInfo userInfo : allUsers) {
- list.add(userInfo.id);
- }
- return list;
- }
-
- /**
- * Gets all the users that can be brought to the foreground on the system.
- *
- * @return List of {@code UserInfo} for users that associated with a real person.
- */
- private List<UserInfo> getAllUsers() {
- if (UserManager.isHeadlessSystemUserMode()) {
- return getAllUsersExceptSystemUserAndSpecifiedUser(UserHandle.USER_SYSTEM);
- } else {
- return mUserManager.getUsers(/* excludeDying= */ true);
- }
- }
-
- /**
- * Get all the users except system user and the one with userId passed in.
- *
- * @param userId of the user not to be returned.
- * @return All users other than system user and user with userId.
- */
- private List<UserInfo> getAllUsersExceptSystemUserAndSpecifiedUser(int userId) {
- List<UserInfo> users = mUserManager.getUsers(/* excludeDying= */true);
-
- for (Iterator<UserInfo> iterator = users.iterator(); iterator.hasNext(); ) {
- UserInfo userInfo = iterator.next();
- if (userInfo.id == userId || userInfo.id == UserHandle.USER_SYSTEM) {
- // Remove user with userId from the list.
- iterator.remove();
- }
- }
- return users;
- }
-
- /**
* Grants admin permissions to the user.
*
* @param user User to be upgraded to Admin status.
@@ -279,38 +103,12 @@
}
/**
- * Creates a new non-admin user on the system.
- *
- * @param userName Name to give to the newly created user.
- * @return Newly created non-admin user, null if failed to create a user.
- *
- * @deprecated non-admin restrictions should be set by resources overlay
- */
- @Deprecated
- @Nullable
- public UserInfo createNewNonAdminUser(String userName) {
- UserInfo user = mUserManager.createUser(userName, 0);
- if (user == null) {
- // Couldn't create user, most likely because there are too many.
- Log.w(TAG, "can't create non-admin user.");
- return null;
- }
- setDefaultNonAdminRestrictions(user, /* enable= */ true);
-
- assignDefaultIcon(user);
- return user;
- }
-
- /**
* Sets the values of default Non-Admin restrictions to the passed in value.
*
* @param userInfo User to set restrictions on.
* @param enable If true, restriction is ON, If false, restriction is OFF.
- *
- * @deprecated non-admin restrictions should be set by resources overlay
*/
- @Deprecated
- public void setDefaultNonAdminRestrictions(UserInfo userInfo, boolean enable) {
+ private void setDefaultNonAdminRestrictions(UserInfo userInfo, boolean enable) {
for (String restriction : DEFAULT_NON_ADMIN_RESTRICTIONS) {
mUserManager.setUserRestriction(restriction, enable, userInfo.getUserHandle());
}
@@ -327,54 +125,4 @@
mUserManager.setUserRestriction(restriction, enable, userInfo.getUserHandle());
}
}
-
- /**
- * Switches (logs in) to another user given user id.
- *
- * @param id User id to switch to.
- * @return {@code true} if user switching succeed.
- *
- * @deprecated should use {@link android.car.user.CarUserManager.CarUserManager} instead
- */
- @Deprecated
- public boolean switchToUserId(int id) {
- if (UserHelper.isHeadlessSystemUser(id)) {
- // System User doesn't associate with real person, can not be switched to.
- return false;
- }
- if (mUserManager.getUserSwitchability() != UserManager.SWITCHABILITY_STATUS_OK) {
- return false;
- }
- if (id == ActivityManager.getCurrentUser()) {
- return false;
- }
- return mActivityManager.switchUser(id);
- }
-
- /**
- * Switches (logs in) to another user.
- *
- * @param userInfo User to switch to.
- * @return {@code true} if user switching succeed.
- *
- * @deprecated should use {@link android.car.user.CarUserManager.CarUserManager} instead
- */
- @Deprecated
- public boolean switchToUser(UserInfo userInfo) {
- return switchToUserId(userInfo.id);
- }
-
- /**
- * Assigns a default icon to a user according to the user's id.
- *
- * @param userInfo User whose avatar is set to default icon.
- * @return Bitmap of the user icon.
- */
- private Bitmap assignDefaultIcon(UserInfo userInfo) {
- int idForIcon = userInfo.isGuest() ? UserHandle.USER_NULL : userInfo.id;
- Bitmap bitmap = UserIcons.convertToBitmap(
- UserIcons.getDefaultUserIcon(mContext.getResources(), idForIcon, false));
- mUserManager.setUserIcon(userInfo.id, bitmap);
- return bitmap;
- }
}
diff --git a/user/car-user-lib/src/android/car/userlib/CommonConstants.java b/user/car-user-lib/src/android/car/userlib/CommonConstants.java
deleted file mode 100644
index 89c09c5..0000000
--- a/user/car-user-lib/src/android/car/userlib/CommonConstants.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2020 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package android.car.userlib;
-
-/**
- * Provides constants used by both CarService and CarServiceHelper packages.
- */
-public final class CommonConstants {
-
- private CommonConstants() {
- throw new UnsupportedOperationException("contains only static constants");
- }
-
- /**
- * Constants used on {@link android.os.Bundle bundles} sent by
- * {@link com.android.car.user.CarUserService} on binder calls.
- */
- public static final class CarUserServiceConstants {
-
- public static final String BUNDLE_USER_ID = "user.id";
- public static final String BUNDLE_USER_FLAGS = "user.flags";
- public static final String BUNDLE_USER_NAME = "user.name";
- public static final String BUNDLE_USER_LOCALES = "user.locales";
- public static final String BUNDLE_INITIAL_INFO_ACTION = "initial_info.action";
-
- private CarUserServiceConstants() {
- throw new UnsupportedOperationException("contains only static constants");
- }
- }
-}
diff --git a/user/car-user-lib/src/android/car/userlib/UserHelper.java b/user/car-user-lib/src/android/car/userlib/UserHelper.java
index ba3d679..70fe94f 100644
--- a/user/car-user-lib/src/android/car/userlib/UserHelper.java
+++ b/user/car-user-lib/src/android/car/userlib/UserHelper.java
@@ -16,8 +16,6 @@
package android.car.userlib;
import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.annotation.UserIdInt;
import android.content.Context;
import android.content.pm.UserInfo;
import android.graphics.Bitmap;
@@ -48,21 +46,6 @@
}
/**
- * Gets a PII-safe representation of the name.
- */
- @Nullable
- public static String safeName(@Nullable String name) {
- return name == null ? name : name.length() + "_chars";
- }
-
- /**
- * Checks whether the given user is both {@code SYSTEM} and headless.
- */
- public static boolean isHeadlessSystemUser(@UserIdInt int userId) {
- return userId == UserHandle.USER_SYSTEM && UserManager.isHeadlessSystemUserMode();
- }
-
- /**
* Sets the values of default Non-Admin restrictions to the passed in value.
*
* @param context Current application context
diff --git a/watchdog/server/src/IoPerfCollection.cpp b/watchdog/server/src/IoPerfCollection.cpp
deleted file mode 100644
index bb7b04d..0000000
--- a/watchdog/server/src/IoPerfCollection.cpp
+++ /dev/null
@@ -1,1055 +0,0 @@
-/**
- * Copyright (c) 2020, 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.
- */
-
-#define LOG_TAG "carwatchdogd"
-
-#include "IoPerfCollection.h"
-
-#include <WatchdogProperties.sysprop.h>
-#include <android-base/file.h>
-#include <android-base/parseint.h>
-#include <android-base/stringprintf.h>
-#include <android-base/strings.h>
-#include <binder/IServiceManager.h>
-#include <cutils/android_filesystem_config.h>
-#include <inttypes.h>
-#include <log/log.h>
-#include <processgroup/sched_policy.h>
-#include <pthread.h>
-#include <pwd.h>
-
-#include <algorithm>
-#include <iomanip>
-#include <iterator>
-#include <limits>
-#include <string>
-#include <thread>
-#include <unordered_map>
-#include <unordered_set>
-#include <vector>
-
-namespace android {
-namespace automotive {
-namespace watchdog {
-
-using android::defaultServiceManager;
-using android::IBinder;
-using android::IServiceManager;
-using android::sp;
-using android::String16;
-using android::base::Error;
-using android::base::ParseUint;
-using android::base::Result;
-using android::base::Split;
-using android::base::StringAppendF;
-using android::base::StringPrintf;
-using android::base::WriteStringToFd;
-using android::content::pm::IPackageManagerNative;
-
-namespace {
-
-const int32_t kDefaultTopNStatsPerCategory = 10;
-const int32_t kDefaultTopNStatsPerSubcategory = 5;
-const std::chrono::seconds kDefaultBoottimeCollectionInterval = 1s;
-const std::chrono::seconds kDefaultPeriodicCollectionInterval = 10s;
-// Number of periodic collection perf data snapshots to cache in memory.
-const int32_t kDefaultPeriodicCollectionBufferSize = 180;
-
-// Minimum collection interval between subsequent collections.
-const std::chrono::nanoseconds kMinCollectionInterval = 1s;
-
-// Default values for the custom collection interval and max_duration.
-const std::chrono::nanoseconds kCustomCollectionInterval = 10s;
-const std::chrono::nanoseconds kCustomCollectionDuration = 30min;
-
-const std::string kDumpMajorDelimiter = std::string(100, '-') + "\n";
-
-constexpr const char* kHelpText =
- "\nCustom I/O performance data collection dump options:\n"
- "%s: Starts custom I/O performance data collection. Customize the collection behavior with "
- "the following optional arguments:\n"
- "\t%s <seconds>: Modifies the collection interval. Default behavior is to collect once "
- "every %lld seconds.\n"
- "\t%s <seconds>: Modifies the maximum collection duration. Default behavior is to collect "
- "until %ld minutes before automatically stopping the custom collection and discarding "
- "the collected data.\n"
- "\t%s <package name>,<package, name>,...: Comma-separated value containing package names. "
- "When provided, the results are filtered only to the provided package names. Default "
- "behavior is to list the results for the top %d packages.\n"
- "%s: Stops custom I/O performance data collection and generates a dump of "
- "the collection report.\n\n"
- "When no options are specified, the carwatchdog report contains the I/O performance "
- "data collected during boot-time and over the last %ld minutes before the report "
- "generation.";
-
-double percentage(uint64_t numer, uint64_t denom) {
- return denom == 0 ? 0.0 : (static_cast<double>(numer) / static_cast<double>(denom)) * 100.0;
-}
-
-struct UidProcessStats {
- struct ProcessInfo {
- std::string comm = "";
- uint64_t count = 0;
- };
- uint64_t uid = 0;
- uint32_t ioBlockedTasksCnt = 0;
- uint32_t totalTasksCnt = 0;
- uint64_t majorFaults = 0;
- std::vector<ProcessInfo> topNIoBlockedProcesses = {};
- std::vector<ProcessInfo> topNMajorFaultProcesses = {};
-};
-
-std::unique_ptr<std::unordered_map<uint32_t, UidProcessStats>> getUidProcessStats(
- const std::vector<ProcessStats>& processStats, int topNStatsPerSubCategory) {
- std::unique_ptr<std::unordered_map<uint32_t, UidProcessStats>> uidProcessStats(
- new std::unordered_map<uint32_t, UidProcessStats>());
- for (const auto& stats : processStats) {
- if (stats.uid < 0) {
- continue;
- }
- uint32_t uid = static_cast<uint32_t>(stats.uid);
- if (uidProcessStats->find(uid) == uidProcessStats->end()) {
- (*uidProcessStats)[uid] = UidProcessStats{
- .uid = uid,
- .topNIoBlockedProcesses = std::vector<
- UidProcessStats::ProcessInfo>(topNStatsPerSubCategory,
- UidProcessStats::ProcessInfo{}),
- .topNMajorFaultProcesses = std::vector<
- UidProcessStats::ProcessInfo>(topNStatsPerSubCategory,
- UidProcessStats::ProcessInfo{}),
- };
- }
- auto& curUidProcessStats = (*uidProcessStats)[uid];
- // Top-level process stats has the aggregated major page faults count and this should be
- // persistent across thread creation/termination. Thus use the value from this field.
- curUidProcessStats.majorFaults += stats.process.majorFaults;
- curUidProcessStats.totalTasksCnt += stats.threads.size();
- // The process state is the same as the main thread state. Thus to avoid double counting
- // ignore the process state.
- uint32_t ioBlockedTasksCnt = 0;
- for (const auto& threadStat : stats.threads) {
- ioBlockedTasksCnt += threadStat.second.state == "D" ? 1 : 0;
- }
- curUidProcessStats.ioBlockedTasksCnt += ioBlockedTasksCnt;
- for (auto it = curUidProcessStats.topNIoBlockedProcesses.begin();
- it != curUidProcessStats.topNIoBlockedProcesses.end(); ++it) {
- if (it->count < ioBlockedTasksCnt) {
- curUidProcessStats.topNIoBlockedProcesses
- .emplace(it,
- UidProcessStats::ProcessInfo{
- .comm = stats.process.comm,
- .count = ioBlockedTasksCnt,
- });
- curUidProcessStats.topNIoBlockedProcesses.pop_back();
- break;
- }
- }
- for (auto it = curUidProcessStats.topNMajorFaultProcesses.begin();
- it != curUidProcessStats.topNMajorFaultProcesses.end(); ++it) {
- if (it->count < stats.process.majorFaults) {
- curUidProcessStats.topNMajorFaultProcesses
- .emplace(it,
- UidProcessStats::ProcessInfo{
- .comm = stats.process.comm,
- .count = stats.process.majorFaults,
- });
- curUidProcessStats.topNMajorFaultProcesses.pop_back();
- break;
- }
- }
- }
- return uidProcessStats;
-}
-
-Result<std::chrono::seconds> parseSecondsFlag(Vector<String16> args, size_t pos) {
- if (args.size() < pos) {
- return Error() << "Value not provided";
- }
-
- uint64_t value;
- std::string strValue = std::string(String8(args[pos]).string());
- if (!ParseUint(strValue, &value)) {
- return Error() << "Invalid value " << args[pos].string() << ", must be an integer";
- }
- return std::chrono::seconds(value);
-}
-
-} // namespace
-
-std::string toString(const UidIoPerfData& data) {
- std::string buffer;
- if (data.topNReads.size() > 0) {
- StringAppendF(&buffer, "\nTop N Reads:\n%s\n", std::string(12, '-').c_str());
- StringAppendF(&buffer,
- "Android User ID, Package Name, Foreground Bytes, Foreground Bytes %%, "
- "Foreground Fsync, Foreground Fsync %%, Background Bytes, "
- "Background Bytes %%, Background Fsync, Background Fsync %%\n");
- }
- for (const auto& stat : data.topNReads) {
- StringAppendF(&buffer, "%" PRIu32 ", %s", stat.userId, stat.packageName.c_str());
- for (int i = 0; i < UID_STATES; ++i) {
- StringAppendF(&buffer, ", %" PRIu64 ", %.2f%%, %" PRIu64 ", %.2f%%", stat.bytes[i],
- percentage(stat.bytes[i], data.total[READ_BYTES][i]), stat.fsync[i],
- percentage(stat.fsync[i], data.total[FSYNC_COUNT][i]));
- }
- StringAppendF(&buffer, "\n");
- }
- if (data.topNWrites.size() > 0) {
- StringAppendF(&buffer, "\nTop N Writes:\n%s\n", std::string(13, '-').c_str());
- StringAppendF(&buffer,
- "Android User ID, Package Name, Foreground Bytes, Foreground Bytes %%, "
- "Foreground Fsync, Foreground Fsync %%, Background Bytes, "
- "Background Bytes %%, Background Fsync, Background Fsync %%\n");
- }
- for (const auto& stat : data.topNWrites) {
- StringAppendF(&buffer, "%" PRIu32 ", %s", stat.userId, stat.packageName.c_str());
- for (int i = 0; i < UID_STATES; ++i) {
- StringAppendF(&buffer, ", %" PRIu64 ", %.2f%%, %" PRIu64 ", %.2f%%", stat.bytes[i],
- percentage(stat.bytes[i], data.total[WRITE_BYTES][i]), stat.fsync[i],
- percentage(stat.fsync[i], data.total[FSYNC_COUNT][i]));
- }
- StringAppendF(&buffer, "\n");
- }
- return buffer;
-}
-
-std::string toString(const SystemIoPerfData& data) {
- std::string buffer;
- StringAppendF(&buffer, "CPU I/O wait time/percent: %" PRIu64 " / %.2f%%\n", data.cpuIoWaitTime,
- percentage(data.cpuIoWaitTime, data.totalCpuTime));
- StringAppendF(&buffer, "Number of I/O blocked processes/percent: %" PRIu32 " / %.2f%%\n",
- data.ioBlockedProcessesCnt,
- percentage(data.ioBlockedProcessesCnt, data.totalProcessesCnt));
- return buffer;
-}
-
-std::string toString(const ProcessIoPerfData& data) {
- std::string buffer;
- StringAppendF(&buffer, "Number of major page faults since last collection: %" PRIu64 "\n",
- data.totalMajorFaults);
- StringAppendF(&buffer,
- "Percentage of change in major page faults since last collection: %.2f%%\n",
- data.majorFaultsPercentChange);
- if (data.topNMajorFaultUids.size() > 0) {
- StringAppendF(&buffer, "\nTop N major page faults:\n%s\n", std::string(24, '-').c_str());
- StringAppendF(&buffer,
- "Android User ID, Package Name, Number of major page faults, "
- "Percentage of total major page faults\n");
- StringAppendF(&buffer,
- "\tCommand, Number of major page faults, Percentage of UID's major page "
- "faults\n");
- }
- for (const auto& uidStats : data.topNMajorFaultUids) {
- StringAppendF(&buffer, "%" PRIu32 ", %s, %" PRIu64 ", %.2f%%\n", uidStats.userId,
- uidStats.packageName.c_str(), uidStats.count,
- percentage(uidStats.count, data.totalMajorFaults));
- for (const auto& procStats : uidStats.topNProcesses) {
- StringAppendF(&buffer, "\t%s, %" PRIu64 ", %.2f%%\n", procStats.comm.c_str(),
- procStats.count, percentage(procStats.count, uidStats.count));
- }
- }
- if (data.topNIoBlockedUids.size() > 0) {
- StringAppendF(&buffer, "\nTop N I/O waiting UIDs:\n%s\n", std::string(23, '-').c_str());
- StringAppendF(&buffer,
- "Android User ID, Package Name, Number of owned tasks waiting for I/O, "
- "Percentage of owned tasks waiting for I/O\n");
- StringAppendF(&buffer,
- "\tCommand, Number of I/O waiting tasks, Percentage of UID's tasks waiting "
- "for I/O\n");
- }
- for (size_t i = 0; i < data.topNIoBlockedUids.size(); ++i) {
- const auto& uidStats = data.topNIoBlockedUids[i];
- StringAppendF(&buffer, "%" PRIu32 ", %s, %" PRIu64 ", %.2f%%\n", uidStats.userId,
- uidStats.packageName.c_str(), uidStats.count,
- percentage(uidStats.count, data.topNIoBlockedUidsTotalTaskCnt[i]));
- for (const auto& procStats : uidStats.topNProcesses) {
- StringAppendF(&buffer, "\t%s, %" PRIu64 ", %.2f%%\n", procStats.comm.c_str(),
- procStats.count, percentage(procStats.count, uidStats.count));
- }
- }
- return buffer;
-}
-
-std::string toString(const IoPerfRecord& record) {
- std::string buffer;
- StringAppendF(&buffer, "%s%s%s", toString(record.systemIoPerfData).c_str(),
- toString(record.processIoPerfData).c_str(),
- toString(record.uidIoPerfData).c_str());
- return buffer;
-}
-
-std::string toString(const CollectionInfo& collectionInfo) {
- std::string buffer;
- StringAppendF(&buffer, "Number of collections: %zu\n", collectionInfo.records.size());
- auto interval =
- std::chrono::duration_cast<std::chrono::seconds>(collectionInfo.interval).count();
- StringAppendF(&buffer, "Collection interval: %lld second%s\n", interval,
- ((interval > 1) ? "s" : ""));
- for (size_t i = 0; i < collectionInfo.records.size(); ++i) {
- const auto& record = collectionInfo.records[i];
- std::stringstream timestamp;
- timestamp << std::put_time(std::localtime(&record.time), "%c %Z");
- StringAppendF(&buffer, "Collection %zu: <%s>\n%s\n%s\n", i, timestamp.str().c_str(),
- std::string(45, '=').c_str(), toString(record).c_str());
- }
- return buffer;
-}
-
-Result<void> IoPerfCollection::start() {
- {
- Mutex::Autolock lock(mMutex);
- if (mCurrCollectionEvent != CollectionEvent::INIT || mCollectionThread.joinable()) {
- return Error(INVALID_OPERATION)
- << "Cannot start I/O performance collection more than once";
- }
- mTopNStatsPerCategory = static_cast<int>(
- sysprop::topNStatsPerCategory().value_or(kDefaultTopNStatsPerCategory));
- mTopNStatsPerSubcategory = static_cast<int>(
- sysprop::topNStatsPerSubcategory().value_or(kDefaultTopNStatsPerSubcategory));
- std::chrono::nanoseconds boottimeCollectionInterval =
- std::chrono::duration_cast<std::chrono::nanoseconds>(
- std::chrono::seconds(sysprop::boottimeCollectionInterval().value_or(
- kDefaultBoottimeCollectionInterval.count())));
- std::chrono::nanoseconds periodicCollectionInterval =
- std::chrono::duration_cast<std::chrono::nanoseconds>(
- std::chrono::seconds(sysprop::periodicCollectionInterval().value_or(
- kDefaultPeriodicCollectionInterval.count())));
- size_t periodicCollectionBufferSize =
- static_cast<size_t>(sysprop::periodicCollectionBufferSize().value_or(
- kDefaultPeriodicCollectionBufferSize));
- mBoottimeCollection = {
- .interval = boottimeCollectionInterval,
- .maxCacheSize = std::numeric_limits<std::size_t>::max(),
- .lastCollectionUptime = 0,
- .records = {},
- };
- mPeriodicCollection = {
- .interval = periodicCollectionInterval,
- .maxCacheSize = periodicCollectionBufferSize,
- .lastCollectionUptime = 0,
- .records = {},
- };
- }
-
- mCollectionThread = std::thread([&]() {
- {
- Mutex::Autolock lock(mMutex);
- if (mCurrCollectionEvent != CollectionEvent::INIT) {
- ALOGE("Skipping I/O performance data collection as the current collection event "
- "%s != %s",
- toString(mCurrCollectionEvent).c_str(),
- toString(CollectionEvent::INIT).c_str());
- return;
- }
- mCurrCollectionEvent = CollectionEvent::BOOT_TIME;
- mBoottimeCollection.lastCollectionUptime = mHandlerLooper->now();
- mHandlerLooper->setLooper(Looper::prepare(/*opts=*/0));
- mHandlerLooper->sendMessage(this, CollectionEvent::BOOT_TIME);
- }
- if (set_sched_policy(0, SP_BACKGROUND) != 0) {
- ALOGW("Failed to set background scheduling priority to I/O performance data collection "
- "thread");
- }
- int ret = pthread_setname_np(pthread_self(), "IoPerfCollect");
- if (ret != 0) {
- ALOGE("Failed to set I/O perf collection thread name: %d", ret);
- }
- bool isCollectionActive = true;
- // Loop until the collection is not active -- I/O perf collection runs on this thread in a
- // handler.
- while (isCollectionActive) {
- mHandlerLooper->pollAll(/*timeoutMillis=*/-1);
- Mutex::Autolock lock(mMutex);
- isCollectionActive = mCurrCollectionEvent != CollectionEvent::TERMINATED;
- }
- });
- return {};
-}
-
-void IoPerfCollection::terminate() {
- {
- Mutex::Autolock lock(mMutex);
- if (mCurrCollectionEvent == CollectionEvent::TERMINATED) {
- ALOGE("I/O performance data collection was terminated already");
- return;
- }
- ALOGE("Terminating I/O performance data collection");
- mCurrCollectionEvent = CollectionEvent::TERMINATED;
- }
- if (mCollectionThread.joinable()) {
- mHandlerLooper->removeMessages(this);
- mHandlerLooper->wake();
- mCollectionThread.join();
- }
-}
-
-Result<void> IoPerfCollection::onBootFinished() {
- Mutex::Autolock lock(mMutex);
- if (mCurrCollectionEvent != CollectionEvent::BOOT_TIME) {
- // This case happens when either the I/O perf collection has prematurely terminated before
- // boot complete notification is received or multiple boot complete notifications are
- // received. In either case don't return error as this will lead to runtime exception and
- // cause system to boot loop.
- ALOGE("Current I/O performance data collection event %s != %s",
- toString(mCurrCollectionEvent).c_str(),
- toString(CollectionEvent::BOOT_TIME).c_str());
- return {};
- }
- mBoottimeCollection.lastCollectionUptime = mHandlerLooper->now();
- mHandlerLooper->removeMessages(this);
- mHandlerLooper->sendMessage(this, SwitchEvent::END_BOOTTIME_COLLECTION);
- return {};
-}
-
-Result<void> IoPerfCollection::onCustomCollection(int fd, const Vector<String16>& args) {
- if (args.empty()) {
- return Error(BAD_VALUE) << "No I/O perf collection dump arguments";
- }
-
- if (args[0] == String16(kStartCustomCollectionFlag)) {
- if (args.size() > 7) {
- return Error(BAD_VALUE) << "Number of arguments to start custom I/O performance data "
- << "collection cannot exceed 7";
- }
- std::chrono::nanoseconds interval = kCustomCollectionInterval;
- std::chrono::nanoseconds maxDuration = kCustomCollectionDuration;
- std::unordered_set<std::string> filterPackages;
- for (size_t i = 1; i < args.size(); ++i) {
- if (args[i] == String16(kIntervalFlag)) {
- const auto& ret = parseSecondsFlag(args, i + 1);
- if (!ret) {
- return Error(BAD_VALUE)
- << "Failed to parse " << kIntervalFlag << ": " << ret.error();
- }
- interval = std::chrono::duration_cast<std::chrono::nanoseconds>(*ret);
- ++i;
- continue;
- }
- if (args[i] == String16(kMaxDurationFlag)) {
- const auto& ret = parseSecondsFlag(args, i + 1);
- if (!ret) {
- return Error(BAD_VALUE)
- << "Failed to parse " << kMaxDurationFlag << ": " << ret.error();
- }
- maxDuration = std::chrono::duration_cast<std::chrono::nanoseconds>(*ret);
- ++i;
- continue;
- }
- if (args[i] == String16(kFilterPackagesFlag)) {
- if (args.size() < i + 1) {
- return Error(BAD_VALUE)
- << "Must provide value for '" << kFilterPackagesFlag << "' flag";
- }
- std::vector<std::string> packages =
- Split(std::string(String8(args[i + 1]).string()), ",");
- std::copy(packages.begin(), packages.end(),
- std::inserter(filterPackages, filterPackages.end()));
- ++i;
- continue;
- }
- ALOGW("Unknown flag %s provided to start custom I/O performance data collection",
- String8(args[i]).string());
- return Error(BAD_VALUE) << "Unknown flag " << String8(args[i]).string()
- << " provided to start custom I/O performance data "
- << "collection";
- }
- const auto& ret = startCustomCollection(interval, maxDuration, filterPackages);
- if (!ret) {
- WriteStringToFd(ret.error().message(), fd);
- return ret;
- }
- return {};
- }
-
- if (args[0] == String16(kEndCustomCollectionFlag)) {
- if (args.size() != 1) {
- ALOGW("Number of arguments to stop custom I/O performance data collection cannot "
- "exceed 1. Stopping the data collection.");
- WriteStringToFd("Number of arguments to stop custom I/O performance data collection "
- "cannot exceed 1. Stopping the data collection.",
- fd);
- }
- return endCustomCollection(fd);
- }
-
- return Error(BAD_VALUE) << "I/O perf collection dump arguments start neither with "
- << kStartCustomCollectionFlag << " nor with "
- << kEndCustomCollectionFlag << " flags";
-}
-
-Result<void> IoPerfCollection::onDump(int fd) {
- Mutex::Autolock lock(mMutex);
- if (mCurrCollectionEvent == CollectionEvent::TERMINATED) {
- ALOGW("I/O performance data collection not active. Dumping cached data");
- if (!WriteStringToFd("I/O performance data collection not active. Dumping cached data.",
- fd)) {
- return Error(FAILED_TRANSACTION) << "Failed to write I/O performance collection status";
- }
- }
-
- const auto& ret = dumpCollectorsStatusLocked(fd);
- if (!ret) {
- return Error(FAILED_TRANSACTION) << ret.error();
- }
-
- if (!WriteStringToFd(StringPrintf("%sI/O performance data reports:\n%sBoot-time collection "
- "report:\n%s\n",
- kDumpMajorDelimiter.c_str(), kDumpMajorDelimiter.c_str(),
- std::string(28, '=').c_str()),
- fd) ||
- !WriteStringToFd(toString(mBoottimeCollection), fd) ||
- !WriteStringToFd(StringPrintf("%s\nPeriodic collection report:\n%s\n",
- std::string(75, '-').c_str(), std::string(27, '=').c_str()),
- fd) ||
- !WriteStringToFd(toString(mPeriodicCollection), fd) ||
- !WriteStringToFd(kDumpMajorDelimiter, fd)) {
- return Error(FAILED_TRANSACTION)
- << "Failed to dump the boot-time and periodic collection reports.";
- }
- return {};
-}
-
-bool IoPerfCollection::dumpHelpText(int fd) {
- long periodicCacheMinutes =
- (std::chrono::duration_cast<std::chrono::seconds>(mPeriodicCollection.interval)
- .count() *
- mPeriodicCollection.maxCacheSize) /
- 60;
- return WriteStringToFd(StringPrintf(kHelpText, kStartCustomCollectionFlag, kIntervalFlag,
- std::chrono::duration_cast<std::chrono::seconds>(
- kCustomCollectionInterval)
- .count(),
- kMaxDurationFlag,
- std::chrono::duration_cast<std::chrono::minutes>(
- kCustomCollectionDuration)
- .count(),
- kFilterPackagesFlag, mTopNStatsPerCategory,
- kEndCustomCollectionFlag, periodicCacheMinutes),
- fd);
-}
-
-Result<void> IoPerfCollection::dumpCollectorsStatusLocked(int fd) {
- if (!mUidIoStats->enabled() &&
- !WriteStringToFd(StringPrintf("UidIoStats collector failed to access the file %s",
- mUidIoStats->filePath().c_str()),
- fd)) {
- return Error() << "Failed to write UidIoStats collector status";
- }
- if (!mProcStat->enabled() &&
- !WriteStringToFd(StringPrintf("ProcStat collector failed to access the file %s",
- mProcStat->filePath().c_str()),
- fd)) {
- return Error() << "Failed to write ProcStat collector status";
- }
- if (!mProcPidStat->enabled() &&
- !WriteStringToFd(StringPrintf("ProcPidStat collector failed to access the directory %s",
- mProcPidStat->dirPath().c_str()),
- fd)) {
- return Error() << "Failed to write ProcPidStat collector status";
- }
- return {};
-}
-
-Result<void> IoPerfCollection::startCustomCollection(
- std::chrono::nanoseconds interval, std::chrono::nanoseconds maxDuration,
- const std::unordered_set<std::string>& filterPackages) {
- if (interval < kMinCollectionInterval || maxDuration < kMinCollectionInterval) {
- return Error(INVALID_OPERATION)
- << "Collection interval and maximum duration must be >= "
- << std::chrono::duration_cast<std::chrono::milliseconds>(kMinCollectionInterval)
- .count()
- << " milliseconds.";
- }
- Mutex::Autolock lock(mMutex);
- if (mCurrCollectionEvent != CollectionEvent::PERIODIC) {
- return Error(INVALID_OPERATION)
- << "Cannot start a custom collection when "
- << "the current collection event " << toString(mCurrCollectionEvent)
- << " != " << toString(CollectionEvent::PERIODIC) << " collection event";
- }
-
- mCustomCollection = {
- .interval = interval,
- .maxCacheSize = std::numeric_limits<std::size_t>::max(),
- .filterPackages = filterPackages,
- .lastCollectionUptime = mHandlerLooper->now(),
- .records = {},
- };
-
- mHandlerLooper->removeMessages(this);
- nsecs_t uptime = mHandlerLooper->now() + maxDuration.count();
- mHandlerLooper->sendMessageAtTime(uptime, this, SwitchEvent::END_CUSTOM_COLLECTION);
- mCurrCollectionEvent = CollectionEvent::CUSTOM;
- mHandlerLooper->sendMessage(this, CollectionEvent::CUSTOM);
- return {};
-}
-
-Result<void> IoPerfCollection::endCustomCollection(int fd) {
- Mutex::Autolock lock(mMutex);
- if (mCurrCollectionEvent != CollectionEvent::CUSTOM) {
- return Error(INVALID_OPERATION) << "No custom collection is running";
- }
-
- mHandlerLooper->removeMessages(this);
- mHandlerLooper->sendMessage(this, SwitchEvent::END_CUSTOM_COLLECTION);
-
- const auto& ret = dumpCollectorsStatusLocked(fd);
- if (!ret) {
- return Error(FAILED_TRANSACTION) << ret.error();
- }
-
- if (!WriteStringToFd(StringPrintf("%sI/O performance data report for custom collection:\n%s",
- kDumpMajorDelimiter.c_str(), kDumpMajorDelimiter.c_str()),
- fd) ||
- !WriteStringToFd(toString(mCustomCollection), fd) ||
- !WriteStringToFd(kDumpMajorDelimiter, fd)) {
- return Error(FAILED_TRANSACTION) << "Failed to write custom collection report.";
- }
-
- return {};
-}
-
-void IoPerfCollection::handleMessage(const Message& message) {
- Result<void> result;
-
- switch (message.what) {
- case static_cast<int>(CollectionEvent::BOOT_TIME):
- result = processCollectionEvent(CollectionEvent::BOOT_TIME, &mBoottimeCollection);
- break;
- case static_cast<int>(SwitchEvent::END_BOOTTIME_COLLECTION):
- result = processCollectionEvent(CollectionEvent::BOOT_TIME, &mBoottimeCollection);
- if (result.ok()) {
- mHandlerLooper->removeMessages(this);
- mCurrCollectionEvent = CollectionEvent::PERIODIC;
- mPeriodicCollection.lastCollectionUptime =
- mHandlerLooper->now() + mPeriodicCollection.interval.count();
- mHandlerLooper->sendMessageAtTime(mPeriodicCollection.lastCollectionUptime, this,
- CollectionEvent::PERIODIC);
- }
- break;
- case static_cast<int>(CollectionEvent::PERIODIC):
- result = processCollectionEvent(CollectionEvent::PERIODIC, &mPeriodicCollection);
- break;
- case static_cast<int>(CollectionEvent::CUSTOM):
- result = processCollectionEvent(CollectionEvent::CUSTOM, &mCustomCollection);
- break;
- case static_cast<int>(SwitchEvent::END_CUSTOM_COLLECTION): {
- Mutex::Autolock lock(mMutex);
- if (mCurrCollectionEvent != CollectionEvent::CUSTOM) {
- ALOGW("Skipping END_CUSTOM_COLLECTION message as the current collection %s != %s",
- toString(mCurrCollectionEvent).c_str(),
- toString(CollectionEvent::CUSTOM).c_str());
- return;
- }
- mCustomCollection = {};
- mHandlerLooper->removeMessages(this);
- mCurrCollectionEvent = CollectionEvent::PERIODIC;
- mPeriodicCollection.lastCollectionUptime = mHandlerLooper->now();
- mHandlerLooper->sendMessage(this, CollectionEvent::PERIODIC);
- return;
- }
- default:
- result = Error() << "Unknown message: " << message.what;
- }
-
- if (!result.ok()) {
- Mutex::Autolock lock(mMutex);
- ALOGE("Terminating I/O performance data collection: %s", result.error().message().c_str());
- // DO NOT CALL terminate() as it tries to join the collection thread but this code is
- // executed on the collection thread. Thus it will result in a deadlock.
- mCurrCollectionEvent = CollectionEvent::TERMINATED;
- mHandlerLooper->removeMessages(this);
- mHandlerLooper->wake();
- }
-}
-
-Result<void> IoPerfCollection::processCollectionEvent(CollectionEvent event, CollectionInfo* info) {
- Mutex::Autolock lock(mMutex);
- // Messages sent to the looper are intrinsically racy such that a message from the previous
- // collection event may land in the looper after the current collection has already begun. Thus
- // verify the current collection event before starting the collection.
- if (mCurrCollectionEvent != event) {
- ALOGW("Skipping %s collection message on collection event %s", toString(event).c_str(),
- toString(mCurrCollectionEvent).c_str());
- return {};
- }
- if (info->maxCacheSize == 0) {
- return Error() << "Maximum cache size for " << toString(event) << " collection cannot be 0";
- }
- if (info->interval < kMinCollectionInterval) {
- return Error()
- << "Collection interval of "
- << std::chrono::duration_cast<std::chrono::seconds>(info->interval).count()
- << " seconds for " << toString(event) << " collection cannot be less than "
- << std::chrono::duration_cast<std::chrono::seconds>(kMinCollectionInterval).count()
- << " seconds";
- }
- auto ret = collectLocked(info);
- if (!ret) {
- return Error() << toString(event) << " collection failed: " << ret.error();
- }
- info->lastCollectionUptime += info->interval.count();
- mHandlerLooper->sendMessageAtTime(info->lastCollectionUptime, this, event);
- return {};
-}
-
-Result<void> IoPerfCollection::collectLocked(CollectionInfo* collectionInfo) {
- if (!mUidIoStats->enabled() && !mProcStat->enabled() && !mProcPidStat->enabled()) {
- return Error() << "No collectors enabled";
- }
- IoPerfRecord record{
- .time = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now()),
- };
- auto ret = collectSystemIoPerfDataLocked(&record.systemIoPerfData);
- if (!ret) {
- return ret;
- }
- ret = collectProcessIoPerfDataLocked(*collectionInfo, &record.processIoPerfData);
- if (!ret) {
- return ret;
- }
- ret = collectUidIoPerfDataLocked(*collectionInfo, &record.uidIoPerfData);
- if (!ret) {
- return ret;
- }
- if (collectionInfo->records.size() > collectionInfo->maxCacheSize) {
- collectionInfo->records.erase(collectionInfo->records.begin()); // Erase the oldest record.
- }
- collectionInfo->records.emplace_back(record);
- return {};
-}
-
-Result<void> IoPerfCollection::collectUidIoPerfDataLocked(const CollectionInfo& collectionInfo,
- UidIoPerfData* uidIoPerfData) {
- if (!mUidIoStats->enabled()) {
- // Don't return an error to avoid pre-mature termination. Instead, fetch data from other
- // collectors.
- return {};
- }
-
- const Result<std::unordered_map<uint32_t, UidIoUsage>>& usage = mUidIoStats->collect();
- if (!usage) {
- return Error() << "Failed to collect uid I/O usage: " << usage.error();
- }
-
- // Fetch only the top N reads and writes from the usage records.
- UidIoUsage tempUsage = {};
- std::vector<const UidIoUsage*> topNReads(mTopNStatsPerCategory, &tempUsage);
- std::vector<const UidIoUsage*> topNWrites(mTopNStatsPerCategory, &tempUsage);
- std::unordered_set<uint32_t> unmappedUids;
-
- for (const auto& uIt : *usage) {
- const UidIoUsage& curUsage = uIt.second;
- if (curUsage.ios.isZero()) {
- continue;
- }
- if (mUidToPackageNameMapping.find(curUsage.uid) == mUidToPackageNameMapping.end()) {
- unmappedUids.insert(curUsage.uid);
- }
- uidIoPerfData->total[READ_BYTES][FOREGROUND] +=
- curUsage.ios.metrics[READ_BYTES][FOREGROUND];
- uidIoPerfData->total[READ_BYTES][BACKGROUND] +=
- curUsage.ios.metrics[READ_BYTES][BACKGROUND];
- uidIoPerfData->total[WRITE_BYTES][FOREGROUND] +=
- curUsage.ios.metrics[WRITE_BYTES][FOREGROUND];
- uidIoPerfData->total[WRITE_BYTES][BACKGROUND] +=
- curUsage.ios.metrics[WRITE_BYTES][BACKGROUND];
- uidIoPerfData->total[FSYNC_COUNT][FOREGROUND] +=
- curUsage.ios.metrics[FSYNC_COUNT][FOREGROUND];
- uidIoPerfData->total[FSYNC_COUNT][BACKGROUND] +=
- curUsage.ios.metrics[FSYNC_COUNT][BACKGROUND];
-
- for (auto it = topNReads.begin(); it != topNReads.end(); ++it) {
- const UidIoUsage* curRead = *it;
- if (curRead->ios.sumReadBytes() < curUsage.ios.sumReadBytes()) {
- topNReads.emplace(it, &curUsage);
- if (collectionInfo.filterPackages.empty()) {
- topNReads.pop_back();
- }
- break;
- }
- }
- for (auto it = topNWrites.begin(); it != topNWrites.end(); ++it) {
- const UidIoUsage* curWrite = *it;
- if (curWrite->ios.sumWriteBytes() < curUsage.ios.sumWriteBytes()) {
- topNWrites.emplace(it, &curUsage);
- if (collectionInfo.filterPackages.empty()) {
- topNWrites.pop_back();
- }
- break;
- }
- }
- }
-
- const auto& ret = updateUidToPackageNameMapping(unmappedUids);
- if (!ret) {
- ALOGW("%s", ret.error().message().c_str());
- }
-
- // Convert the top N I/O usage to UidIoPerfData.
- for (const auto& usage : topNReads) {
- if (usage->ios.isZero()) {
- // End of non-zero usage records. This case occurs when the number of UIDs with active
- // I/O operations is < |ro.carwatchdog.top_n_stats_per_category|.
- break;
- }
- UidIoPerfData::Stats stats = {
- .userId = multiuser_get_user_id(usage->uid),
- .packageName = std::to_string(usage->uid),
- .bytes = {usage->ios.metrics[READ_BYTES][FOREGROUND],
- usage->ios.metrics[READ_BYTES][BACKGROUND]},
- .fsync = {usage->ios.metrics[FSYNC_COUNT][FOREGROUND],
- usage->ios.metrics[FSYNC_COUNT][BACKGROUND]},
- };
- if (mUidToPackageNameMapping.find(usage->uid) != mUidToPackageNameMapping.end()) {
- stats.packageName = mUidToPackageNameMapping[usage->uid];
- }
- if (!collectionInfo.filterPackages.empty() &&
- collectionInfo.filterPackages.find(stats.packageName) ==
- collectionInfo.filterPackages.end()) {
- continue;
- }
- uidIoPerfData->topNReads.emplace_back(stats);
- }
-
- for (const auto& usage : topNWrites) {
- if (usage->ios.isZero()) {
- // End of non-zero usage records. This case occurs when the number of UIDs with active
- // I/O operations is < |ro.carwatchdog.top_n_stats_per_category|.
- break;
- }
- UidIoPerfData::Stats stats = {
- .userId = multiuser_get_user_id(usage->uid),
- .packageName = std::to_string(usage->uid),
- .bytes = {usage->ios.metrics[WRITE_BYTES][FOREGROUND],
- usage->ios.metrics[WRITE_BYTES][BACKGROUND]},
- .fsync = {usage->ios.metrics[FSYNC_COUNT][FOREGROUND],
- usage->ios.metrics[FSYNC_COUNT][BACKGROUND]},
- };
- if (mUidToPackageNameMapping.find(usage->uid) != mUidToPackageNameMapping.end()) {
- stats.packageName = mUidToPackageNameMapping[usage->uid];
- }
- if (!collectionInfo.filterPackages.empty() &&
- collectionInfo.filterPackages.find(stats.packageName) ==
- collectionInfo.filterPackages.end()) {
- continue;
- }
- uidIoPerfData->topNWrites.emplace_back(stats);
- }
- return {};
-}
-
-Result<void> IoPerfCollection::collectSystemIoPerfDataLocked(SystemIoPerfData* systemIoPerfData) {
- if (!mProcStat->enabled()) {
- // Don't return an error to avoid pre-mature termination. Instead, fetch data from other
- // collectors.
- return {};
- }
-
- const Result<ProcStatInfo>& procStatInfo = mProcStat->collect();
- if (!procStatInfo) {
- return Error() << "Failed to collect proc stats: " << procStatInfo.error();
- }
-
- systemIoPerfData->cpuIoWaitTime = procStatInfo->cpuStats.ioWaitTime;
- systemIoPerfData->totalCpuTime = procStatInfo->totalCpuTime();
- systemIoPerfData->ioBlockedProcessesCnt = procStatInfo->ioBlockedProcessesCnt;
- systemIoPerfData->totalProcessesCnt = procStatInfo->totalProcessesCnt();
- return {};
-}
-
-Result<void> IoPerfCollection::collectProcessIoPerfDataLocked(
- const CollectionInfo& collectionInfo, ProcessIoPerfData* processIoPerfData) {
- if (!mProcPidStat->enabled()) {
- // Don't return an error to avoid pre-mature termination. Instead, fetch data from other
- // collectors.
- return {};
- }
-
- const Result<std::vector<ProcessStats>>& processStats = mProcPidStat->collect();
- if (!processStats) {
- return Error() << "Failed to collect process stats: " << processStats.error();
- }
-
- const auto& uidProcessStats = getUidProcessStats(*processStats, mTopNStatsPerSubcategory);
- std::unordered_set<uint32_t> unmappedUids;
- // Fetch only the top N I/O blocked UIDs and UIDs with most major page faults.
- UidProcessStats temp = {};
- std::vector<const UidProcessStats*> topNIoBlockedUids(mTopNStatsPerCategory, &temp);
- std::vector<const UidProcessStats*> topNMajorFaultUids(mTopNStatsPerCategory, &temp);
- processIoPerfData->totalMajorFaults = 0;
- for (const auto& it : *uidProcessStats) {
- const UidProcessStats& curStats = it.second;
- if (mUidToPackageNameMapping.find(curStats.uid) == mUidToPackageNameMapping.end()) {
- unmappedUids.insert(curStats.uid);
- }
- processIoPerfData->totalMajorFaults += curStats.majorFaults;
- for (auto it = topNIoBlockedUids.begin(); it != topNIoBlockedUids.end(); ++it) {
- const UidProcessStats* topStats = *it;
- if (topStats->ioBlockedTasksCnt < curStats.ioBlockedTasksCnt) {
- topNIoBlockedUids.emplace(it, &curStats);
- if (collectionInfo.filterPackages.empty()) {
- topNIoBlockedUids.pop_back();
- }
- break;
- }
- }
- for (auto it = topNMajorFaultUids.begin(); it != topNMajorFaultUids.end(); ++it) {
- const UidProcessStats* topStats = *it;
- if (topStats->majorFaults < curStats.majorFaults) {
- topNMajorFaultUids.emplace(it, &curStats);
- if (collectionInfo.filterPackages.empty()) {
- topNMajorFaultUids.pop_back();
- }
- break;
- }
- }
- }
-
- const auto& ret = updateUidToPackageNameMapping(unmappedUids);
- if (!ret) {
- ALOGW("%s", ret.error().message().c_str());
- }
-
- // Convert the top N uid process stats to ProcessIoPerfData.
- for (const auto& it : topNIoBlockedUids) {
- if (it->ioBlockedTasksCnt == 0) {
- // End of non-zero elements. This case occurs when the number of UIDs with I/O blocked
- // processes is < |ro.carwatchdog.top_n_stats_per_category|.
- break;
- }
- ProcessIoPerfData::UidStats stats = {
- .userId = multiuser_get_user_id(it->uid),
- .packageName = std::to_string(it->uid),
- .count = it->ioBlockedTasksCnt,
- };
- if (mUidToPackageNameMapping.find(it->uid) != mUidToPackageNameMapping.end()) {
- stats.packageName = mUidToPackageNameMapping[it->uid];
- }
- if (!collectionInfo.filterPackages.empty() &&
- collectionInfo.filterPackages.find(stats.packageName) ==
- collectionInfo.filterPackages.end()) {
- continue;
- }
- for (const auto& pIt : it->topNIoBlockedProcesses) {
- if (pIt.count == 0) {
- break;
- }
- stats.topNProcesses.emplace_back(
- ProcessIoPerfData::UidStats::ProcessStats{pIt.comm, pIt.count});
- }
- processIoPerfData->topNIoBlockedUids.emplace_back(stats);
- processIoPerfData->topNIoBlockedUidsTotalTaskCnt.emplace_back(it->totalTasksCnt);
- }
- for (const auto& it : topNMajorFaultUids) {
- if (it->majorFaults == 0) {
- // End of non-zero elements. This case occurs when the number of UIDs with major faults
- // is < |ro.carwatchdog.top_n_stats_per_category|.
- break;
- }
- ProcessIoPerfData::UidStats stats = {
- .userId = multiuser_get_user_id(it->uid),
- .packageName = std::to_string(it->uid),
- .count = it->majorFaults,
- };
- if (mUidToPackageNameMapping.find(it->uid) != mUidToPackageNameMapping.end()) {
- stats.packageName = mUidToPackageNameMapping[it->uid];
- }
- if (!collectionInfo.filterPackages.empty() &&
- collectionInfo.filterPackages.find(stats.packageName) ==
- collectionInfo.filterPackages.end()) {
- continue;
- }
- for (const auto& pIt : it->topNMajorFaultProcesses) {
- if (pIt.count == 0) {
- break;
- }
- stats.topNProcesses.emplace_back(
- ProcessIoPerfData::UidStats::ProcessStats{pIt.comm, pIt.count});
- }
- processIoPerfData->topNMajorFaultUids.emplace_back(stats);
- }
- if (mLastMajorFaults == 0) {
- processIoPerfData->majorFaultsPercentChange = 0;
- } else {
- int64_t increase = processIoPerfData->totalMajorFaults - mLastMajorFaults;
- processIoPerfData->majorFaultsPercentChange =
- (static_cast<double>(increase) / static_cast<double>(mLastMajorFaults)) * 100.0;
- }
- mLastMajorFaults = processIoPerfData->totalMajorFaults;
- return {};
-}
-
-Result<void> IoPerfCollection::updateUidToPackageNameMapping(
- const std::unordered_set<uint32_t>& uids) {
- std::vector<int32_t> appUids;
-
- for (const auto& uid : uids) {
- if (uid >= AID_APP_START) {
- appUids.emplace_back(static_cast<int32_t>(uid));
- continue;
- }
- // System/native UIDs.
- passwd* usrpwd = getpwuid(uid);
- if (!usrpwd) {
- continue;
- }
- mUidToPackageNameMapping[uid] = std::string(usrpwd->pw_name);
- }
-
- if (appUids.empty()) {
- return {};
- }
-
- if (mPackageManager == nullptr) {
- auto ret = retrievePackageManager();
- if (!ret) {
- return Error() << "Failed to retrieve package manager: " << ret.error();
- }
- }
-
- std::vector<std::string> packageNames;
- const binder::Status& status = mPackageManager->getNamesForUids(appUids, &packageNames);
- if (!status.isOk()) {
- return Error() << "package_native::getNamesForUids failed: " << status.exceptionMessage();
- }
-
- for (uint32_t i = 0; i < appUids.size(); i++) {
- if (!packageNames[i].empty()) {
- mUidToPackageNameMapping[appUids[i]] = packageNames[i];
- }
- }
-
- return {};
-}
-
-Result<void> IoPerfCollection::retrievePackageManager() {
- const sp<IServiceManager> sm = defaultServiceManager();
- if (sm == nullptr) {
- return Error() << "Failed to retrieve defaultServiceManager";
- }
-
- sp<IBinder> binder = sm->getService(String16("package_native"));
- if (binder == nullptr) {
- return Error() << "Failed to get service package_native";
- }
- mPackageManager = interface_cast<IPackageManagerNative>(binder);
- return {};
-}
-
-} // namespace watchdog
-} // namespace automotive
-} // namespace android
diff --git a/watchdog/server/src/IoPerfCollection.h b/watchdog/server/src/IoPerfCollection.h
deleted file mode 100644
index d516216..0000000
--- a/watchdog/server/src/IoPerfCollection.h
+++ /dev/null
@@ -1,315 +0,0 @@
-/**
- * Copyright (c) 2020, 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.
- */
-
-#ifndef WATCHDOG_SERVER_SRC_IOPERFCOLLECTION_H_
-#define WATCHDOG_SERVER_SRC_IOPERFCOLLECTION_H_
-
-#include <android-base/chrono_utils.h>
-#include <android-base/result.h>
-#include <android/content/pm/IPackageManagerNative.h>
-#include <cutils/multiuser.h>
-#include <gtest/gtest_prod.h>
-#include <time.h>
-#include <utils/Errors.h>
-#include <utils/Looper.h>
-#include <utils/Mutex.h>
-#include <utils/String16.h>
-#include <utils/StrongPointer.h>
-#include <utils/Vector.h>
-
-#include <string>
-#include <thread>
-#include <unordered_map>
-#include <unordered_set>
-#include <vector>
-
-#include "LooperWrapper.h"
-#include "ProcPidStat.h"
-#include "ProcStat.h"
-#include "UidIoStats.h"
-
-namespace android {
-namespace automotive {
-namespace watchdog {
-
-constexpr const char* kStartCustomCollectionFlag = "--start_io";
-constexpr const char* kEndCustomCollectionFlag = "--stop_io";
-constexpr const char* kIntervalFlag = "--interval";
-constexpr const char* kMaxDurationFlag = "--max_duration";
-constexpr const char* kFilterPackagesFlag = "--filter_packages";
-
-// Performance data collected from the `/proc/uid_io/stats` file.
-struct UidIoPerfData {
- struct Stats {
- userid_t userId = 0;
- std::string packageName;
- uint64_t bytes[UID_STATES];
- uint64_t fsync[UID_STATES];
- };
- std::vector<Stats> topNReads = {};
- std::vector<Stats> topNWrites = {};
- uint64_t total[METRIC_TYPES][UID_STATES] = {{0}};
-};
-
-std::string toString(const UidIoPerfData& perfData);
-
-// Performance data collected from the `/proc/stats` file.
-struct SystemIoPerfData {
- uint64_t cpuIoWaitTime = 0;
- uint64_t totalCpuTime = 0;
- uint32_t ioBlockedProcessesCnt = 0;
- uint32_t totalProcessesCnt = 0;
-};
-
-std::string toString(const SystemIoPerfData& perfData);
-
-// Performance data collected from the `/proc/[pid]/stat` and `/proc/[pid]/task/[tid]/stat` files.
-struct ProcessIoPerfData {
- struct UidStats {
- userid_t userId = 0;
- std::string packageName;
- uint64_t count = 0;
- struct ProcessStats {
- std::string comm = "";
- uint64_t count = 0;
- };
- std::vector<ProcessStats> topNProcesses = {};
- };
- std::vector<UidStats> topNIoBlockedUids = {};
- // Total # of tasks owned by each UID in |topNIoBlockedUids|.
- std::vector<uint64_t> topNIoBlockedUidsTotalTaskCnt = {};
- std::vector<UidStats> topNMajorFaultUids = {};
- uint64_t totalMajorFaults = 0;
- // Percentage of increase/decrease in the major page faults since last collection.
- double majorFaultsPercentChange = 0.0;
-};
-
-std::string toString(const ProcessIoPerfData& data);
-
-struct IoPerfRecord {
- time_t time; // Collection time.
- UidIoPerfData uidIoPerfData;
- SystemIoPerfData systemIoPerfData;
- ProcessIoPerfData processIoPerfData;
-};
-
-std::string toString(const IoPerfRecord& record);
-
-struct CollectionInfo {
- std::chrono::nanoseconds interval = 0ns; // Collection interval between subsequent collections.
- size_t maxCacheSize = 0; // Maximum cache size for the collection.
- std::unordered_set<std::string> filterPackages; // Filter the output only to the specified
- // packages.
- nsecs_t lastCollectionUptime = 0; // Used to calculate the uptime for next collection.
- std::vector<IoPerfRecord> records; // Cache of collected performance records.
-};
-
-std::string toString(const CollectionInfo& collectionInfo);
-
-enum CollectionEvent {
- INIT = 0,
- BOOT_TIME,
- PERIODIC,
- CUSTOM,
- TERMINATED,
- LAST_EVENT,
-};
-
-enum SwitchEvent {
- // Ends boot-time collection by collecting the last boot-time record and switching the
- // collection event to periodic collection.
- END_BOOTTIME_COLLECTION = CollectionEvent::LAST_EVENT + 1,
- // Ends custom collection, discards collected data and starts periodic collection.
- END_CUSTOM_COLLECTION
-};
-
-static inline std::string toString(CollectionEvent event) {
- switch (event) {
- case CollectionEvent::INIT:
- return "INIT";
- case CollectionEvent::BOOT_TIME:
- return "BOOT_TIME";
- case CollectionEvent::PERIODIC:
- return "PERIODIC";
- case CollectionEvent::CUSTOM:
- return "CUSTOM";
- case CollectionEvent::TERMINATED:
- return "TERMINATED";
- default:
- return "INVALID";
- }
-}
-
-// IoPerfCollection implements the I/O performance data collection module of the CarWatchDog
-// service. It exposes APIs that the CarWatchDog main thread and binder service can call to start
-// a collection, update the collection type, and generate collection dumps.
-class IoPerfCollection : public MessageHandler {
-public:
- IoPerfCollection() :
- mHandlerLooper(new LooperWrapper()),
- mBoottimeCollection({}),
- mPeriodicCollection({}),
- mCustomCollection({}),
- mCurrCollectionEvent(CollectionEvent::INIT),
- mUidToPackageNameMapping({}),
- mUidIoStats(new UidIoStats()),
- mProcStat(new ProcStat()),
- mProcPidStat(new ProcPidStat()),
- mLastMajorFaults(0) {}
-
- ~IoPerfCollection() { terminate(); }
-
- // Starts the boot-time collection in the looper handler on a collection thread and returns
- // immediately. Must be called only once. Otherwise, returns an error.
- android::base::Result<void> start();
-
- // Terminates the collection thread and returns.
- void terminate();
-
- // Ends the boot-time collection, caches boot-time perf records, sends message to the looper to
- // begin the periodic collection, and returns immediately.
- virtual android::base::Result<void> onBootFinished();
-
- // Depending the arguments, it either:
- // 1. Starts custom collection.
- // 2. Ends custom collection and dumps the collected data.
- // Returns any error observed during the dump generation.
- virtual android::base::Result<void> onCustomCollection(int fd, const Vector<String16>& args);
-
- // Generates a dump from the boot-time and periodic collection events.
- virtual android::base::Result<void> onDump(int fd);
-
- // Dumps the help text.
- bool dumpHelpText(int fd);
-
-private:
- // Dumps the collectors' status when they are disabled.
- android::base::Result<void> dumpCollectorsStatusLocked(int fd);
-
- // Starts a custom collection on the looper handler, temporarily stops the periodic collection
- // (won't discard the collected data), and returns immediately. Returns any error observed
- // during this process. The custom collection happens once every |interval| seconds. When the
- // |maxDuration| is reached, the looper receives a message to end the collection, discards the
- // collected data, and starts the periodic collection. This is needed to ensure the custom
- // collection doesn't run forever when a subsequent |endCustomCollection| call is not received.
- // When |kFilterPackagesFlag| value is provided, the results are filtered only to the specified
- // package names.
- android::base::Result<void> startCustomCollection(
- std::chrono::nanoseconds interval, std::chrono::nanoseconds maxDuration,
- const std::unordered_set<std::string>& filterPackages);
-
- // Ends the current custom collection, generates a dump, sends message to looper to start the
- // periodic collection, and returns immediately. Returns an error when there is no custom
- // collection running or when a dump couldn't be generated from the custom collection.
- android::base::Result<void> endCustomCollection(int fd);
-
- // Handles the messages received by the lopper.
- void handleMessage(const Message& message) override;
-
- // Processes the events received by |handleMessage|.
- android::base::Result<void> processCollectionEvent(CollectionEvent event, CollectionInfo* info);
-
- // Collects/stores the performance data for the current collection event.
- android::base::Result<void> collectLocked(CollectionInfo* collectionInfo);
-
- // Collects performance data from the `/proc/uid_io/stats` file.
- android::base::Result<void> collectUidIoPerfDataLocked(const CollectionInfo& collectionInfo,
- UidIoPerfData* uidIoPerfData);
-
- // Collects performance data from the `/proc/stats` file.
- android::base::Result<void> collectSystemIoPerfDataLocked(SystemIoPerfData* systemIoPerfData);
-
- // Collects performance data from the `/proc/[pid]/stat` and
- // `/proc/[pid]/task/[tid]/stat` files.
- android::base::Result<void> collectProcessIoPerfDataLocked(
- const CollectionInfo& collectionInfo, ProcessIoPerfData* processIoPerfData);
-
- // Updates the |mUidToPackageNameMapping| for the given |uids|.
- android::base::Result<void> updateUidToPackageNameMapping(
- const std::unordered_set<uint32_t>& uids);
-
- // Retrieves package manager from the default service manager.
- android::base::Result<void> retrievePackageManager();
-
- // Top N per-UID stats per category.
- int mTopNStatsPerCategory;
-
- // Top N per-process stats per subcategory.
- int mTopNStatsPerSubcategory;
-
- // Thread on which the actual collection happens.
- std::thread mCollectionThread;
-
- // Makes sure only one collection is running at any given time.
- Mutex mMutex;
-
- // Handler lopper to execute different collection events on the collection thread.
- android::sp<LooperWrapper> mHandlerLooper GUARDED_BY(mMutex);
-
- // Info for the |CollectionEvent::BOOT_TIME| collection event. The cache is persisted until
- // system shutdown/reboot.
- CollectionInfo mBoottimeCollection GUARDED_BY(mMutex);
-
- // Info for the |CollectionEvent::PERIODIC| collection event. The cache size is limited by
- // |ro.carwatchdog.periodic_collection_buffer_size|.
- CollectionInfo mPeriodicCollection GUARDED_BY(mMutex);
-
- // Info for the |CollectionEvent::CUSTOM| collection event. The info is cleared at the end of
- // every custom collection.
- CollectionInfo mCustomCollection GUARDED_BY(mMutex);
-
- // Tracks the current collection event. Updated on |start|, |onBootComplete|,
- // |startCustomCollection| and |endCustomCollection|.
- CollectionEvent mCurrCollectionEvent GUARDED_BY(mMutex);
-
- // Cache of uid to package name mapping.
- std::unordered_map<uint64_t, std::string> mUidToPackageNameMapping GUARDED_BY(mMutex);
-
- // Collector/parser for `/proc/uid_io/stats`.
- android::sp<UidIoStats> mUidIoStats GUARDED_BY(mMutex);
-
- // Collector/parser for `/proc/stat`.
- android::sp<ProcStat> mProcStat GUARDED_BY(mMutex);
-
- // Collector/parser for `/proc/PID/*` stat files.
- android::sp<ProcPidStat> mProcPidStat GUARDED_BY(mMutex);
-
- // Major faults delta from last collection. Useful when calculating the percentage change in
- // major faults since last collection.
- uint64_t mLastMajorFaults GUARDED_BY(mMutex);
-
- // To get the package names from app uids.
- android::sp<android::content::pm::IPackageManagerNative> mPackageManager GUARDED_BY(mMutex);
-
- FRIEND_TEST(IoPerfCollectionTest, TestCollectionStartAndTerminate);
- FRIEND_TEST(IoPerfCollectionTest, TestValidCollectionSequence);
- FRIEND_TEST(IoPerfCollectionTest, TestCollectionTerminatesOnZeroEnabledCollectors);
- FRIEND_TEST(IoPerfCollectionTest, TestCollectionTerminatesOnError);
- FRIEND_TEST(IoPerfCollectionTest, TestCustomCollectionTerminatesAfterMaxDuration);
- FRIEND_TEST(IoPerfCollectionTest, TestValidUidIoStatFile);
- FRIEND_TEST(IoPerfCollectionTest, TestUidIOStatsLessThanTopNStatsLimit);
- FRIEND_TEST(IoPerfCollectionTest, TestProcUidIoStatsContentsFromDevice);
- FRIEND_TEST(IoPerfCollectionTest, TestValidProcStatFile);
- FRIEND_TEST(IoPerfCollectionTest, TestValidProcPidContents);
- FRIEND_TEST(IoPerfCollectionTest, TestProcPidContentsLessThanTopNStatsLimit);
- FRIEND_TEST(IoPerfCollectionTest, TestCustomCollectionFiltersPackageNames);
-};
-
-} // namespace watchdog
-} // namespace automotive
-} // namespace android
-
-#endif // WATCHDOG_SERVER_SRC_IOPERFCOLLECTION_H_
diff --git a/watchdog/server/src/ServiceManager.cpp b/watchdog/server/src/ServiceManager.cpp
deleted file mode 100644
index 3535232..0000000
--- a/watchdog/server/src/ServiceManager.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (c) 2020 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.
- */
-
-#define LOG_TAG "carwatchdogd"
-
-#include "ServiceManager.h"
-
-namespace android {
-namespace automotive {
-namespace watchdog {
-
-using android::sp;
-using android::String16;
-using android::automotive::watchdog::WatchdogProcessService;
-using android::base::Error;
-using android::base::Result;
-
-sp<WatchdogProcessService> ServiceManager::sWatchdogProcessService = nullptr;
-sp<IoPerfCollection> ServiceManager::sIoPerfCollection = nullptr;
-sp<WatchdogBinderMediator> ServiceManager::sWatchdogBinderMediator = nullptr;
-
-Result<void> ServiceManager::startServices(const sp<Looper>& looper) {
- if (sWatchdogProcessService != nullptr || sIoPerfCollection != nullptr ||
- sWatchdogBinderMediator != nullptr) {
- return Error(INVALID_OPERATION) << "Cannot start services more than once";
- }
- auto result = startProcessAnrMonitor(looper);
- if (!result.ok()) {
- return result;
- }
- result = startIoPerfCollection();
- if (!result.ok()) {
- return result;
- }
- return {};
-}
-
-void ServiceManager::terminateServices() {
- if (sWatchdogProcessService != nullptr) {
- sWatchdogProcessService->terminate();
- sWatchdogProcessService = nullptr;
- }
- if (sIoPerfCollection != nullptr) {
- sIoPerfCollection->terminate();
- sIoPerfCollection = nullptr;
- }
- if (sWatchdogBinderMediator != nullptr) {
- sWatchdogBinderMediator->terminate();
- sWatchdogBinderMediator = nullptr;
- }
-}
-
-Result<void> ServiceManager::startProcessAnrMonitor(const sp<Looper>& looper) {
- sWatchdogProcessService = new WatchdogProcessService(looper);
- return {};
-}
-
-Result<void> ServiceManager::startIoPerfCollection() {
- sp<IoPerfCollection> service = new IoPerfCollection();
- const auto& result = service->start();
- if (!result.ok()) {
- return Error(result.error().code())
- << "Failed to start I/O performance collection: " << result.error();
- }
- sIoPerfCollection = service;
- return {};
-}
-
-Result<void> ServiceManager::startBinderMediator() {
- sWatchdogBinderMediator = new WatchdogBinderMediator();
- const auto& result = sWatchdogBinderMediator->init(sWatchdogProcessService, sIoPerfCollection);
- if (!result.ok()) {
- return Error(result.error().code())
- << "Failed to start binder mediator: " << result.error();
- }
- return {};
-}
-
-} // namespace watchdog
-} // namespace automotive
-} // namespace android
diff --git a/watchdog/server/src/UidIoStats.cpp b/watchdog/server/src/UidIoStats.cpp
deleted file mode 100644
index 6b9d109..0000000
--- a/watchdog/server/src/UidIoStats.cpp
+++ /dev/null
@@ -1,154 +0,0 @@
-/**
- * Copyright (c) 2020, 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.
- */
-
-#define LOG_TAG "carwatchdogd"
-#define DEBUG false
-
-#include "UidIoStats.h"
-
-#include <android-base/file.h>
-#include <android-base/parseint.h>
-#include <android-base/stringprintf.h>
-#include <android-base/strings.h>
-#include <inttypes.h>
-#include <log/log.h>
-
-#include <string>
-#include <unordered_map>
-#include <vector>
-#include <utility>
-
-namespace android {
-namespace automotive {
-namespace watchdog {
-
-using android::base::Error;
-using android::base::ReadFileToString;
-using android::base::Result;
-using android::base::StringPrintf;
-using base::ParseUint;
-using base::Split;
-
-namespace {
-
-bool parseUidIoStats(const std::string& data, UidIoStat* uidIoStat) {
- std::vector<std::string> fields = Split(data, " ");
- if (fields.size() < 11 || !ParseUint(fields[0], &uidIoStat->uid) ||
- !ParseUint(fields[1], &uidIoStat->io[FOREGROUND].rchar) ||
- !ParseUint(fields[2], &uidIoStat->io[FOREGROUND].wchar) ||
- !ParseUint(fields[3], &uidIoStat->io[FOREGROUND].readBytes) ||
- !ParseUint(fields[4], &uidIoStat->io[FOREGROUND].writeBytes) ||
- !ParseUint(fields[5], &uidIoStat->io[BACKGROUND].rchar) ||
- !ParseUint(fields[6], &uidIoStat->io[BACKGROUND].wchar) ||
- !ParseUint(fields[7], &uidIoStat->io[BACKGROUND].readBytes) ||
- !ParseUint(fields[8], &uidIoStat->io[BACKGROUND].writeBytes) ||
- !ParseUint(fields[9], &uidIoStat->io[FOREGROUND].fsync) ||
- !ParseUint(fields[10], &uidIoStat->io[BACKGROUND].fsync)) {
- ALOGW("Invalid uid I/O stats: \"%s\"", data.c_str());
- return false;
- }
- return true;
-}
-
-} // namespace
-
-bool IoUsage::isZero() const {
- for (int i = 0; i < METRIC_TYPES; i++) {
- for (int j = 0; j < UID_STATES; j++) {
- if (metrics[i][j]) {
- return false;
- }
- }
- }
- return true;
-}
-
-std::string IoUsage::toString() const {
- return StringPrintf("FgRdBytes:%" PRIu64 " BgRdBytes:%" PRIu64 " FgWrBytes:%" PRIu64
- " BgWrBytes:%" PRIu64 " FgFsync:%" PRIu64 " BgFsync:%" PRIu64,
- metrics[READ_BYTES][FOREGROUND], metrics[READ_BYTES][BACKGROUND],
- metrics[WRITE_BYTES][FOREGROUND], metrics[WRITE_BYTES][BACKGROUND],
- metrics[FSYNC_COUNT][FOREGROUND], metrics[FSYNC_COUNT][BACKGROUND]);
-}
-
-Result<std::unordered_map<uint32_t, UidIoUsage>> UidIoStats::collect() {
- if (!kEnabled) {
- return Error() << "Can not access " << kPath;
- }
-
- Mutex::Autolock lock(mMutex);
- const auto& uidIoStats = getUidIoStatsLocked();
- if (!uidIoStats.ok() || uidIoStats->empty()) {
- return Error() << "Failed to get UID IO stats: " << uidIoStats.error();
- }
-
- std::unordered_map<uint32_t, UidIoUsage> usage;
- for (const auto& it : *uidIoStats) {
- const UidIoStat& uidIoStat = it.second;
- usage[uidIoStat.uid] = {};
- struct UidIoUsage& uidUsage = usage[uidIoStat.uid];
- uidUsage.uid = uidIoStat.uid;
-
- int64_t fgRdDelta = uidIoStat.io[FOREGROUND].readBytes -
- mLastUidIoStats[uidIoStat.uid].io[FOREGROUND].readBytes;
- int64_t bgRdDelta = uidIoStat.io[BACKGROUND].readBytes -
- mLastUidIoStats[uidIoStat.uid].io[BACKGROUND].readBytes;
- int64_t fgWrDelta = uidIoStat.io[FOREGROUND].writeBytes -
- mLastUidIoStats[uidIoStat.uid].io[FOREGROUND].writeBytes;
- int64_t bgWrDelta = uidIoStat.io[BACKGROUND].writeBytes -
- mLastUidIoStats[uidIoStat.uid].io[BACKGROUND].writeBytes;
- int64_t fgFsDelta =
- uidIoStat.io[FOREGROUND].fsync - mLastUidIoStats[uidIoStat.uid].io[FOREGROUND].fsync;
- int64_t bgFsDelta =
- uidIoStat.io[BACKGROUND].fsync - mLastUidIoStats[uidIoStat.uid].io[BACKGROUND].fsync;
-
- uidUsage.ios.metrics[READ_BYTES][FOREGROUND] += (fgRdDelta < 0) ? 0 : fgRdDelta;
- uidUsage.ios.metrics[READ_BYTES][BACKGROUND] += (bgRdDelta < 0) ? 0 : bgRdDelta;
- uidUsage.ios.metrics[WRITE_BYTES][FOREGROUND] += (fgWrDelta < 0) ? 0 : fgWrDelta;
- uidUsage.ios.metrics[WRITE_BYTES][BACKGROUND] += (bgWrDelta < 0) ? 0 : bgWrDelta;
- uidUsage.ios.metrics[FSYNC_COUNT][FOREGROUND] += (fgFsDelta < 0) ? 0 : fgFsDelta;
- uidUsage.ios.metrics[FSYNC_COUNT][BACKGROUND] += (bgFsDelta < 0) ? 0 : bgFsDelta;
- }
- mLastUidIoStats = *uidIoStats;
- return usage;
-}
-
-Result<std::unordered_map<uint32_t, UidIoStat>> UidIoStats::getUidIoStatsLocked() const {
- std::string buffer;
- if (!ReadFileToString(kPath, &buffer)) {
- return Error() << "ReadFileToString failed for " << kPath;
- }
-
- std::vector<std::string> ioStats = Split(std::move(buffer), "\n");
- std::unordered_map<uint32_t, UidIoStat> uidIoStats;
- UidIoStat uidIoStat;
- for (size_t i = 0; i < ioStats.size(); i++) {
- if (ioStats[i].empty() || !ioStats[i].compare(0, 4, "task")) {
- // Skip per-task stats as CONFIG_UID_SYS_STATS_DEBUG is not set in the kernel and
- // the collected data is aggregated only per-UID.
- continue;
- }
- if (!parseUidIoStats(std::move(ioStats[i]), &uidIoStat)) {
- return Error() << "Failed to parse the contents of " << kPath;
- }
- uidIoStats[uidIoStat.uid] = uidIoStat;
- }
- return uidIoStats;
-}
-
-} // namespace watchdog
-} // namespace automotive
-} // namespace android
diff --git a/watchdog/server/src/WatchdogProcessService.cpp b/watchdog/server/src/WatchdogProcessService.cpp
deleted file mode 100644
index 8d4ec06..0000000
--- a/watchdog/server/src/WatchdogProcessService.cpp
+++ /dev/null
@@ -1,565 +0,0 @@
-/**
- * Copyright (c) 2020, 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.
- */
-
-#define LOG_TAG "carwatchdogd"
-#define DEBUG false // STOPSHIP if true.
-
-#include "WatchdogProcessService.h"
-
-#include <android-base/chrono_utils.h>
-#include <android-base/file.h>
-#include <android-base/properties.h>
-#include <android-base/stringprintf.h>
-#include <binder/IPCThreadState.h>
-
-namespace android {
-namespace automotive {
-namespace watchdog {
-
-using std::literals::chrono_literals::operator""s;
-using android::base::Error;
-using android::base::GetProperty;
-using android::base::Result;
-using android::base::StringAppendF;
-using android::base::StringPrintf;
-using android::base::WriteStringToFd;
-using android::binder::Status;
-
-namespace {
-
-const std::vector<TimeoutLength> kTimeouts = {TimeoutLength::TIMEOUT_CRITICAL,
- TimeoutLength::TIMEOUT_MODERATE,
- TimeoutLength::TIMEOUT_NORMAL};
-
-std::chrono::nanoseconds timeoutToDurationNs(const TimeoutLength& timeout) {
- switch (timeout) {
- case TimeoutLength::TIMEOUT_CRITICAL:
- return 3s; // 3s and no buffer time.
- case TimeoutLength::TIMEOUT_MODERATE:
- return 6s; // 5s + 1s as buffer time.
- case TimeoutLength::TIMEOUT_NORMAL:
- return 12s; // 10s + 2s as buffer time.
- }
-}
-
-std::string pidArrayToString(const std::vector<int32_t>& pids) {
- size_t size = pids.size();
- if (size == 0) {
- return "";
- }
- std::string buffer;
- StringAppendF(&buffer, "%d", pids[0]);
- for (int i = 1; i < size; i++) {
- int pid = pids[i];
- StringAppendF(&buffer, ", %d", pid);
- }
- return buffer;
-}
-
-bool isSystemShuttingDown() {
- std::string sysPowerCtl;
- std::istringstream tokenStream(GetProperty("sys.powerctl", ""));
- std::getline(tokenStream, sysPowerCtl, ',');
- return sysPowerCtl == "reboot" || sysPowerCtl == "shutdown";
-}
-
-} // namespace
-
-WatchdogProcessService::WatchdogProcessService(const sp<Looper>& handlerLooper) :
- mHandlerLooper(handlerLooper), mLastSessionId(0) {
- mMessageHandler = new MessageHandlerImpl(this);
- mWatchdogEnabled = true;
- for (const auto& timeout : kTimeouts) {
- mClients.insert(std::make_pair(timeout, std::vector<ClientInfo>()));
- mPingedClients.insert(std::make_pair(timeout, PingedClientMap()));
- }
-}
-
-Status WatchdogProcessService::registerClient(const sp<ICarWatchdogClient>& client,
- TimeoutLength timeout) {
- Mutex::Autolock lock(mMutex);
- return registerClientLocked(client, timeout, ClientType::Regular);
-}
-
-Status WatchdogProcessService::unregisterClient(const sp<ICarWatchdogClient>& client) {
- Mutex::Autolock lock(mMutex);
- sp<IBinder> binder = BnCarWatchdog::asBinder(client);
- // kTimeouts is declared as global static constant to cover all kinds of timeout (CRITICAL,
- // MODERATE, NORMAL).
- return unregisterClientLocked(kTimeouts, binder, ClientType::Regular);
-}
-
-Status WatchdogProcessService::registerMediator(const sp<ICarWatchdogClient>& mediator) {
- Mutex::Autolock lock(mMutex);
- // Mediator's timeout is always TIMEOUT_CRITICAL.
- return registerClientLocked(mediator, TimeoutLength::TIMEOUT_CRITICAL, ClientType::Mediator);
-}
-
-Status WatchdogProcessService::unregisterMediator(const sp<ICarWatchdogClient>& mediator) {
- std::vector<TimeoutLength> timeouts = {TimeoutLength::TIMEOUT_CRITICAL};
- sp<IBinder> binder = BnCarWatchdog::asBinder(mediator);
- Mutex::Autolock lock(mMutex);
- return unregisterClientLocked(timeouts, binder, ClientType::Mediator);
-}
-
-Status WatchdogProcessService::registerMonitor(const sp<ICarWatchdogMonitor>& monitor) {
- Mutex::Autolock lock(mMutex);
- sp<IBinder> binder = BnCarWatchdog::asBinder(monitor);
- if (mMonitor != nullptr && binder == BnCarWatchdog::asBinder(mMonitor)) {
- return Status::ok();
- }
- status_t ret = binder->linkToDeath(this);
- if (ret != OK) {
- ALOGW("Cannot register the monitor. The monitor is dead.");
- return Status::fromExceptionCode(Status::EX_ILLEGAL_STATE, "The monitor is dead.");
- }
- mMonitor = monitor;
- if (DEBUG) {
- ALOGD("Car watchdog monitor is registered");
- }
- return Status::ok();
-}
-
-Status WatchdogProcessService::unregisterMonitor(const sp<ICarWatchdogMonitor>& monitor) {
- Mutex::Autolock lock(mMutex);
- if (mMonitor != monitor) {
- ALOGW("Cannot unregister the monitor. The monitor has not been registered.");
- return Status::fromExceptionCode(Status::EX_ILLEGAL_ARGUMENT,
- "The monitor has not been registered.");
- }
- sp<IBinder> binder = BnCarWatchdog::asBinder(monitor);
- binder->unlinkToDeath(this);
- mMonitor = nullptr;
- if (DEBUG) {
- ALOGD("Car watchdog monitor is unregistered");
- }
- return Status::ok();
-}
-
-Status WatchdogProcessService::tellClientAlive(const sp<ICarWatchdogClient>& client,
- int32_t sessionId) {
- Mutex::Autolock lock(mMutex);
- return tellClientAliveLocked(client, sessionId);
-}
-
-Status WatchdogProcessService::tellMediatorAlive(const sp<ICarWatchdogClient>& mediator,
- const std::vector<int32_t>& clientsNotResponding,
- int32_t sessionId) {
- Status status;
- {
- Mutex::Autolock lock(mMutex);
- if (DEBUG) {
- std::string buffer;
- int size = clientsNotResponding.size();
- if (size != 0) {
- StringAppendF(&buffer, "%d", clientsNotResponding[0]);
- for (int i = 1; i < clientsNotResponding.size(); i++) {
- StringAppendF(&buffer, ", %d", clientsNotResponding[i]);
- }
- ALOGD("Mediator(session: %d) responded with non-responding clients: %s", sessionId,
- buffer.c_str());
- }
- }
- status = tellClientAliveLocked(mediator, sessionId);
- }
- if (status.isOk()) {
- dumpAndKillAllProcesses(clientsNotResponding);
- }
- return status;
-}
-
-Status WatchdogProcessService::tellDumpFinished(const sp<ICarWatchdogMonitor>& monitor,
- int32_t pid) {
- Mutex::Autolock lock(mMutex);
- if (mMonitor == nullptr || monitor == nullptr ||
- BnCarWatchdog::asBinder(monitor) != BnCarWatchdog::asBinder(mMonitor)) {
- return Status::
- fromExceptionCode(Status::EX_ILLEGAL_ARGUMENT,
- "The monitor is not registered or an invalid monitor is given");
- }
- ALOGI("Process(pid: %d) has been dumped and killed", pid);
- return Status::ok();
-}
-
-Status WatchdogProcessService::notifyPowerCycleChange(PowerCycle cycle) {
- std::string buffer;
- Mutex::Autolock lock(mMutex);
- bool oldStatus = mWatchdogEnabled;
- switch (cycle) {
- case PowerCycle::POWER_CYCLE_SHUTDOWN:
- mWatchdogEnabled = false;
- buffer = "SHUTDOWN power cycle";
- break;
- case PowerCycle::POWER_CYCLE_SUSPEND:
- mWatchdogEnabled = false;
- buffer = "SUSPEND power cycle";
- break;
- case PowerCycle::POWER_CYCLE_RESUME:
- mWatchdogEnabled = true;
- for (const auto& timeout : kTimeouts) {
- startHealthCheckingLocked(timeout);
- }
- buffer = "RESUME power cycle";
- break;
- default:
- ALOGW("Unsupported power cycle: %d", cycle);
- return Status::fromExceptionCode(Status::EX_ILLEGAL_ARGUMENT,
- "Unsupported power cycle");
- }
- ALOGI("Received %s", buffer.c_str());
- if (oldStatus != mWatchdogEnabled) {
- ALOGI("Car watchdog is %s", mWatchdogEnabled ? "enabled" : "disabled");
- }
- return Status::ok();
-}
-
-Status WatchdogProcessService::notifyUserStateChange(userid_t userId, UserState state) {
- std::string buffer;
- Mutex::Autolock lock(mMutex);
- switch (state) {
- case UserState::USER_STATE_STARTED:
- mStoppedUserId.erase(userId);
- buffer = StringPrintf("user(%d) is started", userId);
- break;
- case UserState::USER_STATE_STOPPED:
- mStoppedUserId.insert(userId);
- buffer = StringPrintf("user(%d) is stopped", userId);
- break;
- default:
- ALOGW("Unsupported user state: %d", state);
- return Status::fromExceptionCode(Status::EX_ILLEGAL_ARGUMENT, "Unsupported user state");
- }
- ALOGI("Received user state change: %s", buffer.c_str());
- return Status::ok();
-}
-
-Result<void> WatchdogProcessService::dump(int fd, const Vector<String16>& /*args*/) {
- Mutex::Autolock lock(mMutex);
- const char* indent = " ";
- const char* doubleIndent = " ";
- std::string buffer;
- WriteStringToFd("CAR WATCHDOG PROCESS SERVICE\n", fd);
- WriteStringToFd(StringPrintf("%sWatchdog enabled: %s\n", indent,
- mWatchdogEnabled ? "true" : "false"),
- fd);
- WriteStringToFd(StringPrintf("%sRegistered clients\n", indent), fd);
- int count = 1;
- for (const auto& timeout : kTimeouts) {
- std::vector<ClientInfo>& clients = mClients[timeout];
- for (auto it = clients.begin(); it != clients.end(); it++, count++) {
- WriteStringToFd(StringPrintf("%sClient #%d: %s\n", doubleIndent, count,
- it->toString().c_str()),
- fd);
- }
- }
- WriteStringToFd(StringPrintf("%sMonitor registered: %s\n", indent,
- mMonitor == nullptr ? "false" : "true"),
- fd);
- WriteStringToFd(StringPrintf("%sisSystemShuttingDown: %s\n", indent,
- isSystemShuttingDown() ? "true" : "false"),
- fd);
- buffer = "none";
- bool first = true;
- for (const auto& userId : mStoppedUserId) {
- if (first) {
- buffer = StringPrintf("%d", userId);
- first = false;
- } else {
- StringAppendF(&buffer, ", %d", userId);
- }
- }
- WriteStringToFd(StringPrintf("%sStopped users: %s\n", indent, buffer.c_str()), fd);
- return {};
-}
-
-void WatchdogProcessService::doHealthCheck(int what) {
- mHandlerLooper->removeMessages(mMessageHandler, what);
- if (!isWatchdogEnabled()) {
- return;
- }
- const TimeoutLength timeout = static_cast<TimeoutLength>(what);
- dumpAndKillClientsIfNotResponding(timeout);
-
- /* Generates a temporary/local vector containing clients.
- * Using a local copy may send unnecessary ping messages to clients after they are unregistered.
- * Clients should be able to handle them.
- */
- std::vector<ClientInfo> clientsToCheck;
- PingedClientMap& pingedClients = mPingedClients[timeout];
- {
- Mutex::Autolock lock(mMutex);
- pingedClients.clear();
- clientsToCheck = mClients[timeout];
- for (auto& clientInfo : clientsToCheck) {
- if (mStoppedUserId.count(clientInfo.userId) > 0) {
- continue;
- }
- int sessionId = getNewSessionId();
- clientInfo.sessionId = sessionId;
- pingedClients.insert(std::make_pair(sessionId, clientInfo));
- }
- }
-
- for (const auto& clientInfo : clientsToCheck) {
- Status status = clientInfo.client->checkIfAlive(clientInfo.sessionId, timeout);
- if (!status.isOk()) {
- ALOGW("Sending a ping message to client(pid: %d) failed: %s", clientInfo.pid,
- status.exceptionMessage().c_str());
- {
- Mutex::Autolock lock(mMutex);
- pingedClients.erase(clientInfo.sessionId);
- }
- }
- }
- // Though the size of pingedClients is a more specific measure, clientsToCheck is used as a
- // conservative approach.
- if (clientsToCheck.size() > 0) {
- auto durationNs = timeoutToDurationNs(timeout);
- mHandlerLooper->sendMessageDelayed(durationNs.count(), mMessageHandler, Message(what));
- }
-}
-
-void WatchdogProcessService::terminate() {
- Mutex::Autolock lock(mMutex);
- for (const auto& timeout : kTimeouts) {
- std::vector<ClientInfo>& clients = mClients[timeout];
- for (auto it = clients.begin(); it != clients.end();) {
- sp<IBinder> binder = BnCarWatchdog::asBinder((*it).client);
- binder->unlinkToDeath(this);
- it = clients.erase(it);
- }
- }
-}
-
-void WatchdogProcessService::binderDied(const wp<IBinder>& who) {
- Mutex::Autolock lock(mMutex);
- IBinder* binder = who.unsafe_get();
- // Check if dead binder is monitor.
- sp<IBinder> monitor = BnCarWatchdog::asBinder(mMonitor);
- if (monitor == binder) {
- mMonitor = nullptr;
- ALOGW("The monitor has died.");
- return;
- }
- findClientAndProcessLocked(kTimeouts, binder,
- [&](std::vector<ClientInfo>& clients,
- std::vector<ClientInfo>::const_iterator it) {
- ALOGW("Client(pid: %d) died", it->pid);
- clients.erase(it);
- });
-}
-
-bool WatchdogProcessService::isRegisteredLocked(const sp<ICarWatchdogClient>& client) {
- sp<IBinder> binder = BnCarWatchdog::asBinder(client);
- return findClientAndProcessLocked(kTimeouts, binder, nullptr);
-}
-
-Status WatchdogProcessService::registerClientLocked(const sp<ICarWatchdogClient>& client,
- TimeoutLength timeout, ClientType clientType) {
- const char* clientName = clientType == ClientType::Regular ? "client" : "mediator";
- if (isRegisteredLocked(client)) {
- ALOGW("Cannot register the %s: the %s is already registered.", clientName, clientName);
- return Status::ok();
- }
- sp<IBinder> binder = BnCarWatchdog::asBinder(client);
- status_t status = binder->linkToDeath(this);
- if (status != OK) {
- std::string errorStr = StringPrintf("The %s is dead", clientName);
- const char* errorCause = errorStr.c_str();
- ALOGW("Cannot register the %s: %s", clientName, errorCause);
- return Status::fromExceptionCode(Status::EX_ILLEGAL_STATE, errorCause);
- }
- std::vector<ClientInfo>& clients = mClients[timeout];
- pid_t callingPid = IPCThreadState::self()->getCallingPid();
- uid_t callingUid = IPCThreadState::self()->getCallingUid();
- clients.push_back(ClientInfo(client, callingPid, callingUid, clientType));
-
- // If the client array becomes non-empty, start health checking.
- if (clients.size() == 1) {
- startHealthCheckingLocked(timeout);
- }
- if (DEBUG) {
- ALOGD("Car watchdog %s(pid: %d, timeout: %d) is registered", clientName, callingPid,
- timeout);
- }
- return Status::ok();
-}
-
-Status WatchdogProcessService::unregisterClientLocked(const std::vector<TimeoutLength>& timeouts,
- sp<IBinder> binder, ClientType clientType) {
- const char* clientName = clientType == ClientType::Regular ? "client" : "mediator";
- bool result = findClientAndProcessLocked(timeouts, binder,
- [&](std::vector<ClientInfo>& clients,
- std::vector<ClientInfo>::const_iterator it) {
- binder->unlinkToDeath(this);
- clients.erase(it);
- });
- if (!result) {
- std::string errorStr = StringPrintf("The %s has not been registered", clientName);
- const char* errorCause = errorStr.c_str();
- ALOGW("Cannot unregister the %s: %s", clientName, errorCause);
- return Status::fromExceptionCode(Status::EX_ILLEGAL_ARGUMENT, errorCause);
- }
- if (DEBUG) {
- ALOGD("Car watchdog %s is unregistered", clientName);
- }
- return Status::ok();
-}
-
-Status WatchdogProcessService::tellClientAliveLocked(const sp<ICarWatchdogClient>& client,
- int32_t sessionId) {
- const sp<IBinder> binder = BnCarWatchdog::asBinder(client);
- for (const auto& timeout : kTimeouts) {
- PingedClientMap& clients = mPingedClients[timeout];
- PingedClientMap::const_iterator it = clients.find(sessionId);
- if (it == clients.cend() || binder != BnCarWatchdog::asBinder(it->second.client)) {
- continue;
- }
- clients.erase(it);
- return Status::ok();
- }
- return Status::fromExceptionCode(Status::EX_ILLEGAL_ARGUMENT,
- "The client is not registered or the session ID is not found");
-}
-
-bool WatchdogProcessService::findClientAndProcessLocked(const std::vector<TimeoutLength> timeouts,
- const sp<IBinder> binder,
- const Processor& processor) {
- for (const auto& timeout : timeouts) {
- std::vector<ClientInfo>& clients = mClients[timeout];
- for (auto it = clients.begin(); it != clients.end(); it++) {
- if (BnCarWatchdog::asBinder((*it).client) != binder) {
- continue;
- }
- if (processor != nullptr) {
- processor(clients, it);
- }
- return true;
- }
- }
- return false;
-}
-
-Result<void> WatchdogProcessService::startHealthCheckingLocked(TimeoutLength timeout) {
- PingedClientMap& clients = mPingedClients[timeout];
- clients.clear();
- int what = static_cast<int>(timeout);
- auto durationNs = timeoutToDurationNs(timeout);
- mHandlerLooper->sendMessageDelayed(durationNs.count(), mMessageHandler, Message(what));
- return {};
-}
-
-Result<void> WatchdogProcessService::dumpAndKillClientsIfNotResponding(TimeoutLength timeout) {
- std::vector<int32_t> processIds;
- std::vector<sp<ICarWatchdogClient>> clientsToNotify;
- {
- Mutex::Autolock lock(mMutex);
- PingedClientMap& clients = mPingedClients[timeout];
- for (PingedClientMap::const_iterator it = clients.cbegin(); it != clients.cend(); it++) {
- pid_t pid = -1;
- userid_t userId = -1;
- sp<ICarWatchdogClient> client = it->second.client;
- sp<IBinder> binder = BnCarWatchdog::asBinder(client);
- std::vector<TimeoutLength> timeouts = {timeout};
- findClientAndProcessLocked(timeouts, binder,
- [&](std::vector<ClientInfo>& clients,
- std::vector<ClientInfo>::const_iterator it) {
- pid = (*it).pid;
- userId = (*it).userId;
- clients.erase(it);
- });
- if (pid != -1 && mStoppedUserId.count(userId) == 0) {
- clientsToNotify.push_back(client);
- processIds.push_back(pid);
- }
- }
- }
- for (auto&& client : clientsToNotify) {
- client->prepareProcessTermination();
- }
- return dumpAndKillAllProcesses(processIds);
-}
-
-Result<void> WatchdogProcessService::dumpAndKillAllProcesses(
- const std::vector<int32_t>& processesNotResponding) {
- size_t size = processesNotResponding.size();
- if (size == 0) {
- return {};
- }
- std::string pidString = pidArrayToString(processesNotResponding);
- sp<ICarWatchdogMonitor> monitor;
- {
- Mutex::Autolock lock(mMutex);
- if (mMonitor == nullptr) {
- std::string errorMsg =
- StringPrintf("Cannot dump and kill processes(pid = %s): Monitor is not set",
- pidString.c_str());
- ALOGW("%s", errorMsg.c_str());
- return Error() << errorMsg;
- }
- monitor = mMonitor;
- }
- if (isSystemShuttingDown()) {
- ALOGI("Skip dumping and killing processes(%s): The system is shutting down",
- pidString.c_str());
- return {};
- }
- monitor->onClientsNotResponding(processesNotResponding);
- if (DEBUG) {
- ALOGD("Dumping and killing processes is requested: %s", pidString.c_str());
- }
- return {};
-}
-
-int32_t WatchdogProcessService::getNewSessionId() {
- // Make sure that session id is always positive number.
- if (++mLastSessionId <= 0) {
- mLastSessionId = 1;
- }
- return mLastSessionId;
-}
-
-bool WatchdogProcessService::isWatchdogEnabled() {
- Mutex::Autolock lock(mMutex);
- return mWatchdogEnabled;
-}
-
-std::string WatchdogProcessService::ClientInfo::toString() {
- std::string buffer;
- StringAppendF(&buffer, "pid = %d, userId = %d, type = %s", pid, userId,
- type == Regular ? "Regular" : "Mediator");
- return buffer;
-}
-
-WatchdogProcessService::MessageHandlerImpl::MessageHandlerImpl(
- const sp<WatchdogProcessService>& service) :
- mService(service) {}
-
-void WatchdogProcessService::MessageHandlerImpl::handleMessage(const Message& message) {
- switch (message.what) {
- case static_cast<int>(TimeoutLength::TIMEOUT_CRITICAL):
- case static_cast<int>(TimeoutLength::TIMEOUT_MODERATE):
- case static_cast<int>(TimeoutLength::TIMEOUT_NORMAL):
- mService->doHealthCheck(message.what);
- break;
- default:
- ALOGW("Unknown message: %d", message.what);
- }
-}
-
-} // namespace watchdog
-} // namespace automotive
-} // namespace android
diff --git a/watchdog/server/src/WatchdogProcessService.h b/watchdog/server/src/WatchdogProcessService.h
deleted file mode 100644
index 322b343..0000000
--- a/watchdog/server/src/WatchdogProcessService.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/**
- * Copyright (c) 2020, 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.
- */
-
-#ifndef WATCHDOG_SERVER_SRC_WATCHDOGPROCESSSERVICE_H_
-#define WATCHDOG_SERVER_SRC_WATCHDOGPROCESSSERVICE_H_
-
-#include <android-base/result.h>
-#include <android/automotive/watchdog/BnCarWatchdog.h>
-#include <android/automotive/watchdog/PowerCycle.h>
-#include <android/automotive/watchdog/UserState.h>
-#include <binder/IBinder.h>
-#include <binder/Status.h>
-#include <cutils/multiuser.h>
-#include <utils/Looper.h>
-#include <utils/Mutex.h>
-#include <utils/String16.h>
-#include <utils/StrongPointer.h>
-#include <utils/Vector.h>
-
-#include <unordered_map>
-#include <unordered_set>
-#include <vector>
-
-namespace android {
-namespace automotive {
-namespace watchdog {
-
-class WatchdogProcessService : public IBinder::DeathRecipient {
-public:
- explicit WatchdogProcessService(const android::sp<Looper>& handlerLooper);
-
- virtual android::base::Result<void> dump(int fd, const Vector<String16>& args);
-
- virtual binder::Status registerClient(const sp<ICarWatchdogClient>& client,
- TimeoutLength timeout);
- virtual binder::Status unregisterClient(const sp<ICarWatchdogClient>& client);
- virtual binder::Status registerMediator(const sp<ICarWatchdogClient>& mediator);
- virtual binder::Status unregisterMediator(const sp<ICarWatchdogClient>& mediator);
- virtual binder::Status registerMonitor(const sp<ICarWatchdogMonitor>& monitor);
- virtual binder::Status unregisterMonitor(const sp<ICarWatchdogMonitor>& monitor);
- virtual binder::Status tellClientAlive(const sp<ICarWatchdogClient>& client, int32_t sessionId);
- virtual binder::Status tellMediatorAlive(const sp<ICarWatchdogClient>& mediator,
- const std::vector<int32_t>& clientsNotResponding,
- int32_t sessionId);
- virtual binder::Status tellDumpFinished(const android::sp<ICarWatchdogMonitor>& monitor,
- int32_t pid);
- virtual binder::Status notifyPowerCycleChange(PowerCycle cycle);
- virtual binder::Status notifyUserStateChange(userid_t userId, UserState state);
- virtual void binderDied(const android::wp<IBinder>& who);
-
- void doHealthCheck(int what);
- void terminate();
-
-private:
- enum ClientType {
- Regular,
- Mediator,
- };
-
- struct ClientInfo {
- ClientInfo(const android::sp<ICarWatchdogClient>& client, pid_t pid, userid_t userId,
- ClientType type) :
- client(client),
- pid(pid),
- userId(userId),
- type(type) {}
- std::string toString();
-
- android::sp<ICarWatchdogClient> client;
- pid_t pid;
- userid_t userId;
- int sessionId;
- ClientType type;
- };
-
- typedef std::unordered_map<int, ClientInfo> PingedClientMap;
-
- class MessageHandlerImpl : public MessageHandler {
- public:
- explicit MessageHandlerImpl(const android::sp<WatchdogProcessService>& service);
-
- void handleMessage(const Message& message) override;
-
- private:
- android::sp<WatchdogProcessService> mService;
- };
-
-private:
- binder::Status registerClientLocked(const android::sp<ICarWatchdogClient>& client,
- TimeoutLength timeout, ClientType clientType);
- binder::Status unregisterClientLocked(const std::vector<TimeoutLength>& timeouts,
- android::sp<IBinder> binder, ClientType clientType);
- bool isRegisteredLocked(const android::sp<ICarWatchdogClient>& client);
- binder::Status tellClientAliveLocked(const android::sp<ICarWatchdogClient>& client,
- int32_t sessionId);
- base::Result<void> startHealthCheckingLocked(TimeoutLength timeout);
- base::Result<void> dumpAndKillClientsIfNotResponding(TimeoutLength timeout);
- base::Result<void> dumpAndKillAllProcesses(const std::vector<int32_t>& processesNotResponding);
- int32_t getNewSessionId();
- bool isWatchdogEnabled();
-
- using Processor =
- std::function<void(std::vector<ClientInfo>&, std::vector<ClientInfo>::const_iterator)>;
- bool findClientAndProcessLocked(const std::vector<TimeoutLength> timeouts,
- const android::sp<IBinder> binder, const Processor& processor);
-
-private:
- sp<Looper> mHandlerLooper;
- android::sp<MessageHandlerImpl> mMessageHandler;
- Mutex mMutex;
- std::unordered_map<TimeoutLength, std::vector<ClientInfo>> mClients GUARDED_BY(mMutex);
- std::unordered_map<TimeoutLength, PingedClientMap> mPingedClients GUARDED_BY(mMutex);
- std::unordered_set<userid_t> mStoppedUserId GUARDED_BY(mMutex);
- android::sp<ICarWatchdogMonitor> mMonitor GUARDED_BY(mMutex);
- bool mWatchdogEnabled GUARDED_BY(mMutex);
- // mLastSessionId is accessed only within main thread. No need for mutual-exclusion.
- int32_t mLastSessionId;
-};
-
-} // namespace watchdog
-} // namespace automotive
-} // namespace android
-
-#endif // WATCHDOG_SERVER_SRC_WATCHDOGPROCESSSERVICE_H_
diff --git a/watchdog/server/tests/IoPerfCollectionTest.cpp b/watchdog/server/tests/IoPerfCollectionTest.cpp
deleted file mode 100644
index 9b46e0d..0000000
--- a/watchdog/server/tests/IoPerfCollectionTest.cpp
+++ /dev/null
@@ -1,1524 +0,0 @@
-/*
- * Copyright 2020 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.
- */
-
-#include "IoPerfCollection.h"
-
-#include <WatchdogProperties.sysprop.h>
-#include <android-base/file.h>
-#include <cutils/android_filesystem_config.h>
-
-#include <algorithm>
-#include <future>
-#include <queue>
-#include <string>
-#include <vector>
-
-#include "LooperStub.h"
-#include "ProcPidDir.h"
-#include "ProcPidStat.h"
-#include "ProcStat.h"
-#include "UidIoStats.h"
-#include "gmock/gmock.h"
-
-namespace android {
-namespace automotive {
-namespace watchdog {
-
-using android::base::Error;
-using android::base::Result;
-using android::base::WriteStringToFile;
-using testing::LooperStub;
-using testing::populateProcPidDir;
-
-namespace {
-
-const std::chrono::seconds kTestBootInterval = 1s;
-const std::chrono::seconds kTestPeriodicInterval = 2s;
-const std::chrono::seconds kTestCustomInterval = 3s;
-const std::chrono::seconds kTestCustomCollectionDuration = 11s;
-
-class UidIoStatsStub : public UidIoStats {
-public:
- explicit UidIoStatsStub(bool enabled = false) : mEnabled(enabled) {}
- Result<std::unordered_map<uint32_t, UidIoUsage>> collect() override {
- if (mCache.empty()) {
- return Error() << "Cache is empty";
- }
- const auto entry = mCache.front();
- mCache.pop();
- return entry;
- }
- bool enabled() override { return mEnabled; }
- std::string filePath() override { return kUidIoStatsPath; }
- void push(const std::unordered_map<uint32_t, UidIoUsage>& entry) { mCache.push(entry); }
-
-private:
- bool mEnabled;
- std::queue<std::unordered_map<uint32_t, UidIoUsage>> mCache;
-};
-
-class ProcStatStub : public ProcStat {
-public:
- explicit ProcStatStub(bool enabled = false) : mEnabled(enabled) {}
- Result<ProcStatInfo> collect() override {
- if (mCache.empty()) {
- return Error() << "Cache is empty";
- }
- const auto entry = mCache.front();
- mCache.pop();
- return entry;
- }
- bool enabled() override { return mEnabled; }
- std::string filePath() override { return kProcStatPath; }
- void push(const ProcStatInfo& entry) { mCache.push(entry); }
-
-private:
- bool mEnabled;
- std::queue<ProcStatInfo> mCache;
-};
-
-class ProcPidStatStub : public ProcPidStat {
-public:
- explicit ProcPidStatStub(bool enabled = false) : mEnabled(enabled) {}
- Result<std::vector<ProcessStats>> collect() override {
- if (mCache.empty()) {
- return Error() << "Cache is empty";
- }
- const auto entry = mCache.front();
- mCache.pop();
- return entry;
- }
- bool enabled() override { return mEnabled; }
- std::string dirPath() override { return kProcDirPath; }
- void push(const std::vector<ProcessStats>& entry) { mCache.push(entry); }
-
-private:
- bool mEnabled;
- std::queue<std::vector<ProcessStats>> mCache;
-};
-
-bool isEqual(const UidIoPerfData& lhs, const UidIoPerfData& rhs) {
- if (lhs.topNReads.size() != rhs.topNReads.size() ||
- lhs.topNWrites.size() != rhs.topNWrites.size()) {
- return false;
- }
- for (int i = 0; i < METRIC_TYPES; ++i) {
- for (int j = 0; j < UID_STATES; ++j) {
- if (lhs.total[i][j] != rhs.total[i][j]) {
- return false;
- }
- }
- }
- auto comp = [&](const UidIoPerfData::Stats& l, const UidIoPerfData::Stats& r) -> bool {
- bool isEqual = l.userId == r.userId && l.packageName == r.packageName;
- for (int i = 0; i < UID_STATES; ++i) {
- isEqual &= l.bytes[i] == r.bytes[i] && l.fsync[i] == r.fsync[i];
- }
- return isEqual;
- };
- return lhs.topNReads.size() == rhs.topNReads.size() &&
- std::equal(lhs.topNReads.begin(), lhs.topNReads.end(), rhs.topNReads.begin(), comp) &&
- lhs.topNWrites.size() == rhs.topNWrites.size() &&
- std::equal(lhs.topNWrites.begin(), lhs.topNWrites.end(), rhs.topNWrites.begin(), comp);
-}
-
-bool isEqual(const SystemIoPerfData& lhs, const SystemIoPerfData& rhs) {
- return lhs.cpuIoWaitTime == rhs.cpuIoWaitTime && lhs.totalCpuTime == rhs.totalCpuTime &&
- lhs.ioBlockedProcessesCnt == rhs.ioBlockedProcessesCnt &&
- lhs.totalProcessesCnt == rhs.totalProcessesCnt;
-}
-
-bool isEqual(const ProcessIoPerfData& lhs, const ProcessIoPerfData& rhs) {
- if (lhs.topNIoBlockedUids.size() != rhs.topNIoBlockedUids.size() ||
- lhs.topNMajorFaultUids.size() != rhs.topNMajorFaultUids.size() ||
- lhs.totalMajorFaults != rhs.totalMajorFaults ||
- lhs.majorFaultsPercentChange != rhs.majorFaultsPercentChange) {
- return false;
- }
- auto comp = [&](const ProcessIoPerfData::UidStats& l,
- const ProcessIoPerfData::UidStats& r) -> bool {
- auto comp = [&](const ProcessIoPerfData::UidStats::ProcessStats& l,
- const ProcessIoPerfData::UidStats::ProcessStats& r) -> bool {
- return l.comm == r.comm && l.count == r.count;
- };
- return l.userId == r.userId && l.packageName == r.packageName && l.count == r.count &&
- l.topNProcesses.size() == r.topNProcesses.size() &&
- std::equal(l.topNProcesses.begin(), l.topNProcesses.end(), r.topNProcesses.begin(),
- comp);
- };
- return lhs.topNIoBlockedUids.size() == lhs.topNIoBlockedUids.size() &&
- std::equal(lhs.topNIoBlockedUids.begin(), lhs.topNIoBlockedUids.end(),
- rhs.topNIoBlockedUids.begin(), comp) &&
- lhs.topNIoBlockedUidsTotalTaskCnt.size() == rhs.topNIoBlockedUidsTotalTaskCnt.size() &&
- std::equal(lhs.topNIoBlockedUidsTotalTaskCnt.begin(),
- lhs.topNIoBlockedUidsTotalTaskCnt.end(),
- rhs.topNIoBlockedUidsTotalTaskCnt.begin()) &&
- lhs.topNMajorFaultUids.size() == rhs.topNMajorFaultUids.size() &&
- std::equal(lhs.topNMajorFaultUids.begin(), lhs.topNMajorFaultUids.end(),
- rhs.topNMajorFaultUids.begin(), comp);
-}
-
-bool isEqual(const IoPerfRecord& lhs, const IoPerfRecord& rhs) {
- return isEqual(lhs.uidIoPerfData, rhs.uidIoPerfData) &&
- isEqual(lhs.systemIoPerfData, rhs.systemIoPerfData) &&
- isEqual(lhs.processIoPerfData, rhs.processIoPerfData);
-}
-
-} // namespace
-
-TEST(IoPerfCollectionTest, TestCollectionStartAndTerminate) {
- sp<IoPerfCollection> collector = new IoPerfCollection();
- const auto& ret = collector->start();
- ASSERT_TRUE(ret) << ret.error().message();
- ASSERT_TRUE(collector->mCollectionThread.joinable()) << "Collection thread not created";
- ASSERT_FALSE(collector->start())
- << "No error returned when collector was started more than once";
- ASSERT_TRUE(sysprop::topNStatsPerCategory().has_value());
- ASSERT_EQ(collector->mTopNStatsPerCategory, sysprop::topNStatsPerCategory().value());
-
- ASSERT_TRUE(sysprop::topNStatsPerSubcategory().has_value());
- ASSERT_EQ(collector->mTopNStatsPerSubcategory, sysprop::topNStatsPerSubcategory().value());
-
- ASSERT_TRUE(sysprop::boottimeCollectionInterval().has_value());
- ASSERT_EQ(std::chrono::duration_cast<std::chrono::seconds>(
- collector->mBoottimeCollection.interval)
- .count(),
- sysprop::boottimeCollectionInterval().value());
-
- ASSERT_TRUE(sysprop::topNStatsPerCategory().has_value());
- ASSERT_EQ(std::chrono::duration_cast<std::chrono::seconds>(
- collector->mPeriodicCollection.interval)
- .count(),
- sysprop::periodicCollectionInterval().value());
-
- ASSERT_TRUE(sysprop::periodicCollectionBufferSize().has_value());
- ASSERT_EQ(collector->mPeriodicCollection.maxCacheSize,
- sysprop::periodicCollectionBufferSize().value());
-
- collector->terminate();
- ASSERT_FALSE(collector->mCollectionThread.joinable()) << "Collection thread did not terminate";
-}
-
-TEST(IoPerfCollectionTest, TestValidCollectionSequence) {
- sp<UidIoStatsStub> uidIoStatsStub = new UidIoStatsStub(true);
- sp<ProcStatStub> procStatStub = new ProcStatStub(true);
- sp<ProcPidStatStub> procPidStatStub = new ProcPidStatStub(true);
- sp<LooperStub> looperStub = new LooperStub();
-
- sp<IoPerfCollection> collector = new IoPerfCollection();
- collector->mUidIoStats = uidIoStatsStub;
- collector->mProcStat = procStatStub;
- collector->mProcPidStat = procPidStatStub;
- collector->mHandlerLooper = looperStub;
-
- auto ret = collector->start();
- ASSERT_TRUE(ret) << ret.error().message();
-
- collector->mBoottimeCollection.interval = kTestBootInterval;
- collector->mPeriodicCollection.interval = kTestPeriodicInterval;
- collector->mPeriodicCollection.maxCacheSize = 1;
-
- // #1 Boot-time collection
- uidIoStatsStub->push({{1009, {.uid = 1009, .ios = {0, 20000, 0, 30000, 0, 300}}}});
- procStatStub->push(ProcStatInfo{
- /*stats=*/{6200, 5700, 1700, 3100, /*ioWaitTime=*/1100, 5200, 3900, 0, 0, 0},
- /*runnableCnt=*/17,
- /*ioBlockedCnt=*/5,
- });
- procPidStatStub->push({{.tgid = 100,
- .uid = 1009,
- .process = {.pid = 100,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 5000,
- .numThreads = 1,
- .startTime = 234},
- .threads = {{100,
- {.pid = 100,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 5000,
- .numThreads = 1,
- .startTime = 234}}}}});
- IoPerfRecord bootExpectedFirst = {
- .uidIoPerfData = {.topNReads = {{.userId = 0,
- .packageName = "mount",
- .bytes = {0, 20000},
- .fsync{0, 300}}},
- .topNWrites = {{.userId = 0,
- .packageName = "mount",
- .bytes = {0, 30000},
- .fsync{0, 300}}},
- .total = {{0, 20000}, {0, 30000}, {0, 300}}},
- .systemIoPerfData = {.cpuIoWaitTime = 1100,
- .totalCpuTime = 26900,
- .ioBlockedProcessesCnt = 5,
- .totalProcessesCnt = 22},
- .processIoPerfData = {.topNIoBlockedUids = {{0, "mount", 1, {{"disk I/O", 1}}}},
- .topNIoBlockedUidsTotalTaskCnt = {1},
- .topNMajorFaultUids = {{0, "mount", 5000, {{"disk I/O", 5000}}}},
- .totalMajorFaults = 5000,
- .majorFaultsPercentChange = 0.0},
- };
- ret = looperStub->pollCache();
- ASSERT_TRUE(ret) << ret.error().message();
- ASSERT_EQ(looperStub->numSecondsElapsed(), 0)
- << "Boot-time collection didn't start immediately";
-
- // #2 Boot-time collection
- uidIoStatsStub->push({
- {1009, {.uid = 1009, .ios = {0, 2000, 0, 3000, 0, 100}}},
- });
- procStatStub->push(ProcStatInfo{
- /*stats=*/{1200, 1700, 2700, 7800, /*ioWaitTime=*/5500, 500, 300, 0, 0, 100},
- /*runnableCnt=*/8,
- /*ioBlockedCnt=*/6,
- });
- procPidStatStub->push({{.tgid = 100,
- .uid = 1009,
- .process = {.pid = 100,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 11000,
- .numThreads = 1,
- .startTime = 234},
- .threads = {{100,
- {.pid = 100,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 10000,
- .numThreads = 1,
- .startTime = 234}},
- {200,
- {.pid = 200,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 1000,
- .numThreads = 1,
- .startTime = 1234}}}}});
- IoPerfRecord bootExpectedSecond = {
- .uidIoPerfData = {.topNReads = {{.userId = 0,
- .packageName = "mount",
- .bytes = {0, 2000},
- .fsync{0, 100}}},
- .topNWrites = {{.userId = 0,
- .packageName = "mount",
- .bytes = {0, 3000},
- .fsync{0, 100}}},
- .total = {{0, 2000}, {0, 3000}, {0, 100}}},
- .systemIoPerfData = {.cpuIoWaitTime = 5500,
- .totalCpuTime = 19800,
- .ioBlockedProcessesCnt = 6,
- .totalProcessesCnt = 14},
- .processIoPerfData =
- {.topNIoBlockedUids = {{0, "mount", 2, {{"disk I/O", 2}}}},
- .topNIoBlockedUidsTotalTaskCnt = {2},
- .topNMajorFaultUids = {{0, "mount", 11000, {{"disk I/O", 11000}}}},
- .totalMajorFaults = 11000,
- .majorFaultsPercentChange = ((11000.0 - 5000.0) / 5000.0) * 100},
- };
- ret = looperStub->pollCache();
- ASSERT_TRUE(ret) << ret.error().message();
- ASSERT_EQ(looperStub->numSecondsElapsed(), kTestBootInterval.count())
- << "Subsequent boot-time collection didn't happen at " << kTestBootInterval.count()
- << " seconds interval";
-
- // #3 Last boot-time collection
- ret = collector->onBootFinished();
- ASSERT_TRUE(ret) << ret.error().message();
- uidIoStatsStub->push({
- {1009, {.uid = 1009, .ios = {0, 7000, 0, 8000, 0, 50}}},
- });
- procStatStub->push(ProcStatInfo{
- /*stats=*/{1400, 1900, 2900, 8000, /*ioWaitTime=*/5700, 700, 500, 0, 0, 300},
- /*runnableCnt=*/10,
- /*ioBlockedCnt=*/8,
- });
- procPidStatStub->push({{.tgid = 100,
- .uid = 1009,
- .process = {.pid = 100,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 5000,
- .numThreads = 1,
- .startTime = 234},
- .threads = {{100,
- {.pid = 100,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 3000,
- .numThreads = 1,
- .startTime = 234}},
- {200,
- {.pid = 200,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 2000,
- .numThreads = 1,
- .startTime = 1234}}}}});
- IoPerfRecord bootExpectedThird = {
- .uidIoPerfData = {.topNReads = {{.userId = 0,
- .packageName = "mount",
- .bytes = {0, 7000},
- .fsync{0, 50}}},
- .topNWrites = {{.userId = 0,
- .packageName = "mount",
- .bytes = {0, 8000},
- .fsync{0, 50}}},
- .total = {{0, 7000}, {0, 8000}, {0, 50}}},
- .systemIoPerfData = {.cpuIoWaitTime = 5700,
- .totalCpuTime = 21400,
- .ioBlockedProcessesCnt = 8,
- .totalProcessesCnt = 18},
- .processIoPerfData = {.topNIoBlockedUids = {{0, "mount", 2, {{"disk I/O", 2}}}},
- .topNIoBlockedUidsTotalTaskCnt = {2},
- .topNMajorFaultUids = {{0, "mount", 5000, {{"disk I/O", 5000}}}},
- .totalMajorFaults = 5000,
- .majorFaultsPercentChange = ((5000.0 - 11000.0) / 11000.0) * 100},
- };
- ret = looperStub->pollCache();
- ASSERT_TRUE(ret) << ret.error().message();
- ASSERT_EQ(looperStub->numSecondsElapsed(), 0)
- << "Last boot-time collection didn't happen immediately after receiving boot complete "
- << "notification";
-
- ASSERT_EQ(collector->mBoottimeCollection.records.size(), 3);
- ASSERT_TRUE(isEqual(collector->mBoottimeCollection.records[0], bootExpectedFirst))
- << "Boot-time collection record 1 doesn't match.\nExpected:\n"
- << toString(bootExpectedFirst) << "\nActual:\n"
- << toString(collector->mBoottimeCollection.records[0]);
- ASSERT_TRUE(isEqual(collector->mBoottimeCollection.records[1], bootExpectedSecond))
- << "Boot-time collection record 2 doesn't match.\nExpected:\n"
- << toString(bootExpectedSecond) << "\nActual:\n"
- << toString(collector->mBoottimeCollection.records[1]);
- ASSERT_TRUE(isEqual(collector->mBoottimeCollection.records[2], bootExpectedThird))
- << "Boot-time collection record 3 doesn't match.\nExpected:\n"
- << toString(bootExpectedSecond) << "\nActual:\n"
- << toString(collector->mBoottimeCollection.records[2]);
-
- // #4 Periodic collection
- uidIoStatsStub->push({
- {1009, {.uid = 1009, .ios = {0, 4000, 0, 6000, 0, 100}}},
- });
- procStatStub->push(ProcStatInfo{
- /*stats=*/{200, 700, 400, 800, /*ioWaitTime=*/500, 666, 780, 0, 0, 230},
- /*runnableCnt=*/12,
- /*ioBlockedCnt=*/3,
- });
- procPidStatStub->push({{.tgid = 100,
- .uid = 1009,
- .process = {.pid = 100,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 4100,
- .numThreads = 1,
- .startTime = 234},
- .threads = {{100,
- {.pid = 100,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 100,
- .numThreads = 1,
- .startTime = 234}},
- {1200,
- {.pid = 1200,
- .comm = "disk I/O",
- .state = "S",
- .ppid = 1,
- .majorFaults = 4000,
- .numThreads = 1,
- .startTime = 567890}}}}});
- IoPerfRecord periodicExpectedFirst = {
- .uidIoPerfData = {.topNReads = {{.userId = 0,
- .packageName = "mount",
- .bytes = {0, 4000},
- .fsync{0, 100}}},
- .topNWrites = {{.userId = 0,
- .packageName = "mount",
- .bytes = {0, 6000},
- .fsync{0, 100}}},
- .total = {{0, 4000}, {0, 6000}, {0, 100}}},
- .systemIoPerfData = {.cpuIoWaitTime = 500,
- .totalCpuTime = 4276,
- .ioBlockedProcessesCnt = 3,
- .totalProcessesCnt = 15},
- .processIoPerfData = {.topNIoBlockedUids = {{0, "mount", 1, {{"disk I/O", 1}}}},
- .topNIoBlockedUidsTotalTaskCnt = {2},
- .topNMajorFaultUids = {{0, "mount", 4100, {{"disk I/O", 4100}}}},
- .totalMajorFaults = 4100,
- .majorFaultsPercentChange = ((4100.0 - 5000.0) / 5000.0) * 100},
- };
- ret = looperStub->pollCache();
- ASSERT_TRUE(ret) << ret.error().message();
- ASSERT_EQ(looperStub->numSecondsElapsed(), kTestPeriodicInterval.count())
- << "First periodic collection didn't happen at " << kTestPeriodicInterval.count()
- << " seconds interval";
-
- // #5 Periodic collection
- uidIoStatsStub->push({
- {1009, {.uid = 1009, .ios = {0, 3000, 0, 5000, 0, 800}}},
- });
- procStatStub->push(ProcStatInfo{
- /*stats=*/{2300, 7300, 4300, 8300, /*ioWaitTime=*/5300, 6366, 7380, 0, 0, 2330},
- /*runnableCnt=*/2,
- /*ioBlockedCnt=*/4,
- });
- procPidStatStub->push({{.tgid = 100,
- .uid = 1009,
- .process = {.pid = 100,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 44300,
- .numThreads = 1,
- .startTime = 234},
- .threads = {{100,
- {.pid = 100,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 1300,
- .numThreads = 1,
- .startTime = 234}},
- {1200,
- {.pid = 1200,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 43000,
- .numThreads = 1,
- .startTime = 567890}}}}});
- IoPerfRecord periodicExpectedSecond = {
- .uidIoPerfData = {.topNReads = {{.userId = 0,
- .packageName = "mount",
- .bytes = {0, 3000},
- .fsync{0, 800}}},
- .topNWrites = {{.userId = 0,
- .packageName = "mount",
- .bytes = {0, 5000},
- .fsync{0, 800}}},
- .total = {{0, 3000}, {0, 5000}, {0, 800}}},
- .systemIoPerfData = {.cpuIoWaitTime = 5300,
- .totalCpuTime = 43576,
- .ioBlockedProcessesCnt = 4,
- .totalProcessesCnt = 6},
- .processIoPerfData =
- {.topNIoBlockedUids = {{0, "mount", 2, {{"disk I/O", 2}}}},
- .topNIoBlockedUidsTotalTaskCnt = {2},
- .topNMajorFaultUids = {{0, "mount", 44300, {{"disk I/O", 44300}}}},
- .totalMajorFaults = 44300,
- .majorFaultsPercentChange = ((44300.0 - 4100.0) / 4100.0) * 100},
- };
- ret = looperStub->pollCache();
- ASSERT_TRUE(ret) << ret.error().message();
- ASSERT_EQ(looperStub->numSecondsElapsed(), kTestPeriodicInterval.count())
- << "Subsequent periodic collection didn't happen at " << kTestPeriodicInterval.count()
- << " seconds interval";
-
- ASSERT_EQ(collector->mPeriodicCollection.records.size(), 2);
- ASSERT_TRUE(isEqual(collector->mPeriodicCollection.records[0], periodicExpectedFirst))
- << "Periodic collection snapshot 1, record 1 doesn't match.\nExpected:\n"
- << toString(periodicExpectedFirst) << "\nActual:\n"
- << toString(collector->mPeriodicCollection.records[0]);
- ASSERT_TRUE(isEqual(collector->mPeriodicCollection.records[1], periodicExpectedSecond))
- << "Periodic collection snapshot 1, record 2 doesn't match.\nExpected:\n"
- << toString(periodicExpectedSecond) << "\nActual:\n"
- << toString(collector->mPeriodicCollection.records[1]);
-
- // #6 Custom collection
- Vector<String16> args;
- args.push_back(String16(kStartCustomCollectionFlag));
- args.push_back(String16(kIntervalFlag));
- args.push_back(String16(std::to_string(kTestCustomInterval.count()).c_str()));
- args.push_back(String16(kMaxDurationFlag));
- args.push_back(String16(std::to_string(kTestCustomCollectionDuration.count()).c_str()));
-
- ret = collector->onCustomCollection(-1, args);
- ASSERT_TRUE(ret.ok()) << ret.error().message();
- uidIoStatsStub->push({
- {1009, {.uid = 1009, .ios = {0, 13000, 0, 15000, 0, 100}}},
- });
- procStatStub->push(ProcStatInfo{
- /*stats=*/{2800, 7800, 4800, 8800, /*ioWaitTime=*/5800, 6866, 7880, 0, 0, 2830},
- /*runnableCnt=*/200,
- /*ioBlockedCnt=*/13,
- });
- procPidStatStub->push({{.tgid = 100,
- .uid = 1009,
- .process = {.pid = 100,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 49800,
- .numThreads = 1,
- .startTime = 234},
- .threads = {{100,
- {.pid = 100,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 1800,
- .numThreads = 1,
- .startTime = 234}},
- {1200,
- {.pid = 1200,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 48000,
- .numThreads = 1,
- .startTime = 567890}}}}});
- IoPerfRecord customExpectedFirst = {
- .uidIoPerfData = {.topNReads = {{.userId = 0,
- .packageName = "mount",
- .bytes = {0, 13000},
- .fsync{0, 100}}},
- .topNWrites = {{.userId = 0,
- .packageName = "mount",
- .bytes = {0, 15000},
- .fsync{0, 100}}},
- .total = {{0, 13000}, {0, 15000}, {0, 100}}},
- .systemIoPerfData = {.cpuIoWaitTime = 5800,
- .totalCpuTime = 47576,
- .ioBlockedProcessesCnt = 13,
- .totalProcessesCnt = 213},
- .processIoPerfData =
- {.topNIoBlockedUids = {{0, "mount", 2, {{"disk I/O", 2}}}},
- .topNIoBlockedUidsTotalTaskCnt = {2},
- .topNMajorFaultUids = {{0, "mount", 49800, {{"disk I/O", 49800}}}},
- .totalMajorFaults = 49800,
- .majorFaultsPercentChange = ((49800.0 - 44300.0) / 44300.0) * 100},
- };
- ret = looperStub->pollCache();
- ASSERT_TRUE(ret) << ret.error().message();
- ASSERT_EQ(looperStub->numSecondsElapsed(), 0) << "Custom collection didn't start immediately";
-
- // #7 Custom collection
- uidIoStatsStub->push({
- {1009, {.uid = 1009, .ios = {0, 14000, 0, 16000, 0, 100}}},
- });
- procStatStub->push(ProcStatInfo{
- /*stats=*/{2900, 7900, 4900, 8900, /*ioWaitTime=*/5900, 6966, 7980, 0, 0, 2930},
- /*runnableCnt=*/100,
- /*ioBlockedCnt=*/57,
- });
- procPidStatStub->push({{.tgid = 100,
- .uid = 1009,
- .process = {.pid = 100,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 50900,
- .numThreads = 1,
- .startTime = 234},
- .threads = {{100,
- {.pid = 100,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 1900,
- .numThreads = 1,
- .startTime = 234}},
- {1200,
- {.pid = 1200,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 49000,
- .numThreads = 1,
- .startTime = 567890}}}}});
- IoPerfRecord customExpectedSecond = {
- .uidIoPerfData = {.topNReads = {{.userId = 0,
- .packageName = "mount",
- .bytes = {0, 14000},
- .fsync{0, 100}}},
- .topNWrites = {{.userId = 0,
- .packageName = "mount",
- .bytes = {0, 16000},
- .fsync{0, 100}}},
- .total = {{0, 14000}, {0, 16000}, {0, 100}}},
- .systemIoPerfData = {.cpuIoWaitTime = 5900,
- .totalCpuTime = 48376,
- .ioBlockedProcessesCnt = 57,
- .totalProcessesCnt = 157},
- .processIoPerfData =
- {.topNIoBlockedUids = {{0, "mount", 2, {{"disk I/O", 2}}}},
- .topNIoBlockedUidsTotalTaskCnt = {2},
- .topNMajorFaultUids = {{0, "mount", 50900, {{"disk I/O", 50900}}}},
- .totalMajorFaults = 50900,
- .majorFaultsPercentChange = ((50900.0 - 49800.0) / 49800.0) * 100},
- };
- ret = looperStub->pollCache();
- ASSERT_TRUE(ret) << ret.error().message();
- ASSERT_EQ(looperStub->numSecondsElapsed(), kTestCustomInterval.count())
- << "Subsequent custom collection didn't happen at " << kTestCustomInterval.count()
- << " seconds interval";
-
- ASSERT_EQ(collector->mCustomCollection.records.size(), 2);
- ASSERT_TRUE(isEqual(collector->mCustomCollection.records[0], customExpectedFirst))
- << "Custom collection record 1 doesn't match.\nExpected:\n"
- << toString(customExpectedFirst) << "\nActual:\n"
- << toString(collector->mCustomCollection.records[0]);
- ASSERT_TRUE(isEqual(collector->mCustomCollection.records[1], customExpectedSecond))
- << "Custom collection record 2 doesn't match.\nExpected:\n"
- << toString(customExpectedSecond) << "\nActual:\n"
- << toString(collector->mCustomCollection.records[1]);
-
- // #8 Switch to periodic collection
- args.clear();
- args.push_back(String16(kEndCustomCollectionFlag));
- TemporaryFile customDump;
- ret = collector->onCustomCollection(customDump.fd, args);
- ASSERT_TRUE(ret.ok()) << ret.error().message();
- ret = looperStub->pollCache();
- ASSERT_TRUE(ret) << ret.error().message();
-
- // Custom collection cache should be emptied on ending the collection.
- ASSERT_EQ(collector->mCustomCollection.records.size(), 0);
-
- // #7 periodic collection
- uidIoStatsStub->push({
- {1009, {.uid = 1009, .ios = {0, 123, 0, 456, 0, 25}}},
- });
- procStatStub->push(ProcStatInfo{
- /*stats=*/{3400, 2300, 5600, 7800, /*ioWaitTime=*/1100, 166, 180, 0, 0, 130},
- /*runnableCnt=*/3,
- /*ioBlockedCnt=*/1,
- });
- procPidStatStub->push({{.tgid = 100,
- .uid = 1009,
- .process = {.pid = 100,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 5701,
- .numThreads = 1,
- .startTime = 234},
- .threads = {{100,
- {.pid = 100,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 23,
- .numThreads = 1,
- .startTime = 234}},
- {1200,
- {.pid = 1200,
- .comm = "disk I/O",
- .state = "D",
- .ppid = 1,
- .majorFaults = 5678,
- .numThreads = 1,
- .startTime = 567890}}}}});
- IoPerfRecord periodicExpectedThird = {
- .uidIoPerfData = {.topNReads = {{.userId = 0,
- .packageName = "mount",
- .bytes = {0, 123},
- .fsync{0, 25}}},
- .topNWrites = {{.userId = 0,
- .packageName = "mount",
- .bytes = {0, 456},
- .fsync{0, 25}}},
- .total = {{0, 123}, {0, 456}, {0, 25}}},
- .systemIoPerfData = {.cpuIoWaitTime = 1100,
- .totalCpuTime = 20676,
- .ioBlockedProcessesCnt = 1,
- .totalProcessesCnt = 4},
- .processIoPerfData = {.topNIoBlockedUids = {{0, "mount", 2, {{"disk I/O", 2}}}},
- .topNIoBlockedUidsTotalTaskCnt = {2},
- .topNMajorFaultUids = {{0, "mount", 5701, {{"disk I/O", 5701}}}},
- .totalMajorFaults = 5701,
- .majorFaultsPercentChange = ((5701.0 - 50900.0) / 50900.0) * 100},
- };
- ret = looperStub->pollCache();
- ASSERT_TRUE(ret) << ret.error().message();
- ASSERT_EQ(looperStub->numSecondsElapsed(), 0)
- << "Periodic collection didn't start immediately after ending custom collection";
-
- // Maximum periodic collection buffer size is 2.
- ASSERT_EQ(collector->mPeriodicCollection.records.size(), 2);
- ASSERT_TRUE(isEqual(collector->mPeriodicCollection.records[0], periodicExpectedSecond))
- << "Periodic collection snapshot 2, record 1 doesn't match.\nExpected:\n"
- << toString(periodicExpectedSecond) << "\nActual:\n"
- << toString(collector->mPeriodicCollection.records[0]);
- ASSERT_TRUE(isEqual(collector->mPeriodicCollection.records[1], periodicExpectedThird))
- << "Periodic collection snapshot 2, record 2 doesn't match.\nExpected:\n"
- << toString(periodicExpectedThird) << "\nActual:\n"
- << toString(collector->mPeriodicCollection.records[1]);
-
- ASSERT_EQ(collector->mBoottimeCollection.records.size(), 3)
- << "Boot-time records not persisted until collector termination";
-
- TemporaryFile bugreportDump;
- ret = collector->onDump(bugreportDump.fd);
- ASSERT_TRUE(ret.ok()) << ret.error().message();
-
- collector->terminate();
-}
-
-TEST(IoPerfCollectionTest, TestCollectionTerminatesOnZeroEnabledCollectors) {
- sp<IoPerfCollection> collector = new IoPerfCollection();
- collector->mUidIoStats = new UidIoStatsStub();
- collector->mProcStat = new ProcStatStub();
- collector->mProcPidStat = new ProcPidStatStub();
-
- const auto& ret = collector->start();
- ASSERT_TRUE(ret) << ret.error().message();
-
- ASSERT_EQ(std::async([&]() {
- if (collector->mCollectionThread.joinable()) {
- collector->mCollectionThread.join();
- }
- }).wait_for(1s),
- std::future_status::ready)
- << "Collection thread didn't terminate within 1 second.";
- ASSERT_EQ(collector->mCurrCollectionEvent, CollectionEvent::TERMINATED);
-
- // When the collection doesn't auto-terminate on error, the test will hang if the collector is
- // not terminated explicitly. Thus call terminate to avoid this.
- collector->terminate();
-}
-
-TEST(IoPerfCollectionTest, TestCollectionTerminatesOnError) {
- sp<IoPerfCollection> collector = new IoPerfCollection();
- collector->mUidIoStats = new UidIoStatsStub(true);
- collector->mProcStat = new ProcStatStub(true);
- collector->mProcPidStat = new ProcPidStatStub(true);
-
- // Stub caches are empty so polling them should trigger error.
- const auto& ret = collector->start();
- ASSERT_TRUE(ret) << ret.error().message();
-
- ASSERT_EQ(std::async([&]() {
- if (collector->mCollectionThread.joinable()) {
- collector->mCollectionThread.join();
- }
- }).wait_for(1s),
- std::future_status::ready)
- << "Collection thread didn't terminate within 1 second.";
- ASSERT_EQ(collector->mCurrCollectionEvent, CollectionEvent::TERMINATED);
-
- // When the collection doesn't auto-terminate on error, the test will hang if the collector is
- // not terminated explicitly. Thus call terminate to avoid this.
- collector->terminate();
-}
-
-TEST(IoPerfCollectionTest, TestCustomCollectionFiltersPackageNames) {
- sp<UidIoStatsStub> uidIoStatsStub = new UidIoStatsStub(true);
- sp<ProcStatStub> procStatStub = new ProcStatStub(true);
- sp<ProcPidStatStub> procPidStatStub = new ProcPidStatStub(true);
- sp<LooperStub> looperStub = new LooperStub();
-
- sp<IoPerfCollection> collector = new IoPerfCollection();
- collector->mUidIoStats = uidIoStatsStub;
- collector->mProcStat = procStatStub;
- collector->mProcPidStat = procPidStatStub;
- collector->mHandlerLooper = looperStub;
- // Filter by package name should ignore this limit.
- collector->mTopNStatsPerCategory = 1;
-
- auto ret = collector->start();
- ASSERT_TRUE(ret) << ret.error().message();
-
- // Dummy boot-time collection
- uidIoStatsStub->push({});
- procStatStub->push(ProcStatInfo{});
- procPidStatStub->push({});
- ret = looperStub->pollCache();
- ASSERT_TRUE(ret) << ret.error().message();
-
- // Dummy Periodic collection
- ret = collector->onBootFinished();
- ASSERT_TRUE(ret) << ret.error().message();
- uidIoStatsStub->push({});
- procStatStub->push(ProcStatInfo{});
- procPidStatStub->push({});
- ret = looperStub->pollCache();
- ASSERT_TRUE(ret) << ret.error().message();
-
- // Start custom Collection
- Vector<String16> args;
- args.push_back(String16(kStartCustomCollectionFlag));
- args.push_back(String16(kIntervalFlag));
- args.push_back(String16(std::to_string(kTestCustomInterval.count()).c_str()));
- args.push_back(String16(kMaxDurationFlag));
- args.push_back(String16(std::to_string(kTestCustomCollectionDuration.count()).c_str()));
- args.push_back(String16(kFilterPackagesFlag));
- args.push_back(String16("android.car.cts,system_server"));
-
- ret = collector->onCustomCollection(-1, args);
- ASSERT_TRUE(ret.ok()) << ret.error().message();
-
- // Custom collection
- collector->mUidToPackageNameMapping[1009] = "android.car.cts";
- collector->mUidToPackageNameMapping[2001] = "system_server";
- collector->mUidToPackageNameMapping[3456] = "random_process";
- uidIoStatsStub->push({
- {1009, {.uid = 1009, .ios = {0, 14000, 0, 16000, 0, 100}}},
- {2001, {.uid = 2001, .ios = {0, 3400, 0, 6700, 0, 200}}},
- {3456, {.uid = 3456, .ios = {0, 4200, 0, 5600, 0, 300}}},
- });
- procStatStub->push(ProcStatInfo{
- /*stats=*/{2900, 7900, 4900, 8900, /*ioWaitTime=*/5900, 6966, 7980, 0, 0, 2930},
- /*runnableCnt=*/100,
- /*ioBlockedCnt=*/57,
- });
- procPidStatStub->push({{.tgid = 100,
- .uid = 1009,
- .process = {.pid = 100,
- .comm = "cts_test",
- .state = "D",
- .ppid = 1,
- .majorFaults = 50900,
- .numThreads = 2,
- .startTime = 234},
- .threads = {{100,
- {.pid = 100,
- .comm = "cts_test",
- .state = "D",
- .ppid = 1,
- .majorFaults = 50900,
- .numThreads = 1,
- .startTime = 234}},
- {200,
- {.pid = 200,
- .comm = "cts_test_2",
- .state = "D",
- .ppid = 1,
- .majorFaults = 0,
- .numThreads = 1,
- .startTime = 290}}}},
- {.tgid = 1000,
- .uid = 2001,
- .process = {.pid = 1000,
- .comm = "system_server",
- .state = "D",
- .ppid = 1,
- .majorFaults = 1234,
- .numThreads = 1,
- .startTime = 345},
- .threads = {{1000,
- {.pid = 1000,
- .comm = "system_server",
- .state = "D",
- .ppid = 1,
- .majorFaults = 1234,
- .numThreads = 1,
- .startTime = 345}}}},
- {.tgid = 4000,
- .uid = 3456,
- .process = {.pid = 4000,
- .comm = "random_process",
- .state = "D",
- .ppid = 1,
- .majorFaults = 3456,
- .numThreads = 1,
- .startTime = 890},
- .threads = {{4000,
- {.pid = 4000,
- .comm = "random_process",
- .state = "D",
- .ppid = 1,
- .majorFaults = 50900,
- .numThreads = 1,
- .startTime = 890}}}}});
- IoPerfRecord expected = {
- .uidIoPerfData = {.topNReads = {{.userId = 0,
- .packageName = "android.car.cts",
- .bytes = {0, 14000},
- .fsync{0, 100}},
- {.userId = 0,
- .packageName = "system_server",
- .bytes = {0, 3400},
- .fsync{0, 200}}},
- .topNWrites = {{.userId = 0,
- .packageName = "android.car.cts",
- .bytes = {0, 16000},
- .fsync{0, 100}},
- {.userId = 0,
- .packageName = "system_server",
- .bytes = {0, 6700},
- .fsync{0, 200}}},
- .total = {{0, 21600}, {0, 28300}, {0, 600}}},
- .systemIoPerfData = {.cpuIoWaitTime = 5900,
- .totalCpuTime = 48376,
- .ioBlockedProcessesCnt = 57,
- .totalProcessesCnt = 157},
- .processIoPerfData =
- {.topNIoBlockedUids = {{0, "android.car.cts", 2, {{"cts_test", 2}}},
- {0, "system_server", 1, {{"system_server", 1}}}},
- .topNIoBlockedUidsTotalTaskCnt = {2, 1},
- .topNMajorFaultUids = {{0, "android.car.cts", 50900, {{"cts_test", 50900}}},
- {0, "system_server", 1234, {{"system_server", 1234}}}},
- .totalMajorFaults = 55590,
- .majorFaultsPercentChange = 0},
- };
- ret = looperStub->pollCache();
- ASSERT_TRUE(ret) << ret.error().message();
- ASSERT_EQ(looperStub->numSecondsElapsed(), 0) << "Custom collection didn't start immediately";
-
- ASSERT_EQ(collector->mCurrCollectionEvent, CollectionEvent::CUSTOM);
- ASSERT_EQ(collector->mCustomCollection.records.size(), 1);
- ASSERT_TRUE(isEqual(collector->mCustomCollection.records[0], expected))
- << "Custom collection record doesn't match.\nExpected:\n"
- << toString(expected) << "\nActual:\n"
- << toString(collector->mCustomCollection.records[0]);
- collector->terminate();
-}
-
-TEST(IoPerfCollectionTest, TestCustomCollectionTerminatesAfterMaxDuration) {
- sp<UidIoStatsStub> uidIoStatsStub = new UidIoStatsStub(true);
- sp<ProcStatStub> procStatStub = new ProcStatStub(true);
- sp<ProcPidStatStub> procPidStatStub = new ProcPidStatStub(true);
- sp<LooperStub> looperStub = new LooperStub();
-
- sp<IoPerfCollection> collector = new IoPerfCollection();
- collector->mUidIoStats = uidIoStatsStub;
- collector->mProcStat = procStatStub;
- collector->mProcPidStat = procPidStatStub;
- collector->mHandlerLooper = looperStub;
-
- auto ret = collector->start();
- ASSERT_TRUE(ret) << ret.error().message();
-
- // Dummy boot-time collection
- uidIoStatsStub->push({});
- procStatStub->push(ProcStatInfo{});
- procPidStatStub->push({});
- ret = looperStub->pollCache();
- ASSERT_TRUE(ret) << ret.error().message();
-
- // Dummy Periodic collection
- ret = collector->onBootFinished();
- ASSERT_TRUE(ret) << ret.error().message();
- uidIoStatsStub->push({});
- procStatStub->push(ProcStatInfo{});
- procPidStatStub->push({});
- ret = looperStub->pollCache();
- ASSERT_TRUE(ret) << ret.error().message();
-
- // Start custom Collection
- Vector<String16> args;
- args.push_back(String16(kStartCustomCollectionFlag));
- args.push_back(String16(kIntervalFlag));
- args.push_back(String16(std::to_string(kTestCustomInterval.count()).c_str()));
- args.push_back(String16(kMaxDurationFlag));
- args.push_back(String16(std::to_string(kTestCustomCollectionDuration.count()).c_str()));
-
- ret = collector->onCustomCollection(-1, args);
- ASSERT_TRUE(ret.ok()) << ret.error().message();
- // Maximum custom collection iterations during |kTestCustomCollectionDuration|.
- int maxIterations =
- static_cast<int>(kTestCustomCollectionDuration.count() / kTestCustomInterval.count());
- for (int i = 0; i < maxIterations; ++i) {
- ASSERT_TRUE(ret) << ret.error().message();
- uidIoStatsStub->push({});
- procStatStub->push(ProcStatInfo{});
- procPidStatStub->push({});
- ret = looperStub->pollCache();
- ASSERT_TRUE(ret) << ret.error().message();
- int secondsElapsed = (i == 0 ? 0 : kTestCustomInterval.count());
- ASSERT_EQ(looperStub->numSecondsElapsed(), secondsElapsed)
- << "Custom collection didn't happen at " << secondsElapsed
- << " seconds interval in iteration " << i;
- }
-
- ASSERT_EQ(collector->mCurrCollectionEvent, CollectionEvent::CUSTOM);
- ASSERT_GT(collector->mCustomCollection.records.size(), 0);
- // Next looper message was injected during startCustomCollection to end the custom collection
- // after |kTestCustomCollectionDuration|. Thus on processing this message the custom collection
- // should terminate.
- ret = looperStub->pollCache();
- ASSERT_TRUE(ret) << ret.error().message();
- ASSERT_EQ(looperStub->numSecondsElapsed(),
- kTestCustomCollectionDuration.count() % kTestCustomInterval.count())
- << "Custom collection did't end after " << kTestCustomCollectionDuration.count()
- << " seconds";
- ASSERT_EQ(collector->mCurrCollectionEvent, CollectionEvent::PERIODIC);
- ASSERT_EQ(collector->mCustomCollection.records.size(), 0)
- << "Custom collection records not discarded at the end of the collection";
- collector->terminate();
-}
-
-TEST(IoPerfCollectionTest, TestValidUidIoStatFile) {
- // Format: uid fgRdChar fgWrChar fgRdBytes fgWrBytes bgRdChar bgWrChar bgRdBytes bgWrBytes
- // fgFsync bgFsync
- constexpr char firstSnapshot[] =
- "1001234 5000 1000 3000 500 0 0 0 0 20 0\n"
- "1005678 500 100 30 50 300 400 100 200 45 60\n"
- "1009 0 0 0 0 40000 50000 20000 30000 0 300\n"
- "1001000 4000 3000 2000 1000 400 300 200 100 50 10\n";
-
- struct UidIoPerfData expectedUidIoPerfData = {};
- expectedUidIoPerfData.total[READ_BYTES][FOREGROUND] = 5030;
- expectedUidIoPerfData.total[READ_BYTES][BACKGROUND] = 20300;
- expectedUidIoPerfData.total[WRITE_BYTES][FOREGROUND] = 1550;
- expectedUidIoPerfData.total[WRITE_BYTES][BACKGROUND] = 30300;
- expectedUidIoPerfData.total[FSYNC_COUNT][FOREGROUND] = 115;
- expectedUidIoPerfData.total[FSYNC_COUNT][BACKGROUND] = 370;
- expectedUidIoPerfData.topNReads.push_back({
- // uid: 1009
- .userId = 0,
- .packageName = "mount",
- .bytes = {0, 20000},
- .fsync = {0, 300},
- });
- expectedUidIoPerfData.topNReads.push_back({
- // uid: 1001234
- .userId = 10,
- .packageName = "1001234",
- .bytes = {3000, 0},
- .fsync = {20, 0},
- });
- expectedUidIoPerfData.topNWrites.push_back({
- // uid: 1009
- .userId = 0,
- .packageName = "mount",
- .bytes = {0, 30000},
- .fsync = {0, 300},
- });
- expectedUidIoPerfData.topNWrites.push_back({
- // uid: 1001000
- .userId = 10,
- .packageName = "shared:android.uid.system",
- .bytes = {1000, 100},
- .fsync = {50, 10},
- });
-
- TemporaryFile tf;
- ASSERT_NE(tf.fd, -1);
- ASSERT_TRUE(WriteStringToFile(firstSnapshot, tf.path));
-
- IoPerfCollection collector;
- collector.mUidIoStats = new UidIoStats(tf.path);
- collector.mTopNStatsPerCategory = 2;
- ASSERT_TRUE(collector.mUidIoStats->enabled()) << "Temporary file is inaccessible";
-
- struct UidIoPerfData actualUidIoPerfData = {};
- auto ret = collector.collectUidIoPerfDataLocked(CollectionInfo{}, &actualUidIoPerfData);
- ASSERT_RESULT_OK(ret);
- EXPECT_TRUE(isEqual(expectedUidIoPerfData, actualUidIoPerfData))
- << "First snapshot doesn't match.\nExpected:\n"
- << toString(expectedUidIoPerfData) << "\nActual:\n"
- << toString(actualUidIoPerfData);
-
- constexpr char secondSnapshot[] =
- "1001234 10000 2000 7000 950 0 0 0 0 45 0\n"
- "1005678 600 100 40 50 1000 1000 1000 600 50 70\n"
- "1003456 300 500 200 300 0 0 0 0 50 0\n"
- "1001000 400 300 200 100 40 30 20 10 5 1\n";
-
- expectedUidIoPerfData = {};
- expectedUidIoPerfData.total[READ_BYTES][FOREGROUND] = 4210;
- expectedUidIoPerfData.total[READ_BYTES][BACKGROUND] = 900;
- expectedUidIoPerfData.total[WRITE_BYTES][FOREGROUND] = 750;
- expectedUidIoPerfData.total[WRITE_BYTES][BACKGROUND] = 400;
- expectedUidIoPerfData.total[FSYNC_COUNT][FOREGROUND] = 80;
- expectedUidIoPerfData.total[FSYNC_COUNT][BACKGROUND] = 10;
- expectedUidIoPerfData.topNReads.push_back({
- // uid: 1001234
- .userId = 10,
- .packageName = "1001234",
- .bytes = {4000, 0},
- .fsync = {25, 0},
- });
- expectedUidIoPerfData.topNReads.push_back({
- // uid: 1005678
- .userId = 10,
- .packageName = "1005678",
- .bytes = {10, 900},
- .fsync = {5, 10},
- });
- expectedUidIoPerfData.topNWrites.push_back({
- // uid: 1001234
- .userId = 10,
- .packageName = "1001234",
- .bytes = {450, 0},
- .fsync = {25, 0},
- });
- expectedUidIoPerfData.topNWrites.push_back({
- // uid: 1005678
- .userId = 10,
- .packageName = "1005678",
- .bytes = {0, 400},
- .fsync = {5, 10},
- });
- ASSERT_TRUE(WriteStringToFile(secondSnapshot, tf.path));
- actualUidIoPerfData = {};
- ret = collector.collectUidIoPerfDataLocked(CollectionInfo{}, &actualUidIoPerfData);
- ASSERT_RESULT_OK(ret);
- EXPECT_TRUE(isEqual(expectedUidIoPerfData, actualUidIoPerfData))
- << "Second snapshot doesn't match.\nExpected:\n"
- << toString(expectedUidIoPerfData) << "\nActual:\n"
- << toString(actualUidIoPerfData);
-}
-
-TEST(IoPerfCollectionTest, TestUidIOStatsLessThanTopNStatsLimit) {
- // Format: uid fgRdChar fgWrChar fgRdBytes fgWrBytes bgRdChar bgWrChar bgRdBytes bgWrBytes
- // fgFsync bgFsync
- constexpr char contents[] = "1001234 5000 1000 3000 500 0 0 0 0 20 0\n";
-
- struct UidIoPerfData expectedUidIoPerfData = {};
- expectedUidIoPerfData.total[READ_BYTES][FOREGROUND] = 3000;
- expectedUidIoPerfData.total[READ_BYTES][BACKGROUND] = 0;
- expectedUidIoPerfData.total[WRITE_BYTES][FOREGROUND] = 500;
- expectedUidIoPerfData.total[WRITE_BYTES][BACKGROUND] = 0;
- expectedUidIoPerfData.total[FSYNC_COUNT][FOREGROUND] = 20;
- expectedUidIoPerfData.total[FSYNC_COUNT][BACKGROUND] = 0;
- expectedUidIoPerfData.topNReads.push_back({
- // uid: 1001234
- .userId = 10,
- .packageName = "1001234",
- .bytes = {3000, 0},
- .fsync = {20, 0},
- });
- expectedUidIoPerfData.topNWrites.push_back({
- // uid: 1001234
- .userId = 10,
- .packageName = "1001234",
- .bytes = {500, 0},
- .fsync = {20, 0},
- });
-
- TemporaryFile tf;
- ASSERT_NE(tf.fd, -1);
- ASSERT_TRUE(WriteStringToFile(contents, tf.path));
-
- IoPerfCollection collector;
- collector.mUidIoStats = new UidIoStats(tf.path);
- collector.mTopNStatsPerCategory = 10;
- ASSERT_TRUE(collector.mUidIoStats->enabled()) << "Temporary file is inaccessible";
-
- struct UidIoPerfData actualUidIoPerfData = {};
- const auto& ret = collector.collectUidIoPerfDataLocked(CollectionInfo{}, &actualUidIoPerfData);
- ASSERT_RESULT_OK(ret);
- EXPECT_TRUE(isEqual(expectedUidIoPerfData, actualUidIoPerfData))
- << "Collected data doesn't match.\nExpected:\n"
- << toString(expectedUidIoPerfData) << "\nActual:\n"
- << toString(actualUidIoPerfData);
-}
-
-TEST(IoPerfCollectionTest, TestValidProcStatFile) {
- constexpr char firstSnapshot[] =
- "cpu 6200 5700 1700 3100 1100 5200 3900 0 0 0\n"
- "cpu0 2400 2900 600 690 340 4300 2100 0 0 0\n"
- "cpu1 1900 2380 510 760 51 370 1500 0 0 0\n"
- "cpu2 900 400 400 1000 600 400 160 0 0 0\n"
- "cpu3 1000 20 190 650 109 130 140 0 0 0\n"
- "intr 694351583 0 0 0 297062868 0 5922464 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
- "0 0\n"
- // Skipped most of the intr line as it is not important for testing the ProcStat parsing
- // logic.
- "ctxt 579020168\n"
- "btime 1579718450\n"
- "processes 113804\n"
- "procs_running 17\n"
- "procs_blocked 5\n"
- "softirq 33275060 934664 11958403 5111 516325 200333 0 341482 10651335 0 8667407\n";
- struct SystemIoPerfData expectedSystemIoPerfData = {
- .cpuIoWaitTime = 1100,
- .totalCpuTime = 26900,
- .ioBlockedProcessesCnt = 5,
- .totalProcessesCnt = 22,
- };
-
- TemporaryFile tf;
- ASSERT_NE(tf.fd, -1);
- ASSERT_TRUE(WriteStringToFile(firstSnapshot, tf.path));
-
- IoPerfCollection collector;
- collector.mProcStat = new ProcStat(tf.path);
- ASSERT_TRUE(collector.mProcStat->enabled()) << "Temporary file is inaccessible";
-
- struct SystemIoPerfData actualSystemIoPerfData = {};
- auto ret = collector.collectSystemIoPerfDataLocked(&actualSystemIoPerfData);
- ASSERT_RESULT_OK(ret);
- EXPECT_TRUE(isEqual(expectedSystemIoPerfData, actualSystemIoPerfData))
- << "First snapshot doesn't match.\nExpected:\n"
- << toString(expectedSystemIoPerfData) << "\nActual:\n"
- << toString(actualSystemIoPerfData);
-
- constexpr char secondSnapshot[] =
- "cpu 16200 8700 2000 4100 2200 6200 5900 0 0 0\n"
- "cpu0 4400 3400 700 890 800 4500 3100 0 0 0\n"
- "cpu1 5900 3380 610 960 100 670 2000 0 0 0\n"
- "cpu2 2900 1000 450 1400 800 600 460 0 0 0\n"
- "cpu3 3000 920 240 850 500 430 340 0 0 0\n"
- "intr 694351583 0 0 0 297062868 0 5922464 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "
- "0 0\n"
- "ctxt 579020168\n"
- "btime 1579718450\n"
- "processes 113804\n"
- "procs_running 10\n"
- "procs_blocked 2\n"
- "softirq 33275060 934664 11958403 5111 516325 200333 0 341482 10651335 0 8667407\n";
- expectedSystemIoPerfData = {
- .cpuIoWaitTime = 1100,
- .totalCpuTime = 18400,
- .ioBlockedProcessesCnt = 2,
- .totalProcessesCnt = 12,
- };
-
- ASSERT_TRUE(WriteStringToFile(secondSnapshot, tf.path));
- actualSystemIoPerfData = {};
- ret = collector.collectSystemIoPerfDataLocked(&actualSystemIoPerfData);
- ASSERT_RESULT_OK(ret);
- EXPECT_TRUE(isEqual(expectedSystemIoPerfData, actualSystemIoPerfData))
- << "Second snapshot doesn't match.\nExpected:\n"
- << toString(expectedSystemIoPerfData) << "\nActual:\n"
- << toString(actualSystemIoPerfData);
-}
-
-TEST(IoPerfCollectionTest, TestValidProcPidContents) {
- std::unordered_map<uint32_t, std::vector<uint32_t>> pidToTids = {
- {1, {1, 453}},
- {2546, {2546, 3456, 4789}},
- {7890, {7890, 8978, 12890}},
- {18902, {18902, 21345, 32452}},
- {28900, {28900}},
- };
- std::unordered_map<uint32_t, std::string> perProcessStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 220 0 0 0 0 0 0 0 2 0 0\n"},
- {2546, "2546 (system_server) R 1 0 0 0 0 0 0 0 6000 0 0 0 0 0 0 0 3 0 1000\n"},
- {7890, "7890 (logd) D 1 0 0 0 0 0 0 0 15000 0 0 0 0 0 0 0 3 0 2345\n"},
- {18902, "18902 (disk I/O) D 1 0 0 0 0 0 0 0 45678 0 0 0 0 0 0 0 3 0 897654\n"},
- {28900, "28900 (tombstoned) D 1 0 0 0 0 0 0 0 89765 0 0 0 0 0 0 0 3 0 2345671\n"},
- };
- std::unordered_map<uint32_t, std::string> perProcessStatus = {
- {1, "Pid:\t1\nTgid:\t1\nUid:\t0\t0\t0\t0\n"},
- {2546, "Pid:\t2546\nTgid:\t2546\nUid:\t1001000\t1001000\t1001000\t1001000\n"},
- {7890, "Pid:\t7890\nTgid:\t7890\nUid:\t1001000\t1001000\t1001000\t1001000\n"},
- {18902, "Pid:\t18902\nTgid:\t18902\nUid:\t1009\t1009\t1009\t1009\n"},
- {28900, "Pid:\t28900\nTgid:\t28900\nUid:\t1001234\t1001234\t1001234\t1001234\n"},
- };
- std::unordered_map<uint32_t, std::string> perThreadStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 2 0 0\n"},
- {453, "453 (init) S 0 0 0 0 0 0 0 0 20 0 0 0 0 0 0 0 2 0 275\n"},
- {2546, "2546 (system_server) R 1 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 3 0 1000\n"},
- {3456, "3456 (system_server) S 1 0 0 0 0 0 0 0 3000 0 0 0 0 0 0 0 3 0 2300\n"},
- {4789, "4789 (system_server) D 1 0 0 0 0 0 0 0 2000 0 0 0 0 0 0 0 3 0 4500\n"},
- {7890, "7890 (logd) D 1 0 0 0 0 0 0 0 10000 0 0 0 0 0 0 0 3 0 2345\n"},
- {8978, "8978 (logd) D 1 0 0 0 0 0 0 0 1000 0 0 0 0 0 0 0 3 0 2500\n"},
- {12890, "12890 (logd) D 1 0 0 0 0 0 0 0 500 0 0 0 0 0 0 0 3 0 2900\n"},
- {18902, "18902 (disk I/O) D 1 0 0 0 0 0 0 0 30000 0 0 0 0 0 0 0 3 0 897654\n"},
- {21345, "21345 (disk I/O) D 1 0 0 0 0 0 0 0 15000 0 0 0 0 0 0 0 3 0 904000\n"},
- {32452, "32452 (disk I/O) D 1 0 0 0 0 0 0 0 678 0 0 0 0 0 0 0 3 0 1007000\n"},
- {28900, "28900 (tombstoned) D 1 0 0 0 0 0 0 0 89765 0 0 0 0 0 0 0 3 0 2345671\n"},
- };
- struct ProcessIoPerfData expectedProcessIoPerfData = {};
- expectedProcessIoPerfData.topNIoBlockedUids.push_back({
- // uid: 1001000
- .userId = 10,
- .packageName = "shared:android.uid.system",
- .count = 4,
- .topNProcesses = {{"logd", 3}, {"system_server", 1}},
- });
- expectedProcessIoPerfData.topNIoBlockedUidsTotalTaskCnt.push_back(6);
- expectedProcessIoPerfData.topNIoBlockedUids.push_back({
- // uid: 1009
- .userId = 0,
- .packageName = "mount",
- .count = 3,
- .topNProcesses = {{"disk I/O", 3}},
- });
- expectedProcessIoPerfData.topNIoBlockedUidsTotalTaskCnt.push_back(3);
- expectedProcessIoPerfData.topNMajorFaultUids.push_back({
- // uid: 1001234
- .userId = 10,
- .packageName = "1001234",
- .count = 89765,
- .topNProcesses = {{"tombstoned", 89765}},
- });
- expectedProcessIoPerfData.topNMajorFaultUids.push_back({
- // uid: 1009
- .userId = 0,
- .packageName = "mount",
- .count = 45678,
- .topNProcesses = {{"disk I/O", 45678}},
- });
- expectedProcessIoPerfData.totalMajorFaults = 156663;
- expectedProcessIoPerfData.majorFaultsPercentChange = 0;
-
- TemporaryDir firstSnapshot;
- auto ret = populateProcPidDir(firstSnapshot.path, pidToTids, perProcessStat, perProcessStatus,
- perThreadStat);
- ASSERT_TRUE(ret) << "Failed to populate proc pid dir: " << ret.error();
-
- IoPerfCollection collector;
- collector.mProcPidStat = new ProcPidStat(firstSnapshot.path);
- collector.mTopNStatsPerCategory = 2;
- collector.mTopNStatsPerSubcategory = 2;
- ASSERT_TRUE(collector.mProcPidStat->enabled())
- << "Files under the temporary proc directory are inaccessible";
-
- struct ProcessIoPerfData actualProcessIoPerfData = {};
- ret = collector.collectProcessIoPerfDataLocked(CollectionInfo{}, &actualProcessIoPerfData);
- ASSERT_TRUE(ret) << "Failed to collect first snapshot: " << ret.error();
- EXPECT_TRUE(isEqual(expectedProcessIoPerfData, actualProcessIoPerfData))
- << "First snapshot doesn't match.\nExpected:\n"
- << toString(expectedProcessIoPerfData) << "\nActual:\n"
- << toString(actualProcessIoPerfData);
-
- pidToTids = {
- {1, {1, 453}},
- {2546, {2546, 3456, 4789}},
- };
- perProcessStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 880 0 0 0 0 0 0 0 2 0 0\n"},
- {2546, "2546 (system_server) R 1 0 0 0 0 0 0 0 18000 0 0 0 0 0 0 0 3 0 1000\n"},
- };
- perProcessStatus = {
- {1, "Pid:\t1\nTgid:\t1\nUid:\t0\t0\t0\t0\n"},
- {2546, "Pid:\t2546\nTgid:\t2546\nUid:\t1001000\t1001000\t1001000\t1001000\n"},
- };
- perThreadStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 800 0 0 0 0 0 0 0 2 0 0\n"},
- {453, "453 (init) S 0 0 0 0 0 0 0 0 80 0 0 0 0 0 0 0 2 0 275\n"},
- {2546, "2546 (system_server) R 1 0 0 0 0 0 0 0 3000 0 0 0 0 0 0 0 3 0 1000\n"},
- {3456, "3456 (system_server) S 1 0 0 0 0 0 0 0 9000 0 0 0 0 0 0 0 3 0 2300\n"},
- {4789, "4789 (system_server) D 1 0 0 0 0 0 0 0 6000 0 0 0 0 0 0 0 3 0 4500\n"},
- };
- expectedProcessIoPerfData = {};
- expectedProcessIoPerfData.topNIoBlockedUids.push_back({
- // uid: 1001000
- .userId = 10,
- .packageName = "shared:android.uid.system",
- .count = 1,
- .topNProcesses = {{"system_server", 1}},
- });
- expectedProcessIoPerfData.topNIoBlockedUidsTotalTaskCnt.push_back(3);
- expectedProcessIoPerfData.topNMajorFaultUids.push_back({
- // uid: 1001000
- .userId = 10,
- .packageName = "shared:android.uid.system",
- .count = 12000,
- .topNProcesses = {{"system_server", 12000}},
- });
- expectedProcessIoPerfData.topNMajorFaultUids.push_back({
- // uid: 0
- .userId = 0,
- .packageName = "root",
- .count = 660,
- .topNProcesses = {{"init", 660}},
- });
- expectedProcessIoPerfData.totalMajorFaults = 12660;
- expectedProcessIoPerfData.majorFaultsPercentChange = ((12660.0 - 156663.0) / 156663.0) * 100;
-
- TemporaryDir secondSnapshot;
- ret = populateProcPidDir(secondSnapshot.path, pidToTids, perProcessStat, perProcessStatus,
- perThreadStat);
- ASSERT_TRUE(ret) << "Failed to populate proc pid dir: " << ret.error();
-
- collector.mProcPidStat->mPath = secondSnapshot.path;
-
- actualProcessIoPerfData = {};
- ret = collector.collectProcessIoPerfDataLocked(CollectionInfo{}, &actualProcessIoPerfData);
- ASSERT_TRUE(ret) << "Failed to collect second snapshot: " << ret.error();
- EXPECT_TRUE(isEqual(expectedProcessIoPerfData, actualProcessIoPerfData))
- << "Second snapshot doesn't match.\nExpected:\n"
- << toString(expectedProcessIoPerfData) << "\nActual:\n"
- << toString(actualProcessIoPerfData);
-}
-
-TEST(IoPerfCollectionTest, TestProcPidContentsLessThanTopNStatsLimit) {
- std::unordered_map<uint32_t, std::vector<uint32_t>> pidToTids = {
- {1, {1, 453}},
- };
- std::unordered_map<uint32_t, std::string> perProcessStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 880 0 0 0 0 0 0 0 2 0 0\n"},
- };
- std::unordered_map<uint32_t, std::string> perProcessStatus = {
- {1, "Pid:\t1\nTgid:\t1\nUid:\t0\t0\t0\t0\n"},
- };
- std::unordered_map<uint32_t, std::string> perThreadStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 800 0 0 0 0 0 0 0 2 0 0\n"},
- {453, "453 (init) S 0 0 0 0 0 0 0 0 80 0 0 0 0 0 0 0 2 0 275\n"},
- };
- struct ProcessIoPerfData expectedProcessIoPerfData = {};
- expectedProcessIoPerfData.topNMajorFaultUids.push_back({
- // uid: 0
- .userId = 0,
- .packageName = "root",
- .count = 880,
- .topNProcesses = {{"init", 880}},
- });
- expectedProcessIoPerfData.totalMajorFaults = 880;
- expectedProcessIoPerfData.majorFaultsPercentChange = 0.0;
-
- TemporaryDir prodDir;
- auto ret = populateProcPidDir(prodDir.path, pidToTids, perProcessStat, perProcessStatus,
- perThreadStat);
- ASSERT_TRUE(ret) << "Failed to populate proc pid dir: " << ret.error();
-
- IoPerfCollection collector;
- collector.mTopNStatsPerCategory = 5;
- collector.mTopNStatsPerSubcategory = 3;
- collector.mProcPidStat = new ProcPidStat(prodDir.path);
- struct ProcessIoPerfData actualProcessIoPerfData = {};
- ret = collector.collectProcessIoPerfDataLocked(CollectionInfo{}, &actualProcessIoPerfData);
- ASSERT_TRUE(ret) << "Failed to collect proc pid contents: " << ret.error();
- EXPECT_TRUE(isEqual(expectedProcessIoPerfData, actualProcessIoPerfData))
- << "proc pid contents don't match.\nExpected:\n"
- << toString(expectedProcessIoPerfData) << "\nActual:\n"
- << toString(actualProcessIoPerfData);
-}
-
-TEST(IoPerfCollectionTest, TestHandlesInvalidDumpArguments) {
- sp<IoPerfCollection> collector = new IoPerfCollection();
- collector->start();
- Vector<String16> args;
- args.push_back(String16(kStartCustomCollectionFlag));
- args.push_back(String16("Invalid flag"));
- args.push_back(String16("Invalid value"));
- ASSERT_FALSE(collector->onCustomCollection(-1, args).ok());
-
- args.clear();
- args.push_back(String16(kStartCustomCollectionFlag));
- args.push_back(String16(kIntervalFlag));
- args.push_back(String16("Invalid interval"));
- ASSERT_FALSE(collector->onCustomCollection(-1, args).ok());
-
- args.clear();
- args.push_back(String16(kStartCustomCollectionFlag));
- args.push_back(String16(kMaxDurationFlag));
- args.push_back(String16("Invalid duration"));
- ASSERT_FALSE(collector->onCustomCollection(-1, args).ok());
-
- args.clear();
- args.push_back(String16(kEndCustomCollectionFlag));
- args.push_back(String16(kMaxDurationFlag));
- args.push_back(String16(std::to_string(kTestCustomCollectionDuration.count()).c_str()));
- ASSERT_FALSE(collector->onCustomCollection(-1, args).ok());
-
- args.clear();
- args.push_back(String16("Invalid flag"));
- ASSERT_FALSE(collector->onCustomCollection(-1, args).ok());
- collector->terminate();
-}
-
-} // namespace watchdog
-} // namespace automotive
-} // namespace android
diff --git a/watchdog/server/tests/ProcPidStatTest.cpp b/watchdog/server/tests/ProcPidStatTest.cpp
deleted file mode 100644
index 6c9c394..0000000
--- a/watchdog/server/tests/ProcPidStatTest.cpp
+++ /dev/null
@@ -1,604 +0,0 @@
-/*
- * Copyright 2020 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.
- */
-
-#include "ProcPidStat.h"
-
-#include <android-base/file.h>
-#include <android-base/stringprintf.h>
-#include <inttypes.h>
-
-#include <algorithm>
-#include <string>
-
-#include "ProcPidDir.h"
-#include "gmock/gmock.h"
-
-namespace android {
-namespace automotive {
-namespace watchdog {
-
-using android::base::StringAppendF;
-using android::base::StringPrintf;
-using testing::populateProcPidDir;
-
-namespace {
-
-std::string toString(const PidStat& stat) {
- return StringPrintf("PID: %" PRIu32 ", PPID: %" PRIu32 ", Comm: %s, State: %s, "
- "Major page faults: %" PRIu64 ", Num threads: %" PRIu32
- ", Start time: %" PRIu64,
- stat.pid, stat.ppid, stat.comm.c_str(), stat.state.c_str(),
- stat.majorFaults, stat.numThreads, stat.startTime);
-}
-
-std::string toString(const ProcessStats& stats) {
- std::string buffer;
- StringAppendF(&buffer, "Tgid: %" PRIi64 ", UID: %" PRIi64 ", %s\n", stats.tgid, stats.uid,
- toString(stats.process).c_str());
- StringAppendF(&buffer, "\tThread stats:\n");
- for (const auto& it : stats.threads) {
- StringAppendF(&buffer, "\t\t%s\n", toString(it.second).c_str());
- }
- StringAppendF(&buffer, "\n");
- return buffer;
-}
-
-std::string toString(const std::vector<ProcessStats>& stats) {
- std::string buffer;
- StringAppendF(&buffer, "Number of processes: %d\n", static_cast<int>(stats.size()));
- for (const auto& it : stats) {
- StringAppendF(&buffer, "%s", toString(it).c_str());
- }
- return buffer;
-}
-
-bool isEqual(const PidStat& lhs, const PidStat& rhs) {
- return lhs.pid == rhs.pid && lhs.comm == rhs.comm && lhs.state == rhs.state &&
- lhs.ppid == rhs.ppid && lhs.majorFaults == rhs.majorFaults &&
- lhs.numThreads == rhs.numThreads && lhs.startTime == rhs.startTime;
-}
-
-bool isEqual(std::vector<ProcessStats>* lhs, std::vector<ProcessStats>* rhs) {
- if (lhs->size() != rhs->size()) {
- return false;
- }
- std::sort(lhs->begin(), lhs->end(), [&](const ProcessStats& l, const ProcessStats& r) -> bool {
- return l.process.pid < r.process.pid;
- });
- std::sort(rhs->begin(), rhs->end(), [&](const ProcessStats& l, const ProcessStats& r) -> bool {
- return l.process.pid < r.process.pid;
- });
- return std::equal(lhs->begin(), lhs->end(), rhs->begin(),
- [&](const ProcessStats& l, const ProcessStats& r) -> bool {
- if (l.tgid != r.tgid || l.uid != r.uid ||
- !isEqual(l.process, r.process) ||
- l.threads.size() != r.threads.size()) {
- return false;
- }
- for (const auto& lIt : l.threads) {
- const auto& rIt = r.threads.find(lIt.first);
- if (rIt == r.threads.end()) {
- return false;
- }
- if (!isEqual(lIt.second, rIt->second)) {
- return false;
- }
- }
- return true;
- });
-}
-
-} // namespace
-
-TEST(ProcPidStatTest, TestValidStatFiles) {
- std::unordered_map<uint32_t, std::vector<uint32_t>> pidToTids = {
- {1, {1, 453}},
- {1000, {1000, 1100}},
- };
-
- std::unordered_map<uint32_t, std::string> perProcessStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 220 0 0 0 0 0 0 0 2 0 0\n"},
- {1000, "1000 (system_server) R 1 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 2 0 1000\n"},
- };
-
- std::unordered_map<uint32_t, std::string> perProcessStatus = {
- {1, "Pid:\t1\nTgid:\t1\nUid:\t0\t0\t0\t0\n"},
- {1000, "Pid:\t1000\nTgid:\t1000\nUid:\t10001234\t10001234\t10001234\t10001234\n"},
- };
-
- std::unordered_map<uint32_t, std::string> perThreadStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 2 0 0\n"},
- {453, "453 (init) S 0 0 0 0 0 0 0 0 20 0 0 0 0 0 0 0 2 0 275\n"},
- {1000, "1000 (system_server) R 1 0 0 0 0 0 0 0 250 0 0 0 0 0 0 0 2 0 1000\n"},
- {1100, "1100 (system_server) S 1 0 0 0 0 0 0 0 350 0 0 0 0 0 0 0 2 0 1200\n"},
- };
-
- std::vector<ProcessStats> expected = {
- {
- .tgid = 1,
- .uid = 0,
- .process = {1, "init", "S", 0, 220, 2, 0},
- .threads =
- {
- {1, {1, "init", "S", 0, 200, 2, 0}},
- {453, {453, "init", "S", 0, 20, 2, 275}},
- },
- },
- {
- .tgid = 1000,
- .uid = 10001234,
- .process = {1000, "system_server", "R", 1, 600, 2, 1000},
- .threads =
- {
- {1000, {1000, "system_server", "R", 1, 250, 2, 1000}},
- {1100, {1100, "system_server", "S", 1, 350, 2, 1200}},
- },
- },
- };
-
- TemporaryDir firstSnapshot;
- auto ret = populateProcPidDir(firstSnapshot.path, pidToTids, perProcessStat, perProcessStatus,
- perThreadStat);
- ASSERT_TRUE(ret) << "Failed to populate proc pid dir: " << ret.error();
-
- ProcPidStat procPidStat(firstSnapshot.path);
- ASSERT_TRUE(procPidStat.enabled())
- << "Files under the path `" << firstSnapshot.path << "` are inaccessible";
-
- auto actual = procPidStat.collect();
- ASSERT_TRUE(actual) << "Failed to collect proc pid stat: " << actual.error();
-
- EXPECT_TRUE(isEqual(&expected, &actual.value())) << "First snapshot doesn't match.\nExpected:\n"
- << toString(expected) << "\nActual:\n"
- << toString(*actual);
-
- pidToTids = {
- {1, {1, 453}}, {1000, {1000, 1400}}, // TID 1100 terminated and 1400 instantiated.
- };
-
- perProcessStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 920 0 0 0 0 0 0 0 2 0 0\n"},
- {1000, "1000 (system_server) R 1 0 0 0 0 0 0 0 1550 0 0 0 0 0 0 0 2 0 1000\n"},
- };
-
- perThreadStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 2 0 0\n"},
- {453, "453 (init) S 0 0 0 0 0 0 0 0 320 0 0 0 0 0 0 0 2 0 275\n"},
- {1000, "1000 (system_server) R 1 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 2 0 1000\n"},
- // TID 1100 hits +400 major page faults before terminating. This is counted against
- // PID 1000's perProcessStat.
- {1400, "1400 (system_server) S 1 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 2 0 8977476\n"},
- };
-
- expected = {
- {
- .tgid = 1,
- .uid = 0,
- .process = {1, "init", "S", 0, 700, 2, 0},
- .threads =
- {
- {1, {1, "init", "S", 0, 400, 2, 0}},
- {453, {453, "init", "S", 0, 300, 2, 275}},
- },
- },
- {
- .tgid = 1000,
- .uid = 10001234,
- .process = {1000, "system_server", "R", 1, 950, 2, 1000},
- .threads =
- {
- {1000, {1000, "system_server", "R", 1, 350, 2, 1000}},
- {1400, {1400, "system_server", "S", 1, 200, 2, 8977476}},
- },
- },
- };
-
- TemporaryDir secondSnapshot;
- ret = populateProcPidDir(secondSnapshot.path, pidToTids, perProcessStat, perProcessStatus,
- perThreadStat);
- ASSERT_TRUE(ret) << "Failed to populate proc pid dir: " << ret.error();
-
- procPidStat.mPath = secondSnapshot.path;
- ASSERT_TRUE(procPidStat.enabled())
- << "Files under the path `" << secondSnapshot.path << "` are inaccessible";
-
- actual = procPidStat.collect();
- ASSERT_TRUE(actual) << "Failed to collect proc pid stat: " << actual.error();
-
- EXPECT_TRUE(isEqual(&expected, &actual.value()))
- << "Second snapshot doesn't match.\nExpected:\n"
- << toString(expected) << "\nActual:\n"
- << toString(*actual);
-}
-
-TEST(ProcPidStatTest, TestHandlesProcessTerminationBetweenScanningAndParsing) {
- std::unordered_map<uint32_t, std::vector<uint32_t>> pidToTids = {
- {1, {1}},
- {100, {100}}, // Process terminates after scanning PID directory.
- {1000, {1000}}, // Process terminates after reading stat file.
- {2000, {2000}}, // Process terminates after scanning task directory.
- {3000, {3000, 3300}}, // TID 3300 terminates after scanning task directory.
- };
-
- std::unordered_map<uint32_t, std::string> perProcessStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 220 0 0 0 0 0 0 0 1 0 0\n"},
- // Process 100 terminated.
- {1000, "1000 (system_server) R 1 0 0 0 0 0 0 0 600 0 0 0 0 0 0 0 1 0 1000\n"},
- {2000, "2000 (logd) R 1 0 0 0 0 0 0 0 1200 0 0 0 0 0 0 0 1 0 4567\n"},
- {3000, "3000 (disk I/O) R 1 0 0 0 0 0 0 0 10300 0 0 0 0 0 0 0 2 0 67890\n"},
- };
-
- std::unordered_map<uint32_t, std::string> perProcessStatus = {
- {1, "Pid:\t1\nTgid:\t1\nUid:\t0\t0\t0\t0\n"},
- // Process 1000 terminated.
- {2000, "Pid:\t2000\nTgid:\t2000\nUid:\t10001234\t10001234\t10001234\t10001234\n"},
- {3000, "Pid:\t3000\nTgid:\t3000\nUid:\t10001234\t10001234\t10001234\t10001234\n"},
- };
-
- std::unordered_map<uint32_t, std::string> perThreadStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 1 0 0\n"},
- // Process 2000 terminated.
- {3000, "3000 (disk I/O) R 1 0 0 0 0 0 0 0 2400 0 0 0 0 0 0 0 2 0 67890\n"},
- // TID 3300 terminated.
- };
-
- std::vector<ProcessStats> expected = {
- {
- .tgid = 1,
- .uid = 0,
- .process = {1, "init", "S", 0, 220, 1, 0},
- .threads = {{1, {1, "init", "S", 0, 200, 1, 0}}},
- },
- {
- .tgid = -1,
- .uid = -1,
- .process = {1000, "system_server", "R", 1, 600, 1, 1000},
- // Stats common between process and main-thread are copied when
- // main-thread stats are not available.
- .threads = {{1000, {1000, "system_server", "R", 1, 0, 1, 1000}}},
- },
- {
- .tgid = 2000,
- .uid = 10001234,
- .process = {2000, "logd", "R", 1, 1200, 1, 4567},
- .threads = {{2000, {2000, "logd", "R", 1, 0, 1, 4567}}},
- },
- {
- .tgid = 3000,
- .uid = 10001234,
- .process = {3000, "disk I/O", "R", 1, 10300, 2, 67890},
- .threads = {{3000, {3000, "disk I/O", "R", 1, 2400, 2, 67890}}},
- },
- };
-
- TemporaryDir procDir;
- const auto& ret = populateProcPidDir(procDir.path, pidToTids, perProcessStat, perProcessStatus,
- perThreadStat);
- ASSERT_TRUE(ret) << "Failed to populate proc pid dir: " << ret.error();
-
- ProcPidStat procPidStat(procDir.path);
- ASSERT_TRUE(procPidStat.enabled())
- << "Files under the path `" << procDir.path << "` are inaccessible";
-
- auto actual = procPidStat.collect();
- ASSERT_TRUE(actual) << "Failed to collect proc pid stat: " << actual.error();
-
- EXPECT_TRUE(isEqual(&expected, &actual.value()))
- << "Proc pid contents doesn't match.\nExpected:\n"
- << toString(expected) << "\nActual:\n"
- << toString(*actual);
-}
-
-TEST(ProcPidStatTest, TestHandlesPidTidReuse) {
- std::unordered_map<uint32_t, std::vector<uint32_t>> pidToTids = {
- {1, {1, 367, 453, 589}},
- {1000, {1000}},
- {2345, {2345}},
- };
-
- std::unordered_map<uint32_t, std::string> perProcessStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 1200 0 0 0 0 0 0 0 4 0 0\n"},
- {1000, "1000 (system_server) R 1 0 0 0 0 0 0 0 250 0 0 0 0 0 0 0 1 0 1000\n"},
- {2345, "2345 (logd) R 1 0 0 0 0 0 0 0 54354 0 0 0 0 0 0 0 1 0 456\n"},
- };
-
- std::unordered_map<uint32_t, std::string> perProcessStatus = {
- {1, "Pid:\t1\nTgid:\t1\nUid:\t0\t0\t0\t0\n"},
- {1000, "Pid:\t1000\nTgid:\t1000\nUid:\t10001234\t10001234\t10001234\t10001234\n"},
- {2345, "Pid:\t2345\nTgid:\t2345\nUid:\t10001234\t10001234\t10001234\t10001234\n"},
- };
-
- std::unordered_map<uint32_t, std::string> perThreadStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 4 0 0\n"},
- {367, "367 (init) S 0 0 0 0 0 0 0 0 400 0 0 0 0 0 0 0 4 0 100\n"},
- {453, "453 (init) S 0 0 0 0 0 0 0 0 100 0 0 0 0 0 0 0 4 0 275\n"},
- {589, "589 (init) S 0 0 0 0 0 0 0 0 500 0 0 0 0 0 0 0 4 0 600\n"},
- {1000, "1000 (system_server) R 1 0 0 0 0 0 0 0 250 0 0 0 0 0 0 0 1 0 1000\n"},
- {2345, "2345 (logd) R 1 0 0 0 0 0 0 0 54354 0 0 0 0 0 0 0 1 0 456\n"},
- };
-
- std::vector<ProcessStats> expected = {
- {
- .tgid = 1,
- .uid = 0,
- .process = {1, "init", "S", 0, 1200, 4, 0},
- .threads =
- {
- {1, {1, "init", "S", 0, 200, 4, 0}},
- {367, {367, "init", "S", 0, 400, 4, 100}},
- {453, {453, "init", "S", 0, 100, 4, 275}},
- {589, {589, "init", "S", 0, 500, 4, 600}},
- },
- },
- {
- .tgid = 1000,
- .uid = 10001234,
- .process = {1000, "system_server", "R", 1, 250, 1, 1000},
- .threads = {{1000, {1000, "system_server", "R", 1, 250, 1, 1000}}},
- },
- {
- .tgid = 2345,
- .uid = 10001234,
- .process = {2345, "logd", "R", 1, 54354, 1, 456},
- .threads = {{2345, {2345, "logd", "R", 1, 54354, 1, 456}}},
- },
- };
-
- TemporaryDir firstSnapshot;
- auto ret = populateProcPidDir(firstSnapshot.path, pidToTids, perProcessStat, perProcessStatus,
- perThreadStat);
- ASSERT_TRUE(ret) << "Failed to populate proc pid dir: " << ret.error();
-
- ProcPidStat procPidStat(firstSnapshot.path);
- ASSERT_TRUE(procPidStat.enabled())
- << "Files under the path `" << firstSnapshot.path << "` are inaccessible";
-
- auto actual = procPidStat.collect();
- ASSERT_TRUE(actual) << "Failed to collect proc pid stat: " << actual.error();
-
- EXPECT_TRUE(isEqual(&expected, &actual.value())) << "First snapshot doesn't match.\nExpected:\n"
- << toString(expected) << "\nActual:\n"
- << toString(*actual);
-
- pidToTids = {
- {1, {1, 589}}, // TID 589 reused by the same process.
- {367, {367, 2000}}, // TID 367 reused as a PID. PID 2000 reused as a TID.
- // PID 1000 reused as a new PID. TID 453 reused by a different PID.
- {1000, {1000, 453}},
- };
-
- perProcessStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 1800 0 0 0 0 0 0 0 2 0 0\n"},
- {367, "367 (system_server) R 1 0 0 0 0 0 0 0 100 0 0 0 0 0 0 0 2 0 3450\n"},
- {1000, "1000 (logd) R 1 0 0 0 0 0 0 0 2000 0 0 0 0 0 0 0 2 0 4650\n"},
- };
-
- perProcessStatus = {
- {1, "Pid:\t1\nTgid:\t1\nUid:\t0\t0\t0\t0\n"},
- {367, "Pid:\t367\nTgid:\t367\nUid:\t10001234\t10001234\t10001234\t10001234\n"},
- {1000, "Pid:\t1000\nTgid:\t1000\nUid:\t10001234\t10001234\t10001234\t10001234\n"},
- };
-
- perThreadStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 500 0 0 0 0 0 0 0 2 0 0\n"},
- {589, "589 (init) S 0 0 0 0 0 0 0 0 300 0 0 0 0 0 0 0 2 0 2345\n"},
- {367, "367 (system_server) R 1 0 0 0 0 0 0 0 50 0 0 0 0 0 0 0 2 0 3450\n"},
- {2000, "2000 (system_server) R 1 0 0 0 0 0 0 0 50 0 0 0 0 0 0 0 2 0 3670\n"},
- {1000, "1000 (logd) R 1 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 2 0 4650\n"},
- {453, "453 (logd) D 1 0 0 0 0 0 0 0 1800 0 0 0 0 0 0 0 2 0 4770\n"},
- };
-
- expected = {
- {
- .tgid = 1,
- .uid = 0,
- .process = {1, "init", "S", 0, 600, 2, 0},
- .threads =
- {
- {1, {1, "init", "S", 0, 300, 2, 0}},
- {589, {589, "init", "S", 0, 300, 2, 2345}},
- },
- },
- {
- .tgid = 367,
- .uid = 10001234,
- .process = {367, "system_server", "R", 1, 100, 2, 3450},
- .threads =
- {
- {367, {367, "system_server", "R", 1, 50, 2, 3450}},
- {2000, {2000, "system_server", "R", 1, 50, 2, 3670}},
- },
- },
- {
- .tgid = 1000,
- .uid = 10001234,
- .process = {1000, "logd", "R", 1, 2000, 2, 4650},
- .threads =
- {
- {1000, {1000, "logd", "R", 1, 200, 2, 4650}},
- {453, {453, "logd", "D", 1, 1800, 2, 4770}},
- },
- },
- };
-
- TemporaryDir secondSnapshot;
- ret = populateProcPidDir(secondSnapshot.path, pidToTids, perProcessStat, perProcessStatus,
- perThreadStat);
- ASSERT_TRUE(ret) << "Failed to populate proc pid dir: " << ret.error();
-
- procPidStat.mPath = secondSnapshot.path;
- ASSERT_TRUE(procPidStat.enabled())
- << "Files under the path `" << secondSnapshot.path << "` are inaccessible";
-
- actual = procPidStat.collect();
- ASSERT_TRUE(actual) << "Failed to collect proc pid stat: " << actual.error();
-
- EXPECT_TRUE(isEqual(&expected, &actual.value()))
- << "Second snapshot doesn't match.\nExpected:\n"
- << toString(expected) << "\nActual:\n"
- << toString(*actual);
-}
-
-TEST(ProcPidStatTest, TestErrorOnCorruptedProcessStatFile) {
- std::unordered_map<uint32_t, std::vector<uint32_t>> pidToTids = {
- {1, {1}},
- };
-
- std::unordered_map<uint32_t, std::string> perProcessStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 200 0 0 0 CORRUPTED DATA\n"},
- };
-
- std::unordered_map<uint32_t, std::string> perProcessStatus = {
- {1, "Pid:\t1\nTgid:\t1\nUid:\t0\t0\t0\t0\n"},
- };
-
- std::unordered_map<uint32_t, std::string> perThreadStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 1 0 0\n"},
- };
-
- TemporaryDir procDir;
- const auto& ret = populateProcPidDir(procDir.path, pidToTids, perProcessStat, perProcessStatus,
- perThreadStat);
- ASSERT_TRUE(ret) << "Failed to populate proc pid dir: " << ret.error();
-
- ProcPidStat procPidStat(procDir.path);
- ASSERT_TRUE(procPidStat.enabled())
- << "Files under the path `" << procDir.path << "` are inaccessible";
-
- const auto& actual = procPidStat.collect();
- ASSERT_FALSE(actual) << "No error returned for invalid process stat file";
-}
-
-TEST(ProcPidStatTest, TestErrorOnCorruptedProcessStatusFile) {
- std::unordered_map<uint32_t, std::vector<uint32_t>> pidToTids = {
- {1, {1}},
- };
-
- std::unordered_map<uint32_t, std::string> perProcessStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 1 0 0\n"},
- };
-
- std::unordered_map<uint32_t, std::string> perProcessStatus = {
- {1, "Pid:\t1\nTgid:\t1\nCORRUPTED DATA\n"},
- };
-
- std::unordered_map<uint32_t, std::string> perThreadStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 1 0 0\n"},
- };
-
- TemporaryDir procDir;
- const auto& ret = populateProcPidDir(procDir.path, pidToTids, perProcessStat, perProcessStatus,
- perThreadStat);
- ASSERT_TRUE(ret) << "Failed to populate proc pid dir: " << ret.error();
-
- ProcPidStat procPidStat(procDir.path);
- ASSERT_TRUE(procPidStat.enabled())
- << "Files under the path `" << procDir.path << "` are inaccessible";
-
- const auto& actual = procPidStat.collect();
- ASSERT_FALSE(actual) << "No error returned for invalid process status file";
-}
-
-TEST(ProcPidStatTest, TestErrorOnCorruptedThreadStatFile) {
- std::unordered_map<uint32_t, std::vector<uint32_t>> pidToTids = {
- {1, {1}},
- };
-
- std::unordered_map<uint32_t, std::string> perProcessStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 1 0 0\n"},
- };
-
- std::unordered_map<uint32_t, std::string> perProcessStatus = {
- {1, "Pid:\t1\nTgid:\t1\nUid:\t0\t0\t0\t0\n"},
- };
-
- std::unordered_map<uint32_t, std::string> perThreadStat = {
- {1, "1 (init) S 0 0 0 0 0 0 0 0 200 0 0 0 CORRUPTED DATA\n"},
- };
-
- TemporaryDir procDir;
- const auto& ret = populateProcPidDir(procDir.path, pidToTids, perProcessStat, perProcessStatus,
- perThreadStat);
- ASSERT_TRUE(ret) << "Failed to populate proc pid dir: " << ret.error();
-
- ProcPidStat procPidStat(procDir.path);
- ASSERT_TRUE(procPidStat.enabled())
- << "Files under the path `" << procDir.path << "` are inaccessible";
-
- const auto& actual = procPidStat.collect();
- ASSERT_FALSE(actual) << "No error returned for invalid thread stat file";
-}
-
-TEST(ProcPidStatTest, TestHandlesSpaceInCommName) {
- std::unordered_map<uint32_t, std::vector<uint32_t>> pidToTids = {
- {1, {1}},
- };
-
- std::unordered_map<uint32_t, std::string> perProcessStat = {
- {1, "1 (random process name with space) S 0 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 1 0 0\n"},
- };
-
- std::unordered_map<uint32_t, std::string> perProcessStatus = {
- {1, "Pid:\t1\nTgid:\t1\nUid:\t0\t0\t0\t0\n"},
- };
-
- std::unordered_map<uint32_t, std::string> perThreadStat = {
- {1, "1 (random process name with space) S 0 0 0 0 0 0 0 0 200 0 0 0 0 0 0 0 1 0 0\n"},
- };
-
- std::vector<ProcessStats> expected = {
- {
- .tgid = 1,
- .uid = 0,
- .process = {1, "random process name with space", "S", 0, 200, 1, 0},
- .threads = {{1, {1, "random process name with space", "S", 0, 200, 1, 0}}},
- },
- };
-
- TemporaryDir procDir;
- const auto& ret = populateProcPidDir(procDir.path, pidToTids, perProcessStat, perProcessStatus,
- perThreadStat);
- ASSERT_TRUE(ret) << "Failed to populate proc pid dir: " << ret.error();
-
- ProcPidStat procPidStat(procDir.path);
- ASSERT_TRUE(procPidStat.enabled())
- << "Files under the path `" << procDir.path << "` are inaccessible";
-
- auto actual = procPidStat.collect();
- ASSERT_TRUE(actual) << "Failed to collect proc pid stat: " << actual.error();
-
- EXPECT_TRUE(isEqual(&expected, &actual.value()))
- << "Proc pid contents doesn't match.\nExpected:\n"
- << toString(expected) << "\nActual:\n"
- << toString(*actual);
-}
-
-TEST(ProcPidStatTest, TestProcPidStatContentsFromDevice) {
- // TODO(b/148486340): Enable the test after appropriate SELinux privileges are available to
- // read the proc file.
- /*ProcPidStat procPidStat;
- ASSERT_TRUE(procPidStat.enabled()) << "/proc/[pid]/.* files are inaccessible";
-
- const auto& processStats = procPidStat.collect();
- ASSERT_TRUE(processStats) << "Failed to collect proc pid stat: " << processStats.error();
-
- // The below check should pass because there should be at least one process.
- EXPECT_GT(processStats->size(), 0);*/
-}
-
-} // namespace watchdog
-} // namespace automotive
-} // namespace android